<?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>30612</bug_id>
          
          <creation_ts>2009-10-20 18:01:51 -0700</creation_ts>
          <short_desc>Remove threadsafe refcounting from tasks used with WTF::MessageQueue.</short_desc>
          <delta_ts>2009-11-02 13:32:10 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>30805</dependson>
    
    <dependson>30941</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dmitry Titov">dimich</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>dimich</cc>
    
    <cc>levin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>156371</commentid>
    <comment_count>0</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-10-20 18:01:51 -0700</bug_when>
    <thetext>The MessageQueue keeps RefPtr&lt;WorkerRunLoop::Task&gt; objects. Unfortunately, WorkerRunLoop::Task is RefCounted, not ThreadSafeShared. Because of this, when the task is added to the queue, another thread can pick it up right away while the RefPtr on the callstack is still to be deconstructed. This can cause race condition.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>157184</commentid>
    <comment_count>1</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-10-23 10:58:16 -0700</bug_when>
    <thetext>So the easy fix would be to make WorkerRunLoop::Task ThreadSafeShared. However, the pattern of usage of MessageQueue in all places (workers, localstore, database) is that we create a task, append it to the MQ, which signals to other thread. The signaled thread takes the task from the queue, runs it and discards it.
This is straight scenario for OwnPtr/PassOwnPtr because at no moment in time there are multiple owners of the tasks, the ownership is passed very cleanly from one thread to another.
So we can stop deriving all kind of task classes from ThreadSafeShared and change MessageQueue to take ownership of a task on append and pass it to the fetching thread later. This will remove quite a lot of unnecessary thread-safe refcounting.
Patch is forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>157427</commentid>
    <comment_count>2</comment_count>
      <attachid>41777</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-10-23 22:26:36 -0700</bug_when>
    <thetext>Created attachment 41777
Work in progress - not for actual review yet.

This seems to be the change. Posting here not for review yet, but to get feedback on overall direction.
It&apos;s on a biggish side, so I think I&apos;ll split it in 3 parts after cleanup:
- split DatabaseTask into a task and a synchronizer that allows to wait for synchronous completion of the task without having an actual task pointer in the originating thread.
- adding MessageQueue::removeWithPredicate(...)
- making tasks not refcounted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159522</commentid>
    <comment_count>3</comment_count>
      <attachid>42245</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-10-30 16:53:36 -0700</bug_when>
    <thetext>Created attachment 42245
Proposed patch.

Now that the preparatory patches are in, this change is simple:
- Change MessageQueue to act as a queue of OwnPtr&lt;DataType&gt;
- Remove ThreadSafeShared from various Task types.
- Replace a bunch of RefPtrs with OwnPtrs when dealing with those Tasks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159803</commentid>
    <comment_count>4</comment_count>
      <attachid>42245</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-11-02 08:31:43 -0800</bug_when>
    <thetext>Comment on attachment 42245
Proposed patch.

Just a few things to fix on landing.

&gt; diff --git a/JavaScriptCore/ChangeLog b/JavaScriptCore/ChangeLog
&gt; +        * wtf/MessageQueue.h:
&gt; +        (WTF::MessageQueue::alwaysTruePredicate):
&gt; +        (WTF::::~MessageQueue):
&gt; +        (WTF::::append):
&gt; +        (WTF::::appendAndCheckEmpty):
&gt; +        (WTF::::prepend):
&gt; +        (WTF::::waitForMessage):
&gt; +        (WTF::::waitForMessageFilteredWithTimeout):
&gt; +        (WTF::::tryGetMessage):
&gt; +        (WTF::::removeIf):
These functions declarations are messed up. Please fix them.


&gt; diff --git a/JavaScriptCore/wtf/MessageQueue.h b/JavaScriptCore/wtf/MessageQueue.h
&gt; +    inline void MessageQueue&lt;DataType&gt;::~MessageQueue()
&gt; +    {
&gt; +        MutexLocker lock(m_mutex);
&gt; +
&gt; +        while (!m_queue.isEmpty()) {
&gt; +            DequeConstIterator&lt;DataType*&gt; found = m_queue.begin();
&gt; +            DataType* ptr = *found;
&gt; +            m_queue.remove(found);
&gt; +            delete ptr;
&gt; +        }
&gt; +    }
Consider using &quot;deleteAllValues&quot; from Deque.h

&gt; +
&gt; +
Extra blank line.


&gt; +    inline PassOwnPtr&lt;DataType&gt; MessageQueue&lt;DataType&gt;::waitForMessageFilteredWithTimeout(MessageQueueWaitResult&amp; result, Predicate&amp; predicate, double absoluteTime)
&gt; +        DataType* ptr = *found;
ptr? (name) How about message or data.... ?


&gt; +    inline PassOwnPtr&lt;DataType&gt; MessageQueue&lt;DataType&gt;::tryGetMessage()
&gt; +        DataType* ptr = m_queue.first();
ptr? (name)


