<?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>231970</bug_id>
          
          <creation_ts>2021-10-19 11:26:10 -0700</creation_ts>
          <short_desc>RemoteRenderingBackend::CreateImageBuffer should be an async IPC stream message</short_desc>
          <delta_ts>2021-10-22 11:10:18 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=232068</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>232068</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>hi</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>mkwst</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1806179</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-10-19 11:26:10 -0700</bug_when>
    <thetext>Revert the workaround in https://bugs.webkit.org/show_bug.cgi?id=231681, and instead add some kind of mechanism to enqueue stream messages that don&apos;t yet have a receive queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1806356</commentid>
    <comment_count>1</comment_count>
      <attachid>441804</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-10-19 15:08:23 -0700</bug_when>
    <thetext>Created attachment 441804
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1806370</commentid>
    <comment_count>2</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-10-19 15:22:45 -0700</bug_when>
    <thetext>(In reply to Wenson Hsieh from comment #1)
&gt; Created attachment 441804 [details]
&gt; Patch

This patch is essentially the same as https://bugs.webkit.org/attachment.cgi?id=441755&amp;action=review, except that I&apos;ve renamed some methods and members to hopefully make these invariants explicit:

1. Incoming stream messages must either be added to a receive queue upon arrival, or added to `m_incomingStreamMessagesWithMissingReceiverQueues` if there is no extant receive queue.

2. All messages in `m_incomingStreamMessagesWithMissingReceiverQueues` are destined for a receive queue that will be added via (the now-renamed) `addStreamMessageReceiver()` method.

As far as I understand, this should address the concerns in https://bugs.webkit.org/show_bug.cgi?id=231681#c27, regarding:

&gt; ...There are normal IPC messages that are sent to MessageReceiveQueues or Connection::Client...

...since we do not expect any &quot;normal&quot; (i.e. non-stream) IPC messages to be sent to MessageReceiveQueues that are used to receive stream messages.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1806379</commentid>
    <comment_count>3</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-10-19 15:43:22 -0700</bug_when>
    <thetext>Additionally — I started going down the path of adding new public methods on IPC::Connection to register a list of ReceiverNames as being &quot;expected to add receiver queues&quot; and using this list to add messages on a `m_incomingMessagesWithMissingReceiverQueues`.

However, since I would just be adding the stream message receiver names here anyways, I think it&apos;s ultimately more straightforward to treat all stream message receivers in this way (hence, why I&apos;m using this new `isStreamMessageReceiver` function instead of new Connection methods, or a new message receiver attribute in the message file).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1806692</commentid>
    <comment_count>4</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-10-20 10:44:46 -0700</bug_when>
    <thetext>I&apos;m still not very fond of the solution.
I think there should not be fundamental difference between &quot;stream receiver&quot; and &quot;receiver&quot;.

I don&apos;t think there should be a feature where you can send a message to unknown receiver and have the receiving connection save that message in perpetuity.

I don&apos;t think it&apos;s a good idea to add yet another hard to understand deviation of how the messages are delivered.

The same issue, safe-guarding user-created race condition problem, exists in normal IPC and it looks odd if streams are the only place this is solved.

So if we have a scenario where we forget streams for a minute, and consider the same feature for normal IPC messages:
&quot;I want to send messages to unknown receivers.&quot;

Should we fix that issue for normal IPC?
I don&apos;t think so. 

If you write a race condition in normal IPC, you have the same problem as a race condition in stream-based IPC.

How pressing of an issue is this to fix?

Can we think of a general purpose short-term mechanism that solves this? For long term I think ordered queue per receiver should solve it.

I think best short-term would be to declare:
&quot;Queue q is the queue for RRB messages with my id&quot;
&quot;Queue q is the queue for RDLR messages with any id&quot;

I think that should be done by saying something like:

void RemoteRenderingBackend::startListeningForIPC()
{
    m_gpuConnectionToWebProcess-&gt;connection().addWorkQueueMessageReceiver(Messages::RemoteRenderingBackend::messageReceiverName(), m_workQueue, this, m_renderingBackendIdentifier.toUInt64());
    m_gpuConnectionToWebProcess-&gt;connection().addWorkQueueMessageReceiver(Messages::RemoteDisplayListRecorder::messageReceiverName(), m_workQueue, this, 0);
}

Then:
- Make receive queues registrable in all threads (I can do this too, but it&apos;s simple WorkQueue change IIRC to the degree anything with threads is simple..)
- Change RDLR to register the message listener in the thread instead of posting to main thread
- Add a some sort of rerouting massaging hook for the message processing so that it&apos;d be understandable how the dispatch goes to the RDLR. I can try to sketch something for this 


Then maybe catch the message in the RRB dispatchMessages, inspect the</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1806735</commentid>
    <comment_count>5</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-10-20 11:41:20 -0700</bug_when>
    <thetext>... Had my wrong computer with older checkout.

void RemoteRenderingBackend::startListeningForIPC()
{
    m_streamConnection-&gt;startReceivingMessages(*this, Messages::RemoteRenderingBackend::messageReceiverName(), m_renderingBackendIdentifier.toUInt64());
    m_streamConnection-&gt;startReceivingMessages(Messages::RemoteDisplayListRecorder::messageReceiverName()); //add
}

...



// add this
void StreamServerConnection::startReceivingMessages(ReceiverName receiverName)
{
    {
        Locker locker { m_receiversLock };
        ASSERT(!m_wildcardReceivers[receiverName]);
        m_wildcardReceivers[receiverName] = true;
    }
    m_connection-&gt;addMessageReceiveQueue(*this, receiverName, 0);

}

Maybe with this the messages appear to the RRB thread correctly. Haven&apos;t tried it, so it might be completely off.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1806749</commentid>
    <comment_count>6</comment_count>
      <attachid>441804</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-10-20 11:58:10 -0700</bug_when>
    <thetext>Comment on attachment 441804
Patch

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

&gt; Source/WebKit/Platform/IPC/Connection.h:236
&gt; +    void removeStreamMessageReceiver(ReceiverName receiverName, uint64_t destinationID = 0)
&gt; +    {
&gt; +        ASSERT(isStreamMessageReceiver(receiverName));
&gt; +        removeMessageReceiveQueue(receiverName, destinationID);
&gt; +    }

Maybe just a personal preference of mine, but I would like it better if a multi-line inline function was defined outside the class definition, making it a little easier to see an overview of what the class provides rather than having that interspersed with implementation. So I would put the implementation below.

If you do that, I would also suggest we add the keyword &quot;inline&quot; to start of the declaration; not something we did in the past, but a good practice to start going forward. Doing that will let us move the inlines to a separate header in the future if we wish to, and give us a compile time error if we don’t include that header. So it’s a good practice to start with any function that has an inline implementation outside the class definiton. We could wait and add that keyword only if we decide to move the function body to a separate header, but I think that specifying inline in the declarations in such cases may be a good habit to cultivate for future maintainability.

&gt; Source/WebKit/Platform/IPC/Connection.h:424
&gt;      Deque&lt;std::unique_ptr&lt;Decoder&gt;&gt; m_incomingMessages WTF_GUARDED_BY_LOCK(m_incomingMessagesLock);
&gt; +    Deque&lt;std::unique_ptr&lt;Decoder&gt;&gt; m_incomingStreamMessagesWithMissingReceiverQueues WTF_GUARDED_BY_LOCK(m_incomingMessagesLock);

I’m not sure I understand why we use a Deque here instead of a Vector. As I understand it, the primary feature a Deque offers that a Vector does not is efficient removal at the front. I don’t see code here that removes from the front, but maybe this is done on the main m_incomingMessages somewhere I did not spot and somehow indirectly that’s the same for the new new duque.

I’m sure that I’m just missing the place where this occurs, but wanted to call it to your intention in case it’s not so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1806792</commentid>
    <comment_count>7</comment_count>
      <attachid>441804</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-10-20 12:54:41 -0700</bug_when>
    <thetext>Comment on attachment 441804
Patch

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

Thanks for taking a look, Darin and Kimmo! I&apos;ll restructure this patch to account for Kimmo&apos;s feedback, and upload a new (different) version soon.

&gt;&gt; Source/WebKit/Platform/IPC/Connection.h:236
&gt;&gt; +    }
&gt; 
&gt; Maybe just a personal preference of mine, but I would like it better if a multi-line inline function was defined outside the class definition, making it a little easier to see an overview of what the class provides rather than having that interspersed with implementation. So I would put the implementation below.
&gt; 
&gt; If you do that, I would also suggest we add the keyword &quot;inline&quot; to start of the declaration; not something we did in the past, but a good practice to start going forward. Doing that will let us move the inlines to a separate header in the future if we wish to, and give us a compile time error if we don’t include that header. So it’s a good practice to start with any function that has an inline implementation outside the class definiton. We could wait and add that keyword only if we decide to move the function body to a separate header, but I think that specifying inline in the declarations in such cases may be a good habit to cultivate for future maintainability.

This piece of code is going away in the new version of the patch, but I will note that moving forward!

&gt;&gt; Source/WebKit/Platform/IPC/Connection.h:424
&gt;&gt; +    Deque&lt;std::unique_ptr&lt;Decoder&gt;&gt; m_incomingStreamMessagesWithMissingReceiverQueues WTF_GUARDED_BY_LOCK(m_incomingMessagesLock);
&gt; 
&gt; I’m not sure I understand why we use a Deque here instead of a Vector. As I understand it, the primary feature a Deque offers that a Vector does not is efficient removal at the front. I don’t see code here that removes from the front, but maybe this is done on the main m_incomingMessages somewhere I did not spot and somehow indirectly that’s the same for the new new duque.
&gt; 
&gt; I’m sure that I’m just missing the place where this occurs, but wanted to call it to your intention in case it’s not so.

That&apos;s a good point — we do `m_incomingMessages.takeFirst()` in several places, but (in this patch, at least) we only iterate sequentially through `m_incomingStreamMessagesWithMissingReceiverQueues`, so it should indeed be a Vector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1806924</commentid>
    <comment_count>8</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-10-20 16:40:03 -0700</bug_when>
    <thetext>(In reply to Kimmo Kinnunen from comment #5)
&gt; ... Had my wrong computer with older checkout.
&gt; 
&gt; void RemoteRenderingBackend::startListeningForIPC()
&gt; {
&gt;     m_streamConnection-&gt;startReceivingMessages(*this,
&gt; Messages::RemoteRenderingBackend::messageReceiverName(),
&gt; m_renderingBackendIdentifier.toUInt64());
&gt;    
&gt; m_streamConnection-&gt;startReceivingMessages(Messages::
&gt; RemoteDisplayListRecorder::messageReceiverName()); //add
&gt; }
&gt; 
&gt; ...
&gt; 
&gt; 
&gt; 
&gt; // add this
&gt; void StreamServerConnection::startReceivingMessages(ReceiverName
&gt; receiverName)
&gt; {
&gt;     {
&gt;         Locker locker { m_receiversLock };
&gt;         ASSERT(!m_wildcardReceivers[receiverName]);
&gt;         m_wildcardReceivers[receiverName] = true;
&gt;     }
&gt;     m_connection-&gt;addMessageReceiveQueue(*this, receiverName, 0);
&gt; 
&gt; }
&gt; 
&gt; Maybe with this the messages appear to the RRB thread correctly. Haven&apos;t
&gt; tried it, so it might be completely off.

I&apos;m trying to implement your approach now, but it&apos;s not clear to me what purpose `m_wildcardReceivers` is intended to serve. It&apos;s also not clear to me exactly what this means:

&gt; ..Then maybe catch the message in the RRB dispatchMessages..

Assuming &quot;the message&quot; refers to a queued message that was missing a receiver, how would this message be routed to RRB (since the ReceiverNames would not match up)? Are you proposing that we add some kind of mechanism for an IPC message receiver to receive messages that are intended not for itself, but instead for another receiver that it can forward messages to?

I think I understand your high-level approach (i.e. &quot;install a 0-destination receive queue for RDLR to catch and later enqueue any incoming receiver-less messages&quot;), but I&apos;m confused by some of these details in your previous comments.

I&apos;ll attempt to come up with a patch that captures the spirit of your approach, and let&apos;s go from there..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1806936</commentid>
    <comment_count>9</comment_count>
      <attachid>441958</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-10-20 17:02:55 -0700</bug_when>
    <thetext>Created attachment 441958
Alternate approach?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1806974</commentid>
    <comment_count>10</comment_count>
      <attachid>441970</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-10-20 18:29:40 -0700</bug_when>
    <thetext>Created attachment 441970
Alternate approach, #2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1807030</commentid>
    <comment_count>11</comment_count>
      <attachid>441970</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-10-21 00:07:22 -0700</bug_when>
    <thetext>Comment on attachment 441970
Alternate approach, #2

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

Nice!

&gt; Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp:95
&gt; +    m_streamConnection-&gt;startReceivingMessages(Messages::RemoteDisplayListRecorder::messageReceiverName());

So I remember this after two weeks, could you add a comment about the subtleness?
I can come up with something like below, but feel free to word it differently too.
// RemoteDisplayListRecorder messages depend on RemoteRenderingBackend, because RemoteRenderingBackend creates RemoteDisplayListRecorder and
// makes a receive queue for it. In order to guarantee correct ordering, ensure that all RemoteDisplayListRecorder messages are processed in the same sequence
// as RemoteRenderingBackend.

&gt; Source/WebKit/Platform/IPC/StreamServerConnection.cpp:43
&gt; +    // FIXME: Can we avoid synchronous dispatch here by adjusting the assertion in `Connection::enqueueMatchingMessagesToMessageReceiveQueue`?

Yeah, this should be done, along with fixing m_workQueue.addStreamConnection to be thread-safe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1807143</commentid>
    <comment_count>12</comment_count>
      <attachid>441970</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-10-21 08:05:04 -0700</bug_when>
    <thetext>Comment on attachment 441970
Alternate approach, #2

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

Thanks for taking a look! I&apos;ll have a new version out soon with a ChangeLog.

&gt;&gt; Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp:95
&gt;&gt; +    m_streamConnection-&gt;startReceivingMessages(Messages::RemoteDisplayListRecorder::messageReceiverName());
&gt; 
&gt; So I remember this after two weeks, could you add a comment about the subtleness?
&gt; I can come up with something like below, but feel free to word it differently too.
&gt; // RemoteDisplayListRecorder messages depend on RemoteRenderingBackend, because RemoteRenderingBackend creates RemoteDisplayListRecorder and
&gt; // makes a receive queue for it. In order to guarantee correct ordering, ensure that all RemoteDisplayListRecorder messages are processed in the same sequence
&gt; // as RemoteRenderingBackend.

Added!

&gt;&gt; Source/WebKit/Platform/IPC/StreamServerConnection.cpp:43
&gt;&gt; +    // FIXME: Can we avoid synchronous dispatch here by adjusting the assertion in `Connection::enqueueMatchingMessagesToMessageReceiveQueue`?
&gt; 
&gt; Yeah, this should be done, along with fixing m_workQueue.addStreamConnection to be thread-safe.

As far as I understood, `addStreamConnection()` is going to be invoked from the main runloop in all cases.

Are you suggesting that we guard the call to `wakeUpProcessingThread();` with `StreamConnectionWorkQueue::m_lock` so that we don&apos;t end up in a situation where we `wakeUpProcessingThread()` simultaneously from different threads due to `StreamConnectionWorkQueue::dispatch`?

(i.e., something like:)

```
void StreamConnectionWorkQueue::dispatch(WTF::Function&lt;void()&gt;&amp;&amp; function)
{
    Locker locker { m_lock };
    m_functions.append(WTFMove(function));
    ASSERT(!m_shouldQuit); // Re-entering during shutdown not supported.
    wakeUpProcessingThread();
}

void StreamConnectionWorkQueue::addStreamConnection(StreamServerConnectionBase&amp; connection)
{
    Locker locker { m_lock };
    m_connections.add(connection);
    ASSERT(!m_shouldQuit); // Re-entering during shutdown not supported.
    wakeUpProcessingThread();
}
```</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1807170</commentid>
    <comment_count>13</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-10-21 08:40:50 -0700</bug_when>
    <thetext>(In reply to Wenson Hsieh from comment #12)
&gt; Comment on attachment 441970 [details]
&gt; Alternate approach, #2
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=441970&amp;action=review
&gt; 
&gt; Thanks for taking a look! I&apos;ll have a new version out soon with a ChangeLog.
&gt; 
&gt; &gt;&gt; Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp:95
&gt; &gt;&gt; +    m_streamConnection-&gt;startReceivingMessages(Messages::RemoteDisplayListRecorder::messageReceiverName());
&gt; &gt; 
&gt; &gt; So I remember this after two weeks, could you add a comment about the subtleness?
&gt; &gt; I can come up with something like below, but feel free to word it differently too.
&gt; &gt; // RemoteDisplayListRecorder messages depend on RemoteRenderingBackend, because RemoteRenderingBackend creates RemoteDisplayListRecorder and
&gt; &gt; // makes a receive queue for it. In order to guarantee correct ordering, ensure that all RemoteDisplayListRecorder messages are processed in the same sequence
&gt; &gt; // as RemoteRenderingBackend.
&gt; 
&gt; Added!
&gt; 
&gt; &gt;&gt; Source/WebKit/Platform/IPC/StreamServerConnection.cpp:43
&gt; &gt;&gt; +    // FIXME: Can we avoid synchronous dispatch here by adjusting the assertion in `Connection::enqueueMatchingMessagesToMessageReceiveQueue`?
&gt; &gt; 
&gt; &gt; Yeah, this should be done, along with fixing m_workQueue.addStreamConnection to be thread-safe.
&gt; 
&gt; As far as I understood, `addStreamConnection()` is going to be invoked from
&gt; the main runloop in all cases.
&gt; 
&gt; Are you suggesting that we guard the call to `wakeUpProcessingThread();`
&gt; with `StreamConnectionWorkQueue::m_lock` so that we don&apos;t end up in a
&gt; situation where we `wakeUpProcessingThread()` simultaneously from different
&gt; threads due to `StreamConnectionWorkQueue::dispatch`?
&gt; 
&gt; (i.e., something like:)
&gt; 
&gt; ```
&gt; void StreamConnectionWorkQueue::dispatch(WTF::Function&lt;void()&gt;&amp;&amp; function)
&gt; {
&gt;     Locker locker { m_lock };
&gt;     m_functions.append(WTFMove(function));
&gt;     ASSERT(!m_shouldQuit); // Re-entering during shutdown not supported.
&gt;     wakeUpProcessingThread();
&gt; }
&gt; 
&gt; void
&gt; StreamConnectionWorkQueue::addStreamConnection(StreamServerConnectionBase&amp;
&gt; connection)
&gt; {
&gt;     Locker locker { m_lock };
&gt;     m_connections.add(connection);
&gt;     ASSERT(!m_shouldQuit); // Re-entering during shutdown not supported.
&gt;     wakeUpProcessingThread();
&gt; }
&gt; ```

Never mind — I see what you mean in https://bugs.webkit.org/show_bug.cgi?id=232068 now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1807199</commentid>
    <comment_count>14</comment_count>
      <attachid>442040</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-10-21 09:20:32 -0700</bug_when>
    <thetext>Created attachment 442040
Depends on #232068</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1807774</commentid>
    <comment_count>15</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-10-22 11:09:17 -0700</bug_when>
    <thetext>Committed r284695 (243414@main): &lt;https://commits.webkit.org/243414@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 442040.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1807775</commentid>
    <comment_count>16</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-10-22 11:10:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/84556289&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>441804</attachid>
            <date>2021-10-19 15:08:23 -0700</date>
            <delta_ts>2021-10-21 09:20:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231970-20211019150822.patch</filename>
            <type>text/plain</type>
            <size>18125</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg0NDc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDdmYjZjNmE5YTQ0ZDhlMjMz
Y2RkN2U5MzVlYTQ5YWM3N2QzNDgyZTAuLjdmODgzNzljMjY1Y2Y2OTE5MzVhOTY4ODQ5NmViNWQz
OGQ1YTllYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjggQEAKKzIwMjEtMTAtMTkgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6Q3JlYXRlSW1hZ2VCdWZmZXIgc2hvdWxkIGJlIGFuIGFzeW5jIElQQyBzdHJlYW0g
bWVzc2FnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjMxOTcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhpcyBwYXRjaCByZXZlcnRzIHRoZSBjaGFuZ2VzIGluIHIyODQ0NzYsIHdoaWNoIHdvcmtlZCBh
cm91bmQgYSByYWNlIHdoZW4gYWRkaW5nIHJlY2VpdmUgcXVldWVzIGZvciBuZXdseQorICAgICAg
ICBjcmVhdGVkIElQQyBzdHJlYW0gZGVzdGluYXRpb25zIGFuZCBzaW11bHRhbmVvdXNseSBkaXNw
YXRjaGluZyBJUEMgbWVzc2FnZXMgdG8gdGhvc2UgZGVzdGluYXRpb25zLiBSYXRoZXIgdGhhbgor
ICAgICAgICBtYWtpbmcgdGhlIElQQyBtZXNzYWdlIHRoYXQgY3JlYXRlcyBhbmQgYWRkcyB0aGUg
bmV3IGltYWdlIGJ1ZmZlcidzIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIgc3luY2hyb25vdXMs
IHdlCisgICAgICAgIGluc3RlYWQga2VlcCB0aGF0IG1lc3NhZ2UgYXN5bmMgYW5kIGFkZCBhIG1l
Y2hhbmlzbSB0byBlbnN1cmUgdGhhdCBpbmNvbWluZyBzdHJlYW0gbWVzc2FnZXMgdGhhdCBkb24n
dCBjdXJyZW50bHkKKyAgICAgICAgaGF2ZSBhIHJlY2VpdmVyIGFyZSBxdWV1ZWQgdXAgb24gdGhl
IElQQzo6Q29ubmVjdGlvbiwgYW5kIGVucXVldWVkIG9uIHRoZSBJUEMgc3RyZWFtIGRlc3RpbmF0
aW9uJ3MgcmVjZWl2ZSBxdWV1ZQorICAgICAgICB3aGVuIHRoZSByZWNlaXZlIHF1ZXVlIGlzIGV2
ZW50dWFsbHkgY3JlYXRlZC4KKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaDoKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW46CisKKyAgICAgICAgTWFrZSBgQ3Jl
YXRlSW1hZ2VCdWZmZXJgIGFuIGFzeW5jIHN0cmVhbSBtZXNzYWdlIG9uY2UgYWdhaW4uCisKKyAg
ICAgICAgKiBQbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChJUEM6OkNvbm5l
Y3Rpb246OmVucXVldWVNYXRjaGluZ01lc3NhZ2VzVG9NZXNzYWdlUmVjZWl2ZVF1ZXVlKToKKwor
ICAgICAgICBGb3Igc3RyZWFtIG1lc3NhZ2UgcmVjZWl2ZXJzLCB3aGVuIGNyZWF0aW5nIGEgbmV3
IHJlY2VpdmVyIHF1ZXVlLCB0YWtlIHF1ZXVlZCBtZXNzYWdlcyBvdXQgb2YKKyAgICAgICAgYG1f
aW5jb21pbmdTdHJlYW1NZXNzYWdlc1dpdGhNaXNzaW5nUmVjZWl2ZXJRdWV1ZXNgIGluc3RlYWQg
b2YgdGhlIG5vcm1hbCBgbV9pbmNvbWluZ01lc3NhZ2VzYCBxdWV1ZS4gVGhpcworICAgICAgICBl
bnN1cmVzIHRoYXQgc3RyZWFtIG1lc3NhZ2VzIHRvIGFueSBkZXN0aW5hdGlvbiBhcmUgYWx3YXlz
IG9yZGVyZWQgd2l0aCByZXNwZWN0IHRvIGFueSBvdGhlciBzdHJlYW0gbWVzc2FnZXMKKyAgICAg
ICAgc2VudCB0byB0aGF0IGRlc3RpbmF0aW9uLgorCisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246
OmFkZFN0cmVhbU1lc3NhZ2VSZWNlaXZlcik6CisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246OnBy
b2Nlc3NJbmNvbWluZ01lc3NhZ2UpOgorCisgICAgICAgIFVzZSB0aGUgbmV3IGhlbHBlciBmdW5j
dGlvbiB0byByb3V0ZSBpbmNvbWluZyBzdHJlYW0gbWVzc2FnZXMgd2l0aCBubyByZWNlaXZlciB0
byB0aGUgbmV3IElQQzo6RGVjb2RlciBEZXF1ZQorICAgICAgICBgbV9pbmNvbWluZ1N0cmVhbU1l
c3NhZ2VzV2l0aE1pc3NpbmdSZWNlaXZlclF1ZXVlc2AsIGluc3RlYWQgb2YgYXR0ZW1wdGluZyB0
byBlbnF1ZXVlIGFuZCBkaXNwYXRjaCB0aGVtIGFzCisgICAgICAgIHJlZ3VsYXIgSVBDIG1lc3Nh
Z2VzLgorCisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246OmFkZE1lc3NhZ2VSZWNlaXZlUXVldWUp
OiBEZWxldGVkLgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmg6CisKKyAgICAg
ICAgTWFrZSBgcmVtb3ZlTWVzc2FnZVJlY2VpdmVRdWV1ZSgpYCBhIHByaXZhdGUgbWV0aG9kLCBh
bmQgbWFrZSBTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uIHVzZSB0aGUgbmV3bHkgcmVuYW1lZAorICAg
ICAgICBgYWRkU3RyZWFtTWVzc2FnZVJlY2VpdmVyKClgIGFuZCBgcmVtb3ZlU3RyZWFtTWVzc2Fn
ZVJlY2VpdmVyKClgIG1ldGhvZHMgdG8gYWRkL3JlbW92ZSBhIGNvcnJlc3BvbmRpbmcgcmVjZWl2
ZQorICAgICAgICBxdWV1ZSB0by9mcm9tIHRoZSBjb25uZWN0aW9uOyB0aGlzIGlzIGNvbnNpc3Rl
bnQgd2l0aCB0aGUgZXhpc3RpbmcgYGFkZCpNZXNzYWdlUmVjZWl2ZXIoKWAgYW5kCisgICAgICAg
IGByZW1vdmUqTWVzc2FnZVJlY2VpdmVyKClgIG1ldGhvZHMgdXNlZCBmb3Igd29yayBxdWV1ZSBh
bmQgdGhyZWFkIG1lc3NhZ2UgcmVjZWl2ZXJzLCByZXNwZWN0aXZlbHkuCisKKyAgICAgICAgQWRk
aXRpb25hbGx5LCBhZGQgYSBuZXcgbWVzc2FnZSBxdWV1ZSwgYG1faW5jb21pbmdTdHJlYW1NZXNz
YWdlc1dpdGhNaXNzaW5nUmVjZWl2ZXJRdWV1ZXNgLCB0aGF0IGV4aXN0cworICAgICAgICBhbG9u
Z3NpZGUgYG1faW5jb21pbmdNZXNzYWdlc2AuIEFzIGl0cyBuYW1lIGluZGljYXRlcywgdGhlIGZv
cm1lciBzdG9yZXMgaW5jb21pbmcgSVBDIHN0cmVhbSBtZXNzYWdlcyB0aGF0IGRvbid0CisgICAg
ICAgIGN1cnJlbnRseSBjb3JyZXNwb25kIHRvIGFueSByZWNlaXZlci4KKworICAgICAgICAoSVBD
OjpDb25uZWN0aW9uOjpyZW1vdmVTdHJlYW1NZXNzYWdlUmVjZWl2ZXIpOgorICAgICAgICAqIFBs
YXRmb3JtL0lQQy9TdHJlYW1TZXJ2ZXJDb25uZWN0aW9uLmNwcDoKKyAgICAgICAgKElQQzo6U3Ry
ZWFtU2VydmVyQ29ubmVjdGlvbkJhc2U6OnN0YXJ0UmVjZWl2aW5nTWVzc2FnZXNJbXBsKToKKyAg
ICAgICAgKElQQzo6U3RyZWFtU2VydmVyQ29ubmVjdGlvbkJhc2U6OnN0b3BSZWNlaXZpbmdNZXNz
YWdlc0ltcGwpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5OgorCisgICAg
ICAgIEFkZCBhIGhlbHBlciBmdW5jdGlvbiB0byBkZXRlcm1pbmUgd2hldGhlciBhIGdpdmVuIE1l
c3NhZ2VSZWNlaXZlciByZWNlaXZlcyBzdHJlYW0gbWVzc2FnZXMuCisKKyAgICAgICAgKGdlbmVy
YXRlX21lc3NhZ2VfbmFtZXNfaGVhZGVyKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdC90ZXN0
cy9NZXNzYWdlTmFtZXMuaDoKKyAgICAgICAgKElQQzo6aXNTdHJlYW1NZXNzYWdlUmVjZWl2ZXIp
OgorCisgICAgICAgIFJlYmFzZWxpbmUgYSB1bml0IHRlc3QgcmVzdWx0IGZvciB0aGUgSVBDIG1l
c3NhZ2UgY29kZSBnZW5lcmF0b3Igc2NyaXB0cy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlUmVtb3RlSW1hZ2VCdWZmZXIp
OgorCiAyMDIxLTEwLTE5ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgog
CiAgICAgICAgIFJFR1JFU1NJT04gKHIyODQwNzkpOiBmYXN0L2NhbnZhcy9ncmFkaWVudC13aXRo
LWNsaXAuaHRtbCBhbmQgZmFzdC9jYW52YXMvZ3JhZGllbnQtdGV4dC13aXRoLXNoYWRvdy5odG1s
IGFyZSBmbGFreSBmYWlsdXJlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCmluZGV4IGY1OGMzNjk2
ZjUzZWZkMTUwYjFkYjkwZTMxYjM5ZWI1NjZiNWRjZmMuLjE5Y2NmMzczMTUwZDdjMjNhMjlkNmZi
OTA3OTIxYmQzM2E5ZmVlMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9n
cmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKQEAgLTEzOCwxMiAr
MTM4LDExIEBAIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGlkRmx1c2goR3JhcGhpY3ND
b250ZXh0Rmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpCiAgICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpEaWRGbHVzaChmbHVzaElkZW50aWZpZXIsIHJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllci5vYmplY3QoKSksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXIpOwogfQogCi12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVm
ZmVyKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5n
TW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Um
IGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0IHBpeGVsRm9ybWF0LCBSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIgaW1hZ2VCdWZmZXJSZXNvdXJjZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgUmVuZGVy
aW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQgcGl4ZWxGb3JtYXQsIFJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlclJlc291cmNlSWRlbnRpZmllcikK
IHsKICAgICAvLyBJbW1lZGlhdGVseSB0dXJuIHRoZSBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIgKHdoaWNoIGlzIGVycm9yLXByb25lKSB0byBhIFF1YWxpZmllZFJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciwKICAgICAvLyBhbmQgdXNlIGEgaGVscGVyIGZ1bmN0aW9uIHRvIG1ha2Ugc3Vy
ZSB0aGF0IGRvbid0IGFjY2lkZW50YWxseSB1c2UgdGhlIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciAoYmVjYXVzZSB0aGUgaGVscGVyIGZ1bmN0aW9uIGNhbid0IHNlZSBpdCkuCiAgICAgY3Jl
YXRlSW1hZ2VCdWZmZXJXaXRoUXVhbGlmaWVkSWRlbnRpZmllcihsb2dpY2FsU2l6ZSwgcmVuZGVy
aW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBwaXhlbEZvcm1hdCwgeyBpbWFn
ZUJ1ZmZlclJlc291cmNlSWRlbnRpZmllciwgbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT53
ZWJQcm9jZXNzSWRlbnRpZmllcigpIH0pOwotICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CiAK
IHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXJXaXRoUXVhbGlm
aWVkSWRlbnRpZmllcihjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2Rl
IHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgY29uc3QgRGVzdGluYXRpb25D
b2xvclNwYWNlJiBjb2xvclNwYWNlLCBQaXhlbEZvcm1hdCBwaXhlbEZvcm1hdCwgUXVhbGlmaWVk
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlQnVmZmVyUmVzb3VyY2VJZGVudGlmaWVy
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmQuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLmgKaW5kZXggMzFhZDkyOTg5OWJkY2ZiODAwZWFlYmRjYTliMzFm
OGFhOTMwYWM0OS4uOTVkZjhlYTU1NTZmOTIzY2Y0MWY2NzZhM2VkY2RjZWJmOTcwM2YwZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZC5oCkBAIC0xMDEsNyArMTAxLDcgQEAgcHJpdmF0ZToKICAgICB1aW50
NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAg
Ly8gTWVzc2FnZXMgdG8gYmUgcmVjZWl2ZWQuCi0gICAgdm9pZCBjcmVhdGVJbWFnZUJ1ZmZlcihj
b25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpSZW5kZXJpbmdN
b2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29s
b3JTcGFjZSYsIFdlYkNvcmU6OlBpeGVsRm9ybWF0LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBjcmVh
dGVJbWFnZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBXZWJD
b3JlOjpSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IFdlYkNvcmU6
OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIFdlYkNvcmU6OlBpeGVsRm9ybWF0LCBXZWJDb3JlOjpS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIHZvaWQgdXBkYXRlU2hhcmVkTWVtb3J5
Rm9yR2V0UGl4ZWxCdWZmZXIodWludDMyX3QgYnl0ZUNvdW50LCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJik+JiYpOwogICAgIHZvaWQgc2VtYXBo
b3JlRm9yR2V0UGl4ZWxCdWZmZXIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBJUEM6OlNl
bWFwaG9yZSYpPiYmKTsKICAgICB2b2lkIHVwZGF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZUZv
ckdldFBpeGVsQnVmZmVyKHVpbnQzMl90IGJ5dGVDb3VudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYsIGNvbnN0IElQQzo6U2VtYXBob3JlJik+
JiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbgppbmRleCA5NDk4ODYz
MDhhMzU0NjVkY2U1ZmZhY2JjYzdiYzFjNmM0NTdiNDBhLi5hMTQyZjQ4OTY2ZjVjNDk3NTk0NTY1
NDc3MmM3OWMzMTk3NmY1M2RjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdl
cy5pbgpAQCAtMjMsNyArMjMsNyBAQAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAogbWVzc2Fn
ZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZCBOb3RSZWZDb3VudGVkIFN0cmVhbSB7Ci0gICAg
Q3JlYXRlSW1hZ2VCdWZmZXIoV2ViQ29yZTo6RmxvYXRTaXplIGxvZ2ljYWxTaXplLCBXZWJDb3Jl
OjpSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2Vi
Q29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UsIGVudW06dWludDhfdCBXZWJD
b3JlOjpQaXhlbEZvcm1hdCBwaXhlbEZvcm1hdCwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgLT4gKCkgU3luY2hyb25vdXMK
KyAgICBDcmVhdGVJbWFnZUJ1ZmZlcihXZWJDb3JlOjpGbG9hdFNpemUgbG9naWNhbFNpemUsIFdl
YkNvcmU6OlJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgZW51bTp1aW50OF90
IFdlYkNvcmU6OlBpeGVsRm9ybWF0IHBpeGVsRm9ybWF0LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogICAgIFVwZGF0ZVNo
YXJlZE1lbW9yeUZvckdldFBpeGVsQnVmZmVyKHVpbnQzMl90IGJ5dGVDb3VudCkgLT4gKFdlYktp
dDo6U2hhcmVkTWVtb3J5OjpJUENIYW5kbGUgaGFuZGxlKSBTeW5jaHJvbm91cyBOb3RTdHJlYW1F
bmNvZGFibGVSZXBseQogICAgIFNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyKCkgLT4gKElQQzo6
U2VtYXBob3JlIHNlbWFwaG9yZSkgU3luY2hyb25vdXMgTm90U3RyZWFtRW5jb2RhYmxlUmVwbHkK
ICAgICBVcGRhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVGb3JHZXRQaXhlbEJ1ZmZlcih1aW50
MzJfdCBieXRlQ291bnQpIC0+IChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlIGhhbmRs
ZSwgSVBDOjpTZW1hcGhvcmUgc2VtYXBob3JlKSBTeW5jaHJvbm91cyBOb3RTdHJlYW1FbmNvZGFi
bGVSZXBseQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcAppbmRleCBm
Y2EyYjU0ZDBmM2JmOTMwOTk3YWUwOTg5NzM0ZmQ1ZWFmZmQ1NzI3Li5lMDExZDlhOTFjNDM5MWVh
ZjU4NjBmZjI1MzU2NTVkNmNmYjFiOGQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9Db25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9D
b25uZWN0aW9uLmNwcApAQCAtMzQ3LDE3ICszNDcsMTkgQEAgdm9pZCBDb25uZWN0aW9uOjplbnF1
ZXVlTWF0Y2hpbmdNZXNzYWdlc1RvTWVzc2FnZVJlY2VpdmVRdWV1ZShNZXNzYWdlUmVjZWl2ZVF1
ZXUKICAgICBTeW5jTWVzc2FnZVN0YXRlOjpzaW5nbGV0b24oKS5lbnF1ZXVlTWF0Y2hpbmdNZXNz
YWdlcygqdGhpcywgcmVjZWl2ZVF1ZXVlLCByZWNlaXZlck5hbWUsIGRlc3RpbmF0aW9uSUQpOwog
CiAgICAgRGVxdWU8c3RkOjp1bmlxdWVfcHRyPERlY29kZXI+PiByZW1haW5pbmdJbmNvbWluZ01l
c3NhZ2VzOwotICAgIGZvciAoYXV0byYgbWVzc2FnZSA6IG1faW5jb21pbmdNZXNzYWdlcykgewor
ICAgIGF1dG8mIHF1ZXVlZE1lc3NhZ2VzID0gaXNTdHJlYW1NZXNzYWdlUmVjZWl2ZXIocmVjZWl2
ZXJOYW1lKSA/IG1faW5jb21pbmdTdHJlYW1NZXNzYWdlc1dpdGhNaXNzaW5nUmVjZWl2ZXJRdWV1
ZXMgOiBtX2luY29taW5nTWVzc2FnZXM7CisgICAgZm9yIChhdXRvJiBtZXNzYWdlIDogcXVldWVk
TWVzc2FnZXMpIHsKICAgICAgICAgaWYgKG1lc3NhZ2UtPm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9
PSByZWNlaXZlck5hbWUgJiYgKG1lc3NhZ2UtPmRlc3RpbmF0aW9uSUQoKSA9PSBkZXN0aW5hdGlv
bklEIHx8ICFkZXN0aW5hdGlvbklEKSkKICAgICAgICAgICAgIHJlY2VpdmVRdWV1ZS5lbnF1ZXVl
TWVzc2FnZSgqdGhpcywgV1RGTW92ZShtZXNzYWdlKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIHJlbWFpbmluZ0luY29taW5nTWVzc2FnZXMuYXBwZW5kKFdURk1vdmUobWVzc2FnZSkpOwog
ICAgIH0KLSAgICBtX2luY29taW5nTWVzc2FnZXMgPSBXVEZNb3ZlKHJlbWFpbmluZ0luY29taW5n
TWVzc2FnZXMpOworICAgIHF1ZXVlZE1lc3NhZ2VzID0gV1RGTW92ZShyZW1haW5pbmdJbmNvbWlu
Z01lc3NhZ2VzKTsKIH0KIAotdm9pZCBDb25uZWN0aW9uOjphZGRNZXNzYWdlUmVjZWl2ZVF1ZXVl
KE1lc3NhZ2VSZWNlaXZlUXVldWUmIHJlY2VpdmVRdWV1ZSwgUmVjZWl2ZXJOYW1lIHJlY2VpdmVy
TmFtZSwgdWludDY0X3QgZGVzdGluYXRpb25JRCkKK3ZvaWQgQ29ubmVjdGlvbjo6YWRkU3RyZWFt
TWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VSZWNlaXZlUXVldWUmIHJlY2VpdmVRdWV1ZSwgUmVjZWl2
ZXJOYW1lIHJlY2VpdmVyTmFtZSwgdWludDY0X3QgZGVzdGluYXRpb25JRCkKIHsKKyAgICBBU1NF
UlQoaXNTdHJlYW1NZXNzYWdlUmVjZWl2ZXIocmVjZWl2ZXJOYW1lKSk7CiAgICAgTG9ja2VyIGlu
Y29taW5nTWVzc2FnZXNMb2NrZXIgeyBtX2luY29taW5nTWVzc2FnZXNMb2NrIH07CiAgICAgZW5x
dWV1ZU1hdGNoaW5nTWVzc2FnZXNUb01lc3NhZ2VSZWNlaXZlUXVldWUocmVjZWl2ZVF1ZXVlLCBy
ZWNlaXZlck5hbWUsIGRlc3RpbmF0aW9uSUQpOwogICAgIG1fcmVjZWl2ZVF1ZXVlcy5hZGQocmVj
ZWl2ZVF1ZXVlLCByZWNlaXZlck5hbWUsIGRlc3RpbmF0aW9uSUQpOwpAQCAtNzY5LDYgKzc3MSwx
NCBAQCB2b2lkIENvbm5lY3Rpb246OnByb2Nlc3NJbmNvbWluZ01lc3NhZ2Uoc3RkOjp1bmlxdWVf
cHRyPERlY29kZXI+IG1lc3NhZ2UpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBpZiAo
aXNTdHJlYW1NZXNzYWdlUmVjZWl2ZXIobWVzc2FnZS0+bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSkg
eworICAgICAgICAvLyBXZSBtaWdodCBoYXZlIHJlY2VpdmVkIHRoaXMgbWVzc2FnZSBvbiB0aGUg
SVBDIHRocmVhZCBiZWZvcmUgdGhlIHN0cmVhbSBkZXN0aW5hdGlvbiBoYXMgYWRkZWQgaXRzZWxm
IGFzCisgICAgICAgIC8vIGEgcmVjZWl2ZSBxdWV1ZSBvbiB0aGUgY29ubmVjdGlvbjsgaW4gdGhp
cyBjYXNlLCBhcHBlbmQgdGhlIG1lc3NhZ2UgdG8gdGhlIGluY29taW5nIG1lc3NhZ2UgcXVldWUu
IFdoZW4KKyAgICAgICAgLy8gdGhlIHJlY2VpdmUgcXVldWUgaXMgYWRkZWQsIHdlJ2xsIHRha2Ug
dGhpcyBxdWV1ZWQgbWVzc2FnZSBhbmQgYXBwZW5kIGl0IHRvIHRoZSByZWNlaXZlIHF1ZXVlLgor
ICAgICAgICBtX2luY29taW5nU3RyZWFtTWVzc2FnZXNXaXRoTWlzc2luZ1JlY2VpdmVyUXVldWVz
LmFwcGVuZChXVEZNb3ZlKG1lc3NhZ2UpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAg
IGlmIChtZXNzYWdlLT5pc1N5bmNNZXNzYWdlKCkpIHsKICAgICAgICAgTG9ja2VyIGxvY2tlciB7
IG1faW5jb21pbmdTeW5jTWVzc2FnZUNhbGxiYWNrTG9jayB9OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9Db25uZWN0aW9uLmgKaW5kZXggMjIwZTVlYWJjYzQwOTk2OGVmN2JmZjAwOWVjNzYy
ODI1YzNlMGM1NS4uYmJjNDBiNGQ2OTU5NDVkMjU2NzliMjM1ZjRlNTRhODI4YmEwZjJkNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uaApAQCAtMjI4LDkgKzIyOCwxMiBA
QCBwdWJsaWM6CiAKICAgICAvLyBBZGRzIGEgbWVzc2FnZSByZWNlaXZlIHF1ZXVlLiBUaGUgY2xp
ZW50IHNob3VsZCBtYWtlIHN1cmUgdGhlIGluc3RhbmNlIGlzIHJlbW92ZWQgYmVmb3JlIGl0IGdv
ZXMKICAgICAvLyBvdXQgb2Ygc2NvcGUuCi0gICAgdm9pZCBhZGRNZXNzYWdlUmVjZWl2ZVF1ZXVl
KE1lc3NhZ2VSZWNlaXZlUXVldWUmLCBSZWNlaXZlck5hbWUsIHVpbnQ2NF90IGRlc3RpbmF0aW9u
SUQgPSAwKTsKLQotICAgIHZvaWQgcmVtb3ZlTWVzc2FnZVJlY2VpdmVRdWV1ZShSZWNlaXZlck5h
bWUsIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQgPSAwKTsKKyAgICB2b2lkIGFkZFN0cmVhbU1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlUmVjZWl2ZVF1ZXVlJiwgUmVjZWl2ZXJOYW1lLCB1aW50NjRfdCBk
ZXN0aW5hdGlvbklEID0gMCk7CisgICAgdm9pZCByZW1vdmVTdHJlYW1NZXNzYWdlUmVjZWl2ZXIo
UmVjZWl2ZXJOYW1lIHJlY2VpdmVyTmFtZSwgdWludDY0X3QgZGVzdGluYXRpb25JRCA9IDApCisg
ICAgeworICAgICAgICBBU1NFUlQoaXNTdHJlYW1NZXNzYWdlUmVjZWl2ZXIocmVjZWl2ZXJOYW1l
KSk7CisgICAgICAgIHJlbW92ZU1lc3NhZ2VSZWNlaXZlUXVldWUocmVjZWl2ZXJOYW1lLCBkZXN0
aW5hdGlvbklEKTsKKyAgICB9CiAKICAgICAvLyBBZGRzIGEgbWVzc2FnZSByZWNlaWV2ZSBxdWV1
ZSB0aGF0IGRpc3BhdGNoZXMgdGhyb3VnaCBXb3JrUXVldWUgdG8gV29ya1F1ZXVlTWVzc2FnZVJl
Y2VpdmVyLgogICAgIC8vIEtlZXBzIHRoZSBXb3JrUXVldWUgYW5kIHRoZSBXb3JrUXVldWVNZXNz
YWdlUmVjZWl2ZXIgYWxpdmUuIERpc3BhdGNoZWQgdGFza3Mga2VlcCBXb3JrUXVldWVNZXNzYWdl
UmVjZWl2ZXIgYWxpdmUuCkBAIC0zNDMsNiArMzQ2LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBv
cFBlbmRpbmdTeW5jUmVxdWVzdElEKFN5bmNSZXF1ZXN0SUQpOwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxEZWNvZGVyPiB3YWl0Rm9yU3luY1JlcGx5KFN5bmNSZXF1ZXN0SUQsIE1lc3NhZ2VOYW1lLCBU
aW1lb3V0LCBPcHRpb25TZXQ8U2VuZFN5bmNPcHRpb24+KTsKIAorICAgIHZvaWQgcmVtb3ZlTWVz
c2FnZVJlY2VpdmVRdWV1ZShSZWNlaXZlck5hbWUsIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQpOwog
ICAgIHZvaWQgZW5xdWV1ZU1hdGNoaW5nTWVzc2FnZXNUb01lc3NhZ2VSZWNlaXZlUXVldWUoTWVz
c2FnZVJlY2VpdmVRdWV1ZSYsIFJlY2VpdmVyTmFtZSwgdWludDY0X3QgZGVzdGluYXRpb25JRCkg
V1RGX1JFUVVJUkVTX0xPQ0sobV9pbmNvbWluZ01lc3NhZ2VzTG9jayk7CiAKICAgICAvLyBDYWxs
ZWQgb24gdGhlIGNvbm5lY3Rpb24gd29yayBxdWV1ZS4KQEAgLTQxNyw2ICs0MjEsNyBAQCBwcml2
YXRlOgogICAgIC8vIEluY29taW5nIG1lc3NhZ2VzLgogICAgIExvY2sgbV9pbmNvbWluZ01lc3Nh
Z2VzTG9jazsKICAgICBEZXF1ZTxzdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4+IG1faW5jb21pbmdN
ZXNzYWdlcyBXVEZfR1VBUkRFRF9CWV9MT0NLKG1faW5jb21pbmdNZXNzYWdlc0xvY2spOworICAg
IERlcXVlPHN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPj4gbV9pbmNvbWluZ1N0cmVhbU1lc3NhZ2Vz
V2l0aE1pc3NpbmdSZWNlaXZlclF1ZXVlcyBXVEZfR1VBUkRFRF9CWV9MT0NLKG1faW5jb21pbmdN
ZXNzYWdlc0xvY2spOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxNZXNzYWdlc1Rocm90dGxlcj4gbV9p
bmNvbWluZ01lc3NhZ2VzVGhyb3R0bGVyOwogICAgIE1lc3NhZ2VSZWNlaXZlUXVldWVNYXAgbV9y
ZWNlaXZlUXVldWVzIFdURl9HVUFSREVEX0JZX0xPQ0sobV9pbmNvbWluZ01lc3NhZ2VzTG9jayk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbVNlcnZlckNv
bm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtU2VydmVyQ29u
bmVjdGlvbi5jcHAKaW5kZXggYWZkZmRiMDBmM2Q5YTg1N2RkMDk0NTllYWNiMmYxYTNjMWFiNDNh
ZS4uYTFlNzc4ZDc4Y2UzZjgzOTYyMmFhYjIwN2I0YjAwNDA5Y2E2MWNiZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtU2VydmVyQ29ubmVjdGlvbi5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtU2VydmVyQ29ubmVjdGlvbi5jcHAK
QEAgLTQwLDEzICs0MCwxMyBAQCBTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uQmFzZTo6U3RyZWFtU2Vy
dmVyQ29ubmVjdGlvbkJhc2UoQ29ubmVjdGlvbiYgY29ubmVjdGlvbiwgUwogCiB2b2lkIFN0cmVh
bVNlcnZlckNvbm5lY3Rpb25CYXNlOjpzdGFydFJlY2VpdmluZ01lc3NhZ2VzSW1wbChSZWNlaXZl
ck5hbWUgcmVjZWl2ZXJOYW1lLCB1aW50NjRfdCBkZXN0aW5hdGlvbklEKQogewotICAgIG1fY29u
bmVjdGlvbi0+YWRkTWVzc2FnZVJlY2VpdmVRdWV1ZSgqdGhpcywgcmVjZWl2ZXJOYW1lLCBkZXN0
aW5hdGlvbklEKTsKKyAgICBtX2Nvbm5lY3Rpb24tPmFkZFN0cmVhbU1lc3NhZ2VSZWNlaXZlcigq
dGhpcywgcmVjZWl2ZXJOYW1lLCBkZXN0aW5hdGlvbklEKTsKICAgICBtX3dvcmtRdWV1ZS5hZGRT
dHJlYW1Db25uZWN0aW9uKCp0aGlzKTsKIH0KIAogdm9pZCBTdHJlYW1TZXJ2ZXJDb25uZWN0aW9u
QmFzZTo6c3RvcFJlY2VpdmluZ01lc3NhZ2VzSW1wbChSZWNlaXZlck5hbWUgcmVjZWl2ZXJOYW1l
LCB1aW50NjRfdCBkZXN0aW5hdGlvbklEKQogewotICAgIG1fY29ubmVjdGlvbi0+cmVtb3ZlTWVz
c2FnZVJlY2VpdmVRdWV1ZShyZWNlaXZlck5hbWUsIGRlc3RpbmF0aW9uSUQpOworICAgIG1fY29u
bmVjdGlvbi0+cmVtb3ZlU3RyZWFtTWVzc2FnZVJlY2VpdmVyKHJlY2VpdmVyTmFtZSwgZGVzdGlu
YXRpb25JRCk7CiAgICAgbV93b3JrUXVldWUucmVtb3ZlU3RyZWFtQ29ubmVjdGlvbigqdGhpcyk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMu
cHkgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CmluZGV4IDY1ODRk
MWFkN2UxNTRlYjA5MjAyMzEwZGRmYTZiNWUxMjFhZDJjMzkuLmY3Y2NkYzhjNjdkMmJhMmMzZGVm
OGRhMmVjMmRlNGJmOGE1MjYwYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93
ZWJraXQvbWVzc2FnZXMucHkKKysrIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNz
YWdlcy5weQpAQCAtMTA5Myw2ICsxMDkzLDE4IEBAIGRlZiBnZW5lcmF0ZV9tZXNzYWdlX25hbWVz
X2hlYWRlcihyZWNlaXZlcnMpOgogICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgcmV0dXJuIGZh
bHNlO1xuJykKICAgICByZXN1bHQuYXBwZW5kKCd9XG4nKQogICAgIHJlc3VsdC5hcHBlbmQoJ1xu
JykKKyAgICByZXN1bHQuYXBwZW5kKCdjb25zdGV4cHIgYm9vbCBpc1N0cmVhbU1lc3NhZ2VSZWNl
aXZlcihSZWNlaXZlck5hbWUgbmFtZSlcbicpCisgICAgcmVzdWx0LmFwcGVuZCgne1xuJykKKyAg
ICByZXN1bHQuYXBwZW5kKCcgICAgc3dpdGNoIChuYW1lKSB7XG4nKQorICAgIGZvciBuYW1lIGlu
IFtyZWNlaXZlci5uYW1lIGZvciByZWNlaXZlciBpbiByZWNlaXZlcnMgaWYgcmVjZWl2ZXIuaGFz
X2F0dHJpYnV0ZShTVFJFQU1fQVRUUklCVVRFKV06CisgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAg
ICBjYXNlIFJlY2VpdmVyTmFtZTo6JXM6XG4nICUgbmFtZSkKKyAgICByZXN1bHQuYXBwZW5kKCcg
ICAgICAgIHJldHVybiB0cnVlO1xuJykKKyAgICByZXN1bHQuYXBwZW5kKCcgICAgZGVmYXVsdDpc
bicpCisgICAgcmVzdWx0LmFwcGVuZCgnICAgICAgICBicmVhaztcbicpCisgICAgcmVzdWx0LmFw
cGVuZCgnICAgIH1cbicpCisgICAgcmVzdWx0LmFwcGVuZCgnICAgIHJldHVybiBmYWxzZTtcbicp
CisgICAgcmVzdWx0LmFwcGVuZCgnfVxuJykKKyAgICByZXN1bHQuYXBwZW5kKCdcbicpCiAgICAg
cmVzdWx0LmFwcGVuZCgnfSAvLyBuYW1lc3BhY2UgSVBDXG4nKQogICAgIHJlc3VsdC5hcHBlbmQo
J1xuJykKICAgICByZXN1bHQuYXBwZW5kKCduYW1lc3BhY2UgV1RGIHtcbicpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rlc3RzL01lc3NhZ2VOYW1lcy5oIGIvU291
cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9NZXNzYWdlTmFtZXMuaAppbmRleCAyZWZk
NWUwNDkwZjEwNmFjMDZhZjFlOWMyNGFmZTc0NjAxNTE3OTM2Li5kYjQxNzgxMDM4MmMzMjJiYTY5
OGFmMmEwODY3ZjI0ZTJmZjk2YWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMv
d2Via2l0L3Rlc3RzL01lc3NhZ2VOYW1lcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93
ZWJraXQvdGVzdHMvTWVzc2FnZU5hbWVzLmgKQEAgLTEyOSw2ICsxMjksMTcgQEAgY29uc3RleHBy
IGJvb2wgbWVzc2FnZUlzU3luYyhNZXNzYWdlTmFtZSBuYW1lKQogICAgIHJldHVybiBuYW1lID49
IE1lc3NhZ2VOYW1lOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX0dldFBsdWdpblByb2Nlc3NDb25u
ZWN0aW9uOwogfQogCitjb25zdGV4cHIgYm9vbCBpc1N0cmVhbU1lc3NhZ2VSZWNlaXZlcihSZWNl
aXZlck5hbWUgbmFtZSkKK3sKKyAgICBzd2l0Y2ggKG5hbWUpIHsKKyAgICBjYXNlIFJlY2VpdmVy
TmFtZTo6VGVzdFdpdGhTdHJlYW06CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIElQQwogCiBuYW1lc3BhY2UgV1RGIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5LmNwcAppbmRleCA0MTM1MTcyZmFiZmMxNjExZGQ1NjNkYjA5MjY5MmZkZWEyMDc2
ODIwLi4yOGJiMjQ0ODE2ODE5M2VlZTdkY2FjZWIzODFhOGYzZGUwOGRhMWFmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCkBAIC0xMjcsOSArMTI3LDcgQEAgYm9v
bCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OndhaXRGb3JEaWRGbHVzaCgpCiAKIHZvaWQg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGVSZW1vdGVJbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYgaW1hZ2VCdWZmZXIpCiB7Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGFu
IG5vcm1hbCAoYXN5bmMpIHN0cmVhbSBtZXNzYWdlLiBIb3dldmVyLCBkb2luZyBzbyBtYXkgY2F1
c2Ugc3Vic2VxdWVudCBvdXQtb2Ytc3RyZWFtIG1lc3NhZ2VzIHNlbnQgdG8gdGhlIG5ld2x5IGNy
ZWF0ZWQgaW1hZ2UKLSAgICAvLyBidWZmZXIgdG8gYmUgZHJvcHBlZCBieSB0aGUgSVBDIGNvbm5l
Y3Rpb24uIEZvciB0aGUgdGltZSBiZWluZywgd29yayBhcm91bmQgdGhpcyBieSB1c2luZyBzeW5j
IElQQyAoc2VlIDxodHRwczovL3dlYmtpdC5vcmcvYi8yMzE2ODE+IGZvciBtb3JlIGRldGFpbHMp
LgotICAgIHNlbmRTeW5jVG9TdHJlYW0oTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OkNyZWF0ZUltYWdlQnVmZmVyKGltYWdlQnVmZmVyLmxvZ2ljYWxTaXplKCksIGltYWdlQnVmZmVy
LnJlbmRlcmluZ01vZGUoKSwgaW1hZ2VCdWZmZXIucmVzb2x1dGlvblNjYWxlKCksIGltYWdlQnVm
ZmVyLmNvbG9yU3BhY2UoKSwgaW1hZ2VCdWZmZXIucGl4ZWxGb3JtYXQoKSwgaW1hZ2VCdWZmZXIu
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCkpLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6Q3JlYXRlSW1hZ2VCdWZmZXI6OlJlcGx5KCksIDNfcyk7CisgICAgc2VuZFRvU3Ry
ZWFtKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpDcmVhdGVJbWFnZUJ1ZmZlcihp
bWFnZUJ1ZmZlci5sb2dpY2FsU2l6ZSgpLCBpbWFnZUJ1ZmZlci5yZW5kZXJpbmdNb2RlKCksIGlt
YWdlQnVmZmVyLnJlc29sdXRpb25TY2FsZSgpLCBpbWFnZUJ1ZmZlci5jb2xvclNwYWNlKCksIGlt
YWdlQnVmZmVyLnBpeGVsRm9ybWF0KCksIGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllcigpKSk7CiB9CiAKIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5OjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRl
cmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0IHBpeGVsRm9ybWF0KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>441958</attachid>
            <date>2021-10-20 17:02:55 -0700</date>
            <delta_ts>2021-10-21 09:20:29 -0700</delta_ts>
            <desc>Alternate approach?</desc>
            <filename>bug-231970-20211020170255.patch</filename>
            <type>text/plain</type>
            <size>15121</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg0NDc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDdmYjZjNmE5YTQ0ZDhlMjMz
Y2RkN2U5MzVlYTQ5YWM3N2QzNDgyZTAuLmNlOWUyYWU5M2U1NjdkYzM5OTljOTIxNTc0MThjNGYy
NTZlYWZlODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMjEtMTAtMjAgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6Q3JlYXRlSW1hZ2VCdWZmZXIgc2hvdWxkIGJlIGFuIGFzeW5jIElQQyBzdHJlYW0g
bWVzc2FnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjMxOTcwCisKKyAgICAgICAgRm9yIEVXUy4KKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OnN0YXJ0TGlzdGVuaW5nRm9ySVBDKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6c3RvcExpc3RlbmluZ0ZvcklQQyk6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAg
ICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaDoKKyAgICAg
ICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMu
aW46CisgICAgICAgICogUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWUuY3Bw
OgorICAgICAgICAoSVBDOjpTdHJlYW1Db25uZWN0aW9uV29ya1F1ZXVlOjpwcm9jZXNzU3RyZWFt
cyk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWUuaDoK
KyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvU3RyZWFtU2VydmVyQ29ubmVjdGlvbi5jcHA6CisgICAg
ICAgIChJUEM6OlN0cmVhbVNlcnZlckNvbm5lY3Rpb246OmVucXVldWVNZXNzYWdlKToKKyAgICAg
ICAgKElQQzo6U3RyZWFtU2VydmVyQ29ubmVjdGlvbjo6c3RhcnRSZWNlaXZpbmdNZXNzYWdlcyk6
CisgICAgICAgIChJUEM6OlN0cmVhbVNlcnZlckNvbm5lY3Rpb246OnN0b3BSZWNlaXZpbmdNZXNz
YWdlcyk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL1N0cmVhbVNlcnZlckNvbm5lY3Rpb24uaDoK
KyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6
OmNyZWF0ZVJlbW90ZUltYWdlQnVmZmVyKToKKwogMjAyMS0xMC0xOSAgV2Vuc29uIEhzaWVoICA8
d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OIChyMjg0MDc5KTog
ZmFzdC9jYW52YXMvZ3JhZGllbnQtd2l0aC1jbGlwLmh0bWwgYW5kIGZhc3QvY2FudmFzL2dyYWRp
ZW50LXRleHQtd2l0aC1zaGFkb3cuaHRtbCBhcmUgZmxha3kgZmFpbHVyZXMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
LmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kLmNwcAppbmRleCBmNThjMzY5NmY1M2VmZDE1MGIxZGI5MGUzMWIzOWViNTY2YjVkY2Zj
Li5iOGFjODYzOTJlN2U3ZGQ0NmQwYzhjNDk4ZDU4MGMzYjE1ODFlMjEyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQuY3BwCkBAIC05Miw2ICs5Miw3IEBAIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29uCiB2
b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnN0YXJ0TGlzdGVuaW5nRm9ySVBDKCkKIHsKICAg
ICBtX3N0cmVhbUNvbm5lY3Rpb24tPnN0YXJ0UmVjZWl2aW5nTWVzc2FnZXMoKnRoaXMsIE1lc3Nh
Z2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKSk7CisgICAgbV9zdHJlYW1Db25uZWN0
aW9uLT5zdGFydFJlY2VpdmluZ01lc3NhZ2VzKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpOwogfQogCiBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjp+UmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpCkBAIC0xMDYsNiArMTA3LDcgQEAgdm9pZCBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpzdG9wTGlzdGVuaW5nRm9ySVBDKCkKIHsKICAgICBBU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIG1fc3RyZWFtQ29ubmVjdGlvbi0+c3RvcFJlY2Vp
dmluZ01lc3NhZ2VzKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKSk7Cisg
ICAgbV9zdHJlYW1Db25uZWN0aW9uLT5zdG9wUmVjZWl2aW5nTWVzc2FnZXMoTWVzc2FnZXM6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSk7CiAgICAgZm9y
IChhdXRvJiByZW1vdGVDb250ZXh0IDogc3RkOjpleGNoYW5nZShtX3JlbW90ZURpc3BsYXlMaXN0
cywgeyB9KSkKICAgICAgICAgcmVtb3RlQ29udGV4dC5zdG9wTGlzdGVuaW5nRm9ySVBDKCk7CiB9
CkBAIC0xMzgsMTIgKzE0MCwxMSBAQCB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRpZEZs
dXNoKEdyYXBoaWNzQ29udGV4dEZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aQogICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6RGlkRmx1c2goZmx1c2hJZGVu
dGlmaWVyLCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIub2JqZWN0KCkpLCBtX3JlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyKTsKIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpj
cmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgY29uc3QgRGVzdGluYXRp
b25Db2xvclNwYWNlJiBjb2xvclNwYWNlLCBQaXhlbEZvcm1hdCBwaXhlbEZvcm1hdCwgUmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlQnVmZmVyUmVzb3VyY2VJZGVudGlmaWVyLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNh
bFNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0IHBp
eGVsRm9ybWF0LCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZmZXJSZXNvdXJj
ZUlkZW50aWZpZXIpCiB7CiAgICAgLy8gSW1tZWRpYXRlbHkgdHVybiB0aGUgUmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyICh3aGljaCBpcyBlcnJvci1wcm9uZSkgdG8gYSBRdWFsaWZpZWRSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsCiAgICAgLy8gYW5kIHVzZSBhIGhlbHBlciBmdW5jdGlv
biB0byBtYWtlIHN1cmUgdGhhdCBkb24ndCBhY2NpZGVudGFsbHkgdXNlIHRoZSBSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgKGJlY2F1c2UgdGhlIGhlbHBlciBmdW5jdGlvbiBjYW4ndCBzZWUg
aXQpLgogICAgIGNyZWF0ZUltYWdlQnVmZmVyV2l0aFF1YWxpZmllZElkZW50aWZpZXIobG9naWNh
bFNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcGl4ZWxG
b3JtYXQsIHsgaW1hZ2VCdWZmZXJSZXNvdXJjZUlkZW50aWZpZXIsIG1fZ3B1Q29ubmVjdGlvblRv
V2ViUHJvY2Vzcy0+d2ViUHJvY2Vzc0lkZW50aWZpZXIoKSB9KTsKLSAgICBjb21wbGV0aW9uSGFu
ZGxlcigpOwogfQogCiB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVm
ZmVyV2l0aFF1YWxpZmllZElkZW50aWZpZXIoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwg
UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0
IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQgcGl4ZWxGb3Jt
YXQsIFF1YWxpZmllZFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlclJlc291
cmNlSWRlbnRpZmllcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCmluZGV4IDMxYWQ5Mjk4OTliZGNmYjgw
MGVhZWJkY2E5YjMxZjhhYTkzMGFjNDkuLjk1ZGY4ZWE1NTU2ZjkyM2NmNDFmNjc2YTNlZGNkY2Vi
Zjk3MDNmMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dy
YXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaApAQCAtMTAxLDcgKzEwMSw3IEBAIHByaXZh
dGU6CiAgICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVy
cmlkZTsKIAogICAgIC8vIE1lc3NhZ2VzIHRvIGJlIHJlY2VpdmVkLgotICAgIHZvaWQgY3JlYXRl
SW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgV2ViQ29y
ZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBXZWJDb3JlOjpE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBXZWJDb3JlOjpQaXhlbEZvcm1hdCwgV2ViQ29yZTo6UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwor
ICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dp
Y2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBj
b25zdCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBXZWJDb3JlOjpQaXhlbEZvcm1h
dCwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICB2b2lkIHVwZGF0
ZVNoYXJlZE1lbW9yeUZvckdldFBpeGVsQnVmZmVyKHVpbnQzMl90IGJ5dGVDb3VudCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYpPiYmKTsKICAg
ICB2b2lkIHNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Y29uc3QgSVBDOjpTZW1hcGhvcmUmKT4mJik7CiAgICAgdm9pZCB1cGRhdGVTaGFyZWRNZW1vcnlB
bmRTZW1hcGhvcmVGb3JHZXRQaXhlbEJ1ZmZlcih1aW50MzJfdCBieXRlQ291bnQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoY29uc3QgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUmLCBjb25zdCBJUEM6
OlNlbWFwaG9yZSYpPiYmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9n
cmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4K
aW5kZXggOTQ5ODg2MzA4YTM1NDY1ZGNlNWZmYWNiY2M3YmMxYzZjNDU3YjQwYS4uYTE0MmY0ODk2
NmY1YzQ5NzU5NDU2NTQ3NzJjNzljMzE5NzZmNTNkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4K
KysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQubWVzc2FnZXMuaW4KQEAgLTIzLDcgKzIzLDcgQEAKICNpZiBFTkFCTEUoR1BVX1BST0NF
U1MpCiAKIG1lc3NhZ2VzIC0+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgTm90UmVmQ291bnRlZCBT
dHJlYW0gewotICAgIENyZWF0ZUltYWdlQnVmZmVyKFdlYkNvcmU6OkZsb2F0U2l6ZSBsb2dpY2Fs
U2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBlbnVt
OnVpbnQ4X3QgV2ViQ29yZTo6UGl4ZWxGb3JtYXQgcGl4ZWxGb3JtYXQsIFdlYkNvcmU6OlJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIC0+ICgp
IFN5bmNocm9ub3VzCisgICAgQ3JlYXRlSW1hZ2VCdWZmZXIoV2ViQ29yZTo6RmxvYXRTaXplIGxv
Z2ljYWxTaXplLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2Us
IGVudW06dWludDhfdCBXZWJDb3JlOjpQaXhlbEZvcm1hdCBwaXhlbEZvcm1hdCwgV2ViQ29yZTo6
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikK
ICAgICBVcGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRQaXhlbEJ1ZmZlcih1aW50MzJfdCBieXRlQ291
bnQpIC0+IChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlIGhhbmRsZSkgU3luY2hyb25v
dXMgTm90U3RyZWFtRW5jb2RhYmxlUmVwbHkKICAgICBTZW1hcGhvcmVGb3JHZXRQaXhlbEJ1ZmZl
cigpIC0+IChJUEM6OlNlbWFwaG9yZSBzZW1hcGhvcmUpIFN5bmNocm9ub3VzIE5vdFN0cmVhbUVu
Y29kYWJsZVJlcGx5CiAgICAgVXBkYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3JlRm9yR2V0UGl4
ZWxCdWZmZXIodWludDMyX3QgYnl0ZUNvdW50KSAtPiAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OklQ
Q0hhbmRsZSBoYW5kbGUsIElQQzo6U2VtYXBob3JlIHNlbWFwaG9yZSkgU3luY2hyb25vdXMgTm90
U3RyZWFtRW5jb2RhYmxlUmVwbHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0v
SVBDL1N0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWUuY3BwIGIvU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9JUEMvU3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZS5jcHAKaW5kZXggZjg0OWVhM2NkZmY0OTJi
Y2RmYzRkNGE2ZTI5MzQ3NGU3YTY1YWJhMy4uYjJkZTE1ZmQ0ZGZhZDUxZWI4ODk0YzkwZGVkZDY2
MDM0NmQ2MTZiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFt
Q29ubmVjdGlvbldvcmtRdWV1ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMv
U3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZS5jcHAKQEAgLTExMSwxMSArMTExLDExIEBAIHZvaWQg
U3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZTo6cHJvY2Vzc1N0cmVhbXMoKQogICAgIGJvb2wgaGFz
TW9yZVRvUHJvY2VzcyA9IGZhbHNlOwogICAgIGRvIHsKICAgICAgICAgRGVxdWU8V1RGOjpGdW5j
dGlvbjx2b2lkKCk+PiBmdW5jdGlvbnM7Ci0gICAgICAgIEhhc2hTZXQ8UmVmPFN0cmVhbVNlcnZl
ckNvbm5lY3Rpb25CYXNlPj4gY29ubmVjdGlvbnM7CisgICAgICAgIFZlY3RvcjxSZWY8U3RyZWFt
U2VydmVyQ29ubmVjdGlvbkJhc2U+PiBjb25uZWN0aW9uczsKICAgICAgICAgewogICAgICAgICAg
ICAgTG9ja2VyIGxvY2tlciB7IG1fbG9jayB9OwogICAgICAgICAgICAgZnVuY3Rpb25zLnN3YXAo
bV9mdW5jdGlvbnMpOwotICAgICAgICAgICAgY29ubmVjdGlvbnMgPSBtX2Nvbm5lY3Rpb25zOwor
ICAgICAgICAgICAgY29ubmVjdGlvbnMgPSBjb3B5VG9WZWN0b3IobV9jb25uZWN0aW9ucy52YWx1
ZXMoKSk7CiAgICAgICAgIH0KICAgICAgICAgZm9yIChhdXRvJiBmdW5jdGlvbiA6IGZ1bmN0aW9u
cykKICAgICAgICAgICAgIFdURk1vdmUoZnVuY3Rpb24pKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uV29ya1F1ZXVlLmggYi9Tb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uV29ya1F1ZXVlLmgKaW5kZXggZGEz
NTIyZGY5YzRjOTIwMWEwNWVmNjIyZjNkYWRhNWI4Mjg2ZjRkZi4uZjIyM2RmMjczZTZlNDhmZmY4
Mjg3ZjcyMTk2MTA1M2Q1MjI1OTNkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9JUEMvU3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWUuaApAQCAtMzAsNyArMzAsNyBAQAog
I2luY2x1ZGUgPGF0b21pYz4KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYv
RnVuY3Rpb25EaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRl
IDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KIApAQCAtNjcsNyArNjcsNyBAQCBwcml2YXRlOgogCiAgICAgTG9j
ayBtX2xvY2s7CiAgICAgRGVxdWU8RnVuY3Rpb248dm9pZCgpPj4gbV9mdW5jdGlvbnMgV1RGX0dV
QVJERURfQllfTE9DSyhtX2xvY2spOwotICAgIEhhc2hTZXQ8UmVmPFN0cmVhbVNlcnZlckNvbm5l
Y3Rpb25CYXNlPj4gbV9jb25uZWN0aW9ucyBXVEZfR1VBUkRFRF9CWV9MT0NLKG1fbG9jayk7Cisg
ICAgSGFzaENvdW50ZWRTZXQ8UmVmPFN0cmVhbVNlcnZlckNvbm5lY3Rpb25CYXNlPj4gbV9jb25u
ZWN0aW9ucyBXVEZfR1VBUkRFRF9CWV9MT0NLKG1fbG9jayk7CiB9OwogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1TZXJ2ZXJDb25uZWN0aW9uLmNwcCBi
L1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbVNlcnZlckNvbm5lY3Rpb24uY3BwCmlu
ZGV4IGFmZGZkYjAwZjNkOWE4NTdkZDA5NDU5ZWFjYjJmMWEzYzFhYjQzYWUuLjIxZDA3OTAwOGQy
NWU3MmRhNzhjZmU5YmMyOGIwMTRhZjEyNWU0YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
UGxhdGZvcm0vSVBDL1N0cmVhbVNlcnZlckNvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL1N0cmVhbVNlcnZlckNvbm5lY3Rpb24uY3BwCkBAIC0xNDEsNiArMTQx
LDE5IEBAIHNpemVfdCBTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uQmFzZTo6Y2xhbXBlZExpbWl0KFNl
cnZlckxpbWl0IHNlcnZlckxpbWl0KSBjb25zdAogICAgIHJldHVybiBzdGQ6Om1pbihsaW1pdCwg
ZGF0YVNpemUoKSAtIDEpOwogfQogCit2b2lkIFN0cmVhbVNlcnZlckNvbm5lY3Rpb246OmVucXVl
dWVNZXNzYWdlKENvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIHN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVy
PiYmIG1lc3NhZ2UpCit7CisgICAgYXV0byBrZXkgPSBzdGQ6Om1ha2VfcGFpcihzdGF0aWNfY2Fz
dDx1aW50OF90PihtZXNzYWdlLT5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkpLCBzdGF0aWNfY2FzdDx1
aW50NjRfdD4obWVzc2FnZS0+ZGVzdGluYXRpb25JRCgpKSk7CisgICAgeworICAgICAgICBMb2Nr
ZXIgbG9ja2VyIHsgbV9yZWNlaXZlcnNMb2NrIH07CisgICAgICAgIGlmIChVTkxJS0VMWSghbV9y
ZWNlaXZlcnMuY29udGFpbnMoa2V5KSkpIHsKKyAgICAgICAgICAgIG1faW5jb21pbmdNZXNzYWdl
c1dpdGhNaXNzaW5nUmVjZWl2ZXJzLmFwcGVuZChXVEZNb3ZlKG1lc3NhZ2UpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBTdHJlYW1TZXJ2ZXJDb25uZWN0aW9u
QmFzZTo6ZW5xdWV1ZU1lc3NhZ2UoY29ubmVjdGlvbiwgV1RGTW92ZShtZXNzYWdlKSk7Cit9CisK
IHZvaWQgU3RyZWFtU2VydmVyQ29ubmVjdGlvbjo6c3RhcnRSZWNlaXZpbmdNZXNzYWdlcyhTdHJl
YW1NZXNzYWdlUmVjZWl2ZXImIHJlY2VpdmVyLCBSZWNlaXZlck5hbWUgcmVjZWl2ZXJOYW1lLCB1
aW50NjRfdCBkZXN0aW5hdGlvbklEKQogewogICAgIHsKQEAgLTE0OCwxMCArMTYxLDMxIEBAIHZv
aWQgU3RyZWFtU2VydmVyQ29ubmVjdGlvbjo6c3RhcnRSZWNlaXZpbmdNZXNzYWdlcyhTdHJlYW1N
ZXNzYWdlUmVjZWl2ZXImIHJlY2VpCiAgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX3JlY2VpdmVy
c0xvY2sgfTsKICAgICAgICAgQVNTRVJUKCFtX3JlY2VpdmVycy5jb250YWlucyhrZXkpKTsKICAg
ICAgICAgbV9yZWNlaXZlcnMuYWRkKGtleSwgcmVjZWl2ZXIpOworCisgICAgICAgIFZlY3Rvcjxz
dGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4+IG1lc3NhZ2VzVG9QdXRCYWNrOworICAgICAgICBmb3Ig
KGF1dG8mIG1lc3NhZ2UgOiBtX2luY29taW5nTWVzc2FnZXNXaXRoTWlzc2luZ1JlY2VpdmVycykg
eworICAgICAgICAgICAgaWYgKG1lc3NhZ2UtPm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSByZWNl
aXZlck5hbWUgJiYgbWVzc2FnZS0+ZGVzdGluYXRpb25JRCgpID09IGRlc3RpbmF0aW9uSUQpCisg
ICAgICAgICAgICAgICAgU3RyZWFtU2VydmVyQ29ubmVjdGlvbkJhc2U6OmVucXVldWVNZXNzYWdl
KG1fY29ubmVjdGlvbiwgV1RGTW92ZShtZXNzYWdlKSk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgbWVzc2FnZXNUb1B1dEJhY2suYXBwZW5kKFdURk1vdmUobWVzc2FnZSkpOwor
ICAgICAgICB9CisgICAgICAgIG1faW5jb21pbmdNZXNzYWdlc1dpdGhNaXNzaW5nUmVjZWl2ZXJz
ID0gV1RGTW92ZShtZXNzYWdlc1RvUHV0QmFjayk7CiAgICAgfQogICAgIFN0cmVhbVNlcnZlckNv
bm5lY3Rpb25CYXNlOjpzdGFydFJlY2VpdmluZ01lc3NhZ2VzSW1wbChyZWNlaXZlck5hbWUsIGRl
c3RpbmF0aW9uSUQpOwogfQogCit2b2lkIFN0cmVhbVNlcnZlckNvbm5lY3Rpb246OnN0YXJ0UmVj
ZWl2aW5nTWVzc2FnZXMoUmVjZWl2ZXJOYW1lIHJlY2VpdmVyTmFtZSkKK3sKKyAgICBtX2Nvbm5l
Y3Rpb24tPmFkZE1lc3NhZ2VSZWNlaXZlUXVldWUoKnRoaXMsIHJlY2VpdmVyTmFtZSk7CisgICAg
bV93b3JrUXVldWUuYWRkU3RyZWFtQ29ubmVjdGlvbigqdGhpcyk7Cit9CisKK3ZvaWQgU3RyZWFt
U2VydmVyQ29ubmVjdGlvbjo6c3RvcFJlY2VpdmluZ01lc3NhZ2VzKFJlY2VpdmVyTmFtZSByZWNl
aXZlck5hbWUpCit7CisgICAgbV9jb25uZWN0aW9uLT5yZW1vdmVNZXNzYWdlUmVjZWl2ZVF1ZXVl
KHJlY2VpdmVyTmFtZSk7CisgICAgbV93b3JrUXVldWUucmVtb3ZlU3RyZWFtQ29ubmVjdGlvbigq
dGhpcyk7Cit9CisKIHZvaWQgU3RyZWFtU2VydmVyQ29ubmVjdGlvbjo6c3RvcFJlY2VpdmluZ01l
c3NhZ2VzKFJlY2VpdmVyTmFtZSByZWNlaXZlck5hbWUsIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQp
CiB7CiAgICAgU3RyZWFtU2VydmVyQ29ubmVjdGlvbkJhc2U6OnN0b3BSZWNlaXZpbmdNZXNzYWdl
c0ltcGwocmVjZWl2ZXJOYW1lLCBkZXN0aW5hdGlvbklEKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbVNlcnZlckNvbm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL1N0cmVhbVNlcnZlckNvbm5lY3Rpb24uaAppbmRleCAzYzRhZTBkOGM3
N2IyOTlmNDdmMDdhNGE3NWIwYWY1YWM5NDIyOGM2Li5hOGE0YzNhNzc5M2ZkNjgxN2Y5MDNiZjIy
MTY3MDdhMDQ0ZTM1NWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9T
dHJlYW1TZXJ2ZXJDb25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMv
U3RyZWFtU2VydmVyQ29ubmVjdGlvbi5oCkBAIC02Myw3ICs2Myw3IEBAIHByb3RlY3RlZDoKICAg
ICB2b2lkIHN0b3BSZWNlaXZpbmdNZXNzYWdlc0ltcGwoUmVjZWl2ZXJOYW1lLCB1aW50NjRfdCBk
ZXN0aW5hdGlvbklEKTsKIAogICAgIC8vIE1lc3NhZ2VSZWNlaXZlUXVldWUKLSAgICB2b2lkIGVu
cXVldWVNZXNzYWdlKENvbm5lY3Rpb24mLCBzdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4mJikgZmlu
YWw7CisgICAgdm9pZCBlbnF1ZXVlTWVzc2FnZShDb25uZWN0aW9uJiwgc3RkOjp1bmlxdWVfcHRy
PERlY29kZXI+JiYpIG92ZXJyaWRlOwogCiAgICAgc3RydWN0IFNwYW4gewogICAgICAgICB1aW50
OF90KiBkYXRhOwpAQCAtMTQ0LDggKzE0NCwxMiBAQCBwdWJsaWM6CiAgICAgLy8gU3RvcHMgdGhl
IG1lc3NhZ2UgcmVjZWlwdC4gTm90ZTogYWxyZWFkeSByZWNlaXZlZCBtZXNzYWdlcyBtaWdodCBz
dGlsbCBiZSBkZWxpdmVyZWQuCiAgICAgdm9pZCBzdG9wUmVjZWl2aW5nTWVzc2FnZXMoUmVjZWl2
ZXJOYW1lLCB1aW50NjRfdCBkZXN0aW5hdGlvbklEKTsKIAorICAgIHZvaWQgc3RhcnRSZWNlaXZp
bmdNZXNzYWdlcyhSZWNlaXZlck5hbWUpOworICAgIHZvaWQgc3RvcFJlY2VpdmluZ01lc3NhZ2Vz
KFJlY2VpdmVyTmFtZSk7CisKICAgICAvLyBTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uQmFzZSBvdmVy
cmlkZXMuCiAgICAgRGlzcGF0Y2hSZXN1bHQgZGlzcGF0Y2hTdHJlYW1NZXNzYWdlcyhzaXplX3Qg
bWVzc2FnZUxpbWl0KSBmaW5hbDsKKyAgICB2b2lkIGVucXVldWVNZXNzYWdlKENvbm5lY3Rpb24m
LCBzdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4mJikgZmluYWw7CiAKIHByaXZhdGU6CiAgICAgU3Ry
ZWFtU2VydmVyQ29ubmVjdGlvbihDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBTdHJlYW1Db25uZWN0
aW9uQnVmZmVyJiYgc3RyZWFtQnVmZmVyLCBTdHJlYW1Db25uZWN0aW9uV29ya1F1ZXVlJiB3b3Jr
UXVldWUpCkBAIC0xNTgsNiArMTYyLDcgQEAgcHJpdmF0ZToKICAgICBMb2NrIG1fcmVjZWl2ZXJz
TG9jazsKICAgICB1c2luZyBSZWNlaXZlcnNNYXAgPSBIYXNoTWFwPHN0ZDo6cGFpcjx1aW50OF90
LCB1aW50NjRfdD4sIFJlZjxTdHJlYW1NZXNzYWdlUmVjZWl2ZXI+PjsKICAgICBSZWNlaXZlcnNN
YXAgbV9yZWNlaXZlcnMgV1RGX0dVQVJERURfQllfTE9DSyhtX3JlY2VpdmVyc0xvY2spOworICAg
IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4+IG1faW5jb21pbmdNZXNzYWdlc1dpdGhN
aXNzaW5nUmVjZWl2ZXJzIFdURl9HVUFSREVEX0JZX0xPQ0sobV9yZWNlaXZlcnNMb2NrKTsKICAg
ICB1aW50NjRfdCBtX2N1cnJlbnREZXN0aW5hdGlvbklEIHsgMCB9OwogfTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCmluZGV4IDQxMzUxNzJmYWJmYzE2MTFkZDU2
M2RiMDkyNjkyZmRlYTIwNzY4MjAuLjI4YmIyNDQ4MTY4MTkzZWVlN2RjYWNlYjM4MWE4ZjNkZTA4
ZGExYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKQEAgLTEy
Nyw5ICsxMjcsNyBAQCBib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6d2FpdEZvckRp
ZEZsdXNoKCkKIAogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZVJlbW90
ZUltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlcikKIHsKLSAgICAvLyBGSVhNRTog
VGhpcyBzaG91bGQgYmUgYW4gbm9ybWFsIChhc3luYykgc3RyZWFtIG1lc3NhZ2UuIEhvd2V2ZXIs
IGRvaW5nIHNvIG1heSBjYXVzZSBzdWJzZXF1ZW50IG91dC1vZi1zdHJlYW0gbWVzc2FnZXMgc2Vu
dCB0byB0aGUgbmV3bHkgY3JlYXRlZCBpbWFnZQotICAgIC8vIGJ1ZmZlciB0byBiZSBkcm9wcGVk
IGJ5IHRoZSBJUEMgY29ubmVjdGlvbi4gRm9yIHRoZSB0aW1lIGJlaW5nLCB3b3JrIGFyb3VuZCB0
aGlzIGJ5IHVzaW5nIHN5bmMgSVBDIChzZWUgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIzMTY4MT4g
Zm9yIG1vcmUgZGV0YWlscykuCi0gICAgc2VuZFN5bmNUb1N0cmVhbShNZXNzYWdlczo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6Q3JlYXRlSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIubG9naWNhbFNp
emUoKSwgaW1hZ2VCdWZmZXIucmVuZGVyaW5nTW9kZSgpLCBpbWFnZUJ1ZmZlci5yZXNvbHV0aW9u
U2NhbGUoKSwgaW1hZ2VCdWZmZXIuY29sb3JTcGFjZSgpLCBpbWFnZUJ1ZmZlci5waXhlbEZvcm1h
dCgpLCBpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSksIE1lc3NhZ2Vz
OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpDcmVhdGVJbWFnZUJ1ZmZlcjo6UmVwbHkoKSwgM19z
KTsKKyAgICBzZW5kVG9TdHJlYW0oTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkNy
ZWF0ZUltYWdlQnVmZmVyKGltYWdlQnVmZmVyLmxvZ2ljYWxTaXplKCksIGltYWdlQnVmZmVyLnJl
bmRlcmluZ01vZGUoKSwgaW1hZ2VCdWZmZXIucmVzb2x1dGlvblNjYWxlKCksIGltYWdlQnVmZmVy
LmNvbG9yU3BhY2UoKSwgaW1hZ2VCdWZmZXIucGl4ZWxGb3JtYXQoKSwgaW1hZ2VCdWZmZXIucmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCkpKTsKIH0KIAogUmVmUHRyPEltYWdlQnVmZmVyPiBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgUGl4ZWxGb3Jt
YXQgcGl4ZWxGb3JtYXQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>441970</attachid>
            <date>2021-10-20 18:29:40 -0700</date>
            <delta_ts>2021-10-21 09:20:30 -0700</delta_ts>
            <desc>Alternate approach, #2</desc>
            <filename>bug-231970-20211020182939.patch</filename>
            <type>text/plain</type>
            <size>15293</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg0NTg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDY4MDQwNGY3MDFlZTA2YWM1
ZjU3ZGU5NTY3M2I3NDU0N2UzYWEwMDQuLjBhYjI5MmFiMjFhNWRhNGVmNWQ0YWQ5OWMwM2JjOTI2
ZGJiYWZkZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMjEtMTAtMjAgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6Q3JlYXRlSW1hZ2VCdWZmZXIgc2hvdWxkIGJlIGFuIGFzeW5jIElQQyBzdHJlYW0g
bWVzc2FnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjMxOTcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Rm9yIEVXUy4KKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OnN0YXJ0TGlzdGVuaW5nRm9ySVBDKToKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjpzdGFydExpc3RlbmluZ0ZvcklQQyk6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnN0b3BMaXN0ZW5pbmdGb3JJUEMpOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAg
ICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmg6CisgICAgICAg
ICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmlu
OgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uV29ya1F1ZXVlLmNwcDoK
KyAgICAgICAgKElQQzo6U3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZTo6cHJvY2Vzc1N0cmVhbXMp
OgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uV29ya1F1ZXVlLmg6Cisg
ICAgICAgICogUGxhdGZvcm0vSVBDL1N0cmVhbVNlcnZlckNvbm5lY3Rpb24uY3BwOgorICAgICAg
ICAoSVBDOjpTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uQmFzZTo6c3RhcnRSZWNlaXZpbmdNZXNzYWdl
c0ltcGwpOgorICAgICAgICAoSVBDOjpTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uQmFzZTo6c3RvcFJl
Y2VpdmluZ01lc3NhZ2VzSW1wbCk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL1N0cmVhbVNlcnZl
ckNvbm5lY3Rpb24uaDoKKyAgICAgICAgKElQQzo6U3RyZWFtU2VydmVyQ29ubmVjdGlvbjo6c3Rh
cnRSZWNlaXZpbmdNZXNzYWdlcyk6CisgICAgICAgIChJUEM6OlN0cmVhbVNlcnZlckNvbm5lY3Rp
b246OnN0b3BSZWNlaXZpbmdNZXNzYWdlcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3Jh
cGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGVSZW1vdGVJbWFnZUJ1ZmZlcik6CisK
IDIwMjEtMTAtMjAgIFBlciBBcm5lIFZvbGxhbiA8cHZvbGxhbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgTGF1bmNoIFNlcnZpY2VzIGRhdGFiYXNlIGlzIG5vdCBhbHdheXMgc2VudCB0byBHUFVQCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKaW5kZXggN2Y2M2Y5NmMxNWQzZTQyY2Y5NDhiOGRm
YmE5MWY1YjFmNDFkMWMxOC4uZWVhOTJmZGZhZmFmODYyZjAwZDIxMjk0ODNlNzE5MWMxN2M2YjY3
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmNwcApAQCAtNTUsMTAgKzU1LDcgQEAgdm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzdGFydExpc3RlbmluZ0ZvcklQQygpCiB7CiAg
ICAgQVNTRVJUKCFtX2lzTGlzdGVuaW5nRm9ySVBDKTsKICAgICBtX2lzTGlzdGVuaW5nRm9ySVBD
ID0gdHJ1ZTsKLSAgICAvLyBGSVhNRTogQ2FuIHdlIGF2b2lkIHN5bmNocm9ub3VzIGRpc3BhdGNo
IGhlcmUgYnkgYWRqdXN0aW5nIHRoZSBhc3NlcnRpb24gaW4gYENvbm5lY3Rpb246OmVucXVldWVN
YXRjaGluZ01lc3NhZ2VzVG9NZXNzYWdlUmVjZWl2ZVF1ZXVlYD8KLSAgICBjYWxsT25NYWluUnVu
TG9vcEFuZFdhaXQoWyZdIHsKLSAgICAgICAgbV9yZW5kZXJpbmdCYWNrZW5kLT5zdHJlYW1Db25u
ZWN0aW9uKCkuc3RhcnRSZWNlaXZpbmdNZXNzYWdlcygqdGhpcywgTWVzc2FnZXM6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbWFnZUJ1ZmZlcklk
ZW50aWZpZXIub2JqZWN0KCkudG9VSW50NjQoKSk7Ci0gICAgfSk7CisgICAgbV9yZW5kZXJpbmdC
YWNrZW5kLT5zdHJlYW1Db25uZWN0aW9uKCkuc3RhcnRSZWNlaXZpbmdNZXNzYWdlcygqdGhpcywg
TWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUo
KSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIub2JqZWN0KCkudG9VSW50NjQoKSk7CiB9CiAKIHZv
aWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c3RvcExpc3RlbmluZ0ZvcklQQygpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5jcHAKaW5kZXggZjU4YzM2OTZmNTNlZmQxNTBiMWRiOTBlMzFiMzllYjU2
NmI1ZGNmYy4uYjhhYzg2MzkyZTdlN2RkNDZkMGM4YzQ5OGQ1ODBjM2IxNTgxZTIxMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAtOTIsNiArOTIsNyBAQCBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdw
dUNvbgogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpzdGFydExpc3RlbmluZ0ZvcklQQygp
CiB7CiAgICAgbV9zdHJlYW1Db25uZWN0aW9uLT5zdGFydFJlY2VpdmluZ01lc3NhZ2VzKCp0aGlz
LCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVzc2FnZVJlY2VpdmVyTmFtZSgp
LCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLnRvVUludDY0KCkpOworICAgIG1fc3RyZWFt
Q29ubmVjdGlvbi0+c3RhcnRSZWNlaXZpbmdNZXNzYWdlcyhNZXNzYWdlczo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKTsKIH0KIAogUmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6flJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKQpAQCAtMTA2LDYgKzEwNyw3IEBA
IHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6c3RvcExpc3RlbmluZ0ZvcklQQygpCiB7CiAg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICBtX3N0cmVhbUNvbm5lY3Rpb24tPnN0
b3BSZWNlaXZpbmdNZXNzYWdlcyhNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLnRvVUludDY0
KCkpOworICAgIG1fc3RyZWFtQ29ubmVjdGlvbi0+c3RvcFJlY2VpdmluZ01lc3NhZ2VzKE1lc3Nh
Z2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpOwog
ICAgIGZvciAoYXV0byYgcmVtb3RlQ29udGV4dCA6IHN0ZDo6ZXhjaGFuZ2UobV9yZW1vdGVEaXNw
bGF5TGlzdHMsIHsgfSkpCiAgICAgICAgIHJlbW90ZUNvbnRleHQuc3RvcExpc3RlbmluZ0ZvcklQ
QygpOwogfQpAQCAtMTM4LDEyICsxNDAsMTEgQEAgdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
OjpkaWRGbHVzaChHcmFwaGljc0NvbnRleHRGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGkKICAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OkRpZEZsdXNoKGZs
dXNoSWRlbnRpZmllciwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLm9iamVjdCgpKSwgbV9y
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CiB9CiAKLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IERl
c3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQgcGl4ZWxGb3JtYXQs
IFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlclJlc291cmNlSWRlbnRpZmll
ciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUm
IGxvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlLCBQaXhlbEZv
cm1hdCBwaXhlbEZvcm1hdCwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlQnVmZmVy
UmVzb3VyY2VJZGVudGlmaWVyKQogewogICAgIC8vIEltbWVkaWF0ZWx5IHR1cm4gdGhlIFJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciAod2hpY2ggaXMgZXJyb3ItcHJvbmUpIHRvIGEgUXVhbGlm
aWVkUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLAogICAgIC8vIGFuZCB1c2UgYSBoZWxwZXIg
ZnVuY3Rpb24gdG8gbWFrZSBzdXJlIHRoYXQgZG9uJ3QgYWNjaWRlbnRhbGx5IHVzZSB0aGUgUmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIChiZWNhdXNlIHRoZSBoZWxwZXIgZnVuY3Rpb24gY2Fu
J3Qgc2VlIGl0KS4KICAgICBjcmVhdGVJbWFnZUJ1ZmZlcldpdGhRdWFsaWZpZWRJZGVudGlmaWVy
KGxvZ2ljYWxTaXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2Us
IHBpeGVsRm9ybWF0LCB7IGltYWdlQnVmZmVyUmVzb3VyY2VJZGVudGlmaWVyLCBtX2dwdUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MtPndlYlByb2Nlc3NJZGVudGlmaWVyKCkgfSk7Ci0gICAgY29tcGxl
dGlvbkhhbmRsZXIoKTsKIH0KIAogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJ
bWFnZUJ1ZmZlcldpdGhRdWFsaWZpZWRJZGVudGlmaWVyKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNh
bFNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0IHBp
eGVsRm9ybWF0LCBRdWFsaWZpZWRSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZm
ZXJSZXNvdXJjZUlkZW50aWZpZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaAppbmRleCAzMWFkOTI5ODk5
YmRjZmI4MDBlYWViZGNhOWIzMWY4YWE5MzBhYzQ5Li45NWRmOGVhNTU1NmY5MjNjZjQxZjY3NmEz
ZWRjZGNlYmY5NzAzZjBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKQEAgLTEwMSw3ICsxMDEsNyBA
QCBwcml2YXRlOgogICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29u
c3Qgb3ZlcnJpZGU7CiAKICAgICAvLyBNZXNzYWdlcyB0byBiZSByZWNlaXZlZC4KLSAgICB2b2lk
IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUs
IFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgY29uc3QgV2Vi
Q29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlJiwgV2ViQ29yZTo6UGl4ZWxGb3JtYXQsIFdlYkNv
cmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmKTsKKyAgICB2b2lkIGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6
ZSYgbG9naWNhbFNpemUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgY29uc3QgV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlJiwgV2ViQ29yZTo6UGl4
ZWxGb3JtYXQsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgdm9p
ZCB1cGRhdGVTaGFyZWRNZW1vcnlGb3JHZXRQaXhlbEJ1ZmZlcih1aW50MzJfdCBieXRlQ291bnQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUmKT4m
Jik7CiAgICAgdm9pZCBzZW1hcGhvcmVGb3JHZXRQaXhlbEJ1ZmZlcihDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGNvbnN0IElQQzo6U2VtYXBob3JlJik+JiYpOwogICAgIHZvaWQgdXBkYXRlU2hhcmVk
TWVtb3J5QW5kU2VtYXBob3JlRm9yR2V0UGl4ZWxCdWZmZXIodWludDMyX3QgYnl0ZUNvdW50LCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJiwgY29u
c3QgSVBDOjpTZW1hcGhvcmUmKT4mJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbiBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3Nh
Z2VzLmluCmluZGV4IDk0OTg4NjMwOGEzNTQ2NWRjZTVmZmFjYmNjN2JjMWM2YzQ1N2I0MGEuLmEx
NDJmNDg5NjZmNWM0OTc1OTQ1NjU0NzcyYzc5YzMxOTc2ZjUzZGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3Nh
Z2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCkBAIC0yMyw3ICsyMyw3IEBACiAjaWYgRU5BQkxFKEdQ
VV9QUk9DRVNTKQogCiBtZXNzYWdlcyAtPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIE5vdFJlZkNv
dW50ZWQgU3RyZWFtIHsKLSAgICBDcmVhdGVJbWFnZUJ1ZmZlcihXZWJDb3JlOjpGbG9hdFNpemUg
bG9naWNhbFNpemUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFj
ZSwgZW51bTp1aW50OF90IFdlYkNvcmU6OlBpeGVsRm9ybWF0IHBpeGVsRm9ybWF0LCBXZWJDb3Jl
OjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
KSAtPiAoKSBTeW5jaHJvbm91cworICAgIENyZWF0ZUltYWdlQnVmZmVyKFdlYkNvcmU6OkZsb2F0
U2l6ZSBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xv
clNwYWNlLCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6UGl4ZWxGb3JtYXQgcGl4ZWxGb3JtYXQsIFdl
YkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIpCiAgICAgVXBkYXRlU2hhcmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXIodWludDMyX3Qg
Ynl0ZUNvdW50KSAtPiAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSBoYW5kbGUpIFN5
bmNocm9ub3VzIE5vdFN0cmVhbUVuY29kYWJsZVJlcGx5CiAgICAgU2VtYXBob3JlRm9yR2V0UGl4
ZWxCdWZmZXIoKSAtPiAoSVBDOjpTZW1hcGhvcmUgc2VtYXBob3JlKSBTeW5jaHJvbm91cyBOb3RT
dHJlYW1FbmNvZGFibGVSZXBseQogICAgIFVwZGF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZUZv
ckdldFBpeGVsQnVmZmVyKHVpbnQzMl90IGJ5dGVDb3VudCkgLT4gKFdlYktpdDo6U2hhcmVkTWVt
b3J5OjpJUENIYW5kbGUgaGFuZGxlLCBJUEM6OlNlbWFwaG9yZSBzZW1hcGhvcmUpIFN5bmNocm9u
b3VzIE5vdFN0cmVhbUVuY29kYWJsZVJlcGx5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uV29ya1F1ZXVlLmNwcCBiL1NvdXJjZS9XZWJLaXQv
UGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWUuY3BwCmluZGV4IGY4NDllYTNj
ZGZmNDkyYmNkZmM0ZDRhNmUyOTM0NzRlN2E2NWFiYTMuLmIyZGUxNWZkNGRmYWQ1MWViODg5NGM5
MGRlZGQ2NjAzNDZkNjE2YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L1N0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWUuY3BwCkBAIC0xMTEsMTEgKzExMSwxMSBA
QCB2b2lkIFN0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWU6OnByb2Nlc3NTdHJlYW1zKCkKICAgICBi
b29sIGhhc01vcmVUb1Byb2Nlc3MgPSBmYWxzZTsKICAgICBkbyB7CiAgICAgICAgIERlcXVlPFdU
Rjo6RnVuY3Rpb248dm9pZCgpPj4gZnVuY3Rpb25zOwotICAgICAgICBIYXNoU2V0PFJlZjxTdHJl
YW1TZXJ2ZXJDb25uZWN0aW9uQmFzZT4+IGNvbm5lY3Rpb25zOworICAgICAgICBWZWN0b3I8UmVm
PFN0cmVhbVNlcnZlckNvbm5lY3Rpb25CYXNlPj4gY29ubmVjdGlvbnM7CiAgICAgICAgIHsKICAg
ICAgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2xvY2sgfTsKICAgICAgICAgICAgIGZ1bmN0aW9u
cy5zd2FwKG1fZnVuY3Rpb25zKTsKLSAgICAgICAgICAgIGNvbm5lY3Rpb25zID0gbV9jb25uZWN0
aW9uczsKKyAgICAgICAgICAgIGNvbm5lY3Rpb25zID0gY29weVRvVmVjdG9yKG1fY29ubmVjdGlv
bnMudmFsdWVzKCkpOwogICAgICAgICB9CiAgICAgICAgIGZvciAoYXV0byYgZnVuY3Rpb24gOiBm
dW5jdGlvbnMpCiAgICAgICAgICAgICBXVEZNb3ZlKGZ1bmN0aW9uKSgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZS5oIGIv
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZS5oCmlu
ZGV4IGRhMzUyMmRmOWM0YzkyMDFhMDVlZjYyMmYzZGFkYTViODI4NmY0ZGYuLmYyMjNkZjI3M2U2
ZTQ4ZmZmODI4N2Y3MjE5NjEwNTNkNTIyNTkzZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
UGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWUuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1Db25uZWN0aW9uV29ya1F1ZXVlLmgKQEAgLTMwLDcgKzMw
LDcgQEAKICNpbmNsdWRlIDxhdG9taWM+CiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVk
ZSA8d3RmL0Z1bmN0aW9uRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Cisj
aW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNp
bmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKQEAgLTY3LDcgKzY3LDcgQEAgcHJpdmF0ZToKIAog
ICAgIExvY2sgbV9sb2NrOwogICAgIERlcXVlPEZ1bmN0aW9uPHZvaWQoKT4+IG1fZnVuY3Rpb25z
IFdURl9HVUFSREVEX0JZX0xPQ0sobV9sb2NrKTsKLSAgICBIYXNoU2V0PFJlZjxTdHJlYW1TZXJ2
ZXJDb25uZWN0aW9uQmFzZT4+IG1fY29ubmVjdGlvbnMgV1RGX0dVQVJERURfQllfTE9DSyhtX2xv
Y2spOworICAgIEhhc2hDb3VudGVkU2V0PFJlZjxTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uQmFzZT4+
IG1fY29ubmVjdGlvbnMgV1RGX0dVQVJERURfQllfTE9DSyhtX2xvY2spOwogfTsKIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtU2VydmVyQ29ubmVjdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1TZXJ2ZXJDb25uZWN0aW9u
LmNwcAppbmRleCBhZmRmZGIwMGYzZDlhODU3ZGQwOTQ1OWVhY2IyZjFhM2MxYWI0M2FlLi5jYWQ3
MmZiYjM2MjE0N2Q2NjYwNDMxOTljMzhkNDYyNDIwZDlkOGEzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1TZXJ2ZXJDb25uZWN0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1TZXJ2ZXJDb25uZWN0aW9uLmNwcApAQCAtNDAs
OCArNDAsMjUgQEAgU3RyZWFtU2VydmVyQ29ubmVjdGlvbkJhc2U6OlN0cmVhbVNlcnZlckNvbm5l
Y3Rpb25CYXNlKENvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIFMKIAogdm9pZCBTdHJlYW1TZXJ2ZXJD
b25uZWN0aW9uQmFzZTo6c3RhcnRSZWNlaXZpbmdNZXNzYWdlc0ltcGwoUmVjZWl2ZXJOYW1lIHJl
Y2VpdmVyTmFtZSwgdWludDY0X3QgZGVzdGluYXRpb25JRCkKIHsKLSAgICBtX2Nvbm5lY3Rpb24t
PmFkZE1lc3NhZ2VSZWNlaXZlUXVldWUoKnRoaXMsIHJlY2VpdmVyTmFtZSwgZGVzdGluYXRpb25J
RCk7Ci0gICAgbV93b3JrUXVldWUuYWRkU3RyZWFtQ29ubmVjdGlvbigqdGhpcyk7CisgICAgLy8g
RklYTUU6IENhbiB3ZSBhdm9pZCBzeW5jaHJvbm91cyBkaXNwYXRjaCBoZXJlIGJ5IGFkanVzdGlu
ZyB0aGUgYXNzZXJ0aW9uIGluIGBDb25uZWN0aW9uOjplbnF1ZXVlTWF0Y2hpbmdNZXNzYWdlc1Rv
TWVzc2FnZVJlY2VpdmVRdWV1ZWA/CisgICAgY2FsbE9uTWFpblJ1bkxvb3BBbmRXYWl0KFsmXSB7
CisgICAgICAgIG1fY29ubmVjdGlvbi0+YWRkTWVzc2FnZVJlY2VpdmVRdWV1ZSgqdGhpcywgcmVj
ZWl2ZXJOYW1lLCBkZXN0aW5hdGlvbklEKTsKKyAgICAgICAgbV93b3JrUXVldWUuYWRkU3RyZWFt
Q29ubmVjdGlvbigqdGhpcyk7CisgICAgfSk7Cit9CisKK3ZvaWQgU3RyZWFtU2VydmVyQ29ubmVj
dGlvbkJhc2U6OnN0YXJ0UmVjZWl2aW5nTWVzc2FnZXNJbXBsKFJlY2VpdmVyTmFtZSByZWNlaXZl
ck5hbWUpCit7CisgICAgY2FsbE9uTWFpblJ1bkxvb3BBbmRXYWl0KFsmXSB7CisgICAgICAgIG1f
Y29ubmVjdGlvbi0+YWRkTWVzc2FnZVJlY2VpdmVRdWV1ZSgqdGhpcywgcmVjZWl2ZXJOYW1lKTsK
KyAgICAgICAgbV93b3JrUXVldWUuYWRkU3RyZWFtQ29ubmVjdGlvbigqdGhpcyk7CisgICAgfSk7
Cit9CisKK3ZvaWQgU3RyZWFtU2VydmVyQ29ubmVjdGlvbkJhc2U6OnN0b3BSZWNlaXZpbmdNZXNz
YWdlc0ltcGwoUmVjZWl2ZXJOYW1lIHJlY2VpdmVyTmFtZSkKK3sKKyAgICBtX2Nvbm5lY3Rpb24t
PnJlbW92ZU1lc3NhZ2VSZWNlaXZlUXVldWUocmVjZWl2ZXJOYW1lKTsKKyAgICBtX3dvcmtRdWV1
ZS5yZW1vdmVTdHJlYW1Db25uZWN0aW9uKCp0aGlzKTsKIH0KIAogdm9pZCBTdHJlYW1TZXJ2ZXJD
b25uZWN0aW9uQmFzZTo6c3RvcFJlY2VpdmluZ01lc3NhZ2VzSW1wbChSZWNlaXZlck5hbWUgcmVj
ZWl2ZXJOYW1lLCB1aW50NjRfdCBkZXN0aW5hdGlvbklEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtU2VydmVyQ29ubmVjdGlvbi5oIGIvU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9JUEMvU3RyZWFtU2VydmVyQ29ubmVjdGlvbi5oCmluZGV4IDNjNGFlMGQ4Yzc3
YjI5OWY0N2YwN2E0YTc1YjBhZjVhYzk0MjI4YzYuLmU2YTQyNTE0ZjRjZTcwODVlN2M3Y2QxMmIx
NzYxM2U2NDg2ZDI2ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0
cmVhbVNlcnZlckNvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9T
dHJlYW1TZXJ2ZXJDb25uZWN0aW9uLmgKQEAgLTYyLDYgKzYyLDkgQEAgcHJvdGVjdGVkOgogICAg
IHZvaWQgc3RhcnRSZWNlaXZpbmdNZXNzYWdlc0ltcGwoUmVjZWl2ZXJOYW1lLCB1aW50NjRfdCBk
ZXN0aW5hdGlvbklEKTsKICAgICB2b2lkIHN0b3BSZWNlaXZpbmdNZXNzYWdlc0ltcGwoUmVjZWl2
ZXJOYW1lLCB1aW50NjRfdCBkZXN0aW5hdGlvbklEKTsKIAorICAgIHZvaWQgc3RhcnRSZWNlaXZp
bmdNZXNzYWdlc0ltcGwoUmVjZWl2ZXJOYW1lKTsKKyAgICB2b2lkIHN0b3BSZWNlaXZpbmdNZXNz
YWdlc0ltcGwoUmVjZWl2ZXJOYW1lKTsKKwogICAgIC8vIE1lc3NhZ2VSZWNlaXZlUXVldWUKICAg
ICB2b2lkIGVucXVldWVNZXNzYWdlKENvbm5lY3Rpb24mLCBzdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rl
cj4mJikgZmluYWw7CiAKQEAgLTE0NCw2ICsxNDcsOSBAQCBwdWJsaWM6CiAgICAgLy8gU3RvcHMg
dGhlIG1lc3NhZ2UgcmVjZWlwdC4gTm90ZTogYWxyZWFkeSByZWNlaXZlZCBtZXNzYWdlcyBtaWdo
dCBzdGlsbCBiZSBkZWxpdmVyZWQuCiAgICAgdm9pZCBzdG9wUmVjZWl2aW5nTWVzc2FnZXMoUmVj
ZWl2ZXJOYW1lLCB1aW50NjRfdCBkZXN0aW5hdGlvbklEKTsKIAorICAgIGlubGluZSB2b2lkIHN0
YXJ0UmVjZWl2aW5nTWVzc2FnZXMoUmVjZWl2ZXJOYW1lKTsKKyAgICBpbmxpbmUgdm9pZCBzdG9w
UmVjZWl2aW5nTWVzc2FnZXMoUmVjZWl2ZXJOYW1lKTsKKwogICAgIC8vIFN0cmVhbVNlcnZlckNv
bm5lY3Rpb25CYXNlIG92ZXJyaWRlcy4KICAgICBEaXNwYXRjaFJlc3VsdCBkaXNwYXRjaFN0cmVh
bU1lc3NhZ2VzKHNpemVfdCBtZXNzYWdlTGltaXQpIGZpbmFsOwogCkBAIC0xNjEsNCArMTY3LDE0
IEBAIHByaXZhdGU6CiAgICAgdWludDY0X3QgbV9jdXJyZW50RGVzdGluYXRpb25JRCB7IDAgfTsK
IH07CiAKK3ZvaWQgU3RyZWFtU2VydmVyQ29ubmVjdGlvbjo6c3RhcnRSZWNlaXZpbmdNZXNzYWdl
cyhSZWNlaXZlck5hbWUgcmVjZWl2ZXJOYW1lKQoreworICAgIFN0cmVhbVNlcnZlckNvbm5lY3Rp
b25CYXNlOjpzdGFydFJlY2VpdmluZ01lc3NhZ2VzSW1wbChyZWNlaXZlck5hbWUpOworfQorCit2
b2lkIFN0cmVhbVNlcnZlckNvbm5lY3Rpb246OnN0b3BSZWNlaXZpbmdNZXNzYWdlcyhSZWNlaXZl
ck5hbWUgcmVjZWl2ZXJOYW1lKQoreworICAgIFN0cmVhbVNlcnZlckNvbm5lY3Rpb25CYXNlOjpz
dG9wUmVjZWl2aW5nTWVzc2FnZXNJbXBsKHJlY2VpdmVyTmFtZSk7Cit9CisKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAppbmRleCA0MTM1MTcyZmFiZmMxNjExZGQ1
NjNkYjA5MjY5MmZkZWEyMDc2ODIwLi4yOGJiMjQ0ODE2ODE5M2VlZTdkY2FjZWIzODFhOGYzZGUw
OGRhMWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCkBAIC0x
MjcsOSArMTI3LDcgQEAgYm9vbCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OndhaXRGb3JE
aWRGbHVzaCgpCiAKIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGVSZW1v
dGVJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIpCiB7Ci0gICAgLy8gRklYTUU6
IFRoaXMgc2hvdWxkIGJlIGFuIG5vcm1hbCAoYXN5bmMpIHN0cmVhbSBtZXNzYWdlLiBIb3dldmVy
LCBkb2luZyBzbyBtYXkgY2F1c2Ugc3Vic2VxdWVudCBvdXQtb2Ytc3RyZWFtIG1lc3NhZ2VzIHNl
bnQgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgaW1hZ2UKLSAgICAvLyBidWZmZXIgdG8gYmUgZHJvcHBl
ZCBieSB0aGUgSVBDIGNvbm5lY3Rpb24uIEZvciB0aGUgdGltZSBiZWluZywgd29yayBhcm91bmQg
dGhpcyBieSB1c2luZyBzeW5jIElQQyAoc2VlIDxodHRwczovL3dlYmtpdC5vcmcvYi8yMzE2ODE+
IGZvciBtb3JlIGRldGFpbHMpLgotICAgIHNlbmRTeW5jVG9TdHJlYW0oTWVzc2FnZXM6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OkNyZWF0ZUltYWdlQnVmZmVyKGltYWdlQnVmZmVyLmxvZ2ljYWxT
aXplKCksIGltYWdlQnVmZmVyLnJlbmRlcmluZ01vZGUoKSwgaW1hZ2VCdWZmZXIucmVzb2x1dGlv
blNjYWxlKCksIGltYWdlQnVmZmVyLmNvbG9yU3BhY2UoKSwgaW1hZ2VCdWZmZXIucGl4ZWxGb3Jt
YXQoKSwgaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCkpLCBNZXNzYWdl
czo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Q3JlYXRlSW1hZ2VCdWZmZXI6OlJlcGx5KCksIDNf
cyk7CisgICAgc2VuZFRvU3RyZWFtKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpD
cmVhdGVJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlci5sb2dpY2FsU2l6ZSgpLCBpbWFnZUJ1ZmZlci5y
ZW5kZXJpbmdNb2RlKCksIGltYWdlQnVmZmVyLnJlc29sdXRpb25TY2FsZSgpLCBpbWFnZUJ1ZmZl
ci5jb2xvclNwYWNlKCksIGltYWdlQnVmZmVyLnBpeGVsRm9ybWF0KCksIGltYWdlQnVmZmVyLnJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpKSk7CiB9CiAKIFJlZlB0cjxJbWFnZUJ1ZmZlcj4g
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9h
dFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIFBpeGVsRm9y
bWF0IHBpeGVsRm9ybWF0KQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>442040</attachid>
            <date>2021-10-21 09:20:32 -0700</date>
            <delta_ts>2021-10-22 11:09:18 -0700</delta_ts>
            <desc>Depends on #232068</desc>
            <filename>bug-231970-20211021092031.patch</filename>
            <type>text/plain</type>
            <size>17768</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg0NTg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDk2N2UzMWRiZTAzNzE4ZWIz
MDY1MzM4YTVmMTM0ZmExYzdlNmU1NTkuLjFlYTlhNjI0Mjk5MDBjZjQ1NjkzNWUxMjExMjgzYTNh
YmM0M2JlOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjEgQEAKKzIwMjEtMTAtMjEgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6Q3JlYXRlSW1hZ2VCdWZmZXIgc2hvdWxkIGJlIGFuIGFzeW5jIElQQyBzdHJlYW0g
bWVzc2FnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjMxOTcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhpcyBwYXRjaCByZXZlcnRzIHRoZSBjaGFuZ2VzIGluIHIyODQ0NzYsIHdoaWNoIHdvcmtlZCBh
cm91bmQgYSByYWNlIHdoZW4gYWRkaW5nIHJlY2VpdmUgcXVldWVzIGZvciBuZXdseQorICAgICAg
ICBjcmVhdGVkIElQQyBzdHJlYW0gZGVzdGluYXRpb25zIGFuZCBzaW11bHRhbmVvdXNseSBkaXNw
YXRjaGluZyBJUEMgbWVzc2FnZXMgdG8gdGhvc2UgZGVzdGluYXRpb25zLiBSYXRoZXIgdGhhbgor
ICAgICAgICBtYWtpbmcgdGhlIElQQyBtZXNzYWdlIHRoYXQgY3JlYXRlcyBhbmQgYWRkcyB0aGUg
bmV3IGltYWdlIGJ1ZmZlcidzIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIgc3luY2hyb25vdXMs
IHdlCisgICAgICAgIGluc3RlYWQga2VlcCB0aGF0IG1lc3NhZ2UgYXN5bmMgYW5kIG1ha2UgYWRq
dXN0bWVudHMgdG8gZW5zdXJlIHRoYXQgaW5jb21pbmcgb3V0LW9mLXN0cmVhbSBJUEMgbWVzc2Fn
ZXMgZm9yCisgICAgICAgIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIgY2FuIGFsd2F5cyBiZSBt
YXBwZWQgdG8gYW4gYXBwcm9wcmlhdGUgcmVjZWl2ZSBxdWV1ZS4gU2VlIGJlbG93IGZvciBtb3Jl
IGRldGFpbHMuCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjpzdGFydExpc3RlbmluZ0ZvcklQQyk6CisKKyAgICAgICAgTW92ZSB0aGUgbWFpbiBydW5s
b29wIGJvdW5jZSBkb3duIHRvIGBTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uQmFzZTo6c3RhcnRSZWNl
aXZpbmdNZXNzYWdlc0ltcGwoKWAgaW5zdGVhZCAodG8gZGVhbAorICAgICAgICB3aXRoIHRoZSBm
YWN0IHRoYXQgYGFkZE1lc3NhZ2VSZWNlaXZlUXVldWVgIGN1cnJlbnRseSBuZWVkcyB0byBiZSBp
bnZva2VkIG9uIHRoZSBtYWluIHJ1bmxvb3ApLiBUaGlzIGFsbG93cyB1cworICAgICAgICB0byBj
YWxsIGBTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uOjpzdGFydFJlY2VpdmluZ01lc3NhZ2VzKClgIGZy
b20gdGhlIHByb2Nlc3NpbmcgcXVldWUgd2hpbGUgY3JlYXRpbmcgYSByZW1vdGUKKyAgICAgICAg
aW1hZ2UgYnVmZmVyLCB3aGljaCAoaW4gdHVybikgZW5zdXJlcyB0aGF0IGluY29taW5nIG91dC1v
Zi1zdHJlYW0gbWVzc2FnZXMgZnJvbSB0aGUgSVBDIHRocmVhZCB3aWxsIGJlIHNlbnQgdG8KKyAg
ICAgICAgdGhlIGNvcnJlY3QgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlciBkZXN0aW5hdGlvbiBi
eSB0aGUgdGltZSB0aGV5J3JlIGRpc3BhdGNoZWQgb24gdGhlIHdvcmsgcXVldWUgdGhyZWFkLgor
CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6c3RhcnRMaXN0ZW5p
bmdGb3JJUEMpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpzdG9w
TGlzdGVuaW5nRm9ySVBDKToKKworICAgICAgICBBZGRpdGlvbmFsbHkgcmVnaXN0ZXIgYSAiMC1k
ZXN0aW5hdGlvbiIgcmVjZWl2ZXIgdG8gZW5zdXJlIHRoYXQgYWxsIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXIgbWVzc2FnZXMgKGV2ZW4KKyAgICAgICAgd2l0aG91dCBwcmUtZXhpc3RpbmcgZGVz
dGluYXRpb25zKSB3aWxsIGJlIGVucXVldWVkIG9uIHRoZSBzYW1lIElQQyBzdHJlYW0gY29ubmVj
dGlvbiBhcyB0aGlzIHJlbW90ZSByZW5kZXJpbmcKKyAgICAgICAgYmFja2VuZC4KKworICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcik6Cisg
ICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmg6Cisg
ICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3Nh
Z2VzLmluOgorCisgICAgICAgIE1ha2UgYENyZWF0ZUltYWdlQnVmZmVyYCBhbiBhc3luYyBzdHJl
YW0gbWVzc2FnZSBvbmNlIGFnYWluLgorCisgICAgICAgICogUGxhdGZvcm0vSVBDL1N0cmVhbUNv
bm5lY3Rpb25Xb3JrUXVldWUuY3BwOgorICAgICAgICAoSVBDOjpTdHJlYW1Db25uZWN0aW9uV29y
a1F1ZXVlOjpwcm9jZXNzU3RyZWFtcyk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL1N0cmVhbUNv
bm5lY3Rpb25Xb3JrUXVldWUuaDoKKworICAgICAgICBDaGFuZ2UgYG1fY29ubmVjdGlvbnNgIGlu
dG8gYSBIYXNoQ291bnRlZFNldCAoZnJvbSBhIEhhc2hTZXQpLCB0byBlbnN1cmUgdGhhdCB0aGUg
c2FtZSBzZXJ2ZXIgY29ubmVjdGlvbiBvYmplY3QKKyAgICAgICAgY2FuIGJlIGFkZGVkIHRvIGFu
ZCByZW1vdmVkIGZyb20gdGhlIHdvcmsgcXVldWUgbXVsdGlwbGUgdGltZXMsIHdpdGhvdXQgcmVt
b3ZpbmcgdGhlIGNvbm5lY3Rpb24gZnJvbSB0aGUgbWFwCisgICAgICAgIGVhcmx5LgorCisgICAg
ICAgICogUGxhdGZvcm0vSVBDL1N0cmVhbVNlcnZlckNvbm5lY3Rpb24uY3BwOgorICAgICAgICAo
SVBDOjpTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uQmFzZTo6c3RhcnRSZWNlaXZpbmdNZXNzYWdlc0lt
cGwpOgorICAgICAgICAoSVBDOjpTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uQmFzZTo6c3RvcFJlY2Vp
dmluZ01lc3NhZ2VzSW1wbCk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL1N0cmVhbVNlcnZlckNv
bm5lY3Rpb24uaDoKKyAgICAgICAgKElQQzo6U3RyZWFtU2VydmVyQ29ubmVjdGlvbjo6c3RhcnRS
ZWNlaXZpbmdNZXNzYWdlcyk6CisgICAgICAgIChJUEM6OlN0cmVhbVNlcnZlckNvbm5lY3Rpb246
OnN0b3BSZWNlaXZpbmdNZXNzYWdlcyk6CisKKyAgICAgICAgQWRkIG5ldyBtZXRob2RzIHRvIHN0
YXJ0IGFuZCBzdG9wIHJlY2VpdmluZyBhbGwgbWVzc2FnZXMgZm9yIGEgZ2l2ZW4gUmVjZWl2ZXJO
YW1lLCByZWdhcmRsZXNzIG9mIGluY29taW5nCisgICAgICAgIGRlc3RpbmF0aW9uIElELiBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kIG5vdyB1c2VzIHRoaXMgdG8gcmVnaXN0ZXIgYSAiY2F0Y2gtYWxs
IiBsaXN0ZW5lciBmb3IgYWxsCisgICAgICAgIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIgbWVz
c2FnZXMuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHk6OmNyZWF0ZVJlbW90ZUltYWdlQnVmZmVyKToKKwogMjAyMS0xMC0yMSAgS2ltbW8g
S2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFN0cmVhbUNvbm5lY3Rp
b25Xb3JrUXVldWUgaXMgbm90IHRocmVhZC1zYWZlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5j
cHAKaW5kZXggN2Y2M2Y5NmMxNWQzZTQyY2Y5NDhiOGRmYmE5MWY1YjFmNDFkMWMxOC4uZWVhOTJm
ZGZhZmFmODYyZjAwZDIxMjk0ODNlNzE5MWMxN2M2YjY3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyLmNwcApAQCAtNTUsMTAgKzU1LDcgQEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjpzdGFydExpc3RlbmluZ0ZvcklQQygpCiB7CiAgICAgQVNTRVJUKCFtX2lzTGlzdGVuaW5n
Rm9ySVBDKTsKICAgICBtX2lzTGlzdGVuaW5nRm9ySVBDID0gdHJ1ZTsKLSAgICAvLyBGSVhNRTog
Q2FuIHdlIGF2b2lkIHN5bmNocm9ub3VzIGRpc3BhdGNoIGhlcmUgYnkgYWRqdXN0aW5nIHRoZSBh
c3NlcnRpb24gaW4gYENvbm5lY3Rpb246OmVucXVldWVNYXRjaGluZ01lc3NhZ2VzVG9NZXNzYWdl
UmVjZWl2ZVF1ZXVlYD8KLSAgICBjYWxsT25NYWluUnVuTG9vcEFuZFdhaXQoWyZdIHsKLSAgICAg
ICAgbV9yZW5kZXJpbmdCYWNrZW5kLT5zdHJlYW1Db25uZWN0aW9uKCkuc3RhcnRSZWNlaXZpbmdN
ZXNzYWdlcygqdGhpcywgTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6Om1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIub2JqZWN0KCkudG9VSW50
NjQoKSk7Ci0gICAgfSk7CisgICAgbV9yZW5kZXJpbmdCYWNrZW5kLT5zdHJlYW1Db25uZWN0aW9u
KCkuc3RhcnRSZWNlaXZpbmdNZXNzYWdlcygqdGhpcywgTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZp
ZXIub2JqZWN0KCkudG9VSW50NjQoKSk7CiB9CiAKIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlcjo6c3RvcExpc3RlbmluZ0ZvcklQQygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKaW5kZXgg
ZjU4YzM2OTZmNTNlZmQxNTBiMWRiOTBlMzFiMzllYjU2NmI1ZGNmYy4uZjkwNzA3MTA5ZDQ3OGRk
ZjE2NWRjNzM4NjU3MTEyY2QyNTk0MDQ0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAt
OTIsNiArOTIsMTAgQEAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZChHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb24KIHZvaWQgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6c3RhcnRMaXN0ZW5pbmdGb3JJUEMoKQogewogICAgIG1fc3RyZWFtQ29ubmVj
dGlvbi0+c3RhcnRSZWNlaXZpbmdNZXNzYWdlcygqdGhpcywgTWVzc2FnZXM6OlJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllci50b1VJbnQ2NCgpKTsKKyAgICAvLyBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyIG1l
c3NhZ2VzIGRlcGVuZCBvbiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLCBiZWNhdXNlIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQgY3JlYXRlcyBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyIGFuZAorICAg
IC8vIG1ha2VzIGEgcmVjZWl2ZSBxdWV1ZSBmb3IgaXQuIEluIG9yZGVyIHRvIGd1YXJhbnRlZSBj
b3JyZWN0IG9yZGVyaW5nLCBlbnN1cmUgdGhhdCBhbGwgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
ciBtZXNzYWdlcyBhcmUgcHJvY2Vzc2VkIGluCisgICAgLy8gdGhlIHNhbWUgc2VxdWVuY2UgYXMg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZCBtZXNzYWdlcy4KKyAgICBtX3N0cmVhbUNvbm5lY3Rpb24t
PnN0YXJ0UmVjZWl2aW5nTWVzc2FnZXMoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSk7CiB9CiAKIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCkKQEAgLTEwNiw2ICsxMTAsNyBAQCB2b2lkIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OnN0b3BMaXN0ZW5pbmdGb3JJUEMoKQogewogICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CiAgICAgbV9zdHJlYW1Db25uZWN0aW9uLT5zdG9wUmVjZWl2aW5n
TWVzc2FnZXMoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpKTsKKyAgICBt
X3N0cmVhbUNvbm5lY3Rpb24tPnN0b3BSZWNlaXZpbmdNZXNzYWdlcyhNZXNzYWdlczo6UmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKTsKICAgICBmb3IgKGF1
dG8mIHJlbW90ZUNvbnRleHQgOiBzdGQ6OmV4Y2hhbmdlKG1fcmVtb3RlRGlzcGxheUxpc3RzLCB7
IH0pKQogICAgICAgICByZW1vdGVDb250ZXh0LnN0b3BMaXN0ZW5pbmdGb3JJUEMoKTsKIH0KQEAg
LTEzOCwxMiArMTQzLDExIEBAIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGlkRmx1c2go
R3JhcGhpY3NDb250ZXh0Rmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpCiAgICAgc2VuZChNZXNz
YWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpEaWRGbHVzaChmbHVzaElkZW50aWZp
ZXIsIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllci5vYmplY3QoKSksIG1fcmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIpOwogfQogCi12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0
ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUg
cmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlvbkNv
bG9yU3BhY2UmIGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0IHBpeGVsRm9ybWF0LCBSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZmZXJSZXNvdXJjZUlkZW50aWZpZXIsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6
ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQgcGl4ZWxG
b3JtYXQsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlclJlc291cmNlSWRl
bnRpZmllcikKIHsKICAgICAvLyBJbW1lZGlhdGVseSB0dXJuIHRoZSBSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIgKHdoaWNoIGlzIGVycm9yLXByb25lKSB0byBhIFF1YWxpZmllZFJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciwKICAgICAvLyBhbmQgdXNlIGEgaGVscGVyIGZ1bmN0aW9uIHRv
IG1ha2Ugc3VyZSB0aGF0IGRvbid0IGFjY2lkZW50YWxseSB1c2UgdGhlIFJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciAoYmVjYXVzZSB0aGUgaGVscGVyIGZ1bmN0aW9uIGNhbid0IHNlZSBpdCku
CiAgICAgY3JlYXRlSW1hZ2VCdWZmZXJXaXRoUXVhbGlmaWVkSWRlbnRpZmllcihsb2dpY2FsU2l6
ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBwaXhlbEZvcm1h
dCwgeyBpbWFnZUJ1ZmZlclJlc291cmNlSWRlbnRpZmllciwgbV9ncHVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLT53ZWJQcm9jZXNzSWRlbnRpZmllcigpIH0pOwotICAgIGNvbXBsZXRpb25IYW5kbGVy
KCk7CiB9CiAKIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXJX
aXRoUXVhbGlmaWVkSWRlbnRpZmllcihjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBSZW5k
ZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgY29uc3QgRGVz
dGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlLCBQaXhlbEZvcm1hdCBwaXhlbEZvcm1hdCwg
UXVhbGlmaWVkUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlQnVmZmVyUmVzb3VyY2VJ
ZGVudGlmaWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKaW5kZXggMzFhZDkyOTg5OWJkY2ZiODAwZWFl
YmRjYTliMzFmOGFhOTMwYWM0OS4uOTVkZjhlYTU1NTZmOTIzY2Y0MWY2NzZhM2VkY2RjZWJmOTcw
M2YwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCkBAIC0xMDEsNyArMTAxLDcgQEAgcHJpdmF0ZToK
ICAgICB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IG92ZXJyaWRl
OwogCiAgICAgLy8gTWVzc2FnZXMgdG8gYmUgcmVjZWl2ZWQuCi0gICAgdm9pZCBjcmVhdGVJbWFn
ZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpS
ZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IFdlYkNvcmU6OkRlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYsIFdlYkNvcmU6OlBpeGVsRm9ybWF0LCBXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAg
dm9pZCBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxT
aXplLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0
IFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIFdlYkNvcmU6OlBpeGVsRm9ybWF0LCBX
ZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIHZvaWQgdXBkYXRlU2hh
cmVkTWVtb3J5Rm9yR2V0UGl4ZWxCdWZmZXIodWludDMyX3QgYnl0ZUNvdW50LCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJik+JiYpOwogICAgIHZv
aWQgc2VtYXBob3JlRm9yR2V0UGl4ZWxCdWZmZXIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25z
dCBJUEM6OlNlbWFwaG9yZSYpPiYmKTsKICAgICB2b2lkIHVwZGF0ZVNoYXJlZE1lbW9yeUFuZFNl
bWFwaG9yZUZvckdldFBpeGVsQnVmZmVyKHVpbnQzMl90IGJ5dGVDb3VudCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYsIGNvbnN0IElQQzo6U2Vt
YXBob3JlJik+JiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbgppbmRl
eCA5NDk4ODYzMDhhMzU0NjVkY2U1ZmZhY2JjYzdiYzFjNmM0NTdiNDBhLi5hMTQyZjQ4OTY2ZjVj
NDk3NTk0NTY1NDc3MmM3OWMzMTk3NmY1M2RjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbgorKysg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZC5tZXNzYWdlcy5pbgpAQCAtMjMsNyArMjMsNyBAQAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykK
IAogbWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZCBOb3RSZWZDb3VudGVkIFN0cmVh
bSB7Ci0gICAgQ3JlYXRlSW1hZ2VCdWZmZXIoV2ViQ29yZTo6RmxvYXRTaXplIGxvZ2ljYWxTaXpl
LCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UsIGVudW06dWlu
dDhfdCBXZWJDb3JlOjpQaXhlbEZvcm1hdCBwaXhlbEZvcm1hdCwgV2ViQ29yZTo6UmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgLT4gKCkgU3lu
Y2hyb25vdXMKKyAgICBDcmVhdGVJbWFnZUJ1ZmZlcihXZWJDb3JlOjpGbG9hdFNpemUgbG9naWNh
bFNpemUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgZW51
bTp1aW50OF90IFdlYkNvcmU6OlBpeGVsRm9ybWF0IHBpeGVsRm9ybWF0LCBXZWJDb3JlOjpSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogICAg
IFVwZGF0ZVNoYXJlZE1lbW9yeUZvckdldFBpeGVsQnVmZmVyKHVpbnQzMl90IGJ5dGVDb3VudCkg
LT4gKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpJUENIYW5kbGUgaGFuZGxlKSBTeW5jaHJvbm91cyBO
b3RTdHJlYW1FbmNvZGFibGVSZXBseQogICAgIFNlbWFwaG9yZUZvckdldFBpeGVsQnVmZmVyKCkg
LT4gKElQQzo6U2VtYXBob3JlIHNlbWFwaG9yZSkgU3luY2hyb25vdXMgTm90U3RyZWFtRW5jb2Rh
YmxlUmVwbHkKICAgICBVcGRhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVGb3JHZXRQaXhlbEJ1
ZmZlcih1aW50MzJfdCBieXRlQ291bnQpIC0+IChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SVBDSGFu
ZGxlIGhhbmRsZSwgSVBDOjpTZW1hcGhvcmUgc2VtYXBob3JlKSBTeW5jaHJvbm91cyBOb3RTdHJl
YW1FbmNvZGFibGVSZXBseQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMv
U3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQ
Qy9TdHJlYW1Db25uZWN0aW9uV29ya1F1ZXVlLmNwcAppbmRleCBjNjFjZWUwMzI5N2E3Yzc1YmUw
ZTk3NDdkMGY4MzQ5MmNhNDYwMzhjLi5jNGY3YWIwYjQ3OTIxMzFkMDJmNjFlYmJjM2FiMTM1YTU5
NjRhMjM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1Db25u
ZWN0aW9uV29ya1F1ZXVlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJl
YW1Db25uZWN0aW9uV29ya1F1ZXVlLmNwcApAQCAtMTIyLDExICsxMjIsMTEgQEAgdm9pZCBTdHJl
YW1Db25uZWN0aW9uV29ya1F1ZXVlOjpwcm9jZXNzU3RyZWFtcygpCiAgICAgYm9vbCBoYXNNb3Jl
VG9Qcm9jZXNzID0gZmFsc2U7CiAgICAgZG8gewogICAgICAgICBEZXF1ZTxXVEY6OkZ1bmN0aW9u
PHZvaWQoKT4+IGZ1bmN0aW9uczsKLSAgICAgICAgSGFzaFNldDxSZWY8U3RyZWFtU2VydmVyQ29u
bmVjdGlvbkJhc2U+PiBjb25uZWN0aW9uczsKKyAgICAgICAgVmVjdG9yPFJlZjxTdHJlYW1TZXJ2
ZXJDb25uZWN0aW9uQmFzZT4+IGNvbm5lY3Rpb25zOwogICAgICAgICB7CiAgICAgICAgICAgICBM
b2NrZXIgbG9ja2VyIHsgbV9sb2NrIH07CiAgICAgICAgICAgICBmdW5jdGlvbnMuc3dhcChtX2Z1
bmN0aW9ucyk7Ci0gICAgICAgICAgICBjb25uZWN0aW9ucyA9IG1fY29ubmVjdGlvbnM7CisgICAg
ICAgICAgICBjb25uZWN0aW9ucyA9IGNvcHlUb1ZlY3RvcihtX2Nvbm5lY3Rpb25zLnZhbHVlcygp
KTsKICAgICAgICAgfQogICAgICAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uIDogZnVuY3Rpb25zKQog
ICAgICAgICAgICAgV1RGTW92ZShmdW5jdGlvbikoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWUuaCBiL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL1N0cmVhbUNvbm5lY3Rpb25Xb3JrUXVldWUuaAppbmRleCAyMjBiY2Jl
ZDU5NjM3MWQxN2IyM2FlMmQwNTM2Y2MzZDk2ZWM2NjBjLi40MDFkNTA3NGZjYTdmNDNlZjJjNTVi
NzgyMTlkMDU0MGFkMzk2ZTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQ
Qy9TdHJlYW1Db25uZWN0aW9uV29ya1F1ZXVlLmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9JUEMvU3RyZWFtQ29ubmVjdGlvbldvcmtRdWV1ZS5oCkBAIC0zMCw3ICszMCw3IEBACiAjaW5j
bHVkZSA8YXRvbWljPgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogI2luY2x1ZGUgPHd0Zi9GdW5j
dGlvbkRpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0
Zi9IYXNoQ291bnRlZFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3Rm
L1RocmVhZGluZy5oPgogCkBAIC02Niw3ICs2Niw3IEBAIHByaXZhdGU6CiAgICAgTG9jayBtX2xv
Y2s7CiAgICAgUmVmUHRyPFRocmVhZD4gbV9wcm9jZXNzaW5nVGhyZWFkIFdURl9HVUFSREVEX0JZ
X0xPQ0sobV9sb2NrKTsKICAgICBEZXF1ZTxGdW5jdGlvbjx2b2lkKCk+PiBtX2Z1bmN0aW9ucyBX
VEZfR1VBUkRFRF9CWV9MT0NLKG1fbG9jayk7Ci0gICAgSGFzaFNldDxSZWY8U3RyZWFtU2VydmVy
Q29ubmVjdGlvbkJhc2U+PiBtX2Nvbm5lY3Rpb25zIFdURl9HVUFSREVEX0JZX0xPQ0sobV9sb2Nr
KTsKKyAgICBIYXNoQ291bnRlZFNldDxSZWY8U3RyZWFtU2VydmVyQ29ubmVjdGlvbkJhc2U+PiBt
X2Nvbm5lY3Rpb25zIFdURl9HVUFSREVEX0JZX0xPQ0sobV9sb2NrKTsKIH07CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbVNlcnZlckNvbm5lY3Rpb24u
Y3BwIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtU2VydmVyQ29ubmVjdGlvbi5j
cHAKaW5kZXggYWZkZmRiMDBmM2Q5YTg1N2RkMDk0NTllYWNiMmYxYTNjMWFiNDNhZS4uOTZhM2Vh
ZjZhN2Q4ZjFmZDVkZThlYWJmOTA1MDEzZmU0OTFkYTFjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtU2VydmVyQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtU2VydmVyQ29ubmVjdGlvbi5jcHAKQEAgLTQwLDEw
ICs0MCwyNyBAQCBTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uQmFzZTo6U3RyZWFtU2VydmVyQ29ubmVj
dGlvbkJhc2UoQ29ubmVjdGlvbiYgY29ubmVjdGlvbiwgUwogCiB2b2lkIFN0cmVhbVNlcnZlckNv
bm5lY3Rpb25CYXNlOjpzdGFydFJlY2VpdmluZ01lc3NhZ2VzSW1wbChSZWNlaXZlck5hbWUgcmVj
ZWl2ZXJOYW1lLCB1aW50NjRfdCBkZXN0aW5hdGlvbklEKQogewotICAgIG1fY29ubmVjdGlvbi0+
YWRkTWVzc2FnZVJlY2VpdmVRdWV1ZSgqdGhpcywgcmVjZWl2ZXJOYW1lLCBkZXN0aW5hdGlvbklE
KTsKKyAgICAvLyBGSVhNRTogQ2FuIHdlIGF2b2lkIHN5bmNocm9ub3VzIGRpc3BhdGNoIGhlcmUg
YnkgYWRqdXN0aW5nIHRoZSBhc3NlcnRpb24gaW4gYENvbm5lY3Rpb246OmVucXVldWVNYXRjaGlu
Z01lc3NhZ2VzVG9NZXNzYWdlUmVjZWl2ZVF1ZXVlYD8KKyAgICBjYWxsT25NYWluUnVuTG9vcEFu
ZFdhaXQoWyZdIHsKKyAgICAgICAgbV9jb25uZWN0aW9uLT5hZGRNZXNzYWdlUmVjZWl2ZVF1ZXVl
KCp0aGlzLCByZWNlaXZlck5hbWUsIGRlc3RpbmF0aW9uSUQpOworICAgIH0pOwogICAgIG1fd29y
a1F1ZXVlLmFkZFN0cmVhbUNvbm5lY3Rpb24oKnRoaXMpOwogfQogCit2b2lkIFN0cmVhbVNlcnZl
ckNvbm5lY3Rpb25CYXNlOjpzdGFydFJlY2VpdmluZ01lc3NhZ2VzSW1wbChSZWNlaXZlck5hbWUg
cmVjZWl2ZXJOYW1lKQoreworICAgIGNhbGxPbk1haW5SdW5Mb29wQW5kV2FpdChbJl0geworICAg
ICAgICBtX2Nvbm5lY3Rpb24tPmFkZE1lc3NhZ2VSZWNlaXZlUXVldWUoKnRoaXMsIHJlY2VpdmVy
TmFtZSk7CisgICAgfSk7CisgICAgbV93b3JrUXVldWUuYWRkU3RyZWFtQ29ubmVjdGlvbigqdGhp
cyk7Cit9CisKK3ZvaWQgU3RyZWFtU2VydmVyQ29ubmVjdGlvbkJhc2U6OnN0b3BSZWNlaXZpbmdN
ZXNzYWdlc0ltcGwoUmVjZWl2ZXJOYW1lIHJlY2VpdmVyTmFtZSkKK3sKKyAgICBtX2Nvbm5lY3Rp
b24tPnJlbW92ZU1lc3NhZ2VSZWNlaXZlUXVldWUocmVjZWl2ZXJOYW1lKTsKKyAgICBtX3dvcmtR
dWV1ZS5yZW1vdmVTdHJlYW1Db25uZWN0aW9uKCp0aGlzKTsKK30KKwogdm9pZCBTdHJlYW1TZXJ2
ZXJDb25uZWN0aW9uQmFzZTo6c3RvcFJlY2VpdmluZ01lc3NhZ2VzSW1wbChSZWNlaXZlck5hbWUg
cmVjZWl2ZXJOYW1lLCB1aW50NjRfdCBkZXN0aW5hdGlvbklEKQogewogICAgIG1fY29ubmVjdGlv
bi0+cmVtb3ZlTWVzc2FnZVJlY2VpdmVRdWV1ZShyZWNlaXZlck5hbWUsIGRlc3RpbmF0aW9uSUQp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtU2VydmVyQ29u
bmVjdGlvbi5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyZWFtU2VydmVyQ29ubmVj
dGlvbi5oCmluZGV4IDNjNGFlMGQ4Yzc3YjI5OWY0N2YwN2E0YTc1YjBhZjVhYzk0MjI4YzYuLmU2
YTQyNTE0ZjRjZTcwODVlN2M3Y2QxMmIxNzYxM2U2NDg2ZDI2ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmVhbVNlcnZlckNvbm5lY3Rpb24uaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJlYW1TZXJ2ZXJDb25uZWN0aW9uLmgKQEAgLTYyLDYg
KzYyLDkgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgc3RhcnRSZWNlaXZpbmdNZXNzYWdlc0ltcGwo
UmVjZWl2ZXJOYW1lLCB1aW50NjRfdCBkZXN0aW5hdGlvbklEKTsKICAgICB2b2lkIHN0b3BSZWNl
aXZpbmdNZXNzYWdlc0ltcGwoUmVjZWl2ZXJOYW1lLCB1aW50NjRfdCBkZXN0aW5hdGlvbklEKTsK
IAorICAgIHZvaWQgc3RhcnRSZWNlaXZpbmdNZXNzYWdlc0ltcGwoUmVjZWl2ZXJOYW1lKTsKKyAg
ICB2b2lkIHN0b3BSZWNlaXZpbmdNZXNzYWdlc0ltcGwoUmVjZWl2ZXJOYW1lKTsKKwogICAgIC8v
IE1lc3NhZ2VSZWNlaXZlUXVldWUKICAgICB2b2lkIGVucXVldWVNZXNzYWdlKENvbm5lY3Rpb24m
LCBzdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4mJikgZmluYWw7CiAKQEAgLTE0NCw2ICsxNDcsOSBA
QCBwdWJsaWM6CiAgICAgLy8gU3RvcHMgdGhlIG1lc3NhZ2UgcmVjZWlwdC4gTm90ZTogYWxyZWFk
eSByZWNlaXZlZCBtZXNzYWdlcyBtaWdodCBzdGlsbCBiZSBkZWxpdmVyZWQuCiAgICAgdm9pZCBz
dG9wUmVjZWl2aW5nTWVzc2FnZXMoUmVjZWl2ZXJOYW1lLCB1aW50NjRfdCBkZXN0aW5hdGlvbklE
KTsKIAorICAgIGlubGluZSB2b2lkIHN0YXJ0UmVjZWl2aW5nTWVzc2FnZXMoUmVjZWl2ZXJOYW1l
KTsKKyAgICBpbmxpbmUgdm9pZCBzdG9wUmVjZWl2aW5nTWVzc2FnZXMoUmVjZWl2ZXJOYW1lKTsK
KwogICAgIC8vIFN0cmVhbVNlcnZlckNvbm5lY3Rpb25CYXNlIG92ZXJyaWRlcy4KICAgICBEaXNw
YXRjaFJlc3VsdCBkaXNwYXRjaFN0cmVhbU1lc3NhZ2VzKHNpemVfdCBtZXNzYWdlTGltaXQpIGZp
bmFsOwogCkBAIC0xNjEsNCArMTY3LDE0IEBAIHByaXZhdGU6CiAgICAgdWludDY0X3QgbV9jdXJy
ZW50RGVzdGluYXRpb25JRCB7IDAgfTsKIH07CiAKK3ZvaWQgU3RyZWFtU2VydmVyQ29ubmVjdGlv
bjo6c3RhcnRSZWNlaXZpbmdNZXNzYWdlcyhSZWNlaXZlck5hbWUgcmVjZWl2ZXJOYW1lKQorewor
ICAgIFN0cmVhbVNlcnZlckNvbm5lY3Rpb25CYXNlOjpzdGFydFJlY2VpdmluZ01lc3NhZ2VzSW1w
bChyZWNlaXZlck5hbWUpOworfQorCit2b2lkIFN0cmVhbVNlcnZlckNvbm5lY3Rpb246OnN0b3BS
ZWNlaXZpbmdNZXNzYWdlcyhSZWNlaXZlck5hbWUgcmVjZWl2ZXJOYW1lKQoreworICAgIFN0cmVh
bVNlcnZlckNvbm5lY3Rpb25CYXNlOjpzdG9wUmVjZWl2aW5nTWVzc2FnZXNJbXBsKHJlY2VpdmVy
TmFtZSk7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcApp
bmRleCA0MTM1MTcyZmFiZmMxNjExZGQ1NjNkYjA5MjY5MmZkZWEyMDc2ODIwLi4yOGJiMjQ0ODE2
ODE5M2VlZTdkY2FjZWIzODFhOGYzZGUwOGRhMWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkuY3BwCkBAIC0xMjcsOSArMTI3LDcgQEAgYm9vbCBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHk6OndhaXRGb3JEaWRGbHVzaCgpCiAKIHZvaWQgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5OjpjcmVhdGVSZW1vdGVJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VC
dWZmZXIpCiB7Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGFuIG5vcm1hbCAoYXN5bmMp
IHN0cmVhbSBtZXNzYWdlLiBIb3dldmVyLCBkb2luZyBzbyBtYXkgY2F1c2Ugc3Vic2VxdWVudCBv
dXQtb2Ytc3RyZWFtIG1lc3NhZ2VzIHNlbnQgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgaW1hZ2UKLSAg
ICAvLyBidWZmZXIgdG8gYmUgZHJvcHBlZCBieSB0aGUgSVBDIGNvbm5lY3Rpb24uIEZvciB0aGUg
dGltZSBiZWluZywgd29yayBhcm91bmQgdGhpcyBieSB1c2luZyBzeW5jIElQQyAoc2VlIDxodHRw
czovL3dlYmtpdC5vcmcvYi8yMzE2ODE+IGZvciBtb3JlIGRldGFpbHMpLgotICAgIHNlbmRTeW5j
VG9TdHJlYW0oTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkNyZWF0ZUltYWdlQnVm
ZmVyKGltYWdlQnVmZmVyLmxvZ2ljYWxTaXplKCksIGltYWdlQnVmZmVyLnJlbmRlcmluZ01vZGUo
KSwgaW1hZ2VCdWZmZXIucmVzb2x1dGlvblNjYWxlKCksIGltYWdlQnVmZmVyLmNvbG9yU3BhY2Uo
KSwgaW1hZ2VCdWZmZXIucGl4ZWxGb3JtYXQoKSwgaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKCkpLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Q3JlYXRl
SW1hZ2VCdWZmZXI6OlJlcGx5KCksIDNfcyk7CisgICAgc2VuZFRvU3RyZWFtKE1lc3NhZ2VzOjpS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpDcmVhdGVJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlci5sb2dp
Y2FsU2l6ZSgpLCBpbWFnZUJ1ZmZlci5yZW5kZXJpbmdNb2RlKCksIGltYWdlQnVmZmVyLnJlc29s
dXRpb25TY2FsZSgpLCBpbWFnZUJ1ZmZlci5jb2xvclNwYWNlKCksIGltYWdlQnVmZmVyLnBpeGVs
Rm9ybWF0KCksIGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpKSk7CiB9
CiAKIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVh
dGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UmIGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0IHBpeGVsRm9ybWF0KQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>