<?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>192977</bug_id>
          
          <creation_ts>2018-12-21 01:03:30 -0800</creation_ts>
          <short_desc>[GStreamer] Add sharedBuffer utility to GstMappedBuffer, and a testsuite</short_desc>
          <delta_ts>2019-02-11 02:46:34 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>194495</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Charlie Turner">cturner</reporter>
          <assigned_to name="Charlie Turner">cturner</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>calvaris</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1490308</commentid>
    <comment_count>0</comment_count>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2018-12-21 01:03:30 -0800</bug_when>
    <thetext>[GStreamer] Add sharedBuffer utility to GstMappedBuffer, and a testsuite</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1490309</commentid>
    <comment_count>1</comment_count>
      <attachid>357935</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2018-12-21 01:14:55 -0800</bug_when>
    <thetext>Created attachment 357935
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1492223</commentid>
    <comment_count>2</comment_count>
      <attachid>357935</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2019-01-07 02:38:26 -0800</bug_when>
    <thetext>Comment on attachment 357935
Patch

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

In a more general note, when I told you it was a good idea to have GstMappedBuffer::sharedBuffer, I thought you could just cache the RefPtr&lt;SharedBuffer&gt; inside the GstMappedBuffer. I don&apos;t think we need to complicate the design to create a general cache based on buffers. Another thing is that I guess we should only create shared buffers when the memory is readable and writable only.

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp:361
&gt; +static Lock cachedSharedBuffersLock;
&gt; +static HashMap&lt;GstBuffer*, RefPtr&lt;SharedBuffer&gt;&gt;&amp; cachedSharedBuffers()

Can we have this as staric class members?

&gt; Tools/TestWebKitAPI/Tests/WebCore/gstreamer/GStreamerTest.cpp:48
&gt; +    // Might be tempting to call gst_deint() here, don&apos;t, despite the naming,
&gt; +    // gst_init() doesn&apos;t reverse that call.

It might be my English and my understanding of the subtleties of the word &quot;reverse&quot; but I don&apos;t understand very well this comment.

&gt; Tools/TestWebKitAPI/Tests/WebCore/gstreamer/GstMappedBuffer.cpp:41
&gt; +    GstBuffer* buf = gst_buffer_new_allocate(NULL, 64, NULL);

Please use nullptr and even when this is just a test, we shouldn&apos;t leak the buffer, a GRefPtr should do I guess.

&gt; Tools/TestWebKitAPI/Tests/WebCore/gstreamer/GstMappedBuffer.cpp:65
&gt; +    GstBuffer* buf = gst_buffer_new_wrapped(memory, 16);

Ditto

&gt; Tools/TestWebKitAPI/Tests/WebCore/gstreamer/GstMappedBuffer.cpp:87
&gt; +    GstBuffer* buf = gst_buffer_new_allocate(NULL, 64, NULL);

Ditto and ditto

&gt; Tools/TestWebKitAPI/Tests/WebCore/gstreamer/GstMappedBuffer.cpp:95
&gt; +TEST_F(GStreamerTest, mappedBufferDoesNotAddExtraRefs)

Why do we need this test?

&gt; Tools/TestWebKitAPI/Tests/WebCore/gstreamer/GstMappedBuffer.cpp:97
&gt; +    GstBuffer* buf = gst_buffer_new();

Ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1492253</commentid>
    <comment_count>3</comment_count>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2019-01-07 07:52:46 -0800</bug_when>
    <thetext>(In reply to Xabier Rodríguez Calvar from comment #2)
&gt; In a more general note, when I told you it was a good idea to have
&gt; GstMappedBuffer::sharedBuffer, I thought you could just cache the
&gt; RefPtr&lt;SharedBuffer&gt; inside the GstMappedBuffer.

That&apos;s a better idea, thanks. I attempted to follow carlosgc&apos;s idea of adding an overload in the SharedBuffer class, but that requires a number of changes that didn&apos;t work well with our requirements managing GStreamer buffers. I went with a ivar rather than a static, since it simplifies the lifetime management, and the caching is not shared among all instances of this class.

&gt; Another
&gt; thing is that I guess we should only create shared buffers when the memory
&gt; is readable and writable only.

I took this to mean we only create them when they are readable and not writable. SharedBuffer provides read-only views of immutable data, so this seems like a good check to add.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp:361
&gt; &gt; +static Lock cachedSharedBuffersLock;
&gt; &gt; +static HashMap&lt;GstBuffer*, RefPtr&lt;SharedBuffer&gt;&gt;&amp; cachedSharedBuffers()
&gt; 
&gt; Can we have this as staric class members?
&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/WebCore/gstreamer/GStreamerTest.cpp:48
&gt; &gt; +    // Might be tempting to call gst_deint() here, don&apos;t, despite the naming,
&gt; &gt; +    // gst_init() doesn&apos;t reverse that call.
&gt; 
&gt; It might be my English and my understanding of the subtleties of the word
&gt; &quot;reverse&quot; but I don&apos;t understand very well this comment.

I&apos;ll rephrase, but after gst_deinit(), the entire process is destroyed from GStreamer&apos;s POV, you can&apos;t, in the same process, call gst_init() and expect a functional GStreamer.

&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/WebCore/gstreamer/GstMappedBuffer.cpp:41
&gt; &gt; +    GstBuffer* buf = gst_buffer_new_allocate(NULL, 64, NULL);
&gt; 
&gt; Please use nullptr and even when this is just a test, we shouldn&apos;t leak the
&gt; buffer, a GRefPtr should do I guess.

Done.

&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/WebCore/gstreamer/GstMappedBuffer.cpp:95
&gt; &gt; +TEST_F(GStreamerTest, mappedBufferDoesNotAddExtraRefs)
&gt; 
&gt; Why do we need this test?

I&apos;ll add a comment explaining more, but it&apos;s motivated by mapping writable buffers. If you increase the refcount, you will invalidate writability, and user-code in GStreamer will break. So I want this class to have a &quot;weak reference&quot; to the GstBuffer rather than messing with its refcount.
&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1492259</commentid>
    <comment_count>4</comment_count>
      <attachid>358495</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2019-01-07 08:02:08 -0800</bug_when>
    <thetext>Created attachment 358495
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1492561</commentid>
    <comment_count>5</comment_count>
      <attachid>358495</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2019-01-07 23:16:31 -0800</bug_when>
    <thetext>Comment on attachment 358495
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp:365
&gt; +    m_cachedSharedBuffer = nullptr;

The smart pointer will to its magic, I don&apos;t think you need this.

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp:375
&gt; +    if (!m_isValid || m_info.flags &amp; GST_MAP_WRITE)
&gt; +        return nullptr;

I am quite certain that we want to ASSERT_NOT_REACHED before returning the nullptr

&gt; Tools/TestWebKitAPI/Tests/WebCore/gstreamer/GStreamerTest.cpp:42
&gt; +        gst_init(NULL, NULL);

nullptr

&gt; Tools/TestWebKitAPI/Tests/WebCore/gstreamer/GstMappedBuffer.cpp:95
&gt; +    EXPECT_EQ(sharedBuf.get(), mappedBuf.sharedBuffer().get());
&gt; +    EXPECT_EQ(sharedBuf.get(), mappedBuf.sharedBuffer().get());

What&apos;s the purpose of running the same line twice?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1492564</commentid>
    <comment_count>6</comment_count>
      <attachid>358495</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-01-07 23:54:54 -0800</bug_when>
    <thetext>Comment on attachment 358495
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp:378
&gt; +    if (!m_cachedSharedBuffer)
&gt; +        m_cachedSharedBuffer = SharedBuffer::create(data(), size());

I still think we can avoid the data copy here. If I understood this correctly, the buffer is immutable now, so we can create a SharedBuffer wrapping the data. If we don&apos;t want to add a new SharedBuffer constructor for a GstMappedBuffer, we can use GBytes, with a free function to unref the GstMappedBuffer (needs to be refcounted). Then we would only cache the GBytes, that would be used to create SharedBuffers, all of them taking a ref of the same GBytes. Or do we really need to always return the same SharedBuffer instance?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1492573</commentid>
    <comment_count>7</comment_count>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2019-01-08 02:32:36 -0800</bug_when>
    <thetext>(In reply to Xabier Rodríguez Calvar from comment #5)
&gt; Comment on attachment 358495 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=358495&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp:365
&gt; &gt; +    m_cachedSharedBuffer = nullptr;
&gt; 
&gt; The smart pointer will to its magic, I don&apos;t think you need this.

Yep, I wanted to be explicit about it, but I&apos;ll remove the line.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp:375
&gt; &gt; +    if (!m_isValid || m_info.flags &amp; GST_MAP_WRITE)
&gt; &gt; +        return nullptr;
&gt; 
&gt; I am quite certain that we want to ASSERT_NOT_REACHED before returning the
&gt; nullptr

Will fix.

&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/WebCore/gstreamer/GStreamerTest.cpp:42
&gt; &gt; +        gst_init(NULL, NULL);
&gt; 
&gt; nullptr

Ditto.

&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/WebCore/gstreamer/GstMappedBuffer.cpp:95
&gt; &gt; +    EXPECT_EQ(sharedBuf.get(), mappedBuf.sharedBuffer().get());
&gt; &gt; +    EXPECT_EQ(sharedBuf.get(), mappedBuf.sharedBuffer().get());
&gt; 
&gt; What&apos;s the purpose of running the same line twice?

It&apos;s to ensure the sharedBuffer() method really is returning the same SharedBuffer object. Once is enough, it&apos;s just being extra defensive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1492574</commentid>
    <comment_count>8</comment_count>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2019-01-08 02:33:37 -0800</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #6)
&gt; Comment on attachment 358495 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=358495&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp:378
&gt; &gt; +    if (!m_cachedSharedBuffer)
&gt; &gt; +        m_cachedSharedBuffer = SharedBuffer::create(data(), size());
&gt; 
&gt; I still think we can avoid the data copy here. If I understood this
&gt; correctly, the buffer is immutable now, so we can create a SharedBuffer
&gt; wrapping the data. If we don&apos;t want to add a new SharedBuffer constructor
&gt; for a GstMappedBuffer, we can use GBytes, with a free function to unref the
&gt; GstMappedBuffer (needs to be refcounted).

OK, I will try it this way

&gt; Then we would only cache the
&gt; GBytes, that would be used to create SharedBuffers, all of them taking a ref
&gt; of the same GBytes. Or do we really need to always return the same
&gt; SharedBuffer instance?

No not really, having the same shared buffer instance so far is just used in the API test to check caching is really happening.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1492912</commentid>
    <comment_count>9</comment_count>
      <attachid>358691</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2019-01-09 03:52:17 -0800</bug_when>
    <thetext>Created attachment 358691
Patch

Try again with SharedBuffer(GstMappedBuffer) overload. The only problem here is that, to break the cyclic dependency on SharedBuffer and GstMappedBuffer, SharedBuffer is declared as opaque in GStreamerCommon.h, so if you don&apos;t include both GStreamerCommon.h *and* SharedBuffer.h in the usage code, then you will get errors</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1492921</commentid>
    <comment_count>10</comment_count>
      <attachid>358691</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-01-09 05:05:46 -0800</bug_when>
    <thetext>Comment on attachment 358691
Patch

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

&gt; Source/WebCore/platform/SharedBuffer.cpp:58
&gt; +Ref&lt;SharedBuffer&gt; SharedBuffer::create(RefPtr&lt;GstMappedBuffer&gt; buffer)

Since buffer can&apos;t be nullptr, I think this should receive a const ref instead. const GstMappedBuffer&amp;

&gt; Source/WebCore/platform/SharedBuffer.cpp:63
&gt; +SharedBuffer::SharedBuffer(RefPtr&lt;GstMappedBuffer&gt;&amp; mappedBuffer)

This would get the const reference too

&gt; Source/WebCore/platform/SharedBuffer.cpp:66
&gt; +    m_segments.append({0, DataSegment::create(WTFMove(mappedBuffer))});

And here we would create the RefPtr to pass it to DataSegment::create

&gt; Source/WebCore/platform/SharedBuffer.cpp:227
&gt; +#if USE(GLIB)

GSTREAMER

&gt; Source/WebCore/platform/SharedBuffer.h:53
&gt; +#if USE(GSTREAMER)
&gt; +#include &quot;GStreamerCommon.h&quot;
&gt; +#endif

Can&apos;t we forward declare GstMappedBuffer here?

&gt; Source/WebCore/platform/SharedBuffer.h:156
&gt; +#if USE(GLIB)

GSTREAMER

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp:369
&gt; +RefPtr&lt;SharedBuffer&gt; GstMappedBuffer::sharedBuffer()

This is always creating a new SharedBuffer (or nullptr), so I would call this tryCreateSharedBuffer()

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:83
&gt;      WTF_MAKE_NONCOPYABLE(GstMappedBuffer);

ThreadSafeRefCounted is already non-copyable so I think we can remove this now

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:101
&gt; +    explicit operator bool() const { return m_isValid; }

Now that we have a create method, I wonder whether we still need the m_isValid. It&apos;s set on the constructor and only changes in the destructor. So, create could call gst_buffer_map() and return nullptr if it fails. Then, the constructor would receive the GstMapInfo too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1492940</commentid>
    <comment_count>11</comment_count>
      <attachid>358691</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2019-01-09 07:14:35 -0800</bug_when>
    <thetext>Comment on attachment 358691
Patch

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

It&apos;s ok that we do this to avoid the copy from the GstMapperBuffer but our current use cases don&apos;t imply, AFAIK, creating SharedBuffers all the time. It&apos;s just for a couple of places, to report init datas (less that 1k)  maybe twice every couple of minutes. So I wonder if we are overengineering this.

&gt;&gt; Source/WebCore/platform/SharedBuffer.h:53
&gt;&gt; +#endif
&gt; 
&gt; Can&apos;t we forward declare GstMappedBuffer here?

If we can&apos;t, I think we should move the GstMappedBuffer to another file and we&apos;d fix or at least minimize fuzz, right?

&gt; Source/WebCore/platform/SharedBuffer.h:158
&gt; +            : m_immutableData(WTFMove(data)) { }

If we go this way, we need to ASSERT here somehow that the GstMappedBuffer is valid and readonly cause otherwise you would be able to create a SharedBuffer from a GstMappedBuffer without using the ::sharedBuffer() (or the ::tryCreateSharedBuffer()) method.

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:-346
&gt; -        ASSERT(mappedBuffer);

Why did we drop this?

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:101
&gt;&gt; +    explicit operator bool() const { return m_isValid; }
&gt; 
&gt; Now that we have a create method, I wonder whether we still need the m_isValid. It&apos;s set on the constructor and only changes in the destructor. So, create could call gst_buffer_map() and return nullptr if it fails. Then, the constructor would receive the GstMapInfo too.

We need to know, at least, if the constructor was able to map the memory. Then there&apos;s also the move constructor, etc.

&gt; Source/WebCore/platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:116
&gt; +        ASSERT(mappedBuffer.get());

This looks uglier now :/ . We might want to have an isValid() method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1492964</commentid>
    <comment_count>12</comment_count>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2019-01-09 09:07:36 -0800</bug_when>
    <thetext>(In reply to Xabier Rodríguez Calvar from comment #11)
&gt; Comment on attachment 358691 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=358691&amp;action=review
&gt; 
&gt; It&apos;s ok that we do this to avoid the copy from the GstMapperBuffer but our
&gt; current use cases don&apos;t imply, AFAIK, creating SharedBuffers all the time.
&gt; It&apos;s just for a couple of places, to report init datas (less that 1k)  maybe
&gt; twice every couple of minutes. So I wonder if we are overengineering this.

Yes, yes we are :-). One benefit it that it&apos;s a better citizen of WebCore like this at least.
 
&gt; &gt;&gt; Source/WebCore/platform/SharedBuffer.h:53
&gt; &gt;&gt; +#endif
&gt; &gt; 
&gt; &gt; Can&apos;t we forward declare GstMappedBuffer here?

Nope, the Variant in DataSegment needs to see the class derives from RefCounted for the -&gt;deref() call unfortunately.
&gt; 
&gt; If we can&apos;t, I think we should move the GstMappedBuffer to another file and
&gt; we&apos;d fix or at least minimize fuzz, right?
&gt; 
&gt; &gt; Source/WebCore/platform/SharedBuffer.h:158
&gt; &gt; +            : m_immutableData(WTFMove(data)) { }
&gt; 
&gt; If we go this way, we need to ASSERT here somehow that the GstMappedBuffer
&gt; is valid and readonly cause otherwise you would be able to create a
&gt; SharedBuffer from a GstMappedBuffer without using the ::sharedBuffer() (or
&gt; the ::tryCreateSharedBuffer()) method.
&gt; 
&gt; &gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:-346
&gt; &gt; -        ASSERT(mappedBuffer);
&gt; 
&gt; Why did we drop this?

Reinstated.

&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:101
&gt; &gt;&gt; +    explicit operator bool() const { return m_isValid; }
&gt; &gt; 
&gt; &gt; Now that we have a create method, I wonder whether we still need the m_isValid. It&apos;s set on the constructor and only changes in the destructor. So, create could call gst_buffer_map() and return nullptr if it fails. Then, the constructor would receive the GstMapInfo too.
&gt; 
&gt; We need to know, at least, if the constructor was able to map the memory.
&gt; Then there&apos;s also the move constructor, etc.

Move ctor etc have been removed now that we&apos;re derived from ThreadSafeRefCounted. I have followed cgarcia&apos;s suggestion in my new patch.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:116
&gt; &gt; +        ASSERT(mappedBuffer.get());
&gt; 
&gt; This looks uglier now :/ . We might want to have an isValid() method.

Thought so too, now the operator bool() is gone, the checks become whether the return RefPtr != nullptr, so that looks like ASSERT(mappedBuffer) again. There&apos;s no longer an m_isValid member after using cgarcia&apos;s review comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1492965</commentid>
    <comment_count>13</comment_count>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2019-01-09 09:09:08 -0800</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #10)
&gt; Comment on attachment 358691 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=358691&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/SharedBuffer.cpp:58
&gt; &gt; +Ref&lt;SharedBuffer&gt; SharedBuffer::create(RefPtr&lt;GstMappedBuffer&gt; buffer)
&gt; 
&gt; Since buffer can&apos;t be nullptr, I think this should receive a const ref
&gt; instead. const GstMappedBuffer&amp;

Can&apos;t be const ref because RefPtr only accepts non-const pointers, but I changed it to a ref, so at least it can&apos;t be null now.


&gt; 
&gt; &gt; Source/WebCore/platform/SharedBuffer.cpp:227
&gt; &gt; +#if USE(GLIB)
&gt; 
&gt; GSTREAMER

Whoops, fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/SharedBuffer.h:53
&gt; &gt; +#if USE(GSTREAMER)
&gt; &gt; +#include &quot;GStreamerCommon.h&quot;
&gt; &gt; +#endif
&gt; 
&gt; Can&apos;t we forward declare GstMappedBuffer here?

See above comment, but no we can&apos;t :/

&gt; This is always creating a new SharedBuffer (or nullptr), so I would call
&gt; this tryCreateSharedBuffer()

Done.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:83
&gt; &gt;      WTF_MAKE_NONCOPYABLE(GstMappedBuffer);
&gt; 
&gt; ThreadSafeRefCounted is already non-copyable so I think we can remove this
&gt; now

Done.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:101
&gt; &gt; +    explicit operator bool() const { return m_isValid; }
&gt; 
&gt; Now that we have a create method, I wonder whether we still need the
&gt; m_isValid. It&apos;s set on the constructor and only changes in the destructor.
&gt; So, create could call gst_buffer_map() and return nullptr if it fails. Then,
&gt; the constructor would receive the GstMapInfo too.

Done, that eliminates the need for m_isValid now, thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1493182</commentid>
    <comment_count>14</comment_count>
      <attachid>358770</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2019-01-09 17:24:48 -0800</bug_when>
    <thetext>Created attachment 358770
Patch

There are couple failures in WebRTC because I don&apos;t build with that enabled, will fix next, this addresses last review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1493206</commentid>
    <comment_count>15</comment_count>
      <attachid>358774</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2019-01-09 19:39:06 -0800</bug_when>
    <thetext>Created attachment 358774
Patch

Fix failures in WebRTC</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1493235</commentid>
    <comment_count>16</comment_count>
      <attachid>358774</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-01-10 01:21:59 -0800</bug_when>
    <thetext>Comment on attachment 358774
Patch

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

&gt; Source/WebCore/platform/SharedBuffer.h:137
&gt; +        static Ref&lt;DataSegment&gt; create(RefPtr&lt;GstMappedBuffer&gt; data) { return adoptRef(*new DataSegment(WTFMove(data))); }

&amp;&amp;

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp:366
&gt; +        ASSERT_NOT_REACHED();

Why do we assert? is the caller expected to do the check? If that&apos;s the case then I think it&apos;s better to return Ref&lt;&gt; and use release assert (and remove the &apos;try&apos; from the name). Then we can remove all the null-checks in the callers.

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:89
&gt; +        return adoptRef(new GstMappedBuffer(buffer, info));

WTFMove(info)

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:111
&gt; +    GstMappedBuffer(GstBuffer* buffer, GstMapInfo info)

GstMapInfo&amp;&amp;

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:112
&gt; +        : m_buffer(buffer), m_info(info)

Use two lines here and WTFMove(info)

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:-124
&gt; -    bool m_isValid { false };

o/\o

&gt; Source/WebCore/platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:117
&gt; +        ASSERT(mappedBuffer.get());
&gt; +        if (!mappedBuffer.get()) {

You can remove the .get() here now.

&gt; Source/WebCore/platform/graphics/gstreamer/eme/GStreamerEMEUtilities.h:48
&gt; +        m_payload = mappedInitData-&gt;tryCreateSharedBuffer();

m_payload is indeed used without any null-check in append().

&gt; Source/WebCore/platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.cpp:231
&gt; +    webKitMediaClearKeyDecryptorFindAndSetKey(priv, mappedKeyIdBuffer.releaseNonNull());

Why not move instead? and make webKitMediaClearKeyDecryptorFindAndSetKey receive a RefPtr&lt;&gt;&amp;&amp; ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1493236</commentid>
    <comment_count>17</comment_count>
      <attachid>358774</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2019-01-10 01:22:18 -0800</bug_when>
    <thetext>Comment on attachment 358774
Patch

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

Other than a couple cosmetic/minor things, LGTM

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:89
&gt; +        return adoptRef(new GstMappedBuffer(buffer, info));

I&apos;d move the info here

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:112
&gt; +    GstMappedBuffer(GstBuffer* buffer, GstMapInfo info)
&gt; +        : m_buffer(buffer), m_info(info)

GstMapInfo&amp;&amp; and move to avoid a double copy

&gt; Source/WebCore/platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:117
&gt; +        ASSERT(mappedBuffer.get());
&gt; +        if (!mappedBuffer.get()) {

I guess you don&apos;t need the .get() here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1493281</commentid>
    <comment_count>18</comment_count>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2019-01-10 07:03:17 -0800</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #16)
&gt; Comment on attachment 358774 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=358774&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/SharedBuffer.h:137
&gt; &gt; +        static Ref&lt;DataSegment&gt; create(RefPtr&lt;GstMappedBuffer&gt; data) { return adoptRef(*new DataSegment(WTFMove(data))); }
&gt; 
&gt; &amp;&amp;

Done.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp:366
&gt; &gt; +        ASSERT_NOT_REACHED();
&gt; 
&gt; Why do we assert? is the caller expected to do the check? If that&apos;s the case
&gt; then I think it&apos;s better to return Ref&lt;&gt; and use release assert (and remove
&gt; the &apos;try&apos; from the name). Then we can remove all the null-checks in the
&gt; callers.

Completely agree, much better to assert here and not make callers null check. Done.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:89
&gt; &gt; +        return adoptRef(new GstMappedBuffer(buffer, info));
&gt; 
&gt; WTFMove(info)

Done.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:111
&gt; &gt; +    GstMappedBuffer(GstBuffer* buffer, GstMapInfo info)
&gt; 
&gt; GstMapInfo&amp;&amp;

Done.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:112
&gt; &gt; +        : m_buffer(buffer), m_info(info)
&gt; 
&gt; Use two lines here and WTFMove(info)

Done.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:117
&gt; &gt; +        ASSERT(mappedBuffer.get());
&gt; &gt; +        if (!mappedBuffer.get()) {
&gt; 
&gt; You can remove the .get() here now.

Yep, done.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/eme/GStreamerEMEUtilities.h:48
&gt; &gt; +        m_payload = mappedInitData-&gt;tryCreateSharedBuffer();
&gt; 
&gt; m_payload is indeed used without any null-check in append().

Indeed, no longer a problem with the RELEASE_ASSERT now :)

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.cpp:231
&gt; &gt; +    webKitMediaClearKeyDecryptorFindAndSetKey(priv, mappedKeyIdBuffer.releaseNonNull());
&gt; 
&gt; Why not move instead? and make webKitMediaClearKeyDecryptorFindAndSetKey
&gt; receive a RefPtr&lt;&gt;&amp;&amp; ?

Done.

Thank you for the reviews, think we&apos;re in pretty good shape now!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1493283</commentid>
    <comment_count>19</comment_count>
      <attachid>358790</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2019-01-10 07:07:00 -0800</bug_when>
    <thetext>Created attachment 358790
Patch

Address review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1493631</commentid>
    <comment_count>20</comment_count>
      <attachid>358790</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2019-01-10 23:29:55 -0800</bug_when>
    <thetext>Comment on attachment 358790
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.cpp:153
&gt; -static gboolean webKitMediaClearKeyDecryptorFindAndSetKey(WebKitMediaClearKeyDecryptPrivate* priv, const WebCore::GstMappedBuffer&amp; keyIDBuffer)
&gt; +static gboolean webKitMediaClearKeyDecryptorFindAndSetKey(WebKitMediaClearKeyDecryptPrivate* priv, RefPtr&lt;WebCore::GstMappedBuffer&gt;&amp;&amp; keyIDBuffer)

Nit: I don&apos;t see a reason to change this from const &amp; to &amp;&amp;, even when callers don&apos;t user this anymore. We are trasferring ownership of what is passed here and we don&apos;t need to.

Talking about the references, the RefPtr is ok, of course.

Other than this, the patch LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1493643</commentid>
    <comment_count>21</comment_count>
      <attachid>358790</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-01-11 01:00:21 -0800</bug_when>
    <thetext>Comment on attachment 358790
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.cpp:153
&gt;&gt; +static gboolean webKitMediaClearKeyDecryptorFindAndSetKey(WebKitMediaClearKeyDecryptPrivate* priv, RefPtr&lt;WebCore::GstMappedBuffer&gt;&amp;&amp; keyIDBuffer)
&gt; 
&gt; Nit: I don&apos;t see a reason to change this from const &amp; to &amp;&amp;, even when callers don&apos;t user this anymore. We are trasferring ownership of what is passed here and we don&apos;t need to.
&gt; 
&gt; Talking about the references, the RefPtr is ok, of course.
&gt; 
&gt; Other than this, the patch LGTM.

I suggested it because the reference was released when passed to this function, but I don&apos;t know why. Of course it&apos;s also fine to simply pass a const reference .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494106</commentid>
    <comment_count>22</comment_count>
      <attachid>359026</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2019-01-14 03:23:38 -0800</bug_when>
    <thetext>Created attachment 359026
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494108</commentid>
    <comment_count>23</comment_count>
      <attachid>359026</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-01-14 03:25:47 -0800</bug_when>
    <thetext>Comment on attachment 359026
Patch for landing

Rejecting attachment 359026 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-01&apos;, &apos;validate-changelog&apos;, &apos;--check-oops&apos;, &apos;--non-interactive&apos;, 359026, &apos;--port=mac&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

ChangeLog entry in Source/WebCore/ChangeLog contains OOPS!.

Full output: https://webkit-queues.webkit.org/results/10742194</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494109</commentid>
    <comment_count>24</comment_count>
      <attachid>359027</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2019-01-14 03:54:21 -0800</bug_when>
    <thetext>Created attachment 359027
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494114</commentid>
    <comment_count>25</comment_count>
      <attachid>359027</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-01-14 04:31:20 -0800</bug_when>
    <thetext>Comment on attachment 359027
Patch for landing

Clearing flags on attachment: 359027

Committed r239921: &lt;https://trac.webkit.org/changeset/239921&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494115</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-01-14 04:31:22 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>357935</attachid>
            <date>2018-12-21 01:14:55 -0800</date>
            <delta_ts>2019-01-07 08:02:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-192977-20181221091454.patch</filename>
            <type>text/plain</type>
            <size>16286</size>
            <attacher name="Charlie Turner">cturner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5NDM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmFiOTExZmRmN2NiMzQ0
NmU1NmFmYThmNDlmZGJjY2Q1Mzg1OTM1Ni4uYTdhZjc0MTE5MzQ1ZjhlNmE3NDc0ODdiMmU5Zjc4
OGM0MzZmNjZjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDE4LTEyLTIxICBDaGFy
bGllIFR1cm5lciAgPGN0dXJuZXJAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVyXSBB
ZGQgc2hhcmVkQnVmZmVyIHV0aWxpdHkgdG8gR3N0TWFwcGVkQnVmZmVyLCBhbmQgYSB0ZXN0c3Vp
dGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5Mjk3
NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJv
ZHVjZSBhIHNoYXJlZEJ1ZmZlcigpIGhlbHBlciB0aGF0IHJldHVybnMgYSBjYWNoZWQgaW5zdGFu
Y2UKKyAgICAgICAgb2YgYSByZWFkLW9ubHkgU2hhcmVkQnVmZmVyIG92ZXIgdGhlIG1hcHBlZCBH
c3RCdWZmZXIncy4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gaW50cm9kdWNlcyBhIG5ldyBn
c3RyZWFtZXIgcG9ydCBBUEkgdGVzdAorICAgICAgICBkaXJlY3RvcnksIGFuZCBpbmNsdWRlcyBz
b21lIHRlc3RzIGZvciBHc3RNYXBwZWRCdWZmZXIuCisKKyAgICAgICAgTmV3IHRlc3RzIGFkZGVk
IGluIEFQSSB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9H
U3RyZWFtZXJDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FjaGVkU2hhcmVkQnVmZmVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXI6On5Hc3RNYXBwZWRCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjpzaGFyZWRCdWZmZXIgY29uc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24u
aDoKKyAgICAgICAgKFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlcjo6R3N0TWFwcGVkQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlcjo6ZGF0YSBjb25zdCk6CisKIDIwMTgt
MTItMTkgIE1pY2hhZWwgQ2F0YW56YXJvICA8bWNhdGFuemFyb0BpZ2FsaWEuY29tPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQsIGZpeCBHVEsgYnVpbGQgYWZ0ZXIgcjIzOTQxMApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1v
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVh
bWVyQ29tbW9uLmNwcAppbmRleCAxZmU4Yjg4MWUxOTk4MDZiMTIyZGE1NmY3MGY4MGMzNWVhYWNk
NjJhLi44NDFlOGQyMWE1NGNiNWM0OGZhMTdkMjk4NWYxYTNhZGY0MjQ0NDk3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29t
bW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
R1N0cmVhbWVyQ29tbW9uLmNwcApAQCAtMzU3LDYgKzM1NywzNyBAQCB2b2lkIGNvbm5lY3RTaW1w
bGVCdXNNZXNzYWdlQ2FsbGJhY2soR3N0RWxlbWVudCogcGlwZWxpbmUpCiAgICAgZ19zaWduYWxf
Y29ubmVjdChidXMuZ2V0KCksICJtZXNzYWdlIiwgR19DQUxMQkFDSyhzaW1wbGVCdXNNZXNzYWdl
Q2FsbGJhY2spLCBwaXBlbGluZSk7CiB9CiAKK3N0YXRpYyBMb2NrIGNhY2hlZFNoYXJlZEJ1ZmZl
cnNMb2NrOworc3RhdGljIEhhc2hNYXA8R3N0QnVmZmVyKiwgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4+
JiBjYWNoZWRTaGFyZWRCdWZmZXJzKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFz
aE1hcDxHc3RCdWZmZXIqLCBSZWZQdHI8U2hhcmVkQnVmZmVyPj4+IG1hcDsKKyAgICByZXR1cm4g
bWFwOworfQorCitHc3RNYXBwZWRCdWZmZXI6On5Hc3RNYXBwZWRCdWZmZXIoKQoreworICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2soY2FjaGVkU2hhcmVkQnVmZmVyc0xvY2spOworICAgIGF1dG8g
aXRlcmF0b3IgPSBjYWNoZWRTaGFyZWRCdWZmZXJzKCkuZmluZChtX2J1ZmZlcik7CisgICAgaWYg
KGl0ZXJhdG9yICE9IGNhY2hlZFNoYXJlZEJ1ZmZlcnMoKS5lbmQoKSkKKyAgICAgICAgY2FjaGVk
U2hhcmVkQnVmZmVycygpLnJlbW92ZShpdGVyYXRvcik7CisKKyAgICBpZiAobV9pc1ZhbGlkKQor
ICAgICAgICBnc3RfYnVmZmVyX3VubWFwKG1fYnVmZmVyLCAmbV9pbmZvKTsKKworICAgIG1faXNW
YWxpZCA9IGZhbHNlOworfQorCitSZWZQdHI8U2hhcmVkQnVmZmVyPiBHc3RNYXBwZWRCdWZmZXI6
OnNoYXJlZEJ1ZmZlcigpIGNvbnN0Cit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhjYWNo
ZWRTaGFyZWRCdWZmZXJzTG9jayk7CisgICAgaWYgKCFjYWNoZWRTaGFyZWRCdWZmZXJzKCkuY29u
dGFpbnMobV9idWZmZXIpKSB7CisgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGNhY2hlZEJ1
ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEoKSwgc2l6ZSgpKS5wdHIoKTsKKyAgICAg
ICAgY2FjaGVkU2hhcmVkQnVmZmVycygpLnNldChtX2J1ZmZlciwgV1RGTW92ZShjYWNoZWRCdWZm
ZXIpKTsKKyAgICB9CisKKyAgICByZXR1cm4gY2FjaGVkU2hhcmVkQnVmZmVycygpLmdldChtX2J1
ZmZlcik7Cit9CisKIH0KIAogI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVy
Q29tbW9uLmgKaW5kZXggMmVmMTU1MDJhMDA1NjMxZWU0ZDA3ZjdmYTMyYjU0ZjQ2OThjZmJjOC4u
OWUxYjFkNTdlNjE0YzlhMjU0MWJkOWZlOWY5OGRiNzAyN2M0OGNjMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFt
ZXJDb21tb24uaApAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgogI2lu
Y2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKICNpbmNsdWRlICJHVW5pcXVlUHRyR1N0cmVhbWVy
LmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8Z3N0L2dzdC5oPgogI2lu
Y2x1ZGUgPGdzdC92aWRlby92aWRlby1mb3JtYXQuaD4KICNpbmNsdWRlIDxnc3QvdmlkZW8vdmlk
ZW8taW5mby5oPgpAQCAtODAsMTUgKzgxLDYgQEAgaW5saW5lIEdzdENsb2NrVGltZSB0b0dzdENs
b2NrVGltZShjb25zdCBNZWRpYVRpbWUgJm1lZGlhVGltZSkKIGNsYXNzIEdzdE1hcHBlZEJ1ZmZl
ciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR3N0TWFwcGVkQnVmZmVyKTsKIHB1YmxpYzoK
LQotICAgIEdzdE1hcHBlZEJ1ZmZlcihHc3RNYXBwZWRCdWZmZXImJiBvdGhlcikKLSAgICAgICAg
OiBtX2J1ZmZlcihvdGhlci5tX2J1ZmZlcikKLSAgICAgICAgLCBtX2luZm8ob3RoZXIubV9pbmZv
KQotICAgICAgICAsIG1faXNWYWxpZChvdGhlci5tX2lzVmFsaWQpCi0gICAgewotICAgICAgICBv
dGhlci5tX2lzVmFsaWQgPSBmYWxzZTsKLSAgICB9Ci0KICAgICBHc3RNYXBwZWRCdWZmZXIoR3N0
QnVmZmVyKiBidWZmZXIsIEdzdE1hcEZsYWdzIGZsYWdzKQogICAgICAgICA6IG1fYnVmZmVyKGJ1
ZmZlcikKICAgICB7CkBAIC0xMDAsMTggKzkyLDIwIEBAIHB1YmxpYzoKICAgICBHc3RNYXBwZWRC
dWZmZXIoR3N0QnVmZmVyKiBidWZmZXIsIGludCBmbGFncykKICAgICAgICAgOiBHc3RNYXBwZWRC
dWZmZXIoYnVmZmVyLCBzdGF0aWNfY2FzdDxHc3RNYXBGbGFncz4oZmxhZ3MpKSB7IH0KIAotICAg
IH5Hc3RNYXBwZWRCdWZmZXIoKQorICAgIH5Hc3RNYXBwZWRCdWZmZXIoKTsKKworICAgIEdzdE1h
cHBlZEJ1ZmZlcihHc3RNYXBwZWRCdWZmZXImJiBvdGhlcikKKyAgICAgICAgOiBtX2J1ZmZlcihv
dGhlci5tX2J1ZmZlcikKKyAgICAgICAgLCBtX2luZm8ob3RoZXIubV9pbmZvKQorICAgICAgICAs
IG1faXNWYWxpZChvdGhlci5tX2lzVmFsaWQpCiAgICAgewotICAgICAgICBpZiAobV9pc1ZhbGlk
KQotICAgICAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcChtX2J1ZmZlciwgJm1faW5mbyk7Ci0gICAg
ICAgIG1faXNWYWxpZCA9IGZhbHNlOworICAgICAgICBvdGhlci5tX2lzVmFsaWQgPSBmYWxzZTsK
ICAgICB9CiAKICAgICB1aW50OF90KiBkYXRhKCkgeyBBU1NFUlQobV9pc1ZhbGlkKTsgcmV0dXJu
IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtX2luZm8uZGF0YSk7IH0KICAgICBjb25zdCB1aW50OF90
KiBkYXRhKCkgY29uc3QgeyBBU1NFUlQobV9pc1ZhbGlkKTsgcmV0dXJuIHN0YXRpY19jYXN0PHVp
bnQ4X3QqPihtX2luZm8uZGF0YSk7IH0KLQogICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyBBU1NF
UlQobV9pc1ZhbGlkKTsgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4obV9pbmZvLnNpemUpOyB9
Ci0KKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBzaGFyZWRCdWZmZXIoKSBjb25zdDsKICAgICBl
eHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9pc1ZhbGlkOyB9CiAKIHBy
aXZhdGU6CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5k
ZXggMDcwZTk3NzhiMThmMWM5NWJlZTc2YzRjOGNjMTljZTczOWY4NDViMi4uZGU4ODUwZTZlNTA1
MzU1ZTYzZjQyZjU4MzJlZmQzOGFhMWEyODRmMSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9n
CisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDE4LTEyLTIxICBDaGFy
bGllIFR1cm5lciAgPGN0dXJuZXJAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVyXSBB
ZGQgc2hhcmVkQnVmZmVyIHV0aWxpdHkgdG8gR3N0TWFwcGVkQnVmZmVyLCBhbmQgYSB0ZXN0c3Vp
dGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5Mjk3
NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBu
ZXcgcGxhdGZvcm0gZGlyZWN0b3J5IGZvciBHU3RyZWFtZXIgcG9ydHMsIGFuZCBpbnRyb2R1Y2Ug
c29tZQorICAgICAgICB0ZXN0cyBmb3IgdGhlIEdzdE1hcHBlZEJ1ZmZlciBjbGFzcy4KKworICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvUGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9QbGF0Zm9ybVdQRS5jbWFrZToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvZ3N0cmVhbWVyL0dTdHJlYW1lclRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OkdTdHJlYW1lclRlc3Q6OlNldFVwKToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OkdTdHJlYW1lclRlc3Q6OlRlYXJEb3duKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvZ3N0cmVhbWVyL0dTdHJlYW1lclRlc3QuaDogQWRkZWQuCisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2dzdHJlYW1lci9Hc3RNYXBwZWRCdWZmZXIuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1RfRik6CisKIDIwMTgtMTItMjAg
IENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtH
VEtdW1dQRV0gQnVtcCB3ZWJraXRndGstdGVzdC1mb250cyB0byAwLjAuOApkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdUSy5jbWFrZSBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggODQ0OTlkZTM5OGIyNWQyNWFjMGM5MzYwMmFhYWQx
ZDY5MGQzZGU4YS4uYzM0ZmFlMDdjZjNjNmIwYTM5YzM5OWZlZTMyY2QyNWMzYTBhYTdmNCAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC0yNSw2ICsyNSw3IEBAIGluY2x1
ZGVfZGlyZWN0b3JpZXMoCiBpbmNsdWRlX2RpcmVjdG9yaWVzKFNZU1RFTQogICAgICR7R0RLM19J
TkNMVURFX0RJUlN9CiAgICAgJHtHTElCX0lOQ0xVREVfRElSU30KKyAgICAke0dTVFJFQU1FUl9J
TkNMVURFX0RJUlN9CiAgICAgJHtHVEszX0lOQ0xVREVfRElSU30KICAgICAke0xJQlNPVVBfSU5D
TFVERV9ESVJTfQogKQpAQCAtOTMsNiArOTQsOCBAQCBhZGRfZXhlY3V0YWJsZShUZXN0V2ViQ29y
ZQogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvRE5TLmNwcAogICAgICR7
VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvRmlsZU1vbml0b3IuY3BwCiAgICAgJHtU
RVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV2ViQ29yZS9GaWxlU3lzdGVtLmNwcAorICAgICR7VEVT
VFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvZ3N0cmVhbWVyL0dzdE1hcHBlZEJ1ZmZlci5j
cHAKKyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3JlL2dzdHJlYW1lci9HU3Ry
ZWFtZXJUZXN0LmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvR3Jp
ZFBvc2l0aW9uLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvSFRN
TFBhcnNlcklkaW9tcy5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3Jl
L0xheW91dFVuaXQuY3BwCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3Jt
V1BFLmNtYWtlIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdQRS5jbWFrZQppbmRleCBm
YjFiNmI1MmEzNTYzODgwYTUyZjY4NTU4OGMyZTFmYmJlYWJkOWUxLi5iNjg3NzU5OGQ4NzdkZTZj
OGRhODZiNGViNTdjYzg2ZmYwYTJmN2VmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1BsYXRmb3JtV1BFLmNtYWtlCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1XUEUu
Y21ha2UKQEAgLTIzLDYgKzIzLDcgQEAgaW5jbHVkZV9kaXJlY3RvcmllcygKIGluY2x1ZGVfZGly
ZWN0b3JpZXMoU1lTVEVNCiAgICAgJHtDQUlST19JTkNMVURFX0RJUlN9CiAgICAgJHtHTElCX0lO
Q0xVREVfRElSU30KKyAgICAke0dTVFJFQU1FUl9JTkNMVURFX0RJUlN9CiAgICAgJHtMSUJTT1VQ
X0lOQ0xVREVfRElSU30KICAgICAke1dQRV9JTkNMVURFX0RJUlN9CiAgICAgJHtXUEVCQUNLRU5E
X0ZET19JTkNMVURFX0RJUlN9CkBAIC02MCw2ICs2MSw4IEBAIGFkZF9leGVjdXRhYmxlKFRlc3RX
ZWJDb3JlCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHNDb250cm9sbGVyLmNwcAogICAg
ICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvRmlsZU1vbml0b3IuY3BwCiAgICAg
JHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV2ViQ29yZS9GaWxlU3lzdGVtLmNwcAorICAgICR7
VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvZ3N0cmVhbWVyL0dzdE1hcHBlZEJ1ZmZl
ci5jcHAKKyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3JlL2dzdHJlYW1lci9H
U3RyZWFtZXJUZXN0LmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUv
SFRNTFBhcnNlcklkaW9tcy5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJD
b3JlL0xheW91dFVuaXQuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV2ViQ29y
ZS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL2dzdHJlYW1lci9HU3RyZWFtZXJUZXN0LmNwcCBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViQ29yZS9nc3RyZWFtZXIvR1N0cmVhbWVyVGVzdC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZTQ2NTk3MDc2NzBmNzVmZjQ4MDE0MzEwNzQ4MTViMjhiNzg1MjJlOAotLS0gL2Rldi9udWxs
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9nc3RyZWFtZXIvR1N0cmVh
bWVyVGVzdC5jcHAKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJ
Z2FsaWEsIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAxOCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5W
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoR1NUUkVBTUVSKQor
I2luY2x1ZGUgIkdTdHJlYW1lclRlc3QuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvR1N0cmVhbWVy
Q29tbW9uLmg+CisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCit2b2lkIEdTdHJlYW1lclRlc3Q6OlNl
dFVwKCkKK3sKKyAgICBpZiAoIWdzdF9pc19pbml0aWFsaXplZCgpKQorICAgICAgICBnc3RfaW5p
dChOVUxMLCBOVUxMKTsKK30KKwordm9pZCBHU3RyZWFtZXJUZXN0OjpUZWFyRG93bigpCit7Cisg
ICAgLy8gTWlnaHQgYmUgdGVtcHRpbmcgdG8gY2FsbCBnc3RfZGVpbnQoKSBoZXJlLCBkb24ndCwg
ZGVzcGl0ZSB0aGUgbmFtaW5nLAorICAgIC8vIGdzdF9pbml0KCkgZG9lc24ndCByZXZlcnNlIHRo
YXQgY2FsbC4KK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQorCisjZW5kaWYgLy8g
VVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9nc3RyZWFtZXIvR1N0cmVhbWVyVGVzdC5oIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJDb3JlL2dzdHJlYW1lci9HU3RyZWFtZXJUZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmIyY2JhZWU2
MTY1YzY1OTc5MTQ3MDg2YTdkMDFiMjExN2JmNWQ5YwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9nc3RyZWFtZXIvR1N0cmVhbWVyVGVzdC5oCkBA
IC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhLCBTLkwuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NUUkVBTUVSKQorCituYW1lc3BhY2UgVGVzdFdlYktp
dEFQSSB7CisKK2NsYXNzIEdTdHJlYW1lclRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7Citw
dWJsaWM6CisgICAgdm9pZCBTZXRVcCgpIG92ZXJyaWRlOworICAgIHZvaWQgVGVhckRvd24oKSBv
dmVycmlkZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKKworI2VuZGlmIC8v
IFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvZ3N0cmVhbWVyL0dzdE1hcHBlZEJ1ZmZlci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYkNvcmUvZ3N0cmVhbWVyL0dzdE1hcHBlZEJ1ZmZlci5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YzcwZmEwOTJiZWQ5OTgxOTIwMzIyYzkxNDQ1MWMxZGM5N2EzMjEyYgotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9nc3RyZWFtZXIvR3N0TWFwcGVk
QnVmZmVyLmNwcApAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJ
Z2FsaWEsIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAxOCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5W
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoR1NUUkVBTUVSKQor
CisjaW5jbHVkZSAiR1N0cmVhbWVyVGVzdC5oIgorI2luY2x1ZGUgIlRlc3QuaCIKKyNpbmNsdWRl
IDxXZWJDb3JlL0dTdHJlYW1lckNvbW1vbi5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
KworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitURVNUX0YoR1N0cmVhbWVyVGVzdCwgbWFw
cGVkQnVmZmVyQmFzaWNzKQoreworICAgIEdzdEJ1ZmZlciogYnVmID0gZ3N0X2J1ZmZlcl9uZXdf
YWxsb2NhdGUoTlVMTCwgNjQsIE5VTEwpOworCisgICAgR3N0TWFwcGVkQnVmZmVyIG1hcHBlZEJ1
ZihidWYsIEdTVF9NQVBfUkVBRCk7CisKKyAgICBFWFBFQ1RfVFJVRShtYXBwZWRCdWYpOworICAg
IEVYUEVDVF9FUShtYXBwZWRCdWYuc2l6ZSgpLCA2NCk7CisKKyAgICBHc3RNYXBwZWRCdWZmZXIg
bWFwcGVkQnVmMihidWYsIEdTVF9NQVBfUkVBRCk7CisgICAgRVhQRUNUX0VRKG1hcHBlZEJ1Ziwg
bWFwcGVkQnVmMik7CisgICAgRVhQRUNUX0VRKGJ1ZiwgbWFwcGVkQnVmKTsKKyAgICBFWFBFQ1Rf
RVEobWFwcGVkQnVmMiwgYnVmKTsKKworICAgIEdzdE1hcHBlZEJ1ZmZlciBtb3ZlZEJ1ZiA9IFdU
Rk1vdmUobWFwcGVkQnVmKTsKKyAgICBFWFBFQ1RfVFJVRShtb3ZlZEJ1Zik7CisgICAgRVhQRUNU
X0ZBTFNFKG1hcHBlZEJ1Zik7CisgICAgRVhQRUNUX0VRKG1vdmVkQnVmLnNpemUoKSwgNjQpOwor
ICAgIEVYUEVDVF9FUShtb3ZlZEJ1ZiwgbWFwcGVkQnVmMik7CisgICAgRVhQRUNUX0VRKGJ1Ziwg
bW92ZWRCdWYpOworfQorCitURVNUX0YoR1N0cmVhbWVyVGVzdCwgbWFwcGVkQnVmZmVyUmVhZFNh
bml0eSkKK3sKKyAgICBncG9pbnRlciBtZW1vcnkgPSBnX21hbGxvYygxNik7CisgICAgbWVtc2V0
KG1lbW9yeSwgJ3gnLCAxNik7CisgICAgR3N0QnVmZmVyKiBidWYgPSBnc3RfYnVmZmVyX25ld193
cmFwcGVkKG1lbW9yeSwgMTYpOworICAgIEdzdE1hcHBlZEJ1ZmZlciBtYXBwZWRCdWYoYnVmLCBH
U1RfTUFQX1JFQUQpOworICAgIEVYUEVDVF9FUShtYXBwZWRCdWYuc2l6ZSgpLCAxNik7CisgICAg
RVhQRUNUX0VRKG1lbWNtcChtZW1vcnksIG1hcHBlZEJ1Zi5kYXRhKCksIDE2KSwgMCk7CisgICAg
RVhQRUNUX0VRKG1lbWNtcChtZW1vcnksIG1hcHBlZEJ1Zi5zaGFyZWRCdWZmZXIoKS0+ZGF0YSgp
LCAxNiksIDApOworfQorCitURVNUX0YoR1N0cmVhbWVyVGVzdCwgbWFwcGVkQnVmZmVyV3JpdGVT
YW5pdHkpCit7CisgICAgZ3BvaW50ZXIgbWVtb3J5ID0gZ19tYWxsb2MoMTYpOworICAgIG1lbXNl
dChtZW1vcnksICd4JywgMTYpOworICAgIEdzdEJ1ZmZlciogYnVmID0gZ3N0X2J1ZmZlcl9uZXdf
d3JhcHBlZChtZW1vcnksIDE2KTsKKworICAgIEdzdE1hcHBlZEJ1ZmZlciBtYXBwZWRCdWYoYnVm
LCBHU1RfTUFQX1dSSVRFKTsKKyAgICBFWFBFQ1RfRVEobWFwcGVkQnVmLnNpemUoKSwgMTYpOwor
ICAgIG1lbXNldChtYXBwZWRCdWYuZGF0YSgpLCAneScsIG1hcHBlZEJ1Zi5zaXplKCkpOworCisg
ICAgRVhQRUNUX0VRKG1lbWNtcChtZW1vcnksIG1hcHBlZEJ1Zi5kYXRhKCksIDE2KSwgMCk7Cit9
CisKK1RFU1RfRihHU3RyZWFtZXJUZXN0LCBtYXBwZWRCdWZmZXJDYWNoZXNTaGFyZWRCdWZmZXJz
KQoreworICAgIEdzdEJ1ZmZlciogYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUoTlVMTCwg
NjQsIE5VTEwpOworCisgICAgR3N0TWFwcGVkQnVmZmVyIG1hcHBlZEJ1ZihidWYsIEdTVF9NQVBf
UkVBRCk7CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gc2hhcmVkQnVmID0gbWFwcGVkQnVmLnNo
YXJlZEJ1ZmZlcigpOworICAgIEVYUEVDVF9FUShzaGFyZWRCdWYuZ2V0KCksIG1hcHBlZEJ1Zi5z
aGFyZWRCdWZmZXIoKS5nZXQoKSk7CisgICAgRVhQRUNUX0VRKHNoYXJlZEJ1Zi5nZXQoKSwgbWFw
cGVkQnVmLnNoYXJlZEJ1ZmZlcigpLmdldCgpKTsKK30KKworVEVTVF9GKEdTdHJlYW1lclRlc3Qs
IG1hcHBlZEJ1ZmZlckRvZXNOb3RBZGRFeHRyYVJlZnMpCit7CisgICAgR3N0QnVmZmVyKiBidWYg
PSBnc3RfYnVmZmVyX25ldygpOworCisgICAgQVNTRVJUX0VRKEdTVF9PQkpFQ1RfUkVGQ09VTlQo
YnVmKSwgMSk7CisKKyAgICBHc3RNYXBwZWRCdWZmZXIgbWFwcGVkSXZCdWZmZXIoYnVmLCBHU1Rf
TUFQX1JFQUQpOworICAgIEFTU0VSVF9UUlVFKG1hcHBlZEl2QnVmZmVyKTsKKworICAgIEFTU0VS
VF9FUShHU1RfT0JKRUNUX1JFRkNPVU5UKGJ1ZiksIDEpOworfQorCit9IC8vIG5hbWVzcGFjZSBU
ZXN0V2ViS2l0QVBJCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358495</attachid>
            <date>2019-01-07 08:02:08 -0800</date>
            <delta_ts>2019-01-09 03:52:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-192977-20190107160206.patch</filename>
            <type>text/plain</type>
            <size>17039</size>
            <attacher name="Charlie Turner">cturner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5NjcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWJmZGFhNmU4Yzg0ZDE3
YjMxYTVhNTJjOTI0YmQ3MGQ4ZThlZjJjYS4uZjU2ZjUzOWZhMzBjNTk3NTkwYjQyODFmN2I2Mzc1
NGM3ODI1YWU2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDE5LTAxLTA3ICBDaGFy
bGllIFR1cm5lciAgPGN0dXJuZXJAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVyXSBB
ZGQgc2hhcmVkQnVmZmVyIHV0aWxpdHkgdG8gR3N0TWFwcGVkQnVmZmVyLCBhbmQgYSB0ZXN0c3Vp
dGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5Mjk3
NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJv
ZHVjZSBhIHNoYXJlZEJ1ZmZlcigpIGhlbHBlciB0aGF0IHJldHVybnMgYSBjYWNoZWQgaW5zdGFu
Y2UKKyAgICAgICAgb2YgYSByZWFkLW9ubHkgU2hhcmVkQnVmZmVyIG92ZXIgdGhlIG1hcHBlZCBH
c3RCdWZmZXIncy4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gaW50cm9kdWNlcyBhIG5ldyBn
c3RyZWFtZXIgcG9ydCBBUEkgdGVzdAorICAgICAgICBkaXJlY3RvcnksIGFuZCBpbmNsdWRlcyBz
b21lIHRlc3RzIGZvciBHc3RNYXBwZWRCdWZmZXIuCisKKyAgICAgICAgTmV3IHRlc3RzIGFkZGVk
IGluIEFQSSB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9H
U3RyZWFtZXJDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjp+
R3N0TWFwcGVkQnVmZmVyKTogTW92ZSB0aGUgZGVzdHJ1Y3RvcgorICAgICAgICB0byBhbiBpbXBs
ZW1lbnRhdGlvbiBmaWxlIHNpbmNlIGl0J3Mgbm8gbG9uZ2VyIHRyaXZpYWwuCisgICAgICAgIChX
ZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXI6OnNoYXJlZEJ1ZmZlciBjb25zdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5oOgorICAgICAgICAo
V2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjpHc3RNYXBwZWRCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3N0TWFwcGVkQnVmZmVyOjp+R3N0TWFwcGVkQnVmZmVyKTogRGVsZXRlZC4KKwogMjAx
OS0wMS0wNyAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CiAKICAgICAgICAg
W1dQRV0gVXNlIFdpZGdldCBib3VuZHMgZm9yIFBsYXRmb3JtU2NyZWVuIHJlY3RhbmdsZSBpbmZv
cm1hdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcAppbmRleCAwYmE0NzM5YTFkZTVkNDIx
NjhmZWVkN2EwNWI4NjgyZDYwNTdhOGIxLi5kN2Q3NzJkOWU5NmMyOWUzM2IxOGY5YjdhOTkwMTY0
MWM1NGE4YzI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcApAQCAtMzU3LDYgKzM1Nywy
OSBAQCB2b2lkIGNvbm5lY3RTaW1wbGVCdXNNZXNzYWdlQ2FsbGJhY2soR3N0RWxlbWVudCogcGlw
ZWxpbmUpCiAgICAgZ19zaWduYWxfY29ubmVjdChidXMuZ2V0KCksICJtZXNzYWdlIiwgR19DQUxM
QkFDSyhzaW1wbGVCdXNNZXNzYWdlQ2FsbGJhY2spLCBwaXBlbGluZSk7CiB9CiAKK0dzdE1hcHBl
ZEJ1ZmZlcjo6fkdzdE1hcHBlZEJ1ZmZlcigpCit7CisgICAgaWYgKG1faXNWYWxpZCkKKyAgICAg
ICAgZ3N0X2J1ZmZlcl91bm1hcChtX2J1ZmZlciwgJm1faW5mbyk7CisKKyAgICBtX2NhY2hlZFNo
YXJlZEJ1ZmZlciA9IG51bGxwdHI7CisgICAgbV9pc1ZhbGlkID0gZmFsc2U7Cit9CisKK1JlZlB0
cjxTaGFyZWRCdWZmZXI+IEdzdE1hcHBlZEJ1ZmZlcjo6c2hhcmVkQnVmZmVyKCkgY29uc3QKK3sK
KyAgICAvLyBTaGFyZWRCdWZmZXIgcHJvdmlkZXMgYSByZWFkLW9ubHkgdmlldyBvbiB3aGF0IGl0
IGV4cGVjdHMgYXJlCisgICAgLy8gaW1tdXRhYmxlIGRhdGEuIERvIG5vdCBjcmVhdGUgb25lIGlm
IHRoZSBidWZmZXIgaGFzIG5vdCBiZWVuCisgICAgLy8gbWFwcGVkIG9yIGlmIHRoZSBidWZmZXIg
aXMgd3JpdGFibGUgYW5kIGhlbmNlIG11dGFibGUuCisgICAgaWYgKCFtX2lzVmFsaWQgfHwgbV9p
bmZvLmZsYWdzICYgR1NUX01BUF9XUklURSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBpZiAoIW1fY2FjaGVkU2hhcmVkQnVmZmVyKQorICAgICAgICBtX2NhY2hlZFNoYXJlZEJ1ZmZl
ciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEoKSwgc2l6ZSgpKTsKKworICAgIHJldHVybiBt
X2NhY2hlZFNoYXJlZEJ1ZmZlcjsKK30KKwogfQogCiAjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9H
U3RyZWFtZXJDb21tb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9HU3RyZWFtZXJDb21tb24uaAppbmRleCAyZWYxNTUwMmEwMDU2MzFlZTRkMDdmN2ZhMzJi
NTRmNDY5OGNmYmM4Li41MTc4NDdjZWY4NjdhZjQwNjZhNTkyOWE1ZjFkZmM5ZmI1NTAzNDExIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0
cmVhbWVyQ29tbW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5oCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAiRmxv
YXRTaXplLmgiCiAjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgogI2luY2x1ZGUgIkdVbmlx
dWVQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlIDxn
c3QvZ3N0Lmg+CiAjaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLWZvcm1hdC5oPgogI2luY2x1ZGUg
PGdzdC92aWRlby92aWRlby1pbmZvLmg+CkBAIC04MCwxNSArODEsNiBAQCBpbmxpbmUgR3N0Q2xv
Y2tUaW1lIHRvR3N0Q2xvY2tUaW1lKGNvbnN0IE1lZGlhVGltZSAmbWVkaWFUaW1lKQogY2xhc3Mg
R3N0TWFwcGVkQnVmZmVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHc3RNYXBwZWRCdWZm
ZXIpOwogcHVibGljOgotCi0gICAgR3N0TWFwcGVkQnVmZmVyKEdzdE1hcHBlZEJ1ZmZlciYmIG90
aGVyKQotICAgICAgICA6IG1fYnVmZmVyKG90aGVyLm1fYnVmZmVyKQotICAgICAgICAsIG1faW5m
byhvdGhlci5tX2luZm8pCi0gICAgICAgICwgbV9pc1ZhbGlkKG90aGVyLm1faXNWYWxpZCkKLSAg
ICB7Ci0gICAgICAgIG90aGVyLm1faXNWYWxpZCA9IGZhbHNlOwotICAgIH0KLQogICAgIEdzdE1h
cHBlZEJ1ZmZlcihHc3RCdWZmZXIqIGJ1ZmZlciwgR3N0TWFwRmxhZ3MgZmxhZ3MpCiAgICAgICAg
IDogbV9idWZmZXIoYnVmZmVyKQogICAgIHsKQEAgLTEwMCwxOCArOTIsMjAgQEAgcHVibGljOgog
ICAgIEdzdE1hcHBlZEJ1ZmZlcihHc3RCdWZmZXIqIGJ1ZmZlciwgaW50IGZsYWdzKQogICAgICAg
ICA6IEdzdE1hcHBlZEJ1ZmZlcihidWZmZXIsIHN0YXRpY19jYXN0PEdzdE1hcEZsYWdzPihmbGFn
cykpIHsgfQogCi0gICAgfkdzdE1hcHBlZEJ1ZmZlcigpCisgICAgfkdzdE1hcHBlZEJ1ZmZlcigp
OworCisgICAgR3N0TWFwcGVkQnVmZmVyKEdzdE1hcHBlZEJ1ZmZlciYmIG90aGVyKQorICAgICAg
ICA6IG1fYnVmZmVyKG90aGVyLm1fYnVmZmVyKQorICAgICAgICAsIG1faW5mbyhvdGhlci5tX2lu
Zm8pCisgICAgICAgICwgbV9pc1ZhbGlkKG90aGVyLm1faXNWYWxpZCkKICAgICB7Ci0gICAgICAg
IGlmIChtX2lzVmFsaWQpCi0gICAgICAgICAgICBnc3RfYnVmZmVyX3VubWFwKG1fYnVmZmVyLCAm
bV9pbmZvKTsKLSAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CisgICAgICAgIG90aGVyLm1faXNW
YWxpZCA9IGZhbHNlOwogICAgIH0KIAogICAgIHVpbnQ4X3QqIGRhdGEoKSB7IEFTU0VSVChtX2lz
VmFsaWQpOyByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1faW5mby5kYXRhKTsgfQogICAg
IGNvbnN0IHVpbnQ4X3QqIGRhdGEoKSBjb25zdCB7IEFTU0VSVChtX2lzVmFsaWQpOyByZXR1cm4g
c3RhdGljX2Nhc3Q8dWludDhfdCo+KG1faW5mby5kYXRhKTsgfQotCiAgICAgc2l6ZV90IHNpemUo
KSBjb25zdCB7IEFTU0VSVChtX2lzVmFsaWQpOyByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90Piht
X2luZm8uc2l6ZSk7IH0KLQorICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHNoYXJlZEJ1ZmZlcigp
IGNvbnN0OwogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX2lz
VmFsaWQ7IH0KIAogcHJpdmF0ZToKQEAgLTExOSw2ICsxMTMsNyBAQCBwcml2YXRlOgogICAgIGZy
aWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgR3N0TWFwcGVkQnVmZmVyJiwgY29uc3QgR3N0QnVm
ZmVyKik7CiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBHc3RCdWZmZXIqIGEsIGNv
bnN0IEdzdE1hcHBlZEJ1ZmZlciYgYikgeyByZXR1cm4gb3BlcmF0b3I9PShiLCBhKTsgfQogCisg
ICAgbXV0YWJsZSBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2NhY2hlZFNoYXJlZEJ1ZmZlcjsKICAg
ICBHc3RCdWZmZXIqIG1fYnVmZmVyIHsgbnVsbHB0ciB9OwogICAgIEdzdE1hcEluZm8gbV9pbmZv
OwogICAgIGJvb2wgbV9pc1ZhbGlkIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5n
ZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAzZTY4ZjA3NmMxZTNmZmM2ZDhlOTc2MzIxODdm
OWJhOTdlM2E4ZGYyLi4zNjA5ZDgwMzc2YTgzMmQ0Njg5Y2UzYzA5MmVhOWRmNWYyMGExNWVmIDEw
MDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTkgQEAKKzIwMTktMDEtMDcgIENoYXJsaWUgVHVybmVyICA8Y3R1cm5lckBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHU3RyZWFtZXJdIEFkZCBzaGFyZWRCdWZmZXIgdXRpbGl0eSB0byBHc3RN
YXBwZWRCdWZmZXIsIGFuZCBhIHRlc3RzdWl0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkyOTc3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvUGxhdGZvcm1XUEUuY21ha2U6CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2dzdHJlYW1lci9HU3RyZWFtZXJUZXN0LmNwcDogQWRk
ZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpHU3RyZWFtZXJUZXN0OjpTZXRVcCk6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpHU3RyZWFtZXJUZXN0OjpUZWFyRG93bik6CisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2dzdHJlYW1lci9HU3RyZWFtZXJUZXN0Lmg6IEFk
ZGVkLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9nc3RyZWFtZXIvR3N0
TWFwcGVkQnVmZmVyLmNwcDogQWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUX0Yp
OgorCiAyMDE5LTAxLTA2ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29t
PgogCiAgICAgICAgIFtXaW5dW0NsYW5nXSBGaXggY29tcGlsYXRpb24gd2FybmluZ3Mgb2YgTWlu
aUJyb3dzZXIKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1HVEsuY21h
a2UgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDg0NDk5ZGUz
OThiMjVkMjVhYzBjOTM2MDJhYWFkMWQ2OTBkM2RlOGEuLmMzNGZhZTA3Y2YzYzZiMGEzOWMzOTlm
ZWUzMmNkMjVjM2EwYWE3ZjQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZv
cm1HVEsuY21ha2UKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdUSy5jbWFrZQpA
QCAtMjUsNiArMjUsNyBAQCBpbmNsdWRlX2RpcmVjdG9yaWVzKAogaW5jbHVkZV9kaXJlY3Rvcmll
cyhTWVNURU0KICAgICAke0dESzNfSU5DTFVERV9ESVJTfQogICAgICR7R0xJQl9JTkNMVURFX0RJ
UlN9CisgICAgJHtHU1RSRUFNRVJfSU5DTFVERV9ESVJTfQogICAgICR7R1RLM19JTkNMVURFX0RJ
UlN9CiAgICAgJHtMSUJTT1VQX0lOQ0xVREVfRElSU30KICkKQEAgLTkzLDYgKzk0LDggQEAgYWRk
X2V4ZWN1dGFibGUoVGVzdFdlYkNvcmUKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9X
ZWJDb3JlL0ROUy5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3JlL0Zp
bGVNb25pdG9yLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvRmls
ZVN5c3RlbS5jcHAKKyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3JlL2dzdHJl
YW1lci9Hc3RNYXBwZWRCdWZmZXIuY3BwCisgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMv
V2ViQ29yZS9nc3RyZWFtZXIvR1N0cmVhbWVyVGVzdC5jcHAKICAgICAke1RFU1RXRUJLSVRBUElf
RElSfS9UZXN0cy9XZWJDb3JlL0dyaWRQb3NpdGlvbi5jcHAKICAgICAke1RFU1RXRUJLSVRBUElf
RElSfS9UZXN0cy9XZWJDb3JlL0hUTUxQYXJzZXJJZGlvbXMuY3BwCiAgICAgJHtURVNUV0VCS0lU
QVBJX0RJUn0vVGVzdHMvV2ViQ29yZS9MYXlvdXRVbml0LmNwcApkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdQRS5jbWFrZSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxh
dGZvcm1XUEUuY21ha2UKaW5kZXggZmIxYjZiNTJhMzU2Mzg4MGE1MmY2ODU1ODhjMmUxZmJiZWFi
ZDllMS4uYjY4Nzc1OThkODc3ZGU2YzhkYTg2YjRlYjU3Y2M4NmZmMGEyZjdlZiAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdQRS5jbWFrZQorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1BsYXRmb3JtV1BFLmNtYWtlCkBAIC0yMyw2ICsyMyw3IEBAIGluY2x1ZGVfZGly
ZWN0b3JpZXMoCiBpbmNsdWRlX2RpcmVjdG9yaWVzKFNZU1RFTQogICAgICR7Q0FJUk9fSU5DTFVE
RV9ESVJTfQogICAgICR7R0xJQl9JTkNMVURFX0RJUlN9CisgICAgJHtHU1RSRUFNRVJfSU5DTFVE
RV9ESVJTfQogICAgICR7TElCU09VUF9JTkNMVURFX0RJUlN9CiAgICAgJHtXUEVfSU5DTFVERV9E
SVJTfQogICAgICR7V1BFQkFDS0VORF9GRE9fSU5DTFVERV9ESVJTfQpAQCAtNjAsNiArNjEsOCBA
QCBhZGRfZXhlY3V0YWJsZShUZXN0V2ViQ29yZQogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rl
c3RzQ29udHJvbGxlci5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3Jl
L0ZpbGVNb25pdG9yLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUv
RmlsZVN5c3RlbS5jcHAKKyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3JlL2dz
dHJlYW1lci9Hc3RNYXBwZWRCdWZmZXIuY3BwCisgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVz
dHMvV2ViQ29yZS9nc3RyZWFtZXIvR1N0cmVhbWVyVGVzdC5jcHAKICAgICAke1RFU1RXRUJLSVRB
UElfRElSfS9UZXN0cy9XZWJDb3JlL0hUTUxQYXJzZXJJZGlvbXMuY3BwCiAgICAgJHtURVNUV0VC
S0lUQVBJX0RJUn0vVGVzdHMvV2ViQ29yZS9MYXlvdXRVbml0LmNwcAogICAgICR7VEVTVFdFQktJ
VEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvTUlNRVR5cGVSZWdpc3RyeS5jcHAKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9nc3RyZWFtZXIvR1N0cmVhbWVyVGVz
dC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvZ3N0cmVhbWVyL0dTdHJl
YW1lclRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIwMmJkOTI3NGM2ZGVkZjkxMmFkYjU1MDJiMTM1MDIy
NTc5NDc4NjUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvZ3N0cmVhbWVyL0dTdHJlYW1lclRlc3QuY3BwCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhLCBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgg
TWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaWYgVVNFKEdTVFJFQU1FUikKKyNpbmNsdWRlICJHU3RyZWFtZXJUZXN0LmgiCisKKyNpbmNs
dWRlIDxXZWJDb3JlL0dTdHJlYW1lckNvbW1vbi5oPgorI2luY2x1ZGUgPGdzdC9nc3QuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKwor
dm9pZCBHU3RyZWFtZXJUZXN0OjpTZXRVcCgpCit7CisgICAgaWYgKCFnc3RfaXNfaW5pdGlhbGl6
ZWQoKSkKKyAgICAgICAgZ3N0X2luaXQoTlVMTCwgTlVMTCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVy
VGVzdDo6VGVhckRvd24oKQoreworICAgIC8vIEl0IG1pZ2h0IGJlIHRlbXB0aW5nIHRvIGNhbGwg
Z3N0X2RlaW5pdCgpIGhlcmUuIEhvd2V2ZXIsIHRoYXQKKyAgICAvLyB3aWxsIHRlYXIgZG93biB0
aGUgd2hvbGUgcHJvY2VzcyBmcm9tIHRoZSBHU3RyZWFtZXIgUE9WLCBhbmQgdGhlCisgICAgLy8g
c2VlbWluZ2x5IHN5bW1ldHJpY2FsIGNhbGwgdG8gZ3N0X2luaXQoKSB3aWxsIGZhaWwgdG8KKyAg
ICAvLyBpbml0aWFsaXplIEdTdHJlYW1lciBjb3JyZWN0bHkuCit9CisKK30gLy8gbmFtZXNwYWNl
IFRlc3RXZWJLaXRBUEkKKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvZ3N0cmVhbWVyL0dTdHJlYW1lclRlc3Qu
aCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9nc3RyZWFtZXIvR1N0cmVhbWVy
VGVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjZiMmNiYWVlNjE2NWM2NTk3OTE0NzA4NmE3ZDAxYjIxMTdiZjVk
OWMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
Z3N0cmVhbWVyL0dTdHJlYW1lclRlc3QuaApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE4IElnYWxpYSwgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDE4IE1ldHJvbG9n
aWNhbCBHcm91cCBCLlYuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKEdTVFJF
QU1FUikKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitjbGFzcyBHU3RyZWFtZXJUZXN0
IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHVibGljOgorICAgIHZvaWQgU2V0VXAoKSBvdmVy
cmlkZTsKKyAgICB2b2lkIFRlYXJEb3duKCkgb3ZlcnJpZGU7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBUZXN0V2ViS2l0QVBJCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2dzdHJlYW1lci9Hc3RNYXBwZWRCdWZm
ZXIuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2dzdHJlYW1lci9Hc3RN
YXBwZWRCdWZmZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhhMTVmNzFlNmRlY2I2OTM2YzVmMjMwYjBlZTRi
ZDFkMzhjZDcwZDYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvZ3N0cmVhbWVyL0dzdE1hcHBlZEJ1ZmZlci5jcHAKQEAgLTAsMCArMSwxMTcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhLCBTLkwuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgVVNFKEdTVFJFQU1FUikKKworI2luY2x1ZGUgIkdTdHJlYW1lclRlc3QuaCIK
KyNpbmNsdWRlICJUZXN0LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HU3RyZWFtZXJDb21tb24uaD4K
KwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsK
KworVEVTVF9GKEdTdHJlYW1lclRlc3QsIG1hcHBlZEJ1ZmZlckJhc2ljcykKK3sKKyAgICBHUmVm
UHRyPEdzdEJ1ZmZlcj4gYnVmID0gYWRvcHRHUmVmKGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlKG51
bGxwdHIsIDY0LCBudWxscHRyKSk7CisKKyAgICBHc3RNYXBwZWRCdWZmZXIgbWFwcGVkQnVmKGJ1
Zi5nZXQoKSwgR1NUX01BUF9SRUFEKTsKKworICAgIEVYUEVDVF9UUlVFKG1hcHBlZEJ1Zik7Cisg
ICAgRVhQRUNUX0VRKG1hcHBlZEJ1Zi5zaXplKCksIDY0KTsKKworICAgIEdzdE1hcHBlZEJ1ZmZl
ciBtYXBwZWRCdWYyKGJ1Zi5nZXQoKSwgR1NUX01BUF9SRUFEKTsKKyAgICBFWFBFQ1RfRVEobWFw
cGVkQnVmLCBtYXBwZWRCdWYyKTsKKyAgICBFWFBFQ1RfRVEoYnVmLmdldCgpLCBtYXBwZWRCdWYp
OworICAgIEVYUEVDVF9FUShtYXBwZWRCdWYyLCBidWYuZ2V0KCkpOworCisgICAgR3N0TWFwcGVk
QnVmZmVyIG1vdmVkQnVmID0gV1RGTW92ZShtYXBwZWRCdWYpOworICAgIEVYUEVDVF9UUlVFKG1v
dmVkQnVmKTsKKyAgICBFWFBFQ1RfRkFMU0UobWFwcGVkQnVmKTsKKyAgICBFWFBFQ1RfRVEobW92
ZWRCdWYuc2l6ZSgpLCA2NCk7CisgICAgRVhQRUNUX0VRKG1vdmVkQnVmLCBtYXBwZWRCdWYyKTsK
KyAgICBFWFBFQ1RfRVEoYnVmLmdldCgpLCBtb3ZlZEJ1Zik7Cit9CisKK1RFU1RfRihHU3RyZWFt
ZXJUZXN0LCBtYXBwZWRCdWZmZXJSZWFkU2FuaXR5KQoreworICAgIGdwb2ludGVyIG1lbW9yeSA9
IGdfbWFsbG9jKDE2KTsKKyAgICBtZW1zZXQobWVtb3J5LCAneCcsIDE2KTsKKyAgICBHUmVmUHRy
PEdzdEJ1ZmZlcj4gYnVmID0gYWRvcHRHUmVmKGdzdF9idWZmZXJfbmV3X3dyYXBwZWQobWVtb3J5
LCAxNikpOworICAgIEdzdE1hcHBlZEJ1ZmZlciBtYXBwZWRCdWYoYnVmLmdldCgpLCBHU1RfTUFQ
X1JFQUQpOworICAgIEVYUEVDVF9FUShtYXBwZWRCdWYuc2l6ZSgpLCAxNik7CisgICAgRVhQRUNU
X0VRKG1lbWNtcChtZW1vcnksIG1hcHBlZEJ1Zi5kYXRhKCksIDE2KSwgMCk7CisgICAgRVhQRUNU
X0VRKG1lbWNtcChtZW1vcnksIG1hcHBlZEJ1Zi5zaGFyZWRCdWZmZXIoKS0+ZGF0YSgpLCAxNiks
IDApOworfQorCitURVNUX0YoR1N0cmVhbWVyVGVzdCwgbWFwcGVkQnVmZmVyV3JpdGVTYW5pdHkp
Cit7CisgICAgZ3BvaW50ZXIgbWVtb3J5ID0gZ19tYWxsb2MoMTYpOworICAgIG1lbXNldChtZW1v
cnksICd4JywgMTYpOworICAgIEdSZWZQdHI8R3N0QnVmZmVyPiBidWYgPSBhZG9wdEdSZWYoZ3N0
X2J1ZmZlcl9uZXdfd3JhcHBlZChtZW1vcnksIDE2KSk7CisKKyAgICBHc3RNYXBwZWRCdWZmZXIg
bWFwcGVkQnVmKGJ1Zi5nZXQoKSwgR1NUX01BUF9XUklURSk7CisgICAgRVhQRUNUX0VRKG1hcHBl
ZEJ1Zi5zaXplKCksIDE2KTsKKyAgICBtZW1zZXQobWFwcGVkQnVmLmRhdGEoKSwgJ3knLCBtYXBw
ZWRCdWYuc2l6ZSgpKTsKKworICAgIEVYUEVDVF9FUShtZW1jbXAobWVtb3J5LCBtYXBwZWRCdWYu
ZGF0YSgpLCAxNiksIDApOworCisgICAgLy8gV2Ugc2hvdWxkIG5vdCBzaGFyZSBhIHdyaXRhYmxl
IGJ1ZmZlci4KKyAgICBBU1NFUlRfRkFMU0UobWFwcGVkQnVmLnNoYXJlZEJ1ZmZlcigpKTsKK30K
KworVEVTVF9GKEdTdHJlYW1lclRlc3QsIG1hcHBlZEJ1ZmZlckNhY2hlc1NoYXJlZEJ1ZmZlcnMp
Cit7CisgICAgR1JlZlB0cjxHc3RCdWZmZXI+IGJ1ZiA9IGFkb3B0R1JlZihnc3RfYnVmZmVyX25l
d19hbGxvY2F0ZShudWxscHRyLCA2NCwgbnVsbHB0cikpOworCisgICAgR3N0TWFwcGVkQnVmZmVy
IG1hcHBlZEJ1ZihidWYuZ2V0KCksIEdTVF9NQVBfUkVBRCk7CisgICAgUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gc2hhcmVkQnVmID0gbWFwcGVkQnVmLnNoYXJlZEJ1ZmZlcigpOworICAgIEVYUEVDVF9F
UShzaGFyZWRCdWYuZ2V0KCksIG1hcHBlZEJ1Zi5zaGFyZWRCdWZmZXIoKS5nZXQoKSk7CisgICAg
RVhQRUNUX0VRKHNoYXJlZEJ1Zi5nZXQoKSwgbWFwcGVkQnVmLnNoYXJlZEJ1ZmZlcigpLmdldCgp
KTsKK30KKworVEVTVF9GKEdTdHJlYW1lclRlc3QsIG1hcHBlZEJ1ZmZlckRvZXNOb3RBZGRFeHRy
YVJlZnMpCit7CisgICAgLy8gSXQgaXMgaW1wb3J0YW50IG5vdCB0byByZWYgdGhlIHBhc3NlZCBH
U3RyZWFtZXIgYnVmZmVycywgaWYgd2UKKyAgICAvLyBkbyBzbywgdGhlbiBpbiB0aGUgY2FzZSBv
ZiB3cml0YWJsZSBidWZmZXJzLCB0aGV5IGNhbiBiZWNvbWUKKyAgICAvLyB1bndyaXRhYmxlLCBl
dmVuIHRob3VnaCB3ZSBhcmUgdGhlIHNvbGUgb3duZXJzLiBXZSBhbHNvIGRvbid0CisgICAgLy8g
d2FudCB0byB0YWtlIG93bmVyc2hpcCBvZiB0aGUgYnVmZmVyIGZyb20gdGhlIHVzZXItY29kZSwg
c2luY2UKKyAgICAvLyBmb3IgdHJhbnNmb3JtSW5QbGFjZSB1c2UtY2FzZXMsIHRoYXQgd291bGQg
YnJlYWsuCisgICAgR1JlZlB0cjxHc3RCdWZmZXI+IGJ1ZiA9IGFkb3B0R1JlZihnc3RfYnVmZmVy
X25ldygpKTsKKworICAgIEFTU0VSVF9FUShHU1RfT0JKRUNUX1JFRkNPVU5UKGJ1Zi5nZXQoKSks
IDEpOworCisgICAgR3N0TWFwcGVkQnVmZmVyIG1hcHBlZEl2QnVmZmVyKGJ1Zi5nZXQoKSwgR1NU
X01BUF9SRUFEV1JJVEUpOworICAgIEFTU0VSVF9UUlVFKG1hcHBlZEl2QnVmZmVyKTsKKworICAg
IEFTU0VSVF9FUShHU1RfT0JKRUNUX1JFRkNPVU5UKGJ1Zi5nZXQoKSksIDEpOworfQorCit9IC8v
IG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358691</attachid>
            <date>2019-01-09 03:52:17 -0800</date>
            <delta_ts>2019-01-09 17:24:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-192977-20190109115216.patch</filename>
            <type>text/plain</type>
            <size>33751</size>
            <attacher name="Charlie Turner">cturner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5NjcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWJmZGFhNmU4Yzg0ZDE3
YjMxYTVhNTJjOTI0YmQ3MGQ4ZThlZjJjYS4uYWQ2NWM2MGQ2MDlkNzY3Y2MyZDEyNzZhYmY5N2Q2
ZWE5ZjVlNDQzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDE5LTAxLTA5ICBDaGFy
bGllIFR1cm5lciAgPGN0dXJuZXJAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVyXSBB
ZGQgc2hhcmVkQnVmZmVyIHV0aWxpdHkgdG8gR3N0TWFwcGVkQnVmZmVyLCBhbmQgYSB0ZXN0c3Vp
dGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5Mjk3
NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBh
IHV0aWxpdHkgbWV0aG9kIG9uIEdzdE1hcHBlZEJ1ZmZlciB0byByZXR1cm4gYSBTaGFyZWRCdWZm
ZXIKKyAgICAgICAgdmlldyBvdmVyIHRoZSBtYXBwZWQgZGF0YSB3aXRoIG5vIGNvcGllcy4KKwor
ICAgICAgICBUaGlzIHBhdGNoIGFsc28gaW50cm9kdWNlcyBhIG5ldyBnc3RyZWFtZXIgcG9ydCBB
UEkgdGVzdAorICAgICAgICBkaXJlY3RvcnksIGFuZCBpbmNsdWRlcyBzb21lIHRlc3RzIGZvciBH
c3RNYXBwZWRCdWZmZXIuCisKKyAgICAgICAgTmV3IHRlc3RzIGluIHRoZSBBUEkgc2VjdGlvbi4K
KworICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHA6IEFkZCBhIG5ldyBvdmVybG9h
ZCBmb3IKKyAgICAgICAgR3N0TWFwcGVkQnVmZmVyIHRoYXQgYWxsb3dzIHNoYXJpbmcgdGhlIG1h
cHBlZCBHU3RyZWFtZXIgYnVmZmVycworICAgICAgICB3aXRoIHplcm8gY29waWVzLgorICAgICAg
ICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U2hhcmVkQnVmZmVyOjpEYXRhU2VnbWVudDo6ZGF0YSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpzaXplIGNvbnN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9TaGFyZWRCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9nc3RyZWFt
ZXIvV2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwOgorICAgICAgICAod2ViS2l0V2Vi
QXVkaW9TcmNBbGxvY2F0ZUJ1ZmZlcnNBbmRSZW5kZXJBdWRpbyk6IFVwZGF0ZSB0byB1c2UKKyAg
ICAgICAgbmV3IFJlZjxHc3RNYXBwZWRCdWZmZXI+CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHc3RN
YXBwZWRCdWZmZXI6On5Hc3RNYXBwZWRCdWZmZXIpOiBNb3ZlZCB0bworICAgICAgICBpbXBsZW1l
bnRhdGlvbiBmaWxlLgorICAgICAgICAoV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjpzaGFyZWRC
dWZmZXIpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0
cmVhbWVyQ29tbW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXI6OmNyZWF0
ZSk6IE1ha2UgR3N0TWFwcGVkQnVmZmVyIHJlZiBjb3VudGVkCisgICAgICAgIChXZWJDb3JlOjpH
c3RNYXBwZWRCdWZmZXI6OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVy
OjpkYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlcjo6c2l6ZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXI6Om9wZXJhdG9yIGJvb2wg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjp+R3N0TWFwcGVkQnVm
ZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW5i
YW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmJh
bmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlUcmFja09mU2FtcGxlKToKKyAgICAg
ICAgVXBkYXRlIHRvIHVzZSBSZWY8R3N0TWFwcGVkQnVmZmVyPgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvR1N0cmVhbWVyRU1FVXRpbGl0aWVzLmg6CisgICAgICAg
IChXZWJDb3JlOjpJbml0RGF0YTo6SW5pdERhdGEpOiBEaXRvby4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVy
LmNwcDoKKyAgICAgICAgKHdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JGaW5kQW5kU2V0S2V5
KTogRGl0dG8uCisgICAgICAgICh3ZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdG9yRGVjcnlwdCk6
IERpdHRvLgorCiAyMDE5LTAxLTA3ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNv
bT4KIAogICAgICAgICBbV1BFXSBVc2UgV2lkZ2V0IGJvdW5kcyBmb3IgUGxhdGZvcm1TY3JlZW4g
cmVjdGFuZ2xlIGluZm9ybWF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TaGFyZWRCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVy
LmNwcAppbmRleCA0NmZjODExY2MzNTMzNWU5ZDNhZmE2ZGJiMzNlZjkxOWMyZDYwYWUyLi43NWNi
YWEwYmQ4OTk0OTZhN2Y4ZDkyM2U1MjY0MjhkMDI3MDBmZjkwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKQEAgLTU0LDYgKzU0LDE5IEBAIFNoYXJlZEJ1ZmZlcjo6
U2hhcmVkQnVmZmVyKFZlY3RvcjxjaGFyPiYmIGRhdGEpCiAgICAgYXBwZW5kKFdURk1vdmUoZGF0
YSkpOwogfQogCisjaWYgVVNFKEdTVFJFQU1FUikKK1JlZjxTaGFyZWRCdWZmZXI+IFNoYXJlZEJ1
ZmZlcjo6Y3JlYXRlKFJlZlB0cjxHc3RNYXBwZWRCdWZmZXI+IGJ1ZmZlcikKK3sKKyAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRCdWZmZXIoYnVmZmVyKSk7Cit9CisKK1NoYXJlZEJ1ZmZl
cjo6U2hhcmVkQnVmZmVyKFJlZlB0cjxHc3RNYXBwZWRCdWZmZXI+JiBtYXBwZWRCdWZmZXIpCisg
ICAgOiBtX3NpemUobWFwcGVkQnVmZmVyLT5zaXplKCkpCit7CisgICAgbV9zZWdtZW50cy5hcHBl
bmQoezAsIERhdGFTZWdtZW50OjpjcmVhdGUoV1RGTW92ZShtYXBwZWRCdWZmZXIpKX0pOworfQor
I2VuZGlmCisKIFJlZlB0cjxTaGFyZWRCdWZmZXI+IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlV2l0aENv
bnRlbnRzT2ZGaWxlKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpCiB7CiAgICAgYm9vbCBtYXBwaW5n
U3VjY2VzczsKQEAgLTIxMCw2ICsyMjMsOSBAQCBjb25zdCBjaGFyKiBTaGFyZWRCdWZmZXI6OkRh
dGFTZWdtZW50OjpkYXRhKCkgY29uc3QKICNlbmRpZgogI2lmIFVTRShHTElCKQogICAgICAgICBb
XShjb25zdCBHUmVmUHRyPEdCeXRlcz4mIGRhdGEpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgY2hhcio+KGdfYnl0ZXNfZ2V0X2RhdGEoZGF0YS5nZXQoKSwgbnVsbHB0cikpOyB9LAor
I2VuZGlmCisjaWYgVVNFKEdMSUIpCisgICAgICAgIFtdKGNvbnN0IFJlZlB0cjxHc3RNYXBwZWRC
dWZmZXI+JiBkYXRhKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihkYXRh
LT5kYXRhKCkpOyB9LAogI2VuZGlmCiAgICAgICAgIFtdKGNvbnN0IEZpbGVTeXN0ZW06Ok1hcHBl
ZEZpbGVEYXRhJiBkYXRhKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihk
YXRhLmRhdGEoKSk7IH0KICAgICApOwpAQCAtMjgzLDYgKzI5OSw5IEBAIHNpemVfdCBTaGFyZWRC
dWZmZXI6OkRhdGFTZWdtZW50OjpzaXplKCkgY29uc3QKICNlbmRpZgogI2lmIFVTRShHTElCKQog
ICAgICAgICBbXShjb25zdCBHUmVmUHRyPEdCeXRlcz4mIGRhdGEpIHsgcmV0dXJuIGdfYnl0ZXNf
Z2V0X3NpemUoZGF0YS5nZXQoKSk7IH0sCisjZW5kaWYKKyNpZiBVU0UoR1NUUkVBTUVSKQorICAg
ICAgICBbXShjb25zdCBSZWZQdHI8R3N0TWFwcGVkQnVmZmVyPiYgZGF0YSkgeyByZXR1cm4gZGF0
YS0+c2l6ZSgpOyB9LAogI2VuZGlmCiAgICAgICAgIFtdKGNvbnN0IEZpbGVTeXN0ZW06Ok1hcHBl
ZEZpbGVEYXRhJiBkYXRhKSB7IHJldHVybiBkYXRhLnNpemUoKTsgfQogICAgICk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCmluZGV4IGUyYWFlMmYzMDQ1NzM1NWY0ODllZWM0
YWI0ZWNmMWNlN2QzZTQ1MmYuLjJlMmRiMjMyZmZkMTM2NDgyMDk2OTY5ZGM3YWIwMGI1ZjMzMTVm
ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCkBAIC00OCw2ICs0OCwx
MCBAQAogdHlwZWRlZiBzdHJ1Y3QgX0dCeXRlcyBHQnl0ZXM7CiAjZW5kaWYKIAorI2lmIFVTRShH
U1RSRUFNRVIpCisjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCisjZW5kaWYKKwogI2lmIFVT
RShGT1VOREFUSU9OKQogT0JKQ19DTEFTUyBOU0FycmF5OwogT0JKQ19DTEFTUyBOU0RhdGE7CkBA
IC04OCw2ICs5Miw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3Jl
YXRlKEdCeXRlcyopOwogI2VuZGlmCiAKKyNpZiBVU0UoR1NUUkVBTUVSKQorICAgIHN0YXRpYyBS
ZWY8U2hhcmVkQnVmZmVyPiBjcmVhdGUoUmVmUHRyPEdzdE1hcHBlZEJ1ZmZlcj4pOworI2VuZGlm
CiAgICAgLy8gQ2FsbGluZyBkYXRhKCkgY2F1c2VzIGFsbCB0aGUgZGF0YSBzZWdtZW50cyB0byBi
ZSBjb3BpZWQgaW50byBvbmUgc2VnbWVudCBpZiB0aGV5IGFyZSBub3QgYWxyZWFkeS4KICAgICAv
LyBJdGVyYXRlIHRoZSBzZWdtZW50cyB1c2luZyBiZWdpbigpIGFuZCBlbmQoKSBpbnN0ZWFkLgog
ICAgIC8vIEZJWE1FOiBBdWRpdCB0aGUgY2FsbCBzaXRlcyBvZiB0aGlzIGZ1bmN0aW9uIGFuZCBy
ZXBsYWNlIHRoZW0gd2l0aCBpdGVyYXRpb24gaWYgcG9zc2libGUuCkBAIC0xMjUsNiArMTMyLDkg
QEAgcHVibGljOgogI2VuZGlmCiAjaWYgVVNFKEdMSUIpCiAgICAgICAgIHN0YXRpYyBSZWY8RGF0
YVNlZ21lbnQ+IGNyZWF0ZShHUmVmUHRyPEdCeXRlcz4mJiBkYXRhKSB7IHJldHVybiBhZG9wdFJl
ZigqbmV3IERhdGFTZWdtZW50KFdURk1vdmUoZGF0YSkpKTsgfQorI2VuZGlmCisjaWYgVVNFKEdT
VFJFQU1FUikKKyAgICAgICAgc3RhdGljIFJlZjxEYXRhU2VnbWVudD4gY3JlYXRlKFJlZlB0cjxH
c3RNYXBwZWRCdWZmZXI+JiYgZGF0YSkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBEYXRhU2VnbWVu
dChXVEZNb3ZlKGRhdGEpKSk7IH0KICNlbmRpZgogICAgICAgICBzdGF0aWMgUmVmPERhdGFTZWdt
ZW50PiBjcmVhdGUoRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmJiBkYXRhKSB7IHJldHVybiBh
ZG9wdFJlZigqbmV3IERhdGFTZWdtZW50KFdURk1vdmUoZGF0YSkpKTsgfQogCkBAIC0xNDIsNiAr
MTUyLDEwIEBAIHB1YmxpYzoKICNpZiBVU0UoR0xJQikKICAgICAgICAgRGF0YVNlZ21lbnQoR1Jl
ZlB0cjxHQnl0ZXM+JiYgZGF0YSkKICAgICAgICAgICAgIDogbV9pbW11dGFibGVEYXRhKFdURk1v
dmUoZGF0YSkpIHsgfQorI2VuZGlmCisjaWYgVVNFKEdMSUIpCisgICAgICAgIERhdGFTZWdtZW50
KFJlZlB0cjxHc3RNYXBwZWRCdWZmZXI+JiYgZGF0YSkKKyAgICAgICAgICAgIDogbV9pbW11dGFi
bGVEYXRhKFdURk1vdmUoZGF0YSkpIHsgfQogI2VuZGlmCiAgICAgICAgIERhdGFTZWdtZW50KEZp
bGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiYgZGF0YSkKICAgICAgICAgICAgIDogbV9pbW11dGFi
bGVEYXRhKFdURk1vdmUoZGF0YSkpIHsgfQpAQCAtMTU1LDYgKzE2OSw5IEBAIHB1YmxpYzoKICNl
bmRpZgogI2lmIFVTRShHTElCKQogICAgICAgICAgICAgR1JlZlB0cjxHQnl0ZXM+LAorI2VuZGlm
CisjaWYgVVNFKEdTVFJFQU1FUikKKyAgICAgICAgICAgIFJlZlB0cjxHc3RNYXBwZWRCdWZmZXI+
LAogI2VuZGlmCiAgICAgICAgICAgICBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YT4gbV9pbW11
dGFibGVEYXRhOwogICAgICAgICBmcmllbmQgY2xhc3MgU2hhcmVkQnVmZmVyOwpAQCAtMTkxLDYg
KzIwOCw5IEBAIHByaXZhdGU6CiAjaWYgVVNFKEdMSUIpCiAgICAgZXhwbGljaXQgU2hhcmVkQnVm
ZmVyKEdCeXRlcyopOwogI2VuZGlmCisjaWYgVVNFKEdTVFJFQU1FUikKKyAgICBleHBsaWNpdCBT
aGFyZWRCdWZmZXIoUmVmUHRyPEdzdE1hcHBlZEJ1ZmZlcj4mKTsKKyNlbmRpZgogCiAgICAgdm9p
ZCBjb21iaW5lSW50b09uZVNlZ21lbnQoKSBjb25zdDsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdT
dHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvV2Vi
S2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwCmluZGV4IDAyMTAzNTJiMGQxMGMyODZlOWMx
NDEwNWQ5ZWYzZDBkZGEyN2IzZWIuLmIxMDFhMzgyZWNiYTViMTdlZDMwZWZiMmRlZWVhYmU2YjFk
N2I3YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1l
ci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL1dlYktpdFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmNw
cApAQCAtMzI3LDcgKzMyNyw3IEBAIHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8R1JlZlB0cjxHc3RC
dWZmZXI+Pj4gd2ViS2l0V2ViQXVkaW9TcmNBbGxvY2F0ZUJ1ZmZlcnNBbmRSCiAKICAgICBWZWN0
b3I8R1JlZlB0cjxHc3RCdWZmZXI+PiBjaGFubmVsQnVmZmVyTGlzdDsKICAgICBjaGFubmVsQnVm
ZmVyTGlzdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHByaXYtPnNvdXJjZXMuc2l6ZSgpKTsKLSAg
ICBWZWN0b3I8R3N0TWFwcGVkQnVmZmVyPiBtYXBwZWRCdWZmZXJzOworICAgIFZlY3RvcjxSZWY8
R3N0TWFwcGVkQnVmZmVyPj4gbWFwcGVkQnVmZmVyczsKICAgICBtYXBwZWRCdWZmZXJzLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkocHJpdi0+c291cmNlcy5zaXplKCkpOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBwcml2LT5zb3VyY2VzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEdSZWZQ
dHI8R3N0QnVmZmVyPiBidWZmZXI7CkBAIC0zNDIsMTAgKzM0Miw4IEBAIHN0YXRpYyBPcHRpb25h
bDxWZWN0b3I8R1JlZlB0cjxHc3RCdWZmZXI+Pj4gd2ViS2l0V2ViQXVkaW9TcmNBbGxvY2F0ZUJ1
ZmZlcnNBbmRSCiAgICAgICAgIEFTU0VSVChidWZmZXIpOwogICAgICAgICBHU1RfQlVGRkVSX1RJ
TUVTVEFNUChidWZmZXIuZ2V0KCkpID0gdGltZXN0YW1wOwogICAgICAgICBHU1RfQlVGRkVSX0RV
UkFUSU9OKGJ1ZmZlci5nZXQoKSkgPSBkdXJhdGlvbjsKLSAgICAgICAgR3N0TWFwcGVkQnVmZmVy
IG1hcHBlZEJ1ZmZlcihidWZmZXIuZ2V0KCksIEdTVF9NQVBfUkVBRFdSSVRFKTsKLSAgICAgICAg
QVNTRVJUKG1hcHBlZEJ1ZmZlcik7Ci0gICAgICAgIG1hcHBlZEJ1ZmZlcnMudW5jaGVja2VkQXBw
ZW5kKFdURk1vdmUobWFwcGVkQnVmZmVyKSk7Ci0gICAgICAgIHByaXYtPmJ1cy0+c2V0Q2hhbm5l
bE1lbW9yeShpLCByZWludGVycHJldF9jYXN0PGZsb2F0Kj4obWFwcGVkQnVmZmVyc1tpXS5kYXRh
KCkpLCBwcml2LT5mcmFtZXNUb1B1bGwpOworICAgICAgICBtYXBwZWRCdWZmZXJzLnVuY2hlY2tl
ZEFwcGVuZChHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZShidWZmZXIuZ2V0KCksIEdTVF9NQVBfUkVB
RFdSSVRFKSk7CisgICAgICAgIHByaXYtPmJ1cy0+c2V0Q2hhbm5lbE1lbW9yeShpLCByZWludGVy
cHJldF9jYXN0PGZsb2F0Kj4obWFwcGVkQnVmZmVyc1tpXS0+ZGF0YSgpKSwgcHJpdi0+ZnJhbWVz
VG9QdWxsKTsKICAgICAgICAgY2hhbm5lbEJ1ZmZlckxpc3QudW5jaGVja2VkQXBwZW5kKFdURk1v
dmUoYnVmZmVyKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCmluZGV4IDBi
YTQ3MzlhMWRlNWQ0MjE2OGZlZWQ3YTA1Yjg2ODJkNjA1N2E4YjEuLmRjODY1NTRhN2RhMDI2ZWVh
OTIxYWMwOTVkMWNkYmJjYjFlMGY0ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCkBA
IC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJHc3RBbGxvY2F0b3JGYXN0TWFsbG9jLmgiCiAj
aW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUg
PGdzdC9hdWRpby9hdWRpby1pbmZvLmg+CiAjaW5jbHVkZSA8Z3N0L2dzdC5oPgogI2luY2x1ZGUg
PG11dGV4PgpAQCAtMzU3LDYgKzM1OCwyNSBAQCB2b2lkIGNvbm5lY3RTaW1wbGVCdXNNZXNzYWdl
Q2FsbGJhY2soR3N0RWxlbWVudCogcGlwZWxpbmUpCiAgICAgZ19zaWduYWxfY29ubmVjdChidXMu
Z2V0KCksICJtZXNzYWdlIiwgR19DQUxMQkFDSyhzaW1wbGVCdXNNZXNzYWdlQ2FsbGJhY2spLCBw
aXBlbGluZSk7CiB9CiAKK0dzdE1hcHBlZEJ1ZmZlcjo6fkdzdE1hcHBlZEJ1ZmZlcigpCit7Cisg
ICAgaWYgKG1faXNWYWxpZCkKKyAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcChtX2J1ZmZlciwgJm1f
aW5mbyk7CisKKyAgICBtX2lzVmFsaWQgPSBmYWxzZTsKK30KKworUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gR3N0TWFwcGVkQnVmZmVyOjpzaGFyZWRCdWZmZXIoKQoreworICAgIC8vIFNoYXJlZEJ1ZmZl
ciBwcm92aWRlcyBhIHJlYWQtb25seSB2aWV3IG9uIHdoYXQgaXQgZXhwZWN0cyBhcmUKKyAgICAv
LyBpbW11dGFibGUgZGF0YS4gRG8gbm90IGNyZWF0ZSBvbmUgaWYgdGhlIGJ1ZmZlciBoYXMgbm90
IGJlZW4KKyAgICAvLyBtYXBwZWQgb3IgaWYgdGhlIGJ1ZmZlciBpcyB3cml0YWJsZSBhbmQgaGVu
Y2UgbXV0YWJsZS4KKyAgICBpZiAoIW1faXNWYWxpZCB8fCBtX2luZm8uZmxhZ3MgJiBHU1RfTUFQ
X1dSSVRFKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBTaGFyZWRCdWZm
ZXI6OmNyZWF0ZSh0aGlzKTsKK30KKwogfQogCiAjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3Ry
ZWFtZXJDb21tb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9HU3RyZWFtZXJDb21tb24uaAppbmRleCAyZWYxNTUwMmEwMDU2MzFlZTRkMDdmN2ZhMzJiNTRm
NDY5OGNmYmM4Li5kMmQzMWYxOWYxMDg1OTRlOTAxODBhYTAwZGJlODUzZjhjZmFlMGIxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVh
bWVyQ29tbW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL0dTdHJlYW1lckNvbW1vbi5oCkBAIC0yNywxMCArMjcsMTIgQEAKICNpbmNsdWRlIDxnc3Qv
dmlkZW8vdmlkZW8tZm9ybWF0Lmg+CiAjaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLWluZm8uaD4K
ICNpbmNsdWRlIDx3dGYvTWVkaWFUaW1lLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZD
b3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW50U2l6ZTsKK2NsYXNz
IFNoYXJlZEJ1ZmZlcjsKIAogaW5saW5lIGJvb2wgd2Via2l0R3N0Q2hlY2tWZXJzaW9uKGd1aW50
IG1ham9yLCBndWludCBtaW5vciwgZ3VpbnQgbWljcm8pCiB7CkBAIC03NywxOCArNzksMjggQEAg
aW5saW5lIEdzdENsb2NrVGltZSB0b0dzdENsb2NrVGltZShjb25zdCBNZWRpYVRpbWUgJm1lZGlh
VGltZSkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R3N0Q2xvY2tUaW1lPih0b0dzdFVuc2lnbmVk
NjRUaW1lKG1lZGlhVGltZSkpOwogfQogCi1jbGFzcyBHc3RNYXBwZWRCdWZmZXIgeworY2xhc3Mg
R3N0TWFwcGVkQnVmZmVyIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEdzdE1hcHBlZEJ1
ZmZlcj4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdzdE1hcHBlZEJ1ZmZlcik7CiBwdWJs
aWM6CisgICAgc3RhdGljIFJlZjxHc3RNYXBwZWRCdWZmZXI+IGNyZWF0ZShHc3RCdWZmZXIqIGJ1
ZmZlciwgR3N0TWFwRmxhZ3MgZmxhZ3MpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBHc3RNYXBwZWRCdWZmZXIoYnVmZmVyLCBmbGFncykpOworICAgIH0KIAotICAgIEdzdE1h
cHBlZEJ1ZmZlcihHc3RNYXBwZWRCdWZmZXImJiBvdGhlcikKLSAgICAgICAgOiBtX2J1ZmZlcihv
dGhlci5tX2J1ZmZlcikKLSAgICAgICAgLCBtX2luZm8ob3RoZXIubV9pbmZvKQotICAgICAgICAs
IG1faXNWYWxpZChvdGhlci5tX2lzVmFsaWQpCisgICAgc3RhdGljIFJlZjxHc3RNYXBwZWRCdWZm
ZXI+IGNyZWF0ZShHc3RCdWZmZXIqIGJ1ZmZlciwgaW50IGZsYWdzKQogICAgIHsKLSAgICAgICAg
b3RoZXIubV9pc1ZhbGlkID0gZmFsc2U7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEdz
dE1hcHBlZEJ1ZmZlcihidWZmZXIsIGZsYWdzKSk7CiAgICAgfQogCisgICAgfkdzdE1hcHBlZEJ1
ZmZlcigpOworCisgICAgdWludDhfdCogZGF0YSgpIHsgQVNTRVJUKG1faXNWYWxpZCk7IHJldHVy
biBzdGF0aWNfY2FzdDx1aW50OF90Kj4obV9pbmZvLmRhdGEpOyB9CisgICAgY29uc3QgdWludDhf
dCogZGF0YSgpIGNvbnN0IHsgQVNTRVJUKG1faXNWYWxpZCk7IHJldHVybiBzdGF0aWNfY2FzdDx1
aW50OF90Kj4obV9pbmZvLmRhdGEpOyB9CisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IEFTU0VS
VChtX2lzVmFsaWQpOyByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2luZm8uc2l6ZSk7IH0K
KyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBzaGFyZWRCdWZmZXIoKTsKKyAgICBleHBsaWNpdCBv
cGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9pc1ZhbGlkOyB9CisKK3ByaXZhdGU6CiAg
ICAgR3N0TWFwcGVkQnVmZmVyKEdzdEJ1ZmZlciogYnVmZmVyLCBHc3RNYXBGbGFncyBmbGFncykK
ICAgICAgICAgOiBtX2J1ZmZlcihidWZmZXIpCiAgICAgewpAQCAtMTAwLDIxICsxMTIsNiBAQCBw
dWJsaWM6CiAgICAgR3N0TWFwcGVkQnVmZmVyKEdzdEJ1ZmZlciogYnVmZmVyLCBpbnQgZmxhZ3Mp
CiAgICAgICAgIDogR3N0TWFwcGVkQnVmZmVyKGJ1ZmZlciwgc3RhdGljX2Nhc3Q8R3N0TWFwRmxh
Z3M+KGZsYWdzKSkgeyB9CiAKLSAgICB+R3N0TWFwcGVkQnVmZmVyKCkKLSAgICB7Ci0gICAgICAg
IGlmIChtX2lzVmFsaWQpCi0gICAgICAgICAgICBnc3RfYnVmZmVyX3VubWFwKG1fYnVmZmVyLCAm
bV9pbmZvKTsKLSAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgfQotCi0gICAgdWludDhf
dCogZGF0YSgpIHsgQVNTRVJUKG1faXNWYWxpZCk7IHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90
Kj4obV9pbmZvLmRhdGEpOyB9Ci0gICAgY29uc3QgdWludDhfdCogZGF0YSgpIGNvbnN0IHsgQVNT
RVJUKG1faXNWYWxpZCk7IHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90Kj4obV9pbmZvLmRhdGEp
OyB9Ci0KLSAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgQVNTRVJUKG1faXNWYWxpZCk7IHJldHVy
biBzdGF0aWNfY2FzdDxzaXplX3Q+KG1faW5mby5zaXplKTsgfQotCi0gICAgZXhwbGljaXQgb3Bl
cmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1faXNWYWxpZDsgfQotCi1wcml2YXRlOgogICAg
IGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgR3N0TWFwcGVkQnVmZmVyJiwgY29uc3QgR3N0
TWFwcGVkQnVmZmVyJik7CiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBHc3RNYXBw
ZWRCdWZmZXImLCBjb25zdCBHc3RCdWZmZXIqKTsKICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IEdzdEJ1ZmZlciogYSwgY29uc3QgR3N0TWFwcGVkQnVmZmVyJiBiKSB7IHJldHVybiBv
cGVyYXRvcj09KGIsIGEpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW5iYW5kVGV4dFRyYWNr
UHJpdmF0ZUdTdHJlYW1lci5jcHAKaW5kZXggYzJkZDEyMzIwYzFkODljMTk1NjJhNjFlODI2ZDkw
ZmMwZTc2YmE0OS4uY2QyNTY1ZmQzMTdiMTZkZDBhMDQzZjQxMTQ2ZDVhZTMxNTY2MTUzOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0luYmFu
ZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyLmNw
cApAQCAtMTEyLDE2ICsxMTIsMTYgQEAgdm9pZCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVh
bWVyOjpub3RpZnlUcmFja09mU2FtcGxlKCkKICAgICAgICAgICAgIEdTVF9XQVJOSU5HKCJUcmFj
ayAlZCBnb3Qgc2FtcGxlIHdpdGggbm8gYnVmZmVyLiIsIG1faW5kZXgpOwogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgR3N0TWFwcGVkQnVmZmVyIG1hcHBlZEJ1ZmZl
cihidWZmZXIsIEdTVF9NQVBfUkVBRCk7Ci0gICAgICAgIEFTU0VSVChtYXBwZWRCdWZmZXIpOwot
ICAgICAgICBpZiAoIW1hcHBlZEJ1ZmZlcikgeworICAgICAgICBhdXRvIG1hcHBlZEJ1ZmZlciA9
IEdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKGJ1ZmZlciwgR1NUX01BUF9SRUFEKTsKKyAgICAgICAg
QVNTRVJUKG1hcHBlZEJ1ZmZlci5nZXQoKSk7CisgICAgICAgIGlmICghbWFwcGVkQnVmZmVyLmdl
dCgpKSB7CiAgICAgICAgICAgICBHU1RfV0FSTklORygiVHJhY2sgJWQgdW5hYmxlIHRvIG1hcCBi
dWZmZXIuIiwgbV9pbmRleCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0g
ICAgICAgIEdTVF9JTkZPKCJUcmFjayAlZCBwYXJzaW5nIHNhbXBsZTogJS4qcyIsIG1faW5kZXgs
IHN0YXRpY19jYXN0PGludD4obWFwcGVkQnVmZmVyLnNpemUoKSksCi0gICAgICAgICAgICByZWlu
dGVycHJldF9jYXN0PGNoYXIqPihtYXBwZWRCdWZmZXIuZGF0YSgpKSk7Ci0gICAgICAgIGNsaWVu
dCgpLT5wYXJzZVdlYlZUVEN1ZURhdGEocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obWFwcGVkQnVm
ZmVyLmRhdGEoKSksIG1hcHBlZEJ1ZmZlci5zaXplKCkpOworICAgICAgICBHU1RfSU5GTygiVHJh
Y2sgJWQgcGFyc2luZyBzYW1wbGU6ICUuKnMiLCBtX2luZGV4LCBzdGF0aWNfY2FzdDxpbnQ+KG1h
cHBlZEJ1ZmZlci0+c2l6ZSgpKSwKKyAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KG1hcHBlZEJ1ZmZlci0+ZGF0YSgpKSk7CisgICAgICAgIGNsaWVudCgpLT5wYXJzZVdlYlZUVEN1
ZURhdGEocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obWFwcGVkQnVmZmVyLT5kYXRhKCkpLCBtYXBw
ZWRCdWZmZXItPnNpemUoKSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0dTdHJlYW1lckVNRVV0aWxpdGllcy5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9HU3RyZWFt
ZXJFTUVVdGlsaXRpZXMuaAppbmRleCBiZWZmNzZhNWE2YThlNTU4MjZkNDc5YmQ2MGMzOGJlYjhi
YjMwOGEyLi5hMDg4M2Q5YTM1NDZhNTUyODQ5ZTZhMmJjODljODIwODNhYjE5YmI1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0dTdHJl
YW1lckVNRVV0aWxpdGllcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9lbWUvR1N0cmVhbWVyRU1FVXRpbGl0aWVzLmgKQEAgLTQwLDEyICs0MCwxMiBA
QCBwdWJsaWM6CiAgICAgSW5pdERhdGEoY29uc3QgU3RyaW5nJiBzeXN0ZW1JZCwgR3N0QnVmZmVy
KiBpbml0RGF0YSkKICAgICAgICAgOiBtX3N5c3RlbUlkKHN5c3RlbUlkKQogICAgIHsKLSAgICAg
ICAgR3N0TWFwcGVkQnVmZmVyIG1hcHBlZEluaXREYXRhKGluaXREYXRhLCBHU1RfTUFQX1JFQUQp
OwotICAgICAgICBpZiAoIW1hcHBlZEluaXREYXRhKSB7CisgICAgICAgIGF1dG8gbWFwcGVkSW5p
dERhdGEgPSBHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZShpbml0RGF0YSwgR1NUX01BUF9SRUFEKTsK
KyAgICAgICAgaWYgKCFtYXBwZWRJbml0RGF0YS5nZXQoKSkgewogICAgICAgICAgICAgR1NUX0VS
Uk9SKCJjYW5ub3QgbWFwICVzIHByb3RlY3Rpb24gZGF0YSIsIHN5c3RlbUlkLnV0ZjgoKS5kYXRh
KCkpOwogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KLSAgICAg
ICAgbV9wYXlsb2FkID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUobWFwcGVkSW5pdERhdGEuZGF0YSgp
LCBtYXBwZWRJbml0RGF0YS5zaXplKCkpOworICAgICAgICBtX3BheWxvYWQgPSBtYXBwZWRJbml0
RGF0YS0+c2hhcmVkQnVmZmVyKCk7CiAgICAgfQogCiAgICAgdm9pZCBhcHBlbmQoSW5pdERhdGEm
JiBpbml0RGF0YSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDbGVhcktl
eURlY3J5cHRvckdTdHJlYW1lci5jcHAKaW5kZXggZjk0MWU1MjhmNDdjYmQwNjk1NzliYzVlNjMz
NTgxZTZiNjEwYzcyMy4uNDE2MzNjNjViMWNhN2QzZWE3MzA5NGNhZWFmYWUyMmE5ODZiNTc2NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2Vt
ZS9XZWJLaXRDbGVhcktleURlY3J5cHRvckdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDbGVhcktleURlY3J5cHRv
ckdTdHJlYW1lci5jcHAKQEAgLTE2NSwxNCArMTY1LDE0IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJL
aXRNZWRpYUNsZWFyS2V5RGVjcnlwdG9yRmluZEFuZFNldEtleShXZWJLaXRNZWRpYUNsZWFyS2V5
RGVjCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBXZWJDb3JlOjpHc3RNYXBw
ZWRCdWZmZXIgbWFwcGVkS2V5VmFsdWVCdWZmZXIoa2V5QnVmZmVyLmdldCgpLCBHU1RfTUFQX1JF
QUQpOwotICAgIGlmICghbWFwcGVkS2V5VmFsdWVCdWZmZXIpIHsKKyAgICBhdXRvIG1hcHBlZEtl
eVZhbHVlQnVmZmVyID0gV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjpjcmVhdGUoa2V5QnVmZmVy
LmdldCgpLCBHU1RfTUFQX1JFQUQpOworICAgIGlmICghbWFwcGVkS2V5VmFsdWVCdWZmZXIuZ2V0
KCkpIHsKICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChwcml2LCAiRmFpbGVkIHRvIG1hcCBkZWNy
eXB0aW9uIGtleSIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgQVNTRVJU
KG1hcHBlZEtleVZhbHVlQnVmZmVyLnNpemUoKSA9PSBDTEVBUktFWV9TSVpFKTsKLSAgICBpZiAo
Z2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9jaXBoZXJfc2V0a2V5KHByaXYtPmhhbmRsZSwgbWFw
cGVkS2V5VmFsdWVCdWZmZXIuZGF0YSgpLCBtYXBwZWRLZXlWYWx1ZUJ1ZmZlci5zaXplKCkpKSB7
CisgICAgQVNTRVJUKG1hcHBlZEtleVZhbHVlQnVmZmVyLT5zaXplKCkgPT0gQ0xFQVJLRVlfU0la
RSk7CisgICAgaWYgKGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfY2lwaGVyX3NldGtleShwcml2
LT5oYW5kbGUsIG1hcHBlZEtleVZhbHVlQnVmZmVyLT5kYXRhKCksIG1hcHBlZEtleVZhbHVlQnVm
ZmVyLT5zaXplKCkpKSB7CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QocHJpdiwgImdjcnlfY2lw
aGVyX3NldGtleSBmYWlsZWQ6ICVzIiwgZ3BnX3N0cmVycm9yKGVycm9yKSk7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CkBAIC0xODgsMTkgKzE4OCwxOSBAQCBzdGF0aWMgZ2Jvb2xlYW4g
d2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRvckRlY3J5cHQoV2ViS2l0TWVkaWFDb21tb25FbmNy
eXB0aW9uRAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgV2ViQ29yZTo6R3N0
TWFwcGVkQnVmZmVyIG1hcHBlZElWQnVmZmVyKGl2QnVmZmVyLCBHU1RfTUFQX1JFQUQpOwotICAg
IGlmICghbWFwcGVkSVZCdWZmZXIpIHsKKyAgICBhdXRvIG1hcHBlZElWQnVmZmVyID0gV2ViQ29y
ZTo6R3N0TWFwcGVkQnVmZmVyOjpjcmVhdGUoaXZCdWZmZXIsIEdTVF9NQVBfUkVBRCk7CisgICAg
aWYgKCFtYXBwZWRJVkJ1ZmZlci5nZXQoKSkgewogICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNl
bGYsICJGYWlsZWQgdG8gbWFwIElWIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
ICAgICB1aW50OF90IGN0cltDTEVBUktFWV9TSVpFXTsKLSAgICBpZiAobWFwcGVkSVZCdWZmZXIu
c2l6ZSgpID09IDgpIHsKKyAgICBpZiAobWFwcGVkSVZCdWZmZXItPnNpemUoKSA9PSA4KSB7CiAg
ICAgICAgIG1lbXNldChjdHIgKyA4LCAwLCA4KTsKLSAgICAgICAgbWVtY3B5KGN0ciwgbWFwcGVk
SVZCdWZmZXIuZGF0YSgpLCA4KTsKKyAgICAgICAgbWVtY3B5KGN0ciwgbWFwcGVkSVZCdWZmZXIt
PmRhdGEoKSwgOCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKG1hcHBlZElWQnVmZmVy
LnNpemUoKSA9PSBDTEVBUktFWV9TSVpFKTsKLSAgICAgICAgbWVtY3B5KGN0ciwgbWFwcGVkSVZC
dWZmZXIuZGF0YSgpLCBDTEVBUktFWV9TSVpFKTsKKyAgICAgICAgbWVtY3B5KGN0ciwgbWFwcGVk
SVZCdWZmZXItPmRhdGEoKSwgQ0xFQVJLRVlfU0laRSk7CiAgICAgfQogCiAgICAgV2ViS2l0TWVk
aWFDbGVhcktleURlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElBX0NLX0RFQ1JZUFRf
R0VUX1BSSVZBVEUoV0VCS0lUX01FRElBX0NLX0RFQ1JZUFQoc2VsZikpOwpAQCAtMjE2LDE0ICsy
MTYsMTQgQEAgc3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JEZWNy
eXB0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkQKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIAotICAgIFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlciBtYXBwZWRLZXlJZEJ1ZmZlcihr
ZXlJREJ1ZmZlciwgR1NUX01BUF9SRUFEKTsKLSAgICBpZiAoIW1hcHBlZEtleUlkQnVmZmVyKSB7
CisgICAgYXV0byBtYXBwZWRLZXlJZEJ1ZmZlciA9IFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlcjo6
Y3JlYXRlKGtleUlEQnVmZmVyLCBHU1RfTUFQX1JFQUQpOworICAgIGlmICghbWFwcGVkS2V5SWRC
dWZmZXIuZ2V0KCkpIHsKICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAiRmFpbGVkIHRv
IG1hcCBrZXkgaWQgYnVmZmVyIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAg
ICBXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXIgbWFwcGVkQnVmZmVyKGJ1ZmZlciwgR1NUX01BUF9S
RUFEV1JJVEUpOwotICAgIGlmICghbWFwcGVkQnVmZmVyKSB7CisgICAgYXV0byBtYXBwZWRCdWZm
ZXIgPSBXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZShidWZmZXIsIEdTVF9NQVBfUkVB
RFdSSVRFKTsKKyAgICBpZiAoIW1hcHBlZEJ1ZmZlci5nZXQoKSkgewogICAgICAgICBHU1RfRVJS
T1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gbWFwIGJ1ZmZlciIpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQpAQCAtMjM1LDExICsyMzUsMTEgQEAgc3RhdGljIGdib29sZWFuIHdlYktp
dE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JEZWNyeXB0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlv
bkQKIAogICAgIGlmICghc3ViU2FtcGxlQ291bnQpIHsKICAgICAgICAgLy8gRnVsbCBzYW1wbGUg
ZW5jcnlwdGlvbi4KLSAgICAgICAgR1NUX1RSQUNFX09CSkVDVChzZWxmLCAiZnVsbCBzYW1wbGUg
ZW5jcnlwdGlvbjogJXp1IGVuY3J5cHRlZCBieXRlcyIsIG1hcHBlZEJ1ZmZlci5zaXplKCkpOwor
ICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNlbGYsICJmdWxsIHNhbXBsZSBlbmNyeXB0aW9uOiAl
enUgZW5jcnlwdGVkIGJ5dGVzIiwgbWFwcGVkQnVmZmVyLT5zaXplKCkpOwogCiAgICAgICAgIC8v
IENoZWNrIGlmIHRoZSBidWZmZXIgaXMgZW1wdHkuCi0gICAgICAgIGlmIChtYXBwZWRCdWZmZXIu
c2l6ZSgpKSB7Ci0gICAgICAgICAgICBjaXBoZXJFcnJvciA9IGdjcnlfY2lwaGVyX2RlY3J5cHQo
cHJpdi0+aGFuZGxlLCBtYXBwZWRCdWZmZXIuZGF0YSgpLCBtYXBwZWRCdWZmZXIuc2l6ZSgpLCAw
LCAwKTsKKyAgICAgICAgaWYgKG1hcHBlZEJ1ZmZlci0+c2l6ZSgpKSB7CisgICAgICAgICAgICBj
aXBoZXJFcnJvciA9IGdjcnlfY2lwaGVyX2RlY3J5cHQocHJpdi0+aGFuZGxlLCBtYXBwZWRCdWZm
ZXItPmRhdGEoKSwgbWFwcGVkQnVmZmVyLT5zaXplKCksIDAsIDApOwogICAgICAgICAgICAgaWYg
KGNpcGhlckVycm9yKSB7CiAgICAgICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzZWxmLCAi
ZnVsbCBzYW1wbGUgZGVjcnlwdGlvbiBmYWlsZWQ6ICVzIiwgZ3BnX3N0cmVycm9yKGNpcGhlckVy
cm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjU1LDE2ICsyNTUsMTYg
QEAgc3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JEZWNyeXB0KFdl
YktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkQKICAgICB9CiAKICAgICAvLyBTdWJzYW1wbGUgZW5j
cnlwdGlvbi4KLSAgICBXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXIgbWFwcGVkU3ViU2FtcGxlc0J1
ZmZlcihzdWJTYW1wbGVzQnVmZmVyLCBHU1RfTUFQX1JFQUQpOwotICAgIGlmICghbWFwcGVkU3Vi
U2FtcGxlc0J1ZmZlcikgeworICAgIGF1dG8gbWFwcGVkU3ViU2FtcGxlc0J1ZmZlciA9IFdlYkNv
cmU6OkdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKHN1YlNhbXBsZXNCdWZmZXIsIEdTVF9NQVBfUkVB
RCk7CisgICAgaWYgKCFtYXBwZWRTdWJTYW1wbGVzQnVmZmVyLmdldCgpKSB7CiAgICAgICAgIEdT
VF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBtYXAgc3Vic2FtcGxlIGJ1ZmZlciIpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgR1VuaXF1ZVB0cjxHc3RCeXRlUmVh
ZGVyPiByZWFkZXIoZ3N0X2J5dGVfcmVhZGVyX25ldyhtYXBwZWRTdWJTYW1wbGVzQnVmZmVyLmRh
dGEoKSwgbWFwcGVkU3ViU2FtcGxlc0J1ZmZlci5zaXplKCkpKTsKLSAgICBHU1RfREVCVUdfT0JK
RUNUKHNlbGYsICJwb3NpdGlvbjogJWQsIHNpemU6ICV6dSIsIHBvc2l0aW9uLCBtYXBwZWRCdWZm
ZXIuc2l6ZSgpKTsKKyAgICBHVW5pcXVlUHRyPEdzdEJ5dGVSZWFkZXI+IHJlYWRlcihnc3RfYnl0
ZV9yZWFkZXJfbmV3KG1hcHBlZFN1YlNhbXBsZXNCdWZmZXItPmRhdGEoKSwgbWFwcGVkU3ViU2Ft
cGxlc0J1ZmZlci0+c2l6ZSgpKSk7CisgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAicG9zaXRp
b246ICVkLCBzaXplOiAlenUiLCBwb3NpdGlvbiwgbWFwcGVkQnVmZmVyLT5zaXplKCkpOwogCi0g
ICAgd2hpbGUgKHBvc2l0aW9uIDwgbWFwcGVkQnVmZmVyLnNpemUoKSkgeworICAgIHdoaWxlIChw
b3NpdGlvbiA8IG1hcHBlZEJ1ZmZlci0+c2l6ZSgpKSB7CiAgICAgICAgIGd1aW50MTYgbkJ5dGVz
Q2xlYXIgPSAwOwogICAgICAgICBndWludDMyIG5CeXRlc0VuY3J5cHRlZCA9IDA7CiAKQEAgLTI3
NywxNCArMjc3LDE0IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlw
dG9yRGVjcnlwdChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25ECiAgICAgICAgICAgICBzYW1w
bGVJbmRleCsrOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbkJ5dGVzQ2xlYXIgPSAw
OwotICAgICAgICAgICAgbkJ5dGVzRW5jcnlwdGVkID0gbWFwcGVkQnVmZmVyLnNpemUoKSAtIHBv
c2l0aW9uOworICAgICAgICAgICAgbkJ5dGVzRW5jcnlwdGVkID0gbWFwcGVkQnVmZmVyLT5zaXpl
KCkgLSBwb3NpdGlvbjsKICAgICAgICAgfQogCi0gICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc2Vs
ZiwgInN1YnNhbXBsZSBpbmRleCAldSAtICVodSBieXRlcyBjbGVhciAodG9kbz0lenUpIiwgc2Ft
cGxlSW5kZXgsIG5CeXRlc0NsZWFyLCBtYXBwZWRCdWZmZXIuc2l6ZSgpIC0gcG9zaXRpb24pOwor
ICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNlbGYsICJzdWJzYW1wbGUgaW5kZXggJXUgLSAlaHUg
Ynl0ZXMgY2xlYXIgKHRvZG89JXp1KSIsIHNhbXBsZUluZGV4LCBuQnl0ZXNDbGVhciwgbWFwcGVk
QnVmZmVyLT5zaXplKCkgLSBwb3NpdGlvbik7CiAgICAgICAgIHBvc2l0aW9uICs9IG5CeXRlc0Ns
ZWFyOwogICAgICAgICBpZiAobkJ5dGVzRW5jcnlwdGVkKSB7Ci0gICAgICAgICAgICBHU1RfVFJB
Q0VfT0JKRUNUKHNlbGYsICJzdWJzYW1wbGUgaW5kZXggJXUgLSAldSBieXRlcyBlbmNyeXB0ZWQg
KHRvZG89JXp1KSIsIHNhbXBsZUluZGV4LCBuQnl0ZXNFbmNyeXB0ZWQsIG1hcHBlZEJ1ZmZlci5z
aXplKCkgLSBwb3NpdGlvbik7Ci0gICAgICAgICAgICBjaXBoZXJFcnJvciA9IGdjcnlfY2lwaGVy
X2RlY3J5cHQocHJpdi0+aGFuZGxlLCBtYXBwZWRCdWZmZXIuZGF0YSgpICsgcG9zaXRpb24sIG5C
eXRlc0VuY3J5cHRlZCwgMCwgMCk7CisgICAgICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNlbGYs
ICJzdWJzYW1wbGUgaW5kZXggJXUgLSAldSBieXRlcyBlbmNyeXB0ZWQgKHRvZG89JXp1KSIsIHNh
bXBsZUluZGV4LCBuQnl0ZXNFbmNyeXB0ZWQsIG1hcHBlZEJ1ZmZlci0+c2l6ZSgpIC0gcG9zaXRp
b24pOworICAgICAgICAgICAgY2lwaGVyRXJyb3IgPSBnY3J5X2NpcGhlcl9kZWNyeXB0KHByaXYt
PmhhbmRsZSwgbWFwcGVkQnVmZmVyLT5kYXRhKCkgKyBwb3NpdGlvbiwgbkJ5dGVzRW5jcnlwdGVk
LCAwLCAwKTsKICAgICAgICAgICAgIGlmIChjaXBoZXJFcnJvcikgewogICAgICAgICAgICAgICAg
IEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgInN1YiBzYW1wbGUgaW5kZXggJXUgZGVjcnlwdGlvbiBm
YWlsZWQ6ICVzIiwgc2FtcGxlSW5kZXgsIGdwZ19zdHJlcnJvcihjaXBoZXJFcnJvcikpOwogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCAzZTY4ZjA3NmMxZTNmZmM2ZDhlOTc2MzIxODdmOWJhOTdl
M2E4ZGYyLi4wNTBkYjE3MDdiMThkM2E0NmE0ZTFhOTc3YTZmZTExNDA0ZTlhODM4IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkg
QEAKKzIwMTktMDEtMDkgIENoYXJsaWUgVHVybmVyICA8Y3R1cm5lckBpZ2FsaWEuY29tPgorCisg
ICAgICAgIFtHU3RyZWFtZXJdIEFkZCBzaGFyZWRCdWZmZXIgdXRpbGl0eSB0byBHc3RNYXBwZWRC
dWZmZXIsIGFuZCBhIHRlc3RzdWl0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTkyOTc3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlOiBCdWlsZCB0
aGUgbmV3IEdTdHJlYW1lciB0ZXN0IGhhcm5lc3MKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Bs
YXRmb3JtV1BFLmNtYWtlOiBEaXR0by4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvZ3N0cmVhbWVyL0dTdHJlYW1lclRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OkdTdHJlYW1lclRlc3Q6OlNldFVwKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OkdTdHJlYW1lclRlc3Q6OlRlYXJEb3duKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvZ3N0cmVhbWVyL0dTdHJlYW1lclRlc3QuaDogQWRkZWQuCisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2dzdHJlYW1lci9Hc3RNYXBwZWRCdWZmZXIuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1RfRik6CisKIDIwMTktMDEtMDYgIEZ1
amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgW1dpbl1b
Q2xhbmddIEZpeCBjb21waWxhdGlvbiB3YXJuaW5ncyBvZiBNaW5pQnJvd3NlcgpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdUSy5jbWFrZSBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggODQ0OTlkZTM5OGIyNWQyNWFjMGM5MzYwMmFh
YWQxZDY5MGQzZGU4YS4uYzM0ZmFlMDdjZjNjNmIwYTM5YzM5OWZlZTMyY2QyNWMzYTBhYTdmNCAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC0yNSw2ICsyNSw3IEBAIGlu
Y2x1ZGVfZGlyZWN0b3JpZXMoCiBpbmNsdWRlX2RpcmVjdG9yaWVzKFNZU1RFTQogICAgICR7R0RL
M19JTkNMVURFX0RJUlN9CiAgICAgJHtHTElCX0lOQ0xVREVfRElSU30KKyAgICAke0dTVFJFQU1F
Ul9JTkNMVURFX0RJUlN9CiAgICAgJHtHVEszX0lOQ0xVREVfRElSU30KICAgICAke0xJQlNPVVBf
SU5DTFVERV9ESVJTfQogKQpAQCAtOTMsNiArOTQsOCBAQCBhZGRfZXhlY3V0YWJsZShUZXN0V2Vi
Q29yZQogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvRE5TLmNwcAogICAg
ICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvRmlsZU1vbml0b3IuY3BwCiAgICAg
JHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV2ViQ29yZS9GaWxlU3lzdGVtLmNwcAorICAgICR7
VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvZ3N0cmVhbWVyL0dzdE1hcHBlZEJ1ZmZl
ci5jcHAKKyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3JlL2dzdHJlYW1lci9H
U3RyZWFtZXJUZXN0LmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUv
R3JpZFBvc2l0aW9uLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUv
SFRNTFBhcnNlcklkaW9tcy5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJD
b3JlL0xheW91dFVuaXQuY3BwCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRm
b3JtV1BFLmNtYWtlIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdQRS5jbWFrZQppbmRl
eCBmYjFiNmI1MmEzNTYzODgwYTUyZjY4NTU4OGMyZTFmYmJlYWJkOWUxLi5iNjg3NzU5OGQ4Nzdk
ZTZjOGRhODZiNGViNTdjYzg2ZmYwYTJmN2VmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1BsYXRmb3JtV1BFLmNtYWtlCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1X
UEUuY21ha2UKQEAgLTIzLDYgKzIzLDcgQEAgaW5jbHVkZV9kaXJlY3RvcmllcygKIGluY2x1ZGVf
ZGlyZWN0b3JpZXMoU1lTVEVNCiAgICAgJHtDQUlST19JTkNMVURFX0RJUlN9CiAgICAgJHtHTElC
X0lOQ0xVREVfRElSU30KKyAgICAke0dTVFJFQU1FUl9JTkNMVURFX0RJUlN9CiAgICAgJHtMSUJT
T1VQX0lOQ0xVREVfRElSU30KICAgICAke1dQRV9JTkNMVURFX0RJUlN9CiAgICAgJHtXUEVCQUNL
RU5EX0ZET19JTkNMVURFX0RJUlN9CkBAIC02MCw2ICs2MSw4IEBAIGFkZF9leGVjdXRhYmxlKFRl
c3RXZWJDb3JlCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHNDb250cm9sbGVyLmNwcAog
ICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvRmlsZU1vbml0b3IuY3BwCiAg
ICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV2ViQ29yZS9GaWxlU3lzdGVtLmNwcAorICAg
ICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvZ3N0cmVhbWVyL0dzdE1hcHBlZEJ1
ZmZlci5jcHAKKyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3JlL2dzdHJlYW1l
ci9HU3RyZWFtZXJUZXN0LmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNv
cmUvSFRNTFBhcnNlcklkaW9tcy5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9X
ZWJDb3JlL0xheW91dFVuaXQuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV2Vi
Q29yZS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL2dzdHJlYW1lci9HU3RyZWFtZXJUZXN0LmNwcCBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9nc3RyZWFtZXIvR1N0cmVhbWVyVGVzdC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uM2Q3Zjk0ZGU4ZTdmZGE0ZWZkY2NiYjkzMmViYTM5MDg2ODdhYjhmNQotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9nc3RyZWFtZXIvR1N0
cmVhbWVyVGVzdC5jcHAKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OCBJZ2FsaWEsIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAxOCBNZXRyb2xvZ2ljYWwgR3JvdXAg
Qi5WLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoR1NUUkVBTUVS
KQorI2luY2x1ZGUgIkdTdHJlYW1lclRlc3QuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvR1N0cmVh
bWVyQ29tbW9uLmg+CisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCit2b2lkIEdTdHJlYW1lclRlc3Q6
OlNldFVwKCkKK3sKKyAgICBpZiAoIWdzdF9pc19pbml0aWFsaXplZCgpKQorICAgICAgICBnc3Rf
aW5pdChudWxscHRyLCBudWxscHRyKTsKK30KKwordm9pZCBHU3RyZWFtZXJUZXN0OjpUZWFyRG93
bigpCit7CisgICAgLy8gSXQgbWlnaHQgYmUgdGVtcHRpbmcgdG8gY2FsbCBnc3RfZGVpbml0KCkg
aGVyZS4gSG93ZXZlciwgdGhhdAorICAgIC8vIHdpbGwgdGVhciBkb3duIHRoZSB3aG9sZSBwcm9j
ZXNzIGZyb20gdGhlIEdTdHJlYW1lciBQT1YsIGFuZCB0aGUKKyAgICAvLyBzZWVtaW5nbHkgc3lt
bWV0cmljYWwgY2FsbCB0byBnc3RfaW5pdCgpIHdpbGwgZmFpbCB0bworICAgIC8vIGluaXRpYWxp
emUgR1N0cmVhbWVyIGNvcnJlY3RseS4KK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQ
SQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViQ29yZS9nc3RyZWFtZXIvR1N0cmVhbWVyVGVzdC5oIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2dzdHJlYW1lci9HU3RyZWFtZXJUZXN0LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNmIyY2JhZWU2MTY1YzY1OTc5MTQ3MDg2YTdkMDFiMjExN2JmNWQ5YwotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9nc3RyZWFtZXIvR1N0
cmVhbWVyVGVzdC5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgg
SWdhbGlhLCBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIu
Vi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NUUkVBTUVSKQorCituYW1l
c3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK2NsYXNzIEdTdHJlYW1lclRlc3QgOiBwdWJsaWMgdGVz
dGluZzo6VGVzdCB7CitwdWJsaWM6CisgICAgdm9pZCBTZXRVcCgpIG92ZXJyaWRlOworICAgIHZv
aWQgVGVhckRvd24oKSBvdmVycmlkZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRB
UEkKKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvZ3N0cmVhbWVyL0dzdE1hcHBlZEJ1ZmZlci5jcHAgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvZ3N0cmVhbWVyL0dzdE1hcHBlZEJ1ZmZlci5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uODBiMjU4OTk4MWQzYzUwNjlhNDczNWUyYjgyYmZmMjg4M2I0ZTcwNQot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9nc3Ry
ZWFtZXIvR3N0TWFwcGVkQnVmZmVyLmNwcApAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOCBJZ2FsaWEsIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAxOCBNZXRyb2xv
Z2ljYWwgR3JvdXAgQi5WLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBV
U0UoR1NUUkVBTUVSKQorCisjaW5jbHVkZSAiR1N0cmVhbWVyVGVzdC5oIgorI2luY2x1ZGUgIlNo
YXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgIlRlc3QuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0dTdHJl
YW1lckNvbW1vbi5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFRl
c3RXZWJLaXRBUEkgeworCitURVNUX0YoR1N0cmVhbWVyVGVzdCwgbWFwcGVkQnVmZmVyQmFzaWNz
KQoreworICAgIEdSZWZQdHI8R3N0QnVmZmVyPiBidWYgPSBhZG9wdEdSZWYoZ3N0X2J1ZmZlcl9u
ZXdfYWxsb2NhdGUobnVsbHB0ciwgNjQsIG51bGxwdHIpKTsKKyAgICBhdXRvIG1hcHBlZEJ1ZiA9
IEdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKGJ1Zi5nZXQoKSwgR1NUX01BUF9SRUFEKTsKKyAgICBB
U1NFUlRfVFJVRShtYXBwZWRCdWYuZ2V0KCkpOworICAgIEVYUEVDVF9FUShtYXBwZWRCdWYtPnNp
emUoKSwgNjQpOworCisgICAgYXV0byBtYXBwZWRCdWYyID0gR3N0TWFwcGVkQnVmZmVyOjpjcmVh
dGUoYnVmLmdldCgpLCBHU1RfTUFQX1JFQUQpOworICAgIEFTU0VSVF9UUlVFKG1hcHBlZEJ1ZjIu
Z2V0KCkpOworICAgIEVYUEVDVF9FUShtYXBwZWRCdWYsIG1hcHBlZEJ1ZjIpOworICAgIEVYUEVD
VF9FUShidWYuZ2V0KCksIG1hcHBlZEJ1Zik7CisgICAgRVhQRUNUX0VRKG1hcHBlZEJ1ZjIsIGJ1
Zi5nZXQoKSk7Cit9CisKK1RFU1RfRihHU3RyZWFtZXJUZXN0LCBtYXBwZWRCdWZmZXJSZWFkU2Fu
aXR5KQoreworICAgIGdwb2ludGVyIG1lbW9yeSA9IGdfbWFsbG9jKDE2KTsKKyAgICBtZW1zZXQo
bWVtb3J5LCAneCcsIDE2KTsKKyAgICBHUmVmUHRyPEdzdEJ1ZmZlcj4gYnVmID0gYWRvcHRHUmVm
KGdzdF9idWZmZXJfbmV3X3dyYXBwZWQobWVtb3J5LCAxNikpOworICAgIGF1dG8gbWFwcGVkQnVm
ID0gR3N0TWFwcGVkQnVmZmVyOjpjcmVhdGUoYnVmLmdldCgpLCBHU1RfTUFQX1JFQUQpOworICAg
IEFTU0VSVF9UUlVFKG1hcHBlZEJ1Zi5nZXQoKSk7CisgICAgRVhQRUNUX0VRKG1hcHBlZEJ1Zi0+
c2l6ZSgpLCAxNik7CisgICAgRVhQRUNUX0VRKG1lbWNtcChtZW1vcnksIG1hcHBlZEJ1Zi0+ZGF0
YSgpLCAxNiksIDApOworICAgIEVYUEVDVF9FUShtZW1jbXAobWVtb3J5LCBtYXBwZWRCdWYtPnNo
YXJlZEJ1ZmZlcigpLT5kYXRhKCksIDE2KSwgMCk7Cit9CisKK1RFU1RfRihHU3RyZWFtZXJUZXN0
LCBtYXBwZWRCdWZmZXJXcml0ZVNhbml0eSkKK3sKKyAgICBncG9pbnRlciBtZW1vcnkgPSBnX21h
bGxvYygxNik7CisgICAgbWVtc2V0KG1lbW9yeSwgJ3gnLCAxNik7CisgICAgR1JlZlB0cjxHc3RC
dWZmZXI+IGJ1ZiA9IGFkb3B0R1JlZihnc3RfYnVmZmVyX25ld193cmFwcGVkKG1lbW9yeSwgMTYp
KTsKKworICAgIGF1dG8gbWFwcGVkQnVmID0gR3N0TWFwcGVkQnVmZmVyOjpjcmVhdGUoYnVmLmdl
dCgpLCBHU1RfTUFQX1dSSVRFKTsKKyAgICBBU1NFUlRfVFJVRShtYXBwZWRCdWYuZ2V0KCkpOwor
ICAgIEVYUEVDVF9FUShtYXBwZWRCdWYtPnNpemUoKSwgMTYpOworICAgIG1lbXNldChtYXBwZWRC
dWYtPmRhdGEoKSwgJ3knLCBtYXBwZWRCdWYtPnNpemUoKSk7CisKKyAgICBFWFBFQ1RfRVEobWVt
Y21wKG1lbW9yeSwgbWFwcGVkQnVmLT5kYXRhKCksIDE2KSwgMCk7CisKKyAgICAvLyBXZSBzaG91
bGQgbm90IHNoYXJlIGEgd3JpdGFibGUgYnVmZmVyLgorICAgIEFTU0VSVF9GQUxTRShtYXBwZWRC
dWYtPnNoYXJlZEJ1ZmZlcigpKTsKK30KKworVEVTVF9GKEdTdHJlYW1lclRlc3QsIG1hcHBlZEJ1
ZmZlckNhY2hlc1NoYXJlZEJ1ZmZlcnMpCit7CisgICAgR1JlZlB0cjxHc3RCdWZmZXI+IGJ1ZiA9
IGFkb3B0R1JlZihnc3RfYnVmZmVyX25ld19hbGxvY2F0ZShudWxscHRyLCA2NCwgbnVsbHB0cikp
OworICAgIGF1dG8gbWFwcGVkQnVmID0gR3N0TWFwcGVkQnVmZmVyOjpjcmVhdGUoYnVmLmdldCgp
LCBHU1RfTUFQX1JFQUQpOworICAgIEFTU0VSVF9UUlVFKG1hcHBlZEJ1Zi5nZXQoKSk7CisgICAg
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gc2hhcmVkQnVmID0gbWFwcGVkQnVmLT5zaGFyZWRCdWZmZXIo
KTsKKyAgICAvLyBXZSBleHBlY3QgdGhlIHNhbWUgZGF0YSBwb2ludGVyIHdyYXBwZWQgYnkgc2hh
cmVkIGJ1ZmZlciwgbm8KKyAgICAvLyBjb3BpZXMgbmVlZCB0byBiZSBtYWRlLgorICAgIEVYUEVD
VF9FUShzaGFyZWRCdWYtPmRhdGEoKSwgbWFwcGVkQnVmLT5zaGFyZWRCdWZmZXIoKS0+ZGF0YSgp
KTsKK30KKworVEVTVF9GKEdTdHJlYW1lclRlc3QsIG1hcHBlZEJ1ZmZlckRvZXNOb3RBZGRFeHRy
YVJlZnMpCit7CisgICAgLy8gSXQgaXMgaW1wb3J0YW50IG5vdCB0byByZWYgdGhlIHBhc3NlZCBH
U3RyZWFtZXIgYnVmZmVycywgaWYgd2UKKyAgICAvLyBkbyBzbywgdGhlbiBpbiB0aGUgY2FzZSBv
ZiB3cml0YWJsZSBidWZmZXJzLCB0aGV5IGNhbiBiZWNvbWUKKyAgICAvLyB1bndyaXRhYmxlLCBl
dmVuIHRob3VnaCB3ZSBhcmUgdGhlIHNvbGUgb3duZXJzLiBXZSBhbHNvIGRvbid0CisgICAgLy8g
d2FudCB0byB0YWtlIG93bmVyc2hpcCBvZiB0aGUgYnVmZmVyIGZyb20gdGhlIHVzZXItY29kZSwg
c2luY2UKKyAgICAvLyBmb3IgdHJhbnNmb3JtSW5QbGFjZSB1c2UtY2FzZXMsIHRoYXQgd291bGQg
YnJlYWsuCisgICAgR1JlZlB0cjxHc3RCdWZmZXI+IGJ1ZiA9IGFkb3B0R1JlZihnc3RfYnVmZmVy
X25ldygpKTsKKworICAgIEFTU0VSVF9FUShHU1RfT0JKRUNUX1JFRkNPVU5UKGJ1Zi5nZXQoKSks
IDEpOworCisgICAgYXV0byBtYXBwZWRCdWYgPSBHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZShidWYu
Z2V0KCksIEdTVF9NQVBfUkVBRFdSSVRFKTsKKyAgICBBU1NFUlRfVFJVRShtYXBwZWRCdWYuZ2V0
KCkpOworCisgICAgQVNTRVJUX0VRKEdTVF9PQkpFQ1RfUkVGQ09VTlQoYnVmLmdldCgpKSwgMSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKKworI2VuZGlmIC8vIFVTRShHU1RS
RUFNRVIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358770</attachid>
            <date>2019-01-09 17:24:48 -0800</date>
            <delta_ts>2019-01-09 19:39:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-192977-20190110012447.patch</filename>
            <type>text/plain</type>
            <size>34634</size>
            <attacher name="Charlie Turner">cturner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5NjcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWJmZGFhNmU4Yzg0ZDE3
YjMxYTVhNTJjOTI0YmQ3MGQ4ZThlZjJjYS4uMmQ2NDk0MDYyOTljYWNkMGNhOGI2MjJjYjkxYWNh
NzMxYTAwNGRiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDE5LTAxLTA5ICBDaGFy
bGllIFR1cm5lciAgPGN0dXJuZXJAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVyXSBB
ZGQgc2hhcmVkQnVmZmVyIHV0aWxpdHkgdG8gR3N0TWFwcGVkQnVmZmVyLCBhbmQgYSB0ZXN0c3Vp
dGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5Mjk3
NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBh
IHV0aWxpdHkgbWV0aG9kIG9uIEdzdE1hcHBlZEJ1ZmZlciB0byByZXR1cm4gYSBTaGFyZWRCdWZm
ZXIKKyAgICAgICAgdmlldyBvdmVyIHRoZSBtYXBwZWQgZGF0YSB3aXRoIG5vIGNvcGllcy4KKwor
ICAgICAgICBUaGlzIHBhdGNoIGFsc28gaW50cm9kdWNlcyBhIG5ldyBnc3RyZWFtZXIgcG9ydCBB
UEkgdGVzdAorICAgICAgICBkaXJlY3RvcnksIGFuZCBpbmNsdWRlcyBzb21lIHRlc3RzIGZvciBH
c3RNYXBwZWRCdWZmZXIuCisKKyAgICAgICAgTmV3IHRlc3RzIGluIHRoZSBBUEkgc2VjdGlvbi4K
KworICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHA6IEFkZCBhIG5ldyBvdmVybG9h
ZCBmb3IKKyAgICAgICAgR3N0TWFwcGVkQnVmZmVyIHRoYXQgYWxsb3dzIHNoYXJpbmcgdGhlIG1h
cHBlZCBHU3RyZWFtZXIgYnVmZmVycworICAgICAgICB3aXRoIHplcm8gY29waWVzLgorICAgICAg
ICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2hh
cmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVy
OjpEYXRhU2VnbWVudDo6ZGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZm
ZXI6OkRhdGFTZWdtZW50OjpzaXplIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRC
dWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvV2ViS2l0V2ViQXVk
aW9Tb3VyY2VHU3RyZWFtZXIuY3BwOgorICAgICAgICAod2ViS2l0V2ViQXVkaW9TcmNBbGxvY2F0
ZUJ1ZmZlcnNBbmRSZW5kZXJBdWRpbyk6IFVwZGF0ZSB0byBuZXcKKyAgICAgICAgQVBJLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjp0cnlDcmVhdGVTaGFyZWRCdWZmZXIp
OiBSZXR1cm4gYQorICAgICAgICBzaGFyZWQgYnVmZmVyIHZpZXcgb24gdGhpcyBtYXBwZWQgYnVm
ZmVyLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21t
b24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKTogTWFrZSBH
c3RNYXBwZWRCdWZmZXIgcmVmIGNvdW50ZWQKKyAgICAgICAgKFdlYkNvcmU6OkdzdE1hcHBlZEJ1
ZmZlcjo6fkdzdE1hcHBlZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHc3RNYXBwZWRCdWZm
ZXI6OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjpkYXRhIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlcjo6c2l6ZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXI6OmlzU2hhcmFibGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjpHc3RNYXBwZWRCdWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjpvcGVyYXRvciBib29sIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW5iYW5kVGV4dFRyYWNrUHJp
dmF0ZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmJhbmRUZXh0VHJhY2tQcml2
YXRlR1N0cmVhbWVyOjpub3RpZnlUcmFja09mU2FtcGxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvZW1lL0dTdHJlYW1lckVNRVV0aWxpdGllcy5oOgorICAgICAgICAo
V2ViQ29yZTo6SW5pdERhdGE6OkluaXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvZW1lL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcDoKKyAg
ICAgICAgKHdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JGaW5kQW5kU2V0S2V5KToKKyAgICAg
ICAgKHdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JEZWNyeXB0KToKKwogMjAxOS0wMS0wNyAg
WmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CiAKICAgICAgICAgW1dQRV0gVXNl
IFdpZGdldCBib3VuZHMgZm9yIFBsYXRmb3JtU2NyZWVuIHJlY3RhbmdsZSBpbmZvcm1hdGlvbgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKaW5kZXggNDZmYzgxMWNjMzUz
MzVlOWQzYWZhNmRiYjMzZWY5MTljMmQ2MGFlMi4uMjZkZTFiYmYzOTViZmFmZGMzZTFjZmNkOTk5
NjAxMDAwYjVkZDIxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVk
QnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3Bw
CkBAIC01NCw2ICs1NCwyMCBAQCBTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihWZWN0b3I8Y2hh
cj4mJiBkYXRhKQogICAgIGFwcGVuZChXVEZNb3ZlKGRhdGEpKTsKIH0KIAorI2lmIFVTRShHU1RS
RUFNRVIpCitSZWY8U2hhcmVkQnVmZmVyPiBTaGFyZWRCdWZmZXI6OmNyZWF0ZShHc3RNYXBwZWRC
dWZmZXImIG1hcHBlZEJ1ZmZlcikKK3sKKyAgICBBU1NFUlQobWFwcGVkQnVmZmVyLmlzU2hhcmFi
bGUoKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2hhcmVkQnVmZmVyKG1hcHBlZEJ1ZmZl
cikpOworfQorCitTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihHc3RNYXBwZWRCdWZmZXImIG1h
cHBlZEJ1ZmZlcikKKyAgICA6IG1fc2l6ZShtYXBwZWRCdWZmZXIuc2l6ZSgpKQoreworICAgIG1f
c2VnbWVudHMuYXBwZW5kKHswLCBEYXRhU2VnbWVudDo6Y3JlYXRlKCZtYXBwZWRCdWZmZXIpfSk7
Cit9CisjZW5kaWYKKwogUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gU2hhcmVkQnVmZmVyOjpjcmVhdGVX
aXRoQ29udGVudHNPZkZpbGUoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCkKIHsKICAgICBib29sIG1h
cHBpbmdTdWNjZXNzOwpAQCAtMjEwLDYgKzIyNCw5IEBAIGNvbnN0IGNoYXIqIFNoYXJlZEJ1ZmZl
cjo6RGF0YVNlZ21lbnQ6OmRhdGEoKSBjb25zdAogI2VuZGlmCiAjaWYgVVNFKEdMSUIpCiAgICAg
ICAgIFtdKGNvbnN0IEdSZWZQdHI8R0J5dGVzPiYgZGF0YSkgeyByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBjaGFyKj4oZ19ieXRlc19nZXRfZGF0YShkYXRhLmdldCgpLCBudWxscHRyKSk7
IH0sCisjZW5kaWYKKyNpZiBVU0UoR1NUUkVBTUVSKQorICAgICAgICBbXShjb25zdCBSZWZQdHI8
R3N0TWFwcGVkQnVmZmVyPiYgZGF0YSkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBj
aGFyKj4oZGF0YS0+ZGF0YSgpKTsgfSwKICNlbmRpZgogICAgICAgICBbXShjb25zdCBGaWxlU3lz
dGVtOjpNYXBwZWRGaWxlRGF0YSYgZGF0YSkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBjaGFyKj4oZGF0YS5kYXRhKCkpOyB9CiAgICAgKTsKQEAgLTI4Myw2ICszMDAsOSBAQCBzaXpl
X3QgU2hhcmVkQnVmZmVyOjpEYXRhU2VnbWVudDo6c2l6ZSgpIGNvbnN0CiAjZW5kaWYKICNpZiBV
U0UoR0xJQikKICAgICAgICAgW10oY29uc3QgR1JlZlB0cjxHQnl0ZXM+JiBkYXRhKSB7IHJldHVy
biBnX2J5dGVzX2dldF9zaXplKGRhdGEuZ2V0KCkpOyB9LAorI2VuZGlmCisjaWYgVVNFKEdTVFJF
QU1FUikKKyAgICAgICAgW10oY29uc3QgUmVmUHRyPEdzdE1hcHBlZEJ1ZmZlcj4mIGRhdGEpIHsg
cmV0dXJuIGRhdGEtPnNpemUoKTsgfSwKICNlbmRpZgogICAgICAgICBbXShjb25zdCBGaWxlU3lz
dGVtOjpNYXBwZWRGaWxlRGF0YSYgZGF0YSkgeyByZXR1cm4gZGF0YS5zaXplKCk7IH0KICAgICAp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAppbmRleCBlMmFhZTJmMzA0NTcz
NTVmNDg5ZWVjNGFiNGVjZjFjZTdkM2U0NTJmLi5mMWU0ODJkNjI4NDQxNTc4M2RjNDA5NTNhZjMy
NzhjNzUwYzY4MWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRC
dWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaApAQCAt
NDgsNiArNDgsMTAgQEAKIHR5cGVkZWYgc3RydWN0IF9HQnl0ZXMgR0J5dGVzOwogI2VuZGlmCiAK
KyNpZiBVU0UoR1NUUkVBTUVSKQorI2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgorI2VuZGlm
CisKICNpZiBVU0UoRk9VTkRBVElPTikKIE9CSkNfQ0xBU1MgTlNBcnJheTsKIE9CSkNfQ0xBU1Mg
TlNEYXRhOwpAQCAtODgsNiArOTIsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxTaGFyZWRC
dWZmZXI+IGNyZWF0ZShHQnl0ZXMqKTsKICNlbmRpZgogCisjaWYgVVNFKEdTVFJFQU1FUikKKyAg
ICBzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKEdzdE1hcHBlZEJ1ZmZlciYpOworI2Vu
ZGlmCiAgICAgLy8gQ2FsbGluZyBkYXRhKCkgY2F1c2VzIGFsbCB0aGUgZGF0YSBzZWdtZW50cyB0
byBiZSBjb3BpZWQgaW50byBvbmUgc2VnbWVudCBpZiB0aGV5IGFyZSBub3QgYWxyZWFkeS4KICAg
ICAvLyBJdGVyYXRlIHRoZSBzZWdtZW50cyB1c2luZyBiZWdpbigpIGFuZCBlbmQoKSBpbnN0ZWFk
LgogICAgIC8vIEZJWE1FOiBBdWRpdCB0aGUgY2FsbCBzaXRlcyBvZiB0aGlzIGZ1bmN0aW9uIGFu
ZCByZXBsYWNlIHRoZW0gd2l0aCBpdGVyYXRpb24gaWYgcG9zc2libGUuCkBAIC0xMjUsNiArMTMy
LDkgQEAgcHVibGljOgogI2VuZGlmCiAjaWYgVVNFKEdMSUIpCiAgICAgICAgIHN0YXRpYyBSZWY8
RGF0YVNlZ21lbnQ+IGNyZWF0ZShHUmVmUHRyPEdCeXRlcz4mJiBkYXRhKSB7IHJldHVybiBhZG9w
dFJlZigqbmV3IERhdGFTZWdtZW50KFdURk1vdmUoZGF0YSkpKTsgfQorI2VuZGlmCisjaWYgVVNF
KEdTVFJFQU1FUikKKyAgICAgICAgc3RhdGljIFJlZjxEYXRhU2VnbWVudD4gY3JlYXRlKFJlZlB0
cjxHc3RNYXBwZWRCdWZmZXI+IGRhdGEpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGF0YVNlZ21l
bnQoV1RGTW92ZShkYXRhKSkpOyB9CiAjZW5kaWYKICAgICAgICAgc3RhdGljIFJlZjxEYXRhU2Vn
bWVudD4gY3JlYXRlKEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiYgZGF0YSkgeyByZXR1cm4g
YWRvcHRSZWYoKm5ldyBEYXRhU2VnbWVudChXVEZNb3ZlKGRhdGEpKSk7IH0KIApAQCAtMTQyLDYg
KzE1MiwxMCBAQCBwdWJsaWM6CiAjaWYgVVNFKEdMSUIpCiAgICAgICAgIERhdGFTZWdtZW50KEdS
ZWZQdHI8R0J5dGVzPiYmIGRhdGEpCiAgICAgICAgICAgICA6IG1faW1tdXRhYmxlRGF0YShXVEZN
b3ZlKGRhdGEpKSB7IH0KKyNlbmRpZgorI2lmIFVTRShHU1RSRUFNRVIpCisgICAgICAgIERhdGFT
ZWdtZW50KFJlZlB0cjxHc3RNYXBwZWRCdWZmZXI+JiYgZGF0YSkKKyAgICAgICAgICAgIDogbV9p
bW11dGFibGVEYXRhKFdURk1vdmUoZGF0YSkpIHsgfQogI2VuZGlmCiAgICAgICAgIERhdGFTZWdt
ZW50KEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiYgZGF0YSkKICAgICAgICAgICAgIDogbV9p
bW11dGFibGVEYXRhKFdURk1vdmUoZGF0YSkpIHsgfQpAQCAtMTU1LDYgKzE2OSw5IEBAIHB1Ymxp
YzoKICNlbmRpZgogI2lmIFVTRShHTElCKQogICAgICAgICAgICAgR1JlZlB0cjxHQnl0ZXM+LAor
I2VuZGlmCisjaWYgVVNFKEdTVFJFQU1FUikKKyAgICAgICAgICAgIFJlZlB0cjxHc3RNYXBwZWRC
dWZmZXI+LAogI2VuZGlmCiAgICAgICAgICAgICBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YT4g
bV9pbW11dGFibGVEYXRhOwogICAgICAgICBmcmllbmQgY2xhc3MgU2hhcmVkQnVmZmVyOwpAQCAt
MTkxLDYgKzIwOCw5IEBAIHByaXZhdGU6CiAjaWYgVVNFKEdMSUIpCiAgICAgZXhwbGljaXQgU2hh
cmVkQnVmZmVyKEdCeXRlcyopOwogI2VuZGlmCisjaWYgVVNFKEdTVFJFQU1FUikKKyAgICBleHBs
aWNpdCBTaGFyZWRCdWZmZXIoR3N0TWFwcGVkQnVmZmVyJik7CisjZW5kaWYKIAogICAgIHZvaWQg
Y29tYmluZUludG9PbmVTZWdtZW50KCkgY29uc3Q7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvV2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3Ry
ZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL1dlYktp
dFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmNwcAppbmRleCAwMjEwMzUyYjBkMTBjMjg2ZTljMTQx
MDVkOWVmM2QwZGRhMjdiM2ViLi4yZjkzN2Y2NzdjY2M4ZTA4YzI2NTdjZDg0MzYxZWMyYmM5YjZh
Y2EzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIv
V2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAK
QEAgLTMyNyw3ICszMjcsNyBAQCBzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPEdSZWZQdHI8R3N0QnVm
ZmVyPj4+IHdlYktpdFdlYkF1ZGlvU3JjQWxsb2NhdGVCdWZmZXJzQW5kUgogCiAgICAgVmVjdG9y
PEdSZWZQdHI8R3N0QnVmZmVyPj4gY2hhbm5lbEJ1ZmZlckxpc3Q7CiAgICAgY2hhbm5lbEJ1ZmZl
ckxpc3QucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShwcml2LT5zb3VyY2VzLnNpemUoKSk7Ci0gICAg
VmVjdG9yPEdzdE1hcHBlZEJ1ZmZlcj4gbWFwcGVkQnVmZmVyczsKKyAgICBWZWN0b3I8UmVmUHRy
PEdzdE1hcHBlZEJ1ZmZlcj4+IG1hcHBlZEJ1ZmZlcnM7CiAgICAgbWFwcGVkQnVmZmVycy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KHByaXYtPnNvdXJjZXMuc2l6ZSgpKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcHJpdi0+c291cmNlcy5zaXplKCk7ICsraSkgewogICAgICAgICBHUmVm
UHRyPEdzdEJ1ZmZlcj4gYnVmZmVyOwpAQCAtMzQyLDEwICszNDIsMTAgQEAgc3RhdGljIE9wdGlv
bmFsPFZlY3RvcjxHUmVmUHRyPEdzdEJ1ZmZlcj4+PiB3ZWJLaXRXZWJBdWRpb1NyY0FsbG9jYXRl
QnVmZmVyc0FuZFIKICAgICAgICAgQVNTRVJUKGJ1ZmZlcik7CiAgICAgICAgIEdTVF9CVUZGRVJf
VElNRVNUQU1QKGJ1ZmZlci5nZXQoKSkgPSB0aW1lc3RhbXA7CiAgICAgICAgIEdTVF9CVUZGRVJf
RFVSQVRJT04oYnVmZmVyLmdldCgpKSA9IGR1cmF0aW9uOwotICAgICAgICBHc3RNYXBwZWRCdWZm
ZXIgbWFwcGVkQnVmZmVyKGJ1ZmZlci5nZXQoKSwgR1NUX01BUF9SRUFEV1JJVEUpOworICAgICAg
ICBhdXRvIG1hcHBlZEJ1ZmZlciA9IEdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKGJ1ZmZlci5nZXQo
KSwgR1NUX01BUF9SRUFEV1JJVEUpOwogICAgICAgICBBU1NFUlQobWFwcGVkQnVmZmVyKTsKICAg
ICAgICAgbWFwcGVkQnVmZmVycy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShtYXBwZWRCdWZmZXIp
KTsKLSAgICAgICAgcHJpdi0+YnVzLT5zZXRDaGFubmVsTWVtb3J5KGksIHJlaW50ZXJwcmV0X2Nh
c3Q8ZmxvYXQqPihtYXBwZWRCdWZmZXJzW2ldLmRhdGEoKSksIHByaXYtPmZyYW1lc1RvUHVsbCk7
CisgICAgICAgIHByaXYtPmJ1cy0+c2V0Q2hhbm5lbE1lbW9yeShpLCByZWludGVycHJldF9jYXN0
PGZsb2F0Kj4obWFwcGVkQnVmZmVyc1tpXS0+ZGF0YSgpKSwgcHJpdi0+ZnJhbWVzVG9QdWxsKTsK
ICAgICAgICAgY2hhbm5lbEJ1ZmZlckxpc3QudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoYnVmZmVy
KSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCmluZGV4IDBiYTQ3MzlhMWRl
NWQ0MjE2OGZlZWQ3YTA1Yjg2ODJkNjA1N2E4YjEuLmE1MDQ5Y2I4YjQyZmRhNmQ2NmM3MGVkM2Vi
N2NkOTE1NmFmZDIwMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCkBAIC0yNSw2ICsy
NSw3IEBACiAKICNpbmNsdWRlICJHc3RBbGxvY2F0b3JGYXN0TWFsbG9jLmgiCiAjaW5jbHVkZSAi
SW50U2l6ZS5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgPGdzdC9hdWRp
by9hdWRpby1pbmZvLmg+CiAjaW5jbHVkZSA8Z3N0L2dzdC5oPgogI2luY2x1ZGUgPG11dGV4PgpA
QCAtMzU3LDYgKzM1OCwxOCBAQCB2b2lkIGNvbm5lY3RTaW1wbGVCdXNNZXNzYWdlQ2FsbGJhY2so
R3N0RWxlbWVudCogcGlwZWxpbmUpCiAgICAgZ19zaWduYWxfY29ubmVjdChidXMuZ2V0KCksICJt
ZXNzYWdlIiwgR19DQUxMQkFDSyhzaW1wbGVCdXNNZXNzYWdlQ2FsbGJhY2spLCBwaXBlbGluZSk7
CiB9CiAKK1JlZlB0cjxTaGFyZWRCdWZmZXI+IEdzdE1hcHBlZEJ1ZmZlcjo6dHJ5Q3JlYXRlU2hh
cmVkQnVmZmVyKCkKK3sKKyAgICAvLyBTaGFyZWRCdWZmZXIgcHJvdmlkZXMgYSByZWFkLW9ubHkg
dmlldyBvbiB3aGF0IGl0IGV4cGVjdHMgYXJlCisgICAgLy8gaW1tdXRhYmxlIGRhdGEuIERvIG5v
dCBjcmVhdGUgb25lIGlzIHdyaXRhYmxlIGFuZCBoZW5jZSBtdXRhYmxlLgorICAgIGlmICghaXNT
aGFyYWJsZSgpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoKnRo
aXMpOworfQorCiB9CiAKICNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNv
bW1vbi5oCmluZGV4IDJlZjE1NTAyYTAwNTYzMWVlNGQwN2Y3ZmEzMmI1NGY0Njk4Y2ZiYzguLmRi
YmZiOGI2MWEzODAzY2IzNGY2NjJmZDRlY2RhY2Y1YjZkNmIxYTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVy
Q29tbW9uLmgKQEAgLTI3LDEwICsyNywxMiBAQAogI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby1m
b3JtYXQuaD4KICNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8taW5mby5oPgogI2luY2x1ZGUgPHd0
Zi9NZWRpYVRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbnRTaXplOworY2xhc3MgU2hhcmVkQnVmZmVy
OwogCiBpbmxpbmUgYm9vbCB3ZWJraXRHc3RDaGVja1ZlcnNpb24oZ3VpbnQgbWFqb3IsIGd1aW50
IG1pbm9yLCBndWludCBtaWNybykKIHsKQEAgLTc3LDUxICs3OSw0NiBAQCBpbmxpbmUgR3N0Q2xv
Y2tUaW1lIHRvR3N0Q2xvY2tUaW1lKGNvbnN0IE1lZGlhVGltZSAmbWVkaWFUaW1lKQogICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxHc3RDbG9ja1RpbWU+KHRvR3N0VW5zaWduZWQ2NFRpbWUobWVkaWFU
aW1lKSk7CiB9CiAKLWNsYXNzIEdzdE1hcHBlZEJ1ZmZlciB7Ci0gICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoR3N0TWFwcGVkQnVmZmVyKTsKK2NsYXNzIEdzdE1hcHBlZEJ1ZmZlciA6IHB1YmxpYyBU
aHJlYWRTYWZlUmVmQ291bnRlZDxHc3RNYXBwZWRCdWZmZXI+IHsKIHB1YmxpYzoKLQotICAgIEdz
dE1hcHBlZEJ1ZmZlcihHc3RNYXBwZWRCdWZmZXImJiBvdGhlcikKLSAgICAgICAgOiBtX2J1ZmZl
cihvdGhlci5tX2J1ZmZlcikKLSAgICAgICAgLCBtX2luZm8ob3RoZXIubV9pbmZvKQotICAgICAg
ICAsIG1faXNWYWxpZChvdGhlci5tX2lzVmFsaWQpCi0gICAgewotICAgICAgICBvdGhlci5tX2lz
VmFsaWQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBHc3RNYXBwZWRCdWZmZXIoR3N0QnVmZmVyKiBi
dWZmZXIsIEdzdE1hcEZsYWdzIGZsYWdzKQotICAgICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKKyAg
ICBzdGF0aWMgUmVmUHRyPEdzdE1hcHBlZEJ1ZmZlcj4gY3JlYXRlKEdzdEJ1ZmZlciogYnVmZmVy
LCBHc3RNYXBGbGFncyBmbGFncykKICAgICB7Ci0gICAgICAgIG1faXNWYWxpZCA9IGdzdF9idWZm
ZXJfbWFwKG1fYnVmZmVyLCAmbV9pbmZvLCBmbGFncyk7CisgICAgICAgIEdzdE1hcEluZm8gaW5m
bzsKKyAgICAgICAgaWYgKCFnc3RfYnVmZmVyX21hcChidWZmZXIsICZpbmZvLCBmbGFncykpCisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBH
c3RNYXBwZWRCdWZmZXIoYnVmZmVyLCBpbmZvKSk7CiAgICAgfQogCiAgICAgLy8gVW5mb3J0dW5h
dGVseSwgR1NUX01BUF9SRUFEV1JJVEUgaXMgZGVmaW5lZCBvdXQgb2YgbGluZSBmcm9tIHRoZSBN
YXBGbGFncwogICAgIC8vIGVudW0gYXMgYW4gaW50LCBhbmQgQysrIGlzIGNhcmVmdWwgdG8gbm90
IGltcGxpY2l0eSBjb252ZXJ0IGl0IHRvIGFuIGVudW0uCi0gICAgR3N0TWFwcGVkQnVmZmVyKEdz
dEJ1ZmZlciogYnVmZmVyLCBpbnQgZmxhZ3MpCi0gICAgICAgIDogR3N0TWFwcGVkQnVmZmVyKGJ1
ZmZlciwgc3RhdGljX2Nhc3Q8R3N0TWFwRmxhZ3M+KGZsYWdzKSkgeyB9CisgICAgc3RhdGljIFJl
ZlB0cjxHc3RNYXBwZWRCdWZmZXI+IGNyZWF0ZShHc3RCdWZmZXIqIGJ1ZmZlciwgaW50IGZsYWdz
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKGJ1ZmZlciwg
c3RhdGljX2Nhc3Q8R3N0TWFwRmxhZ3M+KGZsYWdzKSk7CisgICAgfQogCiAgICAgfkdzdE1hcHBl
ZEJ1ZmZlcigpCiAgICAgewotICAgICAgICBpZiAobV9pc1ZhbGlkKQotICAgICAgICAgICAgZ3N0
X2J1ZmZlcl91bm1hcChtX2J1ZmZlciwgJm1faW5mbyk7Ci0gICAgICAgIG1faXNWYWxpZCA9IGZh
bHNlOworICAgICAgICBnc3RfYnVmZmVyX3VubWFwKG1fYnVmZmVyLCAmbV9pbmZvKTsKICAgICB9
CiAKLSAgICB1aW50OF90KiBkYXRhKCkgeyBBU1NFUlQobV9pc1ZhbGlkKTsgcmV0dXJuIHN0YXRp
Y19jYXN0PHVpbnQ4X3QqPihtX2luZm8uZGF0YSk7IH0KLSAgICBjb25zdCB1aW50OF90KiBkYXRh
KCkgY29uc3QgeyBBU1NFUlQobV9pc1ZhbGlkKTsgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Qq
PihtX2luZm8uZGF0YSk7IH0KLQotICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyBBU1NFUlQobV9p
c1ZhbGlkKTsgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4obV9pbmZvLnNpemUpOyB9Ci0KLSAg
ICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9pc1ZhbGlkOyB9Cisg
ICAgdWludDhfdCogZGF0YSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtX2luZm8u
ZGF0YSk7IH0KKyAgICBjb25zdCB1aW50OF90KiBkYXRhKCkgY29uc3QgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8dWludDhfdCo+KG1faW5mby5kYXRhKTsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2luZm8uc2l6ZSk7IH0KKyAgICBib29sIGlz
U2hhcmFibGUoKSBjb25zdCB7IHJldHVybiAhKG1faW5mby5mbGFncyAmIEdTVF9NQVBfV1JJVEUp
OyB9CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdHJ5Q3JlYXRlU2hhcmVkQnVmZmVyKCk7CiAK
IHByaXZhdGU6CisgICAgR3N0TWFwcGVkQnVmZmVyKEdzdEJ1ZmZlciogYnVmZmVyLCBHc3RNYXBJ
bmZvIGluZm8pCisgICAgICAgIDogbV9idWZmZXIoYnVmZmVyKSwgbV9pbmZvKGluZm8pCisgICAg
eworICAgIH0KKwogICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgR3N0TWFwcGVkQnVm
ZmVyJiwgY29uc3QgR3N0TWFwcGVkQnVmZmVyJik7CiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBHc3RNYXBwZWRCdWZmZXImLCBjb25zdCBHc3RCdWZmZXIqKTsKICAgICBmcmllbmQg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IEdzdEJ1ZmZlciogYSwgY29uc3QgR3N0TWFwcGVkQnVmZmVy
JiBiKSB7IHJldHVybiBvcGVyYXRvcj09KGIsIGEpOyB9CiAKICAgICBHc3RCdWZmZXIqIG1fYnVm
ZmVyIHsgbnVsbHB0ciB9OwogICAgIEdzdE1hcEluZm8gbV9pbmZvOwotICAgIGJvb2wgbV9pc1Zh
bGlkIHsgZmFsc2UgfTsKIH07CiAKIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgR3N0TWFw
cGVkQnVmZmVyJiBhLCBjb25zdCBHc3RNYXBwZWRCdWZmZXImIGIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW5iYW5kVGV4dFRyYWNrUHJp
dmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lci5jcHAKaW5kZXggYzJkZDEyMzIw
YzFkODljMTk1NjJhNjFlODI2ZDkwZmMwZTc2YmE0OS4uY2QyNTY1ZmQzMTdiMTZkZDBhMDQzZjQx
MTQ2ZDVhZTMxNTY2MTUzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL0luYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbmJhbmRUZXh0VHJh
Y2tQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtMTEyLDE2ICsxMTIsMTYgQEAgdm9pZCBJbmJhbmRU
ZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlUcmFja09mU2FtcGxlKCkKICAgICAgICAg
ICAgIEdTVF9XQVJOSU5HKCJUcmFjayAlZCBnb3Qgc2FtcGxlIHdpdGggbm8gYnVmZmVyLiIsIG1f
aW5kZXgpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgR3N0TWFw
cGVkQnVmZmVyIG1hcHBlZEJ1ZmZlcihidWZmZXIsIEdTVF9NQVBfUkVBRCk7Ci0gICAgICAgIEFT
U0VSVChtYXBwZWRCdWZmZXIpOwotICAgICAgICBpZiAoIW1hcHBlZEJ1ZmZlcikgeworICAgICAg
ICBhdXRvIG1hcHBlZEJ1ZmZlciA9IEdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKGJ1ZmZlciwgR1NU
X01BUF9SRUFEKTsKKyAgICAgICAgQVNTRVJUKG1hcHBlZEJ1ZmZlci5nZXQoKSk7CisgICAgICAg
IGlmICghbWFwcGVkQnVmZmVyLmdldCgpKSB7CiAgICAgICAgICAgICBHU1RfV0FSTklORygiVHJh
Y2sgJWQgdW5hYmxlIHRvIG1hcCBidWZmZXIuIiwgbV9pbmRleCk7CiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIEdTVF9JTkZPKCJUcmFjayAlZCBwYXJzaW5nIHNh
bXBsZTogJS4qcyIsIG1faW5kZXgsIHN0YXRpY19jYXN0PGludD4obWFwcGVkQnVmZmVyLnNpemUo
KSksCi0gICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNoYXIqPihtYXBwZWRCdWZmZXIuZGF0
YSgpKSk7Ci0gICAgICAgIGNsaWVudCgpLT5wYXJzZVdlYlZUVEN1ZURhdGEocmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4obWFwcGVkQnVmZmVyLmRhdGEoKSksIG1hcHBlZEJ1ZmZlci5zaXplKCkpOwor
ICAgICAgICBHU1RfSU5GTygiVHJhY2sgJWQgcGFyc2luZyBzYW1wbGU6ICUuKnMiLCBtX2luZGV4
LCBzdGF0aWNfY2FzdDxpbnQ+KG1hcHBlZEJ1ZmZlci0+c2l6ZSgpKSwKKyAgICAgICAgICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1hcHBlZEJ1ZmZlci0+ZGF0YSgpKSk7CisgICAgICAgIGNs
aWVudCgpLT5wYXJzZVdlYlZUVEN1ZURhdGEocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obWFwcGVk
QnVmZmVyLT5kYXRhKCkpLCBtYXBwZWRCdWZmZXItPnNpemUoKSk7CiAgICAgfQogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0dT
dHJlYW1lckVNRVV0aWxpdGllcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL2VtZS9HU3RyZWFtZXJFTUVVdGlsaXRpZXMuaAppbmRleCBiZWZmNzZhNWE2YThl
NTU4MjZkNDc5YmQ2MGMzOGJlYjhiYjMwOGEyLi41ZTAxZGMyNWNkNGExNTIxMjlhZjg5MGZjODdl
NjNhODVkYzJhNWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvZW1lL0dTdHJlYW1lckVNRVV0aWxpdGllcy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvR1N0cmVhbWVyRU1FVXRpbGl0aWVz
LmgKQEAgLTQwLDEyICs0MCwxMiBAQCBwdWJsaWM6CiAgICAgSW5pdERhdGEoY29uc3QgU3RyaW5n
JiBzeXN0ZW1JZCwgR3N0QnVmZmVyKiBpbml0RGF0YSkKICAgICAgICAgOiBtX3N5c3RlbUlkKHN5
c3RlbUlkKQogICAgIHsKLSAgICAgICAgR3N0TWFwcGVkQnVmZmVyIG1hcHBlZEluaXREYXRhKGlu
aXREYXRhLCBHU1RfTUFQX1JFQUQpOworICAgICAgICBhdXRvIG1hcHBlZEluaXREYXRhID0gR3N0
TWFwcGVkQnVmZmVyOjpjcmVhdGUoaW5pdERhdGEsIEdTVF9NQVBfUkVBRCk7CiAgICAgICAgIGlm
ICghbWFwcGVkSW5pdERhdGEpIHsKICAgICAgICAgICAgIEdTVF9FUlJPUigiY2Fubm90IG1hcCAl
cyBwcm90ZWN0aW9uIGRhdGEiLCBzeXN0ZW1JZC51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9Ci0gICAgICAgIG1fcGF5bG9hZCA9IFNo
YXJlZEJ1ZmZlcjo6Y3JlYXRlKG1hcHBlZEluaXREYXRhLmRhdGEoKSwgbWFwcGVkSW5pdERhdGEu
c2l6ZSgpKTsKKyAgICAgICAgbV9wYXlsb2FkID0gbWFwcGVkSW5pdERhdGEtPnRyeUNyZWF0ZVNo
YXJlZEJ1ZmZlcigpOwogICAgIH0KIAogICAgIHZvaWQgYXBwZW5kKEluaXREYXRhJiYgaW5pdERh
dGEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvZW1lL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0
b3JHU3RyZWFtZXIuY3BwCmluZGV4IGY5NDFlNTI4ZjQ3Y2JkMDY5NTc5YmM1ZTYzMzU4MWU2YjYx
MGM3MjMuLmZkNmRjZjhkMzc2ZmRiNDk1ZWUxYjE5Nzk4NzU0NDA4Mzk3ZjE2NGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0
Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFt
ZXIuY3BwCkBAIC0xNTAsNyArMTUwLDcgQEAgc3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlhQ2xl
YXJLZXlEZWNyeXB0b3JIYW5kbGVLZXlSZXNwb25zZShXZWJLaXRNZWRpYUNvbW1vbkUKICAgICBy
ZXR1cm4gVFJVRTsKIH0KIAotc3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlhQ2xlYXJLZXlEZWNy
eXB0b3JGaW5kQW5kU2V0S2V5KFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSogcHJp
diwgY29uc3QgV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyJiBrZXlJREJ1ZmZlcikKK3N0YXRpYyBn
Ym9vbGVhbiB3ZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdG9yRmluZEFuZFNldEtleShXZWJLaXRN
ZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUqIHByaXYsIGNvbnN0IFJlZjxXZWJDb3JlOjpHc3RN
YXBwZWRCdWZmZXI+JiBrZXlJREJ1ZmZlcikKIHsKICAgICBHUmVmUHRyPEdzdEJ1ZmZlcj4ga2V5
QnVmZmVyOwogICAgIGZvciAoYXV0byYga2V5IDogcHJpdi0+a2V5cykgewpAQCAtMTY1LDE0ICsx
NjUsMTQgQEAgc3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JGaW5k
QW5kU2V0S2V5KFdlYktpdE1lZGlhQ2xlYXJLZXlEZWMKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIAotICAgIFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlciBtYXBwZWRLZXlWYWx1ZUJ1ZmZl
cihrZXlCdWZmZXIuZ2V0KCksIEdTVF9NQVBfUkVBRCk7CisgICAgYXV0byBtYXBwZWRLZXlWYWx1
ZUJ1ZmZlciA9IFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKGtleUJ1ZmZlci5nZXQo
KSwgR1NUX01BUF9SRUFEKTsKICAgICBpZiAoIW1hcHBlZEtleVZhbHVlQnVmZmVyKSB7CiAgICAg
ICAgIEdTVF9FUlJPUl9PQkpFQ1QocHJpdiwgIkZhaWxlZCB0byBtYXAgZGVjcnlwdGlvbiBrZXki
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIEFTU0VSVChtYXBwZWRLZXlW
YWx1ZUJ1ZmZlci5zaXplKCkgPT0gQ0xFQVJLRVlfU0laRSk7Ci0gICAgaWYgKGdjcnlfZXJyb3Jf
dCBlcnJvciA9IGdjcnlfY2lwaGVyX3NldGtleShwcml2LT5oYW5kbGUsIG1hcHBlZEtleVZhbHVl
QnVmZmVyLmRhdGEoKSwgbWFwcGVkS2V5VmFsdWVCdWZmZXIuc2l6ZSgpKSkgeworICAgIEFTU0VS
VChtYXBwZWRLZXlWYWx1ZUJ1ZmZlci0+c2l6ZSgpID09IENMRUFSS0VZX1NJWkUpOworICAgIGlm
IChnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRrZXkocHJpdi0+aGFuZGxlLCBt
YXBwZWRLZXlWYWx1ZUJ1ZmZlci0+ZGF0YSgpLCBtYXBwZWRLZXlWYWx1ZUJ1ZmZlci0+c2l6ZSgp
KSkgewogICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHByaXYsICJnY3J5X2NpcGhlcl9zZXRrZXkg
ZmFpbGVkOiAlcyIsIGdwZ19zdHJlcnJvcihlcnJvcikpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQpAQCAtMTg4LDE5ICsxODgsMTkgQEAgc3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlh
Q2xlYXJLZXlEZWNyeXB0b3JEZWNyeXB0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkQKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZl
ciBtYXBwZWRJVkJ1ZmZlcihpdkJ1ZmZlciwgR1NUX01BUF9SRUFEKTsKKyAgICBhdXRvIG1hcHBl
ZElWQnVmZmVyID0gV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjpjcmVhdGUoaXZCdWZmZXIsIEdT
VF9NQVBfUkVBRCk7CiAgICAgaWYgKCFtYXBwZWRJVkJ1ZmZlcikgewogICAgICAgICBHU1RfRVJS
T1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gbWFwIElWIik7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKICAgICB1aW50OF90IGN0cltDTEVBUktFWV9TSVpFXTsKLSAgICBpZiAobWFw
cGVkSVZCdWZmZXIuc2l6ZSgpID09IDgpIHsKKyAgICBpZiAobWFwcGVkSVZCdWZmZXItPnNpemUo
KSA9PSA4KSB7CiAgICAgICAgIG1lbXNldChjdHIgKyA4LCAwLCA4KTsKLSAgICAgICAgbWVtY3B5
KGN0ciwgbWFwcGVkSVZCdWZmZXIuZGF0YSgpLCA4KTsKKyAgICAgICAgbWVtY3B5KGN0ciwgbWFw
cGVkSVZCdWZmZXItPmRhdGEoKSwgOCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKG1h
cHBlZElWQnVmZmVyLnNpemUoKSA9PSBDTEVBUktFWV9TSVpFKTsKLSAgICAgICAgbWVtY3B5KGN0
ciwgbWFwcGVkSVZCdWZmZXIuZGF0YSgpLCBDTEVBUktFWV9TSVpFKTsKKyAgICAgICAgbWVtY3B5
KGN0ciwgbWFwcGVkSVZCdWZmZXItPmRhdGEoKSwgQ0xFQVJLRVlfU0laRSk7CiAgICAgfQogCiAg
ICAgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElB
X0NLX0RFQ1JZUFRfR0VUX1BSSVZBVEUoV0VCS0lUX01FRElBX0NLX0RFQ1JZUFQoc2VsZikpOwpA
QCAtMjE2LDMwICsyMTYsMzAgQEAgc3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlhQ2xlYXJLZXlE
ZWNyeXB0b3JEZWNyeXB0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkQKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAotICAgIFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlciBtYXBwZWRL
ZXlJZEJ1ZmZlcihrZXlJREJ1ZmZlciwgR1NUX01BUF9SRUFEKTsKKyAgICBhdXRvIG1hcHBlZEtl
eUlkQnVmZmVyID0gV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjpjcmVhdGUoa2V5SURCdWZmZXIs
IEdTVF9NQVBfUkVBRCk7CiAgICAgaWYgKCFtYXBwZWRLZXlJZEJ1ZmZlcikgewogICAgICAgICBH
U1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gbWFwIGtleSBpZCBidWZmZXIiKTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZl
ciBtYXBwZWRCdWZmZXIoYnVmZmVyLCBHU1RfTUFQX1JFQURXUklURSk7CisgICAgYXV0byBtYXBw
ZWRCdWZmZXIgPSBXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZShidWZmZXIsIEdTVF9N
QVBfUkVBRFdSSVRFKTsKICAgICBpZiAoIW1hcHBlZEJ1ZmZlcikgewogICAgICAgICBHU1RfRVJS
T1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gbWFwIGJ1ZmZlciIpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgd2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRvckZpbmRBbmRT
ZXRLZXkocHJpdiwgbWFwcGVkS2V5SWRCdWZmZXIpOworICAgIHdlYktpdE1lZGlhQ2xlYXJLZXlE
ZWNyeXB0b3JGaW5kQW5kU2V0S2V5KHByaXYsIG1hcHBlZEtleUlkQnVmZmVyLnJlbGVhc2VOb25O
dWxsKCkpOwogCiAgICAgdW5zaWduZWQgcG9zaXRpb24gPSAwOwogICAgIHVuc2lnbmVkIHNhbXBs
ZUluZGV4ID0gMDsKIAogICAgIGlmICghc3ViU2FtcGxlQ291bnQpIHsKICAgICAgICAgLy8gRnVs
bCBzYW1wbGUgZW5jcnlwdGlvbi4KLSAgICAgICAgR1NUX1RSQUNFX09CSkVDVChzZWxmLCAiZnVs
bCBzYW1wbGUgZW5jcnlwdGlvbjogJXp1IGVuY3J5cHRlZCBieXRlcyIsIG1hcHBlZEJ1ZmZlci5z
aXplKCkpOworICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNlbGYsICJmdWxsIHNhbXBsZSBlbmNy
eXB0aW9uOiAlenUgZW5jcnlwdGVkIGJ5dGVzIiwgbWFwcGVkQnVmZmVyLT5zaXplKCkpOwogCiAg
ICAgICAgIC8vIENoZWNrIGlmIHRoZSBidWZmZXIgaXMgZW1wdHkuCi0gICAgICAgIGlmIChtYXBw
ZWRCdWZmZXIuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBjaXBoZXJFcnJvciA9IGdjcnlfY2lwaGVy
X2RlY3J5cHQocHJpdi0+aGFuZGxlLCBtYXBwZWRCdWZmZXIuZGF0YSgpLCBtYXBwZWRCdWZmZXIu
c2l6ZSgpLCAwLCAwKTsKKyAgICAgICAgaWYgKG1hcHBlZEJ1ZmZlci0+c2l6ZSgpKSB7CisgICAg
ICAgICAgICBjaXBoZXJFcnJvciA9IGdjcnlfY2lwaGVyX2RlY3J5cHQocHJpdi0+aGFuZGxlLCBt
YXBwZWRCdWZmZXItPmRhdGEoKSwgbWFwcGVkQnVmZmVyLT5zaXplKCksIDAsIDApOwogICAgICAg
ICAgICAgaWYgKGNpcGhlckVycm9yKSB7CiAgICAgICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVD
VChzZWxmLCAiZnVsbCBzYW1wbGUgZGVjcnlwdGlvbiBmYWlsZWQ6ICVzIiwgZ3BnX3N0cmVycm9y
KGNpcGhlckVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjU1LDE2
ICsyNTUsMTYgQEAgc3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JE
ZWNyeXB0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkQKICAgICB9CiAKICAgICAvLyBTdWJz
YW1wbGUgZW5jcnlwdGlvbi4KLSAgICBXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXIgbWFwcGVkU3Vi
U2FtcGxlc0J1ZmZlcihzdWJTYW1wbGVzQnVmZmVyLCBHU1RfTUFQX1JFQUQpOworICAgIGF1dG8g
bWFwcGVkU3ViU2FtcGxlc0J1ZmZlciA9IFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRl
KHN1YlNhbXBsZXNCdWZmZXIsIEdTVF9NQVBfUkVBRCk7CiAgICAgaWYgKCFtYXBwZWRTdWJTYW1w
bGVzQnVmZmVyKSB7CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBt
YXAgc3Vic2FtcGxlIGJ1ZmZlciIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0g
ICAgR1VuaXF1ZVB0cjxHc3RCeXRlUmVhZGVyPiByZWFkZXIoZ3N0X2J5dGVfcmVhZGVyX25ldyht
YXBwZWRTdWJTYW1wbGVzQnVmZmVyLmRhdGEoKSwgbWFwcGVkU3ViU2FtcGxlc0J1ZmZlci5zaXpl
KCkpKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJwb3NpdGlvbjogJWQsIHNpemU6ICV6
dSIsIHBvc2l0aW9uLCBtYXBwZWRCdWZmZXIuc2l6ZSgpKTsKKyAgICBHVW5pcXVlUHRyPEdzdEJ5
dGVSZWFkZXI+IHJlYWRlcihnc3RfYnl0ZV9yZWFkZXJfbmV3KG1hcHBlZFN1YlNhbXBsZXNCdWZm
ZXItPmRhdGEoKSwgbWFwcGVkU3ViU2FtcGxlc0J1ZmZlci0+c2l6ZSgpKSk7CisgICAgR1NUX0RF
QlVHX09CSkVDVChzZWxmLCAicG9zaXRpb246ICVkLCBzaXplOiAlenUiLCBwb3NpdGlvbiwgbWFw
cGVkQnVmZmVyLT5zaXplKCkpOwogCi0gICAgd2hpbGUgKHBvc2l0aW9uIDwgbWFwcGVkQnVmZmVy
LnNpemUoKSkgeworICAgIHdoaWxlIChwb3NpdGlvbiA8IG1hcHBlZEJ1ZmZlci0+c2l6ZSgpKSB7
CiAgICAgICAgIGd1aW50MTYgbkJ5dGVzQ2xlYXIgPSAwOwogICAgICAgICBndWludDMyIG5CeXRl
c0VuY3J5cHRlZCA9IDA7CiAKQEAgLTI3NywxNCArMjc3LDE0IEBAIHN0YXRpYyBnYm9vbGVhbiB3
ZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdG9yRGVjcnlwdChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5
cHRpb25ECiAgICAgICAgICAgICBzYW1wbGVJbmRleCsrOwogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgbkJ5dGVzQ2xlYXIgPSAwOwotICAgICAgICAgICAgbkJ5dGVzRW5jcnlwdGVkID0g
bWFwcGVkQnVmZmVyLnNpemUoKSAtIHBvc2l0aW9uOworICAgICAgICAgICAgbkJ5dGVzRW5jcnlw
dGVkID0gbWFwcGVkQnVmZmVyLT5zaXplKCkgLSBwb3NpdGlvbjsKICAgICAgICAgfQogCi0gICAg
ICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc2VsZiwgInN1YnNhbXBsZSBpbmRleCAldSAtICVodSBieXRl
cyBjbGVhciAodG9kbz0lenUpIiwgc2FtcGxlSW5kZXgsIG5CeXRlc0NsZWFyLCBtYXBwZWRCdWZm
ZXIuc2l6ZSgpIC0gcG9zaXRpb24pOworICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNlbGYsICJz
dWJzYW1wbGUgaW5kZXggJXUgLSAlaHUgYnl0ZXMgY2xlYXIgKHRvZG89JXp1KSIsIHNhbXBsZUlu
ZGV4LCBuQnl0ZXNDbGVhciwgbWFwcGVkQnVmZmVyLT5zaXplKCkgLSBwb3NpdGlvbik7CiAgICAg
ICAgIHBvc2l0aW9uICs9IG5CeXRlc0NsZWFyOwogICAgICAgICBpZiAobkJ5dGVzRW5jcnlwdGVk
KSB7Ci0gICAgICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNlbGYsICJzdWJzYW1wbGUgaW5kZXgg
JXUgLSAldSBieXRlcyBlbmNyeXB0ZWQgKHRvZG89JXp1KSIsIHNhbXBsZUluZGV4LCBuQnl0ZXNF
bmNyeXB0ZWQsIG1hcHBlZEJ1ZmZlci5zaXplKCkgLSBwb3NpdGlvbik7Ci0gICAgICAgICAgICBj
aXBoZXJFcnJvciA9IGdjcnlfY2lwaGVyX2RlY3J5cHQocHJpdi0+aGFuZGxlLCBtYXBwZWRCdWZm
ZXIuZGF0YSgpICsgcG9zaXRpb24sIG5CeXRlc0VuY3J5cHRlZCwgMCwgMCk7CisgICAgICAgICAg
ICBHU1RfVFJBQ0VfT0JKRUNUKHNlbGYsICJzdWJzYW1wbGUgaW5kZXggJXUgLSAldSBieXRlcyBl
bmNyeXB0ZWQgKHRvZG89JXp1KSIsIHNhbXBsZUluZGV4LCBuQnl0ZXNFbmNyeXB0ZWQsIG1hcHBl
ZEJ1ZmZlci0+c2l6ZSgpIC0gcG9zaXRpb24pOworICAgICAgICAgICAgY2lwaGVyRXJyb3IgPSBn
Y3J5X2NpcGhlcl9kZWNyeXB0KHByaXYtPmhhbmRsZSwgbWFwcGVkQnVmZmVyLT5kYXRhKCkgKyBw
b3NpdGlvbiwgbkJ5dGVzRW5jcnlwdGVkLCAwLCAwKTsKICAgICAgICAgICAgIGlmIChjaXBoZXJF
cnJvcikgewogICAgICAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgInN1YiBzYW1w
bGUgaW5kZXggJXUgZGVjcnlwdGlvbiBmYWlsZWQ6ICVzIiwgc2FtcGxlSW5kZXgsIGdwZ19zdHJl
cnJvcihjaXBoZXJFcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAzZTY4ZjA3NmMx
ZTNmZmM2ZDhlOTc2MzIxODdmOWJhOTdlM2E4ZGYyLi4wNTBkYjE3MDdiMThkM2E0NmE0ZTFhOTc3
YTZmZTExNDA0ZTlhODM4IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTktMDEtMDkgIENoYXJsaWUgVHVybmVyICA8
Y3R1cm5lckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHU3RyZWFtZXJdIEFkZCBzaGFyZWRCdWZm
ZXIgdXRpbGl0eSB0byBHc3RNYXBwZWRCdWZmZXIsIGFuZCBhIHRlc3RzdWl0ZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkyOTc3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Bs
YXRmb3JtR1RLLmNtYWtlOiBCdWlsZCB0aGUgbmV3IEdTdHJlYW1lciB0ZXN0IGhhcm5lc3MKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1BsYXRmb3JtV1BFLmNtYWtlOiBEaXR0by4KKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvZ3N0cmVhbWVyL0dTdHJlYW1lclRlc3QuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdTdHJlYW1lclRlc3Q6OlNldFVwKToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdTdHJlYW1lclRlc3Q6OlRlYXJEb3duKToKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvZ3N0cmVhbWVyL0dTdHJlYW1lclRlc3Qu
aDogQWRkZWQuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2dzdHJlYW1l
ci9Hc3RNYXBwZWRCdWZmZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRF
U1RfRik6CisKIDIwMTktMDEtMDYgIEZ1amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29u
eS5jb20+CiAKICAgICAgICAgW1dpbl1bQ2xhbmddIEZpeCBjb21waWxhdGlvbiB3YXJuaW5ncyBv
ZiBNaW5pQnJvd3NlcgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdU
Sy5jbWFrZSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggODQ0
OTlkZTM5OGIyNWQyNWFjMGM5MzYwMmFhYWQxZDY5MGQzZGU4YS4uYzM0ZmFlMDdjZjNjNmIwYTM5
YzM5OWZlZTMyY2QyNWMzYTBhYTdmNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9Q
bGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNt
YWtlCkBAIC0yNSw2ICsyNSw3IEBAIGluY2x1ZGVfZGlyZWN0b3JpZXMoCiBpbmNsdWRlX2RpcmVj
dG9yaWVzKFNZU1RFTQogICAgICR7R0RLM19JTkNMVURFX0RJUlN9CiAgICAgJHtHTElCX0lOQ0xV
REVfRElSU30KKyAgICAke0dTVFJFQU1FUl9JTkNMVURFX0RJUlN9CiAgICAgJHtHVEszX0lOQ0xV
REVfRElSU30KICAgICAke0xJQlNPVVBfSU5DTFVERV9ESVJTfQogKQpAQCAtOTMsNiArOTQsOCBA
QCBhZGRfZXhlY3V0YWJsZShUZXN0V2ViQ29yZQogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rl
c3RzL1dlYkNvcmUvRE5TLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNv
cmUvRmlsZU1vbml0b3IuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV2ViQ29y
ZS9GaWxlU3lzdGVtLmNwcAorICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUv
Z3N0cmVhbWVyL0dzdE1hcHBlZEJ1ZmZlci5jcHAKKyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9U
ZXN0cy9XZWJDb3JlL2dzdHJlYW1lci9HU3RyZWFtZXJUZXN0LmNwcAogICAgICR7VEVTVFdFQktJ
VEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvR3JpZFBvc2l0aW9uLmNwcAogICAgICR7VEVTVFdFQktJ
VEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvSFRNTFBhcnNlcklkaW9tcy5jcHAKICAgICAke1RFU1RX
RUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3JlL0xheW91dFVuaXQuY3BwCmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV1BFLmNtYWtlIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9QbGF0Zm9ybVdQRS5jbWFrZQppbmRleCBmYjFiNmI1MmEzNTYzODgwYTUyZjY4NTU4OGMyZTFm
YmJlYWJkOWUxLi5iNjg3NzU5OGQ4NzdkZTZjOGRhODZiNGViNTdjYzg2ZmYwYTJmN2VmIDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV1BFLmNtYWtlCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1XUEUuY21ha2UKQEAgLTIzLDYgKzIzLDcgQEAgaW5jbHVk
ZV9kaXJlY3RvcmllcygKIGluY2x1ZGVfZGlyZWN0b3JpZXMoU1lTVEVNCiAgICAgJHtDQUlST19J
TkNMVURFX0RJUlN9CiAgICAgJHtHTElCX0lOQ0xVREVfRElSU30KKyAgICAke0dTVFJFQU1FUl9J
TkNMVURFX0RJUlN9CiAgICAgJHtMSUJTT1VQX0lOQ0xVREVfRElSU30KICAgICAke1dQRV9JTkNM
VURFX0RJUlN9CiAgICAgJHtXUEVCQUNLRU5EX0ZET19JTkNMVURFX0RJUlN9CkBAIC02MCw2ICs2
MSw4IEBAIGFkZF9leGVjdXRhYmxlKFRlc3RXZWJDb3JlCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJ
Un0vVGVzdHNDb250cm9sbGVyLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dl
YkNvcmUvRmlsZU1vbml0b3IuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV2Vi
Q29yZS9GaWxlU3lzdGVtLmNwcAorICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNv
cmUvZ3N0cmVhbWVyL0dzdE1hcHBlZEJ1ZmZlci5jcHAKKyAgICAke1RFU1RXRUJLSVRBUElfRElS
fS9UZXN0cy9XZWJDb3JlL2dzdHJlYW1lci9HU3RyZWFtZXJUZXN0LmNwcAogICAgICR7VEVTVFdF
QktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvSFRNTFBhcnNlcklkaW9tcy5jcHAKICAgICAke1RF
U1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3JlL0xheW91dFVuaXQuY3BwCiAgICAgJHtURVNU
V0VCS0lUQVBJX0RJUn0vVGVzdHMvV2ViQ29yZS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcApkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2dzdHJlYW1lci9HU3RyZWFt
ZXJUZXN0LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9nc3RyZWFtZXIv
R1N0cmVhbWVyVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2Q3Zjk0ZGU4ZTdmZGE0ZWZkY2NiYjkzMmVi
YTM5MDg2ODdhYjhmNQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViQ29yZS9nc3RyZWFtZXIvR1N0cmVhbWVyVGVzdC5jcHAKQEAgLTAsMCArMSw1NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEsIFMuTC4KKyAqIENvcHlyaWdodCAoQykg
MjAxOCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBVU0UoR1NUUkVBTUVSKQorI2luY2x1ZGUgIkdTdHJlYW1lclRlc3QuaCIKKwor
I2luY2x1ZGUgPFdlYkNvcmUvR1N0cmVhbWVyQ29tbW9uLmg+CisjaW5jbHVkZSA8Z3N0L2dzdC5o
PgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkg
eworCit2b2lkIEdTdHJlYW1lclRlc3Q6OlNldFVwKCkKK3sKKyAgICBpZiAoIWdzdF9pc19pbml0
aWFsaXplZCgpKQorICAgICAgICBnc3RfaW5pdChudWxscHRyLCBudWxscHRyKTsKK30KKwordm9p
ZCBHU3RyZWFtZXJUZXN0OjpUZWFyRG93bigpCit7CisgICAgLy8gSXQgbWlnaHQgYmUgdGVtcHRp
bmcgdG8gY2FsbCBnc3RfZGVpbml0KCkgaGVyZS4gSG93ZXZlciwgdGhhdAorICAgIC8vIHdpbGwg
dGVhciBkb3duIHRoZSB3aG9sZSBwcm9jZXNzIGZyb20gdGhlIEdTdHJlYW1lciBQT1YsIGFuZCB0
aGUKKyAgICAvLyBzZWVtaW5nbHkgc3ltbWV0cmljYWwgY2FsbCB0byBnc3RfaW5pdCgpIHdpbGwg
ZmFpbCB0bworICAgIC8vIGluaXRpYWxpemUgR1N0cmVhbWVyIGNvcnJlY3RseS4KK30KKworfSAv
LyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9nc3RyZWFtZXIvR1N0
cmVhbWVyVGVzdC5oIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2dzdHJlYW1l
ci9HU3RyZWFtZXJUZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmIyY2JhZWU2MTY1YzY1OTc5MTQ3MDg2YTdk
MDFiMjExN2JmNWQ5YwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViQ29yZS9nc3RyZWFtZXIvR1N0cmVhbWVyVGVzdC5oCkBAIC0wLDAgKzEsNDEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhLCBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBVU0UoR1NUUkVBTUVSKQorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK2NsYXNzIEdT
dHJlYW1lclRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7CitwdWJsaWM6CisgICAgdm9pZCBT
ZXRVcCgpIG92ZXJyaWRlOworICAgIHZvaWQgVGVhckRvd24oKSBvdmVycmlkZTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvZ3N0cmVhbWVyL0dz
dE1hcHBlZEJ1ZmZlci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvZ3N0
cmVhbWVyL0dzdE1hcHBlZEJ1ZmZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjRmZmY1OWZhMzVlNTRhZWMy
OWE5MmJiZGU3ZWQzNmJlNmViOGUyYQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViQ29yZS9nc3RyZWFtZXIvR3N0TWFwcGVkQnVmZmVyLmNwcApAQCAtMCww
ICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEsIFMuTC4KKyAqIENv
cHlyaWdodCAoQykgMjAxOCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoR1NUUkVBTUVSKQorCisjaW5jbHVkZSAiR1N0cmVh
bWVyVGVzdC5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgIlRlc3QuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0dTdHJlYW1lckNvbW1vbi5oPgorCit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitURVNUX0YoR1N0cmVhbWVy
VGVzdCwgbWFwcGVkQnVmZmVyQmFzaWNzKQoreworICAgIEdSZWZQdHI8R3N0QnVmZmVyPiBidWYg
PSBhZG9wdEdSZWYoZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUobnVsbHB0ciwgNjQsIG51bGxwdHIp
KTsKKyAgICBhdXRvIG1hcHBlZEJ1ZiA9IEdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKGJ1Zi5nZXQo
KSwgR1NUX01BUF9SRUFEKTsKKyAgICBBU1NFUlRfVFJVRShtYXBwZWRCdWYpOworICAgIEVYUEVD
VF9FUShtYXBwZWRCdWYtPnNpemUoKSwgNjQpOworCisgICAgYXV0byBtYXBwZWRCdWYyID0gR3N0
TWFwcGVkQnVmZmVyOjpjcmVhdGUoYnVmLmdldCgpLCBHU1RfTUFQX1JFQUQpOworICAgIEFTU0VS
VF9UUlVFKG1hcHBlZEJ1ZjIpOworICAgIEVYUEVDVF9FUSgqbWFwcGVkQnVmLCAqbWFwcGVkQnVm
Mik7CisgICAgRVhQRUNUX0VRKGJ1Zi5nZXQoKSwgKm1hcHBlZEJ1Zik7CisgICAgRVhQRUNUX0VR
KCptYXBwZWRCdWYyLCBidWYuZ2V0KCkpOworfQorCitURVNUX0YoR1N0cmVhbWVyVGVzdCwgbWFw
cGVkQnVmZmVyUmVhZFNhbml0eSkKK3sKKyAgICBncG9pbnRlciBtZW1vcnkgPSBnX21hbGxvYygx
Nik7CisgICAgbWVtc2V0KG1lbW9yeSwgJ3gnLCAxNik7CisgICAgR1JlZlB0cjxHc3RCdWZmZXI+
IGJ1ZiA9IGFkb3B0R1JlZihnc3RfYnVmZmVyX25ld193cmFwcGVkKG1lbW9yeSwgMTYpKTsKKyAg
ICBhdXRvIG1hcHBlZEJ1ZiA9IEdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKGJ1Zi5nZXQoKSwgR1NU
X01BUF9SRUFEKTsKKyAgICBBU1NFUlRfVFJVRShtYXBwZWRCdWYpOworICAgIEVYUEVDVF9FUSht
YXBwZWRCdWYtPnNpemUoKSwgMTYpOworICAgIEVYUEVDVF9FUShtZW1jbXAobWVtb3J5LCBtYXBw
ZWRCdWYtPmRhdGEoKSwgMTYpLCAwKTsKKyAgICBFWFBFQ1RfRVEobWVtY21wKG1lbW9yeSwgbWFw
cGVkQnVmLT50cnlDcmVhdGVTaGFyZWRCdWZmZXIoKS0+ZGF0YSgpLCAxNiksIDApOworfQorCitU
RVNUX0YoR1N0cmVhbWVyVGVzdCwgbWFwcGVkQnVmZmVyV3JpdGVTYW5pdHkpCit7CisgICAgZ3Bv
aW50ZXIgbWVtb3J5ID0gZ19tYWxsb2MoMTYpOworICAgIG1lbXNldChtZW1vcnksICd4JywgMTYp
OworICAgIEdSZWZQdHI8R3N0QnVmZmVyPiBidWYgPSBhZG9wdEdSZWYoZ3N0X2J1ZmZlcl9uZXdf
d3JhcHBlZChtZW1vcnksIDE2KSk7CisKKyAgICBhdXRvIG1hcHBlZEJ1ZiA9IEdzdE1hcHBlZEJ1
ZmZlcjo6Y3JlYXRlKGJ1Zi5nZXQoKSwgR1NUX01BUF9XUklURSk7CisgICAgQVNTRVJUX1RSVUUo
bWFwcGVkQnVmKTsKKyAgICBFWFBFQ1RfRVEobWFwcGVkQnVmLT5zaXplKCksIDE2KTsKKyAgICBt
ZW1zZXQobWFwcGVkQnVmLT5kYXRhKCksICd5JywgbWFwcGVkQnVmLT5zaXplKCkpOworCisgICAg
RVhQRUNUX0VRKG1lbWNtcChtZW1vcnksIG1hcHBlZEJ1Zi0+ZGF0YSgpLCAxNiksIDApOworCisg
ICAgLy8gV2Ugc2hvdWxkIG5vdCBzaGFyZSBhIHdyaXRhYmxlIGJ1ZmZlci4KKyAgICBBU1NFUlRf
RkFMU0UobWFwcGVkQnVmLT50cnlDcmVhdGVTaGFyZWRCdWZmZXIoKSk7Cit9CisKK1RFU1RfRihH
U3RyZWFtZXJUZXN0LCBtYXBwZWRCdWZmZXJDYWNoZXNTaGFyZWRCdWZmZXJzKQoreworICAgIEdS
ZWZQdHI8R3N0QnVmZmVyPiBidWYgPSBhZG9wdEdSZWYoZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUo
bnVsbHB0ciwgNjQsIG51bGxwdHIpKTsKKyAgICBhdXRvIG1hcHBlZEJ1ZiA9IEdzdE1hcHBlZEJ1
ZmZlcjo6Y3JlYXRlKGJ1Zi5nZXQoKSwgR1NUX01BUF9SRUFEKTsKKyAgICBBU1NFUlRfVFJVRSht
YXBwZWRCdWYpOworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHNoYXJlZEJ1ZiA9IG1hcHBlZEJ1
Zi0+dHJ5Q3JlYXRlU2hhcmVkQnVmZmVyKCk7CisgICAgLy8gV2UgZXhwZWN0IHRoZSBzYW1lIGRh
dGEgcG9pbnRlciB3cmFwcGVkIGJ5IHNoYXJlZCBidWZmZXIsIG5vCisgICAgLy8gY29waWVzIG5l
ZWQgdG8gYmUgbWFkZS4KKyAgICBFWFBFQ1RfRVEoc2hhcmVkQnVmLT5kYXRhKCksIG1hcHBlZEJ1
Zi0+dHJ5Q3JlYXRlU2hhcmVkQnVmZmVyKCktPmRhdGEoKSk7Cit9CisKK1RFU1RfRihHU3RyZWFt
ZXJUZXN0LCBtYXBwZWRCdWZmZXJEb2VzTm90QWRkRXh0cmFSZWZzKQoreworICAgIC8vIEl0IGlz
IGltcG9ydGFudCBub3QgdG8gcmVmIHRoZSBwYXNzZWQgR1N0cmVhbWVyIGJ1ZmZlcnMsIGlmIHdl
CisgICAgLy8gZG8gc28sIHRoZW4gaW4gdGhlIGNhc2Ugb2Ygd3JpdGFibGUgYnVmZmVycywgdGhl
eSBjYW4gYmVjb21lCisgICAgLy8gdW53cml0YWJsZSwgZXZlbiB0aG91Z2ggd2UgYXJlIHRoZSBz
b2xlIG93bmVycy4gV2UgYWxzbyBkb24ndAorICAgIC8vIHdhbnQgdG8gdGFrZSBvd25lcnNoaXAg
b2YgdGhlIGJ1ZmZlciBmcm9tIHRoZSB1c2VyLWNvZGUsIHNpbmNlCisgICAgLy8gZm9yIHRyYW5z
Zm9ybUluUGxhY2UgdXNlLWNhc2VzLCB0aGF0IHdvdWxkIGJyZWFrLgorICAgIEdSZWZQdHI8R3N0
QnVmZmVyPiBidWYgPSBhZG9wdEdSZWYoZ3N0X2J1ZmZlcl9uZXcoKSk7CisKKyAgICBBU1NFUlRf
RVEoR1NUX09CSkVDVF9SRUZDT1VOVChidWYuZ2V0KCkpLCAxKTsKKworICAgIGF1dG8gbWFwcGVk
QnVmID0gR3N0TWFwcGVkQnVmZmVyOjpjcmVhdGUoYnVmLmdldCgpLCBHU1RfTUFQX1JFQURXUklU
RSk7CisgICAgQVNTRVJUX1RSVUUobWFwcGVkQnVmKTsKKworICAgIEFTU0VSVF9FUShHU1RfT0JK
RUNUX1JFRkNPVU5UKGJ1Zi5nZXQoKSksIDEpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2Vi
S2l0QVBJCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358774</attachid>
            <date>2019-01-09 19:39:06 -0800</date>
            <delta_ts>2019-01-10 07:06:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-192977-20190110033904.patch</filename>
            <type>text/plain</type>
            <size>43310</size>
            <attacher name="Charlie Turner">cturner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5NjcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWJmZGFhNmU4Yzg0ZDE3
YjMxYTVhNTJjOTI0YmQ3MGQ4ZThlZjJjYS4uMmU5NjUyZjUxZjY1ZDcxOTk3ZTcxZWFlYjgxZDMw
YWFlYTRmMjkxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDE5LTAxLTA5ICBDaGFy
bGllIFR1cm5lciAgPGN0dXJuZXJAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVyXSBB
ZGQgc2hhcmVkQnVmZmVyIHV0aWxpdHkgdG8gR3N0TWFwcGVkQnVmZmVyLCBhbmQgYSB0ZXN0c3Vp
dGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5Mjk3
NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBh
IHV0aWxpdHkgbWV0aG9kIG9uIEdzdE1hcHBlZEJ1ZmZlciB0byByZXR1cm4gYSBTaGFyZWRCdWZm
ZXIKKyAgICAgICAgdmlldyBvdmVyIHRoZSBtYXBwZWQgZGF0YSB3aXRoIG5vIGNvcGllcy4KKwor
ICAgICAgICBUaGlzIHBhdGNoIGFsc28gaW50cm9kdWNlcyBhIG5ldyBnc3RyZWFtZXIgcG9ydCBB
UEkgdGVzdAorICAgICAgICBkaXJlY3RvcnksIGFuZCBpbmNsdWRlcyBzb21lIHRlc3RzIGZvciBH
c3RNYXBwZWRCdWZmZXIuCisKKyAgICAgICAgTmV3IHRlc3RzIGluIHRoZSBBUEkgc2VjdGlvbi4K
KworICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHA6IEFkZCBhIG5ldyBvdmVybG9h
ZCBmb3IKKyAgICAgICAgR3N0TWFwcGVkQnVmZmVyIHRoYXQgYWxsb3dzIHNoYXJpbmcgdGhlIG1h
cHBlZCBHU3RyZWFtZXIgYnVmZmVycworICAgICAgICB3aXRoIHplcm8gY29waWVzLgorICAgICAg
ICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2hh
cmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVy
OjpEYXRhU2VnbWVudDo6ZGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZm
ZXI6OkRhdGFTZWdtZW50OjpzaXplIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRC
dWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvV2ViS2l0V2ViQXVk
aW9Tb3VyY2VHU3RyZWFtZXIuY3BwOgorICAgICAgICAod2ViS2l0V2ViQXVkaW9TcmNBbGxvY2F0
ZUJ1ZmZlcnNBbmRSZW5kZXJBdWRpbyk6IFVwZGF0ZSB0byBuZXcKKyAgICAgICAgQVBJLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjp0cnlDcmVhdGVTaGFyZWRCdWZmZXIp
OiBSZXR1cm4gYSBzaGFyZWQKKyAgICAgICAgYnVmZmVyIHNoYXJpbmcgdGhpcyBtYXBwZWQgYnVm
ZmVyLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21t
b24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKTogTWFrZSBH
c3RNYXBwZWRCdWZmZXIgUmVmQ291bnRlZAorICAgICAgICAoV2ViQ29yZTo6R3N0TWFwcGVkQnVm
ZmVyOjp+R3N0TWFwcGVkQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZl
cjo6ZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXI6OmRhdGEgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjpzaXplIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlcjo6aXNTaGFyYWJsZSBjb25zdCk6IE5ldyBwcmVk
aWNhdGUgdG8KKyAgICAgICAgY2hlY2sgd2hldGhlciB0aGlzIGJ1ZmZlciBjYW4gYmUgc2hhcmVk
IChpLmUuLCBpcyBub3Qgd3JpdGFibGUpCisgICAgICAgIChXZWJDb3JlOjpHc3RNYXBwZWRCdWZm
ZXI6OkdzdE1hcHBlZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXI6
Om9wZXJhdG9yIGJvb2wgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9JbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVRyYWNr
T2ZTYW1wbGUpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5ldyBBUEkuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9HU3RyZWFtZXJFTUVVdGlsaXRpZXMuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkluaXREYXRhOjpJbml0RGF0YSk6IERpdHRvLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3Ry
ZWFtZXIuY3BwOgorICAgICAgICAod2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRvckZpbmRBbmRT
ZXRLZXkpOiBEaXR0by4KKyAgICAgICAgKHdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JEZWNy
eXB0KTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01v
Y2tHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V3Jh
cHBlZE1vY2tSZWFsdGltZUF1ZGlvU291cmNlOjpyZW5kZXIpOiBEaXR0by4KKyAgICAgICAgKiBw
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNl
TGliV2ViUlRDLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdBdWRpb1Nv
dXJjZUxpYldlYlJUQzo6cHVsbEF1ZGlvRGF0YSk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VMaWJXZWJS
VEMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTGli
V2ViUlRDOjpjcmVhdGVCbGFja0ZyYW1lKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbGlid2VicnRjL0dTdHJlYW1lclZpZGVvRW5jb2RlckZhY3RvcnkuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyVmlkZW9FbmNvZGVyOjpGcmFnbWVudGl6ZSk6IERpdHRv
LgorCiAyMDE5LTAxLTA3ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBbV1BFXSBVc2UgV2lkZ2V0IGJvdW5kcyBmb3IgUGxhdGZvcm1TY3JlZW4gcmVjdGFu
Z2xlIGluZm9ybWF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFy
ZWRCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcApp
bmRleCA0NmZjODExY2MzNTMzNWU5ZDNhZmE2ZGJiMzNlZjkxOWMyZDYwYWUyLi4yNmRlMWJiZjM5
NWJmYWZkYzNlMWNmY2Q5OTk2MDEwMDBiNWRkMjEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1NoYXJlZEJ1ZmZlci5jcHAKQEAgLTU0LDYgKzU0LDIwIEBAIFNoYXJlZEJ1ZmZlcjo6U2hhcmVk
QnVmZmVyKFZlY3RvcjxjaGFyPiYmIGRhdGEpCiAgICAgYXBwZW5kKFdURk1vdmUoZGF0YSkpOwog
fQogCisjaWYgVVNFKEdTVFJFQU1FUikKK1JlZjxTaGFyZWRCdWZmZXI+IFNoYXJlZEJ1ZmZlcjo6
Y3JlYXRlKEdzdE1hcHBlZEJ1ZmZlciYgbWFwcGVkQnVmZmVyKQoreworICAgIEFTU0VSVChtYXBw
ZWRCdWZmZXIuaXNTaGFyYWJsZSgpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRC
dWZmZXIobWFwcGVkQnVmZmVyKSk7Cit9CisKK1NoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKEdz
dE1hcHBlZEJ1ZmZlciYgbWFwcGVkQnVmZmVyKQorICAgIDogbV9zaXplKG1hcHBlZEJ1ZmZlci5z
aXplKCkpCit7CisgICAgbV9zZWdtZW50cy5hcHBlbmQoezAsIERhdGFTZWdtZW50OjpjcmVhdGUo
Jm1hcHBlZEJ1ZmZlcil9KTsKK30KKyNlbmRpZgorCiBSZWZQdHI8U2hhcmVkQnVmZmVyPiBTaGFy
ZWRCdWZmZXI6OmNyZWF0ZVdpdGhDb250ZW50c09mRmlsZShjb25zdCBTdHJpbmcmIGZpbGVQYXRo
KQogewogICAgIGJvb2wgbWFwcGluZ1N1Y2Nlc3M7CkBAIC0yMTAsNiArMjI0LDkgQEAgY29uc3Qg
Y2hhciogU2hhcmVkQnVmZmVyOjpEYXRhU2VnbWVudDo6ZGF0YSgpIGNvbnN0CiAjZW5kaWYKICNp
ZiBVU0UoR0xJQikKICAgICAgICAgW10oY29uc3QgR1JlZlB0cjxHQnl0ZXM+JiBkYXRhKSB7IHJl
dHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihnX2J5dGVzX2dldF9kYXRhKGRhdGEu
Z2V0KCksIG51bGxwdHIpKTsgfSwKKyNlbmRpZgorI2lmIFVTRShHU1RSRUFNRVIpCisgICAgICAg
IFtdKGNvbnN0IFJlZlB0cjxHc3RNYXBwZWRCdWZmZXI+JiBkYXRhKSB7IHJldHVybiByZWludGVy
cHJldF9jYXN0PGNvbnN0IGNoYXIqPihkYXRhLT5kYXRhKCkpOyB9LAogI2VuZGlmCiAgICAgICAg
IFtdKGNvbnN0IEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiBkYXRhKSB7IHJldHVybiByZWlu
dGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihkYXRhLmRhdGEoKSk7IH0KICAgICApOwpAQCAtMjgz
LDYgKzMwMCw5IEBAIHNpemVfdCBTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpzaXplKCkgY29u
c3QKICNlbmRpZgogI2lmIFVTRShHTElCKQogICAgICAgICBbXShjb25zdCBHUmVmUHRyPEdCeXRl
cz4mIGRhdGEpIHsgcmV0dXJuIGdfYnl0ZXNfZ2V0X3NpemUoZGF0YS5nZXQoKSk7IH0sCisjZW5k
aWYKKyNpZiBVU0UoR1NUUkVBTUVSKQorICAgICAgICBbXShjb25zdCBSZWZQdHI8R3N0TWFwcGVk
QnVmZmVyPiYgZGF0YSkgeyByZXR1cm4gZGF0YS0+c2l6ZSgpOyB9LAogI2VuZGlmCiAgICAgICAg
IFtdKGNvbnN0IEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiBkYXRhKSB7IHJldHVybiBkYXRh
LnNpemUoKTsgfQogICAgICk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
aGFyZWRCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCmlu
ZGV4IGUyYWFlMmYzMDQ1NzM1NWY0ODllZWM0YWI0ZWNmMWNlN2QzZTQ1MmYuLmYxZTQ4MmQ2Mjg0
NDE1NzgzZGM0MDk1M2FmMzI3OGM3NTBjNjgxYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1No
YXJlZEJ1ZmZlci5oCkBAIC00OCw2ICs0OCwxMCBAQAogdHlwZWRlZiBzdHJ1Y3QgX0dCeXRlcyBH
Qnl0ZXM7CiAjZW5kaWYKIAorI2lmIFVTRShHU1RSRUFNRVIpCisjaW5jbHVkZSAiR1N0cmVhbWVy
Q29tbW9uLmgiCisjZW5kaWYKKwogI2lmIFVTRShGT1VOREFUSU9OKQogT0JKQ19DTEFTUyBOU0Fy
cmF5OwogT0JKQ19DTEFTUyBOU0RhdGE7CkBAIC04OCw2ICs5Miw5IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKEdCeXRlcyopOwogI2VuZGlmCiAKKyNpZiBV
U0UoR1NUUkVBTUVSKQorICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBjcmVhdGUoR3N0TWFw
cGVkQnVmZmVyJik7CisjZW5kaWYKICAgICAvLyBDYWxsaW5nIGRhdGEoKSBjYXVzZXMgYWxsIHRo
ZSBkYXRhIHNlZ21lbnRzIHRvIGJlIGNvcGllZCBpbnRvIG9uZSBzZWdtZW50IGlmIHRoZXkgYXJl
IG5vdCBhbHJlYWR5LgogICAgIC8vIEl0ZXJhdGUgdGhlIHNlZ21lbnRzIHVzaW5nIGJlZ2luKCkg
YW5kIGVuZCgpIGluc3RlYWQuCiAgICAgLy8gRklYTUU6IEF1ZGl0IHRoZSBjYWxsIHNpdGVzIG9m
IHRoaXMgZnVuY3Rpb24gYW5kIHJlcGxhY2UgdGhlbSB3aXRoIGl0ZXJhdGlvbiBpZiBwb3NzaWJs
ZS4KQEAgLTEyNSw2ICsxMzIsOSBAQCBwdWJsaWM6CiAjZW5kaWYKICNpZiBVU0UoR0xJQikKICAg
ICAgICAgc3RhdGljIFJlZjxEYXRhU2VnbWVudD4gY3JlYXRlKEdSZWZQdHI8R0J5dGVzPiYmIGRh
dGEpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGF0YVNlZ21lbnQoV1RGTW92ZShkYXRhKSkpOyB9
CisjZW5kaWYKKyNpZiBVU0UoR1NUUkVBTUVSKQorICAgICAgICBzdGF0aWMgUmVmPERhdGFTZWdt
ZW50PiBjcmVhdGUoUmVmUHRyPEdzdE1hcHBlZEJ1ZmZlcj4gZGF0YSkgeyByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBEYXRhU2VnbWVudChXVEZNb3ZlKGRhdGEpKSk7IH0KICNlbmRpZgogICAgICAgICBz
dGF0aWMgUmVmPERhdGFTZWdtZW50PiBjcmVhdGUoRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEm
JiBkYXRhKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IERhdGFTZWdtZW50KFdURk1vdmUoZGF0YSkp
KTsgfQogCkBAIC0xNDIsNiArMTUyLDEwIEBAIHB1YmxpYzoKICNpZiBVU0UoR0xJQikKICAgICAg
ICAgRGF0YVNlZ21lbnQoR1JlZlB0cjxHQnl0ZXM+JiYgZGF0YSkKICAgICAgICAgICAgIDogbV9p
bW11dGFibGVEYXRhKFdURk1vdmUoZGF0YSkpIHsgfQorI2VuZGlmCisjaWYgVVNFKEdTVFJFQU1F
UikKKyAgICAgICAgRGF0YVNlZ21lbnQoUmVmUHRyPEdzdE1hcHBlZEJ1ZmZlcj4mJiBkYXRhKQor
ICAgICAgICAgICAgOiBtX2ltbXV0YWJsZURhdGEoV1RGTW92ZShkYXRhKSkgeyB9CiAjZW5kaWYK
ICAgICAgICAgRGF0YVNlZ21lbnQoRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmJiBkYXRhKQog
ICAgICAgICAgICAgOiBtX2ltbXV0YWJsZURhdGEoV1RGTW92ZShkYXRhKSkgeyB9CkBAIC0xNTUs
NiArMTY5LDkgQEAgcHVibGljOgogI2VuZGlmCiAjaWYgVVNFKEdMSUIpCiAgICAgICAgICAgICBH
UmVmUHRyPEdCeXRlcz4sCisjZW5kaWYKKyNpZiBVU0UoR1NUUkVBTUVSKQorICAgICAgICAgICAg
UmVmUHRyPEdzdE1hcHBlZEJ1ZmZlcj4sCiAjZW5kaWYKICAgICAgICAgICAgIEZpbGVTeXN0ZW06
Ok1hcHBlZEZpbGVEYXRhPiBtX2ltbXV0YWJsZURhdGE7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBT
aGFyZWRCdWZmZXI7CkBAIC0xOTEsNiArMjA4LDkgQEAgcHJpdmF0ZToKICNpZiBVU0UoR0xJQikK
ICAgICBleHBsaWNpdCBTaGFyZWRCdWZmZXIoR0J5dGVzKik7CiAjZW5kaWYKKyNpZiBVU0UoR1NU
UkVBTUVSKQorICAgIGV4cGxpY2l0IFNoYXJlZEJ1ZmZlcihHc3RNYXBwZWRCdWZmZXImKTsKKyNl
bmRpZgogCiAgICAgdm9pZCBjb21iaW5lSW50b09uZVNlZ21lbnQoKSBjb25zdDsKICAgICAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9XZWJLaXRX
ZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9nc3RyZWFtZXIvV2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwCmluZGV4IDAyMTAz
NTJiMGQxMGMyODZlOWMxNDEwNWQ5ZWYzZDBkZGEyN2IzZWIuLjJmOTM3ZjY3N2NjYzhlMDhjMjY1
N2NkODQzNjFlYzJiYzliNmFjYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL1dlYktpdFdlYkF1ZGlvU291
cmNlR1N0cmVhbWVyLmNwcApAQCAtMzI3LDcgKzMyNyw3IEBAIHN0YXRpYyBPcHRpb25hbDxWZWN0
b3I8R1JlZlB0cjxHc3RCdWZmZXI+Pj4gd2ViS2l0V2ViQXVkaW9TcmNBbGxvY2F0ZUJ1ZmZlcnNB
bmRSCiAKICAgICBWZWN0b3I8R1JlZlB0cjxHc3RCdWZmZXI+PiBjaGFubmVsQnVmZmVyTGlzdDsK
ICAgICBjaGFubmVsQnVmZmVyTGlzdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHByaXYtPnNvdXJj
ZXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8R3N0TWFwcGVkQnVmZmVyPiBtYXBwZWRCdWZmZXJzOwor
ICAgIFZlY3RvcjxSZWZQdHI8R3N0TWFwcGVkQnVmZmVyPj4gbWFwcGVkQnVmZmVyczsKICAgICBt
YXBwZWRCdWZmZXJzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocHJpdi0+c291cmNlcy5zaXplKCkp
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcml2LT5zb3VyY2VzLnNpemUoKTsgKytp
KSB7CiAgICAgICAgIEdSZWZQdHI8R3N0QnVmZmVyPiBidWZmZXI7CkBAIC0zNDIsMTAgKzM0Miwx
MCBAQCBzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPEdSZWZQdHI8R3N0QnVmZmVyPj4+IHdlYktpdFdl
YkF1ZGlvU3JjQWxsb2NhdGVCdWZmZXJzQW5kUgogICAgICAgICBBU1NFUlQoYnVmZmVyKTsKICAg
ICAgICAgR1NUX0JVRkZFUl9USU1FU1RBTVAoYnVmZmVyLmdldCgpKSA9IHRpbWVzdGFtcDsKICAg
ICAgICAgR1NUX0JVRkZFUl9EVVJBVElPTihidWZmZXIuZ2V0KCkpID0gZHVyYXRpb247Ci0gICAg
ICAgIEdzdE1hcHBlZEJ1ZmZlciBtYXBwZWRCdWZmZXIoYnVmZmVyLmdldCgpLCBHU1RfTUFQX1JF
QURXUklURSk7CisgICAgICAgIGF1dG8gbWFwcGVkQnVmZmVyID0gR3N0TWFwcGVkQnVmZmVyOjpj
cmVhdGUoYnVmZmVyLmdldCgpLCBHU1RfTUFQX1JFQURXUklURSk7CiAgICAgICAgIEFTU0VSVCht
YXBwZWRCdWZmZXIpOwogICAgICAgICBtYXBwZWRCdWZmZXJzLnVuY2hlY2tlZEFwcGVuZChXVEZN
b3ZlKG1hcHBlZEJ1ZmZlcikpOwotICAgICAgICBwcml2LT5idXMtPnNldENoYW5uZWxNZW1vcnko
aSwgcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KG1hcHBlZEJ1ZmZlcnNbaV0uZGF0YSgpKSwgcHJp
di0+ZnJhbWVzVG9QdWxsKTsKKyAgICAgICAgcHJpdi0+YnVzLT5zZXRDaGFubmVsTWVtb3J5KGks
IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihtYXBwZWRCdWZmZXJzW2ldLT5kYXRhKCkpLCBwcml2
LT5mcmFtZXNUb1B1bGwpOwogICAgICAgICBjaGFubmVsQnVmZmVyTGlzdC51bmNoZWNrZWRBcHBl
bmQoV1RGTW92ZShidWZmZXIpKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5jcHAK
aW5kZXggMGJhNDczOWExZGU1ZDQyMTY4ZmVlZDdhMDViODY4MmQ2MDU3YThiMS4uYTUwNDljYjhi
NDJmZGE2ZDY2YzcwZWQzZWI3Y2Q5MTU2YWZkMjAzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1v
bi5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgIkdzdEFsbG9jYXRvckZhc3RNYWxs
b2MuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAj
aW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLWluZm8uaD4KICNpbmNsdWRlIDxnc3QvZ3N0Lmg+CiAj
aW5jbHVkZSA8bXV0ZXg+CkBAIC0zNTcsNiArMzU4LDE4IEBAIHZvaWQgY29ubmVjdFNpbXBsZUJ1
c01lc3NhZ2VDYWxsYmFjayhHc3RFbGVtZW50KiBwaXBlbGluZSkKICAgICBnX3NpZ25hbF9jb25u
ZWN0KGJ1cy5nZXQoKSwgIm1lc3NhZ2UiLCBHX0NBTExCQUNLKHNpbXBsZUJ1c01lc3NhZ2VDYWxs
YmFjayksIHBpcGVsaW5lKTsKIH0KIAorUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gR3N0TWFwcGVkQnVm
ZmVyOjp0cnlDcmVhdGVTaGFyZWRCdWZmZXIoKQoreworICAgIC8vIFNoYXJlZEJ1ZmZlciBwcm92
aWRlcyBhIHJlYWQtb25seSB2aWV3IG9uIHdoYXQgaXQgZXhwZWN0cyBhcmUKKyAgICAvLyBpbW11
dGFibGUgZGF0YS4gRG8gbm90IGNyZWF0ZSBvbmUgaXMgd3JpdGFibGUgYW5kIGhlbmNlIG11dGFi
bGUuCisgICAgaWYgKCFpc1NoYXJhYmxlKCkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiBTaGFyZWRC
dWZmZXI6OmNyZWF0ZSgqdGhpcyk7Cit9CisKIH0KIAogI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
R1N0cmVhbWVyQ29tbW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmgKaW5kZXggMmVmMTU1MDJhMDA1NjMxZWU0ZDA3ZjdmYTMy
YjU0ZjQ2OThjZmJjOC4uZGJiZmI4YjYxYTM4MDNjYjM0ZjY2MmZkNGVjZGFjZjViNmQ2YjFhOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dT
dHJlYW1lckNvbW1vbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9HU3RyZWFtZXJDb21tb24uaApAQCAtMjcsMTAgKzI3LDEyIEBACiAjaW5jbHVkZSA8
Z3N0L3ZpZGVvL3ZpZGVvLWZvcm1hdC5oPgogI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby1pbmZv
Lmg+CiAjaW5jbHVkZSA8d3RmL01lZGlhVGltZS5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZl
UmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEludFNpemU7Citj
bGFzcyBTaGFyZWRCdWZmZXI7CiAKIGlubGluZSBib29sIHdlYmtpdEdzdENoZWNrVmVyc2lvbihn
dWludCBtYWpvciwgZ3VpbnQgbWlub3IsIGd1aW50IG1pY3JvKQogewpAQCAtNzcsNTEgKzc5LDQ2
IEBAIGlubGluZSBHc3RDbG9ja1RpbWUgdG9Hc3RDbG9ja1RpbWUoY29uc3QgTWVkaWFUaW1lICZt
ZWRpYVRpbWUpCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdzdENsb2NrVGltZT4odG9Hc3RVbnNp
Z25lZDY0VGltZShtZWRpYVRpbWUpKTsKIH0KIAotY2xhc3MgR3N0TWFwcGVkQnVmZmVyIHsKLSAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShHc3RNYXBwZWRCdWZmZXIpOworY2xhc3MgR3N0TWFwcGVk
QnVmZmVyIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEdzdE1hcHBlZEJ1ZmZlcj4gewog
cHVibGljOgotCi0gICAgR3N0TWFwcGVkQnVmZmVyKEdzdE1hcHBlZEJ1ZmZlciYmIG90aGVyKQot
ICAgICAgICA6IG1fYnVmZmVyKG90aGVyLm1fYnVmZmVyKQotICAgICAgICAsIG1faW5mbyhvdGhl
ci5tX2luZm8pCi0gICAgICAgICwgbV9pc1ZhbGlkKG90aGVyLm1faXNWYWxpZCkKLSAgICB7Ci0g
ICAgICAgIG90aGVyLm1faXNWYWxpZCA9IGZhbHNlOwotICAgIH0KLQotICAgIEdzdE1hcHBlZEJ1
ZmZlcihHc3RCdWZmZXIqIGJ1ZmZlciwgR3N0TWFwRmxhZ3MgZmxhZ3MpCi0gICAgICAgIDogbV9i
dWZmZXIoYnVmZmVyKQorICAgIHN0YXRpYyBSZWZQdHI8R3N0TWFwcGVkQnVmZmVyPiBjcmVhdGUo
R3N0QnVmZmVyKiBidWZmZXIsIEdzdE1hcEZsYWdzIGZsYWdzKQogICAgIHsKLSAgICAgICAgbV9p
c1ZhbGlkID0gZ3N0X2J1ZmZlcl9tYXAobV9idWZmZXIsICZtX2luZm8sIGZsYWdzKTsKKyAgICAg
ICAgR3N0TWFwSW5mbyBpbmZvOworICAgICAgICBpZiAoIWdzdF9idWZmZXJfbWFwKGJ1ZmZlciwg
JmluZm8sIGZsYWdzKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEdzdE1hcHBlZEJ1ZmZlcihidWZmZXIsIGluZm8pKTsKICAgICB9CiAK
ICAgICAvLyBVbmZvcnR1bmF0ZWx5LCBHU1RfTUFQX1JFQURXUklURSBpcyBkZWZpbmVkIG91dCBv
ZiBsaW5lIGZyb20gdGhlIE1hcEZsYWdzCiAgICAgLy8gZW51bSBhcyBhbiBpbnQsIGFuZCBDKysg
aXMgY2FyZWZ1bCB0byBub3QgaW1wbGljaXR5IGNvbnZlcnQgaXQgdG8gYW4gZW51bS4KLSAgICBH
c3RNYXBwZWRCdWZmZXIoR3N0QnVmZmVyKiBidWZmZXIsIGludCBmbGFncykKLSAgICAgICAgOiBH
c3RNYXBwZWRCdWZmZXIoYnVmZmVyLCBzdGF0aWNfY2FzdDxHc3RNYXBGbGFncz4oZmxhZ3MpKSB7
IH0KKyAgICBzdGF0aWMgUmVmUHRyPEdzdE1hcHBlZEJ1ZmZlcj4gY3JlYXRlKEdzdEJ1ZmZlciog
YnVmZmVyLCBpbnQgZmxhZ3MpCisgICAgeworICAgICAgICByZXR1cm4gR3N0TWFwcGVkQnVmZmVy
OjpjcmVhdGUoYnVmZmVyLCBzdGF0aWNfY2FzdDxHc3RNYXBGbGFncz4oZmxhZ3MpKTsKKyAgICB9
CiAKICAgICB+R3N0TWFwcGVkQnVmZmVyKCkKICAgICB7Ci0gICAgICAgIGlmIChtX2lzVmFsaWQp
Ci0gICAgICAgICAgICBnc3RfYnVmZmVyX3VubWFwKG1fYnVmZmVyLCAmbV9pbmZvKTsKLSAgICAg
ICAgbV9pc1ZhbGlkID0gZmFsc2U7CisgICAgICAgIGdzdF9idWZmZXJfdW5tYXAobV9idWZmZXIs
ICZtX2luZm8pOwogICAgIH0KIAotICAgIHVpbnQ4X3QqIGRhdGEoKSB7IEFTU0VSVChtX2lzVmFs
aWQpOyByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1faW5mby5kYXRhKTsgfQotICAgIGNv
bnN0IHVpbnQ4X3QqIGRhdGEoKSBjb25zdCB7IEFTU0VSVChtX2lzVmFsaWQpOyByZXR1cm4gc3Rh
dGljX2Nhc3Q8dWludDhfdCo+KG1faW5mby5kYXRhKTsgfQotCi0gICAgc2l6ZV90IHNpemUoKSBj
b25zdCB7IEFTU0VSVChtX2lzVmFsaWQpOyByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2lu
Zm8uc2l6ZSk7IH0KLQotICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVy
biBtX2lzVmFsaWQ7IH0KKyAgICB1aW50OF90KiBkYXRhKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
dWludDhfdCo+KG1faW5mby5kYXRhKTsgfQorICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90Kj4obV9pbmZvLmRhdGEpOyB9CisgICAgc2l6
ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG1faW5mby5zaXpl
KTsgfQorICAgIGJvb2wgaXNTaGFyYWJsZSgpIGNvbnN0IHsgcmV0dXJuICEobV9pbmZvLmZsYWdz
ICYgR1NUX01BUF9XUklURSk7IH0KKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiB0cnlDcmVhdGVT
aGFyZWRCdWZmZXIoKTsKIAogcHJpdmF0ZToKKyAgICBHc3RNYXBwZWRCdWZmZXIoR3N0QnVmZmVy
KiBidWZmZXIsIEdzdE1hcEluZm8gaW5mbykKKyAgICAgICAgOiBtX2J1ZmZlcihidWZmZXIpLCBt
X2luZm8oaW5mbykKKyAgICB7CisgICAgfQorCiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBHc3RNYXBwZWRCdWZmZXImLCBjb25zdCBHc3RNYXBwZWRCdWZmZXImKTsKICAgICBmcmll
bmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEdzdE1hcHBlZEJ1ZmZlciYsIGNvbnN0IEdzdEJ1ZmZl
ciopOwogICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgR3N0QnVmZmVyKiBhLCBjb25z
dCBHc3RNYXBwZWRCdWZmZXImIGIpIHsgcmV0dXJuIG9wZXJhdG9yPT0oYiwgYSk7IH0KIAogICAg
IEdzdEJ1ZmZlciogbV9idWZmZXIgeyBudWxscHRyIH07CiAgICAgR3N0TWFwSW5mbyBtX2luZm87
Ci0gICAgYm9vbCBtX2lzVmFsaWQgeyBmYWxzZSB9OwogfTsKIAogaW5saW5lIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBHc3RNYXBwZWRCdWZmZXImIGEsIGNvbnN0IEdzdE1hcHBlZEJ1ZmZlciYgYikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9J
bmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyLmNw
cAppbmRleCBjMmRkMTIzMjBjMWQ4OWMxOTU2MmE2MWU4MjZkOTBmYzBlNzZiYTQ5Li5jZDI1NjVm
ZDMxN2IxNmRkMGEwNDNmNDExNDZkNWFlMzE1NjYxNTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdT
dHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL0luYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC0xMTIsMTYgKzExMiwx
NiBAQCB2b2lkIEluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVRyYWNrT2ZT
YW1wbGUoKQogICAgICAgICAgICAgR1NUX1dBUk5JTkcoIlRyYWNrICVkIGdvdCBzYW1wbGUgd2l0
aCBubyBidWZmZXIuIiwgbV9pbmRleCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
fQotICAgICAgICBHc3RNYXBwZWRCdWZmZXIgbWFwcGVkQnVmZmVyKGJ1ZmZlciwgR1NUX01BUF9S
RUFEKTsKLSAgICAgICAgQVNTRVJUKG1hcHBlZEJ1ZmZlcik7Ci0gICAgICAgIGlmICghbWFwcGVk
QnVmZmVyKSB7CisgICAgICAgIGF1dG8gbWFwcGVkQnVmZmVyID0gR3N0TWFwcGVkQnVmZmVyOjpj
cmVhdGUoYnVmZmVyLCBHU1RfTUFQX1JFQUQpOworICAgICAgICBBU1NFUlQobWFwcGVkQnVmZmVy
LmdldCgpKTsKKyAgICAgICAgaWYgKCFtYXBwZWRCdWZmZXIuZ2V0KCkpIHsKICAgICAgICAgICAg
IEdTVF9XQVJOSU5HKCJUcmFjayAlZCB1bmFibGUgdG8gbWFwIGJ1ZmZlci4iLCBtX2luZGV4KTsK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgR1NUX0lORk8oIlRy
YWNrICVkIHBhcnNpbmcgc2FtcGxlOiAlLipzIiwgbV9pbmRleCwgc3RhdGljX2Nhc3Q8aW50Piht
YXBwZWRCdWZmZXIuc2l6ZSgpKSwKLSAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KG1hcHBlZEJ1ZmZlci5kYXRhKCkpKTsKLSAgICAgICAgY2xpZW50KCktPnBhcnNlV2ViVlRUQ3Vl
RGF0YShyZWludGVycHJldF9jYXN0PGNoYXIqPihtYXBwZWRCdWZmZXIuZGF0YSgpKSwgbWFwcGVk
QnVmZmVyLnNpemUoKSk7CisgICAgICAgIEdTVF9JTkZPKCJUcmFjayAlZCBwYXJzaW5nIHNhbXBs
ZTogJS4qcyIsIG1faW5kZXgsIHN0YXRpY19jYXN0PGludD4obWFwcGVkQnVmZmVyLT5zaXplKCkp
LAorICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obWFwcGVkQnVmZmVyLT5kYXRh
KCkpKTsKKyAgICAgICAgY2xpZW50KCktPnBhcnNlV2ViVlRUQ3VlRGF0YShyZWludGVycHJldF9j
YXN0PGNoYXIqPihtYXBwZWRCdWZmZXItPmRhdGEoKSksIG1hcHBlZEJ1ZmZlci0+c2l6ZSgpKTsK
ICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9lbWUvR1N0cmVhbWVyRU1FVXRpbGl0aWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0dTdHJlYW1lckVNRVV0aWxpdGllcy5oCmlu
ZGV4IGJlZmY3NmE1YTZhOGU1NTgyNmQ0NzliZDYwYzM4YmViOGJiMzA4YTIuLjVlMDFkYzI1Y2Q0
YTE1MjEyOWFmODkwZmM4N2U2M2E4NWRjMmE1YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvR1N0cmVhbWVyRU1FVXRpbGl0aWVzLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9HU3Ry
ZWFtZXJFTUVVdGlsaXRpZXMuaApAQCAtNDAsMTIgKzQwLDEyIEBAIHB1YmxpYzoKICAgICBJbml0
RGF0YShjb25zdCBTdHJpbmcmIHN5c3RlbUlkLCBHc3RCdWZmZXIqIGluaXREYXRhKQogICAgICAg
ICA6IG1fc3lzdGVtSWQoc3lzdGVtSWQpCiAgICAgewotICAgICAgICBHc3RNYXBwZWRCdWZmZXIg
bWFwcGVkSW5pdERhdGEoaW5pdERhdGEsIEdTVF9NQVBfUkVBRCk7CisgICAgICAgIGF1dG8gbWFw
cGVkSW5pdERhdGEgPSBHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZShpbml0RGF0YSwgR1NUX01BUF9S
RUFEKTsKICAgICAgICAgaWYgKCFtYXBwZWRJbml0RGF0YSkgewogICAgICAgICAgICAgR1NUX0VS
Uk9SKCJjYW5ub3QgbWFwICVzIHByb3RlY3Rpb24gZGF0YSIsIHN5c3RlbUlkLnV0ZjgoKS5kYXRh
KCkpOwogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KLSAgICAg
ICAgbV9wYXlsb2FkID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUobWFwcGVkSW5pdERhdGEuZGF0YSgp
LCBtYXBwZWRJbml0RGF0YS5zaXplKCkpOworICAgICAgICBtX3BheWxvYWQgPSBtYXBwZWRJbml0
RGF0YS0+dHJ5Q3JlYXRlU2hhcmVkQnVmZmVyKCk7CiAgICAgfQogCiAgICAgdm9pZCBhcHBlbmQo
SW5pdERhdGEmJiBpbml0RGF0YSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJL
aXRDbGVhcktleURlY3J5cHRvckdTdHJlYW1lci5jcHAKaW5kZXggZjk0MWU1MjhmNDdjYmQwNjk1
NzliYzVlNjMzNTgxZTZiNjEwYzcyMy4uZmQ2ZGNmOGQzNzZmZGI0OTVlZTFiMTk3OTg3NTQ0MDgz
OTdmMTY0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL2VtZS9XZWJLaXRDbGVhcktleURlY3J5cHRvckdTdHJlYW1lci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9XZWJLaXRDbGVhcktl
eURlY3J5cHRvckdTdHJlYW1lci5jcHAKQEAgLTE1MCw3ICsxNTAsNyBAQCBzdGF0aWMgZ2Jvb2xl
YW4gd2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRvckhhbmRsZUtleVJlc3BvbnNlKFdlYktpdE1l
ZGlhQ29tbW9uRQogICAgIHJldHVybiBUUlVFOwogfQogCi1zdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0
TWVkaWFDbGVhcktleURlY3J5cHRvckZpbmRBbmRTZXRLZXkoV2ViS2l0TWVkaWFDbGVhcktleURl
Y3J5cHRQcml2YXRlKiBwcml2LCBjb25zdCBXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXImIGtleUlE
QnVmZmVyKQorc3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JGaW5k
QW5kU2V0S2V5KFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSogcHJpdiwgY29uc3Qg
UmVmPFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlcj4mIGtleUlEQnVmZmVyKQogewogICAgIEdSZWZQ
dHI8R3N0QnVmZmVyPiBrZXlCdWZmZXI7CiAgICAgZm9yIChhdXRvJiBrZXkgOiBwcml2LT5rZXlz
KSB7CkBAIC0xNjUsMTQgKzE2NSwxNCBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0TWVkaWFDbGVh
cktleURlY3J5cHRvckZpbmRBbmRTZXRLZXkoV2ViS2l0TWVkaWFDbGVhcktleURlYwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyIG1h
cHBlZEtleVZhbHVlQnVmZmVyKGtleUJ1ZmZlci5nZXQoKSwgR1NUX01BUF9SRUFEKTsKKyAgICBh
dXRvIG1hcHBlZEtleVZhbHVlQnVmZmVyID0gV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjpjcmVh
dGUoa2V5QnVmZmVyLmdldCgpLCBHU1RfTUFQX1JFQUQpOwogICAgIGlmICghbWFwcGVkS2V5VmFs
dWVCdWZmZXIpIHsKICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChwcml2LCAiRmFpbGVkIHRvIG1h
cCBkZWNyeXB0aW9uIGtleSIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAg
QVNTRVJUKG1hcHBlZEtleVZhbHVlQnVmZmVyLnNpemUoKSA9PSBDTEVBUktFWV9TSVpFKTsKLSAg
ICBpZiAoZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9jaXBoZXJfc2V0a2V5KHByaXYtPmhhbmRs
ZSwgbWFwcGVkS2V5VmFsdWVCdWZmZXIuZGF0YSgpLCBtYXBwZWRLZXlWYWx1ZUJ1ZmZlci5zaXpl
KCkpKSB7CisgICAgQVNTRVJUKG1hcHBlZEtleVZhbHVlQnVmZmVyLT5zaXplKCkgPT0gQ0xFQVJL
RVlfU0laRSk7CisgICAgaWYgKGdjcnlfZXJyb3JfdCBlcnJvciA9IGdjcnlfY2lwaGVyX3NldGtl
eShwcml2LT5oYW5kbGUsIG1hcHBlZEtleVZhbHVlQnVmZmVyLT5kYXRhKCksIG1hcHBlZEtleVZh
bHVlQnVmZmVyLT5zaXplKCkpKSB7CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QocHJpdiwgImdj
cnlfY2lwaGVyX3NldGtleSBmYWlsZWQ6ICVzIiwgZ3BnX3N0cmVycm9yKGVycm9yKSk7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0xODgsMTkgKzE4OCwxOSBAQCBzdGF0aWMgZ2Jv
b2xlYW4gd2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRvckRlY3J5cHQoV2ViS2l0TWVkaWFDb21t
b25FbmNyeXB0aW9uRAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgV2ViQ29y
ZTo6R3N0TWFwcGVkQnVmZmVyIG1hcHBlZElWQnVmZmVyKGl2QnVmZmVyLCBHU1RfTUFQX1JFQUQp
OworICAgIGF1dG8gbWFwcGVkSVZCdWZmZXIgPSBXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXI6OmNy
ZWF0ZShpdkJ1ZmZlciwgR1NUX01BUF9SRUFEKTsKICAgICBpZiAoIW1hcHBlZElWQnVmZmVyKSB7
CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBtYXAgSVYiKTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIHVpbnQ4X3QgY3RyW0NMRUFSS0VZX1NJ
WkVdOwotICAgIGlmIChtYXBwZWRJVkJ1ZmZlci5zaXplKCkgPT0gOCkgeworICAgIGlmIChtYXBw
ZWRJVkJ1ZmZlci0+c2l6ZSgpID09IDgpIHsKICAgICAgICAgbWVtc2V0KGN0ciArIDgsIDAsIDgp
OwotICAgICAgICBtZW1jcHkoY3RyLCBtYXBwZWRJVkJ1ZmZlci5kYXRhKCksIDgpOworICAgICAg
ICBtZW1jcHkoY3RyLCBtYXBwZWRJVkJ1ZmZlci0+ZGF0YSgpLCA4KTsKICAgICB9IGVsc2Ugewog
ICAgICAgICBBU1NFUlQobWFwcGVkSVZCdWZmZXIuc2l6ZSgpID09IENMRUFSS0VZX1NJWkUpOwot
ICAgICAgICBtZW1jcHkoY3RyLCBtYXBwZWRJVkJ1ZmZlci5kYXRhKCksIENMRUFSS0VZX1NJWkUp
OworICAgICAgICBtZW1jcHkoY3RyLCBtYXBwZWRJVkJ1ZmZlci0+ZGF0YSgpLCBDTEVBUktFWV9T
SVpFKTsKICAgICB9CiAKICAgICBXZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdFByaXZhdGUqIHBy
aXYgPSBXRUJLSVRfTUVESUFfQ0tfREVDUllQVF9HRVRfUFJJVkFURShXRUJLSVRfTUVESUFfQ0tf
REVDUllQVChzZWxmKSk7CkBAIC0yMTYsMzAgKzIxNiwzMCBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Vi
S2l0TWVkaWFDbGVhcktleURlY3J5cHRvckRlY3J5cHQoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0
aW9uRAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgV2ViQ29yZTo6R3N0TWFw
cGVkQnVmZmVyIG1hcHBlZEtleUlkQnVmZmVyKGtleUlEQnVmZmVyLCBHU1RfTUFQX1JFQUQpOwor
ICAgIGF1dG8gbWFwcGVkS2V5SWRCdWZmZXIgPSBXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXI6OmNy
ZWF0ZShrZXlJREJ1ZmZlciwgR1NUX01BUF9SRUFEKTsKICAgICBpZiAoIW1hcHBlZEtleUlkQnVm
ZmVyKSB7CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBtYXAga2V5
IGlkIGJ1ZmZlciIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgV2ViQ29y
ZTo6R3N0TWFwcGVkQnVmZmVyIG1hcHBlZEJ1ZmZlcihidWZmZXIsIEdTVF9NQVBfUkVBRFdSSVRF
KTsKKyAgICBhdXRvIG1hcHBlZEJ1ZmZlciA9IFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlcjo6Y3Jl
YXRlKGJ1ZmZlciwgR1NUX01BUF9SRUFEV1JJVEUpOwogICAgIGlmICghbWFwcGVkQnVmZmVyKSB7
CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwgIkZhaWxlZCB0byBtYXAgYnVmZmVyIik7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICB3ZWJLaXRNZWRpYUNsZWFyS2V5
RGVjcnlwdG9yRmluZEFuZFNldEtleShwcml2LCBtYXBwZWRLZXlJZEJ1ZmZlcik7CisgICAgd2Vi
S2l0TWVkaWFDbGVhcktleURlY3J5cHRvckZpbmRBbmRTZXRLZXkocHJpdiwgbWFwcGVkS2V5SWRC
dWZmZXIucmVsZWFzZU5vbk51bGwoKSk7CiAKICAgICB1bnNpZ25lZCBwb3NpdGlvbiA9IDA7CiAg
ICAgdW5zaWduZWQgc2FtcGxlSW5kZXggPSAwOwogCiAgICAgaWYgKCFzdWJTYW1wbGVDb3VudCkg
ewogICAgICAgICAvLyBGdWxsIHNhbXBsZSBlbmNyeXB0aW9uLgotICAgICAgICBHU1RfVFJBQ0Vf
T0JKRUNUKHNlbGYsICJmdWxsIHNhbXBsZSBlbmNyeXB0aW9uOiAlenUgZW5jcnlwdGVkIGJ5dGVz
IiwgbWFwcGVkQnVmZmVyLnNpemUoKSk7CisgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc2VsZiwg
ImZ1bGwgc2FtcGxlIGVuY3J5cHRpb246ICV6dSBlbmNyeXB0ZWQgYnl0ZXMiLCBtYXBwZWRCdWZm
ZXItPnNpemUoKSk7CiAKICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGJ1ZmZlciBpcyBlbXB0eS4K
LSAgICAgICAgaWYgKG1hcHBlZEJ1ZmZlci5zaXplKCkpIHsKLSAgICAgICAgICAgIGNpcGhlckVy
cm9yID0gZ2NyeV9jaXBoZXJfZGVjcnlwdChwcml2LT5oYW5kbGUsIG1hcHBlZEJ1ZmZlci5kYXRh
KCksIG1hcHBlZEJ1ZmZlci5zaXplKCksIDAsIDApOworICAgICAgICBpZiAobWFwcGVkQnVmZmVy
LT5zaXplKCkpIHsKKyAgICAgICAgICAgIGNpcGhlckVycm9yID0gZ2NyeV9jaXBoZXJfZGVjcnlw
dChwcml2LT5oYW5kbGUsIG1hcHBlZEJ1ZmZlci0+ZGF0YSgpLCBtYXBwZWRCdWZmZXItPnNpemUo
KSwgMCwgMCk7CiAgICAgICAgICAgICBpZiAoY2lwaGVyRXJyb3IpIHsKICAgICAgICAgICAgICAg
ICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJmdWxsIHNhbXBsZSBkZWNyeXB0aW9uIGZhaWxlZDog
JXMiLCBncGdfc3RyZXJyb3IoY2lwaGVyRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0yNTUsMTYgKzI1NSwxNiBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0TWVkaWFD
bGVhcktleURlY3J5cHRvckRlY3J5cHQoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRAogICAg
IH0KIAogICAgIC8vIFN1YnNhbXBsZSBlbmNyeXB0aW9uLgotICAgIFdlYkNvcmU6OkdzdE1hcHBl
ZEJ1ZmZlciBtYXBwZWRTdWJTYW1wbGVzQnVmZmVyKHN1YlNhbXBsZXNCdWZmZXIsIEdTVF9NQVBf
UkVBRCk7CisgICAgYXV0byBtYXBwZWRTdWJTYW1wbGVzQnVmZmVyID0gV2ViQ29yZTo6R3N0TWFw
cGVkQnVmZmVyOjpjcmVhdGUoc3ViU2FtcGxlc0J1ZmZlciwgR1NUX01BUF9SRUFEKTsKICAgICBp
ZiAoIW1hcHBlZFN1YlNhbXBsZXNCdWZmZXIpIHsKICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChz
ZWxmLCAiRmFpbGVkIHRvIG1hcCBzdWJzYW1wbGUgYnVmZmVyIik7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKLSAgICBHVW5pcXVlUHRyPEdzdEJ5dGVSZWFkZXI+IHJlYWRlcihnc3Rf
Ynl0ZV9yZWFkZXJfbmV3KG1hcHBlZFN1YlNhbXBsZXNCdWZmZXIuZGF0YSgpLCBtYXBwZWRTdWJT
YW1wbGVzQnVmZmVyLnNpemUoKSkpOwotICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2VsZiwgInBvc2l0
aW9uOiAlZCwgc2l6ZTogJXp1IiwgcG9zaXRpb24sIG1hcHBlZEJ1ZmZlci5zaXplKCkpOworICAg
IEdVbmlxdWVQdHI8R3N0Qnl0ZVJlYWRlcj4gcmVhZGVyKGdzdF9ieXRlX3JlYWRlcl9uZXcobWFw
cGVkU3ViU2FtcGxlc0J1ZmZlci0+ZGF0YSgpLCBtYXBwZWRTdWJTYW1wbGVzQnVmZmVyLT5zaXpl
KCkpKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJwb3NpdGlvbjogJWQsIHNpemU6ICV6
dSIsIHBvc2l0aW9uLCBtYXBwZWRCdWZmZXItPnNpemUoKSk7CiAKLSAgICB3aGlsZSAocG9zaXRp
b24gPCBtYXBwZWRCdWZmZXIuc2l6ZSgpKSB7CisgICAgd2hpbGUgKHBvc2l0aW9uIDwgbWFwcGVk
QnVmZmVyLT5zaXplKCkpIHsKICAgICAgICAgZ3VpbnQxNiBuQnl0ZXNDbGVhciA9IDA7CiAgICAg
ICAgIGd1aW50MzIgbkJ5dGVzRW5jcnlwdGVkID0gMDsKIApAQCAtMjc3LDE0ICsyNzcsMTQgQEAg
c3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JEZWNyeXB0KFdlYktp
dE1lZGlhQ29tbW9uRW5jcnlwdGlvbkQKICAgICAgICAgICAgIHNhbXBsZUluZGV4Kys7CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBuQnl0ZXNDbGVhciA9IDA7Ci0gICAgICAgICAgICBu
Qnl0ZXNFbmNyeXB0ZWQgPSBtYXBwZWRCdWZmZXIuc2l6ZSgpIC0gcG9zaXRpb247CisgICAgICAg
ICAgICBuQnl0ZXNFbmNyeXB0ZWQgPSBtYXBwZWRCdWZmZXItPnNpemUoKSAtIHBvc2l0aW9uOwog
ICAgICAgICB9CiAKLSAgICAgICAgR1NUX1RSQUNFX09CSkVDVChzZWxmLCAic3Vic2FtcGxlIGlu
ZGV4ICV1IC0gJWh1IGJ5dGVzIGNsZWFyICh0b2RvPSV6dSkiLCBzYW1wbGVJbmRleCwgbkJ5dGVz
Q2xlYXIsIG1hcHBlZEJ1ZmZlci5zaXplKCkgLSBwb3NpdGlvbik7CisgICAgICAgIEdTVF9UUkFD
RV9PQkpFQ1Qoc2VsZiwgInN1YnNhbXBsZSBpbmRleCAldSAtICVodSBieXRlcyBjbGVhciAodG9k
bz0lenUpIiwgc2FtcGxlSW5kZXgsIG5CeXRlc0NsZWFyLCBtYXBwZWRCdWZmZXItPnNpemUoKSAt
IHBvc2l0aW9uKTsKICAgICAgICAgcG9zaXRpb24gKz0gbkJ5dGVzQ2xlYXI7CiAgICAgICAgIGlm
IChuQnl0ZXNFbmNyeXB0ZWQpIHsKLSAgICAgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc2VsZiwg
InN1YnNhbXBsZSBpbmRleCAldSAtICV1IGJ5dGVzIGVuY3J5cHRlZCAodG9kbz0lenUpIiwgc2Ft
cGxlSW5kZXgsIG5CeXRlc0VuY3J5cHRlZCwgbWFwcGVkQnVmZmVyLnNpemUoKSAtIHBvc2l0aW9u
KTsKLSAgICAgICAgICAgIGNpcGhlckVycm9yID0gZ2NyeV9jaXBoZXJfZGVjcnlwdChwcml2LT5o
YW5kbGUsIG1hcHBlZEJ1ZmZlci5kYXRhKCkgKyBwb3NpdGlvbiwgbkJ5dGVzRW5jcnlwdGVkLCAw
LCAwKTsKKyAgICAgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc2VsZiwgInN1YnNhbXBsZSBpbmRl
eCAldSAtICV1IGJ5dGVzIGVuY3J5cHRlZCAodG9kbz0lenUpIiwgc2FtcGxlSW5kZXgsIG5CeXRl
c0VuY3J5cHRlZCwgbWFwcGVkQnVmZmVyLT5zaXplKCkgLSBwb3NpdGlvbik7CisgICAgICAgICAg
ICBjaXBoZXJFcnJvciA9IGdjcnlfY2lwaGVyX2RlY3J5cHQocHJpdi0+aGFuZGxlLCBtYXBwZWRC
dWZmZXItPmRhdGEoKSArIHBvc2l0aW9uLCBuQnl0ZXNFbmNyeXB0ZWQsIDAsIDApOwogICAgICAg
ICAgICAgaWYgKGNpcGhlckVycm9yKSB7CiAgICAgICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVD
VChzZWxmLCAic3ViIHNhbXBsZSBpbmRleCAldSBkZWNyeXB0aW9uIGZhaWxlZDogJXMiLCBzYW1w
bGVJbmRleCwgZ3BnX3N0cmVycm9yKGNpcGhlckVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFtZXJBdWRp
b0NhcHR1cmVTb3VyY2UuY3BwCmluZGV4IGRlZGMwNzliMmExYjM1N2M1MGQ3MWE4ZGE0MTk5YWJj
NGM1NmZhMjYuLjUzMzhlYjNkOTNmMTg5MDA3ZWU1MDE5ZTExM2Y5NWVkYWQ4ZmFkNmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2Nr
R1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJj
ZS5jcHAKQEAgLTc4LDEzICs3OCwxMyBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIEdzdEJ1ZmZl
ciogYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUobnVsbHB0ciwgYmlwQm9wQ291bnQg
KiBtX3N0cmVhbUZvcm1hdC0+Ynl0ZXNQZXJGcmFtZSgpLCBudWxscHRyKTsKICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBHc3RNYXBwZWRCdWZmZXIgbWFwKGJ1ZmZlciwgR1NUX01BUF9X
UklURSk7CisgICAgICAgICAgICAgICAgYXV0byBtYXAgPSBHc3RNYXBwZWRCdWZmZXI6OmNyZWF0
ZShidWZmZXIsIEdTVF9NQVBfV1JJVEUpOwogCiAgICAgICAgICAgICAgICAgaWYgKCFtdXRlZCgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1lbWNweShtYXAuZGF0YSgpLCAmbV9iaXBCb3BCdWZm
ZXJbYmlwQm9wU3RhcnRdLCBzaXplb2YoZmxvYXQpICogYmlwQm9wQ291bnQpOwotICAgICAgICAg
ICAgICAgICAgICBhZGRIdW0oc19IdW1Wb2x1bWUsIHNfSHVtRnJlcXVlbmN5LCBzYW1wbGVSYXRl
KCksIG1fc2FtcGxlc1JlbmRlcmVkLCAoZmxvYXQqKW1hcC5kYXRhKCksIGJpcEJvcENvdW50KTsK
KyAgICAgICAgICAgICAgICAgICAgbWVtY3B5KG1hcC0+ZGF0YSgpLCAmbV9iaXBCb3BCdWZmZXJb
YmlwQm9wU3RhcnRdLCBzaXplb2YoZmxvYXQpICogYmlwQm9wQ291bnQpOworICAgICAgICAgICAg
ICAgICAgICBhZGRIdW0oc19IdW1Wb2x1bWUsIHNfSHVtRnJlcXVlbmN5LCBzYW1wbGVSYXRlKCks
IG1fc2FtcGxlc1JlbmRlcmVkLCAoZmxvYXQqKW1hcC0+ZGF0YSgpLCBiaXBCb3BDb3VudCk7CiAg
ICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1lbXNldChtYXAuZGF0
YSgpLCAwLCBzaXplb2YoZmxvYXQpICogYmlwQm9wQ291bnQpOworICAgICAgICAgICAgICAgICAg
ICBtZW1zZXQobWFwLT5kYXRhKCksIDAsIHNpemVvZihmbG9hdCkgKiBiaXBCb3BDb3VudCk7CiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGdzdF9hcHBfc3JjX3B1c2hfYnVmZmVyKEdTVF9B
UFBfU1JDKG1fc3JjLmdldCgpKSwgYnVmZmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nQXVkaW9Tb3Vy
Y2VMaWJXZWJSVEMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUxpYldlYlJUQy5jcHAKaW5kZXggNWU3
Zjk3N2E5NmIyMTc5ZGI2MThmZTgwMGIyZDU2MzVkYjlkNmExZi4uNzIwM2Q3ZDM2M2M3ZTM3Yzlk
NzA2OTM1ODczNzBkY2QxZjlmNmE3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUxpYldl
YlJUQy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL1JlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUxpYldlYlJUQy5jcHAKQEAgLTExNCw5ICsx
MTQsOSBAQCB2b2lkIFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUxpYldlYlJUQzo6cHVsbEF1
ZGlvRGF0YSgpCiAgICAgICAgIGlmIChpc1NpbGVuY2VkKCkpCiAgICAgICAgICAgICBnc3RfYXVk
aW9fZm9ybWF0X2ZpbGxfc2lsZW5jZShtX291dHB1dFN0cmVhbURlc2NyaXB0aW9uLT5nZXRJbmZv
KCktPmZpbmZvLCBtX2F1ZGlvQnVmZmVyLmRhdGEoKSwgb3V0QnVmZmVyU2l6ZSk7CiAgICAgICAg
IGVsc2UgewotICAgICAgICAgICAgR3N0TWFwcGVkQnVmZmVyIGluTWFwKGluQnVmZmVyLmdldCgp
LCBHU1RfTUFQX1JFQUQpOworICAgICAgICAgICAgYXV0byBpbk1hcCA9IEdzdE1hcHBlZEJ1ZmZl
cjo6Y3JlYXRlKGluQnVmZmVyLmdldCgpLCBHU1RfTUFQX1JFQUQpOwogCi0gICAgICAgICAgICBn
cG9pbnRlciBpblsxXSA9IHsgaW5NYXAuZGF0YSgpIH07CisgICAgICAgICAgICBncG9pbnRlciBp
blsxXSA9IHsgaW5NYXAtPmRhdGEoKSB9OwogICAgICAgICAgICAgZ3BvaW50ZXIgb3V0WzFdID0g
eyBtX2F1ZGlvQnVmZmVyLmRhdGEoKSB9OwogICAgICAgICAgICAgaWYgKCFnc3RfYXVkaW9fY29u
dmVydGVyX3NhbXBsZXMobV9zYW1wbGVDb252ZXJ0ZXIuZ2V0KCksIHN0YXRpY19jYXN0PEdzdEF1
ZGlvQ29udmVydGVyRmxhZ3M+KDApLCBpbiwgaW5DaHVua1NhbXBsZUNvdW50LCBvdXQsIG91dENo
dW5rU2FtcGxlQ291bnQpKSB7CiAgICAgICAgICAgICAgICAgR1NUX0VSUk9SKCJDb3VsZCBub3Qg
Y29udmVydCBzYW1wbGVzLiIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUxpYldlYlJU
Qy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTGliV2ViUlRDLmNwcAppbmRleCA5ZTM5NmQ5M2JjZTQy
OTY4ZDY4NGMyMzI0ZTEyMmQ0NWQzMjFkN2RmLi42OWJlOWI1M2U4YTU3ODJlMTMxY2M5ODg0OWUz
YmJkOGUyZDkyZDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTGliV2ViUlRDLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlTGliV2ViUlRDLmNwcApAQCAtODYsOCArODYsOCBAQCBydGM6
OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyPiBSZWFsdGltZU91dGdvaW5n
VmlkZW9Tb3VyY2VMaWJXZWJSVAogICAgIEdSZWZQdHI8R3N0QnVmZmVyPiBidWZmZXIgPSBhZG9w
dEdSZWYoZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUobnVsbHB0ciwgaW5mby5zaXplLCBudWxscHRy
KSk7CiAgICAgR1JlZlB0cjxHc3RDYXBzPiBjYXBzID0gYWRvcHRHUmVmKGdzdF92aWRlb19pbmZv
X3RvX2NhcHMoJmluZm8pKTsKIAotICAgIEdzdE1hcHBlZEJ1ZmZlciBtYXAoYnVmZmVyLmdldCgp
LCBHU1RfTUFQX1dSSVRFKTsKLSAgICBtZW1zZXQobWFwLmRhdGEoKSwgMCwgaW5mby5zaXplKTsK
KyAgICBhdXRvIG1hcCA9IEdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKGJ1ZmZlci5nZXQoKSwgR1NU
X01BUF9XUklURSk7CisgICAgbWVtc2V0KG1hcC0+ZGF0YSgpLCAwLCBpbmZvLnNpemUpOwogCiAg
ICAgcmV0dXJuIEdTdHJlYW1lclZpZGVvRnJhbWVMaWJXZWJSVEM6OmNyZWF0ZShnc3Rfc2FtcGxl
X25ldyhidWZmZXIuZ2V0KCksIGNhcHMuZ2V0KCksIE5VTEwsIE5VTEwpKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9HU3RyZWFt
ZXJWaWRlb0VuY29kZXJGYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2xpYndlYnJ0Yy9HU3RyZWFtZXJWaWRlb0VuY29kZXJGYWN0b3J5LmNwcAppbmRleCBi
YzEyYjZjZGYwYTk4MjdjMDk0NTFlNjkwM2IwNjM2NzUyMGE3OWQyLi5lZTc0MGI0YTRkMjg4ZGIz
MDY2MTAwODNkZDQzYzYxOWQ1NTY3ZGFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvR1N0cmVhbWVyVmlkZW9FbmNvZGVyRmFjdG9yeS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL0dT
dHJlYW1lclZpZGVvRW5jb2RlckZhY3RvcnkuY3BwCkBAIC0zNDIsMjIgKzM0MiwyMiBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIEZyYWdtZW50aXplKHdlYnJ0Yzo6RW5jb2RlZEltYWdlKiBl
bmNvZGVkSW1hZ2UsIHN0ZDo6dW5pcXVlX3B0cjx1aW50OF90W10+KiBlbmNvZGVkSW1hZ2VCdWZm
ZXIsCiAgICAgICAgIHNpemVfdCogYnVmZmVyU2l6ZSwgR3N0QnVmZmVyKiBidWZmZXIsIHdlYnJ0
Yzo6UlRQRnJhZ21lbnRhdGlvbkhlYWRlciogZnJhZ21lbnRhdGlvbkluZm8pCiAgICAgewotICAg
ICAgICBHc3RNYXBwZWRCdWZmZXIgbWFwKGJ1ZmZlciwgR1NUX01BUF9SRUFEKTsKKyAgICAgICAg
YXV0byBtYXAgPSBHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZShidWZmZXIsIEdTVF9NQVBfUkVBRCk7
CiAKLSAgICAgICAgaWYgKCpidWZmZXJTaXplIDwgbWFwLnNpemUoKSkgewotICAgICAgICAgICAg
ZW5jb2RlZEltYWdlLT5fc2l6ZSA9IG1hcC5zaXplKCk7CisgICAgICAgIGlmICgqYnVmZmVyU2l6
ZSA8IG1hcC0+c2l6ZSgpKSB7CisgICAgICAgICAgICBlbmNvZGVkSW1hZ2UtPl9zaXplID0gbWFw
LT5zaXplKCk7CiAgICAgICAgICAgICBlbmNvZGVkSW1hZ2UtPl9idWZmZXIgPSBuZXcgdWludDhf
dFtlbmNvZGVkSW1hZ2UtPl9zaXplXTsKICAgICAgICAgICAgIGVuY29kZWRJbWFnZUJ1ZmZlci0+
cmVzZXQoZW5jb2RlZEltYWdlLT5fYnVmZmVyKTsKLSAgICAgICAgICAgICpidWZmZXJTaXplID0g
bWFwLnNpemUoKTsKKyAgICAgICAgICAgICpidWZmZXJTaXplID0gbWFwLT5zaXplKCk7CiAgICAg
ICAgIH0KIAotICAgICAgICBtZW1jcHkoZW5jb2RlZEltYWdlLT5fYnVmZmVyLCBtYXAuZGF0YSgp
LCBtYXAuc2l6ZSgpKTsKLSAgICAgICAgZW5jb2RlZEltYWdlLT5fbGVuZ3RoID0gbWFwLnNpemUo
KTsKLSAgICAgICAgZW5jb2RlZEltYWdlLT5fc2l6ZSA9IG1hcC5zaXplKCk7CisgICAgICAgIG1l
bWNweShlbmNvZGVkSW1hZ2UtPl9idWZmZXIsIG1hcC0+ZGF0YSgpLCBtYXAtPnNpemUoKSk7Cisg
ICAgICAgIGVuY29kZWRJbWFnZS0+X2xlbmd0aCA9IG1hcC0+c2l6ZSgpOworICAgICAgICBlbmNv
ZGVkSW1hZ2UtPl9zaXplID0gbWFwLT5zaXplKCk7CiAKICAgICAgICAgZnJhZ21lbnRhdGlvbklu
Zm8tPlZlcmlmeUFuZEFsbG9jYXRlRnJhZ21lbnRhdGlvbkhlYWRlcigxKTsKICAgICAgICAgZnJh
Z21lbnRhdGlvbkluZm8tPmZyYWdtZW50YXRpb25PZmZzZXRbMF0gPSAwOwotICAgICAgICBmcmFn
bWVudGF0aW9uSW5mby0+ZnJhZ21lbnRhdGlvbkxlbmd0aFswXSA9IG1hcC5zaXplKCk7CisgICAg
ICAgIGZyYWdtZW50YXRpb25JbmZvLT5mcmFnbWVudGF0aW9uTGVuZ3RoWzBdID0gbWFwLT5zaXpl
KCk7CiAgICAgICAgIGZyYWdtZW50YXRpb25JbmZvLT5mcmFnbWVudGF0aW9uUGxUeXBlWzBdID0g
MDsKICAgICAgICAgZnJhZ21lbnRhdGlvbkluZm8tPmZyYWdtZW50YXRpb25UaW1lRGlmZlswXSA9
IDA7CiAgICAgfQpAQCAtNDM4LDkgKzQzOCw5IEBAIHB1YmxpYzoKICAgICAgICAgc3RkOjp2ZWN0
b3I8R3N0SDI2NE5hbFVuaXQ+IG5hbHM7CiAKICAgICAgICAgY29uc3QgdWludDhfdCBzdGFydENv
ZGVbNF0gPSB7IDAsIDAsIDAsIDEgfTsKLSAgICAgICAgR3N0TWFwcGVkQnVmZmVyIG1hcChnc3Ri
dWZmZXIsIEdTVF9NQVBfUkVBRCk7CisgICAgICAgIGF1dG8gbWFwID0gR3N0TWFwcGVkQnVmZmVy
OjpjcmVhdGUoZ3N0YnVmZmVyLCBHU1RfTUFQX1JFQUQpOwogICAgICAgICB3aGlsZSAocGFyc2Vy
UmVzdWx0ID09IEdTVF9IMjY0X1BBUlNFUl9PSykgewotICAgICAgICAgICAgcGFyc2VyUmVzdWx0
ID0gZ3N0X2gyNjRfcGFyc2VyX2lkZW50aWZ5X25hbHUobV9wYXJzZXIsIG1hcC5kYXRhKCksIG9m
ZnNldCwgbWFwLnNpemUoKSwgJm5hbHUpOworICAgICAgICAgICAgcGFyc2VyUmVzdWx0ID0gZ3N0
X2gyNjRfcGFyc2VyX2lkZW50aWZ5X25hbHUobV9wYXJzZXIsIG1hcC0+ZGF0YSgpLCBvZmZzZXQs
IG1hcC0+c2l6ZSgpLCAmbmFsdSk7CiAKICAgICAgICAgICAgIG5hbHUuc2Nfb2Zmc2V0ID0gb2Zm
c2V0OwogICAgICAgICAgICAgbmFsdS5vZmZzZXQgPSBvZmZzZXQgKyBzaXplb2Yoc3RhcnRDb2Rl
KTsKQEAgLTQ1Niw3ICs0NTYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBlbmNvZGVkSW1hZ2Ut
Pl9zaXplID0gcmVxdWlyZWRTaXplOwogICAgICAgICAgICAgZW5jb2RlZEltYWdlLT5fYnVmZmVy
ID0gbmV3IHVpbnQ4X3RbZW5jb2RlZEltYWdlLT5fc2l6ZV07CiAgICAgICAgICAgICBlbmNvZGVk
SW1hZ2VCdWZmZXItPnJlc2V0KGVuY29kZWRJbWFnZS0+X2J1ZmZlcik7Ci0gICAgICAgICAgICAq
YnVmZmVyU2l6ZSA9IG1hcC5zaXplKCk7CisgICAgICAgICAgICAqYnVmZmVyU2l6ZSA9IG1hcC0+
c2l6ZSgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gSXRlcmF0ZSBuYWwgdW5pdHMgYW5kIGZp
bGwgdGhlIEZyYWdtZW50YXRpb24gaW5mby4KQEAgLTQ2NSwxNSArNDY1LDE1IEBAIHB1YmxpYzoK
ICAgICAgICAgZW5jb2RlZEltYWdlLT5fbGVuZ3RoID0gMDsKICAgICAgICAgZm9yIChzdGQ6OnZl
Y3RvcjxHc3RIMjY0TmFsVW5pdD46Oml0ZXJhdG9yIG5hbCA9IG5hbHMuYmVnaW4oKTsgbmFsICE9
IG5hbHMuZW5kKCk7ICsrbmFsLCBmcmFnbWVudEluZGV4KyspIHsKIAotICAgICAgICAgICAgQVNT
RVJUKG1hcC5kYXRhKClbbmFsLT5zY19vZmZzZXQgKyAwXSA9PSBzdGFydENvZGVbMF0pOwotICAg
ICAgICAgICAgQVNTRVJUKG1hcC5kYXRhKClbbmFsLT5zY19vZmZzZXQgKyAxXSA9PSBzdGFydENv
ZGVbMV0pOwotICAgICAgICAgICAgQVNTRVJUKG1hcC5kYXRhKClbbmFsLT5zY19vZmZzZXQgKyAy
XSA9PSBzdGFydENvZGVbMl0pOwotICAgICAgICAgICAgQVNTRVJUKG1hcC5kYXRhKClbbmFsLT5z
Y19vZmZzZXQgKyAzXSA9PSBzdGFydENvZGVbM10pOworICAgICAgICAgICAgQVNTRVJUKG1hcC0+
ZGF0YSgpW25hbC0+c2Nfb2Zmc2V0ICsgMF0gPT0gc3RhcnRDb2RlWzBdKTsKKyAgICAgICAgICAg
IEFTU0VSVChtYXAtPmRhdGEoKVtuYWwtPnNjX29mZnNldCArIDFdID09IHN0YXJ0Q29kZVsxXSk7
CisgICAgICAgICAgICBBU1NFUlQobWFwLT5kYXRhKClbbmFsLT5zY19vZmZzZXQgKyAyXSA9PSBz
dGFydENvZGVbMl0pOworICAgICAgICAgICAgQVNTRVJUKG1hcC0+ZGF0YSgpW25hbC0+c2Nfb2Zm
c2V0ICsgM10gPT0gc3RhcnRDb2RlWzNdKTsKIAogICAgICAgICAgICAgZnJhZ21lbnRhdGlvbkhl
YWRlci0+ZnJhZ21lbnRhdGlvbk9mZnNldFtmcmFnbWVudEluZGV4XSA9IG5hbC0+b2Zmc2V0Owog
ICAgICAgICAgICAgZnJhZ21lbnRhdGlvbkhlYWRlci0+ZnJhZ21lbnRhdGlvbkxlbmd0aFtmcmFn
bWVudEluZGV4XSA9IG5hbC0+c2l6ZTsKIAotICAgICAgICAgICAgbWVtY3B5KGVuY29kZWRJbWFn
ZS0+X2J1ZmZlciArIGVuY29kZWRJbWFnZS0+X2xlbmd0aCwgJm1hcC5kYXRhKClbbmFsLT5zY19v
ZmZzZXRdLAorICAgICAgICAgICAgbWVtY3B5KGVuY29kZWRJbWFnZS0+X2J1ZmZlciArIGVuY29k
ZWRJbWFnZS0+X2xlbmd0aCwgJm1hcC0+ZGF0YSgpW25hbC0+c2Nfb2Zmc2V0XSwKICAgICAgICAg
ICAgICAgICBzaXplb2Yoc3RhcnRDb2RlKSArIG5hbC0+c2l6ZSk7CiAgICAgICAgICAgICBlbmNv
ZGVkSW1hZ2UtPl9sZW5ndGggKz0gbmFsLT5zaXplICsgc2l6ZW9mKHN0YXJ0Q29kZSk7CiAgICAg
ICAgIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRl
eCAzZTY4ZjA3NmMxZTNmZmM2ZDhlOTc2MzIxODdmOWJhOTdlM2E4ZGYyLi4wNTBkYjE3MDdiMThk
M2E0NmE0ZTFhOTc3YTZmZTExNDA0ZTlhODM4IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cK
KysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTktMDEtMDkgIENoYXJs
aWUgVHVybmVyICA8Y3R1cm5lckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHU3RyZWFtZXJdIEFk
ZCBzaGFyZWRCdWZmZXIgdXRpbGl0eSB0byBHc3RNYXBwZWRCdWZmZXIsIGFuZCBhIHRlc3RzdWl0
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkyOTc3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlOiBCdWlsZCB0aGUgbmV3IEdTdHJlYW1lciB0ZXN0
IGhhcm5lc3MKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1BsYXRmb3JtV1BFLmNtYWtlOiBEaXR0
by4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvZ3N0cmVhbWVyL0dTdHJl
YW1lclRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdTdHJlYW1lclRl
c3Q6OlNldFVwKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdTdHJlYW1lclRlc3Q6OlRlYXJE
b3duKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvZ3N0cmVhbWVyL0dT
dHJlYW1lclRlc3QuaDogQWRkZWQuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL2dzdHJlYW1lci9Hc3RNYXBwZWRCdWZmZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OlRFU1RfRik6CisKIDIwMTktMDEtMDYgIEZ1amlpIEhpcm9ub3JpICA8SGlyb25v
cmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgW1dpbl1bQ2xhbmddIEZpeCBjb21waWxhdGlv
biB3YXJuaW5ncyBvZiBNaW5pQnJvd3NlcgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9QbGF0Zm9ybUdUSy5jbWFrZSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1HVEsuY21h
a2UKaW5kZXggODQ0OTlkZTM5OGIyNWQyNWFjMGM5MzYwMmFhYWQxZDY5MGQzZGU4YS4uYzM0ZmFl
MDdjZjNjNmIwYTM5YzM5OWZlZTMyY2QyNWMzYTBhYTdmNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Bs
YXRmb3JtR1RLLmNtYWtlCkBAIC0yNSw2ICsyNSw3IEBAIGluY2x1ZGVfZGlyZWN0b3JpZXMoCiBp
bmNsdWRlX2RpcmVjdG9yaWVzKFNZU1RFTQogICAgICR7R0RLM19JTkNMVURFX0RJUlN9CiAgICAg
JHtHTElCX0lOQ0xVREVfRElSU30KKyAgICAke0dTVFJFQU1FUl9JTkNMVURFX0RJUlN9CiAgICAg
JHtHVEszX0lOQ0xVREVfRElSU30KICAgICAke0xJQlNPVVBfSU5DTFVERV9ESVJTfQogKQpAQCAt
OTMsNiArOTQsOCBAQCBhZGRfZXhlY3V0YWJsZShUZXN0V2ViQ29yZQogICAgICR7VEVTVFdFQktJ
VEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvRE5TLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9
L1Rlc3RzL1dlYkNvcmUvRmlsZU1vbml0b3IuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0v
VGVzdHMvV2ViQ29yZS9GaWxlU3lzdGVtLmNwcAorICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rl
c3RzL1dlYkNvcmUvZ3N0cmVhbWVyL0dzdE1hcHBlZEJ1ZmZlci5jcHAKKyAgICAke1RFU1RXRUJL
SVRBUElfRElSfS9UZXN0cy9XZWJDb3JlL2dzdHJlYW1lci9HU3RyZWFtZXJUZXN0LmNwcAogICAg
ICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvR3JpZFBvc2l0aW9uLmNwcAogICAg
ICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvSFRNTFBhcnNlcklkaW9tcy5jcHAK
ICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3JlL0xheW91dFVuaXQuY3BwCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV1BFLmNtYWtlIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdQRS5jbWFrZQppbmRleCBmYjFiNmI1MmEzNTYzODgwYTUy
ZjY4NTU4OGMyZTFmYmJlYWJkOWUxLi5iNjg3NzU5OGQ4NzdkZTZjOGRhODZiNGViNTdjYzg2ZmYw
YTJmN2VmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV1BFLmNtYWtl
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1XUEUuY21ha2UKQEAgLTIzLDYgKzIz
LDcgQEAgaW5jbHVkZV9kaXJlY3RvcmllcygKIGluY2x1ZGVfZGlyZWN0b3JpZXMoU1lTVEVNCiAg
ICAgJHtDQUlST19JTkNMVURFX0RJUlN9CiAgICAgJHtHTElCX0lOQ0xVREVfRElSU30KKyAgICAk
e0dTVFJFQU1FUl9JTkNMVURFX0RJUlN9CiAgICAgJHtMSUJTT1VQX0lOQ0xVREVfRElSU30KICAg
ICAke1dQRV9JTkNMVURFX0RJUlN9CiAgICAgJHtXUEVCQUNLRU5EX0ZET19JTkNMVURFX0RJUlN9
CkBAIC02MCw2ICs2MSw4IEBAIGFkZF9leGVjdXRhYmxlKFRlc3RXZWJDb3JlCiAgICAgJHtURVNU
V0VCS0lUQVBJX0RJUn0vVGVzdHNDb250cm9sbGVyLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9E
SVJ9L1Rlc3RzL1dlYkNvcmUvRmlsZU1vbml0b3IuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJ
Un0vVGVzdHMvV2ViQ29yZS9GaWxlU3lzdGVtLmNwcAorICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9
L1Rlc3RzL1dlYkNvcmUvZ3N0cmVhbWVyL0dzdE1hcHBlZEJ1ZmZlci5jcHAKKyAgICAke1RFU1RX
RUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3JlL2dzdHJlYW1lci9HU3RyZWFtZXJUZXN0LmNwcAog
ICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvSFRNTFBhcnNlcklkaW9tcy5j
cHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3JlL0xheW91dFVuaXQuY3Bw
CiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV2ViQ29yZS9NSU1FVHlwZVJlZ2lzdHJ5
LmNwcApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2dzdHJl
YW1lci9HU3RyZWFtZXJUZXN0LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9nc3RyZWFtZXIvR1N0cmVhbWVyVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2Q3Zjk0ZGU4ZTdmZGE0
ZWZkY2NiYjkzMmViYTM5MDg2ODdhYjhmNQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9nc3RyZWFtZXIvR1N0cmVhbWVyVGVzdC5jcHAKQEAgLTAs
MCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEsIFMuTC4KKyAqIENv
cHlyaWdodCAoQykgMjAxOCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoR1NUUkVBTUVSKQorI2luY2x1ZGUgIkdTdHJlYW1l
clRlc3QuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvR1N0cmVhbWVyQ29tbW9uLmg+CisjaW5jbHVk
ZSA8Z3N0L2dzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFRl
c3RXZWJLaXRBUEkgeworCit2b2lkIEdTdHJlYW1lclRlc3Q6OlNldFVwKCkKK3sKKyAgICBpZiAo
IWdzdF9pc19pbml0aWFsaXplZCgpKQorICAgICAgICBnc3RfaW5pdChudWxscHRyLCBudWxscHRy
KTsKK30KKwordm9pZCBHU3RyZWFtZXJUZXN0OjpUZWFyRG93bigpCit7CisgICAgLy8gSXQgbWln
aHQgYmUgdGVtcHRpbmcgdG8gY2FsbCBnc3RfZGVpbml0KCkgaGVyZS4gSG93ZXZlciwgdGhhdAor
ICAgIC8vIHdpbGwgdGVhciBkb3duIHRoZSB3aG9sZSBwcm9jZXNzIGZyb20gdGhlIEdTdHJlYW1l
ciBQT1YsIGFuZCB0aGUKKyAgICAvLyBzZWVtaW5nbHkgc3ltbWV0cmljYWwgY2FsbCB0byBnc3Rf
aW5pdCgpIHdpbGwgZmFpbCB0bworICAgIC8vIGluaXRpYWxpemUgR1N0cmVhbWVyIGNvcnJlY3Rs
eS4KK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQorCisjZW5kaWYgLy8gVVNFKEdT
VFJFQU1FUikKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9n
c3RyZWFtZXIvR1N0cmVhbWVyVGVzdC5oIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL2dzdHJlYW1lci9HU3RyZWFtZXJUZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmIyY2JhZWU2MTY1YzY1
OTc5MTQ3MDg2YTdkMDFiMjExN2JmNWQ5YwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9nc3RyZWFtZXIvR1N0cmVhbWVyVGVzdC5oCkBAIC0wLDAg
KzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhLCBTLkwuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBVU0UoR1NUUkVBTUVSKQorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7
CisKK2NsYXNzIEdTdHJlYW1lclRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7CitwdWJsaWM6
CisgICAgdm9pZCBTZXRVcCgpIG92ZXJyaWRlOworICAgIHZvaWQgVGVhckRvd24oKSBvdmVycmlk
ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKKworI2VuZGlmIC8vIFVTRShH
U1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
Z3N0cmVhbWVyL0dzdE1hcHBlZEJ1ZmZlci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvZ3N0cmVhbWVyL0dzdE1hcHBlZEJ1ZmZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjRmZmY1
OWZhMzVlNTRhZWMyOWE5MmJiZGU3ZWQzNmJlNmViOGUyYQotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9nc3RyZWFtZXIvR3N0TWFwcGVkQnVmZmVy
LmNwcApAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEs
IFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAxOCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoR1NUUkVBTUVSKQorCisjaW5j
bHVkZSAiR1N0cmVhbWVyVGVzdC5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1
ZGUgIlRlc3QuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0dTdHJlYW1lckNvbW1vbi5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitURVNU
X0YoR1N0cmVhbWVyVGVzdCwgbWFwcGVkQnVmZmVyQmFzaWNzKQoreworICAgIEdSZWZQdHI8R3N0
QnVmZmVyPiBidWYgPSBhZG9wdEdSZWYoZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUobnVsbHB0ciwg
NjQsIG51bGxwdHIpKTsKKyAgICBhdXRvIG1hcHBlZEJ1ZiA9IEdzdE1hcHBlZEJ1ZmZlcjo6Y3Jl
YXRlKGJ1Zi5nZXQoKSwgR1NUX01BUF9SRUFEKTsKKyAgICBBU1NFUlRfVFJVRShtYXBwZWRCdWYp
OworICAgIEVYUEVDVF9FUShtYXBwZWRCdWYtPnNpemUoKSwgNjQpOworCisgICAgYXV0byBtYXBw
ZWRCdWYyID0gR3N0TWFwcGVkQnVmZmVyOjpjcmVhdGUoYnVmLmdldCgpLCBHU1RfTUFQX1JFQUQp
OworICAgIEFTU0VSVF9UUlVFKG1hcHBlZEJ1ZjIpOworICAgIEVYUEVDVF9FUSgqbWFwcGVkQnVm
LCAqbWFwcGVkQnVmMik7CisgICAgRVhQRUNUX0VRKGJ1Zi5nZXQoKSwgKm1hcHBlZEJ1Zik7Cisg
ICAgRVhQRUNUX0VRKCptYXBwZWRCdWYyLCBidWYuZ2V0KCkpOworfQorCitURVNUX0YoR1N0cmVh
bWVyVGVzdCwgbWFwcGVkQnVmZmVyUmVhZFNhbml0eSkKK3sKKyAgICBncG9pbnRlciBtZW1vcnkg
PSBnX21hbGxvYygxNik7CisgICAgbWVtc2V0KG1lbW9yeSwgJ3gnLCAxNik7CisgICAgR1JlZlB0
cjxHc3RCdWZmZXI+IGJ1ZiA9IGFkb3B0R1JlZihnc3RfYnVmZmVyX25ld193cmFwcGVkKG1lbW9y
eSwgMTYpKTsKKyAgICBhdXRvIG1hcHBlZEJ1ZiA9IEdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKGJ1
Zi5nZXQoKSwgR1NUX01BUF9SRUFEKTsKKyAgICBBU1NFUlRfVFJVRShtYXBwZWRCdWYpOworICAg
IEVYUEVDVF9FUShtYXBwZWRCdWYtPnNpemUoKSwgMTYpOworICAgIEVYUEVDVF9FUShtZW1jbXAo
bWVtb3J5LCBtYXBwZWRCdWYtPmRhdGEoKSwgMTYpLCAwKTsKKyAgICBFWFBFQ1RfRVEobWVtY21w
KG1lbW9yeSwgbWFwcGVkQnVmLT50cnlDcmVhdGVTaGFyZWRCdWZmZXIoKS0+ZGF0YSgpLCAxNiks
IDApOworfQorCitURVNUX0YoR1N0cmVhbWVyVGVzdCwgbWFwcGVkQnVmZmVyV3JpdGVTYW5pdHkp
Cit7CisgICAgZ3BvaW50ZXIgbWVtb3J5ID0gZ19tYWxsb2MoMTYpOworICAgIG1lbXNldChtZW1v
cnksICd4JywgMTYpOworICAgIEdSZWZQdHI8R3N0QnVmZmVyPiBidWYgPSBhZG9wdEdSZWYoZ3N0
X2J1ZmZlcl9uZXdfd3JhcHBlZChtZW1vcnksIDE2KSk7CisKKyAgICBhdXRvIG1hcHBlZEJ1ZiA9
IEdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKGJ1Zi5nZXQoKSwgR1NUX01BUF9XUklURSk7CisgICAg
QVNTRVJUX1RSVUUobWFwcGVkQnVmKTsKKyAgICBFWFBFQ1RfRVEobWFwcGVkQnVmLT5zaXplKCks
IDE2KTsKKyAgICBtZW1zZXQobWFwcGVkQnVmLT5kYXRhKCksICd5JywgbWFwcGVkQnVmLT5zaXpl
KCkpOworCisgICAgRVhQRUNUX0VRKG1lbWNtcChtZW1vcnksIG1hcHBlZEJ1Zi0+ZGF0YSgpLCAx
NiksIDApOworCisgICAgLy8gV2Ugc2hvdWxkIG5vdCBzaGFyZSBhIHdyaXRhYmxlIGJ1ZmZlci4K
KyAgICBBU1NFUlRfRkFMU0UobWFwcGVkQnVmLT50cnlDcmVhdGVTaGFyZWRCdWZmZXIoKSk7Cit9
CisKK1RFU1RfRihHU3RyZWFtZXJUZXN0LCBtYXBwZWRCdWZmZXJDYWNoZXNTaGFyZWRCdWZmZXJz
KQoreworICAgIEdSZWZQdHI8R3N0QnVmZmVyPiBidWYgPSBhZG9wdEdSZWYoZ3N0X2J1ZmZlcl9u
ZXdfYWxsb2NhdGUobnVsbHB0ciwgNjQsIG51bGxwdHIpKTsKKyAgICBhdXRvIG1hcHBlZEJ1ZiA9
IEdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKGJ1Zi5nZXQoKSwgR1NUX01BUF9SRUFEKTsKKyAgICBB
U1NFUlRfVFJVRShtYXBwZWRCdWYpOworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHNoYXJlZEJ1
ZiA9IG1hcHBlZEJ1Zi0+dHJ5Q3JlYXRlU2hhcmVkQnVmZmVyKCk7CisgICAgLy8gV2UgZXhwZWN0
IHRoZSBzYW1lIGRhdGEgcG9pbnRlciB3cmFwcGVkIGJ5IHNoYXJlZCBidWZmZXIsIG5vCisgICAg
Ly8gY29waWVzIG5lZWQgdG8gYmUgbWFkZS4KKyAgICBFWFBFQ1RfRVEoc2hhcmVkQnVmLT5kYXRh
KCksIG1hcHBlZEJ1Zi0+dHJ5Q3JlYXRlU2hhcmVkQnVmZmVyKCktPmRhdGEoKSk7Cit9CisKK1RF
U1RfRihHU3RyZWFtZXJUZXN0LCBtYXBwZWRCdWZmZXJEb2VzTm90QWRkRXh0cmFSZWZzKQorewor
ICAgIC8vIEl0IGlzIGltcG9ydGFudCBub3QgdG8gcmVmIHRoZSBwYXNzZWQgR1N0cmVhbWVyIGJ1
ZmZlcnMsIGlmIHdlCisgICAgLy8gZG8gc28sIHRoZW4gaW4gdGhlIGNhc2Ugb2Ygd3JpdGFibGUg
YnVmZmVycywgdGhleSBjYW4gYmVjb21lCisgICAgLy8gdW53cml0YWJsZSwgZXZlbiB0aG91Z2gg
d2UgYXJlIHRoZSBzb2xlIG93bmVycy4gV2UgYWxzbyBkb24ndAorICAgIC8vIHdhbnQgdG8gdGFr
ZSBvd25lcnNoaXAgb2YgdGhlIGJ1ZmZlciBmcm9tIHRoZSB1c2VyLWNvZGUsIHNpbmNlCisgICAg
Ly8gZm9yIHRyYW5zZm9ybUluUGxhY2UgdXNlLWNhc2VzLCB0aGF0IHdvdWxkIGJyZWFrLgorICAg
IEdSZWZQdHI8R3N0QnVmZmVyPiBidWYgPSBhZG9wdEdSZWYoZ3N0X2J1ZmZlcl9uZXcoKSk7CisK
KyAgICBBU1NFUlRfRVEoR1NUX09CSkVDVF9SRUZDT1VOVChidWYuZ2V0KCkpLCAxKTsKKworICAg
IGF1dG8gbWFwcGVkQnVmID0gR3N0TWFwcGVkQnVmZmVyOjpjcmVhdGUoYnVmLmdldCgpLCBHU1Rf
TUFQX1JFQURXUklURSk7CisgICAgQVNTRVJUX1RSVUUobWFwcGVkQnVmKTsKKworICAgIEFTU0VS
VF9FUShHU1RfT0JKRUNUX1JFRkNPVU5UKGJ1Zi5nZXQoKSksIDEpOworfQorCit9IC8vIG5hbWVz
cGFjZSBUZXN0V2ViS2l0QVBJCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358790</attachid>
            <date>2019-01-10 07:07:00 -0800</date>
            <delta_ts>2019-01-14 03:23:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-192977-20190110150658.patch</filename>
            <type>text/plain</type>
            <size>43281</size>
            <attacher name="Charlie Turner">cturner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5ODE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmVjZmJhNjZmNWUxMTdl
ZGJkNDRmMzgyMThjNWE0YzBhNzZkMWEzNS4uNGE0NmNkNTM1YTU2ODM3Y2E3YWVlYmQ2MzcyMTY1
YzlkMzM0MDVkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDE5LTAxLTEwICBDaGFy
bGllIFR1cm5lciAgPGN0dXJuZXJAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVyXSBB
ZGQgc2hhcmVkQnVmZmVyIHV0aWxpdHkgdG8gR3N0TWFwcGVkQnVmZmVyLCBhbmQgYSB0ZXN0c3Vp
dGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5Mjk3
NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBh
IHV0aWxpdHkgbWV0aG9kIG9uIEdzdE1hcHBlZEJ1ZmZlciB0byByZXR1cm4gYSBTaGFyZWRCdWZm
ZXIKKyAgICAgICAgdmlldyBvdmVyIHRoZSBtYXBwZWQgZGF0YSB3aXRoIG5vIGNvcGllcy4KKwor
ICAgICAgICBUaGlzIHBhdGNoIGFsc28gaW50cm9kdWNlcyBhIG5ldyBnc3RyZWFtZXIgcG9ydCBB
UEkgdGVzdAorICAgICAgICBkaXJlY3RvcnksIGFuZCBpbmNsdWRlcyBzb21lIHRlc3RzIGZvciBH
c3RNYXBwZWRCdWZmZXIuCisKKyAgICAgICAgTmV3IHRlc3RzIGluIHRoZSBBUEkgc2VjdGlvbi4K
KworICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHA6IEFkZCBhIG5ldyBvdmVybG9h
ZCBmb3IKKyAgICAgICAgR3N0TWFwcGVkQnVmZmVyIHRoYXQgYWxsb3dzIHNoYXJpbmcgdGhlIG1h
cHBlZCBHU3RyZWFtZXIgYnVmZmVycworICAgICAgICB3aXRoIHplcm8gY29waWVzLgorICAgICAg
ICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2hh
cmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVy
OjpEYXRhU2VnbWVudDo6ZGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZm
ZXI6OkRhdGFTZWdtZW50OjpzaXplIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRC
dWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvV2ViS2l0V2ViQXVk
aW9Tb3VyY2VHU3RyZWFtZXIuY3BwOgorICAgICAgICAod2ViS2l0V2ViQXVkaW9TcmNBbGxvY2F0
ZUJ1ZmZlcnNBbmRSZW5kZXJBdWRpbyk6IFVwZGF0ZSB0byBuZXcKKyAgICAgICAgQVBJLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjpjcmVhdGVTaGFyZWRCdWZmZXIpOiBS
ZXR1cm4gYSBzaGFyZWQKKyAgICAgICAgYnVmZmVyIHNoYXJpbmcgdGhpcyBtYXBwZWQgYnVmZmVy
LiBUaGUgYnVmZmVyIG11c3QgYmUgc2hhcmVhYmxlIHRvCisgICAgICAgIHVzZSB0aGlzIG1ldGhv
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9u
Lmg6CisgICAgICAgIChXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZSk6IE1ha2UgR3N0
TWFwcGVkQnVmZmVyIFJlZkNvdW50ZWQKKyAgICAgICAgKFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZl
cjo6fkdzdE1hcHBlZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXI6
OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjpkYXRhIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlcjo6c2l6ZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXI6OmlzU2hhcmFibGUgY29uc3QpOiBOZXcgcHJlZGlj
YXRlIHRvCisgICAgICAgIGNoZWNrIHdoZXRoZXIgdGhpcyBidWZmZXIgY2FuIGJlIHNoYXJlZCAo
aS5lLiwgaXMgbm90IHdyaXRhYmxlKQorICAgICAgICAoV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVy
OjpHc3RNYXBwZWRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjpv
cGVyYXRvciBib29sIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlUcmFja09m
U2FtcGxlKToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgQVBJLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvR1N0cmVhbWVyRU1FVXRpbGl0aWVzLmg6CisgICAg
ICAgIChXZWJDb3JlOjpJbml0RGF0YTo6SW5pdERhdGEpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVh
bWVyLmNwcDoKKyAgICAgICAgKHdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JGaW5kQW5kU2V0
S2V5KTogRGl0dG8uCisgICAgICAgICh3ZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdG9yRGVjcnlw
dCk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2Nr
R1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldyYXBw
ZWRNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZTo6cmVuZGVyKTogRGl0dG8uCisgICAgICAgICogcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUxp
YldlYlJUQy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3Vy
Y2VMaWJXZWJSVEM6OnB1bGxBdWRpb0RhdGEpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTGliV2ViUlRD
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUxpYldl
YlJUQzo6Y3JlYXRlQmxhY2tGcmFtZSk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlh
c3RyZWFtL2xpYndlYnJ0Yy9HU3RyZWFtZXJWaWRlb0VuY29kZXJGYWN0b3J5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lclZpZGVvRW5jb2Rlcjo6RnJhZ21lbnRpemUpOiBEaXR0by4K
KwogMjAxOS0wMS0wOSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBUaHJlYWRUaW1lcnMgc2hvdWxkIG5vdCBzdG9yZSBhIHJhdyBwb2ludGVyIGluIGl0cyBoZWFw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAppbmRleCA0NmZjODExY2Mz
NTMzNWU5ZDNhZmE2ZGJiMzNlZjkxOWMyZDYwYWUyLi4yNmRlMWJiZjM5NWJmYWZkYzNlMWNmY2Q5
OTk2MDEwMDBiNWRkMjEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFy
ZWRCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5j
cHAKQEAgLTU0LDYgKzU0LDIwIEBAIFNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKFZlY3Rvcjxj
aGFyPiYmIGRhdGEpCiAgICAgYXBwZW5kKFdURk1vdmUoZGF0YSkpOwogfQogCisjaWYgVVNFKEdT
VFJFQU1FUikKK1JlZjxTaGFyZWRCdWZmZXI+IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKEdzdE1hcHBl
ZEJ1ZmZlciYgbWFwcGVkQnVmZmVyKQoreworICAgIEFTU0VSVChtYXBwZWRCdWZmZXIuaXNTaGFy
YWJsZSgpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRCdWZmZXIobWFwcGVkQnVm
ZmVyKSk7Cit9CisKK1NoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKEdzdE1hcHBlZEJ1ZmZlciYg
bWFwcGVkQnVmZmVyKQorICAgIDogbV9zaXplKG1hcHBlZEJ1ZmZlci5zaXplKCkpCit7CisgICAg
bV9zZWdtZW50cy5hcHBlbmQoezAsIERhdGFTZWdtZW50OjpjcmVhdGUoJm1hcHBlZEJ1ZmZlcil9
KTsKK30KKyNlbmRpZgorCiBSZWZQdHI8U2hhcmVkQnVmZmVyPiBTaGFyZWRCdWZmZXI6OmNyZWF0
ZVdpdGhDb250ZW50c09mRmlsZShjb25zdCBTdHJpbmcmIGZpbGVQYXRoKQogewogICAgIGJvb2wg
bWFwcGluZ1N1Y2Nlc3M7CkBAIC0yMTAsNiArMjI0LDkgQEAgY29uc3QgY2hhciogU2hhcmVkQnVm
ZmVyOjpEYXRhU2VnbWVudDo6ZGF0YSgpIGNvbnN0CiAjZW5kaWYKICNpZiBVU0UoR0xJQikKICAg
ICAgICAgW10oY29uc3QgR1JlZlB0cjxHQnl0ZXM+JiBkYXRhKSB7IHJldHVybiByZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqPihnX2J5dGVzX2dldF9kYXRhKGRhdGEuZ2V0KCksIG51bGxwdHIp
KTsgfSwKKyNlbmRpZgorI2lmIFVTRShHU1RSRUFNRVIpCisgICAgICAgIFtdKGNvbnN0IFJlZlB0
cjxHc3RNYXBwZWRCdWZmZXI+JiBkYXRhKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0
IGNoYXIqPihkYXRhLT5kYXRhKCkpOyB9LAogI2VuZGlmCiAgICAgICAgIFtdKGNvbnN0IEZpbGVT
eXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiBkYXRhKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNv
bnN0IGNoYXIqPihkYXRhLmRhdGEoKSk7IH0KICAgICApOwpAQCAtMjgzLDYgKzMwMCw5IEBAIHNp
emVfdCBTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpzaXplKCkgY29uc3QKICNlbmRpZgogI2lm
IFVTRShHTElCKQogICAgICAgICBbXShjb25zdCBHUmVmUHRyPEdCeXRlcz4mIGRhdGEpIHsgcmV0
dXJuIGdfYnl0ZXNfZ2V0X3NpemUoZGF0YS5nZXQoKSk7IH0sCisjZW5kaWYKKyNpZiBVU0UoR1NU
UkVBTUVSKQorICAgICAgICBbXShjb25zdCBSZWZQdHI8R3N0TWFwcGVkQnVmZmVyPiYgZGF0YSkg
eyByZXR1cm4gZGF0YS0+c2l6ZSgpOyB9LAogI2VuZGlmCiAgICAgICAgIFtdKGNvbnN0IEZpbGVT
eXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiBkYXRhKSB7IHJldHVybiBkYXRhLnNpemUoKTsgfQogICAg
ICk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCmluZGV4IGUyYWFlMmYzMDQ1
NzM1NWY0ODllZWM0YWI0ZWNmMWNlN2QzZTQ1MmYuLjgxMzE4ZThiMjlhZTVhMGY1Yjk2MDNjODI1
NTc5MWNkYmMyMGE0ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJl
ZEJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCkBA
IC00OCw2ICs0OCwxMCBAQAogdHlwZWRlZiBzdHJ1Y3QgX0dCeXRlcyBHQnl0ZXM7CiAjZW5kaWYK
IAorI2lmIFVTRShHU1RSRUFNRVIpCisjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCisjZW5k
aWYKKwogI2lmIFVTRShGT1VOREFUSU9OKQogT0JKQ19DTEFTUyBOU0FycmF5OwogT0JKQ19DTEFT
UyBOU0RhdGE7CkBAIC04OCw2ICs5Miw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFNoYXJl
ZEJ1ZmZlcj4gY3JlYXRlKEdCeXRlcyopOwogI2VuZGlmCiAKKyNpZiBVU0UoR1NUUkVBTUVSKQor
ICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBjcmVhdGUoR3N0TWFwcGVkQnVmZmVyJik7Cisj
ZW5kaWYKICAgICAvLyBDYWxsaW5nIGRhdGEoKSBjYXVzZXMgYWxsIHRoZSBkYXRhIHNlZ21lbnRz
IHRvIGJlIGNvcGllZCBpbnRvIG9uZSBzZWdtZW50IGlmIHRoZXkgYXJlIG5vdCBhbHJlYWR5Lgog
ICAgIC8vIEl0ZXJhdGUgdGhlIHNlZ21lbnRzIHVzaW5nIGJlZ2luKCkgYW5kIGVuZCgpIGluc3Rl
YWQuCiAgICAgLy8gRklYTUU6IEF1ZGl0IHRoZSBjYWxsIHNpdGVzIG9mIHRoaXMgZnVuY3Rpb24g
YW5kIHJlcGxhY2UgdGhlbSB3aXRoIGl0ZXJhdGlvbiBpZiBwb3NzaWJsZS4KQEAgLTEyNSw2ICsx
MzIsOSBAQCBwdWJsaWM6CiAjZW5kaWYKICNpZiBVU0UoR0xJQikKICAgICAgICAgc3RhdGljIFJl
ZjxEYXRhU2VnbWVudD4gY3JlYXRlKEdSZWZQdHI8R0J5dGVzPiYmIGRhdGEpIHsgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgRGF0YVNlZ21lbnQoV1RGTW92ZShkYXRhKSkpOyB9CisjZW5kaWYKKyNpZiBV
U0UoR1NUUkVBTUVSKQorICAgICAgICBzdGF0aWMgUmVmPERhdGFTZWdtZW50PiBjcmVhdGUoUmVm
UHRyPEdzdE1hcHBlZEJ1ZmZlcj4mJiBkYXRhKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IERhdGFT
ZWdtZW50KFdURk1vdmUoZGF0YSkpKTsgfQogI2VuZGlmCiAgICAgICAgIHN0YXRpYyBSZWY8RGF0
YVNlZ21lbnQ+IGNyZWF0ZShGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmIGRhdGEpIHsgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRGF0YVNlZ21lbnQoV1RGTW92ZShkYXRhKSkpOyB9CiAKQEAgLTE0
Miw2ICsxNTIsMTAgQEAgcHVibGljOgogI2lmIFVTRShHTElCKQogICAgICAgICBEYXRhU2VnbWVu
dChHUmVmUHRyPEdCeXRlcz4mJiBkYXRhKQogICAgICAgICAgICAgOiBtX2ltbXV0YWJsZURhdGEo
V1RGTW92ZShkYXRhKSkgeyB9CisjZW5kaWYKKyNpZiBVU0UoR1NUUkVBTUVSKQorICAgICAgICBE
YXRhU2VnbWVudChSZWZQdHI8R3N0TWFwcGVkQnVmZmVyPiYmIGRhdGEpCisgICAgICAgICAgICA6
IG1faW1tdXRhYmxlRGF0YShXVEZNb3ZlKGRhdGEpKSB7IH0KICNlbmRpZgogICAgICAgICBEYXRh
U2VnbWVudChGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmIGRhdGEpCiAgICAgICAgICAgICA6
IG1faW1tdXRhYmxlRGF0YShXVEZNb3ZlKGRhdGEpKSB7IH0KQEAgLTE1NSw2ICsxNjksOSBAQCBw
dWJsaWM6CiAjZW5kaWYKICNpZiBVU0UoR0xJQikKICAgICAgICAgICAgIEdSZWZQdHI8R0J5dGVz
PiwKKyNlbmRpZgorI2lmIFVTRShHU1RSRUFNRVIpCisgICAgICAgICAgICBSZWZQdHI8R3N0TWFw
cGVkQnVmZmVyPiwKICNlbmRpZgogICAgICAgICAgICAgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURh
dGE+IG1faW1tdXRhYmxlRGF0YTsKICAgICAgICAgZnJpZW5kIGNsYXNzIFNoYXJlZEJ1ZmZlcjsK
QEAgLTE5MSw2ICsyMDgsOSBAQCBwcml2YXRlOgogI2lmIFVTRShHTElCKQogICAgIGV4cGxpY2l0
IFNoYXJlZEJ1ZmZlcihHQnl0ZXMqKTsKICNlbmRpZgorI2lmIFVTRShHU1RSRUFNRVIpCisgICAg
ZXhwbGljaXQgU2hhcmVkQnVmZmVyKEdzdE1hcHBlZEJ1ZmZlciYpOworI2VuZGlmCiAKICAgICB2
b2lkIGNvbWJpbmVJbnRvT25lU2VnbWVudCgpIGNvbnN0OwogICAgIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL1dlYktpdFdlYkF1ZGlvU291cmNl
R1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9X
ZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAKaW5kZXggMDIxMDM1MmIwZDEwYzI4NmU5
YzE0MTA1ZDllZjNkMGRkYTI3YjNlYi4uMmY5MzdmNjc3Y2NjOGUwOGMyNjU3Y2Q4NDM2MWVjMmJj
OWI2YWNhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVh
bWVyL1dlYktpdFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvV2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIu
Y3BwCkBAIC0zMjcsNyArMzI3LDcgQEAgc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxHUmVmUHRyPEdz
dEJ1ZmZlcj4+PiB3ZWJLaXRXZWJBdWRpb1NyY0FsbG9jYXRlQnVmZmVyc0FuZFIKIAogICAgIFZl
Y3RvcjxHUmVmUHRyPEdzdEJ1ZmZlcj4+IGNoYW5uZWxCdWZmZXJMaXN0OwogICAgIGNoYW5uZWxC
dWZmZXJMaXN0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocHJpdi0+c291cmNlcy5zaXplKCkpOwot
ICAgIFZlY3RvcjxHc3RNYXBwZWRCdWZmZXI+IG1hcHBlZEJ1ZmZlcnM7CisgICAgVmVjdG9yPFJl
ZlB0cjxHc3RNYXBwZWRCdWZmZXI+PiBtYXBwZWRCdWZmZXJzOwogICAgIG1hcHBlZEJ1ZmZlcnMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShwcml2LT5zb3VyY2VzLnNpemUoKSk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHByaXYtPnNvdXJjZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAg
R1JlZlB0cjxHc3RCdWZmZXI+IGJ1ZmZlcjsKQEAgLTM0MiwxMCArMzQyLDEwIEBAIHN0YXRpYyBP
cHRpb25hbDxWZWN0b3I8R1JlZlB0cjxHc3RCdWZmZXI+Pj4gd2ViS2l0V2ViQXVkaW9TcmNBbGxv
Y2F0ZUJ1ZmZlcnNBbmRSCiAgICAgICAgIEFTU0VSVChidWZmZXIpOwogICAgICAgICBHU1RfQlVG
RkVSX1RJTUVTVEFNUChidWZmZXIuZ2V0KCkpID0gdGltZXN0YW1wOwogICAgICAgICBHU1RfQlVG
RkVSX0RVUkFUSU9OKGJ1ZmZlci5nZXQoKSkgPSBkdXJhdGlvbjsKLSAgICAgICAgR3N0TWFwcGVk
QnVmZmVyIG1hcHBlZEJ1ZmZlcihidWZmZXIuZ2V0KCksIEdTVF9NQVBfUkVBRFdSSVRFKTsKKyAg
ICAgICAgYXV0byBtYXBwZWRCdWZmZXIgPSBHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZShidWZmZXIu
Z2V0KCksIEdTVF9NQVBfUkVBRFdSSVRFKTsKICAgICAgICAgQVNTRVJUKG1hcHBlZEJ1ZmZlcik7
CiAgICAgICAgIG1hcHBlZEJ1ZmZlcnMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUobWFwcGVkQnVm
ZmVyKSk7Ci0gICAgICAgIHByaXYtPmJ1cy0+c2V0Q2hhbm5lbE1lbW9yeShpLCByZWludGVycHJl
dF9jYXN0PGZsb2F0Kj4obWFwcGVkQnVmZmVyc1tpXS5kYXRhKCkpLCBwcml2LT5mcmFtZXNUb1B1
bGwpOworICAgICAgICBwcml2LT5idXMtPnNldENoYW5uZWxNZW1vcnkoaSwgcmVpbnRlcnByZXRf
Y2FzdDxmbG9hdCo+KG1hcHBlZEJ1ZmZlcnNbaV0tPmRhdGEoKSksIHByaXYtPmZyYW1lc1RvUHVs
bCk7CiAgICAgICAgIGNoYW5uZWxCdWZmZXJMaXN0LnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGJ1
ZmZlcikpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcAppbmRleCAwYmE0NzM5
YTFkZTVkNDIxNjhmZWVkN2EwNWI4NjgyZDYwNTdhOGIxLi5jMzI1MzliMmRmMWYzMWEwZGM5Yzhm
NDU5MmRiOGY2YTcwYTFlYmE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcApAQCAtMjUs
NiArMjUsNyBAQAogCiAjaW5jbHVkZSAiR3N0QWxsb2NhdG9yRmFzdE1hbGxvYy5oIgogI2luY2x1
ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlIDxnc3Qv
YXVkaW8vYXVkaW8taW5mby5oPgogI2luY2x1ZGUgPGdzdC9nc3QuaD4KICNpbmNsdWRlIDxtdXRl
eD4KQEAgLTM1Nyw2ICszNTgsMTUgQEAgdm9pZCBjb25uZWN0U2ltcGxlQnVzTWVzc2FnZUNhbGxi
YWNrKEdzdEVsZW1lbnQqIHBpcGVsaW5lKQogICAgIGdfc2lnbmFsX2Nvbm5lY3QoYnVzLmdldCgp
LCAibWVzc2FnZSIsIEdfQ0FMTEJBQ0soc2ltcGxlQnVzTWVzc2FnZUNhbGxiYWNrKSwgcGlwZWxp
bmUpOwogfQogCitSZWY8U2hhcmVkQnVmZmVyPiBHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZVNoYXJl
ZEJ1ZmZlcigpCit7CisgICAgLy8gU2hhcmVkQnVmZmVyIHByb3ZpZGVzIGEgcmVhZC1vbmx5IHZp
ZXcgb24gd2hhdCBpdCBleHBlY3RzIGFyZQorICAgIC8vIGltbXV0YWJsZSBkYXRhLiBEbyBub3Qg
Y3JlYXRlIG9uZSBpcyB3cml0YWJsZSBhbmQgaGVuY2UgbXV0YWJsZS4KKyAgICBSRUxFQVNFX0FT
U0VSVChpc1NoYXJhYmxlKCkpOworCisgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKCp0
aGlzKTsKK30KKwogfQogCiAjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJD
b21tb24uaAppbmRleCAyZWYxNTUwMmEwMDU2MzFlZTRkMDdmN2ZhMzJiNTRmNDY5OGNmYmM4Li41
Y2I3MTdkM2JmNDE1NzRiZDk2ZDBmYzBjZjE1MDMxN2E5ZTQxOTg5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1l
ckNvbW1vbi5oCkBAIC0yNywxMCArMjcsMTIgQEAKICNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8t
Zm9ybWF0Lmg+CiAjaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLWluZm8uaD4KICNpbmNsdWRlIDx3
dGYvTWVkaWFUaW1lLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW50U2l6ZTsKK2NsYXNzIFNoYXJlZEJ1ZmZl
cjsKIAogaW5saW5lIGJvb2wgd2Via2l0R3N0Q2hlY2tWZXJzaW9uKGd1aW50IG1ham9yLCBndWlu
dCBtaW5vciwgZ3VpbnQgbWljcm8pCiB7CkBAIC03Nyw1MSArNzksNDcgQEAgaW5saW5lIEdzdENs
b2NrVGltZSB0b0dzdENsb2NrVGltZShjb25zdCBNZWRpYVRpbWUgJm1lZGlhVGltZSkKICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8R3N0Q2xvY2tUaW1lPih0b0dzdFVuc2lnbmVkNjRUaW1lKG1lZGlh
VGltZSkpOwogfQogCi1jbGFzcyBHc3RNYXBwZWRCdWZmZXIgewotICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEdzdE1hcHBlZEJ1ZmZlcik7CitjbGFzcyBHc3RNYXBwZWRCdWZmZXIgOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8R3N0TWFwcGVkQnVmZmVyPiB7CiBwdWJsaWM6Ci0KLSAgICBH
c3RNYXBwZWRCdWZmZXIoR3N0TWFwcGVkQnVmZmVyJiYgb3RoZXIpCi0gICAgICAgIDogbV9idWZm
ZXIob3RoZXIubV9idWZmZXIpCi0gICAgICAgICwgbV9pbmZvKG90aGVyLm1faW5mbykKLSAgICAg
ICAgLCBtX2lzVmFsaWQob3RoZXIubV9pc1ZhbGlkKQotICAgIHsKLSAgICAgICAgb3RoZXIubV9p
c1ZhbGlkID0gZmFsc2U7Ci0gICAgfQotCi0gICAgR3N0TWFwcGVkQnVmZmVyKEdzdEJ1ZmZlciog
YnVmZmVyLCBHc3RNYXBGbGFncyBmbGFncykKLSAgICAgICAgOiBtX2J1ZmZlcihidWZmZXIpCisg
ICAgc3RhdGljIFJlZlB0cjxHc3RNYXBwZWRCdWZmZXI+IGNyZWF0ZShHc3RCdWZmZXIqIGJ1ZmZl
ciwgR3N0TWFwRmxhZ3MgZmxhZ3MpCiAgICAgewotICAgICAgICBtX2lzVmFsaWQgPSBnc3RfYnVm
ZmVyX21hcChtX2J1ZmZlciwgJm1faW5mbywgZmxhZ3MpOworICAgICAgICBHc3RNYXBJbmZvIGlu
Zm87CisgICAgICAgIGlmICghZ3N0X2J1ZmZlcl9tYXAoYnVmZmVyLCAmaW5mbywgZmxhZ3MpKQor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
R3N0TWFwcGVkQnVmZmVyKGJ1ZmZlciwgV1RGTW92ZShpbmZvKSkpOwogICAgIH0KIAogICAgIC8v
IFVuZm9ydHVuYXRlbHksIEdTVF9NQVBfUkVBRFdSSVRFIGlzIGRlZmluZWQgb3V0IG9mIGxpbmUg
ZnJvbSB0aGUgTWFwRmxhZ3MKICAgICAvLyBlbnVtIGFzIGFuIGludCwgYW5kIEMrKyBpcyBjYXJl
ZnVsIHRvIG5vdCBpbXBsaWNpdHkgY29udmVydCBpdCB0byBhbiBlbnVtLgotICAgIEdzdE1hcHBl
ZEJ1ZmZlcihHc3RCdWZmZXIqIGJ1ZmZlciwgaW50IGZsYWdzKQotICAgICAgICA6IEdzdE1hcHBl
ZEJ1ZmZlcihidWZmZXIsIHN0YXRpY19jYXN0PEdzdE1hcEZsYWdzPihmbGFncykpIHsgfQorICAg
IHN0YXRpYyBSZWZQdHI8R3N0TWFwcGVkQnVmZmVyPiBjcmVhdGUoR3N0QnVmZmVyKiBidWZmZXIs
IGludCBmbGFncykKKyAgICB7CisgICAgICAgIHJldHVybiBHc3RNYXBwZWRCdWZmZXI6OmNyZWF0
ZShidWZmZXIsIHN0YXRpY19jYXN0PEdzdE1hcEZsYWdzPihmbGFncykpOworICAgIH0KIAogICAg
IH5Hc3RNYXBwZWRCdWZmZXIoKQogICAgIHsKLSAgICAgICAgaWYgKG1faXNWYWxpZCkKLSAgICAg
ICAgICAgIGdzdF9idWZmZXJfdW5tYXAobV9idWZmZXIsICZtX2luZm8pOwotICAgICAgICBtX2lz
VmFsaWQgPSBmYWxzZTsKKyAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcChtX2J1ZmZlciwgJm1faW5m
byk7CiAgICAgfQogCi0gICAgdWludDhfdCogZGF0YSgpIHsgQVNTRVJUKG1faXNWYWxpZCk7IHJl
dHVybiBzdGF0aWNfY2FzdDx1aW50OF90Kj4obV9pbmZvLmRhdGEpOyB9Ci0gICAgY29uc3QgdWlu
dDhfdCogZGF0YSgpIGNvbnN0IHsgQVNTRVJUKG1faXNWYWxpZCk7IHJldHVybiBzdGF0aWNfY2Fz
dDx1aW50OF90Kj4obV9pbmZvLmRhdGEpOyB9Ci0KLSAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsg
QVNTRVJUKG1faXNWYWxpZCk7IHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG1faW5mby5zaXpl
KTsgfQotCi0gICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1faXNW
YWxpZDsgfQorICAgIHVpbnQ4X3QqIGRhdGEoKSB7IHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90
Kj4obV9pbmZvLmRhdGEpOyB9CisgICAgY29uc3QgdWludDhfdCogZGF0YSgpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtX2luZm8uZGF0YSk7IH0KKyAgICBzaXplX3Qgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4obV9pbmZvLnNpemUpOyB9Cisg
ICAgYm9vbCBpc1NoYXJhYmxlKCkgY29uc3QgeyByZXR1cm4gIShtX2luZm8uZmxhZ3MgJiBHU1Rf
TUFQX1dSSVRFKTsgfQorICAgIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZVNoYXJlZEJ1ZmZlcigp
OwogCiBwcml2YXRlOgorICAgIEdzdE1hcHBlZEJ1ZmZlcihHc3RCdWZmZXIqIGJ1ZmZlciwgR3N0
TWFwSW5mbyYmIGluZm8pCisgICAgICAgIDogbV9idWZmZXIoYnVmZmVyKQorICAgICAgICAsIG1f
aW5mbyhXVEZNb3ZlKGluZm8pKQorICAgIHsKKyAgICB9CisKICAgICBmcmllbmQgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IEdzdE1hcHBlZEJ1ZmZlciYsIGNvbnN0IEdzdE1hcHBlZEJ1ZmZlciYpOwog
ICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgR3N0TWFwcGVkQnVmZmVyJiwgY29uc3Qg
R3N0QnVmZmVyKik7CiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBHc3RCdWZmZXIq
IGEsIGNvbnN0IEdzdE1hcHBlZEJ1ZmZlciYgYikgeyByZXR1cm4gb3BlcmF0b3I9PShiLCBhKTsg
fQogCiAgICAgR3N0QnVmZmVyKiBtX2J1ZmZlciB7IG51bGxwdHIgfTsKICAgICBHc3RNYXBJbmZv
IG1faW5mbzsKLSAgICBib29sIG1faXNWYWxpZCB7IGZhbHNlIH07CiB9OwogCiBpbmxpbmUgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEdzdE1hcHBlZEJ1ZmZlciYgYSwgY29uc3QgR3N0TWFwcGVkQnVm
ZmVyJiBiKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL0luYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0luYmFuZFRleHRUcmFja1ByaXZhdGVHU3Ry
ZWFtZXIuY3BwCmluZGV4IGMyZGQxMjMyMGMxZDg5YzE5NTYyYTYxZTgyNmQ5MGZjMGU3NmJhNDku
LmZiZmZlZTYwMWNmOTM2ZTcxZmQyODU3NzU5ZGQzNGJiMzkzY2I4MjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbmJhbmRUZXh0VHJhY2tQ
cml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lci5jcHAKQEAgLTExMiwx
NiArMTEyLDE2IEBAIHZvaWQgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5
VHJhY2tPZlNhbXBsZSgpCiAgICAgICAgICAgICBHU1RfV0FSTklORygiVHJhY2sgJWQgZ290IHNh
bXBsZSB3aXRoIG5vIGJ1ZmZlci4iLCBtX2luZGV4KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9Ci0gICAgICAgIEdzdE1hcHBlZEJ1ZmZlciBtYXBwZWRCdWZmZXIoYnVmZmVyLCBH
U1RfTUFQX1JFQUQpOworICAgICAgICBhdXRvIG1hcHBlZEJ1ZmZlciA9IEdzdE1hcHBlZEJ1ZmZl
cjo6Y3JlYXRlKGJ1ZmZlciwgR1NUX01BUF9SRUFEKTsKICAgICAgICAgQVNTRVJUKG1hcHBlZEJ1
ZmZlcik7CiAgICAgICAgIGlmICghbWFwcGVkQnVmZmVyKSB7CiAgICAgICAgICAgICBHU1RfV0FS
TklORygiVHJhY2sgJWQgdW5hYmxlIHRvIG1hcCBidWZmZXIuIiwgbV9pbmRleCk7CiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIEdTVF9JTkZPKCJUcmFjayAlZCBw
YXJzaW5nIHNhbXBsZTogJS4qcyIsIG1faW5kZXgsIHN0YXRpY19jYXN0PGludD4obWFwcGVkQnVm
ZmVyLnNpemUoKSksCi0gICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNoYXIqPihtYXBwZWRC
dWZmZXIuZGF0YSgpKSk7Ci0gICAgICAgIGNsaWVudCgpLT5wYXJzZVdlYlZUVEN1ZURhdGEocmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4obWFwcGVkQnVmZmVyLmRhdGEoKSksIG1hcHBlZEJ1ZmZlci5z
aXplKCkpOworICAgICAgICBHU1RfSU5GTygiVHJhY2sgJWQgcGFyc2luZyBzYW1wbGU6ICUuKnMi
LCBtX2luZGV4LCBzdGF0aWNfY2FzdDxpbnQ+KG1hcHBlZEJ1ZmZlci0+c2l6ZSgpKSwKKyAgICAg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1hcHBlZEJ1ZmZlci0+ZGF0YSgpKSk7Cisg
ICAgICAgIGNsaWVudCgpLT5wYXJzZVdlYlZUVEN1ZURhdGEocmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4obWFwcGVkQnVmZmVyLT5kYXRhKCkpLCBtYXBwZWRCdWZmZXItPnNpemUoKSk7CiAgICAgfQog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvZW1lL0dTdHJlYW1lckVNRVV0aWxpdGllcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9HU3RyZWFtZXJFTUVVdGlsaXRpZXMuaAppbmRleCBiZWZm
NzZhNWE2YThlNTU4MjZkNDc5YmQ2MGMzOGJlYjhiYjMwOGEyLi44YTkyY2EzYjFlYTg4OTg2MGE5
ZTg0ZDhkNWY1YTQ0NmU3N2ExMzYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0dTdHJlYW1lckVNRVV0aWxpdGllcy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvR1N0cmVhbWVyRU1F
VXRpbGl0aWVzLmgKQEAgLTQwLDEyICs0MCwxMiBAQCBwdWJsaWM6CiAgICAgSW5pdERhdGEoY29u
c3QgU3RyaW5nJiBzeXN0ZW1JZCwgR3N0QnVmZmVyKiBpbml0RGF0YSkKICAgICAgICAgOiBtX3N5
c3RlbUlkKHN5c3RlbUlkKQogICAgIHsKLSAgICAgICAgR3N0TWFwcGVkQnVmZmVyIG1hcHBlZElu
aXREYXRhKGluaXREYXRhLCBHU1RfTUFQX1JFQUQpOworICAgICAgICBhdXRvIG1hcHBlZEluaXRE
YXRhID0gR3N0TWFwcGVkQnVmZmVyOjpjcmVhdGUoaW5pdERhdGEsIEdTVF9NQVBfUkVBRCk7CiAg
ICAgICAgIGlmICghbWFwcGVkSW5pdERhdGEpIHsKICAgICAgICAgICAgIEdTVF9FUlJPUigiY2Fu
bm90IG1hcCAlcyBwcm90ZWN0aW9uIGRhdGEiLCBzeXN0ZW1JZC51dGY4KCkuZGF0YSgpKTsKICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9Ci0gICAgICAgIG1fcGF5
bG9hZCA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKG1hcHBlZEluaXREYXRhLmRhdGEoKSwgbWFwcGVk
SW5pdERhdGEuc2l6ZSgpKTsKKyAgICAgICAgbV9wYXlsb2FkID0gbWFwcGVkSW5pdERhdGEtPmNy
ZWF0ZVNoYXJlZEJ1ZmZlcigpOwogICAgIH0KIAogICAgIHZvaWQgYXBwZW5kKEluaXREYXRhJiYg
aW5pdERhdGEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvZW1lL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlE
ZWNyeXB0b3JHU3RyZWFtZXIuY3BwCmluZGV4IGY5NDFlNTI4ZjQ3Y2JkMDY5NTc5YmM1ZTYzMzU4
MWU2YjYxMGM3MjMuLjE0ZWVjYzBiMTVhN2E0OWY0NGNmMmU4MzI0NWY3MTBlMDY3ODZhOTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUv
V2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JH
U3RyZWFtZXIuY3BwCkBAIC0xNTAsMTEgKzE1MCwxMSBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0
TWVkaWFDbGVhcktleURlY3J5cHRvckhhbmRsZUtleVJlc3BvbnNlKFdlYktpdE1lZGlhQ29tbW9u
RQogICAgIHJldHVybiBUUlVFOwogfQogCi1zdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0TWVkaWFDbGVh
cktleURlY3J5cHRvckZpbmRBbmRTZXRLZXkoV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2
YXRlKiBwcml2LCBjb25zdCBXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXImIGtleUlEQnVmZmVyKQor
c3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JGaW5kQW5kU2V0S2V5
KFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSogcHJpdiwgUmVmUHRyPFdlYkNvcmU6
OkdzdE1hcHBlZEJ1ZmZlcj4mJiBrZXlJREJ1ZmZlcikKIHsKICAgICBHUmVmUHRyPEdzdEJ1ZmZl
cj4ga2V5QnVmZmVyOwogICAgIGZvciAoYXV0byYga2V5IDogcHJpdi0+a2V5cykgewotICAgICAg
ICBpZiAoa2V5LmtleUlELmdldCgpID09IGtleUlEQnVmZmVyKSB7CisgICAgICAgIGlmIChrZXku
a2V5SUQuZ2V0KCkgPT0gKmtleUlEQnVmZmVyKSB7CiAgICAgICAgICAgICBrZXlCdWZmZXIgPSBr
ZXkua2V5VmFsdWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTY1LDE0ICsx
NjUsMTQgQEAgc3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JGaW5k
QW5kU2V0S2V5KFdlYktpdE1lZGlhQ2xlYXJLZXlEZWMKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIAotICAgIFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlciBtYXBwZWRLZXlWYWx1ZUJ1ZmZl
cihrZXlCdWZmZXIuZ2V0KCksIEdTVF9NQVBfUkVBRCk7CisgICAgYXV0byBtYXBwZWRLZXlWYWx1
ZUJ1ZmZlciA9IFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKGtleUJ1ZmZlci5nZXQo
KSwgR1NUX01BUF9SRUFEKTsKICAgICBpZiAoIW1hcHBlZEtleVZhbHVlQnVmZmVyKSB7CiAgICAg
ICAgIEdTVF9FUlJPUl9PQkpFQ1QocHJpdiwgIkZhaWxlZCB0byBtYXAgZGVjcnlwdGlvbiBrZXki
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIEFTU0VSVChtYXBwZWRLZXlW
YWx1ZUJ1ZmZlci5zaXplKCkgPT0gQ0xFQVJLRVlfU0laRSk7Ci0gICAgaWYgKGdjcnlfZXJyb3Jf
dCBlcnJvciA9IGdjcnlfY2lwaGVyX3NldGtleShwcml2LT5oYW5kbGUsIG1hcHBlZEtleVZhbHVl
QnVmZmVyLmRhdGEoKSwgbWFwcGVkS2V5VmFsdWVCdWZmZXIuc2l6ZSgpKSkgeworICAgIEFTU0VS
VChtYXBwZWRLZXlWYWx1ZUJ1ZmZlci0+c2l6ZSgpID09IENMRUFSS0VZX1NJWkUpOworICAgIGlm
IChnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRrZXkocHJpdi0+aGFuZGxlLCBt
YXBwZWRLZXlWYWx1ZUJ1ZmZlci0+ZGF0YSgpLCBtYXBwZWRLZXlWYWx1ZUJ1ZmZlci0+c2l6ZSgp
KSkgewogICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHByaXYsICJnY3J5X2NpcGhlcl9zZXRrZXkg
ZmFpbGVkOiAlcyIsIGdwZ19zdHJlcnJvcihlcnJvcikpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQpAQCAtMTg4LDE5ICsxODgsMTkgQEAgc3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlh
Q2xlYXJLZXlEZWNyeXB0b3JEZWNyeXB0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkQKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZl
ciBtYXBwZWRJVkJ1ZmZlcihpdkJ1ZmZlciwgR1NUX01BUF9SRUFEKTsKKyAgICBhdXRvIG1hcHBl
ZElWQnVmZmVyID0gV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjpjcmVhdGUoaXZCdWZmZXIsIEdT
VF9NQVBfUkVBRCk7CiAgICAgaWYgKCFtYXBwZWRJVkJ1ZmZlcikgewogICAgICAgICBHU1RfRVJS
T1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gbWFwIElWIik7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKICAgICB1aW50OF90IGN0cltDTEVBUktFWV9TSVpFXTsKLSAgICBpZiAobWFw
cGVkSVZCdWZmZXIuc2l6ZSgpID09IDgpIHsKKyAgICBpZiAobWFwcGVkSVZCdWZmZXItPnNpemUo
KSA9PSA4KSB7CiAgICAgICAgIG1lbXNldChjdHIgKyA4LCAwLCA4KTsKLSAgICAgICAgbWVtY3B5
KGN0ciwgbWFwcGVkSVZCdWZmZXIuZGF0YSgpLCA4KTsKKyAgICAgICAgbWVtY3B5KGN0ciwgbWFw
cGVkSVZCdWZmZXItPmRhdGEoKSwgOCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKG1h
cHBlZElWQnVmZmVyLnNpemUoKSA9PSBDTEVBUktFWV9TSVpFKTsKLSAgICAgICAgbWVtY3B5KGN0
ciwgbWFwcGVkSVZCdWZmZXIuZGF0YSgpLCBDTEVBUktFWV9TSVpFKTsKKyAgICAgICAgbWVtY3B5
KGN0ciwgbWFwcGVkSVZCdWZmZXItPmRhdGEoKSwgQ0xFQVJLRVlfU0laRSk7CiAgICAgfQogCiAg
ICAgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElB
X0NLX0RFQ1JZUFRfR0VUX1BSSVZBVEUoV0VCS0lUX01FRElBX0NLX0RFQ1JZUFQoc2VsZikpOwpA
QCAtMjE2LDMwICsyMTYsMzAgQEAgc3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlhQ2xlYXJLZXlE
ZWNyeXB0b3JEZWNyeXB0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkQKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAotICAgIFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlciBtYXBwZWRL
ZXlJZEJ1ZmZlcihrZXlJREJ1ZmZlciwgR1NUX01BUF9SRUFEKTsKKyAgICBhdXRvIG1hcHBlZEtl
eUlkQnVmZmVyID0gV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjpjcmVhdGUoa2V5SURCdWZmZXIs
IEdTVF9NQVBfUkVBRCk7CiAgICAgaWYgKCFtYXBwZWRLZXlJZEJ1ZmZlcikgewogICAgICAgICBH
U1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gbWFwIGtleSBpZCBidWZmZXIiKTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZl
ciBtYXBwZWRCdWZmZXIoYnVmZmVyLCBHU1RfTUFQX1JFQURXUklURSk7CisgICAgYXV0byBtYXBw
ZWRCdWZmZXIgPSBXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZShidWZmZXIsIEdTVF9N
QVBfUkVBRFdSSVRFKTsKICAgICBpZiAoIW1hcHBlZEJ1ZmZlcikgewogICAgICAgICBHU1RfRVJS
T1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gbWFwIGJ1ZmZlciIpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgd2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRvckZpbmRBbmRT
ZXRLZXkocHJpdiwgbWFwcGVkS2V5SWRCdWZmZXIpOworICAgIHdlYktpdE1lZGlhQ2xlYXJLZXlE
ZWNyeXB0b3JGaW5kQW5kU2V0S2V5KHByaXYsIFdURk1vdmUobWFwcGVkS2V5SWRCdWZmZXIpKTsK
IAogICAgIHVuc2lnbmVkIHBvc2l0aW9uID0gMDsKICAgICB1bnNpZ25lZCBzYW1wbGVJbmRleCA9
IDA7CiAKICAgICBpZiAoIXN1YlNhbXBsZUNvdW50KSB7CiAgICAgICAgIC8vIEZ1bGwgc2FtcGxl
IGVuY3J5cHRpb24uCi0gICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc2VsZiwgImZ1bGwgc2FtcGxl
IGVuY3J5cHRpb246ICV6dSBlbmNyeXB0ZWQgYnl0ZXMiLCBtYXBwZWRCdWZmZXIuc2l6ZSgpKTsK
KyAgICAgICAgR1NUX1RSQUNFX09CSkVDVChzZWxmLCAiZnVsbCBzYW1wbGUgZW5jcnlwdGlvbjog
JXp1IGVuY3J5cHRlZCBieXRlcyIsIG1hcHBlZEJ1ZmZlci0+c2l6ZSgpKTsKIAogICAgICAgICAv
LyBDaGVjayBpZiB0aGUgYnVmZmVyIGlzIGVtcHR5LgotICAgICAgICBpZiAobWFwcGVkQnVmZmVy
LnNpemUoKSkgewotICAgICAgICAgICAgY2lwaGVyRXJyb3IgPSBnY3J5X2NpcGhlcl9kZWNyeXB0
KHByaXYtPmhhbmRsZSwgbWFwcGVkQnVmZmVyLmRhdGEoKSwgbWFwcGVkQnVmZmVyLnNpemUoKSwg
MCwgMCk7CisgICAgICAgIGlmIChtYXBwZWRCdWZmZXItPnNpemUoKSkgeworICAgICAgICAgICAg
Y2lwaGVyRXJyb3IgPSBnY3J5X2NpcGhlcl9kZWNyeXB0KHByaXYtPmhhbmRsZSwgbWFwcGVkQnVm
ZmVyLT5kYXRhKCksIG1hcHBlZEJ1ZmZlci0+c2l6ZSgpLCAwLCAwKTsKICAgICAgICAgICAgIGlm
IChjaXBoZXJFcnJvcikgewogICAgICAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwg
ImZ1bGwgc2FtcGxlIGRlY3J5cHRpb24gZmFpbGVkOiAlcyIsIGdwZ19zdHJlcnJvcihjaXBoZXJF
cnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI1NSwxNiArMjU1LDE2
IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdG9yRGVjcnlwdChX
ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25ECiAgICAgfQogCiAgICAgLy8gU3Vic2FtcGxlIGVu
Y3J5cHRpb24uCi0gICAgV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyIG1hcHBlZFN1YlNhbXBsZXNC
dWZmZXIoc3ViU2FtcGxlc0J1ZmZlciwgR1NUX01BUF9SRUFEKTsKKyAgICBhdXRvIG1hcHBlZFN1
YlNhbXBsZXNCdWZmZXIgPSBXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZShzdWJTYW1w
bGVzQnVmZmVyLCBHU1RfTUFQX1JFQUQpOwogICAgIGlmICghbWFwcGVkU3ViU2FtcGxlc0J1ZmZl
cikgewogICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gbWFwIHN1YnNh
bXBsZSBidWZmZXIiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIEdVbmlx
dWVQdHI8R3N0Qnl0ZVJlYWRlcj4gcmVhZGVyKGdzdF9ieXRlX3JlYWRlcl9uZXcobWFwcGVkU3Vi
U2FtcGxlc0J1ZmZlci5kYXRhKCksIG1hcHBlZFN1YlNhbXBsZXNCdWZmZXIuc2l6ZSgpKSk7Ci0g
ICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAicG9zaXRpb246ICVkLCBzaXplOiAlenUiLCBwb3Np
dGlvbiwgbWFwcGVkQnVmZmVyLnNpemUoKSk7CisgICAgR1VuaXF1ZVB0cjxHc3RCeXRlUmVhZGVy
PiByZWFkZXIoZ3N0X2J5dGVfcmVhZGVyX25ldyhtYXBwZWRTdWJTYW1wbGVzQnVmZmVyLT5kYXRh
KCksIG1hcHBlZFN1YlNhbXBsZXNCdWZmZXItPnNpemUoKSkpOworICAgIEdTVF9ERUJVR19PQkpF
Q1Qoc2VsZiwgInBvc2l0aW9uOiAlZCwgc2l6ZTogJXp1IiwgcG9zaXRpb24sIG1hcHBlZEJ1ZmZl
ci0+c2l6ZSgpKTsKIAotICAgIHdoaWxlIChwb3NpdGlvbiA8IG1hcHBlZEJ1ZmZlci5zaXplKCkp
IHsKKyAgICB3aGlsZSAocG9zaXRpb24gPCBtYXBwZWRCdWZmZXItPnNpemUoKSkgewogICAgICAg
ICBndWludDE2IG5CeXRlc0NsZWFyID0gMDsKICAgICAgICAgZ3VpbnQzMiBuQnl0ZXNFbmNyeXB0
ZWQgPSAwOwogCkBAIC0yNzcsMTQgKzI3NywxNCBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0TWVk
aWFDbGVhcktleURlY3J5cHRvckRlY3J5cHQoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRAog
ICAgICAgICAgICAgc2FtcGxlSW5kZXgrKzsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IG5CeXRlc0NsZWFyID0gMDsKLSAgICAgICAgICAgIG5CeXRlc0VuY3J5cHRlZCA9IG1hcHBlZEJ1
ZmZlci5zaXplKCkgLSBwb3NpdGlvbjsKKyAgICAgICAgICAgIG5CeXRlc0VuY3J5cHRlZCA9IG1h
cHBlZEJ1ZmZlci0+c2l6ZSgpIC0gcG9zaXRpb247CiAgICAgICAgIH0KIAotICAgICAgICBHU1Rf
VFJBQ0VfT0JKRUNUKHNlbGYsICJzdWJzYW1wbGUgaW5kZXggJXUgLSAlaHUgYnl0ZXMgY2xlYXIg
KHRvZG89JXp1KSIsIHNhbXBsZUluZGV4LCBuQnl0ZXNDbGVhciwgbWFwcGVkQnVmZmVyLnNpemUo
KSAtIHBvc2l0aW9uKTsKKyAgICAgICAgR1NUX1RSQUNFX09CSkVDVChzZWxmLCAic3Vic2FtcGxl
IGluZGV4ICV1IC0gJWh1IGJ5dGVzIGNsZWFyICh0b2RvPSV6dSkiLCBzYW1wbGVJbmRleCwgbkJ5
dGVzQ2xlYXIsIG1hcHBlZEJ1ZmZlci0+c2l6ZSgpIC0gcG9zaXRpb24pOwogICAgICAgICBwb3Np
dGlvbiArPSBuQnl0ZXNDbGVhcjsKICAgICAgICAgaWYgKG5CeXRlc0VuY3J5cHRlZCkgewotICAg
ICAgICAgICAgR1NUX1RSQUNFX09CSkVDVChzZWxmLCAic3Vic2FtcGxlIGluZGV4ICV1IC0gJXUg
Ynl0ZXMgZW5jcnlwdGVkICh0b2RvPSV6dSkiLCBzYW1wbGVJbmRleCwgbkJ5dGVzRW5jcnlwdGVk
LCBtYXBwZWRCdWZmZXIuc2l6ZSgpIC0gcG9zaXRpb24pOwotICAgICAgICAgICAgY2lwaGVyRXJy
b3IgPSBnY3J5X2NpcGhlcl9kZWNyeXB0KHByaXYtPmhhbmRsZSwgbWFwcGVkQnVmZmVyLmRhdGEo
KSArIHBvc2l0aW9uLCBuQnl0ZXNFbmNyeXB0ZWQsIDAsIDApOworICAgICAgICAgICAgR1NUX1RS
QUNFX09CSkVDVChzZWxmLCAic3Vic2FtcGxlIGluZGV4ICV1IC0gJXUgYnl0ZXMgZW5jcnlwdGVk
ICh0b2RvPSV6dSkiLCBzYW1wbGVJbmRleCwgbkJ5dGVzRW5jcnlwdGVkLCBtYXBwZWRCdWZmZXIt
PnNpemUoKSAtIHBvc2l0aW9uKTsKKyAgICAgICAgICAgIGNpcGhlckVycm9yID0gZ2NyeV9jaXBo
ZXJfZGVjcnlwdChwcml2LT5oYW5kbGUsIG1hcHBlZEJ1ZmZlci0+ZGF0YSgpICsgcG9zaXRpb24s
IG5CeXRlc0VuY3J5cHRlZCwgMCwgMCk7CiAgICAgICAgICAgICBpZiAoY2lwaGVyRXJyb3IpIHsK
ICAgICAgICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJzdWIgc2FtcGxlIGluZGV4
ICV1IGRlY3J5cHRpb24gZmFpbGVkOiAlcyIsIHNhbXBsZUluZGV4LCBncGdfc3RyZXJyb3IoY2lw
aGVyRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1l
ckF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAKaW5kZXgg
ZGVkYzA3OWIyYTFiMzU3YzUwZDcxYThkYTQxOTlhYmM0YzU2ZmEyNi4uNTMzOGViM2Q5M2YxODkw
MDdlZTUwMTllMTEzZjk1ZWRhZDhmYWQ2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3Vy
Y2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9Nb2NrR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlLmNwcApAQCAtNzgsMTMgKzc4LDEzIEBA
IHB1YmxpYzoKIAogICAgICAgICAgICAgR3N0QnVmZmVyKiBidWZmZXIgPSBnc3RfYnVmZmVyX25l
d19hbGxvY2F0ZShudWxscHRyLCBiaXBCb3BDb3VudCAqIG1fc3RyZWFtRm9ybWF0LT5ieXRlc1Bl
ckZyYW1lKCksIG51bGxwdHIpOwogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEdzdE1h
cHBlZEJ1ZmZlciBtYXAoYnVmZmVyLCBHU1RfTUFQX1dSSVRFKTsKKyAgICAgICAgICAgICAgICBh
dXRvIG1hcCA9IEdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKGJ1ZmZlciwgR1NUX01BUF9XUklURSk7
CiAKICAgICAgICAgICAgICAgICBpZiAoIW11dGVkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
bWVtY3B5KG1hcC5kYXRhKCksICZtX2JpcEJvcEJ1ZmZlcltiaXBCb3BTdGFydF0sIHNpemVvZihm
bG9hdCkgKiBiaXBCb3BDb3VudCk7Ci0gICAgICAgICAgICAgICAgICAgIGFkZEh1bShzX0h1bVZv
bHVtZSwgc19IdW1GcmVxdWVuY3ksIHNhbXBsZVJhdGUoKSwgbV9zYW1wbGVzUmVuZGVyZWQsIChm
bG9hdCopbWFwLmRhdGEoKSwgYmlwQm9wQ291bnQpOworICAgICAgICAgICAgICAgICAgICBtZW1j
cHkobWFwLT5kYXRhKCksICZtX2JpcEJvcEJ1ZmZlcltiaXBCb3BTdGFydF0sIHNpemVvZihmbG9h
dCkgKiBiaXBCb3BDb3VudCk7CisgICAgICAgICAgICAgICAgICAgIGFkZEh1bShzX0h1bVZvbHVt
ZSwgc19IdW1GcmVxdWVuY3ksIHNhbXBsZVJhdGUoKSwgbV9zYW1wbGVzUmVuZGVyZWQsIChmbG9h
dCopbWFwLT5kYXRhKCksIGJpcEJvcENvdW50KTsKICAgICAgICAgICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgbWVtc2V0KG1hcC5kYXRhKCksIDAsIHNpemVvZihmbG9hdCkgKiBi
aXBCb3BDb3VudCk7CisgICAgICAgICAgICAgICAgICAgIG1lbXNldChtYXAtPmRhdGEoKSwgMCwg
c2l6ZW9mKGZsb2F0KSAqIGJpcEJvcENvdW50KTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgZ3N0X2FwcF9zcmNfcHVzaF9idWZmZXIoR1NUX0FQUF9TUkMobV9zcmMuZ2V0KCkpLCBidWZm
ZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUxpYldlYlJUQy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ0F1
ZGlvU291cmNlTGliV2ViUlRDLmNwcAppbmRleCA1ZTdmOTc3YTk2YjIxNzlkYjYxOGZlODAwYjJk
NTYzNWRiOWQ2YTFmLi43MjAzZDdkMzYzYzdlMzdjOWQ3MDY5MzU4NzM3MGRjZDFmOWY2YTcwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlTGliV2ViUlRDLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ0F1ZGlv
U291cmNlTGliV2ViUlRDLmNwcApAQCAtMTE0LDkgKzExNCw5IEBAIHZvaWQgUmVhbHRpbWVPdXRn
b2luZ0F1ZGlvU291cmNlTGliV2ViUlRDOjpwdWxsQXVkaW9EYXRhKCkKICAgICAgICAgaWYgKGlz
U2lsZW5jZWQoKSkKICAgICAgICAgICAgIGdzdF9hdWRpb19mb3JtYXRfZmlsbF9zaWxlbmNlKG1f
b3V0cHV0U3RyZWFtRGVzY3JpcHRpb24tPmdldEluZm8oKS0+ZmluZm8sIG1fYXVkaW9CdWZmZXIu
ZGF0YSgpLCBvdXRCdWZmZXJTaXplKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBHc3RN
YXBwZWRCdWZmZXIgaW5NYXAoaW5CdWZmZXIuZ2V0KCksIEdTVF9NQVBfUkVBRCk7CisgICAgICAg
ICAgICBhdXRvIGluTWFwID0gR3N0TWFwcGVkQnVmZmVyOjpjcmVhdGUoaW5CdWZmZXIuZ2V0KCks
IEdTVF9NQVBfUkVBRCk7CiAKLSAgICAgICAgICAgIGdwb2ludGVyIGluWzFdID0geyBpbk1hcC5k
YXRhKCkgfTsKKyAgICAgICAgICAgIGdwb2ludGVyIGluWzFdID0geyBpbk1hcC0+ZGF0YSgpIH07
CiAgICAgICAgICAgICBncG9pbnRlciBvdXRbMV0gPSB7IG1fYXVkaW9CdWZmZXIuZGF0YSgpIH07
CiAgICAgICAgICAgICBpZiAoIWdzdF9hdWRpb19jb252ZXJ0ZXJfc2FtcGxlcyhtX3NhbXBsZUNv
bnZlcnRlci5nZXQoKSwgc3RhdGljX2Nhc3Q8R3N0QXVkaW9Db252ZXJ0ZXJGbGFncz4oMCksIGlu
LCBpbkNodW5rU2FtcGxlQ291bnQsIG91dCwgb3V0Q2h1bmtTYW1wbGVDb3VudCkpIHsKICAgICAg
ICAgICAgICAgICBHU1RfRVJST1IoIkNvdWxkIG5vdCBjb252ZXJ0IHNhbXBsZXMuIik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTGliV2ViUlRDLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VM
aWJXZWJSVEMuY3BwCmluZGV4IDllMzk2ZDkzYmNlNDI5NjhkNjg0YzIzMjRlMTIyZDQ1ZDMyMWQ3
ZGYuLjY5YmU5YjUzZThhNTc4MmUxMzFjYzk4ODQ5ZTNiYmQ4ZTJkOTJkM2YgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91
dGdvaW5nVmlkZW9Tb3VyY2VMaWJXZWJSVEMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VMaWJX
ZWJSVEMuY3BwCkBAIC04Niw4ICs4Niw4IEBAIHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZp
ZGVvRnJhbWVCdWZmZXI+IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUxpYldlYlJUCiAgICAg
R1JlZlB0cjxHc3RCdWZmZXI+IGJ1ZmZlciA9IGFkb3B0R1JlZihnc3RfYnVmZmVyX25ld19hbGxv
Y2F0ZShudWxscHRyLCBpbmZvLnNpemUsIG51bGxwdHIpKTsKICAgICBHUmVmUHRyPEdzdENhcHM+
IGNhcHMgPSBhZG9wdEdSZWYoZ3N0X3ZpZGVvX2luZm9fdG9fY2FwcygmaW5mbykpOwogCi0gICAg
R3N0TWFwcGVkQnVmZmVyIG1hcChidWZmZXIuZ2V0KCksIEdTVF9NQVBfV1JJVEUpOwotICAgIG1l
bXNldChtYXAuZGF0YSgpLCAwLCBpbmZvLnNpemUpOworICAgIGF1dG8gbWFwID0gR3N0TWFwcGVk
QnVmZmVyOjpjcmVhdGUoYnVmZmVyLmdldCgpLCBHU1RfTUFQX1dSSVRFKTsKKyAgICBtZW1zZXQo
bWFwLT5kYXRhKCksIDAsIGluZm8uc2l6ZSk7CiAKICAgICByZXR1cm4gR1N0cmVhbWVyVmlkZW9G
cmFtZUxpYldlYlJUQzo6Y3JlYXRlKGdzdF9zYW1wbGVfbmV3KGJ1ZmZlci5nZXQoKSwgY2Fwcy5n
ZXQoKSwgTlVMTCwgTlVMTCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL0dTdHJlYW1lclZpZGVvRW5jb2RlckZhY3RvcnkuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL0dTdHJlYW1l
clZpZGVvRW5jb2RlckZhY3RvcnkuY3BwCmluZGV4IGJjMTJiNmNkZjBhOTgyN2MwOTQ1MWU2OTAz
YjA2MzY3NTIwYTc5ZDIuLmVlNzQwYjRhNGQyODhkYjMwNjYxMDA4M2RkNDNjNjE5ZDU1NjdkYWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0
Yy9HU3RyZWFtZXJWaWRlb0VuY29kZXJGYWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvR1N0cmVhbWVyVmlkZW9FbmNvZGVyRmFjdG9y
eS5jcHAKQEAgLTM0MiwyMiArMzQyLDIyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgRnJh
Z21lbnRpemUod2VicnRjOjpFbmNvZGVkSW1hZ2UqIGVuY29kZWRJbWFnZSwgc3RkOjp1bmlxdWVf
cHRyPHVpbnQ4X3RbXT4qIGVuY29kZWRJbWFnZUJ1ZmZlciwKICAgICAgICAgc2l6ZV90KiBidWZm
ZXJTaXplLCBHc3RCdWZmZXIqIGJ1ZmZlciwgd2VicnRjOjpSVFBGcmFnbWVudGF0aW9uSGVhZGVy
KiBmcmFnbWVudGF0aW9uSW5mbykKICAgICB7Ci0gICAgICAgIEdzdE1hcHBlZEJ1ZmZlciBtYXAo
YnVmZmVyLCBHU1RfTUFQX1JFQUQpOworICAgICAgICBhdXRvIG1hcCA9IEdzdE1hcHBlZEJ1ZmZl
cjo6Y3JlYXRlKGJ1ZmZlciwgR1NUX01BUF9SRUFEKTsKIAotICAgICAgICBpZiAoKmJ1ZmZlclNp
emUgPCBtYXAuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBlbmNvZGVkSW1hZ2UtPl9zaXplID0gbWFw
LnNpemUoKTsKKyAgICAgICAgaWYgKCpidWZmZXJTaXplIDwgbWFwLT5zaXplKCkpIHsKKyAgICAg
ICAgICAgIGVuY29kZWRJbWFnZS0+X3NpemUgPSBtYXAtPnNpemUoKTsKICAgICAgICAgICAgIGVu
Y29kZWRJbWFnZS0+X2J1ZmZlciA9IG5ldyB1aW50OF90W2VuY29kZWRJbWFnZS0+X3NpemVdOwog
ICAgICAgICAgICAgZW5jb2RlZEltYWdlQnVmZmVyLT5yZXNldChlbmNvZGVkSW1hZ2UtPl9idWZm
ZXIpOwotICAgICAgICAgICAgKmJ1ZmZlclNpemUgPSBtYXAuc2l6ZSgpOworICAgICAgICAgICAg
KmJ1ZmZlclNpemUgPSBtYXAtPnNpemUoKTsKICAgICAgICAgfQogCi0gICAgICAgIG1lbWNweShl
bmNvZGVkSW1hZ2UtPl9idWZmZXIsIG1hcC5kYXRhKCksIG1hcC5zaXplKCkpOwotICAgICAgICBl
bmNvZGVkSW1hZ2UtPl9sZW5ndGggPSBtYXAuc2l6ZSgpOwotICAgICAgICBlbmNvZGVkSW1hZ2Ut
Pl9zaXplID0gbWFwLnNpemUoKTsKKyAgICAgICAgbWVtY3B5KGVuY29kZWRJbWFnZS0+X2J1ZmZl
ciwgbWFwLT5kYXRhKCksIG1hcC0+c2l6ZSgpKTsKKyAgICAgICAgZW5jb2RlZEltYWdlLT5fbGVu
Z3RoID0gbWFwLT5zaXplKCk7CisgICAgICAgIGVuY29kZWRJbWFnZS0+X3NpemUgPSBtYXAtPnNp
emUoKTsKIAogICAgICAgICBmcmFnbWVudGF0aW9uSW5mby0+VmVyaWZ5QW5kQWxsb2NhdGVGcmFn
bWVudGF0aW9uSGVhZGVyKDEpOwogICAgICAgICBmcmFnbWVudGF0aW9uSW5mby0+ZnJhZ21lbnRh
dGlvbk9mZnNldFswXSA9IDA7Ci0gICAgICAgIGZyYWdtZW50YXRpb25JbmZvLT5mcmFnbWVudGF0
aW9uTGVuZ3RoWzBdID0gbWFwLnNpemUoKTsKKyAgICAgICAgZnJhZ21lbnRhdGlvbkluZm8tPmZy
YWdtZW50YXRpb25MZW5ndGhbMF0gPSBtYXAtPnNpemUoKTsKICAgICAgICAgZnJhZ21lbnRhdGlv
bkluZm8tPmZyYWdtZW50YXRpb25QbFR5cGVbMF0gPSAwOwogICAgICAgICBmcmFnbWVudGF0aW9u
SW5mby0+ZnJhZ21lbnRhdGlvblRpbWVEaWZmWzBdID0gMDsKICAgICB9CkBAIC00MzgsOSArNDM4
LDkgQEAgcHVibGljOgogICAgICAgICBzdGQ6OnZlY3RvcjxHc3RIMjY0TmFsVW5pdD4gbmFsczsK
IAogICAgICAgICBjb25zdCB1aW50OF90IHN0YXJ0Q29kZVs0XSA9IHsgMCwgMCwgMCwgMSB9Owot
ICAgICAgICBHc3RNYXBwZWRCdWZmZXIgbWFwKGdzdGJ1ZmZlciwgR1NUX01BUF9SRUFEKTsKKyAg
ICAgICAgYXV0byBtYXAgPSBHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZShnc3RidWZmZXIsIEdTVF9N
QVBfUkVBRCk7CiAgICAgICAgIHdoaWxlIChwYXJzZXJSZXN1bHQgPT0gR1NUX0gyNjRfUEFSU0VS
X09LKSB7Ci0gICAgICAgICAgICBwYXJzZXJSZXN1bHQgPSBnc3RfaDI2NF9wYXJzZXJfaWRlbnRp
ZnlfbmFsdShtX3BhcnNlciwgbWFwLmRhdGEoKSwgb2Zmc2V0LCBtYXAuc2l6ZSgpLCAmbmFsdSk7
CisgICAgICAgICAgICBwYXJzZXJSZXN1bHQgPSBnc3RfaDI2NF9wYXJzZXJfaWRlbnRpZnlfbmFs
dShtX3BhcnNlciwgbWFwLT5kYXRhKCksIG9mZnNldCwgbWFwLT5zaXplKCksICZuYWx1KTsKIAog
ICAgICAgICAgICAgbmFsdS5zY19vZmZzZXQgPSBvZmZzZXQ7CiAgICAgICAgICAgICBuYWx1Lm9m
ZnNldCA9IG9mZnNldCArIHNpemVvZihzdGFydENvZGUpOwpAQCAtNDU2LDcgKzQ1Niw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIGVuY29kZWRJbWFnZS0+X3NpemUgPSByZXF1aXJlZFNpemU7CiAg
ICAgICAgICAgICBlbmNvZGVkSW1hZ2UtPl9idWZmZXIgPSBuZXcgdWludDhfdFtlbmNvZGVkSW1h
Z2UtPl9zaXplXTsKICAgICAgICAgICAgIGVuY29kZWRJbWFnZUJ1ZmZlci0+cmVzZXQoZW5jb2Rl
ZEltYWdlLT5fYnVmZmVyKTsKLSAgICAgICAgICAgICpidWZmZXJTaXplID0gbWFwLnNpemUoKTsK
KyAgICAgICAgICAgICpidWZmZXJTaXplID0gbWFwLT5zaXplKCk7CiAgICAgICAgIH0KIAogICAg
ICAgICAvLyBJdGVyYXRlIG5hbCB1bml0cyBhbmQgZmlsbCB0aGUgRnJhZ21lbnRhdGlvbiBpbmZv
LgpAQCAtNDY1LDE1ICs0NjUsMTUgQEAgcHVibGljOgogICAgICAgICBlbmNvZGVkSW1hZ2UtPl9s
ZW5ndGggPSAwOwogICAgICAgICBmb3IgKHN0ZDo6dmVjdG9yPEdzdEgyNjROYWxVbml0Pjo6aXRl
cmF0b3IgbmFsID0gbmFscy5iZWdpbigpOyBuYWwgIT0gbmFscy5lbmQoKTsgKytuYWwsIGZyYWdt
ZW50SW5kZXgrKykgewogCi0gICAgICAgICAgICBBU1NFUlQobWFwLmRhdGEoKVtuYWwtPnNjX29m
ZnNldCArIDBdID09IHN0YXJ0Q29kZVswXSk7Ci0gICAgICAgICAgICBBU1NFUlQobWFwLmRhdGEo
KVtuYWwtPnNjX29mZnNldCArIDFdID09IHN0YXJ0Q29kZVsxXSk7Ci0gICAgICAgICAgICBBU1NF
UlQobWFwLmRhdGEoKVtuYWwtPnNjX29mZnNldCArIDJdID09IHN0YXJ0Q29kZVsyXSk7Ci0gICAg
ICAgICAgICBBU1NFUlQobWFwLmRhdGEoKVtuYWwtPnNjX29mZnNldCArIDNdID09IHN0YXJ0Q29k
ZVszXSk7CisgICAgICAgICAgICBBU1NFUlQobWFwLT5kYXRhKClbbmFsLT5zY19vZmZzZXQgKyAw
XSA9PSBzdGFydENvZGVbMF0pOworICAgICAgICAgICAgQVNTRVJUKG1hcC0+ZGF0YSgpW25hbC0+
c2Nfb2Zmc2V0ICsgMV0gPT0gc3RhcnRDb2RlWzFdKTsKKyAgICAgICAgICAgIEFTU0VSVChtYXAt
PmRhdGEoKVtuYWwtPnNjX29mZnNldCArIDJdID09IHN0YXJ0Q29kZVsyXSk7CisgICAgICAgICAg
ICBBU1NFUlQobWFwLT5kYXRhKClbbmFsLT5zY19vZmZzZXQgKyAzXSA9PSBzdGFydENvZGVbM10p
OwogCiAgICAgICAgICAgICBmcmFnbWVudGF0aW9uSGVhZGVyLT5mcmFnbWVudGF0aW9uT2Zmc2V0
W2ZyYWdtZW50SW5kZXhdID0gbmFsLT5vZmZzZXQ7CiAgICAgICAgICAgICBmcmFnbWVudGF0aW9u
SGVhZGVyLT5mcmFnbWVudGF0aW9uTGVuZ3RoW2ZyYWdtZW50SW5kZXhdID0gbmFsLT5zaXplOwog
Ci0gICAgICAgICAgICBtZW1jcHkoZW5jb2RlZEltYWdlLT5fYnVmZmVyICsgZW5jb2RlZEltYWdl
LT5fbGVuZ3RoLCAmbWFwLmRhdGEoKVtuYWwtPnNjX29mZnNldF0sCisgICAgICAgICAgICBtZW1j
cHkoZW5jb2RlZEltYWdlLT5fYnVmZmVyICsgZW5jb2RlZEltYWdlLT5fbGVuZ3RoLCAmbWFwLT5k
YXRhKClbbmFsLT5zY19vZmZzZXRdLAogICAgICAgICAgICAgICAgIHNpemVvZihzdGFydENvZGUp
ICsgbmFsLT5zaXplKTsKICAgICAgICAgICAgIGVuY29kZWRJbWFnZS0+X2xlbmd0aCArPSBuYWwt
PnNpemUgKyBzaXplb2Yoc3RhcnRDb2RlKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvVG9vbHMv
Q2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDI5MWIyNzZjN2U0NThiNzU4ZWFlNzJi
YTk4NzIxYWExMDY3NzA3MTEuLmMyOTExZmQ3MWRkZmRhZGVkOTFlMDBhNGU1N2Q2MTUxMzBiYTRi
MzMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxOSBAQAorMjAxOS0wMS0wOSAgQ2hhcmxpZSBUdXJuZXIgIDxjdHVybmVyQGlnYWxp
YS5jb20+CisKKyAgICAgICAgW0dTdHJlYW1lcl0gQWRkIHNoYXJlZEJ1ZmZlciB1dGlsaXR5IHRv
IEdzdE1hcHBlZEJ1ZmZlciwgYW5kIGEgdGVzdHN1aXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTI5NzcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvUGxhdGZvcm1HVEsuY21h
a2U6IEJ1aWxkIHRoZSBuZXcgR1N0cmVhbWVyIHRlc3QgaGFybmVzcworICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvUGxhdGZvcm1XUEUuY21ha2U6IERpdHRvLgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9nc3RyZWFtZXIvR1N0cmVhbWVyVGVzdC5jcHA6IEFkZGVkLgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6R1N0cmVhbWVyVGVzdDo6U2V0VXApOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6R1N0cmVhbWVyVGVzdDo6VGVhckRvd24pOgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViQ29yZS9nc3RyZWFtZXIvR1N0cmVhbWVyVGVzdC5oOiBBZGRlZC4KKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvZ3N0cmVhbWVyL0dzdE1hcHBlZEJ1
ZmZlci5jcHA6IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKwogMjAx
OS0wMS0wOSAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4KIAogICAg
ICAgICBbV2luXVtNaW5pQnJvd3Nlcl0gd2NoYXJfdCBzdHJpbmdzIHNob3VsZG4ndCBiZSB0cmVh
dGVkIGFzIEJTVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1HVEsu
Y21ha2UgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDg0NDk5
ZGUzOThiMjVkMjVhYzBjOTM2MDJhYWFkMWQ2OTBkM2RlOGEuLmMzNGZhZTA3Y2YzYzZiMGEzOWMz
OTlmZWUzMmNkMjVjM2EwYWE3ZjQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxh
dGZvcm1HVEsuY21ha2UKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdUSy5jbWFr
ZQpAQCAtMjUsNiArMjUsNyBAQCBpbmNsdWRlX2RpcmVjdG9yaWVzKAogaW5jbHVkZV9kaXJlY3Rv
cmllcyhTWVNURU0KICAgICAke0dESzNfSU5DTFVERV9ESVJTfQogICAgICR7R0xJQl9JTkNMVURF
X0RJUlN9CisgICAgJHtHU1RSRUFNRVJfSU5DTFVERV9ESVJTfQogICAgICR7R1RLM19JTkNMVURF
X0RJUlN9CiAgICAgJHtMSUJTT1VQX0lOQ0xVREVfRElSU30KICkKQEAgLTkzLDYgKzk0LDggQEAg
YWRkX2V4ZWN1dGFibGUoVGVzdFdlYkNvcmUKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0
cy9XZWJDb3JlL0ROUy5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3Jl
L0ZpbGVNb25pdG9yLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUv
RmlsZVN5c3RlbS5jcHAKKyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3JlL2dz
dHJlYW1lci9Hc3RNYXBwZWRCdWZmZXIuY3BwCisgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVz
dHMvV2ViQ29yZS9nc3RyZWFtZXIvR1N0cmVhbWVyVGVzdC5jcHAKICAgICAke1RFU1RXRUJLSVRB
UElfRElSfS9UZXN0cy9XZWJDb3JlL0dyaWRQb3NpdGlvbi5jcHAKICAgICAke1RFU1RXRUJLSVRB
UElfRElSfS9UZXN0cy9XZWJDb3JlL0hUTUxQYXJzZXJJZGlvbXMuY3BwCiAgICAgJHtURVNUV0VC
S0lUQVBJX0RJUn0vVGVzdHMvV2ViQ29yZS9MYXlvdXRVbml0LmNwcApkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdQRS5jbWFrZSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
UGxhdGZvcm1XUEUuY21ha2UKaW5kZXggZmIxYjZiNTJhMzU2Mzg4MGE1MmY2ODU1ODhjMmUxZmJi
ZWFiZDllMS4uYjY4Nzc1OThkODc3ZGU2YzhkYTg2YjRlYjU3Y2M4NmZmMGEyZjdlZiAxMDA2NDQK
LS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdQRS5jbWFrZQorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1BsYXRmb3JtV1BFLmNtYWtlCkBAIC0yMyw2ICsyMyw3IEBAIGluY2x1ZGVf
ZGlyZWN0b3JpZXMoCiBpbmNsdWRlX2RpcmVjdG9yaWVzKFNZU1RFTQogICAgICR7Q0FJUk9fSU5D
TFVERV9ESVJTfQogICAgICR7R0xJQl9JTkNMVURFX0RJUlN9CisgICAgJHtHU1RSRUFNRVJfSU5D
TFVERV9ESVJTfQogICAgICR7TElCU09VUF9JTkNMVURFX0RJUlN9CiAgICAgJHtXUEVfSU5DTFVE
RV9ESVJTfQogICAgICR7V1BFQkFDS0VORF9GRE9fSU5DTFVERV9ESVJTfQpAQCAtNjAsNiArNjEs
OCBAQCBhZGRfZXhlY3V0YWJsZShUZXN0V2ViQ29yZQogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9
L1Rlc3RzQ29udHJvbGxlci5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJD
b3JlL0ZpbGVNb25pdG9yLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNv
cmUvRmlsZVN5c3RlbS5jcHAKKyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3Jl
L2dzdHJlYW1lci9Hc3RNYXBwZWRCdWZmZXIuY3BwCisgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0v
VGVzdHMvV2ViQ29yZS9nc3RyZWFtZXIvR1N0cmVhbWVyVGVzdC5jcHAKICAgICAke1RFU1RXRUJL
SVRBUElfRElSfS9UZXN0cy9XZWJDb3JlL0hUTUxQYXJzZXJJZGlvbXMuY3BwCiAgICAgJHtURVNU
V0VCS0lUQVBJX0RJUn0vVGVzdHMvV2ViQ29yZS9MYXlvdXRVbml0LmNwcAogICAgICR7VEVTVFdF
QktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvTUlNRVR5cGVSZWdpc3RyeS5jcHAKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9nc3RyZWFtZXIvR1N0cmVhbWVy
VGVzdC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvZ3N0cmVhbWVyL0dT
dHJlYW1lclRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNkN2Y5NGRlOGU3ZmRhNGVmZGNjYmI5MzJlYmEz
OTA4Njg3YWI4ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvZ3N0cmVhbWVyL0dTdHJlYW1lclRlc3QuY3BwCkBAIC0wLDAgKzEsNTUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhLCBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaWYgVVNFKEdTVFJFQU1FUikKKyNpbmNsdWRlICJHU3RyZWFtZXJUZXN0LmgiCisKKyNp
bmNsdWRlIDxXZWJDb3JlL0dTdHJlYW1lckNvbW1vbi5oPgorI2luY2x1ZGUgPGdzdC9nc3QuaD4K
KwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsK
Kwordm9pZCBHU3RyZWFtZXJUZXN0OjpTZXRVcCgpCit7CisgICAgaWYgKCFnc3RfaXNfaW5pdGlh
bGl6ZWQoKSkKKyAgICAgICAgZ3N0X2luaXQobnVsbHB0ciwgbnVsbHB0cik7Cit9CisKK3ZvaWQg
R1N0cmVhbWVyVGVzdDo6VGVhckRvd24oKQoreworICAgIC8vIEl0IG1pZ2h0IGJlIHRlbXB0aW5n
IHRvIGNhbGwgZ3N0X2RlaW5pdCgpIGhlcmUuIEhvd2V2ZXIsIHRoYXQKKyAgICAvLyB3aWxsIHRl
YXIgZG93biB0aGUgd2hvbGUgcHJvY2VzcyBmcm9tIHRoZSBHU3RyZWFtZXIgUE9WLCBhbmQgdGhl
CisgICAgLy8gc2VlbWluZ2x5IHN5bW1ldHJpY2FsIGNhbGwgdG8gZ3N0X2luaXQoKSB3aWxsIGZh
aWwgdG8KKyAgICAvLyBpbml0aWFsaXplIEdTdHJlYW1lciBjb3JyZWN0bHkuCit9CisKK30gLy8g
bmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvZ3N0cmVhbWVyL0dTdHJl
YW1lclRlc3QuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9nc3RyZWFtZXIv
R1N0cmVhbWVyVGVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZiMmNiYWVlNjE2NWM2NTk3OTE0NzA4NmE3ZDAx
YjIxMTdiZjVkOWMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvZ3N0cmVhbWVyL0dTdHJlYW1lclRlc3QuaApAQCAtMCwwICsxLDQxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSwgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDE4
IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
VVNFKEdTVFJFQU1FUikKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitjbGFzcyBHU3Ry
ZWFtZXJUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHVibGljOgorICAgIHZvaWQgU2V0
VXAoKSBvdmVycmlkZTsKKyAgICB2b2lkIFRlYXJEb3duKCkgb3ZlcnJpZGU7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2dzdHJlYW1lci9Hc3RN
YXBwZWRCdWZmZXIuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2dzdHJl
YW1lci9Hc3RNYXBwZWRCdWZmZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRmNTcyYWVlNWNjODlkMWZhZDRh
Yzk0OTIwNTJiZmJhYjkyNzI5NzcKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvZ3N0cmVhbWVyL0dzdE1hcHBlZEJ1ZmZlci5jcHAKQEAgLTAsMCAr
MSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhLCBTLkwuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEdTVFJFQU1FUikKKworI2luY2x1ZGUgIkdTdHJlYW1l
clRlc3QuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJUZXN0LmgiCisj
aW5jbHVkZSA8V2ViQ29yZS9HU3RyZWFtZXJDb21tb24uaD4KKwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworVEVTVF9GKEdTdHJlYW1lclRl
c3QsIG1hcHBlZEJ1ZmZlckJhc2ljcykKK3sKKyAgICBHUmVmUHRyPEdzdEJ1ZmZlcj4gYnVmID0g
YWRvcHRHUmVmKGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlKG51bGxwdHIsIDY0LCBudWxscHRyKSk7
CisgICAgYXV0byBtYXBwZWRCdWYgPSBHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZShidWYuZ2V0KCks
IEdTVF9NQVBfUkVBRCk7CisgICAgQVNTRVJUX1RSVUUobWFwcGVkQnVmKTsKKyAgICBFWFBFQ1Rf
RVEobWFwcGVkQnVmLT5zaXplKCksIDY0KTsKKworICAgIGF1dG8gbWFwcGVkQnVmMiA9IEdzdE1h
cHBlZEJ1ZmZlcjo6Y3JlYXRlKGJ1Zi5nZXQoKSwgR1NUX01BUF9SRUFEKTsKKyAgICBBU1NFUlRf
VFJVRShtYXBwZWRCdWYyKTsKKyAgICBFWFBFQ1RfRVEoKm1hcHBlZEJ1ZiwgKm1hcHBlZEJ1ZjIp
OworICAgIEVYUEVDVF9FUShidWYuZ2V0KCksICptYXBwZWRCdWYpOworICAgIEVYUEVDVF9FUSgq
bWFwcGVkQnVmMiwgYnVmLmdldCgpKTsKK30KKworVEVTVF9GKEdTdHJlYW1lclRlc3QsIG1hcHBl
ZEJ1ZmZlclJlYWRTYW5pdHkpCit7CisgICAgZ3BvaW50ZXIgbWVtb3J5ID0gZ19tYWxsb2MoMTYp
OworICAgIG1lbXNldChtZW1vcnksICd4JywgMTYpOworICAgIEdSZWZQdHI8R3N0QnVmZmVyPiBi
dWYgPSBhZG9wdEdSZWYoZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZChtZW1vcnksIDE2KSk7CisgICAg
YXV0byBtYXBwZWRCdWYgPSBHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZShidWYuZ2V0KCksIEdTVF9N
QVBfUkVBRCk7CisgICAgQVNTRVJUX1RSVUUobWFwcGVkQnVmKTsKKyAgICBFWFBFQ1RfRVEobWFw
cGVkQnVmLT5zaXplKCksIDE2KTsKKyAgICBFWFBFQ1RfRVEobWVtY21wKG1lbW9yeSwgbWFwcGVk
QnVmLT5kYXRhKCksIDE2KSwgMCk7CisgICAgRVhQRUNUX0VRKG1lbWNtcChtZW1vcnksIG1hcHBl
ZEJ1Zi0+Y3JlYXRlU2hhcmVkQnVmZmVyKCktPmRhdGEoKSwgMTYpLCAwKTsKK30KKworVEVTVF9G
KEdTdHJlYW1lclRlc3QsIG1hcHBlZEJ1ZmZlcldyaXRlU2FuaXR5KQoreworICAgIGdwb2ludGVy
IG1lbW9yeSA9IGdfbWFsbG9jKDE2KTsKKyAgICBtZW1zZXQobWVtb3J5LCAneCcsIDE2KTsKKyAg
ICBHUmVmUHRyPEdzdEJ1ZmZlcj4gYnVmID0gYWRvcHRHUmVmKGdzdF9idWZmZXJfbmV3X3dyYXBw
ZWQobWVtb3J5LCAxNikpOworCisgICAgYXV0byBtYXBwZWRCdWYgPSBHc3RNYXBwZWRCdWZmZXI6
OmNyZWF0ZShidWYuZ2V0KCksIEdTVF9NQVBfV1JJVEUpOworICAgIEFTU0VSVF9UUlVFKG1hcHBl
ZEJ1Zik7CisgICAgRVhQRUNUX0VRKG1hcHBlZEJ1Zi0+c2l6ZSgpLCAxNik7CisgICAgbWVtc2V0
KG1hcHBlZEJ1Zi0+ZGF0YSgpLCAneScsIG1hcHBlZEJ1Zi0+c2l6ZSgpKTsKKworICAgIEVYUEVD
VF9FUShtZW1jbXAobWVtb3J5LCBtYXBwZWRCdWYtPmRhdGEoKSwgMTYpLCAwKTsKK30KKworVEVT
VF9GKEdTdHJlYW1lclRlc3QsIG1hcHBlZEJ1ZmZlckNhY2hlc1NoYXJlZEJ1ZmZlcnMpCit7Cisg
ICAgR1JlZlB0cjxHc3RCdWZmZXI+IGJ1ZiA9IGFkb3B0R1JlZihnc3RfYnVmZmVyX25ld19hbGxv
Y2F0ZShudWxscHRyLCA2NCwgbnVsbHB0cikpOworICAgIGF1dG8gbWFwcGVkQnVmID0gR3N0TWFw
cGVkQnVmZmVyOjpjcmVhdGUoYnVmLmdldCgpLCBHU1RfTUFQX1JFQUQpOworICAgIEFTU0VSVF9U
UlVFKG1hcHBlZEJ1Zik7CisgICAgYXV0byBzaGFyZWRCdWYgPSBtYXBwZWRCdWYtPmNyZWF0ZVNo
YXJlZEJ1ZmZlcigpOworICAgIC8vIFdlIGV4cGVjdCB0aGUgc2FtZSBkYXRhIHBvaW50ZXIgd3Jh
cHBlZCBieSBzaGFyZWQgYnVmZmVyLCBubworICAgIC8vIGNvcGllcyBuZWVkIHRvIGJlIG1hZGUu
CisgICAgRVhQRUNUX0VRKHNoYXJlZEJ1Zi0+ZGF0YSgpLCBtYXBwZWRCdWYtPmNyZWF0ZVNoYXJl
ZEJ1ZmZlcigpLT5kYXRhKCkpOworfQorCitURVNUX0YoR1N0cmVhbWVyVGVzdCwgbWFwcGVkQnVm
ZmVyRG9lc05vdEFkZEV4dHJhUmVmcykKK3sKKyAgICAvLyBJdCBpcyBpbXBvcnRhbnQgbm90IHRv
IHJlZiB0aGUgcGFzc2VkIEdTdHJlYW1lciBidWZmZXJzLCBpZiB3ZQorICAgIC8vIGRvIHNvLCB0
aGVuIGluIHRoZSBjYXNlIG9mIHdyaXRhYmxlIGJ1ZmZlcnMsIHRoZXkgY2FuIGJlY29tZQorICAg
IC8vIHVud3JpdGFibGUsIGV2ZW4gdGhvdWdoIHdlIGFyZSB0aGUgc29sZSBvd25lcnMuIFdlIGFs
c28gZG9uJ3QKKyAgICAvLyB3YW50IHRvIHRha2Ugb3duZXJzaGlwIG9mIHRoZSBidWZmZXIgZnJv
bSB0aGUgdXNlci1jb2RlLCBzaW5jZQorICAgIC8vIGZvciB0cmFuc2Zvcm1JblBsYWNlIHVzZS1j
YXNlcywgdGhhdCB3b3VsZCBicmVhay4KKyAgICBHUmVmUHRyPEdzdEJ1ZmZlcj4gYnVmID0gYWRv
cHRHUmVmKGdzdF9idWZmZXJfbmV3KCkpOworCisgICAgQVNTRVJUX0VRKEdTVF9PQkpFQ1RfUkVG
Q09VTlQoYnVmLmdldCgpKSwgMSk7CisKKyAgICBhdXRvIG1hcHBlZEJ1ZiA9IEdzdE1hcHBlZEJ1
ZmZlcjo6Y3JlYXRlKGJ1Zi5nZXQoKSwgR1NUX01BUF9SRUFEV1JJVEUpOworICAgIEFTU0VSVF9U
UlVFKG1hcHBlZEJ1Zik7CisKKyAgICBBU1NFUlRfRVEoR1NUX09CSkVDVF9SRUZDT1VOVChidWYu
Z2V0KCkpLCAxKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQorCisjZW5kaWYg
Ly8gVVNFKEdTVFJFQU1FUikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359026</attachid>
            <date>2019-01-14 03:23:38 -0800</date>
            <delta_ts>2019-01-14 03:54:12 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-192977-20190114112337.patch</filename>
            <type>text/plain</type>
            <size>43281</size>
            <attacher name="Charlie Turner">cturner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5ODE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmVjZmJhNjZmNWUxMTdl
ZGJkNDRmMzgyMThjNWE0YzBhNzZkMWEzNS4uNGE0NmNkNTM1YTU2ODM3Y2E3YWVlYmQ2MzcyMTY1
YzlkMzM0MDVkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDE5LTAxLTEwICBDaGFy
bGllIFR1cm5lciAgPGN0dXJuZXJAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVyXSBB
ZGQgc2hhcmVkQnVmZmVyIHV0aWxpdHkgdG8gR3N0TWFwcGVkQnVmZmVyLCBhbmQgYSB0ZXN0c3Vp
dGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5Mjk3
NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBh
IHV0aWxpdHkgbWV0aG9kIG9uIEdzdE1hcHBlZEJ1ZmZlciB0byByZXR1cm4gYSBTaGFyZWRCdWZm
ZXIKKyAgICAgICAgdmlldyBvdmVyIHRoZSBtYXBwZWQgZGF0YSB3aXRoIG5vIGNvcGllcy4KKwor
ICAgICAgICBUaGlzIHBhdGNoIGFsc28gaW50cm9kdWNlcyBhIG5ldyBnc3RyZWFtZXIgcG9ydCBB
UEkgdGVzdAorICAgICAgICBkaXJlY3RvcnksIGFuZCBpbmNsdWRlcyBzb21lIHRlc3RzIGZvciBH
c3RNYXBwZWRCdWZmZXIuCisKKyAgICAgICAgTmV3IHRlc3RzIGluIHRoZSBBUEkgc2VjdGlvbi4K
KworICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHA6IEFkZCBhIG5ldyBvdmVybG9h
ZCBmb3IKKyAgICAgICAgR3N0TWFwcGVkQnVmZmVyIHRoYXQgYWxsb3dzIHNoYXJpbmcgdGhlIG1h
cHBlZCBHU3RyZWFtZXIgYnVmZmVycworICAgICAgICB3aXRoIHplcm8gY29waWVzLgorICAgICAg
ICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2hh
cmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVy
OjpEYXRhU2VnbWVudDo6ZGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZm
ZXI6OkRhdGFTZWdtZW50OjpzaXplIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRC
dWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvV2ViS2l0V2ViQXVk
aW9Tb3VyY2VHU3RyZWFtZXIuY3BwOgorICAgICAgICAod2ViS2l0V2ViQXVkaW9TcmNBbGxvY2F0
ZUJ1ZmZlcnNBbmRSZW5kZXJBdWRpbyk6IFVwZGF0ZSB0byBuZXcKKyAgICAgICAgQVBJLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjpjcmVhdGVTaGFyZWRCdWZmZXIpOiBS
ZXR1cm4gYSBzaGFyZWQKKyAgICAgICAgYnVmZmVyIHNoYXJpbmcgdGhpcyBtYXBwZWQgYnVmZmVy
LiBUaGUgYnVmZmVyIG11c3QgYmUgc2hhcmVhYmxlIHRvCisgICAgICAgIHVzZSB0aGlzIG1ldGhv
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9u
Lmg6CisgICAgICAgIChXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZSk6IE1ha2UgR3N0
TWFwcGVkQnVmZmVyIFJlZkNvdW50ZWQKKyAgICAgICAgKFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZl
cjo6fkdzdE1hcHBlZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXI6
OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjpkYXRhIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlcjo6c2l6ZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXI6OmlzU2hhcmFibGUgY29uc3QpOiBOZXcgcHJlZGlj
YXRlIHRvCisgICAgICAgIGNoZWNrIHdoZXRoZXIgdGhpcyBidWZmZXIgY2FuIGJlIHNoYXJlZCAo
aS5lLiwgaXMgbm90IHdyaXRhYmxlKQorICAgICAgICAoV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVy
OjpHc3RNYXBwZWRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjpv
cGVyYXRvciBib29sIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlUcmFja09m
U2FtcGxlKToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgQVBJLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvR1N0cmVhbWVyRU1FVXRpbGl0aWVzLmg6CisgICAg
ICAgIChXZWJDb3JlOjpJbml0RGF0YTo6SW5pdERhdGEpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVh
bWVyLmNwcDoKKyAgICAgICAgKHdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JGaW5kQW5kU2V0
S2V5KTogRGl0dG8uCisgICAgICAgICh3ZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdG9yRGVjcnlw
dCk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2Nr
R1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldyYXBw
ZWRNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZTo6cmVuZGVyKTogRGl0dG8uCisgICAgICAgICogcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUxp
YldlYlJUQy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3Vy
Y2VMaWJXZWJSVEM6OnB1bGxBdWRpb0RhdGEpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTGliV2ViUlRD
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUxpYldl
YlJUQzo6Y3JlYXRlQmxhY2tGcmFtZSk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlh
c3RyZWFtL2xpYndlYnJ0Yy9HU3RyZWFtZXJWaWRlb0VuY29kZXJGYWN0b3J5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lclZpZGVvRW5jb2Rlcjo6RnJhZ21lbnRpemUpOiBEaXR0by4K
KwogMjAxOS0wMS0wOSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBUaHJlYWRUaW1lcnMgc2hvdWxkIG5vdCBzdG9yZSBhIHJhdyBwb2ludGVyIGluIGl0cyBoZWFw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAppbmRleCA0NmZjODExY2Mz
NTMzNWU5ZDNhZmE2ZGJiMzNlZjkxOWMyZDYwYWUyLi4yNmRlMWJiZjM5NWJmYWZkYzNlMWNmY2Q5
OTk2MDEwMDBiNWRkMjEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFy
ZWRCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5j
cHAKQEAgLTU0LDYgKzU0LDIwIEBAIFNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKFZlY3Rvcjxj
aGFyPiYmIGRhdGEpCiAgICAgYXBwZW5kKFdURk1vdmUoZGF0YSkpOwogfQogCisjaWYgVVNFKEdT
VFJFQU1FUikKK1JlZjxTaGFyZWRCdWZmZXI+IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKEdzdE1hcHBl
ZEJ1ZmZlciYgbWFwcGVkQnVmZmVyKQoreworICAgIEFTU0VSVChtYXBwZWRCdWZmZXIuaXNTaGFy
YWJsZSgpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRCdWZmZXIobWFwcGVkQnVm
ZmVyKSk7Cit9CisKK1NoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKEdzdE1hcHBlZEJ1ZmZlciYg
bWFwcGVkQnVmZmVyKQorICAgIDogbV9zaXplKG1hcHBlZEJ1ZmZlci5zaXplKCkpCit7CisgICAg
bV9zZWdtZW50cy5hcHBlbmQoezAsIERhdGFTZWdtZW50OjpjcmVhdGUoJm1hcHBlZEJ1ZmZlcil9
KTsKK30KKyNlbmRpZgorCiBSZWZQdHI8U2hhcmVkQnVmZmVyPiBTaGFyZWRCdWZmZXI6OmNyZWF0
ZVdpdGhDb250ZW50c09mRmlsZShjb25zdCBTdHJpbmcmIGZpbGVQYXRoKQogewogICAgIGJvb2wg
bWFwcGluZ1N1Y2Nlc3M7CkBAIC0yMTAsNiArMjI0LDkgQEAgY29uc3QgY2hhciogU2hhcmVkQnVm
ZmVyOjpEYXRhU2VnbWVudDo6ZGF0YSgpIGNvbnN0CiAjZW5kaWYKICNpZiBVU0UoR0xJQikKICAg
ICAgICAgW10oY29uc3QgR1JlZlB0cjxHQnl0ZXM+JiBkYXRhKSB7IHJldHVybiByZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqPihnX2J5dGVzX2dldF9kYXRhKGRhdGEuZ2V0KCksIG51bGxwdHIp
KTsgfSwKKyNlbmRpZgorI2lmIFVTRShHU1RSRUFNRVIpCisgICAgICAgIFtdKGNvbnN0IFJlZlB0
cjxHc3RNYXBwZWRCdWZmZXI+JiBkYXRhKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0
IGNoYXIqPihkYXRhLT5kYXRhKCkpOyB9LAogI2VuZGlmCiAgICAgICAgIFtdKGNvbnN0IEZpbGVT
eXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiBkYXRhKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNv
bnN0IGNoYXIqPihkYXRhLmRhdGEoKSk7IH0KICAgICApOwpAQCAtMjgzLDYgKzMwMCw5IEBAIHNp
emVfdCBTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpzaXplKCkgY29uc3QKICNlbmRpZgogI2lm
IFVTRShHTElCKQogICAgICAgICBbXShjb25zdCBHUmVmUHRyPEdCeXRlcz4mIGRhdGEpIHsgcmV0
dXJuIGdfYnl0ZXNfZ2V0X3NpemUoZGF0YS5nZXQoKSk7IH0sCisjZW5kaWYKKyNpZiBVU0UoR1NU
UkVBTUVSKQorICAgICAgICBbXShjb25zdCBSZWZQdHI8R3N0TWFwcGVkQnVmZmVyPiYgZGF0YSkg
eyByZXR1cm4gZGF0YS0+c2l6ZSgpOyB9LAogI2VuZGlmCiAgICAgICAgIFtdKGNvbnN0IEZpbGVT
eXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiBkYXRhKSB7IHJldHVybiBkYXRhLnNpemUoKTsgfQogICAg
ICk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCmluZGV4IGUyYWFlMmYzMDQ1
NzM1NWY0ODllZWM0YWI0ZWNmMWNlN2QzZTQ1MmYuLjgxMzE4ZThiMjlhZTVhMGY1Yjk2MDNjODI1
NTc5MWNkYmMyMGE0ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJl
ZEJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCkBA
IC00OCw2ICs0OCwxMCBAQAogdHlwZWRlZiBzdHJ1Y3QgX0dCeXRlcyBHQnl0ZXM7CiAjZW5kaWYK
IAorI2lmIFVTRShHU1RSRUFNRVIpCisjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCisjZW5k
aWYKKwogI2lmIFVTRShGT1VOREFUSU9OKQogT0JKQ19DTEFTUyBOU0FycmF5OwogT0JKQ19DTEFT
UyBOU0RhdGE7CkBAIC04OCw2ICs5Miw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFNoYXJl
ZEJ1ZmZlcj4gY3JlYXRlKEdCeXRlcyopOwogI2VuZGlmCiAKKyNpZiBVU0UoR1NUUkVBTUVSKQor
ICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBjcmVhdGUoR3N0TWFwcGVkQnVmZmVyJik7Cisj
ZW5kaWYKICAgICAvLyBDYWxsaW5nIGRhdGEoKSBjYXVzZXMgYWxsIHRoZSBkYXRhIHNlZ21lbnRz
IHRvIGJlIGNvcGllZCBpbnRvIG9uZSBzZWdtZW50IGlmIHRoZXkgYXJlIG5vdCBhbHJlYWR5Lgog
ICAgIC8vIEl0ZXJhdGUgdGhlIHNlZ21lbnRzIHVzaW5nIGJlZ2luKCkgYW5kIGVuZCgpIGluc3Rl
YWQuCiAgICAgLy8gRklYTUU6IEF1ZGl0IHRoZSBjYWxsIHNpdGVzIG9mIHRoaXMgZnVuY3Rpb24g
YW5kIHJlcGxhY2UgdGhlbSB3aXRoIGl0ZXJhdGlvbiBpZiBwb3NzaWJsZS4KQEAgLTEyNSw2ICsx
MzIsOSBAQCBwdWJsaWM6CiAjZW5kaWYKICNpZiBVU0UoR0xJQikKICAgICAgICAgc3RhdGljIFJl
ZjxEYXRhU2VnbWVudD4gY3JlYXRlKEdSZWZQdHI8R0J5dGVzPiYmIGRhdGEpIHsgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgRGF0YVNlZ21lbnQoV1RGTW92ZShkYXRhKSkpOyB9CisjZW5kaWYKKyNpZiBV
U0UoR1NUUkVBTUVSKQorICAgICAgICBzdGF0aWMgUmVmPERhdGFTZWdtZW50PiBjcmVhdGUoUmVm
UHRyPEdzdE1hcHBlZEJ1ZmZlcj4mJiBkYXRhKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IERhdGFT
ZWdtZW50KFdURk1vdmUoZGF0YSkpKTsgfQogI2VuZGlmCiAgICAgICAgIHN0YXRpYyBSZWY8RGF0
YVNlZ21lbnQ+IGNyZWF0ZShGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmIGRhdGEpIHsgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRGF0YVNlZ21lbnQoV1RGTW92ZShkYXRhKSkpOyB9CiAKQEAgLTE0
Miw2ICsxNTIsMTAgQEAgcHVibGljOgogI2lmIFVTRShHTElCKQogICAgICAgICBEYXRhU2VnbWVu
dChHUmVmUHRyPEdCeXRlcz4mJiBkYXRhKQogICAgICAgICAgICAgOiBtX2ltbXV0YWJsZURhdGEo
V1RGTW92ZShkYXRhKSkgeyB9CisjZW5kaWYKKyNpZiBVU0UoR1NUUkVBTUVSKQorICAgICAgICBE
YXRhU2VnbWVudChSZWZQdHI8R3N0TWFwcGVkQnVmZmVyPiYmIGRhdGEpCisgICAgICAgICAgICA6
IG1faW1tdXRhYmxlRGF0YShXVEZNb3ZlKGRhdGEpKSB7IH0KICNlbmRpZgogICAgICAgICBEYXRh
U2VnbWVudChGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmIGRhdGEpCiAgICAgICAgICAgICA6
IG1faW1tdXRhYmxlRGF0YShXVEZNb3ZlKGRhdGEpKSB7IH0KQEAgLTE1NSw2ICsxNjksOSBAQCBw
dWJsaWM6CiAjZW5kaWYKICNpZiBVU0UoR0xJQikKICAgICAgICAgICAgIEdSZWZQdHI8R0J5dGVz
PiwKKyNlbmRpZgorI2lmIFVTRShHU1RSRUFNRVIpCisgICAgICAgICAgICBSZWZQdHI8R3N0TWFw
cGVkQnVmZmVyPiwKICNlbmRpZgogICAgICAgICAgICAgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURh
dGE+IG1faW1tdXRhYmxlRGF0YTsKICAgICAgICAgZnJpZW5kIGNsYXNzIFNoYXJlZEJ1ZmZlcjsK
QEAgLTE5MSw2ICsyMDgsOSBAQCBwcml2YXRlOgogI2lmIFVTRShHTElCKQogICAgIGV4cGxpY2l0
IFNoYXJlZEJ1ZmZlcihHQnl0ZXMqKTsKICNlbmRpZgorI2lmIFVTRShHU1RSRUFNRVIpCisgICAg
ZXhwbGljaXQgU2hhcmVkQnVmZmVyKEdzdE1hcHBlZEJ1ZmZlciYpOworI2VuZGlmCiAKICAgICB2
b2lkIGNvbWJpbmVJbnRvT25lU2VnbWVudCgpIGNvbnN0OwogICAgIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL1dlYktpdFdlYkF1ZGlvU291cmNl
R1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9X
ZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAKaW5kZXggMDIxMDM1MmIwZDEwYzI4NmU5
YzE0MTA1ZDllZjNkMGRkYTI3YjNlYi4uMmY5MzdmNjc3Y2NjOGUwOGMyNjU3Y2Q4NDM2MWVjMmJj
OWI2YWNhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVh
bWVyL1dlYktpdFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvV2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIu
Y3BwCkBAIC0zMjcsNyArMzI3LDcgQEAgc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxHUmVmUHRyPEdz
dEJ1ZmZlcj4+PiB3ZWJLaXRXZWJBdWRpb1NyY0FsbG9jYXRlQnVmZmVyc0FuZFIKIAogICAgIFZl
Y3RvcjxHUmVmUHRyPEdzdEJ1ZmZlcj4+IGNoYW5uZWxCdWZmZXJMaXN0OwogICAgIGNoYW5uZWxC
dWZmZXJMaXN0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocHJpdi0+c291cmNlcy5zaXplKCkpOwot
ICAgIFZlY3RvcjxHc3RNYXBwZWRCdWZmZXI+IG1hcHBlZEJ1ZmZlcnM7CisgICAgVmVjdG9yPFJl
ZlB0cjxHc3RNYXBwZWRCdWZmZXI+PiBtYXBwZWRCdWZmZXJzOwogICAgIG1hcHBlZEJ1ZmZlcnMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShwcml2LT5zb3VyY2VzLnNpemUoKSk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHByaXYtPnNvdXJjZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAg
R1JlZlB0cjxHc3RCdWZmZXI+IGJ1ZmZlcjsKQEAgLTM0MiwxMCArMzQyLDEwIEBAIHN0YXRpYyBP
cHRpb25hbDxWZWN0b3I8R1JlZlB0cjxHc3RCdWZmZXI+Pj4gd2ViS2l0V2ViQXVkaW9TcmNBbGxv
Y2F0ZUJ1ZmZlcnNBbmRSCiAgICAgICAgIEFTU0VSVChidWZmZXIpOwogICAgICAgICBHU1RfQlVG
RkVSX1RJTUVTVEFNUChidWZmZXIuZ2V0KCkpID0gdGltZXN0YW1wOwogICAgICAgICBHU1RfQlVG
RkVSX0RVUkFUSU9OKGJ1ZmZlci5nZXQoKSkgPSBkdXJhdGlvbjsKLSAgICAgICAgR3N0TWFwcGVk
QnVmZmVyIG1hcHBlZEJ1ZmZlcihidWZmZXIuZ2V0KCksIEdTVF9NQVBfUkVBRFdSSVRFKTsKKyAg
ICAgICAgYXV0byBtYXBwZWRCdWZmZXIgPSBHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZShidWZmZXIu
Z2V0KCksIEdTVF9NQVBfUkVBRFdSSVRFKTsKICAgICAgICAgQVNTRVJUKG1hcHBlZEJ1ZmZlcik7
CiAgICAgICAgIG1hcHBlZEJ1ZmZlcnMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUobWFwcGVkQnVm
ZmVyKSk7Ci0gICAgICAgIHByaXYtPmJ1cy0+c2V0Q2hhbm5lbE1lbW9yeShpLCByZWludGVycHJl
dF9jYXN0PGZsb2F0Kj4obWFwcGVkQnVmZmVyc1tpXS5kYXRhKCkpLCBwcml2LT5mcmFtZXNUb1B1
bGwpOworICAgICAgICBwcml2LT5idXMtPnNldENoYW5uZWxNZW1vcnkoaSwgcmVpbnRlcnByZXRf
Y2FzdDxmbG9hdCo+KG1hcHBlZEJ1ZmZlcnNbaV0tPmRhdGEoKSksIHByaXYtPmZyYW1lc1RvUHVs
bCk7CiAgICAgICAgIGNoYW5uZWxCdWZmZXJMaXN0LnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGJ1
ZmZlcikpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcAppbmRleCAwYmE0NzM5
YTFkZTVkNDIxNjhmZWVkN2EwNWI4NjgyZDYwNTdhOGIxLi5jMzI1MzliMmRmMWYzMWEwZGM5Yzhm
NDU5MmRiOGY2YTcwYTFlYmE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcApAQCAtMjUs
NiArMjUsNyBAQAogCiAjaW5jbHVkZSAiR3N0QWxsb2NhdG9yRmFzdE1hbGxvYy5oIgogI2luY2x1
ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlIDxnc3Qv
YXVkaW8vYXVkaW8taW5mby5oPgogI2luY2x1ZGUgPGdzdC9nc3QuaD4KICNpbmNsdWRlIDxtdXRl
eD4KQEAgLTM1Nyw2ICszNTgsMTUgQEAgdm9pZCBjb25uZWN0U2ltcGxlQnVzTWVzc2FnZUNhbGxi
YWNrKEdzdEVsZW1lbnQqIHBpcGVsaW5lKQogICAgIGdfc2lnbmFsX2Nvbm5lY3QoYnVzLmdldCgp
LCAibWVzc2FnZSIsIEdfQ0FMTEJBQ0soc2ltcGxlQnVzTWVzc2FnZUNhbGxiYWNrKSwgcGlwZWxp
bmUpOwogfQogCitSZWY8U2hhcmVkQnVmZmVyPiBHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZVNoYXJl
ZEJ1ZmZlcigpCit7CisgICAgLy8gU2hhcmVkQnVmZmVyIHByb3ZpZGVzIGEgcmVhZC1vbmx5IHZp
ZXcgb24gd2hhdCBpdCBleHBlY3RzIGFyZQorICAgIC8vIGltbXV0YWJsZSBkYXRhLiBEbyBub3Qg
Y3JlYXRlIG9uZSBpcyB3cml0YWJsZSBhbmQgaGVuY2UgbXV0YWJsZS4KKyAgICBSRUxFQVNFX0FT
U0VSVChpc1NoYXJhYmxlKCkpOworCisgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKCp0
aGlzKTsKK30KKwogfQogCiAjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJD
b21tb24uaAppbmRleCAyZWYxNTUwMmEwMDU2MzFlZTRkMDdmN2ZhMzJiNTRmNDY5OGNmYmM4Li41
Y2I3MTdkM2JmNDE1NzRiZDk2ZDBmYzBjZjE1MDMxN2E5ZTQxOTg5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1l
ckNvbW1vbi5oCkBAIC0yNywxMCArMjcsMTIgQEAKICNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8t
Zm9ybWF0Lmg+CiAjaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLWluZm8uaD4KICNpbmNsdWRlIDx3
dGYvTWVkaWFUaW1lLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW50U2l6ZTsKK2NsYXNzIFNoYXJlZEJ1ZmZl
cjsKIAogaW5saW5lIGJvb2wgd2Via2l0R3N0Q2hlY2tWZXJzaW9uKGd1aW50IG1ham9yLCBndWlu
dCBtaW5vciwgZ3VpbnQgbWljcm8pCiB7CkBAIC03Nyw1MSArNzksNDcgQEAgaW5saW5lIEdzdENs
b2NrVGltZSB0b0dzdENsb2NrVGltZShjb25zdCBNZWRpYVRpbWUgJm1lZGlhVGltZSkKICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8R3N0Q2xvY2tUaW1lPih0b0dzdFVuc2lnbmVkNjRUaW1lKG1lZGlh
VGltZSkpOwogfQogCi1jbGFzcyBHc3RNYXBwZWRCdWZmZXIgewotICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEdzdE1hcHBlZEJ1ZmZlcik7CitjbGFzcyBHc3RNYXBwZWRCdWZmZXIgOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8R3N0TWFwcGVkQnVmZmVyPiB7CiBwdWJsaWM6Ci0KLSAgICBH
c3RNYXBwZWRCdWZmZXIoR3N0TWFwcGVkQnVmZmVyJiYgb3RoZXIpCi0gICAgICAgIDogbV9idWZm
ZXIob3RoZXIubV9idWZmZXIpCi0gICAgICAgICwgbV9pbmZvKG90aGVyLm1faW5mbykKLSAgICAg
ICAgLCBtX2lzVmFsaWQob3RoZXIubV9pc1ZhbGlkKQotICAgIHsKLSAgICAgICAgb3RoZXIubV9p
c1ZhbGlkID0gZmFsc2U7Ci0gICAgfQotCi0gICAgR3N0TWFwcGVkQnVmZmVyKEdzdEJ1ZmZlciog
YnVmZmVyLCBHc3RNYXBGbGFncyBmbGFncykKLSAgICAgICAgOiBtX2J1ZmZlcihidWZmZXIpCisg
ICAgc3RhdGljIFJlZlB0cjxHc3RNYXBwZWRCdWZmZXI+IGNyZWF0ZShHc3RCdWZmZXIqIGJ1ZmZl
ciwgR3N0TWFwRmxhZ3MgZmxhZ3MpCiAgICAgewotICAgICAgICBtX2lzVmFsaWQgPSBnc3RfYnVm
ZmVyX21hcChtX2J1ZmZlciwgJm1faW5mbywgZmxhZ3MpOworICAgICAgICBHc3RNYXBJbmZvIGlu
Zm87CisgICAgICAgIGlmICghZ3N0X2J1ZmZlcl9tYXAoYnVmZmVyLCAmaW5mbywgZmxhZ3MpKQor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
R3N0TWFwcGVkQnVmZmVyKGJ1ZmZlciwgV1RGTW92ZShpbmZvKSkpOwogICAgIH0KIAogICAgIC8v
IFVuZm9ydHVuYXRlbHksIEdTVF9NQVBfUkVBRFdSSVRFIGlzIGRlZmluZWQgb3V0IG9mIGxpbmUg
ZnJvbSB0aGUgTWFwRmxhZ3MKICAgICAvLyBlbnVtIGFzIGFuIGludCwgYW5kIEMrKyBpcyBjYXJl
ZnVsIHRvIG5vdCBpbXBsaWNpdHkgY29udmVydCBpdCB0byBhbiBlbnVtLgotICAgIEdzdE1hcHBl
ZEJ1ZmZlcihHc3RCdWZmZXIqIGJ1ZmZlciwgaW50IGZsYWdzKQotICAgICAgICA6IEdzdE1hcHBl
ZEJ1ZmZlcihidWZmZXIsIHN0YXRpY19jYXN0PEdzdE1hcEZsYWdzPihmbGFncykpIHsgfQorICAg
IHN0YXRpYyBSZWZQdHI8R3N0TWFwcGVkQnVmZmVyPiBjcmVhdGUoR3N0QnVmZmVyKiBidWZmZXIs
IGludCBmbGFncykKKyAgICB7CisgICAgICAgIHJldHVybiBHc3RNYXBwZWRCdWZmZXI6OmNyZWF0
ZShidWZmZXIsIHN0YXRpY19jYXN0PEdzdE1hcEZsYWdzPihmbGFncykpOworICAgIH0KIAogICAg
IH5Hc3RNYXBwZWRCdWZmZXIoKQogICAgIHsKLSAgICAgICAgaWYgKG1faXNWYWxpZCkKLSAgICAg
ICAgICAgIGdzdF9idWZmZXJfdW5tYXAobV9idWZmZXIsICZtX2luZm8pOwotICAgICAgICBtX2lz
VmFsaWQgPSBmYWxzZTsKKyAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcChtX2J1ZmZlciwgJm1faW5m
byk7CiAgICAgfQogCi0gICAgdWludDhfdCogZGF0YSgpIHsgQVNTRVJUKG1faXNWYWxpZCk7IHJl
dHVybiBzdGF0aWNfY2FzdDx1aW50OF90Kj4obV9pbmZvLmRhdGEpOyB9Ci0gICAgY29uc3QgdWlu
dDhfdCogZGF0YSgpIGNvbnN0IHsgQVNTRVJUKG1faXNWYWxpZCk7IHJldHVybiBzdGF0aWNfY2Fz
dDx1aW50OF90Kj4obV9pbmZvLmRhdGEpOyB9Ci0KLSAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsg
QVNTRVJUKG1faXNWYWxpZCk7IHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG1faW5mby5zaXpl
KTsgfQotCi0gICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1faXNW
YWxpZDsgfQorICAgIHVpbnQ4X3QqIGRhdGEoKSB7IHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90
Kj4obV9pbmZvLmRhdGEpOyB9CisgICAgY29uc3QgdWludDhfdCogZGF0YSgpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtX2luZm8uZGF0YSk7IH0KKyAgICBzaXplX3Qgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4obV9pbmZvLnNpemUpOyB9Cisg
ICAgYm9vbCBpc1NoYXJhYmxlKCkgY29uc3QgeyByZXR1cm4gIShtX2luZm8uZmxhZ3MgJiBHU1Rf
TUFQX1dSSVRFKTsgfQorICAgIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZVNoYXJlZEJ1ZmZlcigp
OwogCiBwcml2YXRlOgorICAgIEdzdE1hcHBlZEJ1ZmZlcihHc3RCdWZmZXIqIGJ1ZmZlciwgR3N0
TWFwSW5mbyYmIGluZm8pCisgICAgICAgIDogbV9idWZmZXIoYnVmZmVyKQorICAgICAgICAsIG1f
aW5mbyhXVEZNb3ZlKGluZm8pKQorICAgIHsKKyAgICB9CisKICAgICBmcmllbmQgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IEdzdE1hcHBlZEJ1ZmZlciYsIGNvbnN0IEdzdE1hcHBlZEJ1ZmZlciYpOwog
ICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgR3N0TWFwcGVkQnVmZmVyJiwgY29uc3Qg
R3N0QnVmZmVyKik7CiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBHc3RCdWZmZXIq
IGEsIGNvbnN0IEdzdE1hcHBlZEJ1ZmZlciYgYikgeyByZXR1cm4gb3BlcmF0b3I9PShiLCBhKTsg
fQogCiAgICAgR3N0QnVmZmVyKiBtX2J1ZmZlciB7IG51bGxwdHIgfTsKICAgICBHc3RNYXBJbmZv
IG1faW5mbzsKLSAgICBib29sIG1faXNWYWxpZCB7IGZhbHNlIH07CiB9OwogCiBpbmxpbmUgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEdzdE1hcHBlZEJ1ZmZlciYgYSwgY29uc3QgR3N0TWFwcGVkQnVm
ZmVyJiBiKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL0luYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0luYmFuZFRleHRUcmFja1ByaXZhdGVHU3Ry
ZWFtZXIuY3BwCmluZGV4IGMyZGQxMjMyMGMxZDg5YzE5NTYyYTYxZTgyNmQ5MGZjMGU3NmJhNDku
LmZiZmZlZTYwMWNmOTM2ZTcxZmQyODU3NzU5ZGQzNGJiMzkzY2I4MjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbmJhbmRUZXh0VHJhY2tQ
cml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lci5jcHAKQEAgLTExMiwx
NiArMTEyLDE2IEBAIHZvaWQgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5
VHJhY2tPZlNhbXBsZSgpCiAgICAgICAgICAgICBHU1RfV0FSTklORygiVHJhY2sgJWQgZ290IHNh
bXBsZSB3aXRoIG5vIGJ1ZmZlci4iLCBtX2luZGV4KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9Ci0gICAgICAgIEdzdE1hcHBlZEJ1ZmZlciBtYXBwZWRCdWZmZXIoYnVmZmVyLCBH
U1RfTUFQX1JFQUQpOworICAgICAgICBhdXRvIG1hcHBlZEJ1ZmZlciA9IEdzdE1hcHBlZEJ1ZmZl
cjo6Y3JlYXRlKGJ1ZmZlciwgR1NUX01BUF9SRUFEKTsKICAgICAgICAgQVNTRVJUKG1hcHBlZEJ1
ZmZlcik7CiAgICAgICAgIGlmICghbWFwcGVkQnVmZmVyKSB7CiAgICAgICAgICAgICBHU1RfV0FS
TklORygiVHJhY2sgJWQgdW5hYmxlIHRvIG1hcCBidWZmZXIuIiwgbV9pbmRleCk7CiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIEdTVF9JTkZPKCJUcmFjayAlZCBw
YXJzaW5nIHNhbXBsZTogJS4qcyIsIG1faW5kZXgsIHN0YXRpY19jYXN0PGludD4obWFwcGVkQnVm
ZmVyLnNpemUoKSksCi0gICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNoYXIqPihtYXBwZWRC
dWZmZXIuZGF0YSgpKSk7Ci0gICAgICAgIGNsaWVudCgpLT5wYXJzZVdlYlZUVEN1ZURhdGEocmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4obWFwcGVkQnVmZmVyLmRhdGEoKSksIG1hcHBlZEJ1ZmZlci5z
aXplKCkpOworICAgICAgICBHU1RfSU5GTygiVHJhY2sgJWQgcGFyc2luZyBzYW1wbGU6ICUuKnMi
LCBtX2luZGV4LCBzdGF0aWNfY2FzdDxpbnQ+KG1hcHBlZEJ1ZmZlci0+c2l6ZSgpKSwKKyAgICAg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1hcHBlZEJ1ZmZlci0+ZGF0YSgpKSk7Cisg
ICAgICAgIGNsaWVudCgpLT5wYXJzZVdlYlZUVEN1ZURhdGEocmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4obWFwcGVkQnVmZmVyLT5kYXRhKCkpLCBtYXBwZWRCdWZmZXItPnNpemUoKSk7CiAgICAgfQog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvZW1lL0dTdHJlYW1lckVNRVV0aWxpdGllcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9HU3RyZWFtZXJFTUVVdGlsaXRpZXMuaAppbmRleCBiZWZm
NzZhNWE2YThlNTU4MjZkNDc5YmQ2MGMzOGJlYjhiYjMwOGEyLi44YTkyY2EzYjFlYTg4OTg2MGE5
ZTg0ZDhkNWY1YTQ0NmU3N2ExMzYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0dTdHJlYW1lckVNRVV0aWxpdGllcy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvR1N0cmVhbWVyRU1F
VXRpbGl0aWVzLmgKQEAgLTQwLDEyICs0MCwxMiBAQCBwdWJsaWM6CiAgICAgSW5pdERhdGEoY29u
c3QgU3RyaW5nJiBzeXN0ZW1JZCwgR3N0QnVmZmVyKiBpbml0RGF0YSkKICAgICAgICAgOiBtX3N5
c3RlbUlkKHN5c3RlbUlkKQogICAgIHsKLSAgICAgICAgR3N0TWFwcGVkQnVmZmVyIG1hcHBlZElu
aXREYXRhKGluaXREYXRhLCBHU1RfTUFQX1JFQUQpOworICAgICAgICBhdXRvIG1hcHBlZEluaXRE
YXRhID0gR3N0TWFwcGVkQnVmZmVyOjpjcmVhdGUoaW5pdERhdGEsIEdTVF9NQVBfUkVBRCk7CiAg
ICAgICAgIGlmICghbWFwcGVkSW5pdERhdGEpIHsKICAgICAgICAgICAgIEdTVF9FUlJPUigiY2Fu
bm90IG1hcCAlcyBwcm90ZWN0aW9uIGRhdGEiLCBzeXN0ZW1JZC51dGY4KCkuZGF0YSgpKTsKICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9Ci0gICAgICAgIG1fcGF5
bG9hZCA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKG1hcHBlZEluaXREYXRhLmRhdGEoKSwgbWFwcGVk
SW5pdERhdGEuc2l6ZSgpKTsKKyAgICAgICAgbV9wYXlsb2FkID0gbWFwcGVkSW5pdERhdGEtPmNy
ZWF0ZVNoYXJlZEJ1ZmZlcigpOwogICAgIH0KIAogICAgIHZvaWQgYXBwZW5kKEluaXREYXRhJiYg
aW5pdERhdGEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvZW1lL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlE
ZWNyeXB0b3JHU3RyZWFtZXIuY3BwCmluZGV4IGY5NDFlNTI4ZjQ3Y2JkMDY5NTc5YmM1ZTYzMzU4
MWU2YjYxMGM3MjMuLjE0ZWVjYzBiMTVhN2E0OWY0NGNmMmU4MzI0NWY3MTBlMDY3ODZhOTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUv
V2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JH
U3RyZWFtZXIuY3BwCkBAIC0xNTAsMTEgKzE1MCwxMSBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0
TWVkaWFDbGVhcktleURlY3J5cHRvckhhbmRsZUtleVJlc3BvbnNlKFdlYktpdE1lZGlhQ29tbW9u
RQogICAgIHJldHVybiBUUlVFOwogfQogCi1zdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0TWVkaWFDbGVh
cktleURlY3J5cHRvckZpbmRBbmRTZXRLZXkoV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2
YXRlKiBwcml2LCBjb25zdCBXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXImIGtleUlEQnVmZmVyKQor
c3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JGaW5kQW5kU2V0S2V5
KFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSogcHJpdiwgUmVmUHRyPFdlYkNvcmU6
OkdzdE1hcHBlZEJ1ZmZlcj4mJiBrZXlJREJ1ZmZlcikKIHsKICAgICBHUmVmUHRyPEdzdEJ1ZmZl
cj4ga2V5QnVmZmVyOwogICAgIGZvciAoYXV0byYga2V5IDogcHJpdi0+a2V5cykgewotICAgICAg
ICBpZiAoa2V5LmtleUlELmdldCgpID09IGtleUlEQnVmZmVyKSB7CisgICAgICAgIGlmIChrZXku
a2V5SUQuZ2V0KCkgPT0gKmtleUlEQnVmZmVyKSB7CiAgICAgICAgICAgICBrZXlCdWZmZXIgPSBr
ZXkua2V5VmFsdWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTY1LDE0ICsx
NjUsMTQgQEAgc3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JGaW5k
QW5kU2V0S2V5KFdlYktpdE1lZGlhQ2xlYXJLZXlEZWMKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIAotICAgIFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlciBtYXBwZWRLZXlWYWx1ZUJ1ZmZl
cihrZXlCdWZmZXIuZ2V0KCksIEdTVF9NQVBfUkVBRCk7CisgICAgYXV0byBtYXBwZWRLZXlWYWx1
ZUJ1ZmZlciA9IFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKGtleUJ1ZmZlci5nZXQo
KSwgR1NUX01BUF9SRUFEKTsKICAgICBpZiAoIW1hcHBlZEtleVZhbHVlQnVmZmVyKSB7CiAgICAg
ICAgIEdTVF9FUlJPUl9PQkpFQ1QocHJpdiwgIkZhaWxlZCB0byBtYXAgZGVjcnlwdGlvbiBrZXki
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIEFTU0VSVChtYXBwZWRLZXlW
YWx1ZUJ1ZmZlci5zaXplKCkgPT0gQ0xFQVJLRVlfU0laRSk7Ci0gICAgaWYgKGdjcnlfZXJyb3Jf
dCBlcnJvciA9IGdjcnlfY2lwaGVyX3NldGtleShwcml2LT5oYW5kbGUsIG1hcHBlZEtleVZhbHVl
QnVmZmVyLmRhdGEoKSwgbWFwcGVkS2V5VmFsdWVCdWZmZXIuc2l6ZSgpKSkgeworICAgIEFTU0VS
VChtYXBwZWRLZXlWYWx1ZUJ1ZmZlci0+c2l6ZSgpID09IENMRUFSS0VZX1NJWkUpOworICAgIGlm
IChnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRrZXkocHJpdi0+aGFuZGxlLCBt
YXBwZWRLZXlWYWx1ZUJ1ZmZlci0+ZGF0YSgpLCBtYXBwZWRLZXlWYWx1ZUJ1ZmZlci0+c2l6ZSgp
KSkgewogICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHByaXYsICJnY3J5X2NpcGhlcl9zZXRrZXkg
ZmFpbGVkOiAlcyIsIGdwZ19zdHJlcnJvcihlcnJvcikpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQpAQCAtMTg4LDE5ICsxODgsMTkgQEAgc3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlh
Q2xlYXJLZXlEZWNyeXB0b3JEZWNyeXB0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkQKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZl
ciBtYXBwZWRJVkJ1ZmZlcihpdkJ1ZmZlciwgR1NUX01BUF9SRUFEKTsKKyAgICBhdXRvIG1hcHBl
ZElWQnVmZmVyID0gV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjpjcmVhdGUoaXZCdWZmZXIsIEdT
VF9NQVBfUkVBRCk7CiAgICAgaWYgKCFtYXBwZWRJVkJ1ZmZlcikgewogICAgICAgICBHU1RfRVJS
T1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gbWFwIElWIik7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKICAgICB1aW50OF90IGN0cltDTEVBUktFWV9TSVpFXTsKLSAgICBpZiAobWFw
cGVkSVZCdWZmZXIuc2l6ZSgpID09IDgpIHsKKyAgICBpZiAobWFwcGVkSVZCdWZmZXItPnNpemUo
KSA9PSA4KSB7CiAgICAgICAgIG1lbXNldChjdHIgKyA4LCAwLCA4KTsKLSAgICAgICAgbWVtY3B5
KGN0ciwgbWFwcGVkSVZCdWZmZXIuZGF0YSgpLCA4KTsKKyAgICAgICAgbWVtY3B5KGN0ciwgbWFw
cGVkSVZCdWZmZXItPmRhdGEoKSwgOCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKG1h
cHBlZElWQnVmZmVyLnNpemUoKSA9PSBDTEVBUktFWV9TSVpFKTsKLSAgICAgICAgbWVtY3B5KGN0
ciwgbWFwcGVkSVZCdWZmZXIuZGF0YSgpLCBDTEVBUktFWV9TSVpFKTsKKyAgICAgICAgbWVtY3B5
KGN0ciwgbWFwcGVkSVZCdWZmZXItPmRhdGEoKSwgQ0xFQVJLRVlfU0laRSk7CiAgICAgfQogCiAg
ICAgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX01FRElB
X0NLX0RFQ1JZUFRfR0VUX1BSSVZBVEUoV0VCS0lUX01FRElBX0NLX0RFQ1JZUFQoc2VsZikpOwpA
QCAtMjE2LDMwICsyMTYsMzAgQEAgc3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlhQ2xlYXJLZXlE
ZWNyeXB0b3JEZWNyeXB0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkQKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAotICAgIFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlciBtYXBwZWRL
ZXlJZEJ1ZmZlcihrZXlJREJ1ZmZlciwgR1NUX01BUF9SRUFEKTsKKyAgICBhdXRvIG1hcHBlZEtl
eUlkQnVmZmVyID0gV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjpjcmVhdGUoa2V5SURCdWZmZXIs
IEdTVF9NQVBfUkVBRCk7CiAgICAgaWYgKCFtYXBwZWRLZXlJZEJ1ZmZlcikgewogICAgICAgICBH
U1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gbWFwIGtleSBpZCBidWZmZXIiKTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZl
ciBtYXBwZWRCdWZmZXIoYnVmZmVyLCBHU1RfTUFQX1JFQURXUklURSk7CisgICAgYXV0byBtYXBw
ZWRCdWZmZXIgPSBXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZShidWZmZXIsIEdTVF9N
QVBfUkVBRFdSSVRFKTsKICAgICBpZiAoIW1hcHBlZEJ1ZmZlcikgewogICAgICAgICBHU1RfRVJS
T1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gbWFwIGJ1ZmZlciIpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgd2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRvckZpbmRBbmRT
ZXRLZXkocHJpdiwgbWFwcGVkS2V5SWRCdWZmZXIpOworICAgIHdlYktpdE1lZGlhQ2xlYXJLZXlE
ZWNyeXB0b3JGaW5kQW5kU2V0S2V5KHByaXYsIFdURk1vdmUobWFwcGVkS2V5SWRCdWZmZXIpKTsK
IAogICAgIHVuc2lnbmVkIHBvc2l0aW9uID0gMDsKICAgICB1bnNpZ25lZCBzYW1wbGVJbmRleCA9
IDA7CiAKICAgICBpZiAoIXN1YlNhbXBsZUNvdW50KSB7CiAgICAgICAgIC8vIEZ1bGwgc2FtcGxl
IGVuY3J5cHRpb24uCi0gICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc2VsZiwgImZ1bGwgc2FtcGxl
IGVuY3J5cHRpb246ICV6dSBlbmNyeXB0ZWQgYnl0ZXMiLCBtYXBwZWRCdWZmZXIuc2l6ZSgpKTsK
KyAgICAgICAgR1NUX1RSQUNFX09CSkVDVChzZWxmLCAiZnVsbCBzYW1wbGUgZW5jcnlwdGlvbjog
JXp1IGVuY3J5cHRlZCBieXRlcyIsIG1hcHBlZEJ1ZmZlci0+c2l6ZSgpKTsKIAogICAgICAgICAv
LyBDaGVjayBpZiB0aGUgYnVmZmVyIGlzIGVtcHR5LgotICAgICAgICBpZiAobWFwcGVkQnVmZmVy
LnNpemUoKSkgewotICAgICAgICAgICAgY2lwaGVyRXJyb3IgPSBnY3J5X2NpcGhlcl9kZWNyeXB0
KHByaXYtPmhhbmRsZSwgbWFwcGVkQnVmZmVyLmRhdGEoKSwgbWFwcGVkQnVmZmVyLnNpemUoKSwg
MCwgMCk7CisgICAgICAgIGlmIChtYXBwZWRCdWZmZXItPnNpemUoKSkgeworICAgICAgICAgICAg
Y2lwaGVyRXJyb3IgPSBnY3J5X2NpcGhlcl9kZWNyeXB0KHByaXYtPmhhbmRsZSwgbWFwcGVkQnVm
ZmVyLT5kYXRhKCksIG1hcHBlZEJ1ZmZlci0+c2l6ZSgpLCAwLCAwKTsKICAgICAgICAgICAgIGlm
IChjaXBoZXJFcnJvcikgewogICAgICAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc2VsZiwg
ImZ1bGwgc2FtcGxlIGRlY3J5cHRpb24gZmFpbGVkOiAlcyIsIGdwZ19zdHJlcnJvcihjaXBoZXJF
cnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI1NSwxNiArMjU1LDE2
IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdG9yRGVjcnlwdChX
ZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25ECiAgICAgfQogCiAgICAgLy8gU3Vic2FtcGxlIGVu
Y3J5cHRpb24uCi0gICAgV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyIG1hcHBlZFN1YlNhbXBsZXNC
dWZmZXIoc3ViU2FtcGxlc0J1ZmZlciwgR1NUX01BUF9SRUFEKTsKKyAgICBhdXRvIG1hcHBlZFN1
YlNhbXBsZXNCdWZmZXIgPSBXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZShzdWJTYW1w
bGVzQnVmZmVyLCBHU1RfTUFQX1JFQUQpOwogICAgIGlmICghbWFwcGVkU3ViU2FtcGxlc0J1ZmZl
cikgewogICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gbWFwIHN1YnNh
bXBsZSBidWZmZXIiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIEdVbmlx
dWVQdHI8R3N0Qnl0ZVJlYWRlcj4gcmVhZGVyKGdzdF9ieXRlX3JlYWRlcl9uZXcobWFwcGVkU3Vi
U2FtcGxlc0J1ZmZlci5kYXRhKCksIG1hcHBlZFN1YlNhbXBsZXNCdWZmZXIuc2l6ZSgpKSk7Ci0g
ICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAicG9zaXRpb246ICVkLCBzaXplOiAlenUiLCBwb3Np
dGlvbiwgbWFwcGVkQnVmZmVyLnNpemUoKSk7CisgICAgR1VuaXF1ZVB0cjxHc3RCeXRlUmVhZGVy
PiByZWFkZXIoZ3N0X2J5dGVfcmVhZGVyX25ldyhtYXBwZWRTdWJTYW1wbGVzQnVmZmVyLT5kYXRh
KCksIG1hcHBlZFN1YlNhbXBsZXNCdWZmZXItPnNpemUoKSkpOworICAgIEdTVF9ERUJVR19PQkpF
Q1Qoc2VsZiwgInBvc2l0aW9uOiAlZCwgc2l6ZTogJXp1IiwgcG9zaXRpb24sIG1hcHBlZEJ1ZmZl
ci0+c2l6ZSgpKTsKIAotICAgIHdoaWxlIChwb3NpdGlvbiA8IG1hcHBlZEJ1ZmZlci5zaXplKCkp
IHsKKyAgICB3aGlsZSAocG9zaXRpb24gPCBtYXBwZWRCdWZmZXItPnNpemUoKSkgewogICAgICAg
ICBndWludDE2IG5CeXRlc0NsZWFyID0gMDsKICAgICAgICAgZ3VpbnQzMiBuQnl0ZXNFbmNyeXB0
ZWQgPSAwOwogCkBAIC0yNzcsMTQgKzI3NywxNCBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0TWVk
aWFDbGVhcktleURlY3J5cHRvckRlY3J5cHQoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0aW9uRAog
ICAgICAgICAgICAgc2FtcGxlSW5kZXgrKzsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IG5CeXRlc0NsZWFyID0gMDsKLSAgICAgICAgICAgIG5CeXRlc0VuY3J5cHRlZCA9IG1hcHBlZEJ1
ZmZlci5zaXplKCkgLSBwb3NpdGlvbjsKKyAgICAgICAgICAgIG5CeXRlc0VuY3J5cHRlZCA9IG1h
cHBlZEJ1ZmZlci0+c2l6ZSgpIC0gcG9zaXRpb247CiAgICAgICAgIH0KIAotICAgICAgICBHU1Rf
VFJBQ0VfT0JKRUNUKHNlbGYsICJzdWJzYW1wbGUgaW5kZXggJXUgLSAlaHUgYnl0ZXMgY2xlYXIg
KHRvZG89JXp1KSIsIHNhbXBsZUluZGV4LCBuQnl0ZXNDbGVhciwgbWFwcGVkQnVmZmVyLnNpemUo
KSAtIHBvc2l0aW9uKTsKKyAgICAgICAgR1NUX1RSQUNFX09CSkVDVChzZWxmLCAic3Vic2FtcGxl
IGluZGV4ICV1IC0gJWh1IGJ5dGVzIGNsZWFyICh0b2RvPSV6dSkiLCBzYW1wbGVJbmRleCwgbkJ5
dGVzQ2xlYXIsIG1hcHBlZEJ1ZmZlci0+c2l6ZSgpIC0gcG9zaXRpb24pOwogICAgICAgICBwb3Np
dGlvbiArPSBuQnl0ZXNDbGVhcjsKICAgICAgICAgaWYgKG5CeXRlc0VuY3J5cHRlZCkgewotICAg
ICAgICAgICAgR1NUX1RSQUNFX09CSkVDVChzZWxmLCAic3Vic2FtcGxlIGluZGV4ICV1IC0gJXUg
Ynl0ZXMgZW5jcnlwdGVkICh0b2RvPSV6dSkiLCBzYW1wbGVJbmRleCwgbkJ5dGVzRW5jcnlwdGVk
LCBtYXBwZWRCdWZmZXIuc2l6ZSgpIC0gcG9zaXRpb24pOwotICAgICAgICAgICAgY2lwaGVyRXJy
b3IgPSBnY3J5X2NpcGhlcl9kZWNyeXB0KHByaXYtPmhhbmRsZSwgbWFwcGVkQnVmZmVyLmRhdGEo
KSArIHBvc2l0aW9uLCBuQnl0ZXNFbmNyeXB0ZWQsIDAsIDApOworICAgICAgICAgICAgR1NUX1RS
QUNFX09CSkVDVChzZWxmLCAic3Vic2FtcGxlIGluZGV4ICV1IC0gJXUgYnl0ZXMgZW5jcnlwdGVk
ICh0b2RvPSV6dSkiLCBzYW1wbGVJbmRleCwgbkJ5dGVzRW5jcnlwdGVkLCBtYXBwZWRCdWZmZXIt
PnNpemUoKSAtIHBvc2l0aW9uKTsKKyAgICAgICAgICAgIGNpcGhlckVycm9yID0gZ2NyeV9jaXBo
ZXJfZGVjcnlwdChwcml2LT5oYW5kbGUsIG1hcHBlZEJ1ZmZlci0+ZGF0YSgpICsgcG9zaXRpb24s
IG5CeXRlc0VuY3J5cHRlZCwgMCwgMCk7CiAgICAgICAgICAgICBpZiAoY2lwaGVyRXJyb3IpIHsK
ICAgICAgICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJzdWIgc2FtcGxlIGluZGV4
ICV1IGRlY3J5cHRpb24gZmFpbGVkOiAlcyIsIHNhbXBsZUluZGV4LCBncGdfc3RyZXJyb3IoY2lw
aGVyRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1l
ckF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAKaW5kZXgg
ZGVkYzA3OWIyYTFiMzU3YzUwZDcxYThkYTQxOTlhYmM0YzU2ZmEyNi4uNTMzOGViM2Q5M2YxODkw
MDdlZTUwMTllMTEzZjk1ZWRhZDhmYWQ2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3Vy
Y2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9Nb2NrR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlLmNwcApAQCAtNzgsMTMgKzc4LDEzIEBA
IHB1YmxpYzoKIAogICAgICAgICAgICAgR3N0QnVmZmVyKiBidWZmZXIgPSBnc3RfYnVmZmVyX25l
d19hbGxvY2F0ZShudWxscHRyLCBiaXBCb3BDb3VudCAqIG1fc3RyZWFtRm9ybWF0LT5ieXRlc1Bl
ckZyYW1lKCksIG51bGxwdHIpOwogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEdzdE1h
cHBlZEJ1ZmZlciBtYXAoYnVmZmVyLCBHU1RfTUFQX1dSSVRFKTsKKyAgICAgICAgICAgICAgICBh
dXRvIG1hcCA9IEdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKGJ1ZmZlciwgR1NUX01BUF9XUklURSk7
CiAKICAgICAgICAgICAgICAgICBpZiAoIW11dGVkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
bWVtY3B5KG1hcC5kYXRhKCksICZtX2JpcEJvcEJ1ZmZlcltiaXBCb3BTdGFydF0sIHNpemVvZihm
bG9hdCkgKiBiaXBCb3BDb3VudCk7Ci0gICAgICAgICAgICAgICAgICAgIGFkZEh1bShzX0h1bVZv
bHVtZSwgc19IdW1GcmVxdWVuY3ksIHNhbXBsZVJhdGUoKSwgbV9zYW1wbGVzUmVuZGVyZWQsIChm
bG9hdCopbWFwLmRhdGEoKSwgYmlwQm9wQ291bnQpOworICAgICAgICAgICAgICAgICAgICBtZW1j
cHkobWFwLT5kYXRhKCksICZtX2JpcEJvcEJ1ZmZlcltiaXBCb3BTdGFydF0sIHNpemVvZihmbG9h
dCkgKiBiaXBCb3BDb3VudCk7CisgICAgICAgICAgICAgICAgICAgIGFkZEh1bShzX0h1bVZvbHVt
ZSwgc19IdW1GcmVxdWVuY3ksIHNhbXBsZVJhdGUoKSwgbV9zYW1wbGVzUmVuZGVyZWQsIChmbG9h
dCopbWFwLT5kYXRhKCksIGJpcEJvcENvdW50KTsKICAgICAgICAgICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgbWVtc2V0KG1hcC5kYXRhKCksIDAsIHNpemVvZihmbG9hdCkgKiBi
aXBCb3BDb3VudCk7CisgICAgICAgICAgICAgICAgICAgIG1lbXNldChtYXAtPmRhdGEoKSwgMCwg
c2l6ZW9mKGZsb2F0KSAqIGJpcEJvcENvdW50KTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgZ3N0X2FwcF9zcmNfcHVzaF9idWZmZXIoR1NUX0FQUF9TUkMobV9zcmMuZ2V0KCkpLCBidWZm
ZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUxpYldlYlJUQy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ0F1
ZGlvU291cmNlTGliV2ViUlRDLmNwcAppbmRleCA1ZTdmOTc3YTk2YjIxNzlkYjYxOGZlODAwYjJk
NTYzNWRiOWQ2YTFmLi43MjAzZDdkMzYzYzdlMzdjOWQ3MDY5MzU4NzM3MGRjZDFmOWY2YTcwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlTGliV2ViUlRDLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ0F1ZGlv
U291cmNlTGliV2ViUlRDLmNwcApAQCAtMTE0LDkgKzExNCw5IEBAIHZvaWQgUmVhbHRpbWVPdXRn
b2luZ0F1ZGlvU291cmNlTGliV2ViUlRDOjpwdWxsQXVkaW9EYXRhKCkKICAgICAgICAgaWYgKGlz
U2lsZW5jZWQoKSkKICAgICAgICAgICAgIGdzdF9hdWRpb19mb3JtYXRfZmlsbF9zaWxlbmNlKG1f
b3V0cHV0U3RyZWFtRGVzY3JpcHRpb24tPmdldEluZm8oKS0+ZmluZm8sIG1fYXVkaW9CdWZmZXIu
ZGF0YSgpLCBvdXRCdWZmZXJTaXplKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBHc3RN
YXBwZWRCdWZmZXIgaW5NYXAoaW5CdWZmZXIuZ2V0KCksIEdTVF9NQVBfUkVBRCk7CisgICAgICAg
ICAgICBhdXRvIGluTWFwID0gR3N0TWFwcGVkQnVmZmVyOjpjcmVhdGUoaW5CdWZmZXIuZ2V0KCks
IEdTVF9NQVBfUkVBRCk7CiAKLSAgICAgICAgICAgIGdwb2ludGVyIGluWzFdID0geyBpbk1hcC5k
YXRhKCkgfTsKKyAgICAgICAgICAgIGdwb2ludGVyIGluWzFdID0geyBpbk1hcC0+ZGF0YSgpIH07
CiAgICAgICAgICAgICBncG9pbnRlciBvdXRbMV0gPSB7IG1fYXVkaW9CdWZmZXIuZGF0YSgpIH07
CiAgICAgICAgICAgICBpZiAoIWdzdF9hdWRpb19jb252ZXJ0ZXJfc2FtcGxlcyhtX3NhbXBsZUNv
bnZlcnRlci5nZXQoKSwgc3RhdGljX2Nhc3Q8R3N0QXVkaW9Db252ZXJ0ZXJGbGFncz4oMCksIGlu
LCBpbkNodW5rU2FtcGxlQ291bnQsIG91dCwgb3V0Q2h1bmtTYW1wbGVDb3VudCkpIHsKICAgICAg
ICAgICAgICAgICBHU1RfRVJST1IoIkNvdWxkIG5vdCBjb252ZXJ0IHNhbXBsZXMuIik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTGliV2ViUlRDLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VM
aWJXZWJSVEMuY3BwCmluZGV4IDllMzk2ZDkzYmNlNDI5NjhkNjg0YzIzMjRlMTIyZDQ1ZDMyMWQ3
ZGYuLjY5YmU5YjUzZThhNTc4MmUxMzFjYzk4ODQ5ZTNiYmQ4ZTJkOTJkM2YgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91
dGdvaW5nVmlkZW9Tb3VyY2VMaWJXZWJSVEMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VMaWJX
ZWJSVEMuY3BwCkBAIC04Niw4ICs4Niw4IEBAIHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZp
ZGVvRnJhbWVCdWZmZXI+IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUxpYldlYlJUCiAgICAg
R1JlZlB0cjxHc3RCdWZmZXI+IGJ1ZmZlciA9IGFkb3B0R1JlZihnc3RfYnVmZmVyX25ld19hbGxv
Y2F0ZShudWxscHRyLCBpbmZvLnNpemUsIG51bGxwdHIpKTsKICAgICBHUmVmUHRyPEdzdENhcHM+
IGNhcHMgPSBhZG9wdEdSZWYoZ3N0X3ZpZGVvX2luZm9fdG9fY2FwcygmaW5mbykpOwogCi0gICAg
R3N0TWFwcGVkQnVmZmVyIG1hcChidWZmZXIuZ2V0KCksIEdTVF9NQVBfV1JJVEUpOwotICAgIG1l
bXNldChtYXAuZGF0YSgpLCAwLCBpbmZvLnNpemUpOworICAgIGF1dG8gbWFwID0gR3N0TWFwcGVk
QnVmZmVyOjpjcmVhdGUoYnVmZmVyLmdldCgpLCBHU1RfTUFQX1dSSVRFKTsKKyAgICBtZW1zZXQo
bWFwLT5kYXRhKCksIDAsIGluZm8uc2l6ZSk7CiAKICAgICByZXR1cm4gR1N0cmVhbWVyVmlkZW9G
cmFtZUxpYldlYlJUQzo6Y3JlYXRlKGdzdF9zYW1wbGVfbmV3KGJ1ZmZlci5nZXQoKSwgY2Fwcy5n
ZXQoKSwgTlVMTCwgTlVMTCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL0dTdHJlYW1lclZpZGVvRW5jb2RlckZhY3RvcnkuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL0dTdHJlYW1l
clZpZGVvRW5jb2RlckZhY3RvcnkuY3BwCmluZGV4IGJjMTJiNmNkZjBhOTgyN2MwOTQ1MWU2OTAz
YjA2MzY3NTIwYTc5ZDIuLmVlNzQwYjRhNGQyODhkYjMwNjYxMDA4M2RkNDNjNjE5ZDU1NjdkYWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0
Yy9HU3RyZWFtZXJWaWRlb0VuY29kZXJGYWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvR1N0cmVhbWVyVmlkZW9FbmNvZGVyRmFjdG9y
eS5jcHAKQEAgLTM0MiwyMiArMzQyLDIyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgRnJh
Z21lbnRpemUod2VicnRjOjpFbmNvZGVkSW1hZ2UqIGVuY29kZWRJbWFnZSwgc3RkOjp1bmlxdWVf
cHRyPHVpbnQ4X3RbXT4qIGVuY29kZWRJbWFnZUJ1ZmZlciwKICAgICAgICAgc2l6ZV90KiBidWZm
ZXJTaXplLCBHc3RCdWZmZXIqIGJ1ZmZlciwgd2VicnRjOjpSVFBGcmFnbWVudGF0aW9uSGVhZGVy
KiBmcmFnbWVudGF0aW9uSW5mbykKICAgICB7Ci0gICAgICAgIEdzdE1hcHBlZEJ1ZmZlciBtYXAo
YnVmZmVyLCBHU1RfTUFQX1JFQUQpOworICAgICAgICBhdXRvIG1hcCA9IEdzdE1hcHBlZEJ1ZmZl
cjo6Y3JlYXRlKGJ1ZmZlciwgR1NUX01BUF9SRUFEKTsKIAotICAgICAgICBpZiAoKmJ1ZmZlclNp
emUgPCBtYXAuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBlbmNvZGVkSW1hZ2UtPl9zaXplID0gbWFw
LnNpemUoKTsKKyAgICAgICAgaWYgKCpidWZmZXJTaXplIDwgbWFwLT5zaXplKCkpIHsKKyAgICAg
ICAgICAgIGVuY29kZWRJbWFnZS0+X3NpemUgPSBtYXAtPnNpemUoKTsKICAgICAgICAgICAgIGVu
Y29kZWRJbWFnZS0+X2J1ZmZlciA9IG5ldyB1aW50OF90W2VuY29kZWRJbWFnZS0+X3NpemVdOwog
ICAgICAgICAgICAgZW5jb2RlZEltYWdlQnVmZmVyLT5yZXNldChlbmNvZGVkSW1hZ2UtPl9idWZm
ZXIpOwotICAgICAgICAgICAgKmJ1ZmZlclNpemUgPSBtYXAuc2l6ZSgpOworICAgICAgICAgICAg
KmJ1ZmZlclNpemUgPSBtYXAtPnNpemUoKTsKICAgICAgICAgfQogCi0gICAgICAgIG1lbWNweShl
bmNvZGVkSW1hZ2UtPl9idWZmZXIsIG1hcC5kYXRhKCksIG1hcC5zaXplKCkpOwotICAgICAgICBl
bmNvZGVkSW1hZ2UtPl9sZW5ndGggPSBtYXAuc2l6ZSgpOwotICAgICAgICBlbmNvZGVkSW1hZ2Ut
Pl9zaXplID0gbWFwLnNpemUoKTsKKyAgICAgICAgbWVtY3B5KGVuY29kZWRJbWFnZS0+X2J1ZmZl
ciwgbWFwLT5kYXRhKCksIG1hcC0+c2l6ZSgpKTsKKyAgICAgICAgZW5jb2RlZEltYWdlLT5fbGVu
Z3RoID0gbWFwLT5zaXplKCk7CisgICAgICAgIGVuY29kZWRJbWFnZS0+X3NpemUgPSBtYXAtPnNp
emUoKTsKIAogICAgICAgICBmcmFnbWVudGF0aW9uSW5mby0+VmVyaWZ5QW5kQWxsb2NhdGVGcmFn
bWVudGF0aW9uSGVhZGVyKDEpOwogICAgICAgICBmcmFnbWVudGF0aW9uSW5mby0+ZnJhZ21lbnRh
dGlvbk9mZnNldFswXSA9IDA7Ci0gICAgICAgIGZyYWdtZW50YXRpb25JbmZvLT5mcmFnbWVudGF0
aW9uTGVuZ3RoWzBdID0gbWFwLnNpemUoKTsKKyAgICAgICAgZnJhZ21lbnRhdGlvbkluZm8tPmZy
YWdtZW50YXRpb25MZW5ndGhbMF0gPSBtYXAtPnNpemUoKTsKICAgICAgICAgZnJhZ21lbnRhdGlv
bkluZm8tPmZyYWdtZW50YXRpb25QbFR5cGVbMF0gPSAwOwogICAgICAgICBmcmFnbWVudGF0aW9u
SW5mby0+ZnJhZ21lbnRhdGlvblRpbWVEaWZmWzBdID0gMDsKICAgICB9CkBAIC00MzgsOSArNDM4
LDkgQEAgcHVibGljOgogICAgICAgICBzdGQ6OnZlY3RvcjxHc3RIMjY0TmFsVW5pdD4gbmFsczsK
IAogICAgICAgICBjb25zdCB1aW50OF90IHN0YXJ0Q29kZVs0XSA9IHsgMCwgMCwgMCwgMSB9Owot
ICAgICAgICBHc3RNYXBwZWRCdWZmZXIgbWFwKGdzdGJ1ZmZlciwgR1NUX01BUF9SRUFEKTsKKyAg
ICAgICAgYXV0byBtYXAgPSBHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZShnc3RidWZmZXIsIEdTVF9N
QVBfUkVBRCk7CiAgICAgICAgIHdoaWxlIChwYXJzZXJSZXN1bHQgPT0gR1NUX0gyNjRfUEFSU0VS
X09LKSB7Ci0gICAgICAgICAgICBwYXJzZXJSZXN1bHQgPSBnc3RfaDI2NF9wYXJzZXJfaWRlbnRp
ZnlfbmFsdShtX3BhcnNlciwgbWFwLmRhdGEoKSwgb2Zmc2V0LCBtYXAuc2l6ZSgpLCAmbmFsdSk7
CisgICAgICAgICAgICBwYXJzZXJSZXN1bHQgPSBnc3RfaDI2NF9wYXJzZXJfaWRlbnRpZnlfbmFs
dShtX3BhcnNlciwgbWFwLT5kYXRhKCksIG9mZnNldCwgbWFwLT5zaXplKCksICZuYWx1KTsKIAog
ICAgICAgICAgICAgbmFsdS5zY19vZmZzZXQgPSBvZmZzZXQ7CiAgICAgICAgICAgICBuYWx1Lm9m
ZnNldCA9IG9mZnNldCArIHNpemVvZihzdGFydENvZGUpOwpAQCAtNDU2LDcgKzQ1Niw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIGVuY29kZWRJbWFnZS0+X3NpemUgPSByZXF1aXJlZFNpemU7CiAg
ICAgICAgICAgICBlbmNvZGVkSW1hZ2UtPl9idWZmZXIgPSBuZXcgdWludDhfdFtlbmNvZGVkSW1h
Z2UtPl9zaXplXTsKICAgICAgICAgICAgIGVuY29kZWRJbWFnZUJ1ZmZlci0+cmVzZXQoZW5jb2Rl
ZEltYWdlLT5fYnVmZmVyKTsKLSAgICAgICAgICAgICpidWZmZXJTaXplID0gbWFwLnNpemUoKTsK
KyAgICAgICAgICAgICpidWZmZXJTaXplID0gbWFwLT5zaXplKCk7CiAgICAgICAgIH0KIAogICAg
ICAgICAvLyBJdGVyYXRlIG5hbCB1bml0cyBhbmQgZmlsbCB0aGUgRnJhZ21lbnRhdGlvbiBpbmZv
LgpAQCAtNDY1LDE1ICs0NjUsMTUgQEAgcHVibGljOgogICAgICAgICBlbmNvZGVkSW1hZ2UtPl9s
ZW5ndGggPSAwOwogICAgICAgICBmb3IgKHN0ZDo6dmVjdG9yPEdzdEgyNjROYWxVbml0Pjo6aXRl
cmF0b3IgbmFsID0gbmFscy5iZWdpbigpOyBuYWwgIT0gbmFscy5lbmQoKTsgKytuYWwsIGZyYWdt
ZW50SW5kZXgrKykgewogCi0gICAgICAgICAgICBBU1NFUlQobWFwLmRhdGEoKVtuYWwtPnNjX29m
ZnNldCArIDBdID09IHN0YXJ0Q29kZVswXSk7Ci0gICAgICAgICAgICBBU1NFUlQobWFwLmRhdGEo
KVtuYWwtPnNjX29mZnNldCArIDFdID09IHN0YXJ0Q29kZVsxXSk7Ci0gICAgICAgICAgICBBU1NF
UlQobWFwLmRhdGEoKVtuYWwtPnNjX29mZnNldCArIDJdID09IHN0YXJ0Q29kZVsyXSk7Ci0gICAg
ICAgICAgICBBU1NFUlQobWFwLmRhdGEoKVtuYWwtPnNjX29mZnNldCArIDNdID09IHN0YXJ0Q29k
ZVszXSk7CisgICAgICAgICAgICBBU1NFUlQobWFwLT5kYXRhKClbbmFsLT5zY19vZmZzZXQgKyAw
XSA9PSBzdGFydENvZGVbMF0pOworICAgICAgICAgICAgQVNTRVJUKG1hcC0+ZGF0YSgpW25hbC0+
c2Nfb2Zmc2V0ICsgMV0gPT0gc3RhcnRDb2RlWzFdKTsKKyAgICAgICAgICAgIEFTU0VSVChtYXAt
PmRhdGEoKVtuYWwtPnNjX29mZnNldCArIDJdID09IHN0YXJ0Q29kZVsyXSk7CisgICAgICAgICAg
ICBBU1NFUlQobWFwLT5kYXRhKClbbmFsLT5zY19vZmZzZXQgKyAzXSA9PSBzdGFydENvZGVbM10p
OwogCiAgICAgICAgICAgICBmcmFnbWVudGF0aW9uSGVhZGVyLT5mcmFnbWVudGF0aW9uT2Zmc2V0
W2ZyYWdtZW50SW5kZXhdID0gbmFsLT5vZmZzZXQ7CiAgICAgICAgICAgICBmcmFnbWVudGF0aW9u
SGVhZGVyLT5mcmFnbWVudGF0aW9uTGVuZ3RoW2ZyYWdtZW50SW5kZXhdID0gbmFsLT5zaXplOwog
Ci0gICAgICAgICAgICBtZW1jcHkoZW5jb2RlZEltYWdlLT5fYnVmZmVyICsgZW5jb2RlZEltYWdl
LT5fbGVuZ3RoLCAmbWFwLmRhdGEoKVtuYWwtPnNjX29mZnNldF0sCisgICAgICAgICAgICBtZW1j
cHkoZW5jb2RlZEltYWdlLT5fYnVmZmVyICsgZW5jb2RlZEltYWdlLT5fbGVuZ3RoLCAmbWFwLT5k
YXRhKClbbmFsLT5zY19vZmZzZXRdLAogICAgICAgICAgICAgICAgIHNpemVvZihzdGFydENvZGUp
ICsgbmFsLT5zaXplKTsKICAgICAgICAgICAgIGVuY29kZWRJbWFnZS0+X2xlbmd0aCArPSBuYWwt
PnNpemUgKyBzaXplb2Yoc3RhcnRDb2RlKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvVG9vbHMv
Q2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDI5MWIyNzZjN2U0NThiNzU4ZWFlNzJi
YTk4NzIxYWExMDY3NzA3MTEuLmMyOTExZmQ3MWRkZmRhZGVkOTFlMDBhNGU1N2Q2MTUxMzBiYTRi
MzMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxOSBAQAorMjAxOS0wMS0wOSAgQ2hhcmxpZSBUdXJuZXIgIDxjdHVybmVyQGlnYWxp
YS5jb20+CisKKyAgICAgICAgW0dTdHJlYW1lcl0gQWRkIHNoYXJlZEJ1ZmZlciB1dGlsaXR5IHRv
IEdzdE1hcHBlZEJ1ZmZlciwgYW5kIGEgdGVzdHN1aXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTI5NzcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvUGxhdGZvcm1HVEsuY21h
a2U6IEJ1aWxkIHRoZSBuZXcgR1N0cmVhbWVyIHRlc3QgaGFybmVzcworICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvUGxhdGZvcm1XUEUuY21ha2U6IERpdHRvLgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9nc3RyZWFtZXIvR1N0cmVhbWVyVGVzdC5jcHA6IEFkZGVkLgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6R1N0cmVhbWVyVGVzdDo6U2V0VXApOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6R1N0cmVhbWVyVGVzdDo6VGVhckRvd24pOgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViQ29yZS9nc3RyZWFtZXIvR1N0cmVhbWVyVGVzdC5oOiBBZGRlZC4KKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvZ3N0cmVhbWVyL0dzdE1hcHBlZEJ1
ZmZlci5jcHA6IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKwogMjAx
OS0wMS0wOSAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4KIAogICAg
ICAgICBbV2luXVtNaW5pQnJvd3Nlcl0gd2NoYXJfdCBzdHJpbmdzIHNob3VsZG4ndCBiZSB0cmVh
dGVkIGFzIEJTVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1HVEsu
Y21ha2UgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDg0NDk5
ZGUzOThiMjVkMjVhYzBjOTM2MDJhYWFkMWQ2OTBkM2RlOGEuLmMzNGZhZTA3Y2YzYzZiMGEzOWMz
OTlmZWUzMmNkMjVjM2EwYWE3ZjQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxh
dGZvcm1HVEsuY21ha2UKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdUSy5jbWFr
ZQpAQCAtMjUsNiArMjUsNyBAQCBpbmNsdWRlX2RpcmVjdG9yaWVzKAogaW5jbHVkZV9kaXJlY3Rv
cmllcyhTWVNURU0KICAgICAke0dESzNfSU5DTFVERV9ESVJTfQogICAgICR7R0xJQl9JTkNMVURF
X0RJUlN9CisgICAgJHtHU1RSRUFNRVJfSU5DTFVERV9ESVJTfQogICAgICR7R1RLM19JTkNMVURF
X0RJUlN9CiAgICAgJHtMSUJTT1VQX0lOQ0xVREVfRElSU30KICkKQEAgLTkzLDYgKzk0LDggQEAg
YWRkX2V4ZWN1dGFibGUoVGVzdFdlYkNvcmUKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0
cy9XZWJDb3JlL0ROUy5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3Jl
L0ZpbGVNb25pdG9yLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUv
RmlsZVN5c3RlbS5jcHAKKyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3JlL2dz
dHJlYW1lci9Hc3RNYXBwZWRCdWZmZXIuY3BwCisgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVz
dHMvV2ViQ29yZS9nc3RyZWFtZXIvR1N0cmVhbWVyVGVzdC5jcHAKICAgICAke1RFU1RXRUJLSVRB
UElfRElSfS9UZXN0cy9XZWJDb3JlL0dyaWRQb3NpdGlvbi5jcHAKICAgICAke1RFU1RXRUJLSVRB
UElfRElSfS9UZXN0cy9XZWJDb3JlL0hUTUxQYXJzZXJJZGlvbXMuY3BwCiAgICAgJHtURVNUV0VC
S0lUQVBJX0RJUn0vVGVzdHMvV2ViQ29yZS9MYXlvdXRVbml0LmNwcApkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdQRS5jbWFrZSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
UGxhdGZvcm1XUEUuY21ha2UKaW5kZXggZmIxYjZiNTJhMzU2Mzg4MGE1MmY2ODU1ODhjMmUxZmJi
ZWFiZDllMS4uYjY4Nzc1OThkODc3ZGU2YzhkYTg2YjRlYjU3Y2M4NmZmMGEyZjdlZiAxMDA2NDQK
LS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdQRS5jbWFrZQorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1BsYXRmb3JtV1BFLmNtYWtlCkBAIC0yMyw2ICsyMyw3IEBAIGluY2x1ZGVf
ZGlyZWN0b3JpZXMoCiBpbmNsdWRlX2RpcmVjdG9yaWVzKFNZU1RFTQogICAgICR7Q0FJUk9fSU5D
TFVERV9ESVJTfQogICAgICR7R0xJQl9JTkNMVURFX0RJUlN9CisgICAgJHtHU1RSRUFNRVJfSU5D
TFVERV9ESVJTfQogICAgICR7TElCU09VUF9JTkNMVURFX0RJUlN9CiAgICAgJHtXUEVfSU5DTFVE
RV9ESVJTfQogICAgICR7V1BFQkFDS0VORF9GRE9fSU5DTFVERV9ESVJTfQpAQCAtNjAsNiArNjEs
OCBAQCBhZGRfZXhlY3V0YWJsZShUZXN0V2ViQ29yZQogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9
L1Rlc3RzQ29udHJvbGxlci5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJD
b3JlL0ZpbGVNb25pdG9yLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNv
cmUvRmlsZVN5c3RlbS5jcHAKKyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3Jl
L2dzdHJlYW1lci9Hc3RNYXBwZWRCdWZmZXIuY3BwCisgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0v
VGVzdHMvV2ViQ29yZS9nc3RyZWFtZXIvR1N0cmVhbWVyVGVzdC5jcHAKICAgICAke1RFU1RXRUJL
SVRBUElfRElSfS9UZXN0cy9XZWJDb3JlL0hUTUxQYXJzZXJJZGlvbXMuY3BwCiAgICAgJHtURVNU
V0VCS0lUQVBJX0RJUn0vVGVzdHMvV2ViQ29yZS9MYXlvdXRVbml0LmNwcAogICAgICR7VEVTVFdF
QktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvTUlNRVR5cGVSZWdpc3RyeS5jcHAKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9nc3RyZWFtZXIvR1N0cmVhbWVy
VGVzdC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvZ3N0cmVhbWVyL0dT
dHJlYW1lclRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNkN2Y5NGRlOGU3ZmRhNGVmZGNjYmI5MzJlYmEz
OTA4Njg3YWI4ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvZ3N0cmVhbWVyL0dTdHJlYW1lclRlc3QuY3BwCkBAIC0wLDAgKzEsNTUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhLCBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaWYgVVNFKEdTVFJFQU1FUikKKyNpbmNsdWRlICJHU3RyZWFtZXJUZXN0LmgiCisKKyNp
bmNsdWRlIDxXZWJDb3JlL0dTdHJlYW1lckNvbW1vbi5oPgorI2luY2x1ZGUgPGdzdC9nc3QuaD4K
KwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsK
Kwordm9pZCBHU3RyZWFtZXJUZXN0OjpTZXRVcCgpCit7CisgICAgaWYgKCFnc3RfaXNfaW5pdGlh
bGl6ZWQoKSkKKyAgICAgICAgZ3N0X2luaXQobnVsbHB0ciwgbnVsbHB0cik7Cit9CisKK3ZvaWQg
R1N0cmVhbWVyVGVzdDo6VGVhckRvd24oKQoreworICAgIC8vIEl0IG1pZ2h0IGJlIHRlbXB0aW5n
IHRvIGNhbGwgZ3N0X2RlaW5pdCgpIGhlcmUuIEhvd2V2ZXIsIHRoYXQKKyAgICAvLyB3aWxsIHRl
YXIgZG93biB0aGUgd2hvbGUgcHJvY2VzcyBmcm9tIHRoZSBHU3RyZWFtZXIgUE9WLCBhbmQgdGhl
CisgICAgLy8gc2VlbWluZ2x5IHN5bW1ldHJpY2FsIGNhbGwgdG8gZ3N0X2luaXQoKSB3aWxsIGZh
aWwgdG8KKyAgICAvLyBpbml0aWFsaXplIEdTdHJlYW1lciBjb3JyZWN0bHkuCit9CisKK30gLy8g
bmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvZ3N0cmVhbWVyL0dTdHJl
YW1lclRlc3QuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9nc3RyZWFtZXIv
R1N0cmVhbWVyVGVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZiMmNiYWVlNjE2NWM2NTk3OTE0NzA4NmE3ZDAx
YjIxMTdiZjVkOWMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvZ3N0cmVhbWVyL0dTdHJlYW1lclRlc3QuaApAQCAtMCwwICsxLDQxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSwgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDE4
IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
VVNFKEdTVFJFQU1FUikKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitjbGFzcyBHU3Ry
ZWFtZXJUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHVibGljOgorICAgIHZvaWQgU2V0
VXAoKSBvdmVycmlkZTsKKyAgICB2b2lkIFRlYXJEb3duKCkgb3ZlcnJpZGU7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2dzdHJlYW1lci9Hc3RN
YXBwZWRCdWZmZXIuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2dzdHJl
YW1lci9Hc3RNYXBwZWRCdWZmZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRmNTcyYWVlNWNjODlkMWZhZDRh
Yzk0OTIwNTJiZmJhYjkyNzI5NzcKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvZ3N0cmVhbWVyL0dzdE1hcHBlZEJ1ZmZlci5jcHAKQEAgLTAsMCAr
MSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhLCBTLkwuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEdTVFJFQU1FUikKKworI2luY2x1ZGUgIkdTdHJlYW1l
clRlc3QuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJUZXN0LmgiCisj
aW5jbHVkZSA8V2ViQ29yZS9HU3RyZWFtZXJDb21tb24uaD4KKwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworVEVTVF9GKEdTdHJlYW1lclRl
c3QsIG1hcHBlZEJ1ZmZlckJhc2ljcykKK3sKKyAgICBHUmVmUHRyPEdzdEJ1ZmZlcj4gYnVmID0g
YWRvcHRHUmVmKGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlKG51bGxwdHIsIDY0LCBudWxscHRyKSk7
CisgICAgYXV0byBtYXBwZWRCdWYgPSBHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZShidWYuZ2V0KCks
IEdTVF9NQVBfUkVBRCk7CisgICAgQVNTRVJUX1RSVUUobWFwcGVkQnVmKTsKKyAgICBFWFBFQ1Rf
RVEobWFwcGVkQnVmLT5zaXplKCksIDY0KTsKKworICAgIGF1dG8gbWFwcGVkQnVmMiA9IEdzdE1h
cHBlZEJ1ZmZlcjo6Y3JlYXRlKGJ1Zi5nZXQoKSwgR1NUX01BUF9SRUFEKTsKKyAgICBBU1NFUlRf
VFJVRShtYXBwZWRCdWYyKTsKKyAgICBFWFBFQ1RfRVEoKm1hcHBlZEJ1ZiwgKm1hcHBlZEJ1ZjIp
OworICAgIEVYUEVDVF9FUShidWYuZ2V0KCksICptYXBwZWRCdWYpOworICAgIEVYUEVDVF9FUSgq
bWFwcGVkQnVmMiwgYnVmLmdldCgpKTsKK30KKworVEVTVF9GKEdTdHJlYW1lclRlc3QsIG1hcHBl
ZEJ1ZmZlclJlYWRTYW5pdHkpCit7CisgICAgZ3BvaW50ZXIgbWVtb3J5ID0gZ19tYWxsb2MoMTYp
OworICAgIG1lbXNldChtZW1vcnksICd4JywgMTYpOworICAgIEdSZWZQdHI8R3N0QnVmZmVyPiBi
dWYgPSBhZG9wdEdSZWYoZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZChtZW1vcnksIDE2KSk7CisgICAg
YXV0byBtYXBwZWRCdWYgPSBHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZShidWYuZ2V0KCksIEdTVF9N
QVBfUkVBRCk7CisgICAgQVNTRVJUX1RSVUUobWFwcGVkQnVmKTsKKyAgICBFWFBFQ1RfRVEobWFw
cGVkQnVmLT5zaXplKCksIDE2KTsKKyAgICBFWFBFQ1RfRVEobWVtY21wKG1lbW9yeSwgbWFwcGVk
QnVmLT5kYXRhKCksIDE2KSwgMCk7CisgICAgRVhQRUNUX0VRKG1lbWNtcChtZW1vcnksIG1hcHBl
ZEJ1Zi0+Y3JlYXRlU2hhcmVkQnVmZmVyKCktPmRhdGEoKSwgMTYpLCAwKTsKK30KKworVEVTVF9G
KEdTdHJlYW1lclRlc3QsIG1hcHBlZEJ1ZmZlcldyaXRlU2FuaXR5KQoreworICAgIGdwb2ludGVy
IG1lbW9yeSA9IGdfbWFsbG9jKDE2KTsKKyAgICBtZW1zZXQobWVtb3J5LCAneCcsIDE2KTsKKyAg
ICBHUmVmUHRyPEdzdEJ1ZmZlcj4gYnVmID0gYWRvcHRHUmVmKGdzdF9idWZmZXJfbmV3X3dyYXBw
ZWQobWVtb3J5LCAxNikpOworCisgICAgYXV0byBtYXBwZWRCdWYgPSBHc3RNYXBwZWRCdWZmZXI6
OmNyZWF0ZShidWYuZ2V0KCksIEdTVF9NQVBfV1JJVEUpOworICAgIEFTU0VSVF9UUlVFKG1hcHBl
ZEJ1Zik7CisgICAgRVhQRUNUX0VRKG1hcHBlZEJ1Zi0+c2l6ZSgpLCAxNik7CisgICAgbWVtc2V0
KG1hcHBlZEJ1Zi0+ZGF0YSgpLCAneScsIG1hcHBlZEJ1Zi0+c2l6ZSgpKTsKKworICAgIEVYUEVD
VF9FUShtZW1jbXAobWVtb3J5LCBtYXBwZWRCdWYtPmRhdGEoKSwgMTYpLCAwKTsKK30KKworVEVT
VF9GKEdTdHJlYW1lclRlc3QsIG1hcHBlZEJ1ZmZlckNhY2hlc1NoYXJlZEJ1ZmZlcnMpCit7Cisg
ICAgR1JlZlB0cjxHc3RCdWZmZXI+IGJ1ZiA9IGFkb3B0R1JlZihnc3RfYnVmZmVyX25ld19hbGxv
Y2F0ZShudWxscHRyLCA2NCwgbnVsbHB0cikpOworICAgIGF1dG8gbWFwcGVkQnVmID0gR3N0TWFw
cGVkQnVmZmVyOjpjcmVhdGUoYnVmLmdldCgpLCBHU1RfTUFQX1JFQUQpOworICAgIEFTU0VSVF9U
UlVFKG1hcHBlZEJ1Zik7CisgICAgYXV0byBzaGFyZWRCdWYgPSBtYXBwZWRCdWYtPmNyZWF0ZVNo
YXJlZEJ1ZmZlcigpOworICAgIC8vIFdlIGV4cGVjdCB0aGUgc2FtZSBkYXRhIHBvaW50ZXIgd3Jh
cHBlZCBieSBzaGFyZWQgYnVmZmVyLCBubworICAgIC8vIGNvcGllcyBuZWVkIHRvIGJlIG1hZGUu
CisgICAgRVhQRUNUX0VRKHNoYXJlZEJ1Zi0+ZGF0YSgpLCBtYXBwZWRCdWYtPmNyZWF0ZVNoYXJl
ZEJ1ZmZlcigpLT5kYXRhKCkpOworfQorCitURVNUX0YoR1N0cmVhbWVyVGVzdCwgbWFwcGVkQnVm
ZmVyRG9lc05vdEFkZEV4dHJhUmVmcykKK3sKKyAgICAvLyBJdCBpcyBpbXBvcnRhbnQgbm90IHRv
IHJlZiB0aGUgcGFzc2VkIEdTdHJlYW1lciBidWZmZXJzLCBpZiB3ZQorICAgIC8vIGRvIHNvLCB0
aGVuIGluIHRoZSBjYXNlIG9mIHdyaXRhYmxlIGJ1ZmZlcnMsIHRoZXkgY2FuIGJlY29tZQorICAg
IC8vIHVud3JpdGFibGUsIGV2ZW4gdGhvdWdoIHdlIGFyZSB0aGUgc29sZSBvd25lcnMuIFdlIGFs
c28gZG9uJ3QKKyAgICAvLyB3YW50IHRvIHRha2Ugb3duZXJzaGlwIG9mIHRoZSBidWZmZXIgZnJv
bSB0aGUgdXNlci1jb2RlLCBzaW5jZQorICAgIC8vIGZvciB0cmFuc2Zvcm1JblBsYWNlIHVzZS1j
YXNlcywgdGhhdCB3b3VsZCBicmVhay4KKyAgICBHUmVmUHRyPEdzdEJ1ZmZlcj4gYnVmID0gYWRv
cHRHUmVmKGdzdF9idWZmZXJfbmV3KCkpOworCisgICAgQVNTRVJUX0VRKEdTVF9PQkpFQ1RfUkVG
Q09VTlQoYnVmLmdldCgpKSwgMSk7CisKKyAgICBhdXRvIG1hcHBlZEJ1ZiA9IEdzdE1hcHBlZEJ1
ZmZlcjo6Y3JlYXRlKGJ1Zi5nZXQoKSwgR1NUX01BUF9SRUFEV1JJVEUpOworICAgIEFTU0VSVF9U
UlVFKG1hcHBlZEJ1Zik7CisKKyAgICBBU1NFUlRfRVEoR1NUX09CSkVDVF9SRUZDT1VOVChidWYu
Z2V0KCkpLCAxKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQorCisjZW5kaWYg
Ly8gVVNFKEdTVFJFQU1FUikK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359027</attachid>
            <date>2019-01-14 03:54:21 -0800</date>
            <delta_ts>2019-01-14 04:31:20 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-192977-20190114115420.patch</filename>
            <type>text/plain</type>
            <size>43293</size>
            <attacher name="Charlie Turner">cturner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5ODE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmVjZmJhNjZmNWUxMTdl
ZGJkNDRmMzgyMThjNWE0YzBhNzZkMWEzNS4uNTZlODAxY2QxMTFhMzU2MTc0OWVmNDNjMDQ2MWMz
Y2Y1NjBjY2Q0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDE5LTAxLTEwICBDaGFy
bGllIFR1cm5lciAgPGN0dXJuZXJAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVyXSBB
ZGQgc2hhcmVkQnVmZmVyIHV0aWxpdHkgdG8gR3N0TWFwcGVkQnVmZmVyLCBhbmQgYSB0ZXN0c3Vp
dGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5Mjk3
NworCisgICAgICAgIFJldmlld2VkIGJ5IENhcmxvcyBHYXJjaWEgQ2FtcG9zLgorCisgICAgICAg
IEFkZCBhIHV0aWxpdHkgbWV0aG9kIG9uIEdzdE1hcHBlZEJ1ZmZlciB0byByZXR1cm4gYSBTaGFy
ZWRCdWZmZXIKKyAgICAgICAgdmlldyBvdmVyIHRoZSBtYXBwZWQgZGF0YSB3aXRoIG5vIGNvcGll
cy4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gaW50cm9kdWNlcyBhIG5ldyBnc3RyZWFtZXIg
cG9ydCBBUEkgdGVzdAorICAgICAgICBkaXJlY3RvcnksIGFuZCBpbmNsdWRlcyBzb21lIHRlc3Rz
IGZvciBHc3RNYXBwZWRCdWZmZXIuCisKKyAgICAgICAgTmV3IHRlc3RzIGluIHRoZSBBUEkgc2Vj
dGlvbi4KKworICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHA6IEFkZCBhIG5ldyBv
dmVybG9hZCBmb3IKKyAgICAgICAgR3N0TWFwcGVkQnVmZmVyIHRoYXQgYWxsb3dzIHNoYXJpbmcg
dGhlIG1hcHBlZCBHU3RyZWFtZXIgYnVmZmVycworICAgICAgICB3aXRoIHplcm8gY29waWVzLgor
ICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVk
QnVmZmVyOjpEYXRhU2VnbWVudDo6ZGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFy
ZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpzaXplIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9T
aGFyZWRCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvV2ViS2l0
V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwOgorICAgICAgICAod2ViS2l0V2ViQXVkaW9TcmNB
bGxvY2F0ZUJ1ZmZlcnNBbmRSZW5kZXJBdWRpbyk6IFVwZGF0ZSB0byBuZXcKKyAgICAgICAgQVBJ
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjpjcmVhdGVTaGFyZWRCdWZm
ZXIpOiBSZXR1cm4gYSBzaGFyZWQKKyAgICAgICAgYnVmZmVyIHNoYXJpbmcgdGhpcyBtYXBwZWQg
YnVmZmVyLiBUaGUgYnVmZmVyIG11c3QgYmUgc2hhcmVhYmxlIHRvCisgICAgICAgIHVzZSB0aGlz
IG1ldGhvZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVy
Q29tbW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZSk6IE1h
a2UgR3N0TWFwcGVkQnVmZmVyIFJlZkNvdW50ZWQKKyAgICAgICAgKFdlYkNvcmU6OkdzdE1hcHBl
ZEJ1ZmZlcjo6fkdzdE1hcHBlZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHc3RNYXBwZWRC
dWZmZXI6OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjpkYXRhIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlcjo6c2l6ZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXI6OmlzU2hhcmFibGUgY29uc3QpOiBOZXcg
cHJlZGljYXRlIHRvCisgICAgICAgIGNoZWNrIHdoZXRoZXIgdGhpcyBidWZmZXIgY2FuIGJlIHNo
YXJlZCAoaS5lLiwgaXMgbm90IHdyaXRhYmxlKQorICAgICAgICAoV2ViQ29yZTo6R3N0TWFwcGVk
QnVmZmVyOjpHc3RNYXBwZWRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3N0TWFwcGVkQnVm
ZmVyOjpvcGVyYXRvciBib29sIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlU
cmFja09mU2FtcGxlKToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSBuZXcgQVBJLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvR1N0cmVhbWVyRU1FVXRpbGl0aWVzLmg6
CisgICAgICAgIChXZWJDb3JlOjpJbml0RGF0YTo6SW5pdERhdGEpOiBEaXR0by4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENsZWFyS2V5RGVjcnlwdG9y
R1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKHdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JGaW5k
QW5kU2V0S2V5KTogRGl0dG8uCisgICAgICAgICh3ZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdG9y
RGVjcnlwdCk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9Nb2NrR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OldyYXBwZWRNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZTo6cmVuZGVyKTogRGl0dG8uCisgICAgICAg
ICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdBdWRpb1Nv
dXJjZUxpYldlYlJUQy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nQXVk
aW9Tb3VyY2VMaWJXZWJSVEM6OnB1bGxBdWRpb0RhdGEpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTGli
V2ViUlRDLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJj
ZUxpYldlYlJUQzo6Y3JlYXRlQmxhY2tGcmFtZSk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3Jt
L21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9HU3RyZWFtZXJWaWRlb0VuY29kZXJGYWN0b3J5LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclZpZGVvRW5jb2Rlcjo6RnJhZ21lbnRpemUpOiBE
aXR0by4KKwogMjAxOS0wMS0wOSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBUaHJlYWRUaW1lcnMgc2hvdWxkIG5vdCBzdG9yZSBhIHJhdyBwb2ludGVyIGluIGl0
cyBoZWFwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAppbmRleCA0NmZj
ODExY2MzNTMzNWU5ZDNhZmE2ZGJiMzNlZjkxOWMyZDYwYWUyLi4yNmRlMWJiZjM5NWJmYWZkYzNl
MWNmY2Q5OTk2MDEwMDBiNWRkMjEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TaGFyZWRCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1
ZmZlci5jcHAKQEAgLTU0LDYgKzU0LDIwIEBAIFNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKFZl
Y3RvcjxjaGFyPiYmIGRhdGEpCiAgICAgYXBwZW5kKFdURk1vdmUoZGF0YSkpOwogfQogCisjaWYg
VVNFKEdTVFJFQU1FUikKK1JlZjxTaGFyZWRCdWZmZXI+IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKEdz
dE1hcHBlZEJ1ZmZlciYgbWFwcGVkQnVmZmVyKQoreworICAgIEFTU0VSVChtYXBwZWRCdWZmZXIu
aXNTaGFyYWJsZSgpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRCdWZmZXIobWFw
cGVkQnVmZmVyKSk7Cit9CisKK1NoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKEdzdE1hcHBlZEJ1
ZmZlciYgbWFwcGVkQnVmZmVyKQorICAgIDogbV9zaXplKG1hcHBlZEJ1ZmZlci5zaXplKCkpCit7
CisgICAgbV9zZWdtZW50cy5hcHBlbmQoezAsIERhdGFTZWdtZW50OjpjcmVhdGUoJm1hcHBlZEJ1
ZmZlcil9KTsKK30KKyNlbmRpZgorCiBSZWZQdHI8U2hhcmVkQnVmZmVyPiBTaGFyZWRCdWZmZXI6
OmNyZWF0ZVdpdGhDb250ZW50c09mRmlsZShjb25zdCBTdHJpbmcmIGZpbGVQYXRoKQogewogICAg
IGJvb2wgbWFwcGluZ1N1Y2Nlc3M7CkBAIC0yMTAsNiArMjI0LDkgQEAgY29uc3QgY2hhciogU2hh
cmVkQnVmZmVyOjpEYXRhU2VnbWVudDo6ZGF0YSgpIGNvbnN0CiAjZW5kaWYKICNpZiBVU0UoR0xJ
QikKICAgICAgICAgW10oY29uc3QgR1JlZlB0cjxHQnl0ZXM+JiBkYXRhKSB7IHJldHVybiByZWlu
dGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihnX2J5dGVzX2dldF9kYXRhKGRhdGEuZ2V0KCksIG51
bGxwdHIpKTsgfSwKKyNlbmRpZgorI2lmIFVTRShHU1RSRUFNRVIpCisgICAgICAgIFtdKGNvbnN0
IFJlZlB0cjxHc3RNYXBwZWRCdWZmZXI+JiBkYXRhKSB7IHJldHVybiByZWludGVycHJldF9jYXN0
PGNvbnN0IGNoYXIqPihkYXRhLT5kYXRhKCkpOyB9LAogI2VuZGlmCiAgICAgICAgIFtdKGNvbnN0
IEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiBkYXRhKSB7IHJldHVybiByZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPihkYXRhLmRhdGEoKSk7IH0KICAgICApOwpAQCAtMjgzLDYgKzMwMCw5
IEBAIHNpemVfdCBTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpzaXplKCkgY29uc3QKICNlbmRp
ZgogI2lmIFVTRShHTElCKQogICAgICAgICBbXShjb25zdCBHUmVmUHRyPEdCeXRlcz4mIGRhdGEp
IHsgcmV0dXJuIGdfYnl0ZXNfZ2V0X3NpemUoZGF0YS5nZXQoKSk7IH0sCisjZW5kaWYKKyNpZiBV
U0UoR1NUUkVBTUVSKQorICAgICAgICBbXShjb25zdCBSZWZQdHI8R3N0TWFwcGVkQnVmZmVyPiYg
ZGF0YSkgeyByZXR1cm4gZGF0YS0+c2l6ZSgpOyB9LAogI2VuZGlmCiAgICAgICAgIFtdKGNvbnN0
IEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiBkYXRhKSB7IHJldHVybiBkYXRhLnNpemUoKTsg
fQogICAgICk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZm
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCmluZGV4IGUyYWFl
MmYzMDQ1NzM1NWY0ODllZWM0YWI0ZWNmMWNlN2QzZTQ1MmYuLjgxMzE4ZThiMjlhZTVhMGY1Yjk2
MDNjODI1NTc5MWNkYmMyMGE0ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1NoYXJlZEJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZl
ci5oCkBAIC00OCw2ICs0OCwxMCBAQAogdHlwZWRlZiBzdHJ1Y3QgX0dCeXRlcyBHQnl0ZXM7CiAj
ZW5kaWYKIAorI2lmIFVTRShHU1RSRUFNRVIpCisjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgi
CisjZW5kaWYKKwogI2lmIFVTRShGT1VOREFUSU9OKQogT0JKQ19DTEFTUyBOU0FycmF5OwogT0JK
Q19DTEFTUyBOU0RhdGE7CkBAIC04OCw2ICs5Miw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUmVm
PFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKEdCeXRlcyopOwogI2VuZGlmCiAKKyNpZiBVU0UoR1NUUkVB
TUVSKQorICAgIHN0YXRpYyBSZWY8U2hhcmVkQnVmZmVyPiBjcmVhdGUoR3N0TWFwcGVkQnVmZmVy
Jik7CisjZW5kaWYKICAgICAvLyBDYWxsaW5nIGRhdGEoKSBjYXVzZXMgYWxsIHRoZSBkYXRhIHNl
Z21lbnRzIHRvIGJlIGNvcGllZCBpbnRvIG9uZSBzZWdtZW50IGlmIHRoZXkgYXJlIG5vdCBhbHJl
YWR5LgogICAgIC8vIEl0ZXJhdGUgdGhlIHNlZ21lbnRzIHVzaW5nIGJlZ2luKCkgYW5kIGVuZCgp
IGluc3RlYWQuCiAgICAgLy8gRklYTUU6IEF1ZGl0IHRoZSBjYWxsIHNpdGVzIG9mIHRoaXMgZnVu
Y3Rpb24gYW5kIHJlcGxhY2UgdGhlbSB3aXRoIGl0ZXJhdGlvbiBpZiBwb3NzaWJsZS4KQEAgLTEy
NSw2ICsxMzIsOSBAQCBwdWJsaWM6CiAjZW5kaWYKICNpZiBVU0UoR0xJQikKICAgICAgICAgc3Rh
dGljIFJlZjxEYXRhU2VnbWVudD4gY3JlYXRlKEdSZWZQdHI8R0J5dGVzPiYmIGRhdGEpIHsgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRGF0YVNlZ21lbnQoV1RGTW92ZShkYXRhKSkpOyB9CisjZW5kaWYK
KyNpZiBVU0UoR1NUUkVBTUVSKQorICAgICAgICBzdGF0aWMgUmVmPERhdGFTZWdtZW50PiBjcmVh
dGUoUmVmUHRyPEdzdE1hcHBlZEJ1ZmZlcj4mJiBkYXRhKSB7IHJldHVybiBhZG9wdFJlZigqbmV3
IERhdGFTZWdtZW50KFdURk1vdmUoZGF0YSkpKTsgfQogI2VuZGlmCiAgICAgICAgIHN0YXRpYyBS
ZWY8RGF0YVNlZ21lbnQ+IGNyZWF0ZShGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmIGRhdGEp
IHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGF0YVNlZ21lbnQoV1RGTW92ZShkYXRhKSkpOyB9CiAK
QEAgLTE0Miw2ICsxNTIsMTAgQEAgcHVibGljOgogI2lmIFVTRShHTElCKQogICAgICAgICBEYXRh
U2VnbWVudChHUmVmUHRyPEdCeXRlcz4mJiBkYXRhKQogICAgICAgICAgICAgOiBtX2ltbXV0YWJs
ZURhdGEoV1RGTW92ZShkYXRhKSkgeyB9CisjZW5kaWYKKyNpZiBVU0UoR1NUUkVBTUVSKQorICAg
ICAgICBEYXRhU2VnbWVudChSZWZQdHI8R3N0TWFwcGVkQnVmZmVyPiYmIGRhdGEpCisgICAgICAg
ICAgICA6IG1faW1tdXRhYmxlRGF0YShXVEZNb3ZlKGRhdGEpKSB7IH0KICNlbmRpZgogICAgICAg
ICBEYXRhU2VnbWVudChGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYmIGRhdGEpCiAgICAgICAg
ICAgICA6IG1faW1tdXRhYmxlRGF0YShXVEZNb3ZlKGRhdGEpKSB7IH0KQEAgLTE1NSw2ICsxNjks
OSBAQCBwdWJsaWM6CiAjZW5kaWYKICNpZiBVU0UoR0xJQikKICAgICAgICAgICAgIEdSZWZQdHI8
R0J5dGVzPiwKKyNlbmRpZgorI2lmIFVTRShHU1RSRUFNRVIpCisgICAgICAgICAgICBSZWZQdHI8
R3N0TWFwcGVkQnVmZmVyPiwKICNlbmRpZgogICAgICAgICAgICAgRmlsZVN5c3RlbTo6TWFwcGVk
RmlsZURhdGE+IG1faW1tdXRhYmxlRGF0YTsKICAgICAgICAgZnJpZW5kIGNsYXNzIFNoYXJlZEJ1
ZmZlcjsKQEAgLTE5MSw2ICsyMDgsOSBAQCBwcml2YXRlOgogI2lmIFVTRShHTElCKQogICAgIGV4
cGxpY2l0IFNoYXJlZEJ1ZmZlcihHQnl0ZXMqKTsKICNlbmRpZgorI2lmIFVTRShHU1RSRUFNRVIp
CisgICAgZXhwbGljaXQgU2hhcmVkQnVmZmVyKEdzdE1hcHBlZEJ1ZmZlciYpOworI2VuZGlmCiAK
ICAgICB2b2lkIGNvbWJpbmVJbnRvT25lU2VnbWVudCgpIGNvbnN0OwogICAgIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL1dlYktpdFdlYkF1ZGlv
U291cmNlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJl
YW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAKaW5kZXggMDIxMDM1MmIwZDEw
YzI4NmU5YzE0MTA1ZDllZjNkMGRkYTI3YjNlYi4uMmY5MzdmNjc3Y2NjOGUwOGMyNjU3Y2Q4NDM2
MWVjMmJjOWI2YWNhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
Z3N0cmVhbWVyL1dlYktpdFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvV2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3Ry
ZWFtZXIuY3BwCkBAIC0zMjcsNyArMzI3LDcgQEAgc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxHUmVm
UHRyPEdzdEJ1ZmZlcj4+PiB3ZWJLaXRXZWJBdWRpb1NyY0FsbG9jYXRlQnVmZmVyc0FuZFIKIAog
ICAgIFZlY3RvcjxHUmVmUHRyPEdzdEJ1ZmZlcj4+IGNoYW5uZWxCdWZmZXJMaXN0OwogICAgIGNo
YW5uZWxCdWZmZXJMaXN0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocHJpdi0+c291cmNlcy5zaXpl
KCkpOwotICAgIFZlY3RvcjxHc3RNYXBwZWRCdWZmZXI+IG1hcHBlZEJ1ZmZlcnM7CisgICAgVmVj
dG9yPFJlZlB0cjxHc3RNYXBwZWRCdWZmZXI+PiBtYXBwZWRCdWZmZXJzOwogICAgIG1hcHBlZEJ1
ZmZlcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShwcml2LT5zb3VyY2VzLnNpemUoKSk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByaXYtPnNvdXJjZXMuc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgR1JlZlB0cjxHc3RCdWZmZXI+IGJ1ZmZlcjsKQEAgLTM0MiwxMCArMzQyLDEwIEBAIHN0
YXRpYyBPcHRpb25hbDxWZWN0b3I8R1JlZlB0cjxHc3RCdWZmZXI+Pj4gd2ViS2l0V2ViQXVkaW9T
cmNBbGxvY2F0ZUJ1ZmZlcnNBbmRSCiAgICAgICAgIEFTU0VSVChidWZmZXIpOwogICAgICAgICBH
U1RfQlVGRkVSX1RJTUVTVEFNUChidWZmZXIuZ2V0KCkpID0gdGltZXN0YW1wOwogICAgICAgICBH
U1RfQlVGRkVSX0RVUkFUSU9OKGJ1ZmZlci5nZXQoKSkgPSBkdXJhdGlvbjsKLSAgICAgICAgR3N0
TWFwcGVkQnVmZmVyIG1hcHBlZEJ1ZmZlcihidWZmZXIuZ2V0KCksIEdTVF9NQVBfUkVBRFdSSVRF
KTsKKyAgICAgICAgYXV0byBtYXBwZWRCdWZmZXIgPSBHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZShi
dWZmZXIuZ2V0KCksIEdTVF9NQVBfUkVBRFdSSVRFKTsKICAgICAgICAgQVNTRVJUKG1hcHBlZEJ1
ZmZlcik7CiAgICAgICAgIG1hcHBlZEJ1ZmZlcnMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUobWFw
cGVkQnVmZmVyKSk7Ci0gICAgICAgIHByaXYtPmJ1cy0+c2V0Q2hhbm5lbE1lbW9yeShpLCByZWlu
dGVycHJldF9jYXN0PGZsb2F0Kj4obWFwcGVkQnVmZmVyc1tpXS5kYXRhKCkpLCBwcml2LT5mcmFt
ZXNUb1B1bGwpOworICAgICAgICBwcml2LT5idXMtPnNldENoYW5uZWxNZW1vcnkoaSwgcmVpbnRl
cnByZXRfY2FzdDxmbG9hdCo+KG1hcHBlZEJ1ZmZlcnNbaV0tPmRhdGEoKSksIHByaXYtPmZyYW1l
c1RvUHVsbCk7CiAgICAgICAgIGNoYW5uZWxCdWZmZXJMaXN0LnVuY2hlY2tlZEFwcGVuZChXVEZN
b3ZlKGJ1ZmZlcikpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcAppbmRleCAw
YmE0NzM5YTFkZTVkNDIxNjhmZWVkN2EwNWI4NjgyZDYwNTdhOGIxLi5jMzI1MzliMmRmMWYzMWEw
ZGM5YzhmNDU5MmRiOGY2YTcwYTFlYmE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcApA
QCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiR3N0QWxsb2NhdG9yRmFzdE1hbGxvYy5oIgog
I2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRl
IDxnc3QvYXVkaW8vYXVkaW8taW5mby5oPgogI2luY2x1ZGUgPGdzdC9nc3QuaD4KICNpbmNsdWRl
IDxtdXRleD4KQEAgLTM1Nyw2ICszNTgsMTUgQEAgdm9pZCBjb25uZWN0U2ltcGxlQnVzTWVzc2Fn
ZUNhbGxiYWNrKEdzdEVsZW1lbnQqIHBpcGVsaW5lKQogICAgIGdfc2lnbmFsX2Nvbm5lY3QoYnVz
LmdldCgpLCAibWVzc2FnZSIsIEdfQ0FMTEJBQ0soc2ltcGxlQnVzTWVzc2FnZUNhbGxiYWNrKSwg
cGlwZWxpbmUpOwogfQogCitSZWY8U2hhcmVkQnVmZmVyPiBHc3RNYXBwZWRCdWZmZXI6OmNyZWF0
ZVNoYXJlZEJ1ZmZlcigpCit7CisgICAgLy8gU2hhcmVkQnVmZmVyIHByb3ZpZGVzIGEgcmVhZC1v
bmx5IHZpZXcgb24gd2hhdCBpdCBleHBlY3RzIGFyZQorICAgIC8vIGltbXV0YWJsZSBkYXRhLiBE
byBub3QgY3JlYXRlIG9uZSBpcyB3cml0YWJsZSBhbmQgaGVuY2UgbXV0YWJsZS4KKyAgICBSRUxF
QVNFX0FTU0VSVChpc1NoYXJhYmxlKCkpOworCisgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3Jl
YXRlKCp0aGlzKTsKK30KKwogfQogCiAjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJD
b21tb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3Ry
ZWFtZXJDb21tb24uaAppbmRleCAyZWYxNTUwMmEwMDU2MzFlZTRkMDdmN2ZhMzJiNTRmNDY5OGNm
YmM4Li41Y2I3MTdkM2JmNDE1NzRiZDk2ZDBmYzBjZjE1MDMxN2E5ZTQxOTg5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29t
bW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dT
dHJlYW1lckNvbW1vbi5oCkBAIC0yNywxMCArMjcsMTIgQEAKICNpbmNsdWRlIDxnc3QvdmlkZW8v
dmlkZW8tZm9ybWF0Lmg+CiAjaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLWluZm8uaD4KICNpbmNs
dWRlIDx3dGYvTWVkaWFUaW1lLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVk
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW50U2l6ZTsKK2NsYXNzIFNoYXJl
ZEJ1ZmZlcjsKIAogaW5saW5lIGJvb2wgd2Via2l0R3N0Q2hlY2tWZXJzaW9uKGd1aW50IG1ham9y
LCBndWludCBtaW5vciwgZ3VpbnQgbWljcm8pCiB7CkBAIC03Nyw1MSArNzksNDcgQEAgaW5saW5l
IEdzdENsb2NrVGltZSB0b0dzdENsb2NrVGltZShjb25zdCBNZWRpYVRpbWUgJm1lZGlhVGltZSkK
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R3N0Q2xvY2tUaW1lPih0b0dzdFVuc2lnbmVkNjRUaW1l
KG1lZGlhVGltZSkpOwogfQogCi1jbGFzcyBHc3RNYXBwZWRCdWZmZXIgewotICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEdzdE1hcHBlZEJ1ZmZlcik7CitjbGFzcyBHc3RNYXBwZWRCdWZmZXIgOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8R3N0TWFwcGVkQnVmZmVyPiB7CiBwdWJsaWM6Ci0K
LSAgICBHc3RNYXBwZWRCdWZmZXIoR3N0TWFwcGVkQnVmZmVyJiYgb3RoZXIpCi0gICAgICAgIDog
bV9idWZmZXIob3RoZXIubV9idWZmZXIpCi0gICAgICAgICwgbV9pbmZvKG90aGVyLm1faW5mbykK
LSAgICAgICAgLCBtX2lzVmFsaWQob3RoZXIubV9pc1ZhbGlkKQotICAgIHsKLSAgICAgICAgb3Ro
ZXIubV9pc1ZhbGlkID0gZmFsc2U7Ci0gICAgfQotCi0gICAgR3N0TWFwcGVkQnVmZmVyKEdzdEJ1
ZmZlciogYnVmZmVyLCBHc3RNYXBGbGFncyBmbGFncykKLSAgICAgICAgOiBtX2J1ZmZlcihidWZm
ZXIpCisgICAgc3RhdGljIFJlZlB0cjxHc3RNYXBwZWRCdWZmZXI+IGNyZWF0ZShHc3RCdWZmZXIq
IGJ1ZmZlciwgR3N0TWFwRmxhZ3MgZmxhZ3MpCiAgICAgewotICAgICAgICBtX2lzVmFsaWQgPSBn
c3RfYnVmZmVyX21hcChtX2J1ZmZlciwgJm1faW5mbywgZmxhZ3MpOworICAgICAgICBHc3RNYXBJ
bmZvIGluZm87CisgICAgICAgIGlmICghZ3N0X2J1ZmZlcl9tYXAoYnVmZmVyLCAmaW5mbywgZmxh
Z3MpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgR3N0TWFwcGVkQnVmZmVyKGJ1ZmZlciwgV1RGTW92ZShpbmZvKSkpOwogICAgIH0KIAog
ICAgIC8vIFVuZm9ydHVuYXRlbHksIEdTVF9NQVBfUkVBRFdSSVRFIGlzIGRlZmluZWQgb3V0IG9m
IGxpbmUgZnJvbSB0aGUgTWFwRmxhZ3MKICAgICAvLyBlbnVtIGFzIGFuIGludCwgYW5kIEMrKyBp
cyBjYXJlZnVsIHRvIG5vdCBpbXBsaWNpdHkgY29udmVydCBpdCB0byBhbiBlbnVtLgotICAgIEdz
dE1hcHBlZEJ1ZmZlcihHc3RCdWZmZXIqIGJ1ZmZlciwgaW50IGZsYWdzKQotICAgICAgICA6IEdz
dE1hcHBlZEJ1ZmZlcihidWZmZXIsIHN0YXRpY19jYXN0PEdzdE1hcEZsYWdzPihmbGFncykpIHsg
fQorICAgIHN0YXRpYyBSZWZQdHI8R3N0TWFwcGVkQnVmZmVyPiBjcmVhdGUoR3N0QnVmZmVyKiBi
dWZmZXIsIGludCBmbGFncykKKyAgICB7CisgICAgICAgIHJldHVybiBHc3RNYXBwZWRCdWZmZXI6
OmNyZWF0ZShidWZmZXIsIHN0YXRpY19jYXN0PEdzdE1hcEZsYWdzPihmbGFncykpOworICAgIH0K
IAogICAgIH5Hc3RNYXBwZWRCdWZmZXIoKQogICAgIHsKLSAgICAgICAgaWYgKG1faXNWYWxpZCkK
LSAgICAgICAgICAgIGdzdF9idWZmZXJfdW5tYXAobV9idWZmZXIsICZtX2luZm8pOwotICAgICAg
ICBtX2lzVmFsaWQgPSBmYWxzZTsKKyAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcChtX2J1ZmZlciwg
Jm1faW5mbyk7CiAgICAgfQogCi0gICAgdWludDhfdCogZGF0YSgpIHsgQVNTRVJUKG1faXNWYWxp
ZCk7IHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90Kj4obV9pbmZvLmRhdGEpOyB9Ci0gICAgY29u
c3QgdWludDhfdCogZGF0YSgpIGNvbnN0IHsgQVNTRVJUKG1faXNWYWxpZCk7IHJldHVybiBzdGF0
aWNfY2FzdDx1aW50OF90Kj4obV9pbmZvLmRhdGEpOyB9Ci0KLSAgICBzaXplX3Qgc2l6ZSgpIGNv
bnN0IHsgQVNTRVJUKG1faXNWYWxpZCk7IHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG1faW5m
by5zaXplKTsgfQotCi0gICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJu
IG1faXNWYWxpZDsgfQorICAgIHVpbnQ4X3QqIGRhdGEoKSB7IHJldHVybiBzdGF0aWNfY2FzdDx1
aW50OF90Kj4obV9pbmZvLmRhdGEpOyB9CisgICAgY29uc3QgdWludDhfdCogZGF0YSgpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtX2luZm8uZGF0YSk7IH0KKyAgICBzaXpl
X3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4obV9pbmZvLnNpemUp
OyB9CisgICAgYm9vbCBpc1NoYXJhYmxlKCkgY29uc3QgeyByZXR1cm4gIShtX2luZm8uZmxhZ3Mg
JiBHU1RfTUFQX1dSSVRFKTsgfQorICAgIFJlZjxTaGFyZWRCdWZmZXI+IGNyZWF0ZVNoYXJlZEJ1
ZmZlcigpOwogCiBwcml2YXRlOgorICAgIEdzdE1hcHBlZEJ1ZmZlcihHc3RCdWZmZXIqIGJ1ZmZl
ciwgR3N0TWFwSW5mbyYmIGluZm8pCisgICAgICAgIDogbV9idWZmZXIoYnVmZmVyKQorICAgICAg
ICAsIG1faW5mbyhXVEZNb3ZlKGluZm8pKQorICAgIHsKKyAgICB9CisKICAgICBmcmllbmQgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEdzdE1hcHBlZEJ1ZmZlciYsIGNvbnN0IEdzdE1hcHBlZEJ1ZmZl
ciYpOwogICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgR3N0TWFwcGVkQnVmZmVyJiwg
Y29uc3QgR3N0QnVmZmVyKik7CiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBHc3RC
dWZmZXIqIGEsIGNvbnN0IEdzdE1hcHBlZEJ1ZmZlciYgYikgeyByZXR1cm4gb3BlcmF0b3I9PShi
LCBhKTsgfQogCiAgICAgR3N0QnVmZmVyKiBtX2J1ZmZlciB7IG51bGxwdHIgfTsKICAgICBHc3RN
YXBJbmZvIG1faW5mbzsKLSAgICBib29sIG1faXNWYWxpZCB7IGZhbHNlIH07CiB9OwogCiBpbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEdzdE1hcHBlZEJ1ZmZlciYgYSwgY29uc3QgR3N0TWFw
cGVkQnVmZmVyJiBiKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL0luYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0luYmFuZFRleHRUcmFja1ByaXZh
dGVHU3RyZWFtZXIuY3BwCmluZGV4IGMyZGQxMjMyMGMxZDg5YzE5NTYyYTYxZTgyNmQ5MGZjMGU3
NmJhNDkuLmZiZmZlZTYwMWNmOTM2ZTcxZmQyODU3NzU5ZGQzNGJiMzkzY2I4MjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbmJhbmRUZXh0
VHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lci5jcHAKQEAg
LTExMiwxNiArMTEyLDE2IEBAIHZvaWQgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6
bm90aWZ5VHJhY2tPZlNhbXBsZSgpCiAgICAgICAgICAgICBHU1RfV0FSTklORygiVHJhY2sgJWQg
Z290IHNhbXBsZSB3aXRoIG5vIGJ1ZmZlci4iLCBtX2luZGV4KTsKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICB9Ci0gICAgICAgIEdzdE1hcHBlZEJ1ZmZlciBtYXBwZWRCdWZmZXIoYnVm
ZmVyLCBHU1RfTUFQX1JFQUQpOworICAgICAgICBhdXRvIG1hcHBlZEJ1ZmZlciA9IEdzdE1hcHBl
ZEJ1ZmZlcjo6Y3JlYXRlKGJ1ZmZlciwgR1NUX01BUF9SRUFEKTsKICAgICAgICAgQVNTRVJUKG1h
cHBlZEJ1ZmZlcik7CiAgICAgICAgIGlmICghbWFwcGVkQnVmZmVyKSB7CiAgICAgICAgICAgICBH
U1RfV0FSTklORygiVHJhY2sgJWQgdW5hYmxlIHRvIG1hcCBidWZmZXIuIiwgbV9pbmRleCk7CiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIEdTVF9JTkZPKCJUcmFj
ayAlZCBwYXJzaW5nIHNhbXBsZTogJS4qcyIsIG1faW5kZXgsIHN0YXRpY19jYXN0PGludD4obWFw
cGVkQnVmZmVyLnNpemUoKSksCi0gICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNoYXIqPiht
YXBwZWRCdWZmZXIuZGF0YSgpKSk7Ci0gICAgICAgIGNsaWVudCgpLT5wYXJzZVdlYlZUVEN1ZURh
dGEocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obWFwcGVkQnVmZmVyLmRhdGEoKSksIG1hcHBlZEJ1
ZmZlci5zaXplKCkpOworICAgICAgICBHU1RfSU5GTygiVHJhY2sgJWQgcGFyc2luZyBzYW1wbGU6
ICUuKnMiLCBtX2luZGV4LCBzdGF0aWNfY2FzdDxpbnQ+KG1hcHBlZEJ1ZmZlci0+c2l6ZSgpKSwK
KyAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1hcHBlZEJ1ZmZlci0+ZGF0YSgp
KSk7CisgICAgICAgIGNsaWVudCgpLT5wYXJzZVdlYlZUVEN1ZURhdGEocmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4obWFwcGVkQnVmZmVyLT5kYXRhKCkpLCBtYXBwZWRCdWZmZXItPnNpemUoKSk7CiAg
ICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvZW1lL0dTdHJlYW1lckVNRVV0aWxpdGllcy5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9HU3RyZWFtZXJFTUVVdGlsaXRpZXMuaAppbmRl
eCBiZWZmNzZhNWE2YThlNTU4MjZkNDc5YmQ2MGMzOGJlYjhiYjMwOGEyLi44YTkyY2EzYjFlYTg4
OTg2MGE5ZTg0ZDhkNWY1YTQ0NmU3N2ExMzYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0dTdHJlYW1lckVNRVV0aWxpdGllcy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvR1N0cmVh
bWVyRU1FVXRpbGl0aWVzLmgKQEAgLTQwLDEyICs0MCwxMiBAQCBwdWJsaWM6CiAgICAgSW5pdERh
dGEoY29uc3QgU3RyaW5nJiBzeXN0ZW1JZCwgR3N0QnVmZmVyKiBpbml0RGF0YSkKICAgICAgICAg
OiBtX3N5c3RlbUlkKHN5c3RlbUlkKQogICAgIHsKLSAgICAgICAgR3N0TWFwcGVkQnVmZmVyIG1h
cHBlZEluaXREYXRhKGluaXREYXRhLCBHU1RfTUFQX1JFQUQpOworICAgICAgICBhdXRvIG1hcHBl
ZEluaXREYXRhID0gR3N0TWFwcGVkQnVmZmVyOjpjcmVhdGUoaW5pdERhdGEsIEdTVF9NQVBfUkVB
RCk7CiAgICAgICAgIGlmICghbWFwcGVkSW5pdERhdGEpIHsKICAgICAgICAgICAgIEdTVF9FUlJP
UigiY2Fubm90IG1hcCAlcyBwcm90ZWN0aW9uIGRhdGEiLCBzeXN0ZW1JZC51dGY4KCkuZGF0YSgp
KTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9Ci0gICAgICAg
IG1fcGF5bG9hZCA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKG1hcHBlZEluaXREYXRhLmRhdGEoKSwg
bWFwcGVkSW5pdERhdGEuc2l6ZSgpKTsKKyAgICAgICAgbV9wYXlsb2FkID0gbWFwcGVkSW5pdERh
dGEtPmNyZWF0ZVNoYXJlZEJ1ZmZlcigpOwogICAgIH0KIAogICAgIHZvaWQgYXBwZW5kKEluaXRE
YXRhJiYgaW5pdERhdGEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvZW1lL1dlYktpdENsZWFyS2V5RGVjcnlwdG9yR1N0cmVhbWVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xl
YXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwCmluZGV4IGY5NDFlNTI4ZjQ3Y2JkMDY5NTc5YmM1
ZTYzMzU4MWU2YjYxMGM3MjMuLjE0ZWVjYzBiMTVhN2E0OWY0NGNmMmU4MzI0NWY3MTBlMDY3ODZh
OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNyeXB0b3JHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUvV2ViS2l0Q2xlYXJLZXlEZWNy
eXB0b3JHU3RyZWFtZXIuY3BwCkBAIC0xNTAsMTEgKzE1MCwxMSBAQCBzdGF0aWMgZ2Jvb2xlYW4g
d2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRvckhhbmRsZUtleVJlc3BvbnNlKFdlYktpdE1lZGlh
Q29tbW9uRQogICAgIHJldHVybiBUUlVFOwogfQogCi1zdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0TWVk
aWFDbGVhcktleURlY3J5cHRvckZpbmRBbmRTZXRLZXkoV2ViS2l0TWVkaWFDbGVhcktleURlY3J5
cHRQcml2YXRlKiBwcml2LCBjb25zdCBXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXImIGtleUlEQnVm
ZmVyKQorc3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JGaW5kQW5k
U2V0S2V5KFdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0UHJpdmF0ZSogcHJpdiwgUmVmUHRyPFdl
YkNvcmU6OkdzdE1hcHBlZEJ1ZmZlcj4mJiBrZXlJREJ1ZmZlcikKIHsKICAgICBHUmVmUHRyPEdz
dEJ1ZmZlcj4ga2V5QnVmZmVyOwogICAgIGZvciAoYXV0byYga2V5IDogcHJpdi0+a2V5cykgewot
ICAgICAgICBpZiAoa2V5LmtleUlELmdldCgpID09IGtleUlEQnVmZmVyKSB7CisgICAgICAgIGlm
IChrZXkua2V5SUQuZ2V0KCkgPT0gKmtleUlEQnVmZmVyKSB7CiAgICAgICAgICAgICBrZXlCdWZm
ZXIgPSBrZXkua2V5VmFsdWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTY1
LDE0ICsxNjUsMTQgQEAgc3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlhQ2xlYXJLZXlEZWNyeXB0
b3JGaW5kQW5kU2V0S2V5KFdlYktpdE1lZGlhQ2xlYXJLZXlEZWMKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIAotICAgIFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlciBtYXBwZWRLZXlWYWx1
ZUJ1ZmZlcihrZXlCdWZmZXIuZ2V0KCksIEdTVF9NQVBfUkVBRCk7CisgICAgYXV0byBtYXBwZWRL
ZXlWYWx1ZUJ1ZmZlciA9IFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKGtleUJ1ZmZl
ci5nZXQoKSwgR1NUX01BUF9SRUFEKTsKICAgICBpZiAoIW1hcHBlZEtleVZhbHVlQnVmZmVyKSB7
CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QocHJpdiwgIkZhaWxlZCB0byBtYXAgZGVjcnlwdGlv
biBrZXkiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIEFTU0VSVChtYXBw
ZWRLZXlWYWx1ZUJ1ZmZlci5zaXplKCkgPT0gQ0xFQVJLRVlfU0laRSk7Ci0gICAgaWYgKGdjcnlf
ZXJyb3JfdCBlcnJvciA9IGdjcnlfY2lwaGVyX3NldGtleShwcml2LT5oYW5kbGUsIG1hcHBlZEtl
eVZhbHVlQnVmZmVyLmRhdGEoKSwgbWFwcGVkS2V5VmFsdWVCdWZmZXIuc2l6ZSgpKSkgeworICAg
IEFTU0VSVChtYXBwZWRLZXlWYWx1ZUJ1ZmZlci0+c2l6ZSgpID09IENMRUFSS0VZX1NJWkUpOwor
ICAgIGlmIChnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRrZXkocHJpdi0+aGFu
ZGxlLCBtYXBwZWRLZXlWYWx1ZUJ1ZmZlci0+ZGF0YSgpLCBtYXBwZWRLZXlWYWx1ZUJ1ZmZlci0+
c2l6ZSgpKSkgewogICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHByaXYsICJnY3J5X2NpcGhlcl9z
ZXRrZXkgZmFpbGVkOiAlcyIsIGdwZ19zdHJlcnJvcihlcnJvcikpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQpAQCAtMTg4LDE5ICsxODgsMTkgQEAgc3RhdGljIGdib29sZWFuIHdlYktp
dE1lZGlhQ2xlYXJLZXlEZWNyeXB0b3JEZWNyeXB0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlv
bkQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIFdlYkNvcmU6OkdzdE1hcHBl
ZEJ1ZmZlciBtYXBwZWRJVkJ1ZmZlcihpdkJ1ZmZlciwgR1NUX01BUF9SRUFEKTsKKyAgICBhdXRv
IG1hcHBlZElWQnVmZmVyID0gV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjpjcmVhdGUoaXZCdWZm
ZXIsIEdTVF9NQVBfUkVBRCk7CiAgICAgaWYgKCFtYXBwZWRJVkJ1ZmZlcikgewogICAgICAgICBH
U1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gbWFwIElWIik7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKICAgICB1aW50OF90IGN0cltDTEVBUktFWV9TSVpFXTsKLSAgICBp
ZiAobWFwcGVkSVZCdWZmZXIuc2l6ZSgpID09IDgpIHsKKyAgICBpZiAobWFwcGVkSVZCdWZmZXIt
PnNpemUoKSA9PSA4KSB7CiAgICAgICAgIG1lbXNldChjdHIgKyA4LCAwLCA4KTsKLSAgICAgICAg
bWVtY3B5KGN0ciwgbWFwcGVkSVZCdWZmZXIuZGF0YSgpLCA4KTsKKyAgICAgICAgbWVtY3B5KGN0
ciwgbWFwcGVkSVZCdWZmZXItPmRhdGEoKSwgOCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNT
RVJUKG1hcHBlZElWQnVmZmVyLnNpemUoKSA9PSBDTEVBUktFWV9TSVpFKTsKLSAgICAgICAgbWVt
Y3B5KGN0ciwgbWFwcGVkSVZCdWZmZXIuZGF0YSgpLCBDTEVBUktFWV9TSVpFKTsKKyAgICAgICAg
bWVtY3B5KGN0ciwgbWFwcGVkSVZCdWZmZXItPmRhdGEoKSwgQ0xFQVJLRVlfU0laRSk7CiAgICAg
fQogCiAgICAgV2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRQcml2YXRlKiBwcml2ID0gV0VCS0lU
X01FRElBX0NLX0RFQ1JZUFRfR0VUX1BSSVZBVEUoV0VCS0lUX01FRElBX0NLX0RFQ1JZUFQoc2Vs
ZikpOwpAQCAtMjE2LDMwICsyMTYsMzAgQEAgc3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlhQ2xl
YXJLZXlEZWNyeXB0b3JEZWNyeXB0KFdlYktpdE1lZGlhQ29tbW9uRW5jcnlwdGlvbkQKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIFdlYkNvcmU6OkdzdE1hcHBlZEJ1ZmZlciBt
YXBwZWRLZXlJZEJ1ZmZlcihrZXlJREJ1ZmZlciwgR1NUX01BUF9SRUFEKTsKKyAgICBhdXRvIG1h
cHBlZEtleUlkQnVmZmVyID0gV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyOjpjcmVhdGUoa2V5SURC
dWZmZXIsIEdTVF9NQVBfUkVBRCk7CiAgICAgaWYgKCFtYXBwZWRLZXlJZEJ1ZmZlcikgewogICAg
ICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gbWFwIGtleSBpZCBidWZmZXIi
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIFdlYkNvcmU6OkdzdE1hcHBl
ZEJ1ZmZlciBtYXBwZWRCdWZmZXIoYnVmZmVyLCBHU1RfTUFQX1JFQURXUklURSk7CisgICAgYXV0
byBtYXBwZWRCdWZmZXIgPSBXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZShidWZmZXIs
IEdTVF9NQVBfUkVBRFdSSVRFKTsKICAgICBpZiAoIW1hcHBlZEJ1ZmZlcikgewogICAgICAgICBH
U1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gbWFwIGJ1ZmZlciIpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgd2ViS2l0TWVkaWFDbGVhcktleURlY3J5cHRvckZp
bmRBbmRTZXRLZXkocHJpdiwgbWFwcGVkS2V5SWRCdWZmZXIpOworICAgIHdlYktpdE1lZGlhQ2xl
YXJLZXlEZWNyeXB0b3JGaW5kQW5kU2V0S2V5KHByaXYsIFdURk1vdmUobWFwcGVkS2V5SWRCdWZm
ZXIpKTsKIAogICAgIHVuc2lnbmVkIHBvc2l0aW9uID0gMDsKICAgICB1bnNpZ25lZCBzYW1wbGVJ
bmRleCA9IDA7CiAKICAgICBpZiAoIXN1YlNhbXBsZUNvdW50KSB7CiAgICAgICAgIC8vIEZ1bGwg
c2FtcGxlIGVuY3J5cHRpb24uCi0gICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc2VsZiwgImZ1bGwg
c2FtcGxlIGVuY3J5cHRpb246ICV6dSBlbmNyeXB0ZWQgYnl0ZXMiLCBtYXBwZWRCdWZmZXIuc2l6
ZSgpKTsKKyAgICAgICAgR1NUX1RSQUNFX09CSkVDVChzZWxmLCAiZnVsbCBzYW1wbGUgZW5jcnlw
dGlvbjogJXp1IGVuY3J5cHRlZCBieXRlcyIsIG1hcHBlZEJ1ZmZlci0+c2l6ZSgpKTsKIAogICAg
ICAgICAvLyBDaGVjayBpZiB0aGUgYnVmZmVyIGlzIGVtcHR5LgotICAgICAgICBpZiAobWFwcGVk
QnVmZmVyLnNpemUoKSkgewotICAgICAgICAgICAgY2lwaGVyRXJyb3IgPSBnY3J5X2NpcGhlcl9k
ZWNyeXB0KHByaXYtPmhhbmRsZSwgbWFwcGVkQnVmZmVyLmRhdGEoKSwgbWFwcGVkQnVmZmVyLnNp
emUoKSwgMCwgMCk7CisgICAgICAgIGlmIChtYXBwZWRCdWZmZXItPnNpemUoKSkgeworICAgICAg
ICAgICAgY2lwaGVyRXJyb3IgPSBnY3J5X2NpcGhlcl9kZWNyeXB0KHByaXYtPmhhbmRsZSwgbWFw
cGVkQnVmZmVyLT5kYXRhKCksIG1hcHBlZEJ1ZmZlci0+c2l6ZSgpLCAwLCAwKTsKICAgICAgICAg
ICAgIGlmIChjaXBoZXJFcnJvcikgewogICAgICAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qo
c2VsZiwgImZ1bGwgc2FtcGxlIGRlY3J5cHRpb24gZmFpbGVkOiAlcyIsIGdwZ19zdHJlcnJvcihj
aXBoZXJFcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI1NSwxNiAr
MjU1LDE2IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRNZWRpYUNsZWFyS2V5RGVjcnlwdG9yRGVj
cnlwdChXZWJLaXRNZWRpYUNvbW1vbkVuY3J5cHRpb25ECiAgICAgfQogCiAgICAgLy8gU3Vic2Ft
cGxlIGVuY3J5cHRpb24uCi0gICAgV2ViQ29yZTo6R3N0TWFwcGVkQnVmZmVyIG1hcHBlZFN1YlNh
bXBsZXNCdWZmZXIoc3ViU2FtcGxlc0J1ZmZlciwgR1NUX01BUF9SRUFEKTsKKyAgICBhdXRvIG1h
cHBlZFN1YlNhbXBsZXNCdWZmZXIgPSBXZWJDb3JlOjpHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZShz
dWJTYW1wbGVzQnVmZmVyLCBHU1RfTUFQX1JFQUQpOwogICAgIGlmICghbWFwcGVkU3ViU2FtcGxl
c0J1ZmZlcikgewogICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJGYWlsZWQgdG8gbWFw
IHN1YnNhbXBsZSBidWZmZXIiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAg
IEdVbmlxdWVQdHI8R3N0Qnl0ZVJlYWRlcj4gcmVhZGVyKGdzdF9ieXRlX3JlYWRlcl9uZXcobWFw
cGVkU3ViU2FtcGxlc0J1ZmZlci5kYXRhKCksIG1hcHBlZFN1YlNhbXBsZXNCdWZmZXIuc2l6ZSgp
KSk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAicG9zaXRpb246ICVkLCBzaXplOiAlenUi
LCBwb3NpdGlvbiwgbWFwcGVkQnVmZmVyLnNpemUoKSk7CisgICAgR1VuaXF1ZVB0cjxHc3RCeXRl
UmVhZGVyPiByZWFkZXIoZ3N0X2J5dGVfcmVhZGVyX25ldyhtYXBwZWRTdWJTYW1wbGVzQnVmZmVy
LT5kYXRhKCksIG1hcHBlZFN1YlNhbXBsZXNCdWZmZXItPnNpemUoKSkpOworICAgIEdTVF9ERUJV
R19PQkpFQ1Qoc2VsZiwgInBvc2l0aW9uOiAlZCwgc2l6ZTogJXp1IiwgcG9zaXRpb24sIG1hcHBl
ZEJ1ZmZlci0+c2l6ZSgpKTsKIAotICAgIHdoaWxlIChwb3NpdGlvbiA8IG1hcHBlZEJ1ZmZlci5z
aXplKCkpIHsKKyAgICB3aGlsZSAocG9zaXRpb24gPCBtYXBwZWRCdWZmZXItPnNpemUoKSkgewog
ICAgICAgICBndWludDE2IG5CeXRlc0NsZWFyID0gMDsKICAgICAgICAgZ3VpbnQzMiBuQnl0ZXNF
bmNyeXB0ZWQgPSAwOwogCkBAIC0yNzcsMTQgKzI3NywxNCBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Vi
S2l0TWVkaWFDbGVhcktleURlY3J5cHRvckRlY3J5cHQoV2ViS2l0TWVkaWFDb21tb25FbmNyeXB0
aW9uRAogICAgICAgICAgICAgc2FtcGxlSW5kZXgrKzsKICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIG5CeXRlc0NsZWFyID0gMDsKLSAgICAgICAgICAgIG5CeXRlc0VuY3J5cHRlZCA9IG1h
cHBlZEJ1ZmZlci5zaXplKCkgLSBwb3NpdGlvbjsKKyAgICAgICAgICAgIG5CeXRlc0VuY3J5cHRl
ZCA9IG1hcHBlZEJ1ZmZlci0+c2l6ZSgpIC0gcG9zaXRpb247CiAgICAgICAgIH0KIAotICAgICAg
ICBHU1RfVFJBQ0VfT0JKRUNUKHNlbGYsICJzdWJzYW1wbGUgaW5kZXggJXUgLSAlaHUgYnl0ZXMg
Y2xlYXIgKHRvZG89JXp1KSIsIHNhbXBsZUluZGV4LCBuQnl0ZXNDbGVhciwgbWFwcGVkQnVmZmVy
LnNpemUoKSAtIHBvc2l0aW9uKTsKKyAgICAgICAgR1NUX1RSQUNFX09CSkVDVChzZWxmLCAic3Vi
c2FtcGxlIGluZGV4ICV1IC0gJWh1IGJ5dGVzIGNsZWFyICh0b2RvPSV6dSkiLCBzYW1wbGVJbmRl
eCwgbkJ5dGVzQ2xlYXIsIG1hcHBlZEJ1ZmZlci0+c2l6ZSgpIC0gcG9zaXRpb24pOwogICAgICAg
ICBwb3NpdGlvbiArPSBuQnl0ZXNDbGVhcjsKICAgICAgICAgaWYgKG5CeXRlc0VuY3J5cHRlZCkg
ewotICAgICAgICAgICAgR1NUX1RSQUNFX09CSkVDVChzZWxmLCAic3Vic2FtcGxlIGluZGV4ICV1
IC0gJXUgYnl0ZXMgZW5jcnlwdGVkICh0b2RvPSV6dSkiLCBzYW1wbGVJbmRleCwgbkJ5dGVzRW5j
cnlwdGVkLCBtYXBwZWRCdWZmZXIuc2l6ZSgpIC0gcG9zaXRpb24pOwotICAgICAgICAgICAgY2lw
aGVyRXJyb3IgPSBnY3J5X2NpcGhlcl9kZWNyeXB0KHByaXYtPmhhbmRsZSwgbWFwcGVkQnVmZmVy
LmRhdGEoKSArIHBvc2l0aW9uLCBuQnl0ZXNFbmNyeXB0ZWQsIDAsIDApOworICAgICAgICAgICAg
R1NUX1RSQUNFX09CSkVDVChzZWxmLCAic3Vic2FtcGxlIGluZGV4ICV1IC0gJXUgYnl0ZXMgZW5j
cnlwdGVkICh0b2RvPSV6dSkiLCBzYW1wbGVJbmRleCwgbkJ5dGVzRW5jcnlwdGVkLCBtYXBwZWRC
dWZmZXItPnNpemUoKSAtIHBvc2l0aW9uKTsKKyAgICAgICAgICAgIGNpcGhlckVycm9yID0gZ2Ny
eV9jaXBoZXJfZGVjcnlwdChwcml2LT5oYW5kbGUsIG1hcHBlZEJ1ZmZlci0+ZGF0YSgpICsgcG9z
aXRpb24sIG5CeXRlc0VuY3J5cHRlZCwgMCwgMCk7CiAgICAgICAgICAgICBpZiAoY2lwaGVyRXJy
b3IpIHsKICAgICAgICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNlbGYsICJzdWIgc2FtcGxl
IGluZGV4ICV1IGRlY3J5cHRpb24gZmFpbGVkOiAlcyIsIHNhbXBsZUluZGV4LCBncGdfc3RyZXJy
b3IoY2lwaGVyRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dT
dHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAK
aW5kZXggZGVkYzA3OWIyYTFiMzU3YzUwZDcxYThkYTQxOTlhYmM0YzU2ZmEyNi4uNTMzOGViM2Q5
M2YxODkwMDdlZTUwMTllMTEzZjk1ZWRhZDhmYWQ2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFtZXJBdWRpb0NhcHR1
cmVTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9Nb2NrR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlLmNwcApAQCAtNzgsMTMgKzc4
LDEzIEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgR3N0QnVmZmVyKiBidWZmZXIgPSBnc3RfYnVm
ZmVyX25ld19hbGxvY2F0ZShudWxscHRyLCBiaXBCb3BDb3VudCAqIG1fc3RyZWFtRm9ybWF0LT5i
eXRlc1BlckZyYW1lKCksIG51bGxwdHIpOwogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IEdzdE1hcHBlZEJ1ZmZlciBtYXAoYnVmZmVyLCBHU1RfTUFQX1dSSVRFKTsKKyAgICAgICAgICAg
ICAgICBhdXRvIG1hcCA9IEdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKGJ1ZmZlciwgR1NUX01BUF9X
UklURSk7CiAKICAgICAgICAgICAgICAgICBpZiAoIW11dGVkKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgbWVtY3B5KG1hcC5kYXRhKCksICZtX2JpcEJvcEJ1ZmZlcltiaXBCb3BTdGFydF0sIHNp
emVvZihmbG9hdCkgKiBiaXBCb3BDb3VudCk7Ci0gICAgICAgICAgICAgICAgICAgIGFkZEh1bShz
X0h1bVZvbHVtZSwgc19IdW1GcmVxdWVuY3ksIHNhbXBsZVJhdGUoKSwgbV9zYW1wbGVzUmVuZGVy
ZWQsIChmbG9hdCopbWFwLmRhdGEoKSwgYmlwQm9wQ291bnQpOworICAgICAgICAgICAgICAgICAg
ICBtZW1jcHkobWFwLT5kYXRhKCksICZtX2JpcEJvcEJ1ZmZlcltiaXBCb3BTdGFydF0sIHNpemVv
ZihmbG9hdCkgKiBiaXBCb3BDb3VudCk7CisgICAgICAgICAgICAgICAgICAgIGFkZEh1bShzX0h1
bVZvbHVtZSwgc19IdW1GcmVxdWVuY3ksIHNhbXBsZVJhdGUoKSwgbV9zYW1wbGVzUmVuZGVyZWQs
IChmbG9hdCopbWFwLT5kYXRhKCksIGJpcEJvcENvdW50KTsKICAgICAgICAgICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgbWVtc2V0KG1hcC5kYXRhKCksIDAsIHNpemVvZihmbG9h
dCkgKiBiaXBCb3BDb3VudCk7CisgICAgICAgICAgICAgICAgICAgIG1lbXNldChtYXAtPmRhdGEo
KSwgMCwgc2l6ZW9mKGZsb2F0KSAqIGJpcEJvcENvdW50KTsKICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgZ3N0X2FwcF9zcmNfcHVzaF9idWZmZXIoR1NUX0FQUF9TUkMobV9zcmMuZ2V0KCkp
LCBidWZmZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUxpYldlYlJUQy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRn
b2luZ0F1ZGlvU291cmNlTGliV2ViUlRDLmNwcAppbmRleCA1ZTdmOTc3YTk2YjIxNzlkYjYxOGZl
ODAwYjJkNTYzNWRiOWQ2YTFmLi43MjAzZDdkMzYzYzdlMzdjOWQ3MDY5MzU4NzM3MGRjZDFmOWY2
YTcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlTGliV2ViUlRDLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2lu
Z0F1ZGlvU291cmNlTGliV2ViUlRDLmNwcApAQCAtMTE0LDkgKzExNCw5IEBAIHZvaWQgUmVhbHRp
bWVPdXRnb2luZ0F1ZGlvU291cmNlTGliV2ViUlRDOjpwdWxsQXVkaW9EYXRhKCkKICAgICAgICAg
aWYgKGlzU2lsZW5jZWQoKSkKICAgICAgICAgICAgIGdzdF9hdWRpb19mb3JtYXRfZmlsbF9zaWxl
bmNlKG1fb3V0cHV0U3RyZWFtRGVzY3JpcHRpb24tPmdldEluZm8oKS0+ZmluZm8sIG1fYXVkaW9C
dWZmZXIuZGF0YSgpLCBvdXRCdWZmZXJTaXplKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICBHc3RNYXBwZWRCdWZmZXIgaW5NYXAoaW5CdWZmZXIuZ2V0KCksIEdTVF9NQVBfUkVBRCk7Cisg
ICAgICAgICAgICBhdXRvIGluTWFwID0gR3N0TWFwcGVkQnVmZmVyOjpjcmVhdGUoaW5CdWZmZXIu
Z2V0KCksIEdTVF9NQVBfUkVBRCk7CiAKLSAgICAgICAgICAgIGdwb2ludGVyIGluWzFdID0geyBp
bk1hcC5kYXRhKCkgfTsKKyAgICAgICAgICAgIGdwb2ludGVyIGluWzFdID0geyBpbk1hcC0+ZGF0
YSgpIH07CiAgICAgICAgICAgICBncG9pbnRlciBvdXRbMV0gPSB7IG1fYXVkaW9CdWZmZXIuZGF0
YSgpIH07CiAgICAgICAgICAgICBpZiAoIWdzdF9hdWRpb19jb252ZXJ0ZXJfc2FtcGxlcyhtX3Nh
bXBsZUNvbnZlcnRlci5nZXQoKSwgc3RhdGljX2Nhc3Q8R3N0QXVkaW9Db252ZXJ0ZXJGbGFncz4o
MCksIGluLCBpbkNodW5rU2FtcGxlQ291bnQsIG91dCwgb3V0Q2h1bmtTYW1wbGVDb3VudCkpIHsK
ICAgICAgICAgICAgICAgICBHU1RfRVJST1IoIkNvdWxkIG5vdCBjb252ZXJ0IHNhbXBsZXMuIik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTGliV2ViUlRDLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2VMaWJXZWJSVEMuY3BwCmluZGV4IDllMzk2ZDkzYmNlNDI5NjhkNjg0YzIzMjRlMTIyZDQ1
ZDMyMWQ3ZGYuLjY5YmU5YjUzZThhNTc4MmUxMzFjYzk4ODQ5ZTNiYmQ4ZTJkOTJkM2YgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2VMaWJXZWJSVEMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3Vy
Y2VMaWJXZWJSVEMuY3BwCkBAIC04Niw4ICs4Niw4IEBAIHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJy
dGM6OlZpZGVvRnJhbWVCdWZmZXI+IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUxpYldlYlJU
CiAgICAgR1JlZlB0cjxHc3RCdWZmZXI+IGJ1ZmZlciA9IGFkb3B0R1JlZihnc3RfYnVmZmVyX25l
d19hbGxvY2F0ZShudWxscHRyLCBpbmZvLnNpemUsIG51bGxwdHIpKTsKICAgICBHUmVmUHRyPEdz
dENhcHM+IGNhcHMgPSBhZG9wdEdSZWYoZ3N0X3ZpZGVvX2luZm9fdG9fY2FwcygmaW5mbykpOwog
Ci0gICAgR3N0TWFwcGVkQnVmZmVyIG1hcChidWZmZXIuZ2V0KCksIEdTVF9NQVBfV1JJVEUpOwot
ICAgIG1lbXNldChtYXAuZGF0YSgpLCAwLCBpbmZvLnNpemUpOworICAgIGF1dG8gbWFwID0gR3N0
TWFwcGVkQnVmZmVyOjpjcmVhdGUoYnVmZmVyLmdldCgpLCBHU1RfTUFQX1dSSVRFKTsKKyAgICBt
ZW1zZXQobWFwLT5kYXRhKCksIDAsIGluZm8uc2l6ZSk7CiAKICAgICByZXR1cm4gR1N0cmVhbWVy
VmlkZW9GcmFtZUxpYldlYlJUQzo6Y3JlYXRlKGdzdF9zYW1wbGVfbmV3KGJ1ZmZlci5nZXQoKSwg
Y2Fwcy5nZXQoKSwgTlVMTCwgTlVMTCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL0dTdHJlYW1lclZpZGVvRW5jb2RlckZhY3Rv
cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL0dT
dHJlYW1lclZpZGVvRW5jb2RlckZhY3RvcnkuY3BwCmluZGV4IGJjMTJiNmNkZjBhOTgyN2MwOTQ1
MWU2OTAzYjA2MzY3NTIwYTc5ZDIuLmVlNzQwYjRhNGQyODhkYjMwNjYxMDA4M2RkNDNjNjE5ZDU1
NjdkYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xp
YndlYnJ0Yy9HU3RyZWFtZXJWaWRlb0VuY29kZXJGYWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvR1N0cmVhbWVyVmlkZW9FbmNvZGVy
RmFjdG9yeS5jcHAKQEAgLTM0MiwyMiArMzQyLDIyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgRnJhZ21lbnRpemUod2VicnRjOjpFbmNvZGVkSW1hZ2UqIGVuY29kZWRJbWFnZSwgc3RkOjp1
bmlxdWVfcHRyPHVpbnQ4X3RbXT4qIGVuY29kZWRJbWFnZUJ1ZmZlciwKICAgICAgICAgc2l6ZV90
KiBidWZmZXJTaXplLCBHc3RCdWZmZXIqIGJ1ZmZlciwgd2VicnRjOjpSVFBGcmFnbWVudGF0aW9u
SGVhZGVyKiBmcmFnbWVudGF0aW9uSW5mbykKICAgICB7Ci0gICAgICAgIEdzdE1hcHBlZEJ1ZmZl
ciBtYXAoYnVmZmVyLCBHU1RfTUFQX1JFQUQpOworICAgICAgICBhdXRvIG1hcCA9IEdzdE1hcHBl
ZEJ1ZmZlcjo6Y3JlYXRlKGJ1ZmZlciwgR1NUX01BUF9SRUFEKTsKIAotICAgICAgICBpZiAoKmJ1
ZmZlclNpemUgPCBtYXAuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBlbmNvZGVkSW1hZ2UtPl9zaXpl
ID0gbWFwLnNpemUoKTsKKyAgICAgICAgaWYgKCpidWZmZXJTaXplIDwgbWFwLT5zaXplKCkpIHsK
KyAgICAgICAgICAgIGVuY29kZWRJbWFnZS0+X3NpemUgPSBtYXAtPnNpemUoKTsKICAgICAgICAg
ICAgIGVuY29kZWRJbWFnZS0+X2J1ZmZlciA9IG5ldyB1aW50OF90W2VuY29kZWRJbWFnZS0+X3Np
emVdOwogICAgICAgICAgICAgZW5jb2RlZEltYWdlQnVmZmVyLT5yZXNldChlbmNvZGVkSW1hZ2Ut
Pl9idWZmZXIpOwotICAgICAgICAgICAgKmJ1ZmZlclNpemUgPSBtYXAuc2l6ZSgpOworICAgICAg
ICAgICAgKmJ1ZmZlclNpemUgPSBtYXAtPnNpemUoKTsKICAgICAgICAgfQogCi0gICAgICAgIG1l
bWNweShlbmNvZGVkSW1hZ2UtPl9idWZmZXIsIG1hcC5kYXRhKCksIG1hcC5zaXplKCkpOwotICAg
ICAgICBlbmNvZGVkSW1hZ2UtPl9sZW5ndGggPSBtYXAuc2l6ZSgpOwotICAgICAgICBlbmNvZGVk
SW1hZ2UtPl9zaXplID0gbWFwLnNpemUoKTsKKyAgICAgICAgbWVtY3B5KGVuY29kZWRJbWFnZS0+
X2J1ZmZlciwgbWFwLT5kYXRhKCksIG1hcC0+c2l6ZSgpKTsKKyAgICAgICAgZW5jb2RlZEltYWdl
LT5fbGVuZ3RoID0gbWFwLT5zaXplKCk7CisgICAgICAgIGVuY29kZWRJbWFnZS0+X3NpemUgPSBt
YXAtPnNpemUoKTsKIAogICAgICAgICBmcmFnbWVudGF0aW9uSW5mby0+VmVyaWZ5QW5kQWxsb2Nh
dGVGcmFnbWVudGF0aW9uSGVhZGVyKDEpOwogICAgICAgICBmcmFnbWVudGF0aW9uSW5mby0+ZnJh
Z21lbnRhdGlvbk9mZnNldFswXSA9IDA7Ci0gICAgICAgIGZyYWdtZW50YXRpb25JbmZvLT5mcmFn
bWVudGF0aW9uTGVuZ3RoWzBdID0gbWFwLnNpemUoKTsKKyAgICAgICAgZnJhZ21lbnRhdGlvbklu
Zm8tPmZyYWdtZW50YXRpb25MZW5ndGhbMF0gPSBtYXAtPnNpemUoKTsKICAgICAgICAgZnJhZ21l
bnRhdGlvbkluZm8tPmZyYWdtZW50YXRpb25QbFR5cGVbMF0gPSAwOwogICAgICAgICBmcmFnbWVu
dGF0aW9uSW5mby0+ZnJhZ21lbnRhdGlvblRpbWVEaWZmWzBdID0gMDsKICAgICB9CkBAIC00Mzgs
OSArNDM4LDkgQEAgcHVibGljOgogICAgICAgICBzdGQ6OnZlY3RvcjxHc3RIMjY0TmFsVW5pdD4g
bmFsczsKIAogICAgICAgICBjb25zdCB1aW50OF90IHN0YXJ0Q29kZVs0XSA9IHsgMCwgMCwgMCwg
MSB9OwotICAgICAgICBHc3RNYXBwZWRCdWZmZXIgbWFwKGdzdGJ1ZmZlciwgR1NUX01BUF9SRUFE
KTsKKyAgICAgICAgYXV0byBtYXAgPSBHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZShnc3RidWZmZXIs
IEdTVF9NQVBfUkVBRCk7CiAgICAgICAgIHdoaWxlIChwYXJzZXJSZXN1bHQgPT0gR1NUX0gyNjRf
UEFSU0VSX09LKSB7Ci0gICAgICAgICAgICBwYXJzZXJSZXN1bHQgPSBnc3RfaDI2NF9wYXJzZXJf
aWRlbnRpZnlfbmFsdShtX3BhcnNlciwgbWFwLmRhdGEoKSwgb2Zmc2V0LCBtYXAuc2l6ZSgpLCAm
bmFsdSk7CisgICAgICAgICAgICBwYXJzZXJSZXN1bHQgPSBnc3RfaDI2NF9wYXJzZXJfaWRlbnRp
ZnlfbmFsdShtX3BhcnNlciwgbWFwLT5kYXRhKCksIG9mZnNldCwgbWFwLT5zaXplKCksICZuYWx1
KTsKIAogICAgICAgICAgICAgbmFsdS5zY19vZmZzZXQgPSBvZmZzZXQ7CiAgICAgICAgICAgICBu
YWx1Lm9mZnNldCA9IG9mZnNldCArIHNpemVvZihzdGFydENvZGUpOwpAQCAtNDU2LDcgKzQ1Niw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGVuY29kZWRJbWFnZS0+X3NpemUgPSByZXF1aXJlZFNp
emU7CiAgICAgICAgICAgICBlbmNvZGVkSW1hZ2UtPl9idWZmZXIgPSBuZXcgdWludDhfdFtlbmNv
ZGVkSW1hZ2UtPl9zaXplXTsKICAgICAgICAgICAgIGVuY29kZWRJbWFnZUJ1ZmZlci0+cmVzZXQo
ZW5jb2RlZEltYWdlLT5fYnVmZmVyKTsKLSAgICAgICAgICAgICpidWZmZXJTaXplID0gbWFwLnNp
emUoKTsKKyAgICAgICAgICAgICpidWZmZXJTaXplID0gbWFwLT5zaXplKCk7CiAgICAgICAgIH0K
IAogICAgICAgICAvLyBJdGVyYXRlIG5hbCB1bml0cyBhbmQgZmlsbCB0aGUgRnJhZ21lbnRhdGlv
biBpbmZvLgpAQCAtNDY1LDE1ICs0NjUsMTUgQEAgcHVibGljOgogICAgICAgICBlbmNvZGVkSW1h
Z2UtPl9sZW5ndGggPSAwOwogICAgICAgICBmb3IgKHN0ZDo6dmVjdG9yPEdzdEgyNjROYWxVbml0
Pjo6aXRlcmF0b3IgbmFsID0gbmFscy5iZWdpbigpOyBuYWwgIT0gbmFscy5lbmQoKTsgKytuYWws
IGZyYWdtZW50SW5kZXgrKykgewogCi0gICAgICAgICAgICBBU1NFUlQobWFwLmRhdGEoKVtuYWwt
PnNjX29mZnNldCArIDBdID09IHN0YXJ0Q29kZVswXSk7Ci0gICAgICAgICAgICBBU1NFUlQobWFw
LmRhdGEoKVtuYWwtPnNjX29mZnNldCArIDFdID09IHN0YXJ0Q29kZVsxXSk7Ci0gICAgICAgICAg
ICBBU1NFUlQobWFwLmRhdGEoKVtuYWwtPnNjX29mZnNldCArIDJdID09IHN0YXJ0Q29kZVsyXSk7
Ci0gICAgICAgICAgICBBU1NFUlQobWFwLmRhdGEoKVtuYWwtPnNjX29mZnNldCArIDNdID09IHN0
YXJ0Q29kZVszXSk7CisgICAgICAgICAgICBBU1NFUlQobWFwLT5kYXRhKClbbmFsLT5zY19vZmZz
ZXQgKyAwXSA9PSBzdGFydENvZGVbMF0pOworICAgICAgICAgICAgQVNTRVJUKG1hcC0+ZGF0YSgp
W25hbC0+c2Nfb2Zmc2V0ICsgMV0gPT0gc3RhcnRDb2RlWzFdKTsKKyAgICAgICAgICAgIEFTU0VS
VChtYXAtPmRhdGEoKVtuYWwtPnNjX29mZnNldCArIDJdID09IHN0YXJ0Q29kZVsyXSk7CisgICAg
ICAgICAgICBBU1NFUlQobWFwLT5kYXRhKClbbmFsLT5zY19vZmZzZXQgKyAzXSA9PSBzdGFydENv
ZGVbM10pOwogCiAgICAgICAgICAgICBmcmFnbWVudGF0aW9uSGVhZGVyLT5mcmFnbWVudGF0aW9u
T2Zmc2V0W2ZyYWdtZW50SW5kZXhdID0gbmFsLT5vZmZzZXQ7CiAgICAgICAgICAgICBmcmFnbWVu
dGF0aW9uSGVhZGVyLT5mcmFnbWVudGF0aW9uTGVuZ3RoW2ZyYWdtZW50SW5kZXhdID0gbmFsLT5z
aXplOwogCi0gICAgICAgICAgICBtZW1jcHkoZW5jb2RlZEltYWdlLT5fYnVmZmVyICsgZW5jb2Rl
ZEltYWdlLT5fbGVuZ3RoLCAmbWFwLmRhdGEoKVtuYWwtPnNjX29mZnNldF0sCisgICAgICAgICAg
ICBtZW1jcHkoZW5jb2RlZEltYWdlLT5fYnVmZmVyICsgZW5jb2RlZEltYWdlLT5fbGVuZ3RoLCAm
bWFwLT5kYXRhKClbbmFsLT5zY19vZmZzZXRdLAogICAgICAgICAgICAgICAgIHNpemVvZihzdGFy
dENvZGUpICsgbmFsLT5zaXplKTsKICAgICAgICAgICAgIGVuY29kZWRJbWFnZS0+X2xlbmd0aCAr
PSBuYWwtPnNpemUgKyBzaXplb2Yoc3RhcnRDb2RlKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
VG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDI5MWIyNzZjN2U0NThiNzU4
ZWFlNzJiYTk4NzIxYWExMDY3NzA3MTEuLjcyODY3NjY4MWRkN2VkYzUzMjIzYTRkODE4ODgyZmIy
M2Y4ZTBjMzggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxOSBAQAorMjAxOS0wMS0wOSAgQ2hhcmxpZSBUdXJuZXIgIDxjdHVybmVy
QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dTdHJlYW1lcl0gQWRkIHNoYXJlZEJ1ZmZlciB1dGls
aXR5IHRvIEdzdE1hcHBlZEJ1ZmZlciwgYW5kIGEgdGVzdHN1aXRlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTI5NzcKKworICAgICAgICBSZXZpZXdl
ZCBieSBDYXJsb3MgR2FyY2lhIENhbXBvcy4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvUGxh
dGZvcm1HVEsuY21ha2U6IEJ1aWxkIHRoZSBuZXcgR1N0cmVhbWVyIHRlc3QgaGFybmVzcworICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvUGxhdGZvcm1XUEUuY21ha2U6IERpdHRvLgorICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9nc3RyZWFtZXIvR1N0cmVhbWVyVGVzdC5jcHA6
IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6R1N0cmVhbWVyVGVzdDo6U2V0VXApOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6R1N0cmVhbWVyVGVzdDo6VGVhckRvd24pOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9nc3RyZWFtZXIvR1N0cmVhbWVyVGVzdC5o
OiBBZGRlZC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvZ3N0cmVhbWVy
L0dzdE1hcHBlZEJ1ZmZlci5jcHA6IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVT
VF9GKToKKwogMjAxOS0wMS0wOSAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255
LmNvbT4KIAogICAgICAgICBbV2luXVtNaW5pQnJvd3Nlcl0gd2NoYXJfdCBzdHJpbmdzIHNob3Vs
ZG4ndCBiZSB0cmVhdGVkIGFzIEJTVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
UGxhdGZvcm1HVEsuY21ha2UgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtl
CmluZGV4IDg0NDk5ZGUzOThiMjVkMjVhYzBjOTM2MDJhYWFkMWQ2OTBkM2RlOGEuLmMzNGZhZTA3
Y2YzYzZiMGEzOWMzOTlmZWUzMmNkMjVjM2EwYWE3ZjQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0
Zm9ybUdUSy5jbWFrZQpAQCAtMjUsNiArMjUsNyBAQCBpbmNsdWRlX2RpcmVjdG9yaWVzKAogaW5j
bHVkZV9kaXJlY3RvcmllcyhTWVNURU0KICAgICAke0dESzNfSU5DTFVERV9ESVJTfQogICAgICR7
R0xJQl9JTkNMVURFX0RJUlN9CisgICAgJHtHU1RSRUFNRVJfSU5DTFVERV9ESVJTfQogICAgICR7
R1RLM19JTkNMVURFX0RJUlN9CiAgICAgJHtMSUJTT1VQX0lOQ0xVREVfRElSU30KICkKQEAgLTkz
LDYgKzk0LDggQEAgYWRkX2V4ZWN1dGFibGUoVGVzdFdlYkNvcmUKICAgICAke1RFU1RXRUJLSVRB
UElfRElSfS9UZXN0cy9XZWJDb3JlL0ROUy5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9U
ZXN0cy9XZWJDb3JlL0ZpbGVNb25pdG9yLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rl
c3RzL1dlYkNvcmUvRmlsZVN5c3RlbS5jcHAKKyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0
cy9XZWJDb3JlL2dzdHJlYW1lci9Hc3RNYXBwZWRCdWZmZXIuY3BwCisgICAgJHtURVNUV0VCS0lU
QVBJX0RJUn0vVGVzdHMvV2ViQ29yZS9nc3RyZWFtZXIvR1N0cmVhbWVyVGVzdC5jcHAKICAgICAk
e1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3JlL0dyaWRQb3NpdGlvbi5jcHAKICAgICAk
e1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3JlL0hUTUxQYXJzZXJJZGlvbXMuY3BwCiAg
ICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV2ViQ29yZS9MYXlvdXRVbml0LmNwcApkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdQRS5jbWFrZSBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvUGxhdGZvcm1XUEUuY21ha2UKaW5kZXggZmIxYjZiNTJhMzU2Mzg4MGE1MmY2
ODU1ODhjMmUxZmJiZWFiZDllMS4uYjY4Nzc1OThkODc3ZGU2YzhkYTg2YjRlYjU3Y2M4NmZmMGEy
ZjdlZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdQRS5jbWFrZQor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV1BFLmNtYWtlCkBAIC0yMyw2ICsyMyw3
IEBAIGluY2x1ZGVfZGlyZWN0b3JpZXMoCiBpbmNsdWRlX2RpcmVjdG9yaWVzKFNZU1RFTQogICAg
ICR7Q0FJUk9fSU5DTFVERV9ESVJTfQogICAgICR7R0xJQl9JTkNMVURFX0RJUlN9CisgICAgJHtH
U1RSRUFNRVJfSU5DTFVERV9ESVJTfQogICAgICR7TElCU09VUF9JTkNMVURFX0RJUlN9CiAgICAg
JHtXUEVfSU5DTFVERV9ESVJTfQogICAgICR7V1BFQkFDS0VORF9GRE9fSU5DTFVERV9ESVJTfQpA
QCAtNjAsNiArNjEsOCBAQCBhZGRfZXhlY3V0YWJsZShUZXN0V2ViQ29yZQogICAgICR7VEVTVFdF
QktJVEFQSV9ESVJ9L1Rlc3RzQ29udHJvbGxlci5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElS
fS9UZXN0cy9XZWJDb3JlL0ZpbGVNb25pdG9yLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9
L1Rlc3RzL1dlYkNvcmUvRmlsZVN5c3RlbS5jcHAKKyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9U
ZXN0cy9XZWJDb3JlL2dzdHJlYW1lci9Hc3RNYXBwZWRCdWZmZXIuY3BwCisgICAgJHtURVNUV0VC
S0lUQVBJX0RJUn0vVGVzdHMvV2ViQ29yZS9nc3RyZWFtZXIvR1N0cmVhbWVyVGVzdC5jcHAKICAg
ICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3JlL0hUTUxQYXJzZXJJZGlvbXMuY3Bw
CiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV2ViQ29yZS9MYXlvdXRVbml0LmNwcAog
ICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvTUlNRVR5cGVSZWdpc3RyeS5j
cHAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9nc3RyZWFt
ZXIvR1N0cmVhbWVyVGVzdC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
Z3N0cmVhbWVyL0dTdHJlYW1lclRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNkN2Y5NGRlOGU3ZmRhNGVm
ZGNjYmI5MzJlYmEzOTA4Njg3YWI4ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvZ3N0cmVhbWVyL0dTdHJlYW1lclRlc3QuY3BwCkBAIC0wLDAg
KzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhLCBTLkwuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEdTVFJFQU1FUikKKyNpbmNsdWRlICJHU3RyZWFtZXJU
ZXN0LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0dTdHJlYW1lckNvbW1vbi5oPgorI2luY2x1ZGUg
PGdzdC9nc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBUZXN0
V2ViS2l0QVBJIHsKKwordm9pZCBHU3RyZWFtZXJUZXN0OjpTZXRVcCgpCit7CisgICAgaWYgKCFn
c3RfaXNfaW5pdGlhbGl6ZWQoKSkKKyAgICAgICAgZ3N0X2luaXQobnVsbHB0ciwgbnVsbHB0cik7
Cit9CisKK3ZvaWQgR1N0cmVhbWVyVGVzdDo6VGVhckRvd24oKQoreworICAgIC8vIEl0IG1pZ2h0
IGJlIHRlbXB0aW5nIHRvIGNhbGwgZ3N0X2RlaW5pdCgpIGhlcmUuIEhvd2V2ZXIsIHRoYXQKKyAg
ICAvLyB3aWxsIHRlYXIgZG93biB0aGUgd2hvbGUgcHJvY2VzcyBmcm9tIHRoZSBHU3RyZWFtZXIg
UE9WLCBhbmQgdGhlCisgICAgLy8gc2VlbWluZ2x5IHN5bW1ldHJpY2FsIGNhbGwgdG8gZ3N0X2lu
aXQoKSB3aWxsIGZhaWwgdG8KKyAgICAvLyBpbml0aWFsaXplIEdTdHJlYW1lciBjb3JyZWN0bHku
Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKKworI2VuZGlmIC8vIFVTRShHU1RS
RUFNRVIpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvZ3N0
cmVhbWVyL0dTdHJlYW1lclRlc3QuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9nc3RyZWFtZXIvR1N0cmVhbWVyVGVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZiMmNiYWVlNjE2NWM2NTk3
OTE0NzA4NmE3ZDAxYjIxMTdiZjVkOWMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvZ3N0cmVhbWVyL0dTdHJlYW1lclRlc3QuaApAQCAtMCwwICsx
LDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSwgUy5MLgorICogQ29weXJp
Z2h0IChDKSAyMDE4IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgVVNFKEdTVFJFQU1FUikKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewor
CitjbGFzcyBHU3RyZWFtZXJUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHVibGljOgor
ICAgIHZvaWQgU2V0VXAoKSBvdmVycmlkZTsKKyAgICB2b2lkIFRlYXJEb3duKCkgb3ZlcnJpZGU7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCisKKyNlbmRpZiAvLyBVU0UoR1NU
UkVBTUVSKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2dz
dHJlYW1lci9Hc3RNYXBwZWRCdWZmZXIuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJDb3JlL2dzdHJlYW1lci9Hc3RNYXBwZWRCdWZmZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRmNTcyYWVl
NWNjODlkMWZhZDRhYzk0OTIwNTJiZmJhYjkyNzI5NzcKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvZ3N0cmVhbWVyL0dzdE1hcHBlZEJ1ZmZlci5j
cHAKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhLCBT
LkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEdTVFJFQU1FUikKKworI2luY2x1
ZGUgIkdTdHJlYW1lclRlc3QuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRl
ICJUZXN0LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HU3RyZWFtZXJDb21tb24uaD4KKwordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworVEVTVF9G
KEdTdHJlYW1lclRlc3QsIG1hcHBlZEJ1ZmZlckJhc2ljcykKK3sKKyAgICBHUmVmUHRyPEdzdEJ1
ZmZlcj4gYnVmID0gYWRvcHRHUmVmKGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlKG51bGxwdHIsIDY0
LCBudWxscHRyKSk7CisgICAgYXV0byBtYXBwZWRCdWYgPSBHc3RNYXBwZWRCdWZmZXI6OmNyZWF0
ZShidWYuZ2V0KCksIEdTVF9NQVBfUkVBRCk7CisgICAgQVNTRVJUX1RSVUUobWFwcGVkQnVmKTsK
KyAgICBFWFBFQ1RfRVEobWFwcGVkQnVmLT5zaXplKCksIDY0KTsKKworICAgIGF1dG8gbWFwcGVk
QnVmMiA9IEdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKGJ1Zi5nZXQoKSwgR1NUX01BUF9SRUFEKTsK
KyAgICBBU1NFUlRfVFJVRShtYXBwZWRCdWYyKTsKKyAgICBFWFBFQ1RfRVEoKm1hcHBlZEJ1Ziwg
Km1hcHBlZEJ1ZjIpOworICAgIEVYUEVDVF9FUShidWYuZ2V0KCksICptYXBwZWRCdWYpOworICAg
IEVYUEVDVF9FUSgqbWFwcGVkQnVmMiwgYnVmLmdldCgpKTsKK30KKworVEVTVF9GKEdTdHJlYW1l
clRlc3QsIG1hcHBlZEJ1ZmZlclJlYWRTYW5pdHkpCit7CisgICAgZ3BvaW50ZXIgbWVtb3J5ID0g
Z19tYWxsb2MoMTYpOworICAgIG1lbXNldChtZW1vcnksICd4JywgMTYpOworICAgIEdSZWZQdHI8
R3N0QnVmZmVyPiBidWYgPSBhZG9wdEdSZWYoZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZChtZW1vcnks
IDE2KSk7CisgICAgYXV0byBtYXBwZWRCdWYgPSBHc3RNYXBwZWRCdWZmZXI6OmNyZWF0ZShidWYu
Z2V0KCksIEdTVF9NQVBfUkVBRCk7CisgICAgQVNTRVJUX1RSVUUobWFwcGVkQnVmKTsKKyAgICBF
WFBFQ1RfRVEobWFwcGVkQnVmLT5zaXplKCksIDE2KTsKKyAgICBFWFBFQ1RfRVEobWVtY21wKG1l
bW9yeSwgbWFwcGVkQnVmLT5kYXRhKCksIDE2KSwgMCk7CisgICAgRVhQRUNUX0VRKG1lbWNtcCht
ZW1vcnksIG1hcHBlZEJ1Zi0+Y3JlYXRlU2hhcmVkQnVmZmVyKCktPmRhdGEoKSwgMTYpLCAwKTsK
K30KKworVEVTVF9GKEdTdHJlYW1lclRlc3QsIG1hcHBlZEJ1ZmZlcldyaXRlU2FuaXR5KQorewor
ICAgIGdwb2ludGVyIG1lbW9yeSA9IGdfbWFsbG9jKDE2KTsKKyAgICBtZW1zZXQobWVtb3J5LCAn
eCcsIDE2KTsKKyAgICBHUmVmUHRyPEdzdEJ1ZmZlcj4gYnVmID0gYWRvcHRHUmVmKGdzdF9idWZm
ZXJfbmV3X3dyYXBwZWQobWVtb3J5LCAxNikpOworCisgICAgYXV0byBtYXBwZWRCdWYgPSBHc3RN
YXBwZWRCdWZmZXI6OmNyZWF0ZShidWYuZ2V0KCksIEdTVF9NQVBfV1JJVEUpOworICAgIEFTU0VS
VF9UUlVFKG1hcHBlZEJ1Zik7CisgICAgRVhQRUNUX0VRKG1hcHBlZEJ1Zi0+c2l6ZSgpLCAxNik7
CisgICAgbWVtc2V0KG1hcHBlZEJ1Zi0+ZGF0YSgpLCAneScsIG1hcHBlZEJ1Zi0+c2l6ZSgpKTsK
KworICAgIEVYUEVDVF9FUShtZW1jbXAobWVtb3J5LCBtYXBwZWRCdWYtPmRhdGEoKSwgMTYpLCAw
KTsKK30KKworVEVTVF9GKEdTdHJlYW1lclRlc3QsIG1hcHBlZEJ1ZmZlckNhY2hlc1NoYXJlZEJ1
ZmZlcnMpCit7CisgICAgR1JlZlB0cjxHc3RCdWZmZXI+IGJ1ZiA9IGFkb3B0R1JlZihnc3RfYnVm
ZmVyX25ld19hbGxvY2F0ZShudWxscHRyLCA2NCwgbnVsbHB0cikpOworICAgIGF1dG8gbWFwcGVk
QnVmID0gR3N0TWFwcGVkQnVmZmVyOjpjcmVhdGUoYnVmLmdldCgpLCBHU1RfTUFQX1JFQUQpOwor
ICAgIEFTU0VSVF9UUlVFKG1hcHBlZEJ1Zik7CisgICAgYXV0byBzaGFyZWRCdWYgPSBtYXBwZWRC
dWYtPmNyZWF0ZVNoYXJlZEJ1ZmZlcigpOworICAgIC8vIFdlIGV4cGVjdCB0aGUgc2FtZSBkYXRh
IHBvaW50ZXIgd3JhcHBlZCBieSBzaGFyZWQgYnVmZmVyLCBubworICAgIC8vIGNvcGllcyBuZWVk
IHRvIGJlIG1hZGUuCisgICAgRVhQRUNUX0VRKHNoYXJlZEJ1Zi0+ZGF0YSgpLCBtYXBwZWRCdWYt
PmNyZWF0ZVNoYXJlZEJ1ZmZlcigpLT5kYXRhKCkpOworfQorCitURVNUX0YoR1N0cmVhbWVyVGVz
dCwgbWFwcGVkQnVmZmVyRG9lc05vdEFkZEV4dHJhUmVmcykKK3sKKyAgICAvLyBJdCBpcyBpbXBv
cnRhbnQgbm90IHRvIHJlZiB0aGUgcGFzc2VkIEdTdHJlYW1lciBidWZmZXJzLCBpZiB3ZQorICAg
IC8vIGRvIHNvLCB0aGVuIGluIHRoZSBjYXNlIG9mIHdyaXRhYmxlIGJ1ZmZlcnMsIHRoZXkgY2Fu
IGJlY29tZQorICAgIC8vIHVud3JpdGFibGUsIGV2ZW4gdGhvdWdoIHdlIGFyZSB0aGUgc29sZSBv
d25lcnMuIFdlIGFsc28gZG9uJ3QKKyAgICAvLyB3YW50IHRvIHRha2Ugb3duZXJzaGlwIG9mIHRo
ZSBidWZmZXIgZnJvbSB0aGUgdXNlci1jb2RlLCBzaW5jZQorICAgIC8vIGZvciB0cmFuc2Zvcm1J
blBsYWNlIHVzZS1jYXNlcywgdGhhdCB3b3VsZCBicmVhay4KKyAgICBHUmVmUHRyPEdzdEJ1ZmZl
cj4gYnVmID0gYWRvcHRHUmVmKGdzdF9idWZmZXJfbmV3KCkpOworCisgICAgQVNTRVJUX0VRKEdT
VF9PQkpFQ1RfUkVGQ09VTlQoYnVmLmdldCgpKSwgMSk7CisKKyAgICBhdXRvIG1hcHBlZEJ1ZiA9
IEdzdE1hcHBlZEJ1ZmZlcjo6Y3JlYXRlKGJ1Zi5nZXQoKSwgR1NUX01BUF9SRUFEV1JJVEUpOwor
ICAgIEFTU0VSVF9UUlVFKG1hcHBlZEJ1Zik7CisKKyAgICBBU1NFUlRfRVEoR1NUX09CSkVDVF9S
RUZDT1VOVChidWYuZ2V0KCkpLCAxKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQ
SQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikK
</data>

          </attachment>
      

    </bug>

</bugzilla>