&gt; @@ -157,9 +181,11 @@ namespace WTF {
&gt;      inline void MessageQueue&lt;DataType&gt;::removeIf(Predicate&amp; predicate)
&gt; +            DataType* ptr = *found;

ptr? (name)

&gt; diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
&gt;  2009-10-30  Dmitry Titov  &lt;dimich@chromium.org&gt;
&gt;  
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Remove threadsafe refcounting from tasks used with WTF::MessageQueue.
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=30612
&gt; +
&gt; +        No new tests since no new functionality. Storage, MessagePorts and Workers tests cover this.
&gt; +
&gt; +        There is a lot of files but most changes are simply replace RefPtr and PassRefPtr to

/There is/There are/
/to/with/


&gt; diff --git a/WebCore/dom/default/PlatformMessagePortChannel.cpp b/WebCore/dom/default/PlatformMessagePortChannel.cpp
&gt; @@ -193,7 +193,7 @@ void PlatformMessagePortChannel::postMessageToRemote(PassOwnPtr&lt;MessagePortChann
&gt;  bool PlatformMessagePortChannel::tryGetMessageFromRemote(OwnPtr&lt;MessagePortChannel::EventData&gt;&amp; result)
&gt;  {
&gt;      MutexLocker lock(m_mutex);
&gt; +    return (result = m_incomingQueue-&gt;tryGetMessage());

It would be nice to not write this on one line, which can easily making it look like == was intended at first glance.
  result = m_incomingQueue-&gt;tryGetMessage();
  return result;


&gt; diff --git a/WebCore/storage/LocalStorageThread.cpp b/WebCore/storage/LocalStorageThread.cpp
&gt;      while (true) {
&gt; -        RefPtr&lt;LocalStorageTask&gt; task;
&gt; -        if (!m_queue.waitForMessage(task))
&gt; +        OwnPtr&lt;LocalStorageTask&gt; task = m_queue.waitForMessage();
&gt; +        if (!task)
&gt;              break;

For similar code in WebCore/storage/DatabaseThread.cpp, you re-wrote this to be
  while (OwnPtr&lt;LocalStorageTask&gt; task = m_queue.waitForMessage()) {

(and if you do that I think the contents will be a single line so no {} around that.)


&gt; diff --git a/WebCore/workers/WorkerRunLoop.cpp b/WebCore/workers/WorkerRunLoop.cpp
&gt; +void WorkerRunLoop::Task::performTask(ScriptExecutionContext* context) { m_task-&gt;performTask(context); }

Should be multiple lines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159907</commentid>
    <comment_count>5</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-11-02 13:32:10 -0800</bug_when>
    <thetext>Fixed all and landed: http://trac.webkit.org/changeset/50427</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41777</attachid>
            <date>2009-10-23 22:26:36 -0700</date>
            <delta_ts>2009-10-30 16:53:36 -0700</delta_ts>
            <desc>Work in progress - not for actual review yet.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>62481</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXNzYWdlUXVldWUuaCBiL0phdmFTY3Jp
cHRDb3JlL3d0Zi9NZXNzYWdlUXVldWUuaAppbmRleCAxMjI5MWNjLi41NWNhNTk3IDEwMDY0NAot
LS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvTWVzc2FnZVF1ZXVlLmgKKysrIGIvSmF2YVNjcmlwdENv
cmUvd3RmL01lc3NhZ2VRdWV1ZS5oCkBAIC00NCwyMCArNDQsMzUgQEAgbmFtZXNwYWNlIFdURiB7
CiAgICAgICAgIE1lc3NhZ2VRdWV1ZU1lc3NhZ2VSZWNlaXZlZCwgIC8vIEEgbWVzc2FnZSB3YXMg
c3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIGFuZCByZXR1cm5lZC4KICAgICB9OwogCisgICAgLy8gVGhl
IHF1ZXVlIHRha2VzIG93bmVyc2hpcCBvZiB0aGUgbWVzc2FnZSBhbmQgdHJhbnNmZXIgaXQgdG8g
dGhlIG5ldyBvd25lciB3aGVuIG1lc3NhZ2UgaXMgZmV0Y2hlZCBmcm9tIHRoZSBxdWV1ZS4KICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBEYXRhVHlwZT4KICAgICBjbGFzcyBNZXNzYWdlUXVldWUgOiBw
dWJsaWMgTm9uY29weWFibGUgewogICAgIHB1YmxpYzoKICAgICAgICAgTWVzc2FnZVF1ZXVlKCkg
OiBtX2tpbGxlZChmYWxzZSkgeyB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIGFwcGVuZChjb25z
dCBEYXRhVHlwZSYpOwotICAgICAgICBib29sIGFwcGVuZEFuZENoZWNrRW1wdHkoY29uc3QgRGF0
YVR5cGUmKTsKLSAgICAgICAgdm9pZCBwcmVwZW5kKGNvbnN0IERhdGFUeXBlJik7Ci0gICAgICAg
IGJvb2wgd2FpdEZvck1lc3NhZ2UoRGF0YVR5cGUmKTsKKyAgICAgICAgfk1lc3NhZ2VRdWV1ZSgp
IHsKKyAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7CisKKyAgICAgICAgICAg
IHdoaWxlICghbV9xdWV1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBEZXF1ZUNvbnN0
SXRlcmF0b3I8RGF0YVR5cGUqPiBmb3VuZCA9IG1fcXVldWUuYmVnaW4oKTsKKyAgICAgICAgICAg
ICAgICBEYXRhVHlwZSogcHRyID0gKmZvdW5kOworICAgICAgICAgICAgICAgIG1fcXVldWUucmVt
b3ZlKGZvdW5kKTsKKyAgICAgICAgICAgICAgICBkZWxldGUgcHRyOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhcHBlbmQoUGFzc093blB0cjxEYXRhVHlwZT4pOwor
ICAgICAgICBib29sIGFwcGVuZEFuZENoZWNrRW1wdHkoUGFzc093blB0cjxEYXRhVHlwZT4pOwor
ICAgICAgICB2b2lkIHByZXBlbmQoUGFzc093blB0cjxEYXRhVHlwZT4pOworCisgICAgICAgIFBh
c3NPd25QdHI8RGF0YVR5cGU+IHdhaXRGb3JNZXNzYWdlKCk7CisgICAgICAgIFBhc3NPd25QdHI8
RGF0YVR5cGU+IHRyeUdldE1lc3NhZ2UoKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUHJl
ZGljYXRlPgotICAgICAgICBNZXNzYWdlUXVldWVXYWl0UmVzdWx0IHdhaXRGb3JNZXNzYWdlRmls
dGVyZWRXaXRoVGltZW91dChEYXRhVHlwZSYsIFByZWRpY2F0ZSYsIGRvdWJsZSBhYnNvbHV0ZVRp
bWUpOwotICAgICAgICB2b2lkIGtpbGwoKTsKKyAgICAgICAgUGFzc093blB0cjxEYXRhVHlwZT4g
d2FpdEZvck1lc3NhZ2VGaWx0ZXJlZFdpdGhUaW1lb3V0KE1lc3NhZ2VRdWV1ZVdhaXRSZXN1bHQm
LCBQcmVkaWNhdGUmLCBkb3VibGUgYWJzb2x1dGVUaW1lKTsKKworICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBQcmVkaWNhdGU+CisgICAgICAgIHZvaWQgcmVtb3ZlV2l0aFByZWRpY2F0ZShQcmVk
aWNhdGUmKTsKIAotICAgICAgICBib29sIHRyeUdldE1lc3NhZ2UoRGF0YVR5cGUmKTsKKyAgICAg
ICAgdm9pZCBraWxsKCk7CiAgICAgICAgIGJvb2wga2lsbGVkKCkgY29uc3Q7CiAKICAgICAgICAg
Ly8gVGhlIHJlc3VsdCBvZiBpc0VtcHR5KCkgaXMgb25seSB2YWxpZCBpZiBubyBvdGhlciB0aHJl
YWQgaXMgbWFuaXB1bGF0aW5nIHRoZSBxdWV1ZSBhdCB0aGUgc2FtZSB0aW1lLgpAQCAtNjYsODYg
KzgxLDEwNiBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgc3RhdGljIGRvdWJsZSBpbmZpbml0
ZVRpbWUoKSB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1heCgpOyB9CiAK
ICAgICBwcml2YXRlOgotICAgICAgICBzdGF0aWMgYm9vbCBhbHdheXNUcnVlUHJlZGljYXRlKERh
dGFUeXBlJikgeyByZXR1cm4gdHJ1ZTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBhbHdheXNUcnVl
UHJlZGljYXRlKERhdGFUeXBlKikgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgICAgIG11dGFibGUg
TXV0ZXggbV9tdXRleDsKICAgICAgICAgVGhyZWFkQ29uZGl0aW9uIG1fY29uZGl0aW9uOwotICAg
ICAgICBEZXF1ZTxEYXRhVHlwZT4gbV9xdWV1ZTsKKyAgICAgICAgRGVxdWU8RGF0YVR5cGUqPiBt
X3F1ZXVlOwogICAgICAgICBib29sIG1fa2lsbGVkOwogICAgIH07CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBEYXRhVHlwZT4KLSAgICBpbmxpbmUgdm9pZCBNZXNzYWdlUXVldWU8RGF0YVR5cGU+
OjphcHBlbmQoY29uc3QgRGF0YVR5cGUmIG1lc3NhZ2UpCisgICAgaW5saW5lIHZvaWQgTWVzc2Fn
ZVF1ZXVlPERhdGFUeXBlPjo6YXBwZW5kKFBhc3NPd25QdHI8RGF0YVR5cGU+IG1lc3NhZ2UpCiAg
ICAgewogICAgICAgICBNdXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOwotICAgICAgICBtX3F1ZXVl
LmFwcGVuZChtZXNzYWdlKTsKKyAgICAgICAgbV9xdWV1ZS5hcHBlbmQobWVzc2FnZS5yZWxlYXNl
KCkpOwogICAgICAgICBtX2NvbmRpdGlvbi5zaWduYWwoKTsKICAgICB9CiAKICAgICAvLyBSZXR1
cm5zIHRydWUgaWYgdGhlIHF1ZXVlIHdhcyBlbXB0eSBiZWZvcmUgdGhlIGl0ZW0gd2FzIGFkZGVk
LgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIERhdGFUeXBlPgotICAgIGlubGluZSBib29sIE1lc3Nh
Z2VRdWV1ZTxEYXRhVHlwZT46OmFwcGVuZEFuZENoZWNrRW1wdHkoY29uc3QgRGF0YVR5cGUmIG1l
c3NhZ2UpCisgICAgaW5saW5lIGJvb2wgTWVzc2FnZVF1ZXVlPERhdGFUeXBlPjo6YXBwZW5kQW5k
Q2hlY2tFbXB0eShQYXNzT3duUHRyPERhdGFUeXBlPiBtZXNzYWdlKQogICAgIHsKICAgICAgICAg
TXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKICAgICAgICAgYm9vbCB3YXNFbXB0eSA9IG1fcXVl
dWUuaXNFbXB0eSgpOwotICAgICAgICBtX3F1ZXVlLmFwcGVuZChtZXNzYWdlKTsKKyAgICAgICAg
bV9xdWV1ZS5hcHBlbmQobWVzc2FnZS5yZWxlYXNlKCkpOwogICAgICAgICBtX2NvbmRpdGlvbi5z
aWduYWwoKTsKICAgICAgICAgcmV0dXJuIHdhc0VtcHR5OwogICAgIH0KIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIERhdGFUeXBlPgotICAgIGlubGluZSB2b2lkIE1lc3NhZ2VRdWV1ZTxEYXRhVHlw
ZT46OnByZXBlbmQoY29uc3QgRGF0YVR5cGUmIG1lc3NhZ2UpCisgICAgaW5saW5lIHZvaWQgTWVz
c2FnZVF1ZXVlPERhdGFUeXBlPjo6cHJlcGVuZChQYXNzT3duUHRyPERhdGFUeXBlPiBtZXNzYWdl
KQogICAgIHsKICAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKLSAgICAgICAgbV9x
dWV1ZS5wcmVwZW5kKG1lc3NhZ2UpOworICAgICAgICBtX3F1ZXVlLnByZXBlbmQobWVzc2FnZS5y
ZWxlYXNlKCkpOwogICAgICAgICBtX2NvbmRpdGlvbi5zaWduYWwoKTsKICAgICB9CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBEYXRhVHlwZT4KLSAgICBpbmxpbmUgYm9vbCBNZXNzYWdlUXVldWU8
RGF0YVR5cGU+Ojp3YWl0Rm9yTWVzc2FnZShEYXRhVHlwZSYgcmVzdWx0KQorICAgIGlubGluZSBQ
YXNzT3duUHRyPERhdGFUeXBlPiBNZXNzYWdlUXVldWU8RGF0YVR5cGU+Ojp3YWl0Rm9yTWVzc2Fn
ZSgpCiAgICAgewotICAgICAgICBNZXNzYWdlUXVldWVXYWl0UmVzdWx0IGV4aXRSZWFzb24gPSB3
YWl0Rm9yTWVzc2FnZUZpbHRlcmVkV2l0aFRpbWVvdXQocmVzdWx0LCBNZXNzYWdlUXVldWU8RGF0
YVR5cGU+OjphbHdheXNUcnVlUHJlZGljYXRlLCBpbmZpbml0ZVRpbWUoKSk7CisgICAgICAgIE1l
c3NhZ2VRdWV1ZVdhaXRSZXN1bHQgZXhpdFJlYXNvbjsgCisgICAgICAgIFBhc3NPd25QdHI8RGF0
YVR5cGU+IHJlc3VsdCA9IHdhaXRGb3JNZXNzYWdlRmlsdGVyZWRXaXRoVGltZW91dChleGl0UmVh
c29uLCBNZXNzYWdlUXVldWU8RGF0YVR5cGU+OjphbHdheXNUcnVlUHJlZGljYXRlLCBpbmZpbml0
ZVRpbWUoKSk7CiAgICAgICAgIEFTU0VSVChleGl0UmVhc29uID09IE1lc3NhZ2VRdWV1ZVRlcm1p
bmF0ZWQgfHwgZXhpdFJlYXNvbiA9PSBNZXNzYWdlUXVldWVNZXNzYWdlUmVjZWl2ZWQpOwotICAg
ICAgICByZXR1cm4gZXhpdFJlYXNvbiA9PSBNZXNzYWdlUXVldWVNZXNzYWdlUmVjZWl2ZWQ7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGF0
YVR5cGU+CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUHJlZGljYXRlPgotICAgIGlubGluZSBNZXNz
YWdlUXVldWVXYWl0UmVzdWx0IE1lc3NhZ2VRdWV1ZTxEYXRhVHlwZT46OndhaXRGb3JNZXNzYWdl
RmlsdGVyZWRXaXRoVGltZW91dChEYXRhVHlwZSYgcmVzdWx0LCBQcmVkaWNhdGUmIHByZWRpY2F0
ZSwgZG91YmxlIGFic29sdXRlVGltZSkKKyAgICBpbmxpbmUgUGFzc093blB0cjxEYXRhVHlwZT4g
TWVzc2FnZVF1ZXVlPERhdGFUeXBlPjo6d2FpdEZvck1lc3NhZ2VGaWx0ZXJlZFdpdGhUaW1lb3V0
KE1lc3NhZ2VRdWV1ZVdhaXRSZXN1bHQmIHJlc3VsdCwgUHJlZGljYXRlJiBwcmVkaWNhdGUsIGRv
dWJsZSBhYnNvbHV0ZVRpbWUpCiAgICAgewogICAgICAgICBNdXRleExvY2tlciBsb2NrKG1fbXV0
ZXgpOwogICAgICAgICBib29sIHRpbWVkT3V0ID0gZmFsc2U7CiAKLSAgICAgICAgRGVxdWVDb25z
dEl0ZXJhdG9yPERhdGFUeXBlPiBmb3VuZCA9IG1fcXVldWUuZW5kKCk7CisgICAgICAgIERlcXVl
Q29uc3RJdGVyYXRvcjxEYXRhVHlwZSo+IGZvdW5kID0gbV9xdWV1ZS5lbmQoKTsKICAgICAgICAg
d2hpbGUgKCFtX2tpbGxlZCAmJiAhdGltZWRPdXQgJiYgKGZvdW5kID0gbV9xdWV1ZS5maW5kSWYo
cHJlZGljYXRlKSkgPT0gbV9xdWV1ZS5lbmQoKSkKICAgICAgICAgICAgIHRpbWVkT3V0ID0gIW1f
Y29uZGl0aW9uLnRpbWVkV2FpdChtX211dGV4LCBhYnNvbHV0ZVRpbWUpOwogCiAgICAgICAgIEFT
U0VSVCghdGltZWRPdXQgfHwgYWJzb2x1dGVUaW1lICE9IGluZmluaXRlVGltZSgpKTsKIAotICAg
ICAgICBpZiAobV9raWxsZWQpCi0gICAgICAgICAgICByZXR1cm4gTWVzc2FnZVF1ZXVlVGVybWlu
YXRlZDsKKyAgICAgICAgaWYgKG1fa2lsbGVkKSB7CisgICAgICAgICAgICByZXN1bHQgPSBNZXNz
YWdlUXVldWVUZXJtaW5hdGVkOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KIAot
ICAgICAgICBpZiAodGltZWRPdXQpCi0gICAgICAgICAgICByZXR1cm4gTWVzc2FnZVF1ZXVlVGlt
ZW91dDsKKyAgICAgICAgaWYgKHRpbWVkT3V0KSB7CisgICAgICAgICAgICByZXN1bHQgPSBNZXNz
YWdlUXVldWVUaW1lb3V0OworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KIAogICAg
ICAgICBBU1NFUlQoZm91bmQgIT0gbV9xdWV1ZS5lbmQoKSk7Ci0gICAgICAgIHJlc3VsdCA9ICpm
b3VuZDsKKyAgICAgICAgRGF0YVR5cGUqIHB0ciA9ICpmb3VuZDsKICAgICAgICAgbV9xdWV1ZS5y
ZW1vdmUoZm91bmQpOwotICAgICAgICByZXR1cm4gTWVzc2FnZVF1ZXVlTWVzc2FnZVJlY2VpdmVk
OworICAgICAgICByZXN1bHQgPSBNZXNzYWdlUXVldWVNZXNzYWdlUmVjZWl2ZWQ7CisgICAgICAg
IHJldHVybiBwdHI7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGF0YVR5cGU+Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgUHJlZGljYXRlPgorICAgIGlubGluZSB2b2lkIE1lc3NhZ2VR
dWV1ZTxEYXRhVHlwZT46OnJlbW92ZVdpdGhQcmVkaWNhdGUoUHJlZGljYXRlJiBwcmVkaWNhdGUp
CisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOworCisgICAgICAgIERl
cXVlQ29uc3RJdGVyYXRvcjxEYXRhVHlwZSo+IGZvdW5kID0gbV9xdWV1ZS5lbmQoKTsKKyAgICAg
ICAgd2hpbGUgKChmb3VuZCA9IG1fcXVldWUuZmluZElmKHByZWRpY2F0ZSkpICE9IG1fcXVldWUu
ZW5kKCkpIHsKKyAgICAgICAgICAgIERhdGFUeXBlKiBwdHIgPSAqZm91bmQ7CisgICAgICAgICAg
ICBtX3F1ZXVlLnJlbW92ZShmb3VuZCk7CisgICAgICAgICAgICBkZWxldGUgcHRyOworICAgICAg
ICB9CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGF0YVR5cGU+Ci0gICAgaW5saW5l
IGJvb2wgTWVzc2FnZVF1ZXVlPERhdGFUeXBlPjo6dHJ5R2V0TWVzc2FnZShEYXRhVHlwZSYgcmVz
dWx0KQorICAgIGlubGluZSBQYXNzT3duUHRyPERhdGFUeXBlPiBNZXNzYWdlUXVldWU8RGF0YVR5
cGU+Ojp0cnlHZXRNZXNzYWdlKCkKICAgICB7CiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9t
dXRleCk7CiAgICAgICAgIGlmIChtX2tpbGxlZCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBpZiAobV9xdWV1ZS5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gMDsKIAotICAgICAg
ICByZXN1bHQgPSBtX3F1ZXVlLmZpcnN0KCk7CisgICAgICAgIERhdGFUeXBlKiBwdHIgPSBtX3F1
ZXVlLmZpcnN0KCk7CiAgICAgICAgIG1fcXVldWUucmVtb3ZlRmlyc3QoKTsKLSAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIHJldHVybiBwdHI7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRGF0YVR5cGU+CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggNDc1YThjMS4uNzZhMjVmMiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cApAQCAtNDUyNCw3ICs0NTI0LDcgQEAgdm9pZCBEb2N1bWVudDo6c2NyaXB0SW1wb3J0ZWQodW5z
aWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVN0cmkKIAogY2xhc3Mg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dFRhc2tUaW1lciA6IHB1YmxpYyBUaW1lckJhc2UgewogcHVi
bGljOgotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRUYXNrVGltZXIoUGFzc1JlZlB0cjxEb2N1
bWVudD4gY29udGV4dCwgUGFzc1JlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0
YXNrKQorICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRUYXNrVGltZXIoUGFzc1JlZlB0cjxEb2N1
bWVudD4gY29udGV4dCwgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0
YXNrKQogICAgICAgICA6IG1fY29udGV4dChjb250ZXh0KQogICAgICAgICAsIG1fdGFzayh0YXNr
KQogICAgIHsKQEAgLTQ1MzgsMTggKzQ1MzgsMTggQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICBS
ZWZQdHI8RG9jdW1lbnQ+IG1fY29udGV4dDsKLSAgICBSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDo6VGFzaz4gbV90YXNrOworICAgIE93blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpU
YXNrPiBtX3Rhc2s7CiB9OwogCiBzdHJ1Y3QgUGVyZm9ybVRhc2tDb250ZXh0IHsKLSAgICBQZXJm
b3JtVGFza0NvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCwgUGFzc1JlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrKQorICAg
IFBlcmZvcm1UYXNrQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRp
b25Db250ZXh0LCBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2sp
CiAgICAgICAgIDogc2NyaXB0RXhlY3V0aW9uQ29udGV4dChzY3JpcHRFeGVjdXRpb25Db250ZXh0
KQogICAgICAgICAsIHRhc2sodGFzaykKICAgICB7CiAgICAgfQogCiAgICAgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsgLy8gVGhlIGNvbnRleHQgc2hvdWxk
IGV4aXN0IHVudGlsIHRhc2sgZXhlY3V0aW9uLgotICAgIFJlZlB0cjxTY3JpcHRFeGVjdXRpb25D
b250ZXh0OjpUYXNrPiB0YXNrOworICAgIE93blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpU
YXNrPiB0YXNrOwogfTsKIAogc3RhdGljIHZvaWQgcGVyZm9ybVRhc2sodm9pZCogY3R4KQpAQCAt
NDU1OSw3ICs0NTU5LDcgQEAgc3RhdGljIHZvaWQgcGVyZm9ybVRhc2sodm9pZCogY3R4KQogICAg
IGRlbGV0ZSBwdGN0eDsKIH0KIAotdm9pZCBEb2N1bWVudDo6cG9zdFRhc2soUGFzc1JlZlB0cjxU
YXNrPiB0YXNrKQordm9pZCBEb2N1bWVudDo6cG9zdFRhc2soUGFzc093blB0cjxUYXNrPiB0YXNr
KQogewogICAgIGlmIChpc01haW5UaHJlYWQoKSkgewogICAgICAgICBTY3JpcHRFeGVjdXRpb25D
b250ZXh0VGFza1RpbWVyKiB0aW1lciA9IG5ldyBTY3JpcHRFeGVjdXRpb25Db250ZXh0VGFza1Rp
bWVyKHN0YXRpY19jYXN0PERvY3VtZW50Kj4odGhpcyksIHRhc2spOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaCBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggMDliYmE1
OC4uNjg1ZDJkMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5oCkBAIC04MTYsNyArODE2LDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBhZGRNZXNzYWdlKE1lc3NhZ2VEZXN0aW5hdGlvbiwgTWVzc2FnZVNvdXJjZSwgTWVz
c2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBs
aW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCk7CiAgICAgdmlydHVhbCB2b2lkIHJl
c291cmNlUmV0cmlldmVkQnlYTUxIdHRwUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIs
IGNvbnN0IFNjcmlwdFN0cmluZyYgc291cmNlU3RyaW5nKTsKICAgICB2aXJ0dWFsIHZvaWQgc2Ny
aXB0SW1wb3J0ZWQodW5zaWduZWQgbG9uZywgY29uc3QgU3RyaW5nJik7Ci0gICAgdmlydHVhbCB2
b2lkIHBvc3RUYXNrKFBhc3NSZWZQdHI8VGFzaz4pOyAvLyBFeGVjdXRlcyB0aGUgdGFzayBvbiBj
b250ZXh0J3MgdGhyZWFkIGFzeW5jaHJvbm91c2x5LgorICAgIHZpcnR1YWwgdm9pZCBwb3N0VGFz
ayhQYXNzT3duUHRyPFRhc2s+KTsgLy8gRXhlY3V0ZXMgdGhlIHRhc2sgb24gY29udGV4dCdzIHRo
cmVhZCBhc3luY2hyb25vdXNseS4KIAogICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJDb3JlOjpOb2Rl
KiwgSlNOb2RlKj4gSlNXcmFwcGVyQ2FjaGU7CiAgICAgSlNXcmFwcGVyQ2FjaGUmIHdyYXBwZXJD
YWNoZSgpIHsgcmV0dXJuIG1fd3JhcHBlckNhY2hlOyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2Rv
bS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcCBiL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuY3BwCmluZGV4IDQ1ZDRlMjMuLjBhMzRlZjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
ZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuY3BwCkBAIC00MCw5ICs0MCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgUHJvY2Vzc01lc3NhZ2VzU29vblRhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6VGFzayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UHJvY2Vzc01l
c3NhZ2VzU29vblRhc2s+IGNyZWF0ZSgpCisgICAgc3RhdGljIFBhc3NPd25QdHI8UHJvY2Vzc01l
c3NhZ2VzU29vblRhc2s+IGNyZWF0ZSgpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFByb2Nlc3NNZXNzYWdlc1Nvb25UYXNrKTsKKyAgICAgICAgcmV0dXJuIG5ldyBQcm9jZXNz
TWVzc2FnZXNTb29uVGFzazsKICAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2so
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9t
L1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCBiL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQuaAppbmRleCBiYjc4YjZmLi5kZGZkNThmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9T
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmgKKysrIGIvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oCkBAIC05MiwxMyArOTIsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICB2b2lkIHJlZigpIHsgcmVmU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOyB9CiAgICAgICAgIHZv
aWQgZGVyZWYoKSB7IGRlcmVmU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOyB9CiAKLSAgICAgICAg
Y2xhc3MgVGFzayA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPFRhc2s+IHsKKyAgICAgICAgY2xh
c3MgVGFzayB7CiAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgIHZpcnR1YWwgflRhc2soKTsK
ICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRpb25Db250
ZXh0KikgPSAwOwogICAgICAgICB9OwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0VGFzayhQ
YXNzUmVmUHRyPFRhc2s+KSA9IDA7IC8vIEV4ZWN1dGVzIHRoZSB0YXNrIG9uIGNvbnRleHQncyB0
aHJlYWQgYXN5bmNocm9ub3VzbHkuCisgICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0VGFzayhQYXNz
T3duUHRyPFRhc2s+KSA9IDA7IC8vIEV4ZWN1dGVzIHRoZSB0YXNrIG9uIGNvbnRleHQncyB0aHJl
YWQgYXN5bmNocm9ub3VzbHkuCiAKICAgICAgICAgdm9pZCBhZGRUaW1lb3V0KGludCB0aW1lb3V0
SWQsIERPTVRpbWVyKik7CiAgICAgICAgIHZvaWQgcmVtb3ZlVGltZW91dChpbnQgdGltZW91dElk
KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL2RlZmF1bHQvUGxhdGZvcm1NZXNzYWdlUG9ydENo
YW5uZWwuY3BwIGIvV2ViQ29yZS9kb20vZGVmYXVsdC9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5l
bC5jcHAKaW5kZXggZDY2ODcwMy4uYTQ1NTk5MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vZGVm
YXVsdC9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAKKysrIGIvV2ViQ29yZS9kb20vZGVm
YXVsdC9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAKQEAgLTE5Myw3ICsxOTMsNyBAQCB2
b2lkIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsOjpwb3N0TWVzc2FnZVRvUmVtb3RlKFBhc3NP
d25QdHI8TWVzc2FnZVBvcnRDaGFubgogYm9vbCBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbDo6
dHJ5R2V0TWVzc2FnZUZyb21SZW1vdGUoT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbDo6RXZlbnRE
YXRhPiYgcmVzdWx0KQogewogICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7Ci0gICAgcmV0
dXJuIG1faW5jb21pbmdRdWV1ZS0+dHJ5R2V0TWVzc2FnZShyZXN1bHQpOworICAgIHJldHVybiAo
cmVzdWx0ID0gbV9pbmNvbWluZ1F1ZXVlLT50cnlHZXRNZXNzYWdlKCkpOwogfQogCiBib29sIFBs
YXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsOjppc0Nvbm5lY3RlZFRvKE1lc3NhZ2VQb3J0KiBwb3J0
KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vZGVmYXVsdC9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hh
bm5lbC5oIGIvV2ViQ29yZS9kb20vZGVmYXVsdC9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5o
CmluZGV4IDBjZTJkMTMuLjJhYWQ5NTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL2RlZmF1bHQv
UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaAorKysgYi9XZWJDb3JlL2RvbS9kZWZhdWx0L1Bs
YXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmgKQEAgLTYzLDE4ICs2MywxNCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PE1lc3NhZ2VQb3J0UXVldWU+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZXNzYWdl
UG9ydFF1ZXVlKCkpOyB9CiAKLSAgICAgICAgICAgIGJvb2wgdHJ5R2V0TWVzc2FnZShPd25QdHI8
TWVzc2FnZVBvcnRDaGFubmVsOjpFdmVudERhdGE+JiBtZXNzYWdlKQorICAgICAgICAgICAgUGFz
c093blB0cjxNZXNzYWdlUG9ydENoYW5uZWw6OkV2ZW50RGF0YT4gdHJ5R2V0TWVzc2FnZSgpCiAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTWVzc2FnZVBvcnRDaGFubmVsOjpFdmVudERh
dGEqIGhvbGRlciA9IDA7Ci0gICAgICAgICAgICAgICAgYm9vbCBtZXNzYWdlQXZhaWxhYmxlID0g
bV9xdWV1ZS50cnlHZXRNZXNzYWdlKGhvbGRlcik7Ci0gICAgICAgICAgICAgICAgaWYgKG1lc3Nh
Z2VBdmFpbGFibGUpCi0gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2V0KGhvbGRlcik7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2VBdmFpbGFibGU7CisgICAgICAgICAgICAgICAg
cmV0dXJuIG1fcXVldWUudHJ5R2V0TWVzc2FnZSgpOwogICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICBib29sIGFwcGVuZEFuZENoZWNrRW1wdHkoUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5u
ZWw6OkV2ZW50RGF0YT4gbWVzc2FnZSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9xdWV1ZS5hcHBlbmRBbmRDaGVja0VtcHR5KG1lc3NhZ2UucmVsZWFzZSgpKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbV9xdWV1ZS5hcHBlbmRBbmRDaGVja0VtcHR5KG1lc3NhZ2Up
OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBib29sIGlzRW1wdHkoKQpAQCAtODIsMTkg
Kzc4LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbV9x
dWV1ZS5pc0VtcHR5KCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIH5NZXNzYWdlUG9y
dFF1ZXVlKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBNYW51YWxseSBmcmVl
IGFueSBpdGVtcyBsZWZ0IGluIHRoZSBxdWV1ZSwgc2luY2Ugd2UgY2FuJ3QgdXNlIE93blB0ciBp
bnRlcm5hbGx5LgotICAgICAgICAgICAgICAgIE1lc3NhZ2VQb3J0Q2hhbm5lbDo6RXZlbnREYXRh
KiBkYXRhID0gMDsKLSAgICAgICAgICAgICAgICB3aGlsZSAobV9xdWV1ZS50cnlHZXRNZXNzYWdl
KGRhdGEpKQotICAgICAgICAgICAgICAgICAgICBkZWxldGUgZGF0YTsKLSAgICAgICAgICAgIH0K
ICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgIE1lc3NhZ2VQb3J0UXVldWUoKSB7IH0KIAot
ICAgICAgICAgICAgLy8gT3duUHRyIGlzIE5vbmNvcHlhYmxlLCBzbyB3ZSBjYW4ndCB1c2UgaXQg
YXMgdGhlIHRlbXBsYXRlIHR5cGUgaW4gYSBNZXNzYWdlUXVldWUuIFNvIHdlIGp1c3Qgc3RvcmUg
YSBwb2ludGVyIHRvIEV2ZW50RGF0YSBhbmQgbWFudWFsbHkgZnJlZSBpdCBpbiB0aGUgZGVzdHJ1
Y3Rvci4KLSAgICAgICAgICAgIC8vIEZJWE1FOiBVc2UgYSBsb2NrLWZyZWUgcXVldWUgaW1wbGVt
ZW50YXRpb24gdG8gY29tcGxldGVseSBlbGltaW5hdGUgY29udGVudGlvbiB3aGVuIHNlbmRpbmcv
cmVjZWl2aW5nIG1lc3NhZ2VzLgotICAgICAgICAgICAgTWVzc2FnZVF1ZXVlPE1lc3NhZ2VQb3J0
Q2hhbm5lbDo6RXZlbnREYXRhKj4gbV9xdWV1ZTsKKyAgICAgICAgICAgIE1lc3NhZ2VRdWV1ZTxN
ZXNzYWdlUG9ydENoYW5uZWw6OkV2ZW50RGF0YT4gbV9xdWV1ZTsKICAgICAgICAgfTsKIAogICAg
ICAgICB+UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
bG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCBiL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcApp
bmRleCBkZjQ2Mzk3Li5lNTBjNTJjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9GcmFtZUxv
YWRlci5jcHAKKysrIGIvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCkBAIC0xNjc0LDkg
KzE2NzQsOSBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhjb25z
dCBLVVJMJiB1cmwpCiAKIGNsYXNzIEhhc2hDaGFuZ2VFdmVudFRhc2sgOiBwdWJsaWMgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
SGFzaENoYW5nZUV2ZW50VGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50
KQorICAgIHN0YXRpYyBQYXNzT3duUHRyPEhhc2hDaGFuZ2VFdmVudFRhc2s+IGNyZWF0ZShQYXNz
UmVmUHRyPERvY3VtZW50PiBkb2N1bWVudCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSGFzaENoYW5nZUV2ZW50VGFzayhkb2N1bWVudCkpOworICAgICAgICByZXR1cm4gbmV3
IEhhc2hDaGFuZ2VFdmVudFRhc2soZG9jdW1lbnQpOwogICAgIH0KICAgICAKICAgICB2aXJ0dWFs
IHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAg
Yi9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwCmluZGV4
IDFhMjIzY2UuLjk1OGU4MjAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0Fw
cGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAKKysrIGIvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBw
bGljYXRpb25DYWNoZUdyb3VwLmNwcApAQCAtOTQ3LDkgKzk0Nyw5IEBAIHZvaWQgQXBwbGljYXRp
b25DYWNoZUdyb3VwOjpzY2hlZHVsZVJlYWNoZWRNYXhBcHBDYWNoZVNpemVDYWxsYmFjaygpCiAK
IGNsYXNzIENhbGxDYWNoZUxpc3RlbmVyVGFzayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250
ZXh0OjpUYXNrIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYWxsQ2FjaGVMaXN0
ZW5lclRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPERvY3VtZW50TG9hZGVyPiBsb2FkZXIsIEFwcGxp
Y2F0aW9uQ2FjaGVIb3N0OjpFdmVudElEIGV2ZW50SUQpCisgICAgc3RhdGljIFBhc3NPd25QdHI8
Q2FsbENhY2hlTGlzdGVuZXJUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxEb2N1bWVudExvYWRlcj4g
bG9hZGVyLCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6RXZlbnRJRCBldmVudElEKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYWxsQ2FjaGVMaXN0ZW5lclRhc2sobG9hZGVyLCBl
dmVudElEKSk7CisgICAgICAgIHJldHVybiBuZXcgQ2FsbENhY2hlTGlzdGVuZXJUYXNrKGxvYWRl
ciwgZXZlbnRJRCk7CiAgICAgfQogCiAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2Uv
RGF0YWJhc2UuY3BwIGIvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAppbmRleCAwOGVhMjg5
Li5iZTMyMTAzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCisrKyBi
L1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAKQEAgLTE0OSw2ICsxNDksNyBAQCBQYXNzUmVm
UHRyPERhdGFiYXNlPiBEYXRhYmFzZTo6b3BlbkRhdGFiYXNlKERvY3VtZW50KiBkb2N1bWVudCwg
Y29uc3QgU3RyaW5nJiBuYQogCiBEYXRhYmFzZTo6RGF0YWJhc2UoRG9jdW1lbnQqIGRvY3VtZW50
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uKQogICAg
IDogbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3MoZmFsc2UpCisgICAgLCBtX3Rlcm1pbmF0aW5nKGZh
bHNlKQogICAgICwgbV9kb2N1bWVudChkb2N1bWVudCkKICAgICAsIG1fbmFtZShuYW1lLmNyb3Nz
VGhyZWFkU3RyaW5nKCkpCiAgICAgLCBtX2d1aWQoMCkKQEAgLTIwNCwxNSArMjA1LDE0IEBAIGJv
b2wgRGF0YWJhc2U6Om9wZW5BbmRWZXJpZnlWZXJzaW9uKEV4Y2VwdGlvbkNvZGUmIGUpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBtX2RhdGFiYXNlQXV0aG9yaXplciA9IERhdGFiYXNlQXV0
aG9yaXplcjo6Y3JlYXRlKCk7CiAKLSAgICBSZWZQdHI8RGF0YWJhc2VPcGVuVGFzaz4gdGFzayA9
IERhdGFiYXNlT3BlblRhc2s6OmNyZWF0ZSh0aGlzKTsKKyAgICBib29sIHN1Y2Nlc3MgPSBmYWxz
ZTsKKyAgICBEYXRhYmFzZVRhc2tDb21wbGV0aW9uTG9jayBsb2NrOworICAgIE93blB0cjxEYXRh
YmFzZU9wZW5UYXNrPiB0YXNrID0gRGF0YWJhc2VPcGVuVGFzazo6Y3JlYXRlKHRoaXMsICZsb2Nr
LCBlLCBzdWNjZXNzKTsKIAotICAgIHRhc2stPmxvY2tGb3JTeW5jaHJvbm91c1NjaGVkdWxpbmco
KTsKLSAgICBtX2RvY3VtZW50LT5kYXRhYmFzZVRocmVhZCgpLT5zY2hlZHVsZUltbWVkaWF0ZVRh
c2sodGFzayk7Ci0gICAgdGFzay0+d2FpdEZvclN5bmNocm9ub3VzQ29tcGxldGlvbigpOworICAg
IG1fZG9jdW1lbnQtPmRhdGFiYXNlVGhyZWFkKCktPnNjaGVkdWxlSW1tZWRpYXRlVGFzayh0YXNr
LnJlbGVhc2UoKSk7CisgICAgbG9jay53YWl0Rm9yVGFza0NvbXBsZXRpb24oKTsKIAotICAgIEFT
U0VSVCh0YXNrLT5pc0NvbXBsZXRlKCkpOwotICAgIGUgPSB0YXNrLT5leGNlcHRpb25Db2RlKCk7
Ci0gICAgcmV0dXJuIHRhc2stPm9wZW5TdWNjZXNzZnVsKCk7CisgICAgcmV0dXJuIHN1Y2Nlc3M7
CiB9CiAKIApAQCAtMzE3LDExICszMTcsMTEgQEAgdm9pZCBEYXRhYmFzZTo6bWFya0FzRGVsZXRl
ZEFuZENsb3NlKCkKIAogICAgIG1fZG9jdW1lbnQtPmRhdGFiYXNlVGhyZWFkKCktPnVuc2NoZWR1
bGVEYXRhYmFzZVRhc2tzKHRoaXMpOwogCi0gICAgUmVmUHRyPERhdGFiYXNlQ2xvc2VUYXNrPiB0
YXNrID0gRGF0YWJhc2VDbG9zZVRhc2s6OmNyZWF0ZSh0aGlzKTsKKyAgICBEYXRhYmFzZVRhc2tD
b21wbGV0aW9uTG9jayBsb2NrOworICAgIE93blB0cjxEYXRhYmFzZUNsb3NlVGFzaz4gdGFzayA9
IERhdGFiYXNlQ2xvc2VUYXNrOjpjcmVhdGUodGhpcywgJmxvY2spOwogCi0gICAgdGFzay0+bG9j
a0ZvclN5bmNocm9ub3VzU2NoZWR1bGluZygpOwotICAgIG1fZG9jdW1lbnQtPmRhdGFiYXNlVGhy
ZWFkKCktPnNjaGVkdWxlSW1tZWRpYXRlVGFzayh0YXNrKTsKLSAgICB0YXNrLT53YWl0Rm9yU3lu
Y2hyb25vdXNDb21wbGV0aW9uKCk7CisgICAgbV9kb2N1bWVudC0+ZGF0YWJhc2VUaHJlYWQoKS0+
c2NoZWR1bGVJbW1lZGlhdGVUYXNrKHRhc2sucmVsZWFzZSgpKTsKKyAgICBsb2NrLndhaXRGb3JU
YXNrQ29tcGxldGlvbigpOwogfQogCiB2b2lkIERhdGFiYXNlOjpjbG9zZSgpCkBAIC0zNjEsNyAr
MzYxLDcgQEAgdm9pZCBEYXRhYmFzZTo6c3RvcCgpCiAKICAgICB7CiAgICAgICAgIE11dGV4TG9j
a2VyIGxvY2tlcihtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzc011dGV4KTsKLSAgICAgICAgbV90cmFu
c2FjdGlvblF1ZXVlLmtpbGwoKTsKKyAgICAgICAgbV90ZXJtaW5hdGluZyA9IHRydWU7CiAgICAg
ICAgIG1fdHJhbnNhY3Rpb25JblByb2dyZXNzID0gZmFsc2U7CiAgICAgfQogfQpAQCAtNTQ0LDgg
KzU0NCwxMiBAQCB2b2lkIERhdGFiYXNlOjpzY2hlZHVsZVRyYW5zYWN0aW9uKCkKIHsKICAgICBB
U1NFUlQoIW1fdHJhbnNhY3Rpb25JblByb2dyZXNzTXV0ZXgudHJ5TG9jaygpKTsgLy8gTG9ja2Vk
IGJ5IGNhbGxlci4KICAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uOwotICAg
IGlmIChtX3RyYW5zYWN0aW9uUXVldWUudHJ5R2V0TWVzc2FnZSh0cmFuc2FjdGlvbikgJiYgbV9k
b2N1bWVudC0+ZGF0YWJhc2VUaHJlYWQoKSkgewotICAgICAgICBSZWZQdHI8RGF0YWJhc2VUcmFu
c2FjdGlvblRhc2s+IHRhc2sgPSBEYXRhYmFzZVRyYW5zYWN0aW9uVGFzazo6Y3JlYXRlKHRyYW5z
YWN0aW9uKTsKKyAgICBpZiAoIW1fdGVybWluYXRpbmcgJiYgIW1fdHJhbnNhY3Rpb25RdWV1ZS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9uUXVldWUuZmly
c3QoKTsKKyAgICAgICAgbV90cmFuc2FjdGlvblF1ZXVlLnJlbW92ZUZpcnN0KCk7CisgICAgfQor
ICAgIGlmICh0cmFuc2FjdGlvbiAmJiBtX2RvY3VtZW50LT5kYXRhYmFzZVRocmVhZCgpKSB7Cisg
ICAgICAgIE93blB0cjxEYXRhYmFzZVRyYW5zYWN0aW9uVGFzaz4gdGFzayA9IERhdGFiYXNlVHJh
bnNhY3Rpb25UYXNrOjpjcmVhdGUodHJhbnNhY3Rpb24pOwogICAgICAgICBMT0coU3RvcmFnZUFQ
SSwgIlNjaGVkdWxpbmcgRGF0YWJhc2VUcmFuc2FjdGlvblRhc2sgJXAgZm9yIHRyYW5zYWN0aW9u
ICVwXG4iLCB0YXNrLmdldCgpLCB0YXNrLT50cmFuc2FjdGlvbigpKTsKICAgICAgICAgbV90cmFu
c2FjdGlvbkluUHJvZ3Jlc3MgPSB0cnVlOwogICAgICAgICBtX2RvY3VtZW50LT5kYXRhYmFzZVRo
cmVhZCgpLT5zY2hlZHVsZVRhc2sodGFzay5yZWxlYXNlKCkpOwpAQCAtNTU4LDcgKzU2Miw3IEBA
IHZvaWQgRGF0YWJhc2U6OnNjaGVkdWxlVHJhbnNhY3Rpb25TdGVwKFNRTFRyYW5zYWN0aW9uKiB0
cmFuc2FjdGlvbiwgYm9vbCBpbW1lZGlhCiAgICAgaWYgKCFtX2RvY3VtZW50LT5kYXRhYmFzZVRo
cmVhZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8RGF0YWJhc2VUcmFuc2FjdGlv
blRhc2s+IHRhc2sgPSBEYXRhYmFzZVRyYW5zYWN0aW9uVGFzazo6Y3JlYXRlKHRyYW5zYWN0aW9u
KTsKKyAgICBPd25QdHI8RGF0YWJhc2VUcmFuc2FjdGlvblRhc2s+IHRhc2sgPSBEYXRhYmFzZVRy
YW5zYWN0aW9uVGFzazo6Y3JlYXRlKHRyYW5zYWN0aW9uKTsKICAgICBMT0coU3RvcmFnZUFQSSwg
IlNjaGVkdWxpbmcgRGF0YWJhc2VUcmFuc2FjdGlvblRhc2sgJXAgZm9yIHRoZSB0cmFuc2FjdGlv
biBzdGVwXG4iLCB0YXNrLmdldCgpKTsKICAgICBpZiAoaW1tZWRpYXRlbHkpCiAgICAgICAgIG1f
ZG9jdW1lbnQtPmRhdGFiYXNlVGhyZWFkKCktPnNjaGVkdWxlSW1tZWRpYXRlVGFzayh0YXNrLnJl
bGVhc2UoKSk7CkBAIC02MjgsMTUgKzYzMiwxOSBAQCB2b2lkIERhdGFiYXNlOjpkZWxpdmVyUGVu
ZGluZ0NhbGxiYWNrKHZvaWQqIGNvbnRleHQpCiAKIFZlY3RvcjxTdHJpbmc+IERhdGFiYXNlOjp0
YWJsZU5hbWVzKCkKIHsKKyAgICAvLyBGSVhNRTogTm90IHVzaW5nIHRocmVhZHNhZmVDb3B5IG9u
IHRoZXNlIHN0cmluZ3MgbG9va3Mgb2sgc2luY2UgdGhyZWFkcyB0YWtlIHN0cmljdCB0dXJucwor
ICAgIC8vIGluIGRlYWxpbmcgd2l0aCB0aGVtLiBIb3dldmVyLCBpZiB0aGUgY29kZSBjaGFuZ2Vz
LCB0aGlzIG1heSBub3QgYmUgdHJ1ZSBhbnltb3JlLgorICAgIFZlY3RvcjxTdHJpbmc+IHJlc3Vs
dDsKICAgICBpZiAoIW1fZG9jdW1lbnQtPmRhdGFiYXNlVGhyZWFkKCkpCi0gICAgICAgIHJldHVy
biBWZWN0b3I8U3RyaW5nPigpOwotICAgIFJlZlB0cjxEYXRhYmFzZVRhYmxlTmFtZXNUYXNrPiB0
YXNrID0gRGF0YWJhc2VUYWJsZU5hbWVzVGFzazo6Y3JlYXRlKHRoaXMpOworICAgICAgICByZXR1
cm4gcmVzdWx0OwogCi0gICAgdGFzay0+bG9ja0ZvclN5bmNocm9ub3VzU2NoZWR1bGluZygpOwot
ICAgIG1fZG9jdW1lbnQtPmRhdGFiYXNlVGhyZWFkKCktPnNjaGVkdWxlSW1tZWRpYXRlVGFzayh0
YXNrKTsKLSAgICB0YXNrLT53YWl0Rm9yU3luY2hyb25vdXNDb21wbGV0aW9uKCk7CisgICAgRGF0
YWJhc2VUYXNrQ29tcGxldGlvbkxvY2sgbG9jazsKKyAgICBPd25QdHI8RGF0YWJhc2VUYWJsZU5h
bWVzVGFzaz4gdGFzayA9IERhdGFiYXNlVGFibGVOYW1lc1Rhc2s6OmNyZWF0ZSh0aGlzLCAmbG9j
aywgcmVzdWx0KTsKIAotICAgIHJldHVybiB0YXNrLT50YWJsZU5hbWVzKCk7CisgICAgbV9kb2N1
bWVudC0+ZGF0YWJhc2VUaHJlYWQoKS0+c2NoZWR1bGVJbW1lZGlhdGVUYXNrKHRhc2sucmVsZWFz
ZSgpKTsKKyAgICBsb2NrLndhaXRGb3JUYXNrQ29tcGxldGlvbigpOworCisgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAogdm9pZCBEYXRhYmFzZTo6c2V0RXhwZWN0ZWRWZXJzaW9uKGNvbnN0IFN0cmlu
ZyYgdmVyc2lvbikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5oIGIvV2Vi
Q29yZS9zdG9yYWdlL0RhdGFiYXNlLmgKaW5kZXggYjg1MDY4Ni4uMDIxMWIwMCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmgKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0RhdGFi
YXNlLmgKQEAgLTMwLDcgKzMwLDYgQEAKICNkZWZpbmUgRGF0YWJhc2VfaAogCiAjaWYgRU5BQkxF
KERBVEFCQVNFKQotI2luY2x1ZGUgPHd0Zi9NZXNzYWdlUXVldWUuaD4KICNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU1FM
aXRlRGF0YWJhc2UuaCIKQEAgLTEyOSw5ICsxMjgsMTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNj
aGVkdWxlVHJhbnNhY3Rpb25DYWxsYmFjayhTUUxUcmFuc2FjdGlvbiopOwogICAgIHZvaWQgc2No
ZWR1bGVUcmFuc2FjdGlvblN0ZXAoU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBib29sIGlt
bWVkaWF0ZWx5ID0gZmFsc2UpOwogCi0gICAgTWVzc2FnZVF1ZXVlPFJlZlB0cjxTUUxUcmFuc2Fj
dGlvbj4gPiBtX3RyYW5zYWN0aW9uUXVldWU7CisgICAgRGVxdWU8UmVmUHRyPFNRTFRyYW5zYWN0
aW9uPiA+IG1fdHJhbnNhY3Rpb25RdWV1ZTsKICAgICBNdXRleCBtX3RyYW5zYWN0aW9uSW5Qcm9n
cmVzc011dGV4OwogICAgIGJvb2wgbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3M7CisgICAgYm9vbCBt
X3Rlcm1pbmF0aW5nOwogCiAgICAgc3RhdGljIHZvaWQgZGVsaXZlclBlbmRpbmdDYWxsYmFjayh2
b2lkKik7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRhc2suY3BwIGIv
V2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGFzay5jcHAKaW5kZXggNzU1ZGE3Yy4uYTA2ZTZkMSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGFzay5jcHAKKysrIGIvV2ViQ29y
ZS9zdG9yYWdlL0RhdGFiYXNlVGFzay5jcHAKQEAgLTM1LDkgKzM1LDEyIEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotRGF0YWJhc2VUYXNrOjpEYXRhYmFzZVRhc2soRGF0YWJhc2UqIGRhdGFi
YXNlKQorRGF0YWJhc2VUYXNrOjpEYXRhYmFzZVRhc2soRGF0YWJhc2UqIGRhdGFiYXNlLCBEYXRh
YmFzZVRhc2tDb21wbGV0aW9uTG9jayogbG9jaykKICAgICA6IG1fZGF0YWJhc2UoZGF0YWJhc2Up
CisgICAgLCBtX2NvbXBsZXRpb25Mb2NrKGxvY2spCisjaWZuZGVmIE5ERUJVRwogICAgICwgbV9j
b21wbGV0ZShmYWxzZSkKKyNlbmRpZgogewogfQogCkBAIC01NSw0MyArNTgsMTkgQEAgdm9pZCBE
YXRhYmFzZVRhc2s6OnBlcmZvcm1UYXNrKCkKICAgICBtX2RhdGFiYXNlLT5yZXNldEF1dGhvcml6
ZXIoKTsKICAgICBkb1BlcmZvcm1UYXNrKCk7CiAgICAgbV9kYXRhYmFzZS0+cGVyZm9ybVBvbGlj
eUNoZWNrcygpOwotCi0gICAgaWYgKG1fc3luY2hyb25vdXNNdXRleCkKLSAgICAgICAgbV9zeW5j
aHJvbm91c011dGV4LT5sb2NrKCk7Ci0KLSAgICBtX2NvbXBsZXRlID0gdHJ1ZTsKLQotICAgIGlm
IChtX3N5bmNocm9ub3VzTXV0ZXgpIHsKLSAgICAgICAgbV9zeW5jaHJvbm91c0NvbmRpdGlvbi0+
c2lnbmFsKCk7Ci0gICAgICAgIG1fc3luY2hyb25vdXNNdXRleC0+dW5sb2NrKCk7CisgICAgCisg
ICAgaWYgKG1fY29tcGxldGlvbkxvY2spIHsKKyAgICAgICAgbV9jb21wbGV0aW9uTG9jay0+dGFz
a0NvbXBsZXRlZCgpOwogICAgIH0KIH0KIAotdm9pZCBEYXRhYmFzZVRhc2s6OmxvY2tGb3JTeW5j
aHJvbm91c1NjaGVkdWxpbmcoKQotewotICAgIC8vIENhbGxlZCBmcm9tIG1haW4gdGhyZWFkLgot
ICAgIEFTU0VSVCghbV9zeW5jaHJvbm91c011dGV4KTsKLSAgICBBU1NFUlQoIW1fc3luY2hyb25v
dXNDb25kaXRpb24pOwotICAgIG1fc3luY2hyb25vdXNNdXRleC5zZXQobmV3IE11dGV4KTsKLSAg
ICBtX3N5bmNocm9ub3VzQ29uZGl0aW9uLnNldChuZXcgVGhyZWFkQ29uZGl0aW9uKTsKLX0KLQot
dm9pZCBEYXRhYmFzZVRhc2s6OndhaXRGb3JTeW5jaHJvbm91c0NvbXBsZXRpb24oKQotewotICAg
IC8vIENhbGxlZCBmcm9tIG1haW4gdGhyZWFkLgotICAgIG1fc3luY2hyb25vdXNNdXRleC0+bG9j
aygpOwotICAgIGlmICghbV9jb21wbGV0ZSkKLSAgICAgICAgbV9zeW5jaHJvbm91c0NvbmRpdGlv
bi0+d2FpdCgqbV9zeW5jaHJvbm91c011dGV4KTsKLSAgICBtX3N5bmNocm9ub3VzTXV0ZXgtPnVu
bG9jaygpOwotfQotCiAvLyAqKiogRGF0YWJhc2VPcGVuVGFzayAqKioKIC8vIE9wZW5zIHRoZSBk
YXRhYmFzZSBmaWxlIGFuZCB2ZXJpZmllcyB0aGUgdmVyc2lvbiBtYXRjaGVzIHRoZSBleHBlY3Rl
ZCB2ZXJzaW9uLgogCi1EYXRhYmFzZU9wZW5UYXNrOjpEYXRhYmFzZU9wZW5UYXNrKERhdGFiYXNl
KiBkYXRhYmFzZSkKLSAgICA6IERhdGFiYXNlVGFzayhkYXRhYmFzZSkKLSAgICAsIG1fY29kZSgw
KQotICAgICwgbV9zdWNjZXNzKGZhbHNlKQorRGF0YWJhc2VPcGVuVGFzazo6RGF0YWJhc2VPcGVu
VGFzayhEYXRhYmFzZSogZGF0YWJhc2UsIERhdGFiYXNlVGFza0NvbXBsZXRpb25Mb2NrKiBsb2Nr
LCBFeGNlcHRpb25Db2RlJiBjb2RlLCBib29sJiBzdWNjZXNzKQorICAgIDogRGF0YWJhc2VUYXNr
KGRhdGFiYXNlLCBsb2NrKQorICAgICwgbV9jb2RlKGNvZGUpCisgICAgLCBtX3N1Y2Nlc3Moc3Vj
Y2VzcykKIHsKIH0KIApAQCAtMTEwLDggKzg5LDggQEAgY29uc3QgY2hhciogRGF0YWJhc2VPcGVu
VGFzazo6ZGVidWdUYXNrTmFtZSgpIGNvbnN0CiAvLyAqKiogRGF0YWJhc2VDbG9zZVRhc2sgKioq
CiAvLyBDbG9zZXMgdGhlIGRhdGFiYXNlLgogCi1EYXRhYmFzZUNsb3NlVGFzazo6RGF0YWJhc2VD
bG9zZVRhc2soRGF0YWJhc2UqIGRhdGFiYXNlKQotICAgIDogRGF0YWJhc2VUYXNrKGRhdGFiYXNl
KQorRGF0YWJhc2VDbG9zZVRhc2s6OkRhdGFiYXNlQ2xvc2VUYXNrKERhdGFiYXNlKiBkYXRhYmFz
ZSwgRGF0YWJhc2VUYXNrQ29tcGxldGlvbkxvY2sqIGxvY2spCisgICAgOiBEYXRhYmFzZVRhc2so
ZGF0YWJhc2UsIGxvY2spCiB7CiB9CiAKQEAgLTEzMCw4ICsxMDksOCBAQCBjb25zdCBjaGFyKiBE
YXRhYmFzZUNsb3NlVGFzazo6ZGVidWdUYXNrTmFtZSgpIGNvbnN0CiAvLyAqKiogRGF0YWJhc2VU
cmFuc2FjdGlvblRhc2sgKioqCiAvLyBTdGFydHMgYSB0cmFuc2FjdGlvbiB0aGF0IHdpbGwgcmVw
b3J0IGl0cyByZXN1bHRzIHZpYSBhIGNhbGxiYWNrLgogCi1EYXRhYmFzZVRyYW5zYWN0aW9uVGFz
azo6RGF0YWJhc2VUcmFuc2FjdGlvblRhc2soUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbj4gdHJh
bnNhY3Rpb24pCi0gICAgOiBEYXRhYmFzZVRhc2sodHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkpCitE
YXRhYmFzZVRyYW5zYWN0aW9uVGFzazo6RGF0YWJhc2VUcmFuc2FjdGlvblRhc2soUGFzc1JlZlB0
cjxTUUxUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24sIERhdGFiYXNlVGFza0NvbXBsZXRpb25Mb2Nr
KiBsb2NrKQorICAgIDogRGF0YWJhc2VUYXNrKHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLCBsb2Nr
KQogICAgICwgbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKIHsKIH0KQEAgLTE1OSw4ICsxMzgs
OSBAQCBjb25zdCBjaGFyKiBEYXRhYmFzZVRyYW5zYWN0aW9uVGFzazo6ZGVidWdUYXNrTmFtZSgp
IGNvbnN0CiAvLyAqKiogRGF0YWJhc2VUYWJsZU5hbWVzVGFzayAqKioKIC8vIFJldHJpZXZlcyBh
IGxpc3Qgb2YgYWxsIHRhYmxlcyBpbiB0aGUgZGF0YWJhc2UgLSBmb3IgV2ViSW5zcGVjdG9yIHN1
cHBvcnQuCiAKLURhdGFiYXNlVGFibGVOYW1lc1Rhc2s6OkRhdGFiYXNlVGFibGVOYW1lc1Rhc2so
RGF0YWJhc2UqIGRhdGFiYXNlKQotICAgIDogRGF0YWJhc2VUYXNrKGRhdGFiYXNlKQorRGF0YWJh
c2VUYWJsZU5hbWVzVGFzazo6RGF0YWJhc2VUYWJsZU5hbWVzVGFzayhEYXRhYmFzZSogZGF0YWJh
c2UsIERhdGFiYXNlVGFza0NvbXBsZXRpb25Mb2NrKiBsb2NrLCBWZWN0b3I8U3RyaW5nPiYgbmFt
ZXMpCisgICAgOiBEYXRhYmFzZVRhc2soZGF0YWJhc2UsIGxvY2spCisgICAgLCBtX3RhYmxlTmFt
ZXMobmFtZXMpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRh
c2suaCBiL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRhc2suaAppbmRleCA0YWVmODkyLi5lY2Qw
YWUxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUYXNrLmgKKysrIGIvV2Vi
Q29yZS9zdG9yYWdlL0RhdGFiYXNlVGFzay5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSA8
d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgpAQCAtMzksMTMgKzQwLDQ2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIERhdGFiYXNlOworY2xhc3MgRGF0YWJhc2VUYXNrOwogY2xhc3MgRGF0YWJhc2VUaHJlYWQ7
CiBjbGFzcyBTUUxWYWx1ZTsKIGNsYXNzIFNRTENhbGxiYWNrOwogY2xhc3MgU1FMVHJhbnNhY3Rp
b247CiBjbGFzcyBWZXJzaW9uQ2hhbmdlQ2FsbGJhY2s7CiAKLWNsYXNzIERhdGFiYXNlVGFzayA6
IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPERhdGFiYXNlVGFzaz4geworLy8gQ2FuIGJlIHVzZWQg
dG8gd2FpdCB1bnRpbCBEYXRhYmFzZVRhc2sgaXMgY29tcGxldGVkLgorLy8gSGFzIHRvIGJlIHBh
c3NlZCBpbnRvIERhdGFiYXNlVGFzazo6Y3JlYXRlIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUg
dGFzay4KK2NsYXNzIERhdGFiYXNlVGFza0NvbXBsZXRpb25Mb2NrIDogcHVibGljIE5vbmNvcHlh
YmxlIHsKKyAgICBmcmllbmQgY2xhc3MgRGF0YWJhc2VUYXNrOworcHVibGljOgorICAgIERhdGFi
YXNlVGFza0NvbXBsZXRpb25Mb2NrKCkgOiBtX2NvbXBsZXRlKGZhbHNlKSB7CisgICAgICAgIG1f
c3luY2hyb25vdXNNdXRleC5zZXQobmV3IE11dGV4KTsKKyAgICAgICAgbV9zeW5jaHJvbm91c0Nv
bmRpdGlvbi5zZXQobmV3IFRocmVhZENvbmRpdGlvbik7CisgICAgfQorCisgICAgLy8gQ2FsbGVk
IGZyb20gbWFpbiB0aHJlYWQuCisgICAgdm9pZCB3YWl0Rm9yVGFza0NvbXBsZXRpb24oKSB7Cisg
ICAgICAgIG1fc3luY2hyb25vdXNNdXRleC0+bG9jaygpOworICAgICAgICBpZiAoIW1fY29tcGxl
dGUpCisgICAgICAgICAgICBtX3N5bmNocm9ub3VzQ29uZGl0aW9uLT53YWl0KCptX3N5bmNocm9u
b3VzTXV0ZXgpOworICAgICAgICBtX3N5bmNocm9ub3VzTXV0ZXgtPnVubG9jaygpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICAvLyBDYWxsZWQgYnkgdGhlIHRhc2suCisgICAgdm9pZCB0YXNrQ29t
cGxldGVkKCkgeworICAgICAgICBtX3N5bmNocm9ub3VzTXV0ZXgtPmxvY2soKTsKKyAgICAgICAg
bV9jb21wbGV0ZSA9IHRydWU7CisgICAgICAgIG1fc3luY2hyb25vdXNDb25kaXRpb24tPnNpZ25h
bCgpOworICAgICAgICBtX3N5bmNocm9ub3VzTXV0ZXgtPnVubG9jaygpOworICAgIH0KKworICAg
IGJvb2wgbV9jb21wbGV0ZTsKKyAgICBPd25QdHI8TXV0ZXg+IG1fc3luY2hyb25vdXNNdXRleDsK
KyAgICBPd25QdHI8VGhyZWFkQ29uZGl0aW9uPiBtX3N5bmNocm9ub3VzQ29uZGl0aW9uOworfTsK
KworY2xhc3MgRGF0YWJhc2VUYXNrIDogcHVibGljIE5vbmNvcHlhYmxlIHsKICAgICBmcmllbmQg
Y2xhc3MgRGF0YWJhc2U7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+RGF0YWJhc2VUYXNrKCk7CkBA
IC01Myw1MyArODcsNDkgQEAgcHVibGljOgogICAgIHZvaWQgcGVyZm9ybVRhc2soKTsKIAogICAg
IERhdGFiYXNlKiBkYXRhYmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2U7IH0KLSAgICBi
b29sIGlzQ29tcGxldGUoKSBjb25zdCB7IHJldHVybiBtX2NvbXBsZXRlOyB9CiAKIHByb3RlY3Rl
ZDoKLSAgICBEYXRhYmFzZVRhc2soRGF0YWJhc2UqKTsKKyAgICAvLyBEYXRhYmFzZVRhc2tDb21w
bGV0aW9uTG9jayBjb3VsZCBiZSBOVUxMIGlmIGNhbGxlciBkb2Ugc25vdCB3YW50IHRvIHdhaXQg
Zm9yIHN5bmNocm9ub3VzIGNvbXBsZXRpb24uCisgICAgRGF0YWJhc2VUYXNrKERhdGFiYXNlKiwg
RGF0YWJhc2VUYXNrQ29tcGxldGlvbkxvY2sqKTsKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZv
aWQgZG9QZXJmb3JtVGFzaygpID0gMDsKLSNpZm5kZWYgTkRFQlVHCi0gICAgdmlydHVhbCBjb25z
dCBjaGFyKiBkZWJ1Z1Rhc2tOYW1lKCkgY29uc3QgPSAwOwotI2VuZGlmCi0KLSAgICB2b2lkIGxv
Y2tGb3JTeW5jaHJvbm91c1NjaGVkdWxpbmcoKTsKLSAgICB2b2lkIHdhaXRGb3JTeW5jaHJvbm91
c0NvbXBsZXRpb24oKTsKIAogICAgIERhdGFiYXNlKiBtX2RhdGFiYXNlOworICAgIERhdGFiYXNl
VGFza0NvbXBsZXRpb25Mb2NrKiBtX2NvbXBsZXRpb25Mb2NrOwogCisjaWZuZGVmIE5ERUJVRwor
ICAgIHZpcnR1YWwgY29uc3QgY2hhciogZGVidWdUYXNrTmFtZSgpIGNvbnN0ID0gMDsKICAgICBi
b29sIG1fY29tcGxldGU7Ci0KLSAgICBPd25QdHI8TXV0ZXg+IG1fc3luY2hyb25vdXNNdXRleDsK
LSAgICBPd25QdHI8VGhyZWFkQ29uZGl0aW9uPiBtX3N5bmNocm9ub3VzQ29uZGl0aW9uOworI2Vu
ZGlmCiB9OwogCiBjbGFzcyBEYXRhYmFzZU9wZW5UYXNrIDogcHVibGljIERhdGFiYXNlVGFzayB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YWJhc2VPcGVuVGFzaz4gY3JlYXRl
KERhdGFiYXNlKiBkYikgeyByZXR1cm4gYWRvcHRSZWYobmV3IERhdGFiYXNlT3BlblRhc2soZGIp
KTsgfQotCi0gICAgRXhjZXB0aW9uQ29kZSBleGNlcHRpb25Db2RlKCkgY29uc3QgeyByZXR1cm4g
bV9jb2RlOyB9Ci0gICAgYm9vbCBvcGVuU3VjY2Vzc2Z1bCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Vj
Y2VzczsgfQorICAgIHN0YXRpYyBQYXNzT3duUHRyPERhdGFiYXNlT3BlblRhc2s+IGNyZWF0ZShE
YXRhYmFzZSogZGIsIERhdGFiYXNlVGFza0NvbXBsZXRpb25Mb2NrKiBsb2NrLCBFeGNlcHRpb25D
b2RlJiBjb2RlLCBib29sJiBzdWNjZXNzKSB7CisgICAgICAgIHJldHVybiBuZXcgRGF0YWJhc2VP
cGVuVGFzayhkYiwgbG9jaywgY29kZSwgc3VjY2Vzcyk7CisgICAgfQogCiBwcml2YXRlOgotICAg
IERhdGFiYXNlT3BlblRhc2soRGF0YWJhc2UqKTsKKyAgICBEYXRhYmFzZU9wZW5UYXNrKERhdGFi
YXNlKiwgRGF0YWJhc2VUYXNrQ29tcGxldGlvbkxvY2sqLCBFeGNlcHRpb25Db2RlJiwgYm9vbCYp
OwogCiAgICAgdmlydHVhbCB2b2lkIGRvUGVyZm9ybVRhc2soKTsKICNpZm5kZWYgTkRFQlVHCiAg
ICAgdmlydHVhbCBjb25zdCBjaGFyKiBkZWJ1Z1Rhc2tOYW1lKCkgY29uc3Q7CiAjZW5kaWYKIAot
ICAgIEV4Y2VwdGlvbkNvZGUgbV9jb2RlOwotICAgIGJvb2wgbV9zdWNjZXNzOworICAgIEV4Y2Vw
dGlvbkNvZGUmIG1fY29kZTsKKyAgICBib29sJiBtX3N1Y2Nlc3M7CiB9OwogCiBjbGFzcyBEYXRh
YmFzZUNsb3NlVGFzayA6IHB1YmxpYyBEYXRhYmFzZVRhc2sgewogcHVibGljOgotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPERhdGFiYXNlQ2xvc2VUYXNrPiBjcmVhdGUoRGF0YWJhc2UqIGRiKSB7IHJl
dHVybiBhZG9wdFJlZihuZXcgRGF0YWJhc2VDbG9zZVRhc2soZGIpKTsgfQorICAgIHN0YXRpYyBQ
YXNzT3duUHRyPERhdGFiYXNlQ2xvc2VUYXNrPiBjcmVhdGUoRGF0YWJhc2UqIGRiLCBEYXRhYmFz
ZVRhc2tDb21wbGV0aW9uTG9jayogbG9jaykgeworICAgICAgICByZXR1cm4gbmV3IERhdGFiYXNl
Q2xvc2VUYXNrKGRiLCBsb2NrKTsKKyAgICB9CiAKIHByaXZhdGU6Ci0gICAgRGF0YWJhc2VDbG9z
ZVRhc2soRGF0YWJhc2UqKTsKKyAgICBEYXRhYmFzZUNsb3NlVGFzayhEYXRhYmFzZSosIERhdGFi
YXNlVGFza0NvbXBsZXRpb25Mb2NrKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZG9QZXJmb3JtVGFz
aygpOwogI2lmbmRlZiBOREVCVUcKQEAgLTEwOSwxMyArMTM5LDE1IEBAIHByaXZhdGU6CiAKIGNs
YXNzIERhdGFiYXNlVHJhbnNhY3Rpb25UYXNrIDogcHVibGljIERhdGFiYXNlVGFzayB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YWJhc2VUcmFuc2FjdGlvblRhc2s+IGNyZWF0
ZShQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbikgeyByZXR1cm4gYWRvcHRS
ZWYobmV3IERhdGFiYXNlVHJhbnNhY3Rpb25UYXNrKHRyYW5zYWN0aW9uKSk7IH0KKyAgICBzdGF0
aWMgUGFzc093blB0cjxEYXRhYmFzZVRyYW5zYWN0aW9uVGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8
U1FMVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uKSB7CisgICAgICAgIHJldHVybiBuZXcgRGF0YWJh
c2VUcmFuc2FjdGlvblRhc2sodHJhbnNhY3Rpb24sIE5VTEwpOyAgLy8gVHJhbnNhY3Rpb24gdGFz
ayBpcyBuZXZlciBzeW5jaHJvbm91cywgc28gbm8gbG9jay4KKyAgICB9CiAKICAgICBTUUxUcmFu
c2FjdGlvbiogdHJhbnNhY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0aW9uLmdldCgp
OyB9CiAKICAgICB2aXJ0dWFsIH5EYXRhYmFzZVRyYW5zYWN0aW9uVGFzaygpOwogcHJpdmF0ZToK
LSAgICBEYXRhYmFzZVRyYW5zYWN0aW9uVGFzayhQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uPik7
CisgICAgRGF0YWJhc2VUcmFuc2FjdGlvblRhc2soUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbj4s
IERhdGFiYXNlVGFza0NvbXBsZXRpb25Mb2NrKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZG9QZXJm
b3JtVGFzaygpOwogI2lmbmRlZiBOREVCVUcKQEAgLTEyNywxOSArMTU5LDE5IEBAIHByaXZhdGU6
CiAKIGNsYXNzIERhdGFiYXNlVGFibGVOYW1lc1Rhc2sgOiBwdWJsaWMgRGF0YWJhc2VUYXNrIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhYmFzZVRhYmxlTmFtZXNUYXNrPiBj
cmVhdGUoRGF0YWJhc2UqIGRiKSB7IHJldHVybiBhZG9wdFJlZihuZXcgRGF0YWJhc2VUYWJsZU5h
bWVzVGFzayhkYikpOyB9Ci0KLSAgICBWZWN0b3I8U3RyaW5nPiYgdGFibGVOYW1lcygpIHsgcmV0
dXJuIG1fdGFibGVOYW1lczsgfQorICAgIHN0YXRpYyBQYXNzT3duUHRyPERhdGFiYXNlVGFibGVO
YW1lc1Rhc2s+IGNyZWF0ZShEYXRhYmFzZSogZGIsIERhdGFiYXNlVGFza0NvbXBsZXRpb25Mb2Nr
KiBsb2NrLCBWZWN0b3I8U3RyaW5nPiYgbmFtZXMpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBEYXRh
YmFzZVRhYmxlTmFtZXNUYXNrKGRiLCBsb2NrLCBuYW1lcyk7CisgICAgfQogCiBwcml2YXRlOgot
ICAgIERhdGFiYXNlVGFibGVOYW1lc1Rhc2soRGF0YWJhc2UqKTsKKyAgICBEYXRhYmFzZVRhYmxl
TmFtZXNUYXNrKERhdGFiYXNlKiwgRGF0YWJhc2VUYXNrQ29tcGxldGlvbkxvY2sqLCBWZWN0b3I8
U3RyaW5nPiYgbmFtZXMpOwogCiAgICAgdmlydHVhbCB2b2lkIGRvUGVyZm9ybVRhc2soKTsKICNp
Zm5kZWYgTkRFQlVHCiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBkZWJ1Z1Rhc2tOYW1lKCkgY29u
c3Q7CiAjZW5kaWYKIAotICAgIFZlY3RvcjxTdHJpbmc+IG1fdGFibGVOYW1lczsKKyAgICBWZWN0
b3I8U3RyaW5nPiYgbV90YWJsZU5hbWVzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmNwcCBiL1dlYkNvcmUv
c3RvcmFnZS9EYXRhYmFzZVRocmVhZC5jcHAKaW5kZXggOWUzYWZkZC4uZjI4MDQ1YSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmNwcAorKysgYi9XZWJDb3JlL3N0
b3JhZ2UvRGF0YWJhc2VUaHJlYWQuY3BwCkBAIC05MSwxMyArOTEsOCBAQCB2b2lkKiBEYXRhYmFz
ZVRocmVhZDo6ZGF0YWJhc2VUaHJlYWQoKQogICAgIH0KIAogICAgIEF1dG9kcmFpbmVkUG9vbCBw
b29sOwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIFJlZlB0cjxEYXRhYmFzZVRhc2s+IHRh
c2s7Ci0gICAgICAgIGlmICghbV9xdWV1ZS53YWl0Rm9yTWVzc2FnZSh0YXNrKSkKLSAgICAgICAg
ICAgIGJyZWFrOwotCisgICAgd2hpbGUgKE93blB0cjxEYXRhYmFzZVRhc2s+IHRhc2sgPSBtX3F1
ZXVlLndhaXRGb3JNZXNzYWdlKCkpIHsKICAgICAgICAgdGFzay0+cGVyZm9ybVRhc2soKTsKLQog
ICAgICAgICBwb29sLmN5Y2xlKCk7CiAgICAgfQogCkBAIC0xNDIsMzIgKzEzNywzMSBAQCB2b2lk
IERhdGFiYXNlVGhyZWFkOjpyZWNvcmREYXRhYmFzZUNsb3NlZChEYXRhYmFzZSogZGF0YWJhc2Up
CiAgICAgbV9vcGVuRGF0YWJhc2VTZXQucmVtb3ZlKGRhdGFiYXNlKTsKIH0KIAotdm9pZCBEYXRh
YmFzZVRocmVhZDo6c2NoZWR1bGVUYXNrKFBhc3NSZWZQdHI8RGF0YWJhc2VUYXNrPiB0YXNrKQor
dm9pZCBEYXRhYmFzZVRocmVhZDo6c2NoZWR1bGVUYXNrKFBhc3NPd25QdHI8RGF0YWJhc2VUYXNr
PiB0YXNrKQogewogICAgIG1fcXVldWUuYXBwZW5kKHRhc2spOwogfQogCi12b2lkIERhdGFiYXNl
VGhyZWFkOjpzY2hlZHVsZUltbWVkaWF0ZVRhc2soUGFzc1JlZlB0cjxEYXRhYmFzZVRhc2s+IHRh
c2spCit2b2lkIERhdGFiYXNlVGhyZWFkOjpzY2hlZHVsZUltbWVkaWF0ZVRhc2soUGFzc093blB0
cjxEYXRhYmFzZVRhc2s+IHRhc2spCiB7CiAgICAgbV9xdWV1ZS5wcmVwZW5kKHRhc2spOwogfQog
CitjbGFzcyBTYW1lRGF0YWJhc2VQcmVkaWNhdGUgeworcHVibGljOgorICAgIFNhbWVEYXRhYmFz
ZVByZWRpY2F0ZShjb25zdCBEYXRhYmFzZSogZGF0YWJhc2UpIDogbV9kYXRhYmFzZShkYXRhYmFz
ZSkgeyB9CisgICAgYm9vbCBvcGVyYXRvcigpKERhdGFiYXNlVGFzayogdGFzaykgY29uc3QgeyBy
ZXR1cm4gdGFzay0+ZGF0YWJhc2UoKSA9PSBtX2RhdGFiYXNlOyB9Citwcml2YXRlOgorICAgIGNv
bnN0IERhdGFiYXNlKiBtX2RhdGFiYXNlOworfTsKKwogdm9pZCBEYXRhYmFzZVRocmVhZDo6dW5z
Y2hlZHVsZURhdGFiYXNlVGFza3MoRGF0YWJhc2UqIGRhdGFiYXNlKQogewogICAgIC8vIE5vdGUg
dGhhdCB0aGUgdGhyZWFkIGxvb3AgaXMgcnVubmluZywgc28gc29tZSB0YXNrcyBmb3IgdGhlIGRh
dGFiYXNlCiAgICAgLy8gbWF5IHN0aWxsIGJlIGV4ZWN1dGVkLiBUaGlzIGlzIHVuYXZvaWRhYmxl
LgogCi0gICAgRGVxdWU8UmVmUHRyPERhdGFiYXNlVGFzaz4gPiBmaWx0ZXJlZFJldmVyc2VRdWV1
ZTsKLSAgICBSZWZQdHI8RGF0YWJhc2VUYXNrPiB0YXNrOwotICAgIHdoaWxlIChtX3F1ZXVlLnRy
eUdldE1lc3NhZ2UodGFzaykpIHsKLSAgICAgICAgaWYgKHRhc2stPmRhdGFiYXNlKCkgIT0gZGF0
YWJhc2UpCi0gICAgICAgICAgICBmaWx0ZXJlZFJldmVyc2VRdWV1ZS5hcHBlbmQodGFzayk7Ci0g
ICAgfQotCi0gICAgd2hpbGUgKCFmaWx0ZXJlZFJldmVyc2VRdWV1ZS5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgbV9xdWV1ZS5hcHBlbmQoZmlsdGVyZWRSZXZlcnNlUXVldWUuZmlyc3QoKSk7Ci0gICAg
ICAgIGZpbHRlcmVkUmV2ZXJzZVF1ZXVlLnJlbW92ZUZpcnN0KCk7Ci0gICAgfQorICAgIFNhbWVE
YXRhYmFzZVByZWRpY2F0ZSBwcmVkaWNhdGUoZGF0YWJhc2UpOworICAgIG1fcXVldWUucmVtb3Zl
V2l0aFByZWRpY2F0ZShwcmVkaWNhdGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuaCBiL1dlYkNvcmUvc3Rv
cmFnZS9EYXRhYmFzZVRocmVhZC5oCmluZGV4IDgzYjFiYWYuLjI2OWE2MzMgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRocmVhZC5oCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9E
YXRhYmFzZVRocmVhZC5oCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KICNpbmNsdWRlIDx3dGYvTWVzc2FnZVF1ZXVlLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgpA
QCAtNTUsOCArNTYsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXF1ZXN0VGVybWluYXRpb24oKTsK
ICAgICBib29sIHRlcm1pbmF0aW9uUmVxdWVzdGVkKCkgY29uc3Q7CiAKLSAgICB2b2lkIHNjaGVk
dWxlVGFzayhQYXNzUmVmUHRyPERhdGFiYXNlVGFzaz4pOwotICAgIHZvaWQgc2NoZWR1bGVJbW1l
ZGlhdGVUYXNrKFBhc3NSZWZQdHI8RGF0YWJhc2VUYXNrPik7IC8vIFRoaXMganVzdCBhZGRzIHRo
ZSB0YXNrIHRvIHRoZSBmcm9udCBvZiB0aGUgcXVldWUgLSB0aGUgY2FsbGVyIG5lZWRzIHRvIGJl
IGV4dHJlbWVseSBjYXJlZnVsIG5vdCB0byBjcmVhdGUgZGVhZGxvY2tzIHdoZW4gd2FpdGluZyBm
b3IgY29tcGxldGlvbi4KKyAgICB2b2lkIHNjaGVkdWxlVGFzayhQYXNzT3duUHRyPERhdGFiYXNl
VGFzaz4pOworICAgIHZvaWQgc2NoZWR1bGVJbW1lZGlhdGVUYXNrKFBhc3NPd25QdHI8RGF0YWJh
c2VUYXNrPik7IC8vIFRoaXMganVzdCBhZGRzIHRoZSB0YXNrIHRvIHRoZSBmcm9udCBvZiB0aGUg
cXVldWUgLSB0aGUgY2FsbGVyIG5lZWRzIHRvIGJlIGV4dHJlbWVseSBjYXJlZnVsIG5vdCB0byBj
cmVhdGUgZGVhZGxvY2tzIHdoZW4gd2FpdGluZyBmb3IgY29tcGxldGlvbi4KICAgICB2b2lkIHVu
c2NoZWR1bGVEYXRhYmFzZVRhc2tzKERhdGFiYXNlKik7CiAKICAgICB2b2lkIHJlY29yZERhdGFi
YXNlT3BlbihEYXRhYmFzZSopOwpAQCAtNzYsNyArNzcsNyBAQCBwcml2YXRlOgogICAgIFRocmVh
ZElkZW50aWZpZXIgbV90aHJlYWRJRDsKICAgICBSZWZQdHI8RGF0YWJhc2VUaHJlYWQ+IG1fc2Vs
ZlJlZjsKIAotICAgIE1lc3NhZ2VRdWV1ZTxSZWZQdHI8RGF0YWJhc2VUYXNrPiA+IG1fcXVldWU7
CisgICAgTWVzc2FnZVF1ZXVlPERhdGFiYXNlVGFzaz4gbV9xdWV1ZTsKIAogICAgIC8vIFRoaXMg
c2V0IGtlZXBzIHRyYWNrIG9mIHRoZSBvcGVuIGRhdGFiYXNlcyB0aGF0IGhhdmUgYmVlbiB1c2Vk
IG9uIHRoaXMgdGhyZWFkLgogICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8RGF0YWJhc2U+ID4g
RGF0YWJhc2VTZXQ7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGFz
ay5oIGIvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suaAppbmRleCBmMDNkODUxLi4z
MjU2ZGY3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5oCisr
KyBiL1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmgKQEAgLTI4LDggKzI4LDcgQEAK
IAogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKIAotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NCw5
ICs0Myw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB+TG9jYWxTdG9yYWdlVGFz
aygpOwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPExvY2FsU3RvcmFnZVRhc2s+IGNyZWF0
ZUltcG9ydChTdG9yYWdlQXJlYVN5bmMqIGFyZWEpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBMb2Nh
bFN0b3JhZ2VUYXNrKEFyZWFJbXBvcnQsIGFyZWEpKTsgfQotICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxMb2NhbFN0b3JhZ2VUYXNrPiBjcmVhdGVTeW5jKFN0b3JhZ2VBcmVhU3luYyogYXJlYSkg
eyByZXR1cm4gYWRvcHRSZWYobmV3IExvY2FsU3RvcmFnZVRhc2soQXJlYVN5bmMsIGFyZWEpKTsg
fQotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VUYXNrPiBjcmVhdGVUZXJt
aW5hdGUoTG9jYWxTdG9yYWdlVGhyZWFkKiB0aHJlYWQpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBM
b2NhbFN0b3JhZ2VUYXNrKFRlcm1pbmF0ZVRocmVhZCwgdGhyZWFkKSk7IH0KKyAgICAgICAgc3Rh
dGljIFBhc3NPd25QdHI8TG9jYWxTdG9yYWdlVGFzaz4gY3JlYXRlSW1wb3J0KFN0b3JhZ2VBcmVh
U3luYyogYXJlYSkgeyByZXR1cm4gbmV3IExvY2FsU3RvcmFnZVRhc2soQXJlYUltcG9ydCwgYXJl
YSk7IH0KKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8TG9jYWxTdG9yYWdlVGFzaz4gY3JlYXRl
U3luYyhTdG9yYWdlQXJlYVN5bmMqIGFyZWEpIHsgcmV0dXJuIG5ldyBMb2NhbFN0b3JhZ2VUYXNr
KEFyZWFTeW5jLCBhcmVhKTsgfQorICAgICAgICBzdGF0aWMgUGFzc093blB0cjxMb2NhbFN0b3Jh
Z2VUYXNrPiBjcmVhdGVUZXJtaW5hdGUoTG9jYWxTdG9yYWdlVGhyZWFkKiB0aHJlYWQpIHsgcmV0
dXJuIG5ldyBMb2NhbFN0b3JhZ2VUYXNrKFRlcm1pbmF0ZVRocmVhZCwgdGhyZWFkKTsgfQogCiAg
ICAgICAgIHZvaWQgcGVyZm9ybVRhc2soKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdl
L0xvY2FsU3RvcmFnZVRocmVhZC5jcHAgYi9XZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGhy
ZWFkLmNwcAppbmRleCA3ODY0MGE5Li5mMjQ0YTI5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3Jh
Z2UvTG9jYWxTdG9yYWdlVGhyZWFkLmNwcAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9y
YWdlVGhyZWFkLmNwcApAQCAtNjksOCArNjksOCBAQCB2b2lkKiBMb2NhbFN0b3JhZ2VUaHJlYWQ6
OmxvY2FsU3RvcmFnZVRocmVhZCgpCiAgICAgfQogCiAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAg
ICAgUmVmUHRyPExvY2FsU3RvcmFnZVRhc2s+IHRhc2s7Ci0gICAgICAgIGlmICghbV9xdWV1ZS53
YWl0Rm9yTWVzc2FnZSh0YXNrKSkKKyAgICAgICAgT3duUHRyPExvY2FsU3RvcmFnZVRhc2s+IHRh
c2sgPSBtX3F1ZXVlLndhaXRGb3JNZXNzYWdlKCk7CisgICAgICAgIGlmICghdGFzaykKICAgICAg
ICAgICAgIGJyZWFrOwogCiAgICAgICAgIHRhc2stPnBlcmZvcm1UYXNrKCk7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGhyZWFkLmggYi9XZWJDb3JlL3N0b3JhZ2Uv
TG9jYWxTdG9yYWdlVGhyZWFkLmgKaW5kZXggZTllMmI1OC4uNWNmY2MzYSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRocmVhZC5oCisrKyBiL1dlYkNvcmUvc3RvcmFn
ZS9Mb2NhbFN0b3JhZ2VUaHJlYWQuaApAQCAtNjMsNyArNjMsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJRDsKICAgICAgICAgUmVmUHRy
PExvY2FsU3RvcmFnZVRocmVhZD4gbV9zZWxmUmVmOwogCi0gICAgICAgIE1lc3NhZ2VRdWV1ZTxS
ZWZQdHI8TG9jYWxTdG9yYWdlVGFzaz4gPiBtX3F1ZXVlOworICAgICAgICBNZXNzYWdlUXVldWU8
TG9jYWxTdG9yYWdlVGFzaz4gbV9xdWV1ZTsKIAogICAgICAgICBNdXRleCBtX3Rlcm1pbmF0ZUxv
Y2s7CiAgICAgICAgIFRocmVhZENvbmRpdGlvbiBtX3Rlcm1pbmF0ZUNvbmRpdGlvbjsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwIGIvV2ViQ29yZS93ZWJzb2Nr
ZXRzL1dlYlNvY2tldC5jcHAKaW5kZXggZjNiYmRkNy4uMjRjYjNjNSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAKKysrIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dl
YlNvY2tldC5jcHAKQEAgLTUyLDkgKzUyLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
UHJvY2Vzc1dlYlNvY2tldEV2ZW50VGFzayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0
OjpUYXNrIHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIHZvaWQgKFdlYlNvY2tldDo6Kk1ldGhvZCko
RXZlbnQqKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxQcm9jZXNzV2ViU29ja2V0RXZlbnRUYXNr
PiBjcmVhdGUoUGFzc1JlZlB0cjxXZWJTb2NrZXQ+IHdlYlNvY2tldCwgUGFzc1JlZlB0cjxFdmVu
dD4gZXZlbnQpCisgICAgc3RhdGljIFBhc3NPd25QdHI8UHJvY2Vzc1dlYlNvY2tldEV2ZW50VGFz
az4gY3JlYXRlKFBhc3NSZWZQdHI8V2ViU29ja2V0PiB3ZWJTb2NrZXQsIFBhc3NSZWZQdHI8RXZl
bnQ+IGV2ZW50KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQcm9jZXNzV2Vi
U29ja2V0RXZlbnRUYXNrKHdlYlNvY2tldCwgZXZlbnQpKTsKKyAgICAgICAgcmV0dXJuIG5ldyBQ
cm9jZXNzV2ViU29ja2V0RXZlbnRUYXNrKHdlYlNvY2tldCwgZXZlbnQpOwogICAgIH0KICAgICB2
aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopCiAgICAgewpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL0RlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5
LmNwcCBiL1dlYkNvcmUvd29ya2Vycy9EZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeS5jcHAK
aW5kZXggOGIxYTQ4MC4uNjU1YjkwZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJzL0RlZmF1
bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5LmNwcAorKysgYi9XZWJDb3JlL3dvcmtlcnMvRGVmYXVs
dFNoYXJlZFdvcmtlclJlcG9zaXRvcnkuY3BwCkBAIC03Myw4ICs3Myw4IEBAIHB1YmxpYzoKICAg
ICBib29sIG1hdGNoZXMoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPiBvcmlnaW4sIGNvbnN0IEtVUkwmIHVybFRvTWF0Y2gpIGNvbnN0OwogCiAgICAgLy8gV29y
a2VyTG9hZGVyUHJveHkKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdFRhc2tUb0xvYWRlcihQYXNzUmVm
UHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+KTsKLSAgICB2aXJ0dWFsIHZvaWQgcG9z
dFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDo6VGFzaz4sIGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCBwb3N0VGFza1Rv
TG9hZGVyKFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4pOworICAgIHZp
cnR1YWwgdm9pZCBwb3N0VGFza0Zvck1vZGVUb1dvcmtlckNvbnRleHQoUGFzc093blB0cjxTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiwgY29uc3QgU3RyaW5nJik7CiAKICAgICAvLyBXb3Jr
ZXJSZXBvcnRpbmdQcm94eQogICAgIHZpcnR1YWwgdm9pZCBwb3N0RXhjZXB0aW9uVG9Xb3JrZXJP
YmplY3QoY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBjb25zdCBT
dHJpbmcmIHNvdXJjZVVSTCk7CkBAIC0xMjgsNyArMTI4LDcgQEAgYm9vbCBTaGFyZWRXb3JrZXJQ
cm94eTo6bWF0Y2hlcyhjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmln
aW4+IG8KICAgICByZXR1cm4gbmFtZSA9PSBtX25hbWU7CiB9CiAKLXZvaWQgU2hhcmVkV29ya2Vy
UHJveHk6OnBvc3RUYXNrVG9Mb2FkZXIoUGFzc1JlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0
OjpUYXNrPiB0YXNrKQordm9pZCBTaGFyZWRXb3JrZXJQcm94eTo6cG9zdFRhc2tUb0xvYWRlcihQ
YXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2spCiB7CiAgICAgTXV0
ZXhMb2NrZXIgbG9jayhtX3dvcmtlckRvY3VtZW50c0xvY2spOwogCkBAIC0xNDQsNyArMTQ0LDcg
QEAgdm9pZCBTaGFyZWRXb3JrZXJQcm94eTo6cG9zdFRhc2tUb0xvYWRlcihQYXNzUmVmUHRyPFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sKICAgICBkb2N1bWVudC0+cG9zdFRhc2sodGFzayk7
CiB9CiAKLXZvaWQgU2hhcmVkV29ya2VyUHJveHk6OnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29u
dGV4dChQYXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2ssIGNvbnN0
IFN0cmluZyYgbW9kZSkKK3ZvaWQgU2hhcmVkV29ya2VyUHJveHk6OnBvc3RUYXNrRm9yTW9kZVRv
V29ya2VyQ29udGV4dChQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRh
c2ssIGNvbnN0IFN0cmluZyYgbW9kZSkKIHsKICAgICBpZiAoaXNDbG9zaW5nKCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTIyMSw5ICsyMjEsOSBAQCB2b2lkIFNoYXJlZFdvcmtlclByb3h5OjpjbG9z
ZSgpCiAKIGNsYXNzIFNoYXJlZFdvcmtlckNvbm5lY3RUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ6OlRhc2sgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJl
ZFdvcmtlckNvbm5lY3RUYXNrPiBjcmVhdGUoUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWw+
IGNoYW5uZWwpCisgICAgc3RhdGljIFBhc3NPd25QdHI8U2hhcmVkV29ya2VyQ29ubmVjdFRhc2s+
IGNyZWF0ZShQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbD4gY2hhbm5lbCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVkV29ya2VyQ29ubmVjdFRhc2soY2hhbm5l
bCkpOworICAgICAgICByZXR1cm4gbmV3IFNoYXJlZFdvcmtlckNvbm5lY3RUYXNrKGNoYW5uZWwp
OwogICAgIH0KIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9HZW5lcmlj
V29ya2VyVGFzay5oIGIvV2ViQ29yZS93b3JrZXJzL0dlbmVyaWNXb3JrZXJUYXNrLmgKaW5kZXgg
ZDZhOTk5NC4uMjc2OTRjNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJzL0dlbmVyaWNXb3Jr
ZXJUYXNrLmgKKysrIGIvV2ViQ29yZS93b3JrZXJzL0dlbmVyaWNXb3JrZXJUYXNrLmgKQEAgLTcw
LDkgKzcwLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB0eXBlZGVmIEdlbmVyaWNX
b3JrZXJUYXNrMTxQMSwgTVAxPiBHZW5lcmljV29ya2VyVGFzazsKICAgICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBHZW5lcmljV29ya2VyVGFza1RyYWl0czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7CiAK
LSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8R2VuZXJpY1dvcmtlclRhc2s+IGNyZWF0ZShNZXRo
b2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSkKKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8
R2VuZXJpY1dvcmtlclRhc2s+IGNyZWF0ZShNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVy
MSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHZW5lcmljV29y
a2VyVGFzayhtZXRob2QsIHBhcmFtZXRlcjEpKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgR2Vu
ZXJpY1dvcmtlclRhc2sobWV0aG9kLCBwYXJhbWV0ZXIxKTsKICAgICAgICAgfQogCiAgICAgcHJp
dmF0ZToKQEAgLTEwMCw5ICsxMDAsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgR2VuZXJpY1dvcmtlclRhc2tUcmFpdHM8UDE+OjpQYXJhbVR5cGUgUGFy
YW0xOwogICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEdlbmVyaWNXb3JrZXJUYXNrVHJhaXRzPFAy
Pjo6UGFyYW1UeXBlIFBhcmFtMjsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxHZW5lcmlj
V29ya2VyVGFzaz4gY3JlYXRlKE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJh
bTIgcGFyYW1ldGVyMikKKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8R2VuZXJpY1dvcmtlclRh
c2s+IGNyZWF0ZShNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFt
ZXRlcjIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgR2VuZXJp
Y1dvcmtlclRhc2sobWV0aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyKSk7CisgICAgICAgICAg
ICByZXR1cm4gbmV3IEdlbmVyaWNXb3JrZXJUYXNrKG1ldGhvZCwgcGFyYW1ldGVyMSwgcGFyYW1l
dGVyMik7CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6CkBAIC0xMzMsOSArMTMzLDkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEdlbmVyaWNXb3JrZXJU
YXNrVHJhaXRzPFAyPjo6UGFyYW1UeXBlIFBhcmFtMjsKICAgICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBHZW5lcmljV29ya2VyVGFza1RyYWl0czxQMz46OlBhcmFtVHlwZSBQYXJhbTM7CiAKLSAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8R2VuZXJpY1dvcmtlclRhc2s+IGNyZWF0ZShNZXRob2QgbWV0
aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0
ZXIzKQorICAgICAgICBzdGF0aWMgUGFzc093blB0cjxHZW5lcmljV29ya2VyVGFzaz4gY3JlYXRl
KE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwgUGFy
YW0zIHBhcmFtZXRlcjMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgR2VuZXJpY1dvcmtlclRhc2sobWV0aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyLCBwYXJh
bWV0ZXIzKSk7CisgICAgICAgICAgICByZXR1cm4gbmV3IEdlbmVyaWNXb3JrZXJUYXNrKG1ldGhv
ZCwgcGFyYW1ldGVyMSwgcGFyYW1ldGVyMiwgcGFyYW1ldGVyMyk7CiAgICAgICAgIH0KIAogICAg
IHByaXZhdGU6CkBAIC0xNjksOSArMTY5LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICB0eXBlZGVmIHR5cGVuYW1lIEdlbmVyaWNXb3JrZXJUYXNrVHJhaXRzPFAzPjo6UGFyYW1UeXBl
IFBhcmFtMzsKICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBHZW5lcmljV29ya2VyVGFza1RyYWl0
czxQND46OlBhcmFtVHlwZSBQYXJhbTQ7CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8R2Vu
ZXJpY1dvcmtlclRhc2s+IGNyZWF0ZShNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwg
UGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCkK
KyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8R2VuZXJpY1dvcmtlclRhc2s+IGNyZWF0ZShNZXRo
b2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBw
YXJhbWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBHZW5lcmljV29ya2VyVGFzayhtZXRob2QsIHBhcmFtZXRlcjEsIHBh
cmFtZXRlcjIsIHBhcmFtZXRlcjMsIHBhcmFtZXRlcjQpKTsKKyAgICAgICAgICAgIHJldHVybiBu
ZXcgR2VuZXJpY1dvcmtlclRhc2sobWV0aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyLCBwYXJh
bWV0ZXIzLCBwYXJhbWV0ZXI0KTsKICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKQEAgLTIwOCw5
ICsyMDgsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
R2VuZXJpY1dvcmtlclRhc2tUcmFpdHM8UDQ+OjpQYXJhbVR5cGUgUGFyYW00OwogICAgICAgICB0
eXBlZGVmIHR5cGVuYW1lIEdlbmVyaWNXb3JrZXJUYXNrVHJhaXRzPFA1Pjo6UGFyYW1UeXBlIFBh
cmFtNTsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxHZW5lcmljV29ya2VyVGFzaz4gY3Jl
YXRlKE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwg
UGFyYW0zIHBhcmFtZXRlcjMsIFBhcmFtNCBwYXJhbWV0ZXI0LCBQYXJhbTUgcGFyYW1ldGVyNSkK
KyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8R2VuZXJpY1dvcmtlclRhc2s+IGNyZWF0ZShNZXRo
b2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBw
YXJhbWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCwgUGFyYW01IHBhcmFtZXRlcjUpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgR2VuZXJpY1dvcmtlclRhc2sobWV0
aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyLCBwYXJhbWV0ZXIzLCBwYXJhbWV0ZXI0LCBwYXJh
bWV0ZXI1KSk7CisgICAgICAgICAgICByZXR1cm4gbmV3IEdlbmVyaWNXb3JrZXJUYXNrKG1ldGhv
ZCwgcGFyYW1ldGVyMSwgcGFyYW1ldGVyMiwgcGFyYW1ldGVyMywgcGFyYW1ldGVyNCwgcGFyYW1l
dGVyNSk7CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6CkBAIC0yNTAsOSArMjUwLDkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEdlbmVyaWNXb3JrZXJU
YXNrVHJhaXRzPFA1Pjo6UGFyYW1UeXBlIFBhcmFtNTsKICAgICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBHZW5lcmljV29ya2VyVGFza1RyYWl0czxQNj46OlBhcmFtVHlwZSBQYXJhbTY7CiAKLSAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8R2VuZXJpY1dvcmtlclRhc2s+IGNyZWF0ZShNZXRob2QgbWV0
aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0
ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCwgUGFyYW01IHBhcmFtZXRlcjUsIFBhcmFtNiBwYXJhbWV0
ZXI2KQorICAgICAgICBzdGF0aWMgUGFzc093blB0cjxHZW5lcmljV29ya2VyVGFzaz4gY3JlYXRl
KE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwgUGFy
YW0zIHBhcmFtZXRlcjMsIFBhcmFtNCBwYXJhbWV0ZXI0LCBQYXJhbTUgcGFyYW1ldGVyNSwgUGFy
YW02IHBhcmFtZXRlcjYpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgR2VuZXJpY1dvcmtlclRhc2sobWV0aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyLCBwYXJh
bWV0ZXIzLCBwYXJhbWV0ZXI0LCBwYXJhbWV0ZXI1LCBwYXJhbWV0ZXI2KSk7CisgICAgICAgICAg
ICByZXR1cm4gbmV3IEdlbmVyaWNXb3JrZXJUYXNrKG1ldGhvZCwgcGFyYW1ldGVyMSwgcGFyYW1l
dGVyMiwgcGFyYW1ldGVyMywgcGFyYW1ldGVyNCwgcGFyYW1ldGVyNSwgcGFyYW1ldGVyNik7CiAg
ICAgICAgIH0KIAogICAgIHByaXZhdGU6CkBAIC0yOTUsOSArMjk1LDkgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEdlbmVyaWNXb3JrZXJUYXNrVHJhaXRz
PFA2Pjo6UGFyYW1UeXBlIFBhcmFtNjsKICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBHZW5lcmlj
V29ya2VyVGFza1RyYWl0czxQNz46OlBhcmFtVHlwZSBQYXJhbTc7CiAKLSAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8R2VuZXJpY1dvcmtlclRhc2s+IGNyZWF0ZShNZXRob2QgbWV0aG9kLCBQYXJh
bTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzLCBQYXJh
bTQgcGFyYW1ldGVyNCwgUGFyYW01IHBhcmFtZXRlcjUsIFBhcmFtNiBwYXJhbWV0ZXI2LCBQYXJh
bTcgcGFyYW1ldGVyNykKKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8R2VuZXJpY1dvcmtlclRh
c2s+IGNyZWF0ZShNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFt
ZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCwgUGFyYW01IHBhcmFt
ZXRlcjUsIFBhcmFtNiBwYXJhbWV0ZXI2LCBQYXJhbTcgcGFyYW1ldGVyNykKICAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHZW5lcmljV29ya2VyVGFzayhtZXRob2Qs
IHBhcmFtZXRlcjEsIHBhcmFtZXRlcjIsIHBhcmFtZXRlcjMsIHBhcmFtZXRlcjQsIHBhcmFtZXRl
cjUsIHBhcmFtZXRlcjYsIHBhcmFtZXRlcjcpKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgR2Vu
ZXJpY1dvcmtlclRhc2sobWV0aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyLCBwYXJhbWV0ZXIz
LCBwYXJhbWV0ZXI0LCBwYXJhbWV0ZXI1LCBwYXJhbWV0ZXI2LCBwYXJhbWV0ZXI3KTsKICAgICAg
ICAgfQogCiAgICAgcHJpdmF0ZToKQEAgLTM0Myw5ICszNDMsOSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgR2VuZXJpY1dvcmtlclRhc2tUcmFpdHM8UDc+
OjpQYXJhbVR5cGUgUGFyYW03OwogICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEdlbmVyaWNXb3Jr
ZXJUYXNrVHJhaXRzPFA4Pjo6UGFyYW1UeXBlIFBhcmFtODsKICAgICAgICAgCi0gICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNXb3JrZXJUYXNrPiBjcmVhdGUoTWV0aG9kIG1ldGhvZCwg
UGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMywg
UGFyYW00IHBhcmFtZXRlcjQsIFBhcmFtNSBwYXJhbWV0ZXI1LCBQYXJhbTYgcGFyYW1ldGVyNiwg
UGFyYW03IHBhcmFtZXRlcjcsIFBhcmFtOCBwYXJhbWV0ZXI4KQorICAgICAgICBzdGF0aWMgUGFz
c093blB0cjxHZW5lcmljV29ya2VyVGFzaz4gY3JlYXRlKE1ldGhvZCBtZXRob2QsIFBhcmFtMSBw
YXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwgUGFyYW0zIHBhcmFtZXRlcjMsIFBhcmFtNCBw
YXJhbWV0ZXI0LCBQYXJhbTUgcGFyYW1ldGVyNSwgUGFyYW02IHBhcmFtZXRlcjYsIFBhcmFtNyBw
YXJhbWV0ZXI3LCBQYXJhbTggcGFyYW1ldGVyOCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBHZW5lcmljV29ya2VyVGFzayhtZXRob2QsIHBhcmFtZXRlcjEsIHBh
cmFtZXRlcjIsIHBhcmFtZXRlcjMsIHBhcmFtZXRlcjQsIHBhcmFtZXRlcjUsIHBhcmFtZXRlcjYs
IHBhcmFtZXRlcjcsIHBhcmFtZXRlcjgpKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgR2VuZXJp
Y1dvcmtlclRhc2sobWV0aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyLCBwYXJhbWV0ZXIzLCBw
YXJhbWV0ZXI0LCBwYXJhbWV0ZXI1LCBwYXJhbWV0ZXI2LCBwYXJhbWV0ZXI3LCBwYXJhbWV0ZXI4
KTsKICAgICAgICAgfQogICAgICAgICAKICAgICBwcml2YXRlOgpAQCAtMzgwLDcgKzM4MCw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICB9OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUDEs
IHR5cGVuYW1lIE1QMT4KLSAgICBQYXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRh
c2s+IGNyZWF0ZUNhbGxiYWNrVGFzaygKKyAgICBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OlRhc2s+IGNyZWF0ZUNhbGxiYWNrVGFzaygKICAgICAgICAgdm9pZCAoKm1ldGhvZCko
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIE1QMSksCiAgICAgICAgIGNvbnN0IFAxJiBwYXJhbWV0
ZXIxKQogICAgIHsKQEAgLTM5MCw3ICszOTAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
fQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIs
IHR5cGVuYW1lIE1QMj4KLSAgICBQYXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRh
c2s+IGNyZWF0ZUNhbGxiYWNrVGFzaygKKyAgICBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OlRhc2s+IGNyZWF0ZUNhbGxiYWNrVGFzaygKICAgICAgICAgdm9pZCAoKm1ldGhvZCko
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIE1QMSwgTVAyKSwKICAgICAgICAgY29uc3QgUDEmIHBh
cmFtZXRlcjEsIGNvbnN0IFAyJiBwYXJhbWV0ZXIyKQogICAgIHsKQEAgLTQwMCw3ICs0MDAsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUDEs
IHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5
cGVuYW1lIE1QMz4KLSAgICBQYXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+
IGNyZWF0ZUNhbGxiYWNrVGFzaygKKyAgICBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ6OlRhc2s+IGNyZWF0ZUNhbGxiYWNrVGFzaygKICAgICAgICAgdm9pZCAoKm1ldGhvZCkoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIE1QMSwgTVAyLCBNUDMpLAogICAgICAgICBjb25zdCBQMSYg
cGFyYW1ldGVyMSwgY29uc3QgUDImIHBhcmFtZXRlcjIsIGNvbnN0IFAzJiBwYXJhbWV0ZXIzKQog
ICAgIHsKQEAgLTQxMSw3ICs0MTEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVu
YW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIE1QMywgdHlwZW5hbWUgUDQsIHR5cGVuYW1l
IE1QND4KLSAgICBQYXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGNyZWF0
ZUNhbGxiYWNrVGFzaygKKyAgICBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRh
c2s+IGNyZWF0ZUNhbGxiYWNrVGFzaygKICAgICAgICAgdm9pZCAoKm1ldGhvZCkoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIE1QMSwgTVAyLCBNUDMsIE1QNCksCiAgICAgICAgIGNvbnN0IFAxJiBw
YXJhbWV0ZXIxLCBjb25zdCBQMiYgcGFyYW1ldGVyMiwgY29uc3QgUDMmIHBhcmFtZXRlcjMsIGNv
bnN0IFA0JiBwYXJhbWV0ZXI0KQogICAgIHsKQEAgLTQyMyw3ICs0MjMsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1Q
MSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIE1QMywg
dHlwZW5hbWUgUDQsIHR5cGVuYW1lIE1QNCwgdHlwZW5hbWUgUDUsIHR5cGVuYW1lIE1QNT4KLSAg
ICBQYXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGNyZWF0ZUNhbGxiYWNr
VGFzaygKKyAgICBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGNyZWF0
ZUNhbGxiYWNrVGFzaygKICAgICAgICAgdm9pZCAoKm1ldGhvZCkoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIE1QMSwgTVAyLCBNUDMsIE1QNCwgTVA1KSwKICAgICAgICAgY29uc3QgUDEmIHBhcmFt
ZXRlcjEsIGNvbnN0IFAyJiBwYXJhbWV0ZXIyLCBjb25zdCBQMyYgcGFyYW1ldGVyMywgY29uc3Qg
UDQmIHBhcmFtZXRlcjQsIGNvbnN0IFA1JiBwYXJhbWV0ZXI1KQogICAgIHsKQEAgLTQzNiw3ICs0
MzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUg
UDMsIHR5cGVuYW1lIE1QMywgdHlwZW5hbWUgUDQsIHR5cGVuYW1lIE1QNCwgdHlwZW5hbWUgUDUs
IHR5cGVuYW1lIE1QNSwgdHlwZW5hbWUgUDYsIHR5cGVuYW1lIE1QNj4KLSAgICBQYXNzUmVmUHRy
PFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGNyZWF0ZUNhbGxiYWNrVGFzaygKKyAgICBQ
YXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGNyZWF0ZUNhbGxiYWNrVGFz
aygKICAgICAgICAgdm9pZCAoKm1ldGhvZCkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIE1QMSwg
TVAyLCBNUDMsIE1QNCwgTVA1LCBNUDYpLAogICAgICAgICBjb25zdCBQMSYgcGFyYW1ldGVyMSwg
Y29uc3QgUDImIHBhcmFtZXRlcjIsIGNvbnN0IFAzJiBwYXJhbWV0ZXIzLCBjb25zdCBQNCYgcGFy
YW1ldGVyNCwgY29uc3QgUDUmIHBhcmFtZXRlcjUsIGNvbnN0IFA2JiBwYXJhbWV0ZXI2KQogICAg
IHsKQEAgLTQ0OSw3ICs0NDksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgfQogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1l
IE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIE1QMywgdHlwZW5hbWUgUDQsIHR5cGVuYW1lIE1Q
NCwgdHlwZW5hbWUgUDUsIHR5cGVuYW1lIE1QNSwgdHlwZW5hbWUgUDYsIHR5cGVuYW1lIE1QNiwg
dHlwZW5hbWUgUDcsIHR5cGVuYW1lIE1QNz4KLSAgICBQYXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ6OlRhc2s+IGNyZWF0ZUNhbGxiYWNrVGFzaygKKyAgICBQYXNzT3duUHRyPFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGNyZWF0ZUNhbGxiYWNrVGFzaygKICAgICAgICAgdm9p
ZCAoKm1ldGhvZCkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIE1QMSwgTVAyLCBNUDMsIE1QNCwg
TVA1LCBNUDYsIE1QNyksCiAgICAgICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIxLCBjb25zdCBQMiYg
cGFyYW1ldGVyMiwgY29uc3QgUDMmIHBhcmFtZXRlcjMsIGNvbnN0IFA0JiBwYXJhbWV0ZXI0LCBj
b25zdCBQNSYgcGFyYW1ldGVyNSwgY29uc3QgUDYmIHBhcmFtZXRlcjYsIGNvbnN0IFA3JiBwYXJh
bWV0ZXI3KQogICAgIHsKQEAgLTQ2NCw3ICs0NjQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUg
UDIsIHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIE1QMywgdHlwZW5hbWUgUDQs
IHR5cGVuYW1lIE1QNCwgdHlwZW5hbWUgUDUsIHR5cGVuYW1lIE1QNSwgdHlwZW5hbWUgUDYsIHR5
cGVuYW1lIE1QNiwgdHlwZW5hbWUgUDcsIHR5cGVuYW1lIE1QNywgdHlwZW5hbWUgUDgsIHR5cGVu
YW1lIE1QOD4KLSAgICBQYXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGNy
ZWF0ZUNhbGxiYWNrVGFzaygKKyAgICBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6
OlRhc2s+IGNyZWF0ZUNhbGxiYWNrVGFzaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqbWV0aG9kKShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgTVAxLCBNUDIsIE1QMywgTVA0LCBNUDUsIE1QNiwgTVA3LCBNUDgp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIxLCBjb25zdCBQMiYgcGFyYW1ldGVyMiwgY29u
c3QgUDMmIHBhcmFtZXRlcjMsIGNvbnN0IFA0JiBwYXJhbWV0ZXI0LCBjb25zdCBQNSYgcGFyYW1l
dGVyNSwgY29uc3QgUDYmIHBhcmFtZXRlcjYsIGNvbnN0IFA3JiBwYXJhbWV0ZXI3LCBjb25zdCBQ
OCYgcGFyYW1ldGVyOCkKICAgICB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
Q29udGV4dC5jcHAgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAKaW5kZXggZjRk
Nzk1Yi4uZTM3ZTdiMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQu
Y3BwCisrKyBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcApAQCAtMTYxLDcgKzE2
MSw3IEBAIHZvaWQgV29ya2VyQ29udGV4dDo6c2NyaXB0SW1wb3J0ZWQodW5zaWduZWQgbG9uZywg
Y29uc3QgU3RyaW5nJikKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIFdvcmtlckNv
bnRleHQ6OnBvc3RUYXNrKFBhc3NSZWZQdHI8VGFzaz4gdGFzaykKK3ZvaWQgV29ya2VyQ29udGV4
dDo6cG9zdFRhc2soUGFzc093blB0cjxUYXNrPiB0YXNrKQogewogICAgIHRocmVhZCgpLT5ydW5M
b29wKCkucG9zdFRhc2sodGFzayk7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvV29y
a2VyQ29udGV4dC5oIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaAppbmRleCA5NzI1
Y2Y3Li5mMzdkNDJjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5o
CisrKyBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmgKQEAgLTc0LDcgKzc0LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVzb3VyY2VSZXRyaWV2
ZWRCeVhNTEh0dHBSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgU2NyaXB0
U3RyaW5nJiBzb3VyY2VTdHJpbmcpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc2NyaXB0SW1wb3J0
ZWQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVN0cmluZyk7
CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RUYXNrKFBhc3NSZWZQdHI8VGFzaz4pOyAvLyBF
eGVjdXRlcyB0aGUgdGFzayBvbiBjb250ZXh0J3MgdGhyZWFkIGFzeW5jaHJvbm91c2x5LgorICAg
ICAgICB2aXJ0dWFsIHZvaWQgcG9zdFRhc2soUGFzc093blB0cjxUYXNrPik7IC8vIEV4ZWN1dGVz
IHRoZSB0YXNrIG9uIGNvbnRleHQncyB0aHJlYWQgYXN5bmNocm9ub3VzbHkuCiAKICAgICAgICAg
Ly8gV29ya2VyR2xvYmFsU2NvcGUKICAgICAgICAgV29ya2VyQ29udGV4dCogc2VsZigpIHsgcmV0
dXJuIHRoaXM7IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJMb2FkZXJQcm94
eS5oIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlckxvYWRlclByb3h5LmgKaW5kZXggYWM3Y2RhMS4u
ZmUxYmY1MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlckxvYWRlclByb3h5LmgK
KysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlckxvYWRlclByb3h5LmgKQEAgLTM0LDcgKzM0LDcg
QEAKICNpZiBFTkFCTEUoV09SS0VSUykKIAogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3du
UHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTAsMTEgKzUwLDExIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB+V29ya2VyTG9hZGVyUHJveHkoKSB7IH0K
IAogICAgICAgICAvLyBQb3N0cyBhIHRhc2sgdG8gdGhlIHRocmVhZCB3aGljaCBydW5zIHRoZSBs
b2FkaW5nIGNvZGUgKG5vcm1hbGx5LCB0aGUgbWFpbiB0aHJlYWQpLgotICAgICAgICB2aXJ0dWFs
IHZvaWQgcG9zdFRhc2tUb0xvYWRlcihQYXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6
OlRhc2s+KSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0VGFza1RvTG9hZGVyKFBhc3NP
d25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4pID0gMDsKIAogICAgICAgICAvLyBQ
b3N0cyBjYWxsYmFja3MgZnJvbSBsb2FkaW5nIGNvZGUgdG8gdGhlIFdvcmtlckNvbnRleHQuIFRo
ZSAnbW9kZScgaXMgdXNlZCB0byBkaWZmZXJlbnRpYXRlCiAgICAgICAgIC8vIHNwZWNpZmljIHN5
bmNocm9ub3VzIGxvYWRpbmcgcmVxdWVzdHMgc28gdGhleSBjYW4gYmUgJ25lc3RlZCcsIHBlciBz
cGVjLgotICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0
KFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4sIGNvbnN0IFN0cmluZyYg
bW9kZSkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJD
b250ZXh0KFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4sIGNvbnN0IFN0
cmluZyYgbW9kZSkgPSAwOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAgYi9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwCmluZGV4IDBiNjY2OTQuLjJlMWRmZTAg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAKKysr
IGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcApAQCAtNDYsOSArNDYs
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIE1lc3NhZ2VXb3JrZXJDb250ZXh0VGFz
ayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxNZXNzYWdlV29ya2VyQ29udGV4dFRhc2s+IGNyZWF0ZShQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbWVzc2FnZSwgUGFzc093blB0cjxNZXNzYWdlUG9y
dENoYW5uZWxBcnJheT4gY2hhbm5lbHMpCisgICAgc3RhdGljIFBhc3NPd25QdHI8TWVzc2FnZVdv
cmtlckNvbnRleHRUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IG1lc3NhZ2UsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZXNzYWdlV29ya2VyQ29udGV4dFRh
c2sobWVzc2FnZSwgY2hhbm5lbHMpKTsKKyAgICAgICAgcmV0dXJuIG5ldyBNZXNzYWdlV29ya2Vy
Q29udGV4dFRhc2sobWVzc2FnZSwgY2hhbm5lbHMpOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTc0
LDkgKzc0LDkgQEAgcHJpdmF0ZToKIAogY2xhc3MgTWVzc2FnZVdvcmtlclRhc2sgOiBwdWJsaWMg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8TWVzc2FnZVdvcmtlclRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gbWVzc2FnZSwgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hh
bm5lbHMsIFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtZXNzYWdpbmdQcm94eSkKKyAgICBzdGF0aWMg
UGFzc093blB0cjxNZXNzYWdlV29ya2VyVGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBtZXNzYWdlLCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5
PiBjaGFubmVscywgV29ya2VyTWVzc2FnaW5nUHJveHkqIG1lc3NhZ2luZ1Byb3h5KQogICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZXNzYWdlV29ya2VyVGFzayhtZXNzYWdlLCBj
aGFubmVscywgbWVzc2FnaW5nUHJveHkpKTsKKyAgICAgICAgcmV0dXJuIG5ldyBNZXNzYWdlV29y
a2VyVGFzayhtZXNzYWdlLCBjaGFubmVscywgbWVzc2FnaW5nUHJveHkpOwogICAgIH0KIAogcHJp
dmF0ZToKQEAgLTEwNSw5ICsxMDUsOSBAQCBwcml2YXRlOgogCiBjbGFzcyBXb3JrZXJFeGNlcHRp
b25UYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewogcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdvcmtlckV4Y2VwdGlvblRhc2s+IGNyZWF0ZShjb25zdCBT
dHJpbmcmIGVycm9yTWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNl
VVJMLCBXb3JrZXJNZXNzYWdpbmdQcm94eSogbWVzc2FnaW5nUHJveHkpCisgICAgc3RhdGljIFBh
c3NPd25QdHI8V29ya2VyRXhjZXB0aW9uVGFzaz4gY3JlYXRlKGNvbnN0IFN0cmluZyYgZXJyb3JN
ZXNzYWdlLCBpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIFdvcmtlck1l
c3NhZ2luZ1Byb3h5KiBtZXNzYWdpbmdQcm94eSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgV29ya2VyRXhjZXB0aW9uVGFzayhlcnJvck1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNv
dXJjZVVSTCwgbWVzc2FnaW5nUHJveHkpKTsKKyAgICAgICAgcmV0dXJuIG5ldyBXb3JrZXJFeGNl
cHRpb25UYXNrKGVycm9yTWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlVVJMLCBtZXNzYWdpbmdQ
cm94eSk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtMTQxLDkgKzE0MSw5IEBAIHByaXZhdGU6CiAK
IGNsYXNzIFdvcmtlckNvbnRleHREZXN0cm95ZWRUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ6OlRhc2sgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdvcmtlckNv
bnRleHREZXN0cm95ZWRUYXNrPiBjcmVhdGUoV29ya2VyTWVzc2FnaW5nUHJveHkqIG1lc3NhZ2lu
Z1Byb3h5KQorICAgIHN0YXRpYyBQYXNzT3duUHRyPFdvcmtlckNvbnRleHREZXN0cm95ZWRUYXNr
PiBjcmVhdGUoV29ya2VyTWVzc2FnaW5nUHJveHkqIG1lc3NhZ2luZ1Byb3h5KQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXb3JrZXJDb250ZXh0RGVzdHJveWVkVGFzayhtZXNz
YWdpbmdQcm94eSkpOworICAgICAgICByZXR1cm4gbmV3IFdvcmtlckNvbnRleHREZXN0cm95ZWRU
YXNrKG1lc3NhZ2luZ1Byb3h5KTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0xNjIsOSArMTYyLDkg
QEAgcHJpdmF0ZToKIAogY2xhc3MgV29ya2VyVGVybWluYXRlVGFzayA6IHB1YmxpYyBTY3JpcHRF
eGVjdXRpb25Db250ZXh0OjpUYXNrIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxX
b3JrZXJUZXJtaW5hdGVUYXNrPiBjcmVhdGUoV29ya2VyTWVzc2FnaW5nUHJveHkqIG1lc3NhZ2lu
Z1Byb3h5KQorICAgIHN0YXRpYyBQYXNzT3duUHRyPFdvcmtlclRlcm1pbmF0ZVRhc2s+IGNyZWF0
ZShXb3JrZXJNZXNzYWdpbmdQcm94eSogbWVzc2FnaW5nUHJveHkpCiAgICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFdvcmtlclRlcm1pbmF0ZVRhc2sobWVzc2FnaW5nUHJveHkpKTsK
KyAgICAgICAgcmV0dXJuIG5ldyBXb3JrZXJUZXJtaW5hdGVUYXNrKG1lc3NhZ2luZ1Byb3h5KTsK
ICAgICB9CiAKIHByaXZhdGU6CkBAIC0xODMsOSArMTgzLDkgQEAgcHJpdmF0ZToKIAogY2xhc3Mg
V29ya2VyVGhyZWFkQWN0aXZpdHlSZXBvcnRUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OlRhc2sgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdvcmtlclRocmVh
ZEFjdGl2aXR5UmVwb3J0VGFzaz4gY3JlYXRlKFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtZXNzYWdp
bmdQcm94eSwgYm9vbCBjb25maXJtaW5nTWVzc2FnZSwgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkp
CisgICAgc3RhdGljIFBhc3NPd25QdHI8V29ya2VyVGhyZWFkQWN0aXZpdHlSZXBvcnRUYXNrPiBj
cmVhdGUoV29ya2VyTWVzc2FnaW5nUHJveHkqIG1lc3NhZ2luZ1Byb3h5LCBib29sIGNvbmZpcm1p
bmdNZXNzYWdlLCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSkKICAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgV29ya2VyVGhyZWFkQWN0aXZpdHlSZXBvcnRUYXNrKG1lc3NhZ2luZ1By
b3h5LCBjb25maXJtaW5nTWVzc2FnZSwgaGFzUGVuZGluZ0FjdGl2aXR5KSk7CisgICAgICAgIHJl
dHVybiBuZXcgV29ya2VyVGhyZWFkQWN0aXZpdHlSZXBvcnRUYXNrKG1lc3NhZ2luZ1Byb3h5LCBj
b25maXJtaW5nTWVzc2FnZSwgaGFzUGVuZGluZ0FjdGl2aXR5KTsKICAgICB9CiAKIHByaXZhdGU6
CkBAIC0yNTcsNyArMjU3LDcgQEAgdm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6cG9zdE1lc3Nh
Z2VUb1dvcmtlckNvbnRleHQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXAKICAgICAgICAgbV9x
dWV1ZWRFYXJseVRhc2tzLmFwcGVuZChNZXNzYWdlV29ya2VyQ29udGV4dFRhc2s6OmNyZWF0ZSht
ZXNzYWdlLCBjaGFubmVscy5yZWxlYXNlKCkpKTsKIH0KIAotdm9pZCBXb3JrZXJNZXNzYWdpbmdQ
cm94eTo6cG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KFBhc3NSZWZQdHI8U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaywgY29uc3QgU3RyaW5nJiBtb2RlKQordm9pZCBXb3Jr
ZXJNZXNzYWdpbmdQcm94eTo6cG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KFBhc3NPd25Q
dHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaywgY29uc3QgU3RyaW5nJiBtb2Rl
KQogewogICAgIGlmIChtX2Fza2VkVG9UZXJtaW5hdGUpCiAgICAgICAgIHJldHVybjsKQEAgLTI2
Niw3ICsyNjYsNyBAQCB2b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojpwb3N0VGFza0Zvck1vZGVU
b1dvcmtlckNvbnRleHQoUGFzc1JlZlB0cjxTY3JpcHRFeGVjdQogICAgIG1fd29ya2VyVGhyZWFk
LT5ydW5Mb29wKCkucG9zdFRhc2tGb3JNb2RlKHRhc2ssIG1vZGUpOwogfQogCi12b2lkIFdvcmtl
ck1lc3NhZ2luZ1Byb3h5Ojpwb3N0VGFza1RvTG9hZGVyKFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6VGFzaz4gdGFzaykKK3ZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6OnBvc3RU
YXNrVG9Mb2FkZXIoUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNr
KQogewogICAgIC8vIEZJWE1FOiBJbiBjYXNlIG9mIG5lc3RlZCB3b3JrZXJzLCB0aGlzIHNob3Vs
ZCBnbyBkaXJlY3RseSB0byB0aGUgcm9vdCBEb2N1bWVudCBjb250ZXh0LgogICAgIEFTU0VSVCht
X3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzRG9jdW1lbnQoKSk7CkBAIC0zMDQsNyArMzA0LDcg
QEAgdm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6d29ya2VyVGhyZWFkQ3JlYXRlZChQYXNzUmVm
UHRyPERlZGljYXRlZFdvcmtlclRocmVhZD4KICAgICAgICAgbV93b3JrZXJUaHJlYWRIYWRQZW5k
aW5nQWN0aXZpdHkgPSB0cnVlOyAvLyBXb3JrZXIgaW5pdGlhbGl6YXRpb24gbWVhbnMgYSBwZW5k
aW5nIGFjdGl2aXR5LgogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YXNrQ291
bnQ7ICsraSkKLSAgICAgICAgICAgIG1fd29ya2VyVGhyZWFkLT5ydW5Mb29wKCkucG9zdFRhc2so
bV9xdWV1ZWRFYXJseVRhc2tzW2ldKTsKKyAgICAgICAgICAgIG1fd29ya2VyVGhyZWFkLT5ydW5M
b29wKCkucG9zdFRhc2sobV9xdWV1ZWRFYXJseVRhc2tzW2ldLnJlbGVhc2UoKSk7CiAgICAgICAg
IG1fcXVldWVkRWFybHlUYXNrcy5jbGVhcigpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5oIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtl
ck1lc3NhZ2luZ1Byb3h5LmgKaW5kZXggNzU0MTAyYS4uOTBiODdmNCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmgKKysrIGIvV2ViQ29yZS93b3JrZXJz
L1dvcmtlck1lc3NhZ2luZ1Byb3h5LmgKQEAgLTcxLDggKzcxLDggQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICAvLyBJbXBsZW1lbnRhdGlvbiBvZiBXb3JrZXJMb2FkZXJQcm94eS4KICAg
ICAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIG9uIGRpZmZlcmVudCB0aHJlYWRzIHRv
IHNjaGVkdWxlIGxvYWRpbmcKICAgICAgICAgLy8gcmVxdWVzdHMgYW5kIHRvIHNlbmQgY2FsbGJh
Y2tzIGJhY2sgdG8gV29ya2VyQ29udGV4dC4KLSAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RUYXNr
VG9Mb2FkZXIoUGFzc1JlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPik7Ci0gICAg
ICAgIHZpcnR1YWwgdm9pZCBwb3N0VGFza0Zvck1vZGVUb1dvcmtlckNvbnRleHQoUGFzc1JlZlB0
cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHBvc3RUYXNrVG9Mb2FkZXIoUGFzc093blB0cjxTY3JpcHRFeGVj
dXRpb25Db250ZXh0OjpUYXNrPik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0VGFza0Zvck1v
ZGVUb1dvcmtlckNvbnRleHQoUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNr
PiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKIAogICAgICAgICB2b2lkIHdvcmtlclRocmVhZENyZWF0
ZWQoUGFzc1JlZlB0cjxEZWRpY2F0ZWRXb3JrZXJUaHJlYWQ+KTsKIApAQCAtMTAwLDcgKzEwMCw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBib29sIG1fYXNrZWRUb1Rlcm1pbmF0
ZTsKIAotICAgICAgICBWZWN0b3I8UmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+
ID4gbV9xdWV1ZWRFYXJseVRhc2tzOyAvLyBUYXNrcyBhcmUgcXVldWVkIGhlcmUgdW50aWwgdGhl
cmUncyBhIHRocmVhZCBvYmplY3QgY3JlYXRlZC4KKyAgICAgICAgVmVjdG9yPE93blB0cjxTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiA+IG1fcXVldWVkRWFybHlUYXNrczsgLy8gVGFza3Mg
YXJlIHF1ZXVlZCBoZXJlIHVudGlsIHRoZXJlJ3MgYSB0aHJlYWQgb2JqZWN0IGNyZWF0ZWQuCiAg
ICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlclJ1bkxvb3AuY3BwIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlclJ1bkxvb3AuY3Bw
CmluZGV4IDM5YjIxYzYuLjVlOTAzNzYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJSdW5Mb29wLmNwcAorKysgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyUnVuTG9vcC5jcHAKQEAg
LTY0LDI3ICs2NCw2IEBAIHByaXZhdGU6CiAgICAgZG91YmxlIG1fbmV4dEZpcmVUaW1lOwogfTsK
IAotY2xhc3MgV29ya2VyUnVuTG9vcDo6VGFzayA6IHB1YmxpYyBSZWZDb3VudGVkPFRhc2s+IHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrLCBjb25zdCBTdHJpbmcmIG1vZGUpCi0g
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRhc2sodGFzaywgbW9kZSkpOwotICAg
IH0KLQotICAgIGNvbnN0IFN0cmluZyYgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQot
ICAgIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkgeyBt
X3Rhc2stPnBlcmZvcm1UYXNrKGNvbnRleHQpOyB9Ci0KLXByaXZhdGU6Ci0gICAgVGFzayhQYXNz
UmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2ssIGNvbnN0IFN0cmluZyYg
bW9kZSkKLSAgICAgICAgOiBtX3Rhc2sodGFzaykKLSAgICAgICAgLCBtX21vZGUobW9kZS5jcm9z
c1RocmVhZFN0cmluZygpKQotICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8U2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6VGFzaz4gbV90YXNrOwotICAgIFN0cmluZyBtX21vZGU7Ci19OwotCiBjbGFz
cyBNb2RlUHJlZGljYXRlIHsKIHB1YmxpYzoKICAgICBNb2RlUHJlZGljYXRlKGNvbnN0IFN0cmlu
ZyYgbW9kZSkKQEAgLTk4LDcgKzc3LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9kZWZh
dWx0TW9kZTsKICAgICB9CiAKLSAgICBib29sIG9wZXJhdG9yKCkoUGFzc1JlZlB0cjxXb3JrZXJS
dW5Mb29wOjpUYXNrPiB0YXNrKSBjb25zdAorICAgIGJvb2wgb3BlcmF0b3IoKShXb3JrZXJSdW5M
b29wOjpUYXNrKiB0YXNrKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fZGVmYXVsdE1v
ZGUgfHwgbV9tb2RlID09IHRhc2stPm1vZGUoKTsKICAgICB9CkBAIC0xNjksOSArMTQ4LDkgQEAg
TWVzc2FnZVF1ZXVlV2FpdFJlc3VsdCBXb3JrZXJSdW5Mb29wOjpydW5Jbk1vZGUoV29ya2VyQ29u
dGV4dCogY29udGV4dCwgY29uc3QgTW8KICAgICBBU1NFUlQoY29udGV4dC0+dGhyZWFkKCkpOwog
ICAgIEFTU0VSVChjb250ZXh0LT50aHJlYWQoKS0+dGhyZWFkSUQoKSA9PSBjdXJyZW50VGhyZWFk
KCkpOwogCi0gICAgZG91YmxlIGFic29sdXRlVGltZSA9IChwcmVkaWNhdGUuaXNEZWZhdWx0TW9k
ZSgpICYmIG1fc2hhcmVkVGltZXItPmlzQWN0aXZlKCkpID8gbV9zaGFyZWRUaW1lci0+ZmlyZVRp
bWUoKSA6IE1lc3NhZ2VRdWV1ZTxSZWZQdHI8VGFzaz4gPjo6aW5maW5pdGVUaW1lKCk7Ci0gICAg
UmVmUHRyPFRhc2s+IHRhc2s7Ci0gICAgTWVzc2FnZVF1ZXVlV2FpdFJlc3VsdCByZXN1bHQgPSBt
X21lc3NhZ2VRdWV1ZS53YWl0Rm9yTWVzc2FnZUZpbHRlcmVkV2l0aFRpbWVvdXQodGFzaywgcHJl
ZGljYXRlLCBhYnNvbHV0ZVRpbWUpOworICAgIGRvdWJsZSBhYnNvbHV0ZVRpbWUgPSAocHJlZGlj
YXRlLmlzRGVmYXVsdE1vZGUoKSAmJiBtX3NoYXJlZFRpbWVyLT5pc0FjdGl2ZSgpKSA/IG1fc2hh
cmVkVGltZXItPmZpcmVUaW1lKCkgOiBNZXNzYWdlUXVldWU8VGFzaz46OmluZmluaXRlVGltZSgp
OworICAgIE1lc3NhZ2VRdWV1ZVdhaXRSZXN1bHQgcmVzdWx0OworICAgIE93blB0cjxXb3JrZXJS
dW5Mb29wOjpUYXNrPiB0YXNrID0gbV9tZXNzYWdlUXVldWUud2FpdEZvck1lc3NhZ2VGaWx0ZXJl
ZFdpdGhUaW1lb3V0KHJlc3VsdCwgcHJlZGljYXRlLCBhYnNvbHV0ZVRpbWUpOwogCiAgICAgLy8g
SWYgdGhlIGNvbnRleHQgaXMgY2xvc2luZywgZG9uJ3QgZGlzcGF0Y2ggYW55IGZ1cnRoZXIgdGFz
a3MgKHBlciBzZWN0aW9uIDQuMS4xIG9mIHRoZSBXZWIgV29ya2VycyBzcGVjKS4KICAgICBpZiAo
Y29udGV4dC0+aXNDbG9zaW5nKCkpCkBAIC0xOTgsMTYgKzE3NywzMCBAQCB2b2lkIFdvcmtlclJ1
bkxvb3A6OnRlcm1pbmF0ZSgpCiAgICAgbV9tZXNzYWdlUXVldWUua2lsbCgpOwogfQogCi12b2lk
IFdvcmtlclJ1bkxvb3A6OnBvc3RUYXNrKFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4
dDo6VGFzaz4gdGFzaykKK3ZvaWQgV29ya2VyUnVuTG9vcDo6cG9zdFRhc2soUGFzc093blB0cjxT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrKQogewogICAgIHBvc3RUYXNrRm9yTW9k
ZSh0YXNrLCBkZWZhdWx0TW9kZSgpKTsKIH0KIAotdm9pZCBXb3JrZXJSdW5Mb29wOjpwb3N0VGFz
a0Zvck1vZGUoUGFzc1JlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrLCBj
b25zdCBTdHJpbmcmIG1vZGUpCit2b2lkIFdvcmtlclJ1bkxvb3A6OnBvc3RUYXNrRm9yTW9kZShQ
YXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2ssIGNvbnN0IFN0cmlu
ZyYgbW9kZSkKIHsKICAgICBtX21lc3NhZ2VRdWV1ZS5hcHBlbmQoVGFzazo6Y3JlYXRlKHRhc2ss
IG1vZGUuY3Jvc3NUaHJlYWRTdHJpbmcoKSkpOwogfQogCitQYXNzT3duUHRyPFdvcmtlclJ1bkxv
b3A6OlRhc2s+IFdvcmtlclJ1bkxvb3A6OlRhc2s6OmNyZWF0ZShQYXNzT3duUHRyPFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2ssIGNvbnN0IFN0cmluZyYgbW9kZSkKK3sKKyAgICBy
ZXR1cm4gbmV3IFRhc2sodGFzaywgbW9kZSk7Cit9CisKK3ZvaWQgV29ya2VyUnVuTG9vcDo6VGFz
azo6cGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkgeyBtX3Rhc2st
PnBlcmZvcm1UYXNrKGNvbnRleHQpOyB9CisKK1dvcmtlclJ1bkxvb3A6OlRhc2s6OlRhc2soUGFz
c093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrLCBjb25zdCBTdHJpbmcm
IG1vZGUpCisgICAgOiBtX3Rhc2sodGFzaykKKyAgICAsIG1fbW9kZShtb2RlLmNyb3NzVGhyZWFk
U3RyaW5nKCkpCit7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8g
RU5BQkxFKFdPUktFUlMpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyUnVuTG9v
cC5oIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlclJ1bkxvb3AuaAppbmRleCA1Zjc0ZjAxLi40Mjli
Mjc5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyUnVuTG9vcC5oCisrKyBiL1dl
YkNvcmUvd29ya2Vycy9Xb3JrZXJSdW5Mb29wLmgKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRl
ICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSA8d3RmL01lc3NhZ2VRdWV1ZS5o
PgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
NTgsMTggKzU4LDMyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCB0ZXJtaW5h
dGUoKTsKICAgICAgICAgYm9vbCB0ZXJtaW5hdGVkKCkgeyByZXR1cm4gbV9tZXNzYWdlUXVldWUu
a2lsbGVkKCk7IH0KIAotICAgICAgICB2b2lkIHBvc3RUYXNrKFBhc3NSZWZQdHI8U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6VGFzaz4pOwotICAgICAgICB2b2lkIHBvc3RUYXNrRm9yTW9kZShQYXNz
UmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+LCBjb25zdCBTdHJpbmcmIG1vZGUp
OworICAgICAgICB2b2lkIHBvc3RUYXNrKFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4
dDo6VGFzaz4pOworICAgICAgICB2b2lkIHBvc3RUYXNrRm9yTW9kZShQYXNzT3duUHRyPFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+LCBjb25zdCBTdHJpbmcmIG1vZGUpOwogCiAgICAgICAg
IHVuc2lnbmVkIGxvbmcgY3JlYXRlVW5pcXVlSWQoKSB7IHJldHVybiArK21fdW5pcXVlSWQ7IH0K
IAogICAgICAgICBzdGF0aWMgU3RyaW5nIGRlZmF1bHRNb2RlKCk7Ci0gICAgICAgIGNsYXNzIFRh
c2s7CisKKyAgICAgICAgY2xhc3MgVGFzayB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAg
IHN0YXRpYyBQYXNzT3duUHRyPFRhc2s+IGNyZWF0ZShQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ6OlRhc2s+IHRhc2ssIGNvbnN0IFN0cmluZyYgbW9kZSk7CisgICAgICAgICAgICB+
VGFzaygpIHsgfQorICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBtb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9tb2RlOyB9CisgICAgICAgICAgICB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQpOworCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBUYXNr
KFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaywgY29uc3QgU3Ry
aW5nJiBtb2RlKTsKKyAgICAgICAgCisgICAgICAgICAgICBPd25QdHI8U2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6VGFzaz4gbV90YXNrOworICAgICAgICAgICAgU3RyaW5nIG1fbW9kZTsKKyAgICAg
ICAgfTsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBSdW5Mb29wU2V0dXA7
CiAgICAgICAgIE1lc3NhZ2VRdWV1ZVdhaXRSZXN1bHQgcnVuSW5Nb2RlKFdvcmtlckNvbnRleHQq
LCBjb25zdCBNb2RlUHJlZGljYXRlJik7CiAKLSAgICAgICAgTWVzc2FnZVF1ZXVlPFJlZlB0cjxU
YXNrPiA+IG1fbWVzc2FnZVF1ZXVlOworICAgICAgICBNZXNzYWdlUXVldWU8VGFzaz4gbV9tZXNz
YWdlUXVldWU7CiAgICAgICAgIE93blB0cjxXb3JrZXJTaGFyZWRUaW1lcj4gbV9zaGFyZWRUaW1l
cjsKICAgICAgICAgaW50IG1fbmVzdGVkQ291bnQ7CiAgICAgICAgIHVuc2lnbmVkIGxvbmcgbV91
bmlxdWVJZDsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42245</attachid>
            <date>2009-10-30 16:53:36 -0700</date>
            <delta_ts>2009-11-02 08:31:43 -0800</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>60564</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCAyYWUyOTQ4Li4zNjU5ZDY1IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkg
QEAKKzIwMDktMTAtMzAgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIHRocmVh
ZHNhZmUgcmVmY291bnRpbmcgZnJvbSB0YXNrcyB1c2VkIHdpdGggV1RGOjpNZXNzYWdlUXVldWUu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDYxMgor
CisgICAgICAgICogd3RmL01lc3NhZ2VRdWV1ZS5oOgorICAgICAgICAoV1RGOjpNZXNzYWdlUXVl
dWU6OmFsd2F5c1RydWVQcmVkaWNhdGUpOgorICAgICAgICAoV1RGOjo6On5NZXNzYWdlUXVldWUp
OgorICAgICAgICAoV1RGOjo6OmFwcGVuZCk6CisgICAgICAgIChXVEY6Ojo6YXBwZW5kQW5kQ2hl
Y2tFbXB0eSk6CisgICAgICAgIChXVEY6Ojo6cHJlcGVuZCk6CisgICAgICAgIChXVEY6Ojo6d2Fp
dEZvck1lc3NhZ2UpOgorICAgICAgICAoV1RGOjo6OndhaXRGb3JNZXNzYWdlRmlsdGVyZWRXaXRo
VGltZW91dCk6CisgICAgICAgIChXVEY6Ojo6dHJ5R2V0TWVzc2FnZSk6CisgICAgICAgIChXVEY6
Ojo6cmVtb3ZlSWYpOgorICAgICAgICBUaGUgTWVzc2FnZVF1ZXVlIGlzIGNoYW5nZWQgdG8gYWN0
IGFzIGEgcXVldWUgb2YgT3duUHRyPERhdGFUeXBlPi4gSXQgdGFrZXMgb3duZXJzaGlwCisgICAg
ICAgIG9mIHBvc3RlZCB0YXNrcyBhbmQgcGFzc2VzIGl0IHRvIHRoZSBuZXcgb3duZXIgKGluIGFu
b3RoZXIgdGhyZWFkKSB3aGVuIHRoZSB0YXNrIGlzIGZldGNoZWQuCisgICAgICAgIEFsbCBtZXRo
b2RzIGhhdmUgYXJndW1lbnRzIG9mIHR5cGUgUGFzc093blB0cjxEYXRhVHlwZT4gYW5kIHJldHVy
biB0aGUgc2FtZSB0eXBlLgorCisgICAgICAgICogd3RmL1RocmVhZGluZy5jcHA6CisgICAgICAg
IChXVEY6OmNyZWF0ZVRocmVhZCk6CisgICAgICAgIFN1cGVyZmljaWFsIGNoYW5nZSB0byB0cmln
Z2VyIHJlYnVpbGQgb2YgSlNDIHByb2plY3Qgb24gV2luZG93cywKKyAgICAgICAgd29ya2Fyb3Vu
ZCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwODkwCisKIDIw
MDktMTAtMzAgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBX
aW5kb3dzIGJ1aWxkIGZpeDogdXBkYXRlIGZvciBvYmplY3QtdG8tcG9pbnRlciBjaGFuZ2UuCmRp
ZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvTWVzc2FnZVF1ZXVlLmggYi9KYXZhU2NyaXB0
Q29yZS93dGYvTWVzc2FnZVF1ZXVlLmgKaW5kZXggOWM5YTRhNy4uYzU4NDc0MiAxMDA2NDQKLS0t
IGEvSmF2YVNjcmlwdENvcmUvd3RmL01lc3NhZ2VRdWV1ZS5oCisrKyBiL0phdmFTY3JpcHRDb3Jl
L3d0Zi9NZXNzYWdlUXVldWUuaApAQCAtNDQsMjMgKzQ0LDI3IEBAIG5hbWVzcGFjZSBXVEYgewog
ICAgICAgICBNZXNzYWdlUXVldWVNZXNzYWdlUmVjZWl2ZWQsICAvLyBBIG1lc3NhZ2Ugd2FzIHN1
Y2Nlc3NmdWxseSByZWNlaXZlZCBhbmQgcmV0dXJuZWQuCiAgICAgfTsKIAorICAgIC8vIFRoZSBx
dWV1ZSB0YWtlcyBvd25lcnNoaXAgb2YgbWVzc2FnZXMgYW5kIHRyYW5zZmVyIGl0IHRvIHRoZSBu
ZXcgb3duZXIKKyAgICAvLyB3aGVuIG1lc3NhZ2VzIGFyZSBmZXRjaGVkIGZyb20gdGhlIHF1ZXVl
LgorICAgIC8vIEVzc2VudGlhbGx5LCBNZXNzYWdlUXVldWUgYWN0cyBhcyBhIHF1ZXVlIG9mIE93
blB0cjxEYXRhVHlwZT4uCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGF0YVR5cGU+CiAgICAgY2xh
c3MgTWVzc2FnZVF1ZXVlIDogcHVibGljIE5vbmNvcHlhYmxlIHsKICAgICBwdWJsaWM6CiAgICAg
ICAgIE1lc3NhZ2VRdWV1ZSgpIDogbV9raWxsZWQoZmFsc2UpIHsgfQotICAgICAgICAKLSAgICAg
ICAgdm9pZCBhcHBlbmQoY29uc3QgRGF0YVR5cGUmKTsKLSAgICAgICAgYm9vbCBhcHBlbmRBbmRD
aGVja0VtcHR5KGNvbnN0IERhdGFUeXBlJik7Ci0gICAgICAgIHZvaWQgcHJlcGVuZChjb25zdCBE
YXRhVHlwZSYpOwotICAgICAgICBib29sIHdhaXRGb3JNZXNzYWdlKERhdGFUeXBlJik7CisgICAg
ICAgIH5NZXNzYWdlUXVldWUoKTsKKworICAgICAgICB2b2lkIGFwcGVuZChQYXNzT3duUHRyPERh
dGFUeXBlPik7CisgICAgICAgIGJvb2wgYXBwZW5kQW5kQ2hlY2tFbXB0eShQYXNzT3duUHRyPERh
dGFUeXBlPik7CisgICAgICAgIHZvaWQgcHJlcGVuZChQYXNzT3duUHRyPERhdGFUeXBlPik7CisK
KyAgICAgICAgUGFzc093blB0cjxEYXRhVHlwZT4gd2FpdEZvck1lc3NhZ2UoKTsKKyAgICAgICAg
UGFzc093blB0cjxEYXRhVHlwZT4gdHJ5R2V0TWVzc2FnZSgpOwogICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBQcmVkaWNhdGU+Ci0gICAgICAgIE1lc3NhZ2VRdWV1ZVdhaXRSZXN1bHQgd2FpdEZv
ck1lc3NhZ2VGaWx0ZXJlZFdpdGhUaW1lb3V0KERhdGFUeXBlJiwgUHJlZGljYXRlJiwgZG91Ymxl
IGFic29sdXRlVGltZSk7CisgICAgICAgIFBhc3NPd25QdHI8RGF0YVR5cGU+IHdhaXRGb3JNZXNz
YWdlRmlsdGVyZWRXaXRoVGltZW91dChNZXNzYWdlUXVldWVXYWl0UmVzdWx0JiwgUHJlZGljYXRl
JiwgZG91YmxlIGFic29sdXRlVGltZSk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUHJl
ZGljYXRlPgogICAgICAgICB2b2lkIHJlbW92ZUlmKFByZWRpY2F0ZSYpOwogCi0gICAgICAgIGJv
b2wgdHJ5R2V0TWVzc2FnZShEYXRhVHlwZSYpOwotCiAgICAgICAgIHZvaWQga2lsbCgpOwogICAg
ICAgICBib29sIGtpbGxlZCgpIGNvbnN0OwogCkBAIC03MCw4NiArNzQsMTA2IEBAIG5hbWVzcGFj
ZSBXVEYgewogICAgICAgICBzdGF0aWMgZG91YmxlIGluZmluaXRlVGltZSgpIHsgcmV0dXJuIHN0
ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4KCk7IH0KIAogICAgIHByaXZhdGU6Ci0gICAg
ICAgIHN0YXRpYyBib29sIGFsd2F5c1RydWVQcmVkaWNhdGUoRGF0YVR5cGUmKSB7IHJldHVybiB0
cnVlOyB9CisgICAgICAgIHN0YXRpYyBib29sIGFsd2F5c1RydWVQcmVkaWNhdGUoRGF0YVR5cGUq
KSB7IHJldHVybiB0cnVlOyB9CiAKICAgICAgICAgbXV0YWJsZSBNdXRleCBtX211dGV4OwogICAg
ICAgICBUaHJlYWRDb25kaXRpb24gbV9jb25kaXRpb247Ci0gICAgICAgIERlcXVlPERhdGFUeXBl
PiBtX3F1ZXVlOworICAgICAgICBEZXF1ZTxEYXRhVHlwZSo+IG1fcXVldWU7CiAgICAgICAgIGJv
b2wgbV9raWxsZWQ7CiAgICAgfTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIERhdGFUeXBlPgot
ICAgIGlubGluZSB2b2lkIE1lc3NhZ2VRdWV1ZTxEYXRhVHlwZT46OmFwcGVuZChjb25zdCBEYXRh
VHlwZSYgbWVzc2FnZSkKKyAgICBpbmxpbmUgdm9pZCBNZXNzYWdlUXVldWU8RGF0YVR5cGU+Ojp+
TWVzc2FnZVF1ZXVlKCkKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7
CisKKyAgICAgICAgd2hpbGUgKCFtX3F1ZXVlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgRGVx
dWVDb25zdEl0ZXJhdG9yPERhdGFUeXBlKj4gZm91bmQgPSBtX3F1ZXVlLmJlZ2luKCk7CisgICAg
ICAgICAgICBEYXRhVHlwZSogcHRyID0gKmZvdW5kOworICAgICAgICAgICAgbV9xdWV1ZS5yZW1v
dmUoZm91bmQpOworICAgICAgICAgICAgZGVsZXRlIHB0cjsKKyAgICAgICAgfQorICAgIH0KKwor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGF0YVR5cGU+CisgICAgaW5saW5lIHZvaWQgTWVzc2Fn
ZVF1ZXVlPERhdGFUeXBlPjo6YXBwZW5kKFBhc3NPd25QdHI8RGF0YVR5cGU+IG1lc3NhZ2UpCiAg
ICAgewogICAgICAgICBNdXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOwotICAgICAgICBtX3F1ZXVl
LmFwcGVuZChtZXNzYWdlKTsKKyAgICAgICAgbV9xdWV1ZS5hcHBlbmQobWVzc2FnZS5yZWxlYXNl
KCkpOwogICAgICAgICBtX2NvbmRpdGlvbi5zaWduYWwoKTsKICAgICB9CiAKICAgICAvLyBSZXR1
cm5zIHRydWUgaWYgdGhlIHF1ZXVlIHdhcyBlbXB0eSBiZWZvcmUgdGhlIGl0ZW0gd2FzIGFkZGVk
LgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIERhdGFUeXBlPgotICAgIGlubGluZSBib29sIE1lc3Nh
Z2VRdWV1ZTxEYXRhVHlwZT46OmFwcGVuZEFuZENoZWNrRW1wdHkoY29uc3QgRGF0YVR5cGUmIG1l
c3NhZ2UpCisgICAgaW5saW5lIGJvb2wgTWVzc2FnZVF1ZXVlPERhdGFUeXBlPjo6YXBwZW5kQW5k
Q2hlY2tFbXB0eShQYXNzT3duUHRyPERhdGFUeXBlPiBtZXNzYWdlKQogICAgIHsKICAgICAgICAg
TXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKICAgICAgICAgYm9vbCB3YXNFbXB0eSA9IG1fcXVl
dWUuaXNFbXB0eSgpOwotICAgICAgICBtX3F1ZXVlLmFwcGVuZChtZXNzYWdlKTsKKyAgICAgICAg
bV9xdWV1ZS5hcHBlbmQobWVzc2FnZS5yZWxlYXNlKCkpOwogICAgICAgICBtX2NvbmRpdGlvbi5z
aWduYWwoKTsKICAgICAgICAgcmV0dXJuIHdhc0VtcHR5OwogICAgIH0KIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIERhdGFUeXBlPgotICAgIGlubGluZSB2b2lkIE1lc3NhZ2VRdWV1ZTxEYXRhVHlw
ZT46OnByZXBlbmQoY29uc3QgRGF0YVR5cGUmIG1lc3NhZ2UpCisgICAgaW5saW5lIHZvaWQgTWVz
c2FnZVF1ZXVlPERhdGFUeXBlPjo6cHJlcGVuZChQYXNzT3duUHRyPERhdGFUeXBlPiBtZXNzYWdl
KQogICAgIHsKICAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKLSAgICAgICAgbV9x
dWV1ZS5wcmVwZW5kKG1lc3NhZ2UpOworICAgICAgICBtX3F1ZXVlLnByZXBlbmQobWVzc2FnZS5y
ZWxlYXNlKCkpOwogICAgICAgICBtX2NvbmRpdGlvbi5zaWduYWwoKTsKICAgICB9CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBEYXRhVHlwZT4KLSAgICBpbmxpbmUgYm9vbCBNZXNzYWdlUXVldWU8
RGF0YVR5cGU+Ojp3YWl0Rm9yTWVzc2FnZShEYXRhVHlwZSYgcmVzdWx0KQorICAgIGlubGluZSBQ
YXNzT3duUHRyPERhdGFUeXBlPiBNZXNzYWdlUXVldWU8RGF0YVR5cGU+Ojp3YWl0Rm9yTWVzc2Fn
ZSgpCiAgICAgewotICAgICAgICBNZXNzYWdlUXVldWVXYWl0UmVzdWx0IGV4aXRSZWFzb24gPSB3
YWl0Rm9yTWVzc2FnZUZpbHRlcmVkV2l0aFRpbWVvdXQocmVzdWx0LCBNZXNzYWdlUXVldWU8RGF0
YVR5cGU+OjphbHdheXNUcnVlUHJlZGljYXRlLCBpbmZpbml0ZVRpbWUoKSk7CisgICAgICAgIE1l
c3NhZ2VRdWV1ZVdhaXRSZXN1bHQgZXhpdFJlYXNvbjsgCisgICAgICAgIFBhc3NPd25QdHI8RGF0
YVR5cGU+IHJlc3VsdCA9IHdhaXRGb3JNZXNzYWdlRmlsdGVyZWRXaXRoVGltZW91dChleGl0UmVh
c29uLCBNZXNzYWdlUXVldWU8RGF0YVR5cGU+OjphbHdheXNUcnVlUHJlZGljYXRlLCBpbmZpbml0
ZVRpbWUoKSk7CiAgICAgICAgIEFTU0VSVChleGl0UmVhc29uID09IE1lc3NhZ2VRdWV1ZVRlcm1p
bmF0ZWQgfHwgZXhpdFJlYXNvbiA9PSBNZXNzYWdlUXVldWVNZXNzYWdlUmVjZWl2ZWQpOwotICAg
ICAgICByZXR1cm4gZXhpdFJlYXNvbiA9PSBNZXNzYWdlUXVldWVNZXNzYWdlUmVjZWl2ZWQ7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGF0
YVR5cGU+CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUHJlZGljYXRlPgotICAgIGlubGluZSBNZXNz
YWdlUXVldWVXYWl0UmVzdWx0IE1lc3NhZ2VRdWV1ZTxEYXRhVHlwZT46OndhaXRGb3JNZXNzYWdl
RmlsdGVyZWRXaXRoVGltZW91dChEYXRhVHlwZSYgcmVzdWx0LCBQcmVkaWNhdGUmIHByZWRpY2F0
ZSwgZG91YmxlIGFic29sdXRlVGltZSkKKyAgICBpbmxpbmUgUGFzc093blB0cjxEYXRhVHlwZT4g
TWVzc2FnZVF1ZXVlPERhdGFUeXBlPjo6d2FpdEZvck1lc3NhZ2VGaWx0ZXJlZFdpdGhUaW1lb3V0
KE1lc3NhZ2VRdWV1ZVdhaXRSZXN1bHQmIHJlc3VsdCwgUHJlZGljYXRlJiBwcmVkaWNhdGUsIGRv
dWJsZSBhYnNvbHV0ZVRpbWUpCiAgICAgewogICAgICAgICBNdXRleExvY2tlciBsb2NrKG1fbXV0
ZXgpOwogICAgICAgICBib29sIHRpbWVkT3V0ID0gZmFsc2U7CiAKLSAgICAgICAgRGVxdWVDb25z
dEl0ZXJhdG9yPERhdGFUeXBlPiBmb3VuZCA9IG1fcXVldWUuZW5kKCk7CisgICAgICAgIERlcXVl
Q29uc3RJdGVyYXRvcjxEYXRhVHlwZSo+IGZvdW5kID0gbV9xdWV1ZS5lbmQoKTsKICAgICAgICAg
d2hpbGUgKCFtX2tpbGxlZCAmJiAhdGltZWRPdXQgJiYgKGZvdW5kID0gbV9xdWV1ZS5maW5kSWYo
cHJlZGljYXRlKSkgPT0gbV9xdWV1ZS5lbmQoKSkKICAgICAgICAgICAgIHRpbWVkT3V0ID0gIW1f
Y29uZGl0aW9uLnRpbWVkV2FpdChtX211dGV4LCBhYnNvbHV0ZVRpbWUpOwogCiAgICAgICAgIEFT
U0VSVCghdGltZWRPdXQgfHwgYWJzb2x1dGVUaW1lICE9IGluZmluaXRlVGltZSgpKTsKIAotICAg
ICAgICBpZiAobV9raWxsZWQpCi0gICAgICAgICAgICByZXR1cm4gTWVzc2FnZVF1ZXVlVGVybWlu
YXRlZDsKKyAgICAgICAgaWYgKG1fa2lsbGVkKSB7CisgICAgICAgICAgICByZXN1bHQgPSBNZXNz
YWdlUXVldWVUZXJtaW5hdGVkOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KIAot
ICAgICAgICBpZiAodGltZWRPdXQpCi0gICAgICAgICAgICByZXR1cm4gTWVzc2FnZVF1ZXVlVGlt
ZW91dDsKKyAgICAgICAgaWYgKHRpbWVkT3V0KSB7CisgICAgICAgICAgICByZXN1bHQgPSBNZXNz
YWdlUXVldWVUaW1lb3V0OworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KIAogICAg
ICAgICBBU1NFUlQoZm91bmQgIT0gbV9xdWV1ZS5lbmQoKSk7Ci0gICAgICAgIHJlc3VsdCA9ICpm
b3VuZDsKKyAgICAgICAgRGF0YVR5cGUqIHB0ciA9ICpmb3VuZDsKICAgICAgICAgbV9xdWV1ZS5y
ZW1vdmUoZm91bmQpOwotICAgICAgICByZXR1cm4gTWVzc2FnZVF1ZXVlTWVzc2FnZVJlY2VpdmVk
OworICAgICAgICByZXN1bHQgPSBNZXNzYWdlUXVldWVNZXNzYWdlUmVjZWl2ZWQ7CisgICAgICAg
IHJldHVybiBwdHI7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGF0YVR5cGU+Ci0g
ICAgaW5saW5lIGJvb2wgTWVzc2FnZVF1ZXVlPERhdGFUeXBlPjo6dHJ5R2V0TWVzc2FnZShEYXRh
VHlwZSYgcmVzdWx0KQorICAgIGlubGluZSBQYXNzT3duUHRyPERhdGFUeXBlPiBNZXNzYWdlUXVl
dWU8RGF0YVR5cGU+Ojp0cnlHZXRNZXNzYWdlKCkKICAgICB7CiAgICAgICAgIE11dGV4TG9ja2Vy
IGxvY2sobV9tdXRleCk7CiAgICAgICAgIGlmIChtX2tpbGxlZCkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBpZiAobV9xdWV1ZS5pc0Vt
cHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gMDsK
IAotICAgICAgICByZXN1bHQgPSBtX3F1ZXVlLmZpcnN0KCk7CisgICAgICAgIERhdGFUeXBlKiBw
dHIgPSBtX3F1ZXVlLmZpcnN0KCk7CiAgICAgICAgIG1fcXVldWUucmVtb3ZlRmlyc3QoKTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBwdHI7CiAgICAgfQogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRGF0YVR5cGU+CkBAIC0xNTcsOSArMTgxLDExIEBAIG5hbWVzcGFjZSBX
VEYgewogICAgIGlubGluZSB2b2lkIE1lc3NhZ2VRdWV1ZTxEYXRhVHlwZT46OnJlbW92ZUlmKFBy
ZWRpY2F0ZSYgcHJlZGljYXRlKQogICAgIHsKICAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211
dGV4KTsKLSAgICAgICAgRGVxdWVDb25zdEl0ZXJhdG9yPERhdGFUeXBlPiBmb3VuZCA9IG1fcXVl
dWUuZW5kKCk7CisgICAgICAgIERlcXVlQ29uc3RJdGVyYXRvcjxEYXRhVHlwZSo+IGZvdW5kID0g
bV9xdWV1ZS5lbmQoKTsKICAgICAgICAgd2hpbGUgKChmb3VuZCA9IG1fcXVldWUuZmluZElmKHBy
ZWRpY2F0ZSkpICE9IG1fcXVldWUuZW5kKCkpIHsKKyAgICAgICAgICAgIERhdGFUeXBlKiBwdHIg
PSAqZm91bmQ7CiAgICAgICAgICAgICBtX3F1ZXVlLnJlbW92ZShmb3VuZCk7CisgICAgICAgICAg
ICBkZWxldGUgcHRyOwogICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRD
b3JlL3d0Zi9UaHJlYWRpbmcuY3BwIGIvSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZy5jcHAK
aW5kZXggMWQ0MTg1Yy4uNzRjNDdmNCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvd3RmL1Ro
cmVhZGluZy5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZy5jcHAKQEAgLTc1
LDcgKzc1LDcgQEAgVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWQoVGhyZWFkRnVuY3Rpb24g
ZW50cnlQb2ludCwgdm9pZCogZGF0YSwgY29uc3QgY2hhcioKIAogICAgIE5ld1RocmVhZENvbnRl
eHQqIGNvbnRleHQgPSBuZXcgTmV3VGhyZWFkQ29udGV4dChlbnRyeVBvaW50LCBkYXRhLCBuYW1l
KTsKIAotICAgIC8vIFByZXZlbnQgdGhlIHRocmVhZCBib2R5IGZyb20gZXhlY3V0aW5nIHVudGls
IHdlJ3ZlIGVzdGFibGlzaGVkIHRoZSB0aHJlYWQgaWRlbnRpZmllcgorICAgIC8vIFByZXZlbnQg
dGhlIHRocmVhZCBib2R5IGZyb20gZXhlY3V0aW5nIHVudGlsIHdlJ3ZlIGVzdGFibGlzaGVkIHRo
ZSB0aHJlYWQgaWRlbnRpZmllci4KICAgICBNdXRleExvY2tlciBsb2NrZXIoY29udGV4dC0+Y3Jl
YXRpb25NdXRleCk7CiAKICAgICByZXR1cm4gY3JlYXRlVGhyZWFkSW50ZXJuYWwodGhyZWFkRW50
cnlQb2ludCwgY29udGV4dCwgbmFtZSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBi
L1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDliOGYzYmEuLmRhMDE2NTMgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTA0IEBA
CiAyMDA5LTEwLTMwICBEbWl0cnkgVGl0b3YgIDxkaW1pY2hAY2hyb21pdW0ub3JnPgogCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZSB0aHJlYWRz
YWZlIHJlZmNvdW50aW5nIGZyb20gdGFza3MgdXNlZCB3aXRoIFdURjo6TWVzc2FnZVF1ZXVlLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzA2MTIKKwor
ICAgICAgICBObyBuZXcgdGVzdHMgc2luY2Ugbm8gbmV3IGZ1bmN0aW9uYWxpdHkuIFN0b3JhZ2Us
IE1lc3NhZ2VQb3J0cyBhbmQgV29ya2VycyB0ZXN0cyBjb3ZlciB0aGlzLgorCisgICAgICAgIFRo
ZXJlIGlzIGEgbG90IG9mIGZpbGVzIGJ1dCBtb3N0IGNoYW5nZXMgYXJlIHNpbXBseSByZXBsYWNl
IFJlZlB0ciBhbmQgUGFzc1JlZlB0ciB0bworICAgICAgICBPd25QdHIgYW5kIFBhc3NPd25QdHIg
d2hlbiBkZWFsaW5nIHdpdGggVGFza3MuCisgICAgICAgIAorICAgICAgICBTY3JpcHRFeGVjdXRp
b25Db250ZXh0OjpUYXNrLCBEYXRhYmFzZVRhc2sgYW5kIFdvcmtlclJ1bkxvb3A6OlRhc2sgYXJl
IG5vIGxvbmdlcgorICAgICAgICB0aHJlYWRzYWZlIHJlZmNvdW50ZWQsIGJ1dCBzaW1wbHkgTm9u
Y29weWFibGUuCisgICAgICAgIAorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0VGFza1RpbWVyOjpTY3JpcHRFeGVjdXRp
b25Db250ZXh0VGFza1RpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBlcmZvcm1UYXNrQ29udGV4
dDo6UGVyZm9ybVRhc2tDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpwb3N0
VGFzayk6CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgICogZG9tL1NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UHJvY2Vzc01lc3NhZ2VzU29v
blRhc2s6OmNyZWF0ZSk6CisgICAgICAgICogZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaDoK
KyAgICAgICAgKiBkb20vZGVmYXVsdC9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbDo6dHJ5R2V0TWVzc2Fn
ZUZyb21SZW1vdGUpOgorICAgICAgICAqIGRvbS9kZWZhdWx0L1BsYXRmb3JtTWVzc2FnZVBvcnRD
aGFubmVsLmg6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbDo6
TWVzc2FnZVBvcnRRdWV1ZTo6dHJ5R2V0TWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbDo6TWVzc2FnZVBvcnRRdWV1ZTo6YXBwZW5kQW5kQ2hlY2tF
bXB0eSk6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Okhhc2hDaGFuZ2VFdmVudFRhc2s6OmNyZWF0ZSk6CisgICAgICAgICogbG9hZGVyL2FwcGNh
Y2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWxsQ2Fj
aGVMaXN0ZW5lclRhc2s6OmNyZWF0ZSk6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6b3BlbkFuZFZlcmlmeVZlcnNpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6Om1hcmtBc0RlbGV0ZWRBbmRDbG9zZSk6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhYmFzZTo6c2NoZWR1bGVUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZTo6c2NoZWR1bGVUcmFuc2FjdGlvblN0ZXApOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0YWJhc2U6OnRhYmxlTmFtZXMpOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VUYXNr
Lmg6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU9wZW5UYXNrOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YWJhc2VDbG9zZVRhc2s6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhYmFzZVRyYW5zYWN0aW9uVGFzazo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFiYXNlVGFibGVOYW1lc1Rhc2s6OmNyZWF0ZSk6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFz
ZVRocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRocmVhZDo6ZGF0YWJhc2VU
aHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUaHJlYWQ6OnNjaGVkdWxlVGFzayk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRocmVhZDo6c2NoZWR1bGVJbW1lZGlhdGVUYXNr
KToKKyAgICAgICAgKFdlYkNvcmU6OlNhbWVEYXRhYmFzZVByZWRpY2F0ZTo6b3BlcmF0b3IoKSk6
CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZVRocmVhZC5oOgorICAgICAgICAqIHN0b3JhZ2Uv
TG9jYWxTdG9yYWdlVGFzay5oOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlVGFzazo6
Y3JlYXRlSW1wb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFnZVRhc2s6OmNyZWF0
ZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlVGFzazo6Y3JlYXRlVGVybWlu
YXRlKToKKyAgICAgICAgKiBzdG9yYWdlL0xvY2FsU3RvcmFnZVRocmVhZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VUaHJlYWQ6OmxvY2FsU3RvcmFnZVRocmVhZCk6CisgICAg
ICAgICogc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUaHJlYWQuaDoKKyAgICAgICAgKiB3ZWJzb2NrZXRz
L1dlYlNvY2tldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQcm9jZXNzV2ViU29ja2V0RXZlbnRU
YXNrOjpjcmVhdGUpOgorICAgICAgICAqIHdvcmtlcnMvRGVmYXVsdFNoYXJlZFdvcmtlclJlcG9z
aXRvcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkV29ya2VyUHJveHk6OnBvc3RUYXNr
VG9Mb2FkZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkV29ya2VyUHJveHk6OnBvc3RUYXNr
Rm9yTW9kZVRvV29ya2VyQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRXb3JrZXJD
b25uZWN0VGFzazo6Y3JlYXRlKToKKyAgICAgICAgKiB3b3JrZXJzL0dlbmVyaWNXb3JrZXJUYXNr
Lmg6CisgICAgICAgIChXZWJDb3JlOjpHZW5lcmljV29ya2VyVGFzazE6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHZW5lcmljV29ya2VyVGFzazI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpHZW5lcmljV29ya2VyVGFzazM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHZW5l
cmljV29ya2VyVGFzazQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHZW5lcmljV29ya2Vy
VGFzazU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHZW5lcmljV29ya2VyVGFzazY6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHZW5lcmljV29ya2VyVGFzazc6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHZW5lcmljV29ya2VyVGFzazg6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpjcmVhdGVDYWxsYmFja1Rhc2spOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyQ29u
dGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0Ojpwb3N0VGFzayk6Cisg
ICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0Lmg6CisgICAgICAgICogd29ya2Vycy9Xb3Jr
ZXJMb2FkZXJQcm94eS5oOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHku
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVdvcmtlckNvbnRleHRUYXNrOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVdvcmtlclRhc2s6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpXb3JrZXJFeGNlcHRpb25UYXNrOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6V29ya2VyQ29udGV4dERlc3Ryb3llZFRhc2s6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpXb3JrZXJUZXJtaW5hdGVUYXNrOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2Vy
VGhyZWFkQWN0aXZpdHlSZXBvcnRUYXNrOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V29y
a2VyTWVzc2FnaW5nUHJveHk6OnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpXb3JrZXJNZXNzYWdpbmdQcm94eTo6cG9zdFRhc2tUb0xvYWRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpXb3JrZXJNZXNzYWdpbmdQcm94eTo6d29ya2VyVGhyZWFkQ3JlYXRl
ZCk6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5oOgorICAgICAgICAq
IHdvcmtlcnMvV29ya2VyUnVuTG9vcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNb2RlUHJlZGlj
YXRlOjpvcGVyYXRvcigpKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclJ1bkxvb3A6OnJ1bklu
TW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJSdW5Mb29wOjpwb3N0VGFzayk6CisgICAg
ICAgIChXZWJDb3JlOjpXb3JrZXJSdW5Mb29wOjpwb3N0VGFza0Zvck1vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyUnVuTG9vcDo6VGFzazo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OldvcmtlclJ1bkxvb3A6OlRhc2s6OnBlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6Oldv
cmtlclJ1bkxvb3A6OlRhc2s6OlRhc2spOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyUnVuTG9v
cC5oOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyUnVuTG9vcDo6VGFzazo6flRhc2spOgorICAg
ICAgICAoV2ViQ29yZTo6V29ya2VyUnVuTG9vcDo6VGFzazo6bW9kZSk6CisKKzIwMDktMTAtMzAg
IERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+CisKICAgICAgICAgUmV2aWV3ZWQg
YnkgRGF2aWQgTGV2aW4uCiAKICAgICAgICAgUmVmYWN0b3IgRGF0YWJhc2VUYXNrIGluIHByZXBh
cmF0aW9uIGZvciByZW1vdmluZyB0aHJlYWRzYWZlIHJlZmNvdW50aW5nIGZyb20gaXQuCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAKaW5kZXggNzBmYjVjNy4uZmJhNDYwZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNDUzNyw3ICs0NTM3LDcg
QEAgdm9pZCBEb2N1bWVudDo6c2NyaXB0SW1wb3J0ZWQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
LCBjb25zdCBTdHJpbmcmIHNvdXJjZVN0cmkKIAogY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dFRhc2tUaW1lciA6IHB1YmxpYyBUaW1lckJhc2UgewogcHVibGljOgotICAgIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRUYXNrVGltZXIoUGFzc1JlZlB0cjxEb2N1bWVudD4gY29udGV4dCwgUGFzc1Jl
ZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrKQorICAgIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRUYXNrVGltZXIoUGFzc1JlZlB0cjxEb2N1bWVudD4gY29udGV4dCwgUGFzc093
blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrKQogICAgICAgICA6IG1fY29u
dGV4dChjb250ZXh0KQogICAgICAgICAsIG1fdGFzayh0YXNrKQogICAgIHsKQEAgLTQ1NTEsMTgg
KzQ1NTEsMTggQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICBSZWZQdHI8RG9jdW1lbnQ+IG1fY29u
dGV4dDsKLSAgICBSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gbV90YXNrOwor
ICAgIE93blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBtX3Rhc2s7CiB9OwogCiBz
dHJ1Y3QgUGVyZm9ybVRhc2tDb250ZXh0IHsKLSAgICBQZXJmb3JtVGFza0NvbnRleHQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgUGFzc1JlZlB0cjxTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrKQorICAgIFBlcmZvcm1UYXNrQ29udGV4dChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBQYXNzT3duUHRy
PFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2spCiAgICAgICAgIDogc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dChzY3JpcHRFeGVjdXRpb25Db250ZXh0KQogICAgICAgICAsIHRhc2sodGFz
aykKICAgICB7CiAgICAgfQogCiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDsgLy8gVGhlIGNvbnRleHQgc2hvdWxkIGV4aXN0IHVudGlsIHRhc2sgZXhl
Y3V0aW9uLgotICAgIFJlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrOwor
ICAgIE93blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrOwogfTsKIAogc3Rh
dGljIHZvaWQgcGVyZm9ybVRhc2sodm9pZCogY3R4KQpAQCAtNDU3Miw3ICs0NTcyLDcgQEAgc3Rh
dGljIHZvaWQgcGVyZm9ybVRhc2sodm9pZCogY3R4KQogICAgIGRlbGV0ZSBwdGN0eDsKIH0KIAot
dm9pZCBEb2N1bWVudDo6cG9zdFRhc2soUGFzc1JlZlB0cjxUYXNrPiB0YXNrKQordm9pZCBEb2N1
bWVudDo6cG9zdFRhc2soUGFzc093blB0cjxUYXNrPiB0YXNrKQogewogICAgIGlmIChpc01haW5U
aHJlYWQoKSkgewogICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0VGFza1RpbWVyKiB0aW1l
ciA9IG5ldyBTY3JpcHRFeGVjdXRpb25Db250ZXh0VGFza1RpbWVyKHN0YXRpY19jYXN0PERvY3Vt
ZW50Kj4odGhpcyksIHRhc2spOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBi
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggMDYzMmJlMS4uMmJmYThkOSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBA
IC04MTksNyArODE5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhZGRNZXNzYWdlKE1l
c3NhZ2VEZXN0aW5hdGlvbiwgTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZl
bCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJp
bmcmIHNvdXJjZVVSTCk7CiAgICAgdmlydHVhbCB2b2lkIHJlc291cmNlUmV0cmlldmVkQnlYTUxI
dHRwUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFNjcmlwdFN0cmluZyYg
c291cmNlU3RyaW5nKTsKICAgICB2aXJ0dWFsIHZvaWQgc2NyaXB0SW1wb3J0ZWQodW5zaWduZWQg
bG9uZywgY29uc3QgU3RyaW5nJik7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RUYXNrKFBhc3NSZWZQ
dHI8VGFzaz4pOyAvLyBFeGVjdXRlcyB0aGUgdGFzayBvbiBjb250ZXh0J3MgdGhyZWFkIGFzeW5j
aHJvbm91c2x5LgorICAgIHZpcnR1YWwgdm9pZCBwb3N0VGFzayhQYXNzT3duUHRyPFRhc2s+KTsg
Ly8gRXhlY3V0ZXMgdGhlIHRhc2sgb24gY29udGV4dCdzIHRocmVhZCBhc3luY2hyb25vdXNseS4K
IAogICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJDb3JlOjpOb2RlKiwgSlNOb2RlKj4gSlNXcmFwcGVy
Q2FjaGU7CiAgICAgdHlwZWRlZiBIYXNoTWFwPERPTVdyYXBwZXJXb3JsZCosIEpTV3JhcHBlckNh
Y2hlKj4gSlNXcmFwcGVyQ2FjaGVNYXA7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9TY3JpcHRF
eGVjdXRpb25Db250ZXh0LmNwcCBiL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
Y3BwCmluZGV4IGY3MDQ2ZTMuLmJjNzEwODQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQuY3BwCkBAIC00NCw5ICs0NCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
UHJvY2Vzc01lc3NhZ2VzU29vblRhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6
VGFzayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UHJvY2Vzc01lc3NhZ2VzU29v
blRhc2s+IGNyZWF0ZSgpCisgICAgc3RhdGljIFBhc3NPd25QdHI8UHJvY2Vzc01lc3NhZ2VzU29v
blRhc2s+IGNyZWF0ZSgpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFByb2Nl
c3NNZXNzYWdlc1Nvb25UYXNrKTsKKyAgICAgICAgcmV0dXJuIG5ldyBQcm9jZXNzTWVzc2FnZXNT
b29uVGFzazsKICAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuaCBiL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaApp
bmRleCAzOThhZmVjLi4xNDE0MTI1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVj
dXRpb25Db250ZXh0LmgKKysrIGIvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
CkBAIC05MiwxMyArOTIsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHJl
ZigpIHsgcmVmU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOyB9CiAgICAgICAgIHZvaWQgZGVyZWYo
KSB7IGRlcmVmU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOyB9CiAKLSAgICAgICAgY2xhc3MgVGFz
ayA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPFRhc2s+IHsKKyAgICAgICAgY2xhc3MgVGFzayA6
IHB1YmxpYyBOb25jb3B5YWJsZSB7CiAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgIHZpcnR1
YWwgflRhc2soKTsKICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRF
eGVjdXRpb25Db250ZXh0KikgPSAwOwogICAgICAgICB9OwogCi0gICAgICAgIHZpcnR1YWwgdm9p
ZCBwb3N0VGFzayhQYXNzUmVmUHRyPFRhc2s+KSA9IDA7IC8vIEV4ZWN1dGVzIHRoZSB0YXNrIG9u
IGNvbnRleHQncyB0aHJlYWQgYXN5bmNocm9ub3VzbHkuCisgICAgICAgIHZpcnR1YWwgdm9pZCBw
b3N0VGFzayhQYXNzT3duUHRyPFRhc2s+KSA9IDA7IC8vIEV4ZWN1dGVzIHRoZSB0YXNrIG9uIGNv
bnRleHQncyB0aHJlYWQgYXN5bmNocm9ub3VzbHkuCiAKICAgICAgICAgdm9pZCBhZGRUaW1lb3V0
KGludCB0aW1lb3V0SWQsIERPTVRpbWVyKik7CiAgICAgICAgIHZvaWQgcmVtb3ZlVGltZW91dChp
bnQgdGltZW91dElkKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL2RlZmF1bHQvUGxhdGZvcm1N
ZXNzYWdlUG9ydENoYW5uZWwuY3BwIGIvV2ViQ29yZS9kb20vZGVmYXVsdC9QbGF0Zm9ybU1lc3Nh
Z2VQb3J0Q2hhbm5lbC5jcHAKaW5kZXggZDY2ODcwMy4uYTQ1NTk5MCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9kb20vZGVmYXVsdC9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAKKysrIGIvV2Vi
Q29yZS9kb20vZGVmYXVsdC9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAKQEAgLTE5Myw3
ICsxOTMsNyBAQCB2b2lkIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsOjpwb3N0TWVzc2FnZVRv
UmVtb3RlKFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubgogYm9vbCBQbGF0Zm9ybU1lc3NhZ2VQ
b3J0Q2hhbm5lbDo6dHJ5R2V0TWVzc2FnZUZyb21SZW1vdGUoT3duUHRyPE1lc3NhZ2VQb3J0Q2hh
bm5lbDo6RXZlbnREYXRhPiYgcmVzdWx0KQogewogICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRl
eCk7Ci0gICAgcmV0dXJuIG1faW5jb21pbmdRdWV1ZS0+dHJ5R2V0TWVzc2FnZShyZXN1bHQpOwor
ICAgIHJldHVybiAocmVzdWx0ID0gbV9pbmNvbWluZ1F1ZXVlLT50cnlHZXRNZXNzYWdlKCkpOwog
fQogCiBib29sIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsOjppc0Nvbm5lY3RlZFRvKE1lc3Nh
Z2VQb3J0KiBwb3J0KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vZGVmYXVsdC9QbGF0Zm9ybU1l
c3NhZ2VQb3J0Q2hhbm5lbC5oIGIvV2ViQ29yZS9kb20vZGVmYXVsdC9QbGF0Zm9ybU1lc3NhZ2VQ
b3J0Q2hhbm5lbC5oCmluZGV4IDBjZTJkMTMuLjJhYWQ5NTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
ZG9tL2RlZmF1bHQvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaAorKysgYi9XZWJDb3JlL2Rv
bS9kZWZhdWx0L1BsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmgKQEAgLTYzLDE4ICs2MywxNCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0UXVldWU+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVm
KG5ldyBNZXNzYWdlUG9ydFF1ZXVlKCkpOyB9CiAKLSAgICAgICAgICAgIGJvb2wgdHJ5R2V0TWVz
c2FnZShPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsOjpFdmVudERhdGE+JiBtZXNzYWdlKQorICAg
ICAgICAgICAgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWw6OkV2ZW50RGF0YT4gdHJ5R2V0
TWVzc2FnZSgpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTWVzc2FnZVBvcnRDaGFu
bmVsOjpFdmVudERhdGEqIGhvbGRlciA9IDA7Ci0gICAgICAgICAgICAgICAgYm9vbCBtZXNzYWdl
QXZhaWxhYmxlID0gbV9xdWV1ZS50cnlHZXRNZXNzYWdlKGhvbGRlcik7Ci0gICAgICAgICAgICAg
ICAgaWYgKG1lc3NhZ2VBdmFpbGFibGUpCi0gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2V0
KGhvbGRlcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2VBdmFpbGFibGU7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIG1fcXVldWUudHJ5R2V0TWVzc2FnZSgpOwogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICBib29sIGFwcGVuZEFuZENoZWNrRW1wdHkoUGFzc093blB0cjxNZXNz
YWdlUG9ydENoYW5uZWw6OkV2ZW50RGF0YT4gbWVzc2FnZSkKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gbV9xdWV1ZS5hcHBlbmRBbmRDaGVja0VtcHR5KG1lc3NhZ2UucmVs
ZWFzZSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9xdWV1ZS5hcHBlbmRBbmRDaGVja0Vt
cHR5KG1lc3NhZ2UpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBib29sIGlzRW1wdHko
KQpAQCAtODIsMTkgKzc4LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICAg
ICByZXR1cm4gbV9xdWV1ZS5pc0VtcHR5KCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IH5NZXNzYWdlUG9ydFF1ZXVlKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBN
YW51YWxseSBmcmVlIGFueSBpdGVtcyBsZWZ0IGluIHRoZSBxdWV1ZSwgc2luY2Ugd2UgY2FuJ3Qg
dXNlIE93blB0ciBpbnRlcm5hbGx5LgotICAgICAgICAgICAgICAgIE1lc3NhZ2VQb3J0Q2hhbm5l
bDo6RXZlbnREYXRhKiBkYXRhID0gMDsKLSAgICAgICAgICAgICAgICB3aGlsZSAobV9xdWV1ZS50
cnlHZXRNZXNzYWdlKGRhdGEpKQotICAgICAgICAgICAgICAgICAgICBkZWxldGUgZGF0YTsKLSAg
ICAgICAgICAgIH0KICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgIE1lc3NhZ2VQb3J0UXVl
dWUoKSB7IH0KIAotICAgICAgICAgICAgLy8gT3duUHRyIGlzIE5vbmNvcHlhYmxlLCBzbyB3ZSBj
YW4ndCB1c2UgaXQgYXMgdGhlIHRlbXBsYXRlIHR5cGUgaW4gYSBNZXNzYWdlUXVldWUuIFNvIHdl
IGp1c3Qgc3RvcmUgYSBwb2ludGVyIHRvIEV2ZW50RGF0YSBhbmQgbWFudWFsbHkgZnJlZSBpdCBp
biB0aGUgZGVzdHJ1Y3Rvci4KLSAgICAgICAgICAgIC8vIEZJWE1FOiBVc2UgYSBsb2NrLWZyZWUg
cXVldWUgaW1wbGVtZW50YXRpb24gdG8gY29tcGxldGVseSBlbGltaW5hdGUgY29udGVudGlvbiB3
aGVuIHNlbmRpbmcvcmVjZWl2aW5nIG1lc3NhZ2VzLgotICAgICAgICAgICAgTWVzc2FnZVF1ZXVl
PE1lc3NhZ2VQb3J0Q2hhbm5lbDo6RXZlbnREYXRhKj4gbV9xdWV1ZTsKKyAgICAgICAgICAgIE1l
c3NhZ2VRdWV1ZTxNZXNzYWdlUG9ydENoYW5uZWw6OkV2ZW50RGF0YT4gbV9xdWV1ZTsKICAgICAg
ICAgfTsKIAogICAgICAgICB+UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwoKTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCBiL1dlYkNvcmUvbG9hZGVyL0ZyYW1l
TG9hZGVyLmNwcAppbmRleCA5YjE1NDQ4Li45ZTUyNjY2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlci5jcHAKKysrIGIvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3Bw
CkBAIC0xNjk0LDkgKzE2OTQsOSBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzZXRGaXJzdFBhcnR5Rm9y
Q29va2llcyhjb25zdCBLVVJMJiB1cmwpCiAKIGNsYXNzIEhhc2hDaGFuZ2VFdmVudFRhc2sgOiBw
dWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8SGFzaENoYW5nZUV2ZW50VGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8RG9jdW1l
bnQ+IGRvY3VtZW50KQorICAgIHN0YXRpYyBQYXNzT3duUHRyPEhhc2hDaGFuZ2VFdmVudFRhc2s+
IGNyZWF0ZShQYXNzUmVmUHRyPERvY3VtZW50PiBkb2N1bWVudCkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgSGFzaENoYW5nZUV2ZW50VGFzayhkb2N1bWVudCkpOworICAgICAg
ICByZXR1cm4gbmV3IEhhc2hDaGFuZ2VFdmVudFRhc2soZG9jdW1lbnQpOwogICAgIH0KICAgICAK
ICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGVHcm91cC5jcHAgYi9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3Jv
dXAuY3BwCmluZGV4IDFhMjIzY2UuLjk1OGU4MjAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVy
L2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAKKysrIGIvV2ViQ29yZS9sb2FkZXIv
YXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcApAQCAtOTQ3LDkgKzk0Nyw5IEBAIHZv
aWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpzY2hlZHVsZVJlYWNoZWRNYXhBcHBDYWNoZVNpemVD
YWxsYmFjaygpCiAKIGNsYXNzIENhbGxDYWNoZUxpc3RlbmVyVGFzayA6IHB1YmxpYyBTY3JpcHRF
eGVjdXRpb25Db250ZXh0OjpUYXNrIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxD
YWxsQ2FjaGVMaXN0ZW5lclRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPERvY3VtZW50TG9hZGVyPiBs
b2FkZXIsIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpFdmVudElEIGV2ZW50SUQpCisgICAgc3RhdGlj
IFBhc3NPd25QdHI8Q2FsbENhY2hlTGlzdGVuZXJUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxEb2N1
bWVudExvYWRlcj4gbG9hZGVyLCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6RXZlbnRJRCBldmVudElE
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYWxsQ2FjaGVMaXN0ZW5lclRh
c2sobG9hZGVyLCBldmVudElEKSk7CisgICAgICAgIHJldHVybiBuZXcgQ2FsbENhY2hlTGlzdGVu
ZXJUYXNrKGxvYWRlciwgZXZlbnRJRCk7CiAgICAgfQogCiAgICAgdmlydHVhbCB2b2lkIHBlcmZv
cm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwIGIvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcApp
bmRleCAyOWI5NTU1Li41YzI2YzViIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJh
c2UuY3BwCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAKQEAgLTIwOCw5ICsyMDgs
OSBAQCBib29sIERhdGFiYXNlOjpvcGVuQW5kVmVyaWZ5VmVyc2lvbihFeGNlcHRpb25Db2RlJiBl
KQogCiAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CiAgICAgRGF0YWJhc2VUYXNrU3luY2hyb25p
emVyIHN5bmNocm9uaXplcjsKLSAgICBSZWZQdHI8RGF0YWJhc2VPcGVuVGFzaz4gdGFzayA9IERh
dGFiYXNlT3BlblRhc2s6OmNyZWF0ZSh0aGlzLCAmc3luY2hyb25pemVyLCBlLCBzdWNjZXNzKTsK
KyAgICBPd25QdHI8RGF0YWJhc2VPcGVuVGFzaz4gdGFzayA9IERhdGFiYXNlT3BlblRhc2s6OmNy
ZWF0ZSh0aGlzLCAmc3luY2hyb25pemVyLCBlLCBzdWNjZXNzKTsKIAotICAgIG1fZG9jdW1lbnQt
PmRhdGFiYXNlVGhyZWFkKCktPnNjaGVkdWxlSW1tZWRpYXRlVGFzayh0YXNrKTsKKyAgICBtX2Rv
Y3VtZW50LT5kYXRhYmFzZVRocmVhZCgpLT5zY2hlZHVsZUltbWVkaWF0ZVRhc2sodGFzay5yZWxl
YXNlKCkpOwogICAgIHN5bmNocm9uaXplci53YWl0Rm9yVGFza0NvbXBsZXRpb24oKTsKIAogICAg
IHJldHVybiBzdWNjZXNzOwpAQCAtMzE5LDkgKzMxOSw5IEBAIHZvaWQgRGF0YWJhc2U6Om1hcmtB
c0RlbGV0ZWRBbmRDbG9zZSgpCiAgICAgbV9kb2N1bWVudC0+ZGF0YWJhc2VUaHJlYWQoKS0+dW5z
Y2hlZHVsZURhdGFiYXNlVGFza3ModGhpcyk7CiAKICAgICBEYXRhYmFzZVRhc2tTeW5jaHJvbml6
ZXIgc3luY2hyb25pemVyOwotICAgIFJlZlB0cjxEYXRhYmFzZUNsb3NlVGFzaz4gdGFzayA9IERh
dGFiYXNlQ2xvc2VUYXNrOjpjcmVhdGUodGhpcywgJnN5bmNocm9uaXplcik7CisgICAgT3duUHRy
PERhdGFiYXNlQ2xvc2VUYXNrPiB0YXNrID0gRGF0YWJhc2VDbG9zZVRhc2s6OmNyZWF0ZSh0aGlz
LCAmc3luY2hyb25pemVyKTsKIAotICAgIG1fZG9jdW1lbnQtPmRhdGFiYXNlVGhyZWFkKCktPnNj
aGVkdWxlSW1tZWRpYXRlVGFzayh0YXNrKTsKKyAgICBtX2RvY3VtZW50LT5kYXRhYmFzZVRocmVh
ZCgpLT5zY2hlZHVsZUltbWVkaWF0ZVRhc2sodGFzay5yZWxlYXNlKCkpOwogICAgIHN5bmNocm9u
aXplci53YWl0Rm9yVGFza0NvbXBsZXRpb24oKTsKIH0KIApAQCAtNTM5LDcgKzUzOSw3IEBAIHZv
aWQgRGF0YWJhc2U6OnNjaGVkdWxlVHJhbnNhY3Rpb24oKQogICAgIH0KIAogICAgIGlmICh0cmFu
c2FjdGlvbiAmJiBtX2RvY3VtZW50LT5kYXRhYmFzZVRocmVhZCgpKSB7Ci0gICAgICAgIFJlZlB0
cjxEYXRhYmFzZVRyYW5zYWN0aW9uVGFzaz4gdGFzayA9IERhdGFiYXNlVHJhbnNhY3Rpb25UYXNr
OjpjcmVhdGUodHJhbnNhY3Rpb24pOworICAgICAgICBPd25QdHI8RGF0YWJhc2VUcmFuc2FjdGlv
blRhc2s+IHRhc2sgPSBEYXRhYmFzZVRyYW5zYWN0aW9uVGFzazo6Y3JlYXRlKHRyYW5zYWN0aW9u
KTsKICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIERhdGFiYXNlVHJhbnNhY3Rp
b25UYXNrICVwIGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGFzay5nZXQoKSwgdGFzay0+dHJhbnNh
Y3Rpb24oKSk7CiAgICAgICAgIG1fdHJhbnNhY3Rpb25JblByb2dyZXNzID0gdHJ1ZTsKICAgICAg
ICAgbV9kb2N1bWVudC0+ZGF0YWJhc2VUaHJlYWQoKS0+c2NoZWR1bGVUYXNrKHRhc2sucmVsZWFz
ZSgpKTsKQEAgLTU1Miw3ICs1NTIsNyBAQCB2b2lkIERhdGFiYXNlOjpzY2hlZHVsZVRyYW5zYWN0
aW9uU3RlcChTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGJvb2wgaW1tZWRpYQogICAgIGlm
ICghbV9kb2N1bWVudC0+ZGF0YWJhc2VUaHJlYWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
UmVmUHRyPERhdGFiYXNlVHJhbnNhY3Rpb25UYXNrPiB0YXNrID0gRGF0YWJhc2VUcmFuc2FjdGlv
blRhc2s6OmNyZWF0ZSh0cmFuc2FjdGlvbik7CisgICAgT3duUHRyPERhdGFiYXNlVHJhbnNhY3Rp
b25UYXNrPiB0YXNrID0gRGF0YWJhc2VUcmFuc2FjdGlvblRhc2s6OmNyZWF0ZSh0cmFuc2FjdGlv
bik7CiAgICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIERhdGFiYXNlVHJhbnNhY3Rpb25U
YXNrICVwIGZvciB0aGUgdHJhbnNhY3Rpb24gc3RlcFxuIiwgdGFzay5nZXQoKSk7CiAgICAgaWYg
KGltbWVkaWF0ZWx5KQogICAgICAgICBtX2RvY3VtZW50LT5kYXRhYmFzZVRocmVhZCgpLT5zY2hl
ZHVsZUltbWVkaWF0ZVRhc2sodGFzay5yZWxlYXNlKCkpOwpAQCAtNjI5LDkgKzYyOSw5IEBAIFZl
Y3RvcjxTdHJpbmc+IERhdGFiYXNlOjp0YWJsZU5hbWVzKCkKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKIAogICAgIERhdGFiYXNlVGFza1N5bmNocm9uaXplciBzeW5jaHJvbml6ZXI7Ci0gICAgUmVm
UHRyPERhdGFiYXNlVGFibGVOYW1lc1Rhc2s+IHRhc2sgPSBEYXRhYmFzZVRhYmxlTmFtZXNUYXNr
OjpjcmVhdGUodGhpcywgJnN5bmNocm9uaXplciwgcmVzdWx0KTsKKyAgICBPd25QdHI8RGF0YWJh
c2VUYWJsZU5hbWVzVGFzaz4gdGFzayA9IERhdGFiYXNlVGFibGVOYW1lc1Rhc2s6OmNyZWF0ZSh0
aGlzLCAmc3luY2hyb25pemVyLCByZXN1bHQpOwogCi0gICAgbV9kb2N1bWVudC0+ZGF0YWJhc2VU
aHJlYWQoKS0+c2NoZWR1bGVJbW1lZGlhdGVUYXNrKHRhc2spOworICAgIG1fZG9jdW1lbnQtPmRh
dGFiYXNlVGhyZWFkKCktPnNjaGVkdWxlSW1tZWRpYXRlVGFzayh0YXNrLnJlbGVhc2UoKSk7CiAg
ICAgc3luY2hyb25pemVyLndhaXRGb3JUYXNrQ29tcGxldGlvbigpOwogCiAgICAgcmV0dXJuIHJl
c3VsdDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRhc2suaCBiL1dlYkNv
cmUvc3RvcmFnZS9EYXRhYmFzZVRhc2suaAppbmRleCA2NWE1NWFmLi45N2EyM2M3IDEwMDY0NAot
LS0gYS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUYXNrLmgKKysrIGIvV2ViQ29yZS9zdG9yYWdl
L0RhdGFiYXNlVGFzay5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpA
QCAtNjUsNyArNjYsNyBAQCBwcml2YXRlOgogICAgIFRocmVhZENvbmRpdGlvbiBtX3N5bmNocm9u
b3VzQ29uZGl0aW9uOwogfTsKIAotY2xhc3MgRGF0YWJhc2VUYXNrIDogcHVibGljIFRocmVhZFNh
ZmVTaGFyZWQ8RGF0YWJhc2VUYXNrPiB7CitjbGFzcyBEYXRhYmFzZVRhc2sgOiBwdWJsaWMgTm9u
Y29weWFibGUgewogICAgIGZyaWVuZCBjbGFzcyBEYXRhYmFzZTsKIHB1YmxpYzoKICAgICB2aXJ0
dWFsIH5EYXRhYmFzZVRhc2soKTsKQEAgLTkxLDkgKzkyLDkgQEAgcHJpdmF0ZToKIAogY2xhc3Mg
RGF0YWJhc2VPcGVuVGFzayA6IHB1YmxpYyBEYXRhYmFzZVRhc2sgewogcHVibGljOgotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPERhdGFiYXNlT3BlblRhc2s+IGNyZWF0ZShEYXRhYmFzZSogZGIsIERh
dGFiYXNlVGFza1N5bmNocm9uaXplciogc3luY2hyb25pemVyLCBFeGNlcHRpb25Db2RlJiBjb2Rl
LCBib29sJiBzdWNjZXNzKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPERhdGFiYXNlT3BlblRhc2s+
IGNyZWF0ZShEYXRhYmFzZSogZGIsIERhdGFiYXNlVGFza1N5bmNocm9uaXplciogc3luY2hyb25p
emVyLCBFeGNlcHRpb25Db2RlJiBjb2RlLCBib29sJiBzdWNjZXNzKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhYmFzZU9wZW5UYXNrKGRiLCBzeW5jaHJvbml6ZXIsIGNv
ZGUsIHN1Y2Nlc3MpKTsKKyAgICAgICAgcmV0dXJuIG5ldyBEYXRhYmFzZU9wZW5UYXNrKGRiLCBz
eW5jaHJvbml6ZXIsIGNvZGUsIHN1Y2Nlc3MpOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTExMCw5
ICsxMTEsOSBAQCBwcml2YXRlOgogCiBjbGFzcyBEYXRhYmFzZUNsb3NlVGFzayA6IHB1YmxpYyBE
YXRhYmFzZVRhc2sgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFiYXNlQ2xv
c2VUYXNrPiBjcmVhdGUoRGF0YWJhc2UqIGRiLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIHN5
bmNocm9uaXplcikKKyAgICBzdGF0aWMgUGFzc093blB0cjxEYXRhYmFzZUNsb3NlVGFzaz4gY3Jl
YXRlKERhdGFiYXNlKiBkYiwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBzeW5jaHJvbml6ZXIp
CiAgICAgeyAKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhYmFzZUNsb3NlVGFzayhk
Yiwgc3luY2hyb25pemVyKSk7CisgICAgICAgIHJldHVybiBuZXcgRGF0YWJhc2VDbG9zZVRhc2so
ZGIsIHN5bmNocm9uaXplcik7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtMTI3LDkgKzEyOCw5IEBA
IHByaXZhdGU6CiBjbGFzcyBEYXRhYmFzZVRyYW5zYWN0aW9uVGFzayA6IHB1YmxpYyBEYXRhYmFz
ZVRhc2sgewogcHVibGljOgogICAgIC8vIFRyYW5zYWN0aW9uIHRhc2sgaXMgbmV2ZXIgc3luY2hy
b25vdXMsIHNvIG5vICdzeW5jaHJvbml6ZXInIHBhcmFtZXRlci4KLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxEYXRhYmFzZVRyYW5zYWN0aW9uVGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8U1FMVHJhbnNh
Y3Rpb24+IHRyYW5zYWN0aW9uKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPERhdGFiYXNlVHJhbnNh
Y3Rpb25UYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24p
CiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERhdGFiYXNlVHJhbnNhY3Rpb25U
YXNrKHRyYW5zYWN0aW9uKSk7CisgICAgICAgIHJldHVybiBuZXcgRGF0YWJhc2VUcmFuc2FjdGlv
blRhc2sodHJhbnNhY3Rpb24pOwogICAgIH0KIAogICAgIFNRTFRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb24uZ2V0KCk7IH0KQEAgLTE0OCw5ICsx
NDksOSBAQCBwcml2YXRlOgogCiBjbGFzcyBEYXRhYmFzZVRhYmxlTmFtZXNUYXNrIDogcHVibGlj
IERhdGFiYXNlVGFzayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YWJhc2VU
YWJsZU5hbWVzVGFzaz4gY3JlYXRlKERhdGFiYXNlKiBkYiwgRGF0YWJhc2VUYXNrU3luY2hyb25p
emVyKiBzeW5jaHJvbml6ZXIsIFZlY3RvcjxTdHJpbmc+JiBuYW1lcykKKyAgICBzdGF0aWMgUGFz
c093blB0cjxEYXRhYmFzZVRhYmxlTmFtZXNUYXNrPiBjcmVhdGUoRGF0YWJhc2UqIGRiLCBEYXRh
YmFzZVRhc2tTeW5jaHJvbml6ZXIqIHN5bmNocm9uaXplciwgVmVjdG9yPFN0cmluZz4mIG5hbWVz
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhYmFzZVRhYmxlTmFtZXNU
YXNrKGRiLCBzeW5jaHJvbml6ZXIsIG5hbWVzKSk7CisgICAgICAgIHJldHVybiBuZXcgRGF0YWJh
c2VUYWJsZU5hbWVzVGFzayhkYiwgc3luY2hyb25pemVyLCBuYW1lcyk7CiAgICAgfQogCiBwcml2
YXRlOgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmNwcCBiL1dl
YkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRocmVhZC5jcHAKaW5kZXggNDBjODNlZS4uMTJlOTI1MSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmNwcAorKysgYi9XZWJD
b3JlL3N0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuY3BwCkBAIC05MSwxMyArOTEsOCBAQCB2b2lkKiBE
YXRhYmFzZVRocmVhZDo6ZGF0YWJhc2VUaHJlYWQoKQogICAgIH0KIAogICAgIEF1dG9kcmFpbmVk
UG9vbCBwb29sOwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIFJlZlB0cjxEYXRhYmFzZVRh
c2s+IHRhc2s7Ci0gICAgICAgIGlmICghbV9xdWV1ZS53YWl0Rm9yTWVzc2FnZSh0YXNrKSkKLSAg
ICAgICAgICAgIGJyZWFrOwotCisgICAgd2hpbGUgKE93blB0cjxEYXRhYmFzZVRhc2s+IHRhc2sg
PSBtX3F1ZXVlLndhaXRGb3JNZXNzYWdlKCkpIHsKICAgICAgICAgdGFzay0+cGVyZm9ybVRhc2so
KTsKLQogICAgICAgICBwb29sLmN5Y2xlKCk7CiAgICAgfQogCkBAIC0xNDIsMTIgKzEzNywxMiBA
QCB2b2lkIERhdGFiYXNlVGhyZWFkOjpyZWNvcmREYXRhYmFzZUNsb3NlZChEYXRhYmFzZSogZGF0
YWJhc2UpCiAgICAgbV9vcGVuRGF0YWJhc2VTZXQucmVtb3ZlKGRhdGFiYXNlKTsKIH0KIAotdm9p
ZCBEYXRhYmFzZVRocmVhZDo6c2NoZWR1bGVUYXNrKFBhc3NSZWZQdHI8RGF0YWJhc2VUYXNrPiB0
YXNrKQordm9pZCBEYXRhYmFzZVRocmVhZDo6c2NoZWR1bGVUYXNrKFBhc3NPd25QdHI8RGF0YWJh
c2VUYXNrPiB0YXNrKQogewogICAgIG1fcXVldWUuYXBwZW5kKHRhc2spOwogfQogCi12b2lkIERh
dGFiYXNlVGhyZWFkOjpzY2hlZHVsZUltbWVkaWF0ZVRhc2soUGFzc1JlZlB0cjxEYXRhYmFzZVRh
c2s+IHRhc2spCit2b2lkIERhdGFiYXNlVGhyZWFkOjpzY2hlZHVsZUltbWVkaWF0ZVRhc2soUGFz
c093blB0cjxEYXRhYmFzZVRhc2s+IHRhc2spCiB7CiAgICAgbV9xdWV1ZS5wcmVwZW5kKHRhc2sp
OwogfQpAQCAtMTU1LDcgKzE1MCw3IEBAIHZvaWQgRGF0YWJhc2VUaHJlYWQ6OnNjaGVkdWxlSW1t
ZWRpYXRlVGFzayhQYXNzUmVmUHRyPERhdGFiYXNlVGFzaz4gdGFzaykKIGNsYXNzIFNhbWVEYXRh
YmFzZVByZWRpY2F0ZSB7CiBwdWJsaWM6CiAgICAgU2FtZURhdGFiYXNlUHJlZGljYXRlKGNvbnN0
IERhdGFiYXNlKiBkYXRhYmFzZSkgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKSB7IH0KLSAgICBib29s
IG9wZXJhdG9yKCkoUmVmUHRyPERhdGFiYXNlVGFzaz4mIHRhc2spIGNvbnN0IHsgcmV0dXJuIHRh
c2stPmRhdGFiYXNlKCkgPT0gbV9kYXRhYmFzZTsgfQorICAgIGJvb2wgb3BlcmF0b3IoKShEYXRh
YmFzZVRhc2sqIHRhc2spIGNvbnN0IHsgcmV0dXJuIHRhc2stPmRhdGFiYXNlKCkgPT0gbV9kYXRh
YmFzZTsgfQogcHJpdmF0ZToKICAgICBjb25zdCBEYXRhYmFzZSogbV9kYXRhYmFzZTsKIH07CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuaCBiL1dlYkNvcmUvc3Rv
cmFnZS9EYXRhYmFzZVRocmVhZC5oCmluZGV4IDgzYjFiYWYuLjI2OWE2MzMgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRocmVhZC5oCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9E
YXRhYmFzZVRocmVhZC5oCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KICNpbmNsdWRlIDx3dGYvTWVzc2FnZVF1ZXVlLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgpA
QCAtNTUsOCArNTYsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXF1ZXN0VGVybWluYXRpb24oKTsK
ICAgICBib29sIHRlcm1pbmF0aW9uUmVxdWVzdGVkKCkgY29uc3Q7CiAKLSAgICB2b2lkIHNjaGVk
dWxlVGFzayhQYXNzUmVmUHRyPERhdGFiYXNlVGFzaz4pOwotICAgIHZvaWQgc2NoZWR1bGVJbW1l
ZGlhdGVUYXNrKFBhc3NSZWZQdHI8RGF0YWJhc2VUYXNrPik7IC8vIFRoaXMganVzdCBhZGRzIHRo
ZSB0YXNrIHRvIHRoZSBmcm9udCBvZiB0aGUgcXVldWUgLSB0aGUgY2FsbGVyIG5lZWRzIHRvIGJl
IGV4dHJlbWVseSBjYXJlZnVsIG5vdCB0byBjcmVhdGUgZGVhZGxvY2tzIHdoZW4gd2FpdGluZyBm
b3IgY29tcGxldGlvbi4KKyAgICB2b2lkIHNjaGVkdWxlVGFzayhQYXNzT3duUHRyPERhdGFiYXNl
VGFzaz4pOworICAgIHZvaWQgc2NoZWR1bGVJbW1lZGlhdGVUYXNrKFBhc3NPd25QdHI8RGF0YWJh
c2VUYXNrPik7IC8vIFRoaXMganVzdCBhZGRzIHRoZSB0YXNrIHRvIHRoZSBmcm9udCBvZiB0aGUg
cXVldWUgLSB0aGUgY2FsbGVyIG5lZWRzIHRvIGJlIGV4dHJlbWVseSBjYXJlZnVsIG5vdCB0byBj
cmVhdGUgZGVhZGxvY2tzIHdoZW4gd2FpdGluZyBmb3IgY29tcGxldGlvbi4KICAgICB2b2lkIHVu
c2NoZWR1bGVEYXRhYmFzZVRhc2tzKERhdGFiYXNlKik7CiAKICAgICB2b2lkIHJlY29yZERhdGFi
YXNlT3BlbihEYXRhYmFzZSopOwpAQCAtNzYsNyArNzcsNyBAQCBwcml2YXRlOgogICAgIFRocmVh
ZElkZW50aWZpZXIgbV90aHJlYWRJRDsKICAgICBSZWZQdHI8RGF0YWJhc2VUaHJlYWQ+IG1fc2Vs
ZlJlZjsKIAotICAgIE1lc3NhZ2VRdWV1ZTxSZWZQdHI8RGF0YWJhc2VUYXNrPiA+IG1fcXVldWU7
CisgICAgTWVzc2FnZVF1ZXVlPERhdGFiYXNlVGFzaz4gbV9xdWV1ZTsKIAogICAgIC8vIFRoaXMg
c2V0IGtlZXBzIHRyYWNrIG9mIHRoZSBvcGVuIGRhdGFiYXNlcyB0aGF0IGhhdmUgYmVlbiB1c2Vk
IG9uIHRoaXMgdGhyZWFkLgogICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8RGF0YWJhc2U+ID4g
RGF0YWJhc2VTZXQ7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGFz
ay5oIGIvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suaAppbmRleCBmMDNkODUxLi4z
MjU2ZGY3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5oCisr
KyBiL1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmgKQEAgLTI4LDggKzI4LDcgQEAK
IAogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKIAotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NCw5
ICs0Myw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB+TG9jYWxTdG9yYWdlVGFz
aygpOwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPExvY2FsU3RvcmFnZVRhc2s+IGNyZWF0
ZUltcG9ydChTdG9yYWdlQXJlYVN5bmMqIGFyZWEpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBMb2Nh
bFN0b3JhZ2VUYXNrKEFyZWFJbXBvcnQsIGFyZWEpKTsgfQotICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxMb2NhbFN0b3JhZ2VUYXNrPiBjcmVhdGVTeW5jKFN0b3JhZ2VBcmVhU3luYyogYXJlYSkg
eyByZXR1cm4gYWRvcHRSZWYobmV3IExvY2FsU3RvcmFnZVRhc2soQXJlYVN5bmMsIGFyZWEpKTsg
fQotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VUYXNrPiBjcmVhdGVUZXJt
aW5hdGUoTG9jYWxTdG9yYWdlVGhyZWFkKiB0aHJlYWQpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBM
b2NhbFN0b3JhZ2VUYXNrKFRlcm1pbmF0ZVRocmVhZCwgdGhyZWFkKSk7IH0KKyAgICAgICAgc3Rh
dGljIFBhc3NPd25QdHI8TG9jYWxTdG9yYWdlVGFzaz4gY3JlYXRlSW1wb3J0KFN0b3JhZ2VBcmVh
U3luYyogYXJlYSkgeyByZXR1cm4gbmV3IExvY2FsU3RvcmFnZVRhc2soQXJlYUltcG9ydCwgYXJl
YSk7IH0KKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8TG9jYWxTdG9yYWdlVGFzaz4gY3JlYXRl
U3luYyhTdG9yYWdlQXJlYVN5bmMqIGFyZWEpIHsgcmV0dXJuIG5ldyBMb2NhbFN0b3JhZ2VUYXNr
KEFyZWFTeW5jLCBhcmVhKTsgfQorICAgICAgICBzdGF0aWMgUGFzc093blB0cjxMb2NhbFN0b3Jh
Z2VUYXNrPiBjcmVhdGVUZXJtaW5hdGUoTG9jYWxTdG9yYWdlVGhyZWFkKiB0aHJlYWQpIHsgcmV0
dXJuIG5ldyBMb2NhbFN0b3JhZ2VUYXNrKFRlcm1pbmF0ZVRocmVhZCwgdGhyZWFkKTsgfQogCiAg
ICAgICAgIHZvaWQgcGVyZm9ybVRhc2soKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdl
L0xvY2FsU3RvcmFnZVRocmVhZC5jcHAgYi9XZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGhy
ZWFkLmNwcAppbmRleCA5MzczMjMyLi45OTI2NDMyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3Jh
Z2UvTG9jYWxTdG9yYWdlVGhyZWFkLmNwcAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9y
YWdlVGhyZWFkLmNwcApAQCAtNzAsOCArNzAsOCBAQCB2b2lkKiBMb2NhbFN0b3JhZ2VUaHJlYWQ6
OmxvY2FsU3RvcmFnZVRocmVhZCgpCiAgICAgfQogCiAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAg
ICAgUmVmUHRyPExvY2FsU3RvcmFnZVRhc2s+IHRhc2s7Ci0gICAgICAgIGlmICghbV9xdWV1ZS53
YWl0Rm9yTWVzc2FnZSh0YXNrKSkKKyAgICAgICAgT3duUHRyPExvY2FsU3RvcmFnZVRhc2s+IHRh
c2sgPSBtX3F1ZXVlLndhaXRGb3JNZXNzYWdlKCk7CisgICAgICAgIGlmICghdGFzaykKICAgICAg
ICAgICAgIGJyZWFrOwogCiAgICAgICAgIHRhc2stPnBlcmZvcm1UYXNrKCk7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGhyZWFkLmggYi9XZWJDb3JlL3N0b3JhZ2Uv
TG9jYWxTdG9yYWdlVGhyZWFkLmgKaW5kZXggOGZlZjM1ZC4uNjE2YjgwOSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRocmVhZC5oCisrKyBiL1dlYkNvcmUvc3RvcmFn
ZS9Mb2NhbFN0b3JhZ2VUaHJlYWQuaApAQCAtNjMsNyArNjMsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJRDsKICAgICAgICAgUmVmUHRy
PExvY2FsU3RvcmFnZVRocmVhZD4gbV9zZWxmUmVmOwogCi0gICAgICAgIE1lc3NhZ2VRdWV1ZTxS
ZWZQdHI8TG9jYWxTdG9yYWdlVGFzaz4gPiBtX3F1ZXVlOworICAgICAgICBNZXNzYWdlUXVldWU8
TG9jYWxTdG9yYWdlVGFzaz4gbV9xdWV1ZTsKIAogICAgICAgICBNdXRleCBtX3Rlcm1pbmF0ZUxv
Y2s7CiAgICAgICAgIFRocmVhZENvbmRpdGlvbiBtX3Rlcm1pbmF0ZUNvbmRpdGlvbjsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwIGIvV2ViQ29yZS93ZWJzb2Nr
ZXRzL1dlYlNvY2tldC5jcHAKaW5kZXggMzJlMDU1OS4uZDI3NzQ2NSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAKKysrIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dl
YlNvY2tldC5jcHAKQEAgLTUyLDkgKzUyLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
UHJvY2Vzc1dlYlNvY2tldEV2ZW50VGFzayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0
OjpUYXNrIHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIHZvaWQgKFdlYlNvY2tldDo6Kk1ldGhvZCko
RXZlbnQqKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxQcm9jZXNzV2ViU29ja2V0RXZlbnRUYXNr
PiBjcmVhdGUoUGFzc1JlZlB0cjxXZWJTb2NrZXQ+IHdlYlNvY2tldCwgUGFzc1JlZlB0cjxFdmVu
dD4gZXZlbnQpCisgICAgc3RhdGljIFBhc3NPd25QdHI8UHJvY2Vzc1dlYlNvY2tldEV2ZW50VGFz
az4gY3JlYXRlKFBhc3NSZWZQdHI8V2ViU29ja2V0PiB3ZWJTb2NrZXQsIFBhc3NSZWZQdHI8RXZl
bnQ+IGV2ZW50KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQcm9jZXNzV2Vi
U29ja2V0RXZlbnRUYXNrKHdlYlNvY2tldCwgZXZlbnQpKTsKKyAgICAgICAgcmV0dXJuIG5ldyBQ
cm9jZXNzV2ViU29ja2V0RXZlbnRUYXNrKHdlYlNvY2tldCwgZXZlbnQpOwogICAgIH0KICAgICB2
aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopCiAgICAgewpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL0RlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5
LmNwcCBiL1dlYkNvcmUvd29ya2Vycy9EZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeS5jcHAK
aW5kZXggOGIxYTQ4MC4uNjU1YjkwZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJzL0RlZmF1
bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5LmNwcAorKysgYi9XZWJDb3JlL3dvcmtlcnMvRGVmYXVs
dFNoYXJlZFdvcmtlclJlcG9zaXRvcnkuY3BwCkBAIC03Myw4ICs3Myw4IEBAIHB1YmxpYzoKICAg
ICBib29sIG1hdGNoZXMoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPiBvcmlnaW4sIGNvbnN0IEtVUkwmIHVybFRvTWF0Y2gpIGNvbnN0OwogCiAgICAgLy8gV29y
a2VyTG9hZGVyUHJveHkKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdFRhc2tUb0xvYWRlcihQYXNzUmVm
UHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+KTsKLSAgICB2aXJ0dWFsIHZvaWQgcG9z
dFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDo6VGFzaz4sIGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCBwb3N0VGFza1Rv
TG9hZGVyKFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4pOworICAgIHZp
cnR1YWwgdm9pZCBwb3N0VGFza0Zvck1vZGVUb1dvcmtlckNvbnRleHQoUGFzc093blB0cjxTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiwgY29uc3QgU3RyaW5nJik7CiAKICAgICAvLyBXb3Jr
ZXJSZXBvcnRpbmdQcm94eQogICAgIHZpcnR1YWwgdm9pZCBwb3N0RXhjZXB0aW9uVG9Xb3JrZXJP
YmplY3QoY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBjb25zdCBT
dHJpbmcmIHNvdXJjZVVSTCk7CkBAIC0xMjgsNyArMTI4LDcgQEAgYm9vbCBTaGFyZWRXb3JrZXJQ
cm94eTo6bWF0Y2hlcyhjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmln
aW4+IG8KICAgICByZXR1cm4gbmFtZSA9PSBtX25hbWU7CiB9CiAKLXZvaWQgU2hhcmVkV29ya2Vy
UHJveHk6OnBvc3RUYXNrVG9Mb2FkZXIoUGFzc1JlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0
OjpUYXNrPiB0YXNrKQordm9pZCBTaGFyZWRXb3JrZXJQcm94eTo6cG9zdFRhc2tUb0xvYWRlcihQ
YXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2spCiB7CiAgICAgTXV0
ZXhMb2NrZXIgbG9jayhtX3dvcmtlckRvY3VtZW50c0xvY2spOwogCkBAIC0xNDQsNyArMTQ0LDcg
QEAgdm9pZCBTaGFyZWRXb3JrZXJQcm94eTo6cG9zdFRhc2tUb0xvYWRlcihQYXNzUmVmUHRyPFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sKICAgICBkb2N1bWVudC0+cG9zdFRhc2sodGFzayk7
CiB9CiAKLXZvaWQgU2hhcmVkV29ya2VyUHJveHk6OnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29u
dGV4dChQYXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2ssIGNvbnN0
IFN0cmluZyYgbW9kZSkKK3ZvaWQgU2hhcmVkV29ya2VyUHJveHk6OnBvc3RUYXNrRm9yTW9kZVRv
V29ya2VyQ29udGV4dChQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRh
c2ssIGNvbnN0IFN0cmluZyYgbW9kZSkKIHsKICAgICBpZiAoaXNDbG9zaW5nKCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTIyMSw5ICsyMjEsOSBAQCB2b2lkIFNoYXJlZFdvcmtlclByb3h5OjpjbG9z
ZSgpCiAKIGNsYXNzIFNoYXJlZFdvcmtlckNvbm5lY3RUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ6OlRhc2sgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJl
ZFdvcmtlckNvbm5lY3RUYXNrPiBjcmVhdGUoUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWw+
IGNoYW5uZWwpCisgICAgc3RhdGljIFBhc3NPd25QdHI8U2hhcmVkV29ya2VyQ29ubmVjdFRhc2s+
IGNyZWF0ZShQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbD4gY2hhbm5lbCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVkV29ya2VyQ29ubmVjdFRhc2soY2hhbm5l
bCkpOworICAgICAgICByZXR1cm4gbmV3IFNoYXJlZFdvcmtlckNvbm5lY3RUYXNrKGNoYW5uZWwp
OwogICAgIH0KIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9HZW5lcmlj
V29ya2VyVGFzay5oIGIvV2ViQ29yZS93b3JrZXJzL0dlbmVyaWNXb3JrZXJUYXNrLmgKaW5kZXgg
ZDZhOTk5NC4uMjc2OTRjNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJzL0dlbmVyaWNXb3Jr
ZXJUYXNrLmgKKysrIGIvV2ViQ29yZS93b3JrZXJzL0dlbmVyaWNXb3JrZXJUYXNrLmgKQEAgLTcw
LDkgKzcwLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB0eXBlZGVmIEdlbmVyaWNX
b3JrZXJUYXNrMTxQMSwgTVAxPiBHZW5lcmljV29ya2VyVGFzazsKICAgICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBHZW5lcmljV29ya2VyVGFza1RyYWl0czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7CiAK
LSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8R2VuZXJpY1dvcmtlclRhc2s+IGNyZWF0ZShNZXRo
b2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSkKKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8
R2VuZXJpY1dvcmtlclRhc2s+IGNyZWF0ZShNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVy
MSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHZW5lcmljV29y
a2VyVGFzayhtZXRob2QsIHBhcmFtZXRlcjEpKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgR2Vu
ZXJpY1dvcmtlclRhc2sobWV0aG9kLCBwYXJhbWV0ZXIxKTsKICAgICAgICAgfQogCiAgICAgcHJp
dmF0ZToKQEAgLTEwMCw5ICsxMDAsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgR2VuZXJpY1dvcmtlclRhc2tUcmFpdHM8UDE+OjpQYXJhbVR5cGUgUGFy
YW0xOwogICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEdlbmVyaWNXb3JrZXJUYXNrVHJhaXRzPFAy
Pjo6UGFyYW1UeXBlIFBhcmFtMjsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxHZW5lcmlj
V29ya2VyVGFzaz4gY3JlYXRlKE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJh
bTIgcGFyYW1ldGVyMikKKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8R2VuZXJpY1dvcmtlclRh
c2s+IGNyZWF0ZShNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFt
ZXRlcjIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgR2VuZXJp
Y1dvcmtlclRhc2sobWV0aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyKSk7CisgICAgICAgICAg
ICByZXR1cm4gbmV3IEdlbmVyaWNXb3JrZXJUYXNrKG1ldGhvZCwgcGFyYW1ldGVyMSwgcGFyYW1l
dGVyMik7CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6CkBAIC0xMzMsOSArMTMzLDkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEdlbmVyaWNXb3JrZXJU
YXNrVHJhaXRzPFAyPjo6UGFyYW1UeXBlIFBhcmFtMjsKICAgICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBHZW5lcmljV29ya2VyVGFza1RyYWl0czxQMz46OlBhcmFtVHlwZSBQYXJhbTM7CiAKLSAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8R2VuZXJpY1dvcmtlclRhc2s+IGNyZWF0ZShNZXRob2QgbWV0
aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0
ZXIzKQorICAgICAgICBzdGF0aWMgUGFzc093blB0cjxHZW5lcmljV29ya2VyVGFzaz4gY3JlYXRl
KE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwgUGFy
YW0zIHBhcmFtZXRlcjMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgR2VuZXJpY1dvcmtlclRhc2sobWV0aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyLCBwYXJh
bWV0ZXIzKSk7CisgICAgICAgICAgICByZXR1cm4gbmV3IEdlbmVyaWNXb3JrZXJUYXNrKG1ldGhv
ZCwgcGFyYW1ldGVyMSwgcGFyYW1ldGVyMiwgcGFyYW1ldGVyMyk7CiAgICAgICAgIH0KIAogICAg
IHByaXZhdGU6CkBAIC0xNjksOSArMTY5LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICB0eXBlZGVmIHR5cGVuYW1lIEdlbmVyaWNXb3JrZXJUYXNrVHJhaXRzPFAzPjo6UGFyYW1UeXBl
IFBhcmFtMzsKICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBHZW5lcmljV29ya2VyVGFza1RyYWl0
czxQND46OlBhcmFtVHlwZSBQYXJhbTQ7CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8R2Vu
ZXJpY1dvcmtlclRhc2s+IGNyZWF0ZShNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwg
UGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCkK
KyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8R2VuZXJpY1dvcmtlclRhc2s+IGNyZWF0ZShNZXRo
b2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBw
YXJhbWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBHZW5lcmljV29ya2VyVGFzayhtZXRob2QsIHBhcmFtZXRlcjEsIHBh
cmFtZXRlcjIsIHBhcmFtZXRlcjMsIHBhcmFtZXRlcjQpKTsKKyAgICAgICAgICAgIHJldHVybiBu
ZXcgR2VuZXJpY1dvcmtlclRhc2sobWV0aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyLCBwYXJh
bWV0ZXIzLCBwYXJhbWV0ZXI0KTsKICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKQEAgLTIwOCw5
ICsyMDgsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
R2VuZXJpY1dvcmtlclRhc2tUcmFpdHM8UDQ+OjpQYXJhbVR5cGUgUGFyYW00OwogICAgICAgICB0
eXBlZGVmIHR5cGVuYW1lIEdlbmVyaWNXb3JrZXJUYXNrVHJhaXRzPFA1Pjo6UGFyYW1UeXBlIFBh
cmFtNTsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxHZW5lcmljV29ya2VyVGFzaz4gY3Jl
YXRlKE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwg
UGFyYW0zIHBhcmFtZXRlcjMsIFBhcmFtNCBwYXJhbWV0ZXI0LCBQYXJhbTUgcGFyYW1ldGVyNSkK
KyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8R2VuZXJpY1dvcmtlclRhc2s+IGNyZWF0ZShNZXRo
b2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBw
YXJhbWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCwgUGFyYW01IHBhcmFtZXRlcjUpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgR2VuZXJpY1dvcmtlclRhc2sobWV0
aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyLCBwYXJhbWV0ZXIzLCBwYXJhbWV0ZXI0LCBwYXJh
bWV0ZXI1KSk7CisgICAgICAgICAgICByZXR1cm4gbmV3IEdlbmVyaWNXb3JrZXJUYXNrKG1ldGhv
ZCwgcGFyYW1ldGVyMSwgcGFyYW1ldGVyMiwgcGFyYW1ldGVyMywgcGFyYW1ldGVyNCwgcGFyYW1l
dGVyNSk7CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6CkBAIC0yNTAsOSArMjUwLDkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEdlbmVyaWNXb3JrZXJU
YXNrVHJhaXRzPFA1Pjo6UGFyYW1UeXBlIFBhcmFtNTsKICAgICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBHZW5lcmljV29ya2VyVGFza1RyYWl0czxQNj46OlBhcmFtVHlwZSBQYXJhbTY7CiAKLSAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8R2VuZXJpY1dvcmtlclRhc2s+IGNyZWF0ZShNZXRob2QgbWV0
aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0
ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCwgUGFyYW01IHBhcmFtZXRlcjUsIFBhcmFtNiBwYXJhbWV0
ZXI2KQorICAgICAgICBzdGF0aWMgUGFzc093blB0cjxHZW5lcmljV29ya2VyVGFzaz4gY3JlYXRl
KE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwgUGFy
YW0zIHBhcmFtZXRlcjMsIFBhcmFtNCBwYXJhbWV0ZXI0LCBQYXJhbTUgcGFyYW1ldGVyNSwgUGFy
YW02IHBhcmFtZXRlcjYpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgR2VuZXJpY1dvcmtlclRhc2sobWV0aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyLCBwYXJh
bWV0ZXIzLCBwYXJhbWV0ZXI0LCBwYXJhbWV0ZXI1LCBwYXJhbWV0ZXI2KSk7CisgICAgICAgICAg
ICByZXR1cm4gbmV3IEdlbmVyaWNXb3JrZXJUYXNrKG1ldGhvZCwgcGFyYW1ldGVyMSwgcGFyYW1l
dGVyMiwgcGFyYW1ldGVyMywgcGFyYW1ldGVyNCwgcGFyYW1ldGVyNSwgcGFyYW1ldGVyNik7CiAg
ICAgICAgIH0KIAogICAgIHByaXZhdGU6CkBAIC0yOTUsOSArMjk1LDkgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEdlbmVyaWNXb3JrZXJUYXNrVHJhaXRz
PFA2Pjo6UGFyYW1UeXBlIFBhcmFtNjsKICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBHZW5lcmlj
V29ya2VyVGFza1RyYWl0czxQNz46OlBhcmFtVHlwZSBQYXJhbTc7CiAKLSAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8R2VuZXJpY1dvcmtlclRhc2s+IGNyZWF0ZShNZXRob2QgbWV0aG9kLCBQYXJh
bTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzLCBQYXJh
bTQgcGFyYW1ldGVyNCwgUGFyYW01IHBhcmFtZXRlcjUsIFBhcmFtNiBwYXJhbWV0ZXI2LCBQYXJh
bTcgcGFyYW1ldGVyNykKKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8R2VuZXJpY1dvcmtlclRh
c2s+IGNyZWF0ZShNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFt
ZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCwgUGFyYW01IHBhcmFt
ZXRlcjUsIFBhcmFtNiBwYXJhbWV0ZXI2LCBQYXJhbTcgcGFyYW1ldGVyNykKICAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHZW5lcmljV29ya2VyVGFzayhtZXRob2Qs
IHBhcmFtZXRlcjEsIHBhcmFtZXRlcjIsIHBhcmFtZXRlcjMsIHBhcmFtZXRlcjQsIHBhcmFtZXRl
cjUsIHBhcmFtZXRlcjYsIHBhcmFtZXRlcjcpKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgR2Vu
ZXJpY1dvcmtlclRhc2sobWV0aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyLCBwYXJhbWV0ZXIz
LCBwYXJhbWV0ZXI0LCBwYXJhbWV0ZXI1LCBwYXJhbWV0ZXI2LCBwYXJhbWV0ZXI3KTsKICAgICAg
ICAgfQogCiAgICAgcHJpdmF0ZToKQEAgLTM0Myw5ICszNDMsOSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgR2VuZXJpY1dvcmtlclRhc2tUcmFpdHM8UDc+
OjpQYXJhbVR5cGUgUGFyYW03OwogICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEdlbmVyaWNXb3Jr
ZXJUYXNrVHJhaXRzPFA4Pjo6UGFyYW1UeXBlIFBhcmFtODsKICAgICAgICAgCi0gICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNXb3JrZXJUYXNrPiBjcmVhdGUoTWV0aG9kIG1ldGhvZCwg
UGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMywg
UGFyYW00IHBhcmFtZXRlcjQsIFBhcmFtNSBwYXJhbWV0ZXI1LCBQYXJhbTYgcGFyYW1ldGVyNiwg
UGFyYW03IHBhcmFtZXRlcjcsIFBhcmFtOCBwYXJhbWV0ZXI4KQorICAgICAgICBzdGF0aWMgUGFz
c093blB0cjxHZW5lcmljV29ya2VyVGFzaz4gY3JlYXRlKE1ldGhvZCBtZXRob2QsIFBhcmFtMSBw
YXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwgUGFyYW0zIHBhcmFtZXRlcjMsIFBhcmFtNCBw
YXJhbWV0ZXI0LCBQYXJhbTUgcGFyYW1ldGVyNSwgUGFyYW02IHBhcmFtZXRlcjYsIFBhcmFtNyBw
YXJhbWV0ZXI3LCBQYXJhbTggcGFyYW1ldGVyOCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBHZW5lcmljV29ya2VyVGFzayhtZXRob2QsIHBhcmFtZXRlcjEsIHBh
cmFtZXRlcjIsIHBhcmFtZXRlcjMsIHBhcmFtZXRlcjQsIHBhcmFtZXRlcjUsIHBhcmFtZXRlcjYs
IHBhcmFtZXRlcjcsIHBhcmFtZXRlcjgpKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgR2VuZXJp
Y1dvcmtlclRhc2sobWV0aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyLCBwYXJhbWV0ZXIzLCBw
YXJhbWV0ZXI0LCBwYXJhbWV0ZXI1LCBwYXJhbWV0ZXI2LCBwYXJhbWV0ZXI3LCBwYXJhbWV0ZXI4
KTsKICAgICAgICAgfQogICAgICAgICAKICAgICBwcml2YXRlOgpAQCAtMzgwLDcgKzM4MCw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICB9OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUDEs
IHR5cGVuYW1lIE1QMT4KLSAgICBQYXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRh
c2s+IGNyZWF0ZUNhbGxiYWNrVGFzaygKKyAgICBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OlRhc2s+IGNyZWF0ZUNhbGxiYWNrVGFzaygKICAgICAgICAgdm9pZCAoKm1ldGhvZCko
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIE1QMSksCiAgICAgICAgIGNvbnN0IFAxJiBwYXJhbWV0
ZXIxKQogICAgIHsKQEAgLTM5MCw3ICszOTAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
fQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIs
IHR5cGVuYW1lIE1QMj4KLSAgICBQYXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRh
c2s+IGNyZWF0ZUNhbGxiYWNrVGFzaygKKyAgICBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OlRhc2s+IGNyZWF0ZUNhbGxiYWNrVGFzaygKICAgICAgICAgdm9pZCAoKm1ldGhvZCko
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIE1QMSwgTVAyKSwKICAgICAgICAgY29uc3QgUDEmIHBh
cmFtZXRlcjEsIGNvbnN0IFAyJiBwYXJhbWV0ZXIyKQogICAgIHsKQEAgLTQwMCw3ICs0MDAsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUDEs
IHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5
cGVuYW1lIE1QMz4KLSAgICBQYXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+
IGNyZWF0ZUNhbGxiYWNrVGFzaygKKyAgICBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ6OlRhc2s+IGNyZWF0ZUNhbGxiYWNrVGFzaygKICAgICAgICAgdm9pZCAoKm1ldGhvZCkoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIE1QMSwgTVAyLCBNUDMpLAogICAgICAgICBjb25zdCBQMSYg
cGFyYW1ldGVyMSwgY29uc3QgUDImIHBhcmFtZXRlcjIsIGNvbnN0IFAzJiBwYXJhbWV0ZXIzKQog
ICAgIHsKQEAgLTQxMSw3ICs0MTEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVu
YW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIE1QMywgdHlwZW5hbWUgUDQsIHR5cGVuYW1l
IE1QND4KLSAgICBQYXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGNyZWF0
ZUNhbGxiYWNrVGFzaygKKyAgICBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRh
c2s+IGNyZWF0ZUNhbGxiYWNrVGFzaygKICAgICAgICAgdm9pZCAoKm1ldGhvZCkoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIE1QMSwgTVAyLCBNUDMsIE1QNCksCiAgICAgICAgIGNvbnN0IFAxJiBw
YXJhbWV0ZXIxLCBjb25zdCBQMiYgcGFyYW1ldGVyMiwgY29uc3QgUDMmIHBhcmFtZXRlcjMsIGNv
bnN0IFA0JiBwYXJhbWV0ZXI0KQogICAgIHsKQEAgLTQyMyw3ICs0MjMsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1Q
MSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIE1QMywg
dHlwZW5hbWUgUDQsIHR5cGVuYW1lIE1QNCwgdHlwZW5hbWUgUDUsIHR5cGVuYW1lIE1QNT4KLSAg
ICBQYXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGNyZWF0ZUNhbGxiYWNr
VGFzaygKKyAgICBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGNyZWF0
ZUNhbGxiYWNrVGFzaygKICAgICAgICAgdm9pZCAoKm1ldGhvZCkoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIE1QMSwgTVAyLCBNUDMsIE1QNCwgTVA1KSwKICAgICAgICAgY29uc3QgUDEmIHBhcmFt
ZXRlcjEsIGNvbnN0IFAyJiBwYXJhbWV0ZXIyLCBjb25zdCBQMyYgcGFyYW1ldGVyMywgY29uc3Qg
UDQmIHBhcmFtZXRlcjQsIGNvbnN0IFA1JiBwYXJhbWV0ZXI1KQogICAgIHsKQEAgLTQzNiw3ICs0
MzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUg
UDMsIHR5cGVuYW1lIE1QMywgdHlwZW5hbWUgUDQsIHR5cGVuYW1lIE1QNCwgdHlwZW5hbWUgUDUs
IHR5cGVuYW1lIE1QNSwgdHlwZW5hbWUgUDYsIHR5cGVuYW1lIE1QNj4KLSAgICBQYXNzUmVmUHRy
PFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGNyZWF0ZUNhbGxiYWNrVGFzaygKKyAgICBQ
YXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGNyZWF0ZUNhbGxiYWNrVGFz
aygKICAgICAgICAgdm9pZCAoKm1ldGhvZCkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIE1QMSwg
TVAyLCBNUDMsIE1QNCwgTVA1LCBNUDYpLAogICAgICAgICBjb25zdCBQMSYgcGFyYW1ldGVyMSwg
Y29uc3QgUDImIHBhcmFtZXRlcjIsIGNvbnN0IFAzJiBwYXJhbWV0ZXIzLCBjb25zdCBQNCYgcGFy
YW1ldGVyNCwgY29uc3QgUDUmIHBhcmFtZXRlcjUsIGNvbnN0IFA2JiBwYXJhbWV0ZXI2KQogICAg
IHsKQEAgLTQ0OSw3ICs0NDksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgfQogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1l
IE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIE1QMywgdHlwZW5hbWUgUDQsIHR5cGVuYW1lIE1Q
NCwgdHlwZW5hbWUgUDUsIHR5cGVuYW1lIE1QNSwgdHlwZW5hbWUgUDYsIHR5cGVuYW1lIE1QNiwg
dHlwZW5hbWUgUDcsIHR5cGVuYW1lIE1QNz4KLSAgICBQYXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ6OlRhc2s+IGNyZWF0ZUNhbGxiYWNrVGFzaygKKyAgICBQYXNzT3duUHRyPFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGNyZWF0ZUNhbGxiYWNrVGFzaygKICAgICAgICAgdm9p
ZCAoKm1ldGhvZCkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIE1QMSwgTVAyLCBNUDMsIE1QNCwg
TVA1LCBNUDYsIE1QNyksCiAgICAgICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIxLCBjb25zdCBQMiYg
cGFyYW1ldGVyMiwgY29uc3QgUDMmIHBhcmFtZXRlcjMsIGNvbnN0IFA0JiBwYXJhbWV0ZXI0LCBj
b25zdCBQNSYgcGFyYW1ldGVyNSwgY29uc3QgUDYmIHBhcmFtZXRlcjYsIGNvbnN0IFA3JiBwYXJh
bWV0ZXI3KQogICAgIHsKQEAgLTQ2NCw3ICs0NjQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUg
UDIsIHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIE1QMywgdHlwZW5hbWUgUDQs
IHR5cGVuYW1lIE1QNCwgdHlwZW5hbWUgUDUsIHR5cGVuYW1lIE1QNSwgdHlwZW5hbWUgUDYsIHR5
cGVuYW1lIE1QNiwgdHlwZW5hbWUgUDcsIHR5cGVuYW1lIE1QNywgdHlwZW5hbWUgUDgsIHR5cGVu
YW1lIE1QOD4KLSAgICBQYXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGNy
ZWF0ZUNhbGxiYWNrVGFzaygKKyAgICBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6
OlRhc2s+IGNyZWF0ZUNhbGxiYWNrVGFzaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqbWV0aG9kKShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgTVAxLCBNUDIsIE1QMywgTVA0LCBNUDUsIE1QNiwgTVA3LCBNUDgp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIxLCBjb25zdCBQMiYgcGFyYW1ldGVyMiwgY29u
c3QgUDMmIHBhcmFtZXRlcjMsIGNvbnN0IFA0JiBwYXJhbWV0ZXI0LCBjb25zdCBQNSYgcGFyYW1l
dGVyNSwgY29uc3QgUDYmIHBhcmFtZXRlcjYsIGNvbnN0IFA3JiBwYXJhbWV0ZXI3LCBjb25zdCBQ
OCYgcGFyYW1ldGVyOCkKICAgICB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
Q29udGV4dC5jcHAgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAKaW5kZXggOWE4
ODMwOS4uZTgyMzI3OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQu
Y3BwCisrKyBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcApAQCAtMTYyLDcgKzE2
Miw3IEBAIHZvaWQgV29ya2VyQ29udGV4dDo6c2NyaXB0SW1wb3J0ZWQodW5zaWduZWQgbG9uZywg
Y29uc3QgU3RyaW5nJikKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIFdvcmtlckNv
bnRleHQ6OnBvc3RUYXNrKFBhc3NSZWZQdHI8VGFzaz4gdGFzaykKK3ZvaWQgV29ya2VyQ29udGV4
dDo6cG9zdFRhc2soUGFzc093blB0cjxUYXNrPiB0YXNrKQogewogICAgIHRocmVhZCgpLT5ydW5M
b29wKCkucG9zdFRhc2sodGFzayk7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvV29y
a2VyQ29udGV4dC5oIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaAppbmRleCA5NzI1
Y2Y3Li5mMzdkNDJjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5o
CisrKyBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmgKQEAgLTc0LDcgKzc0LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVzb3VyY2VSZXRyaWV2
ZWRCeVhNTEh0dHBSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgU2NyaXB0
U3RyaW5nJiBzb3VyY2VTdHJpbmcpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc2NyaXB0SW1wb3J0
ZWQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVN0cmluZyk7
CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RUYXNrKFBhc3NSZWZQdHI8VGFzaz4pOyAvLyBF
eGVjdXRlcyB0aGUgdGFzayBvbiBjb250ZXh0J3MgdGhyZWFkIGFzeW5jaHJvbm91c2x5LgorICAg
ICAgICB2aXJ0dWFsIHZvaWQgcG9zdFRhc2soUGFzc093blB0cjxUYXNrPik7IC8vIEV4ZWN1dGVz
IHRoZSB0YXNrIG9uIGNvbnRleHQncyB0aHJlYWQgYXN5bmNocm9ub3VzbHkuCiAKICAgICAgICAg
Ly8gV29ya2VyR2xvYmFsU2NvcGUKICAgICAgICAgV29ya2VyQ29udGV4dCogc2VsZigpIHsgcmV0
dXJuIHRoaXM7IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJMb2FkZXJQcm94
eS5oIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlckxvYWRlclByb3h5LmgKaW5kZXggYWM3Y2RhMS4u
ZmUxYmY1MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlckxvYWRlclByb3h5LmgK
KysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlckxvYWRlclByb3h5LmgKQEAgLTM0LDcgKzM0LDcg
QEAKICNpZiBFTkFCTEUoV09SS0VSUykKIAogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3du
UHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTAsMTEgKzUwLDExIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB+V29ya2VyTG9hZGVyUHJveHkoKSB7IH0K
IAogICAgICAgICAvLyBQb3N0cyBhIHRhc2sgdG8gdGhlIHRocmVhZCB3aGljaCBydW5zIHRoZSBs
b2FkaW5nIGNvZGUgKG5vcm1hbGx5LCB0aGUgbWFpbiB0aHJlYWQpLgotICAgICAgICB2aXJ0dWFs
IHZvaWQgcG9zdFRhc2tUb0xvYWRlcihQYXNzUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6
OlRhc2s+KSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0VGFza1RvTG9hZGVyKFBhc3NP
d25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4pID0gMDsKIAogICAgICAgICAvLyBQ
b3N0cyBjYWxsYmFja3MgZnJvbSBsb2FkaW5nIGNvZGUgdG8gdGhlIFdvcmtlckNvbnRleHQuIFRo
ZSAnbW9kZScgaXMgdXNlZCB0byBkaWZmZXJlbnRpYXRlCiAgICAgICAgIC8vIHNwZWNpZmljIHN5
bmNocm9ub3VzIGxvYWRpbmcgcmVxdWVzdHMgc28gdGhleSBjYW4gYmUgJ25lc3RlZCcsIHBlciBz
cGVjLgotICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0
KFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4sIGNvbnN0IFN0cmluZyYg
bW9kZSkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJD
b250ZXh0KFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4sIGNvbnN0IFN0
cmluZyYgbW9kZSkgPSAwOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAgYi9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwCmluZGV4IDBiNjY2OTQuLjJlMWRmZTAg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAKKysr
IGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcApAQCAtNDYsOSArNDYs
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIE1lc3NhZ2VXb3JrZXJDb250ZXh0VGFz
ayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxNZXNzYWdlV29ya2VyQ29udGV4dFRhc2s+IGNyZWF0ZShQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbWVzc2FnZSwgUGFzc093blB0cjxNZXNzYWdlUG9y
dENoYW5uZWxBcnJheT4gY2hhbm5lbHMpCisgICAgc3RhdGljIFBhc3NPd25QdHI8TWVzc2FnZVdv
cmtlckNvbnRleHRUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IG1lc3NhZ2UsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZXNzYWdlV29ya2VyQ29udGV4dFRh
c2sobWVzc2FnZSwgY2hhbm5lbHMpKTsKKyAgICAgICAgcmV0dXJuIG5ldyBNZXNzYWdlV29ya2Vy
Q29udGV4dFRhc2sobWVzc2FnZSwgY2hhbm5lbHMpOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTc0
LDkgKzc0LDkgQEAgcHJpdmF0ZToKIAogY2xhc3MgTWVzc2FnZVdvcmtlclRhc2sgOiBwdWJsaWMg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8TWVzc2FnZVdvcmtlclRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gbWVzc2FnZSwgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hh
bm5lbHMsIFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtZXNzYWdpbmdQcm94eSkKKyAgICBzdGF0aWMg
UGFzc093blB0cjxNZXNzYWdlV29ya2VyVGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBtZXNzYWdlLCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5
PiBjaGFubmVscywgV29ya2VyTWVzc2FnaW5nUHJveHkqIG1lc3NhZ2luZ1Byb3h5KQogICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZXNzYWdlV29ya2VyVGFzayhtZXNzYWdlLCBj
aGFubmVscywgbWVzc2FnaW5nUHJveHkpKTsKKyAgICAgICAgcmV0dXJuIG5ldyBNZXNzYWdlV29y
a2VyVGFzayhtZXNzYWdlLCBjaGFubmVscywgbWVzc2FnaW5nUHJveHkpOwogICAgIH0KIAogcHJp
dmF0ZToKQEAgLTEwNSw5ICsxMDUsOSBAQCBwcml2YXRlOgogCiBjbGFzcyBXb3JrZXJFeGNlcHRp
b25UYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewogcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdvcmtlckV4Y2VwdGlvblRhc2s+IGNyZWF0ZShjb25zdCBT
dHJpbmcmIGVycm9yTWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNl
VVJMLCBXb3JrZXJNZXNzYWdpbmdQcm94eSogbWVzc2FnaW5nUHJveHkpCisgICAgc3RhdGljIFBh
c3NPd25QdHI8V29ya2VyRXhjZXB0aW9uVGFzaz4gY3JlYXRlKGNvbnN0IFN0cmluZyYgZXJyb3JN
ZXNzYWdlLCBpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIFdvcmtlck1l
c3NhZ2luZ1Byb3h5KiBtZXNzYWdpbmdQcm94eSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgV29ya2VyRXhjZXB0aW9uVGFzayhlcnJvck1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNv
dXJjZVVSTCwgbWVzc2FnaW5nUHJveHkpKTsKKyAgICAgICAgcmV0dXJuIG5ldyBXb3JrZXJFeGNl
cHRpb25UYXNrKGVycm9yTWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlVVJMLCBtZXNzYWdpbmdQ
cm94eSk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtMTQxLDkgKzE0MSw5IEBAIHByaXZhdGU6CiAK
IGNsYXNzIFdvcmtlckNvbnRleHREZXN0cm95ZWRUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ6OlRhc2sgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdvcmtlckNv
bnRleHREZXN0cm95ZWRUYXNrPiBjcmVhdGUoV29ya2VyTWVzc2FnaW5nUHJveHkqIG1lc3NhZ2lu
Z1Byb3h5KQorICAgIHN0YXRpYyBQYXNzT3duUHRyPFdvcmtlckNvbnRleHREZXN0cm95ZWRUYXNr
PiBjcmVhdGUoV29ya2VyTWVzc2FnaW5nUHJveHkqIG1lc3NhZ2luZ1Byb3h5KQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXb3JrZXJDb250ZXh0RGVzdHJveWVkVGFzayhtZXNz
YWdpbmdQcm94eSkpOworICAgICAgICByZXR1cm4gbmV3IFdvcmtlckNvbnRleHREZXN0cm95ZWRU
YXNrKG1lc3NhZ2luZ1Byb3h5KTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0xNjIsOSArMTYyLDkg
QEAgcHJpdmF0ZToKIAogY2xhc3MgV29ya2VyVGVybWluYXRlVGFzayA6IHB1YmxpYyBTY3JpcHRF
eGVjdXRpb25Db250ZXh0OjpUYXNrIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxX
b3JrZXJUZXJtaW5hdGVUYXNrPiBjcmVhdGUoV29ya2VyTWVzc2FnaW5nUHJveHkqIG1lc3NhZ2lu
Z1Byb3h5KQorICAgIHN0YXRpYyBQYXNzT3duUHRyPFdvcmtlclRlcm1pbmF0ZVRhc2s+IGNyZWF0
ZShXb3JrZXJNZXNzYWdpbmdQcm94eSogbWVzc2FnaW5nUHJveHkpCiAgICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFdvcmtlclRlcm1pbmF0ZVRhc2sobWVzc2FnaW5nUHJveHkpKTsK
KyAgICAgICAgcmV0dXJuIG5ldyBXb3JrZXJUZXJtaW5hdGVUYXNrKG1lc3NhZ2luZ1Byb3h5KTsK
ICAgICB9CiAKIHByaXZhdGU6CkBAIC0xODMsOSArMTgzLDkgQEAgcHJpdmF0ZToKIAogY2xhc3Mg
V29ya2VyVGhyZWFkQWN0aXZpdHlSZXBvcnRUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OlRhc2sgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdvcmtlclRocmVh
ZEFjdGl2aXR5UmVwb3J0VGFzaz4gY3JlYXRlKFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtZXNzYWdp
bmdQcm94eSwgYm9vbCBjb25maXJtaW5nTWVzc2FnZSwgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkp
CisgICAgc3RhdGljIFBhc3NPd25QdHI8V29ya2VyVGhyZWFkQWN0aXZpdHlSZXBvcnRUYXNrPiBj
cmVhdGUoV29ya2VyTWVzc2FnaW5nUHJveHkqIG1lc3NhZ2luZ1Byb3h5LCBib29sIGNvbmZpcm1p
bmdNZXNzYWdlLCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSkKICAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgV29ya2VyVGhyZWFkQWN0aXZpdHlSZXBvcnRUYXNrKG1lc3NhZ2luZ1By
b3h5LCBjb25maXJtaW5nTWVzc2FnZSwgaGFzUGVuZGluZ0FjdGl2aXR5KSk7CisgICAgICAgIHJl
dHVybiBuZXcgV29ya2VyVGhyZWFkQWN0aXZpdHlSZXBvcnRUYXNrKG1lc3NhZ2luZ1Byb3h5LCBj
b25maXJtaW5nTWVzc2FnZSwgaGFzUGVuZGluZ0FjdGl2aXR5KTsKICAgICB9CiAKIHByaXZhdGU6
CkBAIC0yNTcsNyArMjU3LDcgQEAgdm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6cG9zdE1lc3Nh
Z2VUb1dvcmtlckNvbnRleHQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXAKICAgICAgICAgbV9x
dWV1ZWRFYXJseVRhc2tzLmFwcGVuZChNZXNzYWdlV29ya2VyQ29udGV4dFRhc2s6OmNyZWF0ZSht
ZXNzYWdlLCBjaGFubmVscy5yZWxlYXNlKCkpKTsKIH0KIAotdm9pZCBXb3JrZXJNZXNzYWdpbmdQ
cm94eTo6cG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KFBhc3NSZWZQdHI8U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaywgY29uc3QgU3RyaW5nJiBtb2RlKQordm9pZCBXb3Jr
ZXJNZXNzYWdpbmdQcm94eTo6cG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KFBhc3NPd25Q
dHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaywgY29uc3QgU3RyaW5nJiBtb2Rl
KQogewogICAgIGlmIChtX2Fza2VkVG9UZXJtaW5hdGUpCiAgICAgICAgIHJldHVybjsKQEAgLTI2
Niw3ICsyNjYsNyBAQCB2b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojpwb3N0VGFza0Zvck1vZGVU
b1dvcmtlckNvbnRleHQoUGFzc1JlZlB0cjxTY3JpcHRFeGVjdQogICAgIG1fd29ya2VyVGhyZWFk
LT5ydW5Mb29wKCkucG9zdFRhc2tGb3JNb2RlKHRhc2ssIG1vZGUpOwogfQogCi12b2lkIFdvcmtl
ck1lc3NhZ2luZ1Byb3h5Ojpwb3N0VGFza1RvTG9hZGVyKFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6VGFzaz4gdGFzaykKK3ZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6OnBvc3RU
YXNrVG9Mb2FkZXIoUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNr
KQogewogICAgIC8vIEZJWE1FOiBJbiBjYXNlIG9mIG5lc3RlZCB3b3JrZXJzLCB0aGlzIHNob3Vs
ZCBnbyBkaXJlY3RseSB0byB0aGUgcm9vdCBEb2N1bWVudCBjb250ZXh0LgogICAgIEFTU0VSVCht
X3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzRG9jdW1lbnQoKSk7CkBAIC0zMDQsNyArMzA0LDcg
QEAgdm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6d29ya2VyVGhyZWFkQ3JlYXRlZChQYXNzUmVm
UHRyPERlZGljYXRlZFdvcmtlclRocmVhZD4KICAgICAgICAgbV93b3JrZXJUaHJlYWRIYWRQZW5k
aW5nQWN0aXZpdHkgPSB0cnVlOyAvLyBXb3JrZXIgaW5pdGlhbGl6YXRpb24gbWVhbnMgYSBwZW5k
aW5nIGFjdGl2aXR5LgogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YXNrQ291
bnQ7ICsraSkKLSAgICAgICAgICAgIG1fd29ya2VyVGhyZWFkLT5ydW5Mb29wKCkucG9zdFRhc2so
bV9xdWV1ZWRFYXJseVRhc2tzW2ldKTsKKyAgICAgICAgICAgIG1fd29ya2VyVGhyZWFkLT5ydW5M
b29wKCkucG9zdFRhc2sobV9xdWV1ZWRFYXJseVRhc2tzW2ldLnJlbGVhc2UoKSk7CiAgICAgICAg
IG1fcXVldWVkRWFybHlUYXNrcy5jbGVhcigpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5oIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtl
ck1lc3NhZ2luZ1Byb3h5LmgKaW5kZXggNzU0MTAyYS4uOTBiODdmNCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmgKKysrIGIvV2ViQ29yZS93b3JrZXJz
L1dvcmtlck1lc3NhZ2luZ1Byb3h5LmgKQEAgLTcxLDggKzcxLDggQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICAvLyBJbXBsZW1lbnRhdGlvbiBvZiBXb3JrZXJMb2FkZXJQcm94eS4KICAg
ICAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIG9uIGRpZmZlcmVudCB0aHJlYWRzIHRv
IHNjaGVkdWxlIGxvYWRpbmcKICAgICAgICAgLy8gcmVxdWVzdHMgYW5kIHRvIHNlbmQgY2FsbGJh
Y2tzIGJhY2sgdG8gV29ya2VyQ29udGV4dC4KLSAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RUYXNr
VG9Mb2FkZXIoUGFzc1JlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPik7Ci0gICAg
ICAgIHZpcnR1YWwgdm9pZCBwb3N0VGFza0Zvck1vZGVUb1dvcmtlckNvbnRleHQoUGFzc1JlZlB0
cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHBvc3RUYXNrVG9Mb2FkZXIoUGFzc093blB0cjxTY3JpcHRFeGVj
dXRpb25Db250ZXh0OjpUYXNrPik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0VGFza0Zvck1v
ZGVUb1dvcmtlckNvbnRleHQoUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNr
PiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKIAogICAgICAgICB2b2lkIHdvcmtlclRocmVhZENyZWF0
ZWQoUGFzc1JlZlB0cjxEZWRpY2F0ZWRXb3JrZXJUaHJlYWQ+KTsKIApAQCAtMTAwLDcgKzEwMCw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBib29sIG1fYXNrZWRUb1Rlcm1pbmF0
ZTsKIAotICAgICAgICBWZWN0b3I8UmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+
ID4gbV9xdWV1ZWRFYXJseVRhc2tzOyAvLyBUYXNrcyBhcmUgcXVldWVkIGhlcmUgdW50aWwgdGhl
cmUncyBhIHRocmVhZCBvYmplY3QgY3JlYXRlZC4KKyAgICAgICAgVmVjdG9yPE93blB0cjxTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiA+IG1fcXVldWVkRWFybHlUYXNrczsgLy8gVGFza3Mg
YXJlIHF1ZXVlZCBoZXJlIHVudGlsIHRoZXJlJ3MgYSB0aHJlYWQgb2JqZWN0IGNyZWF0ZWQuCiAg
ICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlclJ1bkxvb3AuY3BwIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlclJ1bkxvb3AuY3Bw
CmluZGV4IDM5YjIxYzYuLjVlOTAzNzYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJSdW5Mb29wLmNwcAorKysgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyUnVuTG9vcC5jcHAKQEAg
LTY0LDI3ICs2NCw2IEBAIHByaXZhdGU6CiAgICAgZG91YmxlIG1fbmV4dEZpcmVUaW1lOwogfTsK
IAotY2xhc3MgV29ya2VyUnVuTG9vcDo6VGFzayA6IHB1YmxpYyBSZWZDb3VudGVkPFRhc2s+IHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrLCBjb25zdCBTdHJpbmcmIG1vZGUpCi0g
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRhc2sodGFzaywgbW9kZSkpOwotICAg
IH0KLQotICAgIGNvbnN0IFN0cmluZyYgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQot
ICAgIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkgeyBt
X3Rhc2stPnBlcmZvcm1UYXNrKGNvbnRleHQpOyB9Ci0KLXByaXZhdGU6Ci0gICAgVGFzayhQYXNz
UmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2ssIGNvbnN0IFN0cmluZyYg
bW9kZSkKLSAgICAgICAgOiBtX3Rhc2sodGFzaykKLSAgICAgICAgLCBtX21vZGUobW9kZS5jcm9z
c1RocmVhZFN0cmluZygpKQotICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8U2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6VGFzaz4gbV90YXNrOwotICAgIFN0cmluZyBtX21vZGU7Ci19OwotCiBjbGFz
cyBNb2RlUHJlZGljYXRlIHsKIHB1YmxpYzoKICAgICBNb2RlUHJlZGljYXRlKGNvbnN0IFN0cmlu
ZyYgbW9kZSkKQEAgLTk4LDcgKzc3LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9kZWZh
dWx0TW9kZTsKICAgICB9CiAKLSAgICBib29sIG9wZXJhdG9yKCkoUGFzc1JlZlB0cjxXb3JrZXJS
dW5Mb29wOjpUYXNrPiB0YXNrKSBjb25zdAorICAgIGJvb2wgb3BlcmF0b3IoKShXb3JrZXJSdW5M
b29wOjpUYXNrKiB0YXNrKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fZGVmYXVsdE1v
ZGUgfHwgbV9tb2RlID09IHRhc2stPm1vZGUoKTsKICAgICB9CkBAIC0xNjksOSArMTQ4LDkgQEAg
TWVzc2FnZVF1ZXVlV2FpdFJlc3VsdCBXb3JrZXJSdW5Mb29wOjpydW5Jbk1vZGUoV29ya2VyQ29u
dGV4dCogY29udGV4dCwgY29uc3QgTW8KICAgICBBU1NFUlQoY29udGV4dC0+dGhyZWFkKCkpOwog
ICAgIEFTU0VSVChjb250ZXh0LT50aHJlYWQoKS0+dGhyZWFkSUQoKSA9PSBjdXJyZW50VGhyZWFk
KCkpOwogCi0gICAgZG91YmxlIGFic29sdXRlVGltZSA9IChwcmVkaWNhdGUuaXNEZWZhdWx0TW9k
ZSgpICYmIG1fc2hhcmVkVGltZXItPmlzQWN0aXZlKCkpID8gbV9zaGFyZWRUaW1lci0+ZmlyZVRp
bWUoKSA6IE1lc3NhZ2VRdWV1ZTxSZWZQdHI8VGFzaz4gPjo6aW5maW5pdGVUaW1lKCk7Ci0gICAg
UmVmUHRyPFRhc2s+IHRhc2s7Ci0gICAgTWVzc2FnZVF1ZXVlV2FpdFJlc3VsdCByZXN1bHQgPSBt
X21lc3NhZ2VRdWV1ZS53YWl0Rm9yTWVzc2FnZUZpbHRlcmVkV2l0aFRpbWVvdXQodGFzaywgcHJl
ZGljYXRlLCBhYnNvbHV0ZVRpbWUpOworICAgIGRvdWJsZSBhYnNvbHV0ZVRpbWUgPSAocHJlZGlj
YXRlLmlzRGVmYXVsdE1vZGUoKSAmJiBtX3NoYXJlZFRpbWVyLT5pc0FjdGl2ZSgpKSA/IG1fc2hh
cmVkVGltZXItPmZpcmVUaW1lKCkgOiBNZXNzYWdlUXVldWU8VGFzaz46OmluZmluaXRlVGltZSgp
OworICAgIE1lc3NhZ2VRdWV1ZVdhaXRSZXN1bHQgcmVzdWx0OworICAgIE93blB0cjxXb3JrZXJS
dW5Mb29wOjpUYXNrPiB0YXNrID0gbV9tZXNzYWdlUXVldWUud2FpdEZvck1lc3NhZ2VGaWx0ZXJl
ZFdpdGhUaW1lb3V0KHJlc3VsdCwgcHJlZGljYXRlLCBhYnNvbHV0ZVRpbWUpOwogCiAgICAgLy8g
SWYgdGhlIGNvbnRleHQgaXMgY2xvc2luZywgZG9uJ3QgZGlzcGF0Y2ggYW55IGZ1cnRoZXIgdGFz
a3MgKHBlciBzZWN0aW9uIDQuMS4xIG9mIHRoZSBXZWIgV29ya2VycyBzcGVjKS4KICAgICBpZiAo
Y29udGV4dC0+aXNDbG9zaW5nKCkpCkBAIC0xOTgsMTYgKzE3NywzMCBAQCB2b2lkIFdvcmtlclJ1
bkxvb3A6OnRlcm1pbmF0ZSgpCiAgICAgbV9tZXNzYWdlUXVldWUua2lsbCgpOwogfQogCi12b2lk
IFdvcmtlclJ1bkxvb3A6OnBvc3RUYXNrKFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4
dDo6VGFzaz4gdGFzaykKK3ZvaWQgV29ya2VyUnVuTG9vcDo6cG9zdFRhc2soUGFzc093blB0cjxT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrKQogewogICAgIHBvc3RUYXNrRm9yTW9k
ZSh0YXNrLCBkZWZhdWx0TW9kZSgpKTsKIH0KIAotdm9pZCBXb3JrZXJSdW5Mb29wOjpwb3N0VGFz
a0Zvck1vZGUoUGFzc1JlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrLCBj
b25zdCBTdHJpbmcmIG1vZGUpCit2b2lkIFdvcmtlclJ1bkxvb3A6OnBvc3RUYXNrRm9yTW9kZShQ
YXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2ssIGNvbnN0IFN0cmlu
ZyYgbW9kZSkKIHsKICAgICBtX21lc3NhZ2VRdWV1ZS5hcHBlbmQoVGFzazo6Y3JlYXRlKHRhc2ss
IG1vZGUuY3Jvc3NUaHJlYWRTdHJpbmcoKSkpOwogfQogCitQYXNzT3duUHRyPFdvcmtlclJ1bkxv
b3A6OlRhc2s+IFdvcmtlclJ1bkxvb3A6OlRhc2s6OmNyZWF0ZShQYXNzT3duUHRyPFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2ssIGNvbnN0IFN0cmluZyYgbW9kZSkKK3sKKyAgICBy
ZXR1cm4gbmV3IFRhc2sodGFzaywgbW9kZSk7Cit9CisKK3ZvaWQgV29ya2VyUnVuTG9vcDo6VGFz
azo6cGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkgeyBtX3Rhc2st
PnBlcmZvcm1UYXNrKGNvbnRleHQpOyB9CisKK1dvcmtlclJ1bkxvb3A6OlRhc2s6OlRhc2soUGFz
c093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrLCBjb25zdCBTdHJpbmcm
IG1vZGUpCisgICAgOiBtX3Rhc2sodGFzaykKKyAgICAsIG1fbW9kZShtb2RlLmNyb3NzVGhyZWFk
U3RyaW5nKCkpCit7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8g
RU5BQkxFKFdPUktFUlMpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyUnVuTG9v
cC5oIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlclJ1bkxvb3AuaAppbmRleCA1Zjc0ZjAxLi45ZDRl
ZGZkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyUnVuTG9vcC5oCisrKyBiL1dl
YkNvcmUvd29ya2Vycy9Xb3JrZXJSdW5Mb29wLmgKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRl
ICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSA8d3RmL01lc3NhZ2VRdWV1ZS5o
PgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
NTgsMTggKzU4LDMyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCB0ZXJtaW5h
dGUoKTsKICAgICAgICAgYm9vbCB0ZXJtaW5hdGVkKCkgeyByZXR1cm4gbV9tZXNzYWdlUXVldWUu
a2lsbGVkKCk7IH0KIAotICAgICAgICB2b2lkIHBvc3RUYXNrKFBhc3NSZWZQdHI8U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6VGFzaz4pOwotICAgICAgICB2b2lkIHBvc3RUYXNrRm9yTW9kZShQYXNz
UmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+LCBjb25zdCBTdHJpbmcmIG1vZGUp
OworICAgICAgICB2b2lkIHBvc3RUYXNrKFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4
dDo6VGFzaz4pOworICAgICAgICB2b2lkIHBvc3RUYXNrRm9yTW9kZShQYXNzT3duUHRyPFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+LCBjb25zdCBTdHJpbmcmIG1vZGUpOwogCiAgICAgICAg
IHVuc2lnbmVkIGxvbmcgY3JlYXRlVW5pcXVlSWQoKSB7IHJldHVybiArK21fdW5pcXVlSWQ7IH0K
IAogICAgICAgICBzdGF0aWMgU3RyaW5nIGRlZmF1bHRNb2RlKCk7Ci0gICAgICAgIGNsYXNzIFRh
c2s7CisKKyAgICAgICAgY2xhc3MgVGFzayA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CisgICAgICAg
IHB1YmxpYzoKKyAgICAgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPFRhc2s+IGNyZWF0ZShQYXNz
T3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2ssIGNvbnN0IFN0cmluZyYg
bW9kZSk7CisgICAgICAgICAgICB+VGFzaygpIHsgfQorICAgICAgICAgICAgY29uc3QgU3RyaW5n
JiBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CisgICAgICAgICAgICB2b2lkIHBlcmZv
cm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpOworCisgICAgICAgIHByaXZh
dGU6CisgICAgICAgICAgICBUYXNrKFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6
VGFzaz4gdGFzaywgY29uc3QgU3RyaW5nJiBtb2RlKTsKKyAgICAgICAgCisgICAgICAgICAgICBP
d25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gbV90YXNrOworICAgICAgICAgICAg
U3RyaW5nIG1fbW9kZTsKKyAgICAgICAgfTsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVu
ZCBjbGFzcyBSdW5Mb29wU2V0dXA7CiAgICAgICAgIE1lc3NhZ2VRdWV1ZVdhaXRSZXN1bHQgcnVu
SW5Nb2RlKFdvcmtlckNvbnRleHQqLCBjb25zdCBNb2RlUHJlZGljYXRlJik7CiAKLSAgICAgICAg
TWVzc2FnZVF1ZXVlPFJlZlB0cjxUYXNrPiA+IG1fbWVzc2FnZVF1ZXVlOworICAgICAgICBNZXNz
YWdlUXVldWU8VGFzaz4gbV9tZXNzYWdlUXVldWU7CiAgICAgICAgIE93blB0cjxXb3JrZXJTaGFy
ZWRUaW1lcj4gbV9zaGFyZWRUaW1lcjsKICAgICAgICAgaW50IG1fbmVzdGVkQ291bnQ7CiAgICAg
ICAgIHVuc2lnbmVkIGxvbmcgbV91bmlxdWVJZDsK
</data>
<flag name="review"
          id="23756"
          type_id="1"
          status="+"
          setter="levin"
    />
    <flag name="commit-queue"
          id="23757"
          type_id="3"
          status="-"
          setter="dimich"
    />
          </attachment>
      

    </bug>

</bugzilla>