<?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>28170</bug_id>
          
          <creation_ts>2009-08-10 21:36:45 -0700</creation_ts>
          <short_desc>SharedWorkers do not exit when the last parent document exits</short_desc>
          <delta_ts>2009-08-11 18:06:44 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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>28136</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andrew Wilson">atwilson</reporter>
          <assigned_to name="Andrew Wilson">atwilson</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>138904</commentid>
    <comment_count>0</comment_count>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-08-10 21:36:45 -0700</bug_when>
    <thetext>The SharedWorker lifecycle is tied to the lifecycle of its associated documents.

When the last document associated with a SharedWorker exits, the worker needs to be shut down.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138905</commentid>
    <comment_count>1</comment_count>
      <attachid>34539</attachid>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-08-10 21:51:03 -0700</bug_when>
    <thetext>Created attachment 34539
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138922</commentid>
    <comment_count>2</comment_count>
      <attachid>34539</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-08-11 02:10:38 -0700</bug_when>
    <thetext>Comment on attachment 34539
proposed patch

Just some style nits that I saw while looking this over quickly.  More comments tomorrow.

&gt; diff --git a/WebCore/workers/DefaultSharedWorkerRepository.cpp b/WebCore/workers/DefaultSharedWorkerRepository.cpp
&gt; -SharedWorkerProxy::SharedWorkerProxy(const String&amp; name, const KURL&amp; url)
&gt; +SharedWorkerProxy::SharedWorkerProxy(const String&amp; name, const KURL&amp; url, PassRefPtr&lt;SecurityOrigin&gt; origin)
&gt;      : m_closing(false)
&gt;      , m_name(name.copy())
&gt;      , m_url(url.copy())
&gt; +    , m_origin(origin)
&gt; +{

This should assert that m_origin only has one ref.


&gt; +    for (SharedWorkerProxyRepository::iterator iter = m_cache.begin() ; iter != m_cache.end() ; ++iter) {

There are lots of places where there are spaces before &quot;;&quot; in for loops.  There shouldn&apos;t be.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139052</commentid>
    <comment_count>3</comment_count>
      <attachid>34539</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-08-11 11:44:24 -0700</bug_when>
    <thetext>Comment on attachment 34539
proposed patch

Final comments for this version of the patch.


&gt; diff --git a/LayoutTests/fast/workers/shared-worker-shared.html-disabled b/LayoutTests/fast/workers/shared-worker-shared.html-disabled

How is this testing that previous incarnations of the shared worker are closed?  Maybe you can add a comment in here?


&gt; diff --git a/WebCore/loader/FrameLoader.cpp b/WebCore/loader/FrameLoader.cpp
&gt; +#if ENABLE(SHARED_WORKERS)
&gt; +        &amp;&amp; !SharedWorkerRepository::hasSharedWorkers(m_frame-&gt;document())

Why can&apos;t the page be cache when it has shared workers? Oh nice, you put this in the changelog!
Nevermind.


&gt; diff --git a/WebCore/workers/DefaultSharedWorkerRepository.cpp b/WebCore/workers/DefaultSharedWorkerRepository.cpp

&gt; +    bool isDocumentInWorkerDocuments(Document* document) { return m_documentSet.contains(document); }

Suggest: isInWorkerDocuments or inWorkerDocuments


About &quot;m_documentSet&quot;, it seems like you&apos;re using &quot;workerDocuments&quot; consistently for this, so why not name the variable that as well?


&gt; +void SharedWorkerProxy::close()
&gt; +{

ASSERT(!m_closing);

&gt; +    m_closing = true;
&gt; +    // Stop the worker thread - the proxy will stay around until we get workerThreadExited() notification.
&gt; +    if (m_thread)
&gt; +        m_thread-&gt;stop();
&gt;  }


&gt; @@ -203,7 +237,7 @@ DefaultSharedWorkerRepository&amp; DefaultSharedWorkerRepository::instance()
&gt;  void DefaultSharedWorkerRepository::workerScriptLoaded(SharedWorkerProxy&amp; proxy, const String&amp; userAgent, const String&amp; workerScript, PassOwnPtr&lt;MessagePortChannel&gt; port)
&gt;  {
&gt;      MutexLocker lock(m_lock);
&gt; -    if (proxy.closing())
&gt; +    if (proxy.isClosing())
&gt;          return;
&gt;  
&gt;      // Another loader may have already started up a thread for this proxy - if so, just send a connect to the pre-existing thread.
&gt; @@ -220,6 +254,44 @@ void SharedWorkerRepository::connect(PassRefPtr&lt;SharedWorker&gt; worker, PassOwnPtr
&gt;      DefaultSharedWorkerRepository::instance().connectToWorker(worker, port, url, name, ec);
&gt;  }
&gt;  
&gt; +void SharedWorkerRepository::documentDetached(Document* document)
&gt; +{
&gt; +    DefaultSharedWorkerRepository::instance().documentDetached(document);
&gt; +}
&gt; +
&gt; +bool SharedWorkerRepository::hasSharedWorkers(Document* document)
&gt; +{
&gt; +    return DefaultSharedWorkerRepository::instance().hasSharedWorkers(document);
&gt; +}
&gt; +
&gt; +bool DefaultSharedWorkerRepository::hasSharedWorkers(Document* document)
&gt; +{
&gt; +    MutexLocker lock(m_lock);
&gt; +    for (SharedWorkerProxyRepository::iterator iter = m_cache.begin() ; iter != m_cache.end() ; ++iter) {

Prefer indexes over iterators for vector



&gt; @@ -247,17 +319,13 @@ PassRefPtr&lt;SharedWorkerProxy&gt; DefaultSharedWorkerRepository::getProxy(const Stri

&gt; +    for (SharedWorkerProxyRepository::iterator iter = m_cache.begin() ; iter &lt; m_cache.end() ; ++iter) {

Prefer indexes over iterators for vectors.


&gt; +        if (!(*iter)-&gt;isClosing() &amp;&amp; (*iter)-&gt;matches(name, origin))
&gt; +            return *iter;
&gt;      }
&gt; +    // Proxy is not in the repository currently - create a new one.
&gt; +    RefPtr&lt;SharedWorkerProxy&gt; proxy = SharedWorkerProxy::create(name, url, origin.release());
&gt; +    m_cache.append(proxy);
&gt;      return proxy;

Slightly better to use release() here. (Avoids unnecessary ref count fuzzing.)



&gt; diff --git a/WebCore/workers/DefaultSharedWorkerRepository.h b/WebCore/workers/DefaultSharedWorkerRepository.h
&gt; @@ -59,6 +61,14 @@ namespace WebCore {
&gt; +        // Notification that a document has been detached, so we can shutdown any associated SharedWorkers.

Suggest removing &quot;so...&quot; see explanation for similar suggestions (near the end of this review).

&gt; +        void documentDetached(Document*);

&gt; +        // Invoked when a thread has exited, so we can remove the SharedWorkerProxy from the repository.
Suggest removing &quot;so...&quot; see explanation for similar suggestions (near the end of this review).
&gt; +        void removeProxy(SharedWorkerProxy*);


&gt; +        SharedWorkerProxyRepository m_cache;

Consider fixing the name &quot;cache&quot; since this isn&apos;t a cache.


&gt; diff --git a/WebCore/workers/SharedWorkerRepository.h b/WebCore/workers/SharedWorkerRepository.h
&gt; +        // Invoked when a document has been detached, so we can shut down any associated workers.

&quot;so we can shut down any associated workers.&quot;
This part of the comment can be easily become obsolete in lots of ways. I&apos;d suggest removing it.


&gt; +        static void documentDetached(Document*);
&gt; +
&gt; +        // Returns true if the passed document is associated with any SharedWorkers, to allow FrameLoader to determine if the Document can be cached in the page cache.

This part of the comment can be easily become obsolete in lots of ways.
  &quot; to allow FrameLoader to determine if the Document can be cached in the page cache.&quot;
I&apos;d suggest removing it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139171</commentid>
    <comment_count>4</comment_count>
      <attachid>34616</attachid>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-08-11 17:01:16 -0700</bug_when>
    <thetext>Created attachment 34616
Patch addressing Levin&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139173</commentid>
    <comment_count>5</comment_count>
      <attachid>34616</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-08-11 17:12:38 -0700</bug_when>
    <thetext>Comment on attachment 34616
Patch addressing Levin&apos;s comments

You have a duplicate changelog entry in WebCore/ChangeLog. Please fix on landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139193</commentid>
    <comment_count>6</comment_count>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-08-11 18:06:44 -0700</bug_when>
    <thetext>Committed as r47078.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34539</attachid>
            <date>2009-08-10 21:51:03 -0700</date>
            <delta_ts>2009-08-11 17:01:16 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>x</filename>
            <type>text/plain</type>
            <size>22343</size>
            <attacher name="Andrew Wilson">atwilson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA4NjQ3MmI1Li5kYTRhN2UzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMDktMDgt
MTAgIERyZXcgV2lsc29uICA8YXR3aWxzb25AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTaGFyZWRXb3JrZXJzIGRvIG5vdCBleGl0
IHdoZW4gdGhlIGxhc3QgcGFyZW50IGRvY3VtZW50IGV4aXRzLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgxNzAKKworICAgICAgICBBZGRlZCBtb3Jl
IHRlc3RzIHRvIGNoZWNrIHRoYXQgcHJldmlvdXMgaW5jYXJuYXRpb25zIG9mIHRoZSBTaGFyZWRX
b3JrZXIgIm5hbWUiIGFyZSBzaHV0IGRvd24uCisKKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc2hh
cmVkLXdvcmtlci1yZXBsYWNlLWdsb2JhbC1jb25zdHJ1Y3Rvci5odG1sLWRpc2FibGVkOgorICAg
ICAgICBGaXhlZCBpbmNvcnJlY3QgcGF0aCB0byBjb21tb24gc2NyaXB0LgorICAgICAgICAqIGZh
c3Qvd29ya2Vycy9zaGFyZWQtd29ya2VyLXNoYXJlZC1leHBlY3RlZC50eHQ6CisgICAgICAgICog
ZmFzdC93b3JrZXJzL3NoYXJlZC13b3JrZXItc2hhcmVkLmh0bWwtZGlzYWJsZWQ6CisgICAgICAg
IEFkZGVkIG1vcmUgdGVzdHMgZm9yIHNoYXJpbmcsIGluY2x1ZGluZyBpbml0aWFsIHRlc3QgdG8g
bWFrZSBzdXJlIHByZXZpb3VzIGluY2FybmF0aW9ucyBvZiBzaGFyZWQgd29ya2VyIHdlcmUgY2xv
c2VkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy93b3JrZXItcmVwbGFjZS1nbG9iYWwtY29uc3Ry
dWN0b3IuaHRtbDoKKyAgICAgICAgUmVtb3ZlZCBleHRyYW5lb3VzIGNsb3NpbmcgSFRNTCB0YWcu
CisKIDIwMDktMDgtMDkgIE5pa29sYXMgWmltbWVybWFubiAgPG5pa29sYXMuemltbWVybWFubkB0
b3JjaG1vYmlsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2VvcmdlIFN0YWlrb3MuCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc2hhcmVkLXdvcmtlci1yZXBsYWNl
LWdsb2JhbC1jb25zdHJ1Y3Rvci5odG1sLWRpc2FibGVkIGIvTGF5b3V0VGVzdHMvZmFzdC93b3Jr
ZXJzL3NoYXJlZC13b3JrZXItcmVwbGFjZS1nbG9iYWwtY29uc3RydWN0b3IuaHRtbC1kaXNhYmxl
ZAppbmRleCAzMmQ0OGE0Li5kMzU1YzQ0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L3dv
cmtlcnMvc2hhcmVkLXdvcmtlci1yZXBsYWNlLWdsb2JhbC1jb25zdHJ1Y3Rvci5odG1sLWRpc2Fi
bGVkCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zaGFyZWQtd29ya2VyLXJlcGxhY2Ut
Z2xvYmFsLWNvbnN0cnVjdG9yLmh0bWwtZGlzYWJsZWQKQEAgLTIsNiArMiw2IEBACiA8cD5UZXN0
IHJlcGxhY2luZyBnbG9iYWwgY29uc3RydWN0b3JzIGluIGEgd29ya2VyIGNvbnRleHQuPC9wPgog
PGRpdiBpZD1yZXN1bHQ+PC9kaXY+CiA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3NoYXJlZC13b3Jr
ZXItY3JlYXRlLWNvbW1vbi5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0id29ya2VyLXJlcGxh
Y2UtZ2xvYmFsLWNvbnN0cnVjdG9yLmpzIj4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvd29ya2Vy
LXJlcGxhY2UtZ2xvYmFsLWNvbnN0cnVjdG9yLmpzIj4KIDwvc2NyaXB0PgogPC9ib2R5PgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3NoYXJlZC13b3JrZXItc2hhcmVkLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zaGFyZWQtd29ya2VyLXNoYXJl
ZC1leHBlY3RlZC50eHQKaW5kZXggMTc1NGU1OS4uZDEwMWYyMSAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvZmFzdC93b3JrZXJzL3NoYXJlZC13b3JrZXItc2hhcmVkLWV4cGVjdGVkLnR4dAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc2hhcmVkLXdvcmtlci1zaGFyZWQtZXhwZWN0ZWQu
dHh0CkBAIC0xLDYgKzEsNyBAQAogVGVzdCBzaW1wbGUgc2hhcmVkIHdvcmtlciBzaGFyaW5nIGNh
c2VzLiBTaG91bGQgcHJpbnQgc2V2ZXJhbCBQQVNTIGxpbmVzIGZvbGxvd2VkIGJ5IERPTkUuCiAK
IFBBU1M6IEV4Y2VwdGlvbiB0aHJvd24gd2hlbiBjcmVhdGluZyBTaGFyZWRXb3JrZXIgd2l0aCBk
aWZmZXJlbnQgVVJMcyBidXQgc2FtZSBuYW1lOiBFcnJvcjogVVJMX01JU01BVENIX0VSUjogRE9N
IEV4Y2VwdGlvbiAyMQorUEFTUzogQWNjZXNzaW5nIG5ldyBpbnN0YW5jZSBvZiBzaGFyZWQgd29y
a2VyOiBzZWxmLmZvbzogdW5kZWZpbmVkCiBQQVNTOiBTZXR0aW5nIGdsb2JhbCB2YXJpYWJsZSBp
biBzaGFyZWQgd29ya2VyOiBzZWxmLmZvbyA9IDEyMzQ6IDEyMzQKIFBBU1M6IEFjY2Vzc2luZyBz
aW11bHRhbmVvdXNseS1sb2FkZWQgaW5zdGFuY2Ugb2Ygc2hhcmVkIHdvcmtlcjogc2VsZi5mb286
IDEyMzQKIFBBU1M6IEFjY2Vzc2luZyBuZXcgaW5zdGFuY2Ugb2Ygc2hhcmVkIHdvcmtlcjogc2Vs
Zi5mb286IHVuZGVmaW5lZApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3No
YXJlZC13b3JrZXItc2hhcmVkLmh0bWwtZGlzYWJsZWQgYi9MYXlvdXRUZXN0cy9mYXN0L3dvcmtl
cnMvc2hhcmVkLXdvcmtlci1zaGFyZWQuaHRtbC1kaXNhYmxlZAppbmRleCAxOTZhNjJmLi4wMTUw
NDczIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc2hhcmVkLXdvcmtlci1z
aGFyZWQuaHRtbC1kaXNhYmxlZAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc2hhcmVk
LXdvcmtlci1zaGFyZWQuaHRtbC1kaXNhYmxlZApAQCAtMjUsMTYgKzI1LDIwIEBAIHRyeSB7CiAK
IAogLy8gU2V0IHNvbWV0aGluZyBpbiBnbG9iYWwgY29udGV4dCBpbiBvbmUgd29ya2VyLCByZWFk
IHZhbHVlIGJhY2sgb24gb3RoZXIgd29ya2VyLCB0byBtYWtlIHN1cmUgdGhleSBhcmUgdHJ1bHkg
c2hhcmVkLgotd29ya2VyLnBvcnQucG9zdE1lc3NhZ2UoImV2YWwgc2VsZi5mb28gPSAxMjM0Iik7
Ci0KK3dvcmtlci5wb3J0LnBvc3RNZXNzYWdlKCJldmFsIHNlbGYuZm9vIik7CiB3b3JrZXIucG9y
dC5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkKIHsKLSAgICBsb2coKGV2ZW50LmRhdGEgPT0g
InNlbGYuZm9vID0gMTIzNDogMTIzNCIgPyAiUEFTUzogIiA6ICJGQUlMOiAiKSArICJTZXR0aW5n
IGdsb2JhbCB2YXJpYWJsZSBpbiBzaGFyZWQgd29ya2VyOiAiICsgZXZlbnQuZGF0YSk7Ci0gICAg
d29ya2VyMi5wb3J0LnBvc3RNZXNzYWdlKCJldmFsIHNlbGYuZm9vIik7Ci0gICAgd29ya2VyMi5w
b3J0Lm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KQorICAgIGxvZygoZXZlbnQuZGF0YSA9PSAi
c2VsZi5mb286IHVuZGVmaW5lZCIgPyAiUEFTUzogIiA6ICJGQUlMOiAiKSArICJBY2Nlc3Npbmcg
bmV3IGluc3RhbmNlIG9mIHNoYXJlZCB3b3JrZXI6ICIgKyBldmVudC5kYXRhKTsKKyAgICB3b3Jr
ZXIucG9ydC5wb3N0TWVzc2FnZSgiZXZhbCBzZWxmLmZvbyA9IDEyMzQiKTsKKyAgICB3b3JrZXIu
cG9ydC5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkKICAgICB7Ci0gICAgICAgIGxvZygoZXZl
bnQuZGF0YSA9PSAic2VsZi5mb286IDEyMzQiID8gIlBBU1M6ICIgOiAiRkFJTDogIikgKyAiQWNj
ZXNzaW5nIHNpbXVsdGFuZW91c2x5LWxvYWRlZCBpbnN0YW5jZSBvZiBzaGFyZWQgd29ya2VyOiAi
ICsgZXZlbnQuZGF0YSk7Ci0gICAgICAgIHRlc3ROZXdXb3JrZXIoKTsKKyAgICAgICAgbG9nKChl
dmVudC5kYXRhID09ICJzZWxmLmZvbyA9IDEyMzQ6IDEyMzQiID8gIlBBU1M6ICIgOiAiRkFJTDog
IikgKyAiU2V0dGluZyBnbG9iYWwgdmFyaWFibGUgaW4gc2hhcmVkIHdvcmtlcjogIiArIGV2ZW50
LmRhdGEpOworICAgICAgICB3b3JrZXIyLnBvcnQucG9zdE1lc3NhZ2UoImV2YWwgc2VsZi5mb28i
KTsKKyAgICAgICAgd29ya2VyMi5wb3J0Lm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KQorICAg
ICAgICB7CisgICAgICAgICAgICBsb2coKGV2ZW50LmRhdGEgPT0gInNlbGYuZm9vOiAxMjM0IiA/
ICJQQVNTOiAiIDogIkZBSUw6ICIpICsgIkFjY2Vzc2luZyBzaW11bHRhbmVvdXNseS1sb2FkZWQg
aW5zdGFuY2Ugb2Ygc2hhcmVkIHdvcmtlcjogIiArIGV2ZW50LmRhdGEpOworICAgICAgICAgICAg
dGVzdE5ld1dvcmtlcigpOworICAgICAgICB9CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLXJlcGxhY2UtZ2xvYmFsLWNvbnN0cnVjdG9yLmh0
bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLXJlcGxhY2UtZ2xvYmFsLWNvbnN0
cnVjdG9yLmh0bWwKaW5kZXggNTVlNTZmNS4uN2M4MDhkMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvZmFzdC93b3JrZXJzL3dvcmtlci1yZXBsYWNlLWdsb2JhbC1jb25zdHJ1Y3Rvci5odG1sCisr
KyBiL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy93b3JrZXItcmVwbGFjZS1nbG9iYWwtY29uc3Ry
dWN0b3IuaHRtbApAQCAtNSw0ICs1LDMgQEAKIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvd29ya2Vy
LXJlcGxhY2UtZ2xvYmFsLWNvbnN0cnVjdG9yLmpzIj4KIDwvc2NyaXB0PgogPC9ib2R5PgotPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwpp
bmRleCBkYTdiMDE5Li5jYTY0OTBkIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysg
Yi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDA5LTA4LTEwICBEcmV3IFdp
bHNvbiAgPGF0d2lsc29uQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgU2hhcmVkV29ya2VycyBkbyBub3QgZXhpdCB3aGVuIHRoZSBs
YXN0IHBhcmVudCBkb2N1bWVudCBleGl0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjgxNzAKKworICAgICAgICBQcmV2ZW50cyBEb2N1bWVudHMgZnJv
bSBiZWluZyBzdXNwZW5kZWQvcGxhY2VkIGluIHRoZSBwYWdlIGNhY2hlIGlmIHRoZXkgYXJlIGFz
c29jaWF0ZWQgd2l0aCBzaGFyZWQgd29ya2Vycy4KKworICAgICAgICBBZGRlZCB2ZWN0b3IgY2Fj
aGUgaW5zdGVhZCBvZiBuZXN0ZWQgaGFzaCB0YWJsZXMgZm9yIFNoYXJlZFdvcmtlciByZXBvc2l0
b3J5LgorCisgICAgICAgIEFkZGVkIFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6OmRvY3VtZW50RGV0
YWNoZWQgQVBJLgorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50OjpkZXRhY2gpOgorICAgICAgICBOb3RpZmllcyBTaGFyZWRXb3JrZXJSZXBv
c2l0b3J5IHdoZW4gdGhlIGRvY3VtZW50IGlzIGNsb3NpbmcuCisgICAgICAgICogbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcDoKKyAgICAgICAgVXBkYXRlZCBGcmFtZUxvYWRlciB0byBub3QgY2FjaGUg
dGhlIERvY3VtZW50IGlmIGl0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIFNoYXJlZFdvcmtlciAoc2lu
Y2Ugd2UgY2FuJ3Qgc3VzcGVuZCB3b3JrZXJzIHlldCwgd2UgbmVlZCB0byBzaHV0IHRoZW0gZG93
bikuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y2FuQ2FjaGVQYWdlQ29udGFpbmlu
Z1RoaXNGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9nQ2FuQ2FjaGVG
cmFtZURlY2lzaW9uKToKKyAgICAgICAgKiB3b3JrZXJzL0RlZmF1bHRTaGFyZWRXb3JrZXJSZXBv
c2l0b3J5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFdvcmtlclByb3h5OjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkV29ya2VyUHJveHk6OmlzQ2xvc2luZyk6CisgICAg
ICAgIFJlbmFtZWQgZnJvbSBjbG9zaW5nKCkuCisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRXb3Jr
ZXJQcm94eTo6bWF0Y2hlcyk6CisgICAgICAgIEFkZGVkIG1hbnVhbCBlcXVhbGl0eSBmdW5jdGlv
biB0byByZXBsYWNlIG9sZCBoYXNoIGxvb2t1cC4KKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFdv
cmtlclByb3h5Ojppc0RvY3VtZW50SW5Xb3JrZXJEb2N1bWVudHMpOgorICAgICAgICBDaGVja3Mg
dG8gc2VlIGlmIGEgZG9jdW1lbnQgaXMgaW4gdGhlIHdvcmtlcidzIGxpc3Qgb2YgZG9jdW1lbnRz
LiBVc2VkIHRvIGRldGVybWluZSBpZiBwYWdlIGlzIHN1c3BlbmRhYmxlLgorICAgICAgICAoV2Vi
Q29yZTo6U2hhcmVkV29ya2VyUHJveHk6OlNoYXJlZFdvcmtlclByb3h5KToKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXJlZFdvcmtlclByb3h5OjphZGRUb1dvcmtlckRvY3VtZW50cyk6CisgICAgICAg
IEFkZGVkIHRyYWNraW5nIG9mIHRoZSB3b3JrZXIncyBsaXN0IG9mIGRvY3VtZW50cyBmb3IgbGlm
ZWN5Y2xlIHB1cnBvc2VzLgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkV29ya2VyUHJveHk6OmRv
Y3VtZW50RGV0YWNoZWQpOgorICAgICAgICBTaHV0cyBkb3duIHRoZSBwcm94eSB3aGVuIHRoZSBs
YXN0IGFzc29jaWF0ZWQgZG9jdW1lbnQgaXMgZGV0YWNoZWQuCisgICAgICAgIChXZWJDb3JlOjpT
aGFyZWRXb3JrZXJQcm94eTo6Y2xvc2UpOgorICAgICAgICBNYXJrcyB0aGUgcHJveHkgYXMgY2xv
c2VkIHNvIGl0IGlzIG5vIGxvbmdlciBzaGFyZWQgd2l0aCBuZXcgaW5zdGFuY2VzLgorICAgICAg
ICAoV2ViQ29yZTo6U2hhcmVkV29ya2VyUHJveHk6OndvcmtlckNvbnRleHREZXN0cm95ZWQpOgor
ICAgICAgICBSZW1vdmVzIHRoZSBwcm94eSBmcm9tIHRoZSByZXBvc2l0b3J5L2ZyZWVzIHRoZSBw
cm94eSB3aGVuIHRoZSBhc3NvY2lhdGVkIFNoYXJlZFdvcmtlckNvbnRleHQgaXMgZGVzdHJveWVk
LgorICAgICAgICAoV2ViQ29yZTo6RGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6Ondvcmtl
clNjcmlwdExvYWRlZCk6CisgICAgICAgIGNsb3NpbmcoKS0+aXNDbG9zaW5nKCkKKyAgICAgICAg
KFdlYkNvcmU6OlNoYXJlZFdvcmtlclJlcG9zaXRvcnk6OmRvY3VtZW50RGV0YWNoZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcmVkV29ya2VyUmVwb3NpdG9yeTo6aGFzU2hhcmVkV29ya2Vycyk6
CisgICAgICAgIFVzZWQgYnkgRnJhbWVMb2FkZXIgdG8gZGV0ZXJtaW5lIGlmIGEgcGFnZSBoYXMg
c2hhcmVkIHdvcmtlcnMgYW5kIHNvIGNhbm5vdCBiZSBzdXNwZW5kZWQvY2FjaGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6Omhhc1NoYXJlZFdvcmtl
cnMpOgorICAgICAgICAoV2ViQ29yZTo6RGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6OnJl
bW92ZVByb3h5KToKKyAgICAgICAgSW52b2tlZCBieSB3b3JrZXJDb250ZXh0RGVzdHJveWVkKCkg
dG8gcmVtb3ZlIGEgU2hhcmVkV29ya2VyUHJveHkgZnJvbSB0aGUgcmVwb3NpdG9yeS4KKyAgICAg
ICAgKFdlYkNvcmU6OkRlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5Ojpkb2N1bWVudERldGFj
aGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5Ojpj
b25uZWN0VG9Xb3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGVmYXVsdFNoYXJlZFdvcmtlclJl
cG9zaXRvcnk6OmdldFByb3h5KToKKyAgICAgICAgKiB3b3JrZXJzL0RlZmF1bHRTaGFyZWRXb3Jr
ZXJSZXBvc2l0b3J5Lmg6CisgICAgICAgICogd29ya2Vycy9TaGFyZWRXb3JrZXJSZXBvc2l0b3J5
Lmg6CisKIDIwMDktMDgtMDkgIERyZXcgV2lsc29uICA8YXR3aWxzb25AZ29vZ2xlLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmNwcCBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCBhNzc5ZjRk
Li44OWJiOTRlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC0xMDgsNiArMTA4LDcgQEAKICNpbmNsdWRlICJTZWdt
ZW50ZWRTdHJpbmcuaCIKICNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVk
ZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJTaGFyZWRXb3JrZXJSZXBvc2l0b3J5LmgiCiAjaW5j
bHVkZSAiU3R5bGVTaGVldExpc3QuaCIKICNpbmNsdWRlICJUZXh0RXZlbnQuaCIKICNpbmNsdWRl
ICJUZXh0SXRlcmF0b3IuaCIKQEAgLTEzNDgsNyArMTM0OSwxMSBAQCB2b2lkIERvY3VtZW50Ojpk
ZXRhY2goKQogICAgIC8vIFNlbmQgb3V0IGRvY3VtZW50V2lsbEJlY29tZUluYWN0aXZlKCkgbm90
aWZpY2F0aW9ucyB0byByZWdpc3RlcmVkIGVsZW1lbnRzLAogICAgIC8vIGluIG9yZGVyIHRvIHN0
b3AgbWVkaWEgZWxlbWVudHMKICAgICBkb2N1bWVudFdpbGxCZWNvbWVJbmFjdGl2ZSgpOwotICAg
IAorCisjaWYgRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQorICAgIFNoYXJlZFdvcmtlclJlcG9zaXRv
cnk6OmRvY3VtZW50RGV0YWNoZWQodGhpcyk7CisjZW5kaWYKKwogICAgIGlmIChtX2ZyYW1lKSB7
CiAgICAgICAgIEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKTsKICAgICAgICAgaWYg
KHZpZXcpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAgYi9XZWJD
b3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKaW5kZXggZTYzOWVhNS4uZTI2NDY3MCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCisrKyBiL1dlYkNvcmUvbG9hZGVy
L0ZyYW1lTG9hZGVyLmNwcApAQCAtODcsNiArODcsNyBAQAogI2luY2x1ZGUgIlNlY3VyaXR5T3Jp
Z2luLmgiCiAjaW5jbHVkZSAiU2VnbWVudGVkU3RyaW5nLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3Mu
aCIKKyNpbmNsdWRlICJTaGFyZWRXb3JrZXJSZXBvc2l0b3J5LmgiCiAjaW5jbHVkZSAiVGV4dFJl
c291cmNlRGVjb2Rlci5oIgogI2luY2x1ZGUgIldpbmRvd0ZlYXR1cmVzLmgiCiAjaW5jbHVkZSAi
WE1MSHR0cFJlcXVlc3QuaCIKQEAgLTE4MTIsNiArMTgxMyw5IEBAIGJvb2wgRnJhbWVMb2FkZXI6
OmNhbkNhY2hlUGFnZUNvbnRhaW5pbmdUaGlzRnJhbWUoKQogI2lmIEVOQUJMRShEQVRBQkFTRSkK
ICAgICAgICAgJiYgIW1fZnJhbWUtPmRvY3VtZW50KCktPmhhc09wZW5EYXRhYmFzZXMoKQogI2Vu
ZGlmCisjaWYgRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQorICAgICAgICAmJiAhU2hhcmVkV29ya2Vy
UmVwb3NpdG9yeTo6aGFzU2hhcmVkV29ya2VycyhtX2ZyYW1lLT5kb2N1bWVudCgpKQorI2VuZGlm
CiAgICAgICAgICYmICFtX2ZyYW1lLT5kb2N1bWVudCgpLT51c2luZ0dlb2xvY2F0aW9uKCkKICAg
ICAgICAgJiYgbV9jdXJyZW50SGlzdG9yeUl0ZW0KICAgICAgICAgJiYgIW1fcXVpY2tSZWRpcmVj
dENvbWluZwpAQCAtMTk1OCw2ICsxOTYyLDEwIEBAIGJvb2wgRnJhbWVMb2FkZXI6OmxvZ0NhbkNh
Y2hlRnJhbWVEZWNpc2lvbihpbnQgaW5kZW50TGV2ZWwpCiAgICAgICAgIGlmIChtX2ZyYW1lLT5k
b2N1bWVudCgpLT5oYXNPcGVuRGF0YWJhc2VzKCkpCiAgICAgICAgICAgICB7IFBDTE9HKCIgICAt
RnJhbWUgaGFzIG9wZW4gZGF0YWJhc2UgaGFuZGxlcyIpOyBjYW5ub3RDYWNoZSA9IHRydWU7IH0K
ICNlbmRpZgorI2lmIEVOQUJMRShTSEFSRURfV09SS0VSUykKKyAgICAgICAgaWYgKFNoYXJlZFdv
cmtlclJlcG9zaXRvcnk6Omhhc1NoYXJlZFdvcmtlcnMobV9mcmFtZS0+ZG9jdW1lbnQoKSkpCisg
ICAgICAgICAgICB7IFBDTE9HKCIgICAtRnJhbWUgaGFzIGFzc29jaWF0ZWQgU2hhcmVkV29ya2Vy
cyIpOyBjYW5ub3RDYWNoZSA9IHRydWU7IH0KKyNlbmRpZgogICAgICAgICBpZiAobV9mcmFtZS0+
ZG9jdW1lbnQoKS0+dXNpbmdHZW9sb2NhdGlvbigpKQogICAgICAgICAgICAgeyBQQ0xPRygiICAg
LUZyYW1lIHVzZXMgR2VvbG9jYXRpb24iKTsgY2Fubm90Q2FjaGUgPSB0cnVlOyB9CiAgICAgICAg
IGlmICghbV9jdXJyZW50SGlzdG9yeUl0ZW0pCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMv
RGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnkuY3BwIGIvV2ViQ29yZS93b3JrZXJzL0RlZmF1
bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5LmNwcAppbmRleCBjOTA5ODRlLi42ZTVhZTJiIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvRGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnkuY3Bw
CisrKyBiL1dlYkNvcmUvd29ya2Vycy9EZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeS5jcHAK
QEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJEZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9y
eS5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKICNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKQEAgLTQyLDI1ICs0MywyOCBAQAogI2luY2x1
ZGUgIlNlY3VyaXR5T3JpZ2luSGFzaC5oIgogI2luY2x1ZGUgIlNoYXJlZFdvcmtlci5oIgogI2lu
Y2x1ZGUgIlNoYXJlZFdvcmtlckNvbnRleHQuaCIKKyNpbmNsdWRlICJTaGFyZWRXb3JrZXJSZXBv
c2l0b3J5LmgiCiAjaW5jbHVkZSAiU2hhcmVkV29ya2VyVGhyZWFkLmgiCiAjaW5jbHVkZSAiV29y
a2VyTG9hZGVyUHJveHkuaCIKICNpbmNsdWRlICJXb3JrZXJSZXBvcnRpbmdQcm94eS5oIgogI2lu
Y2x1ZGUgIldvcmtlclNjcmlwdExvYWRlci5oIgogI2luY2x1ZGUgIldvcmtlclNjcmlwdExvYWRl
ckNsaWVudC5oIgotCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2hhcmVkV29ya2VyUHJv
eHkgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxTaGFyZWRXb3JrZXJQcm94eT4sIHB1YmxpYyBX
b3JrZXJMb2FkZXJQcm94eSwgcHVibGljIFdvcmtlclJlcG9ydGluZ1Byb3h5IHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRXb3JrZXJQcm94eT4gY3JlYXRlKGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgS1VSTCYgdXJsKSB7IHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVk
V29ya2VyUHJveHkobmFtZSwgdXJsKSk7IH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRX
b3JrZXJQcm94eT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgS1VSTCYgdXJsLCBQ
YXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4pIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBT
aGFyZWRXb3JrZXJQcm94eShuYW1lLCB1cmwsIG9yaWdpbikpOyB9CiAKICAgICB2b2lkIHNldFRo
cmVhZChQYXNzUmVmUHRyPFNoYXJlZFdvcmtlclRocmVhZD4gdGhyZWFkKSB7IG1fdGhyZWFkID0g
dGhyZWFkOyB9CiAgICAgU2hhcmVkV29ya2VyVGhyZWFkKiB0aHJlYWQoKSB7IHJldHVybiBtX3Ro
cmVhZC5nZXQoKTsgfQotICAgIGJvb2wgY2xvc2luZygpIGNvbnN0IHsgcmV0dXJuIG1fY2xvc2lu
ZzsgfQorICAgIGJvb2wgaXNDbG9zaW5nKCkgY29uc3QgeyByZXR1cm4gbV9jbG9zaW5nOyB9Cisg
ICAgdm9pZCBjbG9zZSgpOwogICAgIEtVUkwgdXJsKCkgY29uc3QgeyByZXR1cm4gbV91cmwuY29w
eSgpOyB9CiAgICAgU3RyaW5nIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWUuY29weSgpOyB9
CisgICAgYm9vbCBtYXRjaGVzKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxTZWN1cml0
eU9yaWdpbj4gb3JpZ2luKSBjb25zdCB7IHJldHVybiBuYW1lID09IG1fbmFtZSAmJiBvcmlnaW4t
PmVxdWFsKG1fb3JpZ2luLmdldCgpKTsgfQogCiAgICAgLy8gV29ya2VyTG9hZGVyUHJveHkKICAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IFdvcmtlckxvYWRlclByb3h5IEFQSXMgYnkgcHJveHlpbmcg
dG8gYW4gYWN0aXZlIGRvY3VtZW50LgpAQCAtNzYsMTkgKzgwLDU1IEBAIHB1YmxpYzoKICAgICAv
LyBVcGRhdGVzIHRoZSBsaXN0IG9mIHRoZSB3b3JrZXIncyBkb2N1bWVudHMsIHBlciBzZWN0aW9u
IDQuNSBvZiB0aGUgV2ViV29ya2VycyBzcGVjLgogICAgIHZvaWQgYWRkVG9Xb3JrZXJEb2N1bWVu
dHMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogCisgICAgYm9vbCBpc0RvY3VtZW50SW5Xb3Jr
ZXJEb2N1bWVudHMoRG9jdW1lbnQqIGRvY3VtZW50KSB7IHJldHVybiBtX2RvY3VtZW50U2V0LmNv
bnRhaW5zKGRvY3VtZW50KTsgfQorCisgICAgLy8gUmVtb3ZlcyBhIGRldGFjaGVkIGRvY3VtZW50
IGZyb20gdGhlIGxpc3Qgb2Ygd29ya2VyJ3MgZG9jdW1lbnRzLiBNYXkgc2V0IHRoZSBjbG9zaW5n
IGZsYWcgaWYgdGhpcyBpcyB0aGUgbGFzdCBkb2N1bWVudCBpbiB0aGUgbGlzdC4KKyAgICB2b2lk
IGRvY3VtZW50RGV0YWNoZWQoRG9jdW1lbnQqKTsKKwogcHJpdmF0ZToKLSAgICBTaGFyZWRXb3Jr
ZXJQcm94eShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEtVUkwmKTsKKyAgICBTaGFyZWRXb3Jr
ZXJQcm94eShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEtVUkwmLCBQYXNzUmVmUHRyPFNlY3Vy
aXR5T3JpZ2luPik7CiAgICAgYm9vbCBtX2Nsb3Npbmc7CiAgICAgU3RyaW5nIG1fbmFtZTsKICAg
ICBLVVJMIG1fdXJsOworICAgIC8vIFRoZSB0aHJlYWQgaXMgZnJlZWQgd2hlbiB0aGUgcHJveHkg
aXMgZGVzdHJveWVkLCBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBwcm94eSBzdGF5
cyBhcm91bmQgdW50aWwgdGhlIFNoYXJlZFdvcmtlckNvbnRleHQgZXhpdHMuCiAgICAgUmVmUHRy
PFNoYXJlZFdvcmtlclRocmVhZD4gbV90aHJlYWQ7CisgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2lu
PiBtX29yaWdpbjsKKyAgICBIYXNoU2V0PERvY3VtZW50Kj4gbV9kb2N1bWVudFNldDsKIH07CiAK
LVNoYXJlZFdvcmtlclByb3h5OjpTaGFyZWRXb3JrZXJQcm94eShjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IEtVUkwmIHVybCkKK1NoYXJlZFdvcmtlclByb3h5OjpTaGFyZWRXb3JrZXJQcm94eShj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEtVUkwmIHVybCwgUGFzc1JlZlB0cjxTZWN1cml0eU9y
aWdpbj4gb3JpZ2luKQogICAgIDogbV9jbG9zaW5nKGZhbHNlKQogICAgICwgbV9uYW1lKG5hbWUu
Y29weSgpKQogICAgICwgbV91cmwodXJsLmNvcHkoKSkKKyAgICAsIG1fb3JpZ2luKG9yaWdpbikK
K3sKK30KKwordm9pZCBTaGFyZWRXb3JrZXJQcm94eTo6YWRkVG9Xb3JrZXJEb2N1bWVudHMoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKIHsKKyAgICAvLyBOZXN0ZWQgd29ya2VycyBh
cmUgbm90IHlldCBzdXBwb3J0ZWQsIHNvIHBhc3NlZC1pbiBjb250ZXh0IHNob3VsZCBhbHdheXMg
YmUgYSBEb2N1bWVudC4KKyAgICBBU1NFUlQoY29udGV4dC0+aXNEb2N1bWVudCgpKTsKKyAgICBB
U1NFUlQoIWlzQ2xvc2luZygpKTsKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2Fz
dDxEb2N1bWVudCo+KGNvbnRleHQpOworICAgIG1fZG9jdW1lbnRTZXQuYWRkKGRvY3VtZW50KTsK
K30KKwordm9pZCBTaGFyZWRXb3JrZXJQcm94eTo6ZG9jdW1lbnREZXRhY2hlZChEb2N1bWVudCog
ZG9jdW1lbnQpCit7CisgICAgaWYgKGlzQ2xvc2luZygpKQorICAgICAgICByZXR1cm47CisgICAg
Ly8gUmVtb3ZlIHRoZSBkb2N1bWVudCBmcm9tIG91ciBzZXQgKGlmIGl0J3MgdGhlcmUpIGFuZCBp
ZiB0aGF0IHdhcyB0aGUgbGFzdCBkb2N1bWVudCBpbiB0aGUgc2V0LCBtYXJrIHRoZSBwcm94eSBh
cyBjbG9zZWQuCisgICAgbV9kb2N1bWVudFNldC5yZW1vdmUoZG9jdW1lbnQpOworICAgIGlmICgh
bV9kb2N1bWVudFNldC5zaXplKCkpCisgICAgICAgIGNsb3NlKCk7Cit9CisKK3ZvaWQgU2hhcmVk
V29ya2VyUHJveHk6OmNsb3NlKCkKK3sKKyAgICBtX2Nsb3NpbmcgPSB0cnVlOworICAgIC8vIFN0
b3AgdGhlIHdvcmtlciB0aHJlYWQgLSB0aGUgcHJveHkgd2lsbCBzdGF5IGFyb3VuZCB1bnRpbCB3
ZSBnZXQgd29ya2VyVGhyZWFkRXhpdGVkKCkgbm90aWZpY2F0aW9uLgorICAgIGlmIChtX3RocmVh
ZCkKKyAgICAgICAgbV90aHJlYWQtPnN0b3AoKTsKIH0KIAogdm9pZCBTaGFyZWRXb3JrZXJQcm94
eTo6cG9zdEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KGNvbnN0IFN0cmluZyYsIGludCwgY29uc3Qg
U3RyaW5nJikKQEAgLTEwMyw2ICsxNDMsNyBAQCB2b2lkIFNoYXJlZFdvcmtlclByb3h5Ojpwb3N0
Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdChNZXNzYWdlRGVzdGluYXRpb24sIE1lcwogICAg
IG5vdEltcGxlbWVudGVkKCk7CiB9CiAKKy8vIFdoZW4gY2xvc2UoKSBpcyBpbnZva2VkLCBtYXJr
IHRoZSBwcm94eSBhcyBjbG9zaW5nIHNvIHdlIGRvbid0IHNoYXJlIGl0IHdpdGggYW55IG5ldyBy
ZXF1ZXN0cy4KIHZvaWQgU2hhcmVkV29ya2VyUHJveHk6OndvcmtlckNvbnRleHRDbG9zZWQoKQog
ewogICAgIG1fY2xvc2luZyA9IHRydWU7CkBAIC0xMTAsMTUgKzE1MSw4IEBAIHZvaWQgU2hhcmVk
V29ya2VyUHJveHk6OndvcmtlckNvbnRleHRDbG9zZWQoKQogCiB2b2lkIFNoYXJlZFdvcmtlclBy
b3h5Ojp3b3JrZXJDb250ZXh0RGVzdHJveWVkKCkKIHsKLSAgICAvLyBGSVhNRTogUmVtb3ZlIHRo
ZSBwcm94eSBmcm9tIHRoZSByZXBvc2l0b3J5IG9uY2UgdGhlIHdvcmtlciBjb250ZXh0IGlzIGRl
c3Ryb3llZC4KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFNoYXJlZFdvcmtlclBy
b3h5OjphZGRUb1dvcmtlckRvY3VtZW50cyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
KQotewotICAgIC8vIE5lc3RlZCB3b3JrZXJzIGFyZSBub3QgeWV0IHN1cHBvcnRlZCwgc28gcGFz
c2VkLWluIGNvbnRleHQgc2hvdWxkIGFsd2F5cyBiZSBhIERvY3VtZW50LgotICAgIEFTU0VSVChj
b250ZXh0LT5pc0RvY3VtZW50KCkpOwotICAgIC8vIEZJWE1FOiB0cmFjayByZWZlcnJpbmcgZG9j
dW1lbnRzIHNvIHdlIGNhbiBzaHV0ZG93biB0aGUgdGhyZWFkIHdoZW4gdGhlIGxhc3Qgb25lIGV4
aXRzIGFuZCByZW1vdmUgdGhlIHByb3h5IGZyb20gdGhlIGNhY2hlLgorICAgIC8vIFRoZSBwcm94
eSBtYXkgYmUgZnJlZWQgYnkgdGhpcyBjYWxsLCBzbyBkbyBub3QgcmVmZXJlbmNlIGl0IGFueSBm
dXJ0aGVyLgorICAgIERlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5OjppbnN0YW5jZSgpLnJl
bW92ZVByb3h5KHRoaXMpOwogfQogCiBjbGFzcyBTaGFyZWRXb3JrZXJDb25uZWN0VGFzayA6IHB1
YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKQEAgLTIwMyw3ICsyMzcsNyBAQCBE
ZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeSYgRGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRv
cnk6Omluc3RhbmNlKCkKIHZvaWQgRGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6Ondvcmtl
clNjcmlwdExvYWRlZChTaGFyZWRXb3JrZXJQcm94eSYgcHJveHksIGNvbnN0IFN0cmluZyYgdXNl
ckFnZW50LCBjb25zdCBTdHJpbmcmIHdvcmtlclNjcmlwdCwgUGFzc093blB0cjxNZXNzYWdlUG9y
dENoYW5uZWw+IHBvcnQpCiB7CiAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX2xvY2spOwotICAgIGlm
IChwcm94eS5jbG9zaW5nKCkpCisgICAgaWYgKHByb3h5LmlzQ2xvc2luZygpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICAvLyBBbm90aGVyIGxvYWRlciBtYXkgaGF2ZSBhbHJlYWR5IHN0YXJ0ZWQg
dXAgYSB0aHJlYWQgZm9yIHRoaXMgcHJveHkgLSBpZiBzbywganVzdCBzZW5kIGEgY29ubmVjdCB0
byB0aGUgcHJlLWV4aXN0aW5nIHRocmVhZC4KQEAgLTIyMCw2ICsyNTQsNDQgQEAgdm9pZCBTaGFy
ZWRXb3JrZXJSZXBvc2l0b3J5Ojpjb25uZWN0KFBhc3NSZWZQdHI8U2hhcmVkV29ya2VyPiB3b3Jr
ZXIsIFBhc3NPd25QdHIKICAgICBEZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeTo6aW5zdGFu
Y2UoKS5jb25uZWN0VG9Xb3JrZXIod29ya2VyLCBwb3J0LCB1cmwsIG5hbWUsIGVjKTsKIH0KIAor
dm9pZCBTaGFyZWRXb3JrZXJSZXBvc2l0b3J5Ojpkb2N1bWVudERldGFjaGVkKERvY3VtZW50KiBk
b2N1bWVudCkKK3sKKyAgICBEZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeTo6aW5zdGFuY2Uo
KS5kb2N1bWVudERldGFjaGVkKGRvY3VtZW50KTsKK30KKworYm9vbCBTaGFyZWRXb3JrZXJSZXBv
c2l0b3J5OjpoYXNTaGFyZWRXb3JrZXJzKERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICByZXR1
cm4gRGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6Omluc3RhbmNlKCkuaGFzU2hhcmVkV29y
a2Vycyhkb2N1bWVudCk7Cit9CisKK2Jvb2wgRGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6
Omhhc1NoYXJlZFdvcmtlcnMoRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIE11dGV4TG9ja2Vy
IGxvY2sobV9sb2NrKTsKKyAgICBmb3IgKFNoYXJlZFdvcmtlclByb3h5UmVwb3NpdG9yeTo6aXRl
cmF0b3IgaXRlciA9IG1fY2FjaGUuYmVnaW4oKSA7IGl0ZXIgIT0gbV9jYWNoZS5lbmQoKSA7ICsr
aXRlcikgeworICAgICAgICBpZiAoKCppdGVyKS0+aXNEb2N1bWVudEluV29ya2VyRG9jdW1lbnRz
KGRvY3VtZW50KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3ZvaWQgRGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6OnJlbW92ZVBy
b3h5KFNoYXJlZFdvcmtlclByb3h5KiBwcm94eSkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrKG1f
bG9jayk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMCA7IGkgPCBtX2NhY2hlLnNpemUoKSA7IGkr
KykgeworICAgICAgICBpZiAocHJveHkgPT0gbV9jYWNoZVtpXS5nZXQoKSkgeworICAgICAgICAg
ICAgbV9jYWNoZS5yZW1vdmUoaSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK3ZvaWQgRGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6OmRvY3VtZW50RGV0
YWNoZWQoRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIE11dGV4TG9ja2VyIGxvY2sobV9sb2Nr
KTsKKyAgICBmb3IgKFNoYXJlZFdvcmtlclByb3h5UmVwb3NpdG9yeTo6aXRlcmF0b3IgaXRlciA9
IG1fY2FjaGUuYmVnaW4oKSA7IGl0ZXIgIT0gbV9jYWNoZS5lbmQoKSA7ICsraXRlcikKKyAgICAg
ICAgKCppdGVyKS0+ZG9jdW1lbnREZXRhY2hlZChkb2N1bWVudCk7Cit9CisKIHZvaWQgRGVmYXVs
dFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6OmNvbm5lY3RUb1dvcmtlcihQYXNzUmVmUHRyPFNoYXJl
ZFdvcmtlcj4gd29ya2VyLCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbD4gcG9ydCwgY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewog
ICAgIE11dGV4TG9ja2VyIGxvY2sobV9sb2NrKTsKQEAgLTI0NywxNyArMzE5LDEzIEBAIFBhc3NS
ZWZQdHI8U2hhcmVkV29ya2VyUHJveHk+IERlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5Ojpn
ZXRQcm94eShjb25zdCBTdHJpCiAgICAgLy8gTG9vayBmb3IgYW4gZXhpc3Rpbmcgd29ya2VyLCBh
bmQgY3JlYXRlIG9uZSBpZiBpdCBkb2Vzbid0IGV4aXN0LgogICAgIC8vIEl0ZW1zIGluIHRoZSBj
YWNoZSBhcmUgZnJlZWQgb24gYW5vdGhlciB0aHJlYWQsIHNvIGNvcHkgdGhlIFVSTCBiZWZvcmUg
Y3JlYXRpbmcgdGhlIG9yaWdpbiwgdG8gbWFrZSBzdXJlIG5vIHJlZmVyZW5jZXMgdG8gZXh0ZXJu
YWwgc3RyaW5ncyBsaW5nZXIuCiAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4gPSBT
ZWN1cml0eU9yaWdpbjo6Y3JlYXRlKHVybC5jb3B5KCkpOwotICAgIFNoYXJlZFdvcmtlck5hbWVN
YXAqIG5hbWVNYXAgPSBtX2NhY2hlLmdldChvcmlnaW4pOwotICAgIGlmICghbmFtZU1hcCkgewot
ICAgICAgICBuYW1lTWFwID0gbmV3IFNoYXJlZFdvcmtlck5hbWVNYXAoKTsKLSAgICAgICAgbV9j
YWNoZS5zZXQob3JpZ2luLCBuYW1lTWFwKTsKLSAgICB9Ci0KLSAgICBSZWZQdHI8U2hhcmVkV29y
a2VyUHJveHk+IHByb3h5ID0gbmFtZU1hcC0+Z2V0KG5hbWUpOwotICAgIGlmICghcHJveHkuZ2V0
KCkpIHsKLSAgICAgICAgcHJveHkgPSBTaGFyZWRXb3JrZXJQcm94eTo6Y3JlYXRlKG5hbWUsIHVy
bCk7Ci0gICAgICAgIG5hbWVNYXAtPnNldChwcm94eS0+bmFtZSgpLCBwcm94eSk7CisgICAgZm9y
IChTaGFyZWRXb3JrZXJQcm94eVJlcG9zaXRvcnk6Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhY2hlLmJl
Z2luKCkgOyBpdGVyIDwgbV9jYWNoZS5lbmQoKSA7ICsraXRlcikgeworICAgICAgICBpZiAoISgq
aXRlciktPmlzQ2xvc2luZygpICYmICgqaXRlciktPm1hdGNoZXMobmFtZSwgb3JpZ2luKSkKKyAg
ICAgICAgICAgIHJldHVybiAqaXRlcjsKICAgICB9CisgICAgLy8gUHJveHkgaXMgbm90IGluIHRo
ZSByZXBvc2l0b3J5IGN1cnJlbnRseSAtIGNyZWF0ZSBhIG5ldyBvbmUuCisgICAgUmVmUHRyPFNo
YXJlZFdvcmtlclByb3h5PiBwcm94eSA9IFNoYXJlZFdvcmtlclByb3h5OjpjcmVhdGUobmFtZSwg
dXJsLCBvcmlnaW4ucmVsZWFzZSgpKTsKKyAgICBtX2NhY2hlLmFwcGVuZChwcm94eSk7CiAgICAg
cmV0dXJuIHByb3h5OwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvRGVmYXVsdFNo
YXJlZFdvcmtlclJlcG9zaXRvcnkuaCBiL1dlYkNvcmUvd29ya2Vycy9EZWZhdWx0U2hhcmVkV29y
a2VyUmVwb3NpdG9yeS5oCmluZGV4IDBiNGU2NmMuLjg0ZmMyNzEgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvd29ya2Vycy9EZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeS5oCisrKyBiL1dlYkNvcmUv
d29ya2Vycy9EZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeS5oCkBAIC0zMywyMiArMzMsMjQg
QEAKIAogI2lmIEVOQUJMRShTSEFSRURfV09SS0VSUykKIAotI2luY2x1ZGUgIlNoYXJlZFdvcmtl
clJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiU3Ry
aW5nSGFzaC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFk
aW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorICAgIGNsYXNzIERvY3VtZW50OwogICAg
IGNsYXNzIEtVUkw7CisgICAgY2xhc3MgTWVzc2FnZVBvcnRDaGFubmVsOwogICAgIGNsYXNzIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ7Ci0gICAgY2xhc3MgU2VjdXJpdHlPcmlnaW47CisgICAgY2xh
c3MgU2hhcmVkV29ya2VyOwogICAgIGNsYXNzIFNoYXJlZFdvcmtlclByb3h5OwotCi0gICAgc3Ry
dWN0IFNlY3VyaXR5T3JpZ2luSGFzaDsKLSAgICBzdHJ1Y3QgU2VjdXJpdHlPcmlnaW5UcmFpdHM7
CisgICAgY2xhc3MgU3RyaW5nOwogCiAgICAgLy8gUGxhdGZvcm0tc3BlY2lmaWMgaW1wbGVtZW50
YXRpb24gb2YgdGhlIFNoYXJlZFdvcmtlclJlcG9zaXRvcnkgc3RhdGljIGludGVyZmFjZS4KICAg
ICBjbGFzcyBEZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeSA6IHB1YmxpYyBOb25jb3B5YWJs
ZSB7CkBAIC01OSw2ICs2MSwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIElu
dGVybmFsIGltcGxlbWVudGF0aW9uIG9mIFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6OmNvbm5lY3Qo
KQogICAgICAgICB2b2lkIGNvbm5lY3RUb1dvcmtlcihQYXNzUmVmUHRyPFNoYXJlZFdvcmtlcj4s
IFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsPiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwogCisgICAgICAgIC8vIE5vdGlmaWNhdGlvbiB0aGF0
IGEgZG9jdW1lbnQgaGFzIGJlZW4gZGV0YWNoZWQsIHNvIHdlIGNhbiBzaHV0ZG93biBhbnkgYXNz
b2NpYXRlZCBTaGFyZWRXb3JrZXJzLgorICAgICAgICB2b2lkIGRvY3VtZW50RGV0YWNoZWQoRG9j
dW1lbnQqKTsKKworICAgICAgICAvLyBJbnZva2VkIHdoZW4gYSB0aHJlYWQgaGFzIGV4aXRlZCwg
c28gd2UgY2FuIHJlbW92ZSB0aGUgU2hhcmVkV29ya2VyUHJveHkgZnJvbSB0aGUgcmVwb3NpdG9y
eS4KKyAgICAgICAgdm9pZCByZW1vdmVQcm94eShTaGFyZWRXb3JrZXJQcm94eSopOworCisgICAg
ICAgIGJvb2wgaGFzU2hhcmVkV29ya2VycyhEb2N1bWVudCopOworCiAgICAgICAgIHN0YXRpYyBE
ZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeSYgaW5zdGFuY2UoKTsKICAgICBwcml2YXRlOgog
ICAgICAgICBEZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeSgpOwpAQCAtNjgsMTEgKzc4LDkg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBNdXRleCB1c2VkIHRvIHByb3RlY3Qg
aW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLgogICAgICAgICBNdXRleCBtX2xvY2s7CiAKLSAgICAg
ICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFNoYXJlZFdvcmtlclByb3h5PiA+IFNo
YXJlZFdvcmtlck5hbWVNYXA7Ci0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U2VjdXJp
dHlPcmlnaW4+LCBTaGFyZWRXb3JrZXJOYW1lTWFwKiwgU2VjdXJpdHlPcmlnaW5IYXNoPiBTaGFy
ZWRXb3JrZXJQcm94eUNhY2hlOwotCi0gICAgICAgIC8vIEl0ZW1zIGluIHRoaXMgY2FjaGUgbWF5
IGJlIGZyZWVkIG9uIGFub3RoZXIgdGhyZWFkLCBzbyBhbGwga2V5cyBhbmQgdmFsdWVzIG11c3Qg
YmUgZWl0aGVyIGNvcGllZCBiZWZvcmUgaW5zZXJ0aW9uIG9yIHRocmVhZCBzYWZlLgotICAgICAg
ICBTaGFyZWRXb3JrZXJQcm94eUNhY2hlIG1fY2FjaGU7CisgICAgICAgIC8vIExpc3Qgb2Ygc2hh
cmVkIHdvcmtlcnMuIEV4cGVjdGF0aW9uIGlzIHRoYXQgdGhlcmUgd2lsbCBiZSBhIGxpbWl0ZWQg
bnVtYmVyIG9mIHNoYXJlZCB3b3JrZXJzLCBhbmQgc28gdHJhY2tpbmcgdGhlbSBpbiBhIFZlY3Rv
ciBpcyBtb3JlIGVmZmljaWVudCB0aGFuIG5lc3RlZCBIYXNoTWFwcy4KKyAgICAgICAgdHlwZWRl
ZiBWZWN0b3I8UmVmUHRyPFNoYXJlZFdvcmtlclByb3h5PiA+IFNoYXJlZFdvcmtlclByb3h5UmVw
b3NpdG9yeTsKKyAgICAgICAgU2hhcmVkV29ya2VyUHJveHlSZXBvc2l0b3J5IG1fY2FjaGU7CiAg
ICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3Jr
ZXJzL1NoYXJlZFdvcmtlclJlcG9zaXRvcnkuaCBiL1dlYkNvcmUvd29ya2Vycy9TaGFyZWRXb3Jr
ZXJSZXBvc2l0b3J5LmgKaW5kZXggODRhY2Y3Ny4uY2QwZmQ5ZiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS93b3JrZXJzL1NoYXJlZFdvcmtlclJlcG9zaXRvcnkuaAorKysgYi9XZWJDb3JlL3dvcmtlcnMv
U2hhcmVkV29ya2VyUmVwb3NpdG9yeS5oCkBAIC0zNCwxMiArMzQsMTIgQEAKICNpZiBFTkFCTEUo
U0hBUkVEX1dPUktFUlMpCiAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0KICNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorICAgIGNsYXNzIERvY3VtZW50OwogICAgIGNsYXNzIEtVUkw7CiAg
ICAgY2xhc3MgTWVzc2FnZVBvcnRDaGFubmVsOwogICAgIGNsYXNzIFNoYXJlZFdvcmtlcjsKQEAg
LTUwLDYgKzUwLDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwdWJsaWM6CiAgICAgICAg
IC8vIENvbm5lY3RzIHRoZSBwYXNzZWQgU2hhcmVkV29ya2VyIG9iamVjdCB3aXRoIHRoZSBzcGVj
aWZpZWQgd29ya2VyIHRocmVhZCwgY3JlYXRpbmcgYSBuZXcgdGhyZWFkIGlmIG5lY2Vzc2FyeS4K
ICAgICAgICAgc3RhdGljIHZvaWQgY29ubmVjdChQYXNzUmVmUHRyPFNoYXJlZFdvcmtlcj4sIFBh
c3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsPiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYg
bmFtZSwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgICAgIC8vIEludm9rZWQgd2hlbiBhIGRvY3Vt
ZW50IGhhcyBiZWVuIGRldGFjaGVkLCBzbyB3ZSBjYW4gc2h1dCBkb3duIGFueSBhc3NvY2lhdGVk
IHdvcmtlcnMuCisgICAgICAgIHN0YXRpYyB2b2lkIGRvY3VtZW50RGV0YWNoZWQoRG9jdW1lbnQq
KTsKKworICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHBhc3NlZCBkb2N1bWVudCBpcyBh
c3NvY2lhdGVkIHdpdGggYW55IFNoYXJlZFdvcmtlcnMsIHRvIGFsbG93IEZyYW1lTG9hZGVyIHRv
IGRldGVybWluZSBpZiB0aGUgRG9jdW1lbnQgY2FuIGJlIGNhY2hlZCBpbiB0aGUgcGFnZSBjYWNo
ZS4KKyAgICAgICAgc3RhdGljIGJvb2wgaGFzU2hhcmVkV29ya2VycyhEb2N1bWVudCopOwogICAg
IHByaXZhdGU6CiAgICAgICAgIFNoYXJlZFdvcmtlclJlcG9zaXRvcnkoKSB7IH0KICAgICB9Owo=
</data>
<flag name="review"
          id="18695"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34616</attachid>
            <date>2009-08-11 17:01:16 -0700</date>
            <delta_ts>2009-08-11 17:14:18 -0700</delta_ts>
            <desc>Patch addressing Levin&apos;s comments</desc>
            <filename>z</filename>
            <type>text/plain</type>
            <size>25938</size>
            <attacher name="Andrew Wilson">atwilson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBiZmM2ODdjLi5hNzY3MzE1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMDktMDgt
MTAgIERyZXcgV2lsc29uICA8YXR3aWxzb25AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTaGFyZWRXb3JrZXJzIGRvIG5vdCBleGl0
IHdoZW4gdGhlIGxhc3QgcGFyZW50IGRvY3VtZW50IGV4aXRzLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgxNzAKKworICAgICAgICBBZGRlZCBtb3Jl
IHRlc3RzIHRvIGNoZWNrIHRoYXQgcHJldmlvdXMgaW5jYXJuYXRpb25zIG9mIHRoZSBTaGFyZWRX
b3JrZXIgIm5hbWUiIGFyZSBzaHV0IGRvd24uCisKKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc2hh
cmVkLXdvcmtlci1yZXBsYWNlLWdsb2JhbC1jb25zdHJ1Y3Rvci5odG1sLWRpc2FibGVkOgorICAg
ICAgICBGaXhlZCBpbmNvcnJlY3QgcGF0aCB0byBjb21tb24gc2NyaXB0LgorICAgICAgICAqIGZh
c3Qvd29ya2Vycy9zaGFyZWQtd29ya2VyLXNoYXJlZC1leHBlY3RlZC50eHQ6CisgICAgICAgICog
ZmFzdC93b3JrZXJzL3NoYXJlZC13b3JrZXItc2hhcmVkLmh0bWwtZGlzYWJsZWQ6CisgICAgICAg
IEFkZGVkIG1vcmUgdGVzdHMgZm9yIHNoYXJpbmcsIGluY2x1ZGluZyBpbml0aWFsIHRlc3QgdG8g
bWFrZSBzdXJlIHByZXZpb3VzIGluY2FybmF0aW9ucyBvZiBzaGFyZWQgd29ya2VyIHdlcmUgY2xv
c2VkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy93b3JrZXItcmVwbGFjZS1nbG9iYWwtY29uc3Ry
dWN0b3IuaHRtbDoKKyAgICAgICAgUmVtb3ZlZCBleHRyYW5lb3VzIGNsb3NpbmcgSFRNTCB0YWcu
CisKIDIwMDktMDgtMTEgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAg
IE5vIHJldmlldywganVzdCBhZGRpbmcgcmVzdWx0cy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3Qvd29ya2Vycy9zaGFyZWQtd29ya2VyLXJlcGxhY2UtZ2xvYmFsLWNvbnN0cnVjdG9yLmh0
bWwtZGlzYWJsZWQgYi9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc2hhcmVkLXdvcmtlci1yZXBs
YWNlLWdsb2JhbC1jb25zdHJ1Y3Rvci5odG1sLWRpc2FibGVkCmluZGV4IDMyZDQ4YTQuLmQzNTVj
NDQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zaGFyZWQtd29ya2VyLXJl
cGxhY2UtZ2xvYmFsLWNvbnN0cnVjdG9yLmh0bWwtZGlzYWJsZWQKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC93b3JrZXJzL3NoYXJlZC13b3JrZXItcmVwbGFjZS1nbG9iYWwtY29uc3RydWN0b3IuaHRt
bC1kaXNhYmxlZApAQCAtMiw2ICsyLDYgQEAKIDxwPlRlc3QgcmVwbGFjaW5nIGdsb2JhbCBjb25z
dHJ1Y3RvcnMgaW4gYSB3b3JrZXIgY29udGV4dC48L3A+CiA8ZGl2IGlkPXJlc3VsdD48L2Rpdj4K
IDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2hhcmVkLXdvcmtlci1jcmVhdGUtY29tbW9uLmpzIj48
L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJ3b3JrZXItcmVwbGFjZS1nbG9iYWwtY29uc3RydWN0b3Iu
anMiPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy93b3JrZXItcmVwbGFjZS1nbG9iYWwtY29uc3Ry
dWN0b3IuanMiPgogPC9zY3JpcHQ+CiA8L2JvZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L3dvcmtlcnMvc2hhcmVkLXdvcmtlci1zaGFyZWQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvZmFzdC93b3JrZXJzL3NoYXJlZC13b3JrZXItc2hhcmVkLWV4cGVjdGVkLnR4dAppbmRleCAx
NzU0ZTU5Li5kMTAxZjIxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc2hh
cmVkLXdvcmtlci1zaGFyZWQtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3Qvd29y
a2Vycy9zaGFyZWQtd29ya2VyLXNoYXJlZC1leHBlY3RlZC50eHQKQEAgLTEsNiArMSw3IEBACiBU
ZXN0IHNpbXBsZSBzaGFyZWQgd29ya2VyIHNoYXJpbmcgY2FzZXMuIFNob3VsZCBwcmludCBzZXZl
cmFsIFBBU1MgbGluZXMgZm9sbG93ZWQgYnkgRE9ORS4KIAogUEFTUzogRXhjZXB0aW9uIHRocm93
biB3aGVuIGNyZWF0aW5nIFNoYXJlZFdvcmtlciB3aXRoIGRpZmZlcmVudCBVUkxzIGJ1dCBzYW1l
IG5hbWU6IEVycm9yOiBVUkxfTUlTTUFUQ0hfRVJSOiBET00gRXhjZXB0aW9uIDIxCitQQVNTOiBB
Y2Nlc3NpbmcgbmV3IGluc3RhbmNlIG9mIHNoYXJlZCB3b3JrZXI6IHNlbGYuZm9vOiB1bmRlZmlu
ZWQKIFBBU1M6IFNldHRpbmcgZ2xvYmFsIHZhcmlhYmxlIGluIHNoYXJlZCB3b3JrZXI6IHNlbGYu
Zm9vID0gMTIzNDogMTIzNAogUEFTUzogQWNjZXNzaW5nIHNpbXVsdGFuZW91c2x5LWxvYWRlZCBp
bnN0YW5jZSBvZiBzaGFyZWQgd29ya2VyOiBzZWxmLmZvbzogMTIzNAogUEFTUzogQWNjZXNzaW5n
IG5ldyBpbnN0YW5jZSBvZiBzaGFyZWQgd29ya2VyOiBzZWxmLmZvbzogdW5kZWZpbmVkCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc2hhcmVkLXdvcmtlci1zaGFyZWQuaHRt
bC1kaXNhYmxlZCBiL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zaGFyZWQtd29ya2VyLXNoYXJl
ZC5odG1sLWRpc2FibGVkCmluZGV4IDE5NmE2MmYuLjdmYjI4OGUgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2Zhc3Qvd29ya2Vycy9zaGFyZWQtd29ya2VyLXNoYXJlZC5odG1sLWRpc2FibGVkCisr
KyBiL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zaGFyZWQtd29ya2VyLXNoYXJlZC5odG1sLWRp
c2FibGVkCkBAIC0xMyw2ICsxMyw3IEBAIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
IHsKIH0KIAogLy8gTG9hZCB0d28gd29ya2VycyBzaW11bHRhbmVvdXNseSwgdG8gZW5zdXJlIHRo
YXQgc2ltdWx0YW5lb3VzIGxvYWRzIGFsc28geWllbGQgdGhlIHNhbWUgaW5zdGFuY2UuCisvLyBM
b2FkaW5nIGEgd29ya2VyIG5hbWVkICJuYW1lIiB0ZXN0cyB0aGF0IHdvcmtlcnMgc2h1dGRvd24g
d2hlbiB0aGUgcGFyZW50IGRvY3VtZW50IGV4aXRzLCBiZWNhdXNlIG90aGVyIHRlc3RzIGFsc28g
Y3JlYXRlIHdvcmtlcnMgd2l0aCB0aGF0IHNhbWUgbmFtZSBidXQgd2l0aCBkaWZmZXJlbnQgVVJM
cy4KIHZhciB3b3JrZXIgPSBuZXcgU2hhcmVkV29ya2VyKCdyZXNvdXJjZXMvc2hhcmVkLXdvcmtl
ci1jb21tb24uanMnLCAnbmFtZScpOwogdmFyIHdvcmtlcjIgPSBuZXcgU2hhcmVkV29ya2VyKCdy
ZXNvdXJjZXMvc2hhcmVkLXdvcmtlci1jb21tb24uanMnLCAnbmFtZScpOwogCkBAIC0yNSwxNiAr
MjYsMjAgQEAgdHJ5IHsKIAogCiAvLyBTZXQgc29tZXRoaW5nIGluIGdsb2JhbCBjb250ZXh0IGlu
IG9uZSB3b3JrZXIsIHJlYWQgdmFsdWUgYmFjayBvbiBvdGhlciB3b3JrZXIsIHRvIG1ha2Ugc3Vy
ZSB0aGV5IGFyZSB0cnVseSBzaGFyZWQuCi13b3JrZXIucG9ydC5wb3N0TWVzc2FnZSgiZXZhbCBz
ZWxmLmZvbyA9IDEyMzQiKTsKLQord29ya2VyLnBvcnQucG9zdE1lc3NhZ2UoImV2YWwgc2VsZi5m
b28iKTsKIHdvcmtlci5wb3J0Lm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KQogewotICAgIGxv
ZygoZXZlbnQuZGF0YSA9PSAic2VsZi5mb28gPSAxMjM0OiAxMjM0IiA/ICJQQVNTOiAiIDogIkZB
SUw6ICIpICsgIlNldHRpbmcgZ2xvYmFsIHZhcmlhYmxlIGluIHNoYXJlZCB3b3JrZXI6ICIgKyBl
dmVudC5kYXRhKTsKLSAgICB3b3JrZXIyLnBvcnQucG9zdE1lc3NhZ2UoImV2YWwgc2VsZi5mb28i
KTsKLSAgICB3b3JrZXIyLnBvcnQub25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpCisgICAgbG9n
KChldmVudC5kYXRhID09ICJzZWxmLmZvbzogdW5kZWZpbmVkIiA/ICJQQVNTOiAiIDogIkZBSUw6
ICIpICsgIkFjY2Vzc2luZyBuZXcgaW5zdGFuY2Ugb2Ygc2hhcmVkIHdvcmtlcjogIiArIGV2ZW50
LmRhdGEpOworICAgIHdvcmtlci5wb3J0LnBvc3RNZXNzYWdlKCJldmFsIHNlbGYuZm9vID0gMTIz
NCIpOworICAgIHdvcmtlci5wb3J0Lm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsK
LSAgICAgICAgbG9nKChldmVudC5kYXRhID09ICJzZWxmLmZvbzogMTIzNCIgPyAiUEFTUzogIiA6
ICJGQUlMOiAiKSArICJBY2Nlc3Npbmcgc2ltdWx0YW5lb3VzbHktbG9hZGVkIGluc3RhbmNlIG9m
IHNoYXJlZCB3b3JrZXI6ICIgKyBldmVudC5kYXRhKTsKLSAgICAgICAgdGVzdE5ld1dvcmtlcigp
OworICAgICAgICBsb2coKGV2ZW50LmRhdGEgPT0gInNlbGYuZm9vID0gMTIzNDogMTIzNCIgPyAi
UEFTUzogIiA6ICJGQUlMOiAiKSArICJTZXR0aW5nIGdsb2JhbCB2YXJpYWJsZSBpbiBzaGFyZWQg
d29ya2VyOiAiICsgZXZlbnQuZGF0YSk7CisgICAgICAgIHdvcmtlcjIucG9ydC5wb3N0TWVzc2Fn
ZSgiZXZhbCBzZWxmLmZvbyIpOworICAgICAgICB3b3JrZXIyLnBvcnQub25tZXNzYWdlID0gZnVu
Y3Rpb24oZXZlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvZygoZXZlbnQuZGF0YSA9PSAi
c2VsZi5mb286IDEyMzQiID8gIlBBU1M6ICIgOiAiRkFJTDogIikgKyAiQWNjZXNzaW5nIHNpbXVs
dGFuZW91c2x5LWxvYWRlZCBpbnN0YW5jZSBvZiBzaGFyZWQgd29ya2VyOiAiICsgZXZlbnQuZGF0
YSk7CisgICAgICAgICAgICB0ZXN0TmV3V29ya2VyKCk7CisgICAgICAgIH0KICAgICB9CiB9CiAK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy93b3JrZXItcmVwbGFjZS1nbG9i
YWwtY29uc3RydWN0b3IuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy93b3JrZXItcmVw
bGFjZS1nbG9iYWwtY29uc3RydWN0b3IuaHRtbAppbmRleCA1NWU1NmY1Li43YzgwOGQwIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvd29ya2VyLXJlcGxhY2UtZ2xvYmFsLWNv
bnN0cnVjdG9yLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3dvcmtlci1yZXBs
YWNlLWdsb2JhbC1jb25zdHJ1Y3Rvci5odG1sCkBAIC01LDQgKzUsMyBAQAogPHNjcmlwdCBzcmM9
InJlc291cmNlcy93b3JrZXItcmVwbGFjZS1nbG9iYWwtY29uc3RydWN0b3IuanMiPgogPC9zY3Jp
cHQ+CiA8L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IGUwMjdhY2IuLjdmZmFkYzYgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTE4IEBACisy
MDA5LTA4LTEwICBEcmV3IFdpbHNvbiAgPGF0d2lsc29uQGdvb2dsZS5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2hhcmVkV29ya2VycyBkbyBu
b3QgZXhpdCB3aGVuIHRoZSBsYXN0IHBhcmVudCBkb2N1bWVudCBleGl0cworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgxNzAKKworICAgICAgICBQcmV2
ZW50cyBEb2N1bWVudHMgZnJvbSBiZWluZyBzdXNwZW5kZWQvcGxhY2VkIGluIHRoZSBwYWdlIGNh
Y2hlIGlmIHRoZXkgYXJlIGFzc29jaWF0ZWQgd2l0aCBzaGFyZWQgd29ya2Vycy4KKworICAgICAg
ICBBZGRlZCB2ZWN0b3IgY2FjaGUgaW5zdGVhZCBvZiBuZXN0ZWQgaGFzaCB0YWJsZXMgZm9yIFNo
YXJlZFdvcmtlciByZXBvc2l0b3J5LgorCisgICAgICAgIEFkZGVkIFNoYXJlZFdvcmtlclJlcG9z
aXRvcnk6OmRvY3VtZW50RGV0YWNoZWQgQVBJLgorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpkZXRhY2gpOgorICAgICAgICBOb3RpZmll
cyBTaGFyZWRXb3JrZXJSZXBvc2l0b3J5IHdoZW4gdGhlIGRvY3VtZW50IGlzIGNsb3NpbmcuCisg
ICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgVXBkYXRlZCBGcmFtZUxv
YWRlciB0byBub3QgY2FjaGUgdGhlIERvY3VtZW50IGlmIGl0IGlzIGFzc29jaWF0ZWQgd2l0aCBh
IFNoYXJlZFdvcmtlciAoc2luY2Ugd2UgY2FuJ3Qgc3VzcGVuZCB3b3JrZXJzIHlldCwgd2UgbmVl
ZCB0byBzaHV0IHRoZW0gZG93bikuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y2Fu
Q2FjaGVQYWdlQ29udGFpbmluZ1RoaXNGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlcjo6bG9nQ2FuQ2FjaGVGcmFtZURlY2lzaW9uKToKKyAgICAgICAgKiB3b3JrZXJzL0RlZmF1
bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFdv
cmtlclByb3h5OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkV29ya2VyUHJveHk6
OmlzQ2xvc2luZyk6CisgICAgICAgIFJlbmFtZWQgZnJvbSBjbG9zaW5nKCkuCisgICAgICAgIChX
ZWJDb3JlOjpTaGFyZWRXb3JrZXJQcm94eTo6bWF0Y2hlcyk6CisgICAgICAgIEFkZGVkIG1hbnVh
bCBlcXVhbGl0eSBmdW5jdGlvbiB0byByZXBsYWNlIG9sZCBoYXNoIGxvb2t1cC4KKyAgICAgICAg
KFdlYkNvcmU6OlNoYXJlZFdvcmtlclByb3h5Ojppc0RvY3VtZW50SW5Xb3JrZXJEb2N1bWVudHMp
OgorICAgICAgICBDaGVja3MgdG8gc2VlIGlmIGEgZG9jdW1lbnQgaXMgaW4gdGhlIHdvcmtlcidz
IGxpc3Qgb2YgZG9jdW1lbnRzLiBVc2VkIHRvIGRldGVybWluZSBpZiBwYWdlIGlzIHN1c3BlbmRh
YmxlLgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkV29ya2VyUHJveHk6OlNoYXJlZFdvcmtlclBy
b3h5KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFdvcmtlclByb3h5OjphZGRUb1dvcmtlckRv
Y3VtZW50cyk6CisgICAgICAgIEFkZGVkIHRyYWNraW5nIG9mIHRoZSB3b3JrZXIncyBsaXN0IG9m
IGRvY3VtZW50cyBmb3IgbGlmZWN5Y2xlIHB1cnBvc2VzLgorICAgICAgICAoV2ViQ29yZTo6U2hh
cmVkV29ya2VyUHJveHk6OmRvY3VtZW50RGV0YWNoZWQpOgorICAgICAgICBTaHV0cyBkb3duIHRo
ZSBwcm94eSB3aGVuIHRoZSBsYXN0IGFzc29jaWF0ZWQgZG9jdW1lbnQgaXMgZGV0YWNoZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTaGFyZWRXb3JrZXJQcm94eTo6Y2xvc2UpOgorICAgICAgICBNYXJr
cyB0aGUgcHJveHkgYXMgY2xvc2VkIHNvIGl0IGlzIG5vIGxvbmdlciBzaGFyZWQgd2l0aCBuZXcg
aW5zdGFuY2VzLgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkV29ya2VyUHJveHk6OndvcmtlckNv
bnRleHREZXN0cm95ZWQpOgorICAgICAgICBSZW1vdmVzIHRoZSBwcm94eSBmcm9tIHRoZSByZXBv
c2l0b3J5L2ZyZWVzIHRoZSBwcm94eSB3aGVuIHRoZSBhc3NvY2lhdGVkIFNoYXJlZFdvcmtlckNv
bnRleHQgaXMgZGVzdHJveWVkLgorICAgICAgICAoV2ViQ29yZTo6RGVmYXVsdFNoYXJlZFdvcmtl
clJlcG9zaXRvcnk6OndvcmtlclNjcmlwdExvYWRlZCk6CisgICAgICAgIGNsb3NpbmcoKS0+aXND
bG9zaW5nKCkKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFdvcmtlclJlcG9zaXRvcnk6OmRvY3Vt
ZW50RGV0YWNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkV29ya2VyUmVwb3NpdG9yeTo6
aGFzU2hhcmVkV29ya2Vycyk6CisgICAgICAgIFVzZWQgYnkgRnJhbWVMb2FkZXIgdG8gZGV0ZXJt
aW5lIGlmIGEgcGFnZSBoYXMgc2hhcmVkIHdvcmtlcnMgYW5kIHNvIGNhbm5vdCBiZSBzdXNwZW5k
ZWQvY2FjaGVkLgorICAgICAgICAoV2ViQ29yZTo6RGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRv
cnk6Omhhc1NoYXJlZFdvcmtlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RGVmYXVsdFNoYXJlZFdv
cmtlclJlcG9zaXRvcnk6OnJlbW92ZVByb3h5KToKKyAgICAgICAgSW52b2tlZCBieSB3b3JrZXJD
b250ZXh0RGVzdHJveWVkKCkgdG8gcmVtb3ZlIGEgU2hhcmVkV29ya2VyUHJveHkgZnJvbSB0aGUg
cmVwb3NpdG9yeS4KKyAgICAgICAgKFdlYkNvcmU6OkRlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0
b3J5Ojpkb2N1bWVudERldGFjaGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmF1bHRTaGFyZWRX
b3JrZXJSZXBvc2l0b3J5Ojpjb25uZWN0VG9Xb3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGVm
YXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6OmdldFByb3h5KToKKyAgICAgICAgKiB3b3JrZXJz
L0RlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5Lmg6CisgICAgICAgICogd29ya2Vycy9TaGFy
ZWRXb3JrZXJSZXBvc2l0b3J5Lmg6CisKKzIwMDktMDgtMDkgIERyZXcgV2lsc29uICA8YXR3aWxz
b25AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBOZWVkIHRvIHJlZmFjdG9yIFdvcmtlck9iamVjdFByb3h5LgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgxMzYKKworICAgICAgICBBZGRl
ZCBXb3JrZXJSZXBvcnRpbmdQcm94eSBmb3IgcmVwb3J0aW5nIHdvcmtlciBzdGF0ZSAoZXhjZXB0
aW9ucywgY29uc29sZSBtZXNzYWdlcywgdGhyZWFkIGV4aXRlZCkgdG8gdGhlIHBhcmVudC4KKwor
ICAgICAgICBFeGlzdGluZyB0ZXN0cyBhcmUgc3VmZmljaWVudCwgYXMgdGhpcyBpcyBvbmx5IGEg
cmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgQWRkZWQg
V29ya2VyUmVwb3J0aW5nUHJveHkuaCB0byBidWlsZC4KKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6
CisgICAgICAgIEFkZGVkIFdvcmtlclJlcG9ydGluZ1Byb3h5LmggdG8gYnVpbGQuCisgICAgICAg
ICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgIEFkZGVkIFdvcmtlclJl
cG9ydGluZ1Byb3h5LmggdG8gYnVpbGQuCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICBBZGRlZCBXb3JrZXJSZXBvcnRpbmdQcm94eS5oIHRvIGJ1
aWxkLgorICAgICAgICAqIHdvcmtlcnMvRGVkaWNhdGVkV29ya2VyQ29udGV4dC5jcHA6CisgICAg
ICAgICogd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJDb250ZXh0Lmg6CisgICAgICAgIFJlbW92ZWQg
YWRkTWVzc2FnZS9mb3J3YXJkRXhjZXB0aW9uKCkgQVBJcyAtIG5vdyBoYW5kbGVkIGJ5IFdvcmtl
clJlcG9ydGluZ1Byb3h5LgorICAgICAgICAqIHdvcmtlcnMvRGVkaWNhdGVkV29ya2VyVGhyZWFk
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlZGljYXRlZFdvcmtlclRocmVhZDo6RGVkaWNhdGVk
V29ya2VyVGhyZWFkKToKKyAgICAgICAgQ2hhbmdlZCBjb25zdHJ1Y3RvciB0byBwYXNzIFdvcmtl
clJlcG9ydGluZ1Byb3h5IHRvIGJhc2UgY2xhc3MuCisgICAgICAgICogd29ya2Vycy9EZWZhdWx0
U2hhcmVkV29ya2VyUmVwb3NpdG9yeS5jcHA6CisgICAgICAgIFVwZGF0ZWQgU2hhcmVkV29ya2Vy
UHJveHkgdG8gaW1wbGVtZW50IFdvcmtlclJlcG9ydGluZ1Byb3h5IGludGVyZmFjZS4KKyAgICAg
ICAgKFdlYkNvcmU6OlNoYXJlZFdvcmtlclByb3h5Ojpwb3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmpl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkV29ya2VyUHJveHk6OnBvc3RDb25zb2xlTWVz
c2FnZVRvV29ya2VyT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFdvcmtlclByb3h5
Ojp3b3JrZXJDb250ZXh0Q2xvc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFdvcmtlclBy
b3h5Ojp3b3JrZXJDb250ZXh0RGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmF1bHRT
aGFyZWRXb3JrZXJSZXBvc2l0b3J5Ojp3b3JrZXJTY3JpcHRMb2FkZWQpOgorICAgICAgICBOb3cg
cGFzc2VzIGluIFdvcmtlclJlcG9ydGluZ1Byb3h5IHdoZW4gY3JlYXRpbmcgU2hhcmVkV29ya2Vy
VGhyZWFkLgorICAgICAgICAqIHdvcmtlcnMvU2hhcmVkV29ya2VyQ29udGV4dC5jcHA6CisgICAg
ICAgICogd29ya2Vycy9TaGFyZWRXb3JrZXJDb250ZXh0Lmg6CisgICAgICAgIFJlbW92ZWQgYWRk
TWVzc2FnZS9mb3J3YXJkRXhjZXB0aW9uKCkgQVBJcyAtIG5vdyBoYW5kbGVkIGJ5IFdvcmtlclJl
cG9ydGluZ1Byb3h5LgorICAgICAgICAqIHdvcmtlcnMvU2hhcmVkV29ya2VyVGhyZWFkLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFdvcmtlclRocmVhZDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNoYXJlZFdvcmtlclRocmVhZDo6U2hhcmVkV29ya2VyVGhyZWFkKToKKyAgICAg
ICAgUGFzc2VzIFdvcmtlclJlcG9ydGluZ1Byb3h5IHRvIGJhc2UgY2xhc3MgY29uc3RydWN0b3Iu
CisgICAgICAgICogd29ya2Vycy9TaGFyZWRXb3JrZXJUaHJlYWQuaDoKKyAgICAgICAgQ29uc3Ry
dWN0b3Igbm93IHRha2VzIGEgV29ya2VyUmVwb3J0aW5nUHJveHkuCisgICAgICAgICogd29ya2Vy
cy9Xb3JrZXJDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHQ6On5X
b3JrZXJDb250ZXh0KToKKyAgICAgICAgTW92ZWQgY29kZSB0aGF0IGNhbGxzIHdvcmtlckNvbnRl
eHREZXN0cm95ZWQoKSBpbnRvIGJhc2UgY2xhc3Mgc28gc2hhcmVkIHdvcmtlcnMgc2hhcmUgdGhp
cyBmdW5jdGlvbmFsaXR5LgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dDo6Y2xvc2Up
OgorICAgICAgICBOb3cgbm90aWZpZXMgV29ya2VyUmVwb3J0aW5nUHJveHkgd2hlbiB0aGUgdGhy
ZWFkIGlzIGNsb3NpbmcuCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0OjpyZXBvcnRF
eGNlcHRpb24pOgorICAgICAgICBSZXBvcnRzIGV4Y2VwdGlvbnMgdmlhIFdvcmtlclJlcG9ydGlu
Z1Byb3h5LgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dDo6YWRkTWVzc2FnZSk6Cisg
ICAgICAgIFJlcG9ydHMgY29uc29sZSBtZXNzYWdlcyB2aWEgV29ya2VyUmVwb3J0aW5nUHJveHku
CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0Lmg6CisgICAgICAgICogd29ya2Vycy9X
b3JrZXJPYmplY3RQcm94eS5oOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyT2JqZWN0UHJveHk6
OndvcmtlckNvbnRleHRDbG9zZWQpOgorICAgICAgICBEZWZhdWx0IGVtcHR5IGltcGxlbWVudGF0
aW9uIGZvciBkZWRpY2F0ZWQgd29ya2Vycy4KKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlclJlcG9y
dGluZ1Byb3h5Lmg6IEFkZGVkLgorICAgICAgICBCYXNlIGludGVyZmFjZSB0aGF0IGNvbnRhaW5z
IEFQSXMgbW92ZWQgZnJvbSBXb3JrZXJPYmplY3RQcm94eS4KKyAgICAgICAgKFdlYkNvcmU6Oldv
cmtlclJlcG9ydGluZ1Byb3h5Ojp+V29ya2VyUmVwb3J0aW5nUHJveHkpOgorICAgICAgICAqIHdv
cmtlcnMvV29ya2VyVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6
V29ya2VyVGhyZWFkKToKKyAgICAgICAgVXBkYXRlZCBjb25zdHJ1Y3RvciB0byBhY2NlcHQgYSBX
b3JrZXJSZXBvcnRpbmdQcm94eS4KKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlclRocmVhZC5oOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkOjp3b3JrZXJSZXBvcnRpbmdQcm94eSk6CisK
IDIwMDktMDgtMTEgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEFkYW0gVHJlYXQuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggYTc3OWY0ZC4uODliYjk0
ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmNwcApAQCAtMTA4LDYgKzEwOCw3IEBACiAjaW5jbHVkZSAiU2VnbWVudGVkU3Ry
aW5nLmgiCiAjaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNldHRp
bmdzLmgiCisjaW5jbHVkZSAiU2hhcmVkV29ya2VyUmVwb3NpdG9yeS5oIgogI2luY2x1ZGUgIlN0
eWxlU2hlZXRMaXN0LmgiCiAjaW5jbHVkZSAiVGV4dEV2ZW50LmgiCiAjaW5jbHVkZSAiVGV4dEl0
ZXJhdG9yLmgiCkBAIC0xMzQ4LDcgKzEzNDksMTEgQEAgdm9pZCBEb2N1bWVudDo6ZGV0YWNoKCkK
ICAgICAvLyBTZW5kIG91dCBkb2N1bWVudFdpbGxCZWNvbWVJbmFjdGl2ZSgpIG5vdGlmaWNhdGlv
bnMgdG8gcmVnaXN0ZXJlZCBlbGVtZW50cywKICAgICAvLyBpbiBvcmRlciB0byBzdG9wIG1lZGlh
IGVsZW1lbnRzCiAgICAgZG9jdW1lbnRXaWxsQmVjb21lSW5hY3RpdmUoKTsKLSAgICAKKworI2lm
IEVOQUJMRShTSEFSRURfV09SS0VSUykKKyAgICBTaGFyZWRXb3JrZXJSZXBvc2l0b3J5Ojpkb2N1
bWVudERldGFjaGVkKHRoaXMpOworI2VuZGlmCisKICAgICBpZiAobV9mcmFtZSkgewogICAgICAg
ICBGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCk7CiAgICAgICAgIGlmICh2aWV3KQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwIGIvV2ViQ29yZS9sb2Fk
ZXIvRnJhbWVMb2FkZXIuY3BwCmluZGV4IDc4NDU4YTQuLmQ1Yzk3ODEgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9GcmFtZUxv
YWRlci5jcHAKQEAgLTg3LDYgKzg3LDcgQEAKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgog
I2luY2x1ZGUgIlNlZ21lbnRlZFN0cmluZy5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5j
bHVkZSAiU2hhcmVkV29ya2VyUmVwb3NpdG9yeS5oIgogI2luY2x1ZGUgIlRleHRSZXNvdXJjZURl
Y29kZXIuaCIKICNpbmNsdWRlICJXaW5kb3dGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlhNTEh0dHBS
ZXF1ZXN0LmgiCkBAIC0xODEyLDYgKzE4MTMsOSBAQCBib29sIEZyYW1lTG9hZGVyOjpjYW5DYWNo
ZVBhZ2VDb250YWluaW5nVGhpc0ZyYW1lKCkKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAgICAg
ICYmICFtX2ZyYW1lLT5kb2N1bWVudCgpLT5oYXNPcGVuRGF0YWJhc2VzKCkKICNlbmRpZgorI2lm
IEVOQUJMRShTSEFSRURfV09SS0VSUykKKyAgICAgICAgJiYgIVNoYXJlZFdvcmtlclJlcG9zaXRv
cnk6Omhhc1NoYXJlZFdvcmtlcnMobV9mcmFtZS0+ZG9jdW1lbnQoKSkKKyNlbmRpZgogICAgICAg
ICAmJiAhbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXNpbmdHZW9sb2NhdGlvbigpCiAgICAgICAgICYm
IG1fY3VycmVudEhpc3RvcnlJdGVtCiAgICAgICAgICYmICFtX3F1aWNrUmVkaXJlY3RDb21pbmcK
QEAgLTE5NTgsNiArMTk2MiwxMCBAQCBib29sIEZyYW1lTG9hZGVyOjpsb2dDYW5DYWNoZUZyYW1l
RGVjaXNpb24oaW50IGluZGVudExldmVsKQogICAgICAgICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQo
KS0+aGFzT3BlbkRhdGFiYXNlcygpKQogICAgICAgICAgICAgeyBQQ0xPRygiICAgLUZyYW1lIGhh
cyBvcGVuIGRhdGFiYXNlIGhhbmRsZXMiKTsgY2Fubm90Q2FjaGUgPSB0cnVlOyB9CiAjZW5kaWYK
KyNpZiBFTkFCTEUoU0hBUkVEX1dPUktFUlMpCisgICAgICAgIGlmIChTaGFyZWRXb3JrZXJSZXBv
c2l0b3J5OjpoYXNTaGFyZWRXb3JrZXJzKG1fZnJhbWUtPmRvY3VtZW50KCkpKQorICAgICAgICAg
ICAgeyBQQ0xPRygiICAgLUZyYW1lIGhhcyBhc3NvY2lhdGVkIFNoYXJlZFdvcmtlcnMiKTsgY2Fu
bm90Q2FjaGUgPSB0cnVlOyB9CisjZW5kaWYKICAgICAgICAgaWYgKG1fZnJhbWUtPmRvY3VtZW50
KCktPnVzaW5nR2VvbG9jYXRpb24oKSkKICAgICAgICAgICAgIHsgUENMT0coIiAgIC1GcmFtZSB1
c2VzIEdlb2xvY2F0aW9uIik7IGNhbm5vdENhY2hlID0gdHJ1ZTsgfQogICAgICAgICBpZiAoIW1f
Y3VycmVudEhpc3RvcnlJdGVtKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL0RlZmF1bHRT
aGFyZWRXb3JrZXJSZXBvc2l0b3J5LmNwcCBiL1dlYkNvcmUvd29ya2Vycy9EZWZhdWx0U2hhcmVk
V29ya2VyUmVwb3NpdG9yeS5jcHAKaW5kZXggYzkwOTg0ZS4uNmNhZGQ0YSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS93b3JrZXJzL0RlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5LmNwcAorKysgYi9X
ZWJDb3JlL3dvcmtlcnMvRGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnkuY3BwCkBAIC0zNSw2
ICszNSw3IEBACiAjaW5jbHVkZSAiRGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnkuaCIKIAog
I2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5j
bHVkZSAiTWVzc2FnZVBvcnQuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCkBAIC00MiwyNSArNDMsMjggQEAKICNpbmNsdWRlICJTZWN1
cml0eU9yaWdpbkhhc2guaCIKICNpbmNsdWRlICJTaGFyZWRXb3JrZXIuaCIKICNpbmNsdWRlICJT
aGFyZWRXb3JrZXJDb250ZXh0LmgiCisjaW5jbHVkZSAiU2hhcmVkV29ya2VyUmVwb3NpdG9yeS5o
IgogI2luY2x1ZGUgIlNoYXJlZFdvcmtlclRocmVhZC5oIgogI2luY2x1ZGUgIldvcmtlckxvYWRl
clByb3h5LmgiCiAjaW5jbHVkZSAiV29ya2VyUmVwb3J0aW5nUHJveHkuaCIKICNpbmNsdWRlICJX
b3JrZXJTY3JpcHRMb2FkZXIuaCIKICNpbmNsdWRlICJXb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQu
aCIKLQorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNoYXJlZFdvcmtlclByb3h5IDogcHVi
bGljIFRocmVhZFNhZmVTaGFyZWQ8U2hhcmVkV29ya2VyUHJveHk+LCBwdWJsaWMgV29ya2VyTG9h
ZGVyUHJveHksIHB1YmxpYyBXb3JrZXJSZXBvcnRpbmdQcm94eSB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8U2hhcmVkV29ya2VyUHJveHk+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IEtVUkwmIHVybCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFNoYXJlZFdvcmtlclBy
b3h5KG5hbWUsIHVybCkpOyB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkV29ya2VyUHJv
eHk+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEtVUkwmIHVybCwgUGFzc1JlZlB0
cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luKSB7IHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVkV29y
a2VyUHJveHkobmFtZSwgdXJsLCBvcmlnaW4pKTsgfQogCiAgICAgdm9pZCBzZXRUaHJlYWQoUGFz
c1JlZlB0cjxTaGFyZWRXb3JrZXJUaHJlYWQ+IHRocmVhZCkgeyBtX3RocmVhZCA9IHRocmVhZDsg
fQogICAgIFNoYXJlZFdvcmtlclRocmVhZCogdGhyZWFkKCkgeyByZXR1cm4gbV90aHJlYWQuZ2V0
KCk7IH0KLSAgICBib29sIGNsb3NpbmcoKSBjb25zdCB7IHJldHVybiBtX2Nsb3Npbmc7IH0KKyAg
ICBib29sIGlzQ2xvc2luZygpIGNvbnN0IHsgcmV0dXJuIG1fY2xvc2luZzsgfQorICAgIHZvaWQg
Y2xvc2UoKTsKICAgICBLVVJMIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsLmNvcHkoKTsgfQog
ICAgIFN0cmluZyBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lLmNvcHkoKTsgfQorICAgIGJv
b2wgbWF0Y2hlcyhjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+
IG9yaWdpbikgY29uc3QgeyByZXR1cm4gbmFtZSA9PSBtX25hbWUgJiYgb3JpZ2luLT5lcXVhbCht
X29yaWdpbi5nZXQoKSk7IH0KIAogICAgIC8vIFdvcmtlckxvYWRlclByb3h5CiAgICAgLy8gRklY
TUU6IEltcGxlbWVudCBXb3JrZXJMb2FkZXJQcm94eSBBUElzIGJ5IHByb3h5aW5nIHRvIGFuIGFj
dGl2ZSBkb2N1bWVudC4KQEAgLTc2LDE5ICs4MCwzMCBAQCBwdWJsaWM6CiAgICAgLy8gVXBkYXRl
cyB0aGUgbGlzdCBvZiB0aGUgd29ya2VyJ3MgZG9jdW1lbnRzLCBwZXIgc2VjdGlvbiA0LjUgb2Yg
dGhlIFdlYldvcmtlcnMgc3BlYy4KICAgICB2b2lkIGFkZFRvV29ya2VyRG9jdW1lbnRzKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqKTsKIAorICAgIGJvb2wgaXNJbldvcmtlckRvY3VtZW50cyhEb2N1
bWVudCogZG9jdW1lbnQpIHsgcmV0dXJuIG1fd29ya2VyRG9jdW1lbnRzLmNvbnRhaW5zKGRvY3Vt
ZW50KTsgfQorCisgICAgLy8gUmVtb3ZlcyBhIGRldGFjaGVkIGRvY3VtZW50IGZyb20gdGhlIGxp
c3Qgb2Ygd29ya2VyJ3MgZG9jdW1lbnRzLiBNYXkgc2V0IHRoZSBjbG9zaW5nIGZsYWcgaWYgdGhp
cyBpcyB0aGUgbGFzdCBkb2N1bWVudCBpbiB0aGUgbGlzdC4KKyAgICB2b2lkIGRvY3VtZW50RGV0
YWNoZWQoRG9jdW1lbnQqKTsKKwogcHJpdmF0ZToKLSAgICBTaGFyZWRXb3JrZXJQcm94eShjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IEtVUkwmKTsKKyAgICBTaGFyZWRXb3JrZXJQcm94eShjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IEtVUkwmLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPik7
CiAgICAgYm9vbCBtX2Nsb3Npbmc7CiAgICAgU3RyaW5nIG1fbmFtZTsKICAgICBLVVJMIG1fdXJs
OworICAgIC8vIFRoZSB0aHJlYWQgaXMgZnJlZWQgd2hlbiB0aGUgcHJveHkgaXMgZGVzdHJveWVk
LCBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBwcm94eSBzdGF5cyBhcm91bmQgdW50
aWwgdGhlIFNoYXJlZFdvcmtlckNvbnRleHQgZXhpdHMuCiAgICAgUmVmUHRyPFNoYXJlZFdvcmtl
clRocmVhZD4gbV90aHJlYWQ7CisgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBtX29yaWdpbjsK
KyAgICBIYXNoU2V0PERvY3VtZW50Kj4gbV93b3JrZXJEb2N1bWVudHM7CiB9OwogCi1TaGFyZWRX
b3JrZXJQcm94eTo6U2hhcmVkV29ya2VyUHJveHkoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBL
VVJMJiB1cmwpCitTaGFyZWRXb3JrZXJQcm94eTo6U2hhcmVkV29ya2VyUHJveHkoY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBLVVJMJiB1cmwsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9y
aWdpbikKICAgICA6IG1fY2xvc2luZyhmYWxzZSkKICAgICAsIG1fbmFtZShuYW1lLmNvcHkoKSkK
ICAgICAsIG1fdXJsKHVybC5jb3B5KCkpCisgICAgLCBtX29yaWdpbihvcmlnaW4pCiB7CisgICAg
Ly8gV2Ugc2hvdWxkIGJlIHRoZSBzb2xlIG93bmVyIG9mIHRoZSBTZWN1cml0eU9yaWdpbiwgYXMg
d2Ugd2lsbCBmcmVlIGl0IG9uIGFub3RoZXIgdGhyZWFkLgorICAgIEFTU0VSVChtX29yaWdpbi0+
aGFzT25lUmVmKCkpOwogfQogCiB2b2lkIFNoYXJlZFdvcmtlclByb3h5Ojpwb3N0RXhjZXB0aW9u
VG9Xb3JrZXJPYmplY3QoY29uc3QgU3RyaW5nJiwgaW50LCBjb25zdCBTdHJpbmcmKQpAQCAtMTE4
LDcgKzEzMyw1MiBAQCB2b2lkIFNoYXJlZFdvcmtlclByb3h5OjphZGRUb1dvcmtlckRvY3VtZW50
cyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogewogICAgIC8vIE5lc3RlZCB3b3Jr
ZXJzIGFyZSBub3QgeWV0IHN1cHBvcnRlZCwgc28gcGFzc2VkLWluIGNvbnRleHQgc2hvdWxkIGFs
d2F5cyBiZSBhIERvY3VtZW50LgogICAgIEFTU0VSVChjb250ZXh0LT5pc0RvY3VtZW50KCkpOwot
ICAgIC8vIEZJWE1FOiB0cmFjayByZWZlcnJpbmcgZG9jdW1lbnRzIHNvIHdlIGNhbiBzaHV0ZG93
biB0aGUgdGhyZWFkIHdoZW4gdGhlIGxhc3Qgb25lIGV4aXRzIGFuZCByZW1vdmUgdGhlIHByb3h5
IGZyb20gdGhlIGNhY2hlLgorICAgIEFTU0VSVCghaXNDbG9zaW5nKCkpOworICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCk7CisgICAgbV93b3Jr
ZXJEb2N1bWVudHMuYWRkKGRvY3VtZW50KTsKK30KKwordm9pZCBTaGFyZWRXb3JrZXJQcm94eTo6
ZG9jdW1lbnREZXRhY2hlZChEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgaWYgKGlzQ2xvc2lu
ZygpKQorICAgICAgICByZXR1cm47CisgICAgLy8gUmVtb3ZlIHRoZSBkb2N1bWVudCBmcm9tIG91
ciBzZXQgKGlmIGl0J3MgdGhlcmUpIGFuZCBpZiB0aGF0IHdhcyB0aGUgbGFzdCBkb2N1bWVudCBp
biB0aGUgc2V0LCBtYXJrIHRoZSBwcm94eSBhcyBjbG9zZWQuCisgICAgbV93b3JrZXJEb2N1bWVu
dHMucmVtb3ZlKGRvY3VtZW50KTsKKyAgICBpZiAoIW1fd29ya2VyRG9jdW1lbnRzLnNpemUoKSkK
KyAgICAgICAgY2xvc2UoKTsKK30KKwordm9pZCBTaGFyZWRXb3JrZXJQcm94eTo6Y2xvc2UoKQor
eworICAgIEFTU0VSVCghaXNDbG9zaW5nKCkpOworICAgIG1fY2xvc2luZyA9IHRydWU7CisgICAg
Ly8gU3RvcCB0aGUgd29ya2VyIHRocmVhZCAtIHRoZSBwcm94eSB3aWxsIHN0YXkgYXJvdW5kIHVu
dGlsIHdlIGdldCB3b3JrZXJUaHJlYWRFeGl0ZWQoKSBub3RpZmljYXRpb24uCisgICAgaWYgKG1f
dGhyZWFkKQorICAgICAgICBtX3RocmVhZC0+c3RvcCgpOworfQorCit2b2lkIFNoYXJlZFdvcmtl
clByb3h5Ojpwb3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmplY3QoY29uc3QgU3RyaW5nJiwgaW50LCBj
b25zdCBTdHJpbmcmKQoreworICAgIC8vIEZJWE1FOiBMb2cgZXhjZXB0aW9ucyB0byBhbGwgcGFy
ZW50IGRvY3VtZW50cy4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFNoYXJlZFdv
cmtlclByb3h5Ojpwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdChNZXNzYWdlRGVzdGlu
YXRpb24sIE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0
cmluZyYsIGludCwgY29uc3QgU3RyaW5nJikKK3sKKyAgICAvLyBGSVhNRTogTG9nIGNvbnNvbGUg
bWVzc2FnZXMgdG8gYWxsIHBhcmVudCBkb2N1bWVudHMuCisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKworLy8gV2hlbiBjbG9zZSgpIGlzIGludm9rZWQsIG1hcmsgdGhlIHByb3h5IGFzIGNsb3Np
bmcgc28gd2UgZG9uJ3Qgc2hhcmUgaXQgd2l0aCBhbnkgbmV3IHJlcXVlc3RzLgordm9pZCBTaGFy
ZWRXb3JrZXJQcm94eTo6d29ya2VyQ29udGV4dENsb3NlZCgpCit7CisgICAgbV9jbG9zaW5nID0g
dHJ1ZTsKK30KKwordm9pZCBTaGFyZWRXb3JrZXJQcm94eTo6d29ya2VyQ29udGV4dERlc3Ryb3ll
ZCgpCit7CisgICAgLy8gVGhlIHByb3h5IG1heSBiZSBmcmVlZCBieSB0aGlzIGNhbGwsIHNvIGRv
IG5vdCByZWZlcmVuY2UgaXQgYW55IGZ1cnRoZXIuCisgICAgRGVmYXVsdFNoYXJlZFdvcmtlclJl
cG9zaXRvcnk6Omluc3RhbmNlKCkucmVtb3ZlUHJveHkodGhpcyk7CiB9CiAKIGNsYXNzIFNoYXJl
ZFdvcmtlckNvbm5lY3RUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sg
ewpAQCAtMjAzLDcgKzI2Myw3IEBAIERlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5JiBEZWZh
dWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeTo6aW5zdGFuY2UoKQogdm9pZCBEZWZhdWx0U2hhcmVk
V29ya2VyUmVwb3NpdG9yeTo6d29ya2VyU2NyaXB0TG9hZGVkKFNoYXJlZFdvcmtlclByb3h5JiBw
cm94eSwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgd29ya2VyU2NyaXB0
LCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbD4gcG9ydCkKIHsKICAgICBNdXRleExvY2tl
ciBsb2NrKG1fbG9jayk7Ci0gICAgaWYgKHByb3h5LmNsb3NpbmcoKSkKKyAgICBpZiAocHJveHku
aXNDbG9zaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEFub3RoZXIgbG9hZGVyIG1h
eSBoYXZlIGFscmVhZHkgc3RhcnRlZCB1cCBhIHRocmVhZCBmb3IgdGhpcyBwcm94eSAtIGlmIHNv
LCBqdXN0IHNlbmQgYSBjb25uZWN0IHRvIHRoZSBwcmUtZXhpc3RpbmcgdGhyZWFkLgpAQCAtMjIw
LDYgKzI4MCw0NCBAQCB2b2lkIFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6OmNvbm5lY3QoUGFzc1Jl
ZlB0cjxTaGFyZWRXb3JrZXI+IHdvcmtlciwgUGFzc093blB0cgogICAgIERlZmF1bHRTaGFyZWRX
b3JrZXJSZXBvc2l0b3J5OjppbnN0YW5jZSgpLmNvbm5lY3RUb1dvcmtlcih3b3JrZXIsIHBvcnQs
IHVybCwgbmFtZSwgZWMpOwogfQogCit2b2lkIFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6OmRvY3Vt
ZW50RGV0YWNoZWQoRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIERlZmF1bHRTaGFyZWRXb3Jr
ZXJSZXBvc2l0b3J5OjppbnN0YW5jZSgpLmRvY3VtZW50RGV0YWNoZWQoZG9jdW1lbnQpOworfQor
Citib29sIFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6Omhhc1NoYXJlZFdvcmtlcnMoRG9jdW1lbnQq
IGRvY3VtZW50KQoreworICAgIHJldHVybiBEZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeTo6
aW5zdGFuY2UoKS5oYXNTaGFyZWRXb3JrZXJzKGRvY3VtZW50KTsKK30KKworYm9vbCBEZWZhdWx0
U2hhcmVkV29ya2VyUmVwb3NpdG9yeTo6aGFzU2hhcmVkV29ya2VycyhEb2N1bWVudCogZG9jdW1l
bnQpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX2xvY2spOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX3Byb3hpZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKG1fcHJveGll
c1tpXS0+aXNJbldvcmtlckRvY3VtZW50cyhkb2N1bWVudCkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIERlZmF1bHRTaGFyZWRX
b3JrZXJSZXBvc2l0b3J5OjpyZW1vdmVQcm94eShTaGFyZWRXb3JrZXJQcm94eSogcHJveHkpCit7
CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX2xvY2spOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX3Byb3hpZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKHByb3h5ID09IG1fcHJv
eGllc1tpXS5nZXQoKSkgeworICAgICAgICAgICAgbV9wcm94aWVzLnJlbW92ZShpKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBEZWZhdWx0U2hhcmVk
V29ya2VyUmVwb3NpdG9yeTo6ZG9jdW1lbnREZXRhY2hlZChEb2N1bWVudCogZG9jdW1lbnQpCit7
CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX2xvY2spOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX3Byb3hpZXMuc2l6ZSgpOyBpKyspCisgICAgICAgIG1fcHJveGllc1tpXS0+ZG9jdW1l
bnREZXRhY2hlZChkb2N1bWVudCk7Cit9CisKIHZvaWQgRGVmYXVsdFNoYXJlZFdvcmtlclJlcG9z
aXRvcnk6OmNvbm5lY3RUb1dvcmtlcihQYXNzUmVmUHRyPFNoYXJlZFdvcmtlcj4gd29ya2VyLCBQ
YXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbD4gcG9ydCwgY29uc3QgS1VSTCYgdXJsLCBjb25z
dCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIE11dGV4TG9ja2VyIGxv
Y2sobV9sb2NrKTsKQEAgLTI0NywxOCArMzQ1LDE0IEBAIFBhc3NSZWZQdHI8U2hhcmVkV29ya2Vy
UHJveHk+IERlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5OjpnZXRQcm94eShjb25zdCBTdHJp
CiAgICAgLy8gTG9vayBmb3IgYW4gZXhpc3Rpbmcgd29ya2VyLCBhbmQgY3JlYXRlIG9uZSBpZiBp
dCBkb2Vzbid0IGV4aXN0LgogICAgIC8vIEl0ZW1zIGluIHRoZSBjYWNoZSBhcmUgZnJlZWQgb24g
YW5vdGhlciB0aHJlYWQsIHNvIGNvcHkgdGhlIFVSTCBiZWZvcmUgY3JlYXRpbmcgdGhlIG9yaWdp
biwgdG8gbWFrZSBzdXJlIG5vIHJlZmVyZW5jZXMgdG8gZXh0ZXJuYWwgc3RyaW5ncyBsaW5nZXIu
CiAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3Jl
YXRlKHVybC5jb3B5KCkpOwotICAgIFNoYXJlZFdvcmtlck5hbWVNYXAqIG5hbWVNYXAgPSBtX2Nh
Y2hlLmdldChvcmlnaW4pOwotICAgIGlmICghbmFtZU1hcCkgewotICAgICAgICBuYW1lTWFwID0g
bmV3IFNoYXJlZFdvcmtlck5hbWVNYXAoKTsKLSAgICAgICAgbV9jYWNoZS5zZXQob3JpZ2luLCBu
YW1lTWFwKTsKLSAgICB9Ci0KLSAgICBSZWZQdHI8U2hhcmVkV29ya2VyUHJveHk+IHByb3h5ID0g
bmFtZU1hcC0+Z2V0KG5hbWUpOwotICAgIGlmICghcHJveHkuZ2V0KCkpIHsKLSAgICAgICAgcHJv
eHkgPSBTaGFyZWRXb3JrZXJQcm94eTo6Y3JlYXRlKG5hbWUsIHVybCk7Ci0gICAgICAgIG5hbWVN
YXAtPnNldChwcm94eS0+bmFtZSgpLCBwcm94eSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fcHJveGllcy5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAoIW1fcHJveGllc1tpXS0+
aXNDbG9zaW5nKCkgJiYgbV9wcm94aWVzW2ldLT5tYXRjaGVzKG5hbWUsIG9yaWdpbikpCisgICAg
ICAgICAgICByZXR1cm4gbV9wcm94aWVzW2ldOwogICAgIH0KLSAgICByZXR1cm4gcHJveHk7Cisg
ICAgLy8gUHJveHkgaXMgbm90IGluIHRoZSByZXBvc2l0b3J5IGN1cnJlbnRseSAtIGNyZWF0ZSBh
IG5ldyBvbmUuCisgICAgUmVmUHRyPFNoYXJlZFdvcmtlclByb3h5PiBwcm94eSA9IFNoYXJlZFdv
cmtlclByb3h5OjpjcmVhdGUobmFtZSwgdXJsLCBvcmlnaW4ucmVsZWFzZSgpKTsKKyAgICBtX3By
b3hpZXMuYXBwZW5kKHByb3h5KTsKKyAgICByZXR1cm4gcHJveHkucmVsZWFzZSgpOwogfQogCiBE
ZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeTo6RGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRv
cnkoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL0RlZmF1bHRTaGFyZWRXb3JrZXJSZXBv
c2l0b3J5LmggYi9XZWJDb3JlL3dvcmtlcnMvRGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnku
aAppbmRleCAwYjRlNjZjLi5jMmVhZmY0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvRGVm
YXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnkuaAorKysgYi9XZWJDb3JlL3dvcmtlcnMvRGVmYXVs
dFNoYXJlZFdvcmtlclJlcG9zaXRvcnkuaApAQCAtMzMsMjIgKzMzLDI0IEBACiAKICNpZiBFTkFC
TEUoU0hBUkVEX1dPUktFUlMpCiAKLSNpbmNsdWRlICJTaGFyZWRXb3JrZXJSZXBvc2l0b3J5Lmgi
CisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKICNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKKyAgICBjbGFzcyBEb2N1bWVudDsKICAgICBjbGFzcyBLVVJMOwor
ICAgIGNsYXNzIE1lc3NhZ2VQb3J0Q2hhbm5lbDsKICAgICBjbGFzcyBTY3JpcHRFeGVjdXRpb25D
b250ZXh0OwotICAgIGNsYXNzIFNlY3VyaXR5T3JpZ2luOworICAgIGNsYXNzIFNoYXJlZFdvcmtl
cjsKICAgICBjbGFzcyBTaGFyZWRXb3JrZXJQcm94eTsKLQotICAgIHN0cnVjdCBTZWN1cml0eU9y
aWdpbkhhc2g7Ci0gICAgc3RydWN0IFNlY3VyaXR5T3JpZ2luVHJhaXRzOworICAgIGNsYXNzIFN0
cmluZzsKIAogICAgIC8vIFBsYXRmb3JtLXNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIHRoZSBT
aGFyZWRXb3JrZXJSZXBvc2l0b3J5IHN0YXRpYyBpbnRlcmZhY2UuCiAgICAgY2xhc3MgRGVmYXVs
dFNoYXJlZFdvcmtlclJlcG9zaXRvcnkgOiBwdWJsaWMgTm9uY29weWFibGUgewpAQCAtNTksNiAr
NjEsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBJbnRlcm5hbCBpbXBsZW1l
bnRhdGlvbiBvZiBTaGFyZWRXb3JrZXJSZXBvc2l0b3J5Ojpjb25uZWN0KCkKICAgICAgICAgdm9p
ZCBjb25uZWN0VG9Xb3JrZXIoUGFzc1JlZlB0cjxTaGFyZWRXb3JrZXI+LCBQYXNzT3duUHRyPE1l
c3NhZ2VQb3J0Q2hhbm5lbD4sIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2Vw
dGlvbkNvZGUmKTsKIAorICAgICAgICAvLyBOb3RpZmljYXRpb24gdGhhdCBhIGRvY3VtZW50IGhh
cyBiZWVuIGRldGFjaGVkLgorICAgICAgICB2b2lkIGRvY3VtZW50RGV0YWNoZWQoRG9jdW1lbnQq
KTsKKworICAgICAgICAvLyBSZW1vdmVzIHRoZSBwYXNzZWQgU2hhcmVkV29ya2VyUHJveHkgZnJv
bSB0aGUgcmVwb3NpdG9yeS4KKyAgICAgICAgdm9pZCByZW1vdmVQcm94eShTaGFyZWRXb3JrZXJQ
cm94eSopOworCisgICAgICAgIGJvb2wgaGFzU2hhcmVkV29ya2VycyhEb2N1bWVudCopOworCiAg
ICAgICAgIHN0YXRpYyBEZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeSYgaW5zdGFuY2UoKTsK
ICAgICBwcml2YXRlOgogICAgICAgICBEZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeSgpOwpA
QCAtNjgsMTEgKzc4LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBNdXRleCB1
c2VkIHRvIHByb3RlY3QgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLgogICAgICAgICBNdXRleCBt
X2xvY2s7CiAKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFNoYXJlZFdv
cmtlclByb3h5PiA+IFNoYXJlZFdvcmtlck5hbWVNYXA7Ci0gICAgICAgIHR5cGVkZWYgSGFzaE1h
cDxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBTaGFyZWRXb3JrZXJOYW1lTWFwKiwgU2VjdXJpdHlP
cmlnaW5IYXNoPiBTaGFyZWRXb3JrZXJQcm94eUNhY2hlOwotCi0gICAgICAgIC8vIEl0ZW1zIGlu
IHRoaXMgY2FjaGUgbWF5IGJlIGZyZWVkIG9uIGFub3RoZXIgdGhyZWFkLCBzbyBhbGwga2V5cyBh
bmQgdmFsdWVzIG11c3QgYmUgZWl0aGVyIGNvcGllZCBiZWZvcmUgaW5zZXJ0aW9uIG9yIHRocmVh
ZCBzYWZlLgotICAgICAgICBTaGFyZWRXb3JrZXJQcm94eUNhY2hlIG1fY2FjaGU7CisgICAgICAg
IC8vIExpc3Qgb2Ygc2hhcmVkIHdvcmtlcnMuIEV4cGVjdGF0aW9uIGlzIHRoYXQgdGhlcmUgd2ls
bCBiZSBhIGxpbWl0ZWQgbnVtYmVyIG9mIHNoYXJlZCB3b3JrZXJzLCBhbmQgc28gdHJhY2tpbmcg
dGhlbSBpbiBhIFZlY3RvciBpcyBtb3JlIGVmZmljaWVudCB0aGFuIG5lc3RlZCBIYXNoTWFwcy4K
KyAgICAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPFNoYXJlZFdvcmtlclByb3h5PiA+IFNoYXJl
ZFdvcmtlclByb3h5UmVwb3NpdG9yeTsKKyAgICAgICAgU2hhcmVkV29ya2VyUHJveHlSZXBvc2l0
b3J5IG1fcHJveGllczsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29ya2VyUmVwb3NpdG9yeS5oIGIvV2ViQ29yZS93
b3JrZXJzL1NoYXJlZFdvcmtlclJlcG9zaXRvcnkuaAppbmRleCA4NGFjZjc3Li45NmQyZmIxIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29ya2VyUmVwb3NpdG9yeS5oCisrKyBi
L1dlYkNvcmUvd29ya2Vycy9TaGFyZWRXb3JrZXJSZXBvc2l0b3J5LmgKQEAgLTM0LDEyICszNCwx
MiBAQAogI2lmIEVOQUJMRShTSEFSRURfV09SS0VSUykKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGUuaCIKLQogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisgICAgY2xhc3MgRG9jdW1lbnQ7CiAg
ICAgY2xhc3MgS1VSTDsKICAgICBjbGFzcyBNZXNzYWdlUG9ydENoYW5uZWw7CiAgICAgY2xhc3Mg
U2hhcmVkV29ya2VyOwpAQCAtNTAsNiArNTAsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IHB1YmxpYzoKICAgICAgICAgLy8gQ29ubmVjdHMgdGhlIHBhc3NlZCBTaGFyZWRXb3JrZXIgb2Jq
ZWN0IHdpdGggdGhlIHNwZWNpZmllZCB3b3JrZXIgdGhyZWFkLCBjcmVhdGluZyBhIG5ldyB0aHJl
YWQgaWYgbmVjZXNzYXJ5LgogICAgICAgICBzdGF0aWMgdm9pZCBjb25uZWN0KFBhc3NSZWZQdHI8
U2hhcmVkV29ya2VyPiwgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWw+LCBjb25zdCBLVVJM
JiwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7CisKKyAgICAgICAgLy8gSW52
b2tlZCB3aGVuIGEgZG9jdW1lbnQgaGFzIGJlZW4gZGV0YWNoZWQuCisgICAgICAgIHN0YXRpYyB2
b2lkIGRvY3VtZW50RGV0YWNoZWQoRG9jdW1lbnQqKTsKKworICAgICAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgdGhlIHBhc3NlZCBkb2N1bWVudCBpcyBhc3NvY2lhdGVkIHdpdGggYW55IFNoYXJlZFdv
cmtlcnMuCisgICAgICAgIHN0YXRpYyBib29sIGhhc1NoYXJlZFdvcmtlcnMoRG9jdW1lbnQqKTsK
ICAgICBwcml2YXRlOgogICAgICAgICBTaGFyZWRXb3JrZXJSZXBvc2l0b3J5KCkgeyB9CiAgICAg
fTsK
</data>
<flag name="review"
          id="18768"
          type_id="1"
          status="+"
          setter="levin"
    />
    <flag name="commit-queue"
          id="18770"
          type_id="3"
          status="-"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>