<?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>143954</bug_id>
          
          <creation_ts>2015-04-20 10:30:06 -0700</creation_ts>
          <short_desc>Refactor WebKit1 specific threading code out of WebVideoFullscreen code that is shared with WebKit2.</short_desc>
          <delta_ts>2015-06-22 13:03:13 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Media</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>iPhone / iPad</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jeremy Jones">jeremyj-wk</reporter>
          <assigned_to name="Jeremy Jones">jeremyj-wk</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>jer.noble</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1086815</commentid>
    <comment_count>0</comment_count>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2015-04-20 10:30:06 -0700</bug_when>
    <thetext>Refactor WebKit1 specific threading code out of WebVideoFullscreen code that is shared with WebKit2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086822</commentid>
    <comment_count>1</comment_count>
      <attachid>251167</attachid>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2015-04-20 10:58:53 -0700</bug_when>
    <thetext>Created attachment 251167
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095331</commentid>
    <comment_count>2</comment_count>
      <attachid>253248</attachid>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2015-05-15 17:45:25 -0700</bug_when>
    <thetext>Created attachment 253248
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095334</commentid>
    <comment_count>3</comment_count>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2015-05-15 17:46:59 -0700</bug_when>
    <thetext>*** Bug 145086 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095335</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-15 17:47:23 -0700</bug_when>
    <thetext>Attachment 253248 did not pass style-queue:


ERROR: Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:1015:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:1021:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:1167:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:531:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 4 in 5 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>1095337</commentid>
    <comment_count>5</comment_count>
      <attachid>253250</attachid>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2015-05-15 17:52:16 -0700</bug_when>
    <thetext>Created attachment 253250
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095338</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-15 17:54:24 -0700</bug_when>
    <thetext>Attachment 253250 did not pass style-queue:


ERROR: Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:1015:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:1021:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:1167:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 3 in 5 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>1095484</commentid>
    <comment_count>7</comment_count>
      <attachid>253250</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-05-17 10:23:34 -0700</bug_when>
    <thetext>Comment on attachment 253250
Patch

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

I’m going to say review- because there are many small thread safety mistakes. Otherwise, this patch looks good to me.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:81
&gt; +class WebVideoFullscreenControllerContext
&gt; +: public WebVideoFullscreenInterface
&gt; +, public WebVideoFullscreenModel
&gt; +, public WebVideoFullscreenChangeObserver
&gt; +, public ThreadSafeRefCounted&lt;WebVideoFullscreenControllerContext&gt; {

This is not the traditional formatting for this in WebKit. You should either indent this all by 4 spaces, or put it all on one single super-long line.

Might also consider if any of the inheritance can be private or protected rather than public.

Can we mark this class final?

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:90
&gt; +private:
&gt; +    RefPtr&lt;WebVideoFullscreenInterfaceAVKit&gt; m_interface;
&gt; +    RefPtr&lt;WebVideoFullscreenModelVideoElement&gt; m_model;
&gt; +    RefPtr&lt;HTMLVideoElement&gt; m_videoElement;
&gt; +    RetainPtr&lt;PlatformLayer&gt; m_videoFullscreenLayer;
&gt; +    RetainPtr&lt;WebVideoFullscreenController&gt; m_controller;
&gt; +    FloatRect m_frame;
&gt; +    VideoGravity m_gravity;

In WebKit class definitions we normally put the data members last, not at the start.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:92
&gt; +    WebVideoFullscreenControllerContext() { };

Extra semicolon here. Also, we normally put everything private after everything public.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:97
&gt; +        return adoptRef(*new WebVideoFullscreenControllerContext());

Could omit the () here.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:140
&gt; +    // WebVideoFullscreenChangeObserver
&gt; +    virtual void didSetupFullscreen() override;
&gt; +    virtual void didEnterFullscreen() override { }
&gt; +    virtual void didExitFullscreen() override;
&gt; +    virtual void didCleanupFullscreen() override;
&gt; +    virtual void fullscreenMayReturnToInline() override;
&gt; +    
&gt; +    // WebVideoFullscreenInterface
&gt; +    virtual void resetMediaState() override;
&gt; +    virtual void setDuration(double) override;
&gt; +    virtual void setCurrentTime(double currentTime, double anchorTime) override;
&gt; +    virtual void setBufferedTime(double) override;
&gt; +    virtual void setRate(bool isPlaying, float playbackRate) override;
&gt; +    virtual void setVideoDimensions(bool hasVideo, float width, float height) override;
&gt; +    virtual void setSeekableRanges(const TimeRanges&amp;) override;
&gt; +    virtual void setCanPlayFastReverse(bool) override;
&gt; +    virtual void setAudioMediaSelectionOptions(const Vector&lt;WTF::String&gt;&amp; options, uint64_t selectedIndex) override;
&gt; +    virtual void setLegibleMediaSelectionOptions(const Vector&lt;WTF::String&gt;&amp; options, uint64_t selectedIndex) override;
&gt; +    virtual void setExternalPlayback(bool enabled, ExternalPlaybackTargetType, WTF::String localizedDeviceName) override;
&gt; +    
&gt; +    // WebVideoFullscreenModel
&gt; +    virtual void play() override;
&gt; +    virtual void pause() override;
&gt; +    virtual void togglePlayState() override;
&gt; +    virtual void beginScrubbing() override;
&gt; +    virtual void endScrubbing() override;
&gt; +    virtual void seekToTime(double time) override;
&gt; +    virtual void fastSeek(double time) override;
&gt; +    virtual void beginScanningForward() override;
&gt; +    virtual void beginScanningBackward() override;
&gt; +    virtual void endScanning() override;
&gt; +    virtual void requestExitFullscreen() override;
&gt; +    virtual void setVideoLayerFrame(FloatRect) override;
&gt; +    virtual FloatRect videoLayerFrame() const override { return m_frame; }
&gt; +    virtual void setVideoLayerGravity(WebVideoFullscreenModel::VideoGravity) override;
&gt; +    virtual VideoGravity videoLayerGravity() const override { return m_gravity; }
&gt; +    virtual void selectAudioMediaOption(uint64_t index) override;
&gt; +    virtual void selectLegibleMediaOption(uint64_t index) override;
&gt; +    virtual void fullscreenModeChanged(HTMLMediaElement::VideoFullscreenMode) override;

I think all these overrides should be private instead of public.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:143
&gt; +    void setupFullscreen(HTMLVideoElement*, UIView *, HTMLMediaElement::VideoFullscreenMode);

The verb &quot;set up&quot; is two words, so it should be &quot;setUp&quot; not &quot;setup&quot;. Not sure if we mean &quot;fullscreen&quot; to be one word or two. I imagine HTMLVideoElement is required to be non-null here and if so, it should be HTMLVideoElement&amp; instead of *.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:277
&gt; +    RefPtr&lt;TimeRanges&gt; timeRangesRef = timeRanges.copy();
&gt; +    dispatch_async(dispatch_get_main_queue(), [strongThis, this, timeRangesRef] {
&gt; +        if (m_interface)
&gt; +            m_interface-&gt;setSeekableRanges(*timeRangesRef.get());
&gt; +    });

Unless there is something magic about the web thread and main thread that I don’t understand, I am pretty sure this isn’t thread safe.

The code will manipulate the reference count of timeRangesRef both on the web thread and the main thread, and the two could try to access it at the same time; ~RefPtr on the web thread and ~RefPtr on the main thread for example. I see here that we are trying to copy the time ranges in an effort to avoid this problem, but unfortunately it won’t. Antti solved this for WTF::String with the class StringCapture, but replicating something like that for time ranges is probably overkill.

I can think of three ways to avoid this problem:

1) Use a raw pointer instead of a RefPtr, doing an explicit leakRef and then balancing that out with either adoptRef or deref in the lambda.
2) Make TimeRanges use ThreadSafeRefCounted. Annoying because it could be costly for all uses of TimeRanges.
3) Write the equivalent of StringCapture for TimeRanges.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:290
&gt; +void WebVideoFullscreenControllerContext::setAudioMediaSelectionOptions(const Vector&lt;WTF::String&gt;&amp; options, uint64_t selectedIndex)

Should just be String, not WTF::String.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:297
&gt; +    dispatch_async(dispatch_get_main_queue(), [strongThis, this, options, selectedIndex] {
&gt; +        if (m_interface)
&gt; +            m_interface-&gt;setAudioMediaSelectionOptions(options, selectedIndex);
&gt; +    });

Unless there is something magic about the web thread and main thread that I don’t understand, I am pretty sure this isn’t thread safe. Since options is a vector of strings with non-thread-safe reference counts, we have to make isolated copies of them to move them across threads. One way to avoid the problem would be to make an isolated copy of the vector and pass that over to the other thread. The old code avoided this by making an NSArray of NSString copy of the vector, which was safe since Objective-C reference counts are all thread safe.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:300
&gt; +void WebVideoFullscreenControllerContext::setLegibleMediaSelectionOptions(const Vector&lt;WTF::String&gt;&amp; options, uint64_t selectedIndex)

Should be String, not WTF::String.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:307
&gt; +    dispatch_async(dispatch_get_main_queue(), [strongThis, this, options, selectedIndex] {
&gt; +        if (m_interface)
&gt; +            m_interface-&gt;setLegibleMediaSelectionOptions(options, selectedIndex);
&gt; +    });

Same problem as above for options.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:314
&gt; +    dispatch_async(dispatch_get_main_queue(), [strongThis, this, enabled, type, localizedDeviceName] {

Unless there is something magic about the web thread and main thread that I don’t understand, I am pretty sure this isn’t thread safe. Need to use StringCapture to safely pass localizedDeviceName across threads. Plenty of examples of how to do that if you grep for StringCapture.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:506
&gt; +        RefPtr&lt;WebVideoFullscreenControllerContext&gt; strongThis(this);

Don’t need another strongThis. Can just capture the one that already exists.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:577
&gt; +    UNUSED_PARAM(context);

Might be more elegant to do:

    ASSERT_UNUSED(context, context == _context);

Unless that assertion is not guaranteed!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096730</commentid>
    <comment_count>8</comment_count>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2015-05-21 17:58:34 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Comment on attachment 253250 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=253250&amp;action=review
&gt; 
&gt; I’m going to say review- because there are many small thread safety
&gt; mistakes. Otherwise, this patch looks good to me.
&gt; 
&gt; &gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:81
&gt; &gt; +class WebVideoFullscreenControllerContext
&gt; &gt; +: public WebVideoFullscreenInterface
&gt; &gt; +, public WebVideoFullscreenModel
&gt; &gt; +, public WebVideoFullscreenChangeObserver
&gt; &gt; +, public ThreadSafeRefCounted&lt;WebVideoFullscreenControllerContext&gt; {
&gt; 
&gt; This is not the traditional formatting for this in WebKit. You should either
&gt; indent this all by 4 spaces, or put it all on one single super-long line.

Indention added.

&gt; 
&gt; Might also consider if any of the inheritance can be private or protected
&gt; rather than public.

All inheritance marked private except ThreadSafeRef.

&gt; 
&gt; Can we mark this class final?

Marked final.

&gt; 
&gt; &gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:90
&gt; &gt; +private:
&gt; &gt; +    RefPtr&lt;WebVideoFullscreenInterfaceAVKit&gt; m_interface;
&gt; &gt; +    RefPtr&lt;WebVideoFullscreenModelVideoElement&gt; m_model;
&gt; &gt; +    RefPtr&lt;HTMLVideoElement&gt; m_videoElement;
&gt; &gt; +    RetainPtr&lt;PlatformLayer&gt; m_videoFullscreenLayer;
&gt; &gt; +    RetainPtr&lt;WebVideoFullscreenController&gt; m_controller;
&gt; &gt; +    FloatRect m_frame;
&gt; &gt; +    VideoGravity m_gravity;
&gt; 
&gt; In WebKit class definitions we normally put the data members last, not at
&gt; the start.

Data members moved to the bottom.

&gt; 
&gt; &gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:92
&gt; &gt; +    WebVideoFullscreenControllerContext() { };
&gt; 
&gt; Extra semicolon here. Also, we normally put everything private after
&gt; everything public.

Semicolon moved. Private methods and data moved to the bottom. 

&gt; 
&gt; &gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:97
&gt; &gt; +        return adoptRef(*new WebVideoFullscreenControllerContext());
&gt; 
&gt; Could omit the () here.

Parens removed.

&gt; 
&gt; &gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:140
&gt; &gt; +    // WebVideoFullscreenChangeObserver
&gt; &gt; +    virtual void didSetupFullscreen() override;
&gt; &gt; +    virtual void didEnterFullscreen() override { }
&gt; &gt; +    virtual void didExitFullscreen() override;
&gt; &gt; +    virtual void didCleanupFullscreen() override;
&gt; &gt; +    virtual void fullscreenMayReturnToInline() override;
&gt; &gt; +    
&gt; &gt; +    // WebVideoFullscreenInterface
&gt; &gt; +    virtual void resetMediaState() override;
&gt; &gt; +    virtual void setDuration(double) override;
&gt; &gt; +    virtual void setCurrentTime(double currentTime, double anchorTime) override;
&gt; &gt; +    virtual void setBufferedTime(double) override;
&gt; &gt; +    virtual void setRate(bool isPlaying, float playbackRate) override;
&gt; &gt; +    virtual void setVideoDimensions(bool hasVideo, float width, float height) override;
&gt; &gt; +    virtual void setSeekableRanges(const TimeRanges&amp;) override;
&gt; &gt; +    virtual void setCanPlayFastReverse(bool) override;
&gt; &gt; +    virtual void setAudioMediaSelectionOptions(const Vector&lt;WTF::String&gt;&amp; options, uint64_t selectedIndex) override;
&gt; &gt; +    virtual void setLegibleMediaSelectionOptions(const Vector&lt;WTF::String&gt;&amp; options, uint64_t selectedIndex) override;
&gt; &gt; +    virtual void setExternalPlayback(bool enabled, ExternalPlaybackTargetType, WTF::String localizedDeviceName) override;
&gt; &gt; +    
&gt; &gt; +    // WebVideoFullscreenModel
&gt; &gt; +    virtual void play() override;
&gt; &gt; +    virtual void pause() override;
&gt; &gt; +    virtual void togglePlayState() override;
&gt; &gt; +    virtual void beginScrubbing() override;
&gt; &gt; +    virtual void endScrubbing() override;
&gt; &gt; +    virtual void seekToTime(double time) override;
&gt; &gt; +    virtual void fastSeek(double time) override;
&gt; &gt; +    virtual void beginScanningForward() override;
&gt; &gt; +    virtual void beginScanningBackward() override;
&gt; &gt; +    virtual void endScanning() override;
&gt; &gt; +    virtual void requestExitFullscreen() override;
&gt; &gt; +    virtual void setVideoLayerFrame(FloatRect) override;
&gt; &gt; +    virtual FloatRect videoLayerFrame() const override { return m_frame; }
&gt; &gt; +    virtual void setVideoLayerGravity(WebVideoFullscreenModel::VideoGravity) override;
&gt; &gt; +    virtual VideoGravity videoLayerGravity() const override { return m_gravity; }
&gt; &gt; +    virtual void selectAudioMediaOption(uint64_t index) override;
&gt; &gt; +    virtual void selectLegibleMediaOption(uint64_t index) override;
&gt; &gt; +    virtual void fullscreenModeChanged(HTMLMediaElement::VideoFullscreenMode) override;
&gt; 
&gt; I think all these overrides should be private instead of public.
&gt; 

Overrides moved down to private section of the class.

&gt; &gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:143
&gt; &gt; +    void setupFullscreen(HTMLVideoElement*, UIView *, HTMLMediaElement::VideoFullscreenMode);
&gt; 
&gt; The verb &quot;set up&quot; is two words, so it should be &quot;setUp&quot; not &quot;setup&quot;. Not
&gt; sure if we mean &quot;fullscreen&quot; to be one word or two. I imagine
&gt; HTMLVideoElement is required to be non-null here and if so, it should be
&gt; HTMLVideoElement&amp; instead of *.

&quot;setup&quot; is one word in many related places. I&apos;ll make the change here and file
a but to change it elsewhere.

Change HTMLVideoElement to be a &amp; instead of *.

&gt; 
&gt; &gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:277
&gt; &gt; +    RefPtr&lt;TimeRanges&gt; timeRangesRef = timeRanges.copy();
&gt; &gt; +    dispatch_async(dispatch_get_main_queue(), [strongThis, this, timeRangesRef] {
&gt; &gt; +        if (m_interface)
&gt; &gt; +            m_interface-&gt;setSeekableRanges(*timeRangesRef.get());
&gt; &gt; +    });
&gt; 
&gt; Unless there is something magic about the web thread and main thread that I
&gt; don’t understand, I am pretty sure this isn’t thread safe.
&gt; 
&gt; The code will manipulate the reference count of timeRangesRef both on the
&gt; web thread and the main thread, and the two could try to access it at the
&gt; same time; ~RefPtr on the web thread and ~RefPtr on the main thread for
&gt; example. I see here that we are trying to copy the time ranges in an effort
&gt; to avoid this problem, but unfortunately it won’t. Antti solved this for
&gt; WTF::String with the class StringCapture, but replicating something like
&gt; that for time ranges is probably overkill.
&gt; 
&gt; I can think of three ways to avoid this problem:
&gt; 
&gt; 1) Use a raw pointer instead of a RefPtr, doing an explicit leakRef and then
&gt; balancing that out with either adoptRef or deref in the lambda.

This will work, but requires the lambda only be executed once or you risk over-releasing.

Instead, I make copies of the time ranges, create the block (which captures the time ranges), release the time ranges, then dispatch the block.

It looks like this:

    RefPtr&lt;TimeRanges&gt; timeRangesRef = timeRanges.copy();
    auto block = [strongThis, this, timeRangesRef] {
        if (m_interface)
            m_interface-&gt;setSeekableRanges(*timeRangesRef.get());
    };
    timeRangesRef.release();
    dispatch_async(dispatch_get_main_queue(), block);


&gt; 2) Make TimeRanges use ThreadSafeRefCounted. Annoying because it could be
&gt; costly for all uses of TimeRanges.
&gt; 3) Write the equivalent of StringCapture for TimeRanges.
&gt; 
&gt; &gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:290
&gt; &gt; +void WebVideoFullscreenControllerContext::setAudioMediaSelectionOptions(const Vector&lt;WTF::String&gt;&amp; options, uint64_t selectedIndex)
&gt; 
&gt; Should just be String, not WTF::String.

Changed in several places.

&gt; 
&gt; &gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:297
&gt; &gt; +    dispatch_async(dispatch_get_main_queue(), [strongThis, this, options, selectedIndex] {
&gt; &gt; +        if (m_interface)
&gt; &gt; +            m_interface-&gt;setAudioMediaSelectionOptions(options, selectedIndex);
&gt; &gt; +    });
&gt; 
&gt; Unless there is something magic about the web thread and main thread that I
&gt; don’t understand, I am pretty sure this isn’t thread safe. Since options is
&gt; a vector of strings with non-thread-safe reference counts, we have to make
&gt; isolated copies of them to move them across threads. One way to avoid the
&gt; problem would be to make an isolated copy of the vector and pass that over
&gt; to the other thread. The old code avoided this by making an NSArray of
&gt; NSString copy of the vector, which was safe since Objective-C reference
&gt; counts are all thread safe.

I use a similar method here as above. I make a deep copy, capture it, then release it.

It looks like this:

    Vector&lt;String&gt; optionsDeepCopy;
    optionsDeepCopy.reserveInitialCapacity(options.size());
    for (auto&amp; option : options) {
        optionsDeepCopy.append(option.isolatedCopy());
    }
    
    auto block = [strongThis, this, optionsDeepCopy, selectedIndex] {
        if (m_interface)
            m_interface-&gt;setAudioMediaSelectionOptions(optionsDeepCopy, selectedIndex);
    };
    
    optionsDeepCopy.clear();
    dispatch_async(dispatch_get_main_queue(), block);


&gt; 
&gt; &gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:300
&gt; &gt; +void WebVideoFullscreenControllerContext::setLegibleMediaSelectionOptions(const Vector&lt;WTF::String&gt;&amp; options, uint64_t selectedIndex)
&gt; 
&gt; Should be String, not WTF::String.

Changed here and other places.

&gt; 
&gt; &gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:307
&gt; &gt; +    dispatch_async(dispatch_get_main_queue(), [strongThis, this, options, selectedIndex] {
&gt; &gt; +        if (m_interface)
&gt; &gt; +            m_interface-&gt;setLegibleMediaSelectionOptions(options, selectedIndex);
&gt; &gt; +    });
&gt; 
&gt; Same problem as above for options.

Same solution as above for options.

&gt; 
&gt; &gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:314
&gt; &gt; +    dispatch_async(dispatch_get_main_queue(), [strongThis, this, enabled, type, localizedDeviceName] {
&gt; 
&gt; Unless there is something magic about the web thread and main thread that I
&gt; don’t understand, I am pretty sure this isn’t thread safe. Need to use
&gt; StringCapture to safely pass localizedDeviceName across threads. Plenty of
&gt; examples of how to do that if you grep for StringCapture.

Done.

&gt; 
&gt; &gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:506
&gt; &gt; +        RefPtr&lt;WebVideoFullscreenControllerContext&gt; strongThis(this);
&gt; 
&gt; Don’t need another strongThis. Can just capture the one that already exists.

Removed.

&gt; 
&gt; &gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:577
&gt; &gt; +    UNUSED_PARAM(context);
&gt; 
&gt; Might be more elegant to do:
&gt; 
&gt;     ASSERT_UNUSED(context, context == _context);
&gt; 
&gt; Unless that assertion is not guaranteed!

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096738</commentid>
    <comment_count>9</comment_count>
      <attachid>253567</attachid>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2015-05-21 18:16:48 -0700</bug_when>
    <thetext>Created attachment 253567
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096739</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-21 18:18:51 -0700</bug_when>
    <thetext>Attachment 253567 did not pass style-queue:


ERROR: Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:1015:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:1021:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:1164:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 3 in 5 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>1096872</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2015-05-22 09:30:22 -0700</bug_when>
    <thetext>&lt;rdar://problem/19242538&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096936</commentid>
    <comment_count>12</comment_count>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2015-05-22 13:30:47 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; &gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:277
&gt; &gt; &gt; +    RefPtr&lt;TimeRanges&gt; timeRangesRef = timeRanges.copy();
&gt; &gt; &gt; +    dispatch_async(dispatch_get_main_queue(), [strongThis, this, timeRangesRef] {
&gt; &gt; &gt; +        if (m_interface)
&gt; &gt; &gt; +            m_interface-&gt;setSeekableRanges(*timeRangesRef.get());
&gt; &gt; &gt; +    });
&gt; &gt; 
&gt; &gt; Unless there is something magic about the web thread and main thread that I
&gt; &gt; don’t understand, I am pretty sure this isn’t thread safe.
&gt; &gt; 
&gt; &gt; The code will manipulate the reference count of timeRangesRef both on the
&gt; &gt; web thread and the main thread, and the two could try to access it at the
&gt; &gt; same time; ~RefPtr on the web thread and ~RefPtr on the main thread for
&gt; &gt; example. I see here that we are trying to copy the time ranges in an effort
&gt; &gt; to avoid this problem, but unfortunately it won’t. Antti solved this for
&gt; &gt; WTF::String with the class StringCapture, but replicating something like
&gt; &gt; that for time ranges is probably overkill.
&gt; &gt; 
&gt; &gt; I can think of three ways to avoid this problem:
&gt; &gt; 
&gt; &gt; 1) Use a raw pointer instead of a RefPtr, doing an explicit leakRef and then
&gt; &gt; balancing that out with either adoptRef or deref in the lambda.
&gt; 
&gt; This will work, but requires the lambda only be executed once or you risk
&gt; over-releasing.
&gt; 
&gt; Instead, I make copies of the time ranges, create the block (which captures
&gt; the time ranges), release the time ranges, then dispatch the block.
&gt; 
&gt; It looks like this:
&gt; 
&gt;     RefPtr&lt;TimeRanges&gt; timeRangesRef = timeRanges.copy();
&gt;     auto block = [strongThis, this, timeRangesRef] {
&gt;         if (m_interface)
&gt;             m_interface-&gt;setSeekableRanges(*timeRangesRef.get());
&gt;     };
&gt;     timeRangesRef.release();
&gt;     dispatch_async(dispatch_get_main_queue(), block);
&gt; 

This won&apos;t work. The block is copied, leaving two refs to the time ranges.

&gt; &gt; &gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:297
&gt; &gt; &gt; +    dispatch_async(dispatch_get_main_queue(), [strongThis, this, options, selectedIndex] {
&gt; &gt; &gt; +        if (m_interface)
&gt; &gt; &gt; +            m_interface-&gt;setAudioMediaSelectionOptions(options, selectedIndex);
&gt; &gt; &gt; +    });
&gt; &gt; 
&gt; &gt; Unless there is something magic about the web thread and main thread that I
&gt; &gt; don’t understand, I am pretty sure this isn’t thread safe. Since options is
&gt; &gt; a vector of strings with non-thread-safe reference counts, we have to make
&gt; &gt; isolated copies of them to move them across threads. One way to avoid the
&gt; &gt; problem would be to make an isolated copy of the vector and pass that over
&gt; &gt; to the other thread. The old code avoided this by making an NSArray of
&gt; &gt; NSString copy of the vector, which was safe since Objective-C reference
&gt; &gt; counts are all thread safe.
&gt; 
&gt; I use a similar method here as above. I make a deep copy, capture it, then
&gt; release it.
&gt; 
&gt; It looks like this:
&gt; 
&gt;     Vector&lt;String&gt; optionsDeepCopy;
&gt;     optionsDeepCopy.reserveInitialCapacity(options.size());
&gt;     for (auto&amp; option : options) {
&gt;         optionsDeepCopy.append(option.isolatedCopy());
&gt;     }
&gt;     
&gt;     auto block = [strongThis, this, optionsDeepCopy, selectedIndex] {
&gt;         if (m_interface)
&gt;             m_interface-&gt;setAudioMediaSelectionOptions(optionsDeepCopy,
&gt; selectedIndex);
&gt;     };
&gt;     
&gt;     optionsDeepCopy.clear();
&gt;     dispatch_async(dispatch_get_main_queue(), block);
&gt; 
&gt; 

This won&apos;t work as the block is copied, leaving two vectors referring to the same string impls.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096965</commentid>
    <comment_count>13</comment_count>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2015-05-22 14:57:20 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #8)
&gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; &gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:277
&gt; &gt; &gt; &gt; +    RefPtr&lt;TimeRanges&gt; timeRangesRef = timeRanges.copy();
&gt; &gt; &gt; &gt; +    dispatch_async(dispatch_get_main_queue(), [strongThis, this, timeRangesRef] {
&gt; &gt; &gt; &gt; +        if (m_interface)
&gt; &gt; &gt; &gt; +            m_interface-&gt;setSeekableRanges(*timeRangesRef.get());
&gt; &gt; &gt; &gt; +    });
&gt; &gt; &gt; 
&gt; &gt; &gt; Unless there is something magic about the web thread and main thread that I
&gt; &gt; &gt; don’t understand, I am pretty sure this isn’t thread safe.
&gt; &gt; &gt; 
&gt; &gt; &gt; The code will manipulate the reference count of timeRangesRef both on the
&gt; &gt; &gt; web thread and the main thread, and the two could try to access it at the
&gt; &gt; &gt; same time; ~RefPtr on the web thread and ~RefPtr on the main thread for
&gt; &gt; &gt; example. I see here that we are trying to copy the time ranges in an effort
&gt; &gt; &gt; to avoid this problem, but unfortunately it won’t. Antti solved this for
&gt; &gt; &gt; WTF::String with the class StringCapture, but replicating something like
&gt; &gt; &gt; that for time ranges is probably overkill.
&gt; &gt; &gt; 
&gt; &gt; &gt; I can think of three ways to avoid this problem:
&gt; &gt; &gt; 
&gt; &gt; &gt; 1) Use a raw pointer instead of a RefPtr, doing an explicit leakRef and then
&gt; &gt; &gt; balancing that out with either adoptRef or deref in the lambda.
&gt; &gt; 
&gt; &gt; This will work, but requires the lambda only be executed once or you risk
&gt; &gt; over-releasing.
&gt; &gt; 
&gt; &gt; Instead, I make copies of the time ranges, create the block (which captures
&gt; &gt; the time ranges), release the time ranges, then dispatch the block.
&gt; &gt; 
&gt; &gt; It looks like this:
&gt; &gt; 
&gt; &gt;     RefPtr&lt;TimeRanges&gt; timeRangesRef = timeRanges.copy();
&gt; &gt;     auto block = [strongThis, this, timeRangesRef] {
&gt; &gt;         if (m_interface)
&gt; &gt;             m_interface-&gt;setSeekableRanges(*timeRangesRef.get());
&gt; &gt;     };
&gt; &gt;     timeRangesRef.release();
&gt; &gt;     dispatch_async(dispatch_get_main_queue(), block);
&gt; &gt; 
&gt; 
&gt; This won&apos;t work. The block is copied, leaving two refs to the time ranges.

The solution is to use PlatformTimeRanges, which is a value type.

&gt; 
&gt; &gt; &gt; &gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:297
&gt; &gt; &gt; &gt; +    dispatch_async(dispatch_get_main_queue(), [strongThis, this, options, selectedIndex] {
&gt; &gt; &gt; &gt; +        if (m_interface)
&gt; &gt; &gt; &gt; +            m_interface-&gt;setAudioMediaSelectionOptions(options, selectedIndex);
&gt; &gt; &gt; &gt; +    });
&gt; &gt; &gt; 
&gt; &gt; &gt; Unless there is something magic about the web thread and main thread that I
&gt; &gt; &gt; don’t understand, I am pretty sure this isn’t thread safe. Since options is
&gt; &gt; &gt; a vector of strings with non-thread-safe reference counts, we have to make
&gt; &gt; &gt; isolated copies of them to move them across threads. One way to avoid the
&gt; &gt; &gt; problem would be to make an isolated copy of the vector and pass that over
&gt; &gt; &gt; to the other thread. The old code avoided this by making an NSArray of
&gt; &gt; &gt; NSString copy of the vector, which was safe since Objective-C reference
&gt; &gt; &gt; counts are all thread safe.
&gt; &gt; 
&gt; &gt; I use a similar method here as above. I make a deep copy, capture it, then
&gt; &gt; release it.
&gt; &gt; 
&gt; &gt; It looks like this:
&gt; &gt; 
&gt; &gt;     Vector&lt;String&gt; optionsDeepCopy;
&gt; &gt;     optionsDeepCopy.reserveInitialCapacity(options.size());
&gt; &gt;     for (auto&amp; option : options) {
&gt; &gt;         optionsDeepCopy.append(option.isolatedCopy());
&gt; &gt;     }
&gt; &gt;     
&gt; &gt;     auto block = [strongThis, this, optionsDeepCopy, selectedIndex] {
&gt; &gt;         if (m_interface)
&gt; &gt;             m_interface-&gt;setAudioMediaSelectionOptions(optionsDeepCopy,
&gt; &gt; selectedIndex);
&gt; &gt;     };
&gt; &gt;     
&gt; &gt;     optionsDeepCopy.clear();
&gt; &gt;     dispatch_async(dispatch_get_main_queue(), block);
&gt; &gt; 
&gt; &gt; 
&gt; 
&gt; This won&apos;t work as the block is copied, leaving two vectors referring to the
&gt; same string impls.

I now convert to NSArray of NSString to get thread safe ref counting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096966</commentid>
    <comment_count>14</comment_count>
      <attachid>253609</attachid>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2015-05-22 14:59:10 -0700</bug_when>
    <thetext>Created attachment 253609
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096967</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-22 15:02:06 -0700</bug_when>
    <thetext>Attachment 253609 did not pass style-queue:


ERROR: Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:1015:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:1021:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:1164:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 3 in 5 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>1097396</commentid>
    <comment_count>16</comment_count>
      <attachid>253609</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-05-26 13:24:13 -0700</bug_when>
    <thetext>Comment on attachment 253609
Patch

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

Looks good. I don’t see any threading mistakes.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:276
&gt; +        RefPtr&lt;TimeRanges&gt; timeRanges = TimeRanges::create(platformTimeRanges);
&gt; +        if (m_interface)
&gt; +            m_interface-&gt;setSeekableRanges(*timeRanges.get());

I’d write this without the local variable. Something like this:

    if (m_interface)
        m_interface-&gt;setSeekableRanges(*TimeRanges::create(platformTimeRanges));</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1097674</commentid>
    <comment_count>17</comment_count>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2015-05-27 11:27:33 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; Comment on attachment 253609 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=253609&amp;action=review
&gt; 
&gt; Looks good. I don’t see any threading mistakes.
&gt; 
&gt; &gt; Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm:276
&gt; &gt; +        RefPtr&lt;TimeRanges&gt; timeRanges = TimeRanges::create(platformTimeRanges);
&gt; &gt; +        if (m_interface)
&gt; &gt; +            m_interface-&gt;setSeekableRanges(*timeRanges.get());
&gt; 
&gt; I’d write this without the local variable. Something like this:
&gt; 
&gt;     if (m_interface)
&gt;        
&gt; m_interface-&gt;setSeekableRanges(*TimeRanges::create(platformTimeRanges));

Changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1097675</commentid>
    <comment_count>18</comment_count>
      <attachid>253796</attachid>
    <who name="Jeremy Jones">jeremyj-wk</who>
    <bug_when>2015-05-27 11:29:15 -0700</bug_when>
    <thetext>Created attachment 253796
Patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1097680</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-27 11:32:01 -0700</bug_when>
    <thetext>Attachment 253796 did not pass style-queue:


ERROR: Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:1012:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:1018:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:1161:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 3 in 5 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>1097719</commentid>
    <comment_count>20</comment_count>
      <attachid>253796</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-27 14:41:19 -0700</bug_when>
    <thetext>Comment on attachment 253796
Patch for landing.

Clearing flags on attachment: 253796

Committed r184922: &lt;http://trac.webkit.org/changeset/184922&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251167</attachid>
            <date>2015-04-20 10:58:53 -0700</date>
            <delta_ts>2015-05-15 17:45:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143954-20150420105752.patch</filename>
            <type>text/plain</type>
            <size>69390</size>
            <attacher name="Jeremy Jones">jeremyj-wk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyODUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzQ4OTQzYWRjZTNlMjY2
N2Q3YmIyZmU1NTM0ODhhYmQ3YzNlZDBjMi4uZGEwYzk0NjY4NWY1NzUyMTYzYmU0M2Y0MjRhZWY1
NjY3OTA3ODEyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyMiBAQAorMjAxNS0wNC0yMCAgSmVy
ZW15IEpvbmVzICA8amVyZW15akBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgV2ViS2l0
MSBzcGVjaWZpYyB0aHJlYWRpbmcgY29kZSBvdXQgb2YgV2ViVmlkZW9GdWxsc2NyZWVuIGNvZGUg
dGhhdCBpcyBzaGFyZWQgd2l0aCBXZWJLaXQyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQzOTU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQgaXMg
dXNlZCBpbiBib3RoIFdlYktpdDEgYW5kIFdlYktpdDIuIEluIFdlYktpdDEsIHRoZSBtb2RlbCBy
dW5zIGluIHRoZSBXZWJUaHJlYWQsIHdoaWxlCisgICAgICAgIHRoZSBpbnRlcmZhY2UgaXMgb24g
dGhlIG1haW4gdGhyZWFkLiBTbyB0aGVyZSBpcyBjb2RlIHRvIGRpc3BhdGNoIGJldHdlZW4gdGhl
c2UgdHdvIHRocmVhZCB3aGVuIGNvbW11bmljYXRpbmcgYmV0d2VlbiB0aGUKKyAgICAgICAgaW50
ZXJmYWNlIGFuZCB0aGUgbW9kZWwuIEluIFdlYktpdDIsIHRoaXMgaXMgaGFuZGxlZCBhdXRvbWF0
aWNhbGx5IGJ5IHRoZSBJUEMgbWVjaGFuaXNtLiBBcyBhIHJlc3VsdCwgdGhlIHRocmVhZGluZyBj
b2RlCisgICAgICAgIGluIFdlYlZpZGVvRnVsbHNjcmVlbmJJbnRlcmZhY2VBVktpdCBhbmQgaW4g
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQgaXMgcmVkdW5kYW50IGluIFdlYktp
dDIgYW5kIHJlbGllcyBvbgorICAgICAgICBXZWJUaHJlYWRSdW4gYmVpbmcgYSBuby1vcCBpbiBX
ZWJLaXQyLgorCisgICAgICAgIFRoaXMgY2hhbmdlIGNsYXJpZmllcyB0aGlzIGFuZCBzaW1wbGlm
aWVzIHRoZSBXZWJLaXQyIHBhdGggYnkgbW92aW5nIHRoZSBXZWJLaXQxIHNwZWNpZmljIHRocmVh
ZGluZyBjb2RlIGludG8KKyAgICAgICAgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQsIHdoaWNoIGlzIHRoZSBDKyssIFdlYktpdDEgc3BlY2lmaWMgY29udHJvbGxlci4KKworICAg
ICAgICBUaGlzIGFsc28gcmVtb3ZlcyB2aWRlb0xheWVyRnJhbWUoKSBhbmQgdmlkZW9MYXllckdy
YXZpdHkoKSBmcm9tIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLCBhbmQgY2FjaGVzIHRob3NlIHZh
bHVlcyB3aGVyZQorICAgICAgICB3aGVyZSB0aGV5IGFyZSB1c2VkIHRvIHByZXNlcnZlIHRoZSBw
dXNoLW9ubHkgaW50ZXJmYWNlIG9mIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLgorCisgICAgICAg
ICogcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbToKKyAg
ICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dCk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6c2V0Q29udHJvbGxlcik6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6ZGlkU2V0dXBGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpkaWRFeGl0RnVsbHNjcmVlbik6CisgICAg
ICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZGlkQ2xlYW51cEZ1bGxz
Y3JlZW4pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmZ1
bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6cmVzZXRNZWRpYVN0YXRlKToKKyAgICAgICAgKFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXREdXJhdGlvbik6CisgICAgICAgIChXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0Q3VycmVudFRpbWUpOgorICAgICAgICAo
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldEJ1ZmZlcmVkVGltZSk6Cisg
ICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0UmF0ZSk6Cisg
ICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0VmlkZW9EaW1l
bnNpb25zKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojpz
ZXRTZWVrYWJsZVJhbmdlcyk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6c2V0Q2FuUGxheUZhc3RSZXZlcnNlKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyk6Cisg
ICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0TGVnaWJsZU1l
ZGlhU2VsZWN0aW9uT3B0aW9ucyk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6c2V0RXh0ZXJuYWxQbGF5YmFjayk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6cGxheSk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6cGF1c2UpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OnRvZ2dsZVBsYXlTdGF0ZSk6CisgICAgICAgIChXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YmVnaW5TY3J1YmJpbmcpOgorICAgICAgICAoV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmVuZFNjcnViYmluZyk6CisgICAgICAg
IChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vla1RvVGltZSk6CisgICAg
ICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZmFzdFNlZWspOgorICAg
ICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmJlZ2luU2Nhbm5pbmdG
b3J3YXJkKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojpi
ZWdpblNjYW5uaW5nQmFja3dhcmQpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OmVuZFNjYW5uaW5nKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpyZXF1ZXN0RXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldFZpZGVvTGF5ZXJGcmFtZSk6CisgICAg
ICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0VmlkZW9MYXllckdy
YXZpdHkpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNl
bGVjdEF1ZGlvTWVkaWFPcHRpb24pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbik6CisgICAgICAgIChXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKToKKyAg
ICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXR1cEZ1bGxzY3Jl
ZW4pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4aXRG
dWxsc2NyZWVuKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlciBpbml0XSk6CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXIgZGVhbGxvY10pOgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyIGVudGVyRnVsbHNjcmVlbjptb2RlOl0pOgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyIGV4aXRGdWxsc2NyZWVuXSk6CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXIgcmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbl0pOgorICAgICAgICAo
LVtXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIGRpZEZpbmlzaEZ1bGxzY3JlZW46XSk6Cisg
ICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ2hhbmdlT2JzZXJ2ZXI6OnNldFRh
cmdldCk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIg
ZGlkU2V0dXBGdWxsc2NyZWVuXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXIgZGlkRW50ZXJGdWxsc2NyZWVuXSk6IERlbGV0ZWQuCisgICAgICAgICgt
W1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIgZGlkRXhpdEZ1bGxzY3JlZW5dKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBkaWRDbGVhbnVwRnVs
bHNjcmVlbl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyIGZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZV0pOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oOgorICAgICAgICAq
IHBsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbToKKyAgICAg
ICAgKC1bV2ViQVZWaWRlb0xheWVyIHNldEJvdW5kczpdKToKKyAgICAgICAgKC1bV2ViQVZWaWRl
b0xheWVyIHJlc29sdmVCb3VuZHNdKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpyZXNldE1lZGlhU3RhdGUpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OnNldER1cmF0aW9uKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0OjpzZXRDdXJyZW50VGltZSk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0QnVmZmVyZWRUaW1lKToKKyAgICAgICAgKFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRSYXRlKToKKyAgICAgICAgKFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRWaWRlb0RpbWVuc2lvbnMpOgorICAgICAgICAoV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFNlZWthYmxlUmFuZ2VzKToKKyAgICAg
ICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRDYW5QbGF5RmFzdFJldmVy
c2UpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldEF1ZGlv
TWVkaWFTZWxlY3Rpb25PcHRpb25zKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpzZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKToKKyAgICAgICAgKFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRFeHRlcm5hbFBsYXliYWNrKToKKyAg
ICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXR1cEZ1bGxzY3JlZW4p
OgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyRnVsbHNj
cmVlbik6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJG
dWxsc2NyZWVuU3RhbmRhcmQpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OmV4aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpleGl0RnVsbHNjcmVlbkludGVybmFsKToKKyAgICAgICAgKFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0OjpjbGVhbnVwRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y2xlYW51cEZ1bGxzY3JlZW5JbnRlcm5hbCk6
CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cmVxdWVzdEhpZGVB
bmRFeGl0RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0Ojp3aWxsU3RhcnRPcHRpbWl6ZWRGdWxsc2NyZWVuKToKKyAgICAg
ICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpkaWRTdGFydE9wdGltaXplZEZ1
bGxzY3JlZW4pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6Ondp
bGxTdG9wT3B0aW1pemVkRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6ZGlkU3RvcE9wdGltaXplZEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndpbGxDYW5jZWxPcHRpbWl6ZWRGdWxsc2Ny
ZWVuKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpkaWRDYW5j
ZWxPcHRpbWl6ZWRGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpzZXRWaWRlb0xheWVyRnJhbWUpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OnNldHVwRnVsbHNjcmVlbkludGVybmFsKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQu
bW06CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0Vmlk
ZW9GdWxsc2NyZWVuTGF5ZXIpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQ6OnBsYXkpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQ6OnBhdXNlKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50Ojp0b2dnbGVQbGF5U3RhdGUpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ6OmJlZ2luU2NydWJiaW5nKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50OjplbmRTY3J1YmJpbmcpOgorICAgICAgICAoV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNlZWtUb1RpbWUpOgorICAgICAgICAoV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmZhc3RTZWVrKToKKyAgICAgICAgKFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpiZWdpblNjYW5uaW5nRm9yd2FyZCk6CisgICAg
ICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6YmVnaW5TY2FubmluZ0Jh
Y2t3YXJkKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojpl
bmRTY2FubmluZyk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dDo6cmVxdWVzdEV4aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50OjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQpOgorICAgICAgICAoV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnZpZGVvTGF5ZXJGcmFtZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6dmlkZW9MYXll
ckdyYXZpdHkpOiBEZWxldGVkLgorCiAyMDE1LTA0LTE0ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRl
cnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBjcmVhdGluZyBzZW5kIHJpZ2h0cyBmcm9t
IHNoYXJlZCBtZW1vcnkgbW9yZSByb2J1c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBlNTY5ZjMwY2JjODYwNWE1
NTMwNjM4NjcyNWMxMTRjOGFiZDUxOGMxLi41ZjkxOWU3NzVlZTVjMmE1ZmIxNmY3MWI2N2Y4MGIy
ZmEwNWI1NzI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTUtMDQtMjAgIEplcmVt
eSBKb25lcyAgPGplcmVteWpAYXBwbGUuY29tPgorCisgICAgICAgIFJlZmFjdG9yIFdlYktpdDEg
c3BlY2lmaWMgdGhyZWFkaW5nIGNvZGUgb3V0IG9mIFdlYlZpZGVvRnVsbHNjcmVlbiBjb2RlIHRo
YXQgaXMgc2hhcmVkIHdpdGggV2ViS2l0Mi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0Mzk1NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIENhY2hlIHZpZGVvTGF5ZXJGcmFtZSBhbmQgdmlkZW9MYXllckdy
YXZpdHkgaW4gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQsIGluc3RlYWQgb2YgaW4g
dGhlIG1vZGVsLAorICAgICAgICB0byBrZWVwIHRoZSBpbnRlcmZhY2UgcHVzaC1vbmx5LgorCisg
ICAgICAgICogVUlQcm9jZXNzL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5t
bToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojp2aWRl
b0xheWVyRnJhbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OnZpZGVvTGF5ZXJHcmF2aXR5KTogRGVsZXRlZC4KKwogMjAxNS0wNC0x
NSAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBOb24t
bG9jYWwga2V5Ym9hcmRzIGRvbid0IHVwZGF0ZSBzY3JvbGwgdmlldyBwYXJhbWV0ZXJzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckFWS2l0Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbQppbmRleCAzZjg1NWQwZjEyYjQwNjQ5YTk2ZmI2YWZl
OTg5NjZlMTFhM2E1OGIzLi40YzY3Y2I1Yjc2OGM1YTRhMWU4MGI0NzBiZGE3OTUyZTEwOTk2N2Jj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckFWS2l0Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9X
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0KQEAgLTMwLDYgKzMwLDcgQEAKICNp
bXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5oIgogCiAjaW1wb3J0ICJM
b2dnaW5nLmgiCisjaW1wb3J0ICJUaW1lUmFuZ2VzLmgiCiAjaW1wb3J0ICJXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdC5oIgogI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQuaCIKICNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29yZUFuaW1hdGlvbi5oPgpAQCAt
NjcsMzIgKzY4LDM3NCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogI2Vsc2UKIAotQGlu
dGVyZmFjZSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIChGdWxsc2NyZWVuT2JzZXJ2YXRp
b24pCi0tICh2b2lkKWRpZFNldHVwRnVsbHNjcmVlbjsKLS0gKHZvaWQpZGlkRW50ZXJGdWxsc2Ny
ZWVuOwotLSAodm9pZClkaWRFeGl0RnVsbHNjcmVlbjsKLS0gKHZvaWQpZGlkQ2xlYW51cEZ1bGxz
Y3JlZW47Ci0tICh2b2lkKWZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZTsKK2NsYXNzIFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OworCitAaW50ZXJmYWNlIFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXIgKGRlbGVnYXRlKQorLSh2b2lkKWRpZEZpbmlzaEZ1bGxzY3JlZW46
KFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Kiljb250ZXh0OwogQGVuZAogCi1j
bGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ2hhbmdlT2JzZXJ2ZXIgOiBwdWJsaWMg
V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgewotICAgIFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXIqIF90YXJnZXQ7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRUYXJnZXQoV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlciogdGFyZ2V0KSB7IF90YXJnZXQgPSB0YXJnZXQ7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgZGlkU2V0dXBGdWxsc2NyZWVuKCkgb3ZlcnJpZGUgeyBbX3RhcmdldCBk
aWRTZXR1cEZ1bGxzY3JlZW5dOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZEVudGVyRnVsbHNjcmVl
bigpIG92ZXJyaWRlIHsgW190YXJnZXQgZGlkRW50ZXJGdWxsc2NyZWVuXTsgfQotICAgIHZpcnR1
YWwgdm9pZCBkaWRFeGl0RnVsbHNjcmVlbigpIG92ZXJyaWRlIHsgW190YXJnZXQgZGlkRXhpdEZ1
bGxzY3JlZW5dOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZENsZWFudXBGdWxsc2NyZWVuKCkgb3Zl
cnJpZGUgeyBbX3RhcmdldCBkaWRDbGVhbnVwRnVsbHNjcmVlbl07IH0KLSAgICB2aXJ0dWFsIHZv
aWQgZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKCkgb3ZlcnJpZGUgeyBbX3RhcmdldCBmdWxs
c2NyZWVuTWF5UmV0dXJuVG9JbmxpbmVdOyB9Ci19OworY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQKKzogcHVibGljIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZQor
LCBwdWJsaWMgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwKKywgcHVibGljIFdlYlZpZGVvRnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyCissIHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gewogCi1AaW1wbGVtZW50YXRpb24gV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlcgotewotICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50PiBf
dmlkZW9FbGVtZW50OworcHJpdmF0ZToKICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ+IF9pbnRlcmZhY2U7CiAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50PiBfbW9kZWw7Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNoYW5nZU9ic2VydmVyIF9jaGFuZ2VPYnNlcnZlcjsKKyAgICBSZWZQdHI8SFRNTFZpZGVvRWxl
bWVudD4gX3ZpZGVvRWxlbWVudDsKICAgICBSZXRhaW5QdHI8UGxhdGZvcm1MYXllcj4gX3ZpZGVv
RnVsbHNjcmVlbkxheWVyOworICAgIFJldGFpblB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyPiBfY29udHJvbGxlcjsKKworcHVibGljOgorICAgIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0KCkgeyB9OworICAgIAorICAgIHZvaWQgc2V0Q29udHJvbGxlcihXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyKiBjb250cm9sbGVyKSB7IF9jb250cm9sbGVyID0gY29udHJv
bGxlcjsgfQorICAgIAorICAgIC8vIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyCisg
ICAgdmlydHVhbCB2b2lkIGRpZFNldHVwRnVsbHNjcmVlbigpIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgdm9pZCBkaWRFbnRlckZ1bGxzY3JlZW4oKSBvdmVycmlkZSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgZGlkRXhpdEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2xl
YW51cEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZnVsbHNjcmVlbk1h
eVJldHVyblRvSW5saW5lKCkgb3ZlcnJpZGU7CisgICAgCisgICAgLy8gV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlCisgICAgdmlydHVhbCB2b2lkIHJlc2V0TWVkaWFTdGF0ZSgpIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBzZXREdXJhdGlvbihkb3VibGUpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBzZXRDdXJyZW50VGltZShkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNo
b3JUaW1lKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QnVmZmVyZWRUaW1lKGRvdWJs
ZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldFJhdGUoYm9vbCBpc1BsYXlpbmcsIGZs
b2F0IHBsYXliYWNrUmF0ZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldFZpZGVvRGlt
ZW5zaW9ucyhib29sIGhhc1ZpZGVvLCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KSBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Vla2FibGVSYW5nZXMoY29uc3QgVGltZVJhbmdlcyYp
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRDYW5QbGF5RmFzdFJldmVyc2UoYm9vbCkg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25z
KGNvbnN0IFZlY3RvcjxXVEY6OlN0cmluZz4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5k
ZXgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25P
cHRpb25zKGNvbnN0IFZlY3RvcjxXVEY6OlN0cmluZz4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVj
dGVkSW5kZXgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRFeHRlcm5hbFBsYXliYWNr
KGJvb2wgZW5hYmxlZCwgRXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIFdURjo6U3RyaW5nIGxv
Y2FsaXplZERldmljZU5hbWUpIG92ZXJyaWRlOworICAgIAorICAgIC8vIFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsCisgICAgdmlydHVhbCB2b2lkIHBsYXkoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IHZvaWQgcGF1c2UoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgdG9nZ2xlUGxheVN0YXRl
KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGJlZ2luU2NydWJiaW5nKCkgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIGVuZFNjcnViYmluZygpIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
dm9pZCBzZWVrVG9UaW1lKGRvdWJsZSB0aW1lKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZmFzdFNlZWsoZG91YmxlIHRpbWUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBiZWdpblNj
YW5uaW5nRm9yd2FyZCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBiZWdpblNjYW5uaW5n
QmFja3dhcmQoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kU2Nhbm5pbmcoKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdEV4aXRGdWxsc2NyZWVuKCkgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIHNldFZpZGVvTGF5ZXJGcmFtZShGbG9hdFJlY3QpIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0eShXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbDo6VmlkZW9HcmF2aXR5KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0
QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIHNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIGZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChIVE1MTWVkaWFFbGVtZW50OjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlKSBvdmVycmlkZTsKKyAgICAKKyAgICAvLyBPdGhlcgorICAgIHZv
aWQgc2V0dXBGdWxsc2NyZWVuKEhUTUxWaWRlb0VsZW1lbnQqLCBVSVZpZXcgKiwgSFRNTE1lZGlh
RWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7CisgICAgdm9pZCBleGl0RnVsbHNjcmVlbigp
OworICAgIHZvaWQgcmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpOworICAgIHZvaWQgaW52
YWxpZGF0ZSgpOworfTsKKworI3ByYWdtYSBtYXJrIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9i
c2VydmVyCisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZFNl
dHVwRnVsbHNjcmVlbigpCit7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0PiBzdHJvbmdUaGlzKHRoaXMpOworICAgIFdlYlRocmVhZFJ1bihbc3Ryb25nVGhp
cywgdGhpc10geworICAgICAgICBfbW9kZWwtPnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKF92aWRl
b0Z1bGxzY3JlZW5MYXllci5nZXQoKSk7CisgICAgICAgIF9pbnRlcmZhY2UtPmVudGVyRnVsbHNj
cmVlbigpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpkaWRFeGl0RnVsbHNjcmVlbigpCit7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0PiBzdHJvbmdUaGlzKHRoaXMpOworICAgIFdlYlRocmVhZFJ1
bihbc3Ryb25nVGhpcywgdGhpc10geworICAgICAgICBfbW9kZWwtPnNldFZpZGVvRnVsbHNjcmVl
bkxheWVyKG5pbCk7CisgICAgICAgIF9pbnRlcmZhY2UtPmNsZWFudXBGdWxsc2NyZWVuKCk7Cisg
ICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRp
ZENsZWFudXBGdWxsc2NyZWVuKCkKK3sKKyAgICBfaW50ZXJmYWNlLT5zZXRXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbChudWxscHRyKTsKKyAgICBfaW50ZXJmYWNlLT5zZXRXZWJWaWRlb0Z1bGxzY3Jl
ZW5DaGFuZ2VPYnNlcnZlcihudWxscHRyKTsKKyAgICBfaW50ZXJmYWNlID0gbnVsbHB0cjsKKyAg
ICAKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0cm9u
Z1RoaXModGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzLCB0aGlzXSB7CisgICAg
ICAgIF9tb2RlbC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIobmlsKTsKKyAgICAgICAgX21vZGVs
LT5zZXRWaWRlb0VsZW1lbnQobnVsbHB0cik7CisgICAgICAgIF9tb2RlbC0+c2V0V2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlKG51bGxwdHIpOworICAgICAgICBfbW9kZWwgPSBudWxscHRyOwor
ICAgICAgICAKKyAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUo
KSwgW3N0cm9uZ1RoaXMsIHRoaXNdIHsKKyAgICAgICAgICAgIFtfY29udHJvbGxlciBkaWRGaW5p
c2hGdWxsc2NyZWVuOnRoaXNdOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5s
aW5lKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIF9pbnRlcmZhY2UtPnBy
ZXBhcmVkVG9SZXR1cm5Ub0lubGluZSh0cnVlLCBfdmlkZW9FbGVtZW50LT5jbGllbnRSZWN0KCkp
OworfQorCisjcHJhZ21hIG1hcmsgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlCisKK3ZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJlc2V0TWVkaWFTdGF0ZSgpCit7
CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBzdHJvbmdU
aGlzKHRoaXMpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCks
IFtzdHJvbmdUaGlzLCB0aGlzXSB7CisgICAgICAgIF9pbnRlcmZhY2UtPnJlc2V0TWVkaWFTdGF0
ZSgpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpzZXREdXJhdGlvbihkb3VibGUgZHVyYXRpb24pCit7CisgICAgUmVmUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBzdHJvbmdUaGlzKHRoaXMpOworICAgIGRpc3Bh
dGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCB0aGlzLCBk
dXJhdGlvbl0geworICAgICAgICBfaW50ZXJmYWNlLT5zZXREdXJhdGlvbihkdXJhdGlvbik7Cisg
ICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNl
dEN1cnJlbnRUaW1lKGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpCit7Cisg
ICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBzdHJvbmdUaGlz
KHRoaXMpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtz
dHJvbmdUaGlzLCB0aGlzLCBjdXJyZW50VGltZSwgYW5jaG9yVGltZV0geworICAgICAgICBfaW50
ZXJmYWNlLT5zZXRDdXJyZW50VGltZShjdXJyZW50VGltZSwgYW5jaG9yVGltZSk7CisgICAgfSk7
Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldEJ1ZmZl
cmVkVGltZShkb3VibGUgYnVmZmVyZWRUaW1lKQoreworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBkaXNwYXRjaF9h
c3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpcywgdGhpcywgYnVmZmVy
ZWRUaW1lXSB7CisgICAgICAgIF9pbnRlcmZhY2UtPnNldEJ1ZmZlcmVkVGltZShidWZmZXJlZFRp
bWUpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpzZXRSYXRlKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpCit7CisgICAg
UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBzdHJvbmdUaGlzKHRo
aXMpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJv
bmdUaGlzLCB0aGlzLCBpc1BsYXlpbmcsIHBsYXliYWNrUmF0ZV0geworICAgICAgICBfaW50ZXJm
YWNlLT5zZXRSYXRlKGlzUGxheWluZywgcGxheWJhY2tSYXRlKTsKKyAgICB9KTsKK30KKwordm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0VmlkZW9EaW1lbnNpb25z
KGJvb2wgaGFzVmlkZW8sIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpCit7CisgICAgUmVmUHRy
PFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBzdHJvbmdUaGlzKHRoaXMpOwor
ICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlz
LCB0aGlzLCBoYXNWaWRlbywgd2lkdGgsIGhlaWdodF0geworICAgICAgICBfaW50ZXJmYWNlLT5z
ZXRWaWRlb0RpbWVuc2lvbnMoaGFzVmlkZW8sIHdpZHRoLCBoZWlnaHQpOworICAgIH0pOworfQor
Cit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRTZWVrYWJsZVJh
bmdlcyhjb25zdCBUaW1lUmFuZ2VzJiB0aW1lUmFuZ2VzKQoreworICAgIFJlZlB0cjxXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBSZWZQ
dHI8VGltZVJhbmdlcz4gdGltZVJhbmdlc1JlZiA9IHRpbWVSYW5nZXMuY29weSgpOworICAgIGRp
c3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCB0aGlz
LCB0aW1lUmFuZ2VzUmVmXSB7CisgICAgICAgIF9pbnRlcmZhY2UtPnNldFNlZWthYmxlUmFuZ2Vz
KCp0aW1lUmFuZ2VzUmVmLmdldCgpKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0Q2FuUGxheUZhc3RSZXZlcnNlKGJvb2wgY2FuUGxh
eUZhc3RSZXZlcnNlKQoreworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9n
ZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpcywgdGhpcywgY2FuUGxheUZhc3RSZXZlcnNlXSB7
CisgICAgICAgIF9pbnRlcmZhY2UtPnNldENhblBsYXlGYXN0UmV2ZXJzZShjYW5QbGF5RmFzdFJl
dmVyc2UpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpzZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25zdCBWZWN0b3I8V1RGOjpT
dHJpbmc+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQoreworICAgIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAg
ICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpcywg
dGhpcywgb3B0aW9ucywgc2VsZWN0ZWRJbmRleF0geworICAgICAgICBfaW50ZXJmYWNlLT5zZXRB
dWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyhvcHRpb25zLCBzZWxlY3RlZEluZGV4KTsKKyAgICB9
KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0TGVn
aWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25zdCBWZWN0b3I8V1RGOjpTdHJpbmc+JiBvcHRp
b25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQoreworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBkaXNwYXRjaF9h
c3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpcywgdGhpcywgb3B0aW9u
cywgc2VsZWN0ZWRJbmRleF0geworICAgICAgICBfaW50ZXJmYWNlLT5zZXRMZWdpYmxlTWVkaWFT
ZWxlY3Rpb25PcHRpb25zKG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpOworICAgIH0pOworfQorCit2
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRFeHRlcm5hbFBsYXli
YWNrKGJvb2wgZW5hYmxlZCwgRXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdHlwZSwgV1RGOjpT
dHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSkKK3sKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7CisgICAgZGlzcGF0Y2hfYXN5
bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMsIHRoaXMsIGVuYWJsZWQs
IHR5cGUsIGxvY2FsaXplZERldmljZU5hbWVdIHsKKyAgICAgICAgX2ludGVyZmFjZS0+c2V0RXh0
ZXJuYWxQbGF5YmFjayhlbmFibGVkLCB0eXBlLCBsb2NhbGl6ZWREZXZpY2VOYW1lKTsKKyAgICB9
KTsKK30KKworI3ByYWdtYSBtYXJrIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsCisKK3ZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnBsYXkoKQoreworICAgIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAg
ICBXZWJUaHJlYWRSdW4oW3N0cm9uZ1RoaXMsIHRoaXNdIHsKKyAgICAgICAgX21vZGVsLT5wbGF5
KCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OnBhdXNlKCkKK3sKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzLCB0
aGlzXSB7CisgICAgICAgIF9tb2RlbC0+cGF1c2UoKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6dG9nZ2xlUGxheVN0YXRlKCkKK3sKKyAg
ICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0cm9uZ1RoaXMo
dGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzLCB0aGlzXSB7CisgICAgICAgIF9t
b2RlbC0+dG9nZ2xlUGxheVN0YXRlKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmJlZ2luU2NydWJiaW5nKCkKK3sKKyAgICBSZWZQdHI8
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7Cisg
ICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzLCB0aGlzXSB7CisgICAgICAgIF9tb2RlbC0+YmVn
aW5TY3J1YmJpbmcoKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6ZW5kU2NydWJiaW5nKCkKK3sKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7CisgICAgV2ViVGhyZWFk
UnVuKFtzdHJvbmdUaGlzLCB0aGlzXSB7CisgICAgICAgIF9tb2RlbC0+ZW5kU2NydWJiaW5nKCk7
CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OnNlZWtUb1RpbWUoZG91YmxlIHRpbWUpCit7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0PiBzdHJvbmdUaGlzKHRoaXMpOworICAgIFdlYlRocmVhZFJ1bihb
c3Ryb25nVGhpcywgdGhpcywgdGltZV0geworICAgICAgICBfbW9kZWwtPnNlZWtUb1RpbWUodGlt
ZSk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ6OmZhc3RTZWVrKGRvdWJsZSB0aW1lKQoreworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4o
W3N0cm9uZ1RoaXMsIHRoaXMsIHRpbWVdIHsKKyAgICAgICAgX21vZGVsLT5mYXN0U2Vlayh0aW1l
KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dDo6YmVnaW5TY2FubmluZ0ZvcndhcmQoKQoreworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4o
W3N0cm9uZ1RoaXMsIHRoaXNdIHsKKyAgICAgICAgX21vZGVsLT5iZWdpblNjYW5uaW5nRm9yd2Fy
ZCgpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpiZWdpblNjYW5uaW5nQmFja3dhcmQoKQoreworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBXZWJUaHJlYWRS
dW4oW3N0cm9uZ1RoaXMsIHRoaXNdIHsKKyAgICAgICAgX21vZGVsLT5iZWdpblNjYW5uaW5nQmFj
a3dhcmQoKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6ZW5kU2Nhbm5pbmcoKQoreworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oW3N0
cm9uZ1RoaXMsIHRoaXNdIHsKKyAgICAgICAgX21vZGVsLT5lbmRTY2FubmluZygpOworICAgIH0p
OworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZXF1ZXN0
RXhpdEZ1bGxzY3JlZW4oKQoreworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oW3N0cm9uZ1Ro
aXMsIHRoaXNdIHsKKyAgICAgICAgX21vZGVsLT5yZXF1ZXN0RXhpdEZ1bGxzY3JlZW4oKTsKKyAg
ICB9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0
VmlkZW9MYXllckZyYW1lKEZsb2F0UmVjdCBmcmFtZSkKK3sKKyAgICBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7CisgICAgV2ViVGhy
ZWFkUnVuKFtzdHJvbmdUaGlzLCB0aGlzLCBmcmFtZV0geworICAgICAgICBfbW9kZWwtPnNldFZp
ZGVvTGF5ZXJGcmFtZShmcmFtZSk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldFZpZGVvTGF5ZXJHcmF2aXR5KFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkgdmlkZW9HcmF2aXR5KQoreworICAgIFJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBX
ZWJUaHJlYWRSdW4oW3N0cm9uZ1RoaXMsIHRoaXMsIHZpZGVvR3Jhdml0eV0geworICAgICAgICBf
bW9kZWwtPnNldFZpZGVvTGF5ZXJHcmF2aXR5KHZpZGVvR3Jhdml0eSk7CisgICAgfSk7Cit9CisK
K3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNlbGVjdEF1ZGlvTWVk
aWFPcHRpb24odWludDY0X3QgaW5kZXgpCit7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0PiBzdHJvbmdUaGlzKHRoaXMpOworICAgIFdlYlRocmVhZFJ1bihb
c3Ryb25nVGhpcywgdGhpcywgaW5kZXhdIHsKKyAgICAgICAgX21vZGVsLT5zZWxlY3RBdWRpb01l
ZGlhT3B0aW9uKGluZGV4KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4
KQoreworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ry
b25nVGhpcyh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oW3N0cm9uZ1RoaXMsIHRoaXMsIGluZGV4
XSB7CisgICAgICAgIF9tb2RlbC0+c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKGluZGV4KTsKKyAg
ICB9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZnVs
bHNjcmVlbk1vZGVDaGFuZ2VkKEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUg
bW9kZSkKK3sKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+
IHN0cm9uZ1RoaXModGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzLCB0aGlzLCBt
b2RlXSB7CisgICAgICAgIF9tb2RlbC0+ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKG1vZGUpOworICAg
IH0pOworfQorCisjcHJhZ21hIG1hcmsgT3RoZXIKKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6c2V0dXBGdWxsc2NyZWVuKEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVv
RWxlbWVudCwgVUlWaWV3ICp2aWV3LCBIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5N
b2RlIG1vZGUpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBfdmlkZW9FbGVt
ZW50ID0gdmlkZW9FbGVtZW50OworICAgIF9pbnRlcmZhY2UgPSBhZG9wdFJlZihuZXcgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQpOworICAgIF9pbnRlcmZhY2UtPnNldFdlYlZpZGVv
RnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKHRoaXMpOworICAgIF9tb2RlbCA9IGFkb3B0UmVmKG5l
dyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCk7CisgICAgX21vZGVsLT5zZXRX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UoX2ludGVyZmFjZS5nZXQoKSk7CisgICAgX2ludGVy
ZmFjZS0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoX21vZGVsLmdldCgpKTsKKyAgICBfbW9k
ZWwtPnNldFZpZGVvRWxlbWVudChfdmlkZW9FbGVtZW50LmdldCgpKTsKKyAgICBfdmlkZW9GdWxs
c2NyZWVuTGF5ZXIgPSBbQ0FMYXllciBsYXllcl07CisKKyAgICBfaW50ZXJmYWNlLT5zZXR1cEZ1
bGxzY3JlZW4oKl92aWRlb0Z1bGxzY3JlZW5MYXllci5nZXQoKSwgX3ZpZGVvRWxlbWVudC0+Y2xp
ZW50UmVjdCgpLCB2aWV3LCBtb2RlLCBfdmlkZW9FbGVtZW50LT5tZWRpYVNlc3Npb24oKS5hbGxv
d3NBbHRlcm5hdGVGdWxsc2NyZWVuKCpfdmlkZW9FbGVtZW50LmdldCgpKSk7Cit9CisKK3ZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4aXRGdWxsc2NyZWVuKCkKK3sK
KyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIF9pbnRlcmZhY2UtPmV4aXRGdWxsc2Ny
ZWVuKF92aWRlb0VsZW1lbnQtPnNjcmVlblJlY3QoKSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKQor
eworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgX2ludGVyZmFjZS0+cmVxdWVzdEhp
ZGVBbmRFeGl0RnVsbHNjcmVlbigpOworfQorCitAaW1wbGVtZW50YXRpb24gV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlcgoreworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dD4gX2NvbnRleHQ7CisgICAgUmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+IF92aWRl
b0VsZW1lbnQ7CiB9CiAKIC0gKGluc3RhbmNldHlwZSlpbml0CkBAIC0xMDAsMTQgKzQ0MywxMiBA
QCBwdWJsaWM6CiAgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCiAgICAgICAgIHJldHVy
biBuaWw7CiAgICAgCi0gICAgX2NoYW5nZU9ic2VydmVyLnNldFRhcmdldChzZWxmKTsKLQogICAg
IHJldHVybiBzZWxmOwogfQogCiAtICh2b2lkKWRlYWxsb2MKIHsKLSAgICBfdmlkZW9FbGVtZW50
ID0gbnVsbHB0cjsKKyAgICBfY29udGV4dCA9IG51bGxwdHI7CiAgICAgW3N1cGVyIGRlYWxsb2Nd
OwogfQogCkBAIC0xMjMsNjcgKzQ2NCwzMiBAQCBwdWJsaWM6CiAKIC0gKHZvaWQpZW50ZXJGdWxs
c2NyZWVuOihVSVZpZXcgKil2aWV3IG1vZGU6KEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNj
cmVlbk1vZGUpbW9kZQogewotICAgIFtzZWxmIHJldGFpbl07IC8vIEJhbGFuY2VkIGJ5IC1yZWxl
YXNlIGluIGRpZEV4aXRGdWxsc2NyZWVuOgotICAgIAotICAgIF9pbnRlcmZhY2UgPSBhZG9wdFJl
ZihuZXcgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQpOwotICAgIF9pbnRlcmZhY2Ut
PnNldFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKCZfY2hhbmdlT2JzZXJ2ZXIpOwot
ICAgIF9tb2RlbCA9IGFkb3B0UmVmKG5ldyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudCk7Ci0gICAgX21vZGVsLT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UoX2ludGVy
ZmFjZS5nZXQoKSk7Ci0gICAgX2ludGVyZmFjZS0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwo
X21vZGVsLmdldCgpKTsKLSAgICBfbW9kZWwtPnNldFZpZGVvRWxlbWVudChfdmlkZW9FbGVtZW50
LmdldCgpKTsKLSAgICBfdmlkZW9GdWxsc2NyZWVuTGF5ZXIgPSBbQ0FMYXllciBsYXllcl07Ci0g
ICAgX2ludGVyZmFjZS0+c2V0dXBGdWxsc2NyZWVuKCpfdmlkZW9GdWxsc2NyZWVuTGF5ZXIuZ2V0
KCksIF92aWRlb0VsZW1lbnQtPmNsaWVudFJlY3QoKSwgdmlldywgbW9kZSwgX3ZpZGVvRWxlbWVu
dC0+bWVkaWFTZXNzaW9uKCkuYWxsb3dzQWx0ZXJuYXRlRnVsbHNjcmVlbigqX3ZpZGVvRWxlbWVu
dC5nZXQoKSkpOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgX2NvbnRleHQgPSBh
ZG9wdFJlZihuZXcgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQoKSk7CisgICAg
X2NvbnRleHQtPnNldENvbnRyb2xsZXIoc2VsZik7CisgICAgX2NvbnRleHQtPnNldHVwRnVsbHNj
cmVlbihfdmlkZW9FbGVtZW50LmdldCgpLCB2aWV3LCBtb2RlKTsKIH0KIAogLSAodm9pZClleGl0
RnVsbHNjcmVlbgogewotICAgIF9pbnRlcmZhY2UtPmV4aXRGdWxsc2NyZWVuKF92aWRlb0VsZW1l
bnQtPnNjcmVlblJlY3QoKSk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBfY29u
dGV4dC0+ZXhpdEZ1bGxzY3JlZW4oKTsKIH0KIAogLSAodm9pZClyZXF1ZXN0SGlkZUFuZEV4aXRG
dWxsc2NyZWVuCiB7Ci0gICAgaWYgKF9pbnRlcmZhY2UpCi0gICAgICAgIF9pbnRlcmZhY2UtPnJl
cXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworICAgIGlmIChfY29udGV4dCkKKyAgICAgICAgX2NvbnRleHQtPnJlcXVlc3RIaWRlQW5kRXhp
dEZ1bGxzY3JlZW4oKTsKIH0KIAotLSAodm9pZClkaWRTZXR1cEZ1bGxzY3JlZW4KKy0gKHZvaWQp
ZGlkRmluaXNoRnVsbHNjcmVlbjooV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQq
KWNvbnRleHQKIHsKLSAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgX21vZGVsLT5zZXRWaWRl
b0Z1bGxzY3JlZW5MYXllcihfdmlkZW9GdWxsc2NyZWVuTGF5ZXIuZ2V0KCkpOwotICAgICAgICBf
aW50ZXJmYWNlLT5lbnRlckZ1bGxzY3JlZW4oKTsKLSAgICB9KTsKLX0KLQotLSAodm9pZClkaWRF
bnRlckZ1bGxzY3JlZW4KLXsKLX0KLQotLSAodm9pZClkaWRFeGl0RnVsbHNjcmVlbgotewotICAg
IFdlYlRocmVhZFJ1biheewotICAgICAgICBfbW9kZWwtPnNldFZpZGVvRnVsbHNjcmVlbkxheWVy
KG5pbCk7Ci0gICAgICAgIF9pbnRlcmZhY2UtPmNsZWFudXBGdWxsc2NyZWVuKCk7Ci0gICAgfSk7
Ci19Ci0KLS0gKHZvaWQpZGlkQ2xlYW51cEZ1bGxzY3JlZW4KLXsKLSAgICBXZWJUaHJlYWRSdW4o
XnsKLSAgICAgICAgX21vZGVsLT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihuaWwpOwotICAgICAg
ICBfaW50ZXJmYWNlLT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbChudWxscHRyKTsKLSAgICAg
ICAgX21vZGVsLT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UobnVsbHB0cik7Ci0gICAg
ICAgIF9tb2RlbC0+c2V0VmlkZW9FbGVtZW50KG51bGxwdHIpOwotICAgICAgICBfaW50ZXJmYWNl
LT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcihudWxscHRyKTsKLSAgICAgICAg
X21vZGVsID0gbnVsbHB0cjsKLSAgICAgICAgX2ludGVyZmFjZSA9IG51bGxwdHI7Ci0gICAgICAg
IAotICAgICAgICBbc2VsZiByZWxlYXNlXTsgLy8gQmFsYW5jZSB0aGUgLXJldGFpbiB3ZSBkaWQg
aW4gZW50ZXJGdWxsc2NyZWVuOgotICAgIH0pOwotfQotCi0tICh2b2lkKWZ1bGxzY3JlZW5NYXlS
ZXR1cm5Ub0lubGluZQotewotICAgIF9pbnRlcmZhY2UtPnByZXBhcmVkVG9SZXR1cm5Ub0lubGlu
ZSh0cnVlLCBfdmlkZW9FbGVtZW50LT5jbGllbnRSZWN0KCkpOworICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisgICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOworICAgIFtbc2VsZiByZXRhaW5d
IGF1dG9yZWxlYXNlXTsgLy8gcmV0YWluIHNlbGYgYmVmb3JlIGJyZWFraW5nIGEgcmV0YWluIGN5
Y2xlLgorICAgIF9jb250ZXh0LT5zZXRDb250cm9sbGVyKG5pbCk7CisgICAgX2NvbnRleHQgPSBu
aWw7CiB9CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9X
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgKaW5kZXggODQ3M2Y2YjA0
NDI0Yjk0N2Q4Nzk1Yzc3MjdmOTg2MTAyYmVhNTJjYi4uNzlhN2YwZGMxYzAzMmJjMDY2MmRjYTgy
OWFkZTU1ZWQzOTkwYWZhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgKQEAgLTMzLDkg
KzMzLDkgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0hUTUxNZWRpYUVsZW1lbnQuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1BsYXRmb3JtTGF5ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1dlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZS5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3
dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAogT0JKQ19DTEFTUyBXZWJBVlBsYXllckNvbnRy
b2xsZXI7CiBPQkpDX0NMQVNTIEFWUGxheWVyVmlld0NvbnRyb2xsZXI7CkBAIC02NSw3ICs2NSw3
IEBAIHB1YmxpYzoKIAogY2xhc3MgV0VCQ09SRV9FWFBPUlQgV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQKICAgICA6IHB1YmxpYyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UKLSAg
ICAsIHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdD4geworICAgICwgcHVibGljIFJlZkNvdW50ZWQ8V2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ+IHsKIAogcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0KCk7CkBAIC05Myw2ICs5Myw4IEBAIHB1YmxpYzoKICAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigp
OwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBwcmVwYXJlZFRvUmV0dXJuVG9Jbmxp
bmUoYm9vbCB2aXNpYmxlLCBjb25zdCBJbnRSZWN0JiBpbmxpbmVSZWN0KTsKIAorICAgIHZvaWQg
c2V0VmlkZW9MYXllckZyYW1lKFdlYkNvcmU6OkZsb2F0UmVjdCk7CisgICAgV2ViQ29yZTo6Rmxv
YXRSZWN0IHZpZGVvTGF5ZXJGcmFtZSgpIHsgcmV0dXJuIG1fdmlkZW9MYXllckZyYW1lOyB9CiAg
ICAgSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKCkgY29uc3QgeyBy
ZXR1cm4gbV9tb2RlOyB9CiAgICAgdm9pZCBzZXRJc09wdGltaXplZChib29sKTsKICAgICBXRUJD
T1JFX0VYUE9SVCBib29sIG1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9PcHRpbWl6ZWQoKTsKQEAg
LTEwOCwxMCArMTEwLDggQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBiZWdpblNl
c3Npb24oKTsKLSAgICB2b2lkIHNldHVwRnVsbHNjcmVlbkludGVybmFsKFBsYXRmb3JtTGF5ZXIm
LCBjb25zdCBJbnRSZWN0JiBpbml0aWFsUmVjdCwgVUlWaWV3ICosIEhUTUxNZWRpYUVsZW1lbnQ6
OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgYWxsb3dPcHRpbWl6ZWRGdWxsc2NyZWVuKTsKICAg
ICB2b2lkIGVudGVyRnVsbHNjcmVlbk9wdGltaXplZCgpOwogICAgIHZvaWQgZW50ZXJGdWxsc2Ny
ZWVuU3RhbmRhcmQoKTsKLSAgICB2b2lkIGV4aXRGdWxsc2NyZWVuSW50ZXJuYWwoY29uc3QgSW50
UmVjdCYgZmluYWxSZWN0KTsKICAgICB2b2lkIGNsZWFudXBGdWxsc2NyZWVuSW50ZXJuYWwoKTsK
IAogICAgIHZvaWQgc2V0TW9kZShIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
KTsKQEAgLTEzMyw2ICsxMzMsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgUmV0YWluUHRyPFVJV2luZG93
PiBtX3BhcmVudFdpbmRvdzsKICAgICBIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5N
b2RlIG1fbW9kZTsKICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoYm9vbCk+IG1fcHJlcGFyZVRvSW5s
aW5lQ2FsbGJhY2s7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IG1fdmlkZW9MYXllckZyYW1lOwog
ICAgIGJvb2wgbV9leGl0UmVxdWVzdGVkOwogICAgIGJvb2wgbV9leGl0Q29tcGxldGVkOwogICAg
IGJvb2wgbV9lbnRlclJlcXVlc3RlZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbQppbmRl
eCAyOTM4ZWE4Nzg5MTNmMWUyM2Q0NTkwZWVhYmM4MmMxMjgxYjhjYWY5Li4xNzRlNmVjYjg0MWJi
YmNjYTZiOTg3NjJlMzJkMzU5MGI0M2YyM2JiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
Lm1tCkBAIC0zNiw3ICszNiw2IEBACiAjaW1wb3J0ICJSdW50aW1lQXBwbGljYXRpb25DaGVja3NJ
T1MuaCIKICNpbXBvcnQgIlRpbWVSYW5nZXMuaCIKICNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRl
cmZhY2UuaCIKLSNpbXBvcnQgIldlYkNvcmVUaHJlYWRSdW4uaCIKICNpbXBvcnQgIldlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsLmgiCiAjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZUaW1lLmg+CiAjaW1w
b3J0IDxVSUtpdC9VSUtpdC5oPgpAQCAtNjMxLDE4ICs2MzAsMjAgQEAgc3RhdGljIGNvbnN0IGNo
YXIqIGJvb2xTdHJpbmcoYm9vbCB2YWwpCiAgICAgaWYgKCFbX2F2UGxheWVyQ29udHJvbGxlciBk
ZWxlZ2F0ZV0gfHwgIV9hdlBsYXllclZpZXdDb250cm9sbGVyKQogICAgICAgICByZXR1cm47CiAK
LSAgICBGbG9hdFJlY3QgdmlkZW9GcmFtZSA9IFtfYXZQbGF5ZXJDb250cm9sbGVyIGRlbGVnYXRl
XS0+dmlkZW9MYXllckZyYW1lKCk7CisgICAgRmxvYXRSZWN0IHZpZGVvRnJhbWUgPSBbX2F2UGxh
eWVyQ29udHJvbGxlciBmdWxsc2NyZWVuSW50ZXJmYWNlXS0+dmlkZW9MYXllckZyYW1lKCk7CiAg
ICAgRmxvYXRSZWN0IHRhcmdldEZyYW1lOwotICAgIHN3aXRjaCAoW19hdlBsYXllckNvbnRyb2xs
ZXIgZGVsZWdhdGVdLT52aWRlb0xheWVyR3Jhdml0eSgpKSB7Ci0gICAgY2FzZSBXZWJDb3JlOjpX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplOgorICAgIHN3aXRjaCAo
X3ZpZGVvTGF5ZXJHcmF2aXR5KSB7CisgICAgY2FzZSBBVlZpZGVvTGF5ZXJHcmF2aXR5UmVzaXpl
OgogICAgICAgICB0YXJnZXRGcmFtZSA9IGJvdW5kczsKICAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXplQXNw
ZWN0OgorICAgIGNhc2UgQVZWaWRlb0xheWVyR3Jhdml0eVJlc2l6ZUFzcGVjdDoKICAgICAgICAg
dGFyZ2V0RnJhbWUgPSBsYXJnZXN0UmVjdFdpdGhBc3BlY3RSYXRpb0luc2lkZVJlY3QodmlkZW9G
cmFtZS5zaXplKCkuYXNwZWN0UmF0aW8oKSwgYm91bmRzKTsKICAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5UmVzaXpl
QXNwZWN0RmlsbDoKKyAgICBjYXNlIEFWVmlkZW9MYXllckdyYXZpdHlSZXNpemVBc3BlY3RGaWxs
OgogICAgICAgICB0YXJnZXRGcmFtZSA9IHNtYWxsZXN0UmVjdFdpdGhBc3BlY3RSYXRpb0Fyb3Vu
ZFJlY3QodmlkZW9GcmFtZS5zaXplKCkuYXNwZWN0UmF0aW8oKSwgYm91bmRzKTsKICAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
fQogICAgIENBVHJhbnNmb3JtM0QgdHJhbnNmb3JtID0gQ0FUcmFuc2Zvcm0zRE1ha2VTY2FsZSh0
YXJnZXRGcmFtZS53aWR0aCgpIC8gdmlkZW9GcmFtZS53aWR0aCgpLCB0YXJnZXRGcmFtZS5oZWln
aHQoKSAvIHZpZGVvRnJhbWUuaGVpZ2h0KCksIDEpOwogICAgIFtfdmlkZW9TdWJsYXllciBzZXRT
dWJsYXllclRyYW5zZm9ybTp0cmFuc2Zvcm1dOwpAQCAtNjYxLDcgKzY2Miw3IEBAIHN0YXRpYyBj
b25zdCBjaGFyKiBib29sU3RyaW5nKGJvb2wgdmFsKQogICAgIFtDQVRyYW5zYWN0aW9uIHNldEFu
aW1hdGlvbkR1cmF0aW9uOjBdOwogCiAgICAgW192aWRlb1N1YmxheWVyIHNldFN1YmxheWVyVHJh
bnNmb3JtOkNBVHJhbnNmb3JtM0RJZGVudGl0eV07Ci0gICAgW19hdlBsYXllckNvbnRyb2xsZXIg
ZGVsZWdhdGVdLT5zZXRWaWRlb0xheWVyRnJhbWUoW3NlbGYgYm91bmRzXSk7CisgICAgW19hdlBs
YXllckNvbnRyb2xsZXIgZnVsbHNjcmVlbkludGVyZmFjZV0tPnNldFZpZGVvTGF5ZXJGcmFtZShb
c2VsZiBib3VuZHNdKTsKIAogICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07CiB9CkBAIC03MDcs
MTcgKzcwOCwxMyBAQCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6V2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQoKQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpyZXNldE1lZGlhU3RhdGUoKQogewotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlzKTsKLSAgICAKLSAgICBkaXNwYXRj
aF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpc10gewotICAgICAg
ICBpZiAoIXN0cm9uZ1RoaXMtPm1fcGxheWVyQ29udHJvbGxlcikgewotICAgICAgICAgICAgc3Ry
b25nVGhpcy0+bV9wbGF5ZXJDb250cm9sbGVyID0gYWRvcHROUyhbW1dlYkFWUGxheWVyQ29udHJv
bGxlciBhbGxvY10gaW5pdF0pOwotICAgICAgICAgICAgW3N0cm9uZ1RoaXMtPm1fcGxheWVyQ29u
dHJvbGxlciBzZXREZWxlZ2F0ZTpzdHJvbmdUaGlzLT5tX3ZpZGVvRnVsbHNjcmVlbk1vZGVsXTsK
LSAgICAgICAgICAgIFtzdHJvbmdUaGlzLT5tX3BsYXllckNvbnRyb2xsZXIgc2V0RnVsbHNjcmVl
bkludGVyZmFjZTpzdHJvbmdUaGlzLmdldCgpXTsKLSAgICAgICAgICAgIAotICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIFtzdHJvbmdUaGlzLT5tX3BsYXllckNvbnRyb2xsZXIgcmVzZXRTdGF0
ZV07Ci0gICAgfSk7CisgICAgaWYgKCFtX3BsYXllckNvbnRyb2xsZXIpIHsKKyAgICAgICAgbV9w
bGF5ZXJDb250cm9sbGVyID0gYWRvcHROUyhbW1dlYkFWUGxheWVyQ29udHJvbGxlciBhbGxvY10g
aW5pdF0pOworICAgICAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldERlbGVnYXRlOm1fdmlkZW9G
dWxsc2NyZWVuTW9kZWxdOworICAgICAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldEZ1bGxzY3Jl
ZW5JbnRlcmZhY2U6dGhpc107CisgICAgICAgIAorICAgIH0gZWxzZQorICAgICAgICBbbV9wbGF5
ZXJDb250cm9sbGVyIHJlc2V0U3RhdGVdOwogfQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpzZXRXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbChXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbCogbW9kZWwpCkBAIC03MzMsNzIgKzczMCw1MiBAQCB2b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjpzZXRXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcihX
ZWJWaQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXREdXJhdGlv
bihkb3VibGUgZHVyYXRpb24pCiB7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOwotICAgIAotICAgIGRpc3BhdGNoX2FzeW5jKGRp
c3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCBkdXJhdGlvbl0gewotICAgICAg
ICBXZWJBVlBsYXllckNvbnRyb2xsZXIqIHBsYXllckNvbnRyb2xsZXIgPSBzdHJvbmdUaGlzLT5t
X3BsYXllckNvbnRyb2xsZXIuZ2V0KCk7CisgICAgV2ViQVZQbGF5ZXJDb250cm9sbGVyKiBwbGF5
ZXJDb250cm9sbGVyID0gbV9wbGF5ZXJDb250cm9sbGVyLmdldCgpOwogCi0gICAgICAgIC8vIEZJ
WE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3MDE3IHVzZSBj
b3JyZWN0IHZhbHVlcyBpbnN0ZWFkIG9mIGR1cmF0aW9uIGZvciBhbGwgdGhlc2UKLSAgICAgICAg
cGxheWVyQ29udHJvbGxlci5jb250ZW50RHVyYXRpb24gPSBkdXJhdGlvbjsKLSAgICAgICAgcGxh
eWVyQ29udHJvbGxlci5tYXhUaW1lID0gZHVyYXRpb247Ci0gICAgICAgIHBsYXllckNvbnRyb2xs
ZXIuY29udGVudER1cmF0aW9uV2l0aGluRW5kVGltZXMgPSBkdXJhdGlvbjsKKyAgICAvLyBGSVhN
RTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzAxNyB1c2UgY29y
cmVjdCB2YWx1ZXMgaW5zdGVhZCBvZiBkdXJhdGlvbiBmb3IgYWxsIHRoZXNlCisgICAgcGxheWVy
Q29udHJvbGxlci5jb250ZW50RHVyYXRpb24gPSBkdXJhdGlvbjsKKyAgICBwbGF5ZXJDb250cm9s
bGVyLm1heFRpbWUgPSBkdXJhdGlvbjsKKyAgICBwbGF5ZXJDb250cm9sbGVyLmNvbnRlbnREdXJh
dGlvbldpdGhpbkVuZFRpbWVzID0gZHVyYXRpb247CiAKLSAgICAgICAgLy8gRklYTUU6IHdlIHRh
a2UgdGhpcyBhcyBhbiBpbmRpY2F0aW9uIHRoYXQgcGxheWJhY2sgaXMgcmVhZHkuCi0gICAgICAg
IHBsYXllckNvbnRyb2xsZXIuY2FuUGxheSA9IFlFUzsKLSAgICAgICAgcGxheWVyQ29udHJvbGxl
ci5jYW5QYXVzZSA9IFlFUzsKLSAgICAgICAgcGxheWVyQ29udHJvbGxlci5jYW5Ub2dnbGVQbGF5
YmFjayA9IFlFUzsKLSAgICAgICAgcGxheWVyQ29udHJvbGxlci5oYXNFbmFibGVkQXVkaW8gPSBZ
RVM7Ci0gICAgICAgIHBsYXllckNvbnRyb2xsZXIuY2FuU2VlayA9IFlFUzsKLSAgICAgICAgcGxh
eWVyQ29udHJvbGxlci5taW5UaW1lID0gMDsKLSAgICAgICAgcGxheWVyQ29udHJvbGxlci5zdGF0
dXMgPSBBVlBsYXllckNvbnRyb2xsZXJTdGF0dXNSZWFkeVRvUGxheTsKLSAgICB9KTsKKyAgICAv
LyBGSVhNRTogd2UgdGFrZSB0aGlzIGFzIGFuIGluZGljYXRpb24gdGhhdCBwbGF5YmFjayBpcyBy
ZWFkeS4KKyAgICBwbGF5ZXJDb250cm9sbGVyLmNhblBsYXkgPSBZRVM7CisgICAgcGxheWVyQ29u
dHJvbGxlci5jYW5QYXVzZSA9IFlFUzsKKyAgICBwbGF5ZXJDb250cm9sbGVyLmNhblRvZ2dsZVBs
YXliYWNrID0gWUVTOworICAgIHBsYXllckNvbnRyb2xsZXIuaGFzRW5hYmxlZEF1ZGlvID0gWUVT
OworICAgIHBsYXllckNvbnRyb2xsZXIuY2FuU2VlayA9IFlFUzsKKyAgICBwbGF5ZXJDb250cm9s
bGVyLm1pblRpbWUgPSAwOworICAgIHBsYXllckNvbnRyb2xsZXIuc3RhdHVzID0gQVZQbGF5ZXJD
b250cm9sbGVyU3RhdHVzUmVhZHlUb1BsYXk7CiB9CiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OnNldEN1cnJlbnRUaW1lKGRvdWJsZSBjdXJyZW50VGltZSwgZG91Ymxl
IGFuY2hvclRpbWUpCiB7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0PiBzdHJvbmdUaGlzKHRoaXMpOwotICAgIAotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNo
X2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCBjdXJyZW50VGltZSwgYW5jaG9yVGltZV0g
ewotICAgICAgICBOU1RpbWVJbnRlcnZhbCBhbmNob3JUaW1lU3RhbXAgPSAhW3N0cm9uZ1RoaXMt
Pm1fcGxheWVyQ29udHJvbGxlciByYXRlXSA/IE5BTiA6IGFuY2hvclRpbWU7Ci0gICAgICAgIEFW
VmFsdWVUaW1pbmcgKnRpbWluZyA9IFtnZXRBVlZhbHVlVGltaW5nQ2xhc3MoKSB2YWx1ZVRpbWlu
Z1dpdGhBbmNob3JWYWx1ZTpjdXJyZW50VGltZQotICAgICAgICAgICAgYW5jaG9yVGltZVN0YW1w
OmFuY2hvclRpbWVTdGFtcCByYXRlOjBdOwotICAgICAgICBbc3Ryb25nVGhpcy0+bV9wbGF5ZXJD
b250cm9sbGVyIHNldFRpbWluZzp0aW1pbmddOwotICAgIH0pOworICAgIE5TVGltZUludGVydmFs
IGFuY2hvclRpbWVTdGFtcCA9ICFbbV9wbGF5ZXJDb250cm9sbGVyIHJhdGVdID8gTkFOIDogYW5j
aG9yVGltZTsKKyAgICBBVlZhbHVlVGltaW5nICp0aW1pbmcgPSBbZ2V0QVZWYWx1ZVRpbWluZ0Ns
YXNzKCkgdmFsdWVUaW1pbmdXaXRoQW5jaG9yVmFsdWU6Y3VycmVudFRpbWUKKyAgICAgICAgYW5j
aG9yVGltZVN0YW1wOmFuY2hvclRpbWVTdGFtcCByYXRlOjBdOworICAgIFttX3BsYXllckNvbnRy
b2xsZXIgc2V0VGltaW5nOnRpbWluZ107CiB9CiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ6OnNldEJ1ZmZlcmVkVGltZShkb3VibGUgYnVmZmVyZWRUaW1lKQogewotICAg
IFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlz
KTsKLQotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJv
bmdUaGlzLCBidWZmZXJlZFRpbWVdIHsKLSAgICAgICAgV2ViQVZQbGF5ZXJDb250cm9sbGVyKiBw
bGF5ZXJDb250cm9sbGVyID0gc3Ryb25nVGhpcy0+bV9wbGF5ZXJDb250cm9sbGVyLmdldCgpOwot
ICAgICAgICBkb3VibGUgZHVyYXRpb24gPSBwbGF5ZXJDb250cm9sbGVyLmNvbnRlbnREdXJhdGlv
bjsKLSAgICAgICAgZG91YmxlIG5vcm1hbGl6ZWRCdWZmZXJlZFRpbWU7Ci0gICAgICAgIGlmICgh
ZHVyYXRpb24pCi0gICAgICAgICAgICBub3JtYWxpemVkQnVmZmVyZWRUaW1lID0gMDsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgbm9ybWFsaXplZEJ1ZmZlcmVkVGltZSA9IGJ1ZmZlcmVkVGlt
ZSAvIGR1cmF0aW9uOwotICAgICAgICBwbGF5ZXJDb250cm9sbGVyLmxvYWRlZFRpbWVSYW5nZXMg
PSBAW0AwLCBAKG5vcm1hbGl6ZWRCdWZmZXJlZFRpbWUpXTsKLSAgICB9KTsKKyAgICBXZWJBVlBs
YXllckNvbnRyb2xsZXIqIHBsYXllckNvbnRyb2xsZXIgPSBtX3BsYXllckNvbnRyb2xsZXIuZ2V0
KCk7CisgICAgZG91YmxlIGR1cmF0aW9uID0gcGxheWVyQ29udHJvbGxlci5jb250ZW50RHVyYXRp
b247CisgICAgZG91YmxlIG5vcm1hbGl6ZWRCdWZmZXJlZFRpbWU7CisgICAgaWYgKCFkdXJhdGlv
bikKKyAgICAgICAgbm9ybWFsaXplZEJ1ZmZlcmVkVGltZSA9IDA7CisgICAgZWxzZQorICAgICAg
ICBub3JtYWxpemVkQnVmZmVyZWRUaW1lID0gYnVmZmVyZWRUaW1lIC8gZHVyYXRpb247CisgICAg
cGxheWVyQ29udHJvbGxlci5sb2FkZWRUaW1lUmFuZ2VzID0gQFtAMCwgQChub3JtYWxpemVkQnVm
ZmVyZWRUaW1lKV07CiB9CiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
OnNldFJhdGUoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKIHsKLSAgICBSZWZQ
dHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHN0cm9uZ1RoaXModGhpcyk7Ci0g
ICAgCi0gICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9u
Z1RoaXMsIGlzUGxheWluZywgcGxheWJhY2tSYXRlXSB7Ci0gICAgICAgIFtzdHJvbmdUaGlzLT5t
X3BsYXllckNvbnRyb2xsZXIgc2V0UmF0ZTppc1BsYXlpbmcgPyBwbGF5YmFja1JhdGUgOiAwLl07
Ci0gICAgfSk7CisgICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRSYXRlOmlzUGxheWluZyA/IHBs
YXliYWNrUmF0ZSA6IDAuXTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6c2V0VmlkZW9EaW1lbnNpb25zKGJvb2wgaGFzVmlkZW8sIGZsb2F0IHdpZHRoLCBmbG9h
dCBoZWlnaHQpCiB7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
PiBzdHJvbmdUaGlzKHRoaXMpOwotICAgIAotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dl
dF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCBoYXNWaWRlbywgd2lkdGgsIGhlaWdodF0gewot
ICAgICAgICBbc3Ryb25nVGhpcy0+bV9wbGF5ZXJDb250cm9sbGVyIHNldEhhc0VuYWJsZWRWaWRl
bzpoYXNWaWRlb107Ci0gICAgICAgIFtzdHJvbmdUaGlzLT5tX3BsYXllckNvbnRyb2xsZXIgc2V0
Q29udGVudERpbWVuc2lvbnM6Q0dTaXplTWFrZSh3aWR0aCwgaGVpZ2h0KV07Ci0gICAgfSk7Cisg
ICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRIYXNFbmFibGVkVmlkZW86aGFzVmlkZW9dOworICAg
IFttX3BsYXllckNvbnRyb2xsZXIgc2V0Q29udGVudERpbWVuc2lvbnM6Q0dTaXplTWFrZSh3aWR0
aCwgaGVpZ2h0KV07CiB9CiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
OnNldFNlZWthYmxlUmFuZ2VzKGNvbnN0IFRpbWVSYW5nZXMmIHRpbWVSYW5nZXMpCkBAIC04MTQs
MjAgKzc5MSwxMiBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRT
ZWVrYWJsZVJhbmdlcyhjb25zdCBUaW1lUmFuZ2VzJiB0aW1lUgogICAgICAgICBbc2Vla2FibGVS
YW5nZXMgYWRkT2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aENNVGltZVJhbmdlOnJhbmdlXV07CiAg
ICAgfQogICAgIAotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4g
c3Ryb25nVGhpcyh0aGlzKTsKLSAgICAKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRf
bWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpcywgc2Vla2FibGVSYW5nZXNdIHsKLSAgICAgICAgW3N0
cm9uZ1RoaXMtPm1fcGxheWVyQ29udHJvbGxlciBzZXRTZWVrYWJsZVRpbWVSYW5nZXM6c2Vla2Fi
bGVSYW5nZXMuZ2V0KCldOwotICAgIH0pOworICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0U2Vl
a2FibGVUaW1lUmFuZ2VzOnNlZWthYmxlUmFuZ2VzLmdldCgpXTsKIH0KIAogdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0Q2FuUGxheUZhc3RSZXZlcnNlKGJvb2wgY2Fu
UGxheUZhc3RSZXZlcnNlKQogewotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdD4gc3Ryb25nVGhpcyh0aGlzKTsKLSAgICAKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNw
YXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpcywgY2FuUGxheUZhc3RSZXZlcnNlXSB7
Ci0gICAgICAgIFtzdHJvbmdUaGlzLT5tX3BsYXllckNvbnRyb2xsZXIgc2V0Q2FuU2NhbkJhY2t3
YXJkOmNhblBsYXlGYXN0UmV2ZXJzZV07Ci0gICAgfSk7CisgICAgW21fcGxheWVyQ29udHJvbGxl
ciBzZXRDYW5TY2FuQmFja3dhcmQ6Y2FuUGxheUZhc3RSZXZlcnNlXTsKIH0KIAogc3RhdGljIFJl
dGFpblB0cjxOU011dGFibGVBcnJheT4gbWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBvcHRpb25zKQpAQCAtODQ0LDI1ICs4MTMsMTcgQEAgc3RhdGljIFJldGFpblB0
cjxOU011dGFibGVBcnJheT4gbWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBvcHQKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldEF1ZGlv
TWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvcHRpb25zLCB1aW50
NjRfdCBzZWxlY3RlZEluZGV4KQogewogICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gd2Vi
T3B0aW9ucyA9IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhvcHRpb25zKTsKLSAgICBSZWZQdHI8V2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHN0cm9uZ1RoaXModGhpcyk7Ci0gICAgCi0g
ICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3dlYk9wdGlvbnMs
IHN0cm9uZ1RoaXMsIHNlbGVjdGVkSW5kZXhdIHsKLSAgICAgICAgW3N0cm9uZ1RoaXMtPm1fcGxh
eWVyQ29udHJvbGxlciBzZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uczp3ZWJPcHRpb25zLmdl
dCgpXTsKLSAgICAgICAgaWYgKHNlbGVjdGVkSW5kZXggPCBbd2ViT3B0aW9ucyBjb3VudF0pCi0g
ICAgICAgICAgICBbc3Ryb25nVGhpcy0+bV9wbGF5ZXJDb250cm9sbGVyIHNldEN1cnJlbnRBdWRp
b01lZGlhU2VsZWN0aW9uT3B0aW9uOlt3ZWJPcHRpb25zIG9iamVjdEF0SW5kZXg6c3RhdGljX2Nh
c3Q8TlNVSW50ZWdlcj4oc2VsZWN0ZWRJbmRleCldXTsKLSAgICB9KTsKKyAgICBbbV9wbGF5ZXJD
b250cm9sbGVyIHNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zOndlYk9wdGlvbnMuZ2V0KCld
OworICAgIGlmIChzZWxlY3RlZEluZGV4IDwgW3dlYk9wdGlvbnMgY291bnRdKQorICAgICAgICBb
bV9wbGF5ZXJDb250cm9sbGVyIHNldEN1cnJlbnRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uOlt3
ZWJPcHRpb25zIG9iamVjdEF0SW5kZXg6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oc2VsZWN0ZWRJ
bmRleCldXTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0
TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgb3B0aW9u
cywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKIHsKICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJy
YXk+IHdlYk9wdGlvbnMgPSBtZWRpYVNlbGVjdGlvbk9wdGlvbnMob3B0aW9ucyk7Ci0gICAgUmVm
UHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOwot
Ci0gICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3dlYk9wdGlv
bnMsIHN0cm9uZ1RoaXMsIHNlbGVjdGVkSW5kZXhdIHsKLSAgICAgICAgW3N0cm9uZ1RoaXMtPm1f
cGxheWVyQ29udHJvbGxlciBzZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zOndlYk9wdGlv
bnMuZ2V0KCldOwotICAgICAgICBpZiAoc2VsZWN0ZWRJbmRleCA8IFt3ZWJPcHRpb25zIGNvdW50
XSkKLSAgICAgICAgICAgIFtzdHJvbmdUaGlzLT5tX3BsYXllckNvbnRyb2xsZXIgc2V0Q3VycmVu
dExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbjpbd2ViT3B0aW9ucyBvYmplY3RBdEluZGV4OnN0
YXRpY19jYXN0PE5TVUludGVnZXI+KHNlbGVjdGVkSW5kZXgpXV07Ci0gICAgfSk7CisgICAgW21f
cGxheWVyQ29udHJvbGxlciBzZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zOndlYk9wdGlv
bnMuZ2V0KCldOworICAgIGlmIChzZWxlY3RlZEluZGV4IDwgW3dlYk9wdGlvbnMgY291bnRdKQor
ICAgICAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldEN1cnJlbnRMZWdpYmxlTWVkaWFTZWxlY3Rp
b25PcHRpb246W3dlYk9wdGlvbnMgb2JqZWN0QXRJbmRleDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2Vy
PihzZWxlY3RlZEluZGV4KV1dOwogfQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0OjpzZXRFeHRlcm5hbFBsYXliYWNrKGJvb2wgZW5hYmxlZCwgRXh0ZXJuYWxQbGF5YmFj
a1RhcmdldFR5cGUgdGFyZ2V0VHlwZSwgU3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUpCkBAIC04
NzMsMzkgKzgzNCwyMiBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojpz
ZXRFeHRlcm5hbFBsYXliYWNrKGJvb2wgZW5hYmxlZCwgRXh0ZXJuYQogICAgIGVsc2UgaWYgKHRh
cmdldFR5cGUgPT0gVGFyZ2V0VHlwZVRWT3V0KQogICAgICAgICBleHRlcm5hbFBsYXliYWNrVHlw
ZSA9IEFWUGxheWVyQ29udHJvbGxlckV4dGVybmFsUGxheWJhY2tUeXBlVFZPdXQ7CiAKLSAgICBS
ZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHN0cm9uZ1RoaXModGhpcyk7
Ci0KLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25n
VGhpcywgZW5hYmxlZCwgbG9jYWxpemVkRGV2aWNlTmFtZSwgZXh0ZXJuYWxQbGF5YmFja1R5cGVd
IHsKLSAgICAgICAgV2ViQVZQbGF5ZXJDb250cm9sbGVyKiBwbGF5ZXJDb250cm9sbGVyID0gc3Ry
b25nVGhpcy0+bV9wbGF5ZXJDb250cm9sbGVyLmdldCgpOwotICAgICAgICBwbGF5ZXJDb250cm9s
bGVyLmV4dGVybmFsUGxheWJhY2tBaXJQbGF5RGV2aWNlTG9jYWxpemVkTmFtZSA9IGxvY2FsaXpl
ZERldmljZU5hbWU7Ci0gICAgICAgIHBsYXllckNvbnRyb2xsZXIuZXh0ZXJuYWxQbGF5YmFja1R5
cGUgPSBleHRlcm5hbFBsYXliYWNrVHlwZTsKLSAgICAgICAgcGxheWVyQ29udHJvbGxlci5leHRl
cm5hbFBsYXliYWNrQWN0aXZlID0gZW5hYmxlZDsKLSAgICAgICAgW3N0cm9uZ1RoaXMtPm1fdmlk
ZW9MYXllckNvbnRhaW5lci5nZXQoKSBzZXRIaWRkZW46ZW5hYmxlZF07Ci0gICAgfSk7CisgICAg
V2ViQVZQbGF5ZXJDb250cm9sbGVyKiBwbGF5ZXJDb250cm9sbGVyID0gbV9wbGF5ZXJDb250cm9s
bGVyLmdldCgpOworICAgIHBsYXllckNvbnRyb2xsZXIuZXh0ZXJuYWxQbGF5YmFja0FpclBsYXlE
ZXZpY2VMb2NhbGl6ZWROYW1lID0gbG9jYWxpemVkRGV2aWNlTmFtZTsKKyAgICBwbGF5ZXJDb250
cm9sbGVyLmV4dGVybmFsUGxheWJhY2tUeXBlID0gZXh0ZXJuYWxQbGF5YmFja1R5cGU7CisgICAg
cGxheWVyQ29udHJvbGxlci5leHRlcm5hbFBsYXliYWNrQWN0aXZlID0gZW5hYmxlZDsKKyAgICBb
bV92aWRlb0xheWVyQ29udGFpbmVyLmdldCgpIHNldEhpZGRlbjplbmFibGVkXTsKIH0KIAogdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0dXBGdWxsc2NyZWVuKFBsYXRm
b3JtTGF5ZXImIHZpZGVvTGF5ZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGluaXRpYWxSZWN0
LCBVSVZpZXcqIHBhcmVudFZpZXcsIEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1v
ZGUgbW9kZSwgYm9vbCBhbGxvd09wdGltaXplZEZ1bGxzY3JlZW4pCiB7Ci0gICAgUmVmUHRyPFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOwotCiAgICAg
QVNTRVJUKG1vZGUgIT0gSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUp
OworICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
OnNldHVwRnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKKworICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2lu
XTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOwogICAgIG1fdmlk
ZW9MYXllciA9ICZ2aWRlb0xheWVyOwotCiAgICAgbV9tb2RlID0gbW9kZTsKLQotICAgIGRpc3Bh
dGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCAmdmlkZW9M
YXllciwgaW5pdGlhbFJlY3QsIHBhcmVudFZpZXcsIG1vZGUsIGFsbG93T3B0aW1pemVkRnVsbHNj
cmVlbl0gewotICAgICAgICBzdHJvbmdUaGlzLT5zZXR1cEZ1bGxzY3JlZW5JbnRlcm5hbCh2aWRl
b0xheWVyLCBpbml0aWFsUmVjdCwgcGFyZW50VmlldywgbW9kZSwgYWxsb3dPcHRpbWl6ZWRGdWxs
c2NyZWVuKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6c2V0dXBGdWxsc2NyZWVuSW50ZXJuYWwoUGxhdGZvcm1MYXllciYgdmlkZW9MYXllciwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgaW5pdGlhbFJlY3QsIFVJVmlldyogcGFyZW50Vmlldywg
SFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlLCBib29sIGFsbG93T3B0
aW1pemVkRnVsbHNjcmVlbikKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjpzZXR1cEZ1bGxzY3JlZW5JbnRlcm5hbCglcCkiLCB0aGlzKTsK
LSAgICBVTlVTRURfUEFSQU0odmlkZW9MYXllcik7Ci0gICAgVU5VU0VEX1BBUkFNKG1vZGUpOwot
Ci0gICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwotICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2Fi
bGVBY3Rpb25zOllFU107CiAgICAgbV9wYXJlbnRWaWV3ID0gcGFyZW50VmlldzsKICAgICBtX3Bh
cmVudFdpbmRvdyA9IHBhcmVudFZpZXcud2luZG93OwogCkBAIC05MjcsOCArODcxLDcgQEAgdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0dXBGdWxsc2NyZWVuSW50ZXJu
YWwoUGxhdGZvcm1MYXllciYgdmkKICAgICBDR1NpemUgdmlkZW9TaXplID0gW21fcGxheWVyQ29u
dHJvbGxlciBjb250ZW50RGltZW5zaW9uc107CiAgICAgQ0dSZWN0IHZpZGVvUmVjdCA9IENHUmVj
dE1ha2UoMCwgMCwgdmlkZW9TaXplLndpZHRoLCB2aWRlb1NpemUuaGVpZ2h0KTsKICAgICBbbV92
aWRlb0xheWVyQ29udGFpbmVyIHNldFZpZGVvUmVjdDp2aWRlb1JlY3RdOwotICAgIGlmIChtX3Zp
ZGVvRnVsbHNjcmVlbk1vZGVsKQotICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5zZXRW
aWRlb0xheWVyRnJhbWUodmlkZW9SZWN0KTsKKyAgICBzZXRWaWRlb0xheWVyRnJhbWUodmlkZW9S
ZWN0KTsKIAogICAgIG1fcGxheWVyVmlld0NvbnRyb2xsZXIgPSBhZG9wdE5TKFthbGxvY0FWUGxh
eWVyVmlld0NvbnRyb2xsZXJJbnN0YW5jZSgpIGluaXRXaXRoVmlkZW9MYXllcjptX3ZpZGVvTGF5
ZXJDb250YWluZXIuZ2V0KCldKTsKICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRTaG93
c1BsYXliYWNrQ29udHJvbHM6Tk9dOwpAQCAtOTUzLDMxICs4OTYsMjQgQEAgdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0dXBGdWxsc2NyZWVuSW50ZXJuYWwoUGxhdGZv
cm1MYXllciYgdmkKIAogICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07CiAKLSAgICBSZWZQdHI8
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHN0cm9uZ1RoaXModGhpcyk7Ci0gICAg
V2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzXSB7Ci0gICAgICAgIGlmIChzdHJvbmdUaGlzLT5tX2Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAgICAgIHN0cm9uZ1RoaXMtPm1fZnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyLT5kaWRTZXR1cEZ1bGxzY3JlZW4oKTsKLSAgICB9KTsKKyAgICBp
ZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCisgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyLT5kaWRTZXR1cEZ1bGxzY3JlZW4oKTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuKCkKIHsKICAgICBMT0coRnVsbHNj
cmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1bGxzY3JlZW4o
JXApIiwgdGhpcyk7Ci0KICAgICBtX2V4aXRDb21wbGV0ZWQgPSBmYWxzZTsKICAgICBtX2V4aXRS
ZXF1ZXN0ZWQgPSBmYWxzZTsKICAgICBtX2VudGVyUmVxdWVzdGVkID0gdHJ1ZTsKIAotICAgIFJl
ZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlzKTsK
LSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhp
c10gewotICAgICAgICBbc3Ryb25nVGhpcy0+bV92aWRlb0xheWVyQ29udGFpbmVyIHNldEJhY2tn
cm91bmRDb2xvcjpbW2dldFVJQ29sb3JDbGFzcygpIGJsYWNrQ29sb3JdIENHQ29sb3JdXTsKLSAg
ICAgICAgaWYgKHN0cm9uZ1RoaXMtPm1vZGUoKSA9PSBIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlT3B0aW1pemVkKQotICAgICAgICAgICAgc3Ryb25nVGhpcy0+ZW50ZXJGdWxs
c2NyZWVuT3B0aW1pemVkKCk7Ci0gICAgICAgIGVsc2UgaWYgKHN0cm9uZ1RoaXMtPm1vZGUoKSA9
PSBIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpCi0gICAgICAg
ICAgICBzdHJvbmdUaGlzLT5lbnRlckZ1bGxzY3JlZW5TdGFuZGFyZCgpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9KTsKKyAgICBbbV92aWRl
b0xheWVyQ29udGFpbmVyIHNldEJhY2tncm91bmRDb2xvcjpbW2dldFVJQ29sb3JDbGFzcygpIGJs
YWNrQ29sb3JdIENHQ29sb3JdXTsKKyAgICBpZiAobW9kZSgpID09IEhUTUxNZWRpYUVsZW1lbnQ6
OlZpZGVvRnVsbHNjcmVlbk1vZGVPcHRpbWl6ZWQpCisgICAgICAgIGVudGVyRnVsbHNjcmVlbk9w
dGltaXplZCgpOworICAgIGVsc2UgaWYgKG1vZGUoKSA9PSBIVE1MTWVkaWFFbGVtZW50OjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpCisgICAgICAgIGVudGVyRnVsbHNjcmVlblN0YW5kYXJk
KCk7CisgICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuT3B0aW1pemVk
KCkKQEAgLTk5NywzNCArOTMzLDIxIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OmVudGVyRnVsbHNjcmVlblN0YW5kYXJkKCkKICAgICAgICAgTE9HKEZ1bGxzY3JlZW4s
ICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuU3RhbmRh
cmQgLSBsYW1iZGEoJXApIC0gc3VjY2VlZGVkKCVzKSIsIHRoaXMsIGJvb2xTdHJpbmcoc3VjY2Vl
ZGVkKSk7CiAgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldFNob3dzUGxheWJhY2tD
b250cm9sczpZRVNdOwogCi0gICAgICAgIFdlYlRocmVhZFJ1bihbdGhpcywgc3Ryb25nVGhpc10g
ewotICAgICAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQotICAgICAgICAg
ICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFbnRlckZ1bGxzY3JlZW4oKTsK
LSAgICAgICAgfSk7CisgICAgICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAg
ICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFbnRlckZ1bGxzY3JlZW4o
KTsKICAgICB9XTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6
ZXhpdEZ1bGxzY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZmluYWxSZWN0KQogewotICAg
IFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlz
KTsKLQogICAgIG1fZXhpdFJlcXVlc3RlZCA9IHRydWU7CiAgICAgaWYgKG1fZXhpdENvbXBsZXRl
ZCkgewotICAgICAgICBXZWJUaHJlYWRSdW4oW3N0cm9uZ1RoaXNdIHsKLSAgICAgICAgICAgIGlm
IChzdHJvbmdUaGlzLT5tX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAgICAgICAg
ICBzdHJvbmdUaGlzLT5tX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRXhpdEZ1bGxzY3Jl
ZW4oKTsKLSAgICAgICAgfSk7CisgICAgICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZl
cikKKyAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFeGl0RnVsbHNj
cmVlbigpOwogICAgICAgICByZXR1cm47CiAgICAgfQotCi0gICAgZGlzcGF0Y2hfYXN5bmMoZGlz
cGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMsIGZpbmFsUmVjdF0gewotICAgICAg
ICBzdHJvbmdUaGlzLT5leGl0RnVsbHNjcmVlbkludGVybmFsKGZpbmFsUmVjdCk7Ci0gICAgfSk7
Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmV4aXRGdWxsc2Ny
ZWVuSW50ZXJuYWwoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZmluYWxSZWN0KQotewotICAgIExP
RyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmV4aXRGdWxs
c2NyZWVuSW50ZXJuYWwoJXApIiwgdGhpcyk7CisgICAgCisgICAgTE9HKEZ1bGxzY3JlZW4sICJX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZXhpdEZ1bGxzY3JlZW4oJXApIiwgdGhp
cyk7CiAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0U2hvd3NQbGF5YmFja0NvbnRyb2xz
Ok5PXTsKICAgICBpZiAobV92aWV3Q29udHJvbGxlcikKICAgICAgICAgW21fcGxheWVyVmlld0Nv
bnRyb2xsZXIgdmlld10uZnJhbWUgPSBbbV9wYXJlbnRWaWV3IGNvbnZlcnRSZWN0OmZpbmFsUmVj
dCB0b1ZpZXc6bmlsXTsKQEAgLTEwNDEsMjUgKzk2NCwyMyBAQCB2b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjpleGl0RnVsbHNjcmVlbkludGVybmFsKGNvbnN0IFdlYkNvcmU6
OkludAogICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzdG9wT3B0aW1pemVkRnVsbHNj
cmVlbl07CiAgICAgfSBlbHNlIGlmIChpc01vZGUoSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxs
c2NyZWVuTW9kZU9wdGltaXplZCB8IEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1v
ZGVTdGFuZGFyZCkpIHsKICAgICAgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOwotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxl
ciBleGl0RnVsbFNjcmVlbkFuaW1hdGVkOk5PIGNvbXBsZXRpb25IYW5kbGVyOltzdHJvbmdUaGlz
XSAoQk9PTCwgTlNFcnJvciopIHsKLSAgICAgICAgICAgIFtzdHJvbmdUaGlzLT5tX3dpbmRvdyBz
ZXRIaWRkZW46Tk9dOwotICAgICAgICAgICAgW3N0cm9uZ1RoaXMtPm1fcGxheWVyVmlld0NvbnRy
b2xsZXIgc3RvcE9wdGltaXplZEZ1bGxzY3JlZW5dOworICAgICAgICBbbV9wbGF5ZXJWaWV3Q29u
dHJvbGxlciBleGl0RnVsbFNjcmVlbkFuaW1hdGVkOk5PIGNvbXBsZXRpb25IYW5kbGVyOltzdHJv
bmdUaGlzLCB0aGlzXSAoQk9PTCwgTlNFcnJvciopIHsKKyAgICAgICAgICAgIFttX3dpbmRvdyBz
ZXRIaWRkZW46Tk9dOworICAgICAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc3RvcE9w
dGltaXplZEZ1bGxzY3JlZW5dOwogICAgICAgICB9XTsKICAgICB9IGVsc2UgaWYgKGlzTW9kZShI
VE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpKSB7CiAgICAgICAg
IFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlz
KTsKLSAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5XaXRoQ29t
cGxldGlvbkhhbmRsZXI6W3N0cm9uZ1RoaXNdIChCT09MLCBOU0Vycm9yKikgewotICAgICAgICAg
ICAgc3Ryb25nVGhpcy0+bV9leGl0Q29tcGxldGVkID0gdHJ1ZTsKKyAgICAgICAgW21fcGxheWVy
Vmlld0NvbnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5XaXRoQ29tcGxldGlvbkhhbmRsZXI6W3N0cm9u
Z1RoaXMsIHRoaXNdIChCT09MLCBOU0Vycm9yKikgeworICAgICAgICAgICAgbV9leGl0Q29tcGxl
dGVkID0gdHJ1ZTsKIAogICAgICAgICAgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwogICAgICAg
ICAgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKLSAgICAgICAgICAg
IFtzdHJvbmdUaGlzLT5tX3ZpZGVvTGF5ZXJDb250YWluZXIgc2V0QmFja2dyb3VuZENvbG9yOltb
Z2V0VUlDb2xvckNsYXNzKCkgY2xlYXJDb2xvcl0gQ0dDb2xvcl1dOwotICAgICAgICAgICAgW1tz
dHJvbmdUaGlzLT5tX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEJhY2tncm91bmRDb2xv
cjpbZ2V0VUlDb2xvckNsYXNzKCkgY2xlYXJDb2xvcl1dOworICAgICAgICAgICAgW21fdmlkZW9M
YXllckNvbnRhaW5lciBzZXRCYWNrZ3JvdW5kQ29sb3I6W1tnZXRVSUNvbG9yQ2xhc3MoKSBjbGVh
ckNvbG9yXSBDR0NvbG9yXV07CisgICAgICAgICAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIg
dmlld10gc2V0QmFja2dyb3VuZENvbG9yOltnZXRVSUNvbG9yQ2xhc3MoKSBjbGVhckNvbG9yXV07
CiAgICAgICAgICAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOwogCi0gICAgICAgICAgICBXZWJU
aHJlYWRSdW4oW3N0cm9uZ1RoaXNdIHsKLSAgICAgICAgICAgICAgICBpZiAoc3Ryb25nVGhpcy0+
bV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0gICAgICAgICAgICAgICAgICAgIHN0cm9uZ1Ro
aXMtPm1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFeGl0RnVsbHNjcmVlbigpOwotICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIp
CisgICAgICAgICAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEV4aXRGdWxs
c2NyZWVuKCk7CiAgICAgICAgIH1dOwogICAgIH07CiB9CkBAIC0xMDc2LDkgKzk5Nyw3IEBAIHZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmNsZWFudXBGdWxsc2NyZWVuKCkK
IHsKICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHN0cm9uZ1Ro
aXModGhpcyk7CiAgICAgCi0gICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVl
dWUoKSwgW3N0cm9uZ1RoaXNdIHsKLSAgICAgICAgc3Ryb25nVGhpcy0+Y2xlYW51cEZ1bGxzY3Jl
ZW5JbnRlcm5hbCgpOwotICAgIH0pOworICAgIGNsZWFudXBGdWxsc2NyZWVuSW50ZXJuYWwoKTsK
IH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y2xlYW51cEZ1bGxz
Y3JlZW5JbnRlcm5hbCgpCkBAIC0xMTIwLDEyICsxMDM5LDEwIEBAIHZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmNsZWFudXBGdWxsc2NyZWVuSW50ZXJuYWwoKQogICAgIG1f
cGFyZW50VmlldyA9IG5pbDsKICAgICBtX3BhcmVudFdpbmRvdyA9IG5pbDsKICAgICAKLSAgICBS
ZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHN0cm9uZ1RoaXModGhpcyk7
Ci0gICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzXSB7Ci0gICAgICAgIGlmIChzdHJvbmdUaGlz
LT5tX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAgICAgIHN0cm9uZ1RoaXMtPm1f
ZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRDbGVhbnVwRnVsbHNjcmVlbigpOwotICAgICAg
ICBzdHJvbmdUaGlzLT5tX2VudGVyUmVxdWVzdGVkID0gZmFsc2U7Ci0gICAgfSk7CisgICAgaWYg
KG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQorICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlci0+ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKTsKKworICAgIG1fZW50ZXJSZXF1ZXN0ZWQg
PSBmYWxzZTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6aW52
YWxpZGF0ZSgpCkBAIC0xMTQ2LDEwICsxMDYzLDcgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpCiAgICAgCiAgICAg
TE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cmVxdWVz
dEhpZGVBbmRFeGl0RnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKIAotICAgIFJlZlB0cjxXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlzKTsKLSAgICBkaXNwYXRj
aF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpc10gewotICAgICAg
ICBbc3Ryb25nVGhpcy0+bV93aW5kb3cgc2V0SGlkZGVuOllFU107Ci0gICAgfSk7CisgICAgW21f
d2luZG93IHNldEhpZGRlbjpZRVNdOwogCiAgICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwg
JiYgIW1fZXhpdFJlcXVlc3RlZCkgewogICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5w
YXVzZSgpOwpAQCAtMTE2MCwxOSArMTA3NCwxNiBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCkKIHZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZShib29s
IHZpc2libGUsIGNvbnN0IEludFJlY3QmIGlubGluZVJlY3QpCiB7CiAgICAgTE9HKEZ1bGxzY3Jl
ZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cHJlcGFyZWRUb1JldHVyblRv
SW5saW5lKCVwKSAtIHZpc2libGUoJXMpIiwgdGhpcywgYm9vbFN0cmluZyh2aXNpYmxlKSk7Ci0g
ICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRo
aXMpOwotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJv
bmdUaGlzLCB2aXNpYmxlLCBpbmxpbmVSZWN0XSB7Ci0gICAgICAgIGlmIChzdHJvbmdUaGlzLT5t
X3ByZXBhcmVUb0lubGluZUNhbGxiYWNrKSB7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
IChzdHJvbmdUaGlzLT5tX3ZpZXdDb250cm9sbGVyKQotICAgICAgICAgICAgICAgIFtzdHJvbmdU
aGlzLT5tX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddLmZyYW1lID0gW3N0cm9uZ1RoaXMtPm1f
cGFyZW50VmlldyBjb252ZXJ0UmVjdDppbmxpbmVSZWN0IHRvVmlldzpuaWxdOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIFtzdHJvbmdUaGlzLT5tX3BsYXllclZpZXdDb250cm9s
bGVyIHZpZXddLmZyYW1lID0gaW5saW5lUmVjdDsKKyAgICBpZiAobV9wcmVwYXJlVG9JbmxpbmVD
YWxsYmFjaykgeworICAgICAgICAKKyAgICAgICAgaWYgKG1fdmlld0NvbnRyb2xsZXIpCisgICAg
ICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XS5mcmFtZSA9IFttX3BhcmVudFZp
ZXcgY29udmVydFJlY3Q6aW5saW5lUmVjdCB0b1ZpZXc6bmlsXTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10uZnJhbWUgPSBpbmxpbmVSZWN0
OwogCi0gICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoYm9vbCk+IGNhbGxiYWNrID0gV1RG
Ojptb3ZlKHN0cm9uZ1RoaXMtPm1fcHJlcGFyZVRvSW5saW5lQ2FsbGJhY2spOwotICAgICAgICAg
ICAgY2FsbGJhY2sodmlzaWJsZSk7Ci0gICAgICAgIH0KLSAgICB9KTsKKyAgICAgICAgc3RkOjpm
dW5jdGlvbjx2b2lkKGJvb2wpPiBjYWxsYmFjayA9IFdURjo6bW92ZShtX3ByZXBhcmVUb0lubGlu
ZUNhbGxiYWNrKTsKKyAgICAgICAgY2FsbGJhY2sodmlzaWJsZSk7CisgICAgfQogfQogCiBib29s
IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjptYXlBdXRvbWF0aWNhbGx5U2hvd1Zp
ZGVvT3B0aW1pemVkKCkKQEAgLTExOTYsMjEgKzExMDcsMjEgQEAgdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6d2lsbFN0YXJ0T3B0aW1pemVkRnVsbHNjcmVlbigpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dD4gc3Ryb25nVGhpcyh0aGlzKTsKLSAgICBmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoW3N0
cm9uZ1RoaXNdKGJvb2wgdmlzaWJsZSkgeworICAgIGZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGlu
ZShbc3Ryb25nVGhpcywgdGhpc10oYm9vbCB2aXNpYmxlKSB7CiAgICAgICAgIExPRyhGdWxsc2Ny
ZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndpbGxTdGFydE9wdGltaXpl
ZEZ1bGxzY3JlZW4gLSBsYW1iZGEoJXApIC0gdmlzaWJsZSglcykiLCBzdHJvbmdUaGlzLmdldCgp
LCBib29sU3RyaW5nKHZpc2libGUpKTsKIAogICAgICAgICBpZiAoIXZpc2libGUpIHsKLSAgICAg
ICAgICAgIFtzdHJvbmdUaGlzLT5tX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKKyAgICAgICAgICAg
IFttX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCi0gICAgICAgIFtbc3Ryb25nVGhpcy0+bV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBs
YXlvdXRJZk5lZWRlZF07CisgICAgICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBs
YXlvdXRJZk5lZWRlZF07CiAKLSAgICAgICAgW3N0cm9uZ1RoaXMtPm1fcGxheWVyVmlld0NvbnRy
b2xsZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpZRVMgY29tcGxldGlvbkhhbmRsZXI6W3N0cm9u
Z1RoaXNdIChCT09MIGNvbXBsZXRlZCwgTlNFcnJvciopIHsKKyAgICAgICAgW21fcGxheWVyVmll
d0NvbnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpZRVMgY29tcGxldGlvbkhhbmRsZXI6
W3N0cm9uZ1RoaXMsIHRoaXNdIChCT09MIGNvbXBsZXRlZCwgTlNFcnJvciopIHsKICAgICAgICAg
ICAgIGlmICghY29tcGxldGVkKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IHN0cm9uZ1RoaXMtPmNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5N
b2RlU3RhbmRhcmQpOwotICAgICAgICAgICAgW3N0cm9uZ1RoaXMtPm1fd2luZG93IHNldEhpZGRl
bjpZRVNdOworICAgICAgICAgICAgY2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVs
bHNjcmVlbk1vZGVTdGFuZGFyZCk7CisgICAgICAgICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOllF
U107CiAgICAgICAgIH1dOwogICAgIH0pOwogfQpAQCAtMTIxOSwxMyArMTEzMCwxMCBAQCB2b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpkaWRTdGFydE9wdGltaXplZEZ1bGxz
Y3JlZW4oKQogewogICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OmRpZFN0YXJ0T3B0aW1pemVkRnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKICAgICBb
bV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRTaG93c1BsYXliYWNrQ29udHJvbHM6WUVTXTsKKyAg
ICBbbV93aW5kb3cgc2V0SGlkZGVuOllFU107CiAKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ+IHN0cm9uZ1RoaXModGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKFtz
dHJvbmdUaGlzXSB7Ci0gICAgICAgIFtzdHJvbmdUaGlzLT5tX3dpbmRvdyBzZXRIaWRkZW46WUVT
XTsKLSAgICAgICAgaWYgKHN0cm9uZ1RoaXMtPm1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQot
ICAgICAgICAgICAgc3Ryb25nVGhpcy0+bV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEVu
dGVyRnVsbHNjcmVlbigpOwotICAgIH0pOworICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNl
cnZlcikKKyAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEVudGVyRnVsbHNj
cmVlbigpOwogfQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3aWxs
U3RvcE9wdGltaXplZEZ1bGxzY3JlZW4oKQpAQCAtMTIzMywxMSArMTE0MSw4IEBAIHZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndpbGxTdG9wT3B0aW1pemVkRnVsbHNjcmVl
bigpCiAgICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6d2lsbFN0b3BPcHRpbWl6ZWRGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOwogICAgIFttX3dpbmRv
dyBzZXRIaWRkZW46Tk9dOwogCi0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOwotICAgIFdlYlRocmVhZFJ1bihbc3Ryb25nVGhpc10g
ewotICAgICAgICBpZiAoc3Ryb25nVGhpcy0+bV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKLSAgICAg
ICAgICAgIHN0cm9uZ1RoaXMtPm1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPnJlcXVlc3RFeGl0RnVs
bHNjcmVlbigpOwotICAgIH0pOworICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQorICAg
ICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZXF1ZXN0RXhpdEZ1bGxzY3JlZW4oKTsKIH0K
IAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZGlkU3RvcE9wdGltaXpl
ZEZ1bGxzY3JlZW4oKQpAQCAtMTI1MSwxMyArMTE1NiwxMSBAQCB2b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjpkaWRTdG9wT3B0aW1pemVkRnVsbHNjcmVlbigpCiAgICAgW21f
dmlkZW9MYXllckNvbnRhaW5lciBzZXRCYWNrZ3JvdW5kQ29sb3I6W1tnZXRVSUNvbG9yQ2xhc3Mo
KSBjbGVhckNvbG9yXSBDR0NvbG9yXV07CiAgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZp
ZXddIHNldEJhY2tncm91bmRDb2xvcjpbZ2V0VUlDb2xvckNsYXNzKCkgY2xlYXJDb2xvcl1dOwog
Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlz
KHRoaXMpOwotICAgIFdlYlRocmVhZFJ1bihbc3Ryb25nVGhpc10gewotICAgICAgICBzdHJvbmdU
aGlzLT5jbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZU9wdGlt
aXplZCk7Ci0gICAgICAgIFtzdHJvbmdUaGlzLT5tX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKLSAg
ICAgICAgaWYgKHN0cm9uZ1RoaXMtPm1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQotICAgICAg
ICAgICAgc3Ryb25nVGhpcy0+bV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEV4aXRGdWxs
c2NyZWVuKCk7Ci0gICAgfSk7CisgICAgY2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVv
RnVsbHNjcmVlbk1vZGVPcHRpbWl6ZWQpOworICAgIFttX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsK
KworICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAgICAgICAgbV9mdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEV4aXRGdWxsc2NyZWVuKCk7CiB9CiAKIHZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndpbGxDYW5jZWxPcHRpbWl6ZWRGdWxsc2NyZWVu
KCkKQEAgLTEyNjcsMTEgKzExNzAsOCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0Ojp3aWxsQ2FuY2VsT3B0aW1pemVkRnVsbHNjcmVlbigpCiAgICAgW21fdmlkZW9MYXll
ckNvbnRhaW5lciBzZXRCYWNrZ3JvdW5kQ29sb3I6W1tnZXRVSUNvbG9yQ2xhc3MoKSBjbGVhckNv
bG9yXSBDR0NvbG9yXV07CiAgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEJh
Y2tncm91bmRDb2xvcjpbZ2V0VUlDb2xvckNsYXNzKCkgY2xlYXJDb2xvcl1dOwogCi0gICAgUmVm
UHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOwot
ICAgIFdlYlRocmVhZFJ1bihbc3Ryb25nVGhpc10gewotICAgICAgICBpZiAoc3Ryb25nVGhpcy0+
bV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKLSAgICAgICAgICAgIHN0cm9uZ1RoaXMtPm1fdmlkZW9G
dWxsc2NyZWVuTW9kZWwtPnJlcXVlc3RFeGl0RnVsbHNjcmVlbigpOwotICAgIH0pOworICAgIGlm
IChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQorICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVs
LT5yZXF1ZXN0RXhpdEZ1bGxzY3JlZW4oKTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6ZGlkQ2FuY2VsT3B0aW1pemVkRnVsbHNjcmVlbigpCkBAIC0xMjgwLDEz
ICsxMTgwLDExIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZENh
bmNlbE9wdGltaXplZEZ1bGxzY3JlZW4oKQogICAgIGlmIChoYXNNb2RlKEhUTUxNZWRpYUVsZW1l
bnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlz
KTsKLSAgICBXZWJUaHJlYWRSdW4oW3N0cm9uZ1RoaXNdIHsKLSAgICAgICAgc3Ryb25nVGhpcy0+
Y2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVPcHRpbWl6ZWQp
OwotICAgICAgICBbc3Ryb25nVGhpcy0+bV93aW5kb3cgc2V0SGlkZGVuOllFU107Ci0gICAgICAg
IGlmIChzdHJvbmdUaGlzLT5tX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAgICAg
IHN0cm9uZ1RoaXMtPm1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFeGl0RnVsbHNjcmVl
bigpOwotICAgIH0pOworICAgIGNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlT3B0aW1pemVkKTsKKyAgICBbbV93aW5kb3cgc2V0SGlkZGVuOllFU107CisKKyAg
ICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCisgICAgICAgIG1fZnVsbHNjcmVlbkNo
YW5nZU9ic2VydmVyLT5kaWRFeGl0RnVsbHNjcmVlbigpOwogfQogCiB2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0OjpwcmVwYXJlRm9yT3B0aW1pemVkRnVsbHNjcmVlblN0b3BX
aXRoQ29tcGxldGlvbkhhbmRsZXIodm9pZCAoXmNvbXBsZXRpb25IYW5kbGVyKShCT09MIHJlc3Rv
cmVkKSkKQEAgLTEzMjMsNSArMTIyMSwxMyBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpjbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZQogICAg
ICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5mdWxsc2NyZWVuTW9kZUNoYW5nZWQobV9tb2Rl
KTsKIH0KIAordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0VmlkZW9M
YXllckZyYW1lKFdlYkNvcmU6OkZsb2F0UmVjdCB2aWRlb0xheWVyRnJhbWUpCit7CisgICAgbV92
aWRlb0xheWVyRnJhbWUgPSB2aWRlb0xheWVyRnJhbWU7CisgICAgCisgICAgaWYgKG1fdmlkZW9G
dWxsc2NyZWVuTW9kZWwpCisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPnNldFZpZGVv
TGF5ZXJGcmFtZSh2aWRlb0xheWVyRnJhbWUpOworfQorCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaAppbmRl
eCA4ZjI2MjMwOTM4MjFiNDE3ZmEwZGExMjU1ODIzMTAwY2MwMTkzYjA4Li42ZGQwYjBkZjY5NjFh
ZTM3Zjg1YWUzN2I4YTEyNDEyYmFkYjNiOWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaApAQCAtNDgsMTAgKzQ4LDgg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBlbmRTY2FubmluZygpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgcmVxdWVzdEV4aXRGdWxsc2NyZWVuKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBz
ZXRWaWRlb0xheWVyRnJhbWUoRmxvYXRSZWN0KSA9IDA7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3Qg
dmlkZW9MYXllckZyYW1lKCkgY29uc3QgPSAwOwogICAgIGVudW0gVmlkZW9HcmF2aXR5IHsgVmlk
ZW9HcmF2aXR5UmVzaXplLCBWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QsIFZpZGVvR3Jhdml0eVJl
c2l6ZUFzcGVjdEZpbGwgfTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmlkZW9MYXllckdyYXZpdHko
VmlkZW9HcmF2aXR5KSA9IDA7Ci0gICAgdmlydHVhbCBWaWRlb0dyYXZpdHkgdmlkZW9MYXllckdy
YXZpdHkoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNlbGVjdEF1ZGlvTWVkaWFPcHRp
b24odWludDY0X3QgaW5kZXgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0TGVnaWJsZU1l
ZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGZ1bGxzY3Jl
ZW5Nb2RlQ2hhbmdlZChIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKSA9IDA7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oCmluZGV4IDU5OWE3NGEzYTc5NmQxNTE1
NDI3MjViZTc2ZGEyMzlkMDY2ODc4YzkuLjRhODFkNGIyZGVjNWI5MzEzMzFiNzhjMGEyYWQ0MWI3
YzkzMDUzZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oCkBAIC02OCw5ICs2
OCw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZW5kU2Nhbm5p
bmcoKSBvdmVycmlkZTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcmVxdWVzdEV4
aXRGdWxsc2NyZWVuKCkgb3ZlcnJpZGU7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lk
IHNldFZpZGVvTGF5ZXJGcmFtZShGbG9hdFJlY3QpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgRmxvYXRSZWN0IHZpZGVvTGF5ZXJGcmFtZSgpIGNvbnN0IG92ZXJyaWRlOwog
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0eShWaWRl
b0dyYXZpdHkpIG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgVmlkZW9HcmF2
aXR5IHZpZGVvTGF5ZXJHcmF2aXR5KCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB2b2lkIHNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpIG92
ZXJyaWRlOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZWxlY3RMZWdpYmxlTWVk
aWFPcHRpb24odWludDY0X3QgaW5kZXgpIG92ZXJyaWRlOwogICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgdm9pZCBmdWxsc2NyZWVuTW9kZUNoYW5nZWQoSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9G
dWxsc2NyZWVuTW9kZSkgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQu
bW0KaW5kZXggNjlmN2JkYTYyYjY0NDA3MjZjZjQ3M2ZhOWQ5OThmYzM1MzBkZmUwNS4uOGI2OWZk
Y2FmNTYzYjZkZjdlOWQ4YTVkNzFmMzI1NzY5ZmU5OTVjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudC5tbQpAQCAtMTYwLDEyNSArMTYwLDc0IEBAIHZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKFBsYXRmb3Jt
TGF5ZXIqCiAgICAgW21fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgc2V0QW5jaG9yUG9pbnQ6Q0dQb2lu
dE1ha2UoMC41LCAwLjUpXTsKICAgICBbbV92aWRlb0Z1bGxzY3JlZW5MYXllciBzZXRCb3VuZHM6
bV92aWRlb0ZyYW1lXTsKICAgICAKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAgICBXZWJUaHJlYWRSdW4oXnsK
LSAgICAgICAgaWYgKG1fdmlkZW9FbGVtZW50KQotICAgICAgICAgICAgbV92aWRlb0VsZW1lbnQt
PnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIuZ2V0KCkpOwot
ICAgICAgICBwcm90ZWN0LmNsZWFyKCk7Ci0gICAgfSk7CisgICAgaWYgKG1fdmlkZW9FbGVtZW50
KQorICAgICAgICBtX3ZpZGVvRWxlbWVudC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIobV92aWRl
b0Z1bGxzY3JlZW5MYXllci5nZXQoKSk7CiB9CiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ6OnBsYXkoKQogewotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBwcm90ZWN0KHRoaXMpOwotICAgIFdlYlRocmVhZFJ1
biheewotICAgICAgICBpZiAobV92aWRlb0VsZW1lbnQpCi0gICAgICAgICAgICBtX3ZpZGVvRWxl
bWVudC0+cGxheSgpOwotICAgICAgICBwcm90ZWN0LmNsZWFyKCk7Ci0gICAgfSk7CisgICAgaWYg
KG1fdmlkZW9FbGVtZW50KQorICAgICAgICBtX3ZpZGVvRWxlbWVudC0+cGxheSgpOwogfQogCiB2
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpwYXVzZSgpCiB7Ci0gICAg
X19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IHByb3Rl
Y3QodGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIGlmIChtX3ZpZGVvRWxlbWVu
dCkKLSAgICAgICAgICAgIG1fdmlkZW9FbGVtZW50LT5wYXVzZSgpOwotICAgICAgICBwcm90ZWN0
LmNsZWFyKCk7Ci0gICAgfSk7CisgICAgaWYgKG1fdmlkZW9FbGVtZW50KQorICAgICAgICBtX3Zp
ZGVvRWxlbWVudC0+cGF1c2UoKTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZp
ZGVvRWxlbWVudDo6dG9nZ2xlUGxheVN0YXRlKCkKIHsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAgICBXZWJU
aHJlYWRSdW4oXnsKLSAgICAgICAgaWYgKG1fdmlkZW9FbGVtZW50KQotICAgICAgICAgICAgbV92
aWRlb0VsZW1lbnQtPnRvZ2dsZVBsYXlTdGF0ZSgpOwotICAgICAgICBwcm90ZWN0LmNsZWFyKCk7
Ci0gICAgfSk7CisgICAgaWYgKG1fdmlkZW9FbGVtZW50KQorICAgICAgICBtX3ZpZGVvRWxlbWVu
dC0+dG9nZ2xlUGxheVN0YXRlKCk7CiB9CiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ6OmJlZ2luU2NydWJiaW5nKCkKIHsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAgICBXZWJU
aHJlYWRSdW4oXnsKLSAgICAgICAgaWYgKG1fdmlkZW9FbGVtZW50KQotICAgICAgICAgICAgbV92
aWRlb0VsZW1lbnQtPmJlZ2luU2NydWJiaW5nKCk7Ci0gICAgICAgIHByb3RlY3QuY2xlYXIoKTsK
LSAgICB9KTsKKyAgICBpZiAobV92aWRlb0VsZW1lbnQpCisgICAgICAgIG1fdmlkZW9FbGVtZW50
LT5iZWdpblNjcnViYmluZygpOwogfQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlk
ZW9FbGVtZW50OjplbmRTY3J1YmJpbmcoKQogewotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBwcm90ZWN0KHRoaXMpOwotICAgIFdlYlRocmVh
ZFJ1biheewotICAgICAgICBpZiAobV92aWRlb0VsZW1lbnQpCi0gICAgICAgICAgICBtX3ZpZGVv
RWxlbWVudC0+ZW5kU2NydWJiaW5nKCk7Ci0gICAgICAgIHByb3RlY3QuY2xlYXIoKTsKLSAgICB9
KTsKKyAgICBpZiAobV92aWRlb0VsZW1lbnQpCisgICAgICAgIG1fdmlkZW9FbGVtZW50LT5lbmRT
Y3J1YmJpbmcoKTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dDo6c2Vla1RvVGltZShkb3VibGUgdGltZSkKIHsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAgICBXZWJUaHJl
YWRSdW4oXnsKLSAgICAgICAgaWYgKG1fdmlkZW9FbGVtZW50KQotICAgICAgICAgICAgbV92aWRl
b0VsZW1lbnQtPnNldEN1cnJlbnRUaW1lKHRpbWUpOwotICAgICAgICBwcm90ZWN0LmNsZWFyKCk7
Ci0gICAgfSk7CisgICAgaWYgKG1fdmlkZW9FbGVtZW50KQorICAgICAgICBtX3ZpZGVvRWxlbWVu
dC0+c2V0Q3VycmVudFRpbWUodGltZSk7CiB9CiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ6OmZhc3RTZWVrKGRvdWJsZSB0aW1lKQogewotICAgIF9fYmxvY2sgUmVm
UHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBwcm90ZWN0KHRoaXMpOwot
ICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAobV92aWRlb0VsZW1lbnQpCi0gICAgICAg
ICAgICBtX3ZpZGVvRWxlbWVudC0+ZmFzdFNlZWsodGltZSk7Ci0gICAgICAgIHByb3RlY3QuY2xl
YXIoKTsKLSAgICB9KTsKKyAgICBpZiAobV92aWRlb0VsZW1lbnQpCisgICAgICAgIG1fdmlkZW9F
bGVtZW50LT5mYXN0U2Vlayh0aW1lKTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudDo6YmVnaW5TY2FubmluZ0ZvcndhcmQoKQogewotICAgIF9fYmxvY2sgUmVm
UHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBwcm90ZWN0KHRoaXMpOwot
ICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAobV92aWRlb0VsZW1lbnQpCi0gICAgICAg
ICAgICBtX3ZpZGVvRWxlbWVudC0+YmVnaW5TY2FubmluZyhNZWRpYUNvbnRyb2xsZXJJbnRlcmZh
Y2U6OkZvcndhcmQpOwotICAgICAgICBwcm90ZWN0LmNsZWFyKCk7Ci0gICAgfSk7CisgICAgaWYg
KG1fdmlkZW9FbGVtZW50KQorICAgICAgICBtX3ZpZGVvRWxlbWVudC0+YmVnaW5TY2FubmluZyhN
ZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2U6OkZvcndhcmQpOwogfQogCiB2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpiZWdpblNjYW5uaW5nQmFja3dhcmQoKQogewotICAg
IF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBwcm90
ZWN0KHRoaXMpOwotICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAobV92aWRlb0VsZW1l
bnQpCi0gICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+YmVnaW5TY2FubmluZyhNZWRpYUNvbnRy
b2xsZXJJbnRlcmZhY2U6OkJhY2t3YXJkKTsKLSAgICAgICAgcHJvdGVjdC5jbGVhcigpOwotICAg
IH0pOworICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKKyAgICAgICAgbV92aWRlb0VsZW1lbnQtPmJl
Z2luU2Nhbm5pbmcoTWVkaWFDb250cm9sbGVySW50ZXJmYWNlOjpCYWNrd2FyZCk7CiB9CiAKIHZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmVuZFNjYW5uaW5nKCkKIHsK
LSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4g
cHJvdGVjdCh0aGlzKTsKLSAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYgKG1fdmlkZW9F
bGVtZW50KQotICAgICAgICAgICAgbV92aWRlb0VsZW1lbnQtPmVuZFNjYW5uaW5nKCk7Ci0gICAg
ICAgIHByb3RlY3QuY2xlYXIoKTsKLSAgICB9KTsKKyAgICBpZiAobV92aWRlb0VsZW1lbnQpCisg
ICAgICAgIG1fdmlkZW9FbGVtZW50LT5lbmRTY2FubmluZygpOwogfQogCiB2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpyZXF1ZXN0RXhpdEZ1bGxzY3JlZW4oKQogewot
ICAgIGlmICghbV92aWRlb0VsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIF9fYmxvY2sg
UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBwcm90ZWN0KHRoaXMp
OwotICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAobV92aWRlb0VsZW1lbnQgJiYgbV92
aWRlb0VsZW1lbnQtPmlzRnVsbHNjcmVlbigpKQotICAgICAgICAgICAgbV92aWRlb0VsZW1lbnQt
PmV4aXRGdWxsc2NyZWVuKCk7Ci0gICAgICAgIHByb3RlY3QuY2xlYXIoKTsKLSAgICB9KTsKKyAg
ICBpZiAobV92aWRlb0VsZW1lbnQgJiYgbV92aWRlb0VsZW1lbnQtPmlzRnVsbHNjcmVlbigpKQor
ICAgICAgICBtX3ZpZGVvRWxlbWVudC0+ZXhpdEZ1bGxzY3JlZW4oKTsKIH0KIAogdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9MYXllckZyYW1lKEZsb2F0
UmVjdCByZWN0KQpAQCAtMjg4LDExICsyMzcsNiBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0xheWVyRnJhbWUoRmxvYXRSZWN0IHJlY3QpCiAgICAg
bV92aWRlb0VsZW1lbnQtPnNldFZpZGVvRnVsbHNjcmVlbkZyYW1lKHJlY3QpOwogfQogCi1GbG9h
dFJlY3QgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnZpZGVvTGF5ZXJGcmFt
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdmlkZW9GcmFtZTsKLX0KLQogdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9MYXllckdyYXZpdHkoV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSBncmF2aXR5KQogewogICAgIE1lZGlhUGxh
eWVyOjpWaWRlb0dyYXZpdHkgdmlkZW9HcmF2aXR5ID0gTWVkaWFQbGF5ZXI6OlZpZGVvR3Jhdml0
eVJlc2l6ZUFzcGVjdDsKQEAgLTMwOCwyMSArMjUyLDYgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9MYXllckdyYXZpdHkoV2ViVmlkZW9GdWxsc2Ny
ZWUKICAgICBtX3ZpZGVvRWxlbWVudC0+c2V0VmlkZW9GdWxsc2NyZWVuR3Jhdml0eSh2aWRlb0dy
YXZpdHkpOwogfQogCi1XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5IFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojp2aWRlb0xheWVyR3Jhdml0eSgpIGNvbnN0
Ci17Ci0gICAgc3dpdGNoIChtX3ZpZGVvRWxlbWVudC0+dmlkZW9GdWxsc2NyZWVuR3Jhdml0eSgp
KSB7Ci0gICAgY2FzZSBNZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5UmVzaXplOgotICAgICAgICBy
ZXR1cm4gVmlkZW9HcmF2aXR5UmVzaXplOwotICAgIGNhc2UgTWVkaWFQbGF5ZXI6OlZpZGVvR3Jh
dml0eVJlc2l6ZUFzcGVjdDoKLSAgICAgICAgcmV0dXJuIFZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVj
dDsKLSAgICBjYXNlIE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsOgot
ICAgICAgICByZXR1cm4gVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbDsKLSAgICB9Ci0KLSAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gVmlkZW9HcmF2aXR5UmVzaXplOwot
fQotCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZWxlY3RBdWRp
b01lZGlhT3B0aW9uKHVpbnQ2NF90IHNlbGVjdGVkQXVkaW9JbmRleCkKIHsKICAgICBBdWRpb1Ry
YWNrKiBzZWxlY3RlZEF1ZGlvVHJhY2sgPSBudWxscHRyOwpAQCAtNDM0LDEyICszNjMsOCBAQCBj
b25zdCBBdG9taWNTdHJpbmcmIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojpl
dmVudE5hbWVBbGwoKQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
OjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQoSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVu
TW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlKQogewotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBwcm90ZWN0KHRoaXMpOwotICAgIFdlYlRocmVh
ZFJ1biheewotICAgICAgICBpZiAobV92aWRlb0VsZW1lbnQpCi0gICAgICAgICAgICBtX3ZpZGVv
RWxlbWVudC0+ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHZpZGVvRnVsbHNjcmVlbk1vZGUpOwotICAg
ICAgICBwcm90ZWN0LmNsZWFyKCk7Ci0gICAgfSk7CisgICAgaWYgKG1fdmlkZW9FbGVtZW50KQor
ICAgICAgICBtX3ZpZGVvRWxlbWVudC0+ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHZpZGVvRnVsbHNj
cmVlbk1vZGUpOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oCmluZGV4IGQ5
ZTY1Y2U5MzM4YmY4YzM1YTMxMDY0ODBjOWNjNmEyYTIyNDc1MTYuLjE2MGY2MzQwNWQ5NGEyMzgx
MjgwNThhMDY2OWM2NjkyMWZhZDk2NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmgKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaApAQCAt
ODAsMTUgKzgwLDEyIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGJlZ2luU2Nhbm5pbmdC
YWNrd2FyZCgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBlbmRTY2FubmluZygpIG92ZXJy
aWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXRWaWRlb0xheWVyRnJhbWUoV2ViQ29yZTo6RmxvYXRS
ZWN0KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCB2aWRlb0xheWVy
RnJhbWUoKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmlkZW9MYXllckdy
YXZpdHkoV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSkgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCBWaWRlb0dyYXZpdHkgdmlkZW9MYXllckdyYXZpdHkoKSBjb25z
dCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50
NjRfdCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNlbGVjdExlZ2libGVNZWRpYU9wdGlv
bih1aW50NjRfdCkgb3ZlcnJpZGU7CiAKICAgICBXZWJQYWdlUHJveHkqIG1fcGFnZTsKICAgICBS
ZXRhaW5QdHI8UGxhdGZvcm1MYXllcj4gbV9sYXllckhvc3Q7Ci0gICAgV2ViQ29yZTo6RmxvYXRS
ZWN0IG1fdmlkZW9MYXllckZyYW1lOwogICAgIFZpZGVvR3Jhdml0eSBtX3ZpZGVvTGF5ZXJHcmF2
aXR5IHsgVmlkZW9HcmF2aXR5UmVzaXplIH07CiB9OwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0g
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eS5tbQppbmRleCAwZmVlNzQzMGY5ZjExZDJiN2RiMTAzMDEyZmQwOWZiYWU0YWIwMDA1Li4w
MjNmZWFhZmNjNjUyNzliMGFmODNhNTQ0ZDk2NWE4YWRlYzI3N2ZjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eS5tbQpAQCAtMjIyLDExICsyMjIsNiBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eTo6ZW5kU2Nhbm5pbmcoKQogICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RW5kU2Nhbm5pbmcoKSwgbV9wYWdlLT5wYWdlSUQo
KSk7CiB9CiAKLUZsb2F0UmVjdCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnZpZGVv
TGF5ZXJGcmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdmlkZW9MYXllckZyYW1lOwotfQot
CiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0VmlkZW9MYXllckZyYW1l
KFdlYkNvcmU6OkZsb2F0UmVjdCBmcmFtZSkKIHsKICAgICBtX3ZpZGVvTGF5ZXJGcmFtZSA9IGZy
YW1lOwpAQCAtMjQyLDExICsyMzcsNiBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6c2V0VmlkZW9MYXllckZyYW1lKFdlYkNvcmU6OkZsb2F0UmVjdCBmcmFtZQogICAgIH0K
IH0KIAotV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnZpZGVvTGF5ZXJHcmF2aXR5KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV92aWRlb0xheWVyR3Jhdml0eTsKLX0KLQogdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6OnNldFZpZGVvTGF5ZXJHcmF2aXR5KFdlYkNvcmU6OldlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkgZ3Jhdml0eSkKIHsKICAgICBtX3ZpZGVvTGF5
ZXJHcmF2aXR5ID0gZ3Jhdml0eTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253248</attachid>
            <date>2015-05-15 17:45:25 -0700</date>
            <delta_ts>2015-05-15 17:52:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143954-20150515174400.patch</filename>
            <type>text/plain</type>
            <size>63428</size>
            <attacher name="Jeremy Jones">jeremyj-wk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg0NDE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmUzY2Q3YmJlMDVjYTVi
NjJjMzRiODAxZjU0NDQwNWIxNDViOGUzMS4uZGVhNTgzNDJhNjE0YWYyMmU2MDlmMzNmYTdhNjkz
MmI0YTcwZjlhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExOSBAQAorMjAxNS0wNC0yMCAgSmVy
ZW15IEpvbmVzICA8amVyZW15akBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgV2ViS2l0
MSBzcGVjaWZpYyB0aHJlYWRpbmcgY29kZSBvdXQgb2YgV2ViVmlkZW9GdWxsc2NyZWVuIGNvZGUg
dGhhdCBpcyBzaGFyZWQgd2l0aCBXZWJLaXQyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQzOTU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQgaXMg
dXNlZCBpbiBib3RoIFdlYktpdDEgYW5kIFdlYktpdDIuIEluIFdlYktpdDEsIHRoZSBtb2RlbCBy
dW5zIGluIHRoZSBXZWJUaHJlYWQsIHdoaWxlCisgICAgICAgIHRoZSBpbnRlcmZhY2UgaXMgb24g
dGhlIG1haW4gdGhyZWFkLiBTbyB0aGVyZSBpcyBjb2RlIHRvIGRpc3BhdGNoIGJldHdlZW4gdGhl
c2UgdHdvIHRocmVhZCB3aGVuIGNvbW11bmljYXRpbmcgYmV0d2VlbiB0aGUKKyAgICAgICAgaW50
ZXJmYWNlIGFuZCB0aGUgbW9kZWwuIEluIFdlYktpdDIsIHRoaXMgaXMgaGFuZGxlZCBhdXRvbWF0
aWNhbGx5IGJ5IHRoZSBJUEMgbWVjaGFuaXNtLiBBcyBhIHJlc3VsdCwgdGhlIHRocmVhZGluZyBj
b2RlCisgICAgICAgIGluIFdlYlZpZGVvRnVsbHNjcmVlbmJJbnRlcmZhY2VBVktpdCBhbmQgaW4g
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQgaXMgcmVkdW5kYW50IGluIFdlYktp
dDIgYW5kIHJlbGllcyBvbgorICAgICAgICBXZWJUaHJlYWRSdW4gYmVpbmcgYSBuby1vcCBpbiBX
ZWJLaXQyLgorCisgICAgICAgIFRoaXMgY2hhbmdlIGNsYXJpZmllcyB0aGlzIGFuZCBzaW1wbGlm
aWVzIHRoZSBXZWJLaXQyIHBhdGggYnkgbW92aW5nIHRoZSBXZWJLaXQxIHNwZWNpZmljIHRocmVh
ZGluZyBjb2RlIGludG8KKyAgICAgICAgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQsIHdoaWNoIGlzIHRoZSBXZWJLaXQxIHNwZWNpZmljIGNvbnRyb2xsZXIuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tOgorICAg
ICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OldlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0KToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0OjpzZXRDb250cm9sbGVyKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpkaWRTZXR1cEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZEV4aXRGdWxsc2NyZWVuKToKKyAgICAg
ICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpkaWRDbGVhbnVwRnVsbHNj
cmVlbik6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZnVs
bHNjcmVlbk1heVJldHVyblRvSW5saW5lKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpyZXNldE1lZGlhU3RhdGUpOgorICAgICAgICAoV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldER1cmF0aW9uKToKKyAgICAgICAgKFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRDdXJyZW50VGltZSk6CisgICAgICAgIChX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0QnVmZmVyZWRUaW1lKToKKyAg
ICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRSYXRlKToKKyAg
ICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRWaWRlb0RpbWVu
c2lvbnMpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNl
dFNlZWthYmxlUmFuZ2VzKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpzZXRDYW5QbGF5RmFzdFJldmVyc2UpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKToKKyAg
ICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRMZWdpYmxlTWVk
aWFTZWxlY3Rpb25PcHRpb25zKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OjpzZXRFeHRlcm5hbFBsYXliYWNrKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0OjpwbGF5KToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpwYXVzZSk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6dG9nZ2xlUGxheVN0YXRlKToKKyAgICAgICAgKFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpiZWdpblNjcnViYmluZyk6CisgICAgICAgIChXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZW5kU2NydWJiaW5nKToKKyAgICAgICAg
KFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWVrVG9UaW1lKToKKyAgICAg
ICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpmYXN0U2Vlayk6CisgICAg
ICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YmVnaW5TY2FubmluZ0Zv
cndhcmQpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmJl
Z2luU2Nhbm5pbmdCYWNrd2FyZCk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6ZW5kU2Nhbm5pbmcpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OnJlcXVlc3RFeGl0RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0VmlkZW9MYXllckZyYW1lKToKKyAgICAg
ICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRWaWRlb0xheWVyR3Jh
dml0eSk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vs
ZWN0QXVkaW9NZWRpYU9wdGlvbik6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKToKKyAgICAgICAgKFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQpOgorICAg
ICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldHVwRnVsbHNjcmVl
bik6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXhpdEZ1
bGxzY3JlZW4pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyIGluaXRdKToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlciBkZWFsbG9jXSk6CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXIgZW50ZXJGdWxsc2NyZWVuOm1vZGU6XSk6CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXIgZXhpdEZ1bGxzY3JlZW5dKToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlciByZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuXSk6CisgICAgICAgICgt
W1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIgZGlkRmluaXNoRnVsbHNjcmVlbjpdKToKKyAg
ICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDaGFuZ2VPYnNlcnZlcjo6c2V0VGFy
Z2V0KTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBk
aWRTZXR1cEZ1bGxzY3JlZW5dKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlciBkaWRFbnRlckZ1bGxzY3JlZW5dKTogRGVsZXRlZC4KKyAgICAgICAgKC1b
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBkaWRFeGl0RnVsbHNjcmVlbl0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIGRpZENsZWFudXBGdWxs
c2NyZWVuXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXIgZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lXSk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lmg6CisgICAgICAgICog
cGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tOgorICAgICAg
ICAoLVtXZWJBVlZpZGVvTGF5ZXIgc2V0Qm91bmRzOl0pOgorICAgICAgICAoLVtXZWJBVlZpZGVv
TGF5ZXIgcmVzb2x2ZUJvdW5kc10pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OnJlc2V0TWVkaWFTdGF0ZSk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6c2V0RHVyYXRpb24pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OnNldEN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjpzZXRCdWZmZXJlZFRpbWUpOgorICAgICAgICAoV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFJhdGUpOgorICAgICAgICAoV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFZpZGVvRGltZW5zaW9ucyk6CisgICAgICAgIChXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0U2Vla2FibGVSYW5nZXMpOgorICAgICAg
ICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldENhblBsYXlGYXN0UmV2ZXJz
ZSk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0QXVkaW9N
ZWRpYVNlbGVjdGlvbk9wdGlvbnMpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OnNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMpOgorICAgICAgICAoV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldEV4dGVybmFsUGxheWJhY2spOgorICAg
ICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldHVwRnVsbHNjcmVlbik6
CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2Ny
ZWVuKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1
bGxzY3JlZW5TdGFuZGFyZCk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6ZXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OmV4aXRGdWxsc2NyZWVuSW50ZXJuYWwpOgorICAgICAgICAoV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmNsZWFudXBGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpjbGVhbnVwRnVsbHNjcmVlbkludGVybmFsKToK
KyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpyZXF1ZXN0SGlkZUFu
ZEV4aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OndpbGxTdGFydE9wdGltaXplZEZ1bGxzY3JlZW4pOgorICAgICAg
ICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZFN0YXJ0T3B0aW1pemVkRnVs
bHNjcmVlbik6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2ls
bFN0b3BPcHRpbWl6ZWRGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpkaWRTdG9wT3B0aW1pemVkRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2lsbENhbmNlbE9wdGltaXplZEZ1bGxzY3Jl
ZW4pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZENhbmNl
bE9wdGltaXplZEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OnNldFZpZGVvTGF5ZXJGcmFtZSk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdDo6c2V0dXBGdWxsc2NyZWVuSW50ZXJuYWwpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oOgorICAgICAgICAq
IHBsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5t
bToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRl
b0Z1bGxzY3JlZW5MYXllcik6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudDo6cGxheSk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudDo6cGF1c2UpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQ6OnRvZ2dsZVBsYXlTdGF0ZSk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZp
ZGVvRWxlbWVudDo6YmVnaW5TY3J1YmJpbmcpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQ6OmVuZFNjcnViYmluZyk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2Vla1RvVGltZSk6CisgICAgICAgIChXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6ZmFzdFNlZWspOgorICAgICAgICAoV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKToKKyAgICAg
ICAgKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpiZWdpblNjYW5uaW5nQmFj
a3dhcmQpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmVu
ZFNjYW5uaW5nKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
OjpyZXF1ZXN0RXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCk6CisgICAgICAgIChXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6dmlkZW9MYXllckZyYW1lKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojp2aWRlb0xheWVy
R3Jhdml0eSk6IERlbGV0ZWQuCisKIDIwMTUtMDUtMTUgIEJldGggRGFraW4gIDxiZGFraW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFByZWZpeCBmb3JjZSBvbiBNb3VzZUV2ZW50IGFuZCBhZGQgY29u
c3RhbnRzIGZvciBjbGljayBhbmQgZm9yY2UgY2xpY2sgdmFsdWVzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJBVktpdC5tbQppbmRleCA3YTUzNzM3NjI5MTkwZWQ0ZDcwYjY0MjFiMjk0ZjRmZjY1M2Zk
MTcyLi40MGRjOGVjYWJjMWVlOWI0ZGE5ZTYxNDI2NDVmZGIzYzQzZmU0MWJiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckFWS2l0Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQVZLaXQubW0KQEAgLTMwLDYgKzMwLDcgQEAKICNpbXBvcnQgIldlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5oIgogCiAjaW1wb3J0ICJMb2dnaW5nLmgiCisj
aW1wb3J0ICJUaW1lUmFuZ2VzLmgiCiAjaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdC5oIgogI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQu
aCIKICNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29yZUFuaW1hdGlvbi5oPgpAQCAtNjcsMzIgKzY4LDQ2
OSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogI2Vsc2UKIAotQGludGVyZmFjZSBXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIChGdWxsc2NyZWVuT2JzZXJ2YXRpb24pCi0tICh2b2lk
KWRpZFNldHVwRnVsbHNjcmVlbjsKLS0gKHZvaWQpZGlkRW50ZXJGdWxsc2NyZWVuOwotLSAodm9p
ZClkaWRFeGl0RnVsbHNjcmVlbjsKLS0gKHZvaWQpZGlkQ2xlYW51cEZ1bGxzY3JlZW47Ci0tICh2
b2lkKWZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZTsKK2NsYXNzIFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OworCitAaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXIgKGRlbGVnYXRlKQorLSh2b2lkKWRpZEZpbmlzaEZ1bGxzY3JlZW46KFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Kiljb250ZXh0OwogQGVuZAogCi1jbGFzcyBXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ2hhbmdlT2JzZXJ2ZXIgOiBwdWJsaWMgV2ViVmlkZW9GdWxs
c2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgewotICAgIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIq
IF90YXJnZXQ7CitjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dAorOiBw
dWJsaWMgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlCissIHB1YmxpYyBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbAorLCBwdWJsaWMgV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIKKywg
cHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0PiB7CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0PiBtX2ludGVyZmFjZTsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ+IG1fbW9kZWw7CisgICAgUmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+IG1f
dmlkZW9FbGVtZW50OworICAgIFJldGFpblB0cjxQbGF0Zm9ybUxheWVyPiBtX3ZpZGVvRnVsbHNj
cmVlbkxheWVyOworICAgIFJldGFpblB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyPiBt
X2NvbnRyb2xsZXI7CisgICAgRmxvYXRSZWN0IG1fZnJhbWU7CisgICAgVmlkZW9HcmF2aXR5IG1f
Z3Jhdml0eTsKKworICAgIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0KCkgeyB9
OworCiBwdWJsaWM6Ci0gICAgdm9pZCBzZXRUYXJnZXQoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlciogdGFyZ2V0KSB7IF90YXJnZXQgPSB0YXJnZXQ7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlk
U2V0dXBGdWxsc2NyZWVuKCkgb3ZlcnJpZGUgeyBbX3RhcmdldCBkaWRTZXR1cEZ1bGxzY3JlZW5d
OyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZEVudGVyRnVsbHNjcmVlbigpIG92ZXJyaWRlIHsgW190
YXJnZXQgZGlkRW50ZXJGdWxsc2NyZWVuXTsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRFeGl0RnVs
bHNjcmVlbigpIG92ZXJyaWRlIHsgW190YXJnZXQgZGlkRXhpdEZ1bGxzY3JlZW5dOyB9Ci0gICAg
dmlydHVhbCB2b2lkIGRpZENsZWFudXBGdWxsc2NyZWVuKCkgb3ZlcnJpZGUgeyBbX3RhcmdldCBk
aWRDbGVhbnVwRnVsbHNjcmVlbl07IH0KLSAgICB2aXJ0dWFsIHZvaWQgZnVsbHNjcmVlbk1heVJl
dHVyblRvSW5saW5lKCkgb3ZlcnJpZGUgeyBbX3RhcmdldCBmdWxsc2NyZWVuTWF5UmV0dXJuVG9J
bmxpbmVdOyB9CisgICAgc3RhdGljIFJlZjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0KCkpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IHNldENvbnRyb2xsZXIoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciogY29udHJvbGxlcikg
eyBtX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOyB9CisgICAgCisgICAgLy8gV2ViVmlkZW9GdWxs
c2NyZWVuQ2hhbmdlT2JzZXJ2ZXIKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU2V0dXBGdWxsc2NyZWVu
KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZEVudGVyRnVsbHNjcmVlbigpIG92ZXJy
aWRlIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRFeGl0RnVsbHNjcmVlbigpIG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgdm9pZCBkaWRDbGVhbnVwRnVsbHNjcmVlbigpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKSBvdmVycmlkZTsKKyAgICAK
KyAgICAvLyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UKKyAgICB2aXJ0dWFsIHZvaWQgcmVz
ZXRNZWRpYVN0YXRlKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldER1cmF0aW9uKGRv
dWJsZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldEN1cnJlbnRUaW1lKGRvdWJsZSBj
dXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRCdWZmZXJlZFRpbWUoZG91YmxlKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
UmF0ZShib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0VmlkZW9EaW1lbnNpb25zKGJvb2wgaGFzVmlkZW8sIGZsb2F0IHdpZHRo
LCBmbG9hdCBoZWlnaHQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRTZWVrYWJsZVJh
bmdlcyhjb25zdCBUaW1lUmFuZ2VzJikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldENh
blBsYXlGYXN0UmV2ZXJzZShib29sKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QXVk
aW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPFdURjo6U3RyaW5nPiYgb3B0aW9u
cywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNl
dExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPFdURjo6U3RyaW5nPiYg
b3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIHNldEV4dGVybmFsUGxheWJhY2soYm9vbCBlbmFibGVkLCBFeHRlcm5hbFBsYXliYWNrVGFy
Z2V0VHlwZSwgV1RGOjpTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSkgb3ZlcnJpZGU7CisgICAg
CisgICAgLy8gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwKKyAgICB2aXJ0dWFsIHZvaWQgcGxheSgp
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBwYXVzZSgpIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgdm9pZCB0b2dnbGVQbGF5U3RhdGUoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYmVn
aW5TY3J1YmJpbmcoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kU2NydWJiaW5nKCkg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNlZWtUb1RpbWUoZG91YmxlIHRpbWUpIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgdm9pZCBmYXN0U2Vlayhkb3VibGUgdGltZSkgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIGJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB2b2lkIGJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
dm9pZCBlbmRTY2FubmluZygpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RXhp
dEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlkZW9MYXllckZy
YW1lKEZsb2F0UmVjdCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBGbG9hdFJlY3QgdmlkZW9MYXll
ckZyYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9mcmFtZTsgfQorICAgIHZpcnR1YWwg
dm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0eShXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9H
cmF2aXR5KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFZpZGVvR3Jhdml0eSB2aWRlb0xheWVyR3Jh
dml0eSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZ3Jhdml0eTsgfQorICAgIHZpcnR1YWwg
dm9pZCBzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKEhUTUxNZWRp
YUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUpIG92ZXJyaWRlOworICAgIAorICAgIC8vIE90
aGVyCisgICAgdm9pZCBzZXR1cEZ1bGxzY3JlZW4oSFRNTFZpZGVvRWxlbWVudCosIFVJVmlldyAq
LCBIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKTsKKyAgICB2b2lkIGV4aXRG
dWxsc2NyZWVuKCk7CisgICAgdm9pZCByZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCk7Cisg
ICAgdm9pZCBpbnZhbGlkYXRlKCk7CiB9OwogCisjcHJhZ21hIG1hcmsgV2ViVmlkZW9GdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXIKKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6ZGlkU2V0dXBGdWxsc2NyZWVuKCkKK3sKKyAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsK
KyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0cm9uZ1Ro
aXModGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzLCB0aGlzXSB7CisgICAgICAg
IG1fbW9kZWwtPnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIu
Z2V0KCkpOworICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgp
LCBbc3Ryb25nVGhpcywgdGhpc10geworICAgICAgICAgICAgbV9pbnRlcmZhY2UtPmVudGVyRnVs
bHNjcmVlbigpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZGlkRXhpdEZ1bGxzY3JlZW4oKQoreworICAgIEFTU0VS
VChpc1VJVGhyZWFkKCkpOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oW3N0cm9uZ1RoaXMs
IHRoaXNdIHsKKyAgICAgICAgbV9tb2RlbC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIobmlsKTsK
KyAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9u
Z1RoaXMsIHRoaXNdIHsKKyAgICAgICAgICAgIG1faW50ZXJmYWNlLT5jbGVhbnVwRnVsbHNjcmVl
bigpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKQoreworICAgIEFTU0VSVChp
c1VJVGhyZWFkKCkpOworICAgIG1faW50ZXJmYWNlLT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bChudWxscHRyKTsKKyAgICBtX2ludGVyZmFjZS0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdl
T2JzZXJ2ZXIobnVsbHB0cik7CisgICAgbV9pbnRlcmZhY2UgPSBudWxscHRyOworICAgIAorICAg
IFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0
aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oW3N0cm9uZ1RoaXMsIHRoaXNdIHsKKyAgICAgICAgbV9t
b2RlbC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIobmlsKTsKKyAgICAgICAgbV9tb2RlbC0+c2V0
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKG51bGxwdHIpOworICAgICAgICBtX21vZGVsLT5z
ZXRWaWRlb0VsZW1lbnQobnVsbHB0cik7CisgICAgICAgIG1fbW9kZWwgPSBudWxscHRyOworICAg
ICAgICBtX3ZpZGVvRWxlbWVudCA9IG51bGxwdHI7CisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVu
TGF5ZXIgPSBuaWw7CisgICAgICAgIAorICAgICAgICBbbV9jb250cm9sbGVyIGRpZEZpbmlzaEZ1
bGxzY3JlZW46dGhpc107CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpCit7CisgICAgQVNT
RVJUKGlzVUlUaHJlYWQoKSk7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0PiBzdHJvbmdUaGlzKHRoaXMpOworICAgIFdlYlRocmVhZFJ1bihbc3Ryb25nVGhp
cywgdGhpc10geworICAgICAgICBJbnRSZWN0IGNsaWVudFJlY3QgPSBtX3ZpZGVvRWxlbWVudC0+
Y2xpZW50UmVjdCgpOworICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9x
dWV1ZSgpLCBbc3Ryb25nVGhpcywgdGhpcywgY2xpZW50UmVjdF0geworICAgICAgICAgICAgbV9p
bnRlcmZhY2UtPnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSh0cnVlLCBjbGllbnRSZWN0KTsKKyAg
ICAgICAgfSk7CisgICAgfSk7Cit9CisKKyNwcmFnbWEgbWFyayBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2UKKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cmVz
ZXRNZWRpYVN0YXRlKCkKK3sKKyAgICBBU1NFUlQoV2ViVGhyZWFkSXNDdXJyZW50KCkgfHwgaXNN
YWluVGhyZWFkKCkpOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRf
bWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpcywgdGhpc10geworICAgICAgICBpZiAobV9pbnRlcmZh
Y2UpCisgICAgICAgICAgICBtX2ludGVyZmFjZS0+cmVzZXRNZWRpYVN0YXRlKCk7CisgICAgfSk7
Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldER1cmF0
aW9uKGRvdWJsZSBkdXJhdGlvbikKK3sKKyAgICBBU1NFUlQoV2ViVGhyZWFkSXNDdXJyZW50KCkp
OworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25n
VGhpcyh0aGlzKTsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgp
LCBbc3Ryb25nVGhpcywgdGhpcywgZHVyYXRpb25dIHsKKyAgICAgICAgaWYgKG1faW50ZXJmYWNl
KQorICAgICAgICAgICAgbV9pbnRlcmZhY2UtPnNldER1cmF0aW9uKGR1cmF0aW9uKTsKKyAgICB9
KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0Q3Vy
cmVudFRpbWUoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkKK3sKKyAgICBB
U1NFUlQoV2ViVGhyZWFkSXNDdXJyZW50KCkpOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBkaXNwYXRjaF9hc3lu
YyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpcywgdGhpcywgY3VycmVudFRp
bWUsIGFuY2hvclRpbWVdIHsKKyAgICAgICAgaWYgKG1faW50ZXJmYWNlKQorICAgICAgICAgICAg
bV9pbnRlcmZhY2UtPnNldEN1cnJlbnRUaW1lKGN1cnJlbnRUaW1lLCBhbmNob3JUaW1lKTsKKyAg
ICB9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0
QnVmZmVyZWRUaW1lKGRvdWJsZSBidWZmZXJlZFRpbWUpCit7CisgICAgQVNTRVJUKFdlYlRocmVh
ZElzQ3VycmVudCgpKTsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0
X21haW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMsIHRoaXMsIGJ1ZmZlcmVkVGltZV0geworICAgICAg
ICBpZiAobV9pbnRlcmZhY2UpCisgICAgICAgICAgICBtX2ludGVyZmFjZS0+c2V0QnVmZmVyZWRU
aW1lKGJ1ZmZlcmVkVGltZSk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OnNldFJhdGUoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNr
UmF0ZSkKK3sKKyAgICBBU1NFUlQoV2ViVGhyZWFkSXNDdXJyZW50KCkpOworICAgIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAg
ICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpcywg
dGhpcywgaXNQbGF5aW5nLCBwbGF5YmFja1JhdGVdIHsKKyAgICAgICAgaWYgKG1faW50ZXJmYWNl
KQorICAgICAgICAgICAgbV9pbnRlcmZhY2UtPnNldFJhdGUoaXNQbGF5aW5nLCBwbGF5YmFja1Jh
dGUpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpzZXRWaWRlb0RpbWVuc2lvbnMoYm9vbCBoYXNWaWRlbywgZmxvYXQgd2lkdGgsIGZsb2F0
IGhlaWdodCkKK3sKKyAgICBBU1NFUlQoV2ViVGhyZWFkSXNDdXJyZW50KCkpOworICAgIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsK
KyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhp
cywgdGhpcywgaGFzVmlkZW8sIHdpZHRoLCBoZWlnaHRdIHsKKyAgICAgICAgaWYgKG1faW50ZXJm
YWNlKQorICAgICAgICAgICAgbV9pbnRlcmZhY2UtPnNldFZpZGVvRGltZW5zaW9ucyhoYXNWaWRl
bywgd2lkdGgsIGhlaWdodCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OnNldFNlZWthYmxlUmFuZ2VzKGNvbnN0IFRpbWVSYW5nZXMmIHRp
bWVSYW5nZXMpCit7CisgICAgQVNTRVJUKFdlYlRocmVhZElzQ3VycmVudCgpKTsKKyAgICBSZWZQ
dHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7
CisgICAgUmVmUHRyPFRpbWVSYW5nZXM+IHRpbWVSYW5nZXNSZWYgPSB0aW1lUmFuZ2VzLmNvcHko
KTsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25n
VGhpcywgdGhpcywgdGltZVJhbmdlc1JlZl0geworICAgICAgICBpZiAobV9pbnRlcmZhY2UpCisg
ICAgICAgICAgICBtX2ludGVyZmFjZS0+c2V0U2Vla2FibGVSYW5nZXMoKnRpbWVSYW5nZXNSZWYu
Z2V0KCkpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpzZXRDYW5QbGF5RmFzdFJldmVyc2UoYm9vbCBjYW5QbGF5RmFzdFJldmVyc2UpCit7
CisgICAgQVNTRVJUKFdlYlRocmVhZElzQ3VycmVudCgpKTsKKyAgICBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7CisgICAgZGlzcGF0
Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMsIHRoaXMsIGNh
blBsYXlGYXN0UmV2ZXJzZV0geworICAgICAgICBpZiAobV9pbnRlcmZhY2UpCisgICAgICAgICAg
ICBtX2ludGVyZmFjZS0+c2V0Q2FuUGxheUZhc3RSZXZlcnNlKGNhblBsYXlGYXN0UmV2ZXJzZSk7
CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OnNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxXVEY6OlN0cmluZz4m
IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit7CisgICAgQVNTRVJUKFdlYlRocmVh
ZElzQ3VycmVudCgpKTsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0
X21haW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMsIHRoaXMsIG9wdGlvbnMsIHNlbGVjdGVkSW5kZXhd
IHsKKyAgICAgICAgaWYgKG1faW50ZXJmYWNlKQorICAgICAgICAgICAgbV9pbnRlcmZhY2UtPnNl
dEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpOworICAg
IH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRM
ZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxXVEY6OlN0cmluZz4mIG9w
dGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit7CisgICAgQVNTRVJUKFdlYlRocmVhZElz
Q3VycmVudCgpKTsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ+IHN0cm9uZ1RoaXModGhpcyk7CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21h
aW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMsIHRoaXMsIG9wdGlvbnMsIHNlbGVjdGVkSW5kZXhdIHsK
KyAgICAgICAgaWYgKG1faW50ZXJmYWNlKQorICAgICAgICAgICAgbV9pbnRlcmZhY2UtPnNldExl
Z2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMob3B0aW9ucywgc2VsZWN0ZWRJbmRleCk7CisgICAg
fSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldEV4
dGVybmFsUGxheWJhY2soYm9vbCBlbmFibGVkLCBFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0
eXBlLCBXVEY6OlN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKQoreworICAgIEFTU0VSVChXZWJU
aHJlYWRJc0N1cnJlbnQoKSk7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0PiBzdHJvbmdUaGlzKHRoaXMpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNo
X2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCB0aGlzLCBlbmFibGVkLCB0eXBlLCBsb2Nh
bGl6ZWREZXZpY2VOYW1lXSB7CisgICAgICAgIGlmIChtX2ludGVyZmFjZSkKKyAgICAgICAgICAg
IG1faW50ZXJmYWNlLT5zZXRFeHRlcm5hbFBsYXliYWNrKGVuYWJsZWQsIHR5cGUsIGxvY2FsaXpl
ZERldmljZU5hbWUpOworICAgIH0pOworfQorCisjcHJhZ21hIG1hcmsgV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWwKKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cGxh
eSgpCit7CisgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBzdHJvbmdUaGlzKHRoaXMpOworICAgIFdlYlRocmVh
ZFJ1bihbc3Ryb25nVGhpcywgdGhpc10geworICAgICAgICBpZiAobV9tb2RlbCkKKyAgICAgICAg
ICAgIG1fbW9kZWwtPnBsYXkoKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6cGF1c2UoKQoreworICAgIEFTU0VSVChpc1VJVGhyZWFkKCkp
OworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25n
VGhpcyh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oW3N0cm9uZ1RoaXMsIHRoaXNdIHsKKyAgICAg
ICAgaWYgKG1fbW9kZWwpCisgICAgICAgICAgICBtX21vZGVsLT5wYXVzZSgpOworICAgIH0pOwor
fQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Ojp0b2dnbGVQbGF5
U3RhdGUoKQoreworICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOworICAgIFJlZlB0cjxXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBXZWJU
aHJlYWRSdW4oW3N0cm9uZ1RoaXMsIHRoaXNdIHsKKyAgICAgICAgaWYgKG1fbW9kZWwpCisgICAg
ICAgICAgICBtX21vZGVsLT50b2dnbGVQbGF5U3RhdGUoKTsKKyAgICB9KTsKK30KKwordm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YmVnaW5TY3J1YmJpbmcoKQorewor
ICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oW3N0
cm9uZ1RoaXMsIHRoaXNdIHsKKyAgICAgICAgaWYgKG1fbW9kZWwpCisgICAgICAgICAgICBtX21v
ZGVsLT5iZWdpblNjcnViYmluZygpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0OjplbmRTY3J1YmJpbmcoKQoreworICAgIEFTU0VSVChpc1VJ
VGhyZWFkKCkpOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oW3N0cm9uZ1RoaXMsIHRoaXNd
IHsKKyAgICAgICAgaWYgKG1fbW9kZWwpCisgICAgICAgICAgICBtX21vZGVsLT5lbmRTY3J1YmJp
bmcoKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6c2Vla1RvVGltZShkb3VibGUgdGltZSkKK3sKKyAgICBBU1NFUlQoaXNVSVRocmVhZCgp
KTsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0cm9u
Z1RoaXModGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzLCB0aGlzLCB0aW1lXSB7
CisgICAgICAgIGlmIChtX21vZGVsKQorICAgICAgICAgICAgbV9tb2RlbC0+c2Vla1RvVGltZSh0
aW1lKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6ZmFzdFNlZWsoZG91YmxlIHRpbWUpCit7CisgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7
CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBzdHJvbmdU
aGlzKHRoaXMpOworICAgIFdlYlRocmVhZFJ1bihbc3Ryb25nVGhpcywgdGhpcywgdGltZV0gewor
ICAgICAgICBpZiAobV9tb2RlbCkKKyAgICAgICAgICAgIG1fbW9kZWwtPmZhc3RTZWVrKHRpbWUp
OworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjpiZWdpblNjYW5uaW5nRm9yd2FyZCgpCit7CisgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Cisg
ICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBzdHJvbmdUaGlz
KHRoaXMpOworICAgIFdlYlRocmVhZFJ1bihbc3Ryb25nVGhpcywgdGhpc10geworICAgICAgICBp
ZiAobV9tb2RlbCkKKyAgICAgICAgICAgIG1fbW9kZWwtPmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCk7
CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpCit7CisgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7Cisg
ICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBzdHJvbmdUaGlz
KHRoaXMpOworICAgIFdlYlRocmVhZFJ1bihbc3Ryb25nVGhpcywgdGhpc10geworICAgICAgICBp
ZiAobV9tb2RlbCkKKyAgICAgICAgICAgIG1fbW9kZWwtPmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgp
OworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjplbmRTY2FubmluZygpCit7CisgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CisgICAgUmVmUHRy
PFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBzdHJvbmdUaGlzKHRoaXMpOwor
ICAgIFdlYlRocmVhZFJ1bihbc3Ryb25nVGhpcywgdGhpc10geworICAgICAgICBpZiAobV9tb2Rl
bCkKKyAgICAgICAgICAgIG1fbW9kZWwtPmVuZFNjYW5uaW5nKCk7CisgICAgfSk7Cit9CisKK3Zv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJlcXVlc3RFeGl0RnVsbHNj
cmVlbigpCit7CisgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CisgICAgUmVmUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBzdHJvbmdUaGlzKHRoaXMpOworICAgIFdlYlRo
cmVhZFJ1bihbc3Ryb25nVGhpcywgdGhpc10geworICAgICAgICBpZiAobV9tb2RlbCkKKyAgICAg
ICAgICAgIG1fbW9kZWwtPnJlcXVlc3RFeGl0RnVsbHNjcmVlbigpOworICAgIH0pOworfQorCit2
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRWaWRlb0xheWVyRnJh
bWUoRmxvYXRSZWN0IGZyYW1lKQoreworICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOworICAgIG1f
ZnJhbWUgPSBmcmFtZTsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzLCB0
aGlzLCBmcmFtZV0geworICAgICAgICBpZiAobV9tb2RlbCkKKyAgICAgICAgICAgIG1fbW9kZWwt
PnNldFZpZGVvTGF5ZXJGcmFtZShmcmFtZSk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldFZpZGVvTGF5ZXJHcmF2aXR5KFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkgdmlkZW9HcmF2aXR5KQoreworICAgIEFTU0VS
VChpc1VJVGhyZWFkKCkpOworICAgIG1fZ3Jhdml0eSA9IHZpZGVvR3Jhdml0eTsKKyAgICBSZWZQ
dHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7
CisgICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzLCB0aGlzLCB2aWRlb0dyYXZpdHldIHsKKyAg
ICAgICAgaWYgKG1fbW9kZWwpCisgICAgICAgICAgICBtX21vZGVsLT5zZXRWaWRlb0xheWVyR3Jh
dml0eSh2aWRlb0dyYXZpdHkpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4
KQoreworICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBXZWJUaHJlYWRS
dW4oW3N0cm9uZ1RoaXMsIHRoaXMsIGluZGV4XSB7CisgICAgICAgIGlmIChtX21vZGVsKQorICAg
ICAgICAgICAgbV9tb2RlbC0+c2VsZWN0QXVkaW9NZWRpYU9wdGlvbihpbmRleCk7CisgICAgfSk7
Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNlbGVjdExl
Z2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkKK3sKKyAgICBBU1NFUlQoaXNVSVRocmVh
ZCgpKTsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0
cm9uZ1RoaXModGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzLCB0aGlzLCBpbmRl
eF0geworICAgICAgICBpZiAobV9tb2RlbCkKKyAgICAgICAgICAgIG1fbW9kZWwtPnNlbGVjdExl
Z2libGVNZWRpYU9wdGlvbihpbmRleCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChIVE1MTWVkaWFF
bGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCit7CisgICAgQVNTRVJUKGlzVUlUaHJl
YWQoKSk7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBz
dHJvbmdUaGlzKHRoaXMpOworICAgIFdlYlRocmVhZFJ1bihbc3Ryb25nVGhpcywgdGhpcywgbW9k
ZV0geworICAgICAgICBpZiAobV9tb2RlbCkKKyAgICAgICAgICAgIG1fbW9kZWwtPmZ1bGxzY3Jl
ZW5Nb2RlQ2hhbmdlZChtb2RlKTsKKyAgICB9KTsKK30KKworI3ByYWdtYSBtYXJrIE90aGVyCisK
K3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldHVwRnVsbHNjcmVl
bihIVE1MVmlkZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQsIFVJVmlldyAqdmlldywgSFRNTE1lZGlh
RWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQoreworICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisgICAgUmV0YWluUHRyPFVJVmlldz4gdmlld1JlZiA9IHZpZXc7CisgICAgbV92
aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7CisKKyAgICBtX2ludGVyZmFjZSA9IFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpjcmVhdGUoKTsKKyAgICBtX2ludGVyZmFjZS0+c2V0
V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIodGhpcyk7CisgICAgbV9pbnRlcmZhY2Ut
PnNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKHRoaXMpOworICAgIAorICAgIFJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBX
ZWJUaHJlYWRSdW4oW3N0cm9uZ1RoaXMsIHRoaXMsIHZpZXdSZWYsIG1vZGVdIHsKKyAgICAgICAg
bV9tb2RlbCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpjcmVhdGUoKTsK
KyAgICAgICAgbV9tb2RlbC0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKHRoaXMpOwor
ICAgICAgICBtX21vZGVsLT5zZXRWaWRlb0VsZW1lbnQobV92aWRlb0VsZW1lbnQuZ2V0KCkpOwor
ICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkxheWVyID0gW0NBTGF5ZXIgbGF5ZXJdOworICAgICAg
ICAKKyAgICAgICAgYm9vbCBhbGxvd3NBbHRlcm5hdGVGdWxsc2NyZWVuID0gbV92aWRlb0VsZW1l
bnQtPm1lZGlhU2Vzc2lvbigpLmFsbG93c0FsdGVybmF0ZUZ1bGxzY3JlZW4oKm1fdmlkZW9FbGVt
ZW50LmdldCgpKTsKKyAgICAgICAgSW50UmVjdCB2aWRlb0VsZW1lbnRDbGllbnRSZWN0ID0gbV92
aWRlb0VsZW1lbnQtPmNsaWVudFJlY3QoKTsKKyAgICAgICAgCisgICAgICAgIFJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICAg
ICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMs
IHRoaXMsIHZpZGVvRWxlbWVudENsaWVudFJlY3QsIHZpZXdSZWYsIG1vZGUsIGFsbG93c0FsdGVy
bmF0ZUZ1bGxzY3JlZW5dIHsKKyAgICAgICAgICAgIG1faW50ZXJmYWNlLT5zZXR1cEZ1bGxzY3Jl
ZW4oKm1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIuZ2V0KCksIHZpZGVvRWxlbWVudENsaWVudFJlY3Qs
IHZpZXdSZWYuZ2V0KCksIG1vZGUsIGFsbG93c0FsdGVybmF0ZUZ1bGxzY3JlZW4pOworICAgICAg
ICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dDo6ZXhpdEZ1bGxzY3JlZW4oKQoreworICAgIEFTU0VSVChXZWJUaHJlYWRJc0N1cnJlbnQo
KSk7CisgICAgSW50UmVjdCBzY3JlZW5SZWN0ID0gbV92aWRlb0VsZW1lbnQtPnNjcmVlblJlY3Qo
KTsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0cm9u
Z1RoaXModGhpcyk7CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUo
KSwgW3N0cm9uZ1RoaXMsIHRoaXMsIHNjcmVlblJlY3RdIHsKKyAgICAgICAgQVNTRVJUKGlzVUlU
aHJlYWQoKSk7CisgICAgICAgIG1faW50ZXJmYWNlLT5leGl0RnVsbHNjcmVlbihzY3JlZW5SZWN0
KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dDo6cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpCit7CisgICAgQVNTRVJUKGlzVUlUaHJl
YWQoKSk7CisgICAgbV9pbnRlcmZhY2UtPnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKTsK
K30KKwogQGltcGxlbWVudGF0aW9uIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIKIHsKKyAg
ICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IF9jb250ZXh0Owog
ICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50PiBfdmlkZW9FbGVtZW50OwotICAgIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gX2ludGVyZmFjZTsKLSAgICBSZWZQdHI8
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IF9tb2RlbDsKLSAgICBXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ2hhbmdlT2JzZXJ2ZXIgX2NoYW5nZU9ic2VydmVyOwotICAg
IFJldGFpblB0cjxQbGF0Zm9ybUxheWVyPiBfdmlkZW9GdWxsc2NyZWVuTGF5ZXI7CiB9CiAKIC0g
KGluc3RhbmNldHlwZSlpbml0CkBAIC0xMDAsMTcgKzUzOCw5IEBAIHB1YmxpYzoKICAgICBpZiAo
IShzZWxmID0gW3N1cGVyIGluaXRdKSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKLSAgICBf
Y2hhbmdlT2JzZXJ2ZXIuc2V0VGFyZ2V0KHNlbGYpOwotCiAgICAgcmV0dXJuIHNlbGY7CiB9CiAK
LS0gKHZvaWQpZGVhbGxvYwotewotICAgIF92aWRlb0VsZW1lbnQgPSBudWxscHRyOwotICAgIFtz
dXBlciBkZWFsbG9jXTsKLX0KLQogLSAodm9pZClzZXRWaWRlb0VsZW1lbnQ6KEhUTUxWaWRlb0Vs
ZW1lbnQqKXZpZGVvRWxlbWVudAogewogICAgIF92aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7
CkBAIC0xMjMsNjcgKzU1MywzMyBAQCBwdWJsaWM6CiAKIC0gKHZvaWQpZW50ZXJGdWxsc2NyZWVu
OihVSVZpZXcgKil2aWV3IG1vZGU6KEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1v
ZGUpbW9kZQogewotICAgIFtzZWxmIHJldGFpbl07IC8vIEJhbGFuY2VkIGJ5IC1yZWxlYXNlIGlu
IGRpZEV4aXRGdWxsc2NyZWVuOgotICAgIAotICAgIF9pbnRlcmZhY2UgPSBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6Y3JlYXRlKCk7Ci0gICAgX2ludGVyZmFjZS0+c2V0V2ViVmlk
ZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoJl9jaGFuZ2VPYnNlcnZlcik7Ci0gICAgX21vZGVs
ID0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmNyZWF0ZSgpOwotICAgIF9t
b2RlbC0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKF9pbnRlcmZhY2UuZ2V0KCkpOwot
ICAgIF9pbnRlcmZhY2UtPnNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKF9tb2RlbC5nZXQoKSk7
Ci0gICAgX21vZGVsLT5zZXRWaWRlb0VsZW1lbnQoX3ZpZGVvRWxlbWVudC5nZXQoKSk7Ci0gICAg
X3ZpZGVvRnVsbHNjcmVlbkxheWVyID0gW0NBTGF5ZXIgbGF5ZXJdOwotICAgIF9pbnRlcmZhY2Ut
PnNldHVwRnVsbHNjcmVlbigqX3ZpZGVvRnVsbHNjcmVlbkxheWVyLmdldCgpLCBfdmlkZW9FbGVt
ZW50LT5jbGllbnRSZWN0KCksIHZpZXcsIG1vZGUsIF92aWRlb0VsZW1lbnQtPm1lZGlhU2Vzc2lv
bigpLmFsbG93c0FsdGVybmF0ZUZ1bGxzY3JlZW4oKl92aWRlb0VsZW1lbnQuZ2V0KCkpKTsKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIF9jb250ZXh0ID0gV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OmNyZWF0ZSgpOworICAgIF9jb250ZXh0LT5zZXRDb250cm9s
bGVyKHNlbGYpOworICAgIF9jb250ZXh0LT5zZXR1cEZ1bGxzY3JlZW4oX3ZpZGVvRWxlbWVudC5n
ZXQoKSwgdmlldywgbW9kZSk7CiB9CiAKIC0gKHZvaWQpZXhpdEZ1bGxzY3JlZW4KIHsKLSAgICBf
aW50ZXJmYWNlLT5leGl0RnVsbHNjcmVlbihfdmlkZW9FbGVtZW50LT5zY3JlZW5SZWN0KCkpOwor
ICAgIEFTU0VSVChXZWJUaHJlYWRJc0N1cnJlbnQoKSk7CisgICAgX2NvbnRleHQtPmV4aXRGdWxs
c2NyZWVuKCk7CiB9CiAKIC0gKHZvaWQpcmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbgogewot
ICAgIGlmIChfaW50ZXJmYWNlKQotICAgICAgICBfaW50ZXJmYWNlLT5yZXF1ZXN0SGlkZUFuZEV4
aXRGdWxsc2NyZWVuKCk7CisgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CisgICAgaWYgKF9jb250
ZXh0KQorICAgICAgICBfY29udGV4dC0+cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpOwog
fQogCi0tICh2b2lkKWRpZFNldHVwRnVsbHNjcmVlbgorLSAodm9pZClkaWRGaW5pc2hGdWxsc2Ny
ZWVuOihXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dCopY29udGV4dAogewotICAg
IFdlYlRocmVhZFJ1biheewotICAgICAgICBfbW9kZWwtPnNldFZpZGVvRnVsbHNjcmVlbkxheWVy
KF92aWRlb0Z1bGxzY3JlZW5MYXllci5nZXQoKSk7Ci0gICAgICAgIF9pbnRlcmZhY2UtPmVudGVy
RnVsbHNjcmVlbigpOwotICAgIH0pOwotfQotCi0tICh2b2lkKWRpZEVudGVyRnVsbHNjcmVlbgot
ewotfQotCi0tICh2b2lkKWRpZEV4aXRGdWxsc2NyZWVuCi17Ci0gICAgV2ViVGhyZWFkUnVuKF57
Ci0gICAgICAgIF9tb2RlbC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIobmlsKTsKLSAgICAgICAg
X2ludGVyZmFjZS0+Y2xlYW51cEZ1bGxzY3JlZW4oKTsKLSAgICB9KTsKLX0KLQotLSAodm9pZClk
aWRDbGVhbnVwRnVsbHNjcmVlbgotewotICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBfbW9k
ZWwtPnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKG5pbCk7Ci0gICAgICAgIF9pbnRlcmZhY2UtPnNl
dFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKG51bGxwdHIpOwotICAgICAgICBfbW9kZWwtPnNldFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZShudWxscHRyKTsKLSAgICAgICAgX21vZGVsLT5zZXRW
aWRlb0VsZW1lbnQobnVsbHB0cik7Ci0gICAgICAgIF9pbnRlcmZhY2UtPnNldFdlYlZpZGVvRnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyKG51bGxwdHIpOwotICAgICAgICBfbW9kZWwgPSBudWxscHRy
OwotICAgICAgICBfaW50ZXJmYWNlID0gbnVsbHB0cjsKLSAgICAgICAgCi0gICAgICAgIFtzZWxm
IHJlbGVhc2VdOyAvLyBCYWxhbmNlIHRoZSAtcmV0YWluIHdlIGRpZCBpbiBlbnRlckZ1bGxzY3Jl
ZW46Ci0gICAgfSk7Ci19Ci0KLS0gKHZvaWQpZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lCi17
Ci0gICAgX2ludGVyZmFjZS0+cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKHRydWUsIF92aWRlb0Vs
ZW1lbnQtPmNsaWVudFJlY3QoKSk7CisgICAgQVNTRVJUKFdlYlRocmVhZElzQ3VycmVudCgpKTsK
KyAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CisgICAgW1tzZWxmIHJldGFpbl0gYXV0b3JlbGVh
c2VdOyAvLyByZXRhaW4gc2VsZiBiZWZvcmUgYnJlYWtpbmcgYSByZXRhaW4gY3ljbGUuCisgICAg
X2NvbnRleHQtPnNldENvbnRyb2xsZXIobmlsKTsKKyAgICBfY29udGV4dCA9IG51bGxwdHI7Cisg
ICAgX3ZpZGVvRWxlbWVudCA9IG51bGxwdHI7CiB9CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0LmgKaW5kZXggZjIwNjc4NGY0OWQ5YmQ3ODI3ZjQyM2YyZDIxY2IxNTU3OThiYmI1OC4u
YWUxZjdkYWY4OWI2YmJhM2NlMWNjYmMyN2E2MDgxMGFjNDczYWM4NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0LmgKQEAgLTMzLDkgKzMzLDkgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0hUTUxN
ZWRpYUVsZW1lbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtTGF5ZXIuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAogT0JK
Q19DTEFTUyBXZWJBVlBsYXllckNvbnRyb2xsZXI7CiBPQkpDX0NMQVNTIEFWUGxheWVyVmlld0Nv
bnRyb2xsZXI7CkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKIAogY2xhc3MgV0VCQ09SRV9FWFBP
UlQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQKICAgICA6IHB1YmxpYyBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2UKLSAgICAsIHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4geworICAgICwgcHVibGljIFJlZkNvdW50
ZWQ8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHsKIAogcHVibGljOgogICAgIHN0
YXRpYyBSZWY8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IGNyZWF0ZSgpCkBAIC0x
MTksMTEgKzExOSw4IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBXRUJDT1JFX0VYUE9SVCBX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCgpOwogICAgIHZvaWQgYmVnaW5TZXNzaW9u
KCk7Ci0gICAgdm9pZCBzZXR1cEZ1bGxzY3JlZW5JbnRlcm5hbChQbGF0Zm9ybUxheWVyJiwgY29u
c3QgSW50UmVjdCYgaW5pdGlhbFJlY3QsIFVJVmlldyAqLCBIVE1MTWVkaWFFbGVtZW50OjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlLCBib29sIGFsbG93T3B0aW1pemVkRnVsbHNjcmVlbik7CiAgICAgdm9p
ZCBlbnRlckZ1bGxzY3JlZW5PcHRpbWl6ZWQoKTsKICAgICB2b2lkIGVudGVyRnVsbHNjcmVlblN0
YW5kYXJkKCk7Ci0gICAgdm9pZCBleGl0RnVsbHNjcmVlbkludGVybmFsKGNvbnN0IEludFJlY3Qm
IGZpbmFsUmVjdCk7Ci0gICAgdm9pZCBjbGVhbnVwRnVsbHNjcmVlbkludGVybmFsKCk7CiAKICAg
ICBSZXRhaW5QdHI8V2ViQVZQbGF5ZXJDb250cm9sbGVyPiBtX3BsYXllckNvbnRyb2xsZXI7CiAg
ICAgUmV0YWluUHRyPEFWUGxheWVyVmlld0NvbnRyb2xsZXI+IG1fcGxheWVyVmlld0NvbnRyb2xs
ZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0KaW5kZXggNDZhMGY1MjYxYmQxNGI0OTU0
MDEyNzY3ZTQ4MjBlNDc3YTEyNWM2Zi4uZmYzYTQzMGEwMjIyMmE3NDc0MTE1ZDQ3ZDdjNDBkNzBm
MDM0Y2MwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbQpAQCAtMzYsNyArMzYsNiBA
QAogI2ltcG9ydCAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLmgiCiAjaW1wb3J0ICJUaW1l
UmFuZ2VzLmgiCiAjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCi0jaW1wb3J0ICJX
ZWJDb3JlVGhyZWFkUnVuLmgiCiAjaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgog
I2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWVGltZS5oPgogI2ltcG9ydCA8VUlLaXQvVUlLaXQuaD4K
QEAgLTc0OSwxNyArNzQ4LDEzIEBAIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCgpCiAKIHZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OnJlc2V0TWVkaWFTdGF0ZSgpCiB7Ci0gICAgUmVmUHRyPFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOwotICAgIAotICAg
IGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzXSB7
Ci0gICAgICAgIGlmICghc3Ryb25nVGhpcy0+bV9wbGF5ZXJDb250cm9sbGVyKSB7Ci0gICAgICAg
ICAgICBzdHJvbmdUaGlzLT5tX3BsYXllckNvbnRyb2xsZXIgPSBhZG9wdE5TKFtbV2ViQVZQbGF5
ZXJDb250cm9sbGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgICAgICAgICBbc3Ryb25nVGhpcy0+bV9w
bGF5ZXJDb250cm9sbGVyIHNldERlbGVnYXRlOnN0cm9uZ1RoaXMtPm1fdmlkZW9GdWxsc2NyZWVu
TW9kZWxdOwotICAgICAgICAgICAgW3N0cm9uZ1RoaXMtPm1fcGxheWVyQ29udHJvbGxlciBzZXRG
dWxsc2NyZWVuSW50ZXJmYWNlOnN0cm9uZ1RoaXMuZ2V0KCldOwotICAgICAgICAgICAgCi0gICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgW3N0cm9uZ1RoaXMtPm1fcGxheWVyQ29udHJvbGxlciBy
ZXNldFN0YXRlXTsKLSAgICB9KTsKKyAgICBpZiAoIW1fcGxheWVyQ29udHJvbGxlcikgeworICAg
ICAgICBtX3BsYXllckNvbnRyb2xsZXIgPSBhZG9wdE5TKFtbV2ViQVZQbGF5ZXJDb250cm9sbGVy
IGFsbG9jXSBpbml0XSk7CisgICAgICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0RGVsZWdhdGU6
bV92aWRlb0Z1bGxzY3JlZW5Nb2RlbF07CisgICAgICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0
RnVsbHNjcmVlbkludGVyZmFjZTp0aGlzXTsKKyAgICAgICAgCisgICAgfSBlbHNlCisgICAgICAg
IFttX3BsYXllckNvbnRyb2xsZXIgcmVzZXRTdGF0ZV07CiB9CiAKIHZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsKiBtb2RlbCkKQEAgLTc3NSw3MiArNzcwLDUyIEBAIHZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9i
c2VydmVyKFdlYlZpCiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNl
dER1cmF0aW9uKGRvdWJsZSBkdXJhdGlvbikKIHsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ+IHN0cm9uZ1RoaXModGhpcyk7Ci0gICAgCi0gICAgZGlzcGF0Y2hf
YXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMsIGR1cmF0aW9uXSB7
Ci0gICAgICAgIFdlYkFWUGxheWVyQ29udHJvbGxlciogcGxheWVyQ29udHJvbGxlciA9IHN0cm9u
Z1RoaXMtPm1fcGxheWVyQ29udHJvbGxlci5nZXQoKTsKKyAgICBXZWJBVlBsYXllckNvbnRyb2xs
ZXIqIHBsYXllckNvbnRyb2xsZXIgPSBtX3BsYXllckNvbnRyb2xsZXIuZ2V0KCk7CiAKLSAgICAg
ICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjcw
MTcgdXNlIGNvcnJlY3QgdmFsdWVzIGluc3RlYWQgb2YgZHVyYXRpb24gZm9yIGFsbCB0aGVzZQot
ICAgICAgICBwbGF5ZXJDb250cm9sbGVyLmNvbnRlbnREdXJhdGlvbiA9IGR1cmF0aW9uOwotICAg
ICAgICBwbGF5ZXJDb250cm9sbGVyLm1heFRpbWUgPSBkdXJhdGlvbjsKLSAgICAgICAgcGxheWVy
Q29udHJvbGxlci5jb250ZW50RHVyYXRpb25XaXRoaW5FbmRUaW1lcyA9IGR1cmF0aW9uOworICAg
IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3MDE3
IHVzZSBjb3JyZWN0IHZhbHVlcyBpbnN0ZWFkIG9mIGR1cmF0aW9uIGZvciBhbGwgdGhlc2UKKyAg
ICBwbGF5ZXJDb250cm9sbGVyLmNvbnRlbnREdXJhdGlvbiA9IGR1cmF0aW9uOworICAgIHBsYXll
ckNvbnRyb2xsZXIubWF4VGltZSA9IGR1cmF0aW9uOworICAgIHBsYXllckNvbnRyb2xsZXIuY29u
dGVudER1cmF0aW9uV2l0aGluRW5kVGltZXMgPSBkdXJhdGlvbjsKIAotICAgICAgICAvLyBGSVhN
RTogd2UgdGFrZSB0aGlzIGFzIGFuIGluZGljYXRpb24gdGhhdCBwbGF5YmFjayBpcyByZWFkeS4K
LSAgICAgICAgcGxheWVyQ29udHJvbGxlci5jYW5QbGF5ID0gWUVTOwotICAgICAgICBwbGF5ZXJD
b250cm9sbGVyLmNhblBhdXNlID0gWUVTOwotICAgICAgICBwbGF5ZXJDb250cm9sbGVyLmNhblRv
Z2dsZVBsYXliYWNrID0gWUVTOwotICAgICAgICBwbGF5ZXJDb250cm9sbGVyLmhhc0VuYWJsZWRB
dWRpbyA9IFlFUzsKLSAgICAgICAgcGxheWVyQ29udHJvbGxlci5jYW5TZWVrID0gWUVTOwotICAg
ICAgICBwbGF5ZXJDb250cm9sbGVyLm1pblRpbWUgPSAwOwotICAgICAgICBwbGF5ZXJDb250cm9s
bGVyLnN0YXR1cyA9IEFWUGxheWVyQ29udHJvbGxlclN0YXR1c1JlYWR5VG9QbGF5OwotICAgIH0p
OworICAgIC8vIEZJWE1FOiB3ZSB0YWtlIHRoaXMgYXMgYW4gaW5kaWNhdGlvbiB0aGF0IHBsYXli
YWNrIGlzIHJlYWR5LgorICAgIHBsYXllckNvbnRyb2xsZXIuY2FuUGxheSA9IFlFUzsKKyAgICBw
bGF5ZXJDb250cm9sbGVyLmNhblBhdXNlID0gWUVTOworICAgIHBsYXllckNvbnRyb2xsZXIuY2Fu
VG9nZ2xlUGxheWJhY2sgPSBZRVM7CisgICAgcGxheWVyQ29udHJvbGxlci5oYXNFbmFibGVkQXVk
aW8gPSBZRVM7CisgICAgcGxheWVyQ29udHJvbGxlci5jYW5TZWVrID0gWUVTOworICAgIHBsYXll
ckNvbnRyb2xsZXIubWluVGltZSA9IDA7CisgICAgcGxheWVyQ29udHJvbGxlci5zdGF0dXMgPSBB
VlBsYXllckNvbnRyb2xsZXJTdGF0dXNSZWFkeVRvUGxheTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0Q3VycmVudFRpbWUoZG91YmxlIGN1cnJlbnRUaW1l
LCBkb3VibGUgYW5jaG9yVGltZSkKIHsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ+IHN0cm9uZ1RoaXModGhpcyk7Ci0gICAgCi0gICAgZGlzcGF0Y2hfYXN5bmMo
ZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMsIGN1cnJlbnRUaW1lLCBhbmNo
b3JUaW1lXSB7Ci0gICAgICAgIE5TVGltZUludGVydmFsIGFuY2hvclRpbWVTdGFtcCA9ICFbc3Ry
b25nVGhpcy0+bV9wbGF5ZXJDb250cm9sbGVyIHJhdGVdID8gTkFOIDogYW5jaG9yVGltZTsKLSAg
ICAgICAgQVZWYWx1ZVRpbWluZyAqdGltaW5nID0gW2dldEFWVmFsdWVUaW1pbmdDbGFzcygpIHZh
bHVlVGltaW5nV2l0aEFuY2hvclZhbHVlOmN1cnJlbnRUaW1lCi0gICAgICAgICAgICBhbmNob3JU
aW1lU3RhbXA6YW5jaG9yVGltZVN0YW1wIHJhdGU6MF07Ci0gICAgICAgIFtzdHJvbmdUaGlzLT5t
X3BsYXllckNvbnRyb2xsZXIgc2V0VGltaW5nOnRpbWluZ107Ci0gICAgfSk7CisgICAgTlNUaW1l
SW50ZXJ2YWwgYW5jaG9yVGltZVN0YW1wID0gIVttX3BsYXllckNvbnRyb2xsZXIgcmF0ZV0gPyBO
QU4gOiBhbmNob3JUaW1lOworICAgIEFWVmFsdWVUaW1pbmcgKnRpbWluZyA9IFtnZXRBVlZhbHVl
VGltaW5nQ2xhc3MoKSB2YWx1ZVRpbWluZ1dpdGhBbmNob3JWYWx1ZTpjdXJyZW50VGltZQorICAg
ICAgICBhbmNob3JUaW1lU3RhbXA6YW5jaG9yVGltZVN0YW1wIHJhdGU6MF07CisgICAgW21fcGxh
eWVyQ29udHJvbGxlciBzZXRUaW1pbmc6dGltaW5nXTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0QnVmZmVyZWRUaW1lKGRvdWJsZSBidWZmZXJlZFRpbWUp
CiB7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdU
aGlzKHRoaXMpOwotCi0gICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUo
KSwgW3N0cm9uZ1RoaXMsIGJ1ZmZlcmVkVGltZV0gewotICAgICAgICBXZWJBVlBsYXllckNvbnRy
b2xsZXIqIHBsYXllckNvbnRyb2xsZXIgPSBzdHJvbmdUaGlzLT5tX3BsYXllckNvbnRyb2xsZXIu
Z2V0KCk7Ci0gICAgICAgIGRvdWJsZSBkdXJhdGlvbiA9IHBsYXllckNvbnRyb2xsZXIuY29udGVu
dER1cmF0aW9uOwotICAgICAgICBkb3VibGUgbm9ybWFsaXplZEJ1ZmZlcmVkVGltZTsKLSAgICAg
ICAgaWYgKCFkdXJhdGlvbikKLSAgICAgICAgICAgIG5vcm1hbGl6ZWRCdWZmZXJlZFRpbWUgPSAw
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBub3JtYWxpemVkQnVmZmVyZWRUaW1lID0gYnVm
ZmVyZWRUaW1lIC8gZHVyYXRpb247Ci0gICAgICAgIHBsYXllckNvbnRyb2xsZXIubG9hZGVkVGlt
ZVJhbmdlcyA9IEBbQDAsIEAobm9ybWFsaXplZEJ1ZmZlcmVkVGltZSldOwotICAgIH0pOworICAg
IFdlYkFWUGxheWVyQ29udHJvbGxlciogcGxheWVyQ29udHJvbGxlciA9IG1fcGxheWVyQ29udHJv
bGxlci5nZXQoKTsKKyAgICBkb3VibGUgZHVyYXRpb24gPSBwbGF5ZXJDb250cm9sbGVyLmNvbnRl
bnREdXJhdGlvbjsKKyAgICBkb3VibGUgbm9ybWFsaXplZEJ1ZmZlcmVkVGltZTsKKyAgICBpZiAo
IWR1cmF0aW9uKQorICAgICAgICBub3JtYWxpemVkQnVmZmVyZWRUaW1lID0gMDsKKyAgICBlbHNl
CisgICAgICAgIG5vcm1hbGl6ZWRCdWZmZXJlZFRpbWUgPSBidWZmZXJlZFRpbWUgLyBkdXJhdGlv
bjsKKyAgICBwbGF5ZXJDb250cm9sbGVyLmxvYWRlZFRpbWVSYW5nZXMgPSBAW0AwLCBAKG5vcm1h
bGl6ZWRCdWZmZXJlZFRpbWUpXTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6c2V0UmF0ZShib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQogewot
ICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0
aGlzKTsKLSAgICAKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgp
LCBbc3Ryb25nVGhpcywgaXNQbGF5aW5nLCBwbGF5YmFja1JhdGVdIHsKLSAgICAgICAgW3N0cm9u
Z1RoaXMtPm1fcGxheWVyQ29udHJvbGxlciBzZXRSYXRlOmlzUGxheWluZyA/IHBsYXliYWNrUmF0
ZSA6IDAuXTsKLSAgICB9KTsKKyAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldFJhdGU6aXNQbGF5
aW5nID8gcGxheWJhY2tSYXRlIDogMC5dOwogfQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpzZXRWaWRlb0RpbWVuc2lvbnMoYm9vbCBoYXNWaWRlbywgZmxvYXQgd2lk
dGgsIGZsb2F0IGhlaWdodCkKIHsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ+IHN0cm9uZ1RoaXModGhpcyk7Ci0gICAgCi0gICAgZGlzcGF0Y2hfYXN5bmMoZGlz
cGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMsIGhhc1ZpZGVvLCB3aWR0aCwgaGVp
Z2h0XSB7Ci0gICAgICAgIFtzdHJvbmdUaGlzLT5tX3BsYXllckNvbnRyb2xsZXIgc2V0SGFzRW5h
YmxlZFZpZGVvOmhhc1ZpZGVvXTsKLSAgICAgICAgW3N0cm9uZ1RoaXMtPm1fcGxheWVyQ29udHJv
bGxlciBzZXRDb250ZW50RGltZW5zaW9uczpDR1NpemVNYWtlKHdpZHRoLCBoZWlnaHQpXTsKLSAg
ICB9KTsKKyAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldEhhc0VuYWJsZWRWaWRlbzpoYXNWaWRl
b107CisgICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRDb250ZW50RGltZW5zaW9uczpDR1NpemVN
YWtlKHdpZHRoLCBoZWlnaHQpXTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6c2V0U2Vla2FibGVSYW5nZXMoY29uc3QgVGltZVJhbmdlcyYgdGltZVJhbmdlcykK
QEAgLTg1NiwyMCArODMxLDEyIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6OnNldFNlZWthYmxlUmFuZ2VzKGNvbnN0IFRpbWVSYW5nZXMmIHRpbWVSCiAgICAgICAgIFtz
ZWVrYWJsZVJhbmdlcyBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoQ01UaW1lUmFuZ2U6cmFu
Z2VdXTsKICAgICB9CiAgICAgCi0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOwotICAgIAotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3Bh
dGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCBzZWVrYWJsZVJhbmdlc10gewotICAg
ICAgICBbc3Ryb25nVGhpcy0+bV9wbGF5ZXJDb250cm9sbGVyIHNldFNlZWthYmxlVGltZVJhbmdl
czpzZWVrYWJsZVJhbmdlcy5nZXQoKV07Ci0gICAgfSk7CisgICAgW21fcGxheWVyQ29udHJvbGxl
ciBzZXRTZWVrYWJsZVRpbWVSYW5nZXM6c2Vla2FibGVSYW5nZXMuZ2V0KCldOwogfQogCiB2b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRDYW5QbGF5RmFzdFJldmVyc2Uo
Ym9vbCBjYW5QbGF5RmFzdFJldmVyc2UpCiB7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOwotICAgIAotICAgIGRpc3BhdGNoX2Fz
eW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCBjYW5QbGF5RmFzdFJl
dmVyc2VdIHsKLSAgICAgICAgW3N0cm9uZ1RoaXMtPm1fcGxheWVyQ29udHJvbGxlciBzZXRDYW5T
Y2FuQmFja3dhcmQ6Y2FuUGxheUZhc3RSZXZlcnNlXTsKLSAgICB9KTsKKyAgICBbbV9wbGF5ZXJD
b250cm9sbGVyIHNldENhblNjYW5CYWNrd2FyZDpjYW5QbGF5RmFzdFJldmVyc2VdOwogfQogCiBz
dGF0aWMgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBtZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29u
c3QgVmVjdG9yPFN0cmluZz4mIG9wdGlvbnMpCkBAIC04ODYsMjUgKzg1MywxNyBAQCBzdGF0aWMg
UmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBtZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVj
dG9yPFN0cmluZz4mIG9wdAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6
c2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIG9wdGlv
bnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCiB7CiAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFy
cmF5PiB3ZWJPcHRpb25zID0gbWVkaWFTZWxlY3Rpb25PcHRpb25zKG9wdGlvbnMpOwotICAgIFJl
ZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlzKTsK
LSAgICAKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbd2Vi
T3B0aW9ucywgc3Ryb25nVGhpcywgc2VsZWN0ZWRJbmRleF0gewotICAgICAgICBbc3Ryb25nVGhp
cy0+bV9wbGF5ZXJDb250cm9sbGVyIHNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zOndlYk9w
dGlvbnMuZ2V0KCldOwotICAgICAgICBpZiAoc2VsZWN0ZWRJbmRleCA8IFt3ZWJPcHRpb25zIGNv
dW50XSkKLSAgICAgICAgICAgIFtzdHJvbmdUaGlzLT5tX3BsYXllckNvbnRyb2xsZXIgc2V0Q3Vy
cmVudEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb246W3dlYk9wdGlvbnMgb2JqZWN0QXRJbmRleDpz
dGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihzZWxlY3RlZEluZGV4KV1dOwotICAgIH0pOworICAgIFtt
X3BsYXllckNvbnRyb2xsZXIgc2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnM6d2ViT3B0aW9u
cy5nZXQoKV07CisgICAgaWYgKHNlbGVjdGVkSW5kZXggPCBbd2ViT3B0aW9ucyBjb3VudF0pCisg
ICAgICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0Q3VycmVudEF1ZGlvTWVkaWFTZWxlY3Rpb25P
cHRpb246W3dlYk9wdGlvbnMgb2JqZWN0QXRJbmRleDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihz
ZWxlY3RlZEluZGV4KV1dOwogfQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjpzZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQogewogICAgIFJldGFpblB0cjxOU011
dGFibGVBcnJheT4gd2ViT3B0aW9ucyA9IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhvcHRpb25zKTsK
LSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHN0cm9uZ1RoaXMo
dGhpcyk7Ci0KLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBb
d2ViT3B0aW9ucywgc3Ryb25nVGhpcywgc2VsZWN0ZWRJbmRleF0gewotICAgICAgICBbc3Ryb25n
VGhpcy0+bV9wbGF5ZXJDb250cm9sbGVyIHNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnM6
d2ViT3B0aW9ucy5nZXQoKV07Ci0gICAgICAgIGlmIChzZWxlY3RlZEluZGV4IDwgW3dlYk9wdGlv
bnMgY291bnRdKQotICAgICAgICAgICAgW3N0cm9uZ1RoaXMtPm1fcGxheWVyQ29udHJvbGxlciBz
ZXRDdXJyZW50TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uOlt3ZWJPcHRpb25zIG9iamVjdEF0
SW5kZXg6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oc2VsZWN0ZWRJbmRleCldXTsKLSAgICB9KTsK
KyAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnM6
d2ViT3B0aW9ucy5nZXQoKV07CisgICAgaWYgKHNlbGVjdGVkSW5kZXggPCBbd2ViT3B0aW9ucyBj
b3VudF0pCisgICAgICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0Q3VycmVudExlZ2libGVNZWRp
YVNlbGVjdGlvbk9wdGlvbjpbd2ViT3B0aW9ucyBvYmplY3RBdEluZGV4OnN0YXRpY19jYXN0PE5T
VUludGVnZXI+KHNlbGVjdGVkSW5kZXgpXV07CiB9CiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OnNldEV4dGVybmFsUGxheWJhY2soYm9vbCBlbmFibGVkLCBFeHRlcm5h
bFBsYXliYWNrVGFyZ2V0VHlwZSB0YXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFt
ZSkKQEAgLTkxNSw0MSArODc0LDI0IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OnNldEV4dGVybmFsUGxheWJhY2soYm9vbCBlbmFibGVkLCBFeHRlcm5hCiAgICAgZWxz
ZSBpZiAodGFyZ2V0VHlwZSA9PSBUYXJnZXRUeXBlVFZPdXQpCiAgICAgICAgIGV4dGVybmFsUGxh
eWJhY2tUeXBlID0gQVZQbGF5ZXJDb250cm9sbGVyRXh0ZXJuYWxQbGF5YmFja1R5cGVUVk91dDsK
IAotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhp
cyh0aGlzKTsKLQotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCks
IFtzdHJvbmdUaGlzLCBlbmFibGVkLCBsb2NhbGl6ZWREZXZpY2VOYW1lLCBleHRlcm5hbFBsYXli
YWNrVHlwZV0gewotICAgICAgICBXZWJBVlBsYXllckNvbnRyb2xsZXIqIHBsYXllckNvbnRyb2xs
ZXIgPSBzdHJvbmdUaGlzLT5tX3BsYXllckNvbnRyb2xsZXIuZ2V0KCk7Ci0gICAgICAgIHBsYXll
ckNvbnRyb2xsZXIuZXh0ZXJuYWxQbGF5YmFja0FpclBsYXlEZXZpY2VMb2NhbGl6ZWROYW1lID0g
bG9jYWxpemVkRGV2aWNlTmFtZTsKLSAgICAgICAgcGxheWVyQ29udHJvbGxlci5leHRlcm5hbFBs
YXliYWNrVHlwZSA9IGV4dGVybmFsUGxheWJhY2tUeXBlOwotICAgICAgICBwbGF5ZXJDb250cm9s
bGVyLmV4dGVybmFsUGxheWJhY2tBY3RpdmUgPSBlbmFibGVkOwotICAgICAgICBbc3Ryb25nVGhp
cy0+bV92aWRlb0xheWVyQ29udGFpbmVyLmdldCgpIHNldEhpZGRlbjplbmFibGVkXTsKLSAgICB9
KTsKKyAgICBXZWJBVlBsYXllckNvbnRyb2xsZXIqIHBsYXllckNvbnRyb2xsZXIgPSBtX3BsYXll
ckNvbnRyb2xsZXIuZ2V0KCk7CisgICAgcGxheWVyQ29udHJvbGxlci5leHRlcm5hbFBsYXliYWNr
QWlyUGxheURldmljZUxvY2FsaXplZE5hbWUgPSBsb2NhbGl6ZWREZXZpY2VOYW1lOworICAgIHBs
YXllckNvbnRyb2xsZXIuZXh0ZXJuYWxQbGF5YmFja1R5cGUgPSBleHRlcm5hbFBsYXliYWNrVHlw
ZTsKKyAgICBwbGF5ZXJDb250cm9sbGVyLmV4dGVybmFsUGxheWJhY2tBY3RpdmUgPSBlbmFibGVk
OworICAgIFttX3ZpZGVvTGF5ZXJDb250YWluZXIuZ2V0KCkgc2V0SGlkZGVuOmVuYWJsZWRdOwog
fQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXR1cEZ1bGxzY3Jl
ZW4oUGxhdGZvcm1MYXllciYgdmlkZW9MYXllciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgaW5p
dGlhbFJlY3QsIFVJVmlldyogcGFyZW50VmlldywgSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxs
c2NyZWVuTW9kZSBtb2RlLCBib29sIGFsbG93T3B0aW1pemVkRnVsbHNjcmVlbikKIHsKLSAgICBS
ZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHN0cm9uZ1RoaXModGhpcyk7
Ci0KICAgICBBU1NFUlQobW9kZSAhPSBIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5N
b2RlTm9uZSk7Ci0gICAgbV92aWRlb0xheWVyID0gJnZpZGVvTGF5ZXI7Ci0KLSAgICBtX21vZGUg
PSBtb2RlOwotCi0gICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwg
W3N0cm9uZ1RoaXMsICZ2aWRlb0xheWVyLCBpbml0aWFsUmVjdCwgcGFyZW50VmlldywgbW9kZSwg
YWxsb3dPcHRpbWl6ZWRGdWxsc2NyZWVuXSB7Ci0gICAgICAgIHN0cm9uZ1RoaXMtPnNldHVwRnVs
bHNjcmVlbkludGVybmFsKHZpZGVvTGF5ZXIsIGluaXRpYWxSZWN0LCBwYXJlbnRWaWV3LCBtb2Rl
LCBhbGxvd09wdGltaXplZEZ1bGxzY3JlZW4pOwotICAgIH0pOwotfQotCi12b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXR1cEZ1bGxzY3JlZW5JbnRlcm5hbChQbGF0Zm9y
bUxheWVyJiB2aWRlb0xheWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBpbml0aWFsUmVjdCwg
VUlWaWV3KiBwYXJlbnRWaWV3LCBIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
IG1vZGUsIGJvb2wgYWxsb3dPcHRpbWl6ZWRGdWxsc2NyZWVuKQotewotICAgIExPRyhGdWxsc2Ny
ZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldHVwRnVsbHNjcmVlbklu
dGVybmFsKCVwKSIsIHRoaXMpOwotICAgIFVOVVNFRF9QQVJBTSh2aWRlb0xheWVyKTsKLSAgICBV
TlVTRURfUEFSQU0obW9kZSk7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdDo6c2V0dXBGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOwogCiAgICAgbV9h
bGxvd09wdGltaXplZEZ1bGxzY3JlZW4gPSBhbGxvd09wdGltaXplZEZ1bGxzY3JlZW47CiAKICAg
ICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CiAgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFj
dGlvbnM6WUVTXTsKKyAgICBtX3ZpZGVvTGF5ZXIgPSAmdmlkZW9MYXllcjsKKyAgICBtX21vZGUg
PSBtb2RlOwogICAgIG1fcGFyZW50VmlldyA9IHBhcmVudFZpZXc7CiAgICAgbV9wYXJlbnRXaW5k
b3cgPSBwYXJlbnRWaWV3LndpbmRvdzsKIApAQCAtMTAwMSwxMSArOTQzLDggQEAgdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0dXBGdWxsc2NyZWVuSW50ZXJuYWwoUGxh
dGZvcm1MYXllciYgdmkKIAogICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07CiAKLSAgICBSZWZQ
dHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHN0cm9uZ1RoaXModGhpcyk7Ci0g
ICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzXSB7Ci0gICAgICAgIGlmIChzdHJvbmdUaGlzLT5t
X2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAgICAgIHN0cm9uZ1RoaXMtPm1fZnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRTZXR1cEZ1bGxzY3JlZW4oKTsKLSAgICB9KTsKKyAg
ICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCisgICAgICAgIG1fZnVsbHNjcmVlbkNo
YW5nZU9ic2VydmVyLT5kaWRTZXR1cEZ1bGxzY3JlZW4oKTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuKCkKQEAgLTEwMTYsMTYgKzk1
NSwxMyBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1bGxz
Y3JlZW4oKQogICAgIG1fZXhpdFJlcXVlc3RlZCA9IGZhbHNlOwogICAgIG1fZW50ZXJSZXF1ZXN0
ZWQgPSB0cnVlOwogCi0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
PiBzdHJvbmdUaGlzKHRoaXMpOwotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWlu
X3F1ZXVlKCksIFtzdHJvbmdUaGlzXSB7Ci0gICAgICAgIFtzdHJvbmdUaGlzLT5tX3ZpZGVvTGF5
ZXJDb250YWluZXIgc2V0QmFja2dyb3VuZENvbG9yOltbZ2V0VUlDb2xvckNsYXNzKCkgYmxhY2tD
b2xvcl0gQ0dDb2xvcl1dOwotICAgICAgICBpZiAoc3Ryb25nVGhpcy0+bW9kZSgpID09IEhUTUxN
ZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVPcHRpbWl6ZWQpCi0gICAgICAgICAgICBz
dHJvbmdUaGlzLT5lbnRlckZ1bGxzY3JlZW5PcHRpbWl6ZWQoKTsKLSAgICAgICAgZWxzZSBpZiAo
c3Ryb25nVGhpcy0+bW9kZSgpID09IEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1v
ZGVTdGFuZGFyZCkKLSAgICAgICAgICAgIHN0cm9uZ1RoaXMtPmVudGVyRnVsbHNjcmVlblN0YW5k
YXJkKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIH0pOworICAgIFttX3ZpZGVvTGF5ZXJDb250YWluZXIgc2V0QmFja2dyb3VuZENvbG9yOltb
Z2V0VUlDb2xvckNsYXNzKCkgYmxhY2tDb2xvcl0gQ0dDb2xvcl1dOworICAgIGlmIChtb2RlKCkg
PT0gSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZU9wdGltaXplZCkKKyAgICAg
ICAgZW50ZXJGdWxsc2NyZWVuT3B0aW1pemVkKCk7CisgICAgZWxzZSBpZiAobW9kZSgpID09IEhU
TUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkKKyAgICAgICAgZW50
ZXJGdWxsc2NyZWVuU3RhbmRhcmQoKTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogfQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRl
ckZ1bGxzY3JlZW5PcHRpbWl6ZWQoKQpAQCAtMTA0NSwzNCArOTgxLDIxIEBAIHZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyRnVsbHNjcmVlblN0YW5kYXJkKCkKICAg
ICAgICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6
ZW50ZXJGdWxsc2NyZWVuU3RhbmRhcmQgLSBsYW1iZGEoJXApIC0gc3VjY2VlZGVkKCVzKSIsIHRo
aXMsIGJvb2xTdHJpbmcoc3VjY2VlZGVkKSk7CiAgICAgICAgIFttX3BsYXllclZpZXdDb250cm9s
bGVyIHNldFNob3dzUGxheWJhY2tDb250cm9sczpZRVNdOwogCi0gICAgICAgIFdlYlRocmVhZFJ1
bihbdGhpcywgc3Ryb25nVGhpc10gewotICAgICAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyKQotICAgICAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5k
aWRFbnRlckZ1bGxzY3JlZW4oKTsKLSAgICAgICAgfSk7CisgICAgICAgIGlmIChtX2Z1bGxzY3Jl
ZW5DaGFuZ2VPYnNlcnZlcikKKyAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
LT5kaWRFbnRlckZ1bGxzY3JlZW4oKTsKICAgICB9XTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6ZXhpdEZ1bGxzY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgZmluYWxSZWN0KQogewotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdD4gc3Ryb25nVGhpcyh0aGlzKTsKLQogICAgIG1fZXhpdFJlcXVlc3RlZCA9IHRydWU7CiAg
ICAgaWYgKG1fZXhpdENvbXBsZXRlZCkgewotICAgICAgICBXZWJUaHJlYWRSdW4oW3N0cm9uZ1Ro
aXNdIHsKLSAgICAgICAgICAgIGlmIChzdHJvbmdUaGlzLT5tX2Z1bGxzY3JlZW5DaGFuZ2VPYnNl
cnZlcikKLSAgICAgICAgICAgICAgICBzdHJvbmdUaGlzLT5tX2Z1bGxzY3JlZW5DaGFuZ2VPYnNl
cnZlci0+ZGlkRXhpdEZ1bGxzY3JlZW4oKTsKLSAgICAgICAgfSk7CisgICAgICAgIGlmIChtX2Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9i
c2VydmVyLT5kaWRFeGl0RnVsbHNjcmVlbigpOwogICAgICAgICByZXR1cm47CiAgICAgfQotCi0g
ICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMs
IGZpbmFsUmVjdF0gewotICAgICAgICBzdHJvbmdUaGlzLT5leGl0RnVsbHNjcmVlbkludGVybmFs
KGZpbmFsUmVjdCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OmV4aXRGdWxsc2NyZWVuSW50ZXJuYWwoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
ZmluYWxSZWN0KQotewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ6OmV4aXRGdWxsc2NyZWVuSW50ZXJuYWwoJXApIiwgdGhpcyk7CisgICAgCisg
ICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZXhp
dEZ1bGxzY3JlZW4oJXApIiwgdGhpcyk7CiAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0
U2hvd3NQbGF5YmFja0NvbnRyb2xzOk5PXTsKICAgICBpZiAobV92aWV3Q29udHJvbGxlcikKICAg
ICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10uZnJhbWUgPSBbbV9wYXJlbnRWaWV3
IGNvbnZlcnRSZWN0OmZpbmFsUmVjdCB0b1ZpZXc6bmlsXTsKQEAgLTEwODksMjUgKzEwMTIsMjMg
QEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZXhpdEZ1bGxzY3JlZW5J
bnRlcm5hbChjb25zdCBXZWJDb3JlOjpJbnQKICAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xs
ZXIgc3RvcE9wdGltaXplZEZ1bGxzY3JlZW5dOwogICAgIH0gZWxzZSBpZiAoaXNNb2RlKEhUTUxN
ZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVPcHRpbWl6ZWQgfCBIVE1MTWVkaWFFbGVt
ZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpKSB7CiAgICAgICAgIFJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlzKTsKLSAgICAgICAg
W21fcGxheWVyVmlld0NvbnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpOTyBjb21wbGV0
aW9uSGFuZGxlcjpbc3Ryb25nVGhpc10gKEJPT0wsIE5TRXJyb3IqKSB7Ci0gICAgICAgICAgICBb
c3Ryb25nVGhpcy0+bV93aW5kb3cgc2V0SGlkZGVuOk5PXTsKLSAgICAgICAgICAgIFtzdHJvbmdU
aGlzLT5tX3BsYXllclZpZXdDb250cm9sbGVyIHN0b3BPcHRpbWl6ZWRGdWxsc2NyZWVuXTsKKyAg
ICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpOTyBj
b21wbGV0aW9uSGFuZGxlcjpbc3Ryb25nVGhpcywgdGhpc10gKEJPT0wsIE5TRXJyb3IqKSB7Cisg
ICAgICAgICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOk5PXTsKKyAgICAgICAgICAgIFttX3BsYXll
clZpZXdDb250cm9sbGVyIHN0b3BPcHRpbWl6ZWRGdWxsc2NyZWVuXTsKICAgICAgICAgfV07CiAg
ICAgfSBlbHNlIGlmIChpc01vZGUoSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9k
ZVN0YW5kYXJkKSkgewogICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ+IHN0cm9uZ1RoaXModGhpcyk7Ci0gICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVy
IGV4aXRGdWxsU2NyZWVuQW5pbWF0ZWQ6WUVTIGNvbXBsZXRpb25IYW5kbGVyOltzdHJvbmdUaGlz
XSAoQk9PTCwgTlNFcnJvciopIHsKLSAgICAgICAgICAgIHN0cm9uZ1RoaXMtPm1fZXhpdENvbXBs
ZXRlZCA9IHRydWU7CisgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIGV4aXRGdWxsU2Ny
ZWVuQW5pbWF0ZWQ6WUVTIGNvbXBsZXRpb25IYW5kbGVyOltzdHJvbmdUaGlzLCB0aGlzXSAoQk9P
TCwgTlNFcnJvciopIHsKKyAgICAgICAgICAgIG1fZXhpdENvbXBsZXRlZCA9IHRydWU7CiAKICAg
ICAgICAgICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKICAgICAgICAgICAgIFtDQVRyYW5zYWN0
aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107Ci0gICAgICAgICAgICBbc3Ryb25nVGhpcy0+bV92
aWRlb0xheWVyQ29udGFpbmVyIHNldEJhY2tncm91bmRDb2xvcjpbW2dldFVJQ29sb3JDbGFzcygp
IGNsZWFyQ29sb3JdIENHQ29sb3JdXTsKLSAgICAgICAgICAgIFtbc3Ryb25nVGhpcy0+bV9wbGF5
ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRCYWNrZ3JvdW5kQ29sb3I6W2dldFVJQ29sb3JDbGFz
cygpIGNsZWFyQ29sb3JdXTsKKyAgICAgICAgICAgIFttX3ZpZGVvTGF5ZXJDb250YWluZXIgc2V0
QmFja2dyb3VuZENvbG9yOltbZ2V0VUlDb2xvckNsYXNzKCkgY2xlYXJDb2xvcl0gQ0dDb2xvcl1d
OworICAgICAgICAgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEJhY2tncm91
bmRDb2xvcjpbZ2V0VUlDb2xvckNsYXNzKCkgY2xlYXJDb2xvcl1dOwogICAgICAgICAgICAgW0NB
VHJhbnNhY3Rpb24gY29tbWl0XTsKIAotICAgICAgICAgICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdU
aGlzXSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN0cm9uZ1RoaXMtPm1fZnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyKQotICAgICAgICAgICAgICAgICAgICBzdHJvbmdUaGlzLT5tX2Z1bGxzY3JlZW5D
aGFuZ2VPYnNlcnZlci0+ZGlkRXhpdEZ1bGxzY3JlZW4oKTsKLSAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQorICAgICAgICAgICAgICAg
IG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFeGl0RnVsbHNjcmVlbigpOwogICAgICAg
ICB9XTsKICAgICB9OwogfQpAQCAtMTEyMCwyMCArMTA0MSwxMSBAQCB2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0OjpleGl0RnVsbHNjcmVlbkludGVybmFsKGNvbnN0IFdlYkNv
cmU6OkludAogLShVSUludGVyZmFjZU9yaWVudGF0aW9uKWludGVyZmFjZU9yaWVudGF0aW9uOwog
QGVuZAogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpjbGVhbnVwRnVs
bHNjcmVlbigpCi17Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
PiBzdHJvbmdUaGlzKHRoaXMpOwotICAgIAotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dl
dF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzXSB7Ci0gICAgICAgIHN0cm9uZ1RoaXMtPmNsZWFu
dXBGdWxsc2NyZWVuSW50ZXJuYWwoKTsKLSAgICB9KTsKLX0KLQogI3ByYWdtYSBjbGFuZyBkaWFn
bm9zdGljIHB1c2gKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0
ZWQtZGVjbGFyYXRpb25zIgotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6
Y2xlYW51cEZ1bGxzY3JlZW5JbnRlcm5hbCgpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpjbGVhbnVwRnVsbHNjcmVlbigpCiB7Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y2xlYW51cEZ1bGxzY3JlZW5JbnRlcm5h
bCglcCkiLCB0aGlzKTsKKyAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpjbGVhbnVwRnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKICAgICBpZiAobV93
aW5kb3cpIHsKICAgICAgICAgW21fd2luZG93IHNldEhpZGRlbjpZRVNdOwogICAgICAgICBbbV93
aW5kb3cgc2V0Um9vdFZpZXdDb250cm9sbGVyOm5pbF07CkBAIC0xMTczLDEyICsxMDg1LDEwIEBA
IHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmNsZWFudXBGdWxsc2NyZWVu
SW50ZXJuYWwoKQogICAgIG1fcGFyZW50VmlldyA9IG5pbDsKICAgICBtX3BhcmVudFdpbmRvdyA9
IG5pbDsKICAgICAKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+
IHN0cm9uZ1RoaXModGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzXSB7Ci0gICAg
ICAgIGlmIChzdHJvbmdUaGlzLT5tX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAg
ICAgIHN0cm9uZ1RoaXMtPm1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRDbGVhbnVwRnVs
bHNjcmVlbigpOwotICAgICAgICBzdHJvbmdUaGlzLT5tX2VudGVyUmVxdWVzdGVkID0gZmFsc2U7
Ci0gICAgfSk7CisgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQorICAgICAgICBt
X2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKTsKKworICAg
IG1fZW50ZXJSZXF1ZXN0ZWQgPSBmYWxzZTsKIH0KICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBw
b3AKIApAQCAtMTE4Nyw3ICsxMDk3LDcgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6aW52YWxpZGF0ZSgpCiAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCA9IG5pbDsK
ICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciA9IG5pbDsKICAgICAKLSAgICBjbGVhbnVw
RnVsbHNjcmVlbkludGVybmFsKCk7CisgICAgY2xlYW51cEZ1bGxzY3JlZW4oKTsKIH0KIAogdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cmVxdWVzdEhpZGVBbmRFeGl0RnVs
bHNjcmVlbigpCkBAIC0xMjAwLDEwICsxMTEwLDcgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpCiAgICAgCiAgICAg
TE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cmVxdWVz
dEhpZGVBbmRFeGl0RnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKIAotICAgIFJlZlB0cjxXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlzKTsKLSAgICBkaXNwYXRj
aF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpc10gewotICAgICAg
ICBbc3Ryb25nVGhpcy0+bV93aW5kb3cgc2V0SGlkZGVuOllFU107Ci0gICAgfSk7CisgICAgW21f
d2luZG93IHNldEhpZGRlbjpZRVNdOwogCiAgICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwg
JiYgIW1fZXhpdFJlcXVlc3RlZCkgewogICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5w
YXVzZSgpOwpAQCAtMTIxNCwxOSArMTEyMSwxNiBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCkKIHZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZShib29s
IHZpc2libGUsIGNvbnN0IEludFJlY3QmIGlubGluZVJlY3QpCiB7CiAgICAgTE9HKEZ1bGxzY3Jl
ZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cHJlcGFyZWRUb1JldHVyblRv
SW5saW5lKCVwKSAtIHZpc2libGUoJXMpIiwgdGhpcywgYm9vbFN0cmluZyh2aXNpYmxlKSk7Ci0g
ICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRo
aXMpOwotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJv
bmdUaGlzLCB2aXNpYmxlLCBpbmxpbmVSZWN0XSB7Ci0gICAgICAgIGlmIChzdHJvbmdUaGlzLT5t
X3ByZXBhcmVUb0lubGluZUNhbGxiYWNrKSB7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
IChzdHJvbmdUaGlzLT5tX3ZpZXdDb250cm9sbGVyKQotICAgICAgICAgICAgICAgIFtzdHJvbmdU
aGlzLT5tX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddLmZyYW1lID0gW3N0cm9uZ1RoaXMtPm1f
cGFyZW50VmlldyBjb252ZXJ0UmVjdDppbmxpbmVSZWN0IHRvVmlldzpuaWxdOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIFtzdHJvbmdUaGlzLT5tX3BsYXllclZpZXdDb250cm9s
bGVyIHZpZXddLmZyYW1lID0gaW5saW5lUmVjdDsKKyAgICBpZiAobV9wcmVwYXJlVG9JbmxpbmVD
YWxsYmFjaykgeworICAgICAgICAKKyAgICAgICAgaWYgKG1fdmlld0NvbnRyb2xsZXIpCisgICAg
ICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XS5mcmFtZSA9IFttX3BhcmVudFZp
ZXcgY29udmVydFJlY3Q6aW5saW5lUmVjdCB0b1ZpZXc6bmlsXTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10uZnJhbWUgPSBpbmxpbmVSZWN0
OwogCi0gICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoYm9vbCk+IGNhbGxiYWNrID0gV1RG
Ojptb3ZlKHN0cm9uZ1RoaXMtPm1fcHJlcGFyZVRvSW5saW5lQ2FsbGJhY2spOwotICAgICAgICAg
ICAgY2FsbGJhY2sodmlzaWJsZSk7Ci0gICAgICAgIH0KLSAgICB9KTsKKyAgICAgICAgc3RkOjpm
dW5jdGlvbjx2b2lkKGJvb2wpPiBjYWxsYmFjayA9IFdURjo6bW92ZShtX3ByZXBhcmVUb0lubGlu
ZUNhbGxiYWNrKTsKKyAgICAgICAgY2FsbGJhY2sodmlzaWJsZSk7CisgICAgfQogfQogCiBib29s
IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjptYXlBdXRvbWF0aWNhbGx5U2hvd1Zp
ZGVvT3B0aW1pemVkKCkgY29uc3QKQEAgLTEyNTAsMjEgKzExNTQsMjEgQEAgdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2lsbFN0YXJ0T3B0aW1pemVkRnVsbHNjcmVlbigp
CiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdD4gc3Ryb25nVGhpcyh0aGlzKTsKLSAgICBmdWxsc2NyZWVuTWF5UmV0dXJuVG9Jbmxp
bmUoW3N0cm9uZ1RoaXNdKGJvb2wgdmlzaWJsZSkgeworICAgIGZ1bGxzY3JlZW5NYXlSZXR1cm5U
b0lubGluZShbc3Ryb25nVGhpcywgdGhpc10oYm9vbCB2aXNpYmxlKSB7CiAgICAgICAgIExPRyhG
dWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndpbGxTdGFydE9w
dGltaXplZEZ1bGxzY3JlZW4gLSBsYW1iZGEoJXApIC0gdmlzaWJsZSglcykiLCBzdHJvbmdUaGlz
LmdldCgpLCBib29sU3RyaW5nKHZpc2libGUpKTsKIAogICAgICAgICBpZiAoIXZpc2libGUpIHsK
LSAgICAgICAgICAgIFtzdHJvbmdUaGlzLT5tX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKKyAgICAg
ICAgICAgIFttX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCi0gICAgICAgIFtbc3Ryb25nVGhpcy0+bV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2
aWV3XSBsYXlvdXRJZk5lZWRlZF07CisgICAgICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2
aWV3XSBsYXlvdXRJZk5lZWRlZF07CiAKLSAgICAgICAgW3N0cm9uZ1RoaXMtPm1fcGxheWVyVmll
d0NvbnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpZRVMgY29tcGxldGlvbkhhbmRsZXI6
W3N0cm9uZ1RoaXNdIChCT09MIGNvbXBsZXRlZCwgTlNFcnJvciopIHsKKyAgICAgICAgW21fcGxh
eWVyVmlld0NvbnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpZRVMgY29tcGxldGlvbkhh
bmRsZXI6W3N0cm9uZ1RoaXMsIHRoaXNdIChCT09MIGNvbXBsZXRlZCwgTlNFcnJvciopIHsKICAg
ICAgICAgICAgIGlmICghY29tcGxldGVkKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIHN0cm9uZ1RoaXMtPmNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlU3RhbmRhcmQpOwotICAgICAgICAgICAgW3N0cm9uZ1RoaXMtPm1fd2luZG93IHNl
dEhpZGRlbjpZRVNdOworICAgICAgICAgICAgY2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnQ6OlZp
ZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCk7CisgICAgICAgICAgICBbbV93aW5kb3cgc2V0SGlk
ZGVuOllFU107CiAgICAgICAgIH1dOwogICAgIH0pOwogfQpAQCAtMTI3MywxMyArMTE3NywxMCBA
QCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpkaWRTdGFydE9wdGltaXpl
ZEZ1bGxzY3JlZW4oKQogewogICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OmRpZFN0YXJ0T3B0aW1pemVkRnVsbHNjcmVlbiglcCkiLCB0aGlzKTsK
ICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRTaG93c1BsYXliYWNrQ29udHJvbHM6WUVT
XTsKKyAgICBbbV93aW5kb3cgc2V0SGlkZGVuOllFU107CiAKLSAgICBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHN0cm9uZ1RoaXModGhpcyk7Ci0gICAgV2ViVGhyZWFk
UnVuKFtzdHJvbmdUaGlzXSB7Ci0gICAgICAgIFtzdHJvbmdUaGlzLT5tX3dpbmRvdyBzZXRIaWRk
ZW46WUVTXTsKLSAgICAgICAgaWYgKHN0cm9uZ1RoaXMtPm1fZnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyKQotICAgICAgICAgICAgc3Ryb25nVGhpcy0+bV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIt
PmRpZEVudGVyRnVsbHNjcmVlbigpOwotICAgIH0pOworICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFu
Z2VPYnNlcnZlcikKKyAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEVudGVy
RnVsbHNjcmVlbigpOwogfQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
Ojp3aWxsU3RvcE9wdGltaXplZEZ1bGxzY3JlZW4oKQpAQCAtMTI4NywxMSArMTE4OCw4IEBAIHZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndpbGxTdG9wT3B0aW1pemVkRnVs
bHNjcmVlbigpCiAgICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6d2lsbFN0b3BPcHRpbWl6ZWRGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOwogICAgIFtt
X3dpbmRvdyBzZXRIaWRkZW46Tk9dOwogCi0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOwotICAgIFdlYlRocmVhZFJ1bihbc3Ryb25n
VGhpc10gewotICAgICAgICBpZiAoc3Ryb25nVGhpcy0+bV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkK
LSAgICAgICAgICAgIHN0cm9uZ1RoaXMtPm1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPnJlcXVlc3RF
eGl0RnVsbHNjcmVlbigpOwotICAgIH0pOworICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVs
KQorICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZXF1ZXN0RXhpdEZ1bGxzY3JlZW4o
KTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZGlkU3RvcE9w
dGltaXplZEZ1bGxzY3JlZW4oKQpAQCAtMTMwNSwxMyArMTIwMywxMSBAQCB2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpkaWRTdG9wT3B0aW1pemVkRnVsbHNjcmVlbigpCiAg
ICAgW21fdmlkZW9MYXllckNvbnRhaW5lciBzZXRCYWNrZ3JvdW5kQ29sb3I6W1tnZXRVSUNvbG9y
Q2xhc3MoKSBjbGVhckNvbG9yXSBDR0NvbG9yXV07CiAgICAgW1ttX3BsYXllclZpZXdDb250cm9s
bGVyIHZpZXddIHNldEJhY2tncm91bmRDb2xvcjpbZ2V0VUlDb2xvckNsYXNzKCkgY2xlYXJDb2xv
cl1dOwogCi0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJv
bmdUaGlzKHRoaXMpOwotICAgIFdlYlRocmVhZFJ1bihbc3Ryb25nVGhpc10gewotICAgICAgICBz
dHJvbmdUaGlzLT5jbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9k
ZU9wdGltaXplZCk7Ci0gICAgICAgIFtzdHJvbmdUaGlzLT5tX3dpbmRvdyBzZXRIaWRkZW46WUVT
XTsKLSAgICAgICAgaWYgKHN0cm9uZ1RoaXMtPm1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQot
ICAgICAgICAgICAgc3Ryb25nVGhpcy0+bV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEV4
aXRGdWxsc2NyZWVuKCk7Ci0gICAgfSk7CisgICAgY2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnQ6
OlZpZGVvRnVsbHNjcmVlbk1vZGVPcHRpbWl6ZWQpOworICAgIFttX3dpbmRvdyBzZXRIaWRkZW46
WUVTXTsKKworICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAgICAgICAgbV9m
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEV4aXRGdWxsc2NyZWVuKCk7CiB9CiAKIHZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndpbGxDYW5jZWxPcHRpbWl6ZWRGdWxs
c2NyZWVuKCkKQEAgLTEzMjEsMTEgKzEyMTcsOCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0Ojp3aWxsQ2FuY2VsT3B0aW1pemVkRnVsbHNjcmVlbigpCiAgICAgW21fdmlk
ZW9MYXllckNvbnRhaW5lciBzZXRCYWNrZ3JvdW5kQ29sb3I6W1tnZXRVSUNvbG9yQ2xhc3MoKSBj
bGVhckNvbG9yXSBDR0NvbG9yXV07CiAgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXdd
IHNldEJhY2tncm91bmRDb2xvcjpbZ2V0VUlDb2xvckNsYXNzKCkgY2xlYXJDb2xvcl1dOwogCi0g
ICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRo
aXMpOwotICAgIFdlYlRocmVhZFJ1bihbc3Ryb25nVGhpc10gewotICAgICAgICBpZiAoc3Ryb25n
VGhpcy0+bV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKLSAgICAgICAgICAgIHN0cm9uZ1RoaXMtPm1f
dmlkZW9GdWxsc2NyZWVuTW9kZWwtPnJlcXVlc3RFeGl0RnVsbHNjcmVlbigpOwotICAgIH0pOwor
ICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQorICAgICAgICBtX3ZpZGVvRnVsbHNjcmVl
bk1vZGVsLT5yZXF1ZXN0RXhpdEZ1bGxzY3JlZW4oKTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6ZGlkQ2FuY2VsT3B0aW1pemVkRnVsbHNjcmVlbigpCkBAIC0x
MzM0LDEzICsxMjI3LDExIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
OmRpZENhbmNlbE9wdGltaXplZEZ1bGxzY3JlZW4oKQogICAgIGlmIChoYXNNb2RlKEhUTUxNZWRp
YUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhp
cyh0aGlzKTsKLSAgICBXZWJUaHJlYWRSdW4oW3N0cm9uZ1RoaXNdIHsKLSAgICAgICAgc3Ryb25n
VGhpcy0+Y2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVPcHRp
bWl6ZWQpOwotICAgICAgICBbc3Ryb25nVGhpcy0+bV93aW5kb3cgc2V0SGlkZGVuOllFU107Ci0g
ICAgICAgIGlmIChzdHJvbmdUaGlzLT5tX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAg
ICAgICAgIHN0cm9uZ1RoaXMtPm1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFeGl0RnVs
bHNjcmVlbigpOwotICAgIH0pOworICAgIGNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50OjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlT3B0aW1pemVkKTsKKyAgICBbbV93aW5kb3cgc2V0SGlkZGVuOllFU107
CisKKyAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCisgICAgICAgIG1fZnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFeGl0RnVsbHNjcmVlbigpOwogfQogCiB2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpwcmVwYXJlRm9yT3B0aW1pemVkRnVsbHNjcmVl
blN0b3BXaXRoQ29tcGxldGlvbkhhbmRsZXIodm9pZCAoXmNvbXBsZXRpb25IYW5kbGVyKShCT09M
IHJlc3RvcmVkKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbQppbmRleCAzNWI1
MTM3YTRmNWJiZjRiZDE5ZjhmZjAwZDhmNjUzNjdlM2UxY2NiLi5iZmM0MTFkODYxYjQ0YWRjMDcy
ZGMzYjA4NTM1YzIzODUwNzhiNzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
Lm1tCkBAIC0xNzksMTI1ICsxNzksNzQgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZp
ZGVvRWxlbWVudDo6c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIoUGxhdGZvcm1MYXllcioKICAgICBb
bV92aWRlb0Z1bGxzY3JlZW5MYXllciBzZXRBbmNob3JQb2ludDpDR1BvaW50TWFrZSgwLjUsIDAu
NSldOwogICAgIFttX3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNldEJvdW5kczptX3ZpZGVvRnJhbWVd
OwogICAgIAotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50PiBwcm90ZWN0KHRoaXMpOwotICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAo
bV92aWRlb0VsZW1lbnQpCi0gICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+c2V0VmlkZW9GdWxs
c2NyZWVuTGF5ZXIobV92aWRlb0Z1bGxzY3JlZW5MYXllci5nZXQoKSk7Ci0gICAgICAgIHByb3Rl
Y3QuY2xlYXIoKTsKLSAgICB9KTsKKyAgICBpZiAobV92aWRlb0VsZW1lbnQpCisgICAgICAgIG1f
dmlkZW9FbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihtX3ZpZGVvRnVsbHNjcmVlbkxh
eWVyLmdldCgpKTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dDo6cGxheSgpCiB7Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAg
IGlmIChtX3ZpZGVvRWxlbWVudCkKLSAgICAgICAgICAgIG1fdmlkZW9FbGVtZW50LT5wbGF5KCk7
Ci0gICAgICAgIHByb3RlY3QuY2xlYXIoKTsKLSAgICB9KTsKKyAgICBpZiAobV92aWRlb0VsZW1l
bnQpCisgICAgICAgIG1fdmlkZW9FbGVtZW50LT5wbGF5KCk7CiB9CiAKIHZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnBhdXNlKCkKIHsKLSAgICBfX2Jsb2NrIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAg
ICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYgKG1fdmlkZW9FbGVtZW50KQotICAgICAgICAg
ICAgbV92aWRlb0VsZW1lbnQtPnBhdXNlKCk7Ci0gICAgICAgIHByb3RlY3QuY2xlYXIoKTsKLSAg
ICB9KTsKKyAgICBpZiAobV92aWRlb0VsZW1lbnQpCisgICAgICAgIG1fdmlkZW9FbGVtZW50LT5w
YXVzZSgpOwogfQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojp0
b2dnbGVQbGF5U3RhdGUoKQogewotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50PiBwcm90ZWN0KHRoaXMpOwotICAgIFdlYlRocmVhZFJ1biheewot
ICAgICAgICBpZiAobV92aWRlb0VsZW1lbnQpCi0gICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+
dG9nZ2xlUGxheVN0YXRlKCk7Ci0gICAgICAgIHByb3RlY3QuY2xlYXIoKTsKLSAgICB9KTsKKyAg
ICBpZiAobV92aWRlb0VsZW1lbnQpCisgICAgICAgIG1fdmlkZW9FbGVtZW50LT50b2dnbGVQbGF5
U3RhdGUoKTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6
YmVnaW5TY3J1YmJpbmcoKQogewotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50PiBwcm90ZWN0KHRoaXMpOwotICAgIFdlYlRocmVhZFJ1biheewot
ICAgICAgICBpZiAobV92aWRlb0VsZW1lbnQpCi0gICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+
YmVnaW5TY3J1YmJpbmcoKTsKLSAgICAgICAgcHJvdGVjdC5jbGVhcigpOwotICAgIH0pOworICAg
IGlmIChtX3ZpZGVvRWxlbWVudCkKKyAgICAgICAgbV92aWRlb0VsZW1lbnQtPmJlZ2luU2NydWJi
aW5nKCk7CiB9CiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmVu
ZFNjcnViYmluZygpCiB7Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAg
ICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKLSAgICAgICAgICAgIG1fdmlkZW9FbGVtZW50LT5lbmRT
Y3J1YmJpbmcoKTsKLSAgICAgICAgcHJvdGVjdC5jbGVhcigpOwotICAgIH0pOworICAgIGlmICht
X3ZpZGVvRWxlbWVudCkKKyAgICAgICAgbV92aWRlb0VsZW1lbnQtPmVuZFNjcnViYmluZygpOwog
fQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZWVrVG9UaW1l
KGRvdWJsZSB0aW1lKQogewotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50PiBwcm90ZWN0KHRoaXMpOwotICAgIFdlYlRocmVhZFJ1biheewotICAg
ICAgICBpZiAobV92aWRlb0VsZW1lbnQpCi0gICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+c2V0
Q3VycmVudFRpbWUodGltZSk7Ci0gICAgICAgIHByb3RlY3QuY2xlYXIoKTsKLSAgICB9KTsKKyAg
ICBpZiAobV92aWRlb0VsZW1lbnQpCisgICAgICAgIG1fdmlkZW9FbGVtZW50LT5zZXRDdXJyZW50
VGltZSh0aW1lKTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dDo6ZmFzdFNlZWsoZG91YmxlIHRpbWUpCiB7Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7Ci0gICAgV2ViVGhyZWFk
UnVuKF57Ci0gICAgICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKLSAgICAgICAgICAgIG1fdmlkZW9F
bGVtZW50LT5mYXN0U2Vlayh0aW1lKTsKLSAgICAgICAgcHJvdGVjdC5jbGVhcigpOwotICAgIH0p
OworICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKKyAgICAgICAgbV92aWRlb0VsZW1lbnQtPmZhc3RT
ZWVrKHRpbWUpOwogfQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
OjpiZWdpblNjYW5uaW5nRm9yd2FyZCgpCiB7Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7Ci0gICAgV2ViVGhyZWFk
UnVuKF57Ci0gICAgICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKLSAgICAgICAgICAgIG1fdmlkZW9F
bGVtZW50LT5iZWdpblNjYW5uaW5nKE1lZGlhQ29udHJvbGxlckludGVyZmFjZTo6Rm9yd2FyZCk7
Ci0gICAgICAgIHByb3RlY3QuY2xlYXIoKTsKLSAgICB9KTsKKyAgICBpZiAobV92aWRlb0VsZW1l
bnQpCisgICAgICAgIG1fdmlkZW9FbGVtZW50LT5iZWdpblNjYW5uaW5nKE1lZGlhQ29udHJvbGxl
ckludGVyZmFjZTo6Rm9yd2FyZCk7CiB9CiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpCiB7Ci0gICAgX19ibG9jayBSZWZQ
dHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7Ci0g
ICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKLSAgICAgICAg
ICAgIG1fdmlkZW9FbGVtZW50LT5iZWdpblNjYW5uaW5nKE1lZGlhQ29udHJvbGxlckludGVyZmFj
ZTo6QmFja3dhcmQpOwotICAgICAgICBwcm90ZWN0LmNsZWFyKCk7Ci0gICAgfSk7CisgICAgaWYg
KG1fdmlkZW9FbGVtZW50KQorICAgICAgICBtX3ZpZGVvRWxlbWVudC0+YmVnaW5TY2FubmluZyhN
ZWRpYUNvbnRyb2xsZXJJbnRlcmZhY2U6OkJhY2t3YXJkKTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6ZW5kU2Nhbm5pbmcoKQogewotICAgIF9fYmxvY2sg
UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBwcm90ZWN0KHRoaXMp
OwotICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAobV92aWRlb0VsZW1lbnQpCi0gICAg
ICAgICAgICBtX3ZpZGVvRWxlbWVudC0+ZW5kU2Nhbm5pbmcoKTsKLSAgICAgICAgcHJvdGVjdC5j
bGVhcigpOwotICAgIH0pOworICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKKyAgICAgICAgbV92aWRl
b0VsZW1lbnQtPmVuZFNjYW5uaW5nKCk7CiB9CiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ6OnJlcXVlc3RFeGl0RnVsbHNjcmVlbigpCiB7Ci0gICAgaWYgKCFtX3Zp
ZGVvRWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7Ci0gICAgV2ViVGhy
ZWFkUnVuKF57Ci0gICAgICAgIGlmIChtX3ZpZGVvRWxlbWVudCAmJiBtX3ZpZGVvRWxlbWVudC0+
aXNGdWxsc2NyZWVuKCkpCi0gICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+ZXhpdEZ1bGxzY3Jl
ZW4oKTsKLSAgICAgICAgcHJvdGVjdC5jbGVhcigpOwotICAgIH0pOworICAgIGlmIChtX3ZpZGVv
RWxlbWVudCAmJiBtX3ZpZGVvRWxlbWVudC0+aXNGdWxsc2NyZWVuKCkpCisgICAgICAgIG1fdmlk
ZW9FbGVtZW50LT5leGl0RnVsbHNjcmVlbigpOwogfQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0xheWVyRnJhbWUoRmxvYXRSZWN0IHJlY3QpCkBA
IC00NTQsMTIgKzQwMyw4IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQ6OmV2ZW50TmFtZUFsbCgpCiAKIHZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChIVE1MTWVkaWFFbGVt
ZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVlbk1vZGUpCiB7Ci0gICAgX19i
bG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3Qo
dGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIGlmIChtX3ZpZGVvRWxlbWVudCkK
LSAgICAgICAgICAgIG1fdmlkZW9FbGVtZW50LT5mdWxsc2NyZWVuTW9kZUNoYW5nZWQodmlkZW9G
dWxsc2NyZWVuTW9kZSk7Ci0gICAgICAgIHByb3RlY3QuY2xlYXIoKTsKLSAgICB9KTsKKyAgICBp
ZiAobV92aWRlb0VsZW1lbnQpCisgICAgICAgIG1fdmlkZW9FbGVtZW50LT5mdWxsc2NyZWVuTW9k
ZUNoYW5nZWQodmlkZW9GdWxsc2NyZWVuTW9kZSk7CiB9CiAKICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253250</attachid>
            <date>2015-05-15 17:52:16 -0700</date>
            <delta_ts>2015-05-21 18:16:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143954-20150515175051.patch</filename>
            <type>text/plain</type>
            <size>63473</size>
            <attacher name="Jeremy Jones">jeremyj-wk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg0NDE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmUzY2Q3YmJlMDVjYTVi
NjJjMzRiODAxZjU0NDQwNWIxNDViOGUzMS4uZGVhNTgzNDJhNjE0YWYyMmU2MDlmMzNmYTdhNjkz
MmI0YTcwZjlhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExOSBAQAorMjAxNS0wNC0yMCAgSmVy
ZW15IEpvbmVzICA8amVyZW15akBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgV2ViS2l0
MSBzcGVjaWZpYyB0aHJlYWRpbmcgY29kZSBvdXQgb2YgV2ViVmlkZW9GdWxsc2NyZWVuIGNvZGUg
dGhhdCBpcyBzaGFyZWQgd2l0aCBXZWJLaXQyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQzOTU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQgaXMg
dXNlZCBpbiBib3RoIFdlYktpdDEgYW5kIFdlYktpdDIuIEluIFdlYktpdDEsIHRoZSBtb2RlbCBy
dW5zIGluIHRoZSBXZWJUaHJlYWQsIHdoaWxlCisgICAgICAgIHRoZSBpbnRlcmZhY2UgaXMgb24g
dGhlIG1haW4gdGhyZWFkLiBTbyB0aGVyZSBpcyBjb2RlIHRvIGRpc3BhdGNoIGJldHdlZW4gdGhl
c2UgdHdvIHRocmVhZCB3aGVuIGNvbW11bmljYXRpbmcgYmV0d2VlbiB0aGUKKyAgICAgICAgaW50
ZXJmYWNlIGFuZCB0aGUgbW9kZWwuIEluIFdlYktpdDIsIHRoaXMgaXMgaGFuZGxlZCBhdXRvbWF0
aWNhbGx5IGJ5IHRoZSBJUEMgbWVjaGFuaXNtLiBBcyBhIHJlc3VsdCwgdGhlIHRocmVhZGluZyBj
b2RlCisgICAgICAgIGluIFdlYlZpZGVvRnVsbHNjcmVlbmJJbnRlcmZhY2VBVktpdCBhbmQgaW4g
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQgaXMgcmVkdW5kYW50IGluIFdlYktp
dDIgYW5kIHJlbGllcyBvbgorICAgICAgICBXZWJUaHJlYWRSdW4gYmVpbmcgYSBuby1vcCBpbiBX
ZWJLaXQyLgorCisgICAgICAgIFRoaXMgY2hhbmdlIGNsYXJpZmllcyB0aGlzIGFuZCBzaW1wbGlm
aWVzIHRoZSBXZWJLaXQyIHBhdGggYnkgbW92aW5nIHRoZSBXZWJLaXQxIHNwZWNpZmljIHRocmVh
ZGluZyBjb2RlIGludG8KKyAgICAgICAgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQsIHdoaWNoIGlzIHRoZSBXZWJLaXQxIHNwZWNpZmljIGNvbnRyb2xsZXIuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tOgorICAg
ICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OldlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0KToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0OjpzZXRDb250cm9sbGVyKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpkaWRTZXR1cEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZEV4aXRGdWxsc2NyZWVuKToKKyAgICAg
ICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpkaWRDbGVhbnVwRnVsbHNj
cmVlbik6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZnVs
bHNjcmVlbk1heVJldHVyblRvSW5saW5lKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpyZXNldE1lZGlhU3RhdGUpOgorICAgICAgICAoV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldER1cmF0aW9uKToKKyAgICAgICAgKFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRDdXJyZW50VGltZSk6CisgICAgICAgIChX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0QnVmZmVyZWRUaW1lKToKKyAg
ICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRSYXRlKToKKyAg
ICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRWaWRlb0RpbWVu
c2lvbnMpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNl
dFNlZWthYmxlUmFuZ2VzKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpzZXRDYW5QbGF5RmFzdFJldmVyc2UpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKToKKyAg
ICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRMZWdpYmxlTWVk
aWFTZWxlY3Rpb25PcHRpb25zKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OjpzZXRFeHRlcm5hbFBsYXliYWNrKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0OjpwbGF5KToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpwYXVzZSk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6dG9nZ2xlUGxheVN0YXRlKToKKyAgICAgICAgKFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpiZWdpblNjcnViYmluZyk6CisgICAgICAgIChXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZW5kU2NydWJiaW5nKToKKyAgICAgICAg
KFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWVrVG9UaW1lKToKKyAgICAg
ICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpmYXN0U2Vlayk6CisgICAg
ICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YmVnaW5TY2FubmluZ0Zv
cndhcmQpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmJl
Z2luU2Nhbm5pbmdCYWNrd2FyZCk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6ZW5kU2Nhbm5pbmcpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OnJlcXVlc3RFeGl0RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0VmlkZW9MYXllckZyYW1lKToKKyAgICAg
ICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRWaWRlb0xheWVyR3Jh
dml0eSk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vs
ZWN0QXVkaW9NZWRpYU9wdGlvbik6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKToKKyAgICAgICAgKFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQpOgorICAg
ICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldHVwRnVsbHNjcmVl
bik6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXhpdEZ1
bGxzY3JlZW4pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyIGluaXRdKToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlciBkZWFsbG9jXSk6CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXIgZW50ZXJGdWxsc2NyZWVuOm1vZGU6XSk6CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXIgZXhpdEZ1bGxzY3JlZW5dKToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlciByZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuXSk6CisgICAgICAgICgt
W1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIgZGlkRmluaXNoRnVsbHNjcmVlbjpdKToKKyAg
ICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDaGFuZ2VPYnNlcnZlcjo6c2V0VGFy
Z2V0KTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBk
aWRTZXR1cEZ1bGxzY3JlZW5dKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlciBkaWRFbnRlckZ1bGxzY3JlZW5dKTogRGVsZXRlZC4KKyAgICAgICAgKC1b
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBkaWRFeGl0RnVsbHNjcmVlbl0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIGRpZENsZWFudXBGdWxs
c2NyZWVuXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXIgZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lXSk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lmg6CisgICAgICAgICog
cGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tOgorICAgICAg
ICAoLVtXZWJBVlZpZGVvTGF5ZXIgc2V0Qm91bmRzOl0pOgorICAgICAgICAoLVtXZWJBVlZpZGVv
TGF5ZXIgcmVzb2x2ZUJvdW5kc10pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OnJlc2V0TWVkaWFTdGF0ZSk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6c2V0RHVyYXRpb24pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OnNldEN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjpzZXRCdWZmZXJlZFRpbWUpOgorICAgICAgICAoV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFJhdGUpOgorICAgICAgICAoV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFZpZGVvRGltZW5zaW9ucyk6CisgICAgICAgIChXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0U2Vla2FibGVSYW5nZXMpOgorICAgICAg
ICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldENhblBsYXlGYXN0UmV2ZXJz
ZSk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0QXVkaW9N
ZWRpYVNlbGVjdGlvbk9wdGlvbnMpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OnNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMpOgorICAgICAgICAoV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldEV4dGVybmFsUGxheWJhY2spOgorICAg
ICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldHVwRnVsbHNjcmVlbik6
CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2Ny
ZWVuKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1
bGxzY3JlZW5TdGFuZGFyZCk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6ZXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OmV4aXRGdWxsc2NyZWVuSW50ZXJuYWwpOgorICAgICAgICAoV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmNsZWFudXBGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpjbGVhbnVwRnVsbHNjcmVlbkludGVybmFsKToK
KyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpyZXF1ZXN0SGlkZUFu
ZEV4aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OndpbGxTdGFydE9wdGltaXplZEZ1bGxzY3JlZW4pOgorICAgICAg
ICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZFN0YXJ0T3B0aW1pemVkRnVs
bHNjcmVlbik6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2ls
bFN0b3BPcHRpbWl6ZWRGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpkaWRTdG9wT3B0aW1pemVkRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2lsbENhbmNlbE9wdGltaXplZEZ1bGxzY3Jl
ZW4pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZENhbmNl
bE9wdGltaXplZEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OnNldFZpZGVvTGF5ZXJGcmFtZSk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdDo6c2V0dXBGdWxsc2NyZWVuSW50ZXJuYWwpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oOgorICAgICAgICAq
IHBsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5t
bToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRl
b0Z1bGxzY3JlZW5MYXllcik6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudDo6cGxheSk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudDo6cGF1c2UpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQ6OnRvZ2dsZVBsYXlTdGF0ZSk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZp
ZGVvRWxlbWVudDo6YmVnaW5TY3J1YmJpbmcpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQ6OmVuZFNjcnViYmluZyk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2Vla1RvVGltZSk6CisgICAgICAgIChXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6ZmFzdFNlZWspOgorICAgICAgICAoV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKToKKyAgICAg
ICAgKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpiZWdpblNjYW5uaW5nQmFj
a3dhcmQpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmVu
ZFNjYW5uaW5nKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
OjpyZXF1ZXN0RXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCk6CisgICAgICAgIChXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6dmlkZW9MYXllckZyYW1lKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojp2aWRlb0xheWVy
R3Jhdml0eSk6IERlbGV0ZWQuCisKIDIwMTUtMDUtMTUgIEJldGggRGFraW4gIDxiZGFraW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFByZWZpeCBmb3JjZSBvbiBNb3VzZUV2ZW50IGFuZCBhZGQgY29u
c3RhbnRzIGZvciBjbGljayBhbmQgZm9yY2UgY2xpY2sgdmFsdWVzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJBVktpdC5tbQppbmRleCA3YTUzNzM3NjI5MTkwZWQ0ZDcwYjY0MjFiMjk0ZjRmZjY1M2Zk
MTcyLi45OWRlNGFmOTg1ODllYjk0ZDUwNjg4MDQ4MzJiMzZjMjE3OGRkYWQwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckFWS2l0Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQVZLaXQubW0KQEAgLTMwLDYgKzMwLDcgQEAKICNpbXBvcnQgIldlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5oIgogCiAjaW1wb3J0ICJMb2dnaW5nLmgiCisj
aW1wb3J0ICJUaW1lUmFuZ2VzLmgiCiAjaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdC5oIgogI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQu
aCIKICNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29yZUFuaW1hdGlvbi5oPgpAQCAtNjcsMzIgKzY4LDQ2
OCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogI2Vsc2UKIAotQGludGVyZmFjZSBXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIChGdWxsc2NyZWVuT2JzZXJ2YXRpb24pCi0tICh2b2lk
KWRpZFNldHVwRnVsbHNjcmVlbjsKLS0gKHZvaWQpZGlkRW50ZXJGdWxsc2NyZWVuOwotLSAodm9p
ZClkaWRFeGl0RnVsbHNjcmVlbjsKLS0gKHZvaWQpZGlkQ2xlYW51cEZ1bGxzY3JlZW47Ci0tICh2
b2lkKWZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZTsKK2NsYXNzIFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OworCitAaW50ZXJmYWNlIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXIgKGRlbGVnYXRlKQorLSh2b2lkKWRpZEZpbmlzaEZ1bGxzY3JlZW46KFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0Kiljb250ZXh0OwogQGVuZAogCi1jbGFzcyBXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ2hhbmdlT2JzZXJ2ZXIgOiBwdWJsaWMgV2ViVmlkZW9GdWxs
c2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgewotICAgIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIq
IF90YXJnZXQ7CitjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dAorOiBw
dWJsaWMgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlCissIHB1YmxpYyBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbAorLCBwdWJsaWMgV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIKKywg
cHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0PiB7CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0PiBtX2ludGVyZmFjZTsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ+IG1fbW9kZWw7CisgICAgUmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+IG1f
dmlkZW9FbGVtZW50OworICAgIFJldGFpblB0cjxQbGF0Zm9ybUxheWVyPiBtX3ZpZGVvRnVsbHNj
cmVlbkxheWVyOworICAgIFJldGFpblB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyPiBt
X2NvbnRyb2xsZXI7CisgICAgRmxvYXRSZWN0IG1fZnJhbWU7CisgICAgVmlkZW9HcmF2aXR5IG1f
Z3Jhdml0eTsKKworICAgIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0KCkgeyB9
OworCiBwdWJsaWM6Ci0gICAgdm9pZCBzZXRUYXJnZXQoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlciogdGFyZ2V0KSB7IF90YXJnZXQgPSB0YXJnZXQ7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlk
U2V0dXBGdWxsc2NyZWVuKCkgb3ZlcnJpZGUgeyBbX3RhcmdldCBkaWRTZXR1cEZ1bGxzY3JlZW5d
OyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZEVudGVyRnVsbHNjcmVlbigpIG92ZXJyaWRlIHsgW190
YXJnZXQgZGlkRW50ZXJGdWxsc2NyZWVuXTsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRFeGl0RnVs
bHNjcmVlbigpIG92ZXJyaWRlIHsgW190YXJnZXQgZGlkRXhpdEZ1bGxzY3JlZW5dOyB9Ci0gICAg
dmlydHVhbCB2b2lkIGRpZENsZWFudXBGdWxsc2NyZWVuKCkgb3ZlcnJpZGUgeyBbX3RhcmdldCBk
aWRDbGVhbnVwRnVsbHNjcmVlbl07IH0KLSAgICB2aXJ0dWFsIHZvaWQgZnVsbHNjcmVlbk1heVJl
dHVyblRvSW5saW5lKCkgb3ZlcnJpZGUgeyBbX3RhcmdldCBmdWxsc2NyZWVuTWF5UmV0dXJuVG9J
bmxpbmVdOyB9CisgICAgc3RhdGljIFJlZjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0KCkpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IHNldENvbnRyb2xsZXIoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciogY29udHJvbGxlcikg
eyBtX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOyB9CisgICAgCisgICAgLy8gV2ViVmlkZW9GdWxs
c2NyZWVuQ2hhbmdlT2JzZXJ2ZXIKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU2V0dXBGdWxsc2NyZWVu
KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZEVudGVyRnVsbHNjcmVlbigpIG92ZXJy
aWRlIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRFeGl0RnVsbHNjcmVlbigpIG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgdm9pZCBkaWRDbGVhbnVwRnVsbHNjcmVlbigpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKSBvdmVycmlkZTsKKyAgICAK
KyAgICAvLyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UKKyAgICB2aXJ0dWFsIHZvaWQgcmVz
ZXRNZWRpYVN0YXRlKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldER1cmF0aW9uKGRv
dWJsZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldEN1cnJlbnRUaW1lKGRvdWJsZSBj
dXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRCdWZmZXJlZFRpbWUoZG91YmxlKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
UmF0ZShib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0VmlkZW9EaW1lbnNpb25zKGJvb2wgaGFzVmlkZW8sIGZsb2F0IHdpZHRo
LCBmbG9hdCBoZWlnaHQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRTZWVrYWJsZVJh
bmdlcyhjb25zdCBUaW1lUmFuZ2VzJikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldENh
blBsYXlGYXN0UmV2ZXJzZShib29sKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QXVk
aW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPFdURjo6U3RyaW5nPiYgb3B0aW9u
cywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNl
dExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPFdURjo6U3RyaW5nPiYg
b3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIHNldEV4dGVybmFsUGxheWJhY2soYm9vbCBlbmFibGVkLCBFeHRlcm5hbFBsYXliYWNrVGFy
Z2V0VHlwZSwgV1RGOjpTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSkgb3ZlcnJpZGU7CisgICAg
CisgICAgLy8gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwKKyAgICB2aXJ0dWFsIHZvaWQgcGxheSgp
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBwYXVzZSgpIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgdm9pZCB0b2dnbGVQbGF5U3RhdGUoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYmVn
aW5TY3J1YmJpbmcoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kU2NydWJiaW5nKCkg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNlZWtUb1RpbWUoZG91YmxlIHRpbWUpIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgdm9pZCBmYXN0U2Vlayhkb3VibGUgdGltZSkgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIGJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB2b2lkIGJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
dm9pZCBlbmRTY2FubmluZygpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RXhp
dEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlkZW9MYXllckZy
YW1lKEZsb2F0UmVjdCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBGbG9hdFJlY3QgdmlkZW9MYXll
ckZyYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9mcmFtZTsgfQorICAgIHZpcnR1YWwg
dm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0eShXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9H
cmF2aXR5KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFZpZGVvR3Jhdml0eSB2aWRlb0xheWVyR3Jh
dml0eSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZ3Jhdml0eTsgfQorICAgIHZpcnR1YWwg
dm9pZCBzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKEhUTUxNZWRp
YUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUpIG92ZXJyaWRlOworICAgIAorICAgIC8vIE90
aGVyCisgICAgdm9pZCBzZXR1cEZ1bGxzY3JlZW4oSFRNTFZpZGVvRWxlbWVudCosIFVJVmlldyAq
LCBIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKTsKKyAgICB2b2lkIGV4aXRG
dWxsc2NyZWVuKCk7CisgICAgdm9pZCByZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCk7Cisg
ICAgdm9pZCBpbnZhbGlkYXRlKCk7CiB9OwogCi1AaW1wbGVtZW50YXRpb24gV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlcgorI3ByYWdtYSBtYXJrIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9i
c2VydmVyCisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZFNl
dHVwRnVsbHNjcmVlbigpCiB7CisgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CisgICAgUmVmUHRy
PFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBzdHJvbmdUaGlzKHRoaXMpOwor
ICAgIFdlYlRocmVhZFJ1bihbc3Ryb25nVGhpcywgdGhpc10geworICAgICAgICBtX21vZGVsLT5z
ZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihtX3ZpZGVvRnVsbHNjcmVlbkxheWVyLmdldCgpKTsKKyAg
ICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1Ro
aXMsIHRoaXNdIHsKKyAgICAgICAgICAgIG1faW50ZXJmYWNlLT5lbnRlckZ1bGxzY3JlZW4oKTsK
KyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OmRpZEV4aXRGdWxsc2NyZWVuKCkKK3sKKyAgICBBU1NFUlQoaXNVSVRocmVh
ZCgpKTsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0
cm9uZ1RoaXModGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzLCB0aGlzXSB7Cisg
ICAgICAgIG1fbW9kZWwtPnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKG5pbCk7CisgICAgICAgIGRp
c3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCB0aGlz
XSB7CisgICAgICAgICAgICBtX2ludGVyZmFjZS0+Y2xlYW51cEZ1bGxzY3JlZW4oKTsKKyAgICAg
ICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ6OmRpZENsZWFudXBGdWxsc2NyZWVuKCkKK3sKKyAgICBBU1NFUlQoaXNVSVRocmVhZCgp
KTsKKyAgICBtX2ludGVyZmFjZS0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwobnVsbHB0cik7
CisgICAgbV9pbnRlcmZhY2UtPnNldFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKG51
bGxwdHIpOworICAgIG1faW50ZXJmYWNlID0gbnVsbHB0cjsKKyAgICAKKyAgICBSZWZQdHI8V2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7CisgICAg
V2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzLCB0aGlzXSB7CisgICAgICAgIG1fbW9kZWwtPnNldFZp
ZGVvRnVsbHNjcmVlbkxheWVyKG5pbCk7CisgICAgICAgIG1fbW9kZWwtPnNldFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZShudWxscHRyKTsKKyAgICAgICAgbV9tb2RlbC0+c2V0VmlkZW9FbGVt
ZW50KG51bGxwdHIpOworICAgICAgICBtX21vZGVsID0gbnVsbHB0cjsKKyAgICAgICAgbV92aWRl
b0VsZW1lbnQgPSBudWxscHRyOworICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkxheWVyID0gbmls
OworICAgICAgICAKKyAgICAgICAgW21fY29udHJvbGxlciBkaWRGaW5pc2hGdWxsc2NyZWVuOnRo
aXNdOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKQoreworICAgIEFTU0VSVChpc1VJVGhy
ZWFkKCkpOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4g
c3Ryb25nVGhpcyh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oW3N0cm9uZ1RoaXMsIHRoaXNdIHsK
KyAgICAgICAgSW50UmVjdCBjbGllbnRSZWN0ID0gbV92aWRlb0VsZW1lbnQtPmNsaWVudFJlY3Qo
KTsKKyAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0
cm9uZ1RoaXMsIHRoaXMsIGNsaWVudFJlY3RdIHsKKyAgICAgICAgICAgIG1faW50ZXJmYWNlLT5w
cmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUodHJ1ZSwgY2xpZW50UmVjdCk7CisgICAgICAgIH0pOwor
ICAgIH0pOworfQorCisjcHJhZ21hIG1hcmsgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlCisK
K3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJlc2V0TWVkaWFTdGF0
ZSgpCit7CisgICAgQVNTRVJUKFdlYlRocmVhZElzQ3VycmVudCgpIHx8IGlzTWFpblRocmVhZCgp
KTsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0cm9u
Z1RoaXModGhpcyk7CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUo
KSwgW3N0cm9uZ1RoaXMsIHRoaXNdIHsKKyAgICAgICAgaWYgKG1faW50ZXJmYWNlKQorICAgICAg
ICAgICAgbV9pbnRlcmZhY2UtPnJlc2V0TWVkaWFTdGF0ZSgpOworICAgIH0pOworfQorCit2b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXREdXJhdGlvbihkb3VibGUg
ZHVyYXRpb24pCit7CisgICAgQVNTRVJUKFdlYlRocmVhZElzQ3VycmVudCgpKTsKKyAgICBSZWZQ
dHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7
CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1Ro
aXMsIHRoaXMsIGR1cmF0aW9uXSB7CisgICAgICAgIGlmIChtX2ludGVyZmFjZSkKKyAgICAgICAg
ICAgIG1faW50ZXJmYWNlLT5zZXREdXJhdGlvbihkdXJhdGlvbik7CisgICAgfSk7Cit9CisKK3Zv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldEN1cnJlbnRUaW1lKGRv
dWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpCit7CisgICAgQVNTRVJUKFdlYlRo
cmVhZElzQ3VycmVudCgpKTsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hf
Z2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMsIHRoaXMsIGN1cnJlbnRUaW1lLCBhbmNob3JU
aW1lXSB7CisgICAgICAgIGlmIChtX2ludGVyZmFjZSkKKyAgICAgICAgICAgIG1faW50ZXJmYWNl
LT5zZXRDdXJyZW50VGltZShjdXJyZW50VGltZSwgYW5jaG9yVGltZSk7CisgICAgfSk7Cit9CisK
K3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldEJ1ZmZlcmVkVGlt
ZShkb3VibGUgYnVmZmVyZWRUaW1lKQoreworICAgIEFTU0VSVChXZWJUaHJlYWRJc0N1cnJlbnQo
KSk7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBzdHJv
bmdUaGlzKHRoaXMpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVl
KCksIFtzdHJvbmdUaGlzLCB0aGlzLCBidWZmZXJlZFRpbWVdIHsKKyAgICAgICAgaWYgKG1faW50
ZXJmYWNlKQorICAgICAgICAgICAgbV9pbnRlcmZhY2UtPnNldEJ1ZmZlcmVkVGltZShidWZmZXJl
ZFRpbWUpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpzZXRSYXRlKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpCit7Cisg
ICAgQVNTRVJUKFdlYlRocmVhZElzQ3VycmVudCgpKTsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7CisgICAgZGlzcGF0Y2hf
YXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMsIHRoaXMsIGlzUGxh
eWluZywgcGxheWJhY2tSYXRlXSB7CisgICAgICAgIGlmIChtX2ludGVyZmFjZSkKKyAgICAgICAg
ICAgIG1faW50ZXJmYWNlLT5zZXRSYXRlKGlzUGxheWluZywgcGxheWJhY2tSYXRlKTsKKyAgICB9
KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0Vmlk
ZW9EaW1lbnNpb25zKGJvb2wgaGFzVmlkZW8sIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpCit7
CisgICAgQVNTRVJUKFdlYlRocmVhZElzQ3VycmVudCgpKTsKKyAgICBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7CisgICAgZGlzcGF0
Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMsIHRoaXMsIGhh
c1ZpZGVvLCB3aWR0aCwgaGVpZ2h0XSB7CisgICAgICAgIGlmIChtX2ludGVyZmFjZSkKKyAgICAg
ICAgICAgIG1faW50ZXJmYWNlLT5zZXRWaWRlb0RpbWVuc2lvbnMoaGFzVmlkZW8sIHdpZHRoLCBo
ZWlnaHQpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpzZXRTZWVrYWJsZVJhbmdlcyhjb25zdCBUaW1lUmFuZ2VzJiB0aW1lUmFuZ2VzKQor
eworICAgIEFTU0VSVChXZWJUaHJlYWRJc0N1cnJlbnQoKSk7CisgICAgUmVmUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBzdHJvbmdUaGlzKHRoaXMpOworICAgIFJlZlB0
cjxUaW1lUmFuZ2VzPiB0aW1lUmFuZ2VzUmVmID0gdGltZVJhbmdlcy5jb3B5KCk7CisgICAgZGlz
cGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMsIHRoaXMs
IHRpbWVSYW5nZXNSZWZdIHsKKyAgICAgICAgaWYgKG1faW50ZXJmYWNlKQorICAgICAgICAgICAg
bV9pbnRlcmZhY2UtPnNldFNlZWthYmxlUmFuZ2VzKCp0aW1lUmFuZ2VzUmVmLmdldCgpKTsKKyAg
ICB9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0
Q2FuUGxheUZhc3RSZXZlcnNlKGJvb2wgY2FuUGxheUZhc3RSZXZlcnNlKQoreworICAgIEFTU0VS
VChXZWJUaHJlYWRJc0N1cnJlbnQoKSk7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0PiBzdHJvbmdUaGlzKHRoaXMpOworICAgIGRpc3BhdGNoX2FzeW5jKGRp
c3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCB0aGlzLCBjYW5QbGF5RmFzdFJl
dmVyc2VdIHsKKyAgICAgICAgaWYgKG1faW50ZXJmYWNlKQorICAgICAgICAgICAgbV9pbnRlcmZh
Y2UtPnNldENhblBsYXlGYXN0UmV2ZXJzZShjYW5QbGF5RmFzdFJldmVyc2UpOworICAgIH0pOwor
fQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRBdWRpb01l
ZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25zdCBWZWN0b3I8V1RGOjpTdHJpbmc+JiBvcHRpb25zLCB1
aW50NjRfdCBzZWxlY3RlZEluZGV4KQoreworICAgIEFTU0VSVChXZWJUaHJlYWRJc0N1cnJlbnQo
KSk7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBzdHJv
bmdUaGlzKHRoaXMpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVl
KCksIFtzdHJvbmdUaGlzLCB0aGlzLCBvcHRpb25zLCBzZWxlY3RlZEluZGV4XSB7CisgICAgICAg
IGlmIChtX2ludGVyZmFjZSkKKyAgICAgICAgICAgIG1faW50ZXJmYWNlLT5zZXRBdWRpb01lZGlh
U2VsZWN0aW9uT3B0aW9ucyhvcHRpb25zLCBzZWxlY3RlZEluZGV4KTsKKyAgICB9KTsKK30KKwor
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0TGVnaWJsZU1lZGlh
U2VsZWN0aW9uT3B0aW9ucyhjb25zdCBWZWN0b3I8V1RGOjpTdHJpbmc+JiBvcHRpb25zLCB1aW50
NjRfdCBzZWxlY3RlZEluZGV4KQoreworICAgIEFTU0VSVChXZWJUaHJlYWRJc0N1cnJlbnQoKSk7
CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBzdHJvbmdU
aGlzKHRoaXMpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCks
IFtzdHJvbmdUaGlzLCB0aGlzLCBvcHRpb25zLCBzZWxlY3RlZEluZGV4XSB7CisgICAgICAgIGlm
IChtX2ludGVyZmFjZSkKKyAgICAgICAgICAgIG1faW50ZXJmYWNlLT5zZXRMZWdpYmxlTWVkaWFT
ZWxlY3Rpb25PcHRpb25zKG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpOworICAgIH0pOworfQorCit2
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRFeHRlcm5hbFBsYXli
YWNrKGJvb2wgZW5hYmxlZCwgRXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdHlwZSwgV1RGOjpT
dHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSkKK3sKKyAgICBBU1NFUlQoV2ViVGhyZWFkSXNDdXJy
ZW50KCkpOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4g
c3Ryb25nVGhpcyh0aGlzKTsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9x
dWV1ZSgpLCBbc3Ryb25nVGhpcywgdGhpcywgZW5hYmxlZCwgdHlwZSwgbG9jYWxpemVkRGV2aWNl
TmFtZV0geworICAgICAgICBpZiAobV9pbnRlcmZhY2UpCisgICAgICAgICAgICBtX2ludGVyZmFj
ZS0+c2V0RXh0ZXJuYWxQbGF5YmFjayhlbmFibGVkLCB0eXBlLCBsb2NhbGl6ZWREZXZpY2VOYW1l
KTsKKyAgICB9KTsKK30KKworI3ByYWdtYSBtYXJrIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsCisK
K3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnBsYXkoKQoreworICAg
IEFTU0VSVChpc1VJVGhyZWFkKCkpOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oW3N0cm9u
Z1RoaXMsIHRoaXNdIHsKKyAgICAgICAgaWYgKG1fbW9kZWwpCisgICAgICAgICAgICBtX21vZGVs
LT5wbGF5KCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OnBhdXNlKCkKK3sKKyAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKKyAgICBSZWZQ
dHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7
CisgICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzLCB0aGlzXSB7CisgICAgICAgIGlmIChtX21v
ZGVsKQorICAgICAgICAgICAgbV9tb2RlbC0+cGF1c2UoKTsKKyAgICB9KTsKK30KKwordm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6dG9nZ2xlUGxheVN0YXRlKCkKK3sK
KyAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKFtz
dHJvbmdUaGlzLCB0aGlzXSB7CisgICAgICAgIGlmIChtX21vZGVsKQorICAgICAgICAgICAgbV9t
b2RlbC0+dG9nZ2xlUGxheVN0YXRlKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmJlZ2luU2NydWJiaW5nKCkKK3sKKyAgICBBU1NFUlQo
aXNVSVRocmVhZCgpKTsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzLCB0
aGlzXSB7CisgICAgICAgIGlmIChtX21vZGVsKQorICAgICAgICAgICAgbV9tb2RlbC0+YmVnaW5T
Y3J1YmJpbmcoKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6ZW5kU2NydWJiaW5nKCkKK3sKKyAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsK
KyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0cm9uZ1Ro
aXModGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzLCB0aGlzXSB7CisgICAgICAg
IGlmIChtX21vZGVsKQorICAgICAgICAgICAgbV9tb2RlbC0+ZW5kU2NydWJiaW5nKCk7CisgICAg
fSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNlZWtU
b1RpbWUoZG91YmxlIHRpbWUpCit7CisgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CisgICAgUmVm
UHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBzdHJvbmdUaGlzKHRoaXMp
OworICAgIFdlYlRocmVhZFJ1bihbc3Ryb25nVGhpcywgdGhpcywgdGltZV0geworICAgICAgICBp
ZiAobV9tb2RlbCkKKyAgICAgICAgICAgIG1fbW9kZWwtPnNlZWtUb1RpbWUodGltZSk7CisgICAg
fSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmZhc3RT
ZWVrKGRvdWJsZSB0aW1lKQoreworICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOworICAgIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsK
KyAgICBXZWJUaHJlYWRSdW4oW3N0cm9uZ1RoaXMsIHRoaXMsIHRpbWVdIHsKKyAgICAgICAgaWYg
KG1fbW9kZWwpCisgICAgICAgICAgICBtX21vZGVsLT5mYXN0U2Vlayh0aW1lKTsKKyAgICB9KTsK
K30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YmVnaW5TY2Fu
bmluZ0ZvcndhcmQoKQoreworICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOworICAgIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAg
ICBXZWJUaHJlYWRSdW4oW3N0cm9uZ1RoaXMsIHRoaXNdIHsKKyAgICAgICAgaWYgKG1fbW9kZWwp
CisgICAgICAgICAgICBtX21vZGVsLT5iZWdpblNjYW5uaW5nRm9yd2FyZCgpOworICAgIH0pOwor
fQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpiZWdpblNjYW5u
aW5nQmFja3dhcmQoKQoreworICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOworICAgIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAg
ICBXZWJUaHJlYWRSdW4oW3N0cm9uZ1RoaXMsIHRoaXNdIHsKKyAgICAgICAgaWYgKG1fbW9kZWwp
CisgICAgICAgICAgICBtX21vZGVsLT5iZWdpblNjYW5uaW5nQmFja3dhcmQoKTsKKyAgICB9KTsK
K30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZW5kU2Nhbm5p
bmcoKQoreworICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBXZWJUaHJl
YWRSdW4oW3N0cm9uZ1RoaXMsIHRoaXNdIHsKKyAgICAgICAgaWYgKG1fbW9kZWwpCisgICAgICAg
ICAgICBtX21vZGVsLT5lbmRTY2FubmluZygpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZXF1ZXN0RXhpdEZ1bGxzY3JlZW4oKQorewor
ICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oW3N0
cm9uZ1RoaXMsIHRoaXNdIHsKKyAgICAgICAgaWYgKG1fbW9kZWwpCisgICAgICAgICAgICBtX21v
ZGVsLT5yZXF1ZXN0RXhpdEZ1bGxzY3JlZW4oKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0VmlkZW9MYXllckZyYW1lKEZsb2F0UmVj
dCBmcmFtZSkKK3sKKyAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKKyAgICBtX2ZyYW1lID0gZnJh
bWU7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBzdHJv
bmdUaGlzKHRoaXMpOworICAgIFdlYlRocmVhZFJ1bihbc3Ryb25nVGhpcywgdGhpcywgZnJhbWVd
IHsKKyAgICAgICAgaWYgKG1fbW9kZWwpCisgICAgICAgICAgICBtX21vZGVsLT5zZXRWaWRlb0xh
eWVyRnJhbWUoZnJhbWUpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpzZXRWaWRlb0xheWVyR3Jhdml0eShXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbDo6VmlkZW9HcmF2aXR5IHZpZGVvR3Jhdml0eSkKK3sKKyAgICBBU1NFUlQoaXNVSVRocmVh
ZCgpKTsKKyAgICBtX2dyYXZpdHkgPSB2aWRlb0dyYXZpdHk7CisgICAgUmVmUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBzdHJvbmdUaGlzKHRoaXMpOworICAgIFdlYlRo
cmVhZFJ1bihbc3Ryb25nVGhpcywgdGhpcywgdmlkZW9HcmF2aXR5XSB7CisgICAgICAgIGlmICht
X21vZGVsKQorICAgICAgICAgICAgbV9tb2RlbC0+c2V0VmlkZW9MYXllckdyYXZpdHkodmlkZW9H
cmF2aXR5KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkKK3sKKyAgICBB
U1NFUlQoaXNVSVRocmVhZCgpKTsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdU
aGlzLCB0aGlzLCBpbmRleF0geworICAgICAgICBpZiAobV9tb2RlbCkKKyAgICAgICAgICAgIG1f
bW9kZWwtPnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24oaW5kZXgpOworICAgIH0pOworfQorCit2b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWxlY3RMZWdpYmxlTWVkaWFP
cHRpb24odWludDY0X3QgaW5kZXgpCit7CisgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CisgICAg
UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBzdHJvbmdUaGlzKHRo
aXMpOworICAgIFdlYlRocmVhZFJ1bihbc3Ryb25nVGhpcywgdGhpcywgaW5kZXhdIHsKKyAgICAg
ICAgaWYgKG1fbW9kZWwpCisgICAgICAgICAgICBtX21vZGVsLT5zZWxlY3RMZWdpYmxlTWVkaWFP
cHRpb24oaW5kZXgpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0OjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQoSFRNTE1lZGlhRWxlbWVudDo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQoreworICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOworICAg
IFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0
aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oW3N0cm9uZ1RoaXMsIHRoaXMsIG1vZGVdIHsKKyAgICAg
ICAgaWYgKG1fbW9kZWwpCisgICAgICAgICAgICBtX21vZGVsLT5mdWxsc2NyZWVuTW9kZUNoYW5n
ZWQobW9kZSk7CisgICAgfSk7Cit9CisKKyNwcmFnbWEgbWFyayBPdGhlcgorCit2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXR1cEZ1bGxzY3JlZW4oSFRNTFZpZGVv
RWxlbWVudCogdmlkZW9FbGVtZW50LCBVSVZpZXcgKnZpZXcsIEhUTUxNZWRpYUVsZW1lbnQ6OlZp
ZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgIFJldGFpblB0cjxVSVZpZXc+IHZpZXdSZWYgPSB2aWV3OworICAgIG1fdmlkZW9FbGVtZW50
ID0gdmlkZW9FbGVtZW50OworCisgICAgbV9pbnRlcmZhY2UgPSBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6Y3JlYXRlKCk7CisgICAgbV9pbnRlcmZhY2UtPnNldFdlYlZpZGVvRnVs
bHNjcmVlbkNoYW5nZU9ic2VydmVyKHRoaXMpOworICAgIG1faW50ZXJmYWNlLT5zZXRXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbCh0aGlzKTsKKyAgICAKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7CisgICAgV2ViVGhyZWFkUnVu
KFtzdHJvbmdUaGlzLCB0aGlzLCB2aWV3UmVmLCBtb2RlXSB7CisgICAgICAgIG1fbW9kZWwgPSBX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6Y3JlYXRlKCk7CisgICAgICAgIG1f
bW9kZWwtPnNldFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSh0aGlzKTsKKyAgICAgICAgbV9t
b2RlbC0+c2V0VmlkZW9FbGVtZW50KG1fdmlkZW9FbGVtZW50LmdldCgpKTsKKyAgICAgICAgbV92
aWRlb0Z1bGxzY3JlZW5MYXllciA9IFtDQUxheWVyIGxheWVyXTsKKyAgICAgICAgCisgICAgICAg
IGJvb2wgYWxsb3dzQWx0ZXJuYXRlRnVsbHNjcmVlbiA9IG1fdmlkZW9FbGVtZW50LT5tZWRpYVNl
c3Npb24oKS5hbGxvd3NBbHRlcm5hdGVGdWxsc2NyZWVuKCptX3ZpZGVvRWxlbWVudC5nZXQoKSk7
CisgICAgICAgIEludFJlY3QgdmlkZW9FbGVtZW50Q2xpZW50UmVjdCA9IG1fdmlkZW9FbGVtZW50
LT5jbGllbnRSZWN0KCk7CisgICAgICAgIAorICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7CisgICAgICAgIGRpc3BhdGNo
X2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCB0aGlzLCB2aWRl
b0VsZW1lbnRDbGllbnRSZWN0LCB2aWV3UmVmLCBtb2RlLCBhbGxvd3NBbHRlcm5hdGVGdWxsc2Ny
ZWVuXSB7CisgICAgICAgICAgICBtX2ludGVyZmFjZS0+c2V0dXBGdWxsc2NyZWVuKCptX3ZpZGVv
RnVsbHNjcmVlbkxheWVyLmdldCgpLCB2aWRlb0VsZW1lbnRDbGllbnRSZWN0LCB2aWV3UmVmLmdl
dCgpLCBtb2RlLCBhbGxvd3NBbHRlcm5hdGVGdWxsc2NyZWVuKTsKKyAgICAgICAgfSk7CisgICAg
fSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmV4aXRG
dWxsc2NyZWVuKCkKK3sKKyAgICBBU1NFUlQoV2ViVGhyZWFkSXNDdXJyZW50KCkpOworICAgIElu
dFJlY3Qgc2NyZWVuUmVjdCA9IG1fdmlkZW9FbGVtZW50LT5zY3JlZW5SZWN0KCk7CisgICAgUmVm
UHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBzdHJvbmdUaGlzKHRoaXMp
OworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdU
aGlzLCB0aGlzLCBzY3JlZW5SZWN0XSB7CisgICAgICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwor
ICAgICAgICBtX2ludGVyZmFjZS0+ZXhpdEZ1bGxzY3JlZW4oc2NyZWVuUmVjdCk7CisgICAgfSk7
Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJlcXVlc3RI
aWRlQW5kRXhpdEZ1bGxzY3JlZW4oKQoreworICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOworICAg
IG1faW50ZXJmYWNlLT5yZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCk7Cit9CisKK0BpbXBs
ZW1lbnRhdGlvbiBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIHsKKyAgICBSZWZQdHI8V2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IF9jb250ZXh0OwogICAgIFJlZlB0cjxI
VE1MVmlkZW9FbGVtZW50PiBfdmlkZW9FbGVtZW50OwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdD4gX2ludGVyZmFjZTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IF9tb2RlbDsKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ2hhbmdlT2JzZXJ2ZXIgX2NoYW5nZU9ic2VydmVyOwotICAgIFJldGFpblB0cjxQ
bGF0Zm9ybUxheWVyPiBfdmlkZW9GdWxsc2NyZWVuTGF5ZXI7CiB9CiAKIC0gKGluc3RhbmNldHlw
ZSlpbml0CkBAIC0xMDAsMTcgKzUzNyw5IEBAIHB1YmxpYzoKICAgICBpZiAoIShzZWxmID0gW3N1
cGVyIGluaXRdKSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKLSAgICBfY2hhbmdlT2JzZXJ2
ZXIuc2V0VGFyZ2V0KHNlbGYpOwotCiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKLS0gKHZvaWQpZGVh
bGxvYwotewotICAgIF92aWRlb0VsZW1lbnQgPSBudWxscHRyOwotICAgIFtzdXBlciBkZWFsbG9j
XTsKLX0KLQogLSAodm9pZClzZXRWaWRlb0VsZW1lbnQ6KEhUTUxWaWRlb0VsZW1lbnQqKXZpZGVv
RWxlbWVudAogewogICAgIF92aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7CkBAIC0xMjMsNjcg
KzU1MiwzMyBAQCBwdWJsaWM6CiAKIC0gKHZvaWQpZW50ZXJGdWxsc2NyZWVuOihVSVZpZXcgKil2
aWV3IG1vZGU6KEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUpbW9kZQogewot
ICAgIFtzZWxmIHJldGFpbl07IC8vIEJhbGFuY2VkIGJ5IC1yZWxlYXNlIGluIGRpZEV4aXRGdWxs
c2NyZWVuOgotICAgIAotICAgIF9pbnRlcmZhY2UgPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6Y3JlYXRlKCk7Ci0gICAgX2ludGVyZmFjZS0+c2V0V2ViVmlkZW9GdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXIoJl9jaGFuZ2VPYnNlcnZlcik7Ci0gICAgX21vZGVsID0gV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmNyZWF0ZSgpOwotICAgIF9tb2RlbC0+c2V0V2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKF9pbnRlcmZhY2UuZ2V0KCkpOwotICAgIF9pbnRlcmZh
Y2UtPnNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKF9tb2RlbC5nZXQoKSk7Ci0gICAgX21vZGVs
LT5zZXRWaWRlb0VsZW1lbnQoX3ZpZGVvRWxlbWVudC5nZXQoKSk7Ci0gICAgX3ZpZGVvRnVsbHNj
cmVlbkxheWVyID0gW0NBTGF5ZXIgbGF5ZXJdOwotICAgIF9pbnRlcmZhY2UtPnNldHVwRnVsbHNj
cmVlbigqX3ZpZGVvRnVsbHNjcmVlbkxheWVyLmdldCgpLCBfdmlkZW9FbGVtZW50LT5jbGllbnRS
ZWN0KCksIHZpZXcsIG1vZGUsIF92aWRlb0VsZW1lbnQtPm1lZGlhU2Vzc2lvbigpLmFsbG93c0Fs
dGVybmF0ZUZ1bGxzY3JlZW4oKl92aWRlb0VsZW1lbnQuZ2V0KCkpKTsKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworICAgIF9jb250ZXh0ID0gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OmNyZWF0ZSgpOworICAgIF9jb250ZXh0LT5zZXRDb250cm9sbGVyKHNlbGYpOwor
ICAgIF9jb250ZXh0LT5zZXR1cEZ1bGxzY3JlZW4oX3ZpZGVvRWxlbWVudC5nZXQoKSwgdmlldywg
bW9kZSk7CiB9CiAKIC0gKHZvaWQpZXhpdEZ1bGxzY3JlZW4KIHsKLSAgICBfaW50ZXJmYWNlLT5l
eGl0RnVsbHNjcmVlbihfdmlkZW9FbGVtZW50LT5zY3JlZW5SZWN0KCkpOworICAgIEFTU0VSVChX
ZWJUaHJlYWRJc0N1cnJlbnQoKSk7CisgICAgX2NvbnRleHQtPmV4aXRGdWxsc2NyZWVuKCk7CiB9
CiAKIC0gKHZvaWQpcmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbgogewotICAgIGlmIChfaW50
ZXJmYWNlKQotICAgICAgICBfaW50ZXJmYWNlLT5yZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVu
KCk7CisgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CisgICAgaWYgKF9jb250ZXh0KQorICAgICAg
ICBfY29udGV4dC0+cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpOwogfQogCi0tICh2b2lk
KWRpZFNldHVwRnVsbHNjcmVlbgorLSAodm9pZClkaWRGaW5pc2hGdWxsc2NyZWVuOihXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dCopY29udGV4dAogewotICAgIFdlYlRocmVhZFJ1
biheewotICAgICAgICBfbW9kZWwtPnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKF92aWRlb0Z1bGxz
Y3JlZW5MYXllci5nZXQoKSk7Ci0gICAgICAgIF9pbnRlcmZhY2UtPmVudGVyRnVsbHNjcmVlbigp
OwotICAgIH0pOwotfQotCi0tICh2b2lkKWRpZEVudGVyRnVsbHNjcmVlbgotewotfQotCi0tICh2
b2lkKWRpZEV4aXRGdWxsc2NyZWVuCi17Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIF9t
b2RlbC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIobmlsKTsKLSAgICAgICAgX2ludGVyZmFjZS0+
Y2xlYW51cEZ1bGxzY3JlZW4oKTsKLSAgICB9KTsKLX0KLQotLSAodm9pZClkaWRDbGVhbnVwRnVs
bHNjcmVlbgotewotICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBfbW9kZWwtPnNldFZpZGVv
RnVsbHNjcmVlbkxheWVyKG5pbCk7Ci0gICAgICAgIF9pbnRlcmZhY2UtPnNldFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsKG51bGxwdHIpOwotICAgICAgICBfbW9kZWwtPnNldFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZShudWxscHRyKTsKLSAgICAgICAgX21vZGVsLT5zZXRWaWRlb0VsZW1lbnQo
bnVsbHB0cik7Ci0gICAgICAgIF9pbnRlcmZhY2UtPnNldFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyKG51bGxwdHIpOwotICAgICAgICBfbW9kZWwgPSBudWxscHRyOwotICAgICAgICBf
aW50ZXJmYWNlID0gbnVsbHB0cjsKLSAgICAgICAgCi0gICAgICAgIFtzZWxmIHJlbGVhc2VdOyAv
LyBCYWxhbmNlIHRoZSAtcmV0YWluIHdlIGRpZCBpbiBlbnRlckZ1bGxzY3JlZW46Ci0gICAgfSk7
Ci19Ci0KLS0gKHZvaWQpZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lCi17Ci0gICAgX2ludGVy
ZmFjZS0+cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKHRydWUsIF92aWRlb0VsZW1lbnQtPmNsaWVu
dFJlY3QoKSk7CisgICAgQVNTRVJUKFdlYlRocmVhZElzQ3VycmVudCgpKTsKKyAgICBVTlVTRURf
UEFSQU0oY29udGV4dCk7CisgICAgW1tzZWxmIHJldGFpbl0gYXV0b3JlbGVhc2VdOyAvLyByZXRh
aW4gc2VsZiBiZWZvcmUgYnJlYWtpbmcgYSByZXRhaW4gY3ljbGUuCisgICAgX2NvbnRleHQtPnNl
dENvbnRyb2xsZXIobmlsKTsKKyAgICBfY29udGV4dCA9IG51bGxwdHI7CisgICAgX3ZpZGVvRWxl
bWVudCA9IG51bGxwdHI7CiB9CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgKaW5k
ZXggZjIwNjc4NGY0OWQ5YmQ3ODI3ZjQyM2YyZDIxY2IxNTU3OThiYmI1OC4uYWUxZjdkYWY4OWI2
YmJhM2NlMWNjYmMyN2E2MDgxMGFjNDczYWM4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
LmgKQEAgLTMzLDkgKzMzLDkgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0hUTUxNZWRpYUVsZW1lbnQu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtTGF5ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
LSNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAogT0JKQ19DTEFTUyBXZWJB
VlBsYXllckNvbnRyb2xsZXI7CiBPQkpDX0NMQVNTIEFWUGxheWVyVmlld0NvbnRyb2xsZXI7CkBA
IC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKIAogY2xhc3MgV0VCQ09SRV9FWFBPUlQgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQKICAgICA6IHB1YmxpYyBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2UKLSAgICAsIHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdD4geworICAgICwgcHVibGljIFJlZkNvdW50ZWQ8V2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHsKIAogcHVibGljOgogICAgIHN0YXRpYyBSZWY8V2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IGNyZWF0ZSgpCkBAIC0xMTksMTEgKzExOSw4
IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBXRUJDT1JFX0VYUE9SVCBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdCgpOwogICAgIHZvaWQgYmVnaW5TZXNzaW9uKCk7Ci0gICAgdm9p
ZCBzZXR1cEZ1bGxzY3JlZW5JbnRlcm5hbChQbGF0Zm9ybUxheWVyJiwgY29uc3QgSW50UmVjdCYg
aW5pdGlhbFJlY3QsIFVJVmlldyAqLCBIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5N
b2RlLCBib29sIGFsbG93T3B0aW1pemVkRnVsbHNjcmVlbik7CiAgICAgdm9pZCBlbnRlckZ1bGxz
Y3JlZW5PcHRpbWl6ZWQoKTsKICAgICB2b2lkIGVudGVyRnVsbHNjcmVlblN0YW5kYXJkKCk7Ci0g
ICAgdm9pZCBleGl0RnVsbHNjcmVlbkludGVybmFsKGNvbnN0IEludFJlY3QmIGZpbmFsUmVjdCk7
Ci0gICAgdm9pZCBjbGVhbnVwRnVsbHNjcmVlbkludGVybmFsKCk7CiAKICAgICBSZXRhaW5QdHI8
V2ViQVZQbGF5ZXJDb250cm9sbGVyPiBtX3BsYXllckNvbnRyb2xsZXI7CiAgICAgUmV0YWluUHRy
PEFWUGxheWVyVmlld0NvbnRyb2xsZXI+IG1fcGxheWVyVmlld0NvbnRyb2xsZXI7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQubW0KaW5kZXggNDZhMGY1MjYxYmQxNGI0OTU0MDEyNzY3ZTQ4MjBl
NDc3YTEyNWM2Zi4uZmYzYTQzMGEwMjIyMmE3NDc0MTE1ZDQ3ZDdjNDBkNzBmMDM0Y2MwNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbQpAQCAtMzYsNyArMzYsNiBAQAogI2ltcG9ydCAi
UnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLmgiCiAjaW1wb3J0ICJUaW1lUmFuZ2VzLmgiCiAj
aW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCi0jaW1wb3J0ICJXZWJDb3JlVGhyZWFk
UnVuLmgiCiAjaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgogI2ltcG9ydCA8QVZG
b3VuZGF0aW9uL0FWVGltZS5oPgogI2ltcG9ydCA8VUlLaXQvVUlLaXQuaD4KQEAgLTc0OSwxNyAr
NzQ4LDEzIEBAIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdCgpCiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OnJlc2V0TWVkaWFTdGF0ZSgpCiB7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOwotICAgIAotICAgIGRpc3BhdGNoX2Fz
eW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzXSB7Ci0gICAgICAgIGlm
ICghc3Ryb25nVGhpcy0+bV9wbGF5ZXJDb250cm9sbGVyKSB7Ci0gICAgICAgICAgICBzdHJvbmdU
aGlzLT5tX3BsYXllckNvbnRyb2xsZXIgPSBhZG9wdE5TKFtbV2ViQVZQbGF5ZXJDb250cm9sbGVy
IGFsbG9jXSBpbml0XSk7Ci0gICAgICAgICAgICBbc3Ryb25nVGhpcy0+bV9wbGF5ZXJDb250cm9s
bGVyIHNldERlbGVnYXRlOnN0cm9uZ1RoaXMtPm1fdmlkZW9GdWxsc2NyZWVuTW9kZWxdOwotICAg
ICAgICAgICAgW3N0cm9uZ1RoaXMtPm1fcGxheWVyQ29udHJvbGxlciBzZXRGdWxsc2NyZWVuSW50
ZXJmYWNlOnN0cm9uZ1RoaXMuZ2V0KCldOwotICAgICAgICAgICAgCi0gICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgW3N0cm9uZ1RoaXMtPm1fcGxheWVyQ29udHJvbGxlciByZXNldFN0YXRlXTsK
LSAgICB9KTsKKyAgICBpZiAoIW1fcGxheWVyQ29udHJvbGxlcikgeworICAgICAgICBtX3BsYXll
ckNvbnRyb2xsZXIgPSBhZG9wdE5TKFtbV2ViQVZQbGF5ZXJDb250cm9sbGVyIGFsbG9jXSBpbml0
XSk7CisgICAgICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0RGVsZWdhdGU6bV92aWRlb0Z1bGxz
Y3JlZW5Nb2RlbF07CisgICAgICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0RnVsbHNjcmVlbklu
dGVyZmFjZTp0aGlzXTsKKyAgICAgICAgCisgICAgfSBlbHNlCisgICAgICAgIFttX3BsYXllckNv
bnRyb2xsZXIgcmVzZXRTdGF0ZV07CiB9CiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OnNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsKiBtb2RlbCkKQEAgLTc3NSw3MiArNzcwLDUyIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OnNldFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKFdlYlZp
CiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldER1cmF0aW9uKGRv
dWJsZSBkdXJhdGlvbikKIHsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ+IHN0cm9uZ1RoaXModGhpcyk7Ci0gICAgCi0gICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0
Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMsIGR1cmF0aW9uXSB7Ci0gICAgICAgIFdl
YkFWUGxheWVyQ29udHJvbGxlciogcGxheWVyQ29udHJvbGxlciA9IHN0cm9uZ1RoaXMtPm1fcGxh
eWVyQ29udHJvbGxlci5nZXQoKTsKKyAgICBXZWJBVlBsYXllckNvbnRyb2xsZXIqIHBsYXllckNv
bnRyb2xsZXIgPSBtX3BsYXllckNvbnRyb2xsZXIuZ2V0KCk7CiAKLSAgICAgICAgLy8gRklYTUU6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjcwMTcgdXNlIGNvcnJl
Y3QgdmFsdWVzIGluc3RlYWQgb2YgZHVyYXRpb24gZm9yIGFsbCB0aGVzZQotICAgICAgICBwbGF5
ZXJDb250cm9sbGVyLmNvbnRlbnREdXJhdGlvbiA9IGR1cmF0aW9uOwotICAgICAgICBwbGF5ZXJD
b250cm9sbGVyLm1heFRpbWUgPSBkdXJhdGlvbjsKLSAgICAgICAgcGxheWVyQ29udHJvbGxlci5j
b250ZW50RHVyYXRpb25XaXRoaW5FbmRUaW1lcyA9IGR1cmF0aW9uOworICAgIC8vIEZJWE1FOiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3MDE3IHVzZSBjb3JyZWN0
IHZhbHVlcyBpbnN0ZWFkIG9mIGR1cmF0aW9uIGZvciBhbGwgdGhlc2UKKyAgICBwbGF5ZXJDb250
cm9sbGVyLmNvbnRlbnREdXJhdGlvbiA9IGR1cmF0aW9uOworICAgIHBsYXllckNvbnRyb2xsZXIu
bWF4VGltZSA9IGR1cmF0aW9uOworICAgIHBsYXllckNvbnRyb2xsZXIuY29udGVudER1cmF0aW9u
V2l0aGluRW5kVGltZXMgPSBkdXJhdGlvbjsKIAotICAgICAgICAvLyBGSVhNRTogd2UgdGFrZSB0
aGlzIGFzIGFuIGluZGljYXRpb24gdGhhdCBwbGF5YmFjayBpcyByZWFkeS4KLSAgICAgICAgcGxh
eWVyQ29udHJvbGxlci5jYW5QbGF5ID0gWUVTOwotICAgICAgICBwbGF5ZXJDb250cm9sbGVyLmNh
blBhdXNlID0gWUVTOwotICAgICAgICBwbGF5ZXJDb250cm9sbGVyLmNhblRvZ2dsZVBsYXliYWNr
ID0gWUVTOwotICAgICAgICBwbGF5ZXJDb250cm9sbGVyLmhhc0VuYWJsZWRBdWRpbyA9IFlFUzsK
LSAgICAgICAgcGxheWVyQ29udHJvbGxlci5jYW5TZWVrID0gWUVTOwotICAgICAgICBwbGF5ZXJD
b250cm9sbGVyLm1pblRpbWUgPSAwOwotICAgICAgICBwbGF5ZXJDb250cm9sbGVyLnN0YXR1cyA9
IEFWUGxheWVyQ29udHJvbGxlclN0YXR1c1JlYWR5VG9QbGF5OwotICAgIH0pOworICAgIC8vIEZJ
WE1FOiB3ZSB0YWtlIHRoaXMgYXMgYW4gaW5kaWNhdGlvbiB0aGF0IHBsYXliYWNrIGlzIHJlYWR5
LgorICAgIHBsYXllckNvbnRyb2xsZXIuY2FuUGxheSA9IFlFUzsKKyAgICBwbGF5ZXJDb250cm9s
bGVyLmNhblBhdXNlID0gWUVTOworICAgIHBsYXllckNvbnRyb2xsZXIuY2FuVG9nZ2xlUGxheWJh
Y2sgPSBZRVM7CisgICAgcGxheWVyQ29udHJvbGxlci5oYXNFbmFibGVkQXVkaW8gPSBZRVM7Cisg
ICAgcGxheWVyQ29udHJvbGxlci5jYW5TZWVrID0gWUVTOworICAgIHBsYXllckNvbnRyb2xsZXIu
bWluVGltZSA9IDA7CisgICAgcGxheWVyQ29udHJvbGxlci5zdGF0dXMgPSBBVlBsYXllckNvbnRy
b2xsZXJTdGF0dXNSZWFkeVRvUGxheTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6c2V0Q3VycmVudFRpbWUoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5j
aG9yVGltZSkKIHsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+
IHN0cm9uZ1RoaXModGhpcyk7Ci0gICAgCi0gICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0
X21haW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMsIGN1cnJlbnRUaW1lLCBhbmNob3JUaW1lXSB7Ci0g
ICAgICAgIE5TVGltZUludGVydmFsIGFuY2hvclRpbWVTdGFtcCA9ICFbc3Ryb25nVGhpcy0+bV9w
bGF5ZXJDb250cm9sbGVyIHJhdGVdID8gTkFOIDogYW5jaG9yVGltZTsKLSAgICAgICAgQVZWYWx1
ZVRpbWluZyAqdGltaW5nID0gW2dldEFWVmFsdWVUaW1pbmdDbGFzcygpIHZhbHVlVGltaW5nV2l0
aEFuY2hvclZhbHVlOmN1cnJlbnRUaW1lCi0gICAgICAgICAgICBhbmNob3JUaW1lU3RhbXA6YW5j
aG9yVGltZVN0YW1wIHJhdGU6MF07Ci0gICAgICAgIFtzdHJvbmdUaGlzLT5tX3BsYXllckNvbnRy
b2xsZXIgc2V0VGltaW5nOnRpbWluZ107Ci0gICAgfSk7CisgICAgTlNUaW1lSW50ZXJ2YWwgYW5j
aG9yVGltZVN0YW1wID0gIVttX3BsYXllckNvbnRyb2xsZXIgcmF0ZV0gPyBOQU4gOiBhbmNob3JU
aW1lOworICAgIEFWVmFsdWVUaW1pbmcgKnRpbWluZyA9IFtnZXRBVlZhbHVlVGltaW5nQ2xhc3Mo
KSB2YWx1ZVRpbWluZ1dpdGhBbmNob3JWYWx1ZTpjdXJyZW50VGltZQorICAgICAgICBhbmNob3JU
aW1lU3RhbXA6YW5jaG9yVGltZVN0YW1wIHJhdGU6MF07CisgICAgW21fcGxheWVyQ29udHJvbGxl
ciBzZXRUaW1pbmc6dGltaW5nXTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6c2V0QnVmZmVyZWRUaW1lKGRvdWJsZSBidWZmZXJlZFRpbWUpCiB7Ci0gICAgUmVm
UHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOwot
Ci0gICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1Ro
aXMsIGJ1ZmZlcmVkVGltZV0gewotICAgICAgICBXZWJBVlBsYXllckNvbnRyb2xsZXIqIHBsYXll
ckNvbnRyb2xsZXIgPSBzdHJvbmdUaGlzLT5tX3BsYXllckNvbnRyb2xsZXIuZ2V0KCk7Ci0gICAg
ICAgIGRvdWJsZSBkdXJhdGlvbiA9IHBsYXllckNvbnRyb2xsZXIuY29udGVudER1cmF0aW9uOwot
ICAgICAgICBkb3VibGUgbm9ybWFsaXplZEJ1ZmZlcmVkVGltZTsKLSAgICAgICAgaWYgKCFkdXJh
dGlvbikKLSAgICAgICAgICAgIG5vcm1hbGl6ZWRCdWZmZXJlZFRpbWUgPSAwOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBub3JtYWxpemVkQnVmZmVyZWRUaW1lID0gYnVmZmVyZWRUaW1lIC8g
ZHVyYXRpb247Ci0gICAgICAgIHBsYXllckNvbnRyb2xsZXIubG9hZGVkVGltZVJhbmdlcyA9IEBb
QDAsIEAobm9ybWFsaXplZEJ1ZmZlcmVkVGltZSldOwotICAgIH0pOworICAgIFdlYkFWUGxheWVy
Q29udHJvbGxlciogcGxheWVyQ29udHJvbGxlciA9IG1fcGxheWVyQ29udHJvbGxlci5nZXQoKTsK
KyAgICBkb3VibGUgZHVyYXRpb24gPSBwbGF5ZXJDb250cm9sbGVyLmNvbnRlbnREdXJhdGlvbjsK
KyAgICBkb3VibGUgbm9ybWFsaXplZEJ1ZmZlcmVkVGltZTsKKyAgICBpZiAoIWR1cmF0aW9uKQor
ICAgICAgICBub3JtYWxpemVkQnVmZmVyZWRUaW1lID0gMDsKKyAgICBlbHNlCisgICAgICAgIG5v
cm1hbGl6ZWRCdWZmZXJlZFRpbWUgPSBidWZmZXJlZFRpbWUgLyBkdXJhdGlvbjsKKyAgICBwbGF5
ZXJDb250cm9sbGVyLmxvYWRlZFRpbWVSYW5nZXMgPSBAW0AwLCBAKG5vcm1hbGl6ZWRCdWZmZXJl
ZFRpbWUpXTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0
UmF0ZShib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQogewotICAgIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlzKTsKLSAgICAK
LSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhp
cywgaXNQbGF5aW5nLCBwbGF5YmFja1JhdGVdIHsKLSAgICAgICAgW3N0cm9uZ1RoaXMtPm1fcGxh
eWVyQ29udHJvbGxlciBzZXRSYXRlOmlzUGxheWluZyA/IHBsYXliYWNrUmF0ZSA6IDAuXTsKLSAg
ICB9KTsKKyAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldFJhdGU6aXNQbGF5aW5nID8gcGxheWJh
Y2tSYXRlIDogMC5dOwogfQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
OjpzZXRWaWRlb0RpbWVuc2lvbnMoYm9vbCBoYXNWaWRlbywgZmxvYXQgd2lkdGgsIGZsb2F0IGhl
aWdodCkKIHsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHN0
cm9uZ1RoaXModGhpcyk7Ci0gICAgCi0gICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21h
aW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMsIGhhc1ZpZGVvLCB3aWR0aCwgaGVpZ2h0XSB7Ci0gICAg
ICAgIFtzdHJvbmdUaGlzLT5tX3BsYXllckNvbnRyb2xsZXIgc2V0SGFzRW5hYmxlZFZpZGVvOmhh
c1ZpZGVvXTsKLSAgICAgICAgW3N0cm9uZ1RoaXMtPm1fcGxheWVyQ29udHJvbGxlciBzZXRDb250
ZW50RGltZW5zaW9uczpDR1NpemVNYWtlKHdpZHRoLCBoZWlnaHQpXTsKLSAgICB9KTsKKyAgICBb
bV9wbGF5ZXJDb250cm9sbGVyIHNldEhhc0VuYWJsZWRWaWRlbzpoYXNWaWRlb107CisgICAgW21f
cGxheWVyQ29udHJvbGxlciBzZXRDb250ZW50RGltZW5zaW9uczpDR1NpemVNYWtlKHdpZHRoLCBo
ZWlnaHQpXTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0
U2Vla2FibGVSYW5nZXMoY29uc3QgVGltZVJhbmdlcyYgdGltZVJhbmdlcykKQEAgLTg1NiwyMCAr
ODMxLDEyIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFNlZWth
YmxlUmFuZ2VzKGNvbnN0IFRpbWVSYW5nZXMmIHRpbWVSCiAgICAgICAgIFtzZWVrYWJsZVJhbmdl
cyBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoQ01UaW1lUmFuZ2U6cmFuZ2VdXTsKICAgICB9
CiAgICAgCi0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJv
bmdUaGlzKHRoaXMpOwotICAgIAotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWlu
X3F1ZXVlKCksIFtzdHJvbmdUaGlzLCBzZWVrYWJsZVJhbmdlc10gewotICAgICAgICBbc3Ryb25n
VGhpcy0+bV9wbGF5ZXJDb250cm9sbGVyIHNldFNlZWthYmxlVGltZVJhbmdlczpzZWVrYWJsZVJh
bmdlcy5nZXQoKV07Ci0gICAgfSk7CisgICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRTZWVrYWJs
ZVRpbWVSYW5nZXM6c2Vla2FibGVSYW5nZXMuZ2V0KCldOwogfQogCiB2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRDYW5QbGF5RmFzdFJldmVyc2UoYm9vbCBjYW5QbGF5
RmFzdFJldmVyc2UpCiB7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0PiBzdHJvbmdUaGlzKHRoaXMpOwotICAgIAotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNo
X2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCBjYW5QbGF5RmFzdFJldmVyc2VdIHsKLSAg
ICAgICAgW3N0cm9uZ1RoaXMtPm1fcGxheWVyQ29udHJvbGxlciBzZXRDYW5TY2FuQmFja3dhcmQ6
Y2FuUGxheUZhc3RSZXZlcnNlXTsKLSAgICB9KTsKKyAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNl
dENhblNjYW5CYWNrd2FyZDpjYW5QbGF5RmFzdFJldmVyc2VdOwogfQogCiBzdGF0aWMgUmV0YWlu
UHRyPE5TTXV0YWJsZUFycmF5PiBtZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPFN0
cmluZz4mIG9wdGlvbnMpCkBAIC04ODYsMjUgKzg1MywxNyBAQCBzdGF0aWMgUmV0YWluUHRyPE5T
TXV0YWJsZUFycmF5PiBtZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPFN0cmluZz4m
IG9wdAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0QXVkaW9NZWRp
YVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIG9wdGlvbnMsIHVpbnQ2NF90
IHNlbGVjdGVkSW5kZXgpCiB7CiAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiB3ZWJPcHRp
b25zID0gbWVkaWFTZWxlY3Rpb25PcHRpb25zKG9wdGlvbnMpOwotICAgIFJlZlB0cjxXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlzKTsKLSAgICAKLSAgICBk
aXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbd2ViT3B0aW9ucywgc3Ry
b25nVGhpcywgc2VsZWN0ZWRJbmRleF0gewotICAgICAgICBbc3Ryb25nVGhpcy0+bV9wbGF5ZXJD
b250cm9sbGVyIHNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zOndlYk9wdGlvbnMuZ2V0KCld
OwotICAgICAgICBpZiAoc2VsZWN0ZWRJbmRleCA8IFt3ZWJPcHRpb25zIGNvdW50XSkKLSAgICAg
ICAgICAgIFtzdHJvbmdUaGlzLT5tX3BsYXllckNvbnRyb2xsZXIgc2V0Q3VycmVudEF1ZGlvTWVk
aWFTZWxlY3Rpb25PcHRpb246W3dlYk9wdGlvbnMgb2JqZWN0QXRJbmRleDpzdGF0aWNfY2FzdDxO
U1VJbnRlZ2VyPihzZWxlY3RlZEluZGV4KV1dOwotICAgIH0pOworICAgIFttX3BsYXllckNvbnRy
b2xsZXIgc2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnM6d2ViT3B0aW9ucy5nZXQoKV07Cisg
ICAgaWYgKHNlbGVjdGVkSW5kZXggPCBbd2ViT3B0aW9ucyBjb3VudF0pCisgICAgICAgIFttX3Bs
YXllckNvbnRyb2xsZXIgc2V0Q3VycmVudEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb246W3dlYk9w
dGlvbnMgb2JqZWN0QXRJbmRleDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihzZWxlY3RlZEluZGV4
KV1dOwogfQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRMZWdp
YmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvcHRpb25zLCB1
aW50NjRfdCBzZWxlY3RlZEluZGV4KQogewogICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4g
d2ViT3B0aW9ucyA9IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhvcHRpb25zKTsKLSAgICBSZWZQdHI8
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHN0cm9uZ1RoaXModGhpcyk7Ci0KLSAg
ICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbd2ViT3B0aW9ucywg
c3Ryb25nVGhpcywgc2VsZWN0ZWRJbmRleF0gewotICAgICAgICBbc3Ryb25nVGhpcy0+bV9wbGF5
ZXJDb250cm9sbGVyIHNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnM6d2ViT3B0aW9ucy5n
ZXQoKV07Ci0gICAgICAgIGlmIChzZWxlY3RlZEluZGV4IDwgW3dlYk9wdGlvbnMgY291bnRdKQot
ICAgICAgICAgICAgW3N0cm9uZ1RoaXMtPm1fcGxheWVyQ29udHJvbGxlciBzZXRDdXJyZW50TGVn
aWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uOlt3ZWJPcHRpb25zIG9iamVjdEF0SW5kZXg6c3RhdGlj
X2Nhc3Q8TlNVSW50ZWdlcj4oc2VsZWN0ZWRJbmRleCldXTsKLSAgICB9KTsKKyAgICBbbV9wbGF5
ZXJDb250cm9sbGVyIHNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnM6d2ViT3B0aW9ucy5n
ZXQoKV07CisgICAgaWYgKHNlbGVjdGVkSW5kZXggPCBbd2ViT3B0aW9ucyBjb3VudF0pCisgICAg
ICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0Q3VycmVudExlZ2libGVNZWRpYVNlbGVjdGlvbk9w
dGlvbjpbd2ViT3B0aW9ucyBvYmplY3RBdEluZGV4OnN0YXRpY19jYXN0PE5TVUludGVnZXI+KHNl
bGVjdGVkSW5kZXgpXV07CiB9CiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6OnNldEV4dGVybmFsUGxheWJhY2soYm9vbCBlbmFibGVkLCBFeHRlcm5hbFBsYXliYWNrVGFy
Z2V0VHlwZSB0YXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSkKQEAgLTkxNSw0
MSArODc0LDI0IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldEV4
dGVybmFsUGxheWJhY2soYm9vbCBlbmFibGVkLCBFeHRlcm5hCiAgICAgZWxzZSBpZiAodGFyZ2V0
VHlwZSA9PSBUYXJnZXRUeXBlVFZPdXQpCiAgICAgICAgIGV4dGVybmFsUGxheWJhY2tUeXBlID0g
QVZQbGF5ZXJDb250cm9sbGVyRXh0ZXJuYWxQbGF5YmFja1R5cGVUVk91dDsKIAotICAgIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlzKTsKLQot
ICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlz
LCBlbmFibGVkLCBsb2NhbGl6ZWREZXZpY2VOYW1lLCBleHRlcm5hbFBsYXliYWNrVHlwZV0gewot
ICAgICAgICBXZWJBVlBsYXllckNvbnRyb2xsZXIqIHBsYXllckNvbnRyb2xsZXIgPSBzdHJvbmdU
aGlzLT5tX3BsYXllckNvbnRyb2xsZXIuZ2V0KCk7Ci0gICAgICAgIHBsYXllckNvbnRyb2xsZXIu
ZXh0ZXJuYWxQbGF5YmFja0FpclBsYXlEZXZpY2VMb2NhbGl6ZWROYW1lID0gbG9jYWxpemVkRGV2
aWNlTmFtZTsKLSAgICAgICAgcGxheWVyQ29udHJvbGxlci5leHRlcm5hbFBsYXliYWNrVHlwZSA9
IGV4dGVybmFsUGxheWJhY2tUeXBlOwotICAgICAgICBwbGF5ZXJDb250cm9sbGVyLmV4dGVybmFs
UGxheWJhY2tBY3RpdmUgPSBlbmFibGVkOwotICAgICAgICBbc3Ryb25nVGhpcy0+bV92aWRlb0xh
eWVyQ29udGFpbmVyLmdldCgpIHNldEhpZGRlbjplbmFibGVkXTsKLSAgICB9KTsKKyAgICBXZWJB
VlBsYXllckNvbnRyb2xsZXIqIHBsYXllckNvbnRyb2xsZXIgPSBtX3BsYXllckNvbnRyb2xsZXIu
Z2V0KCk7CisgICAgcGxheWVyQ29udHJvbGxlci5leHRlcm5hbFBsYXliYWNrQWlyUGxheURldmlj
ZUxvY2FsaXplZE5hbWUgPSBsb2NhbGl6ZWREZXZpY2VOYW1lOworICAgIHBsYXllckNvbnRyb2xs
ZXIuZXh0ZXJuYWxQbGF5YmFja1R5cGUgPSBleHRlcm5hbFBsYXliYWNrVHlwZTsKKyAgICBwbGF5
ZXJDb250cm9sbGVyLmV4dGVybmFsUGxheWJhY2tBY3RpdmUgPSBlbmFibGVkOworICAgIFttX3Zp
ZGVvTGF5ZXJDb250YWluZXIuZ2V0KCkgc2V0SGlkZGVuOmVuYWJsZWRdOwogfQogCiB2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXR1cEZ1bGxzY3JlZW4oUGxhdGZvcm1M
YXllciYgdmlkZW9MYXllciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgaW5pdGlhbFJlY3QsIFVJ
VmlldyogcGFyZW50VmlldywgSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSBt
b2RlLCBib29sIGFsbG93T3B0aW1pemVkRnVsbHNjcmVlbikKIHsKLSAgICBSZWZQdHI8V2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHN0cm9uZ1RoaXModGhpcyk7Ci0KICAgICBBU1NF
UlQobW9kZSAhPSBIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7Ci0g
ICAgbV92aWRlb0xheWVyID0gJnZpZGVvTGF5ZXI7Ci0KLSAgICBtX21vZGUgPSBtb2RlOwotCi0g
ICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMs
ICZ2aWRlb0xheWVyLCBpbml0aWFsUmVjdCwgcGFyZW50VmlldywgbW9kZSwgYWxsb3dPcHRpbWl6
ZWRGdWxsc2NyZWVuXSB7Ci0gICAgICAgIHN0cm9uZ1RoaXMtPnNldHVwRnVsbHNjcmVlbkludGVy
bmFsKHZpZGVvTGF5ZXIsIGluaXRpYWxSZWN0LCBwYXJlbnRWaWV3LCBtb2RlLCBhbGxvd09wdGlt
aXplZEZ1bGxzY3JlZW4pOwotICAgIH0pOwotfQotCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpzZXR1cEZ1bGxzY3JlZW5JbnRlcm5hbChQbGF0Zm9ybUxheWVyJiB2aWRl
b0xheWVyLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBpbml0aWFsUmVjdCwgVUlWaWV3KiBwYXJl
bnRWaWV3LCBIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wg
YWxsb3dPcHRpbWl6ZWRGdWxsc2NyZWVuKQotewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldHVwRnVsbHNjcmVlbkludGVybmFsKCVwKSIs
IHRoaXMpOwotICAgIFVOVVNFRF9QQVJBTSh2aWRlb0xheWVyKTsKLSAgICBVTlVTRURfUEFSQU0o
bW9kZSk7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6c2V0dXBGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOwogCiAgICAgbV9hbGxvd09wdGltaXpl
ZEZ1bGxzY3JlZW4gPSBhbGxvd09wdGltaXplZEZ1bGxzY3JlZW47CiAKICAgICBbQ0FUcmFuc2Fj
dGlvbiBiZWdpbl07CiAgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsK
KyAgICBtX3ZpZGVvTGF5ZXIgPSAmdmlkZW9MYXllcjsKKyAgICBtX21vZGUgPSBtb2RlOwogICAg
IG1fcGFyZW50VmlldyA9IHBhcmVudFZpZXc7CiAgICAgbV9wYXJlbnRXaW5kb3cgPSBwYXJlbnRW
aWV3LndpbmRvdzsKIApAQCAtMTAwMSwxMSArOTQzLDggQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdDo6c2V0dXBGdWxsc2NyZWVuSW50ZXJuYWwoUGxhdGZvcm1MYXllciYg
dmkKIAogICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07CiAKLSAgICBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHN0cm9uZ1RoaXModGhpcyk7Ci0gICAgV2ViVGhyZWFk
UnVuKFtzdHJvbmdUaGlzXSB7Ci0gICAgICAgIGlmIChzdHJvbmdUaGlzLT5tX2Z1bGxzY3JlZW5D
aGFuZ2VPYnNlcnZlcikKLSAgICAgICAgICAgIHN0cm9uZ1RoaXMtPm1fZnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyLT5kaWRTZXR1cEZ1bGxzY3JlZW4oKTsKLSAgICB9KTsKKyAgICBpZiAobV9mdWxs
c2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCisgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
LT5kaWRTZXR1cEZ1bGxzY3JlZW4oKTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuKCkKQEAgLTEwMTYsMTYgKzk1NSwxMyBAQCB2b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1bGxzY3JlZW4oKQogICAg
IG1fZXhpdFJlcXVlc3RlZCA9IGZhbHNlOwogICAgIG1fZW50ZXJSZXF1ZXN0ZWQgPSB0cnVlOwog
Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlz
KHRoaXMpOwotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtz
dHJvbmdUaGlzXSB7Ci0gICAgICAgIFtzdHJvbmdUaGlzLT5tX3ZpZGVvTGF5ZXJDb250YWluZXIg
c2V0QmFja2dyb3VuZENvbG9yOltbZ2V0VUlDb2xvckNsYXNzKCkgYmxhY2tDb2xvcl0gQ0dDb2xv
cl1dOwotICAgICAgICBpZiAoc3Ryb25nVGhpcy0+bW9kZSgpID09IEhUTUxNZWRpYUVsZW1lbnQ6
OlZpZGVvRnVsbHNjcmVlbk1vZGVPcHRpbWl6ZWQpCi0gICAgICAgICAgICBzdHJvbmdUaGlzLT5l
bnRlckZ1bGxzY3JlZW5PcHRpbWl6ZWQoKTsKLSAgICAgICAgZWxzZSBpZiAoc3Ryb25nVGhpcy0+
bW9kZSgpID09IEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkK
LSAgICAgICAgICAgIHN0cm9uZ1RoaXMtPmVudGVyRnVsbHNjcmVlblN0YW5kYXJkKCk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0pOworICAg
IFttX3ZpZGVvTGF5ZXJDb250YWluZXIgc2V0QmFja2dyb3VuZENvbG9yOltbZ2V0VUlDb2xvckNs
YXNzKCkgYmxhY2tDb2xvcl0gQ0dDb2xvcl1dOworICAgIGlmIChtb2RlKCkgPT0gSFRNTE1lZGlh
RWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZU9wdGltaXplZCkKKyAgICAgICAgZW50ZXJGdWxs
c2NyZWVuT3B0aW1pemVkKCk7CisgICAgZWxzZSBpZiAobW9kZSgpID09IEhUTUxNZWRpYUVsZW1l
bnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkKKyAgICAgICAgZW50ZXJGdWxsc2NyZWVu
U3RhbmRhcmQoKTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQog
CiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1bGxzY3JlZW5P
cHRpbWl6ZWQoKQpAQCAtMTA0NSwzNCArOTgxLDIxIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OmVudGVyRnVsbHNjcmVlblN0YW5kYXJkKCkKICAgICAgICAgTE9HKEZ1
bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2Ny
ZWVuU3RhbmRhcmQgLSBsYW1iZGEoJXApIC0gc3VjY2VlZGVkKCVzKSIsIHRoaXMsIGJvb2xTdHJp
bmcoc3VjY2VlZGVkKSk7CiAgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldFNob3dz
UGxheWJhY2tDb250cm9sczpZRVNdOwogCi0gICAgICAgIFdlYlRocmVhZFJ1bihbdGhpcywgc3Ry
b25nVGhpc10gewotICAgICAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQot
ICAgICAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFbnRlckZ1bGxz
Y3JlZW4oKTsKLSAgICAgICAgfSk7CisgICAgICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNl
cnZlcikKKyAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFbnRlckZ1
bGxzY3JlZW4oKTsKICAgICB9XTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6ZXhpdEZ1bGxzY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZmluYWxSZWN0
KQogewotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25n
VGhpcyh0aGlzKTsKLQogICAgIG1fZXhpdFJlcXVlc3RlZCA9IHRydWU7CiAgICAgaWYgKG1fZXhp
dENvbXBsZXRlZCkgewotICAgICAgICBXZWJUaHJlYWRSdW4oW3N0cm9uZ1RoaXNdIHsKLSAgICAg
ICAgICAgIGlmIChzdHJvbmdUaGlzLT5tX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAg
ICAgICAgICAgICBzdHJvbmdUaGlzLT5tX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRXhp
dEZ1bGxzY3JlZW4oKTsKLSAgICAgICAgfSk7CisgICAgICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFu
Z2VPYnNlcnZlcikKKyAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRF
eGl0RnVsbHNjcmVlbigpOwogICAgICAgICByZXR1cm47CiAgICAgfQotCi0gICAgZGlzcGF0Y2hf
YXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMsIGZpbmFsUmVjdF0g
ewotICAgICAgICBzdHJvbmdUaGlzLT5leGl0RnVsbHNjcmVlbkludGVybmFsKGZpbmFsUmVjdCk7
Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmV4
aXRGdWxsc2NyZWVuSW50ZXJuYWwoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZmluYWxSZWN0KQot
ewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
OmV4aXRGdWxsc2NyZWVuSW50ZXJuYWwoJXApIiwgdGhpcyk7CisgICAgCisgICAgTE9HKEZ1bGxz
Y3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZXhpdEZ1bGxzY3JlZW4o
JXApIiwgdGhpcyk7CiAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0U2hvd3NQbGF5YmFj
a0NvbnRyb2xzOk5PXTsKICAgICBpZiAobV92aWV3Q29udHJvbGxlcikKICAgICAgICAgW21fcGxh
eWVyVmlld0NvbnRyb2xsZXIgdmlld10uZnJhbWUgPSBbbV9wYXJlbnRWaWV3IGNvbnZlcnRSZWN0
OmZpbmFsUmVjdCB0b1ZpZXc6bmlsXTsKQEAgLTEwODksMjUgKzEwMTIsMjMgQEAgdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZXhpdEZ1bGxzY3JlZW5JbnRlcm5hbChjb25z
dCBXZWJDb3JlOjpJbnQKICAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc3RvcE9wdGlt
aXplZEZ1bGxzY3JlZW5dOwogICAgIH0gZWxzZSBpZiAoaXNNb2RlKEhUTUxNZWRpYUVsZW1lbnQ6
OlZpZGVvRnVsbHNjcmVlbk1vZGVPcHRpbWl6ZWQgfCBIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlU3RhbmRhcmQpKSB7CiAgICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlzKTsKLSAgICAgICAgW21fcGxheWVyVmll
d0NvbnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpOTyBjb21wbGV0aW9uSGFuZGxlcjpb
c3Ryb25nVGhpc10gKEJPT0wsIE5TRXJyb3IqKSB7Ci0gICAgICAgICAgICBbc3Ryb25nVGhpcy0+
bV93aW5kb3cgc2V0SGlkZGVuOk5PXTsKLSAgICAgICAgICAgIFtzdHJvbmdUaGlzLT5tX3BsYXll
clZpZXdDb250cm9sbGVyIHN0b3BPcHRpbWl6ZWRGdWxsc2NyZWVuXTsKKyAgICAgICAgW21fcGxh
eWVyVmlld0NvbnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpOTyBjb21wbGV0aW9uSGFu
ZGxlcjpbc3Ryb25nVGhpcywgdGhpc10gKEJPT0wsIE5TRXJyb3IqKSB7CisgICAgICAgICAgICBb
bV93aW5kb3cgc2V0SGlkZGVuOk5PXTsKKyAgICAgICAgICAgIFttX3BsYXllclZpZXdDb250cm9s
bGVyIHN0b3BPcHRpbWl6ZWRGdWxsc2NyZWVuXTsKICAgICAgICAgfV07CiAgICAgfSBlbHNlIGlm
IChpc01vZGUoSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKSkg
ewogICAgICAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHN0cm9u
Z1RoaXModGhpcyk7Ci0gICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIGV4aXRGdWxsU2Ny
ZWVuQW5pbWF0ZWQ6WUVTIGNvbXBsZXRpb25IYW5kbGVyOltzdHJvbmdUaGlzXSAoQk9PTCwgTlNF
cnJvciopIHsKLSAgICAgICAgICAgIHN0cm9uZ1RoaXMtPm1fZXhpdENvbXBsZXRlZCA9IHRydWU7
CisgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIGV4aXRGdWxsU2NyZWVuQW5pbWF0ZWQ6
WUVTIGNvbXBsZXRpb25IYW5kbGVyOltzdHJvbmdUaGlzLCB0aGlzXSAoQk9PTCwgTlNFcnJvciop
IHsKKyAgICAgICAgICAgIG1fZXhpdENvbXBsZXRlZCA9IHRydWU7CiAKICAgICAgICAgICAgIFtD
QVRyYW5zYWN0aW9uIGJlZ2luXTsKICAgICAgICAgICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2Fi
bGVBY3Rpb25zOllFU107Ci0gICAgICAgICAgICBbc3Ryb25nVGhpcy0+bV92aWRlb0xheWVyQ29u
dGFpbmVyIHNldEJhY2tncm91bmRDb2xvcjpbW2dldFVJQ29sb3JDbGFzcygpIGNsZWFyQ29sb3Jd
IENHQ29sb3JdXTsKLSAgICAgICAgICAgIFtbc3Ryb25nVGhpcy0+bV9wbGF5ZXJWaWV3Q29udHJv
bGxlciB2aWV3XSBzZXRCYWNrZ3JvdW5kQ29sb3I6W2dldFVJQ29sb3JDbGFzcygpIGNsZWFyQ29s
b3JdXTsKKyAgICAgICAgICAgIFttX3ZpZGVvTGF5ZXJDb250YWluZXIgc2V0QmFja2dyb3VuZENv
bG9yOltbZ2V0VUlDb2xvckNsYXNzKCkgY2xlYXJDb2xvcl0gQ0dDb2xvcl1dOworICAgICAgICAg
ICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEJhY2tncm91bmRDb2xvcjpbZ2V0
VUlDb2xvckNsYXNzKCkgY2xlYXJDb2xvcl1dOwogICAgICAgICAgICAgW0NBVHJhbnNhY3Rpb24g
Y29tbWl0XTsKIAotICAgICAgICAgICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzXSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKHN0cm9uZ1RoaXMtPm1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQot
ICAgICAgICAgICAgICAgICAgICBzdHJvbmdUaGlzLT5tX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZl
ci0+ZGlkRXhpdEZ1bGxzY3JlZW4oKTsKLSAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaWYg
KG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQorICAgICAgICAgICAgICAgIG1fZnVsbHNjcmVl
bkNoYW5nZU9ic2VydmVyLT5kaWRFeGl0RnVsbHNjcmVlbigpOwogICAgICAgICB9XTsKICAgICB9
OwogfQpAQCAtMTEyMCwyMCArMTA0MSwxMSBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpleGl0RnVsbHNjcmVlbkludGVybmFsKGNvbnN0IFdlYkNvcmU6OkludAogLShV
SUludGVyZmFjZU9yaWVudGF0aW9uKWludGVyZmFjZU9yaWVudGF0aW9uOwogQGVuZAogCi12b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpjbGVhbnVwRnVsbHNjcmVlbigpCi17
Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlz
KHRoaXMpOwotICAgIAotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVl
KCksIFtzdHJvbmdUaGlzXSB7Ci0gICAgICAgIHN0cm9uZ1RoaXMtPmNsZWFudXBGdWxsc2NyZWVu
SW50ZXJuYWwoKTsKLSAgICB9KTsKLX0KLQogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gK
ICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRp
b25zIgotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y2xlYW51cEZ1bGxz
Y3JlZW5JbnRlcm5hbCgpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojpj
bGVhbnVwRnVsbHNjcmVlbigpCiB7Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6Y2xlYW51cEZ1bGxzY3JlZW5JbnRlcm5hbCglcCkiLCB0aGlz
KTsKKyAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
OjpjbGVhbnVwRnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKICAgICBpZiAobV93aW5kb3cpIHsKICAg
ICAgICAgW21fd2luZG93IHNldEhpZGRlbjpZRVNdOwogICAgICAgICBbbV93aW5kb3cgc2V0Um9v
dFZpZXdDb250cm9sbGVyOm5pbF07CkBAIC0xMTczLDEyICsxMDg1LDEwIEBAIHZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmNsZWFudXBGdWxsc2NyZWVuSW50ZXJuYWwoKQog
ICAgIG1fcGFyZW50VmlldyA9IG5pbDsKICAgICBtX3BhcmVudFdpbmRvdyA9IG5pbDsKICAgICAK
LSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHN0cm9uZ1RoaXMo
dGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzXSB7Ci0gICAgICAgIGlmIChzdHJv
bmdUaGlzLT5tX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAgICAgIHN0cm9uZ1Ro
aXMtPm1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRDbGVhbnVwRnVsbHNjcmVlbigpOwot
ICAgICAgICBzdHJvbmdUaGlzLT5tX2VudGVyUmVxdWVzdGVkID0gZmFsc2U7Ci0gICAgfSk7Cisg
ICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQorICAgICAgICBtX2Z1bGxzY3JlZW5D
aGFuZ2VPYnNlcnZlci0+ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKTsKKworICAgIG1fZW50ZXJSZXF1
ZXN0ZWQgPSBmYWxzZTsKIH0KICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKIApAQCAtMTE4
Nyw3ICsxMDk3LDcgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6aW52
YWxpZGF0ZSgpCiAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCA9IG5pbDsKICAgICBtX2Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlciA9IG5pbDsKICAgICAKLSAgICBjbGVhbnVwRnVsbHNjcmVlbklu
dGVybmFsKCk7CisgICAgY2xlYW51cEZ1bGxzY3JlZW4oKTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpCkBA
IC0xMjAwLDEwICsxMTEwLDcgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpCiAgICAgCiAgICAgTE9HKEZ1bGxzY3Jl
ZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cmVxdWVzdEhpZGVBbmRFeGl0
RnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKIAotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlzKTsKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNw
YXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpc10gewotICAgICAgICBbc3Ryb25nVGhp
cy0+bV93aW5kb3cgc2V0SGlkZGVuOllFU107Ci0gICAgfSk7CisgICAgW21fd2luZG93IHNldEhp
ZGRlbjpZRVNdOwogCiAgICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgJiYgIW1fZXhpdFJl
cXVlc3RlZCkgewogICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5wYXVzZSgpOwpAQCAt
MTIxNCwxOSArMTEyMSwxNiBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCkKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZShib29sIHZpc2libGUsIGNv
bnN0IEludFJlY3QmIGlubGluZVJlY3QpCiB7CiAgICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKCVwKSAt
IHZpc2libGUoJXMpIiwgdGhpcywgYm9vbFN0cmluZyh2aXNpYmxlKSk7Ci0gICAgUmVmUHRyPFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOwotICAgIGRp
c3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCB2aXNp
YmxlLCBpbmxpbmVSZWN0XSB7Ci0gICAgICAgIGlmIChzdHJvbmdUaGlzLT5tX3ByZXBhcmVUb0lu
bGluZUNhbGxiYWNrKSB7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChzdHJvbmdUaGlz
LT5tX3ZpZXdDb250cm9sbGVyKQotICAgICAgICAgICAgICAgIFtzdHJvbmdUaGlzLT5tX3BsYXll
clZpZXdDb250cm9sbGVyIHZpZXddLmZyYW1lID0gW3N0cm9uZ1RoaXMtPm1fcGFyZW50VmlldyBj
b252ZXJ0UmVjdDppbmxpbmVSZWN0IHRvVmlldzpuaWxdOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIFtzdHJvbmdUaGlzLT5tX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddLmZy
YW1lID0gaW5saW5lUmVjdDsKKyAgICBpZiAobV9wcmVwYXJlVG9JbmxpbmVDYWxsYmFjaykgewor
ICAgICAgICAKKyAgICAgICAgaWYgKG1fdmlld0NvbnRyb2xsZXIpCisgICAgICAgICAgICBbbV9w
bGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XS5mcmFtZSA9IFttX3BhcmVudFZpZXcgY29udmVydFJl
Y3Q6aW5saW5lUmVjdCB0b1ZpZXc6bmlsXTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgW21f
cGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10uZnJhbWUgPSBpbmxpbmVSZWN0OwogCi0gICAgICAg
ICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoYm9vbCk+IGNhbGxiYWNrID0gV1RGOjptb3ZlKHN0cm9u
Z1RoaXMtPm1fcHJlcGFyZVRvSW5saW5lQ2FsbGJhY2spOwotICAgICAgICAgICAgY2FsbGJhY2so
dmlzaWJsZSk7Ci0gICAgICAgIH0KLSAgICB9KTsKKyAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lk
KGJvb2wpPiBjYWxsYmFjayA9IFdURjo6bW92ZShtX3ByZXBhcmVUb0lubGluZUNhbGxiYWNrKTsK
KyAgICAgICAgY2FsbGJhY2sodmlzaWJsZSk7CisgICAgfQogfQogCiBib29sIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0OjptYXlBdXRvbWF0aWNhbGx5U2hvd1ZpZGVvT3B0aW1pemVk
KCkgY29uc3QKQEAgLTEyNTAsMjEgKzExNTQsMjEgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6d2lsbFN0YXJ0T3B0aW1pemVkRnVsbHNjcmVlbigpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ry
b25nVGhpcyh0aGlzKTsKLSAgICBmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoW3N0cm9uZ1Ro
aXNdKGJvb2wgdmlzaWJsZSkgeworICAgIGZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZShbc3Ry
b25nVGhpcywgdGhpc10oYm9vbCB2aXNpYmxlKSB7CiAgICAgICAgIExPRyhGdWxsc2NyZWVuLCAi
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndpbGxTdGFydE9wdGltaXplZEZ1bGxz
Y3JlZW4gLSBsYW1iZGEoJXApIC0gdmlzaWJsZSglcykiLCBzdHJvbmdUaGlzLmdldCgpLCBib29s
U3RyaW5nKHZpc2libGUpKTsKIAogICAgICAgICBpZiAoIXZpc2libGUpIHsKLSAgICAgICAgICAg
IFtzdHJvbmdUaGlzLT5tX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKKyAgICAgICAgICAgIFttX3dp
bmRvdyBzZXRIaWRkZW46WUVTXTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0g
ICAgICAgIFtbc3Ryb25nVGhpcy0+bV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBsYXlvdXRJ
Zk5lZWRlZF07CisgICAgICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBsYXlvdXRJ
Zk5lZWRlZF07CiAKLSAgICAgICAgW3N0cm9uZ1RoaXMtPm1fcGxheWVyVmlld0NvbnRyb2xsZXIg
ZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpZRVMgY29tcGxldGlvbkhhbmRsZXI6W3N0cm9uZ1RoaXNd
IChCT09MIGNvbXBsZXRlZCwgTlNFcnJvciopIHsKKyAgICAgICAgW21fcGxheWVyVmlld0NvbnRy
b2xsZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpZRVMgY29tcGxldGlvbkhhbmRsZXI6W3N0cm9u
Z1RoaXMsIHRoaXNdIChCT09MIGNvbXBsZXRlZCwgTlNFcnJvciopIHsKICAgICAgICAgICAgIGlm
ICghY29tcGxldGVkKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIHN0cm9u
Z1RoaXMtPmNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3Rh
bmRhcmQpOwotICAgICAgICAgICAgW3N0cm9uZ1RoaXMtPm1fd2luZG93IHNldEhpZGRlbjpZRVNd
OworICAgICAgICAgICAgY2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVl
bk1vZGVTdGFuZGFyZCk7CisgICAgICAgICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOllFU107CiAg
ICAgICAgIH1dOwogICAgIH0pOwogfQpAQCAtMTI3MywxMyArMTE3NywxMCBAQCB2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpkaWRTdGFydE9wdGltaXplZEZ1bGxzY3JlZW4o
KQogewogICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6OmRpZFN0YXJ0T3B0aW1pemVkRnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKICAgICBbbV9wbGF5
ZXJWaWV3Q29udHJvbGxlciBzZXRTaG93c1BsYXliYWNrQ29udHJvbHM6WUVTXTsKKyAgICBbbV93
aW5kb3cgc2V0SGlkZGVuOllFU107CiAKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ+IHN0cm9uZ1RoaXModGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdU
aGlzXSB7Ci0gICAgICAgIFtzdHJvbmdUaGlzLT5tX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKLSAg
ICAgICAgaWYgKHN0cm9uZ1RoaXMtPm1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQotICAgICAg
ICAgICAgc3Ryb25nVGhpcy0+bV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEVudGVyRnVs
bHNjcmVlbigpOwotICAgIH0pOworICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikK
KyAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEVudGVyRnVsbHNjcmVlbigp
OwogfQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3aWxsU3RvcE9w
dGltaXplZEZ1bGxzY3JlZW4oKQpAQCAtMTI4NywxMSArMTE4OCw4IEBAIHZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndpbGxTdG9wT3B0aW1pemVkRnVsbHNjcmVlbigpCiAg
ICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2ls
bFN0b3BPcHRpbWl6ZWRGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOwogICAgIFttX3dpbmRvdyBzZXRI
aWRkZW46Tk9dOwogCi0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
PiBzdHJvbmdUaGlzKHRoaXMpOwotICAgIFdlYlRocmVhZFJ1bihbc3Ryb25nVGhpc10gewotICAg
ICAgICBpZiAoc3Ryb25nVGhpcy0+bV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKLSAgICAgICAgICAg
IHN0cm9uZ1RoaXMtPm1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPnJlcXVlc3RFeGl0RnVsbHNjcmVl
bigpOwotICAgIH0pOworICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQorICAgICAgICBt
X3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZXF1ZXN0RXhpdEZ1bGxzY3JlZW4oKTsKIH0KIAogdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZGlkU3RvcE9wdGltaXplZEZ1bGxz
Y3JlZW4oKQpAQCAtMTMwNSwxMyArMTIwMywxMSBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpkaWRTdG9wT3B0aW1pemVkRnVsbHNjcmVlbigpCiAgICAgW21fdmlkZW9M
YXllckNvbnRhaW5lciBzZXRCYWNrZ3JvdW5kQ29sb3I6W1tnZXRVSUNvbG9yQ2xhc3MoKSBjbGVh
ckNvbG9yXSBDR0NvbG9yXV07CiAgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNl
dEJhY2tncm91bmRDb2xvcjpbZ2V0VUlDb2xvckNsYXNzKCkgY2xlYXJDb2xvcl1dOwogCi0gICAg
UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMp
OwotICAgIFdlYlRocmVhZFJ1bihbc3Ryb25nVGhpc10gewotICAgICAgICBzdHJvbmdUaGlzLT5j
bGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZU9wdGltaXplZCk7
Ci0gICAgICAgIFtzdHJvbmdUaGlzLT5tX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKLSAgICAgICAg
aWYgKHN0cm9uZ1RoaXMtPm1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQotICAgICAgICAgICAg
c3Ryb25nVGhpcy0+bV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEV4aXRGdWxsc2NyZWVu
KCk7Ci0gICAgfSk7CisgICAgY2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNj
cmVlbk1vZGVPcHRpbWl6ZWQpOworICAgIFttX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKKworICAg
IGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAgICAgICAgbV9mdWxsc2NyZWVuQ2hh
bmdlT2JzZXJ2ZXItPmRpZEV4aXRGdWxsc2NyZWVuKCk7CiB9CiAKIHZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndpbGxDYW5jZWxPcHRpbWl6ZWRGdWxsc2NyZWVuKCkKQEAg
LTEzMjEsMTEgKzEyMTcsOCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
Ojp3aWxsQ2FuY2VsT3B0aW1pemVkRnVsbHNjcmVlbigpCiAgICAgW21fdmlkZW9MYXllckNvbnRh
aW5lciBzZXRCYWNrZ3JvdW5kQ29sb3I6W1tnZXRVSUNvbG9yQ2xhc3MoKSBjbGVhckNvbG9yXSBD
R0NvbG9yXV07CiAgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEJhY2tncm91
bmRDb2xvcjpbZ2V0VUlDb2xvckNsYXNzKCkgY2xlYXJDb2xvcl1dOwogCi0gICAgUmVmUHRyPFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOwotICAgIFdl
YlRocmVhZFJ1bihbc3Ryb25nVGhpc10gewotICAgICAgICBpZiAoc3Ryb25nVGhpcy0+bV92aWRl
b0Z1bGxzY3JlZW5Nb2RlbCkKLSAgICAgICAgICAgIHN0cm9uZ1RoaXMtPm1fdmlkZW9GdWxsc2Ny
ZWVuTW9kZWwtPnJlcXVlc3RFeGl0RnVsbHNjcmVlbigpOwotICAgIH0pOworICAgIGlmIChtX3Zp
ZGVvRnVsbHNjcmVlbk1vZGVsKQorICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZXF1
ZXN0RXhpdEZ1bGxzY3JlZW4oKTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6ZGlkQ2FuY2VsT3B0aW1pemVkRnVsbHNjcmVlbigpCkBAIC0xMzM0LDEzICsxMjI3
LDExIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZENhbmNlbE9w
dGltaXplZEZ1bGxzY3JlZW4oKQogICAgIGlmIChoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnQ6OlZp
ZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlzKTsKLSAg
ICBXZWJUaHJlYWRSdW4oW3N0cm9uZ1RoaXNdIHsKLSAgICAgICAgc3Ryb25nVGhpcy0+Y2xlYXJN
b2RlKEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVPcHRpbWl6ZWQpOwotICAg
ICAgICBbc3Ryb25nVGhpcy0+bV93aW5kb3cgc2V0SGlkZGVuOllFU107Ci0gICAgICAgIGlmIChz
dHJvbmdUaGlzLT5tX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAgICAgIHN0cm9u
Z1RoaXMtPm1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFeGl0RnVsbHNjcmVlbigpOwot
ICAgIH0pOworICAgIGNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5N
b2RlT3B0aW1pemVkKTsKKyAgICBbbV93aW5kb3cgc2V0SGlkZGVuOllFU107CisKKyAgICBpZiAo
bV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCisgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9i
c2VydmVyLT5kaWRFeGl0RnVsbHNjcmVlbigpOwogfQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0OjpwcmVwYXJlRm9yT3B0aW1pemVkRnVsbHNjcmVlblN0b3BXaXRoQ29t
cGxldGlvbkhhbmRsZXIodm9pZCAoXmNvbXBsZXRpb25IYW5kbGVyKShCT09MIHJlc3RvcmVkKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbQppbmRleCAzNWI1MTM3YTRmNWJiZjRi
ZDE5ZjhmZjAwZDhmNjUzNjdlM2UxY2NiLi5iZmM0MTFkODYxYjQ0YWRjMDcyZGMzYjA4NTM1YzIz
ODUwNzhiNzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tCkBAIC0xNzks
MTI1ICsxNzksNzQgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6
c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIoUGxhdGZvcm1MYXllcioKICAgICBbbV92aWRlb0Z1bGxz
Y3JlZW5MYXllciBzZXRBbmNob3JQb2ludDpDR1BvaW50TWFrZSgwLjUsIDAuNSldOwogICAgIFtt
X3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNldEJvdW5kczptX3ZpZGVvRnJhbWVdOwogICAgIAotICAg
IF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBwcm90
ZWN0KHRoaXMpOwotICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAobV92aWRlb0VsZW1l
bnQpCi0gICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIo
bV92aWRlb0Z1bGxzY3JlZW5MYXllci5nZXQoKSk7Ci0gICAgICAgIHByb3RlY3QuY2xlYXIoKTsK
LSAgICB9KTsKKyAgICBpZiAobV92aWRlb0VsZW1lbnQpCisgICAgICAgIG1fdmlkZW9FbGVtZW50
LT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihtX3ZpZGVvRnVsbHNjcmVlbkxheWVyLmdldCgpKTsK
IH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6cGxheSgpCiB7
Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+
IHByb3RlY3QodGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIGlmIChtX3ZpZGVv
RWxlbWVudCkKLSAgICAgICAgICAgIG1fdmlkZW9FbGVtZW50LT5wbGF5KCk7Ci0gICAgICAgIHBy
b3RlY3QuY2xlYXIoKTsKLSAgICB9KTsKKyAgICBpZiAobV92aWRlb0VsZW1lbnQpCisgICAgICAg
IG1fdmlkZW9FbGVtZW50LT5wbGF5KCk7CiB9CiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ6OnBhdXNlKCkKIHsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAgICBXZWJUaHJlYWRS
dW4oXnsKLSAgICAgICAgaWYgKG1fdmlkZW9FbGVtZW50KQotICAgICAgICAgICAgbV92aWRlb0Vs
ZW1lbnQtPnBhdXNlKCk7Ci0gICAgICAgIHByb3RlY3QuY2xlYXIoKTsKLSAgICB9KTsKKyAgICBp
ZiAobV92aWRlb0VsZW1lbnQpCisgICAgICAgIG1fdmlkZW9FbGVtZW50LT5wYXVzZSgpOwogfQog
CiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojp0b2dnbGVQbGF5U3Rh
dGUoKQogewotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50PiBwcm90ZWN0KHRoaXMpOwotICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAo
bV92aWRlb0VsZW1lbnQpCi0gICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+dG9nZ2xlUGxheVN0
YXRlKCk7Ci0gICAgICAgIHByb3RlY3QuY2xlYXIoKTsKLSAgICB9KTsKKyAgICBpZiAobV92aWRl
b0VsZW1lbnQpCisgICAgICAgIG1fdmlkZW9FbGVtZW50LT50b2dnbGVQbGF5U3RhdGUoKTsKIH0K
IAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6YmVnaW5TY3J1YmJp
bmcoKQogewotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50PiBwcm90ZWN0KHRoaXMpOwotICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAo
bV92aWRlb0VsZW1lbnQpCi0gICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+YmVnaW5TY3J1YmJp
bmcoKTsKLSAgICAgICAgcHJvdGVjdC5jbGVhcigpOwotICAgIH0pOworICAgIGlmIChtX3ZpZGVv
RWxlbWVudCkKKyAgICAgICAgbV92aWRlb0VsZW1lbnQtPmJlZ2luU2NydWJiaW5nKCk7CiB9CiAK
IHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmVuZFNjcnViYmluZygp
CiB7Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQ+IHByb3RlY3QodGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIGlmIChtX3Zp
ZGVvRWxlbWVudCkKLSAgICAgICAgICAgIG1fdmlkZW9FbGVtZW50LT5lbmRTY3J1YmJpbmcoKTsK
LSAgICAgICAgcHJvdGVjdC5jbGVhcigpOwotICAgIH0pOworICAgIGlmIChtX3ZpZGVvRWxlbWVu
dCkKKyAgICAgICAgbV92aWRlb0VsZW1lbnQtPmVuZFNjcnViYmluZygpOwogfQogCiB2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZWVrVG9UaW1lKGRvdWJsZSB0aW1l
KQogewotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50PiBwcm90ZWN0KHRoaXMpOwotICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAobV92
aWRlb0VsZW1lbnQpCi0gICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+c2V0Q3VycmVudFRpbWUo
dGltZSk7Ci0gICAgICAgIHByb3RlY3QuY2xlYXIoKTsKLSAgICB9KTsKKyAgICBpZiAobV92aWRl
b0VsZW1lbnQpCisgICAgICAgIG1fdmlkZW9FbGVtZW50LT5zZXRDdXJyZW50VGltZSh0aW1lKTsK
IH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6ZmFzdFNlZWso
ZG91YmxlIHRpbWUpCiB7Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAg
ICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKLSAgICAgICAgICAgIG1fdmlkZW9FbGVtZW50LT5mYXN0
U2Vlayh0aW1lKTsKLSAgICAgICAgcHJvdGVjdC5jbGVhcigpOwotICAgIH0pOworICAgIGlmICht
X3ZpZGVvRWxlbWVudCkKKyAgICAgICAgbV92aWRlb0VsZW1lbnQtPmZhc3RTZWVrKHRpbWUpOwog
fQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpiZWdpblNjYW5u
aW5nRm9yd2FyZCgpCiB7Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAg
ICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKLSAgICAgICAgICAgIG1fdmlkZW9FbGVtZW50LT5iZWdp
blNjYW5uaW5nKE1lZGlhQ29udHJvbGxlckludGVyZmFjZTo6Rm9yd2FyZCk7Ci0gICAgICAgIHBy
b3RlY3QuY2xlYXIoKTsKLSAgICB9KTsKKyAgICBpZiAobV92aWRlb0VsZW1lbnQpCisgICAgICAg
IG1fdmlkZW9FbGVtZW50LT5iZWdpblNjYW5uaW5nKE1lZGlhQ29udHJvbGxlckludGVyZmFjZTo6
Rm9yd2FyZCk7CiB9CiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6
OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpCiB7Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7Ci0gICAgV2ViVGhyZWFk
UnVuKF57Ci0gICAgICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKLSAgICAgICAgICAgIG1fdmlkZW9F
bGVtZW50LT5iZWdpblNjYW5uaW5nKE1lZGlhQ29udHJvbGxlckludGVyZmFjZTo6QmFja3dhcmQp
OwotICAgICAgICBwcm90ZWN0LmNsZWFyKCk7Ci0gICAgfSk7CisgICAgaWYgKG1fdmlkZW9FbGVt
ZW50KQorICAgICAgICBtX3ZpZGVvRWxlbWVudC0+YmVnaW5TY2FubmluZyhNZWRpYUNvbnRyb2xs
ZXJJbnRlcmZhY2U6OkJhY2t3YXJkKTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudDo6ZW5kU2Nhbm5pbmcoKQogewotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBwcm90ZWN0KHRoaXMpOwotICAgIFdlYlRo
cmVhZFJ1biheewotICAgICAgICBpZiAobV92aWRlb0VsZW1lbnQpCi0gICAgICAgICAgICBtX3Zp
ZGVvRWxlbWVudC0+ZW5kU2Nhbm5pbmcoKTsKLSAgICAgICAgcHJvdGVjdC5jbGVhcigpOwotICAg
IH0pOworICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKKyAgICAgICAgbV92aWRlb0VsZW1lbnQtPmVu
ZFNjYW5uaW5nKCk7CiB9CiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQ6OnJlcXVlc3RFeGl0RnVsbHNjcmVlbigpCiB7Ci0gICAgaWYgKCFtX3ZpZGVvRWxlbWVudCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0g
ICAgICAgIGlmIChtX3ZpZGVvRWxlbWVudCAmJiBtX3ZpZGVvRWxlbWVudC0+aXNGdWxsc2NyZWVu
KCkpCi0gICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+ZXhpdEZ1bGxzY3JlZW4oKTsKLSAgICAg
ICAgcHJvdGVjdC5jbGVhcigpOwotICAgIH0pOworICAgIGlmIChtX3ZpZGVvRWxlbWVudCAmJiBt
X3ZpZGVvRWxlbWVudC0+aXNGdWxsc2NyZWVuKCkpCisgICAgICAgIG1fdmlkZW9FbGVtZW50LT5l
eGl0RnVsbHNjcmVlbigpOwogfQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50OjpzZXRWaWRlb0xheWVyRnJhbWUoRmxvYXRSZWN0IHJlY3QpCkBAIC00NTQsMTIgKzQw
Myw4IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQ6OmV2ZW50TmFtZUFsbCgpCiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQ6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVlbk1vZGUpCiB7Ci0gICAgX19ibG9jayBSZWZQdHI8
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7Ci0gICAg
V2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKLSAgICAgICAgICAg
IG1fdmlkZW9FbGVtZW50LT5mdWxsc2NyZWVuTW9kZUNoYW5nZWQodmlkZW9GdWxsc2NyZWVuTW9k
ZSk7Ci0gICAgICAgIHByb3RlY3QuY2xlYXIoKTsKLSAgICB9KTsKKyAgICBpZiAobV92aWRlb0Vs
ZW1lbnQpCisgICAgICAgIG1fdmlkZW9FbGVtZW50LT5mdWxsc2NyZWVuTW9kZUNoYW5nZWQodmlk
ZW9GdWxsc2NyZWVuTW9kZSk7CiB9CiAKICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253567</attachid>
            <date>2015-05-21 18:16:48 -0700</date>
            <delta_ts>2015-05-22 14:59:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143954-20150521181643.patch</filename>
            <type>text/plain</type>
            <size>64314</size>
            <attacher name="Jeremy Jones">jeremyj-wk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg0NzM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGFhMTExNjZhNzRlM2M3
ODYwZTU0MzFhZjE1ODZiZDcxMjM1ZmUwZC4uNDkyNDA0NWMxZjk3YWNkYzM3NTIyYjI2M2RmNzM5
YzI2YzFlMzZhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExOSBAQAorMjAxNS0wNC0yMCAgSmVy
ZW15IEpvbmVzICA8amVyZW15akBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgV2ViS2l0
MSBzcGVjaWZpYyB0aHJlYWRpbmcgY29kZSBvdXQgb2YgV2ViVmlkZW9GdWxsc2NyZWVuIGNvZGUg
dGhhdCBpcyBzaGFyZWQgd2l0aCBXZWJLaXQyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQzOTU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQgaXMg
dXNlZCBpbiBib3RoIFdlYktpdDEgYW5kIFdlYktpdDIuIEluIFdlYktpdDEsIHRoZSBtb2RlbCBy
dW5zIGluIHRoZSBXZWJUaHJlYWQsIHdoaWxlCisgICAgICAgIHRoZSBpbnRlcmZhY2UgaXMgb24g
dGhlIG1haW4gdGhyZWFkLiBTbyB0aGVyZSBpcyBjb2RlIHRvIGRpc3BhdGNoIGJldHdlZW4gdGhl
c2UgdHdvIHRocmVhZCB3aGVuIGNvbW11bmljYXRpbmcgYmV0d2VlbiB0aGUKKyAgICAgICAgaW50
ZXJmYWNlIGFuZCB0aGUgbW9kZWwuIEluIFdlYktpdDIsIHRoaXMgaXMgaGFuZGxlZCBhdXRvbWF0
aWNhbGx5IGJ5IHRoZSBJUEMgbWVjaGFuaXNtLiBBcyBhIHJlc3VsdCwgdGhlIHRocmVhZGluZyBj
b2RlCisgICAgICAgIGluIFdlYlZpZGVvRnVsbHNjcmVlbmJJbnRlcmZhY2VBVktpdCBhbmQgaW4g
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQgaXMgcmVkdW5kYW50IGluIFdlYktp
dDIgYW5kIHJlbGllcyBvbgorICAgICAgICBXZWJUaHJlYWRSdW4gYmVpbmcgYSBuby1vcCBpbiBX
ZWJLaXQyLgorCisgICAgICAgIFRoaXMgY2hhbmdlIGNsYXJpZmllcyB0aGlzIGFuZCBzaW1wbGlm
aWVzIHRoZSBXZWJLaXQyIHBhdGggYnkgbW92aW5nIHRoZSBXZWJLaXQxIHNwZWNpZmljIHRocmVh
ZGluZyBjb2RlIGludG8KKyAgICAgICAgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQsIHdoaWNoIGlzIHRoZSBXZWJLaXQxIHNwZWNpZmljIGNvbnRyb2xsZXIuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tOgorICAg
ICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OldlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0KToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0OjpzZXRDb250cm9sbGVyKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpkaWRTZXR1cEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZEV4aXRGdWxsc2NyZWVuKToKKyAgICAg
ICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpkaWRDbGVhbnVwRnVsbHNj
cmVlbik6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZnVs
bHNjcmVlbk1heVJldHVyblRvSW5saW5lKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpyZXNldE1lZGlhU3RhdGUpOgorICAgICAgICAoV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldER1cmF0aW9uKToKKyAgICAgICAgKFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRDdXJyZW50VGltZSk6CisgICAgICAgIChX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0QnVmZmVyZWRUaW1lKToKKyAg
ICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRSYXRlKToKKyAg
ICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRWaWRlb0RpbWVu
c2lvbnMpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNl
dFNlZWthYmxlUmFuZ2VzKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpzZXRDYW5QbGF5RmFzdFJldmVyc2UpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKToKKyAg
ICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRMZWdpYmxlTWVk
aWFTZWxlY3Rpb25PcHRpb25zKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OjpzZXRFeHRlcm5hbFBsYXliYWNrKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0OjpwbGF5KToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpwYXVzZSk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6dG9nZ2xlUGxheVN0YXRlKToKKyAgICAgICAgKFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpiZWdpblNjcnViYmluZyk6CisgICAgICAgIChXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZW5kU2NydWJiaW5nKToKKyAgICAgICAg
KFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWVrVG9UaW1lKToKKyAgICAg
ICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpmYXN0U2Vlayk6CisgICAg
ICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YmVnaW5TY2FubmluZ0Zv
cndhcmQpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmJl
Z2luU2Nhbm5pbmdCYWNrd2FyZCk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6ZW5kU2Nhbm5pbmcpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OnJlcXVlc3RFeGl0RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0VmlkZW9MYXllckZyYW1lKToKKyAgICAg
ICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRWaWRlb0xheWVyR3Jh
dml0eSk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vs
ZWN0QXVkaW9NZWRpYU9wdGlvbik6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKToKKyAgICAgICAgKFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQpOgorICAg
ICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldHVwRnVsbHNjcmVl
bik6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXhpdEZ1
bGxzY3JlZW4pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyIGluaXRdKToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlciBkZWFsbG9jXSk6CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXIgZW50ZXJGdWxsc2NyZWVuOm1vZGU6XSk6CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXIgZXhpdEZ1bGxzY3JlZW5dKToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlciByZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuXSk6CisgICAgICAgICgt
W1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIgZGlkRmluaXNoRnVsbHNjcmVlbjpdKToKKyAg
ICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDaGFuZ2VPYnNlcnZlcjo6c2V0VGFy
Z2V0KTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBk
aWRTZXR1cEZ1bGxzY3JlZW5dKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlciBkaWRFbnRlckZ1bGxzY3JlZW5dKTogRGVsZXRlZC4KKyAgICAgICAgKC1b
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBkaWRFeGl0RnVsbHNjcmVlbl0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIGRpZENsZWFudXBGdWxs
c2NyZWVuXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXIgZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lXSk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lmg6CisgICAgICAgICog
cGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tOgorICAgICAg
ICAoLVtXZWJBVlZpZGVvTGF5ZXIgc2V0Qm91bmRzOl0pOgorICAgICAgICAoLVtXZWJBVlZpZGVv
TGF5ZXIgcmVzb2x2ZUJvdW5kc10pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OnJlc2V0TWVkaWFTdGF0ZSk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6c2V0RHVyYXRpb24pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OnNldEN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjpzZXRCdWZmZXJlZFRpbWUpOgorICAgICAgICAoV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFJhdGUpOgorICAgICAgICAoV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFZpZGVvRGltZW5zaW9ucyk6CisgICAgICAgIChXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0U2Vla2FibGVSYW5nZXMpOgorICAgICAg
ICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldENhblBsYXlGYXN0UmV2ZXJz
ZSk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0QXVkaW9N
ZWRpYVNlbGVjdGlvbk9wdGlvbnMpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OnNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMpOgorICAgICAgICAoV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldEV4dGVybmFsUGxheWJhY2spOgorICAg
ICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldHVwRnVsbHNjcmVlbik6
CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2Ny
ZWVuKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1
bGxzY3JlZW5TdGFuZGFyZCk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6ZXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OmV4aXRGdWxsc2NyZWVuSW50ZXJuYWwpOgorICAgICAgICAoV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmNsZWFudXBGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpjbGVhbnVwRnVsbHNjcmVlbkludGVybmFsKToK
KyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpyZXF1ZXN0SGlkZUFu
ZEV4aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OndpbGxTdGFydE9wdGltaXplZEZ1bGxzY3JlZW4pOgorICAgICAg
ICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZFN0YXJ0T3B0aW1pemVkRnVs
bHNjcmVlbik6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2ls
bFN0b3BPcHRpbWl6ZWRGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpkaWRTdG9wT3B0aW1pemVkRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2lsbENhbmNlbE9wdGltaXplZEZ1bGxzY3Jl
ZW4pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZENhbmNl
bE9wdGltaXplZEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OnNldFZpZGVvTGF5ZXJGcmFtZSk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdDo6c2V0dXBGdWxsc2NyZWVuSW50ZXJuYWwpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oOgorICAgICAgICAq
IHBsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5t
bToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRl
b0Z1bGxzY3JlZW5MYXllcik6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudDo6cGxheSk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudDo6cGF1c2UpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQ6OnRvZ2dsZVBsYXlTdGF0ZSk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZp
ZGVvRWxlbWVudDo6YmVnaW5TY3J1YmJpbmcpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQ6OmVuZFNjcnViYmluZyk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2Vla1RvVGltZSk6CisgICAgICAgIChXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6ZmFzdFNlZWspOgorICAgICAgICAoV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKToKKyAgICAg
ICAgKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpiZWdpblNjYW5uaW5nQmFj
a3dhcmQpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmVu
ZFNjYW5uaW5nKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
OjpyZXF1ZXN0RXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCk6CisgICAgICAgIChXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6dmlkZW9MYXllckZyYW1lKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojp2aWRlb0xheWVy
R3Jhdml0eSk6IERlbGV0ZWQuCisKIDIwMTUtMDUtMjEgIEpha2UgTmllbHNlbiAgPGphY29iX25p
ZWxzZW5AYXBwbGUuY29tPgogCiAgICAgICAgIHIxODQ3MTggYW5kIHIxODQ3MjUgY2F1c2VkIGZv
dXIgdGVzdHMgdG8gYmVnaW4gY3Jhc2hpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1t
CmluZGV4IGIxYzBiZTkwNDVkMDBhNTUyMTZkMTZlZTU3MTcwYjI0ZjMyNjFlOGQuLmNiZjdkNWFi
YWQwZDEzNTk4Mzk3ZDk4NTY0MzFjMDQxMmU0NmZjMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJBVktpdC5tbQpAQCAtMzAsNiArMzAsNyBAQAogI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckFWS2l0LmgiCiAKICNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIlRpbWVS
YW5nZXMuaCIKICNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgiCiAj
aW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oIgogI2ltcG9ydCA8
UXVhcnR6Q29yZS9Db3JlQW5pbWF0aW9uLmg+CkBAIC01MSw3ICs1Miw3IEBAIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogICAgIHJldHVybiBudWxscHRyOwogfQogCi0tICh2b2lkKWVudGVyRnVs
bHNjcmVlbjooVUlWaWV3ICopdmlldyBtb2RlOihXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlKW1vZGUKKy0gKHZvaWQpZW50ZXJGdWxsc2NyZWVuOihVSVZpZXcg
Kil2aWV3IG1vZGU6KFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZSltb2RlCiB7CiAgICAgVU5VU0VEX1BBUkFNKHZpZXcpOwogICAgIFVOVVNFRF9QQVJB
TShtb2RlKTsKQEAgLTY4LDMyICs2OSw0ODYgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
ICNlbHNlCiAKLUBpbnRlcmZhY2UgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciAoRnVsbHNj
cmVlbk9ic2VydmF0aW9uKQotLSAodm9pZClkaWRTZXR1cEZ1bGxzY3JlZW47Ci0tICh2b2lkKWRp
ZEVudGVyRnVsbHNjcmVlbjsKLS0gKHZvaWQpZGlkRXhpdEZ1bGxzY3JlZW47Ci0tICh2b2lkKWRp
ZENsZWFudXBGdWxsc2NyZWVuOwotLSAodm9pZClmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmU7
CitjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDsKKworQGludGVyZmFj
ZSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIChkZWxlZ2F0ZSkKKy0odm9pZClkaWRGaW5p
c2hGdWxsc2NyZWVuOihXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dCopY29udGV4
dDsKIEBlbmQKIAotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNoYW5nZU9ic2Vy
dmVyIDogcHVibGljIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyIHsKLSAgICBXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyKiBfdGFyZ2V0OworY2xhc3MgV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQgZmluYWwKKyAgICA6IHByaXZhdGUgV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlCisgICAgLCBwcml2YXRlIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsCisgICAg
LCBwcml2YXRlIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyCisgICAgLCBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+
IHsKKwogcHVibGljOgotICAgIHZvaWQgc2V0VGFyZ2V0KFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXIqIHRhcmdldCkgeyBfdGFyZ2V0ID0gdGFyZ2V0OyB9Ci0gICAgdmlydHVhbCB2b2lkIGRp
ZFNldHVwRnVsbHNjcmVlbigpIG92ZXJyaWRlIHsgW190YXJnZXQgZGlkU2V0dXBGdWxsc2NyZWVu
XTsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRFbnRlckZ1bGxzY3JlZW4oKSBvdmVycmlkZSB7IFtf
dGFyZ2V0IGRpZEVudGVyRnVsbHNjcmVlbl07IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkRXhpdEZ1
bGxzY3JlZW4oKSBvdmVycmlkZSB7IFtfdGFyZ2V0IGRpZEV4aXRGdWxsc2NyZWVuXTsgfQotICAg
IHZpcnR1YWwgdm9pZCBkaWRDbGVhbnVwRnVsbHNjcmVlbigpIG92ZXJyaWRlIHsgW190YXJnZXQg
ZGlkQ2xlYW51cEZ1bGxzY3JlZW5dOyB9Ci0gICAgdmlydHVhbCB2b2lkIGZ1bGxzY3JlZW5NYXlS
ZXR1cm5Ub0lubGluZSgpIG92ZXJyaWRlIHsgW190YXJnZXQgZnVsbHNjcmVlbk1heVJldHVyblRv
SW5saW5lXTsgfQorICAgIHN0YXRpYyBSZWY8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dCk7CisgICAgfQorICAgIAorICAgIHZvaWQg
c2V0Q29udHJvbGxlcihXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyKiBjb250cm9sbGVyKSB7
IG1fY29udHJvbGxlciA9IGNvbnRyb2xsZXI7IH0KKyAgICB2b2lkIHNldFVwRnVsbHNjcmVlbihI
VE1MVmlkZW9FbGVtZW50JiwgVUlWaWV3ICosIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9G
dWxsc2NyZWVuTW9kZSk7CisgICAgdm9pZCBleGl0RnVsbHNjcmVlbigpOworICAgIHZvaWQgcmVx
dWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpOworICAgIHZvaWQgaW52YWxpZGF0ZSgpOworCitw
cml2YXRlOgorICAgIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0KCkgeyB9CisK
KyAgICAvLyBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcgorICAgIHZpcnR1YWwgdm9p
ZCBkaWRTZXR1cEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRW50
ZXJGdWxsc2NyZWVuKCkgb3ZlcnJpZGUgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZEV4aXRGdWxs
c2NyZWVuKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZENsZWFudXBGdWxsc2NyZWVu
KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGlu
ZSgpIG92ZXJyaWRlOworICAgIAorICAgIC8vIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZQor
ICAgIHZpcnR1YWwgdm9pZCByZXNldE1lZGlhU3RhdGUoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0RHVyYXRpb24oZG91YmxlKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
Q3VycmVudFRpbWUoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIHNldEJ1ZmZlcmVkVGltZShkb3VibGUpIG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRSYXRlKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1Jh
dGUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRWaWRlb0RpbWVuc2lvbnMoYm9vbCBo
YXNWaWRlbywgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCB2b2lkIHNldFNlZWthYmxlUmFuZ2VzKGNvbnN0IFRpbWVSYW5nZXMmKSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0Q2FuUGxheUZhc3RSZXZlcnNlKGJvb2wpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBzZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25zdCBWZWN0b3I8
U3RyaW5nPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIHNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9y
PFN0cmluZz4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBzZXRFeHRlcm5hbFBsYXliYWNrKGJvb2wgZW5hYmxlZCwgRXh0ZXJuYWxQ
bGF5YmFja1RhcmdldFR5cGUsIFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKSBvdmVycmlkZTsK
KyAgICAKKyAgICAvLyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbAorICAgIHZpcnR1YWwgdm9pZCBw
bGF5KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHBhdXNlKCkgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIHRvZ2dsZVBsYXlTdGF0ZSgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9p
ZCBiZWdpblNjcnViYmluZygpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmRTY3J1YmJp
bmcoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Vla1RvVGltZShkb3VibGUgdGltZSkg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGZhc3RTZWVrKGRvdWJsZSB0aW1lKSBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5TY2FubmluZ0ZvcndhcmQoKSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgYmVnaW5TY2FubmluZ0JhY2t3YXJkKCkgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB2b2lkIGVuZFNjYW5uaW5nKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHJlcXVl
c3RFeGl0RnVsbHNjcmVlbigpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRWaWRlb0xh
eWVyRnJhbWUoRmxvYXRSZWN0KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCB2aWRl
b0xheWVyRnJhbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2ZyYW1lOyB9CisgICAgdmly
dHVhbCB2b2lkIHNldFZpZGVvTGF5ZXJHcmF2aXR5KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpW
aWRlb0dyYXZpdHkpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgVmlkZW9HcmF2aXR5IHZpZGVvTGF5
ZXJHcmF2aXR5KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9ncmF2aXR5OyB9CisgICAgdmly
dHVhbCB2b2lkIHNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5k
ZXgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBmdWxsc2NyZWVuTW9kZUNoYW5nZWQoSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKSBvdmVycmlkZTsKKyAgICAK
KyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IG1faW50ZXJmYWNl
OworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbV9tb2Rl
bDsKKyAgICBSZWZQdHI8SFRNTFZpZGVvRWxlbWVudD4gbV92aWRlb0VsZW1lbnQ7CisgICAgUmV0
YWluUHRyPFBsYXRmb3JtTGF5ZXI+IG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXI7CisgICAgUmV0YWlu
UHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXI+IG1fY29udHJvbGxlcjsKKyAgICBGbG9h
dFJlY3QgbV9mcmFtZTsKKyAgICBWaWRlb0dyYXZpdHkgbV9ncmF2aXR5OwogfTsKIAotQGltcGxl
bWVudGF0aW9uIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIKKyNwcmFnbWEgbWFyayBXZWJW
aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcgorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpkaWRTZXR1cEZ1bGxzY3JlZW4oKQogeworICAgIEFTU0VSVChpc1VJ
VGhyZWFkKCkpOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oW3N0cm9uZ1RoaXMsIHRoaXNd
IHsKKyAgICAgICAgbV9tb2RlbC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIobV92aWRlb0Z1bGxz
Y3JlZW5MYXllci5nZXQoKSk7CisgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9t
YWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCB0aGlzXSB7CisgICAgICAgICAgICBtX2ludGVyZmFj
ZS0+ZW50ZXJGdWxsc2NyZWVuKCk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpkaWRFeGl0RnVsbHNjcmVlbigpCit7
CisgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0PiBzdHJvbmdUaGlzKHRoaXMpOworICAgIFdlYlRocmVhZFJ1bihb
c3Ryb25nVGhpcywgdGhpc10geworICAgICAgICBtX21vZGVsLT5zZXRWaWRlb0Z1bGxzY3JlZW5M
YXllcihuaWwpOworICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1
ZSgpLCBbc3Ryb25nVGhpcywgdGhpc10geworICAgICAgICAgICAgbV9pbnRlcmZhY2UtPmNsZWFu
dXBGdWxsc2NyZWVuKCk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpkaWRDbGVhbnVwRnVsbHNjcmVlbigpCit7Cisg
ICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CisgICAgbV9pbnRlcmZhY2UtPnNldFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsKG51bGxwdHIpOworICAgIG1faW50ZXJmYWNlLT5zZXRXZWJWaWRlb0Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlcihudWxscHRyKTsKKyAgICBtX2ludGVyZmFjZSA9IG51bGxwdHI7
CisgICAgCisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBz
dHJvbmdUaGlzKHRoaXMpOworICAgIFdlYlRocmVhZFJ1bihbc3Ryb25nVGhpcywgdGhpc10gewor
ICAgICAgICBtX21vZGVsLT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihuaWwpOworICAgICAgICBt
X21vZGVsLT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UobnVsbHB0cik7CisgICAgICAg
IG1fbW9kZWwtPnNldFZpZGVvRWxlbWVudChudWxscHRyKTsKKyAgICAgICAgbV9tb2RlbCA9IG51
bGxwdHI7CisgICAgICAgIG1fdmlkZW9FbGVtZW50ID0gbnVsbHB0cjsKKyAgICAgICAgbV92aWRl
b0Z1bGxzY3JlZW5MYXllciA9IG5pbDsKKyAgICAgICAgCisgICAgICAgIFttX2NvbnRyb2xsZXIg
ZGlkRmluaXNoRnVsbHNjcmVlbjp0aGlzXTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKCkK
K3sKKyAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7CisgICAgV2ViVGhyZWFkUnVu
KFtzdHJvbmdUaGlzLCB0aGlzXSB7CisgICAgICAgIEludFJlY3QgY2xpZW50UmVjdCA9IG1fdmlk
ZW9FbGVtZW50LT5jbGllbnRSZWN0KCk7CisgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNo
X2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCB0aGlzLCBjbGllbnRSZWN0XSB7CisgICAg
ICAgICAgICBtX2ludGVyZmFjZS0+cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKHRydWUsIGNsaWVu
dFJlY3QpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKworI3ByYWdtYSBtYXJrIFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpyZXNldE1lZGlhU3RhdGUoKQoreworICAgIEFTU0VSVChXZWJUaHJlYWRJc0N1cnJl
bnQoKSB8fCBpc01haW5UaHJlYWQoKSk7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0PiBzdHJvbmdUaGlzKHRoaXMpOworICAgIGRpc3BhdGNoX2FzeW5jKGRp
c3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCB0aGlzXSB7CisgICAgICAgIGlm
IChtX2ludGVyZmFjZSkKKyAgICAgICAgICAgIG1faW50ZXJmYWNlLT5yZXNldE1lZGlhU3RhdGUo
KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dDo6c2V0RHVyYXRpb24oZG91YmxlIGR1cmF0aW9uKQoreworICAgIEFTU0VSVChXZWJUaHJlYWRJ
c0N1cnJlbnQoKSk7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0PiBzdHJvbmdUaGlzKHRoaXMpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9t
YWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCB0aGlzLCBkdXJhdGlvbl0geworICAgICAgICBpZiAo
bV9pbnRlcmZhY2UpCisgICAgICAgICAgICBtX2ludGVyZmFjZS0+c2V0RHVyYXRpb24oZHVyYXRp
b24pOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpzZXRDdXJyZW50VGltZShkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1l
KQoreworICAgIEFTU0VSVChXZWJUaHJlYWRJc0N1cnJlbnQoKSk7CisgICAgUmVmUHRyPFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBzdHJvbmdUaGlzKHRoaXMpOworICAgIGRp
c3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCB0aGlz
LCBjdXJyZW50VGltZSwgYW5jaG9yVGltZV0geworICAgICAgICBpZiAobV9pbnRlcmZhY2UpCisg
ICAgICAgICAgICBtX2ludGVyZmFjZS0+c2V0Q3VycmVudFRpbWUoY3VycmVudFRpbWUsIGFuY2hv
clRpbWUpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpzZXRCdWZmZXJlZFRpbWUoZG91YmxlIGJ1ZmZlcmVkVGltZSkKK3sKKyAgICBBU1NF
UlQoV2ViVGhyZWFkSXNDdXJyZW50KCkpOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBkaXNwYXRjaF9hc3luYyhk
aXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpcywgdGhpcywgYnVmZmVyZWRUaW1l
XSB7CisgICAgICAgIGlmIChtX2ludGVyZmFjZSkKKyAgICAgICAgICAgIG1faW50ZXJmYWNlLT5z
ZXRCdWZmZXJlZFRpbWUoYnVmZmVyZWRUaW1lKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0UmF0ZShib29sIGlzUGxheWluZywgZmxv
YXQgcGxheWJhY2tSYXRlKQoreworICAgIEFTU0VSVChXZWJUaHJlYWRJc0N1cnJlbnQoKSk7Cisg
ICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBzdHJvbmdUaGlz
KHRoaXMpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtz
dHJvbmdUaGlzLCB0aGlzLCBpc1BsYXlpbmcsIHBsYXliYWNrUmF0ZV0geworICAgICAgICBpZiAo
bV9pbnRlcmZhY2UpCisgICAgICAgICAgICBtX2ludGVyZmFjZS0+c2V0UmF0ZShpc1BsYXlpbmcs
IHBsYXliYWNrUmF0ZSk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OnNldFZpZGVvRGltZW5zaW9ucyhib29sIGhhc1ZpZGVvLCBmbG9hdCB3
aWR0aCwgZmxvYXQgaGVpZ2h0KQoreworICAgIEFTU0VSVChXZWJUaHJlYWRJc0N1cnJlbnQoKSk7
CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBzdHJvbmdU
aGlzKHRoaXMpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCks
IFtzdHJvbmdUaGlzLCB0aGlzLCBoYXNWaWRlbywgd2lkdGgsIGhlaWdodF0geworICAgICAgICBp
ZiAobV9pbnRlcmZhY2UpCisgICAgICAgICAgICBtX2ludGVyZmFjZS0+c2V0VmlkZW9EaW1lbnNp
b25zKGhhc1ZpZGVvLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0U2Vla2FibGVSYW5nZXMoY29uc3QgVGlt
ZVJhbmdlcyYgdGltZVJhbmdlcykKK3sKKyAgICBBU1NFUlQoV2ViVGhyZWFkSXNDdXJyZW50KCkp
OworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25n
VGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8VGltZVJhbmdlcz4gdGltZVJhbmdlc1JlZiA9IHRpbWVS
YW5nZXMuY29weSgpOworICAgIGF1dG8gYmxvY2sgPSBbc3Ryb25nVGhpcywgdGhpcywgdGltZVJh
bmdlc1JlZl0geworICAgICAgICBpZiAobV9pbnRlcmZhY2UpCisgICAgICAgICAgICBtX2ludGVy
ZmFjZS0+c2V0U2Vla2FibGVSYW5nZXMoKnRpbWVSYW5nZXNSZWYuZ2V0KCkpOworICAgIH07Cisg
ICAgdGltZVJhbmdlc1JlZi5yZWxlYXNlKCk7CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hf
Z2V0X21haW5fcXVldWUoKSwgYmxvY2spOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpzZXRDYW5QbGF5RmFzdFJldmVyc2UoYm9vbCBjYW5QbGF5RmFzdFJl
dmVyc2UpCit7CisgICAgQVNTRVJUKFdlYlRocmVhZElzQ3VycmVudCgpKTsKKyAgICBSZWZQdHI8
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7Cisg
ICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMs
IHRoaXMsIGNhblBsYXlGYXN0UmV2ZXJzZV0geworICAgICAgICBpZiAobV9pbnRlcmZhY2UpCisg
ICAgICAgICAgICBtX2ludGVyZmFjZS0+c2V0Q2FuUGxheUZhc3RSZXZlcnNlKGNhblBsYXlGYXN0
UmV2ZXJzZSk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OnNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQoreworICAgIEFTU0VSVChXZWJU
aHJlYWRJc0N1cnJlbnQoKSk7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0PiBzdHJvbmdUaGlzKHRoaXMpOworCisgICAgVmVjdG9yPFN0cmluZz4gb3B0aW9u
c0RlZXBDb3B5OworICAgIG9wdGlvbnNEZWVwQ29weS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG9w
dGlvbnMuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIG9wdGlvbiA6IG9wdGlvbnMpCisgICAgICAg
IG9wdGlvbnNEZWVwQ29weS5hcHBlbmQob3B0aW9uLmlzb2xhdGVkQ29weSgpKTsKKyAgICAKKyAg
ICBhdXRvIGJsb2NrID0gW3N0cm9uZ1RoaXMsIHRoaXMsIG9wdGlvbnNEZWVwQ29weSwgc2VsZWN0
ZWRJbmRleF0geworICAgICAgICBpZiAobV9pbnRlcmZhY2UpCisgICAgICAgICAgICBtX2ludGVy
ZmFjZS0+c2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMob3B0aW9uc0RlZXBDb3B5LCBzZWxl
Y3RlZEluZGV4KTsKKyAgICB9OworICAgIAorICAgIG9wdGlvbnNEZWVwQ29weS5jbGVhcigpOwor
ICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIGJsb2NrKTsKK30K
Kwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0TGVnaWJsZU1l
ZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgb3B0aW9ucywgdWludDY0
X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBBU1NFUlQoV2ViVGhyZWFkSXNDdXJyZW50KCkpOwor
ICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhp
cyh0aGlzKTsKKyAgICAKKyAgICBWZWN0b3I8U3RyaW5nPiBvcHRpb25zRGVlcENvcHk7CisgICAg
b3B0aW9uc0RlZXBDb3B5LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkob3B0aW9ucy5zaXplKCkpOwor
ICAgIGZvciAoYXV0byYgb3B0aW9uIDogb3B0aW9ucykKKyAgICAgICAgb3B0aW9uc0RlZXBDb3B5
LmFwcGVuZChvcHRpb24uaXNvbGF0ZWRDb3B5KCkpOworICAgIAorICAgIGF1dG8gYmxvY2sgPSBb
c3Ryb25nVGhpcywgdGhpcywgb3B0aW9uc0RlZXBDb3B5LCBzZWxlY3RlZEluZGV4XSB7CisgICAg
ICAgIGlmIChtX2ludGVyZmFjZSkKKyAgICAgICAgICAgIG1faW50ZXJmYWNlLT5zZXRMZWdpYmxl
TWVkaWFTZWxlY3Rpb25PcHRpb25zKG9wdGlvbnNEZWVwQ29weSwgc2VsZWN0ZWRJbmRleCk7Cisg
ICAgfTsKKyAgICAKKyAgICBvcHRpb25zRGVlcENvcHkuY2xlYXIoKTsKKyAgICBkaXNwYXRjaF9h
c3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBibG9jayk7Cit9CisKK3ZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldEV4dGVybmFsUGxheWJhY2soYm9vbCBl
bmFibGVkLCBFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0eXBlLCBTdHJpbmcgbG9jYWxpemVk
RGV2aWNlTmFtZSkKK3sKKyAgICBBU1NFUlQoV2ViVGhyZWFkSXNDdXJyZW50KCkpOworICAgIFJl
ZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlz
KTsKKyAgICBTdHJpbmdDYXB0dXJlIGNhcHR1cmVkTG9jYWxpemVkRGV2aWNlTmFtZShsb2NhbGl6
ZWREZXZpY2VOYW1lKTsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1
ZSgpLCBbc3Ryb25nVGhpcywgdGhpcywgZW5hYmxlZCwgdHlwZSwgY2FwdHVyZWRMb2NhbGl6ZWRE
ZXZpY2VOYW1lXSB7CisgICAgICAgIGlmIChtX2ludGVyZmFjZSkKKyAgICAgICAgICAgIG1faW50
ZXJmYWNlLT5zZXRFeHRlcm5hbFBsYXliYWNrKGVuYWJsZWQsIHR5cGUsIGNhcHR1cmVkTG9jYWxp
emVkRGV2aWNlTmFtZS5zdHJpbmcoKSk7CisgICAgfSk7Cit9CisKKyNwcmFnbWEgbWFyayBXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbAorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpwbGF5KCkKK3sKKyAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKKyAgICBSZWZQdHI8
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7Cisg
ICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzLCB0aGlzXSB7CisgICAgICAgIGlmIChtX21vZGVs
KQorICAgICAgICAgICAgbV9tb2RlbC0+cGxheSgpOworICAgIH0pOworfQorCit2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpwYXVzZSgpCit7CisgICAgQVNTRVJUKGlz
VUlUaHJlYWQoKSk7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0PiBzdHJvbmdUaGlzKHRoaXMpOworICAgIFdlYlRocmVhZFJ1bihbc3Ryb25nVGhpcywgdGhp
c10geworICAgICAgICBpZiAobV9tb2RlbCkKKyAgICAgICAgICAgIG1fbW9kZWwtPnBhdXNlKCk7
CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OnRvZ2dsZVBsYXlTdGF0ZSgpCit7CisgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CisgICAgUmVm
UHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBzdHJvbmdUaGlzKHRoaXMp
OworICAgIFdlYlRocmVhZFJ1bihbc3Ryb25nVGhpcywgdGhpc10geworICAgICAgICBpZiAobV9t
b2RlbCkKKyAgICAgICAgICAgIG1fbW9kZWwtPnRvZ2dsZVBsYXlTdGF0ZSgpOworICAgIH0pOwor
fQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpiZWdpblNjcnVi
YmluZygpCit7CisgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CisgICAgUmVmUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBzdHJvbmdUaGlzKHRoaXMpOworICAgIFdlYlRo
cmVhZFJ1bihbc3Ryb25nVGhpcywgdGhpc10geworICAgICAgICBpZiAobV9tb2RlbCkKKyAgICAg
ICAgICAgIG1fbW9kZWwtPmJlZ2luU2NydWJiaW5nKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmVuZFNjcnViYmluZygpCit7CisgICAg
QVNTRVJUKGlzVUlUaHJlYWQoKSk7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0PiBzdHJvbmdUaGlzKHRoaXMpOworICAgIFdlYlRocmVhZFJ1bihbc3Ryb25n
VGhpcywgdGhpc10geworICAgICAgICBpZiAobV9tb2RlbCkKKyAgICAgICAgICAgIG1fbW9kZWwt
PmVuZFNjcnViYmluZygpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpzZWVrVG9UaW1lKGRvdWJsZSB0aW1lKQoreworICAgIEFTU0VSVChp
c1VJVGhyZWFkKCkpOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oW3N0cm9uZ1RoaXMsIHRo
aXMsIHRpbWVdIHsKKyAgICAgICAgaWYgKG1fbW9kZWwpCisgICAgICAgICAgICBtX21vZGVsLT5z
ZWVrVG9UaW1lKHRpbWUpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpmYXN0U2Vlayhkb3VibGUgdGltZSkKK3sKKyAgICBBU1NFUlQoaXNV
SVRocmVhZCgpKTsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ+IHN0cm9uZ1RoaXModGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzLCB0aGlz
LCB0aW1lXSB7CisgICAgICAgIGlmIChtX21vZGVsKQorICAgICAgICAgICAgbV9tb2RlbC0+ZmFz
dFNlZWsodGltZSk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkKK3sKKyAgICBBU1NFUlQoaXNVSVRo
cmVhZCgpKTsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+
IHN0cm9uZ1RoaXModGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzLCB0aGlzXSB7
CisgICAgICAgIGlmIChtX21vZGVsKQorICAgICAgICAgICAgbV9tb2RlbC0+YmVnaW5TY2Fubmlu
Z0ZvcndhcmQoKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKCkKK3sKKyAgICBBU1NFUlQoaXNVSVRo
cmVhZCgpKTsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+
IHN0cm9uZ1RoaXModGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzLCB0aGlzXSB7
CisgICAgICAgIGlmIChtX21vZGVsKQorICAgICAgICAgICAgbV9tb2RlbC0+YmVnaW5TY2Fubmlu
Z0JhY2t3YXJkKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OmVuZFNjYW5uaW5nKCkKK3sKKyAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsK
KyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0cm9uZ1Ro
aXModGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzLCB0aGlzXSB7CisgICAgICAg
IGlmIChtX21vZGVsKQorICAgICAgICAgICAgbV9tb2RlbC0+ZW5kU2Nhbm5pbmcoKTsKKyAgICB9
KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cmVxdWVz
dEV4aXRGdWxsc2NyZWVuKCkKK3sKKyAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKKyAgICBSZWZQ
dHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7
CisgICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzLCB0aGlzXSB7CisgICAgICAgIGlmIChtX21v
ZGVsKQorICAgICAgICAgICAgbV9tb2RlbC0+cmVxdWVzdEV4aXRGdWxsc2NyZWVuKCk7CisgICAg
fSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldFZp
ZGVvTGF5ZXJGcmFtZShGbG9hdFJlY3QgZnJhbWUpCit7CisgICAgQVNTRVJUKGlzVUlUaHJlYWQo
KSk7CisgICAgbV9mcmFtZSA9IGZyYW1lOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oW3N0
cm9uZ1RoaXMsIHRoaXMsIGZyYW1lXSB7CisgICAgICAgIGlmIChtX21vZGVsKQorICAgICAgICAg
ICAgbV9tb2RlbC0+c2V0VmlkZW9MYXllckZyYW1lKGZyYW1lKTsKKyAgICB9KTsKK30KKwordm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0VmlkZW9MYXllckdyYXZp
dHkoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSB2aWRlb0dyYXZpdHkpCit7
CisgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CisgICAgbV9ncmF2aXR5ID0gdmlkZW9HcmF2aXR5
OworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25n
VGhpcyh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oW3N0cm9uZ1RoaXMsIHRoaXMsIHZpZGVvR3Jh
dml0eV0geworICAgICAgICBpZiAobV9tb2RlbCkKKyAgICAgICAgICAgIG1fbW9kZWwtPnNldFZp
ZGVvTGF5ZXJHcmF2aXR5KHZpZGVvR3Jhdml0eSk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWlu
dDY0X3QgaW5kZXgpCit7CisgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CisgICAgUmVmUHRyPFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBzdHJvbmdUaGlzKHRoaXMpOworICAg
IFdlYlRocmVhZFJ1bihbc3Ryb25nVGhpcywgdGhpcywgaW5kZXhdIHsKKyAgICAgICAgaWYgKG1f
bW9kZWwpCisgICAgICAgICAgICBtX21vZGVsLT5zZWxlY3RBdWRpb01lZGlhT3B0aW9uKGluZGV4
KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KQoreworICAgIEFTU0VS
VChpc1VJVGhyZWFkKCkpOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oW3N0cm9uZ1RoaXMs
IHRoaXMsIGluZGV4XSB7CisgICAgICAgIGlmIChtX21vZGVsKQorICAgICAgICAgICAgbV9tb2Rl
bC0+c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKGluZGV4KTsKKyAgICB9KTsKK30KKwordm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2Vk
KEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQoreworICAg
IEFTU0VSVChpc1VJVGhyZWFkKCkpOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oW3N0cm9u
Z1RoaXMsIHRoaXMsIG1vZGVdIHsKKyAgICAgICAgaWYgKG1fbW9kZWwpCisgICAgICAgICAgICBt
X21vZGVsLT5mdWxsc2NyZWVuTW9kZUNoYW5nZWQobW9kZSk7CisgICAgfSk7Cit9CisKKyNwcmFn
bWEgbWFyayBPdGhlcgorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjpzZXRVcEZ1bGxzY3JlZW4oSFRNTFZpZGVvRWxlbWVudCYgdmlkZW9FbGVtZW50LCBVSVZpZXcg
KnZpZXcsIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQor
eworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgUmV0YWluUHRyPFVJVmlldz4gdmll
d1JlZiA9IHZpZXc7CisgICAgbV92aWRlb0VsZW1lbnQgPSAmdmlkZW9FbGVtZW50OworCisgICAg
bV9pbnRlcmZhY2UgPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y3JlYXRlKCk7
CisgICAgbV9pbnRlcmZhY2UtPnNldFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKHRo
aXMpOworICAgIG1faW50ZXJmYWNlLT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCh0aGlzKTsK
KyAgICAKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0
cm9uZ1RoaXModGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzLCB0aGlzLCB2aWV3
UmVmLCBtb2RlXSB7CisgICAgICAgIG1fbW9kZWwgPSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZp
ZGVvRWxlbWVudDo6Y3JlYXRlKCk7CisgICAgICAgIG1fbW9kZWwtPnNldFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZSh0aGlzKTsKKyAgICAgICAgbV9tb2RlbC0+c2V0VmlkZW9FbGVtZW50KG1f
dmlkZW9FbGVtZW50LmdldCgpKTsKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5MYXllciA9IFtD
QUxheWVyIGxheWVyXTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgYWxsb3dzQWx0ZXJuYXRlRnVs
bHNjcmVlbiA9IG1fdmlkZW9FbGVtZW50LT5tZWRpYVNlc3Npb24oKS5hbGxvd3NBbHRlcm5hdGVG
dWxsc2NyZWVuKCptX3ZpZGVvRWxlbWVudC5nZXQoKSk7CisgICAgICAgIEludFJlY3QgdmlkZW9F
bGVtZW50Q2xpZW50UmVjdCA9IG1fdmlkZW9FbGVtZW50LT5jbGllbnRSZWN0KCk7CisgICAgICAg
IAorICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ry
b25nVGhpcywgdGhpcywgdmlkZW9FbGVtZW50Q2xpZW50UmVjdCwgdmlld1JlZiwgbW9kZSwgYWxs
b3dzQWx0ZXJuYXRlRnVsbHNjcmVlbl0geworICAgICAgICAgICAgbV9pbnRlcmZhY2UtPnNldHVw
RnVsbHNjcmVlbigqbV92aWRlb0Z1bGxzY3JlZW5MYXllci5nZXQoKSwgdmlkZW9FbGVtZW50Q2xp
ZW50UmVjdCwgdmlld1JlZi5nZXQoKSwgbW9kZSwgYWxsb3dzQWx0ZXJuYXRlRnVsbHNjcmVlbik7
CisgICAgICAgIH0pOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0OjpleGl0RnVsbHNjcmVlbigpCit7CisgICAgQVNTRVJUKFdlYlRocmVhZElz
Q3VycmVudCgpKTsKKyAgICBJbnRSZWN0IHNjcmVlblJlY3QgPSBtX3ZpZGVvRWxlbWVudC0+c2Ny
ZWVuUmVjdCgpOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFp
bl9xdWV1ZSgpLCBbc3Ryb25nVGhpcywgdGhpcywgc2NyZWVuUmVjdF0geworICAgICAgICBBU1NF
UlQoaXNVSVRocmVhZCgpKTsKKyAgICAgICAgbV9pbnRlcmZhY2UtPmV4aXRGdWxsc2NyZWVuKHNj
cmVlblJlY3QpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCkKK3sKKyAgICBBU1NFUlQo
aXNVSVRocmVhZCgpKTsKKyAgICBtX2ludGVyZmFjZS0+cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNj
cmVlbigpOworfQorCitAaW1wbGVtZW50YXRpb24gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ciB7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBfY29u
dGV4dDsKICAgICBSZWZQdHI8SFRNTFZpZGVvRWxlbWVudD4gX3ZpZGVvRWxlbWVudDsKLSAgICBS
ZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IF9pbnRlcmZhY2U7Ci0gICAg
UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBfbW9kZWw7Ci0gICAg
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNoYW5nZU9ic2VydmVyIF9jaGFuZ2VPYnNlcnZl
cjsKLSAgICBSZXRhaW5QdHI8UGxhdGZvcm1MYXllcj4gX3ZpZGVvRnVsbHNjcmVlbkxheWVyOwog
fQogCiAtIChpbnN0YW5jZXR5cGUpaW5pdApAQCAtMTAxLDE3ICs1NTYsOSBAQCBwdWJsaWM6CiAg
ICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAg
Ci0gICAgX2NoYW5nZU9ic2VydmVyLnNldFRhcmdldChzZWxmKTsKLQogICAgIHJldHVybiBzZWxm
OwogfQogCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBfdmlkZW9FbGVtZW50ID0gbnVsbHB0cjsK
LSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KIC0gKHZvaWQpc2V0VmlkZW9FbGVtZW50OihIVE1M
VmlkZW9FbGVtZW50Kil2aWRlb0VsZW1lbnQKIHsKICAgICBfdmlkZW9FbGVtZW50ID0gdmlkZW9F
bGVtZW50OwpAQCAtMTI0LDY3ICs1NzEsMzMgQEAgcHVibGljOgogCiAtICh2b2lkKWVudGVyRnVs
bHNjcmVlbjooVUlWaWV3ICopdmlldyBtb2RlOihIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVv
RnVsbHNjcmVlbk1vZGUpbW9kZQogewotICAgIFtzZWxmIHJldGFpbl07IC8vIEJhbGFuY2VkIGJ5
IC1yZWxlYXNlIGluIGRpZEV4aXRGdWxsc2NyZWVuOgotICAgIAotICAgIF9pbnRlcmZhY2UgPSBX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y3JlYXRlKCk7Ci0gICAgX2ludGVyZmFj
ZS0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoJl9jaGFuZ2VPYnNlcnZlcik7
Ci0gICAgX21vZGVsID0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmNyZWF0
ZSgpOwotICAgIF9tb2RlbC0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKF9pbnRlcmZh
Y2UuZ2V0KCkpOwotICAgIF9pbnRlcmZhY2UtPnNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKF9t
b2RlbC5nZXQoKSk7Ci0gICAgX21vZGVsLT5zZXRWaWRlb0VsZW1lbnQoX3ZpZGVvRWxlbWVudC5n
ZXQoKSk7Ci0gICAgX3ZpZGVvRnVsbHNjcmVlbkxheWVyID0gW0NBTGF5ZXIgbGF5ZXJdOwotICAg
IF9pbnRlcmZhY2UtPnNldHVwRnVsbHNjcmVlbigqX3ZpZGVvRnVsbHNjcmVlbkxheWVyLmdldCgp
LCBfdmlkZW9FbGVtZW50LT5jbGllbnRSZWN0KCksIHZpZXcsIG1vZGUsIF92aWRlb0VsZW1lbnQt
Pm1lZGlhU2Vzc2lvbigpLmFsbG93c0FsdGVybmF0ZUZ1bGxzY3JlZW4oKl92aWRlb0VsZW1lbnQu
Z2V0KCkpKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIF9jb250ZXh0ID0gV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmNyZWF0ZSgpOworICAgIF9jb250ZXh0
LT5zZXRDb250cm9sbGVyKHNlbGYpOworICAgIF9jb250ZXh0LT5zZXRVcEZ1bGxzY3JlZW4oKl92
aWRlb0VsZW1lbnQuZ2V0KCksIHZpZXcsIG1vZGUpOwogfQogCiAtICh2b2lkKWV4aXRGdWxsc2Ny
ZWVuCiB7Ci0gICAgX2ludGVyZmFjZS0+ZXhpdEZ1bGxzY3JlZW4oX3ZpZGVvRWxlbWVudC0+c2Ny
ZWVuUmVjdCgpKTsKKyAgICBBU1NFUlQoV2ViVGhyZWFkSXNDdXJyZW50KCkpOworICAgIF9jb250
ZXh0LT5leGl0RnVsbHNjcmVlbigpOwogfQogCiAtICh2b2lkKXJlcXVlc3RIaWRlQW5kRXhpdEZ1
bGxzY3JlZW4KIHsKLSAgICBpZiAoX2ludGVyZmFjZSkKLSAgICAgICAgX2ludGVyZmFjZS0+cmVx
dWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpOworICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwor
ICAgIGlmIChfY29udGV4dCkKKyAgICAgICAgX2NvbnRleHQtPnJlcXVlc3RIaWRlQW5kRXhpdEZ1
bGxzY3JlZW4oKTsKIH0KIAotLSAodm9pZClkaWRTZXR1cEZ1bGxzY3JlZW4KKy0gKHZvaWQpZGlk
RmluaXNoRnVsbHNjcmVlbjooV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQqKWNv
bnRleHQKIHsKLSAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgX21vZGVsLT5zZXRWaWRlb0Z1
bGxzY3JlZW5MYXllcihfdmlkZW9GdWxsc2NyZWVuTGF5ZXIuZ2V0KCkpOwotICAgICAgICBfaW50
ZXJmYWNlLT5lbnRlckZ1bGxzY3JlZW4oKTsKLSAgICB9KTsKLX0KLQotLSAodm9pZClkaWRFbnRl
ckZ1bGxzY3JlZW4KLXsKLX0KLQotLSAodm9pZClkaWRFeGl0RnVsbHNjcmVlbgotewotICAgIFdl
YlRocmVhZFJ1biheewotICAgICAgICBfbW9kZWwtPnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKG5p
bCk7Ci0gICAgICAgIF9pbnRlcmZhY2UtPmNsZWFudXBGdWxsc2NyZWVuKCk7Ci0gICAgfSk7Ci19
Ci0KLS0gKHZvaWQpZGlkQ2xlYW51cEZ1bGxzY3JlZW4KLXsKLSAgICBXZWJUaHJlYWRSdW4oXnsK
LSAgICAgICAgX21vZGVsLT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihuaWwpOwotICAgICAgICBf
aW50ZXJmYWNlLT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbChudWxscHRyKTsKLSAgICAgICAg
X21vZGVsLT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UobnVsbHB0cik7Ci0gICAgICAg
IF9tb2RlbC0+c2V0VmlkZW9FbGVtZW50KG51bGxwdHIpOwotICAgICAgICBfaW50ZXJmYWNlLT5z
ZXRXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcihudWxscHRyKTsKLSAgICAgICAgX21v
ZGVsID0gbnVsbHB0cjsKLSAgICAgICAgX2ludGVyZmFjZSA9IG51bGxwdHI7Ci0gICAgICAgIAot
ICAgICAgICBbc2VsZiByZWxlYXNlXTsgLy8gQmFsYW5jZSB0aGUgLXJldGFpbiB3ZSBkaWQgaW4g
ZW50ZXJGdWxsc2NyZWVuOgotICAgIH0pOwotfQotCi0tICh2b2lkKWZ1bGxzY3JlZW5NYXlSZXR1
cm5Ub0lubGluZQotewotICAgIF9pbnRlcmZhY2UtPnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSh0
cnVlLCBfdmlkZW9FbGVtZW50LT5jbGllbnRSZWN0KCkpOworICAgIEFTU0VSVChXZWJUaHJlYWRJ
c0N1cnJlbnQoKSk7CisgICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCBjb250ZXh0ID09IF9jb250
ZXh0KTsKKyAgICBbW3NlbGYgcmV0YWluXSBhdXRvcmVsZWFzZV07IC8vIHJldGFpbiBzZWxmIGJl
Zm9yZSBicmVha2luZyBhIHJldGFpbiBjeWNsZS4KKyAgICBfY29udGV4dC0+c2V0Q29udHJvbGxl
cihuaWwpOworICAgIF9jb250ZXh0ID0gbnVsbHB0cjsKKyAgICBfdmlkZW9FbGVtZW50ID0gbnVs
bHB0cjsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaAppbmRleCA3YWQ2NWRk
MTg1Yzg5ZTQ5OGU1ZDM4MDVmM2NhZjU5ZTkxMzIyMGI5Li43MzM3NjdiN2Q2MWI1MDUwOTgwNGJi
M2FiYWI0YmQ1MTEzYjQzYjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaApAQCAtMzUs
OSArMzUsOSBAQAogI2luY2x1ZGUgPFdlYkNvcmUvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
Lmg+CiAjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KICNpbmNsdWRlIDxvYmpjL29iamMuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRl
IDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+
CiAKIE9CSkNfQ0xBU1MgV2ViQVZQbGF5ZXJDb250cm9sbGVyOwogT0JKQ19DTEFTUyBBVlBsYXll
clZpZXdDb250cm9sbGVyOwpAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAKIGNsYXNzIFdFQkNP
UkVfRVhQT1JUIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0CiAgICAgOiBwdWJsaWMg
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlCi0gICAgLCBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHsKKyAgICAsIHB1YmxpYyBS
ZWZDb3VudGVkPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiB7CiAKIHB1YmxpYzoK
ICAgICBzdGF0aWMgUmVmPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBjcmVhdGUo
KQpAQCAtMTIxLDExICsxMjEsOCBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgV0VCQ09SRV9F
WFBPUlQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQoKTsKICAgICB2b2lkIGJlZ2lu
U2Vzc2lvbigpOwotICAgIHZvaWQgc2V0dXBGdWxsc2NyZWVuSW50ZXJuYWwoUGxhdGZvcm1MYXll
ciYsIGNvbnN0IEludFJlY3QmIGluaXRpYWxSZWN0LCBVSVZpZXcgKiwgSFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGFsbG93T3B0aW1pemVkRnVsbHNjcmVl
bik7CiAgICAgdm9pZCBlbnRlckZ1bGxzY3JlZW5PcHRpbWl6ZWQoKTsKICAgICB2b2lkIGVudGVy
RnVsbHNjcmVlblN0YW5kYXJkKCk7Ci0gICAgdm9pZCBleGl0RnVsbHNjcmVlbkludGVybmFsKGNv
bnN0IEludFJlY3QmIGZpbmFsUmVjdCk7Ci0gICAgdm9pZCBjbGVhbnVwRnVsbHNjcmVlbkludGVy
bmFsKCk7CiAKICAgICBSZXRhaW5QdHI8V2ViQVZQbGF5ZXJDb250cm9sbGVyPiBtX3BsYXllckNv
bnRyb2xsZXI7CiAgICAgUmV0YWluUHRyPEFWUGxheWVyVmlld0NvbnRyb2xsZXI+IG1fcGxheWVy
Vmlld0NvbnRyb2xsZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0KaW5kZXggMzVlNzg2
NGQ1ZGE0NGNlNTk0NWJkN2EyNTEwNGNkNWQ0NGVhNWEyOS4uM2Y1YTc3MDlmMGZmZmZlNTZkMjQ0
ZjlhODg2NDJmMDU4Nzc4MzFiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbQpAQCAt
MzYsNyArMzYsNiBAQAogI2ltcG9ydCAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLmgiCiAj
aW1wb3J0ICJUaW1lUmFuZ2VzLmgiCiAjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgi
Ci0jaW1wb3J0ICJXZWJDb3JlVGhyZWFkUnVuLmgiCiAjaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbC5oIgogI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWVGltZS5oPgogI2ltcG9ydCA8VUlL
aXQvVUlLaXQuaD4KQEAgLTc0OSwxNyArNzQ4LDEzIEBAIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCgpCiAKIHZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnJlc2V0TWVkaWFTdGF0ZSgpCiB7Ci0gICAg
UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMp
OwotICAgIAotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtz
dHJvbmdUaGlzXSB7Ci0gICAgICAgIGlmICghc3Ryb25nVGhpcy0+bV9wbGF5ZXJDb250cm9sbGVy
KSB7Ci0gICAgICAgICAgICBzdHJvbmdUaGlzLT5tX3BsYXllckNvbnRyb2xsZXIgPSBhZG9wdE5T
KFtbV2ViQVZQbGF5ZXJDb250cm9sbGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgICAgICAgICBbc3Ry
b25nVGhpcy0+bV9wbGF5ZXJDb250cm9sbGVyIHNldERlbGVnYXRlOnN0cm9uZ1RoaXMtPm1fdmlk
ZW9GdWxsc2NyZWVuTW9kZWxdOwotICAgICAgICAgICAgW3N0cm9uZ1RoaXMtPm1fcGxheWVyQ29u
dHJvbGxlciBzZXRGdWxsc2NyZWVuSW50ZXJmYWNlOnN0cm9uZ1RoaXMuZ2V0KCldOwotICAgICAg
ICAgICAgCi0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgW3N0cm9uZ1RoaXMtPm1fcGxheWVy
Q29udHJvbGxlciByZXNldFN0YXRlXTsKLSAgICB9KTsKKyAgICBpZiAoIW1fcGxheWVyQ29udHJv
bGxlcikgeworICAgICAgICBtX3BsYXllckNvbnRyb2xsZXIgPSBhZG9wdE5TKFtbV2ViQVZQbGF5
ZXJDb250cm9sbGVyIGFsbG9jXSBpbml0XSk7CisgICAgICAgIFttX3BsYXllckNvbnRyb2xsZXIg
c2V0RGVsZWdhdGU6bV92aWRlb0Z1bGxzY3JlZW5Nb2RlbF07CisgICAgICAgIFttX3BsYXllckNv
bnRyb2xsZXIgc2V0RnVsbHNjcmVlbkludGVyZmFjZTp0aGlzXTsKKyAgICAgICAgCisgICAgfSBl
bHNlCisgICAgICAgIFttX3BsYXllckNvbnRyb2xsZXIgcmVzZXRTdGF0ZV07CiB9CiAKIHZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKiBtb2RlbCkKQEAgLTc3NSw3MiArNzcwLDUyIEBA
IHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFdlYlZpZGVvRnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyKFdlYlZpCiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OnNldER1cmF0aW9uKGRvdWJsZSBkdXJhdGlvbikKIHsKLSAgICBSZWZQdHI8V2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHN0cm9uZ1RoaXModGhpcyk7Ci0gICAgCi0g
ICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMs
IGR1cmF0aW9uXSB7Ci0gICAgICAgIFdlYkFWUGxheWVyQ29udHJvbGxlciogcGxheWVyQ29udHJv
bGxlciA9IHN0cm9uZ1RoaXMtPm1fcGxheWVyQ29udHJvbGxlci5nZXQoKTsKKyAgICBXZWJBVlBs
YXllckNvbnRyb2xsZXIqIHBsYXllckNvbnRyb2xsZXIgPSBtX3BsYXllckNvbnRyb2xsZXIuZ2V0
KCk7CiAKLSAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMjcwMTcgdXNlIGNvcnJlY3QgdmFsdWVzIGluc3RlYWQgb2YgZHVyYXRpb24gZm9y
IGFsbCB0aGVzZQotICAgICAgICBwbGF5ZXJDb250cm9sbGVyLmNvbnRlbnREdXJhdGlvbiA9IGR1
cmF0aW9uOwotICAgICAgICBwbGF5ZXJDb250cm9sbGVyLm1heFRpbWUgPSBkdXJhdGlvbjsKLSAg
ICAgICAgcGxheWVyQ29udHJvbGxlci5jb250ZW50RHVyYXRpb25XaXRoaW5FbmRUaW1lcyA9IGR1
cmF0aW9uOworICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTI3MDE3IHVzZSBjb3JyZWN0IHZhbHVlcyBpbnN0ZWFkIG9mIGR1cmF0aW9uIGZvciBh
bGwgdGhlc2UKKyAgICBwbGF5ZXJDb250cm9sbGVyLmNvbnRlbnREdXJhdGlvbiA9IGR1cmF0aW9u
OworICAgIHBsYXllckNvbnRyb2xsZXIubWF4VGltZSA9IGR1cmF0aW9uOworICAgIHBsYXllckNv
bnRyb2xsZXIuY29udGVudER1cmF0aW9uV2l0aGluRW5kVGltZXMgPSBkdXJhdGlvbjsKIAotICAg
ICAgICAvLyBGSVhNRTogd2UgdGFrZSB0aGlzIGFzIGFuIGluZGljYXRpb24gdGhhdCBwbGF5YmFj
ayBpcyByZWFkeS4KLSAgICAgICAgcGxheWVyQ29udHJvbGxlci5jYW5QbGF5ID0gWUVTOwotICAg
ICAgICBwbGF5ZXJDb250cm9sbGVyLmNhblBhdXNlID0gWUVTOwotICAgICAgICBwbGF5ZXJDb250
cm9sbGVyLmNhblRvZ2dsZVBsYXliYWNrID0gWUVTOwotICAgICAgICBwbGF5ZXJDb250cm9sbGVy
Lmhhc0VuYWJsZWRBdWRpbyA9IFlFUzsKLSAgICAgICAgcGxheWVyQ29udHJvbGxlci5jYW5TZWVr
ID0gWUVTOwotICAgICAgICBwbGF5ZXJDb250cm9sbGVyLm1pblRpbWUgPSAwOwotICAgICAgICBw
bGF5ZXJDb250cm9sbGVyLnN0YXR1cyA9IEFWUGxheWVyQ29udHJvbGxlclN0YXR1c1JlYWR5VG9Q
bGF5OwotICAgIH0pOworICAgIC8vIEZJWE1FOiB3ZSB0YWtlIHRoaXMgYXMgYW4gaW5kaWNhdGlv
biB0aGF0IHBsYXliYWNrIGlzIHJlYWR5LgorICAgIHBsYXllckNvbnRyb2xsZXIuY2FuUGxheSA9
IFlFUzsKKyAgICBwbGF5ZXJDb250cm9sbGVyLmNhblBhdXNlID0gWUVTOworICAgIHBsYXllckNv
bnRyb2xsZXIuY2FuVG9nZ2xlUGxheWJhY2sgPSBZRVM7CisgICAgcGxheWVyQ29udHJvbGxlci5o
YXNFbmFibGVkQXVkaW8gPSBZRVM7CisgICAgcGxheWVyQ29udHJvbGxlci5jYW5TZWVrID0gWUVT
OworICAgIHBsYXllckNvbnRyb2xsZXIubWluVGltZSA9IDA7CisgICAgcGxheWVyQ29udHJvbGxl
ci5zdGF0dXMgPSBBVlBsYXllckNvbnRyb2xsZXJTdGF0dXNSZWFkeVRvUGxheTsKIH0KIAogdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0Q3VycmVudFRpbWUoZG91Ymxl
IGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkKIHsKLSAgICBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHN0cm9uZ1RoaXModGhpcyk7Ci0gICAgCi0gICAgZGlz
cGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMsIGN1cnJl
bnRUaW1lLCBhbmNob3JUaW1lXSB7Ci0gICAgICAgIE5TVGltZUludGVydmFsIGFuY2hvclRpbWVT
dGFtcCA9ICFbc3Ryb25nVGhpcy0+bV9wbGF5ZXJDb250cm9sbGVyIHJhdGVdID8gTkFOIDogYW5j
aG9yVGltZTsKLSAgICAgICAgQVZWYWx1ZVRpbWluZyAqdGltaW5nID0gW2dldEFWVmFsdWVUaW1p
bmdDbGFzcygpIHZhbHVlVGltaW5nV2l0aEFuY2hvclZhbHVlOmN1cnJlbnRUaW1lCi0gICAgICAg
ICAgICBhbmNob3JUaW1lU3RhbXA6YW5jaG9yVGltZVN0YW1wIHJhdGU6MF07Ci0gICAgICAgIFtz
dHJvbmdUaGlzLT5tX3BsYXllckNvbnRyb2xsZXIgc2V0VGltaW5nOnRpbWluZ107Ci0gICAgfSk7
CisgICAgTlNUaW1lSW50ZXJ2YWwgYW5jaG9yVGltZVN0YW1wID0gIVttX3BsYXllckNvbnRyb2xs
ZXIgcmF0ZV0gPyBOQU4gOiBhbmNob3JUaW1lOworICAgIEFWVmFsdWVUaW1pbmcgKnRpbWluZyA9
IFtnZXRBVlZhbHVlVGltaW5nQ2xhc3MoKSB2YWx1ZVRpbWluZ1dpdGhBbmNob3JWYWx1ZTpjdXJy
ZW50VGltZQorICAgICAgICBhbmNob3JUaW1lU3RhbXA6YW5jaG9yVGltZVN0YW1wIHJhdGU6MF07
CisgICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRUaW1pbmc6dGltaW5nXTsKIH0KIAogdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0QnVmZmVyZWRUaW1lKGRvdWJsZSBi
dWZmZXJlZFRpbWUpCiB7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0PiBzdHJvbmdUaGlzKHRoaXMpOwotCi0gICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0
X21haW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMsIGJ1ZmZlcmVkVGltZV0gewotICAgICAgICBXZWJB
VlBsYXllckNvbnRyb2xsZXIqIHBsYXllckNvbnRyb2xsZXIgPSBzdHJvbmdUaGlzLT5tX3BsYXll
ckNvbnRyb2xsZXIuZ2V0KCk7Ci0gICAgICAgIGRvdWJsZSBkdXJhdGlvbiA9IHBsYXllckNvbnRy
b2xsZXIuY29udGVudER1cmF0aW9uOwotICAgICAgICBkb3VibGUgbm9ybWFsaXplZEJ1ZmZlcmVk
VGltZTsKLSAgICAgICAgaWYgKCFkdXJhdGlvbikKLSAgICAgICAgICAgIG5vcm1hbGl6ZWRCdWZm
ZXJlZFRpbWUgPSAwOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBub3JtYWxpemVkQnVmZmVy
ZWRUaW1lID0gYnVmZmVyZWRUaW1lIC8gZHVyYXRpb247Ci0gICAgICAgIHBsYXllckNvbnRyb2xs
ZXIubG9hZGVkVGltZVJhbmdlcyA9IEBbQDAsIEAobm9ybWFsaXplZEJ1ZmZlcmVkVGltZSldOwot
ICAgIH0pOworICAgIFdlYkFWUGxheWVyQ29udHJvbGxlciogcGxheWVyQ29udHJvbGxlciA9IG1f
cGxheWVyQ29udHJvbGxlci5nZXQoKTsKKyAgICBkb3VibGUgZHVyYXRpb24gPSBwbGF5ZXJDb250
cm9sbGVyLmNvbnRlbnREdXJhdGlvbjsKKyAgICBkb3VibGUgbm9ybWFsaXplZEJ1ZmZlcmVkVGlt
ZTsKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICBub3JtYWxpemVkQnVmZmVyZWRUaW1lID0g
MDsKKyAgICBlbHNlCisgICAgICAgIG5vcm1hbGl6ZWRCdWZmZXJlZFRpbWUgPSBidWZmZXJlZFRp
bWUgLyBkdXJhdGlvbjsKKyAgICBwbGF5ZXJDb250cm9sbGVyLmxvYWRlZFRpbWVSYW5nZXMgPSBA
W0AwLCBAKG5vcm1hbGl6ZWRCdWZmZXJlZFRpbWUpXTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0UmF0ZShib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJh
Y2tSYXRlKQogewotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4g
c3Ryb25nVGhpcyh0aGlzKTsKLSAgICAKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRf
bWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpcywgaXNQbGF5aW5nLCBwbGF5YmFja1JhdGVdIHsKLSAg
ICAgICAgW3N0cm9uZ1RoaXMtPm1fcGxheWVyQ29udHJvbGxlciBzZXRSYXRlOmlzUGxheWluZyA/
IHBsYXliYWNrUmF0ZSA6IDAuXTsKLSAgICB9KTsKKyAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNl
dFJhdGU6aXNQbGF5aW5nID8gcGxheWJhY2tSYXRlIDogMC5dOwogfQogCiB2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRWaWRlb0RpbWVuc2lvbnMoYm9vbCBoYXNWaWRl
bywgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkKIHsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHN0cm9uZ1RoaXModGhpcyk7Ci0gICAgCi0gICAgZGlzcGF0
Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMsIGhhc1ZpZGVv
LCB3aWR0aCwgaGVpZ2h0XSB7Ci0gICAgICAgIFtzdHJvbmdUaGlzLT5tX3BsYXllckNvbnRyb2xs
ZXIgc2V0SGFzRW5hYmxlZFZpZGVvOmhhc1ZpZGVvXTsKLSAgICAgICAgW3N0cm9uZ1RoaXMtPm1f
cGxheWVyQ29udHJvbGxlciBzZXRDb250ZW50RGltZW5zaW9uczpDR1NpemVNYWtlKHdpZHRoLCBo
ZWlnaHQpXTsKLSAgICB9KTsKKyAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldEhhc0VuYWJsZWRW
aWRlbzpoYXNWaWRlb107CisgICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRDb250ZW50RGltZW5z
aW9uczpDR1NpemVNYWtlKHdpZHRoLCBoZWlnaHQpXTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0U2Vla2FibGVSYW5nZXMoY29uc3QgVGltZVJhbmdlcyYg
dGltZVJhbmdlcykKQEAgLTg1NiwyMCArODMxLDEyIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OnNldFNlZWthYmxlUmFuZ2VzKGNvbnN0IFRpbWVSYW5nZXMmIHRpbWVS
CiAgICAgICAgIFtzZWVrYWJsZVJhbmdlcyBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoQ01U
aW1lUmFuZ2U6cmFuZ2VdXTsKICAgICB9CiAgICAgCi0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOwotICAgIAotICAgIGRpc3BhdGNo
X2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCBzZWVrYWJsZVJh
bmdlc10gewotICAgICAgICBbc3Ryb25nVGhpcy0+bV9wbGF5ZXJDb250cm9sbGVyIHNldFNlZWth
YmxlVGltZVJhbmdlczpzZWVrYWJsZVJhbmdlcy5nZXQoKV07Ci0gICAgfSk7CisgICAgW21fcGxh
eWVyQ29udHJvbGxlciBzZXRTZWVrYWJsZVRpbWVSYW5nZXM6c2Vla2FibGVSYW5nZXMuZ2V0KCld
OwogfQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRDYW5QbGF5
RmFzdFJldmVyc2UoYm9vbCBjYW5QbGF5RmFzdFJldmVyc2UpCiB7Ci0gICAgUmVmUHRyPFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOwotICAgIAotICAg
IGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCBj
YW5QbGF5RmFzdFJldmVyc2VdIHsKLSAgICAgICAgW3N0cm9uZ1RoaXMtPm1fcGxheWVyQ29udHJv
bGxlciBzZXRDYW5TY2FuQmFja3dhcmQ6Y2FuUGxheUZhc3RSZXZlcnNlXTsKLSAgICB9KTsKKyAg
ICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldENhblNjYW5CYWNrd2FyZDpjYW5QbGF5RmFzdFJldmVy
c2VdOwogfQogCiBzdGF0aWMgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBtZWRpYVNlbGVjdGlv
bk9wdGlvbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIG9wdGlvbnMpCkBAIC04ODYsMjUgKzg1Mywx
NyBAQCBzdGF0aWMgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBtZWRpYVNlbGVjdGlvbk9wdGlv
bnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIG9wdAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6c2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPFN0
cmluZz4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCiB7CiAgICAgUmV0YWluUHRy
PE5TTXV0YWJsZUFycmF5PiB3ZWJPcHRpb25zID0gbWVkaWFTZWxlY3Rpb25PcHRpb25zKG9wdGlv
bnMpOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25n
VGhpcyh0aGlzKTsKLSAgICAKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9x
dWV1ZSgpLCBbd2ViT3B0aW9ucywgc3Ryb25nVGhpcywgc2VsZWN0ZWRJbmRleF0gewotICAgICAg
ICBbc3Ryb25nVGhpcy0+bV9wbGF5ZXJDb250cm9sbGVyIHNldEF1ZGlvTWVkaWFTZWxlY3Rpb25P
cHRpb25zOndlYk9wdGlvbnMuZ2V0KCldOwotICAgICAgICBpZiAoc2VsZWN0ZWRJbmRleCA8IFt3
ZWJPcHRpb25zIGNvdW50XSkKLSAgICAgICAgICAgIFtzdHJvbmdUaGlzLT5tX3BsYXllckNvbnRy
b2xsZXIgc2V0Q3VycmVudEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb246W3dlYk9wdGlvbnMgb2Jq
ZWN0QXRJbmRleDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihzZWxlY3RlZEluZGV4KV1dOwotICAg
IH0pOworICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlv
bnM6d2ViT3B0aW9ucy5nZXQoKV07CisgICAgaWYgKHNlbGVjdGVkSW5kZXggPCBbd2ViT3B0aW9u
cyBjb3VudF0pCisgICAgICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0Q3VycmVudEF1ZGlvTWVk
aWFTZWxlY3Rpb25PcHRpb246W3dlYk9wdGlvbnMgb2JqZWN0QXRJbmRleDpzdGF0aWNfY2FzdDxO
U1VJbnRlZ2VyPihzZWxlY3RlZEluZGV4KV1dOwogfQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0OjpzZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQogewogICAgIFJl
dGFpblB0cjxOU011dGFibGVBcnJheT4gd2ViT3B0aW9ucyA9IG1lZGlhU2VsZWN0aW9uT3B0aW9u
cyhvcHRpb25zKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+
IHN0cm9uZ1RoaXModGhpcyk7Ci0KLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFp
bl9xdWV1ZSgpLCBbd2ViT3B0aW9ucywgc3Ryb25nVGhpcywgc2VsZWN0ZWRJbmRleF0gewotICAg
ICAgICBbc3Ryb25nVGhpcy0+bV9wbGF5ZXJDb250cm9sbGVyIHNldExlZ2libGVNZWRpYVNlbGVj
dGlvbk9wdGlvbnM6d2ViT3B0aW9ucy5nZXQoKV07Ci0gICAgICAgIGlmIChzZWxlY3RlZEluZGV4
IDwgW3dlYk9wdGlvbnMgY291bnRdKQotICAgICAgICAgICAgW3N0cm9uZ1RoaXMtPm1fcGxheWVy
Q29udHJvbGxlciBzZXRDdXJyZW50TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uOlt3ZWJPcHRp
b25zIG9iamVjdEF0SW5kZXg6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oc2VsZWN0ZWRJbmRleCld
XTsKLSAgICB9KTsKKyAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldExlZ2libGVNZWRpYVNlbGVj
dGlvbk9wdGlvbnM6d2ViT3B0aW9ucy5nZXQoKV07CisgICAgaWYgKHNlbGVjdGVkSW5kZXggPCBb
d2ViT3B0aW9ucyBjb3VudF0pCisgICAgICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0Q3VycmVu
dExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbjpbd2ViT3B0aW9ucyBvYmplY3RBdEluZGV4OnN0
YXRpY19jYXN0PE5TVUludGVnZXI+KHNlbGVjdGVkSW5kZXgpXV07CiB9CiAKIHZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldEV4dGVybmFsUGxheWJhY2soYm9vbCBlbmFi
bGVkLCBFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0YXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxp
emVkRGV2aWNlTmFtZSkKQEAgLTkxNSw0MSArODc0LDI0IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OnNldEV4dGVybmFsUGxheWJhY2soYm9vbCBlbmFibGVkLCBFeHRl
cm5hCiAgICAgZWxzZSBpZiAodGFyZ2V0VHlwZSA9PSBUYXJnZXRUeXBlVFZPdXQpCiAgICAgICAg
IGV4dGVybmFsUGxheWJhY2tUeXBlID0gQVZQbGF5ZXJDb250cm9sbGVyRXh0ZXJuYWxQbGF5YmFj
a1R5cGVUVk91dDsKIAotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dD4gc3Ryb25nVGhpcyh0aGlzKTsKLQotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9t
YWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCBlbmFibGVkLCBsb2NhbGl6ZWREZXZpY2VOYW1lLCBl
eHRlcm5hbFBsYXliYWNrVHlwZV0gewotICAgICAgICBXZWJBVlBsYXllckNvbnRyb2xsZXIqIHBs
YXllckNvbnRyb2xsZXIgPSBzdHJvbmdUaGlzLT5tX3BsYXllckNvbnRyb2xsZXIuZ2V0KCk7Ci0g
ICAgICAgIHBsYXllckNvbnRyb2xsZXIuZXh0ZXJuYWxQbGF5YmFja0FpclBsYXlEZXZpY2VMb2Nh
bGl6ZWROYW1lID0gbG9jYWxpemVkRGV2aWNlTmFtZTsKLSAgICAgICAgcGxheWVyQ29udHJvbGxl
ci5leHRlcm5hbFBsYXliYWNrVHlwZSA9IGV4dGVybmFsUGxheWJhY2tUeXBlOwotICAgICAgICBw
bGF5ZXJDb250cm9sbGVyLmV4dGVybmFsUGxheWJhY2tBY3RpdmUgPSBlbmFibGVkOwotICAgICAg
ICBbc3Ryb25nVGhpcy0+bV92aWRlb0xheWVyQ29udGFpbmVyLmdldCgpIHNldEhpZGRlbjplbmFi
bGVkXTsKLSAgICB9KTsKKyAgICBXZWJBVlBsYXllckNvbnRyb2xsZXIqIHBsYXllckNvbnRyb2xs
ZXIgPSBtX3BsYXllckNvbnRyb2xsZXIuZ2V0KCk7CisgICAgcGxheWVyQ29udHJvbGxlci5leHRl
cm5hbFBsYXliYWNrQWlyUGxheURldmljZUxvY2FsaXplZE5hbWUgPSBsb2NhbGl6ZWREZXZpY2VO
YW1lOworICAgIHBsYXllckNvbnRyb2xsZXIuZXh0ZXJuYWxQbGF5YmFja1R5cGUgPSBleHRlcm5h
bFBsYXliYWNrVHlwZTsKKyAgICBwbGF5ZXJDb250cm9sbGVyLmV4dGVybmFsUGxheWJhY2tBY3Rp
dmUgPSBlbmFibGVkOworICAgIFttX3ZpZGVvTGF5ZXJDb250YWluZXIuZ2V0KCkgc2V0SGlkZGVu
OmVuYWJsZWRdOwogfQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojpz
ZXR1cEZ1bGxzY3JlZW4oUGxhdGZvcm1MYXllciYgdmlkZW9MYXllciwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYgaW5pdGlhbFJlY3QsIFVJVmlldyogcGFyZW50VmlldywgSFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgYWxsb3dPcHRpbWl6ZWRGdWxs
c2NyZWVuKQogewotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4g
c3Ryb25nVGhpcyh0aGlzKTsKLQogICAgIEFTU0VSVChtb2RlICE9IEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOwotICAgIG1fdmlkZW9MYXllciA9ICZ2aWRl
b0xheWVyOwotCi0gICAgbV9tb2RlID0gbW9kZTsKLQotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3Bh
dGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCAmdmlkZW9MYXllciwgaW5pdGlhbFJl
Y3QsIHBhcmVudFZpZXcsIG1vZGUsIGFsbG93T3B0aW1pemVkRnVsbHNjcmVlbl0gewotICAgICAg
ICBzdHJvbmdUaGlzLT5zZXR1cEZ1bGxzY3JlZW5JbnRlcm5hbCh2aWRlb0xheWVyLCBpbml0aWFs
UmVjdCwgcGFyZW50VmlldywgbW9kZSwgYWxsb3dPcHRpbWl6ZWRGdWxsc2NyZWVuKTsKLSAgICB9
KTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0dXBGdWxs
c2NyZWVuSW50ZXJuYWwoUGxhdGZvcm1MYXllciYgdmlkZW9MYXllciwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYgaW5pdGlhbFJlY3QsIFVJVmlldyogcGFyZW50VmlldywgSFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUsIGJvb2wgYWxsb3dPcHRpbWl6ZWRGdWxs
c2NyZWVuKQotewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OnNldHVwRnVsbHNjcmVlbkludGVybmFsKCVwKSIsIHRoaXMpOwotICAgIFVOVVNF
RF9QQVJBTSh2aWRlb0xheWVyKTsKLSAgICBVTlVTRURfUEFSQU0obW9kZSk7CisgICAgTE9HKEZ1
bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0dXBGdWxsc2Ny
ZWVuKCVwKSIsIHRoaXMpOwogCiAgICAgbV9hbGxvd09wdGltaXplZEZ1bGxzY3JlZW4gPSBhbGxv
d09wdGltaXplZEZ1bGxzY3JlZW47CiAKICAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CiAgICAg
W0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKKyAgICBtX3ZpZGVvTGF5ZXIg
PSAmdmlkZW9MYXllcjsKKyAgICBtX21vZGUgPSBtb2RlOwogICAgIG1fcGFyZW50VmlldyA9IHBh
cmVudFZpZXc7CiAgICAgbV9wYXJlbnRXaW5kb3cgPSBwYXJlbnRWaWV3LndpbmRvdzsKIApAQCAt
MTAwMSwxMSArOTQzLDggQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6
c2V0dXBGdWxsc2NyZWVuSW50ZXJuYWwoUGxhdGZvcm1MYXllciYgdmkKIAogICAgIFtDQVRyYW5z
YWN0aW9uIGNvbW1pdF07CiAKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ+IHN0cm9uZ1RoaXModGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzXSB7
Ci0gICAgICAgIGlmIChzdHJvbmdUaGlzLT5tX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAg
ICAgICAgICAgIHN0cm9uZ1RoaXMtPm1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRTZXR1
cEZ1bGxzY3JlZW4oKTsKLSAgICB9KTsKKyAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2
ZXIpCisgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRTZXR1cEZ1bGxzY3Jl
ZW4oKTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJG
dWxsc2NyZWVuKCkKQEAgLTEwMTYsMTYgKzk1NSwxMyBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0OjplbnRlckZ1bGxzY3JlZW4oKQogICAgIG1fZXhpdFJlcXVlc3RlZCA9
IGZhbHNlOwogICAgIG1fZW50ZXJSZXF1ZXN0ZWQgPSB0cnVlOwogCi0gICAgUmVmUHRyPFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOwotICAgIGRpc3Bh
dGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzXSB7Ci0gICAg
ICAgIFtzdHJvbmdUaGlzLT5tX3ZpZGVvTGF5ZXJDb250YWluZXIgc2V0QmFja2dyb3VuZENvbG9y
OltbZ2V0VUlDb2xvckNsYXNzKCkgYmxhY2tDb2xvcl0gQ0dDb2xvcl1dOwotICAgICAgICBpZiAo
c3Ryb25nVGhpcy0+bW9kZSgpID09IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZU9wdGltaXplZCkKLSAgICAgICAgICAgIHN0cm9uZ1RoaXMtPmVudGVyRnVsbHNjcmVl
bk9wdGltaXplZCgpOwotICAgICAgICBlbHNlIGlmIChzdHJvbmdUaGlzLT5tb2RlKCkgPT0gSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpCi0gICAgICAg
ICAgICBzdHJvbmdUaGlzLT5lbnRlckZ1bGxzY3JlZW5TdGFuZGFyZCgpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9KTsKKyAgICBbbV92aWRl
b0xheWVyQ29udGFpbmVyIHNldEJhY2tncm91bmRDb2xvcjpbW2dldFVJQ29sb3JDbGFzcygpIGJs
YWNrQ29sb3JdIENHQ29sb3JdXTsKKyAgICBpZiAobW9kZSgpID09IEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU9wdGltaXplZCkKKyAgICAgICAgZW50ZXJGdWxsc2Ny
ZWVuT3B0aW1pemVkKCk7CisgICAgZWxzZSBpZiAobW9kZSgpID09IEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKQorICAgICAgICBlbnRlckZ1bGxzY3Jl
ZW5TdGFuZGFyZCgpOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9
CiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyRnVsbHNjcmVl
bk9wdGltaXplZCgpCkBAIC0xMDQ1LDM0ICs5ODEsMjEgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuU3RhbmRhcmQoKQogICAgICAgICBMT0co
RnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1bGxz
Y3JlZW5TdGFuZGFyZCAtIGxhbWJkYSglcCkgLSBzdWNjZWVkZWQoJXMpIiwgdGhpcywgYm9vbFN0
cmluZyhzdWNjZWVkZWQpKTsKICAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0U2hv
d3NQbGF5YmFja0NvbnRyb2xzOllFU107CiAKLSAgICAgICAgV2ViVGhyZWFkUnVuKFt0aGlzLCBz
dHJvbmdUaGlzXSB7Ci0gICAgICAgICAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIp
Ci0gICAgICAgICAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEVudGVyRnVs
bHNjcmVlbigpOwotICAgICAgICB9KTsKKyAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9i
c2VydmVyKQorICAgICAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEVudGVy
RnVsbHNjcmVlbigpOwogICAgIH1dOwogfQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpleGl0RnVsbHNjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBmaW5hbFJl
Y3QpCiB7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJv
bmdUaGlzKHRoaXMpOwotCiAgICAgbV9leGl0UmVxdWVzdGVkID0gdHJ1ZTsKICAgICBpZiAobV9l
eGl0Q29tcGxldGVkKSB7Ci0gICAgICAgIFdlYlRocmVhZFJ1bihbc3Ryb25nVGhpc10gewotICAg
ICAgICAgICAgaWYgKHN0cm9uZ1RoaXMtPm1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQotICAg
ICAgICAgICAgICAgIHN0cm9uZ1RoaXMtPm1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRF
eGl0RnVsbHNjcmVlbigpOwotICAgICAgICB9KTsKKyAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkNo
YW5nZU9ic2VydmVyKQorICAgICAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRp
ZEV4aXRGdWxsc2NyZWVuKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSAgICBkaXNwYXRj
aF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpcywgZmluYWxSZWN0
XSB7Ci0gICAgICAgIHN0cm9uZ1RoaXMtPmV4aXRGdWxsc2NyZWVuSW50ZXJuYWwoZmluYWxSZWN0
KTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6
ZXhpdEZ1bGxzY3JlZW5JbnRlcm5hbChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBmaW5hbFJlY3Qp
Ci17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6ZXhpdEZ1bGxzY3JlZW5JbnRlcm5hbCglcCkiLCB0aGlzKTsKKyAgICAKKyAgICBMT0coRnVs
bHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpleGl0RnVsbHNjcmVl
biglcCkiLCB0aGlzKTsKICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRTaG93c1BsYXli
YWNrQ29udHJvbHM6Tk9dOwogICAgIGlmIChtX3ZpZXdDb250cm9sbGVyKQogICAgICAgICBbbV9w
bGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XS5mcmFtZSA9IFttX3BhcmVudFZpZXcgY29udmVydFJl
Y3Q6ZmluYWxSZWN0IHRvVmlldzpuaWxdOwpAQCAtMTA4OSwyNSArMTAxMiwyMyBAQCB2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpleGl0RnVsbHNjcmVlbkludGVybmFsKGNv
bnN0IFdlYkNvcmU6OkludAogICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzdG9wT3B0
aW1pemVkRnVsbHNjcmVlbl07CiAgICAgfSBlbHNlIGlmIChpc01vZGUoSFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlT3B0aW1pemVkIHwgSFRNTE1lZGlhRWxlbWVudEVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpKSB7CiAgICAgICAgIFJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlzKTsKLSAgICAgICAg
W21fcGxheWVyVmlld0NvbnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpOTyBjb21wbGV0
aW9uSGFuZGxlcjpbc3Ryb25nVGhpc10gKEJPT0wsIE5TRXJyb3IqKSB7Ci0gICAgICAgICAgICBb
c3Ryb25nVGhpcy0+bV93aW5kb3cgc2V0SGlkZGVuOk5PXTsKLSAgICAgICAgICAgIFtzdHJvbmdU
aGlzLT5tX3BsYXllclZpZXdDb250cm9sbGVyIHN0b3BPcHRpbWl6ZWRGdWxsc2NyZWVuXTsKKyAg
ICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpOTyBj
b21wbGV0aW9uSGFuZGxlcjpbc3Ryb25nVGhpcywgdGhpc10gKEJPT0wsIE5TRXJyb3IqKSB7Cisg
ICAgICAgICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOk5PXTsKKyAgICAgICAgICAgIFttX3BsYXll
clZpZXdDb250cm9sbGVyIHN0b3BPcHRpbWl6ZWRGdWxsc2NyZWVuXTsKICAgICAgICAgfV07CiAg
ICAgfSBlbHNlIGlmIChpc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlU3RhbmRhcmQpKSB7CiAgICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlzKTsKLSAgICAgICAgW21fcGxheWVyVmlld0NvbnRy
b2xsZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpZRVMgY29tcGxldGlvbkhhbmRsZXI6W3N0cm9u
Z1RoaXNdIChCT09MLCBOU0Vycm9yKikgewotICAgICAgICAgICAgc3Ryb25nVGhpcy0+bV9leGl0
Q29tcGxldGVkID0gdHJ1ZTsKKyAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgZXhpdEZ1
bGxTY3JlZW5BbmltYXRlZDpZRVMgY29tcGxldGlvbkhhbmRsZXI6W3N0cm9uZ1RoaXMsIHRoaXNd
IChCT09MLCBOU0Vycm9yKikgeworICAgICAgICAgICAgbV9leGl0Q29tcGxldGVkID0gdHJ1ZTsK
IAogICAgICAgICAgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwogICAgICAgICAgICAgW0NBVHJh
bnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKLSAgICAgICAgICAgIFtzdHJvbmdUaGlz
LT5tX3ZpZGVvTGF5ZXJDb250YWluZXIgc2V0QmFja2dyb3VuZENvbG9yOltbZ2V0VUlDb2xvckNs
YXNzKCkgY2xlYXJDb2xvcl0gQ0dDb2xvcl1dOwotICAgICAgICAgICAgW1tzdHJvbmdUaGlzLT5t
X3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEJhY2tncm91bmRDb2xvcjpbZ2V0VUlDb2xv
ckNsYXNzKCkgY2xlYXJDb2xvcl1dOworICAgICAgICAgICAgW21fdmlkZW9MYXllckNvbnRhaW5l
ciBzZXRCYWNrZ3JvdW5kQ29sb3I6W1tnZXRVSUNvbG9yQ2xhc3MoKSBjbGVhckNvbG9yXSBDR0Nv
bG9yXV07CisgICAgICAgICAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0QmFj
a2dyb3VuZENvbG9yOltnZXRVSUNvbG9yQ2xhc3MoKSBjbGVhckNvbG9yXV07CiAgICAgICAgICAg
ICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOwogCi0gICAgICAgICAgICBXZWJUaHJlYWRSdW4oW3N0
cm9uZ1RoaXNdIHsKLSAgICAgICAgICAgICAgICBpZiAoc3Ryb25nVGhpcy0+bV9mdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXIpCi0gICAgICAgICAgICAgICAgICAgIHN0cm9uZ1RoaXMtPm1fZnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFeGl0RnVsbHNjcmVlbigpOwotICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCisgICAgICAgICAg
ICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEV4aXRGdWxsc2NyZWVuKCk7CiAg
ICAgICAgIH1dOwogICAgIH07CiB9CkBAIC0xMTIyLDE2ICsxMDQzLDcgQEAgdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZXhpdEZ1bGxzY3JlZW5JbnRlcm5hbChjb25zdCBX
ZWJDb3JlOjpJbnQKIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y2xl
YW51cEZ1bGxzY3JlZW4oKQogewotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdD4gc3Ryb25nVGhpcyh0aGlzKTsKLSAgICAKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNw
YXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpc10gewotICAgICAgICBzdHJvbmdUaGlz
LT5jbGVhbnVwRnVsbHNjcmVlbkludGVybmFsKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmNsZWFudXBGdWxsc2NyZWVuSW50ZXJuYWwoKQot
ewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6
OmNsZWFudXBGdWxsc2NyZWVuSW50ZXJuYWwoJXApIiwgdGhpcyk7CisgICAgTE9HKEZ1bGxzY3Jl
ZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y2xlYW51cEZ1bGxzY3JlZW4o
JXApIiwgdGhpcyk7CiAgICAgaWYgKG1fd2luZG93KSB7CiAgICAgICAgIFttX3dpbmRvdyBzZXRI
aWRkZW46WUVTXTsKICAgICAgICAgW21fd2luZG93IHNldFJvb3RWaWV3Q29udHJvbGxlcjpuaWxd
OwpAQCAtMTE3MSwxMiArMTA4MywxMCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0OjpjbGVhbnVwRnVsbHNjcmVlbkludGVybmFsKCkKICAgICBtX3BhcmVudFZpZXcgPSBu
aWw7CiAgICAgbV9wYXJlbnRXaW5kb3cgPSBuaWw7CiAgICAgCi0gICAgUmVmUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOwotICAgIFdlYlRocmVh
ZFJ1bihbc3Ryb25nVGhpc10gewotICAgICAgICBpZiAoc3Ryb25nVGhpcy0+bV9mdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXIpCi0gICAgICAgICAgICBzdHJvbmdUaGlzLT5tX2Z1bGxzY3JlZW5DaGFu
Z2VPYnNlcnZlci0+ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKTsKLSAgICAgICAgc3Ryb25nVGhpcy0+
bV9lbnRlclJlcXVlc3RlZCA9IGZhbHNlOwotICAgIH0pOworICAgIGlmIChtX2Z1bGxzY3JlZW5D
aGFuZ2VPYnNlcnZlcikKKyAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZENs
ZWFudXBGdWxsc2NyZWVuKCk7CisKKyAgICBtX2VudGVyUmVxdWVzdGVkID0gZmFsc2U7CiB9CiAK
IHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmludmFsaWRhdGUoKQpAQCAt
MTE4NCw3ICsxMDk0LDcgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6
aW52YWxpZGF0ZSgpCiAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCA9IG5pbDsKICAgICBtX2Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciA9IG5pbDsKICAgICAKLSAgICBjbGVhbnVwRnVsbHNjcmVl
bkludGVybmFsKCk7CisgICAgY2xlYW51cEZ1bGxzY3JlZW4oKTsKIH0KIAogdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigp
CkBAIC0xMTk3LDEwICsxMTA3LDcgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpCiAgICAgCiAgICAgTE9HKEZ1bGxz
Y3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cmVxdWVzdEhpZGVBbmRF
eGl0RnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKIAotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlzKTsKLSAgICBkaXNwYXRjaF9hc3luYyhk
aXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpc10gewotICAgICAgICBbc3Ryb25n
VGhpcy0+bV93aW5kb3cgc2V0SGlkZGVuOllFU107Ci0gICAgfSk7CisgICAgW21fd2luZG93IHNl
dEhpZGRlbjpZRVNdOwogCiAgICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgJiYgIW1fZXhp
dFJlcXVlc3RlZCkgewogICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5wYXVzZSgpOwpA
QCAtMTIxMSwxOSArMTExOCwxNiBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCkKIHZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZShib29sIHZpc2libGUs
IGNvbnN0IEludFJlY3QmIGlubGluZVJlY3QpCiB7CiAgICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKCVw
KSAtIHZpc2libGUoJXMpIiwgdGhpcywgYm9vbFN0cmluZyh2aXNpYmxlKSk7Ci0gICAgUmVmUHRy
PFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOwotICAg
IGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCB2
aXNpYmxlLCBpbmxpbmVSZWN0XSB7Ci0gICAgICAgIGlmIChzdHJvbmdUaGlzLT5tX3ByZXBhcmVU
b0lubGluZUNhbGxiYWNrKSB7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChzdHJvbmdU
aGlzLT5tX3ZpZXdDb250cm9sbGVyKQotICAgICAgICAgICAgICAgIFtzdHJvbmdUaGlzLT5tX3Bs
YXllclZpZXdDb250cm9sbGVyIHZpZXddLmZyYW1lID0gW3N0cm9uZ1RoaXMtPm1fcGFyZW50Vmll
dyBjb252ZXJ0UmVjdDppbmxpbmVSZWN0IHRvVmlldzpuaWxdOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIFtzdHJvbmdUaGlzLT5tX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXdd
LmZyYW1lID0gaW5saW5lUmVjdDsKKyAgICBpZiAobV9wcmVwYXJlVG9JbmxpbmVDYWxsYmFjaykg
eworICAgICAgICAKKyAgICAgICAgaWYgKG1fdmlld0NvbnRyb2xsZXIpCisgICAgICAgICAgICBb
bV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XS5mcmFtZSA9IFttX3BhcmVudFZpZXcgY29udmVy
dFJlY3Q6aW5saW5lUmVjdCB0b1ZpZXc6bmlsXTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
W21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10uZnJhbWUgPSBpbmxpbmVSZWN0OwogCi0gICAg
ICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoYm9vbCk+IGNhbGxiYWNrID0gV1RGOjptb3ZlKHN0
cm9uZ1RoaXMtPm1fcHJlcGFyZVRvSW5saW5lQ2FsbGJhY2spOwotICAgICAgICAgICAgY2FsbGJh
Y2sodmlzaWJsZSk7Ci0gICAgICAgIH0KLSAgICB9KTsKKyAgICAgICAgc3RkOjpmdW5jdGlvbjx2
b2lkKGJvb2wpPiBjYWxsYmFjayA9IFdURjo6bW92ZShtX3ByZXBhcmVUb0lubGluZUNhbGxiYWNr
KTsKKyAgICAgICAgY2FsbGJhY2sodmlzaWJsZSk7CisgICAgfQogfQogCiBib29sIFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjptYXlBdXRvbWF0aWNhbGx5U2hvd1ZpZGVvT3B0aW1p
emVkKCkgY29uc3QKQEAgLTEyNDcsMjEgKzExNTEsMjEgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdDo6d2lsbFN0YXJ0T3B0aW1pemVkRnVsbHNjcmVlbigpCiAgICAgICAg
IHJldHVybjsKIAogICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4g
c3Ryb25nVGhpcyh0aGlzKTsKLSAgICBmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoW3N0cm9u
Z1RoaXNdKGJvb2wgdmlzaWJsZSkgeworICAgIGZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZShb
c3Ryb25nVGhpcywgdGhpc10oYm9vbCB2aXNpYmxlKSB7CiAgICAgICAgIExPRyhGdWxsc2NyZWVu
LCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndpbGxTdGFydE9wdGltaXplZEZ1
bGxzY3JlZW4gLSBsYW1iZGEoJXApIC0gdmlzaWJsZSglcykiLCBzdHJvbmdUaGlzLmdldCgpLCBi
b29sU3RyaW5nKHZpc2libGUpKTsKIAogICAgICAgICBpZiAoIXZpc2libGUpIHsKLSAgICAgICAg
ICAgIFtzdHJvbmdUaGlzLT5tX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKKyAgICAgICAgICAgIFtt
X3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
Ci0gICAgICAgIFtbc3Ryb25nVGhpcy0+bV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBsYXlv
dXRJZk5lZWRlZF07CisgICAgICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBsYXlv
dXRJZk5lZWRlZF07CiAKLSAgICAgICAgW3N0cm9uZ1RoaXMtPm1fcGxheWVyVmlld0NvbnRyb2xs
ZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpZRVMgY29tcGxldGlvbkhhbmRsZXI6W3N0cm9uZ1Ro
aXNdIChCT09MIGNvbXBsZXRlZCwgTlNFcnJvciopIHsKKyAgICAgICAgW21fcGxheWVyVmlld0Nv
bnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpZRVMgY29tcGxldGlvbkhhbmRsZXI6W3N0
cm9uZ1RoaXMsIHRoaXNdIChCT09MIGNvbXBsZXRlZCwgTlNFcnJvciopIHsKICAgICAgICAgICAg
IGlmICghY29tcGxldGVkKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIHN0
cm9uZ1RoaXMtPmNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGVTdGFuZGFyZCk7Ci0gICAgICAgICAgICBbc3Ryb25nVGhpcy0+bV93aW5kb3cgc2V0SGlk
ZGVuOllFU107CisgICAgICAgICAgICBjbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpOworICAgICAgICAgICAgW21fd2luZG93IHNldEhp
ZGRlbjpZRVNdOwogICAgICAgICB9XTsKICAgICB9KTsKIH0KQEAgLTEyNzAsMTMgKzExNzQsMTAg
QEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZGlkU3RhcnRPcHRpbWl6
ZWRGdWxsc2NyZWVuKCkKIHsKICAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0OjpkaWRTdGFydE9wdGltaXplZEZ1bGxzY3JlZW4oJXApIiwgdGhpcyk7
CiAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0U2hvd3NQbGF5YmFja0NvbnRyb2xzOllF
U107CisgICAgW21fd2luZG93IHNldEhpZGRlbjpZRVNdOwogCi0gICAgUmVmUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOwotICAgIFdlYlRocmVh
ZFJ1bihbc3Ryb25nVGhpc10gewotICAgICAgICBbc3Ryb25nVGhpcy0+bV93aW5kb3cgc2V0SGlk
ZGVuOllFU107Ci0gICAgICAgIGlmIChzdHJvbmdUaGlzLT5tX2Z1bGxzY3JlZW5DaGFuZ2VPYnNl
cnZlcikKLSAgICAgICAgICAgIHN0cm9uZ1RoaXMtPm1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
LT5kaWRFbnRlckZ1bGxzY3JlZW4oKTsKLSAgICB9KTsKKyAgICBpZiAobV9mdWxsc2NyZWVuQ2hh
bmdlT2JzZXJ2ZXIpCisgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFbnRl
ckZ1bGxzY3JlZW4oKTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6d2lsbFN0b3BPcHRpbWl6ZWRGdWxsc2NyZWVuKCkKQEAgLTEyODQsMTEgKzExODUsOCBAQCB2
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3aWxsU3RvcE9wdGltaXplZEZ1
bGxzY3JlZW4oKQogICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OndpbGxTdG9wT3B0aW1pemVkRnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKICAgICBb
bV93aW5kb3cgc2V0SGlkZGVuOk5PXTsKIAotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlzKTsKLSAgICBXZWJUaHJlYWRSdW4oW3N0cm9u
Z1RoaXNdIHsKLSAgICAgICAgaWYgKHN0cm9uZ1RoaXMtPm1fdmlkZW9GdWxsc2NyZWVuTW9kZWwp
Ci0gICAgICAgICAgICBzdHJvbmdUaGlzLT5tX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZXF1ZXN0
RXhpdEZ1bGxzY3JlZW4oKTsKLSAgICB9KTsKKyAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2Rl
bCkKKyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVxdWVzdEV4aXRGdWxsc2NyZWVu
KCk7CiB9CiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZFN0b3BP
cHRpbWl6ZWRGdWxsc2NyZWVuKCkKQEAgLTEzMDIsMTMgKzEyMDAsMTEgQEAgdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZGlkU3RvcE9wdGltaXplZEZ1bGxzY3JlZW4oKQog
ICAgIFttX3ZpZGVvTGF5ZXJDb250YWluZXIgc2V0QmFja2dyb3VuZENvbG9yOltbZ2V0VUlDb2xv
ckNsYXNzKCkgY2xlYXJDb2xvcl0gQ0dDb2xvcl1dOwogICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJv
bGxlciB2aWV3XSBzZXRCYWNrZ3JvdW5kQ29sb3I6W2dldFVJQ29sb3JDbGFzcygpIGNsZWFyQ29s
b3JdXTsKIAotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ry
b25nVGhpcyh0aGlzKTsKLSAgICBXZWJUaHJlYWRSdW4oW3N0cm9uZ1RoaXNdIHsKLSAgICAgICAg
c3Ryb25nVGhpcy0+Y2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZU9wdGltaXplZCk7Ci0gICAgICAgIFtzdHJvbmdUaGlzLT5tX3dpbmRvdyBzZXRIaWRk
ZW46WUVTXTsKLSAgICAgICAgaWYgKHN0cm9uZ1RoaXMtPm1fZnVsbHNjcmVlbkNoYW5nZU9ic2Vy
dmVyKQotICAgICAgICAgICAgc3Ryb25nVGhpcy0+bV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIt
PmRpZEV4aXRGdWxsc2NyZWVuKCk7Ci0gICAgfSk7CisgICAgY2xlYXJNb2RlKEhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU9wdGltaXplZCk7CisgICAgW21fd2luZG93
IHNldEhpZGRlbjpZRVNdOworCisgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQor
ICAgICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRXhpdEZ1bGxzY3JlZW4oKTsK
IH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2lsbENhbmNlbE9w
dGltaXplZEZ1bGxzY3JlZW4oKQpAQCAtMTMxOCwxMSArMTIxNCw4IEBAIHZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndpbGxDYW5jZWxPcHRpbWl6ZWRGdWxsc2NyZWVuKCkK
ICAgICBbbV92aWRlb0xheWVyQ29udGFpbmVyIHNldEJhY2tncm91bmRDb2xvcjpbW2dldFVJQ29s
b3JDbGFzcygpIGNsZWFyQ29sb3JdIENHQ29sb3JdXTsKICAgICBbW21fcGxheWVyVmlld0NvbnRy
b2xsZXIgdmlld10gc2V0QmFja2dyb3VuZENvbG9yOltnZXRVSUNvbG9yQ2xhc3MoKSBjbGVhckNv
bG9yXV07CiAKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHN0
cm9uZ1RoaXModGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzXSB7Ci0gICAgICAg
IGlmIChzdHJvbmdUaGlzLT5tX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQotICAgICAgICAgICAgc3Ry
b25nVGhpcy0+bV92aWRlb0Z1bGxzY3JlZW5Nb2RlbC0+cmVxdWVzdEV4aXRGdWxsc2NyZWVuKCk7
Ci0gICAgfSk7CisgICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCisgICAgICAgIG1fdmlk
ZW9GdWxsc2NyZWVuTW9kZWwtPnJlcXVlc3RFeGl0RnVsbHNjcmVlbigpOwogfQogCiB2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpkaWRDYW5jZWxPcHRpbWl6ZWRGdWxsc2Ny
ZWVuKCkKQEAgLTEzMzEsMTMgKzEyMjQsMTEgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6ZGlkQ2FuY2VsT3B0aW1pemVkRnVsbHNjcmVlbigpCiAgICAgaWYgKGhhc01v
ZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ+IHN0cm9uZ1RoaXModGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzXSB7
Ci0gICAgICAgIHN0cm9uZ1RoaXMtPmNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGVPcHRpbWl6ZWQpOwotICAgICAgICBbc3Ryb25nVGhpcy0+bV93aW5k
b3cgc2V0SGlkZGVuOllFU107Ci0gICAgICAgIGlmIChzdHJvbmdUaGlzLT5tX2Z1bGxzY3JlZW5D
aGFuZ2VPYnNlcnZlcikKLSAgICAgICAgICAgIHN0cm9uZ1RoaXMtPm1fZnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyLT5kaWRFeGl0RnVsbHNjcmVlbigpOwotICAgIH0pOworICAgIGNsZWFyTW9kZShI
VE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVPcHRpbWl6ZWQpOworICAg
IFttX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKKworICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VP
YnNlcnZlcikKKyAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEV4aXRGdWxs
c2NyZWVuKCk7CiB9CiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnBy
ZXBhcmVGb3JPcHRpbWl6ZWRGdWxsc2NyZWVuU3RvcFdpdGhDb21wbGV0aW9uSGFuZGxlcih2b2lk
ICheY29tcGxldGlvbkhhbmRsZXIpKEJPT0wgcmVzdG9yZWQpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50Lm1tCmluZGV4IDhhZDUxZWRiMWYxOTBiN2JiNjg5ODI1OGRkM2NmODNiOTll
NTBlMDkuLjM3NmNhMWY2Yzg2ZWMzYTkzY2VkNDQ2N2ExYmQ2MWE1YmI3OWJmZDQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZp
ZGVvRWxlbWVudC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0KQEAgLTE3OSwxMjUgKzE3OSw3NCBAQCB2b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0Z1bGxzY3JlZW5M
YXllcihQbGF0Zm9ybUxheWVyKgogICAgIFttX3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNldEFuY2hv
clBvaW50OkNHUG9pbnRNYWtlKDAuNSwgMC41KV07CiAgICAgW21fdmlkZW9GdWxsc2NyZWVuTGF5
ZXIgc2V0Qm91bmRzOm1fdmlkZW9GcmFtZV07CiAgICAgCi0gICAgX19ibG9jayBSZWZQdHI8V2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7Ci0gICAgV2Vi
VGhyZWFkUnVuKF57Ci0gICAgICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKLSAgICAgICAgICAgIG1f
dmlkZW9FbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihtX3ZpZGVvRnVsbHNjcmVlbkxh
eWVyLmdldCgpKTsKLSAgICAgICAgcHJvdGVjdC5jbGVhcigpOwotICAgIH0pOworICAgIGlmICht
X3ZpZGVvRWxlbWVudCkKKyAgICAgICAgbV92aWRlb0VsZW1lbnQtPnNldFZpZGVvRnVsbHNjcmVl
bkxheWVyKG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIuZ2V0KCkpOwogfQogCiB2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpwbGF5KCkKIHsKLSAgICBfX2Jsb2NrIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAg
ICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYgKG1fdmlkZW9FbGVtZW50KQotICAgICAgICAg
ICAgbV92aWRlb0VsZW1lbnQtPnBsYXkoKTsKLSAgICAgICAgcHJvdGVjdC5jbGVhcigpOwotICAg
IH0pOworICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKKyAgICAgICAgbV92aWRlb0VsZW1lbnQtPnBs
YXkoKTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6cGF1
c2UoKQogewotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50PiBwcm90ZWN0KHRoaXMpOwotICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAo
bV92aWRlb0VsZW1lbnQpCi0gICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+cGF1c2UoKTsKLSAg
ICAgICAgcHJvdGVjdC5jbGVhcigpOwotICAgIH0pOworICAgIGlmIChtX3ZpZGVvRWxlbWVudCkK
KyAgICAgICAgbV92aWRlb0VsZW1lbnQtPnBhdXNlKCk7CiB9CiAKIHZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnRvZ2dsZVBsYXlTdGF0ZSgpCiB7Ci0gICAgX19ibG9j
ayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3QodGhp
cyk7Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKLSAg
ICAgICAgICAgIG1fdmlkZW9FbGVtZW50LT50b2dnbGVQbGF5U3RhdGUoKTsKLSAgICAgICAgcHJv
dGVjdC5jbGVhcigpOwotICAgIH0pOworICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKKyAgICAgICAg
bV92aWRlb0VsZW1lbnQtPnRvZ2dsZVBsYXlTdGF0ZSgpOwogfQogCiB2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpiZWdpblNjcnViYmluZygpCiB7Ci0gICAgX19ibG9j
ayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3QodGhp
cyk7Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKLSAg
ICAgICAgICAgIG1fdmlkZW9FbGVtZW50LT5iZWdpblNjcnViYmluZygpOwotICAgICAgICBwcm90
ZWN0LmNsZWFyKCk7Ci0gICAgfSk7CisgICAgaWYgKG1fdmlkZW9FbGVtZW50KQorICAgICAgICBt
X3ZpZGVvRWxlbWVudC0+YmVnaW5TY3J1YmJpbmcoKTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6ZW5kU2NydWJiaW5nKCkKIHsKLSAgICBfX2Jsb2NrIFJl
ZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsK
LSAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYgKG1fdmlkZW9FbGVtZW50KQotICAgICAg
ICAgICAgbV92aWRlb0VsZW1lbnQtPmVuZFNjcnViYmluZygpOwotICAgICAgICBwcm90ZWN0LmNs
ZWFyKCk7Ci0gICAgfSk7CisgICAgaWYgKG1fdmlkZW9FbGVtZW50KQorICAgICAgICBtX3ZpZGVv
RWxlbWVudC0+ZW5kU2NydWJiaW5nKCk7CiB9CiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ6OnNlZWtUb1RpbWUoZG91YmxlIHRpbWUpCiB7Ci0gICAgX19ibG9jayBS
ZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7
Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKLSAgICAg
ICAgICAgIG1fdmlkZW9FbGVtZW50LT5zZXRDdXJyZW50VGltZSh0aW1lKTsKLSAgICAgICAgcHJv
dGVjdC5jbGVhcigpOwotICAgIH0pOworICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKKyAgICAgICAg
bV92aWRlb0VsZW1lbnQtPnNldEN1cnJlbnRUaW1lKHRpbWUpOwogfQogCiB2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpmYXN0U2Vlayhkb3VibGUgdGltZSkKIHsKLSAg
ICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gcHJv
dGVjdCh0aGlzKTsKLSAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYgKG1fdmlkZW9FbGVt
ZW50KQotICAgICAgICAgICAgbV92aWRlb0VsZW1lbnQtPmZhc3RTZWVrKHRpbWUpOwotICAgICAg
ICBwcm90ZWN0LmNsZWFyKCk7Ci0gICAgfSk7CisgICAgaWYgKG1fdmlkZW9FbGVtZW50KQorICAg
ICAgICBtX3ZpZGVvRWxlbWVudC0+ZmFzdFNlZWsodGltZSk7CiB9CiAKIHZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkKIHsKLSAg
ICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gcHJv
dGVjdCh0aGlzKTsKLSAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYgKG1fdmlkZW9FbGVt
ZW50KQotICAgICAgICAgICAgbV92aWRlb0VsZW1lbnQtPmJlZ2luU2Nhbm5pbmcoTWVkaWFDb250
cm9sbGVySW50ZXJmYWNlOjpGb3J3YXJkKTsKLSAgICAgICAgcHJvdGVjdC5jbGVhcigpOwotICAg
IH0pOworICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKKyAgICAgICAgbV92aWRlb0VsZW1lbnQtPmJl
Z2luU2Nhbm5pbmcoTWVkaWFDb250cm9sbGVySW50ZXJmYWNlOjpGb3J3YXJkKTsKIH0KIAogdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6YmVnaW5TY2FubmluZ0JhY2t3
YXJkKCkKIHsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYg
KG1fdmlkZW9FbGVtZW50KQotICAgICAgICAgICAgbV92aWRlb0VsZW1lbnQtPmJlZ2luU2Nhbm5p
bmcoTWVkaWFDb250cm9sbGVySW50ZXJmYWNlOjpCYWNrd2FyZCk7Ci0gICAgICAgIHByb3RlY3Qu
Y2xlYXIoKTsKLSAgICB9KTsKKyAgICBpZiAobV92aWRlb0VsZW1lbnQpCisgICAgICAgIG1fdmlk
ZW9FbGVtZW50LT5iZWdpblNjYW5uaW5nKE1lZGlhQ29udHJvbGxlckludGVyZmFjZTo6QmFja3dh
cmQpOwogfQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjplbmRT
Y2FubmluZygpCiB7Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAg
IGlmIChtX3ZpZGVvRWxlbWVudCkKLSAgICAgICAgICAgIG1fdmlkZW9FbGVtZW50LT5lbmRTY2Fu
bmluZygpOwotICAgICAgICBwcm90ZWN0LmNsZWFyKCk7Ci0gICAgfSk7CisgICAgaWYgKG1fdmlk
ZW9FbGVtZW50KQorICAgICAgICBtX3ZpZGVvRWxlbWVudC0+ZW5kU2Nhbm5pbmcoKTsKIH0KIAog
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6cmVxdWVzdEV4aXRGdWxs
c2NyZWVuKCkKIHsKLSAgICBpZiAoIW1fdmlkZW9FbGVtZW50KQotICAgICAgICByZXR1cm47Ci0K
LSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4g
cHJvdGVjdCh0aGlzKTsKLSAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYgKG1fdmlkZW9F
bGVtZW50ICYmIG1fdmlkZW9FbGVtZW50LT5pc0Z1bGxzY3JlZW4oKSkKLSAgICAgICAgICAgIG1f
dmlkZW9FbGVtZW50LT5leGl0RnVsbHNjcmVlbigpOwotICAgICAgICBwcm90ZWN0LmNsZWFyKCk7
Ci0gICAgfSk7CisgICAgaWYgKG1fdmlkZW9FbGVtZW50ICYmIG1fdmlkZW9FbGVtZW50LT5pc0Z1
bGxzY3JlZW4oKSkKKyAgICAgICAgbV92aWRlb0VsZW1lbnQtPmV4aXRGdWxsc2NyZWVuKCk7CiB9
CiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvTGF5
ZXJGcmFtZShGbG9hdFJlY3QgcmVjdCkKQEAgLTQ1NCwxMiArNDAzLDggQEAgY29uc3QgQXRvbWlj
U3RyaW5nJiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6ZXZlbnROYW1lQWxs
KCkKIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6ZnVsbHNjcmVl
bk1vZGVDaGFuZ2VkKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2
aWRlb0Z1bGxzY3JlZW5Nb2RlKQogewotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50PiBwcm90ZWN0KHRoaXMpOwotICAgIFdlYlRocmVhZFJ1bihe
ewotICAgICAgICBpZiAobV92aWRlb0VsZW1lbnQpCi0gICAgICAgICAgICBtX3ZpZGVvRWxlbWVu
dC0+ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHZpZGVvRnVsbHNjcmVlbk1vZGUpOwotICAgICAgICBw
cm90ZWN0LmNsZWFyKCk7Ci0gICAgfSk7CisgICAgaWYgKG1fdmlkZW9FbGVtZW50KQorICAgICAg
ICBtX3ZpZGVvRWxlbWVudC0+ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHZpZGVvRnVsbHNjcmVlbk1v
ZGUpOwogfQogCiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253609</attachid>
            <date>2015-05-22 14:59:10 -0700</date>
            <delta_ts>2015-05-26 13:24:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143954-20150522145904.patch</filename>
            <type>text/plain</type>
            <size>64464</size>
            <attacher name="Jeremy Jones">jeremyj-wk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg0NzM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGFhMTExNjZhNzRlM2M3
ODYwZTU0MzFhZjE1ODZiZDcxMjM1ZmUwZC4uNDkyNDA0NWMxZjk3YWNkYzM3NTIyYjI2M2RmNzM5
YzI2YzFlMzZhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExOSBAQAorMjAxNS0wNC0yMCAgSmVy
ZW15IEpvbmVzICA8amVyZW15akBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgV2ViS2l0
MSBzcGVjaWZpYyB0aHJlYWRpbmcgY29kZSBvdXQgb2YgV2ViVmlkZW9GdWxsc2NyZWVuIGNvZGUg
dGhhdCBpcyBzaGFyZWQgd2l0aCBXZWJLaXQyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQzOTU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQgaXMg
dXNlZCBpbiBib3RoIFdlYktpdDEgYW5kIFdlYktpdDIuIEluIFdlYktpdDEsIHRoZSBtb2RlbCBy
dW5zIGluIHRoZSBXZWJUaHJlYWQsIHdoaWxlCisgICAgICAgIHRoZSBpbnRlcmZhY2UgaXMgb24g
dGhlIG1haW4gdGhyZWFkLiBTbyB0aGVyZSBpcyBjb2RlIHRvIGRpc3BhdGNoIGJldHdlZW4gdGhl
c2UgdHdvIHRocmVhZCB3aGVuIGNvbW11bmljYXRpbmcgYmV0d2VlbiB0aGUKKyAgICAgICAgaW50
ZXJmYWNlIGFuZCB0aGUgbW9kZWwuIEluIFdlYktpdDIsIHRoaXMgaXMgaGFuZGxlZCBhdXRvbWF0
aWNhbGx5IGJ5IHRoZSBJUEMgbWVjaGFuaXNtLiBBcyBhIHJlc3VsdCwgdGhlIHRocmVhZGluZyBj
b2RlCisgICAgICAgIGluIFdlYlZpZGVvRnVsbHNjcmVlbmJJbnRlcmZhY2VBVktpdCBhbmQgaW4g
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQgaXMgcmVkdW5kYW50IGluIFdlYktp
dDIgYW5kIHJlbGllcyBvbgorICAgICAgICBXZWJUaHJlYWRSdW4gYmVpbmcgYSBuby1vcCBpbiBX
ZWJLaXQyLgorCisgICAgICAgIFRoaXMgY2hhbmdlIGNsYXJpZmllcyB0aGlzIGFuZCBzaW1wbGlm
aWVzIHRoZSBXZWJLaXQyIHBhdGggYnkgbW92aW5nIHRoZSBXZWJLaXQxIHNwZWNpZmljIHRocmVh
ZGluZyBjb2RlIGludG8KKyAgICAgICAgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQsIHdoaWNoIGlzIHRoZSBXZWJLaXQxIHNwZWNpZmljIGNvbnRyb2xsZXIuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tOgorICAg
ICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OldlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0KToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0OjpzZXRDb250cm9sbGVyKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpkaWRTZXR1cEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZEV4aXRGdWxsc2NyZWVuKToKKyAgICAg
ICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpkaWRDbGVhbnVwRnVsbHNj
cmVlbik6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZnVs
bHNjcmVlbk1heVJldHVyblRvSW5saW5lKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpyZXNldE1lZGlhU3RhdGUpOgorICAgICAgICAoV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldER1cmF0aW9uKToKKyAgICAgICAgKFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRDdXJyZW50VGltZSk6CisgICAgICAgIChX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0QnVmZmVyZWRUaW1lKToKKyAg
ICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRSYXRlKToKKyAg
ICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRWaWRlb0RpbWVu
c2lvbnMpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNl
dFNlZWthYmxlUmFuZ2VzKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpzZXRDYW5QbGF5RmFzdFJldmVyc2UpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKToKKyAg
ICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRMZWdpYmxlTWVk
aWFTZWxlY3Rpb25PcHRpb25zKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OjpzZXRFeHRlcm5hbFBsYXliYWNrKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0OjpwbGF5KToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpwYXVzZSk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6dG9nZ2xlUGxheVN0YXRlKToKKyAgICAgICAgKFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpiZWdpblNjcnViYmluZyk6CisgICAgICAgIChXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZW5kU2NydWJiaW5nKToKKyAgICAgICAg
KFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWVrVG9UaW1lKToKKyAgICAg
ICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpmYXN0U2Vlayk6CisgICAg
ICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YmVnaW5TY2FubmluZ0Zv
cndhcmQpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmJl
Z2luU2Nhbm5pbmdCYWNrd2FyZCk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6ZW5kU2Nhbm5pbmcpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OnJlcXVlc3RFeGl0RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0VmlkZW9MYXllckZyYW1lKToKKyAgICAg
ICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRWaWRlb0xheWVyR3Jh
dml0eSk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vs
ZWN0QXVkaW9NZWRpYU9wdGlvbik6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9s
bGVyQ29udGV4dDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKToKKyAgICAgICAgKFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQpOgorICAg
ICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldHVwRnVsbHNjcmVl
bik6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXhpdEZ1
bGxzY3JlZW4pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyIGluaXRdKToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlciBkZWFsbG9jXSk6CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXIgZW50ZXJGdWxsc2NyZWVuOm1vZGU6XSk6CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXIgZXhpdEZ1bGxzY3JlZW5dKToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlciByZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuXSk6CisgICAgICAgICgt
W1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIgZGlkRmluaXNoRnVsbHNjcmVlbjpdKToKKyAg
ICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDaGFuZ2VPYnNlcnZlcjo6c2V0VGFy
Z2V0KTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBk
aWRTZXR1cEZ1bGxzY3JlZW5dKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlciBkaWRFbnRlckZ1bGxzY3JlZW5dKTogRGVsZXRlZC4KKyAgICAgICAgKC1b
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBkaWRFeGl0RnVsbHNjcmVlbl0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIGRpZENsZWFudXBGdWxs
c2NyZWVuXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXIgZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lXSk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lmg6CisgICAgICAgICog
cGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tOgorICAgICAg
ICAoLVtXZWJBVlZpZGVvTGF5ZXIgc2V0Qm91bmRzOl0pOgorICAgICAgICAoLVtXZWJBVlZpZGVv
TGF5ZXIgcmVzb2x2ZUJvdW5kc10pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OnJlc2V0TWVkaWFTdGF0ZSk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6c2V0RHVyYXRpb24pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OnNldEN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0OjpzZXRCdWZmZXJlZFRpbWUpOgorICAgICAgICAoV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFJhdGUpOgorICAgICAgICAoV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFZpZGVvRGltZW5zaW9ucyk6CisgICAgICAgIChXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0U2Vla2FibGVSYW5nZXMpOgorICAgICAg
ICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldENhblBsYXlGYXN0UmV2ZXJz
ZSk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0QXVkaW9N
ZWRpYVNlbGVjdGlvbk9wdGlvbnMpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OnNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMpOgorICAgICAgICAoV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldEV4dGVybmFsUGxheWJhY2spOgorICAg
ICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldHVwRnVsbHNjcmVlbik6
CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2Ny
ZWVuKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1
bGxzY3JlZW5TdGFuZGFyZCk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6ZXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OmV4aXRGdWxsc2NyZWVuSW50ZXJuYWwpOgorICAgICAgICAoV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmNsZWFudXBGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpjbGVhbnVwRnVsbHNjcmVlbkludGVybmFsKToK
KyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpyZXF1ZXN0SGlkZUFu
ZEV4aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OndpbGxTdGFydE9wdGltaXplZEZ1bGxzY3JlZW4pOgorICAgICAg
ICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZFN0YXJ0T3B0aW1pemVkRnVs
bHNjcmVlbik6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2ls
bFN0b3BPcHRpbWl6ZWRGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjpkaWRTdG9wT3B0aW1pemVkRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2lsbENhbmNlbE9wdGltaXplZEZ1bGxzY3Jl
ZW4pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZENhbmNl
bE9wdGltaXplZEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OnNldFZpZGVvTGF5ZXJGcmFtZSk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdDo6c2V0dXBGdWxsc2NyZWVuSW50ZXJuYWwpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oOgorICAgICAgICAq
IHBsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5t
bToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRl
b0Z1bGxzY3JlZW5MYXllcik6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudDo6cGxheSk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudDo6cGF1c2UpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQ6OnRvZ2dsZVBsYXlTdGF0ZSk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZp
ZGVvRWxlbWVudDo6YmVnaW5TY3J1YmJpbmcpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQ6OmVuZFNjcnViYmluZyk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2Vla1RvVGltZSk6CisgICAgICAgIChXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6ZmFzdFNlZWspOgorICAgICAgICAoV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKToKKyAgICAg
ICAgKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpiZWdpblNjYW5uaW5nQmFj
a3dhcmQpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmVu
ZFNjYW5uaW5nKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
OjpyZXF1ZXN0RXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCk6CisgICAgICAgIChXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6dmlkZW9MYXllckZyYW1lKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojp2aWRlb0xheWVy
R3Jhdml0eSk6IERlbGV0ZWQuCisKIDIwMTUtMDUtMjEgIEpha2UgTmllbHNlbiAgPGphY29iX25p
ZWxzZW5AYXBwbGUuY29tPgogCiAgICAgICAgIHIxODQ3MTggYW5kIHIxODQ3MjUgY2F1c2VkIGZv
dXIgdGVzdHMgdG8gYmVnaW4gY3Jhc2hpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1t
CmluZGV4IGIxYzBiZTkwNDVkMDBhNTUyMTZkMTZlZTU3MTcwYjI0ZjMyNjFlOGQuLjdjNmEzZGFi
MTYxZDRlOTY0MTJiZjkzMGU5MmVkOWIxZDU4Mzk0MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJBVktpdC5tbQpAQCAtMzAsNiArMzAsNyBAQAogI2ltcG9ydCAiV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckFWS2l0LmgiCiAKICNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIlRpbWVS
YW5nZXMuaCIKICNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgiCiAj
aW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oIgogI2ltcG9ydCA8
UXVhcnR6Q29yZS9Db3JlQW5pbWF0aW9uLmg+CkBAIC01MSw3ICs1Miw3IEBAIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogICAgIHJldHVybiBudWxscHRyOwogfQogCi0tICh2b2lkKWVudGVyRnVs
bHNjcmVlbjooVUlWaWV3ICopdmlldyBtb2RlOihXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlKW1vZGUKKy0gKHZvaWQpZW50ZXJGdWxsc2NyZWVuOihVSVZpZXcg
Kil2aWV3IG1vZGU6KFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZSltb2RlCiB7CiAgICAgVU5VU0VEX1BBUkFNKHZpZXcpOwogICAgIFVOVVNFRF9QQVJB
TShtb2RlKTsKQEAgLTY4LDMyICs2OSw0ODUgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
ICNlbHNlCiAKLUBpbnRlcmZhY2UgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciAoRnVsbHNj
cmVlbk9ic2VydmF0aW9uKQotLSAodm9pZClkaWRTZXR1cEZ1bGxzY3JlZW47Ci0tICh2b2lkKWRp
ZEVudGVyRnVsbHNjcmVlbjsKLS0gKHZvaWQpZGlkRXhpdEZ1bGxzY3JlZW47Ci0tICh2b2lkKWRp
ZENsZWFudXBGdWxsc2NyZWVuOwotLSAodm9pZClmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmU7
CitjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDsKKworQGludGVyZmFj
ZSBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIChkZWxlZ2F0ZSkKKy0odm9pZClkaWRGaW5p
c2hGdWxsc2NyZWVuOihXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dCopY29udGV4
dDsKIEBlbmQKIAotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNoYW5nZU9ic2Vy
dmVyIDogcHVibGljIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyIHsKLSAgICBXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyKiBfdGFyZ2V0OworY2xhc3MgV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQgZmluYWwKKyAgICA6IHByaXZhdGUgV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlCisgICAgLCBwcml2YXRlIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsCisgICAg
LCBwcml2YXRlIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyCisgICAgLCBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+
IHsKKwogcHVibGljOgotICAgIHZvaWQgc2V0VGFyZ2V0KFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXIqIHRhcmdldCkgeyBfdGFyZ2V0ID0gdGFyZ2V0OyB9Ci0gICAgdmlydHVhbCB2b2lkIGRp
ZFNldHVwRnVsbHNjcmVlbigpIG92ZXJyaWRlIHsgW190YXJnZXQgZGlkU2V0dXBGdWxsc2NyZWVu
XTsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRFbnRlckZ1bGxzY3JlZW4oKSBvdmVycmlkZSB7IFtf
dGFyZ2V0IGRpZEVudGVyRnVsbHNjcmVlbl07IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkRXhpdEZ1
bGxzY3JlZW4oKSBvdmVycmlkZSB7IFtfdGFyZ2V0IGRpZEV4aXRGdWxsc2NyZWVuXTsgfQotICAg
IHZpcnR1YWwgdm9pZCBkaWRDbGVhbnVwRnVsbHNjcmVlbigpIG92ZXJyaWRlIHsgW190YXJnZXQg
ZGlkQ2xlYW51cEZ1bGxzY3JlZW5dOyB9Ci0gICAgdmlydHVhbCB2b2lkIGZ1bGxzY3JlZW5NYXlS
ZXR1cm5Ub0lubGluZSgpIG92ZXJyaWRlIHsgW190YXJnZXQgZnVsbHNjcmVlbk1heVJldHVyblRv
SW5saW5lXTsgfQorICAgIHN0YXRpYyBSZWY8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNv
bnRleHQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dCk7CisgICAgfQorICAgIAorICAgIHZvaWQg
c2V0Q29udHJvbGxlcihXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyKiBjb250cm9sbGVyKSB7
IG1fY29udHJvbGxlciA9IGNvbnRyb2xsZXI7IH0KKyAgICB2b2lkIHNldFVwRnVsbHNjcmVlbihI
VE1MVmlkZW9FbGVtZW50JiwgVUlWaWV3ICosIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9G
dWxsc2NyZWVuTW9kZSk7CisgICAgdm9pZCBleGl0RnVsbHNjcmVlbigpOworICAgIHZvaWQgcmVx
dWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpOworICAgIHZvaWQgaW52YWxpZGF0ZSgpOworCitw
cml2YXRlOgorICAgIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0KCkgeyB9CisK
KyAgICAvLyBXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcgorICAgIHZpcnR1YWwgdm9p
ZCBkaWRTZXR1cEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRW50
ZXJGdWxsc2NyZWVuKCkgb3ZlcnJpZGUgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZEV4aXRGdWxs
c2NyZWVuKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZENsZWFudXBGdWxsc2NyZWVu
KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGlu
ZSgpIG92ZXJyaWRlOworICAgIAorICAgIC8vIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZQor
ICAgIHZpcnR1YWwgdm9pZCByZXNldE1lZGlhU3RhdGUoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0RHVyYXRpb24oZG91YmxlKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
Q3VycmVudFRpbWUoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIHNldEJ1ZmZlcmVkVGltZShkb3VibGUpIG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRSYXRlKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1Jh
dGUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRWaWRlb0RpbWVuc2lvbnMoYm9vbCBo
YXNWaWRlbywgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCB2b2lkIHNldFNlZWthYmxlUmFuZ2VzKGNvbnN0IFRpbWVSYW5nZXMmKSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0Q2FuUGxheUZhc3RSZXZlcnNlKGJvb2wpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBzZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25zdCBWZWN0b3I8
U3RyaW5nPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIHNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9y
PFN0cmluZz4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBzZXRFeHRlcm5hbFBsYXliYWNrKGJvb2wgZW5hYmxlZCwgRXh0ZXJuYWxQ
bGF5YmFja1RhcmdldFR5cGUsIFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKSBvdmVycmlkZTsK
KyAgICAKKyAgICAvLyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbAorICAgIHZpcnR1YWwgdm9pZCBw
bGF5KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHBhdXNlKCkgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIHRvZ2dsZVBsYXlTdGF0ZSgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9p
ZCBiZWdpblNjcnViYmluZygpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmRTY3J1YmJp
bmcoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Vla1RvVGltZShkb3VibGUgdGltZSkg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGZhc3RTZWVrKGRvdWJsZSB0aW1lKSBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5TY2FubmluZ0ZvcndhcmQoKSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgYmVnaW5TY2FubmluZ0JhY2t3YXJkKCkgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB2b2lkIGVuZFNjYW5uaW5nKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHJlcXVl
c3RFeGl0RnVsbHNjcmVlbigpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRWaWRlb0xh
eWVyRnJhbWUoRmxvYXRSZWN0KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCB2aWRl
b0xheWVyRnJhbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2ZyYW1lOyB9CisgICAgdmly
dHVhbCB2b2lkIHNldFZpZGVvTGF5ZXJHcmF2aXR5KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpW
aWRlb0dyYXZpdHkpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgVmlkZW9HcmF2aXR5IHZpZGVvTGF5
ZXJHcmF2aXR5KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9ncmF2aXR5OyB9CisgICAgdmly
dHVhbCB2b2lkIHNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5k
ZXgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBmdWxsc2NyZWVuTW9kZUNoYW5nZWQoSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKSBvdmVycmlkZTsKKyAgICAK
KyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IG1faW50ZXJmYWNl
OworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbV9tb2Rl
bDsKKyAgICBSZWZQdHI8SFRNTFZpZGVvRWxlbWVudD4gbV92aWRlb0VsZW1lbnQ7CisgICAgUmV0
YWluUHRyPFBsYXRmb3JtTGF5ZXI+IG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXI7CisgICAgUmV0YWlu
UHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXI+IG1fY29udHJvbGxlcjsKKyAgICBGbG9h
dFJlY3QgbV9mcmFtZTsKKyAgICBWaWRlb0dyYXZpdHkgbV9ncmF2aXR5OwogfTsKIAotQGltcGxl
bWVudGF0aW9uIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIKKyNwcmFnbWEgbWFyayBXZWJW
aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcgorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpkaWRTZXR1cEZ1bGxzY3JlZW4oKQogeworICAgIEFTU0VSVChpc1VJ
VGhyZWFkKCkpOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oW3N0cm9uZ1RoaXMsIHRoaXNd
IHsKKyAgICAgICAgbV9tb2RlbC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIobV92aWRlb0Z1bGxz
Y3JlZW5MYXllci5nZXQoKSk7CisgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9t
YWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCB0aGlzXSB7CisgICAgICAgICAgICBtX2ludGVyZmFj
ZS0+ZW50ZXJGdWxsc2NyZWVuKCk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpkaWRFeGl0RnVsbHNjcmVlbigpCit7
CisgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0PiBzdHJvbmdUaGlzKHRoaXMpOworICAgIFdlYlRocmVhZFJ1bihb
c3Ryb25nVGhpcywgdGhpc10geworICAgICAgICBtX21vZGVsLT5zZXRWaWRlb0Z1bGxzY3JlZW5M
YXllcihuaWwpOworICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1
ZSgpLCBbc3Ryb25nVGhpcywgdGhpc10geworICAgICAgICAgICAgbV9pbnRlcmZhY2UtPmNsZWFu
dXBGdWxsc2NyZWVuKCk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpkaWRDbGVhbnVwRnVsbHNjcmVlbigpCit7Cisg
ICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CisgICAgbV9pbnRlcmZhY2UtPnNldFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsKG51bGxwdHIpOworICAgIG1faW50ZXJmYWNlLT5zZXRXZWJWaWRlb0Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlcihudWxscHRyKTsKKyAgICBtX2ludGVyZmFjZSA9IG51bGxwdHI7
CisgICAgCisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBz
dHJvbmdUaGlzKHRoaXMpOworICAgIFdlYlRocmVhZFJ1bihbc3Ryb25nVGhpcywgdGhpc10gewor
ICAgICAgICBtX21vZGVsLT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihuaWwpOworICAgICAgICBt
X21vZGVsLT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UobnVsbHB0cik7CisgICAgICAg
IG1fbW9kZWwtPnNldFZpZGVvRWxlbWVudChudWxscHRyKTsKKyAgICAgICAgbV9tb2RlbCA9IG51
bGxwdHI7CisgICAgICAgIG1fdmlkZW9FbGVtZW50ID0gbnVsbHB0cjsKKyAgICAgICAgbV92aWRl
b0Z1bGxzY3JlZW5MYXllciA9IG5pbDsKKyAgICAgICAgCisgICAgICAgIFttX2NvbnRyb2xsZXIg
ZGlkRmluaXNoRnVsbHNjcmVlbjp0aGlzXTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKCkK
K3sKKyAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7CisgICAgV2ViVGhyZWFkUnVu
KFtzdHJvbmdUaGlzLCB0aGlzXSB7CisgICAgICAgIEludFJlY3QgY2xpZW50UmVjdCA9IG1fdmlk
ZW9FbGVtZW50LT5jbGllbnRSZWN0KCk7CisgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNo
X2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCB0aGlzLCBjbGllbnRSZWN0XSB7CisgICAg
ICAgICAgICBtX2ludGVyZmFjZS0+cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKHRydWUsIGNsaWVu
dFJlY3QpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKworI3ByYWdtYSBtYXJrIFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpyZXNldE1lZGlhU3RhdGUoKQoreworICAgIEFTU0VSVChXZWJUaHJlYWRJc0N1cnJl
bnQoKSB8fCBpc01haW5UaHJlYWQoKSk7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0PiBzdHJvbmdUaGlzKHRoaXMpOworICAgIGRpc3BhdGNoX2FzeW5jKGRp
c3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCB0aGlzXSB7CisgICAgICAgIGlm
IChtX2ludGVyZmFjZSkKKyAgICAgICAgICAgIG1faW50ZXJmYWNlLT5yZXNldE1lZGlhU3RhdGUo
KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dDo6c2V0RHVyYXRpb24oZG91YmxlIGR1cmF0aW9uKQoreworICAgIEFTU0VSVChXZWJUaHJlYWRJ
c0N1cnJlbnQoKSk7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0PiBzdHJvbmdUaGlzKHRoaXMpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9t
YWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCB0aGlzLCBkdXJhdGlvbl0geworICAgICAgICBpZiAo
bV9pbnRlcmZhY2UpCisgICAgICAgICAgICBtX2ludGVyZmFjZS0+c2V0RHVyYXRpb24oZHVyYXRp
b24pOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpzZXRDdXJyZW50VGltZShkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1l
KQoreworICAgIEFTU0VSVChXZWJUaHJlYWRJc0N1cnJlbnQoKSk7CisgICAgUmVmUHRyPFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBzdHJvbmdUaGlzKHRoaXMpOworICAgIGRp
c3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCB0aGlz
LCBjdXJyZW50VGltZSwgYW5jaG9yVGltZV0geworICAgICAgICBpZiAobV9pbnRlcmZhY2UpCisg
ICAgICAgICAgICBtX2ludGVyZmFjZS0+c2V0Q3VycmVudFRpbWUoY3VycmVudFRpbWUsIGFuY2hv
clRpbWUpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpzZXRCdWZmZXJlZFRpbWUoZG91YmxlIGJ1ZmZlcmVkVGltZSkKK3sKKyAgICBBU1NF
UlQoV2ViVGhyZWFkSXNDdXJyZW50KCkpOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBkaXNwYXRjaF9hc3luYyhk
aXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpcywgdGhpcywgYnVmZmVyZWRUaW1l
XSB7CisgICAgICAgIGlmIChtX2ludGVyZmFjZSkKKyAgICAgICAgICAgIG1faW50ZXJmYWNlLT5z
ZXRCdWZmZXJlZFRpbWUoYnVmZmVyZWRUaW1lKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0UmF0ZShib29sIGlzUGxheWluZywgZmxv
YXQgcGxheWJhY2tSYXRlKQoreworICAgIEFTU0VSVChXZWJUaHJlYWRJc0N1cnJlbnQoKSk7Cisg
ICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBzdHJvbmdUaGlz
KHRoaXMpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtz
dHJvbmdUaGlzLCB0aGlzLCBpc1BsYXlpbmcsIHBsYXliYWNrUmF0ZV0geworICAgICAgICBpZiAo
bV9pbnRlcmZhY2UpCisgICAgICAgICAgICBtX2ludGVyZmFjZS0+c2V0UmF0ZShpc1BsYXlpbmcs
IHBsYXliYWNrUmF0ZSk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OnNldFZpZGVvRGltZW5zaW9ucyhib29sIGhhc1ZpZGVvLCBmbG9hdCB3
aWR0aCwgZmxvYXQgaGVpZ2h0KQoreworICAgIEFTU0VSVChXZWJUaHJlYWRJc0N1cnJlbnQoKSk7
CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBzdHJvbmdU
aGlzKHRoaXMpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCks
IFtzdHJvbmdUaGlzLCB0aGlzLCBoYXNWaWRlbywgd2lkdGgsIGhlaWdodF0geworICAgICAgICBp
ZiAobV9pbnRlcmZhY2UpCisgICAgICAgICAgICBtX2ludGVyZmFjZS0+c2V0VmlkZW9EaW1lbnNp
b25zKGhhc1ZpZGVvLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0U2Vla2FibGVSYW5nZXMoY29uc3QgVGlt
ZVJhbmdlcyYgdGltZVJhbmdlcykKK3sKKyAgICBBU1NFUlQoV2ViVGhyZWFkSXNDdXJyZW50KCkp
OworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25n
VGhpcyh0aGlzKTsKKyAgICBjb25zdCBQbGF0Zm9ybVRpbWVSYW5nZXMmIHBsYXRmb3JtVGltZVJh
bmdlcyA9IHRpbWVSYW5nZXMucmFuZ2VzKCk7CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hf
Z2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMsIHRoaXMsIHBsYXRmb3JtVGltZVJhbmdlc10g
eworICAgICAgICBSZWZQdHI8VGltZVJhbmdlcz4gdGltZVJhbmdlcyA9IFRpbWVSYW5nZXM6OmNy
ZWF0ZShwbGF0Zm9ybVRpbWVSYW5nZXMpOworICAgICAgICBpZiAobV9pbnRlcmZhY2UpCisgICAg
ICAgICAgICBtX2ludGVyZmFjZS0+c2V0U2Vla2FibGVSYW5nZXMoKnRpbWVSYW5nZXMuZ2V0KCkp
OworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjpzZXRDYW5QbGF5RmFzdFJldmVyc2UoYm9vbCBjYW5QbGF5RmFzdFJldmVyc2UpCit7CisgICAg
QVNTRVJUKFdlYlRocmVhZElzQ3VycmVudCgpKTsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7CisgICAgZGlzcGF0Y2hfYXN5
bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMsIHRoaXMsIGNhblBsYXlG
YXN0UmV2ZXJzZV0geworICAgICAgICBpZiAobV9pbnRlcmZhY2UpCisgICAgICAgICAgICBtX2lu
dGVyZmFjZS0+c2V0Q2FuUGxheUZhc3RSZXZlcnNlKGNhblBsYXlGYXN0UmV2ZXJzZSk7CisgICAg
fSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldEF1
ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvcHRpb25zLCB1
aW50NjRfdCBzZWxlY3RlZEluZGV4KQoreworICAgIEFTU0VSVChXZWJUaHJlYWRJc0N1cnJlbnQo
KSk7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBzdHJv
bmdUaGlzKHRoaXMpOworCisgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBvcHRpb25zQXJy
YXkgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6b3B0
aW9ucy5zaXplKCldKTsKKyAgICBmb3IgKGF1dG8mIG5hbWUgOiBvcHRpb25zKQorICAgICAgICBb
b3B0aW9uc0FycmF5IGFkZE9iamVjdDpuYW1lXTsKKyAgICAKKyAgICBkaXNwYXRjaF9hc3luYyhk
aXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpcywgdGhpcywgb3B0aW9uc0FycmF5
LCBzZWxlY3RlZEluZGV4XSB7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IG9wdGlvbnM7CisgICAg
ICAgIGZvciAoTlNTdHJpbmcgKm5hbWUgOiBvcHRpb25zQXJyYXkuZ2V0KCkpCisgICAgICAgICAg
ICBvcHRpb25zLmFwcGVuZChuYW1lKTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2ludGVyZmFj
ZSkKKyAgICAgICAgICAgIG1faW50ZXJmYWNlLT5zZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9u
cyhvcHRpb25zLCBzZWxlY3RlZEluZGV4KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9u
cyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkK
K3sKKyAgICBBU1NFUlQoV2ViVGhyZWFkSXNDdXJyZW50KCkpOworICAgIFJlZlB0cjxXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICAKKyAg
ICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IG9wdGlvbnNBcnJheSA9IGFkb3B0TlMoW1tOU011
dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpvcHRpb25zLnNpemUoKV0pOworICAg
IGZvciAoYXV0byYgbmFtZSA6IG9wdGlvbnMpCisgICAgICAgIFtvcHRpb25zQXJyYXkgYWRkT2Jq
ZWN0Om5hbWVdOworICAgIAorICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1
ZXVlKCksIFtzdHJvbmdUaGlzLCB0aGlzLCBvcHRpb25zQXJyYXksIHNlbGVjdGVkSW5kZXhdIHsK
KyAgICAgICAgVmVjdG9yPFN0cmluZz4gb3B0aW9uczsKKyAgICAgICAgZm9yIChOU1N0cmluZyAq
bmFtZSA6IG9wdGlvbnNBcnJheS5nZXQoKSkKKyAgICAgICAgICAgIG9wdGlvbnMuYXBwZW5kKG5h
bWUpOworICAgICAgICAKKyAgICAgICAgaWYgKG1faW50ZXJmYWNlKQorICAgICAgICAgICAgbV9p
bnRlcmZhY2UtPnNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMob3B0aW9ucywgc2VsZWN0
ZWRJbmRleCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OnNldEV4dGVybmFsUGxheWJhY2soYm9vbCBlbmFibGVkLCBFeHRlcm5hbFBsYXli
YWNrVGFyZ2V0VHlwZSB0eXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSkKK3sKKyAgICBB
U1NFUlQoV2ViVGhyZWFkSXNDdXJyZW50KCkpOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBTdHJpbmdDYXB0dXJl
IGNhcHR1cmVkTG9jYWxpemVkRGV2aWNlTmFtZShsb2NhbGl6ZWREZXZpY2VOYW1lKTsKKyAgICBk
aXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpcywgdGhp
cywgZW5hYmxlZCwgdHlwZSwgY2FwdHVyZWRMb2NhbGl6ZWREZXZpY2VOYW1lXSB7CisgICAgICAg
IGlmIChtX2ludGVyZmFjZSkKKyAgICAgICAgICAgIG1faW50ZXJmYWNlLT5zZXRFeHRlcm5hbFBs
YXliYWNrKGVuYWJsZWQsIHR5cGUsIGNhcHR1cmVkTG9jYWxpemVkRGV2aWNlTmFtZS5zdHJpbmco
KSk7CisgICAgfSk7Cit9CisKKyNwcmFnbWEgbWFyayBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbAor
Cit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpwbGF5KCkKK3sKKyAg
ICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKFtzdHJv
bmdUaGlzLCB0aGlzXSB7CisgICAgICAgIGlmIChtX21vZGVsKQorICAgICAgICAgICAgbV9tb2Rl
bC0+cGxheSgpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OjpwYXVzZSgpCit7CisgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CisgICAgUmVm
UHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBzdHJvbmdUaGlzKHRoaXMp
OworICAgIFdlYlRocmVhZFJ1bihbc3Ryb25nVGhpcywgdGhpc10geworICAgICAgICBpZiAobV9t
b2RlbCkKKyAgICAgICAgICAgIG1fbW9kZWwtPnBhdXNlKCk7CisgICAgfSk7Cit9CisKK3ZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnRvZ2dsZVBsYXlTdGF0ZSgpCit7
CisgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0PiBzdHJvbmdUaGlzKHRoaXMpOworICAgIFdlYlRocmVhZFJ1bihb
c3Ryb25nVGhpcywgdGhpc10geworICAgICAgICBpZiAobV9tb2RlbCkKKyAgICAgICAgICAgIG1f
bW9kZWwtPnRvZ2dsZVBsYXlTdGF0ZSgpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpiZWdpblNjcnViYmluZygpCit7CisgICAgQVNTRVJU
KGlzVUlUaHJlYWQoKSk7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0PiBzdHJvbmdUaGlzKHRoaXMpOworICAgIFdlYlRocmVhZFJ1bihbc3Ryb25nVGhpcywg
dGhpc10geworICAgICAgICBpZiAobV9tb2RlbCkKKyAgICAgICAgICAgIG1fbW9kZWwtPmJlZ2lu
U2NydWJiaW5nKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OmVuZFNjcnViYmluZygpCit7CisgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7
CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBzdHJvbmdU
aGlzKHRoaXMpOworICAgIFdlYlRocmVhZFJ1bihbc3Ryb25nVGhpcywgdGhpc10geworICAgICAg
ICBpZiAobV9tb2RlbCkKKyAgICAgICAgICAgIG1fbW9kZWwtPmVuZFNjcnViYmluZygpOworICAg
IH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWVr
VG9UaW1lKGRvdWJsZSB0aW1lKQoreworICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOworICAgIFJl
ZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlz
KTsKKyAgICBXZWJUaHJlYWRSdW4oW3N0cm9uZ1RoaXMsIHRoaXMsIHRpbWVdIHsKKyAgICAgICAg
aWYgKG1fbW9kZWwpCisgICAgICAgICAgICBtX21vZGVsLT5zZWVrVG9UaW1lKHRpbWUpOworICAg
IH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpmYXN0
U2Vlayhkb3VibGUgdGltZSkKK3sKKyAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKKyAgICBSZWZQ
dHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7
CisgICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzLCB0aGlzLCB0aW1lXSB7CisgICAgICAgIGlm
IChtX21vZGVsKQorICAgICAgICAgICAgbV9tb2RlbC0+ZmFzdFNlZWsodGltZSk7CisgICAgfSk7
Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmJlZ2luU2Nh
bm5pbmdGb3J3YXJkKCkKK3sKKyAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKKyAgICBSZWZQdHI8
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7Cisg
ICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzLCB0aGlzXSB7CisgICAgICAgIGlmIChtX21vZGVs
KQorICAgICAgICAgICAgbV9tb2RlbC0+YmVnaW5TY2FubmluZ0ZvcndhcmQoKTsKKyAgICB9KTsK
K30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YmVnaW5TY2Fu
bmluZ0JhY2t3YXJkKCkKK3sKKyAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKKyAgICBSZWZQdHI8
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7Cisg
ICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzLCB0aGlzXSB7CisgICAgICAgIGlmIChtX21vZGVs
KQorICAgICAgICAgICAgbV9tb2RlbC0+YmVnaW5TY2FubmluZ0JhY2t3YXJkKCk7CisgICAgfSk7
Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmVuZFNjYW5u
aW5nKCkKK3sKKyAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKKyAgICBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7CisgICAgV2ViVGhy
ZWFkUnVuKFtzdHJvbmdUaGlzLCB0aGlzXSB7CisgICAgICAgIGlmIChtX21vZGVsKQorICAgICAg
ICAgICAgbV9tb2RlbC0+ZW5kU2Nhbm5pbmcoKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cmVxdWVzdEV4aXRGdWxsc2NyZWVuKCkKK3sK
KyAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKFtz
dHJvbmdUaGlzLCB0aGlzXSB7CisgICAgICAgIGlmIChtX21vZGVsKQorICAgICAgICAgICAgbV9t
b2RlbC0+cmVxdWVzdEV4aXRGdWxsc2NyZWVuKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldFZpZGVvTGF5ZXJGcmFtZShGbG9hdFJl
Y3QgZnJhbWUpCit7CisgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CisgICAgbV9mcmFtZSA9IGZy
YW1lOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ry
b25nVGhpcyh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oW3N0cm9uZ1RoaXMsIHRoaXMsIGZyYW1l
XSB7CisgICAgICAgIGlmIChtX21vZGVsKQorICAgICAgICAgICAgbV9tb2RlbC0+c2V0VmlkZW9M
YXllckZyYW1lKGZyYW1lKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dDo6c2V0VmlkZW9MYXllckdyYXZpdHkoV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWw6OlZpZGVvR3Jhdml0eSB2aWRlb0dyYXZpdHkpCit7CisgICAgQVNTRVJUKGlzVUlUaHJl
YWQoKSk7CisgICAgbV9ncmF2aXR5ID0gdmlkZW9HcmF2aXR5OworICAgIFJlZlB0cjxXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBXZWJU
aHJlYWRSdW4oW3N0cm9uZ1RoaXMsIHRoaXMsIHZpZGVvR3Jhdml0eV0geworICAgICAgICBpZiAo
bV9tb2RlbCkKKyAgICAgICAgICAgIG1fbW9kZWwtPnNldFZpZGVvTGF5ZXJHcmF2aXR5KHZpZGVv
R3Jhdml0eSk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpCit7CisgICAg
QVNTRVJUKGlzVUlUaHJlYWQoKSk7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0PiBzdHJvbmdUaGlzKHRoaXMpOworICAgIFdlYlRocmVhZFJ1bihbc3Ryb25n
VGhpcywgdGhpcywgaW5kZXhdIHsKKyAgICAgICAgaWYgKG1fbW9kZWwpCisgICAgICAgICAgICBt
X21vZGVsLT5zZWxlY3RBdWRpb01lZGlhT3B0aW9uKGluZGV4KTsKKyAgICB9KTsKK30KKwordm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2VsZWN0TGVnaWJsZU1lZGlh
T3B0aW9uKHVpbnQ2NF90IGluZGV4KQoreworICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOworICAg
IFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0
aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oW3N0cm9uZ1RoaXMsIHRoaXMsIGluZGV4XSB7CisgICAg
ICAgIGlmIChtX21vZGVsKQorICAgICAgICAgICAgbV9tb2RlbC0+c2VsZWN0TGVnaWJsZU1lZGlh
T3B0aW9uKGluZGV4KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKEhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQoreworICAgIEFTU0VSVChpc1VJVGhyZWFkKCkp
OworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25n
VGhpcyh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oW3N0cm9uZ1RoaXMsIHRoaXMsIG1vZGVdIHsK
KyAgICAgICAgaWYgKG1fbW9kZWwpCisgICAgICAgICAgICBtX21vZGVsLT5mdWxsc2NyZWVuTW9k
ZUNoYW5nZWQobW9kZSk7CisgICAgfSk7Cit9CisKKyNwcmFnbWEgbWFyayBPdGhlcgorCit2b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRVcEZ1bGxzY3JlZW4oSFRN
TFZpZGVvRWxlbWVudCYgdmlkZW9FbGVtZW50LCBVSVZpZXcgKnZpZXcsIEhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQoreworICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisgICAgUmV0YWluUHRyPFVJVmlldz4gdmlld1JlZiA9IHZpZXc7CisgICAgbV92
aWRlb0VsZW1lbnQgPSAmdmlkZW9FbGVtZW50OworCisgICAgbV9pbnRlcmZhY2UgPSBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y3JlYXRlKCk7CisgICAgbV9pbnRlcmZhY2UtPnNl
dFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKHRoaXMpOworICAgIG1faW50ZXJmYWNl
LT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCh0aGlzKTsKKyAgICAKKyAgICBSZWZQdHI8V2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7CisgICAg
V2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzLCB0aGlzLCB2aWV3UmVmLCBtb2RlXSB7CisgICAgICAg
IG1fbW9kZWwgPSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6Y3JlYXRlKCk7
CisgICAgICAgIG1fbW9kZWwtPnNldFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSh0aGlzKTsK
KyAgICAgICAgbV9tb2RlbC0+c2V0VmlkZW9FbGVtZW50KG1fdmlkZW9FbGVtZW50LmdldCgpKTsK
KyAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5MYXllciA9IFtDQUxheWVyIGxheWVyXTsKKyAgICAg
ICAgCisgICAgICAgIGJvb2wgYWxsb3dzQWx0ZXJuYXRlRnVsbHNjcmVlbiA9IG1fdmlkZW9FbGVt
ZW50LT5tZWRpYVNlc3Npb24oKS5hbGxvd3NBbHRlcm5hdGVGdWxsc2NyZWVuKCptX3ZpZGVvRWxl
bWVudC5nZXQoKSk7CisgICAgICAgIEludFJlY3QgdmlkZW9FbGVtZW50Q2xpZW50UmVjdCA9IG1f
dmlkZW9FbGVtZW50LT5jbGllbnRSZWN0KCk7CisgICAgICAgIAorICAgICAgICBkaXNwYXRjaF9h
c3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpcywgdGhpcywgdmlkZW9F
bGVtZW50Q2xpZW50UmVjdCwgdmlld1JlZiwgbW9kZSwgYWxsb3dzQWx0ZXJuYXRlRnVsbHNjcmVl
bl0geworICAgICAgICAgICAgbV9pbnRlcmZhY2UtPnNldHVwRnVsbHNjcmVlbigqbV92aWRlb0Z1
bGxzY3JlZW5MYXllci5nZXQoKSwgdmlkZW9FbGVtZW50Q2xpZW50UmVjdCwgdmlld1JlZi5nZXQo
KSwgbW9kZSwgYWxsb3dzQWx0ZXJuYXRlRnVsbHNjcmVlbik7CisgICAgICAgIH0pOworICAgIH0p
OworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpleGl0RnVs
bHNjcmVlbigpCit7CisgICAgQVNTRVJUKFdlYlRocmVhZElzQ3VycmVudCgpKTsKKyAgICBJbnRS
ZWN0IHNjcmVlblJlY3QgPSBtX3ZpZGVvRWxlbWVudC0+c2NyZWVuUmVjdCgpOworICAgIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsK
KyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhp
cywgdGhpcywgc2NyZWVuUmVjdF0geworICAgICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKKyAg
ICAgICAgbV9pbnRlcmZhY2UtPmV4aXRGdWxsc2NyZWVuKHNjcmVlblJlY3QpOworICAgIH0pOwor
fQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpyZXF1ZXN0SGlk
ZUFuZEV4aXRGdWxsc2NyZWVuKCkKK3sKKyAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKKyAgICBt
X2ludGVyZmFjZS0+cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpOworfQorCitAaW1wbGVt
ZW50YXRpb24gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciB7CisgICAgUmVmUHRyPFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBfY29udGV4dDsKICAgICBSZWZQdHI8SFRN
TFZpZGVvRWxlbWVudD4gX3ZpZGVvRWxlbWVudDsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ+IF9pbnRlcmZhY2U7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50PiBfbW9kZWw7Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNoYW5nZU9ic2VydmVyIF9jaGFuZ2VPYnNlcnZlcjsKLSAgICBSZXRhaW5QdHI8UGxh
dGZvcm1MYXllcj4gX3ZpZGVvRnVsbHNjcmVlbkxheWVyOwogfQogCiAtIChpbnN0YW5jZXR5cGUp
aW5pdApAQCAtMTAxLDE3ICs1NTUsOSBAQCBwdWJsaWM6CiAgICAgaWYgKCEoc2VsZiA9IFtzdXBl
ciBpbml0XSkpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCi0gICAgX2NoYW5nZU9ic2VydmVy
LnNldFRhcmdldChzZWxmKTsKLQogICAgIHJldHVybiBzZWxmOwogfQogCi0tICh2b2lkKWRlYWxs
b2MKLXsKLSAgICBfdmlkZW9FbGVtZW50ID0gbnVsbHB0cjsKLSAgICBbc3VwZXIgZGVhbGxvY107
Ci19Ci0KIC0gKHZvaWQpc2V0VmlkZW9FbGVtZW50OihIVE1MVmlkZW9FbGVtZW50Kil2aWRlb0Vs
ZW1lbnQKIHsKICAgICBfdmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50OwpAQCAtMTI0LDY3ICs1
NzAsMzMgQEAgcHVibGljOgogCiAtICh2b2lkKWVudGVyRnVsbHNjcmVlbjooVUlWaWV3ICopdmll
dyBtb2RlOihIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpbW9kZQog
ewotICAgIFtzZWxmIHJldGFpbl07IC8vIEJhbGFuY2VkIGJ5IC1yZWxlYXNlIGluIGRpZEV4aXRG
dWxsc2NyZWVuOgotICAgIAotICAgIF9pbnRlcmZhY2UgPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6Y3JlYXRlKCk7Ci0gICAgX2ludGVyZmFjZS0+c2V0V2ViVmlkZW9GdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXIoJl9jaGFuZ2VPYnNlcnZlcik7Ci0gICAgX21vZGVsID0gV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmNyZWF0ZSgpOwotICAgIF9tb2RlbC0+c2V0
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKF9pbnRlcmZhY2UuZ2V0KCkpOwotICAgIF9pbnRl
cmZhY2UtPnNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKF9tb2RlbC5nZXQoKSk7Ci0gICAgX21v
ZGVsLT5zZXRWaWRlb0VsZW1lbnQoX3ZpZGVvRWxlbWVudC5nZXQoKSk7Ci0gICAgX3ZpZGVvRnVs
bHNjcmVlbkxheWVyID0gW0NBTGF5ZXIgbGF5ZXJdOwotICAgIF9pbnRlcmZhY2UtPnNldHVwRnVs
bHNjcmVlbigqX3ZpZGVvRnVsbHNjcmVlbkxheWVyLmdldCgpLCBfdmlkZW9FbGVtZW50LT5jbGll
bnRSZWN0KCksIHZpZXcsIG1vZGUsIF92aWRlb0VsZW1lbnQtPm1lZGlhU2Vzc2lvbigpLmFsbG93
c0FsdGVybmF0ZUZ1bGxzY3JlZW4oKl92aWRlb0VsZW1lbnQuZ2V0KCkpKTsKKyAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworICAgIF9jb250ZXh0ID0gV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OmNyZWF0ZSgpOworICAgIF9jb250ZXh0LT5zZXRDb250cm9sbGVyKHNlbGYp
OworICAgIF9jb250ZXh0LT5zZXRVcEZ1bGxzY3JlZW4oKl92aWRlb0VsZW1lbnQuZ2V0KCksIHZp
ZXcsIG1vZGUpOwogfQogCiAtICh2b2lkKWV4aXRGdWxsc2NyZWVuCiB7Ci0gICAgX2ludGVyZmFj
ZS0+ZXhpdEZ1bGxzY3JlZW4oX3ZpZGVvRWxlbWVudC0+c2NyZWVuUmVjdCgpKTsKKyAgICBBU1NF
UlQoV2ViVGhyZWFkSXNDdXJyZW50KCkpOworICAgIF9jb250ZXh0LT5leGl0RnVsbHNjcmVlbigp
OwogfQogCiAtICh2b2lkKXJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4KIHsKLSAgICBpZiAo
X2ludGVyZmFjZSkKLSAgICAgICAgX2ludGVyZmFjZS0+cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNj
cmVlbigpOworICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOworICAgIGlmIChfY29udGV4dCkKKyAg
ICAgICAgX2NvbnRleHQtPnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKTsKIH0KIAotLSAo
dm9pZClkaWRTZXR1cEZ1bGxzY3JlZW4KKy0gKHZvaWQpZGlkRmluaXNoRnVsbHNjcmVlbjooV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQqKWNvbnRleHQKIHsKLSAgICBXZWJUaHJl
YWRSdW4oXnsKLSAgICAgICAgX21vZGVsLT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihfdmlkZW9G
dWxsc2NyZWVuTGF5ZXIuZ2V0KCkpOwotICAgICAgICBfaW50ZXJmYWNlLT5lbnRlckZ1bGxzY3Jl
ZW4oKTsKLSAgICB9KTsKLX0KLQotLSAodm9pZClkaWRFbnRlckZ1bGxzY3JlZW4KLXsKLX0KLQot
LSAodm9pZClkaWRFeGl0RnVsbHNjcmVlbgotewotICAgIFdlYlRocmVhZFJ1biheewotICAgICAg
ICBfbW9kZWwtPnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKG5pbCk7Ci0gICAgICAgIF9pbnRlcmZh
Y2UtPmNsZWFudXBGdWxsc2NyZWVuKCk7Ci0gICAgfSk7Ci19Ci0KLS0gKHZvaWQpZGlkQ2xlYW51
cEZ1bGxzY3JlZW4KLXsKLSAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgX21vZGVsLT5zZXRW
aWRlb0Z1bGxzY3JlZW5MYXllcihuaWwpOwotICAgICAgICBfaW50ZXJmYWNlLT5zZXRXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbChudWxscHRyKTsKLSAgICAgICAgX21vZGVsLT5zZXRXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2UobnVsbHB0cik7Ci0gICAgICAgIF9tb2RlbC0+c2V0VmlkZW9FbGVt
ZW50KG51bGxwdHIpOwotICAgICAgICBfaW50ZXJmYWNlLT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5D
aGFuZ2VPYnNlcnZlcihudWxscHRyKTsKLSAgICAgICAgX21vZGVsID0gbnVsbHB0cjsKLSAgICAg
ICAgX2ludGVyZmFjZSA9IG51bGxwdHI7Ci0gICAgICAgIAotICAgICAgICBbc2VsZiByZWxlYXNl
XTsgLy8gQmFsYW5jZSB0aGUgLXJldGFpbiB3ZSBkaWQgaW4gZW50ZXJGdWxsc2NyZWVuOgotICAg
IH0pOwotfQotCi0tICh2b2lkKWZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZQotewotICAgIF9p
bnRlcmZhY2UtPnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSh0cnVlLCBfdmlkZW9FbGVtZW50LT5j
bGllbnRSZWN0KCkpOworICAgIEFTU0VSVChXZWJUaHJlYWRJc0N1cnJlbnQoKSk7CisgICAgQVNT
RVJUX1VOVVNFRChjb250ZXh0LCBjb250ZXh0ID09IF9jb250ZXh0KTsKKyAgICBbW3NlbGYgcmV0
YWluXSBhdXRvcmVsZWFzZV07IC8vIHJldGFpbiBzZWxmIGJlZm9yZSBicmVha2luZyBhIHJldGFp
biBjeWNsZS4KKyAgICBfY29udGV4dC0+c2V0Q29udHJvbGxlcihuaWwpOworICAgIF9jb250ZXh0
ID0gbnVsbHB0cjsKKyAgICBfdmlkZW9FbGVtZW50ID0gbnVsbHB0cjsKIH0KIAogQGVuZApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQuaAppbmRleCA3YWQ2NWRkMTg1Yzg5ZTQ5OGU1ZDM4MDVmM2Nh
ZjU5ZTkxMzIyMGI5Li43MzM3NjdiN2Q2MWI1MDUwOTgwNGJiM2FiYWI0YmQ1MTEzYjQzYjI1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaApAQCAtMzUsOSArMzUsOSBAQAogI2luY2x1ZGUg
PFdlYkNvcmUvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8ZnVuY3Rp
b25hbD4KICNpbmNsdWRlIDxvYmpjL29iamMuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAKIE9CSkNfQ0xBU1MgV2ViQVZQ
bGF5ZXJDb250cm9sbGVyOwogT0JKQ19DTEFTUyBBVlBsYXllclZpZXdDb250cm9sbGVyOwpAQCAt
NjgsNyArNjgsNyBAQCBwdWJsaWM6CiAKIGNsYXNzIFdFQkNPUkVfRVhQT1JUIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0CiAgICAgOiBwdWJsaWMgV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlCi0gICAgLCBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8V2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ+IHsKKyAgICAsIHB1YmxpYyBSZWZDb3VudGVkPFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0PiB7CiAKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBjcmVhdGUoKQpAQCAtMTIxLDExICsxMjEsOCBA
QCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgV0VCQ09SRV9FWFBPUlQgV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQoKTsKICAgICB2b2lkIGJlZ2luU2Vzc2lvbigpOwotICAgIHZvaWQg
c2V0dXBGdWxsc2NyZWVuSW50ZXJuYWwoUGxhdGZvcm1MYXllciYsIGNvbnN0IEludFJlY3QmIGlu
aXRpYWxSZWN0LCBVSVZpZXcgKiwgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlLCBib29sIGFsbG93T3B0aW1pemVkRnVsbHNjcmVlbik7CiAgICAgdm9pZCBlbnRlckZ1
bGxzY3JlZW5PcHRpbWl6ZWQoKTsKICAgICB2b2lkIGVudGVyRnVsbHNjcmVlblN0YW5kYXJkKCk7
Ci0gICAgdm9pZCBleGl0RnVsbHNjcmVlbkludGVybmFsKGNvbnN0IEludFJlY3QmIGZpbmFsUmVj
dCk7Ci0gICAgdm9pZCBjbGVhbnVwRnVsbHNjcmVlbkludGVybmFsKCk7CiAKICAgICBSZXRhaW5Q
dHI8V2ViQVZQbGF5ZXJDb250cm9sbGVyPiBtX3BsYXllckNvbnRyb2xsZXI7CiAgICAgUmV0YWlu
UHRyPEFWUGxheWVyVmlld0NvbnRyb2xsZXI+IG1fcGxheWVyVmlld0NvbnRyb2xsZXI7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQubW0KaW5kZXggMzVlNzg2NGQ1ZGE0NGNlNTk0NWJkN2EyNTEw
NGNkNWQ0NGVhNWEyOS4uM2Y1YTc3MDlmMGZmZmZlNTZkMjQ0ZjlhODg2NDJmMDU4Nzc4MzFiZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbQpAQCAtMzYsNyArMzYsNiBAQAogI2ltcG9y
dCAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLmgiCiAjaW1wb3J0ICJUaW1lUmFuZ2VzLmgi
CiAjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCi0jaW1wb3J0ICJXZWJDb3JlVGhy
ZWFkUnVuLmgiCiAjaW1wb3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oIgogI2ltcG9ydCA8
QVZGb3VuZGF0aW9uL0FWVGltZS5oPgogI2ltcG9ydCA8VUlLaXQvVUlLaXQuaD4KQEAgLTc0OSwx
NyArNzQ4LDEzIEBAIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdCgpCiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OnJlc2V0TWVkaWFTdGF0ZSgpCiB7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOwotICAgIAotICAgIGRpc3BhdGNo
X2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzXSB7Ci0gICAgICAg
IGlmICghc3Ryb25nVGhpcy0+bV9wbGF5ZXJDb250cm9sbGVyKSB7Ci0gICAgICAgICAgICBzdHJv
bmdUaGlzLT5tX3BsYXllckNvbnRyb2xsZXIgPSBhZG9wdE5TKFtbV2ViQVZQbGF5ZXJDb250cm9s
bGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgICAgICAgICBbc3Ryb25nVGhpcy0+bV9wbGF5ZXJDb250
cm9sbGVyIHNldERlbGVnYXRlOnN0cm9uZ1RoaXMtPm1fdmlkZW9GdWxsc2NyZWVuTW9kZWxdOwot
ICAgICAgICAgICAgW3N0cm9uZ1RoaXMtPm1fcGxheWVyQ29udHJvbGxlciBzZXRGdWxsc2NyZWVu
SW50ZXJmYWNlOnN0cm9uZ1RoaXMuZ2V0KCldOwotICAgICAgICAgICAgCi0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgW3N0cm9uZ1RoaXMtPm1fcGxheWVyQ29udHJvbGxlciByZXNldFN0YXRl
XTsKLSAgICB9KTsKKyAgICBpZiAoIW1fcGxheWVyQ29udHJvbGxlcikgeworICAgICAgICBtX3Bs
YXllckNvbnRyb2xsZXIgPSBhZG9wdE5TKFtbV2ViQVZQbGF5ZXJDb250cm9sbGVyIGFsbG9jXSBp
bml0XSk7CisgICAgICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0RGVsZWdhdGU6bV92aWRlb0Z1
bGxzY3JlZW5Nb2RlbF07CisgICAgICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0RnVsbHNjcmVl
bkludGVyZmFjZTp0aGlzXTsKKyAgICAgICAgCisgICAgfSBlbHNlCisgICAgICAgIFttX3BsYXll
ckNvbnRyb2xsZXIgcmVzZXRTdGF0ZV07CiB9CiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ6OnNldFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsKiBtb2RlbCkKQEAgLTc3NSw3MiArNzcwLDUyIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKFdl
YlZpCiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldER1cmF0aW9u
KGRvdWJsZSBkdXJhdGlvbikKIHsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ+IHN0cm9uZ1RoaXModGhpcyk7Ci0gICAgCi0gICAgZGlzcGF0Y2hfYXN5bmMoZGlz
cGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMsIGR1cmF0aW9uXSB7Ci0gICAgICAg
IFdlYkFWUGxheWVyQ29udHJvbGxlciogcGxheWVyQ29udHJvbGxlciA9IHN0cm9uZ1RoaXMtPm1f
cGxheWVyQ29udHJvbGxlci5nZXQoKTsKKyAgICBXZWJBVlBsYXllckNvbnRyb2xsZXIqIHBsYXll
ckNvbnRyb2xsZXIgPSBtX3BsYXllckNvbnRyb2xsZXIuZ2V0KCk7CiAKLSAgICAgICAgLy8gRklY
TUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjcwMTcgdXNlIGNv
cnJlY3QgdmFsdWVzIGluc3RlYWQgb2YgZHVyYXRpb24gZm9yIGFsbCB0aGVzZQotICAgICAgICBw
bGF5ZXJDb250cm9sbGVyLmNvbnRlbnREdXJhdGlvbiA9IGR1cmF0aW9uOwotICAgICAgICBwbGF5
ZXJDb250cm9sbGVyLm1heFRpbWUgPSBkdXJhdGlvbjsKLSAgICAgICAgcGxheWVyQ29udHJvbGxl
ci5jb250ZW50RHVyYXRpb25XaXRoaW5FbmRUaW1lcyA9IGR1cmF0aW9uOworICAgIC8vIEZJWE1F
OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3MDE3IHVzZSBjb3Jy
ZWN0IHZhbHVlcyBpbnN0ZWFkIG9mIGR1cmF0aW9uIGZvciBhbGwgdGhlc2UKKyAgICBwbGF5ZXJD
b250cm9sbGVyLmNvbnRlbnREdXJhdGlvbiA9IGR1cmF0aW9uOworICAgIHBsYXllckNvbnRyb2xs
ZXIubWF4VGltZSA9IGR1cmF0aW9uOworICAgIHBsYXllckNvbnRyb2xsZXIuY29udGVudER1cmF0
aW9uV2l0aGluRW5kVGltZXMgPSBkdXJhdGlvbjsKIAotICAgICAgICAvLyBGSVhNRTogd2UgdGFr
ZSB0aGlzIGFzIGFuIGluZGljYXRpb24gdGhhdCBwbGF5YmFjayBpcyByZWFkeS4KLSAgICAgICAg
cGxheWVyQ29udHJvbGxlci5jYW5QbGF5ID0gWUVTOwotICAgICAgICBwbGF5ZXJDb250cm9sbGVy
LmNhblBhdXNlID0gWUVTOwotICAgICAgICBwbGF5ZXJDb250cm9sbGVyLmNhblRvZ2dsZVBsYXli
YWNrID0gWUVTOwotICAgICAgICBwbGF5ZXJDb250cm9sbGVyLmhhc0VuYWJsZWRBdWRpbyA9IFlF
UzsKLSAgICAgICAgcGxheWVyQ29udHJvbGxlci5jYW5TZWVrID0gWUVTOwotICAgICAgICBwbGF5
ZXJDb250cm9sbGVyLm1pblRpbWUgPSAwOwotICAgICAgICBwbGF5ZXJDb250cm9sbGVyLnN0YXR1
cyA9IEFWUGxheWVyQ29udHJvbGxlclN0YXR1c1JlYWR5VG9QbGF5OwotICAgIH0pOworICAgIC8v
IEZJWE1FOiB3ZSB0YWtlIHRoaXMgYXMgYW4gaW5kaWNhdGlvbiB0aGF0IHBsYXliYWNrIGlzIHJl
YWR5LgorICAgIHBsYXllckNvbnRyb2xsZXIuY2FuUGxheSA9IFlFUzsKKyAgICBwbGF5ZXJDb250
cm9sbGVyLmNhblBhdXNlID0gWUVTOworICAgIHBsYXllckNvbnRyb2xsZXIuY2FuVG9nZ2xlUGxh
eWJhY2sgPSBZRVM7CisgICAgcGxheWVyQ29udHJvbGxlci5oYXNFbmFibGVkQXVkaW8gPSBZRVM7
CisgICAgcGxheWVyQ29udHJvbGxlci5jYW5TZWVrID0gWUVTOworICAgIHBsYXllckNvbnRyb2xs
ZXIubWluVGltZSA9IDA7CisgICAgcGxheWVyQ29udHJvbGxlci5zdGF0dXMgPSBBVlBsYXllckNv
bnRyb2xsZXJTdGF0dXNSZWFkeVRvUGxheTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6c2V0Q3VycmVudFRpbWUoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUg
YW5jaG9yVGltZSkKIHsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ+IHN0cm9uZ1RoaXModGhpcyk7Ci0gICAgCi0gICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hf
Z2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMsIGN1cnJlbnRUaW1lLCBhbmNob3JUaW1lXSB7
Ci0gICAgICAgIE5TVGltZUludGVydmFsIGFuY2hvclRpbWVTdGFtcCA9ICFbc3Ryb25nVGhpcy0+
bV9wbGF5ZXJDb250cm9sbGVyIHJhdGVdID8gTkFOIDogYW5jaG9yVGltZTsKLSAgICAgICAgQVZW
YWx1ZVRpbWluZyAqdGltaW5nID0gW2dldEFWVmFsdWVUaW1pbmdDbGFzcygpIHZhbHVlVGltaW5n
V2l0aEFuY2hvclZhbHVlOmN1cnJlbnRUaW1lCi0gICAgICAgICAgICBhbmNob3JUaW1lU3RhbXA6
YW5jaG9yVGltZVN0YW1wIHJhdGU6MF07Ci0gICAgICAgIFtzdHJvbmdUaGlzLT5tX3BsYXllckNv
bnRyb2xsZXIgc2V0VGltaW5nOnRpbWluZ107Ci0gICAgfSk7CisgICAgTlNUaW1lSW50ZXJ2YWwg
YW5jaG9yVGltZVN0YW1wID0gIVttX3BsYXllckNvbnRyb2xsZXIgcmF0ZV0gPyBOQU4gOiBhbmNo
b3JUaW1lOworICAgIEFWVmFsdWVUaW1pbmcgKnRpbWluZyA9IFtnZXRBVlZhbHVlVGltaW5nQ2xh
c3MoKSB2YWx1ZVRpbWluZ1dpdGhBbmNob3JWYWx1ZTpjdXJyZW50VGltZQorICAgICAgICBhbmNo
b3JUaW1lU3RhbXA6YW5jaG9yVGltZVN0YW1wIHJhdGU6MF07CisgICAgW21fcGxheWVyQ29udHJv
bGxlciBzZXRUaW1pbmc6dGltaW5nXTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6c2V0QnVmZmVyZWRUaW1lKGRvdWJsZSBidWZmZXJlZFRpbWUpCiB7Ci0gICAg
UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMp
OwotCi0gICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9u
Z1RoaXMsIGJ1ZmZlcmVkVGltZV0gewotICAgICAgICBXZWJBVlBsYXllckNvbnRyb2xsZXIqIHBs
YXllckNvbnRyb2xsZXIgPSBzdHJvbmdUaGlzLT5tX3BsYXllckNvbnRyb2xsZXIuZ2V0KCk7Ci0g
ICAgICAgIGRvdWJsZSBkdXJhdGlvbiA9IHBsYXllckNvbnRyb2xsZXIuY29udGVudER1cmF0aW9u
OwotICAgICAgICBkb3VibGUgbm9ybWFsaXplZEJ1ZmZlcmVkVGltZTsKLSAgICAgICAgaWYgKCFk
dXJhdGlvbikKLSAgICAgICAgICAgIG5vcm1hbGl6ZWRCdWZmZXJlZFRpbWUgPSAwOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBub3JtYWxpemVkQnVmZmVyZWRUaW1lID0gYnVmZmVyZWRUaW1l
IC8gZHVyYXRpb247Ci0gICAgICAgIHBsYXllckNvbnRyb2xsZXIubG9hZGVkVGltZVJhbmdlcyA9
IEBbQDAsIEAobm9ybWFsaXplZEJ1ZmZlcmVkVGltZSldOwotICAgIH0pOworICAgIFdlYkFWUGxh
eWVyQ29udHJvbGxlciogcGxheWVyQ29udHJvbGxlciA9IG1fcGxheWVyQ29udHJvbGxlci5nZXQo
KTsKKyAgICBkb3VibGUgZHVyYXRpb24gPSBwbGF5ZXJDb250cm9sbGVyLmNvbnRlbnREdXJhdGlv
bjsKKyAgICBkb3VibGUgbm9ybWFsaXplZEJ1ZmZlcmVkVGltZTsKKyAgICBpZiAoIWR1cmF0aW9u
KQorICAgICAgICBub3JtYWxpemVkQnVmZmVyZWRUaW1lID0gMDsKKyAgICBlbHNlCisgICAgICAg
IG5vcm1hbGl6ZWRCdWZmZXJlZFRpbWUgPSBidWZmZXJlZFRpbWUgLyBkdXJhdGlvbjsKKyAgICBw
bGF5ZXJDb250cm9sbGVyLmxvYWRlZFRpbWVSYW5nZXMgPSBAW0AwLCBAKG5vcm1hbGl6ZWRCdWZm
ZXJlZFRpbWUpXTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6
c2V0UmF0ZShib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQogewotICAgIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlzKTsKLSAg
ICAKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25n
VGhpcywgaXNQbGF5aW5nLCBwbGF5YmFja1JhdGVdIHsKLSAgICAgICAgW3N0cm9uZ1RoaXMtPm1f
cGxheWVyQ29udHJvbGxlciBzZXRSYXRlOmlzUGxheWluZyA/IHBsYXliYWNrUmF0ZSA6IDAuXTsK
LSAgICB9KTsKKyAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldFJhdGU6aXNQbGF5aW5nID8gcGxh
eWJhY2tSYXRlIDogMC5dOwogfQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjpzZXRWaWRlb0RpbWVuc2lvbnMoYm9vbCBoYXNWaWRlbywgZmxvYXQgd2lkdGgsIGZsb2F0
IGhlaWdodCkKIHsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+
IHN0cm9uZ1RoaXModGhpcyk7Ci0gICAgCi0gICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0
X21haW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMsIGhhc1ZpZGVvLCB3aWR0aCwgaGVpZ2h0XSB7Ci0g
ICAgICAgIFtzdHJvbmdUaGlzLT5tX3BsYXllckNvbnRyb2xsZXIgc2V0SGFzRW5hYmxlZFZpZGVv
Omhhc1ZpZGVvXTsKLSAgICAgICAgW3N0cm9uZ1RoaXMtPm1fcGxheWVyQ29udHJvbGxlciBzZXRD
b250ZW50RGltZW5zaW9uczpDR1NpemVNYWtlKHdpZHRoLCBoZWlnaHQpXTsKLSAgICB9KTsKKyAg
ICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldEhhc0VuYWJsZWRWaWRlbzpoYXNWaWRlb107CisgICAg
W21fcGxheWVyQ29udHJvbGxlciBzZXRDb250ZW50RGltZW5zaW9uczpDR1NpemVNYWtlKHdpZHRo
LCBoZWlnaHQpXTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6
c2V0U2Vla2FibGVSYW5nZXMoY29uc3QgVGltZVJhbmdlcyYgdGltZVJhbmdlcykKQEAgLTg1Niwy
MCArODMxLDEyIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFNl
ZWthYmxlUmFuZ2VzKGNvbnN0IFRpbWVSYW5nZXMmIHRpbWVSCiAgICAgICAgIFtzZWVrYWJsZVJh
bmdlcyBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoQ01UaW1lUmFuZ2U6cmFuZ2VdXTsKICAg
ICB9CiAgICAgCi0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBz
dHJvbmdUaGlzKHRoaXMpOwotICAgIAotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9t
YWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCBzZWVrYWJsZVJhbmdlc10gewotICAgICAgICBbc3Ry
b25nVGhpcy0+bV9wbGF5ZXJDb250cm9sbGVyIHNldFNlZWthYmxlVGltZVJhbmdlczpzZWVrYWJs
ZVJhbmdlcy5nZXQoKV07Ci0gICAgfSk7CisgICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRTZWVr
YWJsZVRpbWVSYW5nZXM6c2Vla2FibGVSYW5nZXMuZ2V0KCldOwogfQogCiB2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRDYW5QbGF5RmFzdFJldmVyc2UoYm9vbCBjYW5Q
bGF5RmFzdFJldmVyc2UpCiB7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOwotICAgIAotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3Bh
dGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCBjYW5QbGF5RmFzdFJldmVyc2VdIHsK
LSAgICAgICAgW3N0cm9uZ1RoaXMtPm1fcGxheWVyQ29udHJvbGxlciBzZXRDYW5TY2FuQmFja3dh
cmQ6Y2FuUGxheUZhc3RSZXZlcnNlXTsKLSAgICB9KTsKKyAgICBbbV9wbGF5ZXJDb250cm9sbGVy
IHNldENhblNjYW5CYWNrd2FyZDpjYW5QbGF5RmFzdFJldmVyc2VdOwogfQogCiBzdGF0aWMgUmV0
YWluUHRyPE5TTXV0YWJsZUFycmF5PiBtZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9y
PFN0cmluZz4mIG9wdGlvbnMpCkBAIC04ODYsMjUgKzg1MywxNyBAQCBzdGF0aWMgUmV0YWluUHRy
PE5TTXV0YWJsZUFycmF5PiBtZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIG9wdAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0QXVkaW9N
ZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIG9wdGlvbnMsIHVpbnQ2
NF90IHNlbGVjdGVkSW5kZXgpCiB7CiAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiB3ZWJP
cHRpb25zID0gbWVkaWFTZWxlY3Rpb25PcHRpb25zKG9wdGlvbnMpOwotICAgIFJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlzKTsKLSAgICAKLSAg
ICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbd2ViT3B0aW9ucywg
c3Ryb25nVGhpcywgc2VsZWN0ZWRJbmRleF0gewotICAgICAgICBbc3Ryb25nVGhpcy0+bV9wbGF5
ZXJDb250cm9sbGVyIHNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zOndlYk9wdGlvbnMuZ2V0
KCldOwotICAgICAgICBpZiAoc2VsZWN0ZWRJbmRleCA8IFt3ZWJPcHRpb25zIGNvdW50XSkKLSAg
ICAgICAgICAgIFtzdHJvbmdUaGlzLT5tX3BsYXllckNvbnRyb2xsZXIgc2V0Q3VycmVudEF1ZGlv
TWVkaWFTZWxlY3Rpb25PcHRpb246W3dlYk9wdGlvbnMgb2JqZWN0QXRJbmRleDpzdGF0aWNfY2Fz
dDxOU1VJbnRlZ2VyPihzZWxlY3RlZEluZGV4KV1dOwotICAgIH0pOworICAgIFttX3BsYXllckNv
bnRyb2xsZXIgc2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnM6d2ViT3B0aW9ucy5nZXQoKV07
CisgICAgaWYgKHNlbGVjdGVkSW5kZXggPCBbd2ViT3B0aW9ucyBjb3VudF0pCisgICAgICAgIFtt
X3BsYXllckNvbnRyb2xsZXIgc2V0Q3VycmVudEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb246W3dl
Yk9wdGlvbnMgb2JqZWN0QXRJbmRleDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihzZWxlY3RlZElu
ZGV4KV1dOwogfQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRM
ZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvcHRpb25z
LCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQogewogICAgIFJldGFpblB0cjxOU011dGFibGVBcnJh
eT4gd2ViT3B0aW9ucyA9IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhvcHRpb25zKTsKLSAgICBSZWZQ
dHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHN0cm9uZ1RoaXModGhpcyk7Ci0K
LSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbd2ViT3B0aW9u
cywgc3Ryb25nVGhpcywgc2VsZWN0ZWRJbmRleF0gewotICAgICAgICBbc3Ryb25nVGhpcy0+bV9w
bGF5ZXJDb250cm9sbGVyIHNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnM6d2ViT3B0aW9u
cy5nZXQoKV07Ci0gICAgICAgIGlmIChzZWxlY3RlZEluZGV4IDwgW3dlYk9wdGlvbnMgY291bnRd
KQotICAgICAgICAgICAgW3N0cm9uZ1RoaXMtPm1fcGxheWVyQ29udHJvbGxlciBzZXRDdXJyZW50
TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uOlt3ZWJPcHRpb25zIG9iamVjdEF0SW5kZXg6c3Rh
dGljX2Nhc3Q8TlNVSW50ZWdlcj4oc2VsZWN0ZWRJbmRleCldXTsKLSAgICB9KTsKKyAgICBbbV9w
bGF5ZXJDb250cm9sbGVyIHNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnM6d2ViT3B0aW9u
cy5nZXQoKV07CisgICAgaWYgKHNlbGVjdGVkSW5kZXggPCBbd2ViT3B0aW9ucyBjb3VudF0pCisg
ICAgICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0Q3VycmVudExlZ2libGVNZWRpYVNlbGVjdGlv
bk9wdGlvbjpbd2ViT3B0aW9ucyBvYmplY3RBdEluZGV4OnN0YXRpY19jYXN0PE5TVUludGVnZXI+
KHNlbGVjdGVkSW5kZXgpXV07CiB9CiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OnNldEV4dGVybmFsUGxheWJhY2soYm9vbCBlbmFibGVkLCBFeHRlcm5hbFBsYXliYWNr
VGFyZ2V0VHlwZSB0YXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSkKQEAgLTkx
NSw0MSArODc0LDI0IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNl
dEV4dGVybmFsUGxheWJhY2soYm9vbCBlbmFibGVkLCBFeHRlcm5hCiAgICAgZWxzZSBpZiAodGFy
Z2V0VHlwZSA9PSBUYXJnZXRUeXBlVFZPdXQpCiAgICAgICAgIGV4dGVybmFsUGxheWJhY2tUeXBl
ID0gQVZQbGF5ZXJDb250cm9sbGVyRXh0ZXJuYWxQbGF5YmFja1R5cGVUVk91dDsKIAotICAgIFJl
ZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlzKTsK
LQotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdU
aGlzLCBlbmFibGVkLCBsb2NhbGl6ZWREZXZpY2VOYW1lLCBleHRlcm5hbFBsYXliYWNrVHlwZV0g
ewotICAgICAgICBXZWJBVlBsYXllckNvbnRyb2xsZXIqIHBsYXllckNvbnRyb2xsZXIgPSBzdHJv
bmdUaGlzLT5tX3BsYXllckNvbnRyb2xsZXIuZ2V0KCk7Ci0gICAgICAgIHBsYXllckNvbnRyb2xs
ZXIuZXh0ZXJuYWxQbGF5YmFja0FpclBsYXlEZXZpY2VMb2NhbGl6ZWROYW1lID0gbG9jYWxpemVk
RGV2aWNlTmFtZTsKLSAgICAgICAgcGxheWVyQ29udHJvbGxlci5leHRlcm5hbFBsYXliYWNrVHlw
ZSA9IGV4dGVybmFsUGxheWJhY2tUeXBlOwotICAgICAgICBwbGF5ZXJDb250cm9sbGVyLmV4dGVy
bmFsUGxheWJhY2tBY3RpdmUgPSBlbmFibGVkOwotICAgICAgICBbc3Ryb25nVGhpcy0+bV92aWRl
b0xheWVyQ29udGFpbmVyLmdldCgpIHNldEhpZGRlbjplbmFibGVkXTsKLSAgICB9KTsKKyAgICBX
ZWJBVlBsYXllckNvbnRyb2xsZXIqIHBsYXllckNvbnRyb2xsZXIgPSBtX3BsYXllckNvbnRyb2xs
ZXIuZ2V0KCk7CisgICAgcGxheWVyQ29udHJvbGxlci5leHRlcm5hbFBsYXliYWNrQWlyUGxheURl
dmljZUxvY2FsaXplZE5hbWUgPSBsb2NhbGl6ZWREZXZpY2VOYW1lOworICAgIHBsYXllckNvbnRy
b2xsZXIuZXh0ZXJuYWxQbGF5YmFja1R5cGUgPSBleHRlcm5hbFBsYXliYWNrVHlwZTsKKyAgICBw
bGF5ZXJDb250cm9sbGVyLmV4dGVybmFsUGxheWJhY2tBY3RpdmUgPSBlbmFibGVkOworICAgIFtt
X3ZpZGVvTGF5ZXJDb250YWluZXIuZ2V0KCkgc2V0SGlkZGVuOmVuYWJsZWRdOwogfQogCiB2b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXR1cEZ1bGxzY3JlZW4oUGxhdGZv
cm1MYXllciYgdmlkZW9MYXllciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgaW5pdGlhbFJlY3Qs
IFVJVmlldyogcGFyZW50VmlldywgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlIG1vZGUsIGJvb2wgYWxsb3dPcHRpbWl6ZWRGdWxsc2NyZWVuKQogewotICAgIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlzKTsKLQog
ICAgIEFTU0VSVChtb2RlICE9IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZU5vbmUpOwotICAgIG1fdmlkZW9MYXllciA9ICZ2aWRlb0xheWVyOwotCi0gICAgbV9tb2Rl
ID0gbW9kZTsKLQotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCks
IFtzdHJvbmdUaGlzLCAmdmlkZW9MYXllciwgaW5pdGlhbFJlY3QsIHBhcmVudFZpZXcsIG1vZGUs
IGFsbG93T3B0aW1pemVkRnVsbHNjcmVlbl0gewotICAgICAgICBzdHJvbmdUaGlzLT5zZXR1cEZ1
bGxzY3JlZW5JbnRlcm5hbCh2aWRlb0xheWVyLCBpbml0aWFsUmVjdCwgcGFyZW50VmlldywgbW9k
ZSwgYWxsb3dPcHRpbWl6ZWRGdWxsc2NyZWVuKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0dXBGdWxsc2NyZWVuSW50ZXJuYWwoUGxhdGZv
cm1MYXllciYgdmlkZW9MYXllciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgaW5pdGlhbFJlY3Qs
IFVJVmlldyogcGFyZW50VmlldywgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlIG1vZGUsIGJvb2wgYWxsb3dPcHRpbWl6ZWRGdWxsc2NyZWVuKQotewotICAgIExPRyhG
dWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldHVwRnVsbHNj
cmVlbkludGVybmFsKCVwKSIsIHRoaXMpOwotICAgIFVOVVNFRF9QQVJBTSh2aWRlb0xheWVyKTsK
LSAgICBVTlVTRURfUEFSQU0obW9kZSk7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0dXBGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOwogCiAg
ICAgbV9hbGxvd09wdGltaXplZEZ1bGxzY3JlZW4gPSBhbGxvd09wdGltaXplZEZ1bGxzY3JlZW47
CiAKICAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CiAgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlz
YWJsZUFjdGlvbnM6WUVTXTsKKyAgICBtX3ZpZGVvTGF5ZXIgPSAmdmlkZW9MYXllcjsKKyAgICBt
X21vZGUgPSBtb2RlOwogICAgIG1fcGFyZW50VmlldyA9IHBhcmVudFZpZXc7CiAgICAgbV9wYXJl
bnRXaW5kb3cgPSBwYXJlbnRWaWV3LndpbmRvdzsKIApAQCAtMTAwMSwxMSArOTQzLDggQEAgdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0dXBGdWxsc2NyZWVuSW50ZXJu
YWwoUGxhdGZvcm1MYXllciYgdmkKIAogICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07CiAKLSAg
ICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHN0cm9uZ1RoaXModGhp
cyk7Ci0gICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzXSB7Ci0gICAgICAgIGlmIChzdHJvbmdU
aGlzLT5tX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAgICAgIHN0cm9uZ1RoaXMt
Pm1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRTZXR1cEZ1bGxzY3JlZW4oKTsKLSAgICB9
KTsKKyAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCisgICAgICAgIG1fZnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyLT5kaWRTZXR1cEZ1bGxzY3JlZW4oKTsKIH0KIAogdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuKCkKQEAgLTEwMTYs
MTYgKzk1NSwxMyBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRl
ckZ1bGxzY3JlZW4oKQogICAgIG1fZXhpdFJlcXVlc3RlZCA9IGZhbHNlOwogICAgIG1fZW50ZXJS
ZXF1ZXN0ZWQgPSB0cnVlOwogCi0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOwotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dl
dF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzXSB7Ci0gICAgICAgIFtzdHJvbmdUaGlzLT5tX3Zp
ZGVvTGF5ZXJDb250YWluZXIgc2V0QmFja2dyb3VuZENvbG9yOltbZ2V0VUlDb2xvckNsYXNzKCkg
YmxhY2tDb2xvcl0gQ0dDb2xvcl1dOwotICAgICAgICBpZiAoc3Ryb25nVGhpcy0+bW9kZSgpID09
IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU9wdGltaXplZCkKLSAg
ICAgICAgICAgIHN0cm9uZ1RoaXMtPmVudGVyRnVsbHNjcmVlbk9wdGltaXplZCgpOwotICAgICAg
ICBlbHNlIGlmIChzdHJvbmdUaGlzLT5tb2RlKCkgPT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpCi0gICAgICAgICAgICBzdHJvbmdUaGlzLT5lbnRl
ckZ1bGxzY3JlZW5TdGFuZGFyZCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICB9KTsKKyAgICBbbV92aWRlb0xheWVyQ29udGFpbmVyIHNldEJh
Y2tncm91bmRDb2xvcjpbW2dldFVJQ29sb3JDbGFzcygpIGJsYWNrQ29sb3JdIENHQ29sb3JdXTsK
KyAgICBpZiAobW9kZSgpID09IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZU9wdGltaXplZCkKKyAgICAgICAgZW50ZXJGdWxsc2NyZWVuT3B0aW1pemVkKCk7CisgICAg
ZWxzZSBpZiAobW9kZSgpID09IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZVN0YW5kYXJkKQorICAgICAgICBlbnRlckZ1bGxzY3JlZW5TdGFuZGFyZCgpOworICAgIGVs
c2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmVudGVyRnVsbHNjcmVlbk9wdGltaXplZCgpCkBAIC0xMDQ1
LDM0ICs5ODEsMjEgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50
ZXJGdWxsc2NyZWVuU3RhbmRhcmQoKQogICAgICAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1bGxzY3JlZW5TdGFuZGFyZCAtIGxhbWJk
YSglcCkgLSBzdWNjZWVkZWQoJXMpIiwgdGhpcywgYm9vbFN0cmluZyhzdWNjZWVkZWQpKTsKICAg
ICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0U2hvd3NQbGF5YmFja0NvbnRyb2xzOllF
U107CiAKLSAgICAgICAgV2ViVGhyZWFkUnVuKFt0aGlzLCBzdHJvbmdUaGlzXSB7Ci0gICAgICAg
ICAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0gICAgICAgICAgICAgICAgbV9m
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEVudGVyRnVsbHNjcmVlbigpOwotICAgICAgICB9
KTsKKyAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQorICAgICAgICAgICAg
bV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEVudGVyRnVsbHNjcmVlbigpOwogICAgIH1d
OwogfQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpleGl0RnVsbHNj
cmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBmaW5hbFJlY3QpCiB7Ci0gICAgUmVmUHRyPFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOwotCiAgICAg
bV9leGl0UmVxdWVzdGVkID0gdHJ1ZTsKICAgICBpZiAobV9leGl0Q29tcGxldGVkKSB7Ci0gICAg
ICAgIFdlYlRocmVhZFJ1bihbc3Ryb25nVGhpc10gewotICAgICAgICAgICAgaWYgKHN0cm9uZ1Ro
aXMtPm1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQotICAgICAgICAgICAgICAgIHN0cm9uZ1Ro
aXMtPm1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFeGl0RnVsbHNjcmVlbigpOwotICAg
ICAgICB9KTsKKyAgICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQorICAgICAg
ICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEV4aXRGdWxsc2NyZWVuKCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0KLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRf
bWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpcywgZmluYWxSZWN0XSB7Ci0gICAgICAgIHN0cm9uZ1Ro
aXMtPmV4aXRGdWxsc2NyZWVuSW50ZXJuYWwoZmluYWxSZWN0KTsKLSAgICB9KTsKLX0KLQotdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZXhpdEZ1bGxzY3JlZW5JbnRlcm5h
bChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBmaW5hbFJlY3QpCi17Ci0gICAgTE9HKEZ1bGxzY3Jl
ZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZXhpdEZ1bGxzY3JlZW5JbnRl
cm5hbCglcCkiLCB0aGlzKTsKKyAgICAKKyAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0OjpleGl0RnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKICAgICBb
bV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRTaG93c1BsYXliYWNrQ29udHJvbHM6Tk9dOwogICAg
IGlmIChtX3ZpZXdDb250cm9sbGVyKQogICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2
aWV3XS5mcmFtZSA9IFttX3BhcmVudFZpZXcgY29udmVydFJlY3Q6ZmluYWxSZWN0IHRvVmlldzpu
aWxdOwpAQCAtMTA4OSwyNSArMTAxMiwyMyBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpleGl0RnVsbHNjcmVlbkludGVybmFsKGNvbnN0IFdlYkNvcmU6OkludAogICAg
ICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzdG9wT3B0aW1pemVkRnVsbHNjcmVlbl07CiAg
ICAgfSBlbHNlIGlmIChpc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlT3B0aW1pemVkIHwgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlU3RhbmRhcmQpKSB7CiAgICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdD4gc3Ryb25nVGhpcyh0aGlzKTsKLSAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xs
ZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpOTyBjb21wbGV0aW9uSGFuZGxlcjpbc3Ryb25nVGhp
c10gKEJPT0wsIE5TRXJyb3IqKSB7Ci0gICAgICAgICAgICBbc3Ryb25nVGhpcy0+bV93aW5kb3cg
c2V0SGlkZGVuOk5PXTsKLSAgICAgICAgICAgIFtzdHJvbmdUaGlzLT5tX3BsYXllclZpZXdDb250
cm9sbGVyIHN0b3BPcHRpbWl6ZWRGdWxsc2NyZWVuXTsKKyAgICAgICAgW21fcGxheWVyVmlld0Nv
bnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpOTyBjb21wbGV0aW9uSGFuZGxlcjpbc3Ry
b25nVGhpcywgdGhpc10gKEJPT0wsIE5TRXJyb3IqKSB7CisgICAgICAgICAgICBbbV93aW5kb3cg
c2V0SGlkZGVuOk5PXTsKKyAgICAgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHN0b3BP
cHRpbWl6ZWRGdWxsc2NyZWVuXTsKICAgICAgICAgfV07CiAgICAgfSBlbHNlIGlmIChpc01vZGUo
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpKSB7CiAg
ICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhp
cyh0aGlzKTsKLSAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5B
bmltYXRlZDpZRVMgY29tcGxldGlvbkhhbmRsZXI6W3N0cm9uZ1RoaXNdIChCT09MLCBOU0Vycm9y
KikgewotICAgICAgICAgICAgc3Ryb25nVGhpcy0+bV9leGl0Q29tcGxldGVkID0gdHJ1ZTsKKyAg
ICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpZRVMg
Y29tcGxldGlvbkhhbmRsZXI6W3N0cm9uZ1RoaXMsIHRoaXNdIChCT09MLCBOU0Vycm9yKikgewor
ICAgICAgICAgICAgbV9leGl0Q29tcGxldGVkID0gdHJ1ZTsKIAogICAgICAgICAgICAgW0NBVHJh
bnNhY3Rpb24gYmVnaW5dOwogICAgICAgICAgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFj
dGlvbnM6WUVTXTsKLSAgICAgICAgICAgIFtzdHJvbmdUaGlzLT5tX3ZpZGVvTGF5ZXJDb250YWlu
ZXIgc2V0QmFja2dyb3VuZENvbG9yOltbZ2V0VUlDb2xvckNsYXNzKCkgY2xlYXJDb2xvcl0gQ0dD
b2xvcl1dOwotICAgICAgICAgICAgW1tzdHJvbmdUaGlzLT5tX3BsYXllclZpZXdDb250cm9sbGVy
IHZpZXddIHNldEJhY2tncm91bmRDb2xvcjpbZ2V0VUlDb2xvckNsYXNzKCkgY2xlYXJDb2xvcl1d
OworICAgICAgICAgICAgW21fdmlkZW9MYXllckNvbnRhaW5lciBzZXRCYWNrZ3JvdW5kQ29sb3I6
W1tnZXRVSUNvbG9yQ2xhc3MoKSBjbGVhckNvbG9yXSBDR0NvbG9yXV07CisgICAgICAgICAgICBb
W21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0QmFja2dyb3VuZENvbG9yOltnZXRVSUNv
bG9yQ2xhc3MoKSBjbGVhckNvbG9yXV07CiAgICAgICAgICAgICBbQ0FUcmFuc2FjdGlvbiBjb21t
aXRdOwogCi0gICAgICAgICAgICBXZWJUaHJlYWRSdW4oW3N0cm9uZ1RoaXNdIHsKLSAgICAgICAg
ICAgICAgICBpZiAoc3Ryb25nVGhpcy0+bV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0gICAg
ICAgICAgICAgICAgICAgIHN0cm9uZ1RoaXMtPm1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5k
aWRFeGl0RnVsbHNjcmVlbigpOwotICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpZiAobV9m
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCisgICAgICAgICAgICAgICAgbV9mdWxsc2NyZWVuQ2hh
bmdlT2JzZXJ2ZXItPmRpZEV4aXRGdWxsc2NyZWVuKCk7CiAgICAgICAgIH1dOwogICAgIH07CiB9
CkBAIC0xMTIyLDE2ICsxMDQzLDcgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6ZXhpdEZ1bGxzY3JlZW5JbnRlcm5hbChjb25zdCBXZWJDb3JlOjpJbnQKIAogdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6Y2xlYW51cEZ1bGxzY3JlZW4oKQogewot
ICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0
aGlzKTsKLSAgICAKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgp
LCBbc3Ryb25nVGhpc10gewotICAgICAgICBzdHJvbmdUaGlzLT5jbGVhbnVwRnVsbHNjcmVlbklu
dGVybmFsKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OmNsZWFudXBGdWxsc2NyZWVuSW50ZXJuYWwoKQotewotICAgIExPRyhGdWxsc2NyZWVu
LCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmNsZWFudXBGdWxsc2NyZWVuSW50
ZXJuYWwoJXApIiwgdGhpcyk7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdDo6Y2xlYW51cEZ1bGxzY3JlZW4oJXApIiwgdGhpcyk7CiAgICAgaWYg
KG1fd2luZG93KSB7CiAgICAgICAgIFttX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKICAgICAgICAg
W21fd2luZG93IHNldFJvb3RWaWV3Q29udHJvbGxlcjpuaWxdOwpAQCAtMTE3MSwxMiArMTA4Mywx
MCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpjbGVhbnVwRnVsbHNj
cmVlbkludGVybmFsKCkKICAgICBtX3BhcmVudFZpZXcgPSBuaWw7CiAgICAgbV9wYXJlbnRXaW5k
b3cgPSBuaWw7CiAgICAgCi0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0PiBzdHJvbmdUaGlzKHRoaXMpOwotICAgIFdlYlRocmVhZFJ1bihbc3Ryb25nVGhpc10gewot
ICAgICAgICBpZiAoc3Ryb25nVGhpcy0+bV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0gICAg
ICAgICAgICBzdHJvbmdUaGlzLT5tX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkQ2xlYW51
cEZ1bGxzY3JlZW4oKTsKLSAgICAgICAgc3Ryb25nVGhpcy0+bV9lbnRlclJlcXVlc3RlZCA9IGZh
bHNlOwotICAgIH0pOworICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAgICAg
ICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZENsZWFudXBGdWxsc2NyZWVuKCk7CisK
KyAgICBtX2VudGVyUmVxdWVzdGVkID0gZmFsc2U7CiB9CiAKIHZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OmludmFsaWRhdGUoKQpAQCAtMTE4NCw3ICsxMDk0LDcgQEAgdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6aW52YWxpZGF0ZSgpCiAgICAgbV92
aWRlb0Z1bGxzY3JlZW5Nb2RlbCA9IG5pbDsKICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZl
ciA9IG5pbDsKICAgICAKLSAgICBjbGVhbnVwRnVsbHNjcmVlbkludGVybmFsKCk7CisgICAgY2xl
YW51cEZ1bGxzY3JlZW4oKTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpCkBAIC0xMTk3LDEwICsxMTA3LDcg
QEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cmVxdWVzdEhpZGVBbmRF
eGl0RnVsbHNjcmVlbigpCiAgICAgCiAgICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbiglcCkiLCB0
aGlzKTsKIAotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ry
b25nVGhpcyh0aGlzKTsKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1
ZSgpLCBbc3Ryb25nVGhpc10gewotICAgICAgICBbc3Ryb25nVGhpcy0+bV93aW5kb3cgc2V0SGlk
ZGVuOllFU107Ci0gICAgfSk7CisgICAgW21fd2luZG93IHNldEhpZGRlbjpZRVNdOwogCiAgICAg
aWYgKG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwgJiYgIW1fZXhpdFJlcXVlc3RlZCkgewogICAgICAg
ICBtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5wYXVzZSgpOwpAQCAtMTIxMSwxOSArMTExOCwxNiBA
QCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpyZXF1ZXN0SGlkZUFuZEV4
aXRGdWxsc2NyZWVuKCkKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnBy
ZXBhcmVkVG9SZXR1cm5Ub0lubGluZShib29sIHZpc2libGUsIGNvbnN0IEludFJlY3QmIGlubGlu
ZVJlY3QpCiB7CiAgICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKCVwKSAtIHZpc2libGUoJXMpIiwgdGhp
cywgYm9vbFN0cmluZyh2aXNpYmxlKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOwotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3Bh
dGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCB2aXNpYmxlLCBpbmxpbmVSZWN0XSB7
Ci0gICAgICAgIGlmIChzdHJvbmdUaGlzLT5tX3ByZXBhcmVUb0lubGluZUNhbGxiYWNrKSB7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChzdHJvbmdUaGlzLT5tX3ZpZXdDb250cm9sbGVy
KQotICAgICAgICAgICAgICAgIFtzdHJvbmdUaGlzLT5tX3BsYXllclZpZXdDb250cm9sbGVyIHZp
ZXddLmZyYW1lID0gW3N0cm9uZ1RoaXMtPm1fcGFyZW50VmlldyBjb252ZXJ0UmVjdDppbmxpbmVS
ZWN0IHRvVmlldzpuaWxdOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIFtzdHJv
bmdUaGlzLT5tX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddLmZyYW1lID0gaW5saW5lUmVjdDsK
KyAgICBpZiAobV9wcmVwYXJlVG9JbmxpbmVDYWxsYmFjaykgeworICAgICAgICAKKyAgICAgICAg
aWYgKG1fdmlld0NvbnRyb2xsZXIpCisgICAgICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxl
ciB2aWV3XS5mcmFtZSA9IFttX3BhcmVudFZpZXcgY29udmVydFJlY3Q6aW5saW5lUmVjdCB0b1Zp
ZXc6bmlsXTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xs
ZXIgdmlld10uZnJhbWUgPSBpbmxpbmVSZWN0OwogCi0gICAgICAgICAgICBzdGQ6OmZ1bmN0aW9u
PHZvaWQoYm9vbCk+IGNhbGxiYWNrID0gV1RGOjptb3ZlKHN0cm9uZ1RoaXMtPm1fcHJlcGFyZVRv
SW5saW5lQ2FsbGJhY2spOwotICAgICAgICAgICAgY2FsbGJhY2sodmlzaWJsZSk7Ci0gICAgICAg
IH0KLSAgICB9KTsKKyAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKGJvb2wpPiBjYWxsYmFjayA9
IFdURjo6bW92ZShtX3ByZXBhcmVUb0lubGluZUNhbGxiYWNrKTsKKyAgICAgICAgY2FsbGJhY2so
dmlzaWJsZSk7CisgICAgfQogfQogCiBib29sIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0OjptYXlBdXRvbWF0aWNhbGx5U2hvd1ZpZGVvT3B0aW1pemVkKCkgY29uc3QKQEAgLTEyNDcs
MjEgKzExNTEsMjEgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2ls
bFN0YXJ0T3B0aW1pemVkRnVsbHNjcmVlbigpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlzKTsKLSAg
ICBmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoW3N0cm9uZ1RoaXNdKGJvb2wgdmlzaWJsZSkg
eworICAgIGZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZShbc3Ryb25nVGhpcywgdGhpc10oYm9v
bCB2aXNpYmxlKSB7CiAgICAgICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OndpbGxTdGFydE9wdGltaXplZEZ1bGxzY3JlZW4gLSBsYW1iZGEoJXAp
IC0gdmlzaWJsZSglcykiLCBzdHJvbmdUaGlzLmdldCgpLCBib29sU3RyaW5nKHZpc2libGUpKTsK
IAogICAgICAgICBpZiAoIXZpc2libGUpIHsKLSAgICAgICAgICAgIFtzdHJvbmdUaGlzLT5tX3dp
bmRvdyBzZXRIaWRkZW46WUVTXTsKKyAgICAgICAgICAgIFttX3dpbmRvdyBzZXRIaWRkZW46WUVT
XTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIFtbc3Ryb25nVGhp
cy0+bV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBsYXlvdXRJZk5lZWRlZF07CisgICAgICAg
IFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBsYXlvdXRJZk5lZWRlZF07CiAKLSAgICAg
ICAgW3N0cm9uZ1RoaXMtPm1fcGxheWVyVmlld0NvbnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5Bbmlt
YXRlZDpZRVMgY29tcGxldGlvbkhhbmRsZXI6W3N0cm9uZ1RoaXNdIChCT09MIGNvbXBsZXRlZCwg
TlNFcnJvciopIHsKKyAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgZXhpdEZ1bGxTY3Jl
ZW5BbmltYXRlZDpZRVMgY29tcGxldGlvbkhhbmRsZXI6W3N0cm9uZ1RoaXMsIHRoaXNdIChCT09M
IGNvbXBsZXRlZCwgTlNFcnJvciopIHsKICAgICAgICAgICAgIGlmICghY29tcGxldGVkKQogICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIHN0cm9uZ1RoaXMtPmNsZWFyTW9kZShI
VE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCk7Ci0gICAg
ICAgICAgICBbc3Ryb25nVGhpcy0+bV93aW5kb3cgc2V0SGlkZGVuOllFU107CisgICAgICAgICAg
ICBjbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3Rh
bmRhcmQpOworICAgICAgICAgICAgW21fd2luZG93IHNldEhpZGRlbjpZRVNdOwogICAgICAgICB9
XTsKICAgICB9KTsKIH0KQEAgLTEyNzAsMTMgKzExNzQsMTAgQEAgdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6ZGlkU3RhcnRPcHRpbWl6ZWRGdWxsc2NyZWVuKCkKIHsKICAg
ICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpkaWRT
dGFydE9wdGltaXplZEZ1bGxzY3JlZW4oJXApIiwgdGhpcyk7CiAgICAgW21fcGxheWVyVmlld0Nv
bnRyb2xsZXIgc2V0U2hvd3NQbGF5YmFja0NvbnRyb2xzOllFU107CisgICAgW21fd2luZG93IHNl
dEhpZGRlbjpZRVNdOwogCi0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0PiBzdHJvbmdUaGlzKHRoaXMpOwotICAgIFdlYlRocmVhZFJ1bihbc3Ryb25nVGhpc10gewot
ICAgICAgICBbc3Ryb25nVGhpcy0+bV93aW5kb3cgc2V0SGlkZGVuOllFU107Ci0gICAgICAgIGlm
IChzdHJvbmdUaGlzLT5tX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAgICAgIHN0
cm9uZ1RoaXMtPm1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFbnRlckZ1bGxzY3JlZW4o
KTsKLSAgICB9KTsKKyAgICBpZiAobV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCisgICAgICAg
IG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFbnRlckZ1bGxzY3JlZW4oKTsKIH0KIAog
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2lsbFN0b3BPcHRpbWl6ZWRG
dWxsc2NyZWVuKCkKQEAgLTEyODQsMTEgKzExODUsOCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0Ojp3aWxsU3RvcE9wdGltaXplZEZ1bGxzY3JlZW4oKQogICAgIExPRyhG
dWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndpbGxTdG9wT3B0
aW1pemVkRnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOk5P
XTsKIAotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25n
VGhpcyh0aGlzKTsKLSAgICBXZWJUaHJlYWRSdW4oW3N0cm9uZ1RoaXNdIHsKLSAgICAgICAgaWYg
KHN0cm9uZ1RoaXMtPm1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCi0gICAgICAgICAgICBzdHJvbmdU
aGlzLT5tX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZXF1ZXN0RXhpdEZ1bGxzY3JlZW4oKTsKLSAg
ICB9KTsKKyAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKKyAgICAgICAgbV92aWRlb0Z1
bGxzY3JlZW5Nb2RlbC0+cmVxdWVzdEV4aXRGdWxsc2NyZWVuKCk7CiB9CiAKIHZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZFN0b3BPcHRpbWl6ZWRGdWxsc2NyZWVuKCkK
QEAgLTEzMDIsMTMgKzEyMDAsMTEgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6ZGlkU3RvcE9wdGltaXplZEZ1bGxzY3JlZW4oKQogICAgIFttX3ZpZGVvTGF5ZXJDb250
YWluZXIgc2V0QmFja2dyb3VuZENvbG9yOltbZ2V0VUlDb2xvckNsYXNzKCkgY2xlYXJDb2xvcl0g
Q0dDb2xvcl1dOwogICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRCYWNrZ3Jv
dW5kQ29sb3I6W2dldFVJQ29sb3JDbGFzcygpIGNsZWFyQ29sb3JdXTsKIAotICAgIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlzKTsKLSAgICBX
ZWJUaHJlYWRSdW4oW3N0cm9uZ1RoaXNdIHsKLSAgICAgICAgc3Ryb25nVGhpcy0+Y2xlYXJNb2Rl
KEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU9wdGltaXplZCk7Ci0g
ICAgICAgIFtzdHJvbmdUaGlzLT5tX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKLSAgICAgICAgaWYg
KHN0cm9uZ1RoaXMtPm1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQotICAgICAgICAgICAgc3Ry
b25nVGhpcy0+bV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEV4aXRGdWxsc2NyZWVuKCk7
Ci0gICAgfSk7CisgICAgY2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZU9wdGltaXplZCk7CisgICAgW21fd2luZG93IHNldEhpZGRlbjpZRVNdOworCisg
ICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQorICAgICAgICBtX2Z1bGxzY3JlZW5D
aGFuZ2VPYnNlcnZlci0+ZGlkRXhpdEZ1bGxzY3JlZW4oKTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2lsbENhbmNlbE9wdGltaXplZEZ1bGxzY3JlZW4oKQpA
QCAtMTMxOCwxMSArMTIxNCw4IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6OndpbGxDYW5jZWxPcHRpbWl6ZWRGdWxsc2NyZWVuKCkKICAgICBbbV92aWRlb0xheWVyQ29u
dGFpbmVyIHNldEJhY2tncm91bmRDb2xvcjpbW2dldFVJQ29sb3JDbGFzcygpIGNsZWFyQ29sb3Jd
IENHQ29sb3JdXTsKICAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0QmFja2dy
b3VuZENvbG9yOltnZXRVSUNvbG9yQ2xhc3MoKSBjbGVhckNvbG9yXV07CiAKLSAgICBSZWZQdHI8
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHN0cm9uZ1RoaXModGhpcyk7Ci0gICAg
V2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzXSB7Ci0gICAgICAgIGlmIChzdHJvbmdUaGlzLT5tX3Zp
ZGVvRnVsbHNjcmVlbk1vZGVsKQotICAgICAgICAgICAgc3Ryb25nVGhpcy0+bV92aWRlb0Z1bGxz
Y3JlZW5Nb2RlbC0+cmVxdWVzdEV4aXRGdWxsc2NyZWVuKCk7Ci0gICAgfSk7CisgICAgaWYgKG1f
dmlkZW9GdWxsc2NyZWVuTW9kZWwpCisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPnJl
cXVlc3RFeGl0RnVsbHNjcmVlbigpOwogfQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpkaWRDYW5jZWxPcHRpbWl6ZWRGdWxsc2NyZWVuKCkKQEAgLTEzMzEsMTMgKzEy
MjQsMTEgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZGlkQ2FuY2Vs
T3B0aW1pemVkRnVsbHNjcmVlbigpCiAgICAgaWYgKGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHN0cm9uZ1RoaXModGhp
cyk7Ci0gICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzXSB7Ci0gICAgICAgIHN0cm9uZ1RoaXMt
PmNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVPcHRp
bWl6ZWQpOwotICAgICAgICBbc3Ryb25nVGhpcy0+bV93aW5kb3cgc2V0SGlkZGVuOllFU107Ci0g
ICAgICAgIGlmIChzdHJvbmdUaGlzLT5tX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAg
ICAgICAgIHN0cm9uZ1RoaXMtPm1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFeGl0RnVs
bHNjcmVlbigpOwotICAgIH0pOworICAgIGNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6
OlZpZGVvRnVsbHNjcmVlbk1vZGVPcHRpbWl6ZWQpOworICAgIFttX3dpbmRvdyBzZXRIaWRkZW46
WUVTXTsKKworICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAgICAgICAgbV9m
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEV4aXRGdWxsc2NyZWVuKCk7CiB9CiAKIHZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVGb3JPcHRpbWl6ZWRGdWxs
c2NyZWVuU3RvcFdpdGhDb21wbGV0aW9uSGFuZGxlcih2b2lkICheY29tcGxldGlvbkhhbmRsZXIp
KEJPT0wgcmVzdG9yZWQpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tCmluZGV4
IDhhZDUxZWRiMWYxOTBiN2JiNjg5ODI1OGRkM2NmODNiOTllNTBlMDkuLjM3NmNhMWY2Yzg2ZWMz
YTkzY2VkNDQ2N2ExYmQ2MWE1YmI3OWJmZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQubW0KQEAgLTE3OSwxMjUgKzE3OSw3NCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihQbGF0Zm9ybUxheWVyKgog
ICAgIFttX3ZpZGVvRnVsbHNjcmVlbkxheWVyIHNldEFuY2hvclBvaW50OkNHUG9pbnRNYWtlKDAu
NSwgMC41KV07CiAgICAgW21fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgc2V0Qm91bmRzOm1fdmlkZW9G
cmFtZV07CiAgICAgCi0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAg
IGlmIChtX3ZpZGVvRWxlbWVudCkKLSAgICAgICAgICAgIG1fdmlkZW9FbGVtZW50LT5zZXRWaWRl
b0Z1bGxzY3JlZW5MYXllcihtX3ZpZGVvRnVsbHNjcmVlbkxheWVyLmdldCgpKTsKLSAgICAgICAg
cHJvdGVjdC5jbGVhcigpOwotICAgIH0pOworICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKKyAgICAg
ICAgbV92aWRlb0VsZW1lbnQtPnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKG1fdmlkZW9GdWxsc2Ny
ZWVuTGF5ZXIuZ2V0KCkpOwogfQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50OjpwbGF5KCkKIHsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAgICBXZWJUaHJlYWRSdW4oXnsKLSAg
ICAgICAgaWYgKG1fdmlkZW9FbGVtZW50KQotICAgICAgICAgICAgbV92aWRlb0VsZW1lbnQtPnBs
YXkoKTsKLSAgICAgICAgcHJvdGVjdC5jbGVhcigpOwotICAgIH0pOworICAgIGlmIChtX3ZpZGVv
RWxlbWVudCkKKyAgICAgICAgbV92aWRlb0VsZW1lbnQtPnBsYXkoKTsKIH0KIAogdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6cGF1c2UoKQogewotICAgIF9fYmxvY2sg
UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBwcm90ZWN0KHRoaXMp
OwotICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAobV92aWRlb0VsZW1lbnQpCi0gICAg
ICAgICAgICBtX3ZpZGVvRWxlbWVudC0+cGF1c2UoKTsKLSAgICAgICAgcHJvdGVjdC5jbGVhcigp
OwotICAgIH0pOworICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKKyAgICAgICAgbV92aWRlb0VsZW1l
bnQtPnBhdXNlKCk7CiB9CiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQ6OnRvZ2dsZVBsYXlTdGF0ZSgpCiB7Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVu
KF57Ci0gICAgICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKLSAgICAgICAgICAgIG1fdmlkZW9FbGVt
ZW50LT50b2dnbGVQbGF5U3RhdGUoKTsKLSAgICAgICAgcHJvdGVjdC5jbGVhcigpOwotICAgIH0p
OworICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKKyAgICAgICAgbV92aWRlb0VsZW1lbnQtPnRvZ2ds
ZVBsYXlTdGF0ZSgpOwogfQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50OjpiZWdpblNjcnViYmluZygpCiB7Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVu
KF57Ci0gICAgICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKLSAgICAgICAgICAgIG1fdmlkZW9FbGVt
ZW50LT5iZWdpblNjcnViYmluZygpOwotICAgICAgICBwcm90ZWN0LmNsZWFyKCk7Ci0gICAgfSk7
CisgICAgaWYgKG1fdmlkZW9FbGVtZW50KQorICAgICAgICBtX3ZpZGVvRWxlbWVudC0+YmVnaW5T
Y3J1YmJpbmcoKTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dDo6ZW5kU2NydWJiaW5nKCkKIHsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAgICBXZWJUaHJlYWRSdW4oXnsK
LSAgICAgICAgaWYgKG1fdmlkZW9FbGVtZW50KQotICAgICAgICAgICAgbV92aWRlb0VsZW1lbnQt
PmVuZFNjcnViYmluZygpOwotICAgICAgICBwcm90ZWN0LmNsZWFyKCk7Ci0gICAgfSk7CisgICAg
aWYgKG1fdmlkZW9FbGVtZW50KQorICAgICAgICBtX3ZpZGVvRWxlbWVudC0+ZW5kU2NydWJiaW5n
KCk7CiB9CiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNlZWtU
b1RpbWUoZG91YmxlIHRpbWUpCiB7Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKF57
Ci0gICAgICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKLSAgICAgICAgICAgIG1fdmlkZW9FbGVtZW50
LT5zZXRDdXJyZW50VGltZSh0aW1lKTsKLSAgICAgICAgcHJvdGVjdC5jbGVhcigpOwotICAgIH0p
OworICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKKyAgICAgICAgbV92aWRlb0VsZW1lbnQtPnNldEN1
cnJlbnRUaW1lKHRpbWUpOwogfQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50OjpmYXN0U2Vlayhkb3VibGUgdGltZSkKIHsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAgICBXZWJU
aHJlYWRSdW4oXnsKLSAgICAgICAgaWYgKG1fdmlkZW9FbGVtZW50KQotICAgICAgICAgICAgbV92
aWRlb0VsZW1lbnQtPmZhc3RTZWVrKHRpbWUpOwotICAgICAgICBwcm90ZWN0LmNsZWFyKCk7Ci0g
ICAgfSk7CisgICAgaWYgKG1fdmlkZW9FbGVtZW50KQorICAgICAgICBtX3ZpZGVvRWxlbWVudC0+
ZmFzdFNlZWsodGltZSk7CiB9CiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkKIHsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAgICBXZWJU
aHJlYWRSdW4oXnsKLSAgICAgICAgaWYgKG1fdmlkZW9FbGVtZW50KQotICAgICAgICAgICAgbV92
aWRlb0VsZW1lbnQtPmJlZ2luU2Nhbm5pbmcoTWVkaWFDb250cm9sbGVySW50ZXJmYWNlOjpGb3J3
YXJkKTsKLSAgICAgICAgcHJvdGVjdC5jbGVhcigpOwotICAgIH0pOworICAgIGlmIChtX3ZpZGVv
RWxlbWVudCkKKyAgICAgICAgbV92aWRlb0VsZW1lbnQtPmJlZ2luU2Nhbm5pbmcoTWVkaWFDb250
cm9sbGVySW50ZXJmYWNlOjpGb3J3YXJkKTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudDo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKCkKIHsKLSAgICBfX2Jsb2Nr
IFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gcHJvdGVjdCh0aGlz
KTsKLSAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYgKG1fdmlkZW9FbGVtZW50KQotICAg
ICAgICAgICAgbV92aWRlb0VsZW1lbnQtPmJlZ2luU2Nhbm5pbmcoTWVkaWFDb250cm9sbGVySW50
ZXJmYWNlOjpCYWNrd2FyZCk7Ci0gICAgICAgIHByb3RlY3QuY2xlYXIoKTsKLSAgICB9KTsKKyAg
ICBpZiAobV92aWRlb0VsZW1lbnQpCisgICAgICAgIG1fdmlkZW9FbGVtZW50LT5iZWdpblNjYW5u
aW5nKE1lZGlhQ29udHJvbGxlckludGVyZmFjZTo6QmFja3dhcmQpOwogfQogCiB2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjplbmRTY2FubmluZygpCiB7Ci0gICAgX19i
bG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3Qo
dGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIGlmIChtX3ZpZGVvRWxlbWVudCkK
LSAgICAgICAgICAgIG1fdmlkZW9FbGVtZW50LT5lbmRTY2FubmluZygpOwotICAgICAgICBwcm90
ZWN0LmNsZWFyKCk7Ci0gICAgfSk7CisgICAgaWYgKG1fdmlkZW9FbGVtZW50KQorICAgICAgICBt
X3ZpZGVvRWxlbWVudC0+ZW5kU2Nhbm5pbmcoKTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudDo6cmVxdWVzdEV4aXRGdWxsc2NyZWVuKCkKIHsKLSAgICBpZiAo
IW1fdmlkZW9FbGVtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBfX2Jsb2NrIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAgICBX
ZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYgKG1fdmlkZW9FbGVtZW50ICYmIG1fdmlkZW9FbGVt
ZW50LT5pc0Z1bGxzY3JlZW4oKSkKLSAgICAgICAgICAgIG1fdmlkZW9FbGVtZW50LT5leGl0RnVs
bHNjcmVlbigpOwotICAgICAgICBwcm90ZWN0LmNsZWFyKCk7Ci0gICAgfSk7CisgICAgaWYgKG1f
dmlkZW9FbGVtZW50ICYmIG1fdmlkZW9FbGVtZW50LT5pc0Z1bGxzY3JlZW4oKSkKKyAgICAgICAg
bV92aWRlb0VsZW1lbnQtPmV4aXRGdWxsc2NyZWVuKCk7CiB9CiAKIHZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvTGF5ZXJGcmFtZShGbG9hdFJlY3QgcmVj
dCkKQEAgLTQ1NCwxMiArNDAzLDggQEAgY29uc3QgQXRvbWljU3RyaW5nJiBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6ZXZlbnROYW1lQWxsKCkKIAogdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKEhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlKQog
ewotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
PiBwcm90ZWN0KHRoaXMpOwotICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAobV92aWRl
b0VsZW1lbnQpCi0gICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+ZnVsbHNjcmVlbk1vZGVDaGFu
Z2VkKHZpZGVvRnVsbHNjcmVlbk1vZGUpOwotICAgICAgICBwcm90ZWN0LmNsZWFyKCk7Ci0gICAg
fSk7CisgICAgaWYgKG1fdmlkZW9FbGVtZW50KQorICAgICAgICBtX3ZpZGVvRWxlbWVudC0+ZnVs
bHNjcmVlbk1vZGVDaGFuZ2VkKHZpZGVvRnVsbHNjcmVlbk1vZGUpOwogfQogCiAjZW5kaWYK
</data>
<flag name="review"
          id="278535"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253796</attachid>
            <date>2015-05-27 11:29:15 -0700</date>
            <delta_ts>2015-05-27 14:41:19 -0700</delta_ts>
            <desc>Patch for landing.</desc>
            <filename>bug-143954-20150527112903.patch</filename>
            <type>text/plain</type>
            <size>64227</size>
            <attacher name="Jeremy Jones">jeremyj-wk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg0OTA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWMyODRlNjRhMTZlZmRm
MGEyYzIxYjAxODc0ZmJhNjU0NGE5NTYzNC4uZDI0MmQ2OWQ5ODI1NTM4MmNmMGE4MTUxZDNmMjU2
OGM3NWY5OWY2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExOSBAQAorMjAxNS0wNC0yMCAgSmVy
ZW15IEpvbmVzICA8amVyZW15akBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgV2ViS2l0
MSBzcGVjaWZpYyB0aHJlYWRpbmcgY29kZSBvdXQgb2YgV2ViVmlkZW9GdWxsc2NyZWVuIGNvZGUg
dGhhdCBpcyBzaGFyZWQgd2l0aCBXZWJLaXQyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQzOTU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4g
QWRsZXIuCisKKyAgICAgICAgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQgaXMgdXNl
ZCBpbiBib3RoIFdlYktpdDEgYW5kIFdlYktpdDIuIEluIFdlYktpdDEsIHRoZSBtb2RlbCBydW5z
IGluIHRoZSBXZWJUaHJlYWQsIHdoaWxlCisgICAgICAgIHRoZSBpbnRlcmZhY2UgaXMgb24gdGhl
IG1haW4gdGhyZWFkLiBTbyB0aGVyZSBpcyBjb2RlIHRvIGRpc3BhdGNoIGJldHdlZW4gdGhlc2Ug
dHdvIHRocmVhZCB3aGVuIGNvbW11bmljYXRpbmcgYmV0d2VlbiB0aGUKKyAgICAgICAgaW50ZXJm
YWNlIGFuZCB0aGUgbW9kZWwuIEluIFdlYktpdDIsIHRoaXMgaXMgaGFuZGxlZCBhdXRvbWF0aWNh
bGx5IGJ5IHRoZSBJUEMgbWVjaGFuaXNtLiBBcyBhIHJlc3VsdCwgdGhlIHRocmVhZGluZyBjb2Rl
CisgICAgICAgIGluIFdlYlZpZGVvRnVsbHNjcmVlbmJJbnRlcmZhY2VBVktpdCBhbmQgaW4gV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQgaXMgcmVkdW5kYW50IGluIFdlYktpdDIg
YW5kIHJlbGllcyBvbgorICAgICAgICBXZWJUaHJlYWRSdW4gYmVpbmcgYSBuby1vcCBpbiBXZWJL
aXQyLgorCisgICAgICAgIFRoaXMgY2hhbmdlIGNsYXJpZmllcyB0aGlzIGFuZCBzaW1wbGlmaWVz
IHRoZSBXZWJLaXQyIHBhdGggYnkgbW92aW5nIHRoZSBXZWJLaXQxIHNwZWNpZmljIHRocmVhZGlu
ZyBjb2RlIGludG8KKyAgICAgICAgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQs
IHdoaWNoIGlzIHRoZSBXZWJLaXQxIHNwZWNpZmljIGNvbnRyb2xsZXIuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tOgorICAgICAg
ICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OldlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0KToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0OjpzZXRDb250cm9sbGVyKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpkaWRTZXR1cEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmRpZEV4aXRGdWxsc2NyZWVuKToKKyAgICAgICAg
KFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpkaWRDbGVhbnVwRnVsbHNjcmVl
bik6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZnVsbHNj
cmVlbk1heVJldHVyblRvSW5saW5lKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0OjpyZXNldE1lZGlhU3RhdGUpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldER1cmF0aW9uKToKKyAgICAgICAgKFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRDdXJyZW50VGltZSk6CisgICAgICAgIChXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0QnVmZmVyZWRUaW1lKToKKyAgICAg
ICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRSYXRlKToKKyAgICAg
ICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRWaWRlb0RpbWVuc2lv
bnMpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldFNl
ZWthYmxlUmFuZ2VzKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0OjpzZXRDYW5QbGF5RmFzdFJldmVyc2UpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQ6OnNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKToKKyAgICAg
ICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRMZWdpYmxlTWVkaWFT
ZWxlY3Rpb25PcHRpb25zKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0OjpzZXRFeHRlcm5hbFBsYXliYWNrKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0OjpwbGF5KToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0OjpwYXVzZSk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6dG9nZ2xlUGxheVN0YXRlKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0OjpiZWdpblNjcnViYmluZyk6CisgICAgICAgIChXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZW5kU2NydWJiaW5nKToKKyAgICAgICAgKFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWVrVG9UaW1lKToKKyAgICAgICAg
KFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpmYXN0U2Vlayk6CisgICAgICAg
IChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6YmVnaW5TY2FubmluZ0Zvcndh
cmQpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmJlZ2lu
U2Nhbm5pbmdCYWNrd2FyZCk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6ZW5kU2Nhbm5pbmcpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OnJlcXVlc3RFeGl0RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0VmlkZW9MYXllckZyYW1lKToKKyAgICAgICAg
KFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRWaWRlb0xheWVyR3Jhdml0
eSk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2VsZWN0
QXVkaW9NZWRpYU9wdGlvbik6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKToKKyAgICAgICAgKFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldHVwRnVsbHNjcmVlbik6
CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXhpdEZ1bGxz
Y3JlZW4pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnJl
cXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyIGluaXRdKToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlciBkZWFsbG9jXSk6CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIg
ZW50ZXJGdWxsc2NyZWVuOm1vZGU6XSk6CisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXIgZXhpdEZ1bGxzY3JlZW5dKToKKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlciByZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuXSk6CisgICAgICAgICgtW1dl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIgZGlkRmluaXNoRnVsbHNjcmVlbjpdKToKKyAgICAg
ICAgKFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDaGFuZ2VPYnNlcnZlcjo6c2V0VGFyZ2V0
KTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBkaWRT
ZXR1cEZ1bGxzY3JlZW5dKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlciBkaWRFbnRlckZ1bGxzY3JlZW5dKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciBkaWRFeGl0RnVsbHNjcmVlbl0pOiBEZWxldGVkLgor
ICAgICAgICAoLVtXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyIGRpZENsZWFudXBGdWxsc2Ny
ZWVuXSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIg
ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lXSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lmg6CisgICAgICAgICogcGxh
dGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tOgorICAgICAgICAo
LVtXZWJBVlZpZGVvTGF5ZXIgc2V0Qm91bmRzOl0pOgorICAgICAgICAoLVtXZWJBVlZpZGVvTGF5
ZXIgcmVzb2x2ZUJvdW5kc10pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OnJlc2V0TWVkaWFTdGF0ZSk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6c2V0RHVyYXRpb24pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ6OnNldEN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0OjpzZXRCdWZmZXJlZFRpbWUpOgorICAgICAgICAoV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFJhdGUpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFZpZGVvRGltZW5zaW9ucyk6CisgICAgICAgIChXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0U2Vla2FibGVSYW5nZXMpOgorICAgICAgICAo
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldENhblBsYXlGYXN0UmV2ZXJzZSk6
CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0QXVkaW9NZWRp
YVNlbGVjdGlvbk9wdGlvbnMpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OnNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMpOgorICAgICAgICAoV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldEV4dGVybmFsUGxheWJhY2spOgorICAgICAg
ICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldHVwRnVsbHNjcmVlbik6Cisg
ICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVu
KToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1bGxz
Y3JlZW5TdGFuZGFyZCk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6ZXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OmV4aXRGdWxsc2NyZWVuSW50ZXJuYWwpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OmNsZWFudXBGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpjbGVhbnVwRnVsbHNjcmVlbkludGVybmFsKToKKyAg
ICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpyZXF1ZXN0SGlkZUFuZEV4
aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
OjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQ6OndpbGxTdGFydE9wdGltaXplZEZ1bGxzY3JlZW4pOgorICAgICAgICAo
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZFN0YXJ0T3B0aW1pemVkRnVsbHNj
cmVlbik6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2lsbFN0
b3BPcHRpbWl6ZWRGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpkaWRTdG9wT3B0aW1pemVkRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2lsbENhbmNlbE9wdGltaXplZEZ1bGxzY3JlZW4p
OgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZENhbmNlbE9w
dGltaXplZEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OnNldFZpZGVvTGF5ZXJGcmFtZSk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6c2V0dXBGdWxsc2NyZWVuSW50ZXJuYWwpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oOgorICAgICAgICAqIHBs
YXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbToK
KyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0Z1
bGxzY3JlZW5MYXllcik6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudDo6cGxheSk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVu
dDo6cGF1c2UpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6
OnRvZ2dsZVBsYXlTdGF0ZSk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudDo6YmVnaW5TY3J1YmJpbmcpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ6OmVuZFNjcnViYmluZyk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2Vla1RvVGltZSk6CisgICAgICAgIChXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6ZmFzdFNlZWspOgorICAgICAgICAoV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKToKKyAgICAgICAg
KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpiZWdpblNjYW5uaW5nQmFja3dh
cmQpOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmVuZFNj
YW5uaW5nKToKKyAgICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojpy
ZXF1ZXN0RXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCk6CisgICAgICAgIChXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6dmlkZW9MYXllckZyYW1lKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojp2aWRlb0xheWVyR3Jh
dml0eSk6IERlbGV0ZWQuCisKIDIwMTUtMDUtMjcgIEplcmVteSBKb25lcyAgPGplcmVteWpAYXBw
bGUuY29tPgogCiAgICAgICAgIEhhbmRsZSBjYXNlIHdoZXJlIC1zdGFydE9wdGltaXplZEZ1bGxz
Y3JlZW4gZmFpbHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbQppbmRleCBiMWMwYmU5
MDQ1ZDAwYTU1MjE2ZDE2ZWU1NzE3MGIyNGYzMjYxZThkLi4xN2I2NzJmYmRkZTBhZjc2OWVjNzI2
YjhmMDRlNDhjNDJlYzczNmFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0KQEAg
LTMwLDYgKzMwLDcgQEAKICNpbXBvcnQgIldlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktp
dC5oIgogCiAjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJUaW1lUmFuZ2VzLmgiCiAjaW1w
b3J0ICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oIgogI2ltcG9ydCAiV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCIKICNpbXBvcnQgPFF1YXJ0ekNvcmUvQ29y
ZUFuaW1hdGlvbi5oPgpAQCAtNTEsNyArNTIsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
ICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotLSAodm9pZCllbnRlckZ1bGxzY3JlZW46KFVJVmll
dyAqKXZpZXcgbW9kZTooV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVu
TW9kZSltb2RlCistICh2b2lkKWVudGVyRnVsbHNjcmVlbjooVUlWaWV3ICopdmlldyBtb2RlOihX
ZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpbW9kZQog
ewogICAgIFVOVVNFRF9QQVJBTSh2aWV3KTsKICAgICBVTlVTRURfUEFSQU0obW9kZSk7CkBAIC02
OCwzMiArNjksNDg0IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiAjZWxzZQogCi1AaW50
ZXJmYWNlIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIgKEZ1bGxzY3JlZW5PYnNlcnZhdGlv
bikKLS0gKHZvaWQpZGlkU2V0dXBGdWxsc2NyZWVuOwotLSAodm9pZClkaWRFbnRlckZ1bGxzY3Jl
ZW47Ci0tICh2b2lkKWRpZEV4aXRGdWxsc2NyZWVuOwotLSAodm9pZClkaWRDbGVhbnVwRnVsbHNj
cmVlbjsKLS0gKHZvaWQpZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lOworY2xhc3MgV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ7CisKK0BpbnRlcmZhY2UgV2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlciAoZGVsZWdhdGUpCistKHZvaWQpZGlkRmluaXNoRnVsbHNjcmVlbjoo
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQqKWNvbnRleHQ7CiBAZW5kCiAKLWNs
YXNzIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDaGFuZ2VPYnNlcnZlciA6IHB1YmxpYyBX
ZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciB7Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlciogX3RhcmdldDsKK2NsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0IGZpbmFsCisgICAgOiBwcml2YXRlIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZQor
ICAgICwgcHJpdmF0ZSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbAorICAgICwgcHJpdmF0ZSBXZWJW
aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcgorICAgICwgcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiB7CisKIHB1YmxpYzoK
LSAgICB2b2lkIHNldFRhcmdldChXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyKiB0YXJnZXQp
IHsgX3RhcmdldCA9IHRhcmdldDsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRTZXR1cEZ1bGxzY3Jl
ZW4oKSBvdmVycmlkZSB7IFtfdGFyZ2V0IGRpZFNldHVwRnVsbHNjcmVlbl07IH0KLSAgICB2aXJ0
dWFsIHZvaWQgZGlkRW50ZXJGdWxsc2NyZWVuKCkgb3ZlcnJpZGUgeyBbX3RhcmdldCBkaWRFbnRl
ckZ1bGxzY3JlZW5dOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZEV4aXRGdWxsc2NyZWVuKCkgb3Zl
cnJpZGUgeyBbX3RhcmdldCBkaWRFeGl0RnVsbHNjcmVlbl07IH0KLSAgICB2aXJ0dWFsIHZvaWQg
ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKSBvdmVycmlkZSB7IFtfdGFyZ2V0IGRpZENsZWFudXBGdWxs
c2NyZWVuXTsgfQotICAgIHZpcnR1YWwgdm9pZCBmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUo
KSBvdmVycmlkZSB7IFtfdGFyZ2V0IGZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZV07IH0KKyAg
ICBzdGF0aWMgUmVmPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBjcmVhdGUo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViVmlkZW9GdWxsc2NyZWVu
Q29udHJvbGxlckNvbnRleHQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldENvbnRyb2xsZXIo
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlciogY29udHJvbGxlcikgeyBtX2NvbnRyb2xsZXIg
PSBjb250cm9sbGVyOyB9CisgICAgdm9pZCBzZXRVcEZ1bGxzY3JlZW4oSFRNTFZpZGVvRWxlbWVu
dCYsIFVJVmlldyAqLCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUp
OworICAgIHZvaWQgZXhpdEZ1bGxzY3JlZW4oKTsKKyAgICB2b2lkIHJlcXVlc3RIaWRlQW5kRXhp
dEZ1bGxzY3JlZW4oKTsKKyAgICB2b2lkIGludmFsaWRhdGUoKTsKKworcHJpdmF0ZToKKyAgICBX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dCgpIHsgfQorCisgICAgLy8gV2ViVmlk
ZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU2V0dXBGdWxs
c2NyZWVuKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZEVudGVyRnVsbHNjcmVlbigp
IG92ZXJyaWRlIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRFeGl0RnVsbHNjcmVlbigpIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgdm9pZCBkaWRDbGVhbnVwRnVsbHNjcmVlbigpIG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgdm9pZCBmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKSBvdmVycmlkZTsK
KyAgICAKKyAgICAvLyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UKKyAgICB2aXJ0dWFsIHZv
aWQgcmVzZXRNZWRpYVN0YXRlKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldER1cmF0
aW9uKGRvdWJsZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldEN1cnJlbnRUaW1lKGRv
dWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgdm9pZCBzZXRCdWZmZXJlZFRpbWUoZG91YmxlKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0UmF0ZShib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlkZW9EaW1lbnNpb25zKGJvb2wgaGFzVmlkZW8sIGZsb2F0
IHdpZHRoLCBmbG9hdCBoZWlnaHQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRTZWVr
YWJsZVJhbmdlcyhjb25zdCBUaW1lUmFuZ2VzJikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IHNldENhblBsYXlGYXN0UmV2ZXJzZShib29sKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIG9wdGlv
bnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvcHRp
b25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0RXh0ZXJuYWxQbGF5YmFjayhib29sIGVuYWJsZWQsIEV4dGVybmFsUGxheWJhY2tUYXJnZXRU
eXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSkgb3ZlcnJpZGU7CisgICAgCisgICAgLy8g
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwKKyAgICB2aXJ0dWFsIHZvaWQgcGxheSgpIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBwYXVzZSgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCB0
b2dnbGVQbGF5U3RhdGUoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5TY3J1YmJp
bmcoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kU2NydWJiaW5nKCkgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIHNlZWtUb1RpbWUoZG91YmxlIHRpbWUpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBmYXN0U2Vlayhkb3VibGUgdGltZSkgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCB2b2lkIGJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IGJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmRT
Y2FubmluZygpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RXhpdEZ1bGxzY3Jl
ZW4oKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlkZW9MYXllckZyYW1lKEZsb2F0
UmVjdCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBGbG9hdFJlY3QgdmlkZW9MYXllckZyYW1lKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9mcmFtZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRW
aWRlb0xheWVyR3Jhdml0eShXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5KSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIFZpZGVvR3Jhdml0eSB2aWRlb0xheWVyR3Jhdml0eSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZ3Jhdml0eTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZWxl
Y3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSkgb3ZlcnJpZGU7CisgICAgCisgICAgUmVmUHRyPFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBtX2ludGVyZmFjZTsKKyAgICBSZWZQdHI8
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1fbW9kZWw7CisgICAgUmVmUHRy
PEhUTUxWaWRlb0VsZW1lbnQ+IG1fdmlkZW9FbGVtZW50OworICAgIFJldGFpblB0cjxQbGF0Zm9y
bUxheWVyPiBtX3ZpZGVvRnVsbHNjcmVlbkxheWVyOworICAgIFJldGFpblB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyPiBtX2NvbnRyb2xsZXI7CisgICAgRmxvYXRSZWN0IG1fZnJhbWU7
CisgICAgVmlkZW9HcmF2aXR5IG1fZ3Jhdml0eTsKIH07CiAKLUBpbXBsZW1lbnRhdGlvbiBXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyCisjcHJhZ21hIG1hcmsgV2ViVmlkZW9GdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXIKKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dDo6ZGlkU2V0dXBGdWxsc2NyZWVuKCkKIHsKKyAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKKyAg
ICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0cm9uZ1RoaXMo
dGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzLCB0aGlzXSB7CisgICAgICAgIG1f
bW9kZWwtPnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIuZ2V0
KCkpOworICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBb
c3Ryb25nVGhpcywgdGhpc10geworICAgICAgICAgICAgbV9pbnRlcmZhY2UtPmVudGVyRnVsbHNj
cmVlbigpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6ZGlkRXhpdEZ1bGxzY3JlZW4oKQoreworICAgIEFTU0VSVChp
c1VJVGhyZWFkKCkpOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29u
dGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oW3N0cm9uZ1RoaXMsIHRo
aXNdIHsKKyAgICAgICAgbV9tb2RlbC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIobmlsKTsKKyAg
ICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1Ro
aXMsIHRoaXNdIHsKKyAgICAgICAgICAgIG1faW50ZXJmYWNlLT5jbGVhbnVwRnVsbHNjcmVlbigp
OworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dDo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKQoreworICAgIEFTU0VSVChpc1VJ
VGhyZWFkKCkpOworICAgIG1faW50ZXJmYWNlLT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbChu
dWxscHRyKTsKKyAgICBtX2ludGVyZmFjZS0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2Jz
ZXJ2ZXIobnVsbHB0cik7CisgICAgbV9pbnRlcmZhY2UgPSBudWxscHRyOworICAgIAorICAgIFJl
ZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlz
KTsKKyAgICBXZWJUaHJlYWRSdW4oW3N0cm9uZ1RoaXMsIHRoaXNdIHsKKyAgICAgICAgbV9tb2Rl
bC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIobmlsKTsKKyAgICAgICAgbV9tb2RlbC0+c2V0V2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKG51bGxwdHIpOworICAgICAgICBtX21vZGVsLT5zZXRW
aWRlb0VsZW1lbnQobnVsbHB0cik7CisgICAgICAgIG1fbW9kZWwgPSBudWxscHRyOworICAgICAg
ICBtX3ZpZGVvRWxlbWVudCA9IG51bGxwdHI7CisgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTGF5
ZXIgPSBuaWw7CisgICAgICAgIAorICAgICAgICBbbV9jb250cm9sbGVyIGRpZEZpbmlzaEZ1bGxz
Y3JlZW46dGhpc107CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpCit7CisgICAgQVNTRVJU
KGlzVUlUaHJlYWQoKSk7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJD
b250ZXh0PiBzdHJvbmdUaGlzKHRoaXMpOworICAgIFdlYlRocmVhZFJ1bihbc3Ryb25nVGhpcywg
dGhpc10geworICAgICAgICBJbnRSZWN0IGNsaWVudFJlY3QgPSBtX3ZpZGVvRWxlbWVudC0+Y2xp
ZW50UmVjdCgpOworICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1
ZSgpLCBbc3Ryb25nVGhpcywgdGhpcywgY2xpZW50UmVjdF0geworICAgICAgICAgICAgbV9pbnRl
cmZhY2UtPnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSh0cnVlLCBjbGllbnRSZWN0KTsKKyAgICAg
ICAgfSk7CisgICAgfSk7Cit9CisKKyNwcmFnbWEgbWFyayBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2UKKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cmVzZXRN
ZWRpYVN0YXRlKCkKK3sKKyAgICBBU1NFUlQoV2ViVGhyZWFkSXNDdXJyZW50KCkgfHwgaXNNYWlu
VGhyZWFkKCkpOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFp
bl9xdWV1ZSgpLCBbc3Ryb25nVGhpcywgdGhpc10geworICAgICAgICBpZiAobV9pbnRlcmZhY2Up
CisgICAgICAgICAgICBtX2ludGVyZmFjZS0+cmVzZXRNZWRpYVN0YXRlKCk7CisgICAgfSk7Cit9
CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldER1cmF0aW9u
KGRvdWJsZSBkdXJhdGlvbikKK3sKKyAgICBBU1NFUlQoV2ViVGhyZWFkSXNDdXJyZW50KCkpOwor
ICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhp
cyh0aGlzKTsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBb
c3Ryb25nVGhpcywgdGhpcywgZHVyYXRpb25dIHsKKyAgICAgICAgaWYgKG1faW50ZXJmYWNlKQor
ICAgICAgICAgICAgbV9pbnRlcmZhY2UtPnNldER1cmF0aW9uKGR1cmF0aW9uKTsKKyAgICB9KTsK
K30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0Q3VycmVu
dFRpbWUoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkKK3sKKyAgICBBU1NF
UlQoV2ViVGhyZWFkSXNDdXJyZW50KCkpOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBkaXNwYXRjaF9hc3luYyhk
aXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpcywgdGhpcywgY3VycmVudFRpbWUs
IGFuY2hvclRpbWVdIHsKKyAgICAgICAgaWYgKG1faW50ZXJmYWNlKQorICAgICAgICAgICAgbV9p
bnRlcmZhY2UtPnNldEN1cnJlbnRUaW1lKGN1cnJlbnRUaW1lLCBhbmNob3JUaW1lKTsKKyAgICB9
KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0QnVm
ZmVyZWRUaW1lKGRvdWJsZSBidWZmZXJlZFRpbWUpCit7CisgICAgQVNTRVJUKFdlYlRocmVhZElz
Q3VycmVudCgpKTsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ+IHN0cm9uZ1RoaXModGhpcyk7CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21h
aW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMsIHRoaXMsIGJ1ZmZlcmVkVGltZV0geworICAgICAgICBp
ZiAobV9pbnRlcmZhY2UpCisgICAgICAgICAgICBtX2ludGVyZmFjZS0+c2V0QnVmZmVyZWRUaW1l
KGJ1ZmZlcmVkVGltZSk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OnNldFJhdGUoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0
ZSkKK3sKKyAgICBBU1NFUlQoV2ViVGhyZWFkSXNDdXJyZW50KCkpOworICAgIFJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBk
aXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpcywgdGhp
cywgaXNQbGF5aW5nLCBwbGF5YmFja1JhdGVdIHsKKyAgICAgICAgaWYgKG1faW50ZXJmYWNlKQor
ICAgICAgICAgICAgbV9pbnRlcmZhY2UtPnNldFJhdGUoaXNQbGF5aW5nLCBwbGF5YmFja1JhdGUp
OworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
OjpzZXRWaWRlb0RpbWVuc2lvbnMoYm9vbCBoYXNWaWRlbywgZmxvYXQgd2lkdGgsIGZsb2F0IGhl
aWdodCkKK3sKKyAgICBBU1NFUlQoV2ViVGhyZWFkSXNDdXJyZW50KCkpOworICAgIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAg
ICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpcywg
dGhpcywgaGFzVmlkZW8sIHdpZHRoLCBoZWlnaHRdIHsKKyAgICAgICAgaWYgKG1faW50ZXJmYWNl
KQorICAgICAgICAgICAgbV9pbnRlcmZhY2UtPnNldFZpZGVvRGltZW5zaW9ucyhoYXNWaWRlbywg
d2lkdGgsIGhlaWdodCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlckNvbnRleHQ6OnNldFNlZWthYmxlUmFuZ2VzKGNvbnN0IFRpbWVSYW5nZXMmIHRpbWVS
YW5nZXMpCit7CisgICAgQVNTRVJUKFdlYlRocmVhZElzQ3VycmVudCgpKTsKKyAgICBSZWZQdHI8
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7Cisg
ICAgY29uc3QgUGxhdGZvcm1UaW1lUmFuZ2VzJiBwbGF0Zm9ybVRpbWVSYW5nZXMgPSB0aW1lUmFu
Z2VzLnJhbmdlcygpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVl
KCksIFtzdHJvbmdUaGlzLCB0aGlzLCBwbGF0Zm9ybVRpbWVSYW5nZXNdIHsKKyAgICAgICAgaWYg
KG1faW50ZXJmYWNlKQorICAgICAgICAgICAgbV9pbnRlcmZhY2UtPnNldFNlZWthYmxlUmFuZ2Vz
KFRpbWVSYW5nZXM6OmNyZWF0ZShwbGF0Zm9ybVRpbWVSYW5nZXMpKTsKKyAgICB9KTsKK30KKwor
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2V0Q2FuUGxheUZhc3RS
ZXZlcnNlKGJvb2wgY2FuUGxheUZhc3RSZXZlcnNlKQoreworICAgIEFTU0VSVChXZWJUaHJlYWRJ
c0N1cnJlbnQoKSk7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250
ZXh0PiBzdHJvbmdUaGlzKHRoaXMpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9t
YWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCB0aGlzLCBjYW5QbGF5RmFzdFJldmVyc2VdIHsKKyAg
ICAgICAgaWYgKG1faW50ZXJmYWNlKQorICAgICAgICAgICAgbV9pbnRlcmZhY2UtPnNldENhblBs
YXlGYXN0UmV2ZXJzZShjYW5QbGF5RmFzdFJldmVyc2UpOworICAgIH0pOworfQorCit2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRBdWRpb01lZGlhU2VsZWN0aW9u
T3B0aW9ucyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJ
bmRleCkKK3sKKyAgICBBU1NFUlQoV2ViVGhyZWFkSXNDdXJyZW50KCkpOworICAgIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKKwor
ICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gb3B0aW9uc0FycmF5ID0gYWRvcHROUyhbW05T
TXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5Om9wdGlvbnMuc2l6ZSgpXSk7Cisg
ICAgZm9yIChhdXRvJiBuYW1lIDogb3B0aW9ucykKKyAgICAgICAgW29wdGlvbnNBcnJheSBhZGRP
YmplY3Q6bmFtZV07CisgICAgCisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5f
cXVldWUoKSwgW3N0cm9uZ1RoaXMsIHRoaXMsIG9wdGlvbnNBcnJheSwgc2VsZWN0ZWRJbmRleF0g
eworICAgICAgICBWZWN0b3I8U3RyaW5nPiBvcHRpb25zOworICAgICAgICBmb3IgKE5TU3RyaW5n
ICpuYW1lIDogb3B0aW9uc0FycmF5LmdldCgpKQorICAgICAgICAgICAgb3B0aW9ucy5hcHBlbmQo
bmFtZSk7CisgICAgICAgIAorICAgICAgICBpZiAobV9pbnRlcmZhY2UpCisgICAgICAgICAgICBt
X2ludGVyZmFjZS0+c2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMob3B0aW9ucywgc2VsZWN0
ZWRJbmRleCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxl
ckNvbnRleHQ6OnNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPFN0
cmluZz4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit7CisgICAgQVNTRVJUKFdl
YlRocmVhZElzQ3VycmVudCgpKTsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7CisgICAgCisgICAgUmV0YWluUHRyPE5TTXV0
YWJsZUFycmF5PiBvcHRpb25zQXJyYXkgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2Nd
IGluaXRXaXRoQ2FwYWNpdHk6b3B0aW9ucy5zaXplKCldKTsKKyAgICBmb3IgKGF1dG8mIG5hbWUg
OiBvcHRpb25zKQorICAgICAgICBbb3B0aW9uc0FycmF5IGFkZE9iamVjdDpuYW1lXTsKKyAgICAK
KyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhp
cywgdGhpcywgb3B0aW9uc0FycmF5LCBzZWxlY3RlZEluZGV4XSB7CisgICAgICAgIFZlY3RvcjxT
dHJpbmc+IG9wdGlvbnM7CisgICAgICAgIGZvciAoTlNTdHJpbmcgKm5hbWUgOiBvcHRpb25zQXJy
YXkuZ2V0KCkpCisgICAgICAgICAgICBvcHRpb25zLmFwcGVuZChuYW1lKTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChtX2ludGVyZmFjZSkKKyAgICAgICAgICAgIG1faW50ZXJmYWNlLT5zZXRMZWdp
YmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpOworICAgIH0p
OworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZXRFeHRl
cm5hbFBsYXliYWNrKGJvb2wgZW5hYmxlZCwgRXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdHlw
ZSwgU3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUpCit7CisgICAgQVNTRVJUKFdlYlRocmVhZElz
Q3VycmVudCgpKTsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRl
eHQ+IHN0cm9uZ1RoaXModGhpcyk7CisgICAgU3RyaW5nQ2FwdHVyZSBjYXB0dXJlZExvY2FsaXpl
ZERldmljZU5hbWUobG9jYWxpemVkRGV2aWNlTmFtZSk7CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlz
cGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMsIHRoaXMsIGVuYWJsZWQsIHR5cGUs
IGNhcHR1cmVkTG9jYWxpemVkRGV2aWNlTmFtZV0geworICAgICAgICBpZiAobV9pbnRlcmZhY2Up
CisgICAgICAgICAgICBtX2ludGVyZmFjZS0+c2V0RXh0ZXJuYWxQbGF5YmFjayhlbmFibGVkLCB0
eXBlLCBjYXB0dXJlZExvY2FsaXplZERldmljZU5hbWUuc3RyaW5nKCkpOworICAgIH0pOworfQor
CisjcHJhZ21hIG1hcmsgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwKKwordm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cGxheSgpCit7CisgICAgQVNTRVJUKGlzVUlUaHJl
YWQoKSk7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0PiBz
dHJvbmdUaGlzKHRoaXMpOworICAgIFdlYlRocmVhZFJ1bihbc3Ryb25nVGhpcywgdGhpc10gewor
ICAgICAgICBpZiAobV9tb2RlbCkKKyAgICAgICAgICAgIG1fbW9kZWwtPnBsYXkoKTsKKyAgICB9
KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cGF1c2Uo
KQoreworICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBXZWJUaHJlYWRS
dW4oW3N0cm9uZ1RoaXMsIHRoaXNdIHsKKyAgICAgICAgaWYgKG1fbW9kZWwpCisgICAgICAgICAg
ICBtX21vZGVsLT5wYXVzZSgpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0Ojp0b2dnbGVQbGF5U3RhdGUoKQoreworICAgIEFTU0VSVChpc1VJ
VGhyZWFkKCkpOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4
dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oW3N0cm9uZ1RoaXMsIHRoaXNd
IHsKKyAgICAgICAgaWYgKG1fbW9kZWwpCisgICAgICAgICAgICBtX21vZGVsLT50b2dnbGVQbGF5
U3RhdGUoKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVy
Q29udGV4dDo6YmVnaW5TY3J1YmJpbmcoKQoreworICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwor
ICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhp
cyh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oW3N0cm9uZ1RoaXMsIHRoaXNdIHsKKyAgICAgICAg
aWYgKG1fbW9kZWwpCisgICAgICAgICAgICBtX21vZGVsLT5iZWdpblNjcnViYmluZygpOworICAg
IH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjplbmRT
Y3J1YmJpbmcoKQoreworICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOworICAgIFJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBX
ZWJUaHJlYWRSdW4oW3N0cm9uZ1RoaXMsIHRoaXNdIHsKKyAgICAgICAgaWYgKG1fbW9kZWwpCisg
ICAgICAgICAgICBtX21vZGVsLT5lbmRTY3J1YmJpbmcoKTsKKyAgICB9KTsKK30KKwordm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6c2Vla1RvVGltZShkb3VibGUgdGlt
ZSkKK3sKKyAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxs
c2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7CisgICAgV2ViVGhyZWFk
UnVuKFtzdHJvbmdUaGlzLCB0aGlzLCB0aW1lXSB7CisgICAgICAgIGlmIChtX21vZGVsKQorICAg
ICAgICAgICAgbV9tb2RlbC0+c2Vla1RvVGltZSh0aW1lKTsKKyAgICB9KTsKK30KKwordm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZmFzdFNlZWsoZG91YmxlIHRpbWUp
Cit7CisgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNj
cmVlbkNvbnRyb2xsZXJDb250ZXh0PiBzdHJvbmdUaGlzKHRoaXMpOworICAgIFdlYlRocmVhZFJ1
bihbc3Ryb25nVGhpcywgdGhpcywgdGltZV0geworICAgICAgICBpZiAobV9tb2RlbCkKKyAgICAg
ICAgICAgIG1fbW9kZWwtPmZhc3RTZWVrKHRpbWUpOworICAgIH0pOworfQorCit2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpiZWdpblNjYW5uaW5nRm9yd2FyZCgpCit7
CisgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0PiBzdHJvbmdUaGlzKHRoaXMpOworICAgIFdlYlRocmVhZFJ1bihb
c3Ryb25nVGhpcywgdGhpc10geworICAgICAgICBpZiAobV9tb2RlbCkKKyAgICAgICAgICAgIG1f
bW9kZWwtPmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpCit7
CisgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVl
bkNvbnRyb2xsZXJDb250ZXh0PiBzdHJvbmdUaGlzKHRoaXMpOworICAgIFdlYlRocmVhZFJ1bihb
c3Ryb25nVGhpcywgdGhpc10geworICAgICAgICBpZiAobV9tb2RlbCkKKyAgICAgICAgICAgIG1f
bW9kZWwtPmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpOworICAgIH0pOworfQorCit2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjplbmRTY2FubmluZygpCit7CisgICAgQVNT
RVJUKGlzVUlUaHJlYWQoKSk7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xs
ZXJDb250ZXh0PiBzdHJvbmdUaGlzKHRoaXMpOworICAgIFdlYlRocmVhZFJ1bihbc3Ryb25nVGhp
cywgdGhpc10geworICAgICAgICBpZiAobV9tb2RlbCkKKyAgICAgICAgICAgIG1fbW9kZWwtPmVu
ZFNjYW5uaW5nKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ6OnJlcXVlc3RFeGl0RnVsbHNjcmVlbigpCit7CisgICAgQVNTRVJUKGlzVUlU
aHJlYWQoKSk7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0
PiBzdHJvbmdUaGlzKHRoaXMpOworICAgIFdlYlRocmVhZFJ1bihbc3Ryb25nVGhpcywgdGhpc10g
eworICAgICAgICBpZiAobV9tb2RlbCkKKyAgICAgICAgICAgIG1fbW9kZWwtPnJlcXVlc3RFeGl0
RnVsbHNjcmVlbigpOworICAgIH0pOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJDb250ZXh0OjpzZXRWaWRlb0xheWVyRnJhbWUoRmxvYXRSZWN0IGZyYW1lKQoreworICAg
IEFTU0VSVChpc1VJVGhyZWFkKCkpOworICAgIG1fZnJhbWUgPSBmcmFtZTsKKyAgICBSZWZQdHI8
V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7Cisg
ICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzLCB0aGlzLCBmcmFtZV0geworICAgICAgICBpZiAo
bV9tb2RlbCkKKyAgICAgICAgICAgIG1fbW9kZWwtPnNldFZpZGVvTGF5ZXJGcmFtZShmcmFtZSk7
CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6
OnNldFZpZGVvTGF5ZXJHcmF2aXR5KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZp
dHkgdmlkZW9HcmF2aXR5KQoreworICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOworICAgIG1fZ3Jh
dml0eSA9IHZpZGVvR3Jhdml0eTsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckNvbnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdU
aGlzLCB0aGlzLCB2aWRlb0dyYXZpdHldIHsKKyAgICAgICAgaWYgKG1fbW9kZWwpCisgICAgICAg
ICAgICBtX21vZGVsLT5zZXRWaWRlb0xheWVyR3Jhdml0eSh2aWRlb0dyYXZpdHkpOworICAgIH0p
OworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpzZWxlY3RB
dWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KQoreworICAgIEFTU0VSVChpc1VJVGhyZWFk
KCkpOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dD4gc3Ry
b25nVGhpcyh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oW3N0cm9uZ1RoaXMsIHRoaXMsIGluZGV4
XSB7CisgICAgICAgIGlmIChtX21vZGVsKQorICAgICAgICAgICAgbV9tb2RlbC0+c2VsZWN0QXVk
aW9NZWRpYU9wdGlvbihpbmRleCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBp
bmRleCkKK3sKKyAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKKyAgICBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7CisgICAgV2ViVGhy
ZWFkUnVuKFtzdHJvbmdUaGlzLCB0aGlzLCBpbmRleF0geworICAgICAgICBpZiAobV9tb2RlbCkK
KyAgICAgICAgICAgIG1fbW9kZWwtPnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbihpbmRleCk7Cisg
ICAgfSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OmZ1
bGxzY3JlZW5Nb2RlQ2hhbmdlZChIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVl
bk1vZGUgbW9kZSkKK3sKKyAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKKyAgICBSZWZQdHI8V2Vi
VmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7CisgICAg
V2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzLCB0aGlzLCBtb2RlXSB7CisgICAgICAgIGlmIChtX21v
ZGVsKQorICAgICAgICAgICAgbV9tb2RlbC0+ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKG1vZGUpOwor
ICAgIH0pOworfQorCisjcHJhZ21hIG1hcmsgT3RoZXIKKwordm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQ29udGV4dDo6c2V0VXBGdWxsc2NyZWVuKEhUTUxWaWRlb0VsZW1lbnQmIHZp
ZGVvRWxlbWVudCwgVUlWaWV3ICp2aWV3LCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGUgbW9kZSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIFJl
dGFpblB0cjxVSVZpZXc+IHZpZXdSZWYgPSB2aWV3OworICAgIG1fdmlkZW9FbGVtZW50ID0gJnZp
ZGVvRWxlbWVudDsKKworICAgIG1faW50ZXJmYWNlID0gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OmNyZWF0ZSgpOworICAgIG1faW50ZXJmYWNlLT5zZXRXZWJWaWRlb0Z1bGxzY3Jl
ZW5DaGFuZ2VPYnNlcnZlcih0aGlzKTsKKyAgICBtX2ludGVyZmFjZS0+c2V0V2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWwodGhpcyk7CisgICAgCisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0PiBzdHJvbmdUaGlzKHRoaXMpOworICAgIFdlYlRocmVhZFJ1bihbc3Ry
b25nVGhpcywgdGhpcywgdmlld1JlZiwgbW9kZV0geworICAgICAgICBtX21vZGVsID0gV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmNyZWF0ZSgpOworICAgICAgICBtX21vZGVs
LT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UodGhpcyk7CisgICAgICAgIG1fbW9kZWwt
PnNldFZpZGVvRWxlbWVudChtX3ZpZGVvRWxlbWVudC5nZXQoKSk7CisgICAgICAgIG1fdmlkZW9G
dWxsc2NyZWVuTGF5ZXIgPSBbQ0FMYXllciBsYXllcl07CisgICAgICAgIAorICAgICAgICBib29s
IGFsbG93c0FsdGVybmF0ZUZ1bGxzY3JlZW4gPSBtX3ZpZGVvRWxlbWVudC0+bWVkaWFTZXNzaW9u
KCkuYWxsb3dzQWx0ZXJuYXRlRnVsbHNjcmVlbigqbV92aWRlb0VsZW1lbnQuZ2V0KCkpOworICAg
ICAgICBJbnRSZWN0IHZpZGVvRWxlbWVudENsaWVudFJlY3QgPSBtX3ZpZGVvRWxlbWVudC0+Y2xp
ZW50UmVjdCgpOworICAgICAgICAKKyAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0
X21haW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMsIHRoaXMsIHZpZGVvRWxlbWVudENsaWVudFJlY3Qs
IHZpZXdSZWYsIG1vZGUsIGFsbG93c0FsdGVybmF0ZUZ1bGxzY3JlZW5dIHsKKyAgICAgICAgICAg
IG1faW50ZXJmYWNlLT5zZXR1cEZ1bGxzY3JlZW4oKm1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIuZ2V0
KCksIHZpZGVvRWxlbWVudENsaWVudFJlY3QsIHZpZXdSZWYuZ2V0KCksIG1vZGUsIGFsbG93c0Fs
dGVybmF0ZUZ1bGxzY3JlZW4pOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6ZXhpdEZ1bGxzY3JlZW4oKQoreworICAg
IEFTU0VSVChXZWJUaHJlYWRJc0N1cnJlbnQoKSk7CisgICAgSW50UmVjdCBzY3JlZW5SZWN0ID0g
bV92aWRlb0VsZW1lbnQtPnNjcmVlblJlY3QoKTsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuQ29udHJvbGxlckNvbnRleHQ+IHN0cm9uZ1RoaXModGhpcyk7CisgICAgZGlzcGF0Y2hfYXN5
bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMsIHRoaXMsIHNjcmVlblJl
Y3RdIHsKKyAgICAgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CisgICAgICAgIG1faW50ZXJmYWNl
LT5leGl0RnVsbHNjcmVlbihzY3JlZW5SZWN0KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5Db250cm9sbGVyQ29udGV4dDo6cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVl
bigpCit7CisgICAgQVNTRVJUKGlzVUlUaHJlYWQoKSk7CisgICAgbV9pbnRlcmZhY2UtPnJlcXVl
c3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKTsKK30KKworQGltcGxlbWVudGF0aW9uIFdlYlZpZGVv
RnVsbHNjcmVlbkNvbnRyb2xsZXIgeworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Db250
cm9sbGVyQ29udGV4dD4gX2NvbnRleHQ7CiAgICAgUmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+IF92
aWRlb0VsZW1lbnQ7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
PiBfaW50ZXJmYWNlOwotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudD4gX21vZGVsOwotICAgIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDaGFuZ2VPYnNl
cnZlciBfY2hhbmdlT2JzZXJ2ZXI7Ci0gICAgUmV0YWluUHRyPFBsYXRmb3JtTGF5ZXI+IF92aWRl
b0Z1bGxzY3JlZW5MYXllcjsKIH0KIAogLSAoaW5zdGFuY2V0eXBlKWluaXQKQEAgLTEwMSwxNyAr
NTU0LDkgQEAgcHVibGljOgogICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQogICAgICAg
ICByZXR1cm4gbmlsOwogICAgIAotICAgIF9jaGFuZ2VPYnNlcnZlci5zZXRUYXJnZXQoc2VsZik7
Ci0KICAgICByZXR1cm4gc2VsZjsKIH0KIAotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgX3ZpZGVv
RWxlbWVudCA9IG51bGxwdHI7Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCiAtICh2b2lkKXNl
dFZpZGVvRWxlbWVudDooSFRNTFZpZGVvRWxlbWVudCopdmlkZW9FbGVtZW50CiB7CiAgICAgX3Zp
ZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDsKQEAgLTEyNCw2NyArNTY5LDMzIEBAIHB1YmxpYzoK
IAogLSAodm9pZCllbnRlckZ1bGxzY3JlZW46KFVJVmlldyAqKXZpZXcgbW9kZTooSFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKW1vZGUKIHsKLSAgICBbc2VsZiByZXRh
aW5dOyAvLyBCYWxhbmNlZCBieSAtcmVsZWFzZSBpbiBkaWRFeGl0RnVsbHNjcmVlbjoKLSAgICAK
LSAgICBfaW50ZXJmYWNlID0gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmNyZWF0
ZSgpOwotICAgIF9pbnRlcmZhY2UtPnNldFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
KCZfY2hhbmdlT2JzZXJ2ZXIpOwotICAgIF9tb2RlbCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50OjpjcmVhdGUoKTsKLSAgICBfbW9kZWwtPnNldFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZShfaW50ZXJmYWNlLmdldCgpKTsKLSAgICBfaW50ZXJmYWNlLT5zZXRXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbChfbW9kZWwuZ2V0KCkpOwotICAgIF9tb2RlbC0+c2V0VmlkZW9FbGVt
ZW50KF92aWRlb0VsZW1lbnQuZ2V0KCkpOwotICAgIF92aWRlb0Z1bGxzY3JlZW5MYXllciA9IFtD
QUxheWVyIGxheWVyXTsKLSAgICBfaW50ZXJmYWNlLT5zZXR1cEZ1bGxzY3JlZW4oKl92aWRlb0Z1
bGxzY3JlZW5MYXllci5nZXQoKSwgX3ZpZGVvRWxlbWVudC0+Y2xpZW50UmVjdCgpLCB2aWV3LCBt
b2RlLCBfdmlkZW9FbGVtZW50LT5tZWRpYVNlc3Npb24oKS5hbGxvd3NBbHRlcm5hdGVGdWxsc2Ny
ZWVuKCpfdmlkZW9FbGVtZW50LmdldCgpKSk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KyAgICBfY29udGV4dCA9IFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJDb250ZXh0OjpjcmVh
dGUoKTsKKyAgICBfY29udGV4dC0+c2V0Q29udHJvbGxlcihzZWxmKTsKKyAgICBfY29udGV4dC0+
c2V0VXBGdWxsc2NyZWVuKCpfdmlkZW9FbGVtZW50LmdldCgpLCB2aWV3LCBtb2RlKTsKIH0KIAog
LSAodm9pZClleGl0RnVsbHNjcmVlbgogewotICAgIF9pbnRlcmZhY2UtPmV4aXRGdWxsc2NyZWVu
KF92aWRlb0VsZW1lbnQtPnNjcmVlblJlY3QoKSk7CisgICAgQVNTRVJUKFdlYlRocmVhZElzQ3Vy
cmVudCgpKTsKKyAgICBfY29udGV4dC0+ZXhpdEZ1bGxzY3JlZW4oKTsKIH0KIAogLSAodm9pZCly
ZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuCiB7Ci0gICAgaWYgKF9pbnRlcmZhY2UpCi0gICAg
ICAgIF9pbnRlcmZhY2UtPnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKTsKKyAgICBBU1NF
UlQoaXNVSVRocmVhZCgpKTsKKyAgICBpZiAoX2NvbnRleHQpCisgICAgICAgIF9jb250ZXh0LT5y
ZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCk7CiB9CiAKLS0gKHZvaWQpZGlkU2V0dXBGdWxs
c2NyZWVuCistICh2b2lkKWRpZEZpbmlzaEZ1bGxzY3JlZW46KFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXJDb250ZXh0Kiljb250ZXh0CiB7Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAg
IF9tb2RlbC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIoX3ZpZGVvRnVsbHNjcmVlbkxheWVyLmdl
dCgpKTsKLSAgICAgICAgX2ludGVyZmFjZS0+ZW50ZXJGdWxsc2NyZWVuKCk7Ci0gICAgfSk7Ci19
Ci0KLS0gKHZvaWQpZGlkRW50ZXJGdWxsc2NyZWVuCi17Ci19Ci0KLS0gKHZvaWQpZGlkRXhpdEZ1
bGxzY3JlZW4KLXsKLSAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgX21vZGVsLT5zZXRWaWRl
b0Z1bGxzY3JlZW5MYXllcihuaWwpOwotICAgICAgICBfaW50ZXJmYWNlLT5jbGVhbnVwRnVsbHNj
cmVlbigpOwotICAgIH0pOwotfQotCi0tICh2b2lkKWRpZENsZWFudXBGdWxsc2NyZWVuCi17Ci0g
ICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIF9tb2RlbC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5
ZXIobmlsKTsKLSAgICAgICAgX2ludGVyZmFjZS0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwo
bnVsbHB0cik7Ci0gICAgICAgIF9tb2RlbC0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
KG51bGxwdHIpOwotICAgICAgICBfbW9kZWwtPnNldFZpZGVvRWxlbWVudChudWxscHRyKTsKLSAg
ICAgICAgX2ludGVyZmFjZS0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIobnVs
bHB0cik7Ci0gICAgICAgIF9tb2RlbCA9IG51bGxwdHI7Ci0gICAgICAgIF9pbnRlcmZhY2UgPSBu
dWxscHRyOwotICAgICAgICAKLSAgICAgICAgW3NlbGYgcmVsZWFzZV07IC8vIEJhbGFuY2UgdGhl
IC1yZXRhaW4gd2UgZGlkIGluIGVudGVyRnVsbHNjcmVlbjoKLSAgICB9KTsKLX0KLQotLSAodm9p
ZClmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUKLXsKLSAgICBfaW50ZXJmYWNlLT5wcmVwYXJl
ZFRvUmV0dXJuVG9JbmxpbmUodHJ1ZSwgX3ZpZGVvRWxlbWVudC0+Y2xpZW50UmVjdCgpKTsKKyAg
ICBBU1NFUlQoV2ViVGhyZWFkSXNDdXJyZW50KCkpOworICAgIEFTU0VSVF9VTlVTRUQoY29udGV4
dCwgY29udGV4dCA9PSBfY29udGV4dCk7CisgICAgW1tzZWxmIHJldGFpbl0gYXV0b3JlbGVhc2Vd
OyAvLyByZXRhaW4gc2VsZiBiZWZvcmUgYnJlYWtpbmcgYSByZXRhaW4gY3ljbGUuCisgICAgX2Nv
bnRleHQtPnNldENvbnRyb2xsZXIobmlsKTsKKyAgICBfY29udGV4dCA9IG51bGxwdHI7CisgICAg
X3ZpZGVvRWxlbWVudCA9IG51bGxwdHI7CiB9CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0LmgKaW5kZXggYmQwYzcyZGQ0ZTEyNWQxN2UxNTlmNGI3NmY5OWViOTM3ZTQ5ZDhlZS4uMWQw
ZmE1NTI0NTI0ZDlmZTFmZjAzZDg3ZDhlY2Y5Y2I2ODcxZjZhZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0LmgKQEAgLTM1LDkgKzM1LDkgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1dlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZS5oPgogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8
b2JqYy9vYmpjLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJl
YWRTYWZlUmVmQ291bnRlZC5oPgogCiBPQkpDX0NMQVNTIFdlYkFWUGxheWVyQ29udHJvbGxlcjsK
IE9CSkNfQ0xBU1MgQVZQbGF5ZXJWaWV3Q29udHJvbGxlcjsKQEAgLTY4LDcgKzY4LDcgQEAgcHVi
bGljOgogCiBjbGFzcyBXRUJDT1JFX0VYUE9SVCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdAogICAgIDogcHVibGljIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZQotICAgICwgcHVi
bGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
PiB7CisgICAgLCBwdWJsaWMgUmVmQ291bnRlZDxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdD4gewogCiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdD4gY3JlYXRlKCkKQEAgLTEyMCwxMSArMTIwLDggQEAgcHVibGljOgogcHJvdGVj
dGVkOgogICAgIFdFQkNPUkVfRVhQT1JUIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
KCk7CiAgICAgdm9pZCBiZWdpblNlc3Npb24oKTsKLSAgICB2b2lkIHNldHVwRnVsbHNjcmVlbklu
dGVybmFsKFBsYXRmb3JtTGF5ZXImLCBjb25zdCBJbnRSZWN0JiBpbml0aWFsUmVjdCwgVUlWaWV3
ICosIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBhbGxv
d09wdGltaXplZEZ1bGxzY3JlZW4pOwogICAgIHZvaWQgZW50ZXJGdWxsc2NyZWVuT3B0aW1pemVk
KCk7CiAgICAgdm9pZCBlbnRlckZ1bGxzY3JlZW5TdGFuZGFyZCgpOwotICAgIHZvaWQgZXhpdEZ1
bGxzY3JlZW5JbnRlcm5hbChjb25zdCBJbnRSZWN0JiBmaW5hbFJlY3QpOwotICAgIHZvaWQgY2xl
YW51cEZ1bGxzY3JlZW5JbnRlcm5hbCgpOwogCiAgICAgUmV0YWluUHRyPFdlYkFWUGxheWVyQ29u
dHJvbGxlcj4gbV9wbGF5ZXJDb250cm9sbGVyOwogICAgIFJldGFpblB0cjxBVlBsYXllclZpZXdD
b250cm9sbGVyPiBtX3BsYXllclZpZXdDb250cm9sbGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0Lm1tCmluZGV4IDhkYTZlY2FiN2QyMWZmZDk4OTBkYjRkYWZjZjQxZTllNWNlOWIxMGMuLmM0
YTQ5N2Y1NmJlODM5OWQ0NzE2MGM0NDAwNTNjMDM3Zjc4ZDE0OGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQubW0KQEAgLTM2LDcgKzM2LDYgQEAKICNpbXBvcnQgIlJ1bnRpbWVBcHBsaWNh
dGlvbkNoZWNrc0lPUy5oIgogI2ltcG9ydCAiVGltZVJhbmdlcy5oIgogI2ltcG9ydCAiV2ViQ29y
ZVN5c3RlbUludGVyZmFjZS5oIgotI2ltcG9ydCAiV2ViQ29yZVRocmVhZFJ1bi5oIgogI2ltcG9y
dCAiV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwuaCIKICNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVlRp
bWUuaD4KICNpbXBvcnQgPFVJS2l0L1VJS2l0Lmg+CkBAIC03NDQsMTcgKzc0MywxMyBAQCBXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQoKQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpyZXNldE1l
ZGlhU3RhdGUoKQogewotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dD4gc3Ryb25nVGhpcyh0aGlzKTsKLSAgICAKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9n
ZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpc10gewotICAgICAgICBpZiAoIXN0cm9uZ1RoaXMt
Pm1fcGxheWVyQ29udHJvbGxlcikgewotICAgICAgICAgICAgc3Ryb25nVGhpcy0+bV9wbGF5ZXJD
b250cm9sbGVyID0gYWRvcHROUyhbW1dlYkFWUGxheWVyQ29udHJvbGxlciBhbGxvY10gaW5pdF0p
OwotICAgICAgICAgICAgW3N0cm9uZ1RoaXMtPm1fcGxheWVyQ29udHJvbGxlciBzZXREZWxlZ2F0
ZTpzdHJvbmdUaGlzLT5tX3ZpZGVvRnVsbHNjcmVlbk1vZGVsXTsKLSAgICAgICAgICAgIFtzdHJv
bmdUaGlzLT5tX3BsYXllckNvbnRyb2xsZXIgc2V0RnVsbHNjcmVlbkludGVyZmFjZTpzdHJvbmdU
aGlzLmdldCgpXTsKLSAgICAgICAgICAgIAotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIFtz
dHJvbmdUaGlzLT5tX3BsYXllckNvbnRyb2xsZXIgcmVzZXRTdGF0ZV07Ci0gICAgfSk7CisgICAg
aWYgKCFtX3BsYXllckNvbnRyb2xsZXIpIHsKKyAgICAgICAgbV9wbGF5ZXJDb250cm9sbGVyID0g
YWRvcHROUyhbW1dlYkFWUGxheWVyQ29udHJvbGxlciBhbGxvY10gaW5pdF0pOworICAgICAgICBb
bV9wbGF5ZXJDb250cm9sbGVyIHNldERlbGVnYXRlOm1fdmlkZW9GdWxsc2NyZWVuTW9kZWxdOwor
ICAgICAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldEZ1bGxzY3JlZW5JbnRlcmZhY2U6dGhpc107
CisgICAgICAgIAorICAgIH0gZWxzZQorICAgICAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHJlc2V0
U3RhdGVdOwogfQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCogbW9kZWwpCkBA
IC03NzAsNzIgKzc2NSw1MiBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
OjpzZXRXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcihXZWJWaQogCiB2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXREdXJhdGlvbihkb3VibGUgZHVyYXRpb24p
CiB7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdU
aGlzKHRoaXMpOwotICAgIAotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1
ZXVlKCksIFtzdHJvbmdUaGlzLCBkdXJhdGlvbl0gewotICAgICAgICBXZWJBVlBsYXllckNvbnRy
b2xsZXIqIHBsYXllckNvbnRyb2xsZXIgPSBzdHJvbmdUaGlzLT5tX3BsYXllckNvbnRyb2xsZXIu
Z2V0KCk7CisgICAgV2ViQVZQbGF5ZXJDb250cm9sbGVyKiBwbGF5ZXJDb250cm9sbGVyID0gbV9w
bGF5ZXJDb250cm9sbGVyLmdldCgpOwogCi0gICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3MDE3IHVzZSBjb3JyZWN0IHZhbHVlcyBpbnN0
ZWFkIG9mIGR1cmF0aW9uIGZvciBhbGwgdGhlc2UKLSAgICAgICAgcGxheWVyQ29udHJvbGxlci5j
b250ZW50RHVyYXRpb24gPSBkdXJhdGlvbjsKLSAgICAgICAgcGxheWVyQ29udHJvbGxlci5tYXhU
aW1lID0gZHVyYXRpb247Ci0gICAgICAgIHBsYXllckNvbnRyb2xsZXIuY29udGVudER1cmF0aW9u
V2l0aGluRW5kVGltZXMgPSBkdXJhdGlvbjsKKyAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzAxNyB1c2UgY29ycmVjdCB2YWx1ZXMgaW5zdGVh
ZCBvZiBkdXJhdGlvbiBmb3IgYWxsIHRoZXNlCisgICAgcGxheWVyQ29udHJvbGxlci5jb250ZW50
RHVyYXRpb24gPSBkdXJhdGlvbjsKKyAgICBwbGF5ZXJDb250cm9sbGVyLm1heFRpbWUgPSBkdXJh
dGlvbjsKKyAgICBwbGF5ZXJDb250cm9sbGVyLmNvbnRlbnREdXJhdGlvbldpdGhpbkVuZFRpbWVz
ID0gZHVyYXRpb247CiAKLSAgICAgICAgLy8gRklYTUU6IHdlIHRha2UgdGhpcyBhcyBhbiBpbmRp
Y2F0aW9uIHRoYXQgcGxheWJhY2sgaXMgcmVhZHkuCi0gICAgICAgIHBsYXllckNvbnRyb2xsZXIu
Y2FuUGxheSA9IFlFUzsKLSAgICAgICAgcGxheWVyQ29udHJvbGxlci5jYW5QYXVzZSA9IFlFUzsK
LSAgICAgICAgcGxheWVyQ29udHJvbGxlci5jYW5Ub2dnbGVQbGF5YmFjayA9IFlFUzsKLSAgICAg
ICAgcGxheWVyQ29udHJvbGxlci5oYXNFbmFibGVkQXVkaW8gPSBZRVM7Ci0gICAgICAgIHBsYXll
ckNvbnRyb2xsZXIuY2FuU2VlayA9IFlFUzsKLSAgICAgICAgcGxheWVyQ29udHJvbGxlci5taW5U
aW1lID0gMDsKLSAgICAgICAgcGxheWVyQ29udHJvbGxlci5zdGF0dXMgPSBBVlBsYXllckNvbnRy
b2xsZXJTdGF0dXNSZWFkeVRvUGxheTsKLSAgICB9KTsKKyAgICAvLyBGSVhNRTogd2UgdGFrZSB0
aGlzIGFzIGFuIGluZGljYXRpb24gdGhhdCBwbGF5YmFjayBpcyByZWFkeS4KKyAgICBwbGF5ZXJD
b250cm9sbGVyLmNhblBsYXkgPSBZRVM7CisgICAgcGxheWVyQ29udHJvbGxlci5jYW5QYXVzZSA9
IFlFUzsKKyAgICBwbGF5ZXJDb250cm9sbGVyLmNhblRvZ2dsZVBsYXliYWNrID0gWUVTOworICAg
IHBsYXllckNvbnRyb2xsZXIuaGFzRW5hYmxlZEF1ZGlvID0gWUVTOworICAgIHBsYXllckNvbnRy
b2xsZXIuY2FuU2VlayA9IFlFUzsKKyAgICBwbGF5ZXJDb250cm9sbGVyLm1pblRpbWUgPSAwOwor
ICAgIHBsYXllckNvbnRyb2xsZXIuc3RhdHVzID0gQVZQbGF5ZXJDb250cm9sbGVyU3RhdHVzUmVh
ZHlUb1BsYXk7CiB9CiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNl
dEN1cnJlbnRUaW1lKGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpCiB7Ci0g
ICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRo
aXMpOwotICAgIAotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCks
IFtzdHJvbmdUaGlzLCBjdXJyZW50VGltZSwgYW5jaG9yVGltZV0gewotICAgICAgICBOU1RpbWVJ
bnRlcnZhbCBhbmNob3JUaW1lU3RhbXAgPSAhW3N0cm9uZ1RoaXMtPm1fcGxheWVyQ29udHJvbGxl
ciByYXRlXSA/IE5BTiA6IGFuY2hvclRpbWU7Ci0gICAgICAgIEFWVmFsdWVUaW1pbmcgKnRpbWlu
ZyA9IFtnZXRBVlZhbHVlVGltaW5nQ2xhc3MoKSB2YWx1ZVRpbWluZ1dpdGhBbmNob3JWYWx1ZTpj
dXJyZW50VGltZQotICAgICAgICAgICAgYW5jaG9yVGltZVN0YW1wOmFuY2hvclRpbWVTdGFtcCBy
YXRlOjBdOwotICAgICAgICBbc3Ryb25nVGhpcy0+bV9wbGF5ZXJDb250cm9sbGVyIHNldFRpbWlu
Zzp0aW1pbmddOwotICAgIH0pOworICAgIE5TVGltZUludGVydmFsIGFuY2hvclRpbWVTdGFtcCA9
ICFbbV9wbGF5ZXJDb250cm9sbGVyIHJhdGVdID8gTkFOIDogYW5jaG9yVGltZTsKKyAgICBBVlZh
bHVlVGltaW5nICp0aW1pbmcgPSBbZ2V0QVZWYWx1ZVRpbWluZ0NsYXNzKCkgdmFsdWVUaW1pbmdX
aXRoQW5jaG9yVmFsdWU6Y3VycmVudFRpbWUKKyAgICAgICAgYW5jaG9yVGltZVN0YW1wOmFuY2hv
clRpbWVTdGFtcCByYXRlOjBdOworICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0VGltaW5nOnRp
bWluZ107CiB9CiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldEJ1
ZmZlcmVkVGltZShkb3VibGUgYnVmZmVyZWRUaW1lKQogewotICAgIFJlZlB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlzKTsKLQotICAgIGRpc3BhdGNo
X2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCBidWZmZXJlZFRp
bWVdIHsKLSAgICAgICAgV2ViQVZQbGF5ZXJDb250cm9sbGVyKiBwbGF5ZXJDb250cm9sbGVyID0g
c3Ryb25nVGhpcy0+bV9wbGF5ZXJDb250cm9sbGVyLmdldCgpOwotICAgICAgICBkb3VibGUgZHVy
YXRpb24gPSBwbGF5ZXJDb250cm9sbGVyLmNvbnRlbnREdXJhdGlvbjsKLSAgICAgICAgZG91Ymxl
IG5vcm1hbGl6ZWRCdWZmZXJlZFRpbWU7Ci0gICAgICAgIGlmICghZHVyYXRpb24pCi0gICAgICAg
ICAgICBub3JtYWxpemVkQnVmZmVyZWRUaW1lID0gMDsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgbm9ybWFsaXplZEJ1ZmZlcmVkVGltZSA9IGJ1ZmZlcmVkVGltZSAvIGR1cmF0aW9uOwotICAg
ICAgICBwbGF5ZXJDb250cm9sbGVyLmxvYWRlZFRpbWVSYW5nZXMgPSBAW0AwLCBAKG5vcm1hbGl6
ZWRCdWZmZXJlZFRpbWUpXTsKLSAgICB9KTsKKyAgICBXZWJBVlBsYXllckNvbnRyb2xsZXIqIHBs
YXllckNvbnRyb2xsZXIgPSBtX3BsYXllckNvbnRyb2xsZXIuZ2V0KCk7CisgICAgZG91YmxlIGR1
cmF0aW9uID0gcGxheWVyQ29udHJvbGxlci5jb250ZW50RHVyYXRpb247CisgICAgZG91YmxlIG5v
cm1hbGl6ZWRCdWZmZXJlZFRpbWU7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgbm9ybWFs
aXplZEJ1ZmZlcmVkVGltZSA9IDA7CisgICAgZWxzZQorICAgICAgICBub3JtYWxpemVkQnVmZmVy
ZWRUaW1lID0gYnVmZmVyZWRUaW1lIC8gZHVyYXRpb247CisgICAgcGxheWVyQ29udHJvbGxlci5s
b2FkZWRUaW1lUmFuZ2VzID0gQFtAMCwgQChub3JtYWxpemVkQnVmZmVyZWRUaW1lKV07CiB9CiAK
IHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFJhdGUoYm9vbCBpc1Bs
YXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKIHsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ+IHN0cm9uZ1RoaXModGhpcyk7Ci0gICAgCi0gICAgZGlzcGF0Y2hf
YXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9uZ1RoaXMsIGlzUGxheWluZywg
cGxheWJhY2tSYXRlXSB7Ci0gICAgICAgIFtzdHJvbmdUaGlzLT5tX3BsYXllckNvbnRyb2xsZXIg
c2V0UmF0ZTppc1BsYXlpbmcgPyBwbGF5YmFja1JhdGUgOiAwLl07Ci0gICAgfSk7CisgICAgW21f
cGxheWVyQ29udHJvbGxlciBzZXRSYXRlOmlzUGxheWluZyA/IHBsYXliYWNrUmF0ZSA6IDAuXTsK
IH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0VmlkZW9EaW1l
bnNpb25zKGJvb2wgaGFzVmlkZW8sIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpCiB7Ci0gICAg
UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMp
OwotICAgIAotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtz
dHJvbmdUaGlzLCBoYXNWaWRlbywgd2lkdGgsIGhlaWdodF0gewotICAgICAgICBbc3Ryb25nVGhp
cy0+bV9wbGF5ZXJDb250cm9sbGVyIHNldEhhc0VuYWJsZWRWaWRlbzpoYXNWaWRlb107Ci0gICAg
ICAgIFtzdHJvbmdUaGlzLT5tX3BsYXllckNvbnRyb2xsZXIgc2V0Q29udGVudERpbWVuc2lvbnM6
Q0dTaXplTWFrZSh3aWR0aCwgaGVpZ2h0KV07Ci0gICAgfSk7CisgICAgW21fcGxheWVyQ29udHJv
bGxlciBzZXRIYXNFbmFibGVkVmlkZW86aGFzVmlkZW9dOworICAgIFttX3BsYXllckNvbnRyb2xs
ZXIgc2V0Q29udGVudERpbWVuc2lvbnM6Q0dTaXplTWFrZSh3aWR0aCwgaGVpZ2h0KV07CiB9CiAK
IHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldFNlZWthYmxlUmFuZ2Vz
KGNvbnN0IFRpbWVSYW5nZXMmIHRpbWVSYW5nZXMpCkBAIC04NTEsMjAgKzgyNiwxMiBAQCB2b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRTZWVrYWJsZVJhbmdlcyhjb25z
dCBUaW1lUmFuZ2VzJiB0aW1lUgogICAgICAgICBbc2Vla2FibGVSYW5nZXMgYWRkT2JqZWN0OltO
U1ZhbHVlIHZhbHVlV2l0aENNVGltZVJhbmdlOnJhbmdlXV07CiAgICAgfQogICAgIAotICAgIFJl
ZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlzKTsK
LSAgICAKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ry
b25nVGhpcywgc2Vla2FibGVSYW5nZXNdIHsKLSAgICAgICAgW3N0cm9uZ1RoaXMtPm1fcGxheWVy
Q29udHJvbGxlciBzZXRTZWVrYWJsZVRpbWVSYW5nZXM6c2Vla2FibGVSYW5nZXMuZ2V0KCldOwot
ICAgIH0pOworICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0U2Vla2FibGVUaW1lUmFuZ2VzOnNl
ZWthYmxlUmFuZ2VzLmdldCgpXTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6c2V0Q2FuUGxheUZhc3RSZXZlcnNlKGJvb2wgY2FuUGxheUZhc3RSZXZlcnNlKQog
ewotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhp
cyh0aGlzKTsKLSAgICAKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1
ZSgpLCBbc3Ryb25nVGhpcywgY2FuUGxheUZhc3RSZXZlcnNlXSB7Ci0gICAgICAgIFtzdHJvbmdU
aGlzLT5tX3BsYXllckNvbnRyb2xsZXIgc2V0Q2FuU2NhbkJhY2t3YXJkOmNhblBsYXlGYXN0UmV2
ZXJzZV07Ci0gICAgfSk7CisgICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRDYW5TY2FuQmFja3dh
cmQ6Y2FuUGxheUZhc3RSZXZlcnNlXTsKIH0KIAogc3RhdGljIFJldGFpblB0cjxOU011dGFibGVB
cnJheT4gbWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvcHRpb25z
KQpAQCAtODgxLDI1ICs4NDgsMTcgQEAgc3RhdGljIFJldGFpblB0cjxOU011dGFibGVBcnJheT4g
bWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvcHQKIHZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRp
b25zKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4
KQogewogICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gd2ViT3B0aW9ucyA9IG1lZGlhU2Vs
ZWN0aW9uT3B0aW9ucyhvcHRpb25zKTsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ+IHN0cm9uZ1RoaXModGhpcyk7Ci0gICAgCi0gICAgZGlzcGF0Y2hfYXN5bmMo
ZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3dlYk9wdGlvbnMsIHN0cm9uZ1RoaXMsIHNlbGVj
dGVkSW5kZXhdIHsKLSAgICAgICAgW3N0cm9uZ1RoaXMtPm1fcGxheWVyQ29udHJvbGxlciBzZXRB
dWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uczp3ZWJPcHRpb25zLmdldCgpXTsKLSAgICAgICAgaWYg
KHNlbGVjdGVkSW5kZXggPCBbd2ViT3B0aW9ucyBjb3VudF0pCi0gICAgICAgICAgICBbc3Ryb25n
VGhpcy0+bV9wbGF5ZXJDb250cm9sbGVyIHNldEN1cnJlbnRBdWRpb01lZGlhU2VsZWN0aW9uT3B0
aW9uOlt3ZWJPcHRpb25zIG9iamVjdEF0SW5kZXg6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oc2Vs
ZWN0ZWRJbmRleCldXTsKLSAgICB9KTsKKyAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldEF1ZGlv
TWVkaWFTZWxlY3Rpb25PcHRpb25zOndlYk9wdGlvbnMuZ2V0KCldOworICAgIGlmIChzZWxlY3Rl
ZEluZGV4IDwgW3dlYk9wdGlvbnMgY291bnRdKQorICAgICAgICBbbV9wbGF5ZXJDb250cm9sbGVy
IHNldEN1cnJlbnRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uOlt3ZWJPcHRpb25zIG9iamVjdEF0
SW5kZXg6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oc2VsZWN0ZWRJbmRleCldXTsKIH0KIAogdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6c2V0TGVnaWJsZU1lZGlhU2VsZWN0
aW9uT3B0aW9ucyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0
ZWRJbmRleCkKIHsKICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHdlYk9wdGlvbnMgPSBt
ZWRpYVNlbGVjdGlvbk9wdGlvbnMob3B0aW9ucyk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOwotCi0gICAgZGlzcGF0Y2hfYXN5
bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3dlYk9wdGlvbnMsIHN0cm9uZ1RoaXMsIHNl
bGVjdGVkSW5kZXhdIHsKLSAgICAgICAgW3N0cm9uZ1RoaXMtPm1fcGxheWVyQ29udHJvbGxlciBz
ZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zOndlYk9wdGlvbnMuZ2V0KCldOwotICAgICAg
ICBpZiAoc2VsZWN0ZWRJbmRleCA8IFt3ZWJPcHRpb25zIGNvdW50XSkKLSAgICAgICAgICAgIFtz
dHJvbmdUaGlzLT5tX3BsYXllckNvbnRyb2xsZXIgc2V0Q3VycmVudExlZ2libGVNZWRpYVNlbGVj
dGlvbk9wdGlvbjpbd2ViT3B0aW9ucyBvYmplY3RBdEluZGV4OnN0YXRpY19jYXN0PE5TVUludGVn
ZXI+KHNlbGVjdGVkSW5kZXgpXV07Ci0gICAgfSk7CisgICAgW21fcGxheWVyQ29udHJvbGxlciBz
ZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zOndlYk9wdGlvbnMuZ2V0KCldOworICAgIGlm
IChzZWxlY3RlZEluZGV4IDwgW3dlYk9wdGlvbnMgY291bnRdKQorICAgICAgICBbbV9wbGF5ZXJD
b250cm9sbGVyIHNldEN1cnJlbnRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb246W3dlYk9wdGlv
bnMgb2JqZWN0QXRJbmRleDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihzZWxlY3RlZEluZGV4KV1d
OwogfQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRFeHRlcm5h
bFBsYXliYWNrKGJvb2wgZW5hYmxlZCwgRXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdGFyZ2V0
VHlwZSwgU3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUpCkBAIC05MTAsNDEgKzg2OSwyNCBAQCB2
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXRFeHRlcm5hbFBsYXliYWNr
KGJvb2wgZW5hYmxlZCwgRXh0ZXJuYQogICAgIGVsc2UgaWYgKHRhcmdldFR5cGUgPT0gVGFyZ2V0
VHlwZVRWT3V0KQogICAgICAgICBleHRlcm5hbFBsYXliYWNrVHlwZSA9IEFWUGxheWVyQ29udHJv
bGxlckV4dGVybmFsUGxheWJhY2tUeXBlVFZPdXQ7CiAKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHN0cm9uZ1RoaXModGhpcyk7Ci0KLSAgICBkaXNwYXRjaF9h
c3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpcywgZW5hYmxlZCwgbG9j
YWxpemVkRGV2aWNlTmFtZSwgZXh0ZXJuYWxQbGF5YmFja1R5cGVdIHsKLSAgICAgICAgV2ViQVZQ
bGF5ZXJDb250cm9sbGVyKiBwbGF5ZXJDb250cm9sbGVyID0gc3Ryb25nVGhpcy0+bV9wbGF5ZXJD
b250cm9sbGVyLmdldCgpOwotICAgICAgICBwbGF5ZXJDb250cm9sbGVyLmV4dGVybmFsUGxheWJh
Y2tBaXJQbGF5RGV2aWNlTG9jYWxpemVkTmFtZSA9IGxvY2FsaXplZERldmljZU5hbWU7Ci0gICAg
ICAgIHBsYXllckNvbnRyb2xsZXIuZXh0ZXJuYWxQbGF5YmFja1R5cGUgPSBleHRlcm5hbFBsYXli
YWNrVHlwZTsKLSAgICAgICAgcGxheWVyQ29udHJvbGxlci5leHRlcm5hbFBsYXliYWNrQWN0aXZl
ID0gZW5hYmxlZDsKLSAgICAgICAgW3N0cm9uZ1RoaXMtPm1fdmlkZW9MYXllckNvbnRhaW5lci5n
ZXQoKSBzZXRIaWRkZW46ZW5hYmxlZF07Ci0gICAgfSk7CisgICAgV2ViQVZQbGF5ZXJDb250cm9s
bGVyKiBwbGF5ZXJDb250cm9sbGVyID0gbV9wbGF5ZXJDb250cm9sbGVyLmdldCgpOworICAgIHBs
YXllckNvbnRyb2xsZXIuZXh0ZXJuYWxQbGF5YmFja0FpclBsYXlEZXZpY2VMb2NhbGl6ZWROYW1l
ID0gbG9jYWxpemVkRGV2aWNlTmFtZTsKKyAgICBwbGF5ZXJDb250cm9sbGVyLmV4dGVybmFsUGxh
eWJhY2tUeXBlID0gZXh0ZXJuYWxQbGF5YmFja1R5cGU7CisgICAgcGxheWVyQ29udHJvbGxlci5l
eHRlcm5hbFBsYXliYWNrQWN0aXZlID0gZW5hYmxlZDsKKyAgICBbbV92aWRlb0xheWVyQ29udGFp
bmVyLmdldCgpIHNldEhpZGRlbjplbmFibGVkXTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdDo6c2V0dXBGdWxsc2NyZWVuKFBsYXRmb3JtTGF5ZXImIHZpZGVvTGF5
ZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGluaXRpYWxSZWN0LCBVSVZpZXcqIHBhcmVudFZp
ZXcsIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlLCBib29s
IGFsbG93T3B0aW1pemVkRnVsbHNjcmVlbikKIHsKLSAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ+IHN0cm9uZ1RoaXModGhpcyk7Ci0KICAgICBBU1NFUlQobW9kZSAh
PSBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKLSAgICBt
X3ZpZGVvTGF5ZXIgPSAmdmlkZW9MYXllcjsKLQotICAgIG1fbW9kZSA9IG1vZGU7Ci0KLSAgICBk
aXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpcywgJnZp
ZGVvTGF5ZXIsIGluaXRpYWxSZWN0LCBwYXJlbnRWaWV3LCBtb2RlLCBhbGxvd09wdGltaXplZEZ1
bGxzY3JlZW5dIHsKLSAgICAgICAgc3Ryb25nVGhpcy0+c2V0dXBGdWxsc2NyZWVuSW50ZXJuYWwo
dmlkZW9MYXllciwgaW5pdGlhbFJlY3QsIHBhcmVudFZpZXcsIG1vZGUsIGFsbG93T3B0aW1pemVk
RnVsbHNjcmVlbik7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ6OnNldHVwRnVsbHNjcmVlbkludGVybmFsKFBsYXRmb3JtTGF5ZXImIHZpZGVvTGF5
ZXIsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGluaXRpYWxSZWN0LCBVSVZpZXcqIHBhcmVudFZp
ZXcsIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlLCBib29s
IGFsbG93T3B0aW1pemVkRnVsbHNjcmVlbikKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpzZXR1cEZ1bGxzY3JlZW5JbnRlcm5hbCglcCki
LCB0aGlzKTsKLSAgICBVTlVTRURfUEFSQU0odmlkZW9MYXllcik7Ci0gICAgVU5VU0VEX1BBUkFN
KG1vZGUpOworICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OnNldHVwRnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKIAogICAgIG1fYWxsb3dPcHRpbWl6
ZWRGdWxsc2NyZWVuID0gYWxsb3dPcHRpbWl6ZWRGdWxsc2NyZWVuOwogCiAgICAgW0NBVHJhbnNh
Y3Rpb24gYmVnaW5dOwogICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107
CisgICAgbV92aWRlb0xheWVyID0gJnZpZGVvTGF5ZXI7CisgICAgbV9tb2RlID0gbW9kZTsKICAg
ICBtX3BhcmVudFZpZXcgPSBwYXJlbnRWaWV3OwogICAgIG1fcGFyZW50V2luZG93ID0gcGFyZW50
Vmlldy53aW5kb3c7CiAKQEAgLTk5NiwxMSArOTM4LDggQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdDo6c2V0dXBGdWxsc2NyZWVuSW50ZXJuYWwoUGxhdGZvcm1MYXllciYg
dmkKIAogICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07CiAKLSAgICBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IHN0cm9uZ1RoaXModGhpcyk7Ci0gICAgV2ViVGhyZWFk
UnVuKFtzdHJvbmdUaGlzXSB7Ci0gICAgICAgIGlmIChzdHJvbmdUaGlzLT5tX2Z1bGxzY3JlZW5D
aGFuZ2VPYnNlcnZlcikKLSAgICAgICAgICAgIHN0cm9uZ1RoaXMtPm1fZnVsbHNjcmVlbkNoYW5n
ZU9ic2VydmVyLT5kaWRTZXR1cEZ1bGxzY3JlZW4oKTsKLSAgICB9KTsKKyAgICBpZiAobV9mdWxs
c2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCisgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVy
LT5kaWRTZXR1cEZ1bGxzY3JlZW4oKTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVuKCkKQEAgLTEwMTEsMjIgKzk1MCwxNyBAQCB2b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjplbnRlckZ1bGxzY3JlZW4oKQogICAg
IG1fZXhpdFJlcXVlc3RlZCA9IGZhbHNlOwogICAgIG1fZW50ZXJSZXF1ZXN0ZWQgPSB0cnVlOwog
Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlz
KHRoaXMpOwotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtz
dHJvbmdUaGlzXSB7Ci0gICAgICAgIFtzdHJvbmdUaGlzLT5tX3ZpZGVvTGF5ZXJDb250YWluZXIg
c2V0QmFja2dyb3VuZENvbG9yOltbZ2V0VUlDb2xvckNsYXNzKCkgYmxhY2tDb2xvcl0gQ0dDb2xv
cl1dOwotICAgICAgICBpZiAoc3Ryb25nVGhpcy0+bW9kZSgpID09IEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU9wdGltaXplZCkKLSAgICAgICAgICAgIHN0cm9uZ1Ro
aXMtPmVudGVyRnVsbHNjcmVlbk9wdGltaXplZCgpOwotICAgICAgICBlbHNlIGlmIChzdHJvbmdU
aGlzLT5tb2RlKCkgPT0gSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
U3RhbmRhcmQpCi0gICAgICAgICAgICBzdHJvbmdUaGlzLT5lbnRlckZ1bGxzY3JlZW5TdGFuZGFy
ZCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICB9KTsKKyAgICBbbV92aWRlb0xheWVyQ29udGFpbmVyIHNldEJhY2tncm91bmRDb2xvcjpbW2dl
dFVJQ29sb3JDbGFzcygpIGJsYWNrQ29sb3JdIENHQ29sb3JdXTsKKyAgICBpZiAobW9kZSgpID09
IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU9wdGltaXplZCkKKyAg
ICAgICAgZW50ZXJGdWxsc2NyZWVuT3B0aW1pemVkKCk7CisgICAgZWxzZSBpZiAobW9kZSgpID09
IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKQorICAg
ICAgICBlbnRlckZ1bGxzY3JlZW5TdGFuZGFyZCgpOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6OmVudGVyRnVsbHNjcmVlbk9wdGltaXplZCgpCiB7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOwotCiAgICAgTE9HKEZ1bGxz
Y3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVu
T3B0aW1pemVkKCVwKSIsIHRoaXMpOwogICAgIAogICAgIGlmIChbbV9wbGF5ZXJWaWV3Q29udHJv
bGxlciBpc09wdGltaXplZEZ1bGxzY3JlZW5Qb3NzaWJsZV0pCkBAIC0xMDQ0LDM0ICs5NzgsMjEg
QEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxsc2NyZWVu
U3RhbmRhcmQoKQogICAgICAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0OjplbnRlckZ1bGxzY3JlZW5TdGFuZGFyZCAtIGxhbWJkYSglcCkgLSBzdWNj
ZWVkZWQoJXMpIiwgdGhpcywgYm9vbFN0cmluZyhzdWNjZWVkZWQpKTsKICAgICAgICAgW21fcGxh
eWVyVmlld0NvbnRyb2xsZXIgc2V0U2hvd3NQbGF5YmFja0NvbnRyb2xzOllFU107CiAKLSAgICAg
ICAgV2ViVGhyZWFkUnVuKFt0aGlzLCBzdHJvbmdUaGlzXSB7Ci0gICAgICAgICAgICBpZiAobV9m
dWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0gICAgICAgICAgICAgICAgbV9mdWxsc2NyZWVuQ2hh
bmdlT2JzZXJ2ZXItPmRpZEVudGVyRnVsbHNjcmVlbigpOwotICAgICAgICB9KTsKKyAgICAgICAg
aWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQorICAgICAgICAgICAgbV9mdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXItPmRpZEVudGVyRnVsbHNjcmVlbigpOwogICAgIH1dOwogfQogCiB2b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpleGl0RnVsbHNjcmVlbihjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBmaW5hbFJlY3QpCiB7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOwotCiAgICAgbV9leGl0UmVxdWVz
dGVkID0gdHJ1ZTsKICAgICBpZiAobV9leGl0Q29tcGxldGVkKSB7Ci0gICAgICAgIFdlYlRocmVh
ZFJ1bihbc3Ryb25nVGhpc10gewotICAgICAgICAgICAgaWYgKHN0cm9uZ1RoaXMtPm1fZnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyKQotICAgICAgICAgICAgICAgIHN0cm9uZ1RoaXMtPm1fZnVsbHNj
cmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFeGl0RnVsbHNjcmVlbigpOwotICAgICAgICB9KTsKKyAg
ICAgICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQorICAgICAgICAgICAgbV9mdWxs
c2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEV4aXRGdWxsc2NyZWVuKCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0KLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgp
LCBbc3Ryb25nVGhpcywgZmluYWxSZWN0XSB7Ci0gICAgICAgIHN0cm9uZ1RoaXMtPmV4aXRGdWxs
c2NyZWVuSW50ZXJuYWwoZmluYWxSZWN0KTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZXhpdEZ1bGxzY3JlZW5JbnRlcm5hbChjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiBmaW5hbFJlY3QpCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZXhpdEZ1bGxzY3JlZW5JbnRlcm5hbCglcCkiLCB0
aGlzKTsKKyAgICAKKyAgICBMT0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0OjpleGl0RnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKICAgICBbbV9wbGF5ZXJWaWV3
Q29udHJvbGxlciBzZXRTaG93c1BsYXliYWNrQ29udHJvbHM6Tk9dOwogICAgIGlmIChtX3ZpZXdD
b250cm9sbGVyKQogICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XS5mcmFtZSA9
IFttX3BhcmVudFZpZXcgY29udmVydFJlY3Q6ZmluYWxSZWN0IHRvVmlldzpuaWxdOwpAQCAtMTA4
OCwyNSArMTAwOSwyMyBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojpl
eGl0RnVsbHNjcmVlbkludGVybmFsKGNvbnN0IFdlYkNvcmU6OkludAogICAgICAgICBbbV9wbGF5
ZXJWaWV3Q29udHJvbGxlciBzdG9wT3B0aW1pemVkRnVsbHNjcmVlbl07CiAgICAgfSBlbHNlIGlm
IChpc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlT3B0aW1p
emVkIHwgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQp
KSB7CiAgICAgICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ry
b25nVGhpcyh0aGlzKTsKLSAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgZXhpdEZ1bGxT
Y3JlZW5BbmltYXRlZDpOTyBjb21wbGV0aW9uSGFuZGxlcjpbc3Ryb25nVGhpc10gKEJPT0wsIE5T
RXJyb3IqKSB7Ci0gICAgICAgICAgICBbc3Ryb25nVGhpcy0+bV93aW5kb3cgc2V0SGlkZGVuOk5P
XTsKLSAgICAgICAgICAgIFtzdHJvbmdUaGlzLT5tX3BsYXllclZpZXdDb250cm9sbGVyIHN0b3BP
cHRpbWl6ZWRGdWxsc2NyZWVuXTsKKyAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgZXhp
dEZ1bGxTY3JlZW5BbmltYXRlZDpOTyBjb21wbGV0aW9uSGFuZGxlcjpbc3Ryb25nVGhpcywgdGhp
c10gKEJPT0wsIE5TRXJyb3IqKSB7CisgICAgICAgICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOk5P
XTsKKyAgICAgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHN0b3BPcHRpbWl6ZWRGdWxs
c2NyZWVuXTsKICAgICAgICAgfV07CiAgICAgfSBlbHNlIGlmIChpc01vZGUoSFRNTE1lZGlhRWxl
bWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQpKSB7CiAgICAgICAgIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlzKTsKLSAg
ICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpZRVMg
Y29tcGxldGlvbkhhbmRsZXI6W3N0cm9uZ1RoaXNdIChCT09MLCBOU0Vycm9yKikgewotICAgICAg
ICAgICAgc3Ryb25nVGhpcy0+bV9leGl0Q29tcGxldGVkID0gdHJ1ZTsKKyAgICAgICAgW21fcGxh
eWVyVmlld0NvbnRyb2xsZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpZRVMgY29tcGxldGlvbkhh
bmRsZXI6W3N0cm9uZ1RoaXMsIHRoaXNdIChCT09MLCBOU0Vycm9yKikgeworICAgICAgICAgICAg
bV9leGl0Q29tcGxldGVkID0gdHJ1ZTsKIAogICAgICAgICAgICAgW0NBVHJhbnNhY3Rpb24gYmVn
aW5dOwogICAgICAgICAgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsK
LSAgICAgICAgICAgIFtzdHJvbmdUaGlzLT5tX3ZpZGVvTGF5ZXJDb250YWluZXIgc2V0QmFja2dy
b3VuZENvbG9yOltbZ2V0VUlDb2xvckNsYXNzKCkgY2xlYXJDb2xvcl0gQ0dDb2xvcl1dOwotICAg
ICAgICAgICAgW1tzdHJvbmdUaGlzLT5tX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEJh
Y2tncm91bmRDb2xvcjpbZ2V0VUlDb2xvckNsYXNzKCkgY2xlYXJDb2xvcl1dOworICAgICAgICAg
ICAgW21fdmlkZW9MYXllckNvbnRhaW5lciBzZXRCYWNrZ3JvdW5kQ29sb3I6W1tnZXRVSUNvbG9y
Q2xhc3MoKSBjbGVhckNvbG9yXSBDR0NvbG9yXV07CisgICAgICAgICAgICBbW21fcGxheWVyVmll
d0NvbnRyb2xsZXIgdmlld10gc2V0QmFja2dyb3VuZENvbG9yOltnZXRVSUNvbG9yQ2xhc3MoKSBj
bGVhckNvbG9yXV07CiAgICAgICAgICAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOwogCi0gICAg
ICAgICAgICBXZWJUaHJlYWRSdW4oW3N0cm9uZ1RoaXNdIHsKLSAgICAgICAgICAgICAgICBpZiAo
c3Ryb25nVGhpcy0+bV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0gICAgICAgICAgICAgICAg
ICAgIHN0cm9uZ1RoaXMtPm1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRFeGl0RnVsbHNj
cmVlbigpOwotICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpZiAobV9mdWxsc2NyZWVuQ2hh
bmdlT2JzZXJ2ZXIpCisgICAgICAgICAgICAgICAgbV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIt
PmRpZEV4aXRGdWxsc2NyZWVuKCk7CiAgICAgICAgIH1dOwogICAgIH07CiB9CkBAIC0xMTIxLDE2
ICsxMDQwLDcgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6ZXhpdEZ1
bGxzY3JlZW5JbnRlcm5hbChjb25zdCBXZWJDb3JlOjpJbnQKIAogdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6Y2xlYW51cEZ1bGxzY3JlZW4oKQogewotICAgIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlzKTsKLSAgICAK
LSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhp
c10gewotICAgICAgICBzdHJvbmdUaGlzLT5jbGVhbnVwRnVsbHNjcmVlbkludGVybmFsKCk7Ci0g
ICAgfSk7Ci19Ci0KLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmNsZWFu
dXBGdWxsc2NyZWVuSW50ZXJuYWwoKQotewotICAgIExPRyhGdWxsc2NyZWVuLCAiV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmNsZWFudXBGdWxsc2NyZWVuSW50ZXJuYWwoJXApIiwg
dGhpcyk7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6Y2xlYW51cEZ1bGxzY3JlZW4oJXApIiwgdGhpcyk7CiAgICAgaWYgKG1fd2luZG93KSB7
CiAgICAgICAgIFttX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKICAgICAgICAgW21fd2luZG93IHNl
dFJvb3RWaWV3Q29udHJvbGxlcjpuaWxdOwpAQCAtMTE3MCwxMiArMTA4MCwxMCBAQCB2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpjbGVhbnVwRnVsbHNjcmVlbkludGVybmFs
KCkKICAgICBtX3BhcmVudFZpZXcgPSBuaWw7CiAgICAgbV9wYXJlbnRXaW5kb3cgPSBuaWw7CiAg
ICAgCi0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdU
aGlzKHRoaXMpOwotICAgIFdlYlRocmVhZFJ1bihbc3Ryb25nVGhpc10gewotICAgICAgICBpZiAo
c3Ryb25nVGhpcy0+bV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0gICAgICAgICAgICBzdHJv
bmdUaGlzLT5tX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkQ2xlYW51cEZ1bGxzY3JlZW4o
KTsKLSAgICAgICAgc3Ryb25nVGhpcy0+bV9lbnRlclJlcXVlc3RlZCA9IGZhbHNlOwotICAgIH0p
OworICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAgICAgICAgbV9mdWxsc2Ny
ZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZENsZWFudXBGdWxsc2NyZWVuKCk7CisKKyAgICBtX2VudGVy
UmVxdWVzdGVkID0gZmFsc2U7CiB9CiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQ6OmludmFsaWRhdGUoKQpAQCAtMTE4Myw3ICsxMDkxLDcgQEAgdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6aW52YWxpZGF0ZSgpCiAgICAgbV92aWRlb0Z1bGxzY3Jl
ZW5Nb2RlbCA9IG5pbDsKICAgICBtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciA9IG5pbDsKICAg
ICAKLSAgICBjbGVhbnVwRnVsbHNjcmVlbkludGVybmFsKCk7CisgICAgY2xlYW51cEZ1bGxzY3Jl
ZW4oKTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cmVxdWVz
dEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpCkBAIC0xMTk2LDEwICsxMTA0LDcgQEAgdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVl
bigpCiAgICAgCiAgICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKIAotICAg
IFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlz
KTsKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25n
VGhpc10gewotICAgICAgICBbc3Ryb25nVGhpcy0+bV93aW5kb3cgc2V0SGlkZGVuOllFU107Ci0g
ICAgfSk7CisgICAgW21fd2luZG93IHNldEhpZGRlbjpZRVNdOwogCiAgICAgaWYgKG1fdmlkZW9G
dWxsc2NyZWVuTW9kZWwgJiYgIW1fZXhpdFJlcXVlc3RlZCkgewogICAgICAgICBtX3ZpZGVvRnVs
bHNjcmVlbk1vZGVsLT5wYXVzZSgpOwpAQCAtMTIxMCwxOSArMTExNSwxNiBAQCB2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVu
KCkKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVkVG9SZXR1
cm5Ub0lubGluZShib29sIHZpc2libGUsIGNvbnN0IEludFJlY3QmIGlubGluZVJlY3QpCiB7CiAg
ICAgTE9HKEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6cHJl
cGFyZWRUb1JldHVyblRvSW5saW5lKCVwKSAtIHZpc2libGUoJXMpIiwgdGhpcywgYm9vbFN0cmlu
Zyh2aXNpYmxlKSk7Ci0gICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
PiBzdHJvbmdUaGlzKHRoaXMpOwotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWlu
X3F1ZXVlKCksIFtzdHJvbmdUaGlzLCB2aXNpYmxlLCBpbmxpbmVSZWN0XSB7Ci0gICAgICAgIGlm
IChzdHJvbmdUaGlzLT5tX3ByZXBhcmVUb0lubGluZUNhbGxiYWNrKSB7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIGlmIChzdHJvbmdUaGlzLT5tX3ZpZXdDb250cm9sbGVyKQotICAgICAgICAg
ICAgICAgIFtzdHJvbmdUaGlzLT5tX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddLmZyYW1lID0g
W3N0cm9uZ1RoaXMtPm1fcGFyZW50VmlldyBjb252ZXJ0UmVjdDppbmxpbmVSZWN0IHRvVmlldzpu
aWxdOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIFtzdHJvbmdUaGlzLT5tX3Bs
YXllclZpZXdDb250cm9sbGVyIHZpZXddLmZyYW1lID0gaW5saW5lUmVjdDsKKyAgICBpZiAobV9w
cmVwYXJlVG9JbmxpbmVDYWxsYmFjaykgeworICAgICAgICAKKyAgICAgICAgaWYgKG1fdmlld0Nv
bnRyb2xsZXIpCisgICAgICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XS5mcmFt
ZSA9IFttX3BhcmVudFZpZXcgY29udmVydFJlY3Q6aW5saW5lUmVjdCB0b1ZpZXc6bmlsXTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10uZnJh
bWUgPSBpbmxpbmVSZWN0OwogCi0gICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoYm9vbCk+
IGNhbGxiYWNrID0gV1RGOjptb3ZlKHN0cm9uZ1RoaXMtPm1fcHJlcGFyZVRvSW5saW5lQ2FsbGJh
Y2spOwotICAgICAgICAgICAgY2FsbGJhY2sodmlzaWJsZSk7Ci0gICAgICAgIH0KLSAgICB9KTsK
KyAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKGJvb2wpPiBjYWxsYmFjayA9IFdURjo6bW92ZSht
X3ByZXBhcmVUb0lubGluZUNhbGxiYWNrKTsKKyAgICAgICAgY2FsbGJhY2sodmlzaWJsZSk7Cisg
ICAgfQogfQogCiBib29sIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjptYXlBdXRv
bWF0aWNhbGx5U2hvd1ZpZGVvT3B0aW1pemVkKCkgY29uc3QKQEAgLTEyNDYsMjEgKzExNDgsMjEg
QEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2lsbFN0YXJ0T3B0aW1p
emVkRnVsbHNjcmVlbigpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlzKTsKLSAgICBmdWxsc2NyZWVu
TWF5UmV0dXJuVG9JbmxpbmUoW3N0cm9uZ1RoaXNdKGJvb2wgdmlzaWJsZSkgewotICAgICAgICBM
T0coRnVsbHNjcmVlbiwgIldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Ojp3aWxsU3Rh
cnRPcHRpbWl6ZWRGdWxsc2NyZWVuIC0gbGFtYmRhKCVwKSAtIHZpc2libGUoJXMpIiwgc3Ryb25n
VGhpcy5nZXQoKSwgYm9vbFN0cmluZyh2aXNpYmxlKSk7CisgICAgZnVsbHNjcmVlbk1heVJldHVy
blRvSW5saW5lKFtzdHJvbmdUaGlzLCB0aGlzXShib29sIHZpc2libGUpIHsKKyAgICAgICAgTE9H
KEZ1bGxzY3JlZW4sICJXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2lsbFN0YXJ0
T3B0aW1pemVkRnVsbHNjcmVlbiAtIGxhbWJkYSglcCkgLSB2aXNpYmxlKCVzKSIsIHRoaXMsIGJv
b2xTdHJpbmcodmlzaWJsZSkpOwogCiAgICAgICAgIGlmICghdmlzaWJsZSkgewotICAgICAgICAg
ICAgW3N0cm9uZ1RoaXMtPm1fd2luZG93IHNldEhpZGRlbjpZRVNdOworICAgICAgICAgICAgW21f
d2luZG93IHNldEhpZGRlbjpZRVNdOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
LSAgICAgICAgW1tzdHJvbmdUaGlzLT5tX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIGxheW91
dElmTmVlZGVkXTsKKyAgICAgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIGxheW91
dElmTmVlZGVkXTsKIAotICAgICAgICBbc3Ryb25nVGhpcy0+bV9wbGF5ZXJWaWV3Q29udHJvbGxl
ciBleGl0RnVsbFNjcmVlbkFuaW1hdGVkOllFUyBjb21wbGV0aW9uSGFuZGxlcjpbc3Ryb25nVGhp
c10gKEJPT0wgY29tcGxldGVkLCBOU0Vycm9yKikgeworICAgICAgICBbbV9wbGF5ZXJWaWV3Q29u
dHJvbGxlciBleGl0RnVsbFNjcmVlbkFuaW1hdGVkOllFUyBjb21wbGV0aW9uSGFuZGxlcjpbc3Ry
b25nVGhpcywgdGhpc10gKEJPT0wgY29tcGxldGVkLCBOU0Vycm9yKikgewogICAgICAgICAgICAg
aWYgKCFjb21wbGV0ZWQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgc3Ry
b25nVGhpcy0+Y2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVu
TW9kZVN0YW5kYXJkKTsKLSAgICAgICAgICAgIFtzdHJvbmdUaGlzLT5tX3dpbmRvdyBzZXRIaWRk
ZW46WUVTXTsKKyAgICAgICAgICAgIGNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCk7CisgICAgICAgICAgICBbbV93aW5kb3cgc2V0SGlk
ZGVuOllFU107CiAgICAgICAgIH1dOwogICAgIH0pOwogfQpAQCAtMTI3MSwxMSArMTE3Myw4IEBA
IHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZFN0YXJ0T3B0aW1pemVk
RnVsbHNjcmVlbigpCiAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0U2hvd3NQbGF5YmFj
a0NvbnRyb2xzOllFU107CiAgICAgW21fd2luZG93IHNldEhpZGRlbjpZRVNdOwogCi0gICAgUmVm
UHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOwot
ICAgIFdlYlRocmVhZFJ1bihbc3Ryb25nVGhpc10gewotICAgICAgICBpZiAoc3Ryb25nVGhpcy0+
bV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIpCi0gICAgICAgICAgICBzdHJvbmdUaGlzLT5tX2Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlci0+ZGlkRW50ZXJGdWxsc2NyZWVuKCk7Ci0gICAgfSk7Cisg
ICAgaWYgKG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQorICAgICAgICBtX2Z1bGxzY3JlZW5D
aGFuZ2VPYnNlcnZlci0+ZGlkRW50ZXJGdWxsc2NyZWVuKCk7CiB9CiAKIHZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmZhaWxlZFRvU3RhcnRPcHRpbWl6ZWRGdWxsc2NyZWVu
KCkKQEAgLTEyODMsMTkgKzExODIsMTYgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VBVktpdDo6ZmFpbGVkVG9TdGFydE9wdGltaXplZEZ1bGxzY3JlZW4oKQogICAgIExPRyhGdWxs
c2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmZhaWxlZFRvU3RhcnRP
cHRpbWl6ZWRGdWxsc2NyZWVuKCVwKSIsIHRoaXMpOwogICAgIFttX3BsYXllclZpZXdDb250cm9s
bGVyIHNldFNob3dzUGxheWJhY2tDb250cm9sczpZRVNdOwogCi0gICAgUmVmUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0PiBzdHJvbmdUaGlzKHRoaXMpOwotICAgIFdlYlRocmVh
ZFJ1bihbc3Ryb25nVGhpcywgdGhpc10gewotICAgICAgICBpZiAoaGFzTW9kZShIVE1MTWVkaWFF
bGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCkpCi0gICAgICAgICAgICBy
ZXR1cm47CisgICAgaWYgKGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlU3RhbmRhcmQpKQorICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbV9leGl0Q29t
cGxldGVkID0gdHJ1ZTsKKyAgICBtX2V4aXRDb21wbGV0ZWQgPSB0cnVlOwogCi0gICAgICAgIGlm
IChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKLSAgICAgICAgICAgIG1fZnVsbHNjcmVlbkNo
YW5nZU9ic2VydmVyLT5kaWRFbnRlckZ1bGxzY3JlZW4oKTsKKyAgICBpZiAobV9mdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXIpCisgICAgICAgIG1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyLT5kaWRF
bnRlckZ1bGxzY3JlZW4oKTsKIAotICAgICAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkK
LSAgICAgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuTW9kZWwtPnJlcXVlc3RFeGl0RnVsbHNjcmVl
bigpOwotICAgIH0pOworICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbk1vZGVsKQorICAgICAgICBt
X3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZXF1ZXN0RXhpdEZ1bGxzY3JlZW4oKTsKIH0KIAogdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6d2lsbFN0b3BPcHRpbWl6ZWRGdWxs
c2NyZWVuKCkKQEAgLTEzMDMsMTEgKzExOTksOCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0Ojp3aWxsU3RvcE9wdGltaXplZEZ1bGxzY3JlZW4oKQogICAgIExPRyhGdWxs
c2NyZWVuLCAiV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OndpbGxTdG9wT3B0aW1p
emVkRnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOk5PXTsK
IAotICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhp
cyh0aGlzKTsKLSAgICBXZWJUaHJlYWRSdW4oW3N0cm9uZ1RoaXNdIHsKLSAgICAgICAgaWYgKHN0
cm9uZ1RoaXMtPm1fdmlkZW9GdWxsc2NyZWVuTW9kZWwpCi0gICAgICAgICAgICBzdHJvbmdUaGlz
LT5tX3ZpZGVvRnVsbHNjcmVlbk1vZGVsLT5yZXF1ZXN0RXhpdEZ1bGxzY3JlZW4oKTsKLSAgICB9
KTsKKyAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5Nb2RlbCkKKyAgICAgICAgbV92aWRlb0Z1bGxz
Y3JlZW5Nb2RlbC0+cmVxdWVzdEV4aXRGdWxsc2NyZWVuKCk7CiB9CiAKIHZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmRpZFN0b3BPcHRpbWl6ZWRGdWxsc2NyZWVuKCkKQEAg
LTEzMjEsMTMgKzEyMTQsMTEgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktp
dDo6ZGlkU3RvcE9wdGltaXplZEZ1bGxzY3JlZW4oKQogICAgIFttX3ZpZGVvTGF5ZXJDb250YWlu
ZXIgc2V0QmFja2dyb3VuZENvbG9yOltbZ2V0VUlDb2xvckNsYXNzKCkgY2xlYXJDb2xvcl0gQ0dD
b2xvcl1dOwogICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRCYWNrZ3JvdW5k
Q29sb3I6W2dldFVJQ29sb3JDbGFzcygpIGNsZWFyQ29sb3JdXTsKIAotICAgIFJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gc3Ryb25nVGhpcyh0aGlzKTsKLSAgICBXZWJU
aHJlYWRSdW4oW3N0cm9uZ1RoaXNdIHsKLSAgICAgICAgc3Ryb25nVGhpcy0+Y2xlYXJNb2RlKEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU9wdGltaXplZCk7Ci0gICAg
ICAgIFtzdHJvbmdUaGlzLT5tX3dpbmRvdyBzZXRIaWRkZW46WUVTXTsKLSAgICAgICAgaWYgKHN0
cm9uZ1RoaXMtPm1fZnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKQotICAgICAgICAgICAgc3Ryb25n
VGhpcy0+bV9mdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXItPmRpZEV4aXRGdWxsc2NyZWVuKCk7Ci0g
ICAgfSk7CisgICAgY2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZU9wdGltaXplZCk7CisgICAgW21fd2luZG93IHNldEhpZGRlbjpZRVNdOworICAgIAor
ICAgIGlmIChtX2Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcikKKyAgICAgICAgbV9mdWxsc2NyZWVu
Q2hhbmdlT2JzZXJ2ZXItPmRpZEV4aXRGdWxsc2NyZWVuKCk7CiB9CiAKIHZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVGb3JPcHRpbWl6ZWRGdWxsc2NyZWVuU3Rv
cFdpdGhDb21wbGV0aW9uSGFuZGxlcih2b2lkICheY29tcGxldGlvbkhhbmRsZXIpKEJPT0wgcmVz
dG9yZWQpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tCmluZGV4IDY5NjQ1ZDc5
ZTIwZmU5ZjU4MTlhOWRhMGNlZTNkODU2MGJlNjYyODQuLjdmY2FkOTQwMDgyYWI5ODliN2UzYjQ5
MzU4NTRiNWZkMDAwZDRhZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0K
QEAgLTE3OSwxMjUgKzE3OSw3NCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50OjpzZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihQbGF0Zm9ybUxheWVyKgogICAgIFttX3Zp
ZGVvRnVsbHNjcmVlbkxheWVyIHNldEFuY2hvclBvaW50OkNHUG9pbnRNYWtlKDAuNSwgMC41KV07
CiAgICAgW21fdmlkZW9GdWxsc2NyZWVuTGF5ZXIgc2V0Qm91bmRzOm1fdmlkZW9GcmFtZV07CiAg
ICAgCi0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQ+IHByb3RlY3QodGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIGlmIChtX3Zp
ZGVvRWxlbWVudCkKLSAgICAgICAgICAgIG1fdmlkZW9FbGVtZW50LT5zZXRWaWRlb0Z1bGxzY3Jl
ZW5MYXllcihtX3ZpZGVvRnVsbHNjcmVlbkxheWVyLmdldCgpKTsKLSAgICAgICAgcHJvdGVjdC5j
bGVhcigpOwotICAgIH0pOworICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKKyAgICAgICAgbV92aWRl
b0VsZW1lbnQtPnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIu
Z2V0KCkpOwogfQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojpw
bGF5KCkKIHsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYg
KG1fdmlkZW9FbGVtZW50KQotICAgICAgICAgICAgbV92aWRlb0VsZW1lbnQtPnBsYXkoKTsKLSAg
ICAgICAgcHJvdGVjdC5jbGVhcigpOwotICAgIH0pOworICAgIGlmIChtX3ZpZGVvRWxlbWVudCkK
KyAgICAgICAgbV92aWRlb0VsZW1lbnQtPnBsYXkoKTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6cGF1c2UoKQogewotICAgIF9fYmxvY2sgUmVmUHRyPFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBwcm90ZWN0KHRoaXMpOwotICAgIFdl
YlRocmVhZFJ1biheewotICAgICAgICBpZiAobV92aWRlb0VsZW1lbnQpCi0gICAgICAgICAgICBt
X3ZpZGVvRWxlbWVudC0+cGF1c2UoKTsKLSAgICAgICAgcHJvdGVjdC5jbGVhcigpOwotICAgIH0p
OworICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKKyAgICAgICAgbV92aWRlb0VsZW1lbnQtPnBhdXNl
KCk7CiB9CiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnRvZ2ds
ZVBsYXlTdGF0ZSgpCiB7Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAg
ICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKLSAgICAgICAgICAgIG1fdmlkZW9FbGVtZW50LT50b2dn
bGVQbGF5U3RhdGUoKTsKLSAgICAgICAgcHJvdGVjdC5jbGVhcigpOwotICAgIH0pOworICAgIGlm
IChtX3ZpZGVvRWxlbWVudCkKKyAgICAgICAgbV92aWRlb0VsZW1lbnQtPnRvZ2dsZVBsYXlTdGF0
ZSgpOwogfQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpiZWdp
blNjcnViYmluZygpCiB7Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAg
ICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKLSAgICAgICAgICAgIG1fdmlkZW9FbGVtZW50LT5iZWdp
blNjcnViYmluZygpOwotICAgICAgICBwcm90ZWN0LmNsZWFyKCk7Ci0gICAgfSk7CisgICAgaWYg
KG1fdmlkZW9FbGVtZW50KQorICAgICAgICBtX3ZpZGVvRWxlbWVudC0+YmVnaW5TY3J1YmJpbmco
KTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6ZW5kU2Ny
dWJiaW5nKCkKIHsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZp
ZGVvRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAgICBXZWJUaHJlYWRSdW4oXnsKLSAgICAgICAg
aWYgKG1fdmlkZW9FbGVtZW50KQotICAgICAgICAgICAgbV92aWRlb0VsZW1lbnQtPmVuZFNjcnVi
YmluZygpOwotICAgICAgICBwcm90ZWN0LmNsZWFyKCk7Ci0gICAgfSk7CisgICAgaWYgKG1fdmlk
ZW9FbGVtZW50KQorICAgICAgICBtX3ZpZGVvRWxlbWVudC0+ZW5kU2NydWJiaW5nKCk7CiB9CiAK
IHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNlZWtUb1RpbWUoZG91
YmxlIHRpbWUpCiB7Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAg
IGlmIChtX3ZpZGVvRWxlbWVudCkKLSAgICAgICAgICAgIG1fdmlkZW9FbGVtZW50LT5zZXRDdXJy
ZW50VGltZSh0aW1lKTsKLSAgICAgICAgcHJvdGVjdC5jbGVhcigpOwotICAgIH0pOworICAgIGlm
IChtX3ZpZGVvRWxlbWVudCkKKyAgICAgICAgbV92aWRlb0VsZW1lbnQtPnNldEN1cnJlbnRUaW1l
KHRpbWUpOwogfQogCiB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50Ojpm
YXN0U2Vlayhkb3VibGUgdGltZSkKIHsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAgICBXZWJUaHJlYWRSdW4o
XnsKLSAgICAgICAgaWYgKG1fdmlkZW9FbGVtZW50KQotICAgICAgICAgICAgbV92aWRlb0VsZW1l
bnQtPmZhc3RTZWVrKHRpbWUpOwotICAgICAgICBwcm90ZWN0LmNsZWFyKCk7Ci0gICAgfSk7Cisg
ICAgaWYgKG1fdmlkZW9FbGVtZW50KQorICAgICAgICBtX3ZpZGVvRWxlbWVudC0+ZmFzdFNlZWso
dGltZSk7CiB9CiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmJl
Z2luU2Nhbm5pbmdGb3J3YXJkKCkKIHsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAgICBXZWJUaHJlYWRSdW4o
XnsKLSAgICAgICAgaWYgKG1fdmlkZW9FbGVtZW50KQotICAgICAgICAgICAgbV92aWRlb0VsZW1l
bnQtPmJlZ2luU2Nhbm5pbmcoTWVkaWFDb250cm9sbGVySW50ZXJmYWNlOjpGb3J3YXJkKTsKLSAg
ICAgICAgcHJvdGVjdC5jbGVhcigpOwotICAgIH0pOworICAgIGlmIChtX3ZpZGVvRWxlbWVudCkK
KyAgICAgICAgbV92aWRlb0VsZW1lbnQtPmJlZ2luU2Nhbm5pbmcoTWVkaWFDb250cm9sbGVySW50
ZXJmYWNlOjpGb3J3YXJkKTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudDo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKCkKIHsKLSAgICBfX2Jsb2NrIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAgICBX
ZWJUaHJlYWRSdW4oXnsKLSAgICAgICAgaWYgKG1fdmlkZW9FbGVtZW50KQotICAgICAgICAgICAg
bV92aWRlb0VsZW1lbnQtPmJlZ2luU2Nhbm5pbmcoTWVkaWFDb250cm9sbGVySW50ZXJmYWNlOjpC
YWNrd2FyZCk7Ci0gICAgICAgIHByb3RlY3QuY2xlYXIoKTsKLSAgICB9KTsKKyAgICBpZiAobV92
aWRlb0VsZW1lbnQpCisgICAgICAgIG1fdmlkZW9FbGVtZW50LT5iZWdpblNjYW5uaW5nKE1lZGlh
Q29udHJvbGxlckludGVyZmFjZTo6QmFja3dhcmQpOwogfQogCiB2b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50OjplbmRTY2FubmluZygpCiB7Ci0gICAgX19ibG9jayBSZWZQ
dHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7Ci0g
ICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIGlmIChtX3ZpZGVvRWxlbWVudCkKLSAgICAgICAg
ICAgIG1fdmlkZW9FbGVtZW50LT5lbmRTY2FubmluZygpOwotICAgICAgICBwcm90ZWN0LmNsZWFy
KCk7Ci0gICAgfSk7CisgICAgaWYgKG1fdmlkZW9FbGVtZW50KQorICAgICAgICBtX3ZpZGVvRWxl
bWVudC0+ZW5kU2Nhbm5pbmcoKTsKIH0KIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZp
ZGVvRWxlbWVudDo6cmVxdWVzdEV4aXRGdWxsc2NyZWVuKCkKIHsKLSAgICBpZiAoIW1fdmlkZW9F
bGVtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAgICBXZWJUaHJlYWRS
dW4oXnsKLSAgICAgICAgaWYgKG1fdmlkZW9FbGVtZW50ICYmIG1fdmlkZW9FbGVtZW50LT5pc0Z1
bGxzY3JlZW4oKSkKLSAgICAgICAgICAgIG1fdmlkZW9FbGVtZW50LT5leGl0RnVsbHNjcmVlbigp
OwotICAgICAgICBwcm90ZWN0LmNsZWFyKCk7Ci0gICAgfSk7CisgICAgaWYgKG1fdmlkZW9FbGVt
ZW50ICYmIG1fdmlkZW9FbGVtZW50LT5pc0Z1bGxzY3JlZW4oKSkKKyAgICAgICAgbV92aWRlb0Vs
ZW1lbnQtPmV4aXRGdWxsc2NyZWVuKCk7CiB9CiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvTGF5ZXJGcmFtZShGbG9hdFJlY3QgcmVjdCkKQEAgLTQ1
NCwxMiArNDAzLDggQEAgY29uc3QgQXRvbWljU3RyaW5nJiBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudDo6ZXZlbnROYW1lQWxsKCkKIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudDo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKEhUTUxNZWRpYUVsZW1lbnRF
bnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlKQogewotICAgIF9f
YmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBwcm90ZWN0
KHRoaXMpOwotICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAobV92aWRlb0VsZW1lbnQp
Ci0gICAgICAgICAgICBtX3ZpZGVvRWxlbWVudC0+ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHZpZGVv
RnVsbHNjcmVlbk1vZGUpOwotICAgICAgICBwcm90ZWN0LmNsZWFyKCk7Ci0gICAgfSk7CisgICAg
aWYgKG1fdmlkZW9FbGVtZW50KQorICAgICAgICBtX3ZpZGVvRWxlbWVudC0+ZnVsbHNjcmVlbk1v
ZGVDaGFuZ2VkKHZpZGVvRnVsbHNjcmVlbk1vZGUpOwogfQogCiAjZW5kaWYK
</data>

          </attachment>
      

    </bug>

</bugzilla>