<?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>36546</bug_id>
          
          <creation_ts>2010-03-24 11:04:55 -0700</creation_ts>
          <short_desc>A few more steps towards IndexedDB</short_desc>
          <delta_ts>2010-03-29 02:26: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>New Bugs</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jeremy Orlow">jorlow</reporter>
          <assigned_to name="Jeremy Orlow">jorlow</assigned_to>
          <cc>fishd</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>203497</commentid>
    <comment_count>0</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-03-24 11:04:55 -0700</bug_when>
    <thetext>A few more steps towards IndexedDB.  Work towards hooking up IndexedDatabaseProxy to something.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203506</commentid>
    <comment_count>1</comment_count>
      <attachid>51529</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-03-24 11:22:13 -0700</bug_when>
    <thetext>Created attachment 51529
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204236</commentid>
    <comment_count>2</comment_count>
      <attachid>51529</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-03-25 14:55:59 -0700</bug_when>
    <thetext>Comment on attachment 51529
Patch

&gt; +++ b/WebCore/storage/IDBCallbacks.h
...
&gt; + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
&gt; + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&gt; + */
&gt; +#ifndef IDBCallbacks_h

nit: insert a new line after the comment block for consistency with other
source files.


&gt; +++ b/WebCore/storage/IDBDatabase.h
...
&gt; + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&gt; + */
&gt; +#ifndef IDBDatabase_h

^^^ ditto


&gt; +++ b/WebCore/storage/IndexedDatabase.h
...
&gt; +    virtual void open(const String&amp; name, const String&amp; description, bool modifyDatabase, ExceptionCode&amp;, PassRefPtr&lt;IDBCallbacks&lt;IDBDatabase&gt; &gt;) = 0;

I wonder if a typedef wouldn&apos;t be handy for IDBCallbacks&lt;IDBDatabase&gt;... maybe:

typedef IDBCallbacks&lt;IDBDatabase&gt; IDBDatabaseCallbacks ??


&gt; +++ b/WebCore/storage/IndexedDatabaseImpl.cpp
...
&gt; +void IndexedDatabaseImpl::open(const String&amp; name, const String&amp; description, bool modifyDatabase, ExceptionCode&amp;, PassRefPtr&lt;IDBCallbacks&lt;IDBDatabase&gt; &gt;)
&gt;  {
&gt;      // FIXME: Write.
&gt; +    ASSERT(0);

ASSERT_NOT_REACHED()


&gt; +++ b/WebKit/chromium/public/WebIDBCallbacks.h
...
&gt; + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&gt; + */
&gt; +#ifndef WebIDBCallbacks_h

same nit about inserting a new line


&gt; +template &lt;typename ResultType&gt;
&gt; +class WebIDBCallbacks {
&gt; +public:
&gt; +    virtual ~WebIDBCallbacks() { }
&gt; +
&gt; +    virtual void onSuccess(ResultType*) = 0;
&gt; +    virtual void onError(const WebIDBDatabaseError&amp;) = 0;
&gt; +};

Does ResultType need to be mutable?  Does it need to be passed as
a pointer?  Could it be passed as &apos;const ResultType&amp;&apos;?


&gt; +++ b/WebKit/chromium/public/WebIDBDatabase.h
&gt; @@ -0,0 +1,45 @@
&gt; +/*
&gt; + * Copyright (C) 2010 Google Inc. All rights reserved.
&gt; + *
&gt; + * Redistribution and use in source and binary forms, with or without
&gt; + * modification, are permitted provided that the following conditions
&gt; + * are met:
&gt; + *
&gt; + * 1.  Redistributions of source code must retain the above copyright
&gt; + *     notice, this list of conditions and the following disclaimer.
&gt; + * 2.  Redistributions in binary form must reproduce the above copyright
&gt; + *     notice, this list of conditions and the following disclaimer in the
&gt; + *     documentation and/or other materials provided with the distribution.
&gt; + * 3.  Neither the name of Apple Computer, Inc. (&quot;Apple&quot;) nor the names of
&gt; + *     its contributors may be used to endorse or promote products derived
&gt; + *     from this software without specific prior written permission.
&gt; + *
&gt; + * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS &quot;AS IS&quot; AND ANY
&gt; + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
&gt; + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
&gt; + * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
&gt; + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
&gt; + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
&gt; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
&gt; + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
&gt; + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
&gt; + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&gt; + */
&gt; +#ifndef WebIDBDatabase_h
&gt; +#define WebIDBDatabase_h
&gt; +
&gt; +#include &quot;WebCommon.h&quot;
&gt; +
&gt; +namespace WebKit {
&gt; +
&gt; +// See comment in WebIndexedDatabase for a high level overview these classes.
&gt; +class WebIDBDatabase {
&gt; +public:
&gt; +    virtual ~WebIDBDatabase() { }
&gt; +
&gt; +    // FIXME: Implement.
&gt; +};
&gt; +
&gt; +} // namespace WebKit
&gt; +
&gt; +#endif // WebIDBDatabase_h
&gt; diff --git a/WebKit/chromium/public/WebIDBDatabaseError.h b/WebKit/chromium/public/WebIDBDatabaseError.h
&gt; new file mode 100644
&gt; index 0000000..10763a0
&gt; --- /dev/null
&gt; +++ b/WebKit/chromium/public/WebIDBDatabaseError.h
&gt; @@ -0,0 +1,69 @@
&gt; +/*
&gt; + * Copyright (C) 2010 Google Inc. All rights reserved.
&gt; + *
&gt; + * Redistribution and use in source and binary forms, with or without
&gt; + * modification, are permitted provided that the following conditions
&gt; + * are met:
&gt; + *
&gt; + * 1.  Redistributions of source code must retain the above copyright
&gt; + *     notice, this list of conditions and the following disclaimer.
&gt; + * 2.  Redistributions in binary form must reproduce the above copyright
&gt; + *     notice, this list of conditions and the following disclaimer in the
&gt; + *     documentation and/or other materials provided with the distribution.
&gt; + * 3.  Neither the name of Apple Computer, Inc. (&quot;Apple&quot;) nor the names of
&gt; + *     its contributors may be used to endorse or promote products derived
&gt; + *     from this software without specific prior written permission.
&gt; + *
&gt; + * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS &quot;AS IS&quot; AND ANY
&gt; + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
&gt; + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
&gt; + * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
&gt; + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
&gt; + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
&gt; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
&gt; + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
&gt; + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
&gt; + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&gt; + */
&gt; +#ifndef WebIDBDatabaseError_h
&gt; +#define WebIDBDatabaseError_h
&gt; +
&gt; +#include &quot;WebCommon.h&quot;
&gt; +#include &quot;WebPrivatePtr.h&quot;
&gt; +#include &quot;WebString.h&quot;
&gt; +
&gt; +namespace WebCore { class IDBDatabaseError; }
&gt; +
&gt; +namespace WebKit {
&gt; +
&gt; +// See comment in WebIndexedDatabase for a high level overview these classes.
&gt; +class WebIDBDatabaseError {

Why not call this WebIDBError?  Same goes for IDBDatabaseError.  Doesn&apos;t
IDB imply Database?


&gt; +public:
&gt; +    ~WebIDBDatabaseError();
&gt; +
&gt; +    WebIDBDatabaseError(unsigned short code, const WebString&amp; message);
...
&gt; +    void assign(const WebIDBDatabaseError&amp;);
&gt; +
&gt; +    unsigned short code() const;
&gt; +    WebString message() const;

non-virtual, public methods need to be annotated with WEBKIT_API


&gt; +++ b/WebKit/chromium/public/WebSerializedScriptValue.h
&gt; @@ -53,13 +53,13 @@ public:
&gt;  
&gt;      WEBKIT_API static WebSerializedScriptValue fromString(const WebString&amp;);
&gt;  
&gt; -    WEBKIT_API void reset();
&gt; -    WEBKIT_API void assign(const WebSerializedScriptValue&amp;);
&gt; +    void reset();
&gt; +    void assign(const WebSerializedScriptValue&amp;);
&gt;  
&gt;      bool isNull() const { return m_private.isNull(); }
&gt;  
&gt;      // Returns a string representation of the WebSerializedScriptValue.
&gt; -    WEBKIT_API WebString toString() const;
&gt; +    WebString toString() const;

non-virtual, public methods need to be annotated with WEBKIT_API


&gt; +++ b/WebKit/chromium/src/IDBCallbacksProxy.h
...
&gt; + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&gt; + */
&gt; +#ifndef IDBCallbacksProxy_h

same nit about inserting a new line


&gt; +++ b/WebKit/chromium/src/IDBDatabaseProxy.cpp
...
&gt; + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&gt; + */
&gt; +#include &quot;config.h&quot;

ditto


&gt; +++ b/WebKit/chromium/src/IDBDatabaseProxy.h
...
&gt; + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&gt; + */
&gt; +#ifndef IDBDatabaseProxy_h

ditto


&gt; +++ b/WebKit/chromium/src/IndexedDatabaseProxy.cpp

A &quot;using namespace WebKit&quot; would be nice here to avoid the need for the
WebKit:: prefixes.


&gt; +++ b/WebKit/chromium/src/WebIDBDatabaseError.cpp

&gt; +WebIDBDatabaseError::~WebIDBDatabaseError()
&gt; +{
&gt; +    m_private.reset();
&gt; +}
&gt; +
&gt; +WebIDBDatabaseError::WebIDBDatabaseError(unsigned short code, const WebString&amp; message)
&gt; +    : m_private(IDBDatabaseError::create(code, message))
&gt; +{
&gt; +}

Ordinarily the WebKit API makes constructors and destructors inline.
We add init and reset methods decorated with WEBKIT_API to do the
actual initialization and destruction.  Those methods could be made
private to prevent the consumer from calling them directly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204510</commentid>
    <comment_count>3</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-03-26 05:22:51 -0700</bug_when>
    <thetext>&gt; 
&gt; &gt; +template &lt;typename ResultType&gt;
&gt; &gt; +class WebIDBCallbacks {
&gt; &gt; +public:
&gt; &gt; +    virtual ~WebIDBCallbacks() { }
&gt; &gt; +
&gt; &gt; +    virtual void onSuccess(ResultType*) = 0;
&gt; &gt; +    virtual void onError(const WebIDBDatabaseError&amp;) = 0;
&gt; &gt; +};
&gt; 
&gt; Does ResultType need to be mutable?  Does it need to be passed as
&gt; a pointer?  Could it be passed as &apos;const ResultType&amp;&apos;?

WebIDBDatabaseError is just POD.  ResultType is an interface that&apos;s implemented in the renderer that gets passed back into WebKit, so it needs to be a pointer.  Ownership is being transfered into the WebKit layer, so it&apos;s ok for it not to be const and such.

&gt; &gt; +// See comment in WebIndexedDatabase for a high level overview these classes.
&gt; &gt; +class WebIDBDatabaseError {
&gt; 
&gt; Why not call this WebIDBError?  Same goes for IDBDatabaseError.  Doesn&apos;t
&gt; IDB imply Database?

IDBDatabaseError is the name the spec uses.  It&apos;s better to match the spec 1:1 than save a few characters, I think.



Everything else is done.  (Will upload in a moment.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204512</commentid>
    <comment_count>4</comment_count>
      <attachid>51731</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-03-26 05:29:05 -0700</bug_when>
    <thetext>Created attachment 51731
rev</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204518</commentid>
    <comment_count>5</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-03-26 05:35:17 -0700</bug_when>
    <thetext>Btw, I didn&apos;t change anything except what you asked me to (no need to hunt for changes).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204654</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-03-26 10:16:53 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; 
&gt; &gt; &gt; +template &lt;typename ResultType&gt;
&gt; &gt; &gt; +class WebIDBCallbacks {
&gt; &gt; &gt; +public:
&gt; &gt; &gt; +    virtual ~WebIDBCallbacks() { }
&gt; &gt; &gt; +
&gt; &gt; &gt; +    virtual void onSuccess(ResultType*) = 0;
&gt; &gt; &gt; +    virtual void onError(const WebIDBDatabaseError&amp;) = 0;
&gt; &gt; &gt; +};
&gt; &gt; 
&gt; &gt; Does ResultType need to be mutable?  Does it need to be passed as
&gt; &gt; a pointer?  Could it be passed as &apos;const ResultType&amp;&apos;?
&gt; 
&gt; WebIDBDatabaseError is just POD.  ResultType is an interface that&apos;s implemented
&gt; in the renderer that gets passed back into WebKit, so it needs to be a pointer.
&gt;  Ownership is being transfered into the WebKit layer, so it&apos;s ok for it not to
&gt; be const and such.

OK, this ownership transfer needs to be documented in the interface.


&gt; 
&gt; &gt; &gt; +// See comment in WebIndexedDatabase for a high level overview these classes.
&gt; &gt; &gt; +class WebIDBDatabaseError {
&gt; &gt; 
&gt; &gt; Why not call this WebIDBError?  Same goes for IDBDatabaseError.  Doesn&apos;t
&gt; &gt; IDB imply Database?
&gt; 
&gt; IDBDatabaseError is the name the spec uses.  It&apos;s better to match the spec 1:1
&gt; than save a few characters, I think.

OK... should the spec change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204660</commentid>
    <comment_count>7</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-03-26 10:25:44 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #3)
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; +template &lt;typename ResultType&gt;
&gt; &gt; &gt; &gt; +class WebIDBCallbacks {
&gt; &gt; &gt; &gt; +public:
&gt; &gt; &gt; &gt; +    virtual ~WebIDBCallbacks() { }
&gt; &gt; &gt; &gt; +
&gt; &gt; &gt; &gt; +    virtual void onSuccess(ResultType*) = 0;
&gt; &gt; &gt; &gt; +    virtual void onError(const WebIDBDatabaseError&amp;) = 0;
&gt; &gt; &gt; &gt; +};
&gt; &gt; &gt; 
&gt; &gt; &gt; Does ResultType need to be mutable?  Does it need to be passed as
&gt; &gt; &gt; a pointer?  Could it be passed as &apos;const ResultType&amp;&apos;?
&gt; &gt; 
&gt; &gt; WebIDBDatabaseError is just POD.  ResultType is an interface that&apos;s implemented
&gt; &gt; in the renderer that gets passed back into WebKit, so it needs to be a pointer.
&gt; &gt;  Ownership is being transfered into the WebKit layer, so it&apos;s ok for it not to
&gt; &gt; be const and such.
&gt; 
&gt; OK, this ownership transfer needs to be documented in the interface.

Will do.

&gt; 
&gt; &gt; 
&gt; &gt; &gt; &gt; +// See comment in WebIndexedDatabase for a high level overview these classes.
&gt; &gt; &gt; &gt; +class WebIDBDatabaseError {
&gt; &gt; &gt; 
&gt; &gt; &gt; Why not call this WebIDBError?  Same goes for IDBDatabaseError.  Doesn&apos;t
&gt; &gt; &gt; IDB imply Database?
&gt; &gt; 
&gt; &gt; IDBDatabaseError is the name the spec uses.  It&apos;s better to match the spec 1:1
&gt; &gt; than save a few characters, I think.
&gt; 
&gt; OK... should the spec change?

There are enough outstanding spec issues that I think it&apos;d be a mistake to bring up now...but yes, it should probably change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204664</commentid>
    <comment_count>8</comment_count>
      <attachid>51731</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-03-26 10:29:26 -0700</bug_when>
    <thetext>Comment on attachment 51731
rev

r=me w/ the comment change</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205360</commentid>
    <comment_count>9</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-03-29 02:26:44 -0700</bug_when>
    <thetext>Committed r56713: &lt;http://trac.webkit.org/changeset/56713&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51529</attachid>
            <date>2010-03-24 11:22:13 -0700</date>
            <delta_ts>2010-03-26 05:29:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-36546-20100324182211.patch</filename>
            <type>text/plain</type>
            <size>37941</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MDVhMjBiYi4uN2U0ODA5YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNiBAQAorMjAxMC0wMy0yNCAgSmVyZW15IE9ybG93
ICA8am9ybG93QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBIGZldyBtb3JlIHN0ZXBzIHRvd2FyZHMgSW5kZXhlZERCCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjU0NgorCisgICAg
ICAgIEFkZCBhIGNhbGxiYWNrIGludGVyZmFjZSB0byBiZSB1c2VkIGJ5IGFsbCBhc3luYyBtZXRo
b2RzLgorICAgICAgICBBZGQgdGhlIGZpcnN0IGZyYWdtZW50cyBvZiBJREJEYXRhYmFzZS4KKyAg
ICAgICAgQ2xlYW4gdXAgb24gSURCRGF0YWJhc2VFcnJvci4KKyAgICAgICAgRmxlc2ggb3V0IElu
ZGV4ZWREYXRhYmFzZSBmdXJ0aGVyLgorCisgICAgICAgIE5vdCBlbm91Z2ggaG9va2VkIHVwIHll
dCB0byB0ZXN0LiAgU29vbiB0aG91Z2guLi4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBzdG9yYWdlL0lEQkNhbGxiYWNrcy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OklEQkNhbGxiYWNrczo6fklEQkNhbGxiYWNrcyk6CisgICAgICAgICogc3RvcmFnZS9JREJEYXRh
YmFzZS5jcHA6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCRGF0YWJhc2UuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6fklEQkRhdGFiYXNlKToKKyAgICAgICAg
KiBzdG9yYWdlL0lEQkRhdGFiYXNlRXJyb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFi
YXNlRXJyb3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUVycm9yOjpt
ZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlRXJyb3I6OklEQkRhdGFiYXNl
RXJyb3IpOgorICAgICAgICAqIHN0b3JhZ2UvSW5kZXhlZERhdGFiYXNlLmg6CisgICAgICAgICog
c3RvcmFnZS9JbmRleGVkRGF0YWJhc2VJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluZGV4
ZWREYXRhYmFzZUltcGw6OkluZGV4ZWREYXRhYmFzZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6
SW5kZXhlZERhdGFiYXNlSW1wbDo6fkluZGV4ZWREYXRhYmFzZUltcGwpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5kZXhlZERhdGFiYXNlSW1wbDo6b3Blbik6CisgICAgICAgICogc3RvcmFnZS9JbmRl
eGVkRGF0YWJhc2VJbXBsLmg6CisgICAgICAgICogc3RvcmFnZS9JbmRleGVkRGF0YWJhc2VSZXF1
ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluZGV4ZWREYXRhYmFzZVJlcXVlc3Q6Om9wZW4p
OgorCiAyMDEwLTAzLTIyICBBbGV4YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggOTdkNzAzYy4uZjJj
MmI2NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKQEAgLTMyNjcsNiArMzI2Nyw5IEBACiAgICAgICAgICAgICAnc3RvcmFnZS9EYXRh
YmFzZVRyYWNrZXIuY3BwJywKICAgICAgICAgICAgICdzdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5o
JywKICAgICAgICAgICAgICdzdG9yYWdlL0RhdGFiYXNlVHJhY2tlckNsaWVudC5oJywKKyAgICAg
ICAgICAgICdzdG9yYWdlL0lEQkNhbGxiYWNrcy5oJywKKyAgICAgICAgICAgICdzdG9yYWdlL0lE
QkRhdGFiYXNlLmgnLAorICAgICAgICAgICAgJ3N0b3JhZ2UvSURCRGF0YWJhc2UuY3BwJywKICAg
ICAgICAgICAgICdzdG9yYWdlL0lEQkRhdGFiYXNlRXJyb3IuaCcsCiAgICAgICAgICAgICAnc3Rv
cmFnZS9JREJEYXRhYmFzZUV4Y2VwdGlvbi5oJywKICAgICAgICAgICAgICdzdG9yYWdlL0lEQkRh
dGFiYXNlUmVxdWVzdC5oJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJDYWxsYmFj
a3MuaCBiL1dlYkNvcmUvc3RvcmFnZS9JREJDYWxsYmFja3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4wYmFiNDNhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9zdG9y
YWdlL0lEQkNhbGxiYWNrcy5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBJREJDYWxsYmFja3Nf
aAorI2RlZmluZSBJREJDYWxsYmFja3NfaAorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIElEQkRhdGFiYXNlRXJyb3I7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBSZXN1bHRUeXBlPgor
Y2xhc3MgSURCQ2FsbGJhY2tzIDogcHVibGljIFJlZkNvdW50ZWQ8SURCQ2FsbGJhY2tzPFJlc3Vs
dFR5cGU+ID4geworcHVibGljOgorICAgIHZpcnR1YWwgfklEQkNhbGxiYWNrcygpIHsgfQorCisg
ICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPFJlc3VsdFR5cGU+KSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIG9uRXJyb3IoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPikgPSAw
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gSURCQ2FsbGJhY2tz
X2gKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmNwcCBiL1dlYkNv
cmUvc3RvcmFnZS9JREJEYXRhYmFzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uZTY5ZGUyOQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmgg
Yi9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5kN2ZiZGU2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lE
QkRhdGFiYXNlLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIElEQkRhdGFiYXNlX2gKKyNkZWZp
bmUgSURCRGF0YWJhc2VfaAorCisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCisjaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVGhpcyBj
bGFzcyBpcyBzaGFyZWQgYnkgSURCRGF0YWJhc2VSZXF1ZXN0IChhc3luYykgYW5kIElEQkRhdGFi
YXNlU3luYyAoc3luYykuCisvLyBUaGlzIGlzIGltcGxlbWVudGVkIGJ5IElEQkRhdGFiYXNlSW1w
bCBhbmQgb3B0aW9uYWxseSBvdGhlcnMgKGluIG9yZGVyIHRvIHByb3h5CisvLyBjYWxscyBhY3Jv
c3MgcHJvY2VzcyBiYXJyaWVycykuIEFsbCBjYWxscyB0byB0aGVzZSBjbGFzc2VzIHNob3VsZCBi
ZSBub24tYmxvY2tpbmcgYW5kCisvLyB0cmlnZ2VyIHdvcmsgb24gYSBiYWNrZ3JvdW5kIHRocmVh
ZCBpZiBuZWNlc3NhcnkuCitjbGFzcyBJREJEYXRhYmFzZSA6IHB1YmxpYyBUaHJlYWRTYWZlU2hh
cmVkPElEQkRhdGFiYXNlPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+SURCRGF0YWJhc2UoKSB7
IH0KKyAgICAvLyBGSVhNRTogV3JpdGUuCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZgorCisjZW5kaWYgLy8gSURCRGF0YWJhc2VfaAorCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3N0b3JhZ2UvSURCRGF0YWJhc2VFcnJvci5oIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNl
RXJyb3IuaAppbmRleCBlOGZkMmRkLi5jYjQ3OWMxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3Jh
Z2UvSURCRGF0YWJhc2VFcnJvci5oCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUVy
cm9yLmgKQEAgLTM4LDE5ICszOCwyMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIElE
QkRhdGFiYXNlRXJyb3IgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJEYXRhYmFzZUVycm9yPiB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gY3JlYXRlKCkK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBjcmVhdGUodW5zaWduZWQg
c2hvcnQgY29kZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBJREJEYXRhYmFzZUVycm9yKCkpOworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IElEQkRhdGFiYXNlRXJyb3IoY29kZSwgbWVzc2FnZSkpOwogICAgIH0KICAgICB+SURC
RGF0YWJhc2VFcnJvcigpIHsgfQogCiAgICAgdW5zaWduZWQgc2hvcnQgY29kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fY29kZTsgfQogICAgIHZvaWQgc2V0Q29kZSh1bnNpZ25lZCBzaG9ydCB2YWx1ZSkg
eyBtX2NvZGUgPSB2YWx1ZTsgfQotICAgIFN0cmluZyBtZXNzYWdlKCkgY29uc3QgeyByZXR1cm4g
bV9tZXNzYWdlOyB9CisgICAgY29uc3QgU3RyaW5nJiBtZXNzYWdlKCkgY29uc3QgeyByZXR1cm4g
bV9tZXNzYWdlOyB9CiAgICAgdm9pZCBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpIHsg
bV9tZXNzYWdlID0gdmFsdWU7IH0KIAogcHJpdmF0ZToKLSAgICBJREJEYXRhYmFzZUVycm9yKCkg
eyB9CisgICAgSURCRGF0YWJhc2VFcnJvcih1bnNpZ25lZCBzaG9ydCBjb2RlLCBjb25zdCBTdHJp
bmcmIG1lc3NhZ2UpCisgICAgICAgIDogbV9jb2RlKGNvZGUpLCBtX21lc3NhZ2UobWVzc2FnZSkg
eyB9CiAKICAgICB1bnNpZ25lZCBzaG9ydCBtX2NvZGU7CiAgICAgU3RyaW5nIG1fbWVzc2FnZTsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JbmRleGVkRGF0YWJhc2UuaCBiL1dlYkNvcmUv
c3RvcmFnZS9JbmRleGVkRGF0YWJhc2UuaAppbmRleCBlMDBmMDU1Li41NmZhMDQyIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3N0b3JhZ2UvSW5kZXhlZERhdGFiYXNlLmgKKysrIGIvV2ViQ29yZS9zdG9y
YWdlL0luZGV4ZWREYXRhYmFzZS5oCkBAIC0yOSw2ICsyOSw3IEBACiAjZGVmaW5lIEluZGV4ZWRE
YXRhYmFzZV9oCiAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiSURCQ2Fs
bGJhY2tzLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+CiAKQEAgLTM2LDYgKzM3LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitj
bGFzcyBJREJEYXRhYmFzZTsKKwogLy8gVGhpcyBjbGFzcyBpcyBzaGFyZWQgYnkgSW5kZXhlZERh
dGFiYXNlUmVxdWVzdCAoYXN5bmMpIGFuZCBJbmRleGVkRGF0YWJhc2VTeW5jIChzeW5jKS4KIC8v
IFRoaXMgaXMgaW1wbGVtZW50ZWQgYnkgSW5kZXhlZERhdGFiYXNlSW1wbCBhbmQgb3B0aW9uYWxs
eSBvdGhlcnMgKGluIG9yZGVyIHRvIHByb3h5CiAvLyBjYWxscyBhY3Jvc3MgcHJvY2VzcyBiYXJy
aWVycykuIEFsbCBjYWxscyB0byB0aGVzZSBjbGFzc2VzIHNob3VsZCBiZSBub24tYmxvY2tpbmcg
YW5kCkBAIC00NSw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbmRl
eGVkRGF0YWJhc2U+IGdldCgpOwogICAgIHZpcnR1YWwgfkluZGV4ZWREYXRhYmFzZSgpIHsgfQog
Ci0gICAgdmlydHVhbCB2b2lkIG9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IGRlc2NyaXB0aW9uLCBib29sIG1vZGlmeURhdGFiYXNlLCBFeGNlcHRpb25Db2RlJikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBk
ZXNjcmlwdGlvbiwgYm9vbCBtb2RpZnlEYXRhYmFzZSwgRXhjZXB0aW9uQ29kZSYsIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPElEQkRhdGFiYXNlPiA+KSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvSW5kZXhlZERhdGFiYXNlSW1w
bC5jcHAgYi9XZWJDb3JlL3N0b3JhZ2UvSW5kZXhlZERhdGFiYXNlSW1wbC5jcHAKaW5kZXggY2Zi
YTA1ZC4uNzIyZTkwYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0luZGV4ZWREYXRhYmFz
ZUltcGwuY3BwCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JbmRleGVkRGF0YWJhc2VJbXBsLmNwcApA
QCAtMjgsNiArMjgsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkluZGV4ZWRE
YXRhYmFzZUltcGwuaCIKIAorI2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiSURC
RGF0YWJhc2VFcnJvci5oIgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAogI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQpAQCAtNDYsMjEgKzQ4LDIyIEBAIFBhc3NSZWZQdHI8SW5kZXhl
ZERhdGFiYXNlSW1wbD4gSW5kZXhlZERhdGFiYXNlSW1wbDo6Z2V0KCkKIAogSW5kZXhlZERhdGFi
YXNlSW1wbDo6SW5kZXhlZERhdGFiYXNlSW1wbCgpCiB7Ci0gICAgLy8gRklYTUU6IE1ha2UgdGhp
cyB0aHJlYWQgc2FmZS4KKyAgICAvLyBGSVhNRTogTWFrZSB0aGlzIHRocmVhZCBzYWZlIGJlZm9y
ZSBpbXBsZW1lbnRpbmcgYSBzeW5jIGludGVyZmFjZS4KICAgICBBU1NFUlQoIWluZGV4ZWREYXRh
YmFzZUltcGwpOwogICAgIGluZGV4ZWREYXRhYmFzZUltcGwgPSB0aGlzOwogfQogCiBJbmRleGVk
RGF0YWJhc2VJbXBsOjp+SW5kZXhlZERhdGFiYXNlSW1wbCgpCiB7Ci0gICAgLy8gRklYTUU6IE1h
a2UgdGhpcyB0aHJlYWQgc2FmZS4KKyAgICAvLyBGSVhNRTogTWFrZSB0aGlzIHRocmVhZCBzYWZl
IGJlZm9yZSBpbXBsZW1lbnRpbmcgYSBzeW5jIGludGVyZmFjZS4KICAgICBBU1NFUlQoaW5kZXhl
ZERhdGFiYXNlSW1wbCA9PSB0aGlzKTsKICAgICBpbmRleGVkRGF0YWJhc2VJbXBsID0gMDsKIH0K
IAotdm9pZCBJbmRleGVkRGF0YWJhc2VJbXBsOjpvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiBkZXNjcmlwdGlvbiwgYm9vbCBtb2RpZnlEYXRhYmFzZSwgRXhjZXB0aW9uQ29k
ZSYpCit2b2lkIEluZGV4ZWREYXRhYmFzZUltcGw6Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uLCBib29sIG1vZGlmeURhdGFiYXNlLCBFeGNlcHRpb25D
b2RlJiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M8SURCRGF0YWJhc2U+ID4pCiB7CiAgICAgLy8g
RklYTUU6IFdyaXRlLgorICAgIEFTU0VSVCgwKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0luZGV4ZWREYXRhYmFzZUltcGwuaCBiL1dl
YkNvcmUvc3RvcmFnZS9JbmRleGVkRGF0YWJhc2VJbXBsLmgKaW5kZXggMzdiYmMyNy4uOWQ3ZDM4
NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0luZGV4ZWREYXRhYmFzZUltcGwuaAorKysg
Yi9XZWJDb3JlL3N0b3JhZ2UvSW5kZXhlZERhdGFiYXNlSW1wbC5oCkBAIC0zOSw3ICszOSw3IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbmRleGVkRGF0YWJhc2VJbXBsPiBnZXQo
KTsKICAgICB2aXJ0dWFsIH5JbmRleGVkRGF0YWJhc2VJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIHZv
aWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24sIGJv
b2wgbW9kaWZ5RGF0YWJhc2UsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgb3Bl
bihjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24sIGJvb2wgbW9k
aWZ5RGF0YWJhc2UsIEV4Y2VwdGlvbkNvZGUmLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrczxJREJE
YXRhYmFzZT4gPik7CiAKIHByaXZhdGU6CiAgICAgSW5kZXhlZERhdGFiYXNlSW1wbCgpOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0luZGV4ZWREYXRhYmFzZVJlcXVlc3QuY3BwIGIvV2Vi
Q29yZS9zdG9yYWdlL0luZGV4ZWREYXRhYmFzZVJlcXVlc3QuY3BwCmluZGV4IDgyNzQ5M2IuLmQ2
MTQwNmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9JbmRleGVkRGF0YWJhc2VSZXF1ZXN0
LmNwcAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSW5kZXhlZERhdGFiYXNlUmVxdWVzdC5jcHAKQEAg
LTQ1LDYgKzQ1LDcgQEAgSW5kZXhlZERhdGFiYXNlUmVxdWVzdDo6fkluZGV4ZWREYXRhYmFzZVJl
cXVlc3QoKQogCiB2b2lkIEluZGV4ZWREYXRhYmFzZVJlcXVlc3Q6Om9wZW4oY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uLCBib29sIG1vZGlmeURhdGFiYXNlLCBF
eGNlcHRpb25Db2RlJiBleGNlcHRpb24pCiB7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGlu
aXRpYXRlIGEgcmVxdWVzdC4KIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
aW5kZXggMTFjM2VlNS4uYTkyNGI0MyAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZworKysgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkgQEAKKzIw
MTAtMDMtMjQgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW9yZSBJbmRleGVkREIgcGx1
bWJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM2
NTQ2CisKKyAgICAgICAgUGx1bWJpbmcgd29yayB0b3dhcmRzIHRoZSBnb2FsIG9mIG1ha2luZyBJ
bmRleGVkRGF0YWJhc2U6Om9wZW4gd29yay4KKworICAgICAgICBOZWVkIGEgc2hvcnQgZGVzY3Jp
cHRpb24gYW5kIGJ1ZyBVUkwgKE9PUFMhKQorCisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAg
ICAgKiBwdWJsaWMvV2ViSURCQ2FsbGJhY2tzLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpX
ZWJJREJDYWxsYmFja3M6On5XZWJJREJDYWxsYmFja3MpOgorICAgICAgICAqIHB1YmxpYy9XZWJJ
REJEYXRhYmFzZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViSURCRGF0YWJhc2U6On5X
ZWJJREJEYXRhYmFzZSk6CisgICAgICAgICogcHVibGljL1dlYklEQkRhdGFiYXNlRXJyb3IuaDog
QWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYklEQkRhdGFiYXNlRXJyb3I6OldlYklEQkRhdGFi
YXNlRXJyb3IpOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJEYXRhYmFzZUVycm9yOjpvcGVyYXRv
cj0pOgorICAgICAgICAqIHB1YmxpYy9XZWJJbmRleGVkRGF0YWJhc2UuaDoKKyAgICAgICAgKiBw
dWJsaWMvV2ViS2l0Q2xpZW50Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYktpdENsaWVudDo6aW5k
ZXhlZERhdGFiYXNlKToKKyAgICAgICAgKiBwdWJsaWMvV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVl
Lmg6CisgICAgICAgICogc3JjL0lEQkNhbGxiYWNrc1Byb3h5Lmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6SURCQ2FsbGJhY2tzUHJveHk6OklEQkNhbGxiYWNrc1Byb3h5KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkNhbGxiYWNrc1Byb3h5Ojp+SURCQ2FsbGJhY2tzUHJveHkpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCQ2FsbGJhY2tzUHJveHk6Om9uU3VjY2Vzcyk6CisgICAgICAgIChXZWJD
b3JlOjpJREJDYWxsYmFja3NQcm94eTo6b25FcnJvcik6CisgICAgICAgICogc3JjL0lEQkRhdGFi
YXNlUHJveHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlUHJveHk6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZVByb3h5OjpJREJEYXRhYmFz
ZVByb3h5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlUHJveHk6On5JREJEYXRhYmFz
ZVByb3h5KToKKyAgICAgICAgKiBzcmMvSURCRGF0YWJhc2VQcm94eS5oOiBBZGRlZC4KKyAgICAg
ICAgKiBzcmMvSW5kZXhlZERhdGFiYXNlUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5k
ZXhlZERhdGFiYXNlUHJveHk6OkluZGV4ZWREYXRhYmFzZVByb3h5KToKKyAgICAgICAgKFdlYkNv
cmU6OkluZGV4ZWREYXRhYmFzZVByb3h5OjpvcGVuKToKKyAgICAgICAgKiBzcmMvSW5kZXhlZERh
dGFiYXNlUHJveHkuaDoKKyAgICAgICAgKiBzcmMvV2ViSURCRGF0YWJhc2VFcnJvci5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJJREJEYXRhYmFzZUVycm9yOjp+V2ViSURCRGF0YWJh
c2VFcnJvcik6CisgICAgICAgIChXZWJLaXQ6OldlYklEQkRhdGFiYXNlRXJyb3I6OldlYklEQkRh
dGFiYXNlRXJyb3IpOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJEYXRhYmFzZUVycm9yOjphc3Np
Z24pOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJEYXRhYmFzZUVycm9yOjpjb2RlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViSURCRGF0YWJhc2VFcnJvcjo6bWVzc2FnZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYklEQkRhdGFiYXNlRXJyb3I6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YklEQkRhdGFiYXNlRXJyb3I6Om9wZXJhdG9yIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4p
OgorCiAyMDEwLTAzLTIyICBEYXJpbiBGaXNoZXIgIDxkYXJpbkBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgTmF0ZSBDaGFwaW4uCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cCBiL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCmluZGV4IGQyM2QyMDUu
LjAwNjUyMjEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC0xMjYsNiArMTI2LDkgQEAKICAgICAgICAgICAg
ICAgICAncHVibGljL1dlYkhUVFBCb2R5LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2Vi
SW1hZ2UuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJJbWFnZURlY29kZXIuaCcsCisg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJJREJDYWxsYmFja3MuaCcsCisgICAgICAgICAgICAg
ICAgJ3B1YmxpYy9XZWJJREJEYXRhYmFzZS5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL1dl
YklEQkRhdGFiYXNlRXJyb3IuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJJbmRleGVk
RGF0YWJhc2UuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJJbnB1dEVsZW1lbnQuaCcs
CiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJJbnB1dEV2ZW50LmgnLApAQCAtMjQzLDYgKzI0
Niw5IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9ndGsvV2ViRm9udEluZm8uY3BwJywKICAgICAg
ICAgICAgICAgICAnc3JjL2d0ay9XZWJGb250SW5mby5oJywKICAgICAgICAgICAgICAgICAnc3Jj
L2d0ay9XZWJJbnB1dEV2ZW50RmFjdG9yeS5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvSURC
Q2FsbGJhY2tzUHJveHkuaCcsCisgICAgICAgICAgICAgICAgJ3NyYy9JREJEYXRhYmFzZVByb3h5
LmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9JREJEYXRhYmFzZVByb3h5LmgnLAogICAgICAg
ICAgICAgICAgICdzcmMvSW5kZXhlZERhdGFiYXNlUHJveHkuY3BwJywKICAgICAgICAgICAgICAg
ICAnc3JjL0luZGV4ZWREYXRhYmFzZVByb3h5LmgnLAogICAgICAgICAgICAgICAgICdzcmMvSW5z
cGVjdG9yQ2xpZW50SW1wbC5jcHAnLApAQCAtMzE0LDYgKzMyMCw3IEBACiAgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJHbHlwaENhY2hlLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJIaXN0
b3J5SXRlbS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViSFRUUEJvZHkuY3BwJywKKyAg
ICAgICAgICAgICAgICAnc3JjL1dlYklEQkRhdGFiYXNlRXJyb3IuY3BwJywKICAgICAgICAgICAg
ICAgICAnc3JjL1dlYkltYWdlQ0cuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkltYWdl
RGVjb2Rlci5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViSW1hZ2VTa2lhLmNwcCcsCmRp
ZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQkNhbGxiYWNrcy5oIGIvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJDYWxsYmFja3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi45OTFmMGI1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJJREJDYWxsYmFja3MuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5j
LiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgV2Vi
SURCQ2FsbGJhY2tzX2gKKyNkZWZpbmUgV2ViSURCQ2FsbGJhY2tzX2gKKworI2luY2x1ZGUgIldl
YkNvbW1vbi5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViSURCRGF0YWJhc2VF
cnJvcjsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFJlc3VsdFR5cGU+CitjbGFzcyBXZWJJREJDYWxs
YmFja3MgeworcHVibGljOgorICAgIHZpcnR1YWwgfldlYklEQkNhbGxiYWNrcygpIHsgfQorCisg
ICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhSZXN1bHRUeXBlKikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBvbkVycm9yKGNvbnN0IFdlYklEQkRhdGFiYXNlRXJyb3ImKSA9IDA7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYklEQkNhbGxiYWNrc19oCmRpZmYgLS1n
aXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQkRhdGFiYXNlLmggYi9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYklEQkRhdGFiYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZTRhZGY5ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViSURCRGF0YWJhc2UuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgV2ViSURCRGF0YWJh
c2VfaAorI2RlZmluZSBXZWJJREJEYXRhYmFzZV9oCisKKyNpbmNsdWRlICJXZWJDb21tb24uaCIK
KworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIFNlZSBjb21tZW50IGluIFdlYkluZGV4ZWREYXRh
YmFzZSBmb3IgYSBoaWdoIGxldmVsIG92ZXJ2aWV3IHRoZXNlIGNsYXNzZXMuCitjbGFzcyBXZWJJ
REJEYXRhYmFzZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+V2ViSURCRGF0YWJhc2UoKSB7IH0K
KworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIFdlYklEQkRhdGFiYXNlX2gKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViSURCRGF0YWJhc2VFcnJvci5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJJREJEYXRhYmFzZUVycm9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MTA3NjNhMAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURC
RGF0YWJhc2VFcnJvci5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBXZWJJREJEYXRhYmFzZUVy
cm9yX2gKKyNkZWZpbmUgV2ViSURCRGF0YWJhc2VFcnJvcl9oCisKKyNpbmNsdWRlICJXZWJDb21t
b24uaCIKKyNpbmNsdWRlICJXZWJQcml2YXRlUHRyLmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgSURCRGF0YWJhc2VFcnJvcjsgfQorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworLy8gU2VlIGNvbW1lbnQgaW4gV2ViSW5kZXhlZERhdGFiYXNlIGZv
ciBhIGhpZ2ggbGV2ZWwgb3ZlcnZpZXcgdGhlc2UgY2xhc3Nlcy4KK2NsYXNzIFdlYklEQkRhdGFi
YXNlRXJyb3IgeworcHVibGljOgorICAgIH5XZWJJREJEYXRhYmFzZUVycm9yKCk7CisKKyAgICBX
ZWJJREJEYXRhYmFzZUVycm9yKHVuc2lnbmVkIHNob3J0IGNvZGUsIGNvbnN0IFdlYlN0cmluZyYg
bWVzc2FnZSk7CisgICAgV2ViSURCRGF0YWJhc2VFcnJvcihjb25zdCBXZWJJREJEYXRhYmFzZUVy
cm9yJiBlKSB7IGFzc2lnbihlKTsgfQorICAgIFdlYklEQkRhdGFiYXNlRXJyb3ImIG9wZXJhdG9y
PShjb25zdCBXZWJJREJEYXRhYmFzZUVycm9yJiBlKQorICAgIHsKKyAgICAgICAgYXNzaWduKGUp
OworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgdm9pZCBhc3NpZ24oY29uc3Qg
V2ViSURCRGF0YWJhc2VFcnJvciYpOworCisgICAgdW5zaWduZWQgc2hvcnQgY29kZSgpIGNvbnN0
OworICAgIFdlYlN0cmluZyBtZXNzYWdlKCkgY29uc3Q7CisKKyNpZiBXRUJLSVRfSU1QTEVNRU5U
QVRJT04KKyAgICBXZWJJREJEYXRhYmFzZUVycm9yKGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJD
b3JlOjpJREJEYXRhYmFzZUVycm9yPiYpOworICAgIFdlYklEQkRhdGFiYXNlRXJyb3ImIG9wZXJh
dG9yPShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6SURCRGF0YWJhc2VFcnJvcj4mKTsK
KyAgICBvcGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6SURCRGF0YWJhc2VFcnJvcj4o
KSBjb25zdDsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIFdlYlByaXZhdGVQdHI8V2ViQ29yZTo6
SURCRGF0YWJhc2VFcnJvcj4gbV9wcml2YXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBXZWJJREJEYXRhYmFzZUVycm9yX2gKZGlmZiAtLWdpdCBhL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViSW5kZXhlZERhdGFiYXNlLmggYi9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYkluZGV4ZWREYXRhYmFzZS5oCmluZGV4IDIxNDgyYjUuLjgwMmJiYTUgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSW5kZXhlZERhdGFiYXNlLmgKKysrIGIvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJbmRleGVkRGF0YWJhc2UuaApAQCAtMjksOSArMjksMTEg
QEAKICNkZWZpbmUgV2ViSW5kZXhlZERhdGFiYXNlX2gKIAogI2luY2x1ZGUgIldlYkNvbW1vbi5o
IgorI2luY2x1ZGUgIldlYklEQkNhbGxiYWNrcy5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAor
Y2xhc3MgV2ViSURCRGF0YWJhc2U7CiBjbGFzcyBXZWJTdHJpbmc7CiAKIC8vIFRoZSBlbnRyeSBw
b2ludCBpbnRvIHRoZSBJbmRleGVkRGF0YWJhc2UgQVBJLiAgVGhlc2UgY2xhc3NlcyBtYXRjaCB0
aGVpciBfX19fX1JlcXVlc3QgYW5kCkBAIC00MywxMCArNDUsOSBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIH5XZWJJbmRleGVkRGF0YWJhc2UoKSB7IH0KIAotICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZCByZXR1cm4gYW4gQXN5bmNSZXR1cm48PiBvYmplY3QuCi0gICAgdmlydHVhbCB2b2lkIG9w
ZW4oY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJTdHJpbmcmIGRlc2NyaXB0aW9uLCBi
b29sIG1vZGlmeURhdGFiYXNlLCBpbnQmIGV4Y2VwdGlvbkNvZGUpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgb3Blbihjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYgZGVzY3Jp
cHRpb24sIGJvb2wgbW9kaWZ5RGF0YWJhc2UsIGludCYgZXhjZXB0aW9uQ29kZSwgV2ViSURCQ2Fs
bGJhY2tzPFdlYklEQkRhdGFiYXNlPiogY2FsbGJhY2tzKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKIAotI2VuZGlmIC8vIFdlYlN0b3JhZ2VOYW1lc3BhY2VfaAorI2VuZGlmIC8v
IFdlYkluZGV4ZWREYXRhYmFzZV9oCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYktpdENsaWVudC5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJLaXRDbGllbnQuaApp
bmRleCBiNzkxYzEyLi41MDdhMmY0IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYktpdENsaWVudC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0Q2xpZW50
LmgKQEAgLTE1Myw3ICsxNTMsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBJbmRleGVkIERhdGFiYXNl
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAot
ICAgIHZpcnR1YWwgV2ViSW5kZXhlZERhdGFiYXNlKiBnZXRJbmRleGVkRGF0YWJhc2UoKSB7IHJl
dHVybiAwOyB9CisgICAgdmlydHVhbCBXZWJJbmRleGVkRGF0YWJhc2UqIGluZGV4ZWREYXRhYmFz
ZSgpIHsgcmV0dXJuIDA7IH0KIAogCiAgICAgLy8gS2V5Z2VuIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIGIvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaAppbmRleCBkYmNiOTJh
Li4xZDg5ODgxIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmgKQEAgLTUzLDEzICs1MywxMyBAQCBwdWJsaWM6CiAKICAgICBXRUJLSVRf
QVBJIHN0YXRpYyBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUgZnJvbVN0cmluZyhjb25zdCBXZWJT
dHJpbmcmKTsKIAotICAgIFdFQktJVF9BUEkgdm9pZCByZXNldCgpOwotICAgIFdFQktJVF9BUEkg
dm9pZCBhc3NpZ24oY29uc3QgV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlJik7CisgICAgdm9pZCBy
ZXNldCgpOworICAgIHZvaWQgYXNzaWduKGNvbnN0IFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYp
OwogCiAgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBtX3ByaXZhdGUuaXNOdWxsKCk7
IH0KIAogICAgIC8vIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIFdlYlNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS4KLSAgICBXRUJLSVRfQVBJIFdlYlN0cmluZyB0b1N0cmluZygp
IGNvbnN0OworICAgIFdlYlN0cmluZyB0b1N0cmluZygpIGNvbnN0OwogCiAjaWYgV0VCS0lUX0lN
UExFTUVOVEFUSU9OCiAgICAgV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlKGNvbnN0IFdURjo6UGFz
c1JlZlB0cjxXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU+Jik7CmRpZmYgLS1naXQgYS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0lEQkNhbGxiYWNrc1Byb3h5LmggYi9XZWJLaXQvY2hyb21pdW0v
c3JjL0lEQkNhbGxiYWNrc1Byb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMjY3ZjVhMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCQ2Fs
bGJhY2tzUHJveHkuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgSURCQ2FsbGJhY2tzUHJveHlf
aAorI2RlZmluZSBJREJDYWxsYmFja3NQcm94eV9oCisKKyNpbmNsdWRlICJJREJDYWxsYmFja3Mu
aCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUVycm9yLmgiCisjaW5jbHVkZSAiV2ViSURCQ2FsbGJh
Y2tzLmgiCisjaW5jbHVkZSAiV2ViSURCRGF0YWJhc2VFcnJvci5oIgorI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordGVtcGxhdGUgPHR5cGVuYW1l
IFdlYktpdENsYXNzLCB0eXBlbmFtZSBXZWJDb3JlQ2xhc3MsIHR5cGVuYW1lIFdlYkNvcmVQcm94
eT4KK2NsYXNzIElEQkNhbGxiYWNrc1Byb3h5IDogcHVibGljIFdlYktpdDo6V2ViSURCQ2FsbGJh
Y2tzPFdlYktpdENsYXNzPiB7CitwdWJsaWM6CisgICAgSURCQ2FsbGJhY2tzUHJveHkoUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M8V2ViQ29yZUNsYXNzPiA+IGNhbGxiYWNrcykKKyAgICAgICAgOiBt
X2NhbGxiYWNrcyhjYWxsYmFja3MpIHsgfQorCisgICAgdmlydHVhbCB+SURCQ2FsbGJhY2tzUHJv
eHkoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoV2ViS2l0Q2xhc3MqIHdlYktp
dEluc3RhbmNlKQorICAgIHsKKyAgICAgICAgUmVmUHRyPFdlYkNvcmVDbGFzcz4gcHJveHkgPSBX
ZWJDb3JlUHJveHk6OmNyZWF0ZSh3ZWJLaXRJbnN0YW5jZSk7CisgICAgICAgIG1fY2FsbGJhY2tz
LT5vblN1Y2Nlc3MocHJveHkpOworICAgICAgICBtX2NhbGxiYWNrcy5jbGVhcigpOworICAgIH0K
KworICAgIHZpcnR1YWwgdm9pZCBvbkVycm9yKGNvbnN0IFdlYktpdDo6V2ViSURCRGF0YWJhc2VF
cnJvciYgZXJyb3IpCisgICAgeworICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihlcnJvcik7
CisgICAgICAgIG1fY2FsbGJhY2tzLmNsZWFyKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPFdlYkNvcmVDbGFzcz4gPiBtX2NhbGxiYWNrczsKK307CisK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIElEQkNhbGxi
YWNrc1Byb3h5X2gKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRGF0YWJhc2VQ
cm94eS5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkRhdGFiYXNlUHJveHkuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMzRmNGUKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkRhdGFiYXNlUHJveHkuY3BwCkBAIC0wLDAgKzEsNTYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxl
IENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlUHJveHkuaCIKKwor
I2luY2x1ZGUgIklEQkRhdGFiYXNlRXJyb3IuaCIKKyNpbmNsdWRlICJXZWJJREJEYXRhYmFzZS5o
IgorI2luY2x1ZGUgIldlYklEQkRhdGFiYXNlRXJyb3IuaCIKKworI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8SURCRGF0YWJh
c2U+IElEQkRhdGFiYXNlUHJveHk6OmNyZWF0ZShQYXNzT3duUHRyPFdlYktpdDo6V2ViSURCRGF0
YWJhc2U+IGRhdGFiYXNlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCRGF0YWJhc2VQ
cm94eShkYXRhYmFzZSkpOworfQorCitJREJEYXRhYmFzZVByb3h5OjpJREJEYXRhYmFzZVByb3h5
KFBhc3NPd25QdHI8V2ViS2l0OjpXZWJJREJEYXRhYmFzZT4gZGF0YWJhc2UpCisgICAgOiBtX3dl
YklEQkRhdGFiYXNlKGRhdGFiYXNlKQoreworfQorCitJREJEYXRhYmFzZVByb3h5Ojp+SURCRGF0
YWJhc2VQcm94eSgpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0v
c3JjL0lEQkRhdGFiYXNlUHJveHkuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRGF0YWJhc2VQ
cm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NGVjNjIKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkRhdGFiYXNlUHJveHkuaApAQCAt
MCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFt
ZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICog
ICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKyNpZm5kZWYgSURCRGF0YWJhc2VQcm94eV9oCisjZGVmaW5lIElEQkRhdGFi
YXNlUHJveHlfaAorCisjaW5jbHVkZSAiSURCRGF0YWJhc2UuaCIKKyNpbmNsdWRlIDx3dGYvT3du
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKK25hbWVzcGFjZSBXZWJL
aXQgeyBjbGFzcyBXZWJJREJEYXRhYmFzZTsgfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIElEQkRhdGFiYXNlUHJveHkgOiBwdWJsaWMgSURCRGF0YWJhc2UgeworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPElEQkRhdGFiYXNlPiBjcmVhdGUoUGFzc093blB0cjxXZWJLaXQ6
OldlYklEQkRhdGFiYXNlPik7CisgICAgdmlydHVhbCB+SURCRGF0YWJhc2VQcm94eSgpOworCisg
ICAgLy8gRklYTUU6IEFkZCBvdGhlciBtZXRob2RzLgorCitwcml2YXRlOgorICAgIElEQkRhdGFi
YXNlUHJveHkoUGFzc093blB0cjxXZWJLaXQ6OldlYklEQkRhdGFiYXNlPik7CisKKyAgICBPd25Q
dHI8V2ViS2l0OjpXZWJJREJEYXRhYmFzZT4gbV93ZWJJREJEYXRhYmFzZTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKKyNlbmRpZiAvLyBJREJEYXRhYmFzZVByb3h5
X2gKKwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9JbmRleGVkRGF0YWJhc2VQcm94
eS5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0luZGV4ZWREYXRhYmFzZVByb3h5LmNwcAppbmRl
eCBhMDk4NjQxLi40ZTFiMzBmIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL0luZGV4
ZWREYXRhYmFzZVByb3h5LmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0luZGV4ZWREYXRh
YmFzZVByb3h5LmNwcApAQCAtMjgsNiArMjgsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJJbmRleGVkRGF0YWJhc2VQcm94eS5oIgogCisjaW5jbHVkZSAiSURCQ2FsbGJhY2tz
UHJveHkuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUVycm9yLmgiCisjaW5jbHVkZSAiSURCRGF0
YWJhc2VQcm94eS5oIgorI2luY2x1ZGUgIldlYklEQkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiV2Vi
SURCRGF0YWJhc2VFcnJvci5oIgogI2luY2x1ZGUgIldlYkluZGV4ZWREYXRhYmFzZS5oIgogI2lu
Y2x1ZGUgIldlYktpdC5oIgogI2luY2x1ZGUgIldlYktpdENsaWVudC5oIgpAQCAtNDIsNyArNDcs
NyBAQCBQYXNzUmVmUHRyPEluZGV4ZWREYXRhYmFzZT4gSW5kZXhlZERhdGFiYXNlUHJveHk6OmNy
ZWF0ZSgpCiB9CiAKIEluZGV4ZWREYXRhYmFzZVByb3h5OjpJbmRleGVkRGF0YWJhc2VQcm94eSgp
Ci0gICAgOiBtX3dlYkluZGV4ZWREYXRhYmFzZShXZWJLaXQ6OndlYktpdENsaWVudCgpLT5nZXRJ
bmRleGVkRGF0YWJhc2UoKSkKKyAgICA6IG1fd2ViSW5kZXhlZERhdGFiYXNlKFdlYktpdDo6d2Vi
S2l0Q2xpZW50KCktPmluZGV4ZWREYXRhYmFzZSgpKQogewogfQogCkBAIC01MCw5ICs1NSwxMCBA
QCBJbmRleGVkRGF0YWJhc2VQcm94eTo6fkluZGV4ZWREYXRhYmFzZVByb3h5KCkKIHsKIH0KIAot
dm9pZCBJbmRleGVkRGF0YWJhc2VQcm94eTo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYgZGVzY3JpcHRpb24sIGJvb2wgbW9kaWZ5RGF0YWJhc2UsIEV4Y2VwdGlvbkNvZGUm
IGVjKQordm9pZCBJbmRleGVkRGF0YWJhc2VQcm94eTo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24sIGJvb2wgbW9kaWZ5RGF0YWJhc2UsIEV4Y2VwdGlv
bkNvZGUmIGVjLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrczxJREJEYXRhYmFzZT4gPiBjYWxsYmFj
a3MpCiB7Ci0gICAgbV93ZWJJbmRleGVkRGF0YWJhc2UtPm9wZW4obmFtZSwgZGVzY3JpcHRpb24s
IG1vZGlmeURhdGFiYXNlLCBlYyk7CisgICAgbV93ZWJJbmRleGVkRGF0YWJhc2UtPm9wZW4obmFt
ZSwgZGVzY3JpcHRpb24sIG1vZGlmeURhdGFiYXNlLCBlYywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuZXcgSURCQ2FsbGJhY2tzUHJveHk8V2ViS2l0OjpXZWJJREJEYXRhYmFzZSwg
SURCRGF0YWJhc2UsIElEQkRhdGFiYXNlUHJveHk+KGNhbGxiYWNrcykpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0luZGV4ZWRE
YXRhYmFzZVByb3h5LmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL0luZGV4ZWREYXRhYmFzZVByb3h5
LmgKaW5kZXggYTRiYWMyYy4uOTY3YTg0NSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9JbmRleGVkRGF0YWJhc2VQcm94eS5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5kZXhl
ZERhdGFiYXNlUHJveHkuaApAQCAtNDEsMTIgKzQxLDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxJbmRleGVkRGF0YWJhc2U+IGNyZWF0ZSgpOwogICAgIHZpcnR1YWwgfkluZGV4
ZWREYXRhYmFzZVByb3h5KCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24sIGJvb2wgbW9kaWZ5RGF0YWJhc2UsIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24sIGJvb2wgbW9kaWZ5RGF0YWJhc2UsIEV4Y2VwdGlv
bkNvZGUmLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrczxJREJEYXRhYmFzZT4gPik7CiAKIHByaXZh
dGU6CiAgICAgSW5kZXhlZERhdGFiYXNlUHJveHkoKTsKIAotICAgIC8vIFdlIGRvbid0IG93biB0
aGlzIHBvaW50ZXIuCisgICAgLy8gV2UgZG9uJ3Qgb3duIHRoaXMgcG9pbnRlciAodW5saWtlIGFs
bCB0aGUgb3RoZXIgcHJveHkgY2xhc3NlcyB3aGljaCBkbykuCiAgICAgV2ViS2l0OjpXZWJJbmRl
eGVkRGF0YWJhc2UqIG1fd2ViSW5kZXhlZERhdGFiYXNlOwogfTsKIApkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJJREJEYXRhYmFzZUVycm9yLmNwcCBiL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViSURCRGF0YWJhc2VFcnJvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNTFjMzRmZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViSURCRGF0YWJhc2VFcnJvci5jcHAKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXZWJJREJEYXRhYmFzZUVycm9yLmgiCisKKyNpbmNsdWRlICJJREJEYXRh
YmFzZUVycm9yLmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitXZWJJREJEYXRhYmFzZUVycm9yOjp+V2ViSURCRGF0YWJhc2VFcnJvcigpCit7Cisg
ICAgbV9wcml2YXRlLnJlc2V0KCk7Cit9CisKK1dlYklEQkRhdGFiYXNlRXJyb3I6OldlYklEQkRh
dGFiYXNlRXJyb3IodW5zaWduZWQgc2hvcnQgY29kZSwgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdl
KQorICAgIDogbV9wcml2YXRlKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShjb2RlLCBtZXNzYWdl
KSkKK3sKK30KKwordm9pZCBXZWJJREJEYXRhYmFzZUVycm9yOjphc3NpZ24oY29uc3QgV2ViSURC
RGF0YWJhc2VFcnJvciYgdmFsdWUpCit7CisgICAgbV9wcml2YXRlID0gdmFsdWU7Cit9CisKK3Vu
c2lnbmVkIHNob3J0IFdlYklEQkRhdGFiYXNlRXJyb3I6OmNvZGUoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3ByaXZhdGUtPmNvZGUoKTsKK30KKworV2ViU3RyaW5nIFdlYklEQkRhdGFiYXNlRXJy
b3I6Om1lc3NhZ2UoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPm1lc3NhZ2UoKTsK
K30KKworV2ViSURCRGF0YWJhc2VFcnJvcjo6V2ViSURCRGF0YWJhc2VFcnJvcihjb25zdCBQYXNz
UmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+JiB2YWx1ZSkKKyAgICA6IG1fcHJpdmF0ZSh2YWx1ZSkK
K3sKK30KKworV2ViSURCRGF0YWJhc2VFcnJvciYgV2ViSURCRGF0YWJhc2VFcnJvcjo6b3BlcmF0
b3I9KGNvbnN0IFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4mIHZhbHVlKQoreworICAgIG1f
cHJpdmF0ZSA9IHZhbHVlOworICAgIHJldHVybiAqdGhpczsKK30KKworV2ViSURCRGF0YWJhc2VF
cnJvcjo6b3BlcmF0b3IgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcHJpdmF0ZS5nZXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
</data>
<flag name="review"
          id="34801"
          type_id="1"
          status="-"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51731</attachid>
            <date>2010-03-26 05:29:05 -0700</date>
            <delta_ts>2010-03-26 10:29:26 -0700</delta_ts>
            <desc>rev</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>37670</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MDVhMjBiYi4uN2U0ODA5YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNiBAQAorMjAxMC0wMy0yNCAgSmVyZW15IE9ybG93
ICA8am9ybG93QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBIGZldyBtb3JlIHN0ZXBzIHRvd2FyZHMgSW5kZXhlZERCCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjU0NgorCisgICAg
ICAgIEFkZCBhIGNhbGxiYWNrIGludGVyZmFjZSB0byBiZSB1c2VkIGJ5IGFsbCBhc3luYyBtZXRo
b2RzLgorICAgICAgICBBZGQgdGhlIGZpcnN0IGZyYWdtZW50cyBvZiBJREJEYXRhYmFzZS4KKyAg
ICAgICAgQ2xlYW4gdXAgb24gSURCRGF0YWJhc2VFcnJvci4KKyAgICAgICAgRmxlc2ggb3V0IElu
ZGV4ZWREYXRhYmFzZSBmdXJ0aGVyLgorCisgICAgICAgIE5vdCBlbm91Z2ggaG9va2VkIHVwIHll
dCB0byB0ZXN0LiAgU29vbiB0aG91Z2guLi4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBzdG9yYWdlL0lEQkNhbGxiYWNrcy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OklEQkNhbGxiYWNrczo6fklEQkNhbGxiYWNrcyk6CisgICAgICAgICogc3RvcmFnZS9JREJEYXRh
YmFzZS5jcHA6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvSURCRGF0YWJhc2UuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6fklEQkRhdGFiYXNlKToKKyAgICAgICAg
KiBzdG9yYWdlL0lEQkRhdGFiYXNlRXJyb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFi
YXNlRXJyb3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUVycm9yOjpt
ZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlRXJyb3I6OklEQkRhdGFiYXNl
RXJyb3IpOgorICAgICAgICAqIHN0b3JhZ2UvSW5kZXhlZERhdGFiYXNlLmg6CisgICAgICAgICog
c3RvcmFnZS9JbmRleGVkRGF0YWJhc2VJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluZGV4
ZWREYXRhYmFzZUltcGw6OkluZGV4ZWREYXRhYmFzZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6
SW5kZXhlZERhdGFiYXNlSW1wbDo6fkluZGV4ZWREYXRhYmFzZUltcGwpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5kZXhlZERhdGFiYXNlSW1wbDo6b3Blbik6CisgICAgICAgICogc3RvcmFnZS9JbmRl
eGVkRGF0YWJhc2VJbXBsLmg6CisgICAgICAgICogc3RvcmFnZS9JbmRleGVkRGF0YWJhc2VSZXF1
ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluZGV4ZWREYXRhYmFzZVJlcXVlc3Q6Om9wZW4p
OgorCiAyMDEwLTAzLTIyICBBbGV4YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggOTdkNzAzYy4uZjJj
MmI2NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKQEAgLTMyNjcsNiArMzI2Nyw5IEBACiAgICAgICAgICAgICAnc3RvcmFnZS9EYXRh
YmFzZVRyYWNrZXIuY3BwJywKICAgICAgICAgICAgICdzdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5o
JywKICAgICAgICAgICAgICdzdG9yYWdlL0RhdGFiYXNlVHJhY2tlckNsaWVudC5oJywKKyAgICAg
ICAgICAgICdzdG9yYWdlL0lEQkNhbGxiYWNrcy5oJywKKyAgICAgICAgICAgICdzdG9yYWdlL0lE
QkRhdGFiYXNlLmgnLAorICAgICAgICAgICAgJ3N0b3JhZ2UvSURCRGF0YWJhc2UuY3BwJywKICAg
ICAgICAgICAgICdzdG9yYWdlL0lEQkRhdGFiYXNlRXJyb3IuaCcsCiAgICAgICAgICAgICAnc3Rv
cmFnZS9JREJEYXRhYmFzZUV4Y2VwdGlvbi5oJywKICAgICAgICAgICAgICdzdG9yYWdlL0lEQkRh
dGFiYXNlUmVxdWVzdC5oJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJDYWxsYmFj
a3MuaCBiL1dlYkNvcmUvc3RvcmFnZS9JREJDYWxsYmFja3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi43YjA2YWMzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9zdG9y
YWdlL0lEQkNhbGxiYWNrcy5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElEQkNhbGxiYWNr
c19oCisjZGVmaW5lIElEQkNhbGxiYWNrc19oCisKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgSURCRGF0YWJhc2VFcnJvcjsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFJlc3VsdFR5cGU+
CitjbGFzcyBJREJDYWxsYmFja3MgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJDYWxsYmFja3M8UmVz
dWx0VHlwZT4gPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+SURCQ2FsbGJhY2tzKCkgeyB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8UmVzdWx0VHlwZT4pID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgb25FcnJvcihQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KSA9
IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBJREJDYWxsYmFj
a3NfaAorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuY3BwIGIvV2Vi
Q29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5lNjlkZTI5CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2Uu
aCBiL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjAzMjYyZjQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3N0b3JhZ2Uv
SURCRGF0YWJhc2UuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJEYXRhYmFzZV9oCisj
ZGVmaW5lIElEQkRhdGFiYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFRo
aXMgY2xhc3MgaXMgc2hhcmVkIGJ5IElEQkRhdGFiYXNlUmVxdWVzdCAoYXN5bmMpIGFuZCBJREJE
YXRhYmFzZVN5bmMgKHN5bmMpLgorLy8gVGhpcyBpcyBpbXBsZW1lbnRlZCBieSBJREJEYXRhYmFz
ZUltcGwgYW5kIG9wdGlvbmFsbHkgb3RoZXJzIChpbiBvcmRlciB0byBwcm94eQorLy8gY2FsbHMg
YWNyb3NzIHByb2Nlc3MgYmFycmllcnMpLiBBbGwgY2FsbHMgdG8gdGhlc2UgY2xhc3NlcyBzaG91
bGQgYmUgbm9uLWJsb2NraW5nIGFuZAorLy8gdHJpZ2dlciB3b3JrIG9uIGEgYmFja2dyb3VuZCB0
aHJlYWQgaWYgbmVjZXNzYXJ5LgorY2xhc3MgSURCRGF0YWJhc2UgOiBwdWJsaWMgVGhyZWFkU2Fm
ZVNoYXJlZDxJREJEYXRhYmFzZT4geworcHVibGljOgorICAgIHZpcnR1YWwgfklEQkRhdGFiYXNl
KCkgeyB9CisgICAgLy8gRklYTUU6IFdyaXRlLgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYKKworI2VuZGlmIC8vIElEQkRhdGFiYXNlX2gKKwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlRXJyb3IuaCBiL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRh
YmFzZUVycm9yLmgKaW5kZXggZThmZDJkZC4uY2I0NzljMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9z
dG9yYWdlL0lEQkRhdGFiYXNlRXJyb3IuaAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJh
c2VFcnJvci5oCkBAIC0zOCwxOSArMzgsMjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBJREJEYXRhYmFzZUVycm9yIDogcHVibGljIFJlZkNvdW50ZWQ8SURCRGF0YWJhc2VFcnJvcj4g
ewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGNyZWF0
ZSgpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gY3JlYXRlKHVuc2ln
bmVkIHNob3J0IGNvZGUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgSURCRGF0YWJhc2VFcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBJREJEYXRhYmFzZUVycm9yKGNvZGUsIG1lc3NhZ2UpKTsKICAgICB9CiAgICAg
fklEQkRhdGFiYXNlRXJyb3IoKSB7IH0KIAogICAgIHVuc2lnbmVkIHNob3J0IGNvZGUoKSBjb25z
dCB7IHJldHVybiBtX2NvZGU7IH0KICAgICB2b2lkIHNldENvZGUodW5zaWduZWQgc2hvcnQgdmFs
dWUpIHsgbV9jb2RlID0gdmFsdWU7IH0KLSAgICBTdHJpbmcgbWVzc2FnZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbWVzc2FnZTsgfQorICAgIGNvbnN0IFN0cmluZyYgbWVzc2FnZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbWVzc2FnZTsgfQogICAgIHZvaWQgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVl
KSB7IG1fbWVzc2FnZSA9IHZhbHVlOyB9CiAKIHByaXZhdGU6Ci0gICAgSURCRGF0YWJhc2VFcnJv
cigpIHsgfQorICAgIElEQkRhdGFiYXNlRXJyb3IodW5zaWduZWQgc2hvcnQgY29kZSwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKQorICAgICAgICA6IG1fY29kZShjb2RlKSwgbV9tZXNzYWdlKG1lc3Nh
Z2UpIHsgfQogCiAgICAgdW5zaWduZWQgc2hvcnQgbV9jb2RlOwogICAgIFN0cmluZyBtX21lc3Nh
Z2U7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvSW5kZXhlZERhdGFiYXNlLmggYi9XZWJD
b3JlL3N0b3JhZ2UvSW5kZXhlZERhdGFiYXNlLmgKaW5kZXggZTAwZjA1NS4uNDkyOGYzNiAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0luZGV4ZWREYXRhYmFzZS5oCisrKyBiL1dlYkNvcmUv
c3RvcmFnZS9JbmRleGVkRGF0YWJhc2UuaApAQCAtMjksNiArMjksNyBAQAogI2RlZmluZSBJbmRl
eGVkRGF0YWJhc2VfaAogCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIklE
QkNhbGxiYWNrcy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSA8d3Rm
L1RocmVhZGluZy5oPgogCkBAIC0zNiw2ICszNywxMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKK2NsYXNzIElEQkRhdGFiYXNlOworCit0eXBlZGVmIElEQkNhbGxiYWNrczxJREJEYXRhYmFz
ZT4gSURCRGF0YWJhc2VDYWxsYmFja3M7CisKIC8vIFRoaXMgY2xhc3MgaXMgc2hhcmVkIGJ5IElu
ZGV4ZWREYXRhYmFzZVJlcXVlc3QgKGFzeW5jKSBhbmQgSW5kZXhlZERhdGFiYXNlU3luYyAoc3lu
YykuCiAvLyBUaGlzIGlzIGltcGxlbWVudGVkIGJ5IEluZGV4ZWREYXRhYmFzZUltcGwgYW5kIG9w
dGlvbmFsbHkgb3RoZXJzIChpbiBvcmRlciB0byBwcm94eQogLy8gY2FsbHMgYWNyb3NzIHByb2Nl
c3MgYmFycmllcnMpLiBBbGwgY2FsbHMgdG8gdGhlc2UgY2xhc3NlcyBzaG91bGQgYmUgbm9uLWJs
b2NraW5nIGFuZApAQCAtNDUsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SW5kZXhlZERhdGFiYXNlPiBnZXQoKTsKICAgICB2aXJ0dWFsIH5JbmRleGVkRGF0YWJhc2Uo
KSB7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiBkZXNjcmlwdGlvbiwgYm9vbCBtb2RpZnlEYXRhYmFzZSwgRXhjZXB0aW9uQ29kZSYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYgZGVzY3JpcHRpb24sIGJvb2wgbW9kaWZ5RGF0YWJhc2UsIEV4Y2VwdGlvbkNvZGUmLCBQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPikgPSAwOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0luZGV4ZWREYXRhYmFzZUlt
cGwuY3BwIGIvV2ViQ29yZS9zdG9yYWdlL0luZGV4ZWREYXRhYmFzZUltcGwuY3BwCmluZGV4IGNm
YmEwNWQuLjY2YjQzMjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9JbmRleGVkRGF0YWJh
c2VJbXBsLmNwcAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSW5kZXhlZERhdGFiYXNlSW1wbC5jcHAK
QEAgLTI4LDYgKzI4LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbmRleGVk
RGF0YWJhc2VJbXBsLmgiCiAKKyNpbmNsdWRlICJJREJEYXRhYmFzZS5oIgorI2luY2x1ZGUgIklE
QkRhdGFiYXNlRXJyb3IuaCIKICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKICNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKQEAgLTQ2LDIxICs0OCwyMiBAQCBQYXNzUmVmUHRyPEluZGV4
ZWREYXRhYmFzZUltcGw+IEluZGV4ZWREYXRhYmFzZUltcGw6OmdldCgpCiAKIEluZGV4ZWREYXRh
YmFzZUltcGw6OkluZGV4ZWREYXRhYmFzZUltcGwoKQogewotICAgIC8vIEZJWE1FOiBNYWtlIHRo
aXMgdGhyZWFkIHNhZmUuCisgICAgLy8gRklYTUU6IE1ha2UgdGhpcyB0aHJlYWQgc2FmZSBiZWZv
cmUgaW1wbGVtZW50aW5nIGEgc3luYyBpbnRlcmZhY2UuCiAgICAgQVNTRVJUKCFpbmRleGVkRGF0
YWJhc2VJbXBsKTsKICAgICBpbmRleGVkRGF0YWJhc2VJbXBsID0gdGhpczsKIH0KIAogSW5kZXhl
ZERhdGFiYXNlSW1wbDo6fkluZGV4ZWREYXRhYmFzZUltcGwoKQogewotICAgIC8vIEZJWE1FOiBN
YWtlIHRoaXMgdGhyZWFkIHNhZmUuCisgICAgLy8gRklYTUU6IE1ha2UgdGhpcyB0aHJlYWQgc2Fm
ZSBiZWZvcmUgaW1wbGVtZW50aW5nIGEgc3luYyBpbnRlcmZhY2UuCiAgICAgQVNTRVJUKGluZGV4
ZWREYXRhYmFzZUltcGwgPT0gdGhpcyk7CiAgICAgaW5kZXhlZERhdGFiYXNlSW1wbCA9IDA7CiB9
CiAKLXZvaWQgSW5kZXhlZERhdGFiYXNlSW1wbDo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0cmluZyYgZGVzY3JpcHRpb24sIGJvb2wgbW9kaWZ5RGF0YWJhc2UsIEV4Y2VwdGlvbkNv
ZGUmKQordm9pZCBJbmRleGVkRGF0YWJhc2VJbXBsOjpvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbiwgYm9vbCBtb2RpZnlEYXRhYmFzZSwgRXhjZXB0aW9u
Q29kZSYsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+KQogewogICAgIC8vIEZJWE1F
OiBXcml0ZS4KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0luZGV4ZWREYXRhYmFzZUltcGwu
aCBiL1dlYkNvcmUvc3RvcmFnZS9JbmRleGVkRGF0YWJhc2VJbXBsLmgKaW5kZXggMzdiYmMyNy4u
OWQ3ZDM4NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0luZGV4ZWREYXRhYmFzZUltcGwu
aAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSW5kZXhlZERhdGFiYXNlSW1wbC5oCkBAIC0zOSw3ICsz
OSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbmRleGVkRGF0YWJhc2VJbXBs
PiBnZXQoKTsKICAgICB2aXJ0dWFsIH5JbmRleGVkRGF0YWJhc2VJbXBsKCk7CiAKLSAgICB2aXJ0
dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRp
b24sIGJvb2wgbW9kaWZ5RGF0YWJhc2UsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24sIGJv
b2wgbW9kaWZ5RGF0YWJhc2UsIEV4Y2VwdGlvbkNvZGUmLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
czxJREJEYXRhYmFzZT4gPik7CiAKIHByaXZhdGU6CiAgICAgSW5kZXhlZERhdGFiYXNlSW1wbCgp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0luZGV4ZWREYXRhYmFzZVJlcXVlc3QuY3Bw
IGIvV2ViQ29yZS9zdG9yYWdlL0luZGV4ZWREYXRhYmFzZVJlcXVlc3QuY3BwCmluZGV4IDgyNzQ5
M2IuLmQ2MTQwNmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9JbmRleGVkRGF0YWJhc2VS
ZXF1ZXN0LmNwcAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSW5kZXhlZERhdGFiYXNlUmVxdWVzdC5j
cHAKQEAgLTQ1LDYgKzQ1LDcgQEAgSW5kZXhlZERhdGFiYXNlUmVxdWVzdDo6fkluZGV4ZWREYXRh
YmFzZVJlcXVlc3QoKQogCiB2b2lkIEluZGV4ZWREYXRhYmFzZVJlcXVlc3Q6Om9wZW4oY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uLCBib29sIG1vZGlmeURhdGFi
YXNlLCBFeGNlcHRpb25Db2RlJiBleGNlcHRpb24pCiB7CisgICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkIGluaXRpYXRlIGEgcmVxdWVzdC4KIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKaW5kZXggMTFjM2VlNS4uYTkyNGI0MyAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZworKysgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkg
QEAKKzIwMTAtMDMtMjQgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW9yZSBJbmRleGVk
REIgcGx1bWJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTM2NTQ2CisKKyAgICAgICAgUGx1bWJpbmcgd29yayB0b3dhcmRzIHRoZSBnb2FsIG9mIG1h
a2luZyBJbmRleGVkRGF0YWJhc2U6Om9wZW4gd29yay4KKworICAgICAgICBOZWVkIGEgc2hvcnQg
ZGVzY3JpcHRpb24gYW5kIGJ1ZyBVUkwgKE9PUFMhKQorCisgICAgICAgICogV2ViS2l0Lmd5cDoK
KyAgICAgICAgKiBwdWJsaWMvV2ViSURCQ2FsbGJhY2tzLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJJREJDYWxsYmFja3M6On5XZWJJREJDYWxsYmFja3MpOgorICAgICAgICAqIHB1Ymxp
Yy9XZWJJREJEYXRhYmFzZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViSURCRGF0YWJh
c2U6On5XZWJJREJEYXRhYmFzZSk6CisgICAgICAgICogcHVibGljL1dlYklEQkRhdGFiYXNlRXJy
b3IuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYklEQkRhdGFiYXNlRXJyb3I6OldlYklE
QkRhdGFiYXNlRXJyb3IpOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJEYXRhYmFzZUVycm9yOjpv
cGVyYXRvcj0pOgorICAgICAgICAqIHB1YmxpYy9XZWJJbmRleGVkRGF0YWJhc2UuaDoKKyAgICAg
ICAgKiBwdWJsaWMvV2ViS2l0Q2xpZW50Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYktpdENsaWVu
dDo6aW5kZXhlZERhdGFiYXNlKToKKyAgICAgICAgKiBwdWJsaWMvV2ViU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmg6CisgICAgICAgICogc3JjL0lEQkNhbGxiYWNrc1Byb3h5Lmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SURCQ2FsbGJhY2tzUHJveHk6OklEQkNhbGxiYWNrc1Byb3h5KToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkNhbGxiYWNrc1Byb3h5Ojp+SURCQ2FsbGJhY2tzUHJveHkpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCQ2FsbGJhY2tzUHJveHk6Om9uU3VjY2Vzcyk6CisgICAgICAg
IChXZWJDb3JlOjpJREJDYWxsYmFja3NQcm94eTo6b25FcnJvcik6CisgICAgICAgICogc3JjL0lE
QkRhdGFiYXNlUHJveHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNl
UHJveHk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZVByb3h5OjpJREJE
YXRhYmFzZVByb3h5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlUHJveHk6On5JREJE
YXRhYmFzZVByb3h5KToKKyAgICAgICAgKiBzcmMvSURCRGF0YWJhc2VQcm94eS5oOiBBZGRlZC4K
KyAgICAgICAgKiBzcmMvSW5kZXhlZERhdGFiYXNlUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW5kZXhlZERhdGFiYXNlUHJveHk6OkluZGV4ZWREYXRhYmFzZVByb3h5KToKKyAgICAgICAg
KFdlYkNvcmU6OkluZGV4ZWREYXRhYmFzZVByb3h5OjpvcGVuKToKKyAgICAgICAgKiBzcmMvSW5k
ZXhlZERhdGFiYXNlUHJveHkuaDoKKyAgICAgICAgKiBzcmMvV2ViSURCRGF0YWJhc2VFcnJvci5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJJREJEYXRhYmFzZUVycm9yOjp+V2ViSURC
RGF0YWJhc2VFcnJvcik6CisgICAgICAgIChXZWJLaXQ6OldlYklEQkRhdGFiYXNlRXJyb3I6Oldl
YklEQkRhdGFiYXNlRXJyb3IpOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJEYXRhYmFzZUVycm9y
Ojphc3NpZ24pOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJEYXRhYmFzZUVycm9yOjpjb2RlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViSURCRGF0YWJhc2VFcnJvcjo6bWVzc2FnZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYklEQkRhdGFiYXNlRXJyb3I6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJL
aXQ6OldlYklEQkRhdGFiYXNlRXJyb3I6Om9wZXJhdG9yIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VF
cnJvcj4pOgorCiAyMDEwLTAzLTIyICBEYXJpbiBGaXNoZXIgIDxkYXJpbkBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTmF0ZSBDaGFwaW4uCmRpZmYgLS1naXQgYS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cCBiL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCmluZGV4IGQy
M2QyMDUuLjAwNjUyMjEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisr
KyBiL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC0xMjYsNiArMTI2LDkgQEAKICAgICAg
ICAgICAgICAgICAncHVibGljL1dlYkhUVFBCb2R5LmgnLAogICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViSW1hZ2UuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJJbWFnZURlY29kZXIu
aCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJJREJDYWxsYmFja3MuaCcsCisgICAgICAg
ICAgICAgICAgJ3B1YmxpYy9XZWJJREJEYXRhYmFzZS5oJywKKyAgICAgICAgICAgICAgICAncHVi
bGljL1dlYklEQkRhdGFiYXNlRXJyb3IuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJJ
bmRleGVkRGF0YWJhc2UuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJJbnB1dEVsZW1l
bnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJJbnB1dEV2ZW50LmgnLApAQCAtMjQz
LDYgKzI0Niw5IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9ndGsvV2ViRm9udEluZm8uY3BwJywK
ICAgICAgICAgICAgICAgICAnc3JjL2d0ay9XZWJGb250SW5mby5oJywKICAgICAgICAgICAgICAg
ICAnc3JjL2d0ay9XZWJJbnB1dEV2ZW50RmFjdG9yeS5jcHAnLAorICAgICAgICAgICAgICAgICdz
cmMvSURCQ2FsbGJhY2tzUHJveHkuaCcsCisgICAgICAgICAgICAgICAgJ3NyYy9JREJEYXRhYmFz
ZVByb3h5LmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9JREJEYXRhYmFzZVByb3h5LmgnLAog
ICAgICAgICAgICAgICAgICdzcmMvSW5kZXhlZERhdGFiYXNlUHJveHkuY3BwJywKICAgICAgICAg
ICAgICAgICAnc3JjL0luZGV4ZWREYXRhYmFzZVByb3h5LmgnLAogICAgICAgICAgICAgICAgICdz
cmMvSW5zcGVjdG9yQ2xpZW50SW1wbC5jcHAnLApAQCAtMzE0LDYgKzMyMCw3IEBACiAgICAgICAg
ICAgICAgICAgJ3NyYy9XZWJHbHlwaENhY2hlLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9X
ZWJIaXN0b3J5SXRlbS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViSFRUUEJvZHkuY3Bw
JywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYklEQkRhdGFiYXNlRXJyb3IuY3BwJywKICAgICAg
ICAgICAgICAgICAnc3JjL1dlYkltYWdlQ0cuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dl
YkltYWdlRGVjb2Rlci5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViSW1hZ2VTa2lhLmNw
cCcsCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQkNhbGxiYWNrcy5o
IGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJDYWxsYmFja3MuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzVjOGU3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJJREJDYWxsYmFja3MuaApAQCAtMCwwICsxLDQ5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBXZWJJREJDYWxsYmFja3NfaAorI2RlZmluZSBXZWJJREJDYWxsYmFja3NfaAorCisjaW5j
bHVkZSAiV2ViQ29tbW9uLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJJREJE
YXRhYmFzZUVycm9yOworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgUmVzdWx0VHlwZT4KK2NsYXNzIFdl
YklEQkNhbGxiYWNrcyB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+V2ViSURCQ2FsbGJhY2tzKCkg
eyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFJlc3VsdFR5cGUqKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIG9uRXJyb3IoY29uc3QgV2ViSURCRGF0YWJhc2VFcnJvciYpID0gMDsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViSURCQ2FsbGJhY2tzX2gK
ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCRGF0YWJhc2UuaCBiL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCRGF0YWJhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi40MDNiNGU4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJJREJEYXRhYmFzZS5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMu
ICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdl
YklEQkRhdGFiYXNlX2gKKyNkZWZpbmUgV2ViSURCRGF0YWJhc2VfaAorCisjaW5jbHVkZSAiV2Vi
Q29tbW9uLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBTZWUgY29tbWVudCBpbiBXZWJJ
bmRleGVkRGF0YWJhc2UgZm9yIGEgaGlnaCBsZXZlbCBvdmVydmlldyB0aGVzZSBjbGFzc2VzLgor
Y2xhc3MgV2ViSURCRGF0YWJhc2UgeworcHVibGljOgorICAgIHZpcnR1YWwgfldlYklEQkRhdGFi
YXNlKCkgeyB9CisKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJJREJEYXRhYmFzZV9oCmRpZmYgLS1naXQgYS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYklEQkRhdGFiYXNlRXJyb3IuaCBiL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViSURCRGF0YWJhc2VFcnJvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmY1NmEwZDAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYklEQkRhdGFiYXNlRXJyb3IuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJJ
REJEYXRhYmFzZUVycm9yX2gKKyNkZWZpbmUgV2ViSURCRGF0YWJhc2VFcnJvcl9oCisKKyNpbmNs
dWRlICJXZWJDb21tb24uaCIKKyNpbmNsdWRlICJXZWJQcml2YXRlUHRyLmgiCisjaW5jbHVkZSAi
V2ViU3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgSURCRGF0YWJhc2VFcnJv
cjsgfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gU2VlIGNvbW1lbnQgaW4gV2ViSW5kZXhl
ZERhdGFiYXNlIGZvciBhIGhpZ2ggbGV2ZWwgb3ZlcnZpZXcgdGhlc2UgY2xhc3Nlcy4KK2NsYXNz
IFdlYklEQkRhdGFiYXNlRXJyb3IgeworcHVibGljOgorICAgIH5XZWJJREJEYXRhYmFzZUVycm9y
KCk7CisKKyAgICBXZWJJREJEYXRhYmFzZUVycm9yKHVuc2lnbmVkIHNob3J0IGNvZGUsIGNvbnN0
IFdlYlN0cmluZyYgbWVzc2FnZSkgeyBhc3NpZ24oY29kZSwgbWVzc2FnZSk7IH0KKyAgICBXZWJJ
REJEYXRhYmFzZUVycm9yKGNvbnN0IFdlYklEQkRhdGFiYXNlRXJyb3ImIGUpIHsgYXNzaWduKGUp
OyB9CisgICAgV2ViSURCRGF0YWJhc2VFcnJvciYgb3BlcmF0b3I9KGNvbnN0IFdlYklEQkRhdGFi
YXNlRXJyb3ImIGUpCisgICAgeworICAgICAgICBhc3NpZ24oZSk7CisgICAgICAgIHJldHVybiAq
dGhpczsKKyAgICB9CisKKyAgICBXRUJLSVRfQVBJIHZvaWQgYXNzaWduKGNvbnN0IFdlYklEQkRh
dGFiYXNlRXJyb3ImKTsKKworICAgIFdFQktJVF9BUEkgdW5zaWduZWQgc2hvcnQgY29kZSgpIGNv
bnN0OworICAgIFdFQktJVF9BUEkgV2ViU3RyaW5nIG1lc3NhZ2UoKSBjb25zdDsKKworI2lmIFdF
QktJVF9JTVBMRU1FTlRBVElPTgorICAgIFdlYklEQkRhdGFiYXNlRXJyb3IoY29uc3QgV1RGOjpQ
YXNzUmVmUHRyPFdlYkNvcmU6OklEQkRhdGFiYXNlRXJyb3I+Jik7CisgICAgV2ViSURCRGF0YWJh
c2VFcnJvciYgb3BlcmF0b3I9KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpJREJEYXRh
YmFzZUVycm9yPiYpOworICAgIG9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpJREJE
YXRhYmFzZUVycm9yPigpIGNvbnN0OworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgV0VCS0lUX0FQ
SSB2b2lkIGFzc2lnbih1bnNpZ25lZCBzaG9ydCBjb2RlLCBjb25zdCBXZWJTdHJpbmcmIG1lc3Nh
Z2UpOworCisgICAgV2ViUHJpdmF0ZVB0cjxXZWJDb3JlOjpJREJEYXRhYmFzZUVycm9yPiBtX3By
aXZhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYklEQkRh
dGFiYXNlRXJyb3JfaApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJbmRl
eGVkRGF0YWJhc2UuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSW5kZXhlZERhdGFiYXNl
LmgKaW5kZXggMjE0ODJiNS4uODAyYmJhNSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJJbmRleGVkRGF0YWJhc2UuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YkluZGV4ZWREYXRhYmFzZS5oCkBAIC0yOSw5ICsyOSwxMSBAQAogI2RlZmluZSBXZWJJbmRleGVk
RGF0YWJhc2VfaAogCiAjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCisjaW5jbHVkZSAiV2ViSURCQ2Fs
bGJhY2tzLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitjbGFzcyBXZWJJREJEYXRhYmFzZTsK
IGNsYXNzIFdlYlN0cmluZzsKIAogLy8gVGhlIGVudHJ5IHBvaW50IGludG8gdGhlIEluZGV4ZWRE
YXRhYmFzZSBBUEkuICBUaGVzZSBjbGFzc2VzIG1hdGNoIHRoZWlyIF9fX19fUmVxdWVzdCBhbmQK
QEAgLTQzLDEwICs0NSw5IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgfldlYkluZGV4ZWREYXRh
YmFzZSgpIHsgfQogCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHJldHVybiBhbiBBc3luY1Jl
dHVybjw+IG9iamVjdC4KLSAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBXZWJTdHJpbmcmIG5h
bWUsIGNvbnN0IFdlYlN0cmluZyYgZGVzY3JpcHRpb24sIGJvb2wgbW9kaWZ5RGF0YWJhc2UsIGlu
dCYgZXhjZXB0aW9uQ29kZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFdlYlN0
cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nJiBkZXNjcmlwdGlvbiwgYm9vbCBtb2RpZnlEYXRh
YmFzZSwgaW50JiBleGNlcHRpb25Db2RlLCBXZWJJREJDYWxsYmFja3M8V2ViSURCRGF0YWJhc2U+
KiBjYWxsYmFja3MpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCi0jZW5kaWYg
Ly8gV2ViU3RvcmFnZU5hbWVzcGFjZV9oCisjZW5kaWYgLy8gV2ViSW5kZXhlZERhdGFiYXNlX2gK
ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0Q2xpZW50LmggYi9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYktpdENsaWVudC5oCmluZGV4IGI3OTFjMTIuLjUwN2EyZjQg
MTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0Q2xpZW50LmgKKysrIGIv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJLaXRDbGllbnQuaApAQCAtMTUzLDcgKzE1Myw3IEBA
IHB1YmxpYzoKIAogICAgIC8vIEluZGV4ZWQgRGF0YWJhc2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gICAgdmlydHVhbCBXZWJJbmRleGVk
RGF0YWJhc2UqIGdldEluZGV4ZWREYXRhYmFzZSgpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFs
IFdlYkluZGV4ZWREYXRhYmFzZSogaW5kZXhlZERhdGFiYXNlKCkgeyByZXR1cm4gMDsgfQogCiAK
ICAgICAvLyBLZXlnZW4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvSURC
Q2FsbGJhY2tzUHJveHkuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCQ2FsbGJhY2tzUHJveHku
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODAzYzk2Ci0tLSAvZGV2L251
bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJDYWxsYmFja3NQcm94eS5oCkBAIC0wLDAg
KzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIElEQkNhbGxiYWNrc1Byb3h5X2gKKyNkZWZpbmUgSURCQ2FsbGJh
Y2tzUHJveHlfaAorCisjaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCisjaW5jbHVkZSAiSURCRGF0
YWJhc2VFcnJvci5oIgorI2luY2x1ZGUgIldlYklEQkNhbGxiYWNrcy5oIgorI2luY2x1ZGUgIldl
YklEQkRhdGFiYXNlRXJyb3IuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBXZWJLaXRDbGFzcywgdHlwZW5h
bWUgV2ViQ29yZUNsYXNzLCB0eXBlbmFtZSBXZWJDb3JlUHJveHk+CitjbGFzcyBJREJDYWxsYmFj
a3NQcm94eSA6IHB1YmxpYyBXZWJLaXQ6OldlYklEQkNhbGxiYWNrczxXZWJLaXRDbGFzcz4gewor
cHVibGljOgorICAgIElEQkNhbGxiYWNrc1Byb3h5KFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPFdl
YkNvcmVDbGFzcz4gPiBjYWxsYmFja3MpCisgICAgICAgIDogbV9jYWxsYmFja3MoY2FsbGJhY2tz
KSB7IH0KKworICAgIHZpcnR1YWwgfklEQkNhbGxiYWNrc1Byb3h5KCkgeyB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgb25TdWNjZXNzKFdlYktpdENsYXNzKiB3ZWJLaXRJbnN0YW5jZSkKKyAgICB7Cisg
ICAgICAgIFJlZlB0cjxXZWJDb3JlQ2xhc3M+IHByb3h5ID0gV2ViQ29yZVByb3h5OjpjcmVhdGUo
d2ViS2l0SW5zdGFuY2UpOworICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKHByb3h5KTsK
KyAgICAgICAgbV9jYWxsYmFja3MuY2xlYXIoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
b25FcnJvcihjb25zdCBXZWJLaXQ6OldlYklEQkRhdGFiYXNlRXJyb3ImIGVycm9yKQorICAgIHsK
KyAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoZXJyb3IpOworICAgICAgICBtX2NhbGxiYWNr
cy5jbGVhcigpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
czxXZWJDb3JlQ2xhc3M+ID4gbV9jYWxsYmFja3M7Cit9OworCisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmCisKKyNlbmRpZiAvLyBJREJDYWxsYmFja3NQcm94eV9oCmRpZmYgLS1n
aXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkRhdGFiYXNlUHJveHkuY3BwIGIvV2ViS2l0L2No
cm9taXVtL3NyYy9JREJEYXRhYmFzZVByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5kMTJlYzcwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9JREJEYXRhYmFzZVByb3h5LmNwcApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFw
cGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlUHJveHkuaCIKKworI2luY2x1ZGUgIklEQkRhdGFi
YXNlRXJyb3IuaCIKKyNpbmNsdWRlICJXZWJJREJEYXRhYmFzZS5oIgorI2luY2x1ZGUgIldlYklE
QkRhdGFiYXNlRXJyb3IuaCIKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8SURCRGF0YWJhc2U+IElEQkRhdGFiYXNlUHJv
eHk6OmNyZWF0ZShQYXNzT3duUHRyPFdlYktpdDo6V2ViSURCRGF0YWJhc2U+IGRhdGFiYXNlKQor
eworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCRGF0YWJhc2VQcm94eShkYXRhYmFzZSkpOwor
fQorCitJREJEYXRhYmFzZVByb3h5OjpJREJEYXRhYmFzZVByb3h5KFBhc3NPd25QdHI8V2ViS2l0
OjpXZWJJREJEYXRhYmFzZT4gZGF0YWJhc2UpCisgICAgOiBtX3dlYklEQkRhdGFiYXNlKGRhdGFi
YXNlKQoreworfQorCitJREJEYXRhYmFzZVByb3h5Ojp+SURCRGF0YWJhc2VQcm94eSgpCit7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQorCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkRhdGFiYXNlUHJv
eHkuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRGF0YWJhc2VQcm94eS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjOTZhMTUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJL
aXQvY2hyb21pdW0vc3JjL0lEQkRhdGFiYXNlUHJveHkuaApAQCAtMCwwICsxLDYxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBJREJEYXRhYmFzZVByb3h5X2gKKyNkZWZpbmUgSURCRGF0YWJhc2VQcm94eV9oCisKKyNp
bmNsdWRlICJJREJEYXRhYmFzZS5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKKyNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYktpdCB7IGNsYXNzIFdlYklE
QkRhdGFiYXNlOyB9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCRGF0YWJhc2VQ
cm94eSA6IHB1YmxpYyBJREJEYXRhYmFzZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2U+IGNyZWF0ZShQYXNzT3duUHRyPFdlYktpdDo6V2ViSURCRGF0YWJhc2U+
KTsKKyAgICB2aXJ0dWFsIH5JREJEYXRhYmFzZVByb3h5KCk7CisKKyAgICAvLyBGSVhNRTogQWRk
IG90aGVyIG1ldGhvZHMuCisKK3ByaXZhdGU6CisgICAgSURCRGF0YWJhc2VQcm94eShQYXNzT3du
UHRyPFdlYktpdDo6V2ViSURCRGF0YWJhc2U+KTsKKworICAgIE93blB0cjxXZWJLaXQ6OldlYklE
QkRhdGFiYXNlPiBtX3dlYklEQkRhdGFiYXNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYKKworI2VuZGlmIC8vIElEQkRhdGFiYXNlUHJveHlfaAorCmRpZmYgLS1naXQg
YS9XZWJLaXQvY2hyb21pdW0vc3JjL0luZGV4ZWREYXRhYmFzZVByb3h5LmNwcCBiL1dlYktpdC9j
aHJvbWl1bS9zcmMvSW5kZXhlZERhdGFiYXNlUHJveHkuY3BwCmluZGV4IGEwOTg2NDEuLmIzYzU2
YjMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5kZXhlZERhdGFiYXNlUHJveHku
Y3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5kZXhlZERhdGFiYXNlUHJveHkuY3BwCkBA
IC0yNSw5ICsyNSwxNSBAQAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCiAgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCisK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbmRleGVkRGF0YWJhc2VQcm94eS5oIgog
CisjaW5jbHVkZSAiSURCQ2FsbGJhY2tzUHJveHkuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUVy
cm9yLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VQcm94eS5oIgorI2luY2x1ZGUgIldlYklEQkRh
dGFiYXNlLmgiCisjaW5jbHVkZSAiV2ViSURCRGF0YWJhc2VFcnJvci5oIgogI2luY2x1ZGUgIldl
YkluZGV4ZWREYXRhYmFzZS5oIgogI2luY2x1ZGUgIldlYktpdC5oIgogI2luY2x1ZGUgIldlYktp
dENsaWVudC5oIgpAQCAtNDIsNyArNDgsNyBAQCBQYXNzUmVmUHRyPEluZGV4ZWREYXRhYmFzZT4g
SW5kZXhlZERhdGFiYXNlUHJveHk6OmNyZWF0ZSgpCiB9CiAKIEluZGV4ZWREYXRhYmFzZVByb3h5
OjpJbmRleGVkRGF0YWJhc2VQcm94eSgpCi0gICAgOiBtX3dlYkluZGV4ZWREYXRhYmFzZShXZWJL
aXQ6OndlYktpdENsaWVudCgpLT5nZXRJbmRleGVkRGF0YWJhc2UoKSkKKyAgICA6IG1fd2ViSW5k
ZXhlZERhdGFiYXNlKFdlYktpdDo6d2ViS2l0Q2xpZW50KCktPmluZGV4ZWREYXRhYmFzZSgpKQog
ewogfQogCkBAIC01MCw5ICs1NiwxMCBAQCBJbmRleGVkRGF0YWJhc2VQcm94eTo6fkluZGV4ZWRE
YXRhYmFzZVByb3h5KCkKIHsKIH0KIAotdm9pZCBJbmRleGVkRGF0YWJhc2VQcm94eTo6b3Blbihj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24sIGJvb2wgbW9kaWZ5
RGF0YWJhc2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBJbmRleGVkRGF0YWJhc2VQcm94eTo6
b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24sIGJvb2wg
bW9kaWZ5RGF0YWJhc2UsIEV4Y2VwdGlvbkNvZGUmIGVjLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNl
Q2FsbGJhY2tzPiBjYWxsYmFja3MpCiB7Ci0gICAgbV93ZWJJbmRleGVkRGF0YWJhc2UtPm9wZW4o
bmFtZSwgZGVzY3JpcHRpb24sIG1vZGlmeURhdGFiYXNlLCBlYyk7CisgICAgbV93ZWJJbmRleGVk
RGF0YWJhc2UtPm9wZW4obmFtZSwgZGVzY3JpcHRpb24sIG1vZGlmeURhdGFiYXNlLCBlYywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgSURCQ2FsbGJhY2tzUHJveHk8V2ViS2l0
OjpXZWJJREJEYXRhYmFzZSwgSURCRGF0YWJhc2UsIElEQkRhdGFiYXNlUHJveHk+KGNhbGxiYWNr
cykpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hy
b21pdW0vc3JjL0luZGV4ZWREYXRhYmFzZVByb3h5LmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL0lu
ZGV4ZWREYXRhYmFzZVByb3h5LmgKaW5kZXggYTRiYWMyYy4uOTQ3ZmFlZSAxMDA2NDQKLS0tIGEv
V2ViS2l0L2Nocm9taXVtL3NyYy9JbmRleGVkRGF0YWJhc2VQcm94eS5oCisrKyBiL1dlYktpdC9j
aHJvbWl1bS9zcmMvSW5kZXhlZERhdGFiYXNlUHJveHkuaApAQCAtMjUsNiArMjUsNyBAQAogICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCisKICNpZm5kZWYgSW5kZXhlZERhdGFi
YXNlUHJveHlfaAogI2RlZmluZSBJbmRleGVkRGF0YWJhc2VQcm94eV9oCiAKQEAgLTQxLDEyICs0
MiwxMiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5kZXhlZERhdGFiYXNlPiBj
cmVhdGUoKTsKICAgICB2aXJ0dWFsIH5JbmRleGVkRGF0YWJhc2VQcm94eSgpOwogCi0gICAgdmly
dHVhbCB2b2lkIG9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0
aW9uLCBib29sIG1vZGlmeURhdGFiYXNlLCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2
b2lkIG9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uLCBi
b29sIG1vZGlmeURhdGFiYXNlLCBFeGNlcHRpb25Db2RlJiwgUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUNhbGxiYWNrcz4pOwogCiBwcml2YXRlOgogICAgIEluZGV4ZWREYXRhYmFzZVByb3h5KCk7CiAK
LSAgICAvLyBXZSBkb24ndCBvd24gdGhpcyBwb2ludGVyLgorICAgIC8vIFdlIGRvbid0IG93biB0
aGlzIHBvaW50ZXIgKHVubGlrZSBhbGwgdGhlIG90aGVyIHByb3h5IGNsYXNzZXMgd2hpY2ggZG8p
LgogICAgIFdlYktpdDo6V2ViSW5kZXhlZERhdGFiYXNlKiBtX3dlYkluZGV4ZWREYXRhYmFzZTsK
IH07CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRGF0YWJhc2VFcnJv
ci5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkRhdGFiYXNlRXJyb3IuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhZTg1NDQKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkRhdGFiYXNlRXJyb3IuY3BwCkBAIC0wLDAgKzEs
ODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViSURCRGF0YWJhc2VFcnJvci5o
IgorCisjaW5jbHVkZSAiSURCRGF0YWJhc2VFcnJvci5oIgorI2luY2x1ZGUgIldlYlN0cmluZy5o
IgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViSURCRGF0YWJhc2VFcnJvcjo6fldlYklE
QkRhdGFiYXNlRXJyb3IoKQoreworICAgIG1fcHJpdmF0ZS5yZXNldCgpOworfQorCit2b2lkIFdl
YklEQkRhdGFiYXNlRXJyb3I6OmFzc2lnbihjb25zdCBXZWJJREJEYXRhYmFzZUVycm9yJiB2YWx1
ZSkKK3sKKyAgICBtX3ByaXZhdGUgPSB2YWx1ZTsKK30KKwordm9pZCBXZWJJREJEYXRhYmFzZUVy
cm9yOjphc3NpZ24odW5zaWduZWQgc2hvcnQgY29kZSwgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdl
KQoreworICAgIG1fcHJpdmF0ZSA9IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShjb2RlLCBtZXNz
YWdlKTsKK30KKwordW5zaWduZWQgc2hvcnQgV2ViSURCRGF0YWJhc2VFcnJvcjo6Y29kZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y29kZSgpOworfQorCitXZWJTdHJpbmcgV2Vi
SURCRGF0YWJhc2VFcnJvcjo6bWVzc2FnZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0
ZS0+bWVzc2FnZSgpOworfQorCitXZWJJREJEYXRhYmFzZUVycm9yOjpXZWJJREJEYXRhYmFzZUVy
cm9yKGNvbnN0IFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4mIHZhbHVlKQorICAgIDogbV9w
cml2YXRlKHZhbHVlKQoreworfQorCitXZWJJREJEYXRhYmFzZUVycm9yJiBXZWJJREJEYXRhYmFz
ZUVycm9yOjpvcGVyYXRvcj0oY29uc3QgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPiYgdmFs
dWUpCit7CisgICAgbV9wcml2YXRlID0gdmFsdWU7CisgICAgcmV0dXJuICp0aGlzOworfQorCitX
ZWJJREJEYXRhYmFzZUVycm9yOjpvcGVyYXRvciBQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLmdldCgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQo=
</data>
<flag name="review"
          id="35059"
          type_id="1"
          status="+"
          setter="fishd"
    />
    <flag name="commit-queue"
          id="35095"
          type_id="3"
          status="-"
          setter="fishd"
    />
          </attachment>
      

    </bug>

</bugzilla>