<?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>27821</bug_id>
          
          <creation_ts>2009-07-29 16:34:11 -0700</creation_ts>
          <short_desc>ApplicationCacheHost refactoring</short_desc>
          <delta_ts>2009-08-04 17:19:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</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="Michael Nordman">michaeln</reporter>
          <assigned_to name="Michael Nordman">michaeln</assigned_to>
          <cc>andersca</cc>
    
    <cc>andreip</cc>
    
    <cc>ap</cc>
    
    <cc>emacemac7</cc>
    
    <cc>fishd</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>135719</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-07-29 16:34:11 -0700</bug_when>
    <thetext>This was split off of https://bugs.webkit.org/show_bug.cgi?id=25436, which was about refactoring webcore&apos;s appcache such that it could be reused in chrome. That proved to be a dead end. Went nowhere for several months and just died.

This bug is about putting in place an interface that webcore&apos;s impl and an external impl provided by chrome can live behind.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135733</commentid>
    <comment_count>1</comment_count>
      <attachid>33755</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-07-29 16:52:46 -0700</bug_when>
    <thetext>Created attachment 33755
class ApplicationCacheHost

This patch started out in rietveld...
http://codereview.chromium.org/160115

There is some history there (several patch sets) that may be useful for reviewers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135753</commentid>
    <comment_count>2</comment_count>
      <attachid>33755</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2009-07-29 17:44:42 -0700</bug_when>
    <thetext>Comment on attachment 33755
class ApplicationCacheHost

&gt; Index: WebCore/loader/appcache/ApplicationCacheHost.cpp
&gt; ===================================================================
&gt; --- WebCore/loader/appcache/ApplicationCacheHost.cpp	(revision 0)
&gt; +++ WebCore/loader/appcache/ApplicationCacheHost.cpp	(revision 0)
&gt; @@ -0,0 +1,374 @@
&gt; +/*
&gt; + * Copyright (c) 2009, 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 are
&gt; + * met:
&gt; + * 
&gt; + *     * Redistributions of source code must retain the above copyright
&gt; + * notice, this list of conditions and the following disclaimer.
&gt; + *     * Redistributions in binary form must reproduce the above
&gt; + * copyright notice, this list of conditions and the following disclaimer
&gt; + * in the documentation and/or other materials provided with the
&gt; + * distribution.
&gt; + *     * Neither the name of Google Inc. nor the names of its
&gt; + * contributors may be used to endorse or promote products derived from
&gt; + * this software without specific prior written permission.
&gt; + * 
&gt; + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
&gt; + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
&gt; + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
&gt; + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
&gt; + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
&gt; + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
&gt; + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
&gt; + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
&gt; + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
&gt; + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
&gt; + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&gt; + */

This is not the right license to be using given that the file primarily contains code moved from an existing file.  You should use the same license as the file you&apos;re moving the code from.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135763</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-07-29 18:08:43 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; This is not the right license to be using given that the file primarily
&gt; contains code moved from an existing file.  You should use the same license as
&gt; the file you&apos;re moving the code from.

Will do, I&apos;ll leave the Google copyright on the .h file and put the Apple copyright on the .cpp file. I have a couple other edits to make too...

* typo  in the ChangeLog to repair too.
* get rid of #include &quot;ThreadableLoader.h&quot; from the appcachehost.h file
* updated and merged .xcodeproj file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135769</commentid>
    <comment_count>4</comment_count>
      <attachid>33759</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-07-29 18:34:54 -0700</bug_when>
    <thetext>Created attachment 33759
class ApplicationCacheHost rev2

* fixed a changelog typo
* put the Apple copyright on the new .cpp file
* massaged the #includes in the new .h file
* updated and merged the .xcodeproj file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135953</commentid>
    <comment_count>5</comment_count>
      <attachid>33810</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-07-30 12:58:48 -0700</bug_when>
    <thetext>Created attachment 33810
class ApplicationCacheHost rev3

For whatever reason...

private:
    friend class RefCounted&lt;DOMApplicationCache&gt;;
    ~DOMApplicationCache() {}

... doesn&apos;t compile with msvc (the RefCounted base class does not have access to the dtor).  Removing the &apos;class&apos; keyword does compile with msvc, but then gcc is unhappy about that. So... bailing on hiding the dtor, moved it to the public section (which is generally how webcore refcounted classes are).

no other changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136001</commentid>
    <comment_count>6</comment_count>
      <attachid>33810</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-07-30 14:02:40 -0700</bug_when>
    <thetext>Comment on attachment 33810
class ApplicationCacheHost rev3

&gt; Index: WebCore/ChangeLog
...
&gt; +        * loader/appcache/ApplicationCacheHost.cpp: Added.
&gt; +        (WebCore::ApplicationCacheHost::ApplicationCacheHost):
&gt; +        (WebCore::ApplicationCacheHost::~ApplicationCacheHost):
&gt; +        (WebCore::ApplicationCacheHost::selectCacheWithoutManifest):

nit: It is encouraged to delete these lines that list functions in new
files being added.  The point, I gather, is that the function list is
most interesting when existing files are being modified.


&gt; Index: WebCore/html/HTMLHtmlElement.cpp
...
&gt; +    if (manifest.isNull() || manifest.isEmpty())

nit: isEmpty() is all you need since it returns true if the string is
either null or zero-length.


&gt; Index: WebCore/loader/DocumentLoader.h
...
&gt; +#if ENABLE(OFFLINE_WEB_APPLICATIONS)
&gt; +        friend class ApplicationCacheHost;  // for substitute resource delivery
&gt; +        OwnPtr&lt;ApplicationCacheHost&gt; m_applicationCacheHost;
&gt;  #endif

nit: Can this just be a non-pointer member variable?  It isn&apos;t lazily allocated.


&gt; Index: WebCore/loader/MainResourceLoader.cpp
...
&gt; @@ -495,27 +478,15 @@ bool MainResourceLoader::load(const Reso
&gt;  
&gt;      m_substituteData = substituteData;
&gt;  
&gt; +    ResourceRequest request(r);
&gt; +
&gt;  #if ENABLE(OFFLINE_WEB_APPLICATIONS)
&gt; -    // Check if this request should be loaded from the application cache
&gt; -    if (!m_substituteData.isValid() &amp;&amp; frameLoader()-&gt;frame()-&gt;settings() &amp;&amp; frameLoader()-&gt;frame()-&gt;settings()-&gt;offlineWebApplicationCacheEnabled()) {
&gt; -        ASSERT(!m_applicationCache);
&gt; -
&gt; -        m_applicationCache = ApplicationCacheGroup::cacheForMainRequest(r, m_documentLoader.get());
&gt; -
&gt; -        if (m_applicationCache) {
&gt; -            // Get the resource from the application cache. By definition, cacheForMainRequest() returns a cache that contains the resource.
&gt; -            ApplicationCacheResource* resource = m_applicationCache-&gt;resourceForRequest(r);
&gt; -            m_substituteData = SubstituteData(resource-&gt;data(), 
&gt; -                                              resource-&gt;response().mimeType(),
&gt; -                                              resource-&gt;response().textEncodingName(), KURL());
&gt; -        }
&gt; -    }
&gt; +    documentLoader()-&gt;applicationCacheHost()-&gt;maybeLoadMainResource(request, m_substituteData);
&gt;  #endif
&gt;  
&gt; -    ResourceRequest request(r);
&gt;      bool defer = defersLoading();
&gt;      if (defer) {
&gt; -        bool shouldLoadEmpty = shouldLoadAsEmptyDocument(r.url());
&gt; +        bool shouldLoadEmpty = shouldLoadAsEmptyDocument(request.url());
&gt;          if (shouldLoadEmpty)
&gt;              defer = false;
&gt;      }


&gt; Index: WebCore/loader/appcache/ApplicationCacheHost.h
...
&gt; +#include &quot;DOMApplicationCache.h&quot;
&gt; +#include &quot;KURL.h&quot;

nit: you can probably get away with just forward declaring KURL, right?


&gt; Index: WebCore/loader/appcache/DOMApplicationCache.cpp

&gt; +    switch (eventType) {
&gt; +        case CHECKING_EVENT:
&gt; +            return eventNames().checkingEvent;
&gt; +        case ERROR_EVENT:
&gt; +            return eventNames().errorEvent;
&gt; +        case NOUPDATE_EVENT:
&gt; +            return eventNames().noupdateEvent;
&gt; +        case DOWNLOADING_EVENT:
&gt; +            return eventNames().downloadingEvent;
&gt; +        case PROGRESS_EVENT:
&gt; +            return eventNames().progressEvent;
&gt; +        case UPDATEREADY_EVENT:
&gt; +            return eventNames().updatereadyEvent;
&gt; +        case CACHED_EVENT:
&gt; +            return eventNames().cachedEvent;
&gt; +        case OBSOLETE_EVENT:            
&gt; +            return eventNames().obsoleteEvent;
&gt; +    }
&gt; +    ASSERT_NOT_REACHED();
&gt; +    return eventNames().errorEvent;
&gt;  }
&gt;  
&gt; +// static
&gt; +DOMApplicationCache::EventType DOMApplicationCache::toEventType(const AtomicString&amp; eventName)
&gt;  {
&gt; +    if (eventName == eventNames().checkingEvent)
&gt; +        return CHECKING_EVENT;
&gt; +    if (eventName == eventNames().errorEvent)
&gt; +        return ERROR_EVENT;
&gt; +    if (eventName == eventNames().noupdateEvent)
&gt; +        return NOUPDATE_EVENT;
&gt; +    if (eventName == eventNames().downloadingEvent)
&gt; +        return DOWNLOADING_EVENT;
&gt; +    if (eventName == eventNames().progressEvent)
&gt; +        return PROGRESS_EVENT;
&gt; +    if (eventName == eventNames().updatereadyEvent)
&gt; +        return UPDATEREADY_EVENT;
&gt; +    if (eventName == eventNames().cachedEvent)
&gt; +        return CACHED_EVENT;
&gt; +    if (eventName == eventNames().obsoleteEvent)
&gt; +        return OBSOLETE_EVENT;
&gt; +  
&gt; +    ASSERT_NOT_REACHED();
&gt; +    return ERROR_EVENT;
&gt;  }

nit: Instead of creating a new enum type, perhaps it would have been better
to just pass an AtomicString for the event name?  What does the enum buy us
over just using the event name directly?


&gt; Index: WebCore/page/chromium/ChromeClientChromium.h

&gt; +#if ENABLE(OFFLINE_WEB_APPLICATIONS)
&gt; +        // Callback invoked when the application cache fails to save a cache object
&gt; +        // because storing it would grow the database file past its defined maximum
&gt; +        // size or past the amount of free space on the device. 
&gt; +        // The chrome client would need to take some action such as evicting some
&gt; +        // old caches.
&gt; +        virtual void reachedMaxAppCacheSize(int64_t spaceNeeded) { }
&gt; +#endif

I don&apos;t think this change is correct or necessary.  See page/ChromeClient.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136044</commentid>
    <comment_count>7</comment_count>
      <attachid>33843</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-07-30 15:15:06 -0700</bug_when>
    <thetext>Created attachment 33843
class ApplicationCacheHost rev4

Addresses darin&apos;s review comments. About the new enum EventType, its used an a c array index (see m_attributeEventListeners), so leaving that as is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136047</commentid>
    <comment_count>8</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-07-30 15:24:11 -0700</bug_when>
    <thetext>&gt; nit: It is encouraged to delete these lines that list functions in new
&gt; files being added.  The point, I gather, is that the function list is
&gt; most interesting when existing files are being modified.

done

&gt; nit: isEmpty() is all you need since it returns true if the string is
&gt; either null or zero-length.

done, thnx

&gt; nit: Can this just be a non-pointer member variable?  It isn&apos;t lazily
&gt; allocated.

done, involved &apos;forwarding&apos; ApplicationCacheHost.hand DOMApplicationCache.h) to the webkit layer, so the xcodeproject file changed too

&gt; nit: you can probably get away with just forward declaring KURL, right?

done, thnx

&gt; nit: Instead of creating a new enum type, perhaps it would have been better
&gt; to just pass an AtomicString for the event name?  What does the enum buy us
&gt; over just using the event name directly?

leaving as is, its used as a &apos;c&apos; array index too 

&gt; I don&apos;t think this change is correct or necessary.  See page/ChromeClient.h.

done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136059</commentid>
    <comment_count>9</comment_count>
      <attachid>33843</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-07-30 15:46:07 -0700</bug_when>
    <thetext>Comment on attachment 33843
class ApplicationCacheHost rev4

&gt; Index: WebCore/loader/appcache/DOMApplicationCache.cpp
...
&gt; +    switch (eventType) {
&gt; +        case CHECKING_EVENT:
&gt; +            return eventNames().checkingEvent;
&gt; +        case ERROR_EVENT:

nit: I forgot to mention that the style guide says to not indent
the cases.  I&apos;ll take care of this before committing the patch.

R=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136061</commentid>
    <comment_count>10</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-07-30 15:56:32 -0700</bug_when>
    <thetext>&gt; nit: I forgot to mention that the style guide says to not indent
&gt; the cases.  I&apos;ll take care of this before committing the patch.

doh... and thank you!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136064</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-07-30 16:09:26 -0700</bug_when>
    <thetext>Landed as:  http://trac.webkit.org/changeset/46609</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136068</commentid>
    <comment_count>12</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-07-30 17:07:21 -0700</bug_when>
    <thetext>(4:25:14 PM) fishd: ap: can you repeat your question for michaeln&apos;s sake?
(4:25:34 PM) ap: michaeln: why was it ok to remove code from DocumentLoader::setPrimaryLoadComplete()?
(4:26:09 PM) ap: michaeln: probably not too difficult a question, but that&apos;s something that should be in ChangeLog
(4:27:28 PM) michaeln: what that code did was transfer ownership of an ApplicationCache reference from MainResourceLoader to DocumentLoader... now there is only one reference (the data member is in ApplicationCacheHOst) so no need transfer from here to there
(4:29:06 PM) ap: michaeln: it would help a lot if such things were explained in ChangeLog
(4:29:51 PM) ap: michaeln: by the way, how does ApplicationCacheHost reflect the old difference between caches owned by MainResourceLoader and DocumentLoader?
(4:30:06 PM) fishd: ap: sorry, i&apos;ll be better about enforcing that in future code reviews.
(4:31:37 PM) michaeln: ap: sorry, i&apos;m not steeped in the culture and don&apos;t have a sense for how much detail goes in the changelog... to me this was a detail of encapsulating the inline appcache logic into the new class
(4:32:02 PM) ap: michaeln: it&apos;s really something a reviewer should notice
(4:32:14 PM) ap: michaeln: by getting confused during a deep review :)
(4:32:40 PM) ap: michaeln: I know it&apos;s hard to tell what parts of your own work may be confusing
(4:33:11 PM) michaeln: ap: there was really no difference... just a place to store the reference... when the main resource was done loading, it got transfered
(4:34:33 PM) ap: michaeln: there were some incredibly subtle dependencies on where the reference was at the moment in our code. since you didn&apos;t break any tests, you probably got that right though
(4:34:47 PM) michaeln: ap: this exchange would be good in the review log... i&apos;ll copy it over when we&apos;re done here
(4:35:25 PM) ap: michaeln: sure. I&apos; writing up some post-commit comments in the bug
(4:35:42 PM) ap: michaeln: not trying to deeply review the logic at the moment
(4:35:48 PM) fishd: ap: this review wasn&apos;t confusing ... since it started on reitveld ;-)
(4:36:02 PM) ap: fishd: oh, niiice!
(4:36:14 PM) fishd: ap: there is a link to the reitveld history in the bug
(4:36:23 PM) michaeln: you can see the &apos;history&apos; much more easily thru the patch set progression on reitveld
(4:36:35 PM) fishd: s/reitveld/rietveld/
(4:37:19 PM) fishd: ap: michael and i also sat down and poured over the code together.
(4:37:27 PM) michaeln: ap: i&apos;ll respond to comments you have there as well
(4:37:45 PM) ap: fishd: I find jumping between two review systems rather difficult. anyway, confusion and questions from review should be taken as hints that something needs to be put into ChangeLog
(4:38:51 PM) fishd: ok
(4:39:36 PM) michaeln: ap: this pretty much amounted to moving methods and method fragments out of &lt;foo&gt;Loader.cpp and movig them unmodified  into ApplicationCacheHost.cpp
(4:42:26 PM) ap: michaeln: by the way, the difference was:
(4:42:43 PM) ap: michaeln: m_applicationCache in MainResourceLoader was &quot;application cache that the main resource was loaded from (if any)&quot;
(4:43:00 PM) ap: michaeln: and the other was &quot;appcache associated with the document&quot;
(4:43:33 PM) ap: michaeln: when populating the cache for the first time, the main resource is loaded normally, and not from appcache
(4:44:32 PM) ap: michaeln: on the other hand, you can load a main resource that was previously cached to find that it has a different manifest in its html element&apos;s attribute
(4:44:40 PM) michaeln: ap: yes, the new ApplicatoinCacheHost has two fields... one for each you mentioned... MainResourceLoader&apos;s data member temporarily provided storage for the former
(4:45:16 PM) ap: michaeln: sounds good - I haven&apos;t read up to that file yet
(4:46:01 PM) michaeln: ap: i did not intend modify any behavior... and i dont think i have... just shuffled code around a bit
(4:46:50 PM) ap: michaeln, fishd: what I should have started with was that I really like the direction this patch goes in (not he part about separate implementations, of course)
(4:49:24 PM) michaeln: ap: i&apos;m happy to have any path forward at this point... in hindsight, mistake on my part to pursue a common impl , shouldn&apos;t have entertained that at all... oh well... live and learn
(4:50:19 PM) ***ap respectfully disagrees that this was a mistake
(4:51:12 PM) michaeln: ap: or rather shouldn&apos;t have pursued it for months... a couple of weeks maybe... but when fruit was not being born, should have cut it off
(5:01:16 PM) michaeln: ap: i&apos;ll paste our discussion here into the bug if you don&apos;t have anymore questions/comments right now?
(5:01:27 PM) ap: ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136070</commentid>
    <comment_count>13</comment_count>
      <attachid>33843</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-07-30 17:14:31 -0700</bug_when>
    <thetext>Comment on attachment 33843
class ApplicationCacheHost rev4

I&apos;m very happy to see this refactoring - it&apos;s really the way to handle the problem at hand. Thanks!

&gt; -#include &quot;ApplicationCacheGroup.h&quot;
&gt; +#if ENABLE(OFFLINE_WEB_APPLICATIONS)
&gt; +#include &quot;ApplicationCacheHost.h&quot;
&gt; +#endif

Why does this have an #if guard? This file is not auto-generated, and t has the same guard inside. The normal style is to avoid polluting all cpp files for non-generated files. It&apos;s true that some existing files have this issue already.

&gt; -    if (manifest.isNull())
&gt; -        ApplicationCacheGroup::selectCacheWithoutManifestURL(document()-&gt;frame());
&gt; +    if (manifest.isEmpty())
&gt; +        documentLoader-&gt;applicationCacheHost()-&gt;selectCacheWithoutManifest();

Why this change? If you&apos;re changing the behavior for manifest=&quot;&quot;, please mention that in ChangeLog and add a test.

&gt; Index: WebCore/loader/DocumentLoader.h
&gt; ===================================================================
&gt; --- WebCore/loader/DocumentLoader.h	(revision 46568)
&gt; +++ WebCore/loader/DocumentLoader.h	(working copy)
&gt; @@ -29,6 +29,10 @@
&gt;  #ifndef DocumentLoader_h
&gt;  #define DocumentLoader_h
&gt;  
&gt; +#if ENABLE(OFFLINE_WEB_APPLICATIONS)
&gt; +#include &quot;ApplicationCacheHost.h&quot;
&gt; +#endif

There is no real reason to include ApplicationCacheHost.h here - you can always make m_applicationCacheHost an OwnPtr. That would make rebuilds faster when working on appcache code, and at the same time avoid the need to make the header private.

&gt; +        if (!documentLoader()-&gt;applicationCacheHost()-&gt;maybeLoadSynchronously(newRequest, error, response, data)) {

I&apos;d prefer a more concrete word than &quot;maybe&quot;. If we don&apos;t have anything concrete to say, we usually say &quot;IfNeeded&quot; - at least that conveys the idea that the decision is not random!

&gt; Index: WebCore/loader/appcache/ApplicationCacheGroup.h
&gt; ===================================================================
&gt; --- WebCore/loader/appcache/ApplicationCacheGroup.h	(revision 46568)
&gt; +++ WebCore/loader/appcache/ApplicationCacheGroup.h	(working copy)
&gt; @@ -32,6 +32,7 @@
&gt;  #include &lt;wtf/HashMap.h&gt;
&gt;  #include &lt;wtf/HashSet.h&gt;
&gt;  
&gt; +#include &quot;DOMApplicationCache.h&quot;

It&apos;s not really appropriate to make ApplicationCacheGroup.h depend on DOM interface. It was bad enough to have a forward declaration for ListenerFunction, but bringing in the whole DOMApplicationCache.h file just invites future layering violations. We need a cleaner interface for these notifications.

&gt;      typedef void (DOMApplicationCache::*ListenerFunction)();
&gt; -    static void postListenerTask(ListenerFunction, const HashSet&lt;DocumentLoader*&gt;&amp;);
&gt; -    static void postListenerTask(ListenerFunction, const Vector&lt;RefPtr&lt;DocumentLoader&gt; &gt;&amp; loaders);
&gt; -    static void postListenerTask(ListenerFunction, DocumentLoader*);
&gt; +    static void postListenerTask(DOMApplicationCache::EventType, const HashSet&lt;DocumentLoader*&gt;&amp;);
&gt; +    static void postListenerTask(DOMApplicationCache::EventType, DocumentLoader*);

The typedef is no longer needed.

&gt; +    : m_DOMApplicationCache(0)

I think that m_domApplicationCache would be more common (or maybe even prescribed) style.


&gt; +    if (!ApplicationCache::requestIsHTTPOrHTTPSGet(request))
&gt; +        return false;

It is quite weird to call ApplicationCache to ask questions like this. Having the method as a local helper was ok, but exposing it as something for others to call really isn&apos;t.

&gt; +bool ApplicationCacheHost::scheduleLoadFallbackResourceFromApplicationCache(ResourceLoader* loader, ApplicationCache* cache)
&lt;...&gt;
&gt; +    m_documentLoader-&gt;m_pendingSubstituteResources.set(loader, resource);
&gt; +    m_documentLoader-&gt;deliverSubstituteResourcesAfterDelay();

Do you have a plan for how to get rid of this? Having ApplicationCacheHost know about such intricate details of DocumentLoader will complicate maintenance quite a bit. Same question for other friend relationships introduced by this patch.

&gt; Property changes on: WebCore/loader/appcache/ApplicationCacheHost.cpp
&gt; ___________________________________________________________________
&gt; Name: svn:executable
&gt;    + *

Please don&apos;t.

&gt; +bool ApplicationCacheStorage::transferApplicationCache(const String&amp; cacheDirectory, ApplicationCacheHost* cacheHost)
&gt; +{
&gt; +    ApplicationCache* cache = cacheHost-&gt;applicationCache();
&gt; +    if (!cache)
&gt; +        return true;
&gt; +    return ApplicationCacheStorage::storeCopyOfCache(cacheDirectory, cache);
&gt; +}

Why a different name? Storing a copy and transferring are not the same.

&gt; -void DOMApplicationCache::removeEventListener(const AtomicString&amp; eventType, EventListener* eventListener, bool)
&gt; +void DOMApplicationCache::removeEventListener(const AtomicString&amp; eventName, EventListener* eventListener, bool)

The argument is called &quot;type&quot; in DOM 2 Core Events spec. It&apos;s not good to reuse the word for something else.

Having to map between enum values and event names is particularly not cool.

&gt; +// static
&gt; +const AtomicString&amp; DOMApplicationCache::toEventName(EventType eventType)

We do not usually add such comments. Do you think this is useful, and should be done elsewhere?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136211</commentid>
    <comment_count>14</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-07-31 12:01:31 -0700</bug_when>
    <thetext>&gt; I&apos;m very happy to see this refactoring - it&apos;s really the way to handle the
&gt; problem at hand. Thanks!

I think this is a reasonable way to handle the problem too. Really, this is much closer to what I was shooting to do when i sent the email to the webkit list entitled &quot;AppCache functionality provided by the embedder of webkit&quot; on april 7. Of course that approach was summarily rejected by the webkit gatekeepers effectively blocking development of this feature for chrome for some time. I&apos;m not clear on what the motivations truely were to have put up those roadblocks, are you? Today, here we are going down that very path.

Anyway... I&apos;m happy enough with the conclusion... but really, the process thru which the conclusion was reached is particularly not cool. 

&gt; &gt; -#include &quot;ApplicationCacheGroup.h&quot;
&gt; &gt; +#if ENABLE(OFFLINE_WEB_APPLICATIONS)
&gt; &gt; +#include &quot;ApplicationCacheHost.h&quot;
&gt; &gt; +#endif
&gt; 
&gt; Why does this have an #if guard? This file is not auto-generated, and t has the
&gt; same guard inside. The normal style is to avoid polluting all cpp files for
&gt; non-generated files. It&apos;s true that some existing files have this issue
&gt; already.

I saw a mix of styles. Some includes having #if guards and not others. For example, look you at the previous revisions of
* MainResourceLoader.cpp .h
* DocumentLoader.cpp
* FrameLoader.cpp

I&apos;ll be happy to remove them in a subsequent patch.

&gt; 
&gt; &gt; -    if (manifest.isNull())
&gt; &gt; -        ApplicationCacheGroup::selectCacheWithoutManifestURL(document()-&gt;frame());
&gt; &gt; +    if (manifest.isEmpty())
&gt; &gt; +        documentLoader-&gt;applicationCacheHost()-&gt;selectCacheWithoutManifest();
&gt; 
&gt; Why this change? If you&apos;re changing the behavior for manifest=&quot;&quot;, please
&gt; mention that in ChangeLog and add a test.

Good catch! I did make a material change here! When resolving &quot;&quot; against the document url, it will resolve to the document url (right). Its not really worthwhile to pass the documentURL in as the manifestURL.

We should get this clarified in the spec. If there should be a difference in behavior between and empty and a non-existent manifest attribute, it should be spelled out more clearly. Passing in the docURL as the manifestURL is just plain sloppy. I&apos;ll ping hixie.

WDYT?

&gt; There is no real reason to include ApplicationCacheHost.h here - you can always
&gt; make m_applicationCacheHost an OwnPtr. That would make rebuilds faster when
&gt; working on appcache code, and at the same time avoid the need to make the
&gt; header private.

Funny, I had it as an OwnPtr. Darin explicitly asked me to put the data member inline to avoid the heap alloc. It really doesn&apos;t matter to me one way or the other.
 
&gt; I&apos;d prefer a more concrete word than &quot;maybe&quot;. If we don&apos;t have anything
&gt; concrete to say, we usually say &quot;IfNeeded&quot; - at least that conveys the idea
&gt; that the decision is not random!

We usually say &quot;maybe&quot; in chrome, seemed like it fit so i used it here. I&apos;ve been using the terminology in other patches that i&apos;ve been posting here for some time now too. Why didn&apos;t you say something sooner?

&gt; It&apos;s not really appropriate to make ApplicationCacheGroup.h depend on DOM
&gt; interface. It was bad enough to have a forward declaration for
&gt; ListenerFunction, but bringing in the whole DOMApplicationCache.h file just
&gt; invites future layering violations. We need a cleaner interface for these
&gt; notifications.

I didn&apos;t introduce the dependency on DOMApplicationCache, it was already there.

ApplicationCacheHost.notifyEventListner(EventType) is a decent enough of an interface for the notifications. All we really need is a place to put the Status and EventType enumerated types such that both DOMApplicationCache and ApplicationCacheGroup can see them.

Maybe we should put these enums in ApplicationCacheHost.h

WDYT?
 
&gt; &gt;      typedef void (DOMApplicationCache::*ListenerFunction)();
&gt; The typedef is no longer needed.

Thnx, i&apos;ll yank that in a subsequent change.

&gt; &gt; +    : m_DOMApplicationCache(0)
&gt; I think that m_domApplicationCache would be more common (or maybe even
&gt; prescribed) style.

k... I&apos;ll fix this in a subsequent change.

&gt; &gt; +    if (!ApplicationCache::requestIsHTTPOrHTTPSGet(request))
&gt; &gt; +        return false;
&gt; It is quite weird to call ApplicationCache to ask questions like this. Having
&gt; the method as a local helper was ok, but exposing it as something for others to
&gt; call really isn&apos;t.

That ApplicationCache method was already being abused by other classes (see previous revisions of DocumentLoader and ApplicationCacheGroup). This patch didn&apos;t expose anything new.

&gt; &gt; +bool ApplicationCacheHost::scheduleLoadFallbackResourceFromApplicationCache(ResourceLoader* loader, ApplicationCache* cache)
&gt; &gt; +    m_documentLoader-&gt;m_pendingSubstituteResources.set(loader, resource);
&gt; &gt; +    m_documentLoader-&gt;deliverSubstituteResourcesAfterDelay();
&gt; Do you have a plan for how to get rid of this? Having ApplicationCacheHost know
&gt; about such intricate details of DocumentLoader will complicate maintenance
&gt; quite a bit. Same question for other friend relationships introduced by this
&gt; patch.

Shouldn&apos;t be a surprise that I agree the intricate dependencies are an issue.

My role here is to put in place a common interface behind which the chrome team can put an entirely different implementation of this feature set. I think the &apos;private&apos; section of the newly added class is an accurate reflection of the interdepencies within the existing impl. I&apos;m not introducing them. The authors/maintainers of the existing impl should clean that up as desired or not.

Our plan is to put #if PLATFORM(CHROMIUM) flags in the newly added ApplicationCacheHost.h file to clearly designate those parts of the new interface that actually are common and those parts that aren&apos;t. That should help with maintaining the interface that chrome depends on. The inter-dependencies in webcore&apos;s impl really isn&apos;t my gig.


&gt; &gt; Name: svn:executable
&gt; &gt;    + *
&gt; Please don&apos;t.

oops, not sure how that got there?

&gt; &gt; +bool ApplicationCacheStorage::transferApplicationCache(const String&amp; cacheDirectory, ApplicationCacheHost* cacheHost)
&gt; Why a different name? Storing a copy and transferring are not the same.

Its a new method. Used a different name to distinquish it from the existing method is all. See the callsite in WebKit/WebDataSource.mm

&gt; &gt; +void DOMApplicationCache::removeEventListener(const AtomicString&amp; eventName, EventListener* eventListener, bool)
&gt; The argument is called &quot;type&quot; in DOM 2 Core Events spec. It&apos;s not good to reuse
&gt; the word for something else.

I did so to distinquish between &apos;EventType&apos; and &apos;AtomicString&apos; params.

&gt; Having to map between enum values and event names is particularly not cool.

Why is that? The numeric data type is handy. Its being used an array index for example.

toEventName(type)
There are common code use cases for this method.

toEventType(string)
We have a use case for the .toEventType(string) method in our v8 bindings, but there is no use case in common code.

I could keep the toEventName(type) method here, but move the .toEventType(str) method into a helper within our v8 bindings layer. I think its best to keep them together though.

&gt; &gt; +// static
&gt; &gt; +const AtomicString&amp; DOMApplicationCache::toEventName(EventType eventType)
&gt; We do not usually add such comments. Do you think this is useful, and should be
&gt; done elsewhere?

This is an old habit. I do think its useful, there&apos;s a big difference between instance and class methods, and it bugs me that you can&apos;t tell the difference by looking at a c++ method definition :)

I&apos;ll remove the comments in a sequent patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136219</commentid>
    <comment_count>15</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-07-31 12:55:33 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; &gt; &gt; -    if (manifest.isNull())
&gt; &gt; &gt; -        ApplicationCacheGroup::selectCacheWithoutManifestURL(document()-&gt;frame());
&gt; &gt; &gt; +    if (manifest.isEmpty())
&gt; &gt; &gt; +        documentLoader-&gt;applicationCacheHost()-&gt;selectCacheWithoutManifest();
&gt; &gt; 
&gt; &gt; Why this change? If you&apos;re changing the behavior for manifest=&quot;&quot;, please
&gt; &gt; mention that in ChangeLog and add a test.
&gt; 
&gt; Good catch! I did make a material change here! When resolving &quot;&quot; against the
&gt; document url, it will resolve to the document url (right). Its not really
&gt; worthwhile to pass the documentURL in as the manifestURL.
&gt; 
&gt; We should get this clarified in the spec. If there should be a difference in
&gt; behavior between and empty and a non-existent manifest attribute, it should be
&gt; spelled out more clearly. Passing in the docURL as the manifestURL is just
&gt; plain sloppy. I&apos;ll ping hixie.
&gt; 
&gt; WDYT?

Presuming we want to distinguish between &apos;empty&apos; and &apos;non-existent&apos; for a moment (i&apos;m not sure we really do)...

This may be a better way to handle &apos;empty&apos; manifest attribute values at this level, don&apos;t resolve it.

    // Check the manifest attribute
    AtomicString manifest = getAttribute(manifestAttr);
    if (manifest.isNull())
        documentLoader-&gt;applicationCacheHost()-&gt;selectCacheWithoutManifest();
    else
        documentLoader-&gt;applicationCacheHost()-&gt;selectCacheWithManifest(
                !manifest.isEmpty() ? document()-&gt;completeURL(manifest) : KURL());


The foriegn entry detection in ApplicationCacheGroup::selectCache(frame, manifestUrl) would have to be modified to also detect &apos;empty&apos; urls.

The benefit is that the system doesn&apos;t download &lt;html&gt; pages as manifest files and fire requisite error onchecking and onerror events into the page.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136235</commentid>
    <comment_count>16</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-07-31 13:43:12 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Of course that approach was summarily rejected by the webkit
&gt; gatekeepers effectively blocking development of this feature for chrome for
&gt; some time.

I remember objections to having multiple implementations, and these still stand. Incremental refactoring for compartmentalization like we have here is good.

&gt; I&apos;m not clear on what the motivations truely were to have put up
&gt; those roadblocks, are you?

Please keep Bugzilla discussions technical.

&gt; I saw a mix of styles. Some includes having #if guards and not others. For
&gt; example, look you at the previous revisions of
&gt; * MainResourceLoader.cpp .h
&gt; * DocumentLoader.cpp
&gt; * FrameLoader.cpp
&gt; 
&gt; I&apos;ll be happy to remove them in a subsequent patch.

Please do - having different styles adds to confusion. I think this started with some auto-generated files not having been guarded with ifdefs, which of course broke builds where they were not generated.

&gt; We should get this clarified in the spec. If there should be a difference in
&gt; behavior between and empty and a non-existent manifest attribute, it should be
&gt; spelled out more clearly. Passing in the docURL as the manifestURL is just
&gt; plain sloppy. I&apos;ll ping hixie.
&gt; 
&gt; WDYT?

Clarifying this in the spec sounds good. We need to add a test for this behavior when it&apos;s settled.

&gt; Funny, I had it as an OwnPtr. Darin explicitly asked me to put the data member
&gt; inline to avoid the heap alloc. It really doesn&apos;t matter to me one way or the
&gt; other.

I think that better encapsulation is more important in this case than saving one allocation (the tradeoffs would be different for a class that gets lots of instances during normal execution, obviously).

&gt; ApplicationCacheHost.notifyEventListner(EventType) is a decent enough of an
&gt; interface for the notifications. All we really need is a place to put the
&gt; Status and EventType enumerated types such that both DOMApplicationCache and
&gt; ApplicationCacheGroup can see them.
&gt; 
&gt; Maybe we should put these enums in ApplicationCacheHost.h
&gt; 
&gt; WDYT?

Sure, sounds reasonable.

&gt; &gt; &gt; +    if (!ApplicationCache::requestIsHTTPOrHTTPSGet(request))
&gt; That ApplicationCache method was already being abused by other classes (see
&gt; previous revisions of DocumentLoader and ApplicationCacheGroup). This patch
&gt; didn&apos;t expose anything new.

OK, still something to fix in the future.

&gt; The authors/maintainers of the existing impl should clean that up as 
&gt; desired or not.

I like to think of all contributors to WebKit as &quot;maintainers&quot; of the complete code base.

&gt; &gt; &gt; +bool ApplicationCacheStorage::transferApplicationCache(const String&amp; cacheDirectory, ApplicationCacheHost* cacheHost)
&gt; &gt; Why a different name? Storing a copy and transferring are not the same.
&gt; 
&gt; Its a new method. Used a different name to distinquish it from the existing
&gt; method is all. See the callsite in WebKit/WebDataSource.mm

I don&apos;t understand this. At the call site, you&apos;ve just replaced a call to storeCopyOfCache() with a call to transferApplicationCache(). This makes no sense.

&gt; I did so to distinquish between &apos;EventType&apos; and &apos;AtomicString&apos; params.

So, this code now uses different terminology than the spec and other similar code in WebKit. Please fix that.

&gt; This is an old habit. I do think its useful, there&apos;s a big difference between
&gt; instance and class methods, and it bugs me that you can&apos;t tell the difference
&gt; by looking at a c++ method definition :)

I agree that it can be helpful at times. Could be something to bring up on webkit-dev mailing list.

&gt; I&apos;ll remove the comments in a sequent patch.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136253</commentid>
    <comment_count>17</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-07-31 14:25:29 -0700</bug_when>
    <thetext>&gt; I don&apos;t understand this. At the call site, you&apos;ve just replaced a call to
&gt; storeCopyOfCache() with a call to transferApplicationCache(). This makes no
&gt; sense.

I can&apos;t tell what you&apos;re asking for, you seem to have something
specific in mind. If you spell it out, I&apos;ll be happy to oblige.

&gt;&gt; I did so to distinquish between &apos;EventType&apos; and &apos;AtomicString&apos; params.
&gt; So, this code now uses different terminology than the spec and other similar
&gt; code in WebKit. Please fix that.

k... i&apos;ll whack at the terminology.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136568</commentid>
    <comment_count>18</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-08-02 12:53:36 -0700</bug_when>
    <thetext>&gt;&gt; Funny, I had it as an OwnPtr. Darin explicitly asked me to put the data member
&gt;&gt; inline to avoid the heap alloc. It really doesn&apos;t matter to me one way or the
&gt;&gt; other.
&gt;
&gt;I think that better encapsulation is more important in this case than saving
&gt;one allocation (the tradeoffs would be different for a class that gets lots of
&gt;instances during normal execution, obviously).

It wasn&apos;t just about avoiding a new allocation as a side-effect of this refactoring, it was about simpler code.  A simple instance variable is simpler than an OwnPtr + new combo.  Reading the header suggests that the member variable&apos;s lifetime might not be the same as the ApplicationCacheHost, but that&apos;s not the case.  I didn&apos;t think the cost of a few more &apos;private&apos; headers or slightly slower pre-processing time for files including ApplicationCacheHost.h would be more important than cleaner, simpler code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136678</commentid>
    <comment_count>19</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-08-03 10:07:35 -0700</bug_when>
    <thetext>&gt; I didn&apos;t think the cost of a few more &apos;private&apos; headers
&gt; or slightly slower pre-processing time for files including
&gt; ApplicationCacheHost.h would be more important than cleaner, simpler code.

This is definitely something that needs to be considered on a case by case basis, but in the past, we worked to reduce the number of headers included in Document.h, for example. DocumentLoader probably falls into the same category.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136856</commentid>
    <comment_count>20</comment_count>
      <attachid>34026</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-08-03 17:17:07 -0700</bug_when>
    <thetext>Created attachment 34026
Patch to address ap&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136858</commentid>
    <comment_count>21</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-08-03 17:20:34 -0700</bug_when>
    <thetext>Re-opening to address some late review comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136904</commentid>
    <comment_count>22</comment_count>
      <attachid>33843</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-08-03 23:21:18 -0700</bug_when>
    <thetext>Comment on attachment 33843
class ApplicationCacheHost rev4

Clearing r+ from obsolete patch to remove from pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137108</commentid>
    <comment_count>23</comment_count>
      <attachid>34026</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-08-04 13:33:47 -0700</bug_when>
    <thetext>Comment on attachment 34026
Patch to address ap&apos;s comments

&gt; +        ApplicationCacheHost is held in an OwnPtr&lt;&gt; by DocumentLoader.

It would be good to briefly explain why this was done, not just mention what was done. This would both provide useful information to folks skimming over commit logs, and make it easier to discover reasons for changes after svn blame. Of course, there is always a choice between having the explanations in Bugzilla and having them in ChangeLogs and having tham in code comments - I think that this case is definitely a candidate for ChangeLog.

&gt; +        Cleanup ussage of ENABLE(xxx) around includes.

Ditto. The rest of ChangeLog comments look fine to me - we don&apos;t usually add blank lines, but it&apos;s not a big deal.

&gt; -    class ResourceRequest;
&gt; +    struct ResourceRequest;

There is a mismatch between platforms - in platform/mac/network/ResourceRequest.h, it&apos;s a class. I don&apos;t know why it&apos;s a struct on some other platforms, looks like a bug to me. This should be fixed, but in a separate patch.

This is a great set of improvements, r=me. Please undo the struct/class change though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137117</commentid>
    <comment_count>24</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-08-04 14:00:08 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; (From update of attachment 34026 [details])
&gt; &gt; +        ApplicationCacheHost is held in an OwnPtr&lt;&gt; by DocumentLoader.
&gt; 
&gt; It would be good to briefly explain why this was done, not just mention what
&gt; was done. This would both provide useful information to folks skimming over
&gt; commit logs, and make it easier to discover reasons for changes after svn
&gt; blame. Of course, there is always a choice between having the explanations in
&gt; Bugzilla and having them in ChangeLogs and having tham in code comments - I
&gt; think that this case is definitely a candidate for ChangeLog.
&gt; 
&gt; &gt; +        Cleanup ussage of ENABLE(xxx) around includes.
&gt; 
&gt; Ditto. The rest of ChangeLog comments look fine to me - we don&apos;t usually add
&gt; blank lines, but it&apos;s not a big deal.

Ok... I&apos;ll poke at the changelog comments and upload a revised patch.

&gt; 
&gt; &gt; -    class ResourceRequest;
&gt; &gt; +    struct ResourceRequest;
&gt; 
&gt; There is a mismatch between platforms - in
&gt; platform/mac/network/ResourceRequest.h, it&apos;s a class. I don&apos;t know why it&apos;s a
&gt; struct on some other platforms, looks like a bug to me. This should be fixed,
&gt; but in a separate patch.
&gt; 
&gt; This is a great set of improvements, r=me. Please undo the struct/class change
&gt; though.

Please see ResourceRequestBase, ResourceRequest is forward declared as a struct there. Every other forward declaration to ResourceRequest in the sources uses the &apos;struct&apos; keyword. It was a mistake for me to have used the &apos;class&apos; keyword in the new .h file.  This doesn&apos;t compile on some platforms (chromium in particular) due to the mismatch. 

I think the fix is to use &apos;struct&apos; in platform/mac/network/ResourceRequest.h, and I agree that should be in a seperate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137135</commentid>
    <comment_count>25</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-08-04 14:45:59 -0700</bug_when>
    <thetext>&gt; I think the fix is to use &apos;struct&apos; in platform/mac/network/ResourceRequest.h,
&gt; and I agree that should be in a seperate patch.

That would be most simple change sufficient to clean this up. But ResourceRequest inherits from ResourceRequestBase, which is a class, so it&apos;s totally not a struct to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137171</commentid>
    <comment_count>26</comment_count>
      <attachid>34095</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-08-04 16:05:41 -0700</bug_when>
    <thetext>Created attachment 34095
Patch to address ap&apos;s comments (rev2)

Couple of changes in this revision..

1) Restore DOMApplicationCache.h and ApplicationCacheHost.h to &apos;project&apos; headers instead of &apos;private&apos; headers since they&apos;re no longer in the DocumentLoader.h include graph. I had forgotten to do this in the previous revision.

2) ChangeLog wordsmithing

Also, I&apos;ve opened... https://bugs.webkit.org/show_bug.cgi?id=28003... to track struct -&gt; class cleanup around ResourceResponse.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137188</commentid>
    <comment_count>27</comment_count>
      <attachid>34095</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-08-04 16:47:36 -0700</bug_when>
    <thetext>Comment on attachment 34095
Patch to address ap&apos;s comments (rev2)

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137199</commentid>
    <comment_count>28</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-08-04 17:19:19 -0700</bug_when>
    <thetext>Landed as:  http://trac.webkit.org/changeset/46786</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33755</attachid>
            <date>2009-07-29 16:52:46 -0700</date>
            <delta_ts>2009-07-29 18:34:54 -0700</delta_ts>
            <desc>class ApplicationCacheHost</desc>
            <filename>AppCacheHostPatch.txt</filename>
            <type>text/plain</type>
            <size>100735</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjU2MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUzIEBACisyMDA5LTA3LTI5ICBNaWNoYWVsIE5vcmRtYW4gIDxtaWNoYWVsbkBn
b29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzgyMQorCisgICAg
ICAgIEFwcGxpY2F0aW9uQ2FjaGVIb3N0IHJlZmFjdG9yaW5nLgorICAgICAgICAKKyAgICAgICAg
MSkgQmV0dGVyIGVuY2Fwc3VsYXRlIHRoZSBpbnRlcmZhY2VzIGJldHdlZW4gd2ViY29yZSBjb21t
b24gY29kZQorICAgICAgICBhbmQgdGhlIGFwcGNhY2hlIHN5c3RlbSBiZWhpbmQgd2l0aGluIGEg
bmV3IGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGVIb3N0LgorCisgICAgICAgIDIpIFVzZSB0aGF0IGlu
dGVyZmFjZSB0aHJvdWdob3V0IHRoZSBsb2FkZXIgc3lzdGVtLCByZXBsYWNpbmcgaW5saW5lIGFw
cGNhY2hlIGxvZ2ljLgorCisgICAgICAgIDMpIEltcGxlbWVudCB0aGUgaW50ZXJmYWNlIGluIHRl
cm1zIG9mIHdlYmNvcmUncyBhcHBjYWNoZSBzeXN0ZW0uCisKKyAgICAgICAgNCkgQWRkIHRoZSBu
ZXcgZmlsZXMgdG8gdmFyaW91cyBtYWtlZmlsZXMuCisKKyAgICAgICAgNSkgSW1wbGVtZW50IHBy
b3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbCgpIGluIEtVUkxHb29nbGUuY3BwCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2Vi
Q29yZS5iYXNlLmV4cDoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29y
ZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYkNvcmVT
b3VyY2VzLmJrbDoKKyAgICAgICAgKiBodG1sL0hUTUxIdG1sRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MSHRtbEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KToKKyAgICAg
ICAgKiBsb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnRMb2FkZXI6OkRvY3VtZW50TG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TG9h
ZGVyOjp+RG9jdW1lbnRMb2FkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6
Om1haW5SZWNlaXZlZEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyOjpk
ZXRhY2hGcm9tRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OnNldFBy
aW1hcnlMb2FkQ29tcGxldGUpOgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVudExvYWRlci5oOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OmFwcGxpY2F0aW9uQ2FjaGVIb3N0KToK
KyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVMb2FkZXI6OmNhbkNhY2hlUGFnZUNvbnRhaW5pbmdUaGlzRnJhbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVMb2FkZXI6OmxvZ0NhbkNhY2hlRnJhbWVEZWNpc2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAg
ICogbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNYWlu
UmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpN
YWluUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Ok1h
aW5SZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpN
YWluUmVzb3VyY2VMb2FkZXI6OmRpZEZhaWwpOgorICAgICAgICAoV2ViQ29yZTo6TWFpblJlc291
cmNlTG9hZGVyOjpsb2FkKToKKyAgICAgICAgKiBsb2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmg6
CisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlTG9hZGVyOjpsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVy
Ojp3aWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6OmRp
ZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRlcjo6ZGlk
RmFpbCk6CisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZGVyLmg6CisgICAgICAgICogbG9h
ZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OnNlbGVjdENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6c2VsZWN0Q2FjaGVXaXRob3V0TWFuaWZlc3RVUkwpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUdyb3VwOjpmaW5pc2hlZExvYWRpbmdN
YWluUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUdyb3VwOjpm
YWlsZWRMb2FkaW5nTWFpblJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9u
Q2FjaGVHcm91cDo6ZGlzYXNzb2NpYXRlRG9jdW1lbnRMb2FkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbGljYXRpb25DYWNoZUdyb3VwOjp1cGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bGljYXRpb25DYWNoZUdyb3VwOjpkaWRGaW5pc2hMb2FkaW5nTWFuaWZlc3QpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUdyb3VwOjptYW5pZmVzdE5vdEZvdW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6Y2hlY2tJZkxvYWRJc0NvbXBsZXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6c3RhcnRMb2FkaW5n
RW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUdyb3VwOjphc3NvY2lh
dGVEb2N1bWVudExvYWRlcldpdGhDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWxsQ2FjaGVM
aXN0ZW5lclRhc2s6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWxsQ2FjaGVMaXN0ZW5l
clRhc2s6OnBlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbGxDYWNoZUxpc3RlbmVy
VGFzazo6Q2FsbENhY2hlTGlzdGVuZXJUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0
aW9uQ2FjaGVHcm91cDo6cG9zdExpc3RlbmVyVGFzayk6CisgICAgICAgICogbG9hZGVyL2FwcGNh
Y2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5oOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9B
cHBsaWNhdGlvbkNhY2hlSG9zdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QXBwbGlj
YXRpb25DYWNoZUhvc3Q6OkFwcGxpY2F0aW9uQ2FjaGVIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGxpY2F0aW9uQ2FjaGVIb3N0Ojp+QXBwbGljYXRpb25DYWNoZUhvc3QpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUhvc3Q6OnNlbGVjdENhY2hlV2l0aG91dE1hbmlmZXN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpzZWxlY3RDYWNoZVdp
dGhNYW5pZmVzdCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlSG9zdDo6bWF5
YmVMb2FkTWFpblJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVI
b3N0OjptYXliZUxvYWRGYWxsYmFja0Zvck1haW5SZXNwb25zZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBsaWNhdGlvbkNhY2hlSG9zdDo6bWF5YmVMb2FkRmFsbGJhY2tGb3JNYWluRXJyb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUhvc3Q6Om1haW5SZXNvdXJjZURhdGFS
ZWNlaXZlZCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlSG9zdDo6ZmFpbGVk
TG9hZGluZ01haW5SZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hl
SG9zdDo6ZmluaXNoZWRMb2FkaW5nTWFpblJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGxpY2F0aW9uQ2FjaGVIb3N0OjptYXliZUxvYWRSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBsaWNhdGlvbkNhY2hlSG9zdDo6bWF5YmVMb2FkRmFsbGJhY2tGb3JSZWRpcmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlSG9zdDo6bWF5YmVMb2FkRmFsbGJhY2tG
b3JSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlSG9zdDo6bWF5
YmVMb2FkRmFsbGJhY2tGb3JFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNh
Y2hlSG9zdDo6bWF5YmVMb2FkU3luY2hyb25vdXNseSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
aWNhdGlvbkNhY2hlSG9zdDo6bWF5YmVMb2FkRmFsbGJhY2tTeW5jaHJvbm91c2x5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpjYW5DYWNoZUluUGFnZUNhY2hlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpzZXRDYW5kaWRhdGVBcHBs
aWNhdGlvbkNhY2hlR3JvdXApOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUhv
c3Q6OnNldEFwcGxpY2F0aW9uQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25D
YWNoZUhvc3Q6OnNob3VsZExvYWRSZXNvdXJjZUZyb21BcHBsaWNhdGlvbkNhY2hlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpnZXRBcHBsaWNhdGlvbkNhY2hlRmFs
bGJhY2tSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlSG9zdDo6
c2NoZWR1bGVMb2FkRmFsbGJhY2tSZXNvdXJjZUZyb21BcHBsaWNhdGlvbkNhY2hlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpzdGF0dXMpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbGljYXRpb25DYWNoZUhvc3Q6OnVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBsaWNhdGlvbkNhY2hlSG9zdDo6c3dhcENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxp
Y2F0aW9uQ2FjaGVIb3N0Ojppc0FwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKToKKyAgICAgICAgKiBs
b2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3QuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlSG9zdDo6c2V0RE9NQXBwbGljYXRpb25DYWNoZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlSG9zdDo6bm90aWZ5RXZlbnRMaXN0ZW5l
cik6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlSG9zdDo6Y2FuZGlkYXRlQXBw
bGljYXRpb25DYWNoZUdyb3VwKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVI
b3N0OjphcHBsaWNhdGlvbkNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2Fj
aGVIb3N0OjptYWluUmVzb3VyY2VBcHBsaWNhdGlvbkNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGxpY2F0aW9uQ2FjaGVIb3N0Ojpkb2N1bWVudExvYWRlcik6CisgICAgICAgICogbG9hZGVy
L2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp0cmFuc2ZlckFwcGxpY2F0aW9uQ2FjaGUpOgorICAg
ICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oOgorICAgICAg
ICAqIGxvYWRlci9hcHBjYWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6OkRPTUFwcGxpY2F0aW9uQ2FjaGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NQXBwbGljYXRpb25DYWNoZTo6ZGlzY29ubmVjdEZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmFwcGxpY2F0aW9uQ2FjaGVIb3N0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6OnN0YXR1cyk6CisgICAgICAg
IChXZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hlOjp1cGRhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NQXBwbGljYXRpb25DYWNoZTo6c3dhcENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkRP
TUFwcGxpY2F0aW9uQ2FjaGU6OmFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RE9NQXBwbGljYXRpb25DYWNoZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJD
b3JlOjpET01BcHBsaWNhdGlvbkNhY2hlOjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3Jl
OjpET01BcHBsaWNhdGlvbkNhY2hlOjp0b0V2ZW50TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpE
T01BcHBsaWNhdGlvbkNhY2hlOjp0b0V2ZW50VHlwZSk6CisgICAgICAgICogbG9hZGVyL2FwcGNh
Y2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0
aW9uQ2FjaGU6Oik6CisgICAgICAgIChXZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hlOjpzZXRB
dHRyaWJ1dGVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9u
Q2FjaGU6OmdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6RE9N
QXBwbGljYXRpb25DYWNoZTo6Y2xlYXJBdHRyaWJ1dGVFdmVudExpc3RlbmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxFdmVudExpc3RlbmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6OnNldE9uY2hlY2tpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NQXBwbGljYXRpb25DYWNoZTo6b25jaGVja2luZyk6CisgICAgICAgIChX
ZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hlOjpzZXRPbmVycm9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6Om9uZXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6RE9N
QXBwbGljYXRpb25DYWNoZTo6c2V0T25ub3VwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpET01B
cHBsaWNhdGlvbkNhY2hlOjpvbm5vdXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxp
Y2F0aW9uQ2FjaGU6OnNldE9uZG93bmxvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RE9NQXBw
bGljYXRpb25DYWNoZTo6b25kb3dubG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpET01BcHBs
aWNhdGlvbkNhY2hlOjpzZXRPbnByb2dyZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxp
Y2F0aW9uQ2FjaGU6Om9ucHJvZ3Jlc3MpOgorICAgICAgICAoV2ViQ29yZTo6RE9NQXBwbGljYXRp
b25DYWNoZTo6c2V0T251cGRhdGVyZWFkeSk6CisgICAgICAgIChXZWJDb3JlOjpET01BcHBsaWNh
dGlvbkNhY2hlOjpvbnVwZGF0ZXJlYWR5KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0
aW9uQ2FjaGU6OnNldE9uY2FjaGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9u
Q2FjaGU6Om9uY2FjaGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6
OnNldE9ub2Jzb2xldGUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NQXBwbGljYXRpb25DYWNoZTo6
b25vYnNvbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hlOjp+RE9N
QXBwbGljYXRpb25DYWNoZSk6CisgICAgICAgICogcGFnZS9jaHJvbWl1bS9DaHJvbWVDbGllbnRD
aHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50Q2hyb21pdW06OnJlYWNo
ZWRNYXhBcHBDYWNoZVNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL0tVUkxHb29nbGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6cHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFsKToKKwogMjAwOS0w
Ny0yOSAgS2V2aW4gTWNDdWxsb3VnaCAgPGttY2N1bGxvdWdoQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNDY1MDYpCisr
KyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMDA2LDYgKzIwMDYs
OCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxp
Y2F0aW9uQ2FjaGUuaCBcCiAJV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNo
ZUdyb3VwLmNwcCBcCiAJV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdy
b3VwLmggXAorCVdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmNw
cCBcCisJV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3QuaCBcCiAJ
V2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmNwcCBcCiAJ
V2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmggXAogCVdl
YkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcCBcCkluZGV4
OiBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
LmJhc2UuZXhwCShyZXZpc2lvbiA0NjUwNikKKysrIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAko
d29ya2luZyBjb3B5KQpAQCAtNDQzLDcgKzQ0Myw3IEBAIF9fWk43V2ViQ29yZTIyYXBwbGljYXRp
b25Jc0FwcGxlTWFpbEV2CiBfX1pON1dlYkNvcmUyMmNyZWF0ZUZyYWdtZW50RnJvbVRleHRFUE5T
XzVSYW5nZUVSS05TXzZTdHJpbmdFCiBfX1pON1dlYkNvcmUyMmV4dGVybmFsUmVwcmVzZW50YXRp
b25FUE5TXzEyUmVuZGVyT2JqZWN0RQogX19aTjdXZWJDb3JlMjNBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTE0c2V0TWF4aW11bVNpemVFeAotX19aTjdXZWJDb3JlMjNBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTE2c3RvcmVDb3B5T2ZDYWNoZUVSS05TXzZTdHJpbmdFUE5TXzE2QXBwbGljYXRpb25DYWNo
ZUUKK19fWk43V2ViQ29yZTIzQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UyNHRyYW5zZmVyQXBwbGlj
YXRpb25DYWNoZUVSS05TXzZTdHJpbmdFUE5TXzIwQXBwbGljYXRpb25DYWNoZUhvc3RFCiBfX1pO
N1dlYkNvcmUyM0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlMTdzZXRDYWNoZURpcmVjdG9yeUVSS05T
XzZTdHJpbmdFCiBfX1pON1dlYkNvcmUyM0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlMTh2YWN1dW1E
YXRhYmFzZUZpbGVFdgogX19aTjdXZWJDb3JlMjNBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTVlbXB0
eUV2CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmUuZ3lwaQkocmV2aXNpb24gNDY1MDYpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29y
a2luZyBjb3B5KQpAQCAtMTQyNCw2ICsxNDI0LDggQEAKICAgICAgICAgICAgICdsb2FkZXIvYXBw
Y2FjaGUvQXBwbGljYXRpb25DYWNoZS5oJywKICAgICAgICAgICAgICdsb2FkZXIvYXBwY2FjaGUv
QXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcCcsCiAgICAgICAgICAgICAnbG9hZGVyL2FwcGNhY2hl
L0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5oJywKKyAgICAgICAgICAgICdsb2FkZXIvYXBwY2FjaGUv
QXBwbGljYXRpb25DYWNoZUhvc3QuY3BwJywKKyAgICAgICAgICAgICdsb2FkZXIvYXBwY2FjaGUv
QXBwbGljYXRpb25DYWNoZUhvc3QuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL2FwcGNhY2hlL0Fw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9hcHBjYWNo
ZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL2FwcGNh
Y2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcCcsCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUu
cHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDQ2NTA2KQor
KysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTUxMyw2ICsxNTEzLDcg
QEAgSEVBREVSUyArPSBcCiAgICAgaW5zcGVjdG9yL0phdmFTY3JpcHRQcm9maWxlLmggXAogICAg
IGluc3BlY3Rvci9KYXZhU2NyaXB0UHJvZmlsZU5vZGUuaCBcCiAgICAgbG9hZGVyL2FwcGNhY2hl
L0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5oIFwKKyAgICBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRp
b25DYWNoZUhvc3QuaCBcCiAgICAgbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuaCBc
CiAgICAgbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5oIFwKICAgICBs
b2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaCBcCkBAIC0zMDMxLDYgKzMw
MzIsNyBAQCBJRExfQklORElOR1MgKz0gXAogU09VUkNFUyArPSBcCiAgICAgbG9hZGVyL2FwcGNh
Y2hlL0FwcGxpY2F0aW9uQ2FjaGUuY3BwIFwKICAgICBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRp
b25DYWNoZUdyb3VwLmNwcCBcCisgICAgbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVI
b3N0LmNwcCBcCiAgICAgbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNw
cCBcCiAgICAgbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHAgXAog
ICAgIGxvYWRlci9hcHBjYWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmNwcCBcCkluZGV4OiBXZWJD
b3JlL1dlYkNvcmVTb3VyY2VzLmJrbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmVTb3Vy
Y2VzLmJrbAkocmV2aXNpb24gNDY1MDYpCisrKyBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAko
d29ya2luZyBjb3B5KQpAQCAtNjc2LDYgKzY3Niw3IEBAIFRoaXMgZmlsZSBjb250YWlucyB0aGUg
bGlzdCBvZiBmaWxlcyBuZWUKICAgICA8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJD
RVNfTE9BREVSIj4KICAgICAgICAgbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuY3Bw
CiAgICAgICAgIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwCisgICAg
ICAgIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAKICAgICAgICAgbG9h
ZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHAKICAgICAgICAgbG9hZGVy
L2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuY3BwCiAgICAgICAgIGxvYWRlci9hcHBjYWNo
ZS9NYW5pZmVzdFBhcnNlci5jcHAKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagkocmV2aXNpb24gNDY1MDYpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNzI5Niw2ICsxNzI5NiwxNCBAQAogCQkJCQk+DQog
CQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXGFw
cGNhY2hlXEFwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0K
KwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcYXBwY2FjaGVcQXBwbGlj
YXRpb25DYWNoZUhvc3QuaCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KIAkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcYXBwY2FjaGVcQXBwbGljYXRpb25DYWNoZVJlc291
cmNlLmNwcCINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA0NjUwNikKKysrIFdlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MjQsNiAr
NTI0LDggQEAKIAkJMUNGNkJFMTQwRTlCQjQ2NzAwMjVFMUNEIC8qIE9iakNOb2RlRmlsdGVyQ29u
ZGl0aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUNGNkJFMTIwRTlCQjQ2NzAwMjVFMUNEIC8qIE9iakNOb2RlRmlsdGVyQ29uZGl0aW9uLm1tICov
OyB9OwogCQkxQ0Y2QkUxNTBFOUJCNDY3MDAyNUUxQ0QgLyogT2JqQ05vZGVGaWx0ZXJDb25kaXRp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDRjZC
RTEzMEU5QkI0NjcwMDI1RTFDRCAvKiBPYmpDTm9kZUZpbHRlckNvbmRpdGlvbi5oICovOyB9Owog
CQkxQ0ZBRTMyMzBBNkQ2QTNGMDAzMjU5M0QgLyogbGlib2JqYy5keWxpYiBpbiBGcmFtZXdvcmtz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDRkFFMzIyMEE2RDZBM0YwMDMy
NTkzRCAvKiBsaWJvYmpjLmR5bGliICovOyB9OworCQkyNEY1NEVBQzEwMUZFOTE0MDAwQUU3NDEg
LyogQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMjRGNTRFQUExMDFGRTkxNDAwMEFFNzQxIC8qIEFwcGxpY2F0aW9u
Q2FjaGVIb3N0LmNwcCAqLzsgfTsKKwkJMjRGNTRFQUQxMDFGRTkxNDAwMEFFNzQxIC8qIEFwcGxp
Y2F0aW9uQ2FjaGVIb3N0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyNEY1NEVBQjEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRpb25DYWNoZUhvc3Qu
aCAqLzsgfTsKIAkJMjlBODEyMjYwRkJCOUMxRDAwNTEwMjkzIC8qIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMjlBODEyMDgwRkJCOUMxRDAwNTEwMjkzIC8qIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Qu
Y3BwICovOyB9OwogCQkyOUE4MTIyNzBGQkI5QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eVRh
YmxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5
QTgxMjA5MEZCQjlDMUQwMDUxMDI5MyAvKiBBY2Nlc3NpYmlsaXR5VGFibGUuY3BwICovOyB9Owog
CQkyOUE4MTIyODBGQkI5QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5QTgxMjBBMEZC
QjlDMUQwMDUxMDI5MyAvKiBBY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwICovOyB9OwpAQCAtNTQ4
NSw2ICs1NDg3LDggQEAKIAkJMUNGNkJFMTIwRTlCQjQ2NzAwMjVFMUNEIC8qIE9iakNOb2RlRmls
dGVyQ29uZGl0aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
T2JqQ05vZGVGaWx0ZXJDb25kaXRpb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTFDRjZCRTEzMEU5QkI0NjcwMDI1RTFDRCAvKiBPYmpDTm9kZUZpbHRlckNvbmRpdGlvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPYmpDTm9kZUZpbHRlckNvbmRpdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0ZBRTMyMjBBNkQ2QTNGMDAzMjU5M0Qg
LyogbGlib2JqYy5keWxpYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIiOyBuYW1lID0gbGlib2JqYy5keWxpYjsg
cGF0aCA9IC91c3IvbGliL2xpYm9iamMuZHlsaWI7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7
IH07CisJCTI0RjU0RUFBMTAxRkU5MTQwMDBBRTc0MSAvKiBBcHBsaWNhdGlvbkNhY2hlSG9zdC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcHBsaWNhdGlvbkNhY2hl
SG9zdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI0RjU0RUFCMTAxRkU5MTQw
MDBBRTc0MSAvKiBBcHBsaWNhdGlvbkNhY2hlSG9zdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBcHBsaWNhdGlvbkNhY2hlSG9zdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkyOUE4MTIwODBGQkI5QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjlBODEy
MDkwRkJCOUMxRDAwNTEwMjkzIC8qIEFjY2Vzc2liaWxpdHlUYWJsZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBY2Nlc3NpYmlsaXR5VGFibGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkyOUE4MTIwQTBGQkI5QzFEMDA1MTAyOTMgLyogQWNjZXNz
aWJpbGl0eUFSSUFHcmlkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEFjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC05NzA0LDYgKzk3MDgsOCBAQAogCQkxQThGNkJCMDBEQjU1Q0RDMDAxREI3OTQgLyogYXBwY2Fj
aGUgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTI0RjU0
RUFBMTAxRkU5MTQwMDBBRTc0MSAvKiBBcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAgKi8sCisJCQkJ
MjRGNTRFQUIxMDFGRTkxNDAwMEFFNzQxIC8qIEFwcGxpY2F0aW9uQ2FjaGVIb3N0LmggKi8sCiAJ
CQkJMUE4RjZCQjEwREI1NUNEQzAwMURCNzk0IC8qIEFwcGxpY2F0aW9uQ2FjaGUuY3BwICovLAog
CQkJCTFBOEY2QkIyMERCNTVDREMwMDFEQjc5NCAvKiBBcHBsaWNhdGlvbkNhY2hlLmggKi8sCiAJ
CQkJMUE4RjZCQjMwREI1NUNEQzAwMURCNzk0IC8qIEFwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAg
Ki8sCkBAIC0xNzA1Niw2ICsxNzA2Miw3IEBACiAJCQkJQ0U1NEZEMzgxMDE2RDlBNjAwOEI0NEM4
IC8qIFNjcmlwdFNvdXJjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QTc0RUNCQjEw
MTgzOUE2MDBCRjkzOUUgLyogSW5zcGVjdG9yQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
N0ExRTg4RjYxMDFDQzM4NDAwMEM0REY1IC8qIFNjcmlwdEFycmF5LmggaW4gSGVhZGVycyAqLywK
KwkJCQkyNEY1NEVBRDEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRpb25DYWNoZUhvc3QuaCBp
biBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOwogCQl9OwpAQCAtMTkwOTcsNiArMTkxMDQsNyBAQAogCQkJCTdBNzRFQ0JBMTAxODM5
QTYwMEJGOTM5RSAvKiBJbnNwZWN0b3JCYWNrZW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdB
NzRFQ0JEMTAxODM5REEwMEJGOTM5RSAvKiBKU0luc3BlY3RvckJhY2tlbmRDdXN0b20uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJN0ExRTg4RjUxMDFDQzM4NDAwMEM0REY1IC8qIFNjcmlwdEFycmF5
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTI0RjU0RUFDMTAxRkU5MTQwMDBBRTc0MSAvKiBBcHBs
aWNhdGlvbkNhY2hlSG9zdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9I
VE1MSHRtbEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSHRtbEVs
ZW1lbnQuY3BwCShyZXZpc2lvbiA0NjUwNikKKysrIFdlYkNvcmUvaHRtbC9IVE1MSHRtbEVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMywxMyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkhUTUxIdG1sRWxlbWVudC5oIgogCi0jaW5jbHVkZSAiQXBwbGljYXRp
b25DYWNoZUdyb3VwLmgiCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyNp
bmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlSG9zdC5oIgorI2VuZGlmCisKICNpbmNsdWRlICJEb2N1
bWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIK
ICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjgsMTIg
KzczLDE2IEBAIHZvaWQgSFRNTEh0bWxFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWUKICAgICBp
ZiAoIWRvY3VtZW50KCktPmZyYW1lKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIERvY3VtZW50
TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IGRvY3VtZW50KCktPmZyYW1lKCktPmxvYWRlcigpLT5k
b2N1bWVudExvYWRlcigpOworICAgIGlmICghZG9jdW1lbnRMb2FkZXIpCisgICAgICAgIHJldHVy
bjsKKwogICAgIC8vIENoZWNrIHRoZSBtYW5pZmVzdCBhdHRyaWJ1dGUKICAgICBBdG9taWNTdHJp
bmcgbWFuaWZlc3QgPSBnZXRBdHRyaWJ1dGUobWFuaWZlc3RBdHRyKTsKLSAgICBpZiAobWFuaWZl
c3QuaXNOdWxsKCkpCi0gICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6c2VsZWN0Q2FjaGVX
aXRob3V0TWFuaWZlc3RVUkwoZG9jdW1lbnQoKS0+ZnJhbWUoKSk7CisgICAgaWYgKG1hbmlmZXN0
LmlzTnVsbCgpIHx8IG1hbmlmZXN0LmlzRW1wdHkoKSkKKyAgICAgICAgZG9jdW1lbnRMb2FkZXIt
PmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPnNlbGVjdENhY2hlV2l0aG91dE1hbmlmZXN0KCk7CiAg
ICAgZWxzZQotICAgICAgICBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OnNlbGVjdENhY2hlKGRvY3Vt
ZW50KCktPmZyYW1lKCksIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKG1hbmlmZXN0KSk7CisgICAg
ICAgIGRvY3VtZW50TG9hZGVyLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5zZWxlY3RDYWNoZVdp
dGhNYW5pZmVzdChkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChtYW5pZmVzdCkpOwogfQogI2VuZGlm
CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAJKHJldmlzaW9uIDQ2NTA2KQorKysg
V2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5
ICszMCw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKIAogI2lmIEVOQUJMRShPRkZM
SU5FX1dFQl9BUFBMSUNBVElPTlMpCi0jaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZS5oIgotI2lu
Y2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVHcm91cC5oIgotI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2Fj
aGVSZXNvdXJjZS5oIgorI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVIb3N0LmgiCiAjZW5kaWYK
ICNpbmNsdWRlICJBcmNoaXZlRmFjdG9yeS5oIgogI2luY2x1ZGUgIkFyY2hpdmVSZXNvdXJjZUNv
bGxlY3Rpb24uaCIKQEAgLTE1Myw3ICsxNTEsNyBAQCBEb2N1bWVudExvYWRlcjo6RG9jdW1lbnRM
b2FkZXIoY29uc3QgUmVzCiAgICAgLCBtX3N1YnN0aXR1dGVSZXNvdXJjZURlbGl2ZXJ5VGltZXIo
dGhpcywgJkRvY3VtZW50TG9hZGVyOjpzdWJzdGl0dXRlUmVzb3VyY2VEZWxpdmVyeVRpbWVyRmly
ZWQpCiAgICAgLCBtX2RpZENyZWF0ZUdsb2JhbEhpc3RvcnlFbnRyeShmYWxzZSkKICNpZiBFTkFC
TEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotICAgICwgbV9jYW5kaWRhdGVBcHBsaWNhdGlv
bkNhY2hlR3JvdXAoMCkKKyAgICAsIG1fYXBwbGljYXRpb25DYWNoZUhvc3QobmV3IEFwcGxpY2F0
aW9uQ2FjaGVIb3N0KHRoaXMpKQogI2VuZGlmCiB7CiB9CkBAIC0xNjgsMTMgKzE2Niw2IEBAIEZy
YW1lTG9hZGVyKiBEb2N1bWVudExvYWRlcjo6ZnJhbWVMb2FkZXIKIERvY3VtZW50TG9hZGVyOjp+
RG9jdW1lbnRMb2FkZXIoKQogewogICAgIEFTU0VSVCghbV9mcmFtZSB8fCBmcmFtZUxvYWRlcigp
LT5hY3RpdmVEb2N1bWVudExvYWRlcigpICE9IHRoaXMgfHwgIWZyYW1lTG9hZGVyKCktPmlzTG9h
ZGluZygpKTsKLSAgICAKLSNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotICAg
IGlmIChtX2FwcGxpY2F0aW9uQ2FjaGUpCi0gICAgICAgIG1fYXBwbGljYXRpb25DYWNoZS0+Z3Jv
dXAoKS0+ZGlzYXNzb2NpYXRlRG9jdW1lbnRMb2FkZXIodGhpcyk7Ci0gICAgZWxzZSBpZiAobV9j
YW5kaWRhdGVBcHBsaWNhdGlvbkNhY2hlR3JvdXApCi0gICAgICAgIG1fY2FuZGlkYXRlQXBwbGlj
YXRpb25DYWNoZUdyb3VwLT5kaXNhc3NvY2lhdGVEb2N1bWVudExvYWRlcih0aGlzKTsKLSNlbmRp
ZgogfQogCiBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gRG9jdW1lbnRMb2FkZXI6Om1haW5SZXNv
dXJjZURhdGEoKSBjb25zdApAQCAtMjU4LDE0ICsyNDksNyBAQCB2b2lkIERvY3VtZW50TG9hZGVy
OjptYWluUmVjZWl2ZWRFcnJvcihjCiAgICAgQVNTRVJUKCFlcnJvci5pc051bGwoKSk7CiAKICNp
ZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotICAgIEFwcGxpY2F0aW9uQ2FjaGVH
cm91cCogZ3JvdXAgPSBtX2NhbmRpZGF0ZUFwcGxpY2F0aW9uQ2FjaGVHcm91cDsKLSAgICBpZiAo
IWdyb3VwICYmIG1fYXBwbGljYXRpb25DYWNoZSkgewotICAgICAgICBBU1NFUlQoIW1haW5SZXNv
dXJjZUFwcGxpY2F0aW9uQ2FjaGUoKSk7IC8vIElmIHRoZSBtYWluIHJlc291cmNlIHdlcmUgbG9h
ZGVkIGZyb20gYSBjYWNoZSwgaXQgd291bGRuJ3QgZmFpbC4KLSAgICAgICAgZ3JvdXAgPSBtX2Fw
cGxpY2F0aW9uQ2FjaGUtPmdyb3VwKCk7Ci0gICAgfQotICAgIAotICAgIGlmIChncm91cCkKLSAg
ICAgICAgZ3JvdXAtPmZhaWxlZExvYWRpbmdNYWluUmVzb3VyY2UodGhpcyk7CisgICAgbV9hcHBs
aWNhdGlvbkNhY2hlSG9zdC0+ZmFpbGVkTG9hZGluZ01haW5SZXNvdXJjZSgpOwogI2VuZGlmCiAg
ICAgCiAgICAgaWYgKCFmcmFtZUxvYWRlcigpKQpAQCAtNDMwLDYgKzQxNCw5IEBAIHZvaWQgRG9j
dW1lbnRMb2FkZXI6OmF0dGFjaFRvRnJhbWUoKQogdm9pZCBEb2N1bWVudExvYWRlcjo6ZGV0YWNo
RnJvbUZyYW1lKCkKIHsKICAgICBBU1NFUlQobV9mcmFtZSk7CisjaWYgRU5BQkxFKE9GRkxJTkVf
V0VCX0FQUExJQ0FUSU9OUykKKyAgICBtX2FwcGxpY2F0aW9uQ2FjaGVIb3N0LT5zZXRET01BcHBs
aWNhdGlvbkNhY2hlKDApOworI2VuZGlmCiAgICAgbV9mcmFtZSA9IDA7CiB9CiAKQEAgLTQ1MSw5
ICs0MzgsNiBAQCB2b2lkIERvY3VtZW50TG9hZGVyOjpzZXRQcmltYXJ5TG9hZENvbXBsCiAgICAg
aWYgKGZsYWcpIHsKICAgICAgICAgaWYgKG1fbWFpblJlc291cmNlTG9hZGVyKSB7CiAgICAgICAg
ICAgICBtX21haW5SZXNvdXJjZURhdGEgPSBtX21haW5SZXNvdXJjZUxvYWRlci0+cmVzb3VyY2VE
YXRhKCk7Ci0jaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLSAgICAgICAgICAg
IG1fbWFpblJlc291cmNlQXBwbGljYXRpb25DYWNoZSA9IG1fbWFpblJlc291cmNlTG9hZGVyLT5h
cHBsaWNhdGlvbkNhY2hlKCk7Ci0jZW5kaWYKICAgICAgICAgICAgIG1fbWFpblJlc291cmNlTG9h
ZGVyID0gMDsKICAgICAgICAgfQogCkBAIC04NDcsMTEzICs4MzEsNCBAQCB2b2lkIERvY3VtZW50
TG9hZGVyOjppY29uTG9hZERlY2lzaW9uQXZhCiAgICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5p
Y29uTG9hZERlY2lzaW9uQXZhaWxhYmxlKCk7CiB9CiAKLSNpZiBFTkFCTEUoT0ZGTElORV9XRUJf
QVBQTElDQVRJT05TKQotdm9pZCBEb2N1bWVudExvYWRlcjo6c2V0Q2FuZGlkYXRlQXBwbGljYXRp
b25DYWNoZUdyb3VwKEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogZ3JvdXApCi17Ci0gICAgQVNTRVJU
KCFtX2FwcGxpY2F0aW9uQ2FjaGUpOwotICAgIG1fY2FuZGlkYXRlQXBwbGljYXRpb25DYWNoZUdy
b3VwID0gZ3JvdXA7Ci19Ci0gICAgCi12b2lkIERvY3VtZW50TG9hZGVyOjpzZXRBcHBsaWNhdGlv
bkNhY2hlKFBhc3NSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gYXBwbGljYXRpb25DYWNoZSkKLXsK
LSAgICBpZiAobV9jYW5kaWRhdGVBcHBsaWNhdGlvbkNhY2hlR3JvdXApIHsKLSAgICAgICAgQVNT
RVJUKCFtX2FwcGxpY2F0aW9uQ2FjaGUpOwotICAgICAgICBtX2NhbmRpZGF0ZUFwcGxpY2F0aW9u
Q2FjaGVHcm91cCA9IDA7Ci0gICAgfQotCi0gICAgbV9hcHBsaWNhdGlvbkNhY2hlID0gYXBwbGlj
YXRpb25DYWNoZTsKLX0KLQotQXBwbGljYXRpb25DYWNoZSogRG9jdW1lbnRMb2FkZXI6Om1haW5S
ZXNvdXJjZUFwcGxpY2F0aW9uQ2FjaGUoKSBjb25zdAotewotICAgIGlmIChtX21haW5SZXNvdXJj
ZUFwcGxpY2F0aW9uQ2FjaGUpCi0gICAgICAgIHJldHVybiBtX21haW5SZXNvdXJjZUFwcGxpY2F0
aW9uQ2FjaGUuZ2V0KCk7Ci0gICAgaWYgKG1fbWFpblJlc291cmNlTG9hZGVyKQotICAgICAgICBy
ZXR1cm4gbV9tYWluUmVzb3VyY2VMb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGUoKTsKLSAgICByZXR1
cm4gMDsKLX0KLQotYm9vbCBEb2N1bWVudExvYWRlcjo6c2hvdWxkTG9hZFJlc291cmNlRnJvbUFw
cGxpY2F0aW9uQ2FjaGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBBcHBsaWNhdGlv
bkNhY2hlUmVzb3VyY2UqJiByZXNvdXJjZSkKLXsKLSAgICBBcHBsaWNhdGlvbkNhY2hlKiBjYWNo
ZSA9IGFwcGxpY2F0aW9uQ2FjaGUoKTsKLSAgICBpZiAoIWNhY2hlIHx8ICFjYWNoZS0+aXNDb21w
bGV0ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBJZiB0aGUgcmVzb3VyY2Ug
aXMgbm90IGEgSFRUUC9IVFRQUyBHRVQsIHRoZW4gYWJvcnQKLSAgICBpZiAoIUFwcGxpY2F0aW9u
Q2FjaGU6OnJlcXVlc3RJc0hUVFBPckhUVFBTR2V0KHJlcXVlc3QpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAvLyBJZiB0aGUgcmVzb3VyY2UncyBVUkwgaXMgYW4gbWFzdGVyIGVudHJ5
LCB0aGUgbWFuaWZlc3QsIGFuIGV4cGxpY2l0IGVudHJ5LCBvciBhIGZhbGxiYWNrIGVudHJ5Ci0g
ICAgLy8gaW4gdGhlIGFwcGxpY2F0aW9uIGNhY2hlLCB0aGVuIGdldCB0aGUgcmVzb3VyY2UgZnJv
bSB0aGUgY2FjaGUgKGluc3RlYWQgb2YgZmV0Y2hpbmcgaXQpLgotICAgIHJlc291cmNlID0gY2Fj
aGUtPnJlc291cmNlRm9yVVJMKHJlcXVlc3QudXJsKCkpOwotCi0gICAgLy8gUmVzb3VyY2VzIHRo
YXQgbWF0Y2ggZmFsbGJhY2sgbmFtZXNwYWNlcyBvciBvbmxpbmUgd2hpdGVsaXN0IGVudHJpZXMg
YXJlIGZldGNoZWQgZnJvbSB0aGUgbmV0d29yaywKLSAgICAvLyB1bmxlc3MgdGhleSBhcmUgYWxz
byBjYWNoZWQuCi0gICAgaWYgKCFyZXNvdXJjZSAmJiAoY2FjaGUtPnVybE1hdGNoZXNGYWxsYmFj
a05hbWVzcGFjZShyZXF1ZXN0LnVybCgpKSB8fCBjYWNoZS0+aXNVUkxJbk9ubGluZVdoaXRlbGlz
dChyZXF1ZXN0LnVybCgpKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFJlc291
cmNlcyB0aGF0IGFyZSBub3QgcHJlc2VudCBpbiB0aGUgbWFuaWZlc3Qgd2lsbCBhbHdheXMgZmFp
bCB0byBsb2FkIChhdCBsZWFzdCwgYWZ0ZXIgdGhlCi0gICAgLy8gY2FjaGUgaGFzIGJlZW4gcHJp
bWVkIHRoZSBmaXJzdCB0aW1lKSwgbWFraW5nIHRoZSB0ZXN0aW5nIG9mIG9mZmxpbmUgYXBwbGlj
YXRpb25zIHNpbXBsZXIuCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRG9jdW1lbnRMb2Fk
ZXI6OmdldEFwcGxpY2F0aW9uQ2FjaGVGYWxsYmFja1Jlc291cmNlKGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiYgcmVzb3VyY2UsIEFwcGxp
Y2F0aW9uQ2FjaGUqIGNhY2hlKQotewotICAgIGlmICghY2FjaGUpIHsKLSAgICAgICAgY2FjaGUg
PSBhcHBsaWNhdGlvbkNhY2hlKCk7Ci0gICAgICAgIGlmICghY2FjaGUpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmICghY2FjaGUtPmlzQ29tcGxldGUoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIC8vIElmIHRoZSByZXNvdXJjZSBpcyBub3QgYSBI
VFRQL0hUVFBTIEdFVCwgdGhlbiBhYm9ydAotICAgIGlmICghQXBwbGljYXRpb25DYWNoZTo6cmVx
dWVzdElzSFRUUE9ySFRUUFNHZXQocmVxdWVzdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIEtVUkwgZmFsbGJhY2tVUkw7Ci0gICAgaWYgKCFjYWNoZS0+dXJsTWF0Y2hlc0ZhbGxiYWNr
TmFtZXNwYWNlKHJlcXVlc3QudXJsKCksICZmYWxsYmFja1VSTCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHJlc291cmNlID0gY2FjaGUtPnJlc291cmNlRm9yVVJMKGZhbGxiYWNrVVJM
KTsKLSAgICBBU1NFUlQocmVzb3VyY2UpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wg
RG9jdW1lbnRMb2FkZXI6OnNjaGVkdWxlQXBwbGljYXRpb25DYWNoZUxvYWQoUmVzb3VyY2VMb2Fk
ZXIqIGxvYWRlciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBLVVJMJiBv
cmlnaW5hbFVSTCkKLXsKLSAgICBpZiAoIWZyYW1lTG9hZGVyKCktPmZyYW1lKCktPnNldHRpbmdz
KCkgfHwgIWZyYW1lTG9hZGVyKCktPmZyYW1lKCktPnNldHRpbmdzKCktPm9mZmxpbmVXZWJBcHBs
aWNhdGlvbkNhY2hlRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAg
aWYgKHJlcXVlc3QudXJsKCkgIT0gb3JpZ2luYWxVUkwpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2U7Ci0gICAgaWYgKCFzaG91
bGRMb2FkUmVzb3VyY2VGcm9tQXBwbGljYXRpb25DYWNoZShyZXF1ZXN0LCByZXNvdXJjZSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBtX3BlbmRpbmdTdWJzdGl0dXRlUmVzb3Vy
Y2VzLnNldChsb2FkZXIsIHJlc291cmNlKTsKLSAgICBkZWxpdmVyU3Vic3RpdHV0ZVJlc291cmNl
c0FmdGVyRGVsYXkoKTsKLSAgICAgICAgCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRG9j
dW1lbnRMb2FkZXI6OnNjaGVkdWxlTG9hZEZhbGxiYWNrUmVzb3VyY2VGcm9tQXBwbGljYXRpb25D
YWNoZShSZXNvdXJjZUxvYWRlciogbG9hZGVyLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QsIEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlKQotewotICAgIGlmICghZnJhbWVMb2FkZXIoKS0+
ZnJhbWUoKS0+c2V0dGluZ3MoKSB8fCAhZnJhbWVMb2FkZXIoKS0+ZnJhbWUoKS0+c2V0dGluZ3Mo
KS0+b2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2U7Ci0gICAgaWYg
KCFnZXRBcHBsaWNhdGlvbkNhY2hlRmFsbGJhY2tSZXNvdXJjZShyZXF1ZXN0LCByZXNvdXJjZSwg
Y2FjaGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX3BlbmRpbmdTdWJzdGl0dXRl
UmVzb3VyY2VzLnNldChsb2FkZXIsIHJlc291cmNlKTsKLSAgICBkZWxpdmVyU3Vic3RpdHV0ZVJl
c291cmNlc0FmdGVyRGVsYXkoKTsKLSAgICAgICAgCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLSNl
bmRpZiAvLyBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotCiB9CkluZGV4OiBXZWJD
b3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVy
L0RvY3VtZW50TG9hZGVyLmgJKHJldmlzaW9uIDQ2NTA2KQorKysgV2ViQ29yZS9sb2FkZXIvRG9j
dW1lbnRMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsOSArMzgsNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlOwotICAgIGNsYXNzIEFw
cGxpY2F0aW9uQ2FjaGVHcm91cDsKLSAgICBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U7
CisgICAgY2xhc3MgQXBwbGljYXRpb25DYWNoZUhvc3Q7CiAgICAgY2xhc3MgQXJjaGl2ZTsKICAg
ICBjbGFzcyBBcmNoaXZlUmVzb3VyY2U7CiAgICAgY2xhc3MgQXJjaGl2ZVJlc291cmNlQ29sbGVj
dGlvbjsKQEAgLTIwNywxOCArMjA1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2
b2lkIHRha2VNZW1vcnlDYWNoZUxvYWRzRm9yQ2xpZW50Tm90aWZpY2F0aW9uKFZlY3RvcjxTdHJp
bmc+JiBsb2Fkcyk7CiAKICNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotICAg
ICAgICBib29sIHNjaGVkdWxlQXBwbGljYXRpb25DYWNoZUxvYWQoUmVzb3VyY2VMb2FkZXIqLCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBLVVJMJiBvcmlnaW5hbFVSTCk7Ci0gICAgICAg
IGJvb2wgc2NoZWR1bGVMb2FkRmFsbGJhY2tSZXNvdXJjZUZyb21BcHBsaWNhdGlvbkNhY2hlKFJl
c291cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgQXBwbGljYXRpb25DYWNoZSog
PSAwKTsKLSAgICAgICAgYm9vbCBzaG91bGRMb2FkUmVzb3VyY2VGcm9tQXBwbGljYXRpb25DYWNo
ZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqJik7Ci0g
ICAgICAgIGJvb2wgZ2V0QXBwbGljYXRpb25DYWNoZUZhbGxiYWNrUmVzb3VyY2UoY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiwgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiYsIEFwcGxpY2F0aW9uQ2Fj
aGUqID0gMCk7Ci0gICAgICAgIAotICAgICAgICB2b2lkIHNldENhbmRpZGF0ZUFwcGxpY2F0aW9u
Q2FjaGVHcm91cChBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIGdyb3VwKTsKLSAgICAgICAgQXBwbGlj
YXRpb25DYWNoZUdyb3VwKiBjYW5kaWRhdGVBcHBsaWNhdGlvbkNhY2hlR3JvdXAoKSBjb25zdCB7
IHJldHVybiBtX2NhbmRpZGF0ZUFwcGxpY2F0aW9uQ2FjaGVHcm91cDsgfQotICAgICAgICAKLSAg
ICAgICAgdm9pZCBzZXRBcHBsaWNhdGlvbkNhY2hlKFBhc3NSZWZQdHI8QXBwbGljYXRpb25DYWNo
ZT4gYXBwbGljYXRpb25DYWNoZSk7Ci0gICAgICAgIEFwcGxpY2F0aW9uQ2FjaGUqIGFwcGxpY2F0
aW9uQ2FjaGUoKSBjb25zdCB7IHJldHVybiBtX2FwcGxpY2F0aW9uQ2FjaGUuZ2V0KCk7IH0KLQot
ICAgICAgICBBcHBsaWNhdGlvbkNhY2hlKiBtYWluUmVzb3VyY2VBcHBsaWNhdGlvbkNhY2hlKCkg
Y29uc3Q7CisgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVIb3N0KiBhcHBsaWNhdGlvbkNhY2hlSG9z
dCgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbGljYXRpb25DYWNoZUhvc3QuZ2V0KCk7IH0KICNlbmRp
ZgogCiAgICAgcHJvdGVjdGVkOgpAQCAtMzA2LDE2ICsyOTMsOSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIFN0cmluZyBtX2NsaWVudFJlZGlyZWN0U291cmNlRm9ySGlzdG9yeTsKICAg
ICAgICAgYm9vbCBtX2RpZENyZWF0ZUdsb2JhbEhpc3RvcnlFbnRyeTsKIAotI2lmIEVOQUJMRShP
RkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpICAKLSAgICAgICAgLy8gVGhlIGFwcGxpY2F0aW9uIGNh
Y2hlIHRoYXQgdGhlIGRvY3VtZW50IGxvYWRlciBpcyBhc3NvY2lhdGVkIHdpdGggKGlmIGFueSku
Ci0gICAgICAgIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBtX2FwcGxpY2F0aW9uQ2FjaGU7Ci0g
ICAgICAgIAotICAgICAgICAvLyBCZWZvcmUgYW4gYXBwbGljYXRpb24gY2FjaGUgaGFzIGZpbmlz
aGVkIGxvYWRpbmcsIHRoaXMgd2lsbCBiZSB0aGUgY2FuZGlkYXRlIGFwcGxpY2F0aW9uCi0gICAg
ICAgIC8vIGdyb3VwIHRoYXQgdGhlIGRvY3VtZW50IGxvYWRlciBpcyBhc3NvY2lhdGVkIHdpdGgu
Ci0gICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogbV9jYW5kaWRhdGVBcHBsaWNhdGlvbkNh
Y2hlR3JvdXA7Ci0gICAgICAgIAotICAgICAgICAvLyBPbmNlIHRoZSBtYWluIHJlc291cmNlIGhh
cyBmaW5pc2hlZCBsb2FkaW5nLCB0aGlzIGlzIHRoZSBhcHBsaWNhdGlvbiBjYWNoZSBpdCB3YXMg
bG9hZGVkIGZyb20gKGlmIGFueSkuCi0gICAgICAgIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBt
X21haW5SZXNvdXJjZUFwcGxpY2F0aW9uQ2FjaGU7CisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQ
UExJQ0FUSU9OUykKKyAgICAgICAgZnJpZW5kIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OyAg
Ly8gZm9yIHN1YnN0aXR1dGUgcmVzb3VyY2UgZGVsaXZlcnkKKyAgICAgICAgT3duUHRyPEFwcGxp
Y2F0aW9uQ2FjaGVIb3N0PiBtX2FwcGxpY2F0aW9uQ2FjaGVIb3N0OwogI2VuZGlmCiAgICAgfTsK
IApJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gNDY1MDYpCisrKyBXZWJDb3Jl
L2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDggKzk1LDcgQEAK
ICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKICNpZiBFTkFCTEUoT0ZGTElORV9XRUJf
QVBQTElDQVRJT05TKQotI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGUuaCIKLSNpbmNsdWRlICJB
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlSG9z
dC5oIgogI2VuZGlmCiAKICNpZiBFTkFCTEUoU1ZHKQpAQCAtMTgxNiw4ICsxODE1LDcgQEAgYm9v
bCBGcmFtZUxvYWRlcjo6Y2FuQ2FjaGVQYWdlQ29udGFpbmluZwogI2lmIEVOQUJMRShPRkZMSU5F
X1dFQl9BUFBMSUNBVElPTlMpCiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaW52ZXN0aWdh
dGluZyBjYWNoaW5nIGZyYW1lcyB0aGF0IGhhdmUgYW4gYXNzb2NpYXRlZAogICAgICAgICAvLyBh
cHBsaWNhdGlvbiBjYWNoZS4gPHJkYXI6Ly9wcm9ibGVtLzU5MTc4OTk+IHRyYWNrcyB0aGF0IHdv
cmsuCi0gICAgICAgICYmICFtX2RvY3VtZW50TG9hZGVyLT5hcHBsaWNhdGlvbkNhY2hlKCkKLSAg
ICAgICAgJiYgIW1fZG9jdW1lbnRMb2FkZXItPmNhbmRpZGF0ZUFwcGxpY2F0aW9uQ2FjaGVHcm91
cCgpCisgICAgICAgICYmIG1fZG9jdW1lbnRMb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCkt
PmNhbkNhY2hlSW5QYWdlQ2FjaGUoKQogI2VuZGlmCiAjaWYgRU5BQkxFKFdNTCkKICAgICAgICAg
JiYgIWZyYW1lQ29udGFpbnNXTUxDb250ZW50KG1fZnJhbWUpCkBAIC0xOTY3LDEwICsxOTY1LDgg
QEAgYm9vbCBGcmFtZUxvYWRlcjo6bG9nQ2FuQ2FjaGVGcmFtZURlY2lzaQogICAgICAgICBpZiAo
IW1fZnJhbWUtPmRvY3VtZW50KCktPmNhblN1c3BlbmRBY3RpdmVET01PYmplY3RzKCkpCiAgICAg
ICAgICAgICB7IFBDTE9HKCIgICAtVGhlIGRvY3VtZW50IGNhbm5vdCBzdXNwZWN0IGl0cyBhY3Rp
dmUgRE9NIE9iamVjdHMiKTsgY2Fubm90Q2FjaGUgPSB0cnVlOyB9CiAjaWYgRU5BQkxFKE9GRkxJ
TkVfV0VCX0FQUExJQ0FUSU9OUykKLSAgICAgICAgaWYgKG1fZG9jdW1lbnRMb2FkZXItPmFwcGxp
Y2F0aW9uQ2FjaGUoKSkKLSAgICAgICAgICAgIHsgUENMT0coIiAgIC1UaGUgRG9jdW1lbnRMb2Fk
ZXIgaGFzIGFuIGFjdGl2ZSBhcHBsaWNhdGlvbiBjYWNoZSIpOyBjYW5ub3RDYWNoZSA9IHRydWU7
IH0KLSAgICAgICAgaWYgKG1fZG9jdW1lbnRMb2FkZXItPmNhbmRpZGF0ZUFwcGxpY2F0aW9uQ2Fj
aGVHcm91cCgpKQotICAgICAgICAgICAgeyBQQ0xPRygiICAgLVRoZSBEb2N1bWVudExvYWRlciBo
YXMgYSBjYW5kaWRhdGVBcHBsaWNhdGlvbkNhY2hlR3JvdXAiKTsgY2Fubm90Q2FjaGUgPSB0cnVl
OyB9CisgICAgICAgIGlmICghbV9kb2N1bWVudExvYWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3Qo
KS0+Y2FuQ2FjaGVJblBhZ2VDYWNoZSgpKQorICAgICAgICAgICAgeyBQQ0xPRygiICAgLVRoZSBE
b2N1bWVudExvYWRlciB1c2VzIGFuIGFwcGxpY2F0aW9uIGNhY2hlIik7IGNhbm5vdENhY2hlID0g
dHJ1ZTsgfQogI2VuZGlmCiAgICAgICAgIGlmICghbV9jbGllbnQtPmNhbkNhY2hlUGFnZSgpKQog
ICAgICAgICAgICAgeyBQQ0xPRygiICAgLVRoZSBjbGllbnQgc2F5cyB0aGlzIGZyYW1lIGNhbm5v
dCBiZSBjYWNoZWQiKTsgY2Fubm90Q2FjaGUgPSB0cnVlOyB9CkBAIC0zNjgxLDMwICszNjc3LDEx
IEBAIHVuc2lnbmVkIGxvbmcgRnJhbWVMb2FkZXI6OmxvYWRSZXNvdXJjZVMKICAgICAgICAgQVNT
RVJUKCFuZXdSZXF1ZXN0LmlzTnVsbCgpKTsKICAgICAgICAgCiAjaWYgRU5BQkxFKE9GRkxJTkVf
V0VCX0FQUExJQ0FUSU9OUykKLSAgICAgICAgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNv
dXJjZTsKLSAgICAgICAgaWYgKGRvY3VtZW50TG9hZGVyKCktPnNob3VsZExvYWRSZXNvdXJjZUZy
b21BcHBsaWNhdGlvbkNhY2hlKG5ld1JlcXVlc3QsIHJlc291cmNlKSkgewotICAgICAgICAgICAg
aWYgKHJlc291cmNlKSB7Ci0gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSByZXNvdXJjZS0+cmVz
cG9uc2UoKTsKLSAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZChyZXNvdXJjZS0+ZGF0YSgpLT5k
YXRhKCksIHJlc291cmNlLT5kYXRhKCktPnNpemUoKSk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgICAgICBlcnJvciA9IGNhbm5vdFNob3dVUkxFcnJvcihuZXdSZXF1ZXN0KTsKLSAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCFkb2N1bWVudExvYWRlcigpLT5hcHBsaWNhdGlv
bkNhY2hlSG9zdCgpLT5tYXliZUxvYWRTeW5jaHJvbm91c2x5KG5ld1JlcXVlc3QsIGVycm9yLCBy
ZXNwb25zZSwgZGF0YSkpIHsKICNlbmRpZgogICAgICAgICAgICAgUmVzb3VyY2VIYW5kbGU6Omxv
YWRSZXNvdXJjZVN5bmNocm9ub3VzbHkobmV3UmVxdWVzdCwgc3RvcmVkQ3JlZGVudGlhbHMsIGVy
cm9yLCByZXNwb25zZSwgZGF0YSwgbV9mcmFtZSk7Ci0KICNpZiBFTkFCTEUoT0ZGTElORV9XRUJf
QVBQTElDQVRJT05TKQotICAgICAgICAgICAgLy8gSWYgbm9ybWFsIGxvYWRpbmcgcmVzdWx0cyBp
biBhIHJlZGlyZWN0IHRvIGEgcmVzb3VyY2Ugd2l0aCBhbm90aGVyIG9yaWdpbiAoaW5kaWNhdGl2
ZSBvZiBhIGNhcHRpdmUgcG9ydGFsKSwgb3IgYSA0eHggb3IgNXh4IHN0YXR1cyBjb2RlIG9yIGVx
dWl2YWxlbnQsCi0gICAgICAgICAgICAvLyBvciBpZiB0aGVyZSB3ZXJlIG5ldHdvcmsgZXJyb3Jz
IChidXQgbm90IGlmIHRoZSB1c2VyIGNhbmNlbGVkIHRoZSBkb3dubG9hZCksIHRoZW4gaW5zdGVh
ZCBnZXQsIGZyb20gdGhlIGNhY2hlLCB0aGUgcmVzb3VyY2Ugb2YgdGhlIGZhbGxiYWNrIGVudHJ5
Ci0gICAgICAgICAgICAvLyBjb3JyZXNwb25kaW5nIHRvIHRoZSBtYXRjaGVkIG5hbWVzcGFjZS4K
LSAgICAgICAgICAgIGlmICgoIWVycm9yLmlzTnVsbCgpICYmICFlcnJvci5pc0NhbmNlbGxhdGlv
bigpKQotICAgICAgICAgICAgICAgICB8fCByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpIC8gMTAw
ID09IDQgfHwgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSAvIDEwMCA9PSA1Ci0gICAgICAgICAg
ICAgICAgIHx8ICFwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwobmV3UmVxdWVzdC51cmwoKSwg
cmVzcG9uc2UudXJsKCkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50TG9hZGVyKCkt
PmdldEFwcGxpY2F0aW9uQ2FjaGVGYWxsYmFja1Jlc291cmNlKG5ld1JlcXVlc3QsIHJlc291cmNl
KSkgewotICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IHJlc291cmNlLT5yZXNwb25zZSgp
OwotICAgICAgICAgICAgICAgICAgICBkYXRhLmNsZWFyKCk7Ci0gICAgICAgICAgICAgICAgICAg
IGRhdGEuYXBwZW5kKHJlc291cmNlLT5kYXRhKCktPmRhdGEoKSwgcmVzb3VyY2UtPmRhdGEoKS0+
c2l6ZSgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBk
b2N1bWVudExvYWRlcigpLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5tYXliZUxvYWRGYWxsYmFj
a1N5bmNocm9ub3VzbHkobmV3UmVxdWVzdCwgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKICAgICAg
ICAgfQogI2VuZGlmCiAgICAgfQpJbmRleDogV2ViQ29yZS9sb2FkZXIvTWFpblJlc291cmNlTG9h
ZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIu
Y3BwCShyZXZpc2lvbiA0NjUwNikKKysrIFdlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDkgKzQyLDcgQEAKICNpbmNsdWRlICJTZXR0aW5n
cy5oIgogCiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLSNpbmNsdWRlICJB
cHBsaWNhdGlvbkNhY2hlLmgiCi0jaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUdyb3VwLmgiCi0j
aW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmgiCisjaW5jbHVkZSAiQXBwbGljYXRp
b25DYWNoZUhvc3QuaCIKICNlbmRpZgogCiAvLyBGSVhNRTogTW9yZSB0aGF0IGlzIGluIGNvbW1v
biB3aXRoIFN1YnJlc291cmNlTG9hZGVyIHNob3VsZCBtb3ZlIHVwIGludG8gUmVzb3VyY2VMb2Fk
ZXIuCkBAIC0yODMsMTUgKzI4MSw4IEBAIHZvaWQgTWFpblJlc291cmNlTG9hZGVyOjpjb250aW51
ZUFmdGVyQ28KIHZvaWQgTWFpblJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UoY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYgcikKIHsKICNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElD
QVRJT05TKQotICAgIGlmIChyLmh0dHBTdGF0dXNDb2RlKCkgLyAxMDAgPT0gNCB8fCByLmh0dHBT
dGF0dXNDb2RlKCkgLyAxMDAgPT0gNSkgewotICAgICAgICBBU1NFUlQoIW1fYXBwbGljYXRpb25D
YWNoZSk7Ci0gICAgICAgIGlmIChtX2ZyYW1lLT5zZXR0aW5ncygpICYmIG1fZnJhbWUtPnNldHRp
bmdzKCktPm9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCgpKSB7Ci0gICAgICAgICAg
ICBtX2FwcGxpY2F0aW9uQ2FjaGUgPSBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmZhbGxiYWNrQ2Fj
aGVGb3JNYWluUmVxdWVzdChyZXF1ZXN0KCksIGRvY3VtZW50TG9hZGVyKCkpOwotCi0gICAgICAg
ICAgICBpZiAoc2NoZWR1bGVMb2FkRmFsbGJhY2tSZXNvdXJjZUZyb21BcHBsaWNhdGlvbkNhY2hl
KG1fYXBwbGljYXRpb25DYWNoZS5nZXQoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgfQorICAgIGlmIChkb2N1bWVudExvYWRlcigpLT5hcHBsaWNhdGlvbkNhY2hl
SG9zdCgpLT5tYXliZUxvYWRGYWxsYmFja0Zvck1haW5SZXNwb25zZShyZXF1ZXN0KCksIHIpKQor
ICAgICAgICByZXR1cm47CiAjZW5kaWYKIAogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gci5odHRwSGVhZGVyRmllbGRzKCkuZmluZChBdG9taWNTdHJpbmcoIngtZnJhbWUt
b3B0aW9ucyIpKTsKQEAgLTM1Myw2ICszNDQsMTAgQEAgdm9pZCBNYWluUmVzb3VyY2VMb2FkZXI6
OmRpZFJlY2VpdmVEYXRhKAogICAgIEFTU0VSVCghZGVmZXJzTG9hZGluZygpKTsKICNlbmRpZgog
IAorICNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorICAgIGRvY3VtZW50TG9h
ZGVyKCktPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPm1haW5SZXNvdXJjZURhdGFSZWNlaXZlZChk
YXRhLCBsZW5ndGgsIGxlbmd0aFJlY2VpdmVkLCBhbGxBdE9uY2UpOworI2VuZGlmCisKICAgICAv
LyBUaGUgYWRkaXRpb25hbCBwcm9jZXNzaW5nIGNhbiBkbyBhbnl0aGluZyBpbmNsdWRpbmcgcG9z
c2libHkgcmVtb3ZpbmcgdGhlIGxhc3QKICAgICAvLyByZWZlcmVuY2UgdG8gdGhpcyBvYmplY3Q7
IG9uZSBleGFtcGxlIG9mIHRoaXMgaXMgMzI2NjIxNi4KICAgICBSZWZQdHI8TWFpblJlc291cmNl
TG9hZGVyPiBwcm90ZWN0KHRoaXMpOwpAQCAtMzgwLDI3ICszNzUsMTUgQEAgdm9pZCBNYWluUmVz
b3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbgogICAgIFJlc291cmNlTG9hZGVyOjpkaWRGaW5p
c2hMb2FkaW5nKCk7CiAgICAgCiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykK
LSAgICBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIGdyb3VwID0gZGwtPmNhbmRpZGF0ZUFwcGxpY2F0
aW9uQ2FjaGVHcm91cCgpOwotICAgIGlmICghZ3JvdXAgJiYgZGwtPmFwcGxpY2F0aW9uQ2FjaGUo
KSAmJiAhZGwtPm1haW5SZXNvdXJjZUFwcGxpY2F0aW9uQ2FjaGUoKSkKLSAgICAgICAgZ3JvdXAg
PSBkbC0+YXBwbGljYXRpb25DYWNoZSgpLT5ncm91cCgpOwotICAgIAotICAgIGlmIChncm91cCkK
LSAgICAgICAgZ3JvdXAtPmZpbmlzaGVkTG9hZGluZ01haW5SZXNvdXJjZShkbC5nZXQoKSk7Cisg
ICAgZGwtPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPmZpbmlzaGVkTG9hZGluZ01haW5SZXNvdXJj
ZSgpOwogI2VuZGlmCiB9CiAKIHZvaWQgTWFpblJlc291cmNlTG9hZGVyOjpkaWRGYWlsKGNvbnN0
IFJlc291cmNlRXJyb3ImIGVycm9yKQogewogI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNB
VElPTlMpCi0gICAgaWYgKCFlcnJvci5pc0NhbmNlbGxhdGlvbigpKSB7Ci0gICAgICAgIEFTU0VS
VCghbV9hcHBsaWNhdGlvbkNhY2hlKTsKLSAgICAgICAgaWYgKG1fZnJhbWUtPnNldHRpbmdzKCkg
JiYgbV9mcmFtZS0+c2V0dGluZ3MoKS0+b2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVk
KCkpIHsKLSAgICAgICAgICAgIG1fYXBwbGljYXRpb25DYWNoZSA9IEFwcGxpY2F0aW9uQ2FjaGVH
cm91cDo6ZmFsbGJhY2tDYWNoZUZvck1haW5SZXF1ZXN0KHJlcXVlc3QoKSwgZG9jdW1lbnRMb2Fk
ZXIoKSk7Ci0KLSAgICAgICAgICAgIGlmIChzY2hlZHVsZUxvYWRGYWxsYmFja1Jlc291cmNlRnJv
bUFwcGxpY2F0aW9uQ2FjaGUobV9hcHBsaWNhdGlvbkNhY2hlLmdldCgpKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYgKGRvY3VtZW50TG9hZGVyKCkt
PmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPm1heWJlTG9hZEZhbGxiYWNrRm9yTWFpbkVycm9yKHJl
cXVlc3QoKSwgZXJyb3IpKQorICAgICAgICByZXR1cm47CiAjZW5kaWYKIAogICAgIC8vIFRoZXJl
IGlzIGEgYnVnIGluIENGTmV0d29yayB3aGVyZSBjYWxsYmFja3MgY2FuIGJlIGRpc3BhdGNoZWQg
ZXZlbiB3aGVuIGxvYWRzIGFyZSBkZWZlcnJlZC4KQEAgLTQ5NSwyNyArNDc4LDE1IEBAIGJvb2wg
TWFpblJlc291cmNlTG9hZGVyOjpsb2FkKGNvbnN0IFJlc28KIAogICAgIG1fc3Vic3RpdHV0ZURh
dGEgPSBzdWJzdGl0dXRlRGF0YTsKIAorICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KHIpOwor
CiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLSAgICAvLyBDaGVjayBpZiB0
aGlzIHJlcXVlc3Qgc2hvdWxkIGJlIGxvYWRlZCBmcm9tIHRoZSBhcHBsaWNhdGlvbiBjYWNoZQot
ICAgIGlmICghbV9zdWJzdGl0dXRlRGF0YS5pc1ZhbGlkKCkgJiYgZnJhbWVMb2FkZXIoKS0+ZnJh
bWUoKS0+c2V0dGluZ3MoKSAmJiBmcmFtZUxvYWRlcigpLT5mcmFtZSgpLT5zZXR0aW5ncygpLT5v
ZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQoKSkgewotICAgICAgICBBU1NFUlQoIW1f
YXBwbGljYXRpb25DYWNoZSk7Ci0KLSAgICAgICAgbV9hcHBsaWNhdGlvbkNhY2hlID0gQXBwbGlj
YXRpb25DYWNoZUdyb3VwOjpjYWNoZUZvck1haW5SZXF1ZXN0KHIsIG1fZG9jdW1lbnRMb2FkZXIu
Z2V0KCkpOwotCi0gICAgICAgIGlmIChtX2FwcGxpY2F0aW9uQ2FjaGUpIHsKLSAgICAgICAgICAg
IC8vIEdldCB0aGUgcmVzb3VyY2UgZnJvbSB0aGUgYXBwbGljYXRpb24gY2FjaGUuIEJ5IGRlZmlu
aXRpb24sIGNhY2hlRm9yTWFpblJlcXVlc3QoKSByZXR1cm5zIGEgY2FjaGUgdGhhdCBjb250YWlu
cyB0aGUgcmVzb3VyY2UuCi0gICAgICAgICAgICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJl
c291cmNlID0gbV9hcHBsaWNhdGlvbkNhY2hlLT5yZXNvdXJjZUZvclJlcXVlc3Qocik7Ci0gICAg
ICAgICAgICBtX3N1YnN0aXR1dGVEYXRhID0gU3Vic3RpdHV0ZURhdGEocmVzb3VyY2UtPmRhdGEo
KSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3Vy
Y2UtPnJlc3BvbnNlKCkubWltZVR5cGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXNvdXJjZS0+cmVzcG9uc2UoKS50ZXh0RW5jb2RpbmdOYW1lKCks
IEtVUkwoKSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgZG9jdW1lbnRMb2FkZXIoKS0+YXBwbGlj
YXRpb25DYWNoZUhvc3QoKS0+bWF5YmVMb2FkTWFpblJlc291cmNlKHJlcXVlc3QsIG1fc3Vic3Rp
dHV0ZURhdGEpOwogI2VuZGlmCiAKLSAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChyKTsKICAg
ICBib29sIGRlZmVyID0gZGVmZXJzTG9hZGluZygpOwogICAgIGlmIChkZWZlcikgewotICAgICAg
ICBib29sIHNob3VsZExvYWRFbXB0eSA9IHNob3VsZExvYWRBc0VtcHR5RG9jdW1lbnQoci51cmwo
KSk7CisgICAgICAgIGJvb2wgc2hvdWxkTG9hZEVtcHR5ID0gc2hvdWxkTG9hZEFzRW1wdHlEb2N1
bWVudChyZXF1ZXN0LnVybCgpKTsKICAgICAgICAgaWYgKHNob3VsZExvYWRFbXB0eSkKICAgICAg
ICAgICAgIGRlZmVyID0gZmFsc2U7CiAgICAgfQpJbmRleDogV2ViQ29yZS9sb2FkZXIvTWFpblJl
c291cmNlTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvTWFpblJlc291cmNl
TG9hZGVyLmgJKHJldmlzaW9uIDQ2NTA2KQorKysgV2ViQ29yZS9sb2FkZXIvTWFpblJlc291cmNl
TG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDkgKzM5LDYgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi0jaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLSAgICBjbGFz
cyBBcHBsaWNhdGlvbkNhY2hlOwotI2VuZGlmCiAgICAgY2xhc3MgRm9ybVN0YXRlOwogICAgIHN0
cnVjdCBSZXNvdXJjZVJlcXVlc3Q7CiAKQEAgLTcxLDEwICs2OCw2IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgICAgICBib29sIGlzTG9hZGluZ011bHRpcGFydENvbnRlbnQoKSBjb25zdCB7
IHJldHVybiBtX2xvYWRpbmdNdWx0aXBhcnRDb250ZW50OyB9CiAKLSNpZiBFTkFCTEUoT0ZGTElO
RV9XRUJfQVBQTElDQVRJT05TKQotICAgICAgICBBcHBsaWNhdGlvbkNhY2hlKiBhcHBsaWNhdGlv
bkNhY2hlKCkgY29uc3QgeyByZXR1cm4gbV9hcHBsaWNhdGlvbkNhY2hlLmdldCgpOyB9Ci0jZW5k
aWYKLQogICAgIHByaXZhdGU6CiAgICAgICAgIE1haW5SZXNvdXJjZUxvYWRlcihGcmFtZSopOwog
CkBAIC0xMDUsMTEgKzk4LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIE1haW5S
ZXNvdXJjZUxvYWRlclRpbWVyIG1fZGF0YUxvYWRUaW1lcjsKIAotI2lmIEVOQUJMRShPRkZMSU5F
X1dFQl9BUFBMSUNBVElPTlMpCi0gICAgICAgIC8vIFRoZSBhcHBsaWNhdGlvbiBjYWNoZSB0aGF0
IHRoZSBtYWluIHJlc291cmNlIHdhcyBsb2FkZWQgZnJvbSAoaWYgYW55KS4KLSAgICAgICAgUmVm
UHRyPEFwcGxpY2F0aW9uQ2FjaGU+IG1fYXBwbGljYXRpb25DYWNoZTsKLSNlbmRpZgotCiAgICAg
ICAgIGJvb2wgbV9sb2FkaW5nTXVsdGlwYXJ0Q29udGVudDsKICAgICAgICAgYm9vbCBtX3dhaXRp
bmdGb3JDb250ZW50UG9saWN5OwogICAgIH07CkluZGV4OiBXZWJDb3JlL2xvYWRlci9SZXNvdXJj
ZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIu
Y3BwCShyZXZpc2lvbiA0NjUwNikKKysrIFdlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlJlc291cmNlTG9hZGVyLmgiCiAKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQ
TElDQVRJT05TKQorI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVIb3N0LmgiCisjZW5kaWYKICNp
bmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAi
RnJhbWVMb2FkZXIuaCIKQEAgLTExOSw3ICsxMjIsNyBAQCBib29sIFJlc291cmNlTG9hZGVyOjps
b2FkKGNvbnN0IFJlc291cmNlCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAogI2lmIEVOQUJM
RShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCi0gICAgaWYgKG1fZG9jdW1lbnRMb2FkZXItPnNj
aGVkdWxlQXBwbGljYXRpb25DYWNoZUxvYWQodGhpcywgY2xpZW50UmVxdWVzdCwgci51cmwoKSkp
CisgICAgaWYgKG1fZG9jdW1lbnRMb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPm1heWJl
TG9hZFJlc291cmNlKHRoaXMsIGNsaWVudFJlcXVlc3QsIHIudXJsKCkpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKICNlbmRpZgogCkBAIC0xOTAsMTcgKzE5Myw2IEBAIHZvaWQgUmVzb3VyY2VMb2Fk
ZXI6OmNsZWFyUmVzb3VyY2VEYXRhKCkKICAgICAgICAgbV9yZXNvdXJjZURhdGEtPmNsZWFyKCk7
CiB9CiAKLSNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotYm9vbCBSZXNvdXJj
ZUxvYWRlcjo6c2NoZWR1bGVMb2FkRmFsbGJhY2tSZXNvdXJjZUZyb21BcHBsaWNhdGlvbkNhY2hl
KEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlKQotewotICAgIGlmIChkb2N1bWVudExvYWRlcigpLT5z
Y2hlZHVsZUxvYWRGYWxsYmFja1Jlc291cmNlRnJvbUFwcGxpY2F0aW9uQ2FjaGUodGhpcywgbV9y
ZXF1ZXN0LCBjYWNoZSkpIHsKLSAgICAgICAgaGFuZGxlKCktPmNhbmNlbCgpOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotI2VuZGlmCi0KIHZvaWQg
UmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCiB7CiAgICAgLy8gUHJv
dGVjdCB0aGlzIGluIHRoaXMgZGVsZWdhdGUgbWV0aG9kIHNpbmNlIHRoZSBhZGRpdGlvbmFsIHBy
b2Nlc3NpbmcgY2FuIGRvCkBAIC0zODIsMTAgKzM3NCw4IEBAIFJlc291cmNlRXJyb3IgUmVzb3Vy
Y2VMb2FkZXI6OmNhbm5vdFNob3cKIHZvaWQgUmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVxdWVz
dChSZXNvdXJjZUhhbmRsZSosIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKIHsKICNpZiBFTkFCTEUoT0ZGTElORV9XRUJf
QVBQTElDQVRJT05TKQotICAgIGlmICghcmVkaXJlY3RSZXNwb25zZS5pc051bGwoKSAmJiAhcHJv
dG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFsKHJlcXVlc3QudXJsKCksIHJlZGlyZWN0UmVzcG9uc2Uu
dXJsKCkpKSB7Ci0gICAgICAgIGlmIChzY2hlZHVsZUxvYWRGYWxsYmFja1Jlc291cmNlRnJvbUFw
cGxpY2F0aW9uQ2FjaGUoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGRv
Y3VtZW50TG9hZGVyKCktPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPm1heWJlTG9hZEZhbGxiYWNr
Rm9yUmVkaXJlY3QodGhpcywgcmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSkpCisgICAgICAgIHJl
dHVybjsKICNlbmRpZgogICAgIHdpbGxTZW5kUmVxdWVzdChyZXF1ZXN0LCByZWRpcmVjdFJlc3Bv
bnNlKTsKIH0KQEAgLTM5OCwxMCArMzg4LDggQEAgdm9pZCBSZXNvdXJjZUxvYWRlcjo6ZGlkU2Vu
ZERhdGEoUmVzb3VyYwogdm9pZCBSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFJl
c291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7CiAjaWYg
RU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLSAgICBpZiAocmVzcG9uc2UuaHR0cFN0
YXR1c0NvZGUoKSAvIDEwMCA9PSA0IHx8IHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgLyAxMDAg
PT0gNSkgewotICAgICAgICBpZiAoc2NoZWR1bGVMb2FkRmFsbGJhY2tSZXNvdXJjZUZyb21BcHBs
aWNhdGlvbkNhY2hlKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChkb2N1
bWVudExvYWRlcigpLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5tYXliZUxvYWRGYWxsYmFja0Zv
clJlc3BvbnNlKHRoaXMsIHJlc3BvbnNlKSkKKyAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAgICAg
ZGlkUmVjZWl2ZVJlc3BvbnNlKHJlc3BvbnNlKTsKIH0KQEAgLTQxOSwxMCArNDA3LDggQEAgdm9p
ZCBSZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyhSZQogdm9pZCBSZXNvdXJjZUxvYWRl
cjo6ZGlkRmFpbChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQog
ewogI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCi0gICAgaWYgKCFlcnJvci5p
c0NhbmNlbGxhdGlvbigpKSB7Ci0gICAgICAgIGlmIChkb2N1bWVudExvYWRlcigpLT5zY2hlZHVs
ZUxvYWRGYWxsYmFja1Jlc291cmNlRnJvbUFwcGxpY2F0aW9uQ2FjaGUodGhpcywgbV9yZXF1ZXN0
KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGRvY3VtZW50TG9hZGVyKCkt
PmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPm1heWJlTG9hZEZhbGxiYWNrRm9yRXJyb3IodGhpcywg
ZXJyb3IpKQorICAgICAgICByZXR1cm47CiAjZW5kaWYKICAgICBkaWRGYWlsKGVycm9yKTsKIH0K
SW5kZXg6IFdlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuaAkocmV2aXNpb24gNDY1MDYpCisrKyBXZWJDb3Jl
L2xvYWRlci9SZXNvdXJjZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGU7Cisg
ICAgY2xhc3MgQXBwbGljYXRpb25DYWNoZUhvc3Q7CiAgICAgY2xhc3MgRG9jdW1lbnRMb2FkZXI7
CiAgICAgY2xhc3MgRnJhbWU7CiAgICAgY2xhc3MgRnJhbWVMb2FkZXI7CkBAIC0xMTksNyArMTE5
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBSZXNvdXJjZUxvYWRlcihGcmFtZSos
IGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcywgYm9vbCBzaG91bGRDb250ZW50U25pZmYp
OwogCiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLSAgICAgICAgYm9vbCBz
Y2hlZHVsZUxvYWRGYWxsYmFja1Jlc291cmNlRnJvbUFwcGxpY2F0aW9uQ2FjaGUoQXBwbGljYXRp
b25DYWNoZSogPSAwKTsKKyAgICAgICAgZnJpZW5kIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGVIb3N0
OyAgLy8gZm9yIGFjY2VzcyB0byByZXF1ZXN0KCkKICNlbmRpZgogCiAgICAgICAgIHZpcnR1YWwg
dm9pZCBkaWRDYW5jZWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOwpAQCAtMTMzLDEzICsxMzMsMTMg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IG1f
aGFuZGxlOwogICAgICAgICBSZWZQdHI8RnJhbWU+IG1fZnJhbWU7CiAgICAgICAgIFJlZlB0cjxE
b2N1bWVudExvYWRlcj4gbV9kb2N1bWVudExvYWRlcjsKLSAgICAgICAgUmVzb3VyY2VSZXNwb25z
ZSBtX3Jlc3BvbnNlOyAgICAgICAgCisgICAgICAgIFJlc291cmNlUmVzcG9uc2UgbV9yZXNwb25z
ZTsKICAgICAgICAgCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IG1fcmVx
dWVzdDsKICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9yZXNvdXJjZURhdGE7CiAgICAg
ICAgIAotICAgICAgICB1bnNpZ25lZCBsb25nIG1faWRlbnRpZmllcjsgICAgICAgIAorICAgICAg
ICB1bnNpZ25lZCBsb25nIG1faWRlbnRpZmllcjsKIAogICAgICAgICBib29sIG1fcmVhY2hlZFRl
cm1pbmFsU3RhdGU7CiAgICAgICAgIGJvb2wgbV9jYW5jZWxsZWQ7CkluZGV4OiBXZWJDb3JlL2xv
YWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAJKHJldmlzaW9u
IDQ2NTA2KQorKysgV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3Vw
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShPRkZMSU5F
X1dFQl9BUFBMSUNBVElPTlMpCiAKICNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlLmgiCisjaW5j
bHVkZSAiQXBwbGljYXRpb25DYWNoZUhvc3QuaCIKICNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hl
UmVzb3VyY2UuaCIKICNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oIgogI2luY2x1
ZGUgIkNocm9tZUNsaWVudC5oIgpAQCAtMTI2LDcgKzEyNyw3IEBAIHZvaWQgQXBwbGljYXRpb25D
YWNoZUdyb3VwOjpzZWxlY3RDYWNoZSgKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIERvY3Vt
ZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2Fk
ZXIoKTsKLSAgICBBU1NFUlQoIWRvY3VtZW50TG9hZGVyLT5hcHBsaWNhdGlvbkNhY2hlKCkpOwor
ICAgIEFTU0VSVCghZG9jdW1lbnRMb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPmFwcGxp
Y2F0aW9uQ2FjaGUoKSk7CiAKICAgICBpZiAocGFzc2VkTWFuaWZlc3RVUkwuaXNOdWxsKCkpIHsK
ICAgICAgICAgc2VsZWN0Q2FjaGVXaXRob3V0TWFuaWZlc3RVUkwoZnJhbWUpOyAgICAgICAgCkBA
IC0xMzcsNyArMTM4LDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OnNlbGVjdENhY2hl
KAogICAgIGlmIChtYW5pZmVzdFVSTC5oYXNSZWYoKSkKICAgICAgICAgbWFuaWZlc3RVUkwucmVt
b3ZlUmVmKCk7CiAKLSAgICBBcHBsaWNhdGlvbkNhY2hlKiBtYWluUmVzb3VyY2VDYWNoZSA9IGRv
Y3VtZW50TG9hZGVyLT5tYWluUmVzb3VyY2VBcHBsaWNhdGlvbkNhY2hlKCk7CisgICAgQXBwbGlj
YXRpb25DYWNoZSogbWFpblJlc291cmNlQ2FjaGUgPSBkb2N1bWVudExvYWRlci0+YXBwbGljYXRp
b25DYWNoZUhvc3QoKS0+bWFpblJlc291cmNlQXBwbGljYXRpb25DYWNoZSgpOwogICAgIAogICAg
IGlmIChtYWluUmVzb3VyY2VDYWNoZSkgewogICAgICAgICBpZiAobWFuaWZlc3RVUkwgPT0gbWFp
blJlc291cmNlQ2FjaGUtPmdyb3VwKCktPm1fbWFuaWZlc3RVUkwpIHsKQEAgLTE3NSwxNCArMTc2
LDE0IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpzZWxlY3RDYWNoZSgKIAogICAgIC8v
IERvbid0IGNoYW5nZSBhbnl0aGluZyBvbiBkaXNrIGlmIHByaXZhdGUgYnJvd3NpbmcgaXMgZW5h
YmxlZC4KICAgICBpZiAoIWZyYW1lLT5zZXR0aW5ncygpIHx8IGZyYW1lLT5zZXR0aW5ncygpLT5w
cml2YXRlQnJvd3NpbmdFbmFibGVkKCkpIHsKLSAgICAgICAgcG9zdExpc3RlbmVyVGFzaygmRE9N
QXBwbGljYXRpb25DYWNoZTo6Y2FsbENoZWNraW5nTGlzdGVuZXIsIGRvY3VtZW50TG9hZGVyKTsK
LSAgICAgICAgcG9zdExpc3RlbmVyVGFzaygmRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbEVycm9y
TGlzdGVuZXIsIGRvY3VtZW50TG9hZGVyKTsKKyAgICAgICAgcG9zdExpc3RlbmVyVGFzayhET01B
cHBsaWNhdGlvbkNhY2hlOjpDSEVDS0lOR19FVkVOVCwgZG9jdW1lbnRMb2FkZXIpOworICAgICAg
ICBwb3N0TGlzdGVuZXJUYXNrKERPTUFwcGxpY2F0aW9uQ2FjaGU6OkVSUk9SX0VWRU5ULCBkb2N1
bWVudExvYWRlcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBBcHBsaWNhdGlvbkNh
Y2hlR3JvdXAqIGdyb3VwID0gY2FjaGVTdG9yYWdlKCkuZmluZE9yQ3JlYXRlQ2FjaGVHcm91cCht
YW5pZmVzdFVSTCk7CiAKLSAgICBkb2N1bWVudExvYWRlci0+c2V0Q2FuZGlkYXRlQXBwbGljYXRp
b25DYWNoZUdyb3VwKGdyb3VwKTsKKyAgICBkb2N1bWVudExvYWRlci0+YXBwbGljYXRpb25DYWNo
ZUhvc3QoKS0+c2V0Q2FuZGlkYXRlQXBwbGljYXRpb25DYWNoZUdyb3VwKGdyb3VwKTsKICAgICBn
cm91cC0+bV9wZW5kaW5nTWFzdGVyUmVzb3VyY2VMb2FkZXJzLmFkZChkb2N1bWVudExvYWRlcik7
CiAgICAgZ3JvdXAtPm1fZG93bmxvYWRpbmdQZW5kaW5nTWFzdGVyUmVzb3VyY2VMb2FkZXJzQ291
bnQrKzsKIApAQCAtMTk2LDkgKzE5Nyw5IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpz
ZWxlY3RDYWNoZVcKICAgICAgICAgcmV0dXJuOwogCiAgICAgRG9jdW1lbnRMb2FkZXIqIGRvY3Vt
ZW50TG9hZGVyID0gZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpOwotICAgIEFTU0VS
VCghZG9jdW1lbnRMb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGUoKSk7CisgICAgQVNTRVJUKCFkb2N1
bWVudExvYWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+YXBwbGljYXRpb25DYWNoZSgpKTsK
IAotICAgIEFwcGxpY2F0aW9uQ2FjaGUqIG1haW5SZXNvdXJjZUNhY2hlID0gZG9jdW1lbnRMb2Fk
ZXItPm1haW5SZXNvdXJjZUFwcGxpY2F0aW9uQ2FjaGUoKTsKKyAgICBBcHBsaWNhdGlvbkNhY2hl
KiBtYWluUmVzb3VyY2VDYWNoZSA9IGRvY3VtZW50TG9hZGVyLT5hcHBsaWNhdGlvbkNhY2hlSG9z
dCgpLT5tYWluUmVzb3VyY2VBcHBsaWNhdGlvbkNhY2hlKCk7CiAKICAgICBpZiAobWFpblJlc291
cmNlQ2FjaGUpIHsKICAgICAgICAgbWFpblJlc291cmNlQ2FjaGUtPmdyb3VwKCktPmFzc29jaWF0
ZURvY3VtZW50TG9hZGVyV2l0aENhY2hlKGRvY3VtZW50TG9hZGVyLCBtYWluUmVzb3VyY2VDYWNo
ZSk7CkBAIC0yMzUsOSArMjM2LDkgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmZpbmlz
aGVkTG9hZAogICAgICAgICAvLyBDYWNoZSB1cGRhdGUgaGFzIGJlZW4gYSBmYWlsdXJlLCBzbyB0
aGVyZSBpcyBubyByZWFzb24gdG8ga2VlcCB0aGUgZG9jdW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRo
ZSBpbmNvbXBsZXRlIGNhY2hlCiAgICAgICAgIC8vIChpdHMgbWFpbiByZXNvdXJjZSB3YXMgbm90
IGNhY2hlZCB5ZXQsIHNvIGl0IGlzIGxpa2VseSB0aGF0IHRoZSBhcHBsaWNhdGlvbiBjaGFuZ2Vk
IHNpZ25pZmljYW50bHkgc2VydmVyLXNpZGUpLgogICAgICAgICBBU1NFUlQoIW1fY2FjaGVCZWlu
Z1VwZGF0ZWQpOyAvLyBBbHJlYWR5IGNsZWFyZWQgb3V0IGJ5IHN0b3BMb2FkaW5nKCkuCi0gICAg
ICAgIGxvYWRlci0+c2V0QXBwbGljYXRpb25DYWNoZSgwKTsgLy8gV2lsbCB1bnNldCBjYW5kaWRh
dGUsIHRvby4KKyAgICAgICAgbG9hZGVyLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5zZXRBcHBs
aWNhdGlvbkNhY2hlKDApOyAvLyBXaWxsIHVuc2V0IGNhbmRpZGF0ZSwgdG9vLgogICAgICAgICBt
X2Fzc29jaWF0ZWREb2N1bWVudExvYWRlcnMucmVtb3ZlKGxvYWRlcik7Ci0gICAgICAgIHBvc3RM
aXN0ZW5lclRhc2soJkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxFcnJvckxpc3RlbmVyLCBsb2Fk
ZXIpOworICAgICAgICBwb3N0TGlzdGVuZXJUYXNrKERPTUFwcGxpY2F0aW9uQ2FjaGU6OkVSUk9S
X0VWRU5ULCBsb2FkZXIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbXBsZXRlZDoKICAg
ICAgICAgQVNTRVJUKG1fYXNzb2NpYXRlZERvY3VtZW50TG9hZGVycy5jb250YWlucyhsb2FkZXIp
KTsKQEAgLTI3MSwyOCArMjcyLDI4IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpmYWls
ZWRMb2FkaW4KIAogICAgICAgICAvLyBUaGUgbWFuaWZlc3QgZGlkbid0IGNoYW5nZSwgYW5kIHdl
IGhhdmUgYSByZWxldmFudCBjYWNoZSAtIGJ1dCB0aGUgbWFpbiByZXNvdXJjZSBkb3dubG9hZCBm
YWlsZWQgbWlkLXdheSwgc28gaXQgY2Fubm90IGJlIHN0b3JlZCB0byB0aGUgY2FjaGUsCiAgICAg
ICAgIC8vIGFuZCB0aGUgbG9hZGVyIGRvZXMgbm90IGdldCBhc3NvY2lhdGVkIHRvIGl0LiBJZiB0
aGVyZSBhcmUgb3RoZXIgbWFpbiByZXNvdXJjZXMgYmVpbmcgZG93bmxvYWRlZCBmb3IgdGhpcyBj
YWNoZSBncm91cCwgdGhleSBtYXkgc3RpbGwgc3VjY2VlZC4KLSAgICAgICAgcG9zdExpc3RlbmVy
VGFzaygmRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbEVycm9yTGlzdGVuZXIsIGxvYWRlcik7Cisg
ICAgICAgIHBvc3RMaXN0ZW5lclRhc2soRE9NQXBwbGljYXRpb25DYWNoZTo6RVJST1JfRVZFTlQs
IGxvYWRlcik7CiAKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGYWlsdXJlOgogICAgICAgICAv
LyBDYWNoZSB1cGRhdGUgZmFpbGVkLCB0b28uCiAgICAgICAgIEFTU0VSVCghbV9jYWNoZUJlaW5n
VXBkYXRlZCk7IC8vIEFscmVhZHkgY2xlYXJlZCBvdXQgYnkgc3RvcExvYWRpbmcoKS4KLSAgICAg
ICAgQVNTRVJUKCFsb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGUoKSB8fCBsb2FkZXItPmFwcGxpY2F0
aW9uQ2FjaGUoKSA9PSBtX2NhY2hlQmVpbmdVcGRhdGVkKTsKKyAgICAgICAgQVNTRVJUKCFsb2Fk
ZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPmFwcGxpY2F0aW9uQ2FjaGUoKSB8fCBsb2FkZXIt
PmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPmFwcGxpY2F0aW9uQ2FjaGUoKSA9PSBtX2NhY2hlQmVp
bmdVcGRhdGVkKTsKIAotICAgICAgICBsb2FkZXItPnNldEFwcGxpY2F0aW9uQ2FjaGUoMCk7IC8v
IFdpbGwgdW5zZXQgY2FuZGlkYXRlLCB0b28uCisgICAgICAgIGxvYWRlci0+YXBwbGljYXRpb25D
YWNoZUhvc3QoKS0+c2V0QXBwbGljYXRpb25DYWNoZSgwKTsgLy8gV2lsbCB1bnNldCBjYW5kaWRh
dGUsIHRvby4KICAgICAgICAgbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzLnJlbW92ZShsb2Fk
ZXIpOwotICAgICAgICBwb3N0TGlzdGVuZXJUYXNrKCZET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxs
RXJyb3JMaXN0ZW5lciwgbG9hZGVyKTsKKyAgICAgICAgcG9zdExpc3RlbmVyVGFzayhET01BcHBs
aWNhdGlvbkNhY2hlOjpFUlJPUl9FVkVOVCwgbG9hZGVyKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBDb21wbGV0ZWQ6CiAgICAgICAgIC8vIFRoZSBjYWNoZSBtYW5pZmVzdCBkaWRuJ3QgbGlz
dCB0aGlzIG1haW4gcmVzb3VyY2UsIGFuZCBhbGwgY2FjaGUgZW50cmllcyB3ZXJlIGFscmVhZHkg
dXBkYXRlZCBzdWNjZXNzZnVsbHkgLSBidXQgdGhlIG1haW4gcmVzb3VyY2UgZmFpbGVkIHRvIGxv
YWQsCiAgICAgICAgIC8vIHNvIGl0IGNhbm5vdCBiZSBzdG9yZWQgdG8gdGhlIGNhY2hlLiBJZiB0
aGVyZSBhcmUgb3RoZXIgbWFpbiByZXNvdXJjZXMgYmVpbmcgZG93bmxvYWRlZCBmb3IgdGhpcyBj
YWNoZSBncm91cCwgdGhleSBtYXkgc3RpbGwgc3VjY2VlZC4KICAgICAgICAgQVNTRVJUKG1fYXNz
b2NpYXRlZERvY3VtZW50TG9hZGVycy5jb250YWlucyhsb2FkZXIpKTsKLSAgICAgICAgQVNTRVJU
KGxvYWRlci0+YXBwbGljYXRpb25DYWNoZSgpID09IG1fY2FjaGVCZWluZ1VwZGF0ZWQpOwotICAg
ICAgICBBU1NFUlQoIWxvYWRlci0+Y2FuZGlkYXRlQXBwbGljYXRpb25DYWNoZUdyb3VwKCkpOwor
ICAgICAgICBBU1NFUlQobG9hZGVyLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5hcHBsaWNhdGlv
bkNhY2hlKCkgPT0gbV9jYWNoZUJlaW5nVXBkYXRlZCk7CisgICAgICAgIEFTU0VSVCghbG9hZGVy
LT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5jYW5kaWRhdGVBcHBsaWNhdGlvbkNhY2hlR3JvdXAo
KSk7CiAgICAgICAgIG1fYXNzb2NpYXRlZERvY3VtZW50TG9hZGVycy5yZW1vdmUobG9hZGVyKTsK
LSAgICAgICAgbG9hZGVyLT5zZXRBcHBsaWNhdGlvbkNhY2hlKDApOworICAgICAgICBsb2FkZXIt
PmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPnNldEFwcGxpY2F0aW9uQ2FjaGUoMCk7CiAKLSAgICAg
ICAgcG9zdExpc3RlbmVyVGFzaygmRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbEVycm9yTGlzdGVu
ZXIsIGxvYWRlcik7CisgICAgICAgIHBvc3RMaXN0ZW5lclRhc2soRE9NQXBwbGljYXRpb25DYWNo
ZTo6RVJST1JfRVZFTlQsIGxvYWRlcik7CiAKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzMy
LDcgKzMzMyw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpkaXNhc3NvY2lhdGUKIAog
ICAgIG1fcGVuZGluZ01hc3RlclJlc291cmNlTG9hZGVycy5yZW1vdmUobG9hZGVyKTsKIAotICAg
IGxvYWRlci0+c2V0QXBwbGljYXRpb25DYWNoZSgwKTsgLy8gV2lsbCBzZXQgY2FuZGlkYXRlIHRv
IDAsIHRvby4KKyAgICBsb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPnNldEFwcGxpY2F0
aW9uQ2FjaGUoMCk7IC8vIFdpbGwgc2V0IGNhbmRpZGF0ZSB0byAwLCB0b28uCiAKICAgICBpZiAo
IW1fYXNzb2NpYXRlZERvY3VtZW50TG9hZGVycy5pc0VtcHR5KCkgfHwgIW1fcGVuZGluZ01hc3Rl
clJlc291cmNlTG9hZGVycy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTM4OCw5ICsz
ODksOSBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6dXBkYXRlKEZyYW1lCiB7CiAgICAg
aWYgKG1fdXBkYXRlU3RhdHVzID09IENoZWNraW5nIHx8IG1fdXBkYXRlU3RhdHVzID09IERvd25s
b2FkaW5nKSB7CiAgICAgICAgIGlmICh1cGRhdGVPcHRpb24gPT0gQXBwbGljYXRpb25DYWNoZVVw
ZGF0ZVdpdGhCcm93c2luZ0NvbnRleHQpIHsKLSAgICAgICAgICAgIHBvc3RMaXN0ZW5lclRhc2so
JkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxDaGVja2luZ0xpc3RlbmVyLCBmcmFtZS0+bG9hZGVy
KCktPmRvY3VtZW50TG9hZGVyKCkpOworICAgICAgICAgICAgcG9zdExpc3RlbmVyVGFzayhET01B
cHBsaWNhdGlvbkNhY2hlOjpDSEVDS0lOR19FVkVOVCwgZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVu
dExvYWRlcigpKTsKICAgICAgICAgICAgIGlmIChtX3VwZGF0ZVN0YXR1cyA9PSBEb3dubG9hZGlu
ZykKLSAgICAgICAgICAgICAgICBwb3N0TGlzdGVuZXJUYXNrKCZET01BcHBsaWNhdGlvbkNhY2hl
OjpjYWxsRG93bmxvYWRpbmdMaXN0ZW5lciwgZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRl
cigpKTsKKyAgICAgICAgICAgICAgICBwb3N0TGlzdGVuZXJUYXNrKERPTUFwcGxpY2F0aW9uQ2Fj
aGU6OkRPV05MT0FESU5HX0VWRU5ULCBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkp
OwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC00MDAsOCArNDAxLDggQEAg
dm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OnVwZGF0ZShGcmFtZQogICAgICAgICBBU1NFUlQo
bV9wZW5kaW5nTWFzdGVyUmVzb3VyY2VMb2FkZXJzLmlzRW1wdHkoKSk7CiAgICAgICAgIEFTU0VS
VChtX3BlbmRpbmdFbnRyaWVzLmlzRW1wdHkoKSk7CiAgICAgICAgIEFTU0VSVCghbV9jYWNoZUJl
aW5nVXBkYXRlZCk7Ci0gICAgICAgIHBvc3RMaXN0ZW5lclRhc2soJkRPTUFwcGxpY2F0aW9uQ2Fj
aGU6OmNhbGxDaGVja2luZ0xpc3RlbmVyLCBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVy
KCkpOwotICAgICAgICBwb3N0TGlzdGVuZXJUYXNrKCZET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxs
Tm9VcGRhdGVMaXN0ZW5lciwgZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpKTsKKyAg
ICAgICAgcG9zdExpc3RlbmVyVGFzayhET01BcHBsaWNhdGlvbkNhY2hlOjpDSEVDS0lOR19FVkVO
VCwgZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpKTsKKyAgICAgICAgcG9zdExpc3Rl
bmVyVGFzayhET01BcHBsaWNhdGlvbkNhY2hlOjpOT1VQREFURV9FVkVOVCwgZnJhbWUtPmxvYWRl
cigpLT5kb2N1bWVudExvYWRlcigpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNDEw
LDEwICs0MTEsMTAgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OnVwZGF0ZShGcmFtZQog
CiAgICAgbV91cGRhdGVTdGF0dXMgPSBDaGVja2luZzsKIAotICAgIHBvc3RMaXN0ZW5lclRhc2so
JkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxDaGVja2luZ0xpc3RlbmVyLCBtX2Fzc29jaWF0ZWRE
b2N1bWVudExvYWRlcnMpOworICAgIHBvc3RMaXN0ZW5lclRhc2soRE9NQXBwbGljYXRpb25DYWNo
ZTo6Q0hFQ0tJTkdfRVZFTlQsIG1fYXNzb2NpYXRlZERvY3VtZW50TG9hZGVycyk7CiAgICAgaWYg
KCFtX25ld2VzdENhY2hlKSB7CiAgICAgICAgIEFTU0VSVCh1cGRhdGVPcHRpb24gPT0gQXBwbGlj
YXRpb25DYWNoZVVwZGF0ZVdpdGhCcm93c2luZ0NvbnRleHQpOwotICAgICAgICBwb3N0TGlzdGVu
ZXJUYXNrKCZET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsQ2hlY2tpbmdMaXN0ZW5lciwgZnJhbWUt
PmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpKTsKKyAgICAgICAgcG9zdExpc3RlbmVyVGFzayhE
T01BcHBsaWNhdGlvbkNhY2hlOjpDSEVDS0lOR19FVkVOVCwgZnJhbWUtPmxvYWRlcigpLT5kb2N1
bWVudExvYWRlcigpKTsKICAgICB9CiAgICAgCiAgICAgQVNTRVJUKCFtX21hbmlmZXN0SGFuZGxl
KTsKQEAgLTY0OCw3ICs2NDksNyBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6ZGlkRmlu
aXNoTG9hCiAgICAgLy8gV2UgaGF2ZSB0aGUgbWFuaWZlc3QsIG5vdyBkb3dubG9hZCB0aGUgcmVz
b3VyY2VzLgogICAgIG1fdXBkYXRlU3RhdHVzID0gRG93bmxvYWRpbmc7CiAgICAgCi0gICAgcG9z
dExpc3RlbmVyVGFzaygmRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbERvd25sb2FkaW5nTGlzdGVu
ZXIsIG1fYXNzb2NpYXRlZERvY3VtZW50TG9hZGVycyk7CisgICAgcG9zdExpc3RlbmVyVGFzayhE
T01BcHBsaWNhdGlvbkNhY2hlOjpET1dOTE9BRElOR19FVkVOVCwgbV9hc3NvY2lhdGVkRG9jdW1l
bnRMb2FkZXJzKTsKIAogICAgIEFTU0VSVChtX3BlbmRpbmdFbnRyaWVzLmlzRW1wdHkoKSk7CiAK
QEAgLTY5OCw4ICs2OTksOCBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6bWFuaWZlc3RO
b3RGCiB7CiAgICAgbWFrZU9ic29sZXRlKCk7CiAKLSAgICBwb3N0TGlzdGVuZXJUYXNrKCZET01B
cHBsaWNhdGlvbkNhY2hlOjpjYWxsT2Jzb2xldGVMaXN0ZW5lciwgbV9hc3NvY2lhdGVkRG9jdW1l
bnRMb2FkZXJzKTsKLSAgICBwb3N0TGlzdGVuZXJUYXNrKCZET01BcHBsaWNhdGlvbkNhY2hlOjpj
YWxsRXJyb3JMaXN0ZW5lciwgbV9wZW5kaW5nTWFzdGVyUmVzb3VyY2VMb2FkZXJzKTsKKyAgICBw
b3N0TGlzdGVuZXJUYXNrKERPTUFwcGxpY2F0aW9uQ2FjaGU6Ok9CU09MRVRFX0VWRU5ULCBtX2Fz
c29jaWF0ZWREb2N1bWVudExvYWRlcnMpOworICAgIHBvc3RMaXN0ZW5lclRhc2soRE9NQXBwbGlj
YXRpb25DYWNoZTo6RVJST1JfRVZFTlQsIG1fcGVuZGluZ01hc3RlclJlc291cmNlTG9hZGVycyk7
CiAKICAgICBzdG9wTG9hZGluZygpOwogCkBAIC03MDksOSArNzEwLDkgQEAgdm9pZCBBcHBsaWNh
dGlvbkNhY2hlR3JvdXA6Om1hbmlmZXN0Tm90RgogICAgIHdoaWxlICghbV9wZW5kaW5nTWFzdGVy
UmVzb3VyY2VMb2FkZXJzLmlzRW1wdHkoKSkgewogICAgICAgICBIYXNoU2V0PERvY3VtZW50TG9h
ZGVyKj46Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nTWFzdGVyUmVzb3VyY2VMb2FkZXJzLmJlZ2lu
KCk7CiAgICAgICAgIAotICAgICAgICBBU1NFUlQoKCppdCktPmNhbmRpZGF0ZUFwcGxpY2F0aW9u
Q2FjaGVHcm91cCgpID09IHRoaXMpOwotICAgICAgICBBU1NFUlQoISgqaXQpLT5hcHBsaWNhdGlv
bkNhY2hlKCkpOwotICAgICAgICAoKml0KS0+c2V0Q2FuZGlkYXRlQXBwbGljYXRpb25DYWNoZUdy
b3VwKDApOworICAgICAgICBBU1NFUlQoKCppdCktPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPmNh
bmRpZGF0ZUFwcGxpY2F0aW9uQ2FjaGVHcm91cCgpID09IHRoaXMpOworICAgICAgICBBU1NFUlQo
ISgqaXQpLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5hcHBsaWNhdGlvbkNhY2hlKCkpOworICAg
ICAgICAoKml0KS0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+c2V0Q2FuZGlkYXRlQXBwbGljYXRp
b25DYWNoZUdyb3VwKDApOwogICAgICAgICBtX3BlbmRpbmdNYXN0ZXJSZXNvdXJjZUxvYWRlcnMu
cmVtb3ZlKGl0KTsKICAgICB9CiAKQEAgLTc0NywxMSArNzQ4LDExIEBAIHZvaWQgQXBwbGljYXRp
b25DYWNoZUdyb3VwOjpjaGVja0lmTG9hZEkKICAgICAgICAgaWYgKCFtX3N0b3JhZ2VJRCkKICAg
ICAgICAgICAgIGNhY2hlU3RvcmFnZSgpLnN0b3JlTmV3ZXN0Q2FjaGUodGhpcyk7CiAKLSAgICAg
ICAgcG9zdExpc3RlbmVyVGFzaygmRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbE5vVXBkYXRlTGlz
dGVuZXIsIG1fYXNzb2NpYXRlZERvY3VtZW50TG9hZGVycyk7CisgICAgICAgIHBvc3RMaXN0ZW5l
clRhc2soRE9NQXBwbGljYXRpb25DYWNoZTo6Tk9VUERBVEVfRVZFTlQsIG1fYXNzb2NpYXRlZERv
Y3VtZW50TG9hZGVycyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRmFpbHVyZToKICAgICAg
ICAgQVNTRVJUKCFtX2NhY2hlQmVpbmdVcGRhdGVkKTsKLSAgICAgICAgcG9zdExpc3RlbmVyVGFz
aygmRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbEVycm9yTGlzdGVuZXIsIG1fYXNzb2NpYXRlZERv
Y3VtZW50TG9hZGVycyk7CisgICAgICAgIHBvc3RMaXN0ZW5lclRhc2soRE9NQXBwbGljYXRpb25D
YWNoZTo6RVJST1JfRVZFTlQsIG1fYXNzb2NpYXRlZERvY3VtZW50TG9hZGVycyk7CiAgICAgICAg
IGlmIChtX2NhY2hlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIEFTU0VSVChtX2Fzc29jaWF0
ZWREb2N1bWVudExvYWRlcnMuaXNFbXB0eSgpKTsKICAgICAgICAgICAgIGRlbGV0ZSB0aGlzOwpA
QCAtNzgwLDcgKzc4MSw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpjaGVja0lmTG9h
ZEkKICAgICAgICAgICAgIGlmIChvbGROZXdlc3RDYWNoZSkKICAgICAgICAgICAgICAgICBjYWNo
ZVN0b3JhZ2UoKS5yZW1vdmUob2xkTmV3ZXN0Q2FjaGUuZ2V0KCkpOwogICAgICAgICAgICAgLy8g
RmlyZSB0aGUgc3VjY2VzcyBldmVudHMuCi0gICAgICAgICAgICBwb3N0TGlzdGVuZXJUYXNrKGlz
VXBncmFkZUF0dGVtcHQgPyAmRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbFVwZGF0ZVJlYWR5TGlz
dGVuZXIgOiAmRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbENhY2hlZExpc3RlbmVyLCBtX2Fzc29j
aWF0ZWREb2N1bWVudExvYWRlcnMpOworICAgICAgICAgICAgcG9zdExpc3RlbmVyVGFzayhpc1Vw
Z3JhZGVBdHRlbXB0ID8gRE9NQXBwbGljYXRpb25DYWNoZTo6VVBEQVRFUkVBRFlfRVZFTlQgOiBE
T01BcHBsaWNhdGlvbkNhY2hlOjpDQUNIRURfRVZFTlQsIG1fYXNzb2NpYXRlZERvY3VtZW50TG9h
ZGVycyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoY2FjaGVTdG9yYWdlKCku
aXNNYXhpbXVtU2l6ZVJlYWNoZWQoKSAmJiAhbV9jYWxsZWRSZWFjaGVkTWF4QXBwQ2FjaGVTaXpl
KSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgcmFuIG91dCBvZiBzcGFjZS4gQWxsIHRoZSBjaGFu
Z2VzIGluIHRoZSBjYWNoZSBzdG9yYWdlIGhhdmUKQEAgLTgwMCw3ICs4MDEsNyBAQCB2b2lkIEFw
cGxpY2F0aW9uQ2FjaGVHcm91cDo6Y2hlY2tJZkxvYWRJCiAgICAgICAgICAgICAgICAgLy8gUnVu
IHRoZSAiY2FjaGUgZmFpbHVyZSBzdGVwcyIKICAgICAgICAgICAgICAgICAvLyBGaXJlIHRoZSBl
cnJvciBldmVudHMgdG8gYWxsIHBlbmRpbmcgbWFzdGVyIGVudHJpZXMsIGFzIHdlbGwgYW55IG90
aGVyIGNhY2hlIGhvc3RzCiAgICAgICAgICAgICAgICAgLy8gY3VycmVudGx5IGFzc29jaWF0ZWQg
d2l0aCBhIGNhY2hlIGluIHRoaXMgZ3JvdXAuCi0gICAgICAgICAgICAgICAgcG9zdExpc3RlbmVy
VGFzaygmRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbEVycm9yTGlzdGVuZXIsIG1fYXNzb2NpYXRl
ZERvY3VtZW50TG9hZGVycyk7CisgICAgICAgICAgICAgICAgcG9zdExpc3RlbmVyVGFzayhET01B
cHBsaWNhdGlvbkNhY2hlOjpFUlJPUl9FVkVOVCwgbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJz
KTsKICAgICAgICAgICAgICAgICAvLyBEaXNhc3NvY2lhdGUgdGhlIHBlbmRpbmcgbWFzdGVyIGVu
dHJpZXMgZnJvbSB0aGUgZmFpbGVkIG5ldyBjYWNoZS4gTm90ZSB0aGF0CiAgICAgICAgICAgICAg
ICAgLy8gYWxsIG90aGVyIGxvYWRlcnMgaW4gdGhlIG1fYXNzb2NpYXRlZERvY3VtZW50TG9hZGVy
cyBhcmUgc3RpbGwgYXNzb2NpYXRlZCB3aXRoCiAgICAgICAgICAgICAgICAgLy8gc29tZSBvdGhl
ciBjYWNoZSBpbiB0aGlzIGdyb3VwLiBUaGV5IGFyZSBub3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBm
YWlsZWQgbmV3IGNhY2hlLgpAQCAtODQ2LDcgKzg0Nyw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNo
ZUdyb3VwOjpzdGFydExvYWRpbmcKICAgICAKICAgICBFbnRyeU1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX3BlbmRpbmdFbnRyaWVzLmJlZ2luKCk7CiAKLSAgICBwb3N0TGlzdGVuZXJUYXNrKCZE
T01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsUHJvZ3Jlc3NMaXN0ZW5lciwgbV9hc3NvY2lhdGVkRG9j
dW1lbnRMb2FkZXJzKTsKKyAgICBwb3N0TGlzdGVuZXJUYXNrKERPTUFwcGxpY2F0aW9uQ2FjaGU6
OlBST0dSRVNTX0VWRU5ULCBtX2Fzc29jaWF0ZWREb2N1bWVudExvYWRlcnMpOwogCiAgICAgQVNT
RVJUKCFtX2N1cnJlbnRIYW5kbGUpOwogICAgIApAQCAtOTEwLDcgKzkxMSw3IEBAIHZvaWQgQXBw
bGljYXRpb25DYWNoZUdyb3VwOjphc3NvY2lhdGVEb2MKIAogICAgIEFTU0VSVCghbV9pc09ic29s
ZXRlKTsKIAotICAgIGxvYWRlci0+c2V0QXBwbGljYXRpb25DYWNoZShjYWNoZSk7CisgICAgbG9h
ZGVyLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5zZXRBcHBsaWNhdGlvbkNhY2hlKGNhY2hlKTsK
IAogICAgIEFTU0VSVCghbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzLmNvbnRhaW5zKGxvYWRl
cikpOwogICAgIG1fYXNzb2NpYXRlZERvY3VtZW50TG9hZGVycy5hZGQobG9hZGVyKTsKQEAgLTk0
NCwzOSArOTQ1LDQ0IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpzY2hlZHVsZVJlYWMK
IH0KIAogY2xhc3MgQ2FsbENhY2hlTGlzdGVuZXJUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ6OlRhc2sgewotICAgIHR5cGVkZWYgdm9pZCAoRE9NQXBwbGljYXRpb25DYWNoZTo6
Kkxpc3RlbmVyRnVuY3Rpb24pKCk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q2Fs
bENhY2hlTGlzdGVuZXJUYXNrPiBjcmVhdGUoTGlzdGVuZXJGdW5jdGlvbiBsaXN0ZW5lckZ1bmN0
aW9uKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbGxDYWNoZUxpc3RlbmVyVGFzaz4gY3JlYXRl
KFBhc3NSZWZQdHI8RG9jdW1lbnRMb2FkZXI+IGxvYWRlciwgRE9NQXBwbGljYXRpb25DYWNoZTo6
RXZlbnRUeXBlIGV2ZW50VHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
Q2FsbENhY2hlTGlzdGVuZXJUYXNrKGxpc3RlbmVyRnVuY3Rpb24pKTsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBDYWxsQ2FjaGVMaXN0ZW5lclRhc2sobG9hZGVyLCBldmVudFR5cGUpKTsK
ICAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChjb250ZXh0LT5pc0RvY3VtZW50
KCkpOwotICAgICAgICBpZiAoRE9NV2luZG93KiB3aW5kb3cgPSBzdGF0aWNfY2FzdDxEb2N1bWVu
dCo+KGNvbnRleHQpLT5kb21XaW5kb3coKSkgewotICAgICAgICAgICAgaWYgKERPTUFwcGxpY2F0
aW9uQ2FjaGUqIGRvbUNhY2hlID0gd2luZG93LT5vcHRpb25hbEFwcGxpY2F0aW9uQ2FjaGUoKSkK
LSAgICAgICAgICAgICAgICAoZG9tQ2FjaGUtPiptX2xpc3RlbmVyRnVuY3Rpb24pKCk7Ci0gICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4dC0+
aXNEb2N1bWVudCgpKTsKKyAgICAgICAgRnJhbWUqIGZyYW1lID0gbV9kb2N1bWVudExvYWRlci0+
ZnJhbWUoKTsKKyAgICAgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICAgICAgQVNTRVJUKGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSA9PSBtX2Rv
Y3VtZW50TG9hZGVyLmdldCgpKTsKKworICAgICAgICBtX2RvY3VtZW50TG9hZGVyLT5hcHBsaWNh
dGlvbkNhY2hlSG9zdCgpLT5ub3RpZnlFdmVudExpc3RlbmVyKG1fZXZlbnRUeXBlKTsKICAgICB9
CiAKIHByaXZhdGU6Ci0gICAgQ2FsbENhY2hlTGlzdGVuZXJUYXNrKExpc3RlbmVyRnVuY3Rpb24g
bGlzdGVuZXJGdW5jdGlvbikKLSAgICAgICAgOiBtX2xpc3RlbmVyRnVuY3Rpb24obGlzdGVuZXJG
dW5jdGlvbikKKyAgICBDYWxsQ2FjaGVMaXN0ZW5lclRhc2soUGFzc1JlZlB0cjxEb2N1bWVudExv
YWRlcj4gbG9hZGVyLCBET01BcHBsaWNhdGlvbkNhY2hlOjpFdmVudFR5cGUgZXZlbnRUeXBlKQor
ICAgICAgICA6IG1fZG9jdW1lbnRMb2FkZXIobG9hZGVyKQorICAgICAgICAsIG1fZXZlbnRUeXBl
KGV2ZW50VHlwZSkKICAgICB7CiAgICAgfQogCi0gICAgTGlzdGVuZXJGdW5jdGlvbiBtX2xpc3Rl
bmVyRnVuY3Rpb247CisgICAgUmVmUHRyPERvY3VtZW50TG9hZGVyPiBtX2RvY3VtZW50TG9hZGVy
OworICAgIERPTUFwcGxpY2F0aW9uQ2FjaGU6OkV2ZW50VHlwZSBtX2V2ZW50VHlwZTsKIH07CiAK
LXZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpwb3N0TGlzdGVuZXJUYXNrKExpc3RlbmVyRnVu
Y3Rpb24gbGlzdGVuZXJGdW5jdGlvbiwgY29uc3QgSGFzaFNldDxEb2N1bWVudExvYWRlcio+JiBs
b2FkZXJTZXQpCit2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6cG9zdExpc3RlbmVyVGFzayhE
T01BcHBsaWNhdGlvbkNhY2hlOjpFdmVudFR5cGUgZXZlbnRUeXBlLCBjb25zdCBIYXNoU2V0PERv
Y3VtZW50TG9hZGVyKj4mIGxvYWRlclNldCkKIHsKICAgICBIYXNoU2V0PERvY3VtZW50TG9hZGVy
Kj46OmNvbnN0X2l0ZXJhdG9yIGxvYWRlclNldEVuZCA9IGxvYWRlclNldC5lbmQoKTsKICAgICBm
b3IgKEhhc2hTZXQ8RG9jdW1lbnRMb2FkZXIqPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGxvYWRl
clNldC5iZWdpbigpOyBpdGVyICE9IGxvYWRlclNldEVuZDsgKytpdGVyKQotICAgICAgICBwb3N0
TGlzdGVuZXJUYXNrKGxpc3RlbmVyRnVuY3Rpb24sICppdGVyKTsKKyAgICAgICAgcG9zdExpc3Rl
bmVyVGFzayhldmVudFR5cGUsICppdGVyKTsKIH0KIAotdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3Jv
dXA6OnBvc3RMaXN0ZW5lclRhc2soTGlzdGVuZXJGdW5jdGlvbiBsaXN0ZW5lckZ1bmN0aW9uLCBE
b2N1bWVudExvYWRlciogbG9hZGVyKQordm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OnBvc3RM
aXN0ZW5lclRhc2soRE9NQXBwbGljYXRpb25DYWNoZTo6RXZlbnRUeXBlIGV2ZW50VHlwZSwgRG9j
dW1lbnRMb2FkZXIqIGxvYWRlcikKIHsKICAgICBGcmFtZSogZnJhbWUgPSBsb2FkZXItPmZyYW1l
KCk7CiAgICAgaWYgKCFmcmFtZSkKQEAgLTk4NCw3ICs5OTAsNyBAQCB2b2lkIEFwcGxpY2F0aW9u
Q2FjaGVHcm91cDo6cG9zdExpc3RlbmVyCiAgICAgCiAgICAgQVNTRVJUKGZyYW1lLT5sb2FkZXIo
KS0+ZG9jdW1lbnRMb2FkZXIoKSA9PSBsb2FkZXIpOwogCi0gICAgZnJhbWUtPmRvY3VtZW50KCkt
PnBvc3RUYXNrKENhbGxDYWNoZUxpc3RlbmVyVGFzazo6Y3JlYXRlKGxpc3RlbmVyRnVuY3Rpb24p
KTsKKyAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+cG9zdFRhc2soQ2FsbENhY2hlTGlzdGVuZXJUYXNr
OjpjcmVhdGUobG9hZGVyLCBldmVudFR5cGUpKTsKIH0KIAogdm9pZCBBcHBsaWNhdGlvbkNhY2hl
R3JvdXA6OmNsZWFyU3RvcmFnZUlEKCkKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0Fw
cGxpY2F0aW9uQ2FjaGVHcm91cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2FwcGNh
Y2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5oCShyZXZpc2lvbiA0NjUwNikKKysrIFdlYkNvcmUv
bG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgogCisjaW5jbHVkZSAiRE9NQXBwbGljYXRpb25DYWNoZS5oIgogI2luY2x1ZGUg
IktVUkwuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlJlc291cmNl
SGFuZGxlLmgiCkBAIC00Miw3ICs0Myw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
QXBwbGljYXRpb25DYWNoZTsKIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTsKLWNsYXNz
IERPTUFwcGxpY2F0aW9uQ2FjaGU7CiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIERvY3VtZW50TG9h
ZGVyOwogY2xhc3MgRnJhbWU7CkBAIC05Miw5ICs5Miw4IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToK
ICAgICB0eXBlZGVmIHZvaWQgKERPTUFwcGxpY2F0aW9uQ2FjaGU6OipMaXN0ZW5lckZ1bmN0aW9u
KSgpOwotICAgIHN0YXRpYyB2b2lkIHBvc3RMaXN0ZW5lclRhc2soTGlzdGVuZXJGdW5jdGlvbiwg
Y29uc3QgSGFzaFNldDxEb2N1bWVudExvYWRlcio+Jik7Ci0gICAgc3RhdGljIHZvaWQgcG9zdExp
c3RlbmVyVGFzayhMaXN0ZW5lckZ1bmN0aW9uLCBjb25zdCBWZWN0b3I8UmVmUHRyPERvY3VtZW50
TG9hZGVyPiA+JiBsb2FkZXJzKTsKLSAgICBzdGF0aWMgdm9pZCBwb3N0TGlzdGVuZXJUYXNrKExp
c3RlbmVyRnVuY3Rpb24sIERvY3VtZW50TG9hZGVyKik7CisgICAgc3RhdGljIHZvaWQgcG9zdExp
c3RlbmVyVGFzayhET01BcHBsaWNhdGlvbkNhY2hlOjpFdmVudFR5cGUsIGNvbnN0IEhhc2hTZXQ8
RG9jdW1lbnRMb2FkZXIqPiYpOworICAgIHN0YXRpYyB2b2lkIHBvc3RMaXN0ZW5lclRhc2soRE9N
QXBwbGljYXRpb25DYWNoZTo6RXZlbnRUeXBlLCBEb2N1bWVudExvYWRlciopOwogICAgIHZvaWQg
c2NoZWR1bGVSZWFjaGVkTWF4QXBwQ2FjaGVTaXplQ2FsbGJhY2soKTsKIAogICAgIFBhc3NSZWZQ
dHI8UmVzb3VyY2VIYW5kbGU+IGNyZWF0ZVJlc291cmNlSGFuZGxlKGNvbnN0IEtVUkwmLCBBcHBs
aWNhdGlvbkNhY2hlUmVzb3VyY2UqIG5ld2VzdENhY2hlZFJlc291cmNlKTsKSW5kZXg6IFdlYkNv
cmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlSG9zdC5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzc0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAy
MDA5LCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUhvc3QuaCIKKworI2lmIEVOQUJMRShPRkZMSU5F
X1dFQl9BUFBMSUNBVElPTlMpCisKKyNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlLmgiCisjaW5j
bHVkZSAiQXBwbGljYXRpb25DYWNoZUdyb3VwLmgiCisjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNo
ZVJlc291cmNlLmgiCisjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJET01B
cHBsaWNhdGlvbkNhY2hlLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxv
YWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiTWFpblJl
c291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlICJS
ZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0FwcGxpY2F0aW9uQ2FjaGVIb3N0OjpBcHBsaWNhdGlvbkNhY2hlSG9zdChEb2N1
bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIpCisgICAgOiBtX0RPTUFwcGxpY2F0aW9uQ2FjaGUo
MCkKKyAgICAsIG1fZG9jdW1lbnRMb2FkZXIoZG9jdW1lbnRMb2FkZXIpCisgICAgLCBtX2NhbmRp
ZGF0ZUFwcGxpY2F0aW9uQ2FjaGVHcm91cCgwKQoreworICAgIEFTU0VSVChtX2RvY3VtZW50TG9h
ZGVyKTsKK30KKworQXBwbGljYXRpb25DYWNoZUhvc3Q6On5BcHBsaWNhdGlvbkNhY2hlSG9zdCgp
Cit7CisgICAgaWYgKG1fYXBwbGljYXRpb25DYWNoZSkKKyAgICAgICAgbV9hcHBsaWNhdGlvbkNh
Y2hlLT5ncm91cCgpLT5kaXNhc3NvY2lhdGVEb2N1bWVudExvYWRlcihtX2RvY3VtZW50TG9hZGVy
KTsKKyAgICBlbHNlIGlmIChtX2NhbmRpZGF0ZUFwcGxpY2F0aW9uQ2FjaGVHcm91cCkKKyAgICAg
ICAgbV9jYW5kaWRhdGVBcHBsaWNhdGlvbkNhY2hlR3JvdXAtPmRpc2Fzc29jaWF0ZURvY3VtZW50
TG9hZGVyKG1fZG9jdW1lbnRMb2FkZXIpOworfQorCit2b2lkIEFwcGxpY2F0aW9uQ2FjaGVIb3N0
OjpzZWxlY3RDYWNoZVdpdGhvdXRNYW5pZmVzdCgpCit7CisgICAgQXBwbGljYXRpb25DYWNoZUdy
b3VwOjpzZWxlY3RDYWNoZVdpdGhvdXRNYW5pZmVzdFVSTChtX2RvY3VtZW50TG9hZGVyLT5mcmFt
ZSgpKTsKK30KKwordm9pZCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6c2VsZWN0Q2FjaGVXaXRoTWFu
aWZlc3QoY29uc3QgS1VSTCYgbWFuaWZlc3RVUkwpCit7CisgICAgQXBwbGljYXRpb25DYWNoZUdy
b3VwOjpzZWxlY3RDYWNoZShtX2RvY3VtZW50TG9hZGVyLT5mcmFtZSgpLCBtYW5pZmVzdFVSTCk7
Cit9CisKK3ZvaWQgQXBwbGljYXRpb25DYWNoZUhvc3Q6Om1heWJlTG9hZE1haW5SZXNvdXJjZShS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN1YnN0aXR1dGVEYXRhJiBzdWJzdGl0dXRlRGF0YSkK
K3sKKyAgICAvLyBDaGVjayBpZiB0aGlzIHJlcXVlc3Qgc2hvdWxkIGJlIGxvYWRlZCBmcm9tIHRo
ZSBhcHBsaWNhdGlvbiBjYWNoZQorICAgIGlmICghc3Vic3RpdHV0ZURhdGEuaXNWYWxpZCgpICYm
IGlzQXBwbGljYXRpb25DYWNoZUVuYWJsZWQoKSkgeworICAgICAgICBBU1NFUlQoIW1fbWFpblJl
c291cmNlQXBwbGljYXRpb25DYWNoZSk7CisKKyAgICAgICAgbV9tYWluUmVzb3VyY2VBcHBsaWNh
dGlvbkNhY2hlID0gQXBwbGljYXRpb25DYWNoZUdyb3VwOjpjYWNoZUZvck1haW5SZXF1ZXN0KHJl
cXVlc3QsIG1fZG9jdW1lbnRMb2FkZXIpOworCisgICAgICAgIGlmIChtX21haW5SZXNvdXJjZUFw
cGxpY2F0aW9uQ2FjaGUpIHsKKyAgICAgICAgICAgIC8vIEdldCB0aGUgcmVzb3VyY2UgZnJvbSB0
aGUgYXBwbGljYXRpb24gY2FjaGUuIEJ5IGRlZmluaXRpb24sIGNhY2hlRm9yTWFpblJlcXVlc3Qo
KSByZXR1cm5zIGEgY2FjaGUgdGhhdCBjb250YWlucyB0aGUgcmVzb3VyY2UuCisgICAgICAgICAg
ICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNlID0gbV9tYWluUmVzb3VyY2VBcHBs
aWNhdGlvbkNhY2hlLT5yZXNvdXJjZUZvclJlcXVlc3QocmVxdWVzdCk7CisgICAgICAgICAgICBz
dWJzdGl0dXRlRGF0YSA9IFN1YnN0aXR1dGVEYXRhKHJlc291cmNlLT5kYXRhKCksIAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS0+cmVzcG9uc2Uo
KS5taW1lVHlwZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXNvdXJjZS0+cmVzcG9uc2UoKS50ZXh0RW5jb2RpbmdOYW1lKCksIEtVUkwoKSk7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgQXBwbGljYXRpb25DYWNoZUhvc3Q6Om1heWJlTG9hZEZh
bGxiYWNrRm9yTWFpblJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYgcikKK3sKKyAgICBpZiAoci5odHRwU3RhdHVzQ29kZSgpIC8g
MTAwID09IDQgfHwgci5odHRwU3RhdHVzQ29kZSgpIC8gMTAwID09IDUpIHsKKyAgICAgICAgQVNT
RVJUKCFtX21haW5SZXNvdXJjZUFwcGxpY2F0aW9uQ2FjaGUpOworICAgICAgICBpZiAoaXNBcHBs
aWNhdGlvbkNhY2hlRW5hYmxlZCgpKSB7CisgICAgICAgICAgICBtX21haW5SZXNvdXJjZUFwcGxp
Y2F0aW9uQ2FjaGUgPSBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmZhbGxiYWNrQ2FjaGVGb3JNYWlu
UmVxdWVzdChyZXF1ZXN0LCBkb2N1bWVudExvYWRlcigpKTsKKworICAgICAgICAgICAgaWYgKHNj
aGVkdWxlTG9hZEZhbGxiYWNrUmVzb3VyY2VGcm9tQXBwbGljYXRpb25DYWNoZShkb2N1bWVudExv
YWRlcigpLT5tYWluUmVzb3VyY2VMb2FkZXIoKSwgbV9tYWluUmVzb3VyY2VBcHBsaWNhdGlvbkNh
Y2hlLmdldCgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAg
IH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQXBwbGljYXRpb25DYWNoZUhvc3Q6Om1h
eWJlTG9hZEZhbGxiYWNrRm9yTWFpbkVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit7CisgICAgaWYgKCFlcnJvci5pc0NhbmNl
bGxhdGlvbigpKSB7CisgICAgICAgIEFTU0VSVCghbV9tYWluUmVzb3VyY2VBcHBsaWNhdGlvbkNh
Y2hlKTsKKyAgICAgICAgaWYgKGlzQXBwbGljYXRpb25DYWNoZUVuYWJsZWQoKSkgeworICAgICAg
ICAgICAgbV9tYWluUmVzb3VyY2VBcHBsaWNhdGlvbkNhY2hlID0gQXBwbGljYXRpb25DYWNoZUdy
b3VwOjpmYWxsYmFja0NhY2hlRm9yTWFpblJlcXVlc3QocmVxdWVzdCwgbV9kb2N1bWVudExvYWRl
cik7CisKKyAgICAgICAgICAgIGlmIChzY2hlZHVsZUxvYWRGYWxsYmFja1Jlc291cmNlRnJvbUFw
cGxpY2F0aW9uQ2FjaGUoZG9jdW1lbnRMb2FkZXIoKS0+bWFpblJlc291cmNlTG9hZGVyKCksIG1f
bWFpblJlc291cmNlQXBwbGljYXRpb25DYWNoZS5nZXQoKSkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjptYWluUmVzb3VyY2VEYXRhUmVjZWl2ZWQoY29uc3QgY2hh
ciosIGludCwgbG9uZyBsb25nLCBib29sKQoreworICAgIC8vIFRoaXMgbWV0aG9kIGlzIGhlcmUg
dG8gZmFjaWxpdGF0ZSBhbHRlcm5hdGUgaW1wbGVtZXRhdGlvbnMgb2YgdGhpcyBpbnRlcmZhY2Ug
YnkgdGhlIGhvc3QgYnJvd3Nlci4KK30KKwordm9pZCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6ZmFp
bGVkTG9hZGluZ01haW5SZXNvdXJjZSgpCit7CisgICAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBn
cm91cCA9IG1fY2FuZGlkYXRlQXBwbGljYXRpb25DYWNoZUdyb3VwOworICAgIGlmICghZ3JvdXAg
JiYgbV9hcHBsaWNhdGlvbkNhY2hlKSB7CisgICAgICAgIEFTU0VSVCghbWFpblJlc291cmNlQXBw
bGljYXRpb25DYWNoZSgpKTsgLy8gSWYgdGhlIG1haW4gcmVzb3VyY2Ugd2VyZSBsb2FkZWQgZnJv
bSBhIGNhY2hlLCBpdCB3b3VsZG4ndCBmYWlsLgorICAgICAgICBncm91cCA9IG1fYXBwbGljYXRp
b25DYWNoZS0+Z3JvdXAoKTsKKyAgICB9CisgICAgCisgICAgaWYgKGdyb3VwKQorICAgICAgICBn
cm91cC0+ZmFpbGVkTG9hZGluZ01haW5SZXNvdXJjZShtX2RvY3VtZW50TG9hZGVyKTsKK30KKwor
dm9pZCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6ZmluaXNoZWRMb2FkaW5nTWFpblJlc291cmNlKCkK
K3sKKyAgICBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIGdyb3VwID0gY2FuZGlkYXRlQXBwbGljYXRp
b25DYWNoZUdyb3VwKCk7CisgICAgaWYgKCFncm91cCAmJiBhcHBsaWNhdGlvbkNhY2hlKCkgJiYg
IW1haW5SZXNvdXJjZUFwcGxpY2F0aW9uQ2FjaGUoKSkKKyAgICAgICAgZ3JvdXAgPSBhcHBsaWNh
dGlvbkNhY2hlKCktPmdyb3VwKCk7CisgICAgCisgICAgaWYgKGdyb3VwKQorICAgICAgICBncm91
cC0+ZmluaXNoZWRMb2FkaW5nTWFpblJlc291cmNlKG1fZG9jdW1lbnRMb2FkZXIpOworfQorCiti
b29sIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjptYXliZUxvYWRSZXNvdXJjZShSZXNvdXJjZUxvYWRl
ciogbG9hZGVyLCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IEtVUkwmIG9yaWdpbmFs
VVJMKQoreworICAgIGlmICghaXNBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKHJlcXVlc3QudXJsKCkgIT0gb3JpZ2luYWxVUkwp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSog
cmVzb3VyY2U7CisgICAgaWYgKCFzaG91bGRMb2FkUmVzb3VyY2VGcm9tQXBwbGljYXRpb25DYWNo
ZShyZXF1ZXN0LCByZXNvdXJjZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBt
X2RvY3VtZW50TG9hZGVyLT5tX3BlbmRpbmdTdWJzdGl0dXRlUmVzb3VyY2VzLnNldChsb2FkZXIs
IHJlc291cmNlKTsKKyAgICBtX2RvY3VtZW50TG9hZGVyLT5kZWxpdmVyU3Vic3RpdHV0ZVJlc291
cmNlc0FmdGVyRGVsYXkoKTsKKyAgICAgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
QXBwbGljYXRpb25DYWNoZUhvc3Q6Om1heWJlTG9hZEZhbGxiYWNrRm9yUmVkaXJlY3QoUmVzb3Vy
Y2VMb2FkZXIqIHJlc291cmNlTG9hZGVyLCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCit7CisgICAgaWYgKCFyZWRpcmVj
dFJlc3BvbnNlLmlzTnVsbCgpICYmICFwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwocmVxdWVz
dC51cmwoKSwgcmVkaXJlY3RSZXNwb25zZS51cmwoKSkpCisgICAgICAgIGlmIChzY2hlZHVsZUxv
YWRGYWxsYmFja1Jlc291cmNlRnJvbUFwcGxpY2F0aW9uQ2FjaGUocmVzb3VyY2VMb2FkZXIpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFw
cGxpY2F0aW9uQ2FjaGVIb3N0OjptYXliZUxvYWRGYWxsYmFja0ZvclJlc3BvbnNlKFJlc291cmNl
TG9hZGVyKiByZXNvdXJjZUxvYWRlciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Up
Cit7CisgICAgaWYgKHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgLyAxMDAgPT0gNCB8fCByZXNw
b25zZS5odHRwU3RhdHVzQ29kZSgpIC8gMTAwID09IDUpCisgICAgICAgIGlmIChzY2hlZHVsZUxv
YWRGYWxsYmFja1Jlc291cmNlRnJvbUFwcGxpY2F0aW9uQ2FjaGUocmVzb3VyY2VMb2FkZXIpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFw
cGxpY2F0aW9uQ2FjaGVIb3N0OjptYXliZUxvYWRGYWxsYmFja0ZvckVycm9yKFJlc291cmNlTG9h
ZGVyKiByZXNvdXJjZUxvYWRlciwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit7CisgICAg
aWYgKCFlcnJvci5pc0NhbmNlbGxhdGlvbigpKQorICAgICAgICBpZiAoc2NoZWR1bGVMb2FkRmFs
bGJhY2tSZXNvdXJjZUZyb21BcHBsaWNhdGlvbkNhY2hlKHJlc291cmNlTG9hZGVyKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBcHBsaWNh
dGlvbkNhY2hlSG9zdDo6bWF5YmVMb2FkU3luY2hyb25vdXNseShSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QsIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwg
VmVjdG9yPGNoYXI+JiBkYXRhKQoreworICAgIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVz
b3VyY2U7CisgICAgaWYgKHNob3VsZExvYWRSZXNvdXJjZUZyb21BcHBsaWNhdGlvbkNhY2hlKHJl
cXVlc3QsIHJlc291cmNlKSkgeworICAgICAgICBpZiAocmVzb3VyY2UpIHsKKyAgICAgICAgICAg
IHJlc3BvbnNlID0gcmVzb3VyY2UtPnJlc3BvbnNlKCk7CisgICAgICAgICAgICBkYXRhLmFwcGVu
ZChyZXNvdXJjZS0+ZGF0YSgpLT5kYXRhKCksIHJlc291cmNlLT5kYXRhKCktPnNpemUoKSk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlcnJvciA9IGRvY3VtZW50TG9hZGVyKCktPmZy
YW1lTG9hZGVyKCktPmNsaWVudCgpLT5jYW5ub3RTaG93VVJMRXJyb3IocmVxdWVzdCk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30K
Kwordm9pZCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6bWF5YmVMb2FkRmFsbGJhY2tTeW5jaHJvbm91
c2x5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VFcnJvciYgZXJyb3Is
IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit7CisgICAg
Ly8gSWYgbm9ybWFsIGxvYWRpbmcgcmVzdWx0cyBpbiBhIHJlZGlyZWN0IHRvIGEgcmVzb3VyY2Ug
d2l0aCBhbm90aGVyIG9yaWdpbiAoaW5kaWNhdGl2ZSBvZiBhIGNhcHRpdmUgcG9ydGFsKSwgb3Ig
YSA0eHggb3IgNXh4IHN0YXR1cyBjb2RlIG9yIGVxdWl2YWxlbnQsCisgICAgLy8gb3IgaWYgdGhl
cmUgd2VyZSBuZXR3b3JrIGVycm9ycyAoYnV0IG5vdCBpZiB0aGUgdXNlciBjYW5jZWxlZCB0aGUg
ZG93bmxvYWQpLCB0aGVuIGluc3RlYWQgZ2V0LCBmcm9tIHRoZSBjYWNoZSwgdGhlIHJlc291cmNl
IG9mIHRoZSBmYWxsYmFjayBlbnRyeQorICAgIC8vIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1hdGNo
ZWQgbmFtZXNwYWNlLgorICAgIGlmICgoIWVycm9yLmlzTnVsbCgpICYmICFlcnJvci5pc0NhbmNl
bGxhdGlvbigpKQorICAgICAgICAgfHwgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSAvIDEwMCA9
PSA0IHx8IHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgLyAxMDAgPT0gNQorICAgICAgICAgfHwg
IXByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbChyZXF1ZXN0LnVybCgpLCByZXNwb25zZS51cmwo
KSkpIHsKKyAgICAgICAgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZTsKKyAgICAg
ICAgaWYgKGdldEFwcGxpY2F0aW9uQ2FjaGVGYWxsYmFja1Jlc291cmNlKHJlcXVlc3QsIHJlc291
cmNlKSkgeworICAgICAgICAgICAgcmVzcG9uc2UgPSByZXNvdXJjZS0+cmVzcG9uc2UoKTsKKyAg
ICAgICAgICAgIGRhdGEuY2xlYXIoKTsKKyAgICAgICAgICAgIGRhdGEuYXBwZW5kKHJlc291cmNl
LT5kYXRhKCktPmRhdGEoKSwgcmVzb3VyY2UtPmRhdGEoKS0+c2l6ZSgpKTsKKyAgICAgICAgfQor
ICAgIH0KK30KKworYm9vbCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6Y2FuQ2FjaGVJblBhZ2VDYWNo
ZSgpIGNvbnN0IAoreworICAgIHJldHVybiAhYXBwbGljYXRpb25DYWNoZSgpICYmICFjYW5kaWRh
dGVBcHBsaWNhdGlvbkNhY2hlR3JvdXAoKTsKK30KKwordm9pZCBBcHBsaWNhdGlvbkNhY2hlSG9z
dDo6c2V0Q2FuZGlkYXRlQXBwbGljYXRpb25DYWNoZUdyb3VwKEFwcGxpY2F0aW9uQ2FjaGVHcm91
cCogZ3JvdXApCit7CisgICAgQVNTRVJUKCFtX2FwcGxpY2F0aW9uQ2FjaGUpOworICAgIG1fY2Fu
ZGlkYXRlQXBwbGljYXRpb25DYWNoZUdyb3VwID0gZ3JvdXA7Cit9CisgICAgCit2b2lkIEFwcGxp
Y2F0aW9uQ2FjaGVIb3N0OjpzZXRBcHBsaWNhdGlvbkNhY2hlKFBhc3NSZWZQdHI8QXBwbGljYXRp
b25DYWNoZT4gYXBwbGljYXRpb25DYWNoZSkKK3sKKyAgICBpZiAobV9jYW5kaWRhdGVBcHBsaWNh
dGlvbkNhY2hlR3JvdXApIHsKKyAgICAgICAgQVNTRVJUKCFtX2FwcGxpY2F0aW9uQ2FjaGUpOwor
ICAgICAgICBtX2NhbmRpZGF0ZUFwcGxpY2F0aW9uQ2FjaGVHcm91cCA9IDA7CisgICAgfQorCisg
ICAgbV9hcHBsaWNhdGlvbkNhY2hlID0gYXBwbGljYXRpb25DYWNoZTsKK30KKworYm9vbCBBcHBs
aWNhdGlvbkNhY2hlSG9zdDo6c2hvdWxkTG9hZFJlc291cmNlRnJvbUFwcGxpY2F0aW9uQ2FjaGUo
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2Uq
JiByZXNvdXJjZSkKK3sKKyAgICBBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSA9IGFwcGxpY2F0aW9u
Q2FjaGUoKTsKKyAgICBpZiAoIWNhY2hlIHx8ICFjYWNoZS0+aXNDb21wbGV0ZSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBJZiB0aGUgcmVzb3VyY2UgaXMgbm90IGEgSFRUUC9I
VFRQUyBHRVQsIHRoZW4gYWJvcnQKKyAgICBpZiAoIUFwcGxpY2F0aW9uQ2FjaGU6OnJlcXVlc3RJ
c0hUVFBPckhUVFBTR2V0KHJlcXVlc3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAv
LyBJZiB0aGUgcmVzb3VyY2UncyBVUkwgaXMgYW4gbWFzdGVyIGVudHJ5LCB0aGUgbWFuaWZlc3Qs
IGFuIGV4cGxpY2l0IGVudHJ5LCBvciBhIGZhbGxiYWNrIGVudHJ5CisgICAgLy8gaW4gdGhlIGFw
cGxpY2F0aW9uIGNhY2hlLCB0aGVuIGdldCB0aGUgcmVzb3VyY2UgZnJvbSB0aGUgY2FjaGUgKGlu
c3RlYWQgb2YgZmV0Y2hpbmcgaXQpLgorICAgIHJlc291cmNlID0gY2FjaGUtPnJlc291cmNlRm9y
VVJMKHJlcXVlc3QudXJsKCkpOworCisgICAgLy8gUmVzb3VyY2VzIHRoYXQgbWF0Y2ggZmFsbGJh
Y2sgbmFtZXNwYWNlcyBvciBvbmxpbmUgd2hpdGVsaXN0IGVudHJpZXMgYXJlIGZldGNoZWQgZnJv
bSB0aGUgbmV0d29yaywKKyAgICAvLyB1bmxlc3MgdGhleSBhcmUgYWxzbyBjYWNoZWQuCisgICAg
aWYgKCFyZXNvdXJjZSAmJiAoY2FjaGUtPnVybE1hdGNoZXNGYWxsYmFja05hbWVzcGFjZShyZXF1
ZXN0LnVybCgpKSB8fCBjYWNoZS0+aXNVUkxJbk9ubGluZVdoaXRlbGlzdChyZXF1ZXN0LnVybCgp
KSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFJlc291cmNlcyB0aGF0IGFyZSBu
b3QgcHJlc2VudCBpbiB0aGUgbWFuaWZlc3Qgd2lsbCBhbHdheXMgZmFpbCB0byBsb2FkIChhdCBs
ZWFzdCwgYWZ0ZXIgdGhlCisgICAgLy8gY2FjaGUgaGFzIGJlZW4gcHJpbWVkIHRoZSBmaXJzdCB0
aW1lKSwgbWFraW5nIHRoZSB0ZXN0aW5nIG9mIG9mZmxpbmUgYXBwbGljYXRpb25zIHNpbXBsZXIu
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQXBwbGljYXRpb25DYWNoZUhvc3Q6OmdldEFw
cGxpY2F0aW9uQ2FjaGVGYWxsYmFja1Jlc291cmNlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiYgcmVzb3VyY2UsIEFwcGxpY2F0aW9uQ2Fj
aGUqIGNhY2hlKQoreworICAgIGlmICghY2FjaGUpIHsKKyAgICAgICAgY2FjaGUgPSBhcHBsaWNh
dGlvbkNhY2hlKCk7CisgICAgICAgIGlmICghY2FjaGUpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIGlmICghY2FjaGUtPmlzQ29tcGxldGUoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIC8vIElmIHRoZSByZXNvdXJjZSBpcyBub3QgYSBIVFRQL0hUVFBT
IEdFVCwgdGhlbiBhYm9ydAorICAgIGlmICghQXBwbGljYXRpb25DYWNoZTo6cmVxdWVzdElzSFRU
UE9ySFRUUFNHZXQocmVxdWVzdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEtVUkwg
ZmFsbGJhY2tVUkw7CisgICAgaWYgKCFjYWNoZS0+dXJsTWF0Y2hlc0ZhbGxiYWNrTmFtZXNwYWNl
KHJlcXVlc3QudXJsKCksICZmYWxsYmFja1VSTCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIHJlc291cmNlID0gY2FjaGUtPnJlc291cmNlRm9yVVJMKGZhbGxiYWNrVVJMKTsKKyAgICBB
U1NFUlQocmVzb3VyY2UpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQXBwbGljYXRp
b25DYWNoZUhvc3Q6OnNjaGVkdWxlTG9hZEZhbGxiYWNrUmVzb3VyY2VGcm9tQXBwbGljYXRpb25D
YWNoZShSZXNvdXJjZUxvYWRlciogbG9hZGVyLCBBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSkKK3sK
KyAgICBpZiAoIWlzQXBwbGljYXRpb25DYWNoZUVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZTsKKyAgICBpZiAo
IWdldEFwcGxpY2F0aW9uQ2FjaGVGYWxsYmFja1Jlc291cmNlKGxvYWRlci0+cmVxdWVzdCgpLCBy
ZXNvdXJjZSwgY2FjaGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2RvY3VtZW50
TG9hZGVyLT5tX3BlbmRpbmdTdWJzdGl0dXRlUmVzb3VyY2VzLnNldChsb2FkZXIsIHJlc291cmNl
KTsKKyAgICBtX2RvY3VtZW50TG9hZGVyLT5kZWxpdmVyU3Vic3RpdHV0ZVJlc291cmNlc0FmdGVy
RGVsYXkoKTsKKyAgICAKKyAgICBsb2FkZXItPmhhbmRsZSgpLT5jYW5jZWwoKTsKKworICAgIHJl
dHVybiB0cnVlOworfQorCitET01BcHBsaWNhdGlvbkNhY2hlOjpTdGF0dXMgQXBwbGljYXRpb25D
YWNoZUhvc3Q6OnN0YXR1cygpIGNvbnN0Cit7CisgICAgQXBwbGljYXRpb25DYWNoZSogY2FjaGUg
PSBhcHBsaWNhdGlvbkNhY2hlKCk7ICAgIAorICAgIGlmICghY2FjaGUpCisgICAgICAgIHJldHVy
biBET01BcHBsaWNhdGlvbkNhY2hlOjpVTkNBQ0hFRDsKKworICAgIHN3aXRjaCAoY2FjaGUtPmdy
b3VwKCktPnVwZGF0ZVN0YXR1cygpKSB7CisgICAgICAgIGNhc2UgQXBwbGljYXRpb25DYWNoZUdy
b3VwOjpDaGVja2luZzoKKyAgICAgICAgICAgIHJldHVybiBET01BcHBsaWNhdGlvbkNhY2hlOjpD
SEVDS0lORzsKKyAgICAgICAgY2FzZSBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OkRvd25sb2FkaW5n
OgorICAgICAgICAgICAgcmV0dXJuIERPTUFwcGxpY2F0aW9uQ2FjaGU6OkRPV05MT0FESU5HOwor
ICAgICAgICBjYXNlIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6SWRsZTogeworICAgICAgICAgICAg
aWYgKGNhY2hlLT5ncm91cCgpLT5pc09ic29sZXRlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IERPTUFwcGxpY2F0aW9uQ2FjaGU6Ok9CU09MRVRFOworICAgICAgICAgICAgaWYgKGNhY2hlICE9
IGNhY2hlLT5ncm91cCgpLT5uZXdlc3RDYWNoZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBE
T01BcHBsaWNhdGlvbkNhY2hlOjpVUERBVEVSRUFEWTsKKyAgICAgICAgICAgIHJldHVybiBET01B
cHBsaWNhdGlvbkNhY2hlOjpJRExFOworICAgICAgICB9CisgICAgfQorCisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIERPTUFwcGxpY2F0aW9uQ2FjaGU6OlVOQ0FDSEVEOwor
fQorCitib29sIEFwcGxpY2F0aW9uQ2FjaGVIb3N0Ojp1cGRhdGUoKQoreworICAgIEFwcGxpY2F0
aW9uQ2FjaGUqIGNhY2hlID0gYXBwbGljYXRpb25DYWNoZSgpOworICAgIGlmICghY2FjaGUpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYWNoZS0+Z3JvdXAoKS0+dXBkYXRlKG1fZG9jdW1l
bnRMb2FkZXItPmZyYW1lKCksIEFwcGxpY2F0aW9uQ2FjaGVVcGRhdGVXaXRob3V0QnJvd3NpbmdD
b250ZXh0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBBcHBsaWNhdGlvbkNhY2hlSG9z
dDo6c3dhcENhY2hlKCkKK3sKKyAgICBBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSA9IGFwcGxpY2F0
aW9uQ2FjaGUoKTsKKyAgICBpZiAoIWNhY2hlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAvLyBJZiB0aGUgZ3JvdXAgb2YgYXBwbGljYXRpb24gY2FjaGVzIHRvIHdoaWNoIGNhY2hlIGJl
bG9uZ3MgaGFzIHRoZSBsaWZlY3ljbGUgc3RhdHVzIG9ic29sZXRlLCB1bmFzc29jaWF0ZSBkb2N1
bWVudCBmcm9tIGNhY2hlLgorICAgIGlmIChjYWNoZS0+Z3JvdXAoKS0+aXNPYnNvbGV0ZSgpKSB7
CisgICAgICAgIGNhY2hlLT5ncm91cCgpLT5kaXNhc3NvY2lhdGVEb2N1bWVudExvYWRlcihtX2Rv
Y3VtZW50TG9hZGVyKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gSWYg
dGhlcmUgaXMgbm8gbmV3ZXIgY2FjaGUsIHJhaXNlIGFuIElOVkFMSURfU1RBVEVfRVJSIGV4Y2Vw
dGlvbi4KKyAgICBBcHBsaWNhdGlvbkNhY2hlKiBuZXdlc3RDYWNoZSA9IGNhY2hlLT5ncm91cCgp
LT5uZXdlc3RDYWNoZSgpOworICAgIGlmIChjYWNoZSA9PSBuZXdlc3RDYWNoZSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIAorICAgIEFTU0VSVChjYWNoZS0+Z3JvdXAoKSA9PSBuZXdlc3RD
YWNoZS0+Z3JvdXAoKSk7CisgICAgc2V0QXBwbGljYXRpb25DYWNoZShuZXdlc3RDYWNoZSk7Cisg
ICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQXBwbGljYXRpb25DYWNoZUhvc3Q6Omlz
QXBwbGljYXRpb25DYWNoZUVuYWJsZWQoKQoreworICAgIHJldHVybiBtX2RvY3VtZW50TG9hZGVy
LT5mcmFtZSgpLT5zZXR0aW5ncygpCisgICAgICAgICAgICYmIG1fZG9jdW1lbnRMb2FkZXItPmZy
YW1lKCktPnNldHRpbmdzKCktPm9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCgpOwor
fQorCit9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgIC8vIEVOQUJMRShBUFBMSUNB
VElPTl9DQUNIRSkKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hl
L0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjpleGVjdXRhYmxl
CiAgICsgKgoKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVI
b3N0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25D
YWNoZUhvc3QuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxp
Y2F0aW9uQ2FjaGVIb3N0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICog
Q29weXJpZ2h0IChjKSAyMDA5LCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIEFwcGxpY2F0aW9uQ2FjaGVIb3N0X2gKKyNkZWZpbmUgQXBwbGljYXRpb25DYWNoZUhvc3Rf
aAorCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKworI2luY2x1ZGUgIkRP
TUFwcGxpY2F0aW9uQ2FjaGUuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiVGhyZWFk
YWJsZUxvYWRlci5oIiAgLy8gZm9yIFN0b3JlZENyZWRlbnRpYWxzCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworICAgIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGU7CisgICAgY2xhc3MgQXBwbGljYXRp
b25DYWNoZUdyb3VwOworICAgIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTsKKyAgICBj
bGFzcyBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTsKKyAgICBjbGFzcyBEb2N1bWVudExvYWRlcjsK
KyAgICBjbGFzcyBSZXNvdXJjZUxvYWRlcjsKKyAgICBjbGFzcyBTdWJzdGl0dXRlRGF0YTsKKwor
ICAgIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGVIb3N0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIEFw
cGxpY2F0aW9uQ2FjaGVIb3N0KERvY3VtZW50TG9hZGVyKik7CisgICAgICAgIH5BcHBsaWNhdGlv
bkNhY2hlSG9zdCgpOworCisgICAgICAgIHZvaWQgc2VsZWN0Q2FjaGVXaXRob3V0TWFuaWZlc3Qo
KTsKKyAgICAgICAgdm9pZCBzZWxlY3RDYWNoZVdpdGhNYW5pZmVzdChjb25zdCBLVVJMJiBtYW5p
ZmVzdFVSTCk7CisKKyAgICAgICAgdm9pZCBtYXliZUxvYWRNYWluUmVzb3VyY2UoUmVzb3VyY2VS
ZXF1ZXN0JiwgU3Vic3RpdHV0ZURhdGEmKTsKKyAgICAgICAgYm9vbCBtYXliZUxvYWRGYWxsYmFj
a0Zvck1haW5SZXNwb25zZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJik7CisgICAgICAgIGJvb2wgbWF5YmVMb2FkRmFsbGJhY2tGb3JNYWluRXJyb3IoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOworICAgICAgICB2b2lk
IG1haW5SZXNvdXJjZURhdGFSZWNlaXZlZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoLCBs
b25nIGxvbmcgbGVuZ3RoUmVjZWl2ZWQsIGJvb2wgYWxsQXRPbmNlKTsKKyAgICAgICAgdm9pZCBm
aW5pc2hlZExvYWRpbmdNYWluUmVzb3VyY2UoKTsKKyAgICAgICAgdm9pZCBmYWlsZWRMb2FkaW5n
TWFpblJlc291cmNlKCk7CisKKyAgICAgICAgYm9vbCBtYXliZUxvYWRSZXNvdXJjZShSZXNvdXJj
ZUxvYWRlciosIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IEtVUkwmIG9yaWdpbmFsVVJMKTsKKyAg
ICAgICAgYm9vbCBtYXliZUxvYWRGYWxsYmFja0ZvclJlZGlyZWN0KFJlc291cmNlTG9hZGVyKiwg
UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgICAgICBib29s
IG1heWJlTG9hZEZhbGxiYWNrRm9yUmVzcG9uc2UoUmVzb3VyY2VMb2FkZXIqLCBjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJik7CisgICAgICAgIGJvb2wgbWF5YmVMb2FkRmFsbGJhY2tGb3JFcnJvcihS
ZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKworICAgICAgICBib29sIG1h
eWJlTG9hZFN5bmNocm9ub3VzbHkoUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VFcnJvciYsIFJl
c291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpOworICAgICAgICB2b2lkIG1heWJl
TG9hZEZhbGxiYWNrU3luY2hyb25vdXNseShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJj
ZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYgZGF0YSk7CisKKyAgICAg
ICAgYm9vbCBjYW5DYWNoZUluUGFnZUNhY2hlKCkgY29uc3Q7CisKKyAgICAgICAgRE9NQXBwbGlj
YXRpb25DYWNoZTo6U3RhdHVzIHN0YXR1cygpIGNvbnN0OyAgCisgICAgICAgIGJvb2wgdXBkYXRl
KCk7CisgICAgICAgIGJvb2wgc3dhcENhY2hlKCk7CisKKyAgICAgICAgdm9pZCBzZXRET01BcHBs
aWNhdGlvbkNhY2hlKERPTUFwcGxpY2F0aW9uQ2FjaGUqIGRvbUFwcGxpY2F0aW9uQ2FjaGUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV9ET01BcHBsaWNhdGlvbkNhY2hlIHx8ICFk
b21BcHBsaWNhdGlvbkNhY2hlKTsKKyAgICAgICAgICAgIG1fRE9NQXBwbGljYXRpb25DYWNoZSA9
IGRvbUFwcGxpY2F0aW9uQ2FjaGU7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIG5vdGlmeUV2
ZW50TGlzdGVuZXIoRE9NQXBwbGljYXRpb25DYWNoZTo6RXZlbnRUeXBlIGV2ZW50VHlwZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKG1fRE9NQXBwbGljYXRpb25DYWNoZSkKKyAgICAgICAg
ICAgICAgICBtX0RPTUFwcGxpY2F0aW9uQ2FjaGUtPmNhbGxFdmVudExpc3RlbmVyKGV2ZW50VHlw
ZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIGNs
YXNzIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDsKKyAgICAgICAgZnJpZW5kIGNsYXNzIEFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlOworCisgICAgICAgIGJvb2wgc2NoZWR1bGVMb2FkRmFsbGJhY2tSZXNv
dXJjZUZyb21BcHBsaWNhdGlvbkNhY2hlKFJlc291cmNlTG9hZGVyKiwgQXBwbGljYXRpb25DYWNo
ZSogPSAwKTsKKyAgICAgICAgYm9vbCBzaG91bGRMb2FkUmVzb3VyY2VGcm9tQXBwbGljYXRpb25D
YWNoZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqJik7
CisgICAgICAgIGJvb2wgZ2V0QXBwbGljYXRpb25DYWNoZUZhbGxiYWNrUmVzb3VyY2UoY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiwgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiYsIEFwcGxpY2F0aW9u
Q2FjaGUqID0gMCk7CisgICAgICAgIHZvaWQgc2V0Q2FuZGlkYXRlQXBwbGljYXRpb25DYWNoZUdy
b3VwKEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogZ3JvdXApOworICAgICAgICBBcHBsaWNhdGlvbkNh
Y2hlR3JvdXAqIGNhbmRpZGF0ZUFwcGxpY2F0aW9uQ2FjaGVHcm91cCgpIGNvbnN0IHsgcmV0dXJu
IG1fY2FuZGlkYXRlQXBwbGljYXRpb25DYWNoZUdyb3VwOyB9CisgICAgICAgIHZvaWQgc2V0QXBw
bGljYXRpb25DYWNoZShQYXNzUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+IGFwcGxpY2F0aW9uQ2Fj
aGUpOworICAgICAgICBBcHBsaWNhdGlvbkNhY2hlKiBhcHBsaWNhdGlvbkNhY2hlKCkgY29uc3Qg
eyByZXR1cm4gbV9hcHBsaWNhdGlvbkNhY2hlLmdldCgpOyB9CisgICAgICAgIEFwcGxpY2F0aW9u
Q2FjaGUqIG1haW5SZXNvdXJjZUFwcGxpY2F0aW9uQ2FjaGUoKSBjb25zdCB7IHJldHVybiBtX21h
aW5SZXNvdXJjZUFwcGxpY2F0aW9uQ2FjaGUuZ2V0KCk7IH0KKworICAgICAgICBib29sIGlzQXBw
bGljYXRpb25DYWNoZUVuYWJsZWQoKTsKKyAgICAgICAgRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50
TG9hZGVyKCkgeyByZXR1cm4gbV9kb2N1bWVudExvYWRlcjsgfQorCisgICAgICAgIERPTUFwcGxp
Y2F0aW9uQ2FjaGUqIG1fRE9NQXBwbGljYXRpb25DYWNoZTsKKyAgICAgICAgRG9jdW1lbnRMb2Fk
ZXIqIG1fZG9jdW1lbnRMb2FkZXI7CisKKyAgICAgICAgLy8gVGhlIGFwcGxpY2F0aW9uIGNhY2hl
IHRoYXQgdGhlIGRvY3VtZW50IGxvYWRlciBpcyBhc3NvY2lhdGVkIHdpdGggKGlmIGFueSkuCisg
ICAgICAgIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBtX2FwcGxpY2F0aW9uQ2FjaGU7CisKKyAg
ICAgICAgLy8gQmVmb3JlIGFuIGFwcGxpY2F0aW9uIGNhY2hlIGhhcyBmaW5pc2hlZCBsb2FkaW5n
LCB0aGlzIHdpbGwgYmUgdGhlIGNhbmRpZGF0ZSBhcHBsaWNhdGlvbgorICAgICAgICAvLyBncm91
cCB0aGF0IHRoZSBkb2N1bWVudCBsb2FkZXIgaXMgYXNzb2NpYXRlZCB3aXRoLgorICAgICAgICBB
cHBsaWNhdGlvbkNhY2hlR3JvdXAqIG1fY2FuZGlkYXRlQXBwbGljYXRpb25DYWNoZUdyb3VwOwor
CisgICAgICAgIC8vIFRoaXMgaXMgdGhlIGFwcGxpY2F0aW9uIGNhY2hlIHRoZSBtYWluIHJlc291
cmNlIHdhcyBsb2FkZWQgZnJvbSAoaWYgYW55KS4KKyAgICAgICAgUmVmUHRyPEFwcGxpY2F0aW9u
Q2FjaGU+IG1fbWFpblJlc291cmNlQXBwbGljYXRpb25DYWNoZTsKKyAgICB9OworCit9ICAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgIC8vIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkK
KyNlbmRpZiAgLy8gQXBwbGljYXRpb25DYWNoZUZyb250ZW5kX2gKClByb3BlcnR5IGNoYW5nZXMg
b246IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmgKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpOYW1lOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBXZWJDb3JlL2xvYWRlci9h
cHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCShyZXZpc2lvbiA0
NjUwNikKKysrIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShPRkZMSU5F
X1dFQl9BUFBMSUNBVElPTlMpCiAKICNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlLmgiCisjaW5j
bHVkZSAiQXBwbGljYXRpb25DYWNoZUhvc3QuaCIKICNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hl
R3JvdXAuaCIKICNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuaCIKICNpbmNsdWRl
ICJDU3RyaW5nLmgiCkBAIC05MzcsNiArOTM4LDE0IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2U6OmVtcHR5KCkKICAgICAgICAgaXQtPnNlY29uZC0+Y2xlYXJTdG9yYWdlSUQoKTsKIH0g
ICAgCiAKK2Jvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnRyYW5zZmVyQXBwbGljYXRpb25D
YWNoZShjb25zdCBTdHJpbmcmIGNhY2hlRGlyZWN0b3J5LCBBcHBsaWNhdGlvbkNhY2hlSG9zdCog
Y2FjaGVIb3N0KQoreworICAgIEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlID0gY2FjaGVIb3N0LT5h
cHBsaWNhdGlvbkNhY2hlKCk7CisgICAgaWYgKCFjYWNoZSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgcmV0dXJuIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZUNvcHlPZkNhY2hlKGNh
Y2hlRGlyZWN0b3J5LCBjYWNoZSk7Cit9CisKIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6
OnN0b3JlQ29weU9mQ2FjaGUoY29uc3QgU3RyaW5nJiBjYWNoZURpcmVjdG9yeSwgQXBwbGljYXRp
b25DYWNoZSogY2FjaGUpCiB7CiAgICAgLy8gQ3JlYXRlIGEgbmV3IGNhY2hlLgpJbmRleDogV2Vi
Q29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oCShy
ZXZpc2lvbiA0NjUwNikKKysrIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgQXBwbGljYXRpb25DYWNoZTsKK2NsYXNzIEFwcGxpY2F0aW9uQ2Fj
aGVIb3N0OwogY2xhc3MgQXBwbGljYXRpb25DYWNoZUdyb3VwOwogY2xhc3MgQXBwbGljYXRpb25D
YWNoZVJlc291cmNlOwogY2xhc3MgS1VSTDsKQEAgLTY5LDYgKzcwLDcgQEAgcHVibGljOgogICAg
IAogICAgIHZvaWQgZW1wdHkoKTsKICAgICAKKyAgICBzdGF0aWMgYm9vbCB0cmFuc2ZlckFwcGxp
Y2F0aW9uQ2FjaGUoY29uc3QgU3RyaW5nJiBjYWNoZURpcmVjdG9yeSwgQXBwbGljYXRpb25DYWNo
ZUhvc3QqKTsKICAgICBzdGF0aWMgYm9vbCBzdG9yZUNvcHlPZkNhY2hlKGNvbnN0IFN0cmluZyYg
Y2FjaGVEaXJlY3RvcnksIEFwcGxpY2F0aW9uQ2FjaGUqKTsKIAogICAgIGJvb2wgbWFuaWZlc3RV
UkxzKFZlY3RvcjxLVVJMPiogdXJscyk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9E
T01BcHBsaWNhdGlvbkNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBj
YWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmNwcAkocmV2aXNpb24gNDY1MDYpCisrKyBXZWJDb3Jl
L2xvYWRlci9hcHBjYWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjgsOSArMjgsNyBAQAogCiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykK
IAotI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGUuaCIKLSNpbmNsdWRlICJBcHBsaWNhdGlvbkNh
Y2hlR3JvdXAuaCIKLSNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuaCIKKyNpbmNs
dWRlICJBcHBsaWNhdGlvbkNhY2hlSG9zdC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgi
CiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFdmVudEV4Y2VwdGlvbi5oIgpAQCAtNDQs
ODAgKzQyLDQ2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIERPTUFwcGxpY2F0aW9uQ2FjaGU6OkRP
TUFwcGxpY2F0aW9uQ2FjaGUoRnJhbWUqIGZyYW1lKQogICAgIDogbV9mcmFtZShmcmFtZSkKIHsK
KyAgICBBU1NFUlQoYXBwbGljYXRpb25DYWNoZUhvc3QoKSk7CisgICAgYXBwbGljYXRpb25DYWNo
ZUhvc3QoKS0+c2V0RE9NQXBwbGljYXRpb25DYWNoZSh0aGlzKTsKIH0KIAogdm9pZCBET01BcHBs
aWNhdGlvbkNhY2hlOjpkaXNjb25uZWN0RnJhbWUoKQogeworICAgIEFwcGxpY2F0aW9uQ2FjaGVI
b3N0KiBjYWNoZUhvc3QgPSBhcHBsaWNhdGlvbkNhY2hlSG9zdCgpOworICAgIGlmIChjYWNoZUhv
c3QpCisgICAgICAgIGNhY2hlSG9zdC0+c2V0RE9NQXBwbGljYXRpb25DYWNoZSgwKTsKICAgICBt
X2ZyYW1lID0gMDsKIH0KIAotQXBwbGljYXRpb25DYWNoZSogRE9NQXBwbGljYXRpb25DYWNoZTo6
YXNzb2NpYXRlZENhY2hlKCkgY29uc3QKK0FwcGxpY2F0aW9uQ2FjaGVIb3N0KiBET01BcHBsaWNh
dGlvbkNhY2hlOjphcHBsaWNhdGlvbkNhY2hlSG9zdCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2Zy
YW1lKQorICAgIGlmICghbV9mcmFtZSB8fCAhbV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9h
ZGVyKCkpCiAgICAgICAgIHJldHVybiAwOwotIAotICAgIHJldHVybiBtX2ZyYW1lLT5sb2FkZXIo
KS0+ZG9jdW1lbnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNoZSgpOworICAgIHJldHVybiBtX2Zy
YW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNoZUhvc3QoKTsK
IH0KIAogdW5zaWduZWQgc2hvcnQgRE9NQXBwbGljYXRpb25DYWNoZTo6c3RhdHVzKCkgY29uc3QK
IHsKLSAgICBBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSA9IGFzc29jaWF0ZWRDYWNoZSgpOyAgICAK
LSAgICBpZiAoIWNhY2hlKQorICAgIEFwcGxpY2F0aW9uQ2FjaGVIb3N0KiBjYWNoZUhvc3QgPSBh
cHBsaWNhdGlvbkNhY2hlSG9zdCgpOworICAgIGlmICghY2FjaGVIb3N0KQogICAgICAgICByZXR1
cm4gVU5DQUNIRUQ7Ci0KLSAgICBzd2l0Y2ggKGNhY2hlLT5ncm91cCgpLT51cGRhdGVTdGF0dXMo
KSkgewotICAgICAgICBjYXNlIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6Q2hlY2tpbmc6Ci0gICAg
ICAgICAgICByZXR1cm4gQ0hFQ0tJTkc7Ci0gICAgICAgIGNhc2UgQXBwbGljYXRpb25DYWNoZUdy
b3VwOjpEb3dubG9hZGluZzoKLSAgICAgICAgICAgIHJldHVybiBET1dOTE9BRElORzsKLSAgICAg
ICAgY2FzZSBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OklkbGU6IHsKLSAgICAgICAgICAgIGlmIChj
YWNoZS0+Z3JvdXAoKS0+aXNPYnNvbGV0ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBPQlNP
TEVURTsKLSAgICAgICAgICAgIGlmIChjYWNoZSAhPSBjYWNoZS0+Z3JvdXAoKS0+bmV3ZXN0Q2Fj
aGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gVVBEQVRFUkVBRFk7Ci0gICAgICAgICAgICBy
ZXR1cm4gSURMRTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIHJldHVybiAwOworICAgIHJldHVybiBjYWNoZUhvc3QtPnN0YXR1cygpOwogfQogCiB2
b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6OnVwZGF0ZShFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAg
ICBBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSA9IGFzc29jaWF0ZWRDYWNoZSgpOwotICAgIGlmICgh
Y2FjaGUpIHsKKyAgICBBcHBsaWNhdGlvbkNhY2hlSG9zdCogY2FjaGVIb3N0ID0gYXBwbGljYXRp
b25DYWNoZUhvc3QoKTsKKyAgICBpZiAoIWNhY2hlSG9zdCB8fCAhY2FjaGVIb3N0LT51cGRhdGUo
KSkKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICAKLSAgICBjYWNoZS0+Z3JvdXAoKS0+dXBkYXRlKG1fZnJhbWUsIEFwcGxpY2F0aW9u
Q2FjaGVVcGRhdGVXaXRob3V0QnJvd3NpbmdDb250ZXh0KTsKIH0KIAogYm9vbCBET01BcHBsaWNh
dGlvbkNhY2hlOjpzd2FwQ2FjaGUoKQogewotICAgIGlmICghbV9mcmFtZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIAotICAgIEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlID0gbV9mcmFtZS0+
bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmFwcGxpY2F0aW9uQ2FjaGUoKTsKLSAgICBpZiAo
IWNhY2hlKQorICAgIEFwcGxpY2F0aW9uQ2FjaGVIb3N0KiBjYWNoZUhvc3QgPSBhcHBsaWNhdGlv
bkNhY2hlSG9zdCgpOworICAgIGlmICghY2FjaGVIb3N0KQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAvLyBJZiB0aGUgZ3JvdXAgb2YgYXBwbGljYXRpb24gY2FjaGVzIHRvIHdoaWNoIGNh
Y2hlIGJlbG9uZ3MgaGFzIHRoZSBsaWZlY3ljbGUgc3RhdHVzIG9ic29sZXRlLCB1bmFzc29jaWF0
ZSBkb2N1bWVudCBmcm9tIGNhY2hlLgotICAgIGlmIChjYWNoZS0+Z3JvdXAoKS0+aXNPYnNvbGV0
ZSgpKSB7Ci0gICAgICAgIGNhY2hlLT5ncm91cCgpLT5kaXNhc3NvY2lhdGVEb2N1bWVudExvYWRl
cihtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSk7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLQotICAgIC8vIElmIHRoZXJlIGlzIG5vIG5ld2VyIGNhY2hlLCByYWlzZSBh
biBJTlZBTElEX1NUQVRFX0VSUiBleGNlcHRpb24uCi0gICAgQXBwbGljYXRpb25DYWNoZSogbmV3
ZXN0Q2FjaGUgPSBjYWNoZS0+Z3JvdXAoKS0+bmV3ZXN0Q2FjaGUoKTsKLSAgICBpZiAoY2FjaGUg
PT0gbmV3ZXN0Q2FjaGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBBU1NFUlQo
Y2FjaGUtPmdyb3VwKCkgPT0gbmV3ZXN0Q2FjaGUtPmdyb3VwKCkpOwotICAgIG1fZnJhbWUtPmxv
YWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5zZXRBcHBsaWNhdGlvbkNhY2hlKG5ld2VzdENhY2hl
KTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gY2FjaGVIb3N0LT5zd2FwQ2Fj
aGUoKTsKIH0KICAgICAKIHZvaWQgRE9NQXBwbGljYXRpb25DYWNoZTo6c3dhcENhY2hlKEV4Y2Vw
dGlvbkNvZGUmIGVjKQpAQCAtMTMxLDEzICs5NSwxMyBAQCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBET01BcHBsaWNhdGlvbkNhCiAgICAgcmV0dXJuIG1fZnJhbWUtPmRvY3VtZW50KCk7CiB9CiAK
LXZvaWQgRE9NQXBwbGljYXRpb25DYWNoZTo6YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNT
dHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVy
LCBib29sKQordm9pZCBET01BcHBsaWNhdGlvbkNhY2hlOjphZGRFdmVudExpc3RlbmVyKGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnROYW1lLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50
TGlzdGVuZXIsIGJvb2wpCiB7Ci0gICAgRXZlbnRMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIGl0ZXIg
PSBtX2V2ZW50TGlzdGVuZXJzLmZpbmQoZXZlbnRUeXBlKTsKKyAgICBFdmVudExpc3RlbmVyc01h
cDo6aXRlcmF0b3IgaXRlciA9IG1fZXZlbnRMaXN0ZW5lcnMuZmluZChldmVudE5hbWUpOwogICAg
IGlmIChpdGVyID09IG1fZXZlbnRMaXN0ZW5lcnMuZW5kKCkpIHsKICAgICAgICAgTGlzdGVuZXJW
ZWN0b3IgbGlzdGVuZXJzOwogICAgICAgICBsaXN0ZW5lcnMuYXBwZW5kKGV2ZW50TGlzdGVuZXIp
OwotICAgICAgICBtX2V2ZW50TGlzdGVuZXJzLmFkZChldmVudFR5cGUsIGxpc3RlbmVycyk7Cisg
ICAgICAgIG1fZXZlbnRMaXN0ZW5lcnMuYWRkKGV2ZW50TmFtZSwgbGlzdGVuZXJzKTsKICAgICB9
IGVsc2UgewogICAgICAgICBMaXN0ZW5lclZlY3RvciYgbGlzdGVuZXJzID0gaXRlci0+c2Vjb25k
OwogICAgICAgICBmb3IgKExpc3RlbmVyVmVjdG9yOjppdGVyYXRvciBsaXN0ZW5lckl0ZXIgPSBs
aXN0ZW5lcnMuYmVnaW4oKTsgbGlzdGVuZXJJdGVyICE9IGxpc3RlbmVycy5lbmQoKTsgKytsaXN0
ZW5lckl0ZXIpIHsKQEAgLTE0NiwxMyArMTEwLDEzIEBAIHZvaWQgRE9NQXBwbGljYXRpb25DYWNo
ZTo6YWRkRXZlbnRMaXN0ZW4KICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbGlzdGVuZXJz
LmFwcGVuZChldmVudExpc3RlbmVyKTsKLSAgICAgICAgbV9ldmVudExpc3RlbmVycy5hZGQoZXZl
bnRUeXBlLCBsaXN0ZW5lcnMpOworICAgICAgICBtX2V2ZW50TGlzdGVuZXJzLmFkZChldmVudE5h
bWUsIGxpc3RlbmVycyk7CiAgICAgfSAgICAKIH0KIAotdm9pZCBET01BcHBsaWNhdGlvbkNhY2hl
OjpyZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVu
dExpc3RlbmVyKiBldmVudExpc3RlbmVyLCBib29sKQordm9pZCBET01BcHBsaWNhdGlvbkNhY2hl
OjpyZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnROYW1lLCBFdmVu
dExpc3RlbmVyKiBldmVudExpc3RlbmVyLCBib29sKQogewotICAgIEV2ZW50TGlzdGVuZXJzTWFw
OjppdGVyYXRvciBpdGVyID0gbV9ldmVudExpc3RlbmVycy5maW5kKGV2ZW50VHlwZSk7CisgICAg
RXZlbnRMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2V2ZW50TGlzdGVuZXJzLmZpbmQo
ZXZlbnROYW1lKTsKICAgICBpZiAoaXRlciA9PSBtX2V2ZW50TGlzdGVuZXJzLmVuZCgpKQogICAg
ICAgICByZXR1cm47CiAgICAgCkBAIC0xNzEsNyArMTM1LDcgQEAgYm9vbCBET01BcHBsaWNhdGlv
bkNhY2hlOjpkaXNwYXRjaEV2ZW50KAogICAgICAgICBlYyA9IEV2ZW50RXhjZXB0aW9uOjpVTlNQ
RUNJRklFRF9FVkVOVF9UWVBFX0VSUjsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAg
IAorCiAgICAgTGlzdGVuZXJWZWN0b3IgbGlzdGVuZXJzQ29weSA9IG1fZXZlbnRMaXN0ZW5lcnMu
Z2V0KGV2ZW50LT50eXBlKCkpOwogICAgIGZvciAoTGlzdGVuZXJWZWN0b3I6OmNvbnN0X2l0ZXJh
dG9yIGxpc3RlbmVySXRlciA9IGxpc3RlbmVyc0NvcHkuYmVnaW4oKTsgbGlzdGVuZXJJdGVyICE9
IGxpc3RlbmVyc0NvcHkuZW5kKCk7ICsrbGlzdGVuZXJJdGVyKSB7CiAgICAgICAgIGV2ZW50LT5z
ZXRUYXJnZXQodGhpcyk7CkBAIC0xODIsMTEgKzE0NiwxMSBAQCBib29sIERPTUFwcGxpY2F0aW9u
Q2FjaGU6OmRpc3BhdGNoRXZlbnQoCiAgICAgcmV0dXJuICFldmVudC0+ZGVmYXVsdFByZXZlbnRl
ZCgpOwogfQogCi12b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxMaXN0ZW5lcihjb25zdCBB
dG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIpCit2b2lkIERP
TUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50
TmFtZSwgRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIpCiB7CiAgICAgQVNTRVJUKG1fZnJhbWUpOwog
ICAgIAotICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50VHlwZSwg
ZmFsc2UsIGZhbHNlKTsKKyAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShl
dmVudE5hbWUsIGZhbHNlLCBmYWxzZSk7CiAgICAgaWYgKGxpc3RlbmVyKSB7CiAgICAgICAgIGV2
ZW50LT5zZXRUYXJnZXQodGhpcyk7CiAgICAgICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KHRo
aXMpOwpAQCAtMTk4LDQ1ICsxNjIsNTUgQEAgdm9pZCBET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxs
TGlzdGVuZXIoYwogICAgIEFTU0VSVCghZWMpOyAgICAKIH0KIAotdm9pZCBET01BcHBsaWNhdGlv
bkNhY2hlOjpjYWxsQ2hlY2tpbmdMaXN0ZW5lcigpCisvLyBzdGF0aWMKK2NvbnN0IEF0b21pY1N0
cmluZyYgRE9NQXBwbGljYXRpb25DYWNoZTo6dG9FdmVudE5hbWUoRXZlbnRUeXBlIGV2ZW50VHlw
ZSkKIHsKLSAgICBjYWxsTGlzdGVuZXIoZXZlbnROYW1lcygpLmNoZWNraW5nRXZlbnQsIG1fb25D
aGVja2luZ0xpc3RlbmVyLmdldCgpKTsKLX0KLQotdm9pZCBET01BcHBsaWNhdGlvbkNhY2hlOjpj
YWxsRXJyb3JMaXN0ZW5lcigpCi17Ci0gICAgY2FsbExpc3RlbmVyKGV2ZW50TmFtZXMoKS5lcnJv
ckV2ZW50LCBtX29uRXJyb3JMaXN0ZW5lci5nZXQoKSk7Ci19Ci0KLXZvaWQgRE9NQXBwbGljYXRp
b25DYWNoZTo6Y2FsbE5vVXBkYXRlTGlzdGVuZXIoKQotewotICAgIGNhbGxMaXN0ZW5lcihldmVu
dE5hbWVzKCkubm91cGRhdGVFdmVudCwgbV9vbk5vVXBkYXRlTGlzdGVuZXIuZ2V0KCkpOwotfQot
Ci12b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxEb3dubG9hZGluZ0xpc3RlbmVyKCkKLXsK
LSAgICBjYWxsTGlzdGVuZXIoZXZlbnROYW1lcygpLmRvd25sb2FkaW5nRXZlbnQsIG1fb25Eb3du
bG9hZGluZ0xpc3RlbmVyLmdldCgpKTsKLX0KLQotdm9pZCBET01BcHBsaWNhdGlvbkNhY2hlOjpj
YWxsUHJvZ3Jlc3NMaXN0ZW5lcigpCi17Ci0gICAgY2FsbExpc3RlbmVyKGV2ZW50TmFtZXMoKS5w
cm9ncmVzc0V2ZW50LCBtX29uUHJvZ3Jlc3NMaXN0ZW5lci5nZXQoKSk7Ci19Ci0KLXZvaWQgRE9N
QXBwbGljYXRpb25DYWNoZTo6Y2FsbFVwZGF0ZVJlYWR5TGlzdGVuZXIoKQotewotICAgIGNhbGxM
aXN0ZW5lcihldmVudE5hbWVzKCkudXBkYXRlcmVhZHlFdmVudCwgbV9vblVwZGF0ZVJlYWR5TGlz
dGVuZXIuZ2V0KCkpOworICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7CisgICAgICAgIGNhc2UgQ0hF
Q0tJTkdfRVZFTlQ6CisgICAgICAgICAgICByZXR1cm4gZXZlbnROYW1lcygpLmNoZWNraW5nRXZl
bnQ7CisgICAgICAgIGNhc2UgRVJST1JfRVZFTlQ6CisgICAgICAgICAgICByZXR1cm4gZXZlbnRO
YW1lcygpLmVycm9yRXZlbnQ7CisgICAgICAgIGNhc2UgTk9VUERBVEVfRVZFTlQ6CisgICAgICAg
ICAgICByZXR1cm4gZXZlbnROYW1lcygpLm5vdXBkYXRlRXZlbnQ7CisgICAgICAgIGNhc2UgRE9X
TkxPQURJTkdfRVZFTlQ6CisgICAgICAgICAgICByZXR1cm4gZXZlbnROYW1lcygpLmRvd25sb2Fk
aW5nRXZlbnQ7CisgICAgICAgIGNhc2UgUFJPR1JFU1NfRVZFTlQ6CisgICAgICAgICAgICByZXR1
cm4gZXZlbnROYW1lcygpLnByb2dyZXNzRXZlbnQ7CisgICAgICAgIGNhc2UgVVBEQVRFUkVBRFlf
RVZFTlQ6CisgICAgICAgICAgICByZXR1cm4gZXZlbnROYW1lcygpLnVwZGF0ZXJlYWR5RXZlbnQ7
CisgICAgICAgIGNhc2UgQ0FDSEVEX0VWRU5UOgorICAgICAgICAgICAgcmV0dXJuIGV2ZW50TmFt
ZXMoKS5jYWNoZWRFdmVudDsKKyAgICAgICAgY2FzZSBPQlNPTEVURV9FVkVOVDogICAgICAgICAg
ICAKKyAgICAgICAgICAgIHJldHVybiBldmVudE5hbWVzKCkub2Jzb2xldGVFdmVudDsKKyAgICB9
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5lcnJv
ckV2ZW50OwogfQogCi12b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxDYWNoZWRMaXN0ZW5l
cigpCisvLyBzdGF0aWMKK0RPTUFwcGxpY2F0aW9uQ2FjaGU6OkV2ZW50VHlwZSBET01BcHBsaWNh
dGlvbkNhY2hlOjp0b0V2ZW50VHlwZShjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50TmFtZSkKIHsK
LSAgICBjYWxsTGlzdGVuZXIoZXZlbnROYW1lcygpLmNhY2hlZEV2ZW50LCBtX29uQ2FjaGVkTGlz
dGVuZXIuZ2V0KCkpOworICAgIGlmIChldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLmNoZWNraW5n
RXZlbnQpCisgICAgICAgIHJldHVybiBDSEVDS0lOR19FVkVOVDsKKyAgICBpZiAoZXZlbnROYW1l
ID09IGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50KQorICAgICAgICByZXR1cm4gRVJST1JfRVZFTlQ7
CisgICAgaWYgKGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkubm91cGRhdGVFdmVudCkKKyAgICAg
ICAgcmV0dXJuIE5PVVBEQVRFX0VWRU5UOworICAgIGlmIChldmVudE5hbWUgPT0gZXZlbnROYW1l
cygpLmRvd25sb2FkaW5nRXZlbnQpCisgICAgICAgIHJldHVybiBET1dOTE9BRElOR19FVkVOVDsK
KyAgICBpZiAoZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5wcm9ncmVzc0V2ZW50KQorICAgICAg
ICByZXR1cm4gUFJPR1JFU1NfRVZFTlQ7CisgICAgaWYgKGV2ZW50TmFtZSA9PSBldmVudE5hbWVz
KCkudXBkYXRlcmVhZHlFdmVudCkKKyAgICAgICAgcmV0dXJuIFVQREFURVJFQURZX0VWRU5UOwor
ICAgIGlmIChldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLmNhY2hlZEV2ZW50KQorICAgICAgICBy
ZXR1cm4gQ0FDSEVEX0VWRU5UOworICAgIGlmIChldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLm9i
c29sZXRlRXZlbnQpCisgICAgICAgIHJldHVybiBPQlNPTEVURV9FVkVOVDsKKyAgCisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEVSUk9SX0VWRU5UOwogfQogCi12b2lkIERP
TUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxPYnNvbGV0ZUxpc3RlbmVyKCkKLXsKLSAgICBjYWxsTGlz
dGVuZXIoZXZlbnROYW1lcygpLm9ic29sZXRlRXZlbnQsIG1fb25PYnNvbGV0ZUxpc3RlbmVyLmdl
dCgpKTsKLX0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBXZWJDb3JlL2xvYWRl
ci9hcHBjYWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9s
b2FkZXIvYXBwY2FjaGUvRE9NQXBwbGljYXRpb25DYWNoZS5oCShyZXZpc2lvbiA0NjUwNikKKysr
IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMzgsNyArMzgsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEFw
cGxpY2F0aW9uQ2FjaGU7CitjbGFzcyBBcHBsaWNhdGlvbkNhY2hlSG9zdDsKIGNsYXNzIEF0b21p
Y1N0cmluZ0ltcGw7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEtVUkw7CkBAIC01OCwxNSArNTgsMzMg
QEAgcHVibGljOgogICAgICAgICBPQlNPTEVURSA9IDUKICAgICB9OwogCisgICAgZW51bSBFdmVu
dFR5cGUgeworICAgICAgICBDSEVDS0lOR19FVkVOVCA9IDAsCisgICAgICAgIEVSUk9SX0VWRU5U
LAorICAgICAgICBOT1VQREFURV9FVkVOVCwKKyAgICAgICAgRE9XTkxPQURJTkdfRVZFTlQsCisg
ICAgICAgIFBST0dSRVNTX0VWRU5ULAorICAgICAgICBVUERBVEVSRUFEWV9FVkVOVCwKKyAgICAg
ICAgQ0FDSEVEX0VWRU5ULAorICAgICAgICBPQlNPTEVURV9FVkVOVAorICAgIH07CisKICAgICB1
bnNpZ25lZCBzaG9ydCBzdGF0dXMoKSBjb25zdDsKLSAgICAKICAgICB2b2lkIHVwZGF0ZShFeGNl
cHRpb25Db2RlJik7CiAgICAgdm9pZCBzd2FwQ2FjaGUoRXhjZXB0aW9uQ29kZSYpOwotICAgIAot
ICAgIHZpcnR1YWwgdm9pZCBhZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZl
bnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+LCBib29sIHVzZUNhcHR1cmUpOwotICAg
IHZpcnR1YWwgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZl
bnRUeXBlLCBFdmVudExpc3RlbmVyKiwgYm9vbCB1c2VDYXB0dXJlKTsKKworICAgIC8vIEV2ZW50
IGxpc3RlbmVyIGF0dHJpYnV0ZXMgYnkgRXZlbnRUeXBlCisKKyAgICB2b2lkIHNldEF0dHJpYnV0
ZUV2ZW50TGlzdGVuZXIoRXZlbnRUeXBlIHR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4g
ZXZlbnRMaXN0ZW5lcikgeyBtX2F0dHJpYnV0ZUV2ZW50TGlzdGVuZXJzW3R5cGVdID0gZXZlbnRM
aXN0ZW5lcjsgfQorICAgIEV2ZW50TGlzdGVuZXIqIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIo
RXZlbnRUeXBlIHR5cGUpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlRXZlbnRMaXN0ZW5lcnNb
dHlwZV0uZ2V0KCk7IH0KKyAgICB2b2lkIGNsZWFyQXR0cmlidXRlRXZlbnRMaXN0ZW5lcihFdmVu
dFR5cGUgdHlwZSkgeyBtX2F0dHJpYnV0ZUV2ZW50TGlzdGVuZXJzW3R5cGVdID0gMDsgfQorICAg
IHZvaWQgY2FsbEV2ZW50TGlzdGVuZXIoRXZlbnRUeXBlIHR5cGUpIHsgY2FsbExpc3RlbmVyKHRv
RXZlbnROYW1lKHR5cGUpLCBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKHR5cGUpKTsgfQorCisg
ICAgLy8gRXZlbnRUYXJnZXQgaW1wbAorCisgICAgdmlydHVhbCB2b2lkIGFkZEV2ZW50TGlzdGVu
ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudE5hbWUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5l
cj4sIGJvb2wgdXNlQ2FwdHVyZSk7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUV2ZW50TGlzdGVu
ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudE5hbWUsIEV2ZW50TGlzdGVuZXIqLCBib29sIHVz
ZUNhcHR1cmUpOwogICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZl
bnQ+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgCiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPEV2
ZW50TGlzdGVuZXI+ID4gTGlzdGVuZXJWZWN0b3I7CiAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21p
Y1N0cmluZywgTGlzdGVuZXJWZWN0b3I+IEV2ZW50TGlzdGVuZXJzTWFwOwogICAgIEV2ZW50TGlz
dGVuZXJzTWFwJiBldmVudExpc3RlbmVycygpIHsgcmV0dXJuIG1fZXZlbnRMaXN0ZW5lcnM7IH0K
QEAgLTc0LDYxICs5Miw1NCBAQCBwdWJsaWM6CiAgICAgdXNpbmcgUmVmQ291bnRlZDxET01BcHBs
aWNhdGlvbkNhY2hlPjo6cmVmOwogICAgIHVzaW5nIFJlZkNvdW50ZWQ8RE9NQXBwbGljYXRpb25D
YWNoZT46OmRlcmVmOwogCi0gICAgdm9pZCBzZXRPbmNoZWNraW5nKFBhc3NSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBtX29uQ2hlY2tpbmdMaXN0ZW5lciA9IGV2ZW50TGlz
dGVuZXI7IH0KLSAgICBFdmVudExpc3RlbmVyKiBvbmNoZWNraW5nKCkgY29uc3QgeyByZXR1cm4g
bV9vbkNoZWNraW5nTGlzdGVuZXIuZ2V0KCk7IH0KKyAgICAvLyBFeHBsaWNpdGx5IG5hbWVkIGF0
dHJpYnV0ZSBldmVudCBsaXN0ZW5lciBoZWxwZXJzCiAKLSAgICB2b2lkIHNldE9uZXJyb3IoUGFz
c1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fb25FcnJvckxpc3RlbmVy
ID0gZXZlbnRMaXN0ZW5lcjsgfQotICAgIEV2ZW50TGlzdGVuZXIqIG9uZXJyb3IoKSBjb25zdCB7
IHJldHVybiBtX29uRXJyb3JMaXN0ZW5lci5nZXQoKTsgfQorICAgIHZvaWQgc2V0T25jaGVja2lu
ZyhQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyKSB7IHNldEF0dHJpYnV0ZUV2ZW50
TGlzdGVuZXIoQ0hFQ0tJTkdfRVZFTlQsIGxpc3RlbmVyKTsgfQorICAgIEV2ZW50TGlzdGVuZXIq
IG9uY2hlY2tpbmcoKSBjb25zdCB7IHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKENI
RUNLSU5HX0VWRU5UKTsgfQogCi0gICAgdm9pZCBzZXRPbm5vdXBkYXRlKFBhc3NSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBtX29uTm9VcGRhdGVMaXN0ZW5lciA9IGV2ZW50
TGlzdGVuZXI7IH0KLSAgICBFdmVudExpc3RlbmVyKiBvbm5vdXBkYXRlKCkgY29uc3QgeyByZXR1
cm4gbV9vbk5vVXBkYXRlTGlzdGVuZXIuZ2V0KCk7IH0KKyAgICB2b2lkIHNldE9uZXJyb3IoUGFz
c1JlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lcikgeyBzZXRBdHRyaWJ1dGVFdmVudExpc3Rl
bmVyKEVSUk9SX0VWRU5ULCBsaXN0ZW5lcik7fQorICAgIEV2ZW50TGlzdGVuZXIqIG9uZXJyb3Io
KSBjb25zdCB7IHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKEVSUk9SX0VWRU5UKTsg
fQogCi0gICAgdm9pZCBzZXRPbmRvd25sb2FkaW5nKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4g
ZXZlbnRMaXN0ZW5lcikgeyBtX29uRG93bmxvYWRpbmdMaXN0ZW5lciA9IGV2ZW50TGlzdGVuZXI7
IH0KLSAgICBFdmVudExpc3RlbmVyKiBvbmRvd25sb2FkaW5nKCkgY29uc3QgeyByZXR1cm4gbV9v
bkRvd25sb2FkaW5nTGlzdGVuZXIuZ2V0KCk7IH0KLSAgICAKLSAgICB2b2lkIHNldE9ucHJvZ3Jl
c3MoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fb25Qcm9ncmVz
c0xpc3RlbmVyID0gZXZlbnRMaXN0ZW5lcjsgfQotICAgIEV2ZW50TGlzdGVuZXIqIG9ucHJvZ3Jl
c3MoKSBjb25zdCB7IHJldHVybiBtX29uUHJvZ3Jlc3NMaXN0ZW5lci5nZXQoKTsgfQorICAgIHZv
aWQgc2V0T25ub3VwZGF0ZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyKSB7IHNl
dEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoTk9VUERBVEVfRVZFTlQsIGxpc3RlbmVyKTsgfQorICAg
IEV2ZW50TGlzdGVuZXIqIG9ubm91cGRhdGUoKSBjb25zdCB7IHJldHVybiBnZXRBdHRyaWJ1dGVF
dmVudExpc3RlbmVyKE5PVVBEQVRFX0VWRU5UKTsgfQorCisgICAgdm9pZCBzZXRPbmRvd25sb2Fk
aW5nKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIpIHsgc2V0QXR0cmlidXRlRXZl
bnRMaXN0ZW5lcihET1dOTE9BRElOR19FVkVOVCwgbGlzdGVuZXIpOyB9CisgICAgRXZlbnRMaXN0
ZW5lciogb25kb3dubG9hZGluZygpIGNvbnN0IHsgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlz
dGVuZXIoRE9XTkxPQURJTkdfRVZFTlQpOyB9CisKKyAgICB2b2lkIHNldE9ucHJvZ3Jlc3MoUGFz
c1JlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lcikgeyBzZXRBdHRyaWJ1dGVFdmVudExpc3Rl
bmVyKFBST0dSRVNTX0VWRU5ULCBsaXN0ZW5lcik7IH0KKyAgICBFdmVudExpc3RlbmVyKiBvbnBy
b2dyZXNzKCkgY29uc3QgeyByZXR1cm4gZ2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihQUk9HUkVT
U19FVkVOVCk7IH0KIAotICAgIHZvaWQgc2V0T251cGRhdGVyZWFkeShQYXNzUmVmUHRyPEV2ZW50
TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpIHsgbV9vblVwZGF0ZVJlYWR5TGlzdGVuZXIgPSBldmVu
dExpc3RlbmVyOyB9Ci0gICAgRXZlbnRMaXN0ZW5lciogb251cGRhdGVyZWFkeSgpIGNvbnN0IHsg
cmV0dXJuIG1fb25VcGRhdGVSZWFkeUxpc3RlbmVyLmdldCgpOyB9CisgICAgdm9pZCBzZXRPbnVw
ZGF0ZXJlYWR5KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIpIHsgc2V0QXR0cmli
dXRlRXZlbnRMaXN0ZW5lcihVUERBVEVSRUFEWV9FVkVOVCwgbGlzdGVuZXIpOyB9CisgICAgRXZl
bnRMaXN0ZW5lciogb251cGRhdGVyZWFkeSgpIGNvbnN0IHsgcmV0dXJuIGdldEF0dHJpYnV0ZUV2
ZW50TGlzdGVuZXIoVVBEQVRFUkVBRFlfRVZFTlQpOyB9CiAKLSAgICB2b2lkIHNldE9uY2FjaGVk
KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBtX29uQ2FjaGVkTGlz
dGVuZXIgPSBldmVudExpc3RlbmVyOyB9Ci0gICAgRXZlbnRMaXN0ZW5lciogb25jYWNoZWQoKSBj
b25zdCB7IHJldHVybiBtX29uQ2FjaGVkTGlzdGVuZXIuZ2V0KCk7IH0KKyAgICB2b2lkIHNldE9u
Y2FjaGVkKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIpIHsgc2V0QXR0cmlidXRl
RXZlbnRMaXN0ZW5lcihDQUNIRURfRVZFTlQsIGxpc3RlbmVyKTsgfQorICAgIEV2ZW50TGlzdGVu
ZXIqIG9uY2FjaGVkKCkgY29uc3QgeyByZXR1cm4gZ2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihD
QUNIRURfRVZFTlQpOyB9CiAKLSAgICB2b2lkIHNldE9ub2Jzb2xldGUoUGFzc1JlZlB0cjxFdmVu
dExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fb25PYnNvbGV0ZUxpc3RlbmVyID0gZXZlbnRM
aXN0ZW5lcjsgfQotICAgIEV2ZW50TGlzdGVuZXIqIG9ub2Jzb2xldGUoKSBjb25zdCB7IHJldHVy
biBtX29uT2Jzb2xldGVMaXN0ZW5lci5nZXQoKTsgfQorICAgIHZvaWQgc2V0T25vYnNvbGV0ZShQ
YXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyKSB7IHNldEF0dHJpYnV0ZUV2ZW50TGlz
dGVuZXIoT0JTT0xFVEVfRVZFTlQsIGxpc3RlbmVyKTsgfQorICAgIEV2ZW50TGlzdGVuZXIqIG9u
b2Jzb2xldGUoKSBjb25zdCB7IHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKE9CU09M
RVRFX0VWRU5UKTsgfQogCiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CiAgICAgRE9NQXBwbGljYXRpb25DYWNoZSogdG9E
T01BcHBsaWNhdGlvbkNhY2hlKCkgeyByZXR1cm4gdGhpczsgfQogCi0gICAgdm9pZCBjYWxsQ2hl
Y2tpbmdMaXN0ZW5lcigpOwotICAgIHZvaWQgY2FsbEVycm9yTGlzdGVuZXIoKTsgICAgCi0gICAg
dm9pZCBjYWxsTm9VcGRhdGVMaXN0ZW5lcigpOyAgICAKLSAgICB2b2lkIGNhbGxEb3dubG9hZGlu
Z0xpc3RlbmVyKCk7Ci0gICAgdm9pZCBjYWxsUHJvZ3Jlc3NMaXN0ZW5lcigpOwotICAgIHZvaWQg
Y2FsbFVwZGF0ZVJlYWR5TGlzdGVuZXIoKTsKLSAgICB2b2lkIGNhbGxDYWNoZWRMaXN0ZW5lcigp
OwotICAgIHZvaWQgY2FsbE9ic29sZXRlTGlzdGVuZXIoKTsKLSAgICAKKyAgICBzdGF0aWMgY29u
c3QgQXRvbWljU3RyaW5nJiB0b0V2ZW50TmFtZShFdmVudFR5cGUgZXZlbnRUeXBlKTsKKyAgICBz
dGF0aWMgRXZlbnRUeXBlIHRvRXZlbnRUeXBlKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnROYW1l
KTsKKwogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUmVmQ291bnRlZDxET01BcHBsaWNhdGlv
bkNhY2hlPjsKKyAgICAKICAgICBET01BcHBsaWNhdGlvbkNhY2hlKEZyYW1lKik7Ci0gICAgdm9p
ZCBjYWxsTGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVu
ZXIqKTsKKyAgICB+RE9NQXBwbGljYXRpb25DYWNoZSgpIHsgQVNTRVJUKCFtX2ZyYW1lKTsgfQor
CisgICAgdm9pZCBjYWxsTGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudE5hbWUsIEV2
ZW50TGlzdGVuZXIqKTsKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7
IHJlZigpOyB9CiAgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7
IH0KIAotICAgIEFwcGxpY2F0aW9uQ2FjaGUqIGFzc29jaWF0ZWRDYWNoZSgpIGNvbnN0OworICAg
IEFwcGxpY2F0aW9uQ2FjaGVIb3N0KiBhcHBsaWNhdGlvbkNhY2hlSG9zdCgpIGNvbnN0OwogICAg
IGJvb2wgc3dhcENhY2hlKCk7CiAgICAgCi0gICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1fb25D
aGVja2luZ0xpc3RlbmVyOwotICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBtX29uRXJyb3JMaXN0
ZW5lcjsKLSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9vbk5vVXBkYXRlTGlzdGVuZXI7Ci0g
ICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1fb25Eb3dubG9hZGluZ0xpc3RlbmVyOwotICAgIFJl
ZlB0cjxFdmVudExpc3RlbmVyPiBtX29uUHJvZ3Jlc3NMaXN0ZW5lcjsKLSAgICBSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4gbV9vblVwZGF0ZVJlYWR5TGlzdGVuZXI7Ci0gICAgUmVmUHRyPEV2ZW50TGlz
dGVuZXI+IG1fb25DYWNoZWRMaXN0ZW5lcjsKLSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9v
bk9ic29sZXRlTGlzdGVuZXI7Ci0gICAgCisgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1fYXR0
cmlidXRlRXZlbnRMaXN0ZW5lcnNbT0JTT0xFVEVfRVZFTlQgKyAxXTsKKwogICAgIEV2ZW50TGlz
dGVuZXJzTWFwIG1fZXZlbnRMaXN0ZW5lcnM7CiAKICAgICBGcmFtZSogbV9mcmFtZTsKSW5kZXg6
IFdlYkNvcmUvcGFnZS9jaHJvbWl1bS9DaHJvbWVDbGllbnRDaHJvbWl1bS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGFnZS9jaHJvbWl1bS9DaHJvbWVDbGllbnRDaHJvbWl1bS5oCShyZXZpc2lv
biA0NjUwNikKKysrIFdlYkNvcmUvcGFnZS9jaHJvbWl1bS9DaHJvbWVDbGllbnRDaHJvbWl1bS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIC8vIFRPRE8oeGppKTogYWRkZWQgdGVtcHJhcmlseSB0byBtYWtlIENocm9taXVtIGNv
bXBpbGUgYWZ0ZXIgcGljayB1cCB0aGlzCiAgICAgICAgIC8vIFdlYmtpdCBwYXRjaC4gU2hvdWxk
IGJlIHJlbW92ZWQgYWZ0ZXIgYWRkaW5nIGl0IGluIENocm9taXVtJ3Mgb3duIGNvZGUuCiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBzZXRUb29sVGlwKGNvbnN0IFN0cmluZyYgdG9vbHRpcF90ZXh0LCBU
ZXh0RGlyZWN0aW9uIGRpcikgeyB9CisKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJ
T05TKQ0KKyAgICAgICAgLy8gQ2FsbGJhY2sgaW52b2tlZCB3aGVuIHRoZSBhcHBsaWNhdGlvbiBj
YWNoZSBmYWlscyB0byBzYXZlIGEgY2FjaGUgb2JqZWN0DQorICAgICAgICAvLyBiZWNhdXNlIHN0
b3JpbmcgaXQgd291bGQgZ3JvdyB0aGUgZGF0YWJhc2UgZmlsZSBwYXN0IGl0cyBkZWZpbmVkIG1h
eGltdW0NCisgICAgICAgIC8vIHNpemUgb3IgcGFzdCB0aGUgYW1vdW50IG9mIGZyZWUgc3BhY2Ug
b24gdGhlIGRldmljZS4gDQorICAgICAgICAvLyBUaGUgY2hyb21lIGNsaWVudCB3b3VsZCBuZWVk
IHRvIHRha2Ugc29tZSBhY3Rpb24gc3VjaCBhcyBldmljdGluZyBzb21lDQorICAgICAgICAvLyBv
bGQgY2FjaGVzLg0KKyAgICAgICAgdmlydHVhbCB2b2lkIHJlYWNoZWRNYXhBcHBDYWNoZVNpemUo
aW50NjRfdCBzcGFjZU5lZWRlZCkgeyB9DQorI2VuZGlmCiAgICAgfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9LVVJMR29vZ2xlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0tVUkxHb29nbGUuY3BwCShyZXZpc2lvbiA0NjUwNikK
KysrIFdlYkNvcmUvcGxhdGZvcm0vS1VSTEdvb2dsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1
Nyw2ICs5NTcsMzIgQEAgaW5saW5lIGJvb2wgS1VSTDo6cHJvdG9jb2xJcyhjb25zdCBTdHJpbgog
ICAgIHJldHVybiBXZWJDb3JlOjpwcm90b2NvbElzKHN0cmluZywgcHJvdG9jb2wpOwogfQogCiti
b29sIHByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbChjb25zdCBLVVJMJiBhLCBjb25zdCBLVVJM
JiBiKQoreworICAgIGlmIChhLnBhcnNlZCgpLnNjaGVtZS5lbmQoKSAhPSBiLnBhcnNlZCgpLnNj
aGVtZS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaW50IGhvc3RTdGFydEEg
PSBhLmhvc3RTdGFydCgpOworICAgIGludCBob3N0U3RhcnRCID0gYi5ob3N0U3RhcnQoKTsKKyAg
ICBpZiAoYS5ob3N0RW5kKCkgLSBob3N0U3RhcnRBICE9IGIuaG9zdEVuZCgpIC0gaG9zdFN0YXJ0
QikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQ2hlY2sgdGhlIHNjaGVtZQorICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgYS5wYXJzZWQoKS5zY2hlbWUuZW5kKCk7ICsraSkKKyAgICAg
ICAgaWYgKGEuc3RyaW5nKClbaV0gIT0gYi5zdHJpbmcoKVtpXSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICAvLyBBbmQgdGhlIGhvc3QKKyAgICBmb3IgKGludCBpID0gaG9z
dFN0YXJ0QTsgaSA8IHN0YXRpY19jYXN0PGludD4oYS5ob3N0RW5kKCkpOyArK2kpCisgICAgICAg
IGlmIChhLnN0cmluZygpW2ldICE9IGIuc3RyaW5nKClbaV0pCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgaWYgKGEucG9ydCgpICE9IGIucG9ydCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYgLy8gVVNFKEdPT0dMRVVSTCkKSW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA0NjU2MCkKKysr
IFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIw
MDktMDctMjkgIE1pY2hhZWwgTm9yZG1hbiAgPG1pY2hhZWxuQGdvb2dsZS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3ODIxCisKKyAgICAgICAgTW9kcyB0byBrZWVwIHVw
IHdpdGggQXBwbGljYXRpb25DYWNoZUhvc3QgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBXZWJW
aWV3L1dlYkRhdGFTb3VyY2UubW06CisgICAgICAgICgtW1dlYkRhdGFTb3VyY2UgX3RyYW5zZmVy
QXBwbGljYXRpb25DYWNoZTpdKToKKwogMjAwOS0wNy0yOSAgS2V2aW4gTWNDdWxsb3VnaCAgPGtt
Y2N1bGxvdWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4K
SW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJEYXRhU291cmNlLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9tYWMvV2ViVmlldy9XZWJEYXRhU291cmNlLm1tCShyZXZpc2lvbiA0NjUwNikKKysr
IFdlYktpdC9tYWMvV2ViVmlldy9XZWJEYXRhU291cmNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTgsMTQgKzE5OCwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWRkVHlwZXNGcm9tQ2xhc3MoTlNN
CiAgICAgCiAgICAgaWYgKCFsb2FkZXIpCiAgICAgICAgIHJldHVybiBOTzsKLSAgICAKLSAgICBB
cHBsaWNhdGlvbkNhY2hlKiBjYWNoZSA9IGxvYWRlci0+YXBwbGljYXRpb25DYWNoZSgpOwotICAg
IGlmICghY2FjaGUpCi0gICAgICAgIHJldHVybiBZRVM7Ci0gICAgCisgICAgICAgIAogICAgIE5T
U3RyaW5nICpjYWNoZURpciA9IFtOU1N0cmluZyBfd2Via2l0X2xvY2FsQ2FjaGVEaXJlY3RvcnlX
aXRoQnVuZGxlSWRlbnRpZmllcjpkZXN0aW5hdGlvbkJ1bmRsZUlkZW50aWZpZXJdOwogICAgIAot
ICAgIHJldHVybiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVDb3B5T2ZDYWNoZShjYWNo
ZURpciwgY2FjaGUpOworICAgIHJldHVybiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6dHJhbnNm
ZXJBcHBsaWNhdGlvbkNhY2hlKGNhY2hlRGlyLCBsb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0
KCkpOwogfQogCiBAZW5kCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33759</attachid>
            <date>2009-07-29 18:34:54 -0700</date>
            <delta_ts>2009-07-30 12:58:48 -0700</delta_ts>
            <desc>class ApplicationCacheHost rev2</desc>
            <filename>AppCacheHostPatch_2.txt</filename>
            <type>text/plain</type>
            <size>100803</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjU2OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUzIEBACisyMDA5LTA3LTI5ICBNaWNoYWVsIE5vcmRtYW4gIDxtaWNoYWVsbkBn
b29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzgyMQorCisgICAg
ICAgIEFwcGxpY2F0aW9uQ2FjaGVIb3N0IHJlZmFjdG9yaW5nLgorICAgICAgICAKKyAgICAgICAg
MSkgQmV0dGVyIGVuY2Fwc3VsYXRlIHRoZSBpbnRlcmZhY2VzIGJldHdlZW4gd2ViY29yZSBjb21t
b24gY29kZQorICAgICAgICBhbmQgdGhlIGFwcGNhY2hlIHN5c3RlbSB3aXRoaW4gYSBuZXcgY2xh
c3MgQXBwbGljYXRpb25DYWNoZUhvc3QuCisKKyAgICAgICAgMikgVXNlIHRoYXQgaW50ZXJmYWNl
IHRocm91Z2hvdXQgdGhlIGxvYWRlciBzeXN0ZW0sIHJlcGxhY2luZyBpbmxpbmUgYXBwY2FjaGUg
bG9naWMuCisKKyAgICAgICAgMykgSW1wbGVtZW50IHRoZSBpbnRlcmZhY2UgaW4gdGVybXMgb2Yg
d2ViY29yZSdzIGFwcGNhY2hlIHN5c3RlbS4KKworICAgICAgICA0KSBBZGQgdGhlIG5ldyBmaWxl
cyB0byB2YXJpb3VzIG1ha2VmaWxlcy4KKworICAgICAgICA1KSBJbXBsZW1lbnQgcHJvdG9jb2xI
b3N0QW5kUG9ydEFyZUVxdWFsKCkgaW4gS1VSTEdvb2dsZS5jcHAKKworICAgICAgICBObyBuZXcg
ZmVhdHVyZXMsIG5vIG5ldyB0ZXN0cy4gVGhlIGV4aXN0aW5nIGxheW91dCB0ZXN0cyBhbGwgcGFz
cy4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuYmFzZS5l
eHA6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAg
ICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlU291cmNlcy5ia2w6
CisgICAgICAgICogaHRtbC9IVE1MSHRtbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEh0bWxFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCk6CisgICAgICAgICogbG9hZGVy
L0RvY3VtZW50TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyOjpE
b2N1bWVudExvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6fkRvY3Vt
ZW50TG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyOjptYWluUmVjZWl2
ZWRFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6ZGV0YWNoRnJvbUZy
YW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyOjpzZXRQcmltYXJ5TG9hZENv
bXBsZXRlKToKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRMb2FkZXIuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50TG9hZGVyOjphcHBsaWNhdGlvbkNhY2hlSG9zdCk6CisgICAgICAgICog
bG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpj
YW5DYWNoZVBhZ2VDb250YWluaW5nVGhpc0ZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
TG9hZGVyOjpsb2dDYW5DYWNoZUZyYW1lRGVjaXNpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAgICAqIGxvYWRlci9N
YWluUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWFpblJlc291cmNlTG9h
ZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6TWFpblJlc291cmNl
TG9hZGVyOjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpNYWluUmVzb3VyY2VM
b2FkZXI6OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWFpblJlc291cmNl
TG9hZGVyOjpkaWRGYWlsKToKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5SZXNvdXJjZUxvYWRlcjo6
bG9hZCk6CisgICAgICAgICogbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5oOgorICAgICAgICAq
IGxvYWRlci9SZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxv
YWRlcjo6bG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRlcjo6d2lsbFNlbmRS
ZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVz
cG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6OmRpZEZhaWwpOgorICAg
ICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRlci5oOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNo
ZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRp
b25DYWNoZUdyb3VwOjpzZWxlY3RDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlv
bkNhY2hlR3JvdXA6OnNlbGVjdENhY2hlV2l0aG91dE1hbmlmZXN0VVJMKToKKyAgICAgICAgKFdl
YkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6ZmluaXNoZWRMb2FkaW5nTWFpblJlc291cmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6ZmFpbGVkTG9hZGlu
Z01haW5SZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlR3JvdXA6
OmRpc2Fzc29jaWF0ZURvY3VtZW50TG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0
aW9uQ2FjaGVHcm91cDo6dXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2Fj
aGVHcm91cDo6ZGlkRmluaXNoTG9hZGluZ01hbmlmZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGxpY2F0aW9uQ2FjaGVHcm91cDo6bWFuaWZlc3ROb3RGb3VuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmNoZWNrSWZMb2FkSXNDb21wbGV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OnN0YXJ0TG9hZGluZ0VudHJ5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6YXNzb2NpYXRlRG9jdW1lbnRM
b2FkZXJXaXRoQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FsbENhY2hlTGlzdGVuZXJUYXNr
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FsbENhY2hlTGlzdGVuZXJUYXNrOjpwZXJm
b3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpDYWxsQ2FjaGVMaXN0ZW5lclRhc2s6OkNhbGxD
YWNoZUxpc3RlbmVyVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlR3Jv
dXA6OnBvc3RMaXN0ZW5lclRhc2spOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNh
dGlvbkNhY2hlR3JvdXAuaDoKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25D
YWNoZUhvc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVI
b3N0OjpBcHBsaWNhdGlvbkNhY2hlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlv
bkNhY2hlSG9zdDo6fkFwcGxpY2F0aW9uQ2FjaGVIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGxpY2F0aW9uQ2FjaGVIb3N0OjpzZWxlY3RDYWNoZVdpdGhvdXRNYW5pZmVzdCk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlSG9zdDo6c2VsZWN0Q2FjaGVXaXRoTWFuaWZlc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUhvc3Q6Om1heWJlTG9hZE1haW5S
ZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlSG9zdDo6bWF5YmVM
b2FkRmFsbGJhY2tGb3JNYWluUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRp
b25DYWNoZUhvc3Q6Om1heWJlTG9hZEZhbGxiYWNrRm9yTWFpbkVycm9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVIb3N0OjptYWluUmVzb3VyY2VEYXRhUmVjZWl2ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUhvc3Q6OmZhaWxlZExvYWRpbmdNYWlu
UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUhvc3Q6OmZpbmlz
aGVkTG9hZGluZ01haW5SZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNh
Y2hlSG9zdDo6bWF5YmVMb2FkUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRp
b25DYWNoZUhvc3Q6Om1heWJlTG9hZEZhbGxiYWNrRm9yUmVkaXJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbGljYXRpb25DYWNoZUhvc3Q6Om1heWJlTG9hZEZhbGxiYWNrRm9yUmVzcG9uc2Up
OgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUhvc3Q6Om1heWJlTG9hZEZhbGxi
YWNrRm9yRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUhvc3Q6Om1h
eWJlTG9hZFN5bmNocm9ub3VzbHkpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNo
ZUhvc3Q6Om1heWJlTG9hZEZhbGxiYWNrU3luY2hyb25vdXNseSk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBsaWNhdGlvbkNhY2hlSG9zdDo6Y2FuQ2FjaGVJblBhZ2VDYWNoZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlSG9zdDo6c2V0Q2FuZGlkYXRlQXBwbGljYXRpb25DYWNo
ZUdyb3VwKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpzZXRBcHBs
aWNhdGlvbkNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVIb3N0Ojpz
aG91bGRMb2FkUmVzb3VyY2VGcm9tQXBwbGljYXRpb25DYWNoZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBsaWNhdGlvbkNhY2hlSG9zdDo6Z2V0QXBwbGljYXRpb25DYWNoZUZhbGxiYWNrUmVzb3Vy
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUhvc3Q6OnNjaGVkdWxlTG9h
ZEZhbGxiYWNrUmVzb3VyY2VGcm9tQXBwbGljYXRpb25DYWNoZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBsaWNhdGlvbkNhY2hlSG9zdDo6c3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxp
Y2F0aW9uQ2FjaGVIb3N0Ojp1cGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25D
YWNoZUhvc3Q6OnN3YXBDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hl
SG9zdDo6aXNBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCk6CisgICAgICAgICogbG9hZGVyL2FwcGNh
Y2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QXBw
bGljYXRpb25DYWNoZUhvc3Q6OnNldERPTUFwcGxpY2F0aW9uQ2FjaGUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbGljYXRpb25DYWNoZUhvc3Q6Om5vdGlmeUV2ZW50TGlzdGVuZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUhvc3Q6OmNhbmRpZGF0ZUFwcGxpY2F0aW9uQ2Fj
aGVHcm91cCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlSG9zdDo6YXBwbGlj
YXRpb25DYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlSG9zdDo6bWFp
blJlc291cmNlQXBwbGljYXRpb25DYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlv
bkNhY2hlSG9zdDo6ZG9jdW1lbnRMb2FkZXIpOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9B
cHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlv
bkNhY2hlU3RvcmFnZTo6dHJhbnNmZXJBcHBsaWNhdGlvbkNhY2hlKToKKyAgICAgICAgKiBsb2Fk
ZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaDoKKyAgICAgICAgKiBsb2FkZXIv
YXBwY2FjaGUvRE9NQXBwbGljYXRpb25DYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01B
cHBsaWNhdGlvbkNhY2hlOjpET01BcHBsaWNhdGlvbkNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmRpc2Nvbm5lY3RGcmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpET01BcHBsaWNhdGlvbkNhY2hlOjphcHBsaWNhdGlvbkNhY2hlSG9zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hlOjpzdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6
RE9NQXBwbGljYXRpb25DYWNoZTo6dXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxp
Y2F0aW9uQ2FjaGU6OnN3YXBDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpET01BcHBsaWNhdGlv
bkNhY2hlOjphZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0
aW9uQ2FjaGU6OnJlbW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6RE9NQXBw
bGljYXRpb25DYWNoZTo6ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpET01BcHBs
aWNhdGlvbkNhY2hlOjpjYWxsTGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6RE9NQXBwbGlj
YXRpb25DYWNoZTo6dG9FdmVudE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NQXBwbGljYXRp
b25DYWNoZTo6dG9FdmVudFR5cGUpOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9ET01BcHBs
aWNhdGlvbkNhY2hlLmg6CisgICAgICAgIChXZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hlOjop
OgorICAgICAgICAoV2ViQ29yZTo6RE9NQXBwbGljYXRpb25DYWNoZTo6c2V0QXR0cmlidXRlRXZl
bnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hlOjpnZXRB
dHRyaWJ1dGVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9u
Q2FjaGU6OmNsZWFyQXR0cmlidXRlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpE
T01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3Jl
OjpET01BcHBsaWNhdGlvbkNhY2hlOjpzZXRPbmNoZWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OkRPTUFwcGxpY2F0aW9uQ2FjaGU6Om9uY2hlY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RE9N
QXBwbGljYXRpb25DYWNoZTo6c2V0T25lcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpET01BcHBs
aWNhdGlvbkNhY2hlOjpvbmVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9u
Q2FjaGU6OnNldE9ubm91cGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NQXBwbGljYXRpb25D
YWNoZTo6b25ub3VwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hl
OjpzZXRPbmRvd25sb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2Fj
aGU6Om9uZG93bmxvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RE9NQXBwbGljYXRpb25DYWNo
ZTo6c2V0T25wcm9ncmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hl
OjpvbnByb2dyZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6OnNl
dE9udXBkYXRlcmVhZHkpOgorICAgICAgICAoV2ViQ29yZTo6RE9NQXBwbGljYXRpb25DYWNoZTo6
b251cGRhdGVyZWFkeSk6CisgICAgICAgIChXZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hlOjpz
ZXRPbmNhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hlOjpvbmNh
Y2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hlOjpzZXRPbm9ic29s
ZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6Om9ub2Jzb2xldGUp
OgorICAgICAgICAoV2ViQ29yZTo6RE9NQXBwbGljYXRpb25DYWNoZTo6fkRPTUFwcGxpY2F0aW9u
Q2FjaGUpOgorICAgICAgICAqIHBhZ2UvY2hyb21pdW0vQ2hyb21lQ2xpZW50Q2hyb21pdW0uaDoK
KyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudENocm9taXVtOjpyZWFjaGVkTWF4QXBwQ2Fj
aGVTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9LVVJMR29vZ2xlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbCk6CisKIDIwMDktMDctMjkgIFlvbmcg
TGkgIDx5b25nLmxpQHRvcmNobW9iaWxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHZW9y
Z2UgU3RhaWtvcy4KSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNDY1NjgpCisrKyBXZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMDA2LDYgKzIwMDYsOCBAQCB3ZWJjb3JlX3Nv
dXJjZXMgKz0gXAogCVdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuaCBc
CiAJV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcCBcCiAJ
V2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmggXAorCVdlYkNv
cmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcCBcCisJV2ViQ29yZS9s
b2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3QuaCBcCiAJV2ViQ29yZS9sb2FkZXIv
YXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmNwcCBcCiAJV2ViQ29yZS9sb2FkZXIv
YXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmggXAogCVdlYkNvcmUvbG9hZGVyL2Fw
cGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcCBcCkluZGV4OiBXZWJDb3JlL1dlYkNv
cmUuYmFzZS5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCShyZXZp
c2lvbiA0NjU2OCkKKysrIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkod29ya2luZyBjb3B5KQpA
QCAtNDQzLDcgKzQ0Myw3IEBAIF9fWk43V2ViQ29yZTIyYXBwbGljYXRpb25Jc0FwcGxlTWFpbEV2
CiBfX1pON1dlYkNvcmUyMmNyZWF0ZUZyYWdtZW50RnJvbVRleHRFUE5TXzVSYW5nZUVSS05TXzZT
dHJpbmdFCiBfX1pON1dlYkNvcmUyMmV4dGVybmFsUmVwcmVzZW50YXRpb25FUE5TXzEyUmVuZGVy
T2JqZWN0RQogX19aTjdXZWJDb3JlMjNBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTE0c2V0TWF4aW11
bVNpemVFeAotX19aTjdXZWJDb3JlMjNBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTE2c3RvcmVDb3B5
T2ZDYWNoZUVSS05TXzZTdHJpbmdFUE5TXzE2QXBwbGljYXRpb25DYWNoZUUKK19fWk43V2ViQ29y
ZTIzQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UyNHRyYW5zZmVyQXBwbGljYXRpb25DYWNoZUVSS05T
XzZTdHJpbmdFUE5TXzIwQXBwbGljYXRpb25DYWNoZUhvc3RFCiBfX1pON1dlYkNvcmUyM0FwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlMTdzZXRDYWNoZURpcmVjdG9yeUVSS05TXzZTdHJpbmdFCiBfX1pO
N1dlYkNvcmUyM0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlMTh2YWN1dW1EYXRhYmFzZUZpbGVFdgog
X19aTjdXZWJDb3JlMjNBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTVlbXB0eUV2CkluZGV4OiBXZWJD
b3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2
aXNpb24gNDY1NjgpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAt
MTQyNSw2ICsxNDI1LDggQEAKICAgICAgICAgICAgICdsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRp
b25DYWNoZS5oJywKICAgICAgICAgICAgICdsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNo
ZUdyb3VwLmNwcCcsCiAgICAgICAgICAgICAnbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGVHcm91cC5oJywKKyAgICAgICAgICAgICdsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNo
ZUhvc3QuY3BwJywKKyAgICAgICAgICAgICdsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNo
ZUhvc3QuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZS5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNh
Y2hlUmVzb3VyY2UuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlLmNwcCcsCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDQ2NTY4KQorKysgV2ViQ29yZS9XZWJD
b3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTUxMyw2ICsxNTEzLDcgQEAgSEVBREVSUyArPSBc
CiAgICAgaW5zcGVjdG9yL0phdmFTY3JpcHRQcm9maWxlLmggXAogICAgIGluc3BlY3Rvci9KYXZh
U2NyaXB0UHJvZmlsZU5vZGUuaCBcCiAgICAgbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGVHcm91cC5oIFwKKyAgICBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3QuaCBc
CiAgICAgbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuaCBcCiAgICAgbG9hZGVyL2Fw
cGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5oIFwKICAgICBsb2FkZXIvYXBwY2FjaGUv
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaCBcCkBAIC0zMDMzLDYgKzMwMzQsNyBAQCBJRExfQklO
RElOR1MgKz0gXAogU09VUkNFUyArPSBcCiAgICAgbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9u
Q2FjaGUuY3BwIFwKICAgICBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNw
cCBcCisgICAgbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcCBcCiAgICAg
bG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcCBcCiAgICAgbG9hZGVy
L2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHAgXAogICAgIGxvYWRlci9hcHBj
YWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmNwcCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmVTb3Vy
Y2VzLmJrbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAkocmV2aXNp
b24gNDY1NjgpCisrKyBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAkod29ya2luZyBjb3B5KQpA
QCAtNjc2LDYgKzY3Niw3IEBAIFRoaXMgZmlsZSBjb250YWlucyB0aGUgbGlzdCBvZiBmaWxlcyBu
ZWUKICAgICA8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfTE9BREVSIj4KICAg
ICAgICAgbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuY3BwCiAgICAgICAgIGxvYWRl
ci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwCisgICAgICAgIGxvYWRlci9hcHBj
YWNoZS9BcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAKICAgICAgICAgbG9hZGVyL2FwcGNhY2hlL0Fw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHAKICAgICAgICAgbG9hZGVyL2FwcGNhY2hlL0RPTUFw
cGxpY2F0aW9uQ2FjaGUuY3BwCiAgICAgICAgIGxvYWRlci9hcHBjYWNoZS9NYW5pZmVzdFBhcnNl
ci5jcHAKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24g
NDY1NjgpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzI5Niw2ICsxNzI5NiwxNCBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJ
CQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXGFwcGNhY2hlXEFwcGxpY2F0
aW9uQ2FjaGVIb3N0LmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcYXBwY2FjaGVcQXBwbGljYXRpb25DYWNoZUhvc3Qu
aCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxsb2FkZXJcYXBwY2FjaGVcQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmNwcCINCiAJCQkJ
CT4NCiAJCQkJPC9GaWxlPg0KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiA0NjU2OCkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MjQsNiArNTI0LDggQEAKIAkJMUNG
NkJFMTQwRTlCQjQ2NzAwMjVFMUNEIC8qIE9iakNOb2RlRmlsdGVyQ29uZGl0aW9uLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUNGNkJFMTIwRTlCQjQ2
NzAwMjVFMUNEIC8qIE9iakNOb2RlRmlsdGVyQ29uZGl0aW9uLm1tICovOyB9OwogCQkxQ0Y2QkUx
NTBFOUJCNDY3MDAyNUUxQ0QgLyogT2JqQ05vZGVGaWx0ZXJDb25kaXRpb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDRjZCRTEzMEU5QkI0NjcwMDI1
RTFDRCAvKiBPYmpDTm9kZUZpbHRlckNvbmRpdGlvbi5oICovOyB9OwogCQkxQ0ZBRTMyMzBBNkQ2
QTNGMDAzMjU5M0QgLyogbGlib2JqYy5keWxpYiBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDRkFFMzIyMEE2RDZBM0YwMDMyNTkzRCAvKiBsaWJvYmpj
LmR5bGliICovOyB9OworCQkyNEY1NEVBQzEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRpb25D
YWNoZUhvc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMjRGNTRFQUExMDFGRTkxNDAwMEFFNzQxIC8qIEFwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcCAq
LzsgfTsKKwkJMjRGNTRFQUQxMDFGRTkxNDAwMEFFNzQxIC8qIEFwcGxpY2F0aW9uQ2FjaGVIb3N0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNEY1NEVB
QjEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRpb25DYWNoZUhvc3QuaCAqLzsgfTsKIAkJMjlB
ODEyMjYwRkJCOUMxRDAwNTEwMjkzIC8qIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlBODEyMDgwRkJC
OUMxRDAwNTEwMjkzIC8qIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwICovOyB9OwogCQky
OUE4MTIyNzBGQkI5QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eVRhYmxlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5QTgxMjA5MEZCQjlDMUQw
MDUxMDI5MyAvKiBBY2Nlc3NpYmlsaXR5VGFibGUuY3BwICovOyB9OwogCQkyOUE4MTIyODBGQkI5
QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5QTgxMjBBMEZCQjlDMUQwMDUxMDI5MyAv
KiBBY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwICovOyB9OwpAQCAtNTQ4Nyw2ICs1NDg5LDggQEAK
IAkJMUNGNkJFMTIwRTlCQjQ2NzAwMjVFMUNEIC8qIE9iakNOb2RlRmlsdGVyQ29uZGl0aW9uLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gT2JqQ05vZGVGaWx0ZXJD
b25kaXRpb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDRjZCRTEzMEU5QkI0
NjcwMDI1RTFDRCAvKiBPYmpDTm9kZUZpbHRlckNvbmRpdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBPYmpDTm9kZUZpbHRlckNvbmRpdGlvbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxQ0ZBRTMyMjBBNkQ2QTNGMDAzMjU5M0QgLyogbGlib2JqYy5keWxp
YiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9ICJjb21w
aWxlZC5tYWNoLW8uZHlsaWIiOyBuYW1lID0gbGlib2JqYy5keWxpYjsgcGF0aCA9IC91c3IvbGli
L2xpYm9iamMuZHlsaWI7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CisJCTI0RjU0RUFB
MTAxRkU5MTQwMDBBRTc0MSAvKiBBcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI0RjU0RUFCMTAxRkU5MTQwMDBBRTc0MSAvKiBBcHBs
aWNhdGlvbkNhY2hlSG9zdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcHBs
aWNhdGlvbkNhY2hlSG9zdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyOUE4MTIw
ODBGQkI5QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjlBODEyMDkwRkJCOUMxRDAwNTEw
MjkzIC8qIEFjY2Vzc2liaWxpdHlUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBBY2Nlc3NpYmlsaXR5VGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkyOUE4MTIwQTBGQkI5QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eUFSSUFHcmlk
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlB
UklBR3JpZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NzA4LDYgKzk3MTIs
OCBAQAogCQkxQThGNkJCMDBEQjU1Q0RDMDAxREI3OTQgLyogYXBwY2FjaGUgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTI0RjU0RUFBMTAxRkU5MTQwMDBB
RTc0MSAvKiBBcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAgKi8sCisJCQkJMjRGNTRFQUIxMDFGRTkx
NDAwMEFFNzQxIC8qIEFwcGxpY2F0aW9uQ2FjaGVIb3N0LmggKi8sCiAJCQkJMUE4RjZCQjEwREI1
NUNEQzAwMURCNzk0IC8qIEFwcGxpY2F0aW9uQ2FjaGUuY3BwICovLAogCQkJCTFBOEY2QkIyMERC
NTVDREMwMDFEQjc5NCAvKiBBcHBsaWNhdGlvbkNhY2hlLmggKi8sCiAJCQkJMUE4RjZCQjMwREI1
NUNEQzAwMURCNzk0IC8qIEFwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAgKi8sCkBAIC0xNzA2Miw2
ICsxNzA2OCw3IEBACiAJCQkJQ0U1NEZEMzgxMDE2RDlBNjAwOEI0NEM4IC8qIFNjcmlwdFNvdXJj
ZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QTc0RUNCQjEwMTgzOUE2MDBCRjkzOUUg
LyogSW5zcGVjdG9yQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0ExRTg4RjYxMDFDQzM4
NDAwMEM0REY1IC8qIFNjcmlwdEFycmF5LmggaW4gSGVhZGVycyAqLywKKwkJCQkyNEY1NEVBRDEw
MUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRpb25DYWNoZUhvc3QuaCBpbiBIZWFkZXJzICovLAog
CQkJCTQxQTNENThGMTAxQzE1MkQwMDMxNkQwNyAvKiBEZWRpY2F0ZWRXb3JrZXJUaHJlYWQuaCBp
biBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOwpAQCAtMTkxMDQsNiArMTkxMTEsNyBAQAogCQkJCTdBNzRFQ0JBMTAxODM5QTYwMEJG
OTM5RSAvKiBJbnNwZWN0b3JCYWNrZW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdBNzRFQ0JE
MTAxODM5REEwMEJGOTM5RSAvKiBKU0luc3BlY3RvckJhY2tlbmRDdXN0b20uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJN0ExRTg4RjUxMDFDQzM4NDAwMEM0REY1IC8qIFNjcmlwdEFycmF5LmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTI0RjU0RUFDMTAxRkU5MTQwMDBBRTc0MSAvKiBBcHBsaWNhdGlv
bkNhY2hlSG9zdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MUEzRDU4RTEwMUMxNTJEMDAzMTZE
MDcgLyogRGVkaWNhdGVkV29ya2VyVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxIdG1sRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxI
dG1sRWxlbWVudC5jcHAJKHJldmlzaW9uIDQ2NTY4KQorKysgV2ViQ29yZS9odG1sL0hUTUxIdG1s
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDEzIEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiSFRNTEh0bWxFbGVtZW50LmgiCiAKLSNpbmNsdWRlICJBcHBs
aWNhdGlvbkNhY2hlR3JvdXAuaCIKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05T
KQorI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVIb3N0LmgiCisjZW5kaWYKKwogI2luY2x1ZGUg
IkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFt
ZS5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02
OCwxMiArNzMsMTYgQEAgdm9pZCBIVE1MSHRtbEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZQog
ICAgIGlmICghZG9jdW1lbnQoKS0+ZnJhbWUoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgRG9j
dW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bG9hZGVy
KCktPmRvY3VtZW50TG9hZGVyKCk7CisgICAgaWYgKCFkb2N1bWVudExvYWRlcikKKyAgICAgICAg
cmV0dXJuOworCiAgICAgLy8gQ2hlY2sgdGhlIG1hbmlmZXN0IGF0dHJpYnV0ZQogICAgIEF0b21p
Y1N0cmluZyBtYW5pZmVzdCA9IGdldEF0dHJpYnV0ZShtYW5pZmVzdEF0dHIpOwotICAgIGlmICht
YW5pZmVzdC5pc051bGwoKSkKLSAgICAgICAgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpzZWxlY3RD
YWNoZVdpdGhvdXRNYW5pZmVzdFVSTChkb2N1bWVudCgpLT5mcmFtZSgpKTsKKyAgICBpZiAobWFu
aWZlc3QuaXNOdWxsKCkgfHwgbWFuaWZlc3QuaXNFbXB0eSgpKQorICAgICAgICBkb2N1bWVudExv
YWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+c2VsZWN0Q2FjaGVXaXRob3V0TWFuaWZlc3Qo
KTsKICAgICBlbHNlCi0gICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6c2VsZWN0Q2FjaGUo
ZG9jdW1lbnQoKS0+ZnJhbWUoKSwgZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwobWFuaWZlc3QpKTsK
KyAgICAgICAgZG9jdW1lbnRMb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPnNlbGVjdENh
Y2hlV2l0aE1hbmlmZXN0KGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKG1hbmlmZXN0KSk7CiB9CiAj
ZW5kaWYKIApJbmRleDogV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAkocmV2aXNpb24gNDY1Njgp
CisrKyBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDkgKzMwLDcgQEAKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogCiAjaWYgRU5BQkxF
KE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLSNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlLmgi
Ci0jaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUdyb3VwLmgiCi0jaW5jbHVkZSAiQXBwbGljYXRp
b25DYWNoZVJlc291cmNlLmgiCisjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUhvc3QuaCIKICNl
bmRpZgogI2luY2x1ZGUgIkFyY2hpdmVGYWN0b3J5LmgiCiAjaW5jbHVkZSAiQXJjaGl2ZVJlc291
cmNlQ29sbGVjdGlvbi5oIgpAQCAtMTUzLDcgKzE1MSw3IEBAIERvY3VtZW50TG9hZGVyOjpEb2N1
bWVudExvYWRlcihjb25zdCBSZXMKICAgICAsIG1fc3Vic3RpdHV0ZVJlc291cmNlRGVsaXZlcnlU
aW1lcih0aGlzLCAmRG9jdW1lbnRMb2FkZXI6OnN1YnN0aXR1dGVSZXNvdXJjZURlbGl2ZXJ5VGlt
ZXJGaXJlZCkKICAgICAsIG1fZGlkQ3JlYXRlR2xvYmFsSGlzdG9yeUVudHJ5KGZhbHNlKQogI2lm
IEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCi0gICAgLCBtX2NhbmRpZGF0ZUFwcGxp
Y2F0aW9uQ2FjaGVHcm91cCgwKQorICAgICwgbV9hcHBsaWNhdGlvbkNhY2hlSG9zdChuZXcgQXBw
bGljYXRpb25DYWNoZUhvc3QodGhpcykpCiAjZW5kaWYKIHsKIH0KQEAgLTE2OCwxMyArMTY2LDYg
QEAgRnJhbWVMb2FkZXIqIERvY3VtZW50TG9hZGVyOjpmcmFtZUxvYWRlcgogRG9jdW1lbnRMb2Fk
ZXI6On5Eb2N1bWVudExvYWRlcigpCiB7CiAgICAgQVNTRVJUKCFtX2ZyYW1lIHx8IGZyYW1lTG9h
ZGVyKCktPmFjdGl2ZURvY3VtZW50TG9hZGVyKCkgIT0gdGhpcyB8fCAhZnJhbWVMb2FkZXIoKS0+
aXNMb2FkaW5nKCkpOwotICAgIAotI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMp
Ci0gICAgaWYgKG1fYXBwbGljYXRpb25DYWNoZSkKLSAgICAgICAgbV9hcHBsaWNhdGlvbkNhY2hl
LT5ncm91cCgpLT5kaXNhc3NvY2lhdGVEb2N1bWVudExvYWRlcih0aGlzKTsKLSAgICBlbHNlIGlm
IChtX2NhbmRpZGF0ZUFwcGxpY2F0aW9uQ2FjaGVHcm91cCkKLSAgICAgICAgbV9jYW5kaWRhdGVB
cHBsaWNhdGlvbkNhY2hlR3JvdXAtPmRpc2Fzc29jaWF0ZURvY3VtZW50TG9hZGVyKHRoaXMpOwot
I2VuZGlmCiB9CiAKIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBEb2N1bWVudExvYWRlcjo6bWFp
blJlc291cmNlRGF0YSgpIGNvbnN0CkBAIC0yNTgsMTQgKzI0OSw3IEBAIHZvaWQgRG9jdW1lbnRM
b2FkZXI6Om1haW5SZWNlaXZlZEVycm9yKGMKICAgICBBU1NFUlQoIWVycm9yLmlzTnVsbCgpKTsK
IAogI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCi0gICAgQXBwbGljYXRpb25D
YWNoZUdyb3VwKiBncm91cCA9IG1fY2FuZGlkYXRlQXBwbGljYXRpb25DYWNoZUdyb3VwOwotICAg
IGlmICghZ3JvdXAgJiYgbV9hcHBsaWNhdGlvbkNhY2hlKSB7Ci0gICAgICAgIEFTU0VSVCghbWFp
blJlc291cmNlQXBwbGljYXRpb25DYWNoZSgpKTsgLy8gSWYgdGhlIG1haW4gcmVzb3VyY2Ugd2Vy
ZSBsb2FkZWQgZnJvbSBhIGNhY2hlLCBpdCB3b3VsZG4ndCBmYWlsLgotICAgICAgICBncm91cCA9
IG1fYXBwbGljYXRpb25DYWNoZS0+Z3JvdXAoKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGdyb3Vw
KQotICAgICAgICBncm91cC0+ZmFpbGVkTG9hZGluZ01haW5SZXNvdXJjZSh0aGlzKTsKKyAgICBt
X2FwcGxpY2F0aW9uQ2FjaGVIb3N0LT5mYWlsZWRMb2FkaW5nTWFpblJlc291cmNlKCk7CiAjZW5k
aWYKICAgICAKICAgICBpZiAoIWZyYW1lTG9hZGVyKCkpCkBAIC00MzAsNiArNDE0LDkgQEAgdm9p
ZCBEb2N1bWVudExvYWRlcjo6YXR0YWNoVG9GcmFtZSgpCiB2b2lkIERvY3VtZW50TG9hZGVyOjpk
ZXRhY2hGcm9tRnJhbWUoKQogewogICAgIEFTU0VSVChtX2ZyYW1lKTsKKyNpZiBFTkFCTEUoT0ZG
TElORV9XRUJfQVBQTElDQVRJT05TKQorICAgIG1fYXBwbGljYXRpb25DYWNoZUhvc3QtPnNldERP
TUFwcGxpY2F0aW9uQ2FjaGUoMCk7CisjZW5kaWYKICAgICBtX2ZyYW1lID0gMDsKIH0KIApAQCAt
NDUxLDkgKzQzOCw2IEBAIHZvaWQgRG9jdW1lbnRMb2FkZXI6OnNldFByaW1hcnlMb2FkQ29tcGwK
ICAgICBpZiAoZmxhZykgewogICAgICAgICBpZiAobV9tYWluUmVzb3VyY2VMb2FkZXIpIHsKICAg
ICAgICAgICAgIG1fbWFpblJlc291cmNlRGF0YSA9IG1fbWFpblJlc291cmNlTG9hZGVyLT5yZXNv
dXJjZURhdGEoKTsKLSNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotICAgICAg
ICAgICAgbV9tYWluUmVzb3VyY2VBcHBsaWNhdGlvbkNhY2hlID0gbV9tYWluUmVzb3VyY2VMb2Fk
ZXItPmFwcGxpY2F0aW9uQ2FjaGUoKTsKLSNlbmRpZgogICAgICAgICAgICAgbV9tYWluUmVzb3Vy
Y2VMb2FkZXIgPSAwOwogICAgICAgICB9CiAKQEAgLTg0NywxMTMgKzgzMSw0IEBAIHZvaWQgRG9j
dW1lbnRMb2FkZXI6Omljb25Mb2FkRGVjaXNpb25BdmEKICAgICAgICAgbV9mcmFtZS0+bG9hZGVy
KCktPmljb25Mb2FkRGVjaXNpb25BdmFpbGFibGUoKTsKIH0KIAotI2lmIEVOQUJMRShPRkZMSU5F
X1dFQl9BUFBMSUNBVElPTlMpCi12b2lkIERvY3VtZW50TG9hZGVyOjpzZXRDYW5kaWRhdGVBcHBs
aWNhdGlvbkNhY2hlR3JvdXAoQXBwbGljYXRpb25DYWNoZUdyb3VwKiBncm91cCkKLXsKLSAgICBB
U1NFUlQoIW1fYXBwbGljYXRpb25DYWNoZSk7Ci0gICAgbV9jYW5kaWRhdGVBcHBsaWNhdGlvbkNh
Y2hlR3JvdXAgPSBncm91cDsKLX0KLSAgICAKLXZvaWQgRG9jdW1lbnRMb2FkZXI6OnNldEFwcGxp
Y2F0aW9uQ2FjaGUoUGFzc1JlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBhcHBsaWNhdGlvbkNhY2hl
KQotewotICAgIGlmIChtX2NhbmRpZGF0ZUFwcGxpY2F0aW9uQ2FjaGVHcm91cCkgewotICAgICAg
ICBBU1NFUlQoIW1fYXBwbGljYXRpb25DYWNoZSk7Ci0gICAgICAgIG1fY2FuZGlkYXRlQXBwbGlj
YXRpb25DYWNoZUdyb3VwID0gMDsKLSAgICB9Ci0KLSAgICBtX2FwcGxpY2F0aW9uQ2FjaGUgPSBh
cHBsaWNhdGlvbkNhY2hlOwotfQotCi1BcHBsaWNhdGlvbkNhY2hlKiBEb2N1bWVudExvYWRlcjo6
bWFpblJlc291cmNlQXBwbGljYXRpb25DYWNoZSgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fbWFpblJl
c291cmNlQXBwbGljYXRpb25DYWNoZSkKLSAgICAgICAgcmV0dXJuIG1fbWFpblJlc291cmNlQXBw
bGljYXRpb25DYWNoZS5nZXQoKTsKLSAgICBpZiAobV9tYWluUmVzb3VyY2VMb2FkZXIpCi0gICAg
ICAgIHJldHVybiBtX21haW5SZXNvdXJjZUxvYWRlci0+YXBwbGljYXRpb25DYWNoZSgpOwotICAg
IHJldHVybiAwOwotfQotCi1ib29sIERvY3VtZW50TG9hZGVyOjpzaG91bGRMb2FkUmVzb3VyY2VG
cm9tQXBwbGljYXRpb25DYWNoZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIEFwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZSomIHJlc291cmNlKQotewotICAgIEFwcGxpY2F0aW9uQ2FjaGUq
IGNhY2hlID0gYXBwbGljYXRpb25DYWNoZSgpOwotICAgIGlmICghY2FjaGUgfHwgIWNhY2hlLT5p
c0NvbXBsZXRlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIElmIHRoZSByZXNv
dXJjZSBpcyBub3QgYSBIVFRQL0hUVFBTIEdFVCwgdGhlbiBhYm9ydAotICAgIGlmICghQXBwbGlj
YXRpb25DYWNoZTo6cmVxdWVzdElzSFRUUE9ySFRUUFNHZXQocmVxdWVzdCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIC8vIElmIHRoZSByZXNvdXJjZSdzIFVSTCBpcyBhbiBtYXN0ZXIg
ZW50cnksIHRoZSBtYW5pZmVzdCwgYW4gZXhwbGljaXQgZW50cnksIG9yIGEgZmFsbGJhY2sgZW50
cnkKLSAgICAvLyBpbiB0aGUgYXBwbGljYXRpb24gY2FjaGUsIHRoZW4gZ2V0IHRoZSByZXNvdXJj
ZSBmcm9tIHRoZSBjYWNoZSAoaW5zdGVhZCBvZiBmZXRjaGluZyBpdCkuCi0gICAgcmVzb3VyY2Ug
PSBjYWNoZS0+cmVzb3VyY2VGb3JVUkwocmVxdWVzdC51cmwoKSk7Ci0KLSAgICAvLyBSZXNvdXJj
ZXMgdGhhdCBtYXRjaCBmYWxsYmFjayBuYW1lc3BhY2VzIG9yIG9ubGluZSB3aGl0ZWxpc3QgZW50
cmllcyBhcmUgZmV0Y2hlZCBmcm9tIHRoZSBuZXR3b3JrLAotICAgIC8vIHVubGVzcyB0aGV5IGFy
ZSBhbHNvIGNhY2hlZC4KLSAgICBpZiAoIXJlc291cmNlICYmIChjYWNoZS0+dXJsTWF0Y2hlc0Zh
bGxiYWNrTmFtZXNwYWNlKHJlcXVlc3QudXJsKCkpIHx8IGNhY2hlLT5pc1VSTEluT25saW5lV2hp
dGVsaXN0KHJlcXVlc3QudXJsKCkpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8g
UmVzb3VyY2VzIHRoYXQgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBtYW5pZmVzdCB3aWxsIGFsd2F5
cyBmYWlsIHRvIGxvYWQgKGF0IGxlYXN0LCBhZnRlciB0aGUKLSAgICAvLyBjYWNoZSBoYXMgYmVl
biBwcmltZWQgdGhlIGZpcnN0IHRpbWUpLCBtYWtpbmcgdGhlIHRlc3Rpbmcgb2Ygb2ZmbGluZSBh
cHBsaWNhdGlvbnMgc2ltcGxlci4KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBEb2N1bWVu
dExvYWRlcjo6Z2V0QXBwbGljYXRpb25DYWNoZUZhbGxiYWNrUmVzb3VyY2UoY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqJiByZXNvdXJjZSwg
QXBwbGljYXRpb25DYWNoZSogY2FjaGUpCi17Ci0gICAgaWYgKCFjYWNoZSkgewotICAgICAgICBj
YWNoZSA9IGFwcGxpY2F0aW9uQ2FjaGUoKTsKLSAgICAgICAgaWYgKCFjYWNoZSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKCFjYWNoZS0+aXNDb21wbGV0ZSgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgLy8gSWYgdGhlIHJlc291cmNlIGlzIG5v
dCBhIEhUVFAvSFRUUFMgR0VULCB0aGVuIGFib3J0Ci0gICAgaWYgKCFBcHBsaWNhdGlvbkNhY2hl
OjpyZXF1ZXN0SXNIVFRQT3JIVFRQU0dldChyZXF1ZXN0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgS1VSTCBmYWxsYmFja1VSTDsKLSAgICBpZiAoIWNhY2hlLT51cmxNYXRjaGVzRmFs
bGJhY2tOYW1lc3BhY2UocmVxdWVzdC51cmwoKSwgJmZhbGxiYWNrVVJMKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgcmVzb3VyY2UgPSBjYWNoZS0+cmVzb3VyY2VGb3JVUkwoZmFsbGJh
Y2tVUkwpOwotICAgIEFTU0VSVChyZXNvdXJjZSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBEb2N1bWVudExvYWRlcjo6c2NoZWR1bGVBcHBsaWNhdGlvbkNhY2hlTG9hZChSZXNvdXJj
ZUxvYWRlciogbG9hZGVyLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IEtV
UkwmIG9yaWdpbmFsVVJMKQotewotICAgIGlmICghZnJhbWVMb2FkZXIoKS0+ZnJhbWUoKS0+c2V0
dGluZ3MoKSB8fCAhZnJhbWVMb2FkZXIoKS0+ZnJhbWUoKS0+c2V0dGluZ3MoKS0+b2ZmbGluZVdl
YkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAK
LSAgICBpZiAocmVxdWVzdC51cmwoKSAhPSBvcmlnaW5hbFVSTCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZTsKLSAgICBpZiAo
IXNob3VsZExvYWRSZXNvdXJjZUZyb21BcHBsaWNhdGlvbkNhY2hlKHJlcXVlc3QsIHJlc291cmNl
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIG1fcGVuZGluZ1N1YnN0aXR1dGVS
ZXNvdXJjZXMuc2V0KGxvYWRlciwgcmVzb3VyY2UpOwotICAgIGRlbGl2ZXJTdWJzdGl0dXRlUmVz
b3VyY2VzQWZ0ZXJEZWxheSgpOwotICAgICAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBEb2N1bWVudExvYWRlcjo6c2NoZWR1bGVMb2FkRmFsbGJhY2tSZXNvdXJjZUZyb21BcHBsaWNh
dGlvbkNhY2hlKFJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgQXBwbGljYXRpb25DYWNoZSogY2FjaGUpCi17Ci0gICAgaWYgKCFmcmFtZUxvYWRl
cigpLT5mcmFtZSgpLT5zZXR0aW5ncygpIHx8ICFmcmFtZUxvYWRlcigpLT5mcmFtZSgpLT5zZXR0
aW5ncygpLT5vZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZTsKLSAg
ICBpZiAoIWdldEFwcGxpY2F0aW9uQ2FjaGVGYWxsYmFja1Jlc291cmNlKHJlcXVlc3QsIHJlc291
cmNlLCBjYWNoZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fcGVuZGluZ1N1YnN0
aXR1dGVSZXNvdXJjZXMuc2V0KGxvYWRlciwgcmVzb3VyY2UpOwotICAgIGRlbGl2ZXJTdWJzdGl0
dXRlUmVzb3VyY2VzQWZ0ZXJEZWxheSgpOwotICAgICAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotI2VuZGlmIC8vIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCi0KIH0KSW5kZXg6
IFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9s
b2FkZXIvRG9jdW1lbnRMb2FkZXIuaAkocmV2aXNpb24gNDY1NjgpCisrKyBXZWJDb3JlL2xvYWRl
ci9Eb2N1bWVudExvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw5ICszOCw3IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGU7Ci0gICAgY2xh
c3MgQXBwbGljYXRpb25DYWNoZUdyb3VwOwotICAgIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGVSZXNv
dXJjZTsKKyAgICBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlSG9zdDsKICAgICBjbGFzcyBBcmNoaXZl
OwogICAgIGNsYXNzIEFyY2hpdmVSZXNvdXJjZTsKICAgICBjbGFzcyBBcmNoaXZlUmVzb3VyY2VD
b2xsZWN0aW9uOwpAQCAtMjA3LDE4ICsyMDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIHZvaWQgdGFrZU1lbW9yeUNhY2hlTG9hZHNGb3JDbGllbnROb3RpZmljYXRpb24oVmVjdG9y
PFN0cmluZz4mIGxvYWRzKTsKIAogI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMp
Ci0gICAgICAgIGJvb2wgc2NoZWR1bGVBcHBsaWNhdGlvbkNhY2hlTG9hZChSZXNvdXJjZUxvYWRl
ciosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IEtVUkwmIG9yaWdpbmFsVVJMKTsKLSAg
ICAgICAgYm9vbCBzY2hlZHVsZUxvYWRGYWxsYmFja1Jlc291cmNlRnJvbUFwcGxpY2F0aW9uQ2Fj
aGUoUmVzb3VyY2VMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBBcHBsaWNhdGlvbkNh
Y2hlKiA9IDApOwotICAgICAgICBib29sIHNob3VsZExvYWRSZXNvdXJjZUZyb21BcHBsaWNhdGlv
bkNhY2hlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSom
KTsKLSAgICAgICAgYm9vbCBnZXRBcHBsaWNhdGlvbkNhY2hlRmFsbGJhY2tSZXNvdXJjZShjb25z
dCBSZXNvdXJjZVJlcXVlc3QmLCBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqJiwgQXBwbGljYXRp
b25DYWNoZSogPSAwKTsKLSAgICAgICAgCi0gICAgICAgIHZvaWQgc2V0Q2FuZGlkYXRlQXBwbGlj
YXRpb25DYWNoZUdyb3VwKEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogZ3JvdXApOwotICAgICAgICBB
cHBsaWNhdGlvbkNhY2hlR3JvdXAqIGNhbmRpZGF0ZUFwcGxpY2F0aW9uQ2FjaGVHcm91cCgpIGNv
bnN0IHsgcmV0dXJuIG1fY2FuZGlkYXRlQXBwbGljYXRpb25DYWNoZUdyb3VwOyB9Ci0gICAgICAg
IAotICAgICAgICB2b2lkIHNldEFwcGxpY2F0aW9uQ2FjaGUoUGFzc1JlZlB0cjxBcHBsaWNhdGlv
bkNhY2hlPiBhcHBsaWNhdGlvbkNhY2hlKTsKLSAgICAgICAgQXBwbGljYXRpb25DYWNoZSogYXBw
bGljYXRpb25DYWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbGljYXRpb25DYWNoZS5nZXQoKTsg
fQotCi0gICAgICAgIEFwcGxpY2F0aW9uQ2FjaGUqIG1haW5SZXNvdXJjZUFwcGxpY2F0aW9uQ2Fj
aGUoKSBjb25zdDsKKyAgICAgICAgQXBwbGljYXRpb25DYWNoZUhvc3QqIGFwcGxpY2F0aW9uQ2Fj
aGVIb3N0KCkgY29uc3QgeyByZXR1cm4gbV9hcHBsaWNhdGlvbkNhY2hlSG9zdC5nZXQoKTsgfQog
I2VuZGlmCiAKICAgICBwcm90ZWN0ZWQ6CkBAIC0zMDYsMTYgKzI5Myw5IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgU3RyaW5nIG1fY2xpZW50UmVkaXJlY3RTb3VyY2VGb3JIaXN0b3J5
OwogICAgICAgICBib29sIG1fZGlkQ3JlYXRlR2xvYmFsSGlzdG9yeUVudHJ5OwogCi0jaWYgRU5B
QkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykgIAotICAgICAgICAvLyBUaGUgYXBwbGljYXRp
b24gY2FjaGUgdGhhdCB0aGUgZG9jdW1lbnQgbG9hZGVyIGlzIGFzc29jaWF0ZWQgd2l0aCAoaWYg
YW55KS4KLSAgICAgICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+IG1fYXBwbGljYXRpb25DYWNo
ZTsKLSAgICAgICAgCi0gICAgICAgIC8vIEJlZm9yZSBhbiBhcHBsaWNhdGlvbiBjYWNoZSBoYXMg
ZmluaXNoZWQgbG9hZGluZywgdGhpcyB3aWxsIGJlIHRoZSBjYW5kaWRhdGUgYXBwbGljYXRpb24K
LSAgICAgICAgLy8gZ3JvdXAgdGhhdCB0aGUgZG9jdW1lbnQgbG9hZGVyIGlzIGFzc29jaWF0ZWQg
d2l0aC4KLSAgICAgICAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBtX2NhbmRpZGF0ZUFwcGxpY2F0
aW9uQ2FjaGVHcm91cDsKLSAgICAgICAgCi0gICAgICAgIC8vIE9uY2UgdGhlIG1haW4gcmVzb3Vy
Y2UgaGFzIGZpbmlzaGVkIGxvYWRpbmcsIHRoaXMgaXMgdGhlIGFwcGxpY2F0aW9uIGNhY2hlIGl0
IHdhcyBsb2FkZWQgZnJvbSAoaWYgYW55KS4KLSAgICAgICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2Fj
aGU+IG1fbWFpblJlc291cmNlQXBwbGljYXRpb25DYWNoZTsKKyNpZiBFTkFCTEUoT0ZGTElORV9X
RUJfQVBQTElDQVRJT05TKQorICAgICAgICBmcmllbmQgY2xhc3MgQXBwbGljYXRpb25DYWNoZUhv
c3Q7ICAvLyBmb3Igc3Vic3RpdHV0ZSByZXNvdXJjZSBkZWxpdmVyeQorICAgICAgICBPd25QdHI8
QXBwbGljYXRpb25DYWNoZUhvc3Q+IG1fYXBwbGljYXRpb25DYWNoZUhvc3Q7CiAjZW5kaWYKICAg
ICB9OwogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiA0NjU2OCkKKysrIFdl
YkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsOCArOTUs
NyBAQAogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogI2lmIEVOQUJMRShPRkZMSU5F
X1dFQl9BUFBMSUNBVElPTlMpCi0jaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZS5oIgotI2luY2x1
ZGUgIkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5oIgorI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2Fj
aGVIb3N0LmgiCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTVkcpCkBAIC0xODE2LDggKzE4MTUsNyBA
QCBib29sIEZyYW1lTG9hZGVyOjpjYW5DYWNoZVBhZ2VDb250YWluaW5nCiAjaWYgRU5BQkxFKE9G
RkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBpbnZl
c3RpZ2F0aW5nIGNhY2hpbmcgZnJhbWVzIHRoYXQgaGF2ZSBhbiBhc3NvY2lhdGVkCiAgICAgICAg
IC8vIGFwcGxpY2F0aW9uIGNhY2hlLiA8cmRhcjovL3Byb2JsZW0vNTkxNzg5OT4gdHJhY2tzIHRo
YXQgd29yay4KLSAgICAgICAgJiYgIW1fZG9jdW1lbnRMb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGUo
KQotICAgICAgICAmJiAhbV9kb2N1bWVudExvYWRlci0+Y2FuZGlkYXRlQXBwbGljYXRpb25DYWNo
ZUdyb3VwKCkKKyAgICAgICAgJiYgbV9kb2N1bWVudExvYWRlci0+YXBwbGljYXRpb25DYWNoZUhv
c3QoKS0+Y2FuQ2FjaGVJblBhZ2VDYWNoZSgpCiAjZW5kaWYKICNpZiBFTkFCTEUoV01MKQogICAg
ICAgICAmJiAhZnJhbWVDb250YWluc1dNTENvbnRlbnQobV9mcmFtZSkKQEAgLTE5NjcsMTAgKzE5
NjUsOCBAQCBib29sIEZyYW1lTG9hZGVyOjpsb2dDYW5DYWNoZUZyYW1lRGVjaXNpCiAgICAgICAg
IGlmICghbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y2FuU3VzcGVuZEFjdGl2ZURPTU9iamVjdHMoKSkK
ICAgICAgICAgICAgIHsgUENMT0coIiAgIC1UaGUgZG9jdW1lbnQgY2Fubm90IHN1c3BlY3QgaXRz
IGFjdGl2ZSBET00gT2JqZWN0cyIpOyBjYW5ub3RDYWNoZSA9IHRydWU7IH0KICNpZiBFTkFCTEUo
T0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotICAgICAgICBpZiAobV9kb2N1bWVudExvYWRlci0+
YXBwbGljYXRpb25DYWNoZSgpKQotICAgICAgICAgICAgeyBQQ0xPRygiICAgLVRoZSBEb2N1bWVu
dExvYWRlciBoYXMgYW4gYWN0aXZlIGFwcGxpY2F0aW9uIGNhY2hlIik7IGNhbm5vdENhY2hlID0g
dHJ1ZTsgfQotICAgICAgICBpZiAobV9kb2N1bWVudExvYWRlci0+Y2FuZGlkYXRlQXBwbGljYXRp
b25DYWNoZUdyb3VwKCkpCi0gICAgICAgICAgICB7IFBDTE9HKCIgICAtVGhlIERvY3VtZW50TG9h
ZGVyIGhhcyBhIGNhbmRpZGF0ZUFwcGxpY2F0aW9uQ2FjaGVHcm91cCIpOyBjYW5ub3RDYWNoZSA9
IHRydWU7IH0KKyAgICAgICAgaWYgKCFtX2RvY3VtZW50TG9hZGVyLT5hcHBsaWNhdGlvbkNhY2hl
SG9zdCgpLT5jYW5DYWNoZUluUGFnZUNhY2hlKCkpCisgICAgICAgICAgICB7IFBDTE9HKCIgICAt
VGhlIERvY3VtZW50TG9hZGVyIHVzZXMgYW4gYXBwbGljYXRpb24gY2FjaGUiKTsgY2Fubm90Q2Fj
aGUgPSB0cnVlOyB9CiAjZW5kaWYKICAgICAgICAgaWYgKCFtX2NsaWVudC0+Y2FuQ2FjaGVQYWdl
KCkpCiAgICAgICAgICAgICB7IFBDTE9HKCIgICAtVGhlIGNsaWVudCBzYXlzIHRoaXMgZnJhbWUg
Y2Fubm90IGJlIGNhY2hlZCIpOyBjYW5ub3RDYWNoZSA9IHRydWU7IH0KQEAgLTM2ODEsMzAgKzM2
NzcsMTEgQEAgdW5zaWduZWQgbG9uZyBGcmFtZUxvYWRlcjo6bG9hZFJlc291cmNlUwogICAgICAg
ICBBU1NFUlQoIW5ld1JlcXVlc3QuaXNOdWxsKCkpOwogICAgICAgICAKICNpZiBFTkFCTEUoT0ZG
TElORV9XRUJfQVBQTElDQVRJT05TKQotICAgICAgICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2Uq
IHJlc291cmNlOwotICAgICAgICBpZiAoZG9jdW1lbnRMb2FkZXIoKS0+c2hvdWxkTG9hZFJlc291
cmNlRnJvbUFwcGxpY2F0aW9uQ2FjaGUobmV3UmVxdWVzdCwgcmVzb3VyY2UpKSB7Ci0gICAgICAg
ICAgICBpZiAocmVzb3VyY2UpIHsKLSAgICAgICAgICAgICAgICByZXNwb25zZSA9IHJlc291cmNl
LT5yZXNwb25zZSgpOwotICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKHJlc291cmNlLT5kYXRh
KCktPmRhdGEoKSwgcmVzb3VyY2UtPmRhdGEoKS0+c2l6ZSgpKTsKLSAgICAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgICAgIGVycm9yID0gY2Fubm90U2hvd1VSTEVycm9yKG5ld1JlcXVlc3Qp
OwotICAgICAgICB9IGVsc2UgeworICAgICAgICBpZiAoIWRvY3VtZW50TG9hZGVyKCktPmFwcGxp
Y2F0aW9uQ2FjaGVIb3N0KCktPm1heWJlTG9hZFN5bmNocm9ub3VzbHkobmV3UmVxdWVzdCwgZXJy
b3IsIHJlc3BvbnNlLCBkYXRhKSkgewogI2VuZGlmCiAgICAgICAgICAgICBSZXNvdXJjZUhhbmRs
ZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShuZXdSZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFs
cywgZXJyb3IsIHJlc3BvbnNlLCBkYXRhLCBtX2ZyYW1lKTsKLQogI2lmIEVOQUJMRShPRkZMSU5F
X1dFQl9BUFBMSUNBVElPTlMpCi0gICAgICAgICAgICAvLyBJZiBub3JtYWwgbG9hZGluZyByZXN1
bHRzIGluIGEgcmVkaXJlY3QgdG8gYSByZXNvdXJjZSB3aXRoIGFub3RoZXIgb3JpZ2luIChpbmRp
Y2F0aXZlIG9mIGEgY2FwdGl2ZSBwb3J0YWwpLCBvciBhIDR4eCBvciA1eHggc3RhdHVzIGNvZGUg
b3IgZXF1aXZhbGVudCwKLSAgICAgICAgICAgIC8vIG9yIGlmIHRoZXJlIHdlcmUgbmV0d29yayBl
cnJvcnMgKGJ1dCBub3QgaWYgdGhlIHVzZXIgY2FuY2VsZWQgdGhlIGRvd25sb2FkKSwgdGhlbiBp
bnN0ZWFkIGdldCwgZnJvbSB0aGUgY2FjaGUsIHRoZSByZXNvdXJjZSBvZiB0aGUgZmFsbGJhY2sg
ZW50cnkKLSAgICAgICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1hdGNoZWQgbmFtZXNw
YWNlLgotICAgICAgICAgICAgaWYgKCghZXJyb3IuaXNOdWxsKCkgJiYgIWVycm9yLmlzQ2FuY2Vs
bGF0aW9uKCkpCi0gICAgICAgICAgICAgICAgIHx8IHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkg
LyAxMDAgPT0gNCB8fCByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpIC8gMTAwID09IDUKLSAgICAg
ICAgICAgICAgICAgfHwgIXByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbChuZXdSZXF1ZXN0LnVy
bCgpLCByZXNwb25zZS51cmwoKSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnRMb2Fk
ZXIoKS0+Z2V0QXBwbGljYXRpb25DYWNoZUZhbGxiYWNrUmVzb3VyY2UobmV3UmVxdWVzdCwgcmVz
b3VyY2UpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gcmVzb3VyY2UtPnJlc3Bv
bnNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGEuY2xlYXIoKTsKLSAgICAgICAgICAgICAg
ICAgICAgZGF0YS5hcHBlbmQocmVzb3VyY2UtPmRhdGEoKS0+ZGF0YSgpLCByZXNvdXJjZS0+ZGF0
YSgpLT5zaXplKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGRvY3VtZW50TG9hZGVyKCktPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPm1heWJlTG9hZEZh
bGxiYWNrU3luY2hyb25vdXNseShuZXdSZXF1ZXN0LCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOwog
ICAgICAgICB9CiAjZW5kaWYKICAgICB9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9NYWluUmVzb3Vy
Y2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxv
YWRlci5jcHAJKHJldmlzaW9uIDQ2NTY4KQorKysgV2ViQ29yZS9sb2FkZXIvTWFpblJlc291cmNl
TG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsOSArNDIsNyBAQAogI2luY2x1ZGUgIlNl
dHRpbmdzLmgiCiAKICNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotI2luY2x1
ZGUgIkFwcGxpY2F0aW9uQ2FjaGUuaCIKLSNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlR3JvdXAu
aCIKLSNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJBcHBs
aWNhdGlvbkNhY2hlSG9zdC5oIgogI2VuZGlmCiAKIC8vIEZJWE1FOiBNb3JlIHRoYXQgaXMgaW4g
Y29tbW9uIHdpdGggU3VicmVzb3VyY2VMb2FkZXIgc2hvdWxkIG1vdmUgdXAgaW50byBSZXNvdXJj
ZUxvYWRlci4KQEAgLTI4MywxNSArMjgxLDggQEAgdm9pZCBNYWluUmVzb3VyY2VMb2FkZXI6OmNv
bnRpbnVlQWZ0ZXJDbwogdm9pZCBNYWluUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25z
ZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByKQogewogI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9B
UFBMSUNBVElPTlMpCi0gICAgaWYgKHIuaHR0cFN0YXR1c0NvZGUoKSAvIDEwMCA9PSA0IHx8IHIu
aHR0cFN0YXR1c0NvZGUoKSAvIDEwMCA9PSA1KSB7Ci0gICAgICAgIEFTU0VSVCghbV9hcHBsaWNh
dGlvbkNhY2hlKTsKLSAgICAgICAgaWYgKG1fZnJhbWUtPnNldHRpbmdzKCkgJiYgbV9mcmFtZS0+
c2V0dGluZ3MoKS0+b2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKCkpIHsKLSAgICAg
ICAgICAgIG1fYXBwbGljYXRpb25DYWNoZSA9IEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6ZmFsbGJh
Y2tDYWNoZUZvck1haW5SZXF1ZXN0KHJlcXVlc3QoKSwgZG9jdW1lbnRMb2FkZXIoKSk7Ci0KLSAg
ICAgICAgICAgIGlmIChzY2hlZHVsZUxvYWRGYWxsYmFja1Jlc291cmNlRnJvbUFwcGxpY2F0aW9u
Q2FjaGUobV9hcHBsaWNhdGlvbkNhY2hlLmdldCgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYgKGRvY3VtZW50TG9hZGVyKCktPmFwcGxpY2F0aW9u
Q2FjaGVIb3N0KCktPm1heWJlTG9hZEZhbGxiYWNrRm9yTWFpblJlc3BvbnNlKHJlcXVlc3QoKSwg
cikpCisgICAgICAgIHJldHVybjsKICNlbmRpZgogCiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSByLmh0dHBIZWFkZXJGaWVsZHMoKS5maW5kKEF0b21pY1N0cmluZygieC1m
cmFtZS1vcHRpb25zIikpOwpAQCAtMzUzLDYgKzM0NCwxMCBAQCB2b2lkIE1haW5SZXNvdXJjZUxv
YWRlcjo6ZGlkUmVjZWl2ZURhdGEoCiAgICAgQVNTRVJUKCFkZWZlcnNMb2FkaW5nKCkpOwogI2Vu
ZGlmCiAgCisgI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisgICAgZG9jdW1l
bnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+bWFpblJlc291cmNlRGF0YVJlY2Vp
dmVkKGRhdGEsIGxlbmd0aCwgbGVuZ3RoUmVjZWl2ZWQsIGFsbEF0T25jZSk7CisjZW5kaWYKKwog
ICAgIC8vIFRoZSBhZGRpdGlvbmFsIHByb2Nlc3NpbmcgY2FuIGRvIGFueXRoaW5nIGluY2x1ZGlu
ZyBwb3NzaWJseSByZW1vdmluZyB0aGUgbGFzdAogICAgIC8vIHJlZmVyZW5jZSB0byB0aGlzIG9i
amVjdDsgb25lIGV4YW1wbGUgb2YgdGhpcyBpcyAzMjY2MjE2LgogICAgIFJlZlB0cjxNYWluUmVz
b3VyY2VMb2FkZXI+IHByb3RlY3QodGhpcyk7CkBAIC0zODAsMjcgKzM3NSwxNSBAQCB2b2lkIE1h
aW5SZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluCiAgICAgUmVzb3VyY2VMb2FkZXI6OmRp
ZEZpbmlzaExvYWRpbmcoKTsKICAgICAKICNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJ
T05TKQotICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogZ3JvdXAgPSBkbC0+Y2FuZGlkYXRlQXBw
bGljYXRpb25DYWNoZUdyb3VwKCk7Ci0gICAgaWYgKCFncm91cCAmJiBkbC0+YXBwbGljYXRpb25D
YWNoZSgpICYmICFkbC0+bWFpblJlc291cmNlQXBwbGljYXRpb25DYWNoZSgpKQotICAgICAgICBn
cm91cCA9IGRsLT5hcHBsaWNhdGlvbkNhY2hlKCktPmdyb3VwKCk7Ci0gICAgCi0gICAgaWYgKGdy
b3VwKQotICAgICAgICBncm91cC0+ZmluaXNoZWRMb2FkaW5nTWFpblJlc291cmNlKGRsLmdldCgp
KTsKKyAgICBkbC0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+ZmluaXNoZWRMb2FkaW5nTWFpblJl
c291cmNlKCk7CiAjZW5kaWYKIH0KIAogdm9pZCBNYWluUmVzb3VyY2VMb2FkZXI6OmRpZEZhaWwo
Y29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7CiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQ
UExJQ0FUSU9OUykKLSAgICBpZiAoIWVycm9yLmlzQ2FuY2VsbGF0aW9uKCkpIHsKLSAgICAgICAg
QVNTRVJUKCFtX2FwcGxpY2F0aW9uQ2FjaGUpOwotICAgICAgICBpZiAobV9mcmFtZS0+c2V0dGlu
Z3MoKSAmJiBtX2ZyYW1lLT5zZXR0aW5ncygpLT5vZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVu
YWJsZWQoKSkgewotICAgICAgICAgICAgbV9hcHBsaWNhdGlvbkNhY2hlID0gQXBwbGljYXRpb25D
YWNoZUdyb3VwOjpmYWxsYmFja0NhY2hlRm9yTWFpblJlcXVlc3QocmVxdWVzdCgpLCBkb2N1bWVu
dExvYWRlcigpKTsKLQotICAgICAgICAgICAgaWYgKHNjaGVkdWxlTG9hZEZhbGxiYWNrUmVzb3Vy
Y2VGcm9tQXBwbGljYXRpb25DYWNoZShtX2FwcGxpY2F0aW9uQ2FjaGUuZ2V0KCkpKQotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KKyAgICBpZiAoZG9jdW1lbnRMb2Fk
ZXIoKS0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+bWF5YmVMb2FkRmFsbGJhY2tGb3JNYWluRXJy
b3IocmVxdWVzdCgpLCBlcnJvcikpCisgICAgICAgIHJldHVybjsKICNlbmRpZgogCiAgICAgLy8g
VGhlcmUgaXMgYSBidWcgaW4gQ0ZOZXR3b3JrIHdoZXJlIGNhbGxiYWNrcyBjYW4gYmUgZGlzcGF0
Y2hlZCBldmVuIHdoZW4gbG9hZHMgYXJlIGRlZmVycmVkLgpAQCAtNDk1LDI3ICs0NzgsMTUgQEAg
Ym9vbCBNYWluUmVzb3VyY2VMb2FkZXI6OmxvYWQoY29uc3QgUmVzbwogCiAgICAgbV9zdWJzdGl0
dXRlRGF0YSA9IHN1YnN0aXR1dGVEYXRhOwogCisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Qo
cik7CisKICNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotICAgIC8vIENoZWNr
IGlmIHRoaXMgcmVxdWVzdCBzaG91bGQgYmUgbG9hZGVkIGZyb20gdGhlIGFwcGxpY2F0aW9uIGNh
Y2hlCi0gICAgaWYgKCFtX3N1YnN0aXR1dGVEYXRhLmlzVmFsaWQoKSAmJiBmcmFtZUxvYWRlcigp
LT5mcmFtZSgpLT5zZXR0aW5ncygpICYmIGZyYW1lTG9hZGVyKCktPmZyYW1lKCktPnNldHRpbmdz
KCktPm9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCgpKSB7Ci0gICAgICAgIEFTU0VS
VCghbV9hcHBsaWNhdGlvbkNhY2hlKTsKLQotICAgICAgICBtX2FwcGxpY2F0aW9uQ2FjaGUgPSBB
cHBsaWNhdGlvbkNhY2hlR3JvdXA6OmNhY2hlRm9yTWFpblJlcXVlc3QociwgbV9kb2N1bWVudExv
YWRlci5nZXQoKSk7Ci0KLSAgICAgICAgaWYgKG1fYXBwbGljYXRpb25DYWNoZSkgewotICAgICAg
ICAgICAgLy8gR2V0IHRoZSByZXNvdXJjZSBmcm9tIHRoZSBhcHBsaWNhdGlvbiBjYWNoZS4gQnkg
ZGVmaW5pdGlvbiwgY2FjaGVGb3JNYWluUmVxdWVzdCgpIHJldHVybnMgYSBjYWNoZSB0aGF0IGNv
bnRhaW5zIHRoZSByZXNvdXJjZS4KLSAgICAgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJj
ZSogcmVzb3VyY2UgPSBtX2FwcGxpY2F0aW9uQ2FjaGUtPnJlc291cmNlRm9yUmVxdWVzdChyKTsK
LSAgICAgICAgICAgIG1fc3Vic3RpdHV0ZURhdGEgPSBTdWJzdGl0dXRlRGF0YShyZXNvdXJjZS0+
ZGF0YSgpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXNvdXJjZS0+cmVzcG9uc2UoKS5taW1lVHlwZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlLT5yZXNwb25zZSgpLnRleHRFbmNvZGluZ05h
bWUoKSwgS1VSTCgpKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBkb2N1bWVudExvYWRlcigpLT5h
cHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5tYXliZUxvYWRNYWluUmVzb3VyY2UocmVxdWVzdCwgbV9z
dWJzdGl0dXRlRGF0YSk7CiAjZW5kaWYKIAotICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KHIp
OwogICAgIGJvb2wgZGVmZXIgPSBkZWZlcnNMb2FkaW5nKCk7CiAgICAgaWYgKGRlZmVyKSB7Ci0g
ICAgICAgIGJvb2wgc2hvdWxkTG9hZEVtcHR5ID0gc2hvdWxkTG9hZEFzRW1wdHlEb2N1bWVudChy
LnVybCgpKTsKKyAgICAgICAgYm9vbCBzaG91bGRMb2FkRW1wdHkgPSBzaG91bGRMb2FkQXNFbXB0
eURvY3VtZW50KHJlcXVlc3QudXJsKCkpOwogICAgICAgICBpZiAoc2hvdWxkTG9hZEVtcHR5KQog
ICAgICAgICAgICAgZGVmZXIgPSBmYWxzZTsKICAgICB9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9N
YWluUmVzb3VyY2VMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9NYWluUmVz
b3VyY2VMb2FkZXIuaAkocmV2aXNpb24gNDY1NjgpCisrKyBXZWJDb3JlL2xvYWRlci9NYWluUmVz
b3VyY2VMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzksOSArMzksNiBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLSNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotICAg
IGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGU7Ci0jZW5kaWYKICAgICBjbGFzcyBGb3JtU3RhdGU7CiAg
ICAgc3RydWN0IFJlc291cmNlUmVxdWVzdDsKIApAQCAtNzEsMTAgKzY4LDYgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAgICAgICAgIGJvb2wgaXNMb2FkaW5nTXVsdGlwYXJ0Q29udGVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fbG9hZGluZ011bHRpcGFydENvbnRlbnQ7IH0KIAotI2lmIEVOQUJMRShP
RkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCi0gICAgICAgIEFwcGxpY2F0aW9uQ2FjaGUqIGFwcGxp
Y2F0aW9uQ2FjaGUoKSBjb25zdCB7IHJldHVybiBtX2FwcGxpY2F0aW9uQ2FjaGUuZ2V0KCk7IH0K
LSNlbmRpZgotCiAgICAgcHJpdmF0ZToKICAgICAgICAgTWFpblJlc291cmNlTG9hZGVyKEZyYW1l
Kik7CiAKQEAgLTEwNSwxMSArOTgsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAg
TWFpblJlc291cmNlTG9hZGVyVGltZXIgbV9kYXRhTG9hZFRpbWVyOwogCi0jaWYgRU5BQkxFKE9G
RkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLSAgICAgICAgLy8gVGhlIGFwcGxpY2F0aW9uIGNhY2hl
IHRoYXQgdGhlIG1haW4gcmVzb3VyY2Ugd2FzIGxvYWRlZCBmcm9tIChpZiBhbnkpLgotICAgICAg
ICBSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gbV9hcHBsaWNhdGlvbkNhY2hlOwotI2VuZGlmCi0K
ICAgICAgICAgYm9vbCBtX2xvYWRpbmdNdWx0aXBhcnRDb250ZW50OwogICAgICAgICBib29sIG1f
d2FpdGluZ0ZvckNvbnRlbnRQb2xpY3k7CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1Jl
c291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxv
YWRlci5jcHAJKHJldmlzaW9uIDQ2NTY4KQorKysgV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2Fk
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw5IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXIuaCIKIAorI2lmIEVOQUJMRShPRkZMSU5FX1dF
Ql9BUFBMSUNBVElPTlMpCisjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUhvc3QuaCIKKyNlbmRp
ZgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNs
dWRlICJGcmFtZUxvYWRlci5oIgpAQCAtMTE5LDcgKzEyMiw3IEBAIGJvb2wgUmVzb3VyY2VMb2Fk
ZXI6OmxvYWQoY29uc3QgUmVzb3VyY2UKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCiAjaWYg
RU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLSAgICBpZiAobV9kb2N1bWVudExvYWRl
ci0+c2NoZWR1bGVBcHBsaWNhdGlvbkNhY2hlTG9hZCh0aGlzLCBjbGllbnRSZXF1ZXN0LCByLnVy
bCgpKSkKKyAgICBpZiAobV9kb2N1bWVudExvYWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+
bWF5YmVMb2FkUmVzb3VyY2UodGhpcywgY2xpZW50UmVxdWVzdCwgci51cmwoKSkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogI2VuZGlmCiAKQEAgLTE5MCwxNyArMTkzLDYgQEAgdm9pZCBSZXNvdXJj
ZUxvYWRlcjo6Y2xlYXJSZXNvdXJjZURhdGEoKQogICAgICAgICBtX3Jlc291cmNlRGF0YS0+Y2xl
YXIoKTsKIH0KIAotI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCi1ib29sIFJl
c291cmNlTG9hZGVyOjpzY2hlZHVsZUxvYWRGYWxsYmFja1Jlc291cmNlRnJvbUFwcGxpY2F0aW9u
Q2FjaGUoQXBwbGljYXRpb25DYWNoZSogY2FjaGUpCi17Ci0gICAgaWYgKGRvY3VtZW50TG9hZGVy
KCktPnNjaGVkdWxlTG9hZEZhbGxiYWNrUmVzb3VyY2VGcm9tQXBwbGljYXRpb25DYWNoZSh0aGlz
LCBtX3JlcXVlc3QsIGNhY2hlKSkgewotICAgICAgICBoYW5kbGUoKS0+Y2FuY2VsKCk7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0jZW5kaWYKLQog
dm9pZCBSZXNvdXJjZUxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKIHsKICAgICAv
LyBQcm90ZWN0IHRoaXMgaW4gdGhpcyBkZWxlZ2F0ZSBtZXRob2Qgc2luY2UgdGhlIGFkZGl0aW9u
YWwgcHJvY2Vzc2luZyBjYW4gZG8KQEAgLTM4MiwxMCArMzc0LDggQEAgUmVzb3VyY2VFcnJvciBS
ZXNvdXJjZUxvYWRlcjo6Y2Fubm90U2hvdwogdm9pZCBSZXNvdXJjZUxvYWRlcjo6d2lsbFNlbmRS
ZXF1ZXN0KFJlc291cmNlSGFuZGxlKiwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQogewogI2lmIEVOQUJMRShPRkZMSU5F
X1dFQl9BUFBMSUNBVElPTlMpCi0gICAgaWYgKCFyZWRpcmVjdFJlc3BvbnNlLmlzTnVsbCgpICYm
ICFwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwocmVxdWVzdC51cmwoKSwgcmVkaXJlY3RSZXNw
b25zZS51cmwoKSkpIHsKLSAgICAgICAgaWYgKHNjaGVkdWxlTG9hZEZhbGxiYWNrUmVzb3VyY2VG
cm9tQXBwbGljYXRpb25DYWNoZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAoZG9jdW1lbnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+bWF5YmVMb2FkRmFs
bGJhY2tGb3JSZWRpcmVjdCh0aGlzLCByZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKSkKKyAgICAg
ICAgcmV0dXJuOwogI2VuZGlmCiAgICAgd2lsbFNlbmRSZXF1ZXN0KHJlcXVlc3QsIHJlZGlyZWN0
UmVzcG9uc2UpOwogfQpAQCAtMzk4LDEwICszODgsOCBAQCB2b2lkIFJlc291cmNlTG9hZGVyOjpk
aWRTZW5kRGF0YShSZXNvdXJjCiB2b2lkIFJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9u
c2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsK
ICNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotICAgIGlmIChyZXNwb25zZS5o
dHRwU3RhdHVzQ29kZSgpIC8gMTAwID09IDQgfHwgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSAv
IDEwMCA9PSA1KSB7Ci0gICAgICAgIGlmIChzY2hlZHVsZUxvYWRGYWxsYmFja1Jlc291cmNlRnJv
bUFwcGxpY2F0aW9uQ2FjaGUoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYg
KGRvY3VtZW50TG9hZGVyKCktPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPm1heWJlTG9hZEZhbGxi
YWNrRm9yUmVzcG9uc2UodGhpcywgcmVzcG9uc2UpKQorICAgICAgICByZXR1cm47CiAjZW5kaWYK
ICAgICBkaWRSZWNlaXZlUmVzcG9uc2UocmVzcG9uc2UpOwogfQpAQCAtNDE5LDEwICs0MDcsOCBA
QCB2b2lkIFJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKFJlCiB2b2lkIFJlc291cmNl
TG9hZGVyOjpkaWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJy
b3IpCiB7CiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLSAgICBpZiAoIWVy
cm9yLmlzQ2FuY2VsbGF0aW9uKCkpIHsKLSAgICAgICAgaWYgKGRvY3VtZW50TG9hZGVyKCktPnNj
aGVkdWxlTG9hZEZhbGxiYWNrUmVzb3VyY2VGcm9tQXBwbGljYXRpb25DYWNoZSh0aGlzLCBtX3Jl
cXVlc3QpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoZG9jdW1lbnRMb2Fk
ZXIoKS0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+bWF5YmVMb2FkRmFsbGJhY2tGb3JFcnJvcih0
aGlzLCBlcnJvcikpCisgICAgICAgIHJldHVybjsKICNlbmRpZgogICAgIGRpZEZhaWwoZXJyb3Ip
OwogfQpJbmRleDogV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5oCShyZXZpc2lvbiA0NjU2OCkKKysrIFdl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQw
LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgQXBwbGljYXRpb25DYWNo
ZTsKKyAgICBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlSG9zdDsKICAgICBjbGFzcyBEb2N1bWVudExv
YWRlcjsKICAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFzcyBGcmFtZUxvYWRlcjsKQEAgLTExOSw3
ICsxMTksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFJlc291cmNlTG9hZGVyKEZy
YW1lKiwgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzLCBib29sIHNob3VsZENvbnRlbnRT
bmlmZik7CiAKICNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotICAgICAgICBi
b29sIHNjaGVkdWxlTG9hZEZhbGxiYWNrUmVzb3VyY2VGcm9tQXBwbGljYXRpb25DYWNoZShBcHBs
aWNhdGlvbkNhY2hlKiA9IDApOworICAgICAgICBmcmllbmQgY2xhc3MgQXBwbGljYXRpb25DYWNo
ZUhvc3Q7ICAvLyBmb3IgYWNjZXNzIHRvIHJlcXVlc3QoKQogI2VuZGlmCiAKICAgICAgICAgdmly
dHVhbCB2b2lkIGRpZENhbmNlbChjb25zdCBSZXNvdXJjZUVycm9yJik7CkBAIC0xMzMsMTMgKzEz
MywxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRs
ZT4gbV9oYW5kbGU7CiAgICAgICAgIFJlZlB0cjxGcmFtZT4gbV9mcmFtZTsKICAgICAgICAgUmVm
UHRyPERvY3VtZW50TG9hZGVyPiBtX2RvY3VtZW50TG9hZGVyOwotICAgICAgICBSZXNvdXJjZVJl
c3BvbnNlIG1fcmVzcG9uc2U7ICAgICAgICAKKyAgICAgICAgUmVzb3VyY2VSZXNwb25zZSBtX3Jl
c3BvbnNlOwogICAgICAgICAKICAgICBwcml2YXRlOgogICAgICAgICBSZXNvdXJjZVJlcXVlc3Qg
bV9yZXF1ZXN0OwogICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX3Jlc291cmNlRGF0YTsK
ICAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgbV9pZGVudGlmaWVyOyAgICAgICAgCisg
ICAgICAgIHVuc2lnbmVkIGxvbmcgbV9pZGVudGlmaWVyOwogCiAgICAgICAgIGJvb2wgbV9yZWFj
aGVkVGVybWluYWxTdGF0ZTsKICAgICAgICAgYm9vbCBtX2NhbmNlbGxlZDsKSW5kZXg6IFdlYkNv
cmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcAkocmV2
aXNpb24gNDY1NjgpCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hl
R3JvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKE9G
RkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKIAogI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGUuaCIK
KyNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlSG9zdC5oIgogI2luY2x1ZGUgIkFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZS5oIgogI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmgiCiAj
aW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCkBAIC0xMjYsNyArMTI3LDcgQEAgdm9pZCBBcHBsaWNh
dGlvbkNhY2hlR3JvdXA6OnNlbGVjdENhY2hlKAogICAgICAgICByZXR1cm47CiAgICAgCiAgICAg
RG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVu
dExvYWRlcigpOwotICAgIEFTU0VSVCghZG9jdW1lbnRMb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGUo
KSk7CisgICAgQVNTRVJUKCFkb2N1bWVudExvYWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+
YXBwbGljYXRpb25DYWNoZSgpKTsKIAogICAgIGlmIChwYXNzZWRNYW5pZmVzdFVSTC5pc051bGwo
KSkgewogICAgICAgICBzZWxlY3RDYWNoZVdpdGhvdXRNYW5pZmVzdFVSTChmcmFtZSk7ICAgICAg
ICAKQEAgLTEzNyw3ICsxMzgsNyBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6c2VsZWN0
Q2FjaGUoCiAgICAgaWYgKG1hbmlmZXN0VVJMLmhhc1JlZigpKQogICAgICAgICBtYW5pZmVzdFVS
TC5yZW1vdmVSZWYoKTsKIAotICAgIEFwcGxpY2F0aW9uQ2FjaGUqIG1haW5SZXNvdXJjZUNhY2hl
ID0gZG9jdW1lbnRMb2FkZXItPm1haW5SZXNvdXJjZUFwcGxpY2F0aW9uQ2FjaGUoKTsKKyAgICBB
cHBsaWNhdGlvbkNhY2hlKiBtYWluUmVzb3VyY2VDYWNoZSA9IGRvY3VtZW50TG9hZGVyLT5hcHBs
aWNhdGlvbkNhY2hlSG9zdCgpLT5tYWluUmVzb3VyY2VBcHBsaWNhdGlvbkNhY2hlKCk7CiAgICAg
CiAgICAgaWYgKG1haW5SZXNvdXJjZUNhY2hlKSB7CiAgICAgICAgIGlmIChtYW5pZmVzdFVSTCA9
PSBtYWluUmVzb3VyY2VDYWNoZS0+Z3JvdXAoKS0+bV9tYW5pZmVzdFVSTCkgewpAQCAtMTc1LDE0
ICsxNzYsMTQgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OnNlbGVjdENhY2hlKAogCiAg
ICAgLy8gRG9uJ3QgY2hhbmdlIGFueXRoaW5nIG9uIGRpc2sgaWYgcHJpdmF0ZSBicm93c2luZyBp
cyBlbmFibGVkLgogICAgIGlmICghZnJhbWUtPnNldHRpbmdzKCkgfHwgZnJhbWUtPnNldHRpbmdz
KCktPnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKSkgewotICAgICAgICBwb3N0TGlzdGVuZXJUYXNr
KCZET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsQ2hlY2tpbmdMaXN0ZW5lciwgZG9jdW1lbnRMb2Fk
ZXIpOwotICAgICAgICBwb3N0TGlzdGVuZXJUYXNrKCZET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxs
RXJyb3JMaXN0ZW5lciwgZG9jdW1lbnRMb2FkZXIpOworICAgICAgICBwb3N0TGlzdGVuZXJUYXNr
KERPTUFwcGxpY2F0aW9uQ2FjaGU6OkNIRUNLSU5HX0VWRU5ULCBkb2N1bWVudExvYWRlcik7Cisg
ICAgICAgIHBvc3RMaXN0ZW5lclRhc2soRE9NQXBwbGljYXRpb25DYWNoZTo6RVJST1JfRVZFTlQs
IGRvY3VtZW50TG9hZGVyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIEFwcGxpY2F0
aW9uQ2FjaGVHcm91cCogZ3JvdXAgPSBjYWNoZVN0b3JhZ2UoKS5maW5kT3JDcmVhdGVDYWNoZUdy
b3VwKG1hbmlmZXN0VVJMKTsKIAotICAgIGRvY3VtZW50TG9hZGVyLT5zZXRDYW5kaWRhdGVBcHBs
aWNhdGlvbkNhY2hlR3JvdXAoZ3JvdXApOworICAgIGRvY3VtZW50TG9hZGVyLT5hcHBsaWNhdGlv
bkNhY2hlSG9zdCgpLT5zZXRDYW5kaWRhdGVBcHBsaWNhdGlvbkNhY2hlR3JvdXAoZ3JvdXApOwog
ICAgIGdyb3VwLT5tX3BlbmRpbmdNYXN0ZXJSZXNvdXJjZUxvYWRlcnMuYWRkKGRvY3VtZW50TG9h
ZGVyKTsKICAgICBncm91cC0+bV9kb3dubG9hZGluZ1BlbmRpbmdNYXN0ZXJSZXNvdXJjZUxvYWRl
cnNDb3VudCsrOwogCkBAIC0xOTYsOSArMTk3LDkgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3Jv
dXA6OnNlbGVjdENhY2hlVwogICAgICAgICByZXR1cm47CiAKICAgICBEb2N1bWVudExvYWRlciog
ZG9jdW1lbnRMb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCk7Ci0gICAg
QVNTRVJUKCFkb2N1bWVudExvYWRlci0+YXBwbGljYXRpb25DYWNoZSgpKTsKKyAgICBBU1NFUlQo
IWRvY3VtZW50TG9hZGVyLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5hcHBsaWNhdGlvbkNhY2hl
KCkpOwogCi0gICAgQXBwbGljYXRpb25DYWNoZSogbWFpblJlc291cmNlQ2FjaGUgPSBkb2N1bWVu
dExvYWRlci0+bWFpblJlc291cmNlQXBwbGljYXRpb25DYWNoZSgpOworICAgIEFwcGxpY2F0aW9u
Q2FjaGUqIG1haW5SZXNvdXJjZUNhY2hlID0gZG9jdW1lbnRMb2FkZXItPmFwcGxpY2F0aW9uQ2Fj
aGVIb3N0KCktPm1haW5SZXNvdXJjZUFwcGxpY2F0aW9uQ2FjaGUoKTsKIAogICAgIGlmIChtYWlu
UmVzb3VyY2VDYWNoZSkgewogICAgICAgICBtYWluUmVzb3VyY2VDYWNoZS0+Z3JvdXAoKS0+YXNz
b2NpYXRlRG9jdW1lbnRMb2FkZXJXaXRoQ2FjaGUoZG9jdW1lbnRMb2FkZXIsIG1haW5SZXNvdXJj
ZUNhY2hlKTsKQEAgLTIzNSw5ICsyMzYsOSBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6
ZmluaXNoZWRMb2FkCiAgICAgICAgIC8vIENhY2hlIHVwZGF0ZSBoYXMgYmVlbiBhIGZhaWx1cmUs
IHNvIHRoZXJlIGlzIG5vIHJlYXNvbiB0byBrZWVwIHRoZSBkb2N1bWVudCBhc3NvY2lhdGVkIHdp
dGggdGhlIGluY29tcGxldGUgY2FjaGUKICAgICAgICAgLy8gKGl0cyBtYWluIHJlc291cmNlIHdh
cyBub3QgY2FjaGVkIHlldCwgc28gaXQgaXMgbGlrZWx5IHRoYXQgdGhlIGFwcGxpY2F0aW9uIGNo
YW5nZWQgc2lnbmlmaWNhbnRseSBzZXJ2ZXItc2lkZSkuCiAgICAgICAgIEFTU0VSVCghbV9jYWNo
ZUJlaW5nVXBkYXRlZCk7IC8vIEFscmVhZHkgY2xlYXJlZCBvdXQgYnkgc3RvcExvYWRpbmcoKS4K
LSAgICAgICAgbG9hZGVyLT5zZXRBcHBsaWNhdGlvbkNhY2hlKDApOyAvLyBXaWxsIHVuc2V0IGNh
bmRpZGF0ZSwgdG9vLgorICAgICAgICBsb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPnNl
dEFwcGxpY2F0aW9uQ2FjaGUoMCk7IC8vIFdpbGwgdW5zZXQgY2FuZGlkYXRlLCB0b28uCiAgICAg
ICAgIG1fYXNzb2NpYXRlZERvY3VtZW50TG9hZGVycy5yZW1vdmUobG9hZGVyKTsKLSAgICAgICAg
cG9zdExpc3RlbmVyVGFzaygmRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbEVycm9yTGlzdGVuZXIs
IGxvYWRlcik7CisgICAgICAgIHBvc3RMaXN0ZW5lclRhc2soRE9NQXBwbGljYXRpb25DYWNoZTo6
RVJST1JfRVZFTlQsIGxvYWRlcik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29tcGxldGVk
OgogICAgICAgICBBU1NFUlQobV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzLmNvbnRhaW5zKGxv
YWRlcikpOwpAQCAtMjcxLDI4ICsyNzIsMjggQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6
OmZhaWxlZExvYWRpbgogCiAgICAgICAgIC8vIFRoZSBtYW5pZmVzdCBkaWRuJ3QgY2hhbmdlLCBh
bmQgd2UgaGF2ZSBhIHJlbGV2YW50IGNhY2hlIC0gYnV0IHRoZSBtYWluIHJlc291cmNlIGRvd25s
b2FkIGZhaWxlZCBtaWQtd2F5LCBzbyBpdCBjYW5ub3QgYmUgc3RvcmVkIHRvIHRoZSBjYWNoZSwK
ICAgICAgICAgLy8gYW5kIHRoZSBsb2FkZXIgZG9lcyBub3QgZ2V0IGFzc29jaWF0ZWQgdG8gaXQu
IElmIHRoZXJlIGFyZSBvdGhlciBtYWluIHJlc291cmNlcyBiZWluZyBkb3dubG9hZGVkIGZvciB0
aGlzIGNhY2hlIGdyb3VwLCB0aGV5IG1heSBzdGlsbCBzdWNjZWVkLgotICAgICAgICBwb3N0TGlz
dGVuZXJUYXNrKCZET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsRXJyb3JMaXN0ZW5lciwgbG9hZGVy
KTsKKyAgICAgICAgcG9zdExpc3RlbmVyVGFzayhET01BcHBsaWNhdGlvbkNhY2hlOjpFUlJPUl9F
VkVOVCwgbG9hZGVyKTsKIAogICAgICAgICBicmVhazsKICAgICBjYXNlIEZhaWx1cmU6CiAgICAg
ICAgIC8vIENhY2hlIHVwZGF0ZSBmYWlsZWQsIHRvby4KICAgICAgICAgQVNTRVJUKCFtX2NhY2hl
QmVpbmdVcGRhdGVkKTsgLy8gQWxyZWFkeSBjbGVhcmVkIG91dCBieSBzdG9wTG9hZGluZygpLgot
ICAgICAgICBBU1NFUlQoIWxvYWRlci0+YXBwbGljYXRpb25DYWNoZSgpIHx8IGxvYWRlci0+YXBw
bGljYXRpb25DYWNoZSgpID09IG1fY2FjaGVCZWluZ1VwZGF0ZWQpOworICAgICAgICBBU1NFUlQo
IWxvYWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+YXBwbGljYXRpb25DYWNoZSgpIHx8IGxv
YWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+YXBwbGljYXRpb25DYWNoZSgpID09IG1fY2Fj
aGVCZWluZ1VwZGF0ZWQpOwogCi0gICAgICAgIGxvYWRlci0+c2V0QXBwbGljYXRpb25DYWNoZSgw
KTsgLy8gV2lsbCB1bnNldCBjYW5kaWRhdGUsIHRvby4KKyAgICAgICAgbG9hZGVyLT5hcHBsaWNh
dGlvbkNhY2hlSG9zdCgpLT5zZXRBcHBsaWNhdGlvbkNhY2hlKDApOyAvLyBXaWxsIHVuc2V0IGNh
bmRpZGF0ZSwgdG9vLgogICAgICAgICBtX2Fzc29jaWF0ZWREb2N1bWVudExvYWRlcnMucmVtb3Zl
KGxvYWRlcik7Ci0gICAgICAgIHBvc3RMaXN0ZW5lclRhc2soJkRPTUFwcGxpY2F0aW9uQ2FjaGU6
OmNhbGxFcnJvckxpc3RlbmVyLCBsb2FkZXIpOworICAgICAgICBwb3N0TGlzdGVuZXJUYXNrKERP
TUFwcGxpY2F0aW9uQ2FjaGU6OkVSUk9SX0VWRU5ULCBsb2FkZXIpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIENvbXBsZXRlZDoKICAgICAgICAgLy8gVGhlIGNhY2hlIG1hbmlmZXN0IGRpZG4n
dCBsaXN0IHRoaXMgbWFpbiByZXNvdXJjZSwgYW5kIGFsbCBjYWNoZSBlbnRyaWVzIHdlcmUgYWxy
ZWFkeSB1cGRhdGVkIHN1Y2Nlc3NmdWxseSAtIGJ1dCB0aGUgbWFpbiByZXNvdXJjZSBmYWlsZWQg
dG8gbG9hZCwKICAgICAgICAgLy8gc28gaXQgY2Fubm90IGJlIHN0b3JlZCB0byB0aGUgY2FjaGUu
IElmIHRoZXJlIGFyZSBvdGhlciBtYWluIHJlc291cmNlcyBiZWluZyBkb3dubG9hZGVkIGZvciB0
aGlzIGNhY2hlIGdyb3VwLCB0aGV5IG1heSBzdGlsbCBzdWNjZWVkLgogICAgICAgICBBU1NFUlQo
bV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzLmNvbnRhaW5zKGxvYWRlcikpOwotICAgICAgICBB
U1NFUlQobG9hZGVyLT5hcHBsaWNhdGlvbkNhY2hlKCkgPT0gbV9jYWNoZUJlaW5nVXBkYXRlZCk7
Ci0gICAgICAgIEFTU0VSVCghbG9hZGVyLT5jYW5kaWRhdGVBcHBsaWNhdGlvbkNhY2hlR3JvdXAo
KSk7CisgICAgICAgIEFTU0VSVChsb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPmFwcGxp
Y2F0aW9uQ2FjaGUoKSA9PSBtX2NhY2hlQmVpbmdVcGRhdGVkKTsKKyAgICAgICAgQVNTRVJUKCFs
b2FkZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPmNhbmRpZGF0ZUFwcGxpY2F0aW9uQ2FjaGVH
cm91cCgpKTsKICAgICAgICAgbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzLnJlbW92ZShsb2Fk
ZXIpOwotICAgICAgICBsb2FkZXItPnNldEFwcGxpY2F0aW9uQ2FjaGUoMCk7CisgICAgICAgIGxv
YWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+c2V0QXBwbGljYXRpb25DYWNoZSgwKTsKIAot
ICAgICAgICBwb3N0TGlzdGVuZXJUYXNrKCZET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsRXJyb3JM
aXN0ZW5lciwgbG9hZGVyKTsKKyAgICAgICAgcG9zdExpc3RlbmVyVGFzayhET01BcHBsaWNhdGlv
bkNhY2hlOjpFUlJPUl9FVkVOVCwgbG9hZGVyKTsKIAogICAgICAgICBicmVhazsKICAgICB9CkBA
IC0zMzIsNyArMzMzLDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmRpc2Fzc29jaWF0
ZQogCiAgICAgbV9wZW5kaW5nTWFzdGVyUmVzb3VyY2VMb2FkZXJzLnJlbW92ZShsb2FkZXIpOwog
Ci0gICAgbG9hZGVyLT5zZXRBcHBsaWNhdGlvbkNhY2hlKDApOyAvLyBXaWxsIHNldCBjYW5kaWRh
dGUgdG8gMCwgdG9vLgorICAgIGxvYWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+c2V0QXBw
bGljYXRpb25DYWNoZSgwKTsgLy8gV2lsbCBzZXQgY2FuZGlkYXRlIHRvIDAsIHRvby4KIAogICAg
IGlmICghbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzLmlzRW1wdHkoKSB8fCAhbV9wZW5kaW5n
TWFzdGVyUmVzb3VyY2VMb2FkZXJzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzg4
LDkgKzM4OSw5IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjp1cGRhdGUoRnJhbWUKIHsK
ICAgICBpZiAobV91cGRhdGVTdGF0dXMgPT0gQ2hlY2tpbmcgfHwgbV91cGRhdGVTdGF0dXMgPT0g
RG93bmxvYWRpbmcpIHsKICAgICAgICAgaWYgKHVwZGF0ZU9wdGlvbiA9PSBBcHBsaWNhdGlvbkNh
Y2hlVXBkYXRlV2l0aEJyb3dzaW5nQ29udGV4dCkgewotICAgICAgICAgICAgcG9zdExpc3RlbmVy
VGFzaygmRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbENoZWNraW5nTGlzdGVuZXIsIGZyYW1lLT5s
b2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSk7CisgICAgICAgICAgICBwb3N0TGlzdGVuZXJUYXNr
KERPTUFwcGxpY2F0aW9uQ2FjaGU6OkNIRUNLSU5HX0VWRU5ULCBmcmFtZS0+bG9hZGVyKCktPmRv
Y3VtZW50TG9hZGVyKCkpOwogICAgICAgICAgICAgaWYgKG1fdXBkYXRlU3RhdHVzID09IERvd25s
b2FkaW5nKQotICAgICAgICAgICAgICAgIHBvc3RMaXN0ZW5lclRhc2soJkRPTUFwcGxpY2F0aW9u
Q2FjaGU6OmNhbGxEb3dubG9hZGluZ0xpc3RlbmVyLCBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50
TG9hZGVyKCkpOworICAgICAgICAgICAgICAgIHBvc3RMaXN0ZW5lclRhc2soRE9NQXBwbGljYXRp
b25DYWNoZTo6RE9XTkxPQURJTkdfRVZFTlQsIGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2Fk
ZXIoKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTQwMCw4ICs0MDEs
OCBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6dXBkYXRlKEZyYW1lCiAgICAgICAgIEFT
U0VSVChtX3BlbmRpbmdNYXN0ZXJSZXNvdXJjZUxvYWRlcnMuaXNFbXB0eSgpKTsKICAgICAgICAg
QVNTRVJUKG1fcGVuZGluZ0VudHJpZXMuaXNFbXB0eSgpKTsKICAgICAgICAgQVNTRVJUKCFtX2Nh
Y2hlQmVpbmdVcGRhdGVkKTsKLSAgICAgICAgcG9zdExpc3RlbmVyVGFzaygmRE9NQXBwbGljYXRp
b25DYWNoZTo6Y2FsbENoZWNraW5nTGlzdGVuZXIsIGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRM
b2FkZXIoKSk7Ci0gICAgICAgIHBvc3RMaXN0ZW5lclRhc2soJkRPTUFwcGxpY2F0aW9uQ2FjaGU6
OmNhbGxOb1VwZGF0ZUxpc3RlbmVyLCBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkp
OworICAgICAgICBwb3N0TGlzdGVuZXJUYXNrKERPTUFwcGxpY2F0aW9uQ2FjaGU6OkNIRUNLSU5H
X0VWRU5ULCBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkpOworICAgICAgICBwb3N0
TGlzdGVuZXJUYXNrKERPTUFwcGxpY2F0aW9uQ2FjaGU6Ok5PVVBEQVRFX0VWRU5ULCBmcmFtZS0+
bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBA
IC00MTAsMTAgKzQxMSwxMCBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6dXBkYXRlKEZy
YW1lCiAKICAgICBtX3VwZGF0ZVN0YXR1cyA9IENoZWNraW5nOwogCi0gICAgcG9zdExpc3RlbmVy
VGFzaygmRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbENoZWNraW5nTGlzdGVuZXIsIG1fYXNzb2Np
YXRlZERvY3VtZW50TG9hZGVycyk7CisgICAgcG9zdExpc3RlbmVyVGFzayhET01BcHBsaWNhdGlv
bkNhY2hlOjpDSEVDS0lOR19FVkVOVCwgbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzKTsKICAg
ICBpZiAoIW1fbmV3ZXN0Q2FjaGUpIHsKICAgICAgICAgQVNTRVJUKHVwZGF0ZU9wdGlvbiA9PSBB
cHBsaWNhdGlvbkNhY2hlVXBkYXRlV2l0aEJyb3dzaW5nQ29udGV4dCk7Ci0gICAgICAgIHBvc3RM
aXN0ZW5lclRhc2soJkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxDaGVja2luZ0xpc3RlbmVyLCBm
cmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkpOworICAgICAgICBwb3N0TGlzdGVuZXJU
YXNrKERPTUFwcGxpY2F0aW9uQ2FjaGU6OkNIRUNLSU5HX0VWRU5ULCBmcmFtZS0+bG9hZGVyKCkt
PmRvY3VtZW50TG9hZGVyKCkpOwogICAgIH0KICAgICAKICAgICBBU1NFUlQoIW1fbWFuaWZlc3RI
YW5kbGUpOwpAQCAtNjQ4LDcgKzY0OSw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpk
aWRGaW5pc2hMb2EKICAgICAvLyBXZSBoYXZlIHRoZSBtYW5pZmVzdCwgbm93IGRvd25sb2FkIHRo
ZSByZXNvdXJjZXMuCiAgICAgbV91cGRhdGVTdGF0dXMgPSBEb3dubG9hZGluZzsKICAgICAKLSAg
ICBwb3N0TGlzdGVuZXJUYXNrKCZET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsRG93bmxvYWRpbmdM
aXN0ZW5lciwgbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzKTsKKyAgICBwb3N0TGlzdGVuZXJU
YXNrKERPTUFwcGxpY2F0aW9uQ2FjaGU6OkRPV05MT0FESU5HX0VWRU5ULCBtX2Fzc29jaWF0ZWRE
b2N1bWVudExvYWRlcnMpOwogCiAgICAgQVNTRVJUKG1fcGVuZGluZ0VudHJpZXMuaXNFbXB0eSgp
KTsKIApAQCAtNjk4LDggKzY5OSw4IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjptYW5p
ZmVzdE5vdEYKIHsKICAgICBtYWtlT2Jzb2xldGUoKTsKIAotICAgIHBvc3RMaXN0ZW5lclRhc2so
JkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxPYnNvbGV0ZUxpc3RlbmVyLCBtX2Fzc29jaWF0ZWRE
b2N1bWVudExvYWRlcnMpOwotICAgIHBvc3RMaXN0ZW5lclRhc2soJkRPTUFwcGxpY2F0aW9uQ2Fj
aGU6OmNhbGxFcnJvckxpc3RlbmVyLCBtX3BlbmRpbmdNYXN0ZXJSZXNvdXJjZUxvYWRlcnMpOwor
ICAgIHBvc3RMaXN0ZW5lclRhc2soRE9NQXBwbGljYXRpb25DYWNoZTo6T0JTT0xFVEVfRVZFTlQs
IG1fYXNzb2NpYXRlZERvY3VtZW50TG9hZGVycyk7CisgICAgcG9zdExpc3RlbmVyVGFzayhET01B
cHBsaWNhdGlvbkNhY2hlOjpFUlJPUl9FVkVOVCwgbV9wZW5kaW5nTWFzdGVyUmVzb3VyY2VMb2Fk
ZXJzKTsKIAogICAgIHN0b3BMb2FkaW5nKCk7CiAKQEAgLTcwOSw5ICs3MTAsOSBAQCB2b2lkIEFw
cGxpY2F0aW9uQ2FjaGVHcm91cDo6bWFuaWZlc3ROb3RGCiAgICAgd2hpbGUgKCFtX3BlbmRpbmdN
YXN0ZXJSZXNvdXJjZUxvYWRlcnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIEhhc2hTZXQ8RG9jdW1l
bnRMb2FkZXIqPjo6aXRlcmF0b3IgaXQgPSBtX3BlbmRpbmdNYXN0ZXJSZXNvdXJjZUxvYWRlcnMu
YmVnaW4oKTsKICAgICAgICAgCi0gICAgICAgIEFTU0VSVCgoKml0KS0+Y2FuZGlkYXRlQXBwbGlj
YXRpb25DYWNoZUdyb3VwKCkgPT0gdGhpcyk7Ci0gICAgICAgIEFTU0VSVCghKCppdCktPmFwcGxp
Y2F0aW9uQ2FjaGUoKSk7Ci0gICAgICAgICgqaXQpLT5zZXRDYW5kaWRhdGVBcHBsaWNhdGlvbkNh
Y2hlR3JvdXAoMCk7CisgICAgICAgIEFTU0VSVCgoKml0KS0+YXBwbGljYXRpb25DYWNoZUhvc3Qo
KS0+Y2FuZGlkYXRlQXBwbGljYXRpb25DYWNoZUdyb3VwKCkgPT0gdGhpcyk7CisgICAgICAgIEFT
U0VSVCghKCppdCktPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPmFwcGxpY2F0aW9uQ2FjaGUoKSk7
CisgICAgICAgICgqaXQpLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5zZXRDYW5kaWRhdGVBcHBs
aWNhdGlvbkNhY2hlR3JvdXAoMCk7CiAgICAgICAgIG1fcGVuZGluZ01hc3RlclJlc291cmNlTG9h
ZGVycy5yZW1vdmUoaXQpOwogICAgIH0KIApAQCAtNzQ3LDExICs3NDgsMTEgQEAgdm9pZCBBcHBs
aWNhdGlvbkNhY2hlR3JvdXA6OmNoZWNrSWZMb2FkSQogICAgICAgICBpZiAoIW1fc3RvcmFnZUlE
KQogICAgICAgICAgICAgY2FjaGVTdG9yYWdlKCkuc3RvcmVOZXdlc3RDYWNoZSh0aGlzKTsKIAot
ICAgICAgICBwb3N0TGlzdGVuZXJUYXNrKCZET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsTm9VcGRh
dGVMaXN0ZW5lciwgbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzKTsKKyAgICAgICAgcG9zdExp
c3RlbmVyVGFzayhET01BcHBsaWNhdGlvbkNhY2hlOjpOT1VQREFURV9FVkVOVCwgbV9hc3NvY2lh
dGVkRG9jdW1lbnRMb2FkZXJzKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGYWlsdXJlOgog
ICAgICAgICBBU1NFUlQoIW1fY2FjaGVCZWluZ1VwZGF0ZWQpOwotICAgICAgICBwb3N0TGlzdGVu
ZXJUYXNrKCZET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsRXJyb3JMaXN0ZW5lciwgbV9hc3NvY2lh
dGVkRG9jdW1lbnRMb2FkZXJzKTsKKyAgICAgICAgcG9zdExpc3RlbmVyVGFzayhET01BcHBsaWNh
dGlvbkNhY2hlOjpFUlJPUl9FVkVOVCwgbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzKTsKICAg
ICAgICAgaWYgKG1fY2FjaGVzLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgQVNTRVJUKG1fYXNz
b2NpYXRlZERvY3VtZW50TG9hZGVycy5pc0VtcHR5KCkpOwogICAgICAgICAgICAgZGVsZXRlIHRo
aXM7CkBAIC03ODAsNyArNzgxLDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmNoZWNr
SWZMb2FkSQogICAgICAgICAgICAgaWYgKG9sZE5ld2VzdENhY2hlKQogICAgICAgICAgICAgICAg
IGNhY2hlU3RvcmFnZSgpLnJlbW92ZShvbGROZXdlc3RDYWNoZS5nZXQoKSk7CiAgICAgICAgICAg
ICAvLyBGaXJlIHRoZSBzdWNjZXNzIGV2ZW50cy4KLSAgICAgICAgICAgIHBvc3RMaXN0ZW5lclRh
c2soaXNVcGdyYWRlQXR0ZW1wdCA/ICZET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsVXBkYXRlUmVh
ZHlMaXN0ZW5lciA6ICZET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsQ2FjaGVkTGlzdGVuZXIsIG1f
YXNzb2NpYXRlZERvY3VtZW50TG9hZGVycyk7CisgICAgICAgICAgICBwb3N0TGlzdGVuZXJUYXNr
KGlzVXBncmFkZUF0dGVtcHQgPyBET01BcHBsaWNhdGlvbkNhY2hlOjpVUERBVEVSRUFEWV9FVkVO
VCA6IERPTUFwcGxpY2F0aW9uQ2FjaGU6OkNBQ0hFRF9FVkVOVCwgbV9hc3NvY2lhdGVkRG9jdW1l
bnRMb2FkZXJzKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChjYWNoZVN0b3Jh
Z2UoKS5pc01heGltdW1TaXplUmVhY2hlZCgpICYmICFtX2NhbGxlZFJlYWNoZWRNYXhBcHBDYWNo
ZVNpemUpIHsKICAgICAgICAgICAgICAgICAvLyBXZSByYW4gb3V0IG9mIHNwYWNlLiBBbGwgdGhl
IGNoYW5nZXMgaW4gdGhlIGNhY2hlIHN0b3JhZ2UgaGF2ZQpAQCAtODAwLDcgKzgwMSw3IEBAIHZv
aWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpjaGVja0lmTG9hZEkKICAgICAgICAgICAgICAgICAv
LyBSdW4gdGhlICJjYWNoZSBmYWlsdXJlIHN0ZXBzIgogICAgICAgICAgICAgICAgIC8vIEZpcmUg
dGhlIGVycm9yIGV2ZW50cyB0byBhbGwgcGVuZGluZyBtYXN0ZXIgZW50cmllcywgYXMgd2VsbCBh
bnkgb3RoZXIgY2FjaGUgaG9zdHMKICAgICAgICAgICAgICAgICAvLyBjdXJyZW50bHkgYXNzb2Np
YXRlZCB3aXRoIGEgY2FjaGUgaW4gdGhpcyBncm91cC4KLSAgICAgICAgICAgICAgICBwb3N0TGlz
dGVuZXJUYXNrKCZET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsRXJyb3JMaXN0ZW5lciwgbV9hc3Nv
Y2lhdGVkRG9jdW1lbnRMb2FkZXJzKTsKKyAgICAgICAgICAgICAgICBwb3N0TGlzdGVuZXJUYXNr
KERPTUFwcGxpY2F0aW9uQ2FjaGU6OkVSUk9SX0VWRU5ULCBtX2Fzc29jaWF0ZWREb2N1bWVudExv
YWRlcnMpOwogICAgICAgICAgICAgICAgIC8vIERpc2Fzc29jaWF0ZSB0aGUgcGVuZGluZyBtYXN0
ZXIgZW50cmllcyBmcm9tIHRoZSBmYWlsZWQgbmV3IGNhY2hlLiBOb3RlIHRoYXQKICAgICAgICAg
ICAgICAgICAvLyBhbGwgb3RoZXIgbG9hZGVycyBpbiB0aGUgbV9hc3NvY2lhdGVkRG9jdW1lbnRM
b2FkZXJzIGFyZSBzdGlsbCBhc3NvY2lhdGVkIHdpdGgKICAgICAgICAgICAgICAgICAvLyBzb21l
IG90aGVyIGNhY2hlIGluIHRoaXMgZ3JvdXAuIFRoZXkgYXJlIG5vdCBhc3NvY2lhdGVkIHdpdGgg
dGhlIGZhaWxlZCBuZXcgY2FjaGUuCkBAIC04NDYsNyArODQ3LDcgQEAgdm9pZCBBcHBsaWNhdGlv
bkNhY2hlR3JvdXA6OnN0YXJ0TG9hZGluZwogICAgIAogICAgIEVudHJ5TWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fcGVuZGluZ0VudHJpZXMuYmVnaW4oKTsKIAotICAgIHBvc3RMaXN0ZW5lclRh
c2soJkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxQcm9ncmVzc0xpc3RlbmVyLCBtX2Fzc29jaWF0
ZWREb2N1bWVudExvYWRlcnMpOworICAgIHBvc3RMaXN0ZW5lclRhc2soRE9NQXBwbGljYXRpb25D
YWNoZTo6UFJPR1JFU1NfRVZFTlQsIG1fYXNzb2NpYXRlZERvY3VtZW50TG9hZGVycyk7CiAKICAg
ICBBU1NFUlQoIW1fY3VycmVudEhhbmRsZSk7CiAgICAgCkBAIC05MTAsNyArOTExLDcgQEAgdm9p
ZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmFzc29jaWF0ZURvYwogCiAgICAgQVNTRVJUKCFtX2lz
T2Jzb2xldGUpOwogCi0gICAgbG9hZGVyLT5zZXRBcHBsaWNhdGlvbkNhY2hlKGNhY2hlKTsKKyAg
ICBsb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPnNldEFwcGxpY2F0aW9uQ2FjaGUoY2Fj
aGUpOwogCiAgICAgQVNTRVJUKCFtX2Fzc29jaWF0ZWREb2N1bWVudExvYWRlcnMuY29udGFpbnMo
bG9hZGVyKSk7CiAgICAgbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzLmFkZChsb2FkZXIpOwpA
QCAtOTQ0LDM5ICs5NDUsNDQgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OnNjaGVkdWxl
UmVhYwogfQogCiBjbGFzcyBDYWxsQ2FjaGVMaXN0ZW5lclRhc2sgOiBwdWJsaWMgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6VGFzayB7Ci0gICAgdHlwZWRlZiB2b2lkIChET01BcHBsaWNhdGlvbkNh
Y2hlOjoqTGlzdGVuZXJGdW5jdGlvbikoKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxDYWxsQ2FjaGVMaXN0ZW5lclRhc2s+IGNyZWF0ZShMaXN0ZW5lckZ1bmN0aW9uIGxpc3RlbmVy
RnVuY3Rpb24pCisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FsbENhY2hlTGlzdGVuZXJUYXNrPiBj
cmVhdGUoUGFzc1JlZlB0cjxEb2N1bWVudExvYWRlcj4gbG9hZGVyLCBET01BcHBsaWNhdGlvbkNh
Y2hlOjpFdmVudFR5cGUgZXZlbnRUeXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBDYWxsQ2FjaGVMaXN0ZW5lclRhc2sobGlzdGVuZXJGdW5jdGlvbikpOworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IENhbGxDYWNoZUxpc3RlbmVyVGFzayhsb2FkZXIsIGV2ZW50VHlw
ZSkpOwogICAgIH0KIAogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0KQogICAgIHsKLSAgICAgICAgQVNTRVJUKGNvbnRleHQtPmlzRG9j
dW1lbnQoKSk7Ci0gICAgICAgIGlmIChET01XaW5kb3cqIHdpbmRvdyA9IHN0YXRpY19jYXN0PERv
Y3VtZW50Kj4oY29udGV4dCktPmRvbVdpbmRvdygpKSB7Ci0gICAgICAgICAgICBpZiAoRE9NQXBw
bGljYXRpb25DYWNoZSogZG9tQ2FjaGUgPSB3aW5kb3ctPm9wdGlvbmFsQXBwbGljYXRpb25DYWNo
ZSgpKQotICAgICAgICAgICAgICAgIChkb21DYWNoZS0+Km1fbGlzdGVuZXJGdW5jdGlvbikoKTsK
LSAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCBjb250
ZXh0LT5pc0RvY3VtZW50KCkpOworICAgICAgICBGcmFtZSogZnJhbWUgPSBtX2RvY3VtZW50TG9h
ZGVyLT5mcmFtZSgpOworICAgICAgICBpZiAoIWZyYW1lKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgICAgICBBU1NFUlQoZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpID09
IG1fZG9jdW1lbnRMb2FkZXIuZ2V0KCkpOworCisgICAgICAgIG1fZG9jdW1lbnRMb2FkZXItPmFw
cGxpY2F0aW9uQ2FjaGVIb3N0KCktPm5vdGlmeUV2ZW50TGlzdGVuZXIobV9ldmVudFR5cGUpOwog
ICAgIH0KIAogcHJpdmF0ZToKLSAgICBDYWxsQ2FjaGVMaXN0ZW5lclRhc2soTGlzdGVuZXJGdW5j
dGlvbiBsaXN0ZW5lckZ1bmN0aW9uKQotICAgICAgICA6IG1fbGlzdGVuZXJGdW5jdGlvbihsaXN0
ZW5lckZ1bmN0aW9uKQorICAgIENhbGxDYWNoZUxpc3RlbmVyVGFzayhQYXNzUmVmUHRyPERvY3Vt
ZW50TG9hZGVyPiBsb2FkZXIsIERPTUFwcGxpY2F0aW9uQ2FjaGU6OkV2ZW50VHlwZSBldmVudFR5
cGUpCisgICAgICAgIDogbV9kb2N1bWVudExvYWRlcihsb2FkZXIpCisgICAgICAgICwgbV9ldmVu
dFR5cGUoZXZlbnRUeXBlKQogICAgIHsKICAgICB9CiAKLSAgICBMaXN0ZW5lckZ1bmN0aW9uIG1f
bGlzdGVuZXJGdW5jdGlvbjsKKyAgICBSZWZQdHI8RG9jdW1lbnRMb2FkZXI+IG1fZG9jdW1lbnRM
b2FkZXI7CisgICAgRE9NQXBwbGljYXRpb25DYWNoZTo6RXZlbnRUeXBlIG1fZXZlbnRUeXBlOwog
fTsKIAotdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OnBvc3RMaXN0ZW5lclRhc2soTGlzdGVu
ZXJGdW5jdGlvbiBsaXN0ZW5lckZ1bmN0aW9uLCBjb25zdCBIYXNoU2V0PERvY3VtZW50TG9hZGVy
Kj4mIGxvYWRlclNldCkKK3ZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpwb3N0TGlzdGVuZXJU
YXNrKERPTUFwcGxpY2F0aW9uQ2FjaGU6OkV2ZW50VHlwZSBldmVudFR5cGUsIGNvbnN0IEhhc2hT
ZXQ8RG9jdW1lbnRMb2FkZXIqPiYgbG9hZGVyU2V0KQogewogICAgIEhhc2hTZXQ8RG9jdW1lbnRM
b2FkZXIqPjo6Y29uc3RfaXRlcmF0b3IgbG9hZGVyU2V0RW5kID0gbG9hZGVyU2V0LmVuZCgpOwog
ICAgIGZvciAoSGFzaFNldDxEb2N1bWVudExvYWRlcio+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0g
bG9hZGVyU2V0LmJlZ2luKCk7IGl0ZXIgIT0gbG9hZGVyU2V0RW5kOyArK2l0ZXIpCi0gICAgICAg
IHBvc3RMaXN0ZW5lclRhc2sobGlzdGVuZXJGdW5jdGlvbiwgKml0ZXIpOworICAgICAgICBwb3N0
TGlzdGVuZXJUYXNrKGV2ZW50VHlwZSwgKml0ZXIpOwogfQogCi12b2lkIEFwcGxpY2F0aW9uQ2Fj
aGVHcm91cDo6cG9zdExpc3RlbmVyVGFzayhMaXN0ZW5lckZ1bmN0aW9uIGxpc3RlbmVyRnVuY3Rp
b24sIERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCit2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6
cG9zdExpc3RlbmVyVGFzayhET01BcHBsaWNhdGlvbkNhY2hlOjpFdmVudFR5cGUgZXZlbnRUeXBl
LCBEb2N1bWVudExvYWRlciogbG9hZGVyKQogewogICAgIEZyYW1lKiBmcmFtZSA9IGxvYWRlci0+
ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQpAQCAtOTg0LDcgKzk5MCw3IEBAIHZvaWQgQXBwbGlj
YXRpb25DYWNoZUdyb3VwOjpwb3N0TGlzdGVuZXIKICAgICAKICAgICBBU1NFUlQoZnJhbWUtPmxv
YWRlcigpLT5kb2N1bWVudExvYWRlcigpID09IGxvYWRlcik7CiAKLSAgICBmcmFtZS0+ZG9jdW1l
bnQoKS0+cG9zdFRhc2soQ2FsbENhY2hlTGlzdGVuZXJUYXNrOjpjcmVhdGUobGlzdGVuZXJGdW5j
dGlvbikpOworICAgIGZyYW1lLT5kb2N1bWVudCgpLT5wb3N0VGFzayhDYWxsQ2FjaGVMaXN0ZW5l
clRhc2s6OmNyZWF0ZShsb2FkZXIsIGV2ZW50VHlwZSkpOwogfQogCiB2b2lkIEFwcGxpY2F0aW9u
Q2FjaGVHcm91cDo6Y2xlYXJTdG9yYWdlSUQoKQpJbmRleDogV2ViQ29yZS9sb2FkZXIvYXBwY2Fj
aGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIv
YXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmgJKHJldmlzaW9uIDQ2NTY4KQorKysgV2Vi
Q29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUg
PHd0Zi9IYXNoU2V0Lmg+CiAKKyNpbmNsdWRlICJET01BcHBsaWNhdGlvbkNhY2hlLmgiCiAjaW5j
bHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiUmVz
b3VyY2VIYW5kbGUuaCIKQEAgLTQyLDcgKzQzLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBBcHBsaWNhdGlvbkNhY2hlOwogY2xhc3MgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOwot
Y2xhc3MgRE9NQXBwbGljYXRpb25DYWNoZTsKIGNsYXNzIERvY3VtZW50OwogY2xhc3MgRG9jdW1l
bnRMb2FkZXI7CiBjbGFzcyBGcmFtZTsKQEAgLTkyLDkgKzkyLDggQEAgcHVibGljOgogCiBwcml2
YXRlOgogICAgIHR5cGVkZWYgdm9pZCAoRE9NQXBwbGljYXRpb25DYWNoZTo6Kkxpc3RlbmVyRnVu
Y3Rpb24pKCk7Ci0gICAgc3RhdGljIHZvaWQgcG9zdExpc3RlbmVyVGFzayhMaXN0ZW5lckZ1bmN0
aW9uLCBjb25zdCBIYXNoU2V0PERvY3VtZW50TG9hZGVyKj4mKTsKLSAgICBzdGF0aWMgdm9pZCBw
b3N0TGlzdGVuZXJUYXNrKExpc3RlbmVyRnVuY3Rpb24sIGNvbnN0IFZlY3RvcjxSZWZQdHI8RG9j
dW1lbnRMb2FkZXI+ID4mIGxvYWRlcnMpOwotICAgIHN0YXRpYyB2b2lkIHBvc3RMaXN0ZW5lclRh
c2soTGlzdGVuZXJGdW5jdGlvbiwgRG9jdW1lbnRMb2FkZXIqKTsKKyAgICBzdGF0aWMgdm9pZCBw
b3N0TGlzdGVuZXJUYXNrKERPTUFwcGxpY2F0aW9uQ2FjaGU6OkV2ZW50VHlwZSwgY29uc3QgSGFz
aFNldDxEb2N1bWVudExvYWRlcio+Jik7CisgICAgc3RhdGljIHZvaWQgcG9zdExpc3RlbmVyVGFz
ayhET01BcHBsaWNhdGlvbkNhY2hlOjpFdmVudFR5cGUsIERvY3VtZW50TG9hZGVyKik7CiAgICAg
dm9pZCBzY2hlZHVsZVJlYWNoZWRNYXhBcHBDYWNoZVNpemVDYWxsYmFjaygpOwogCiAgICAgUGFz
c1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gY3JlYXRlUmVzb3VyY2VIYW5kbGUoY29uc3QgS1VSTCYs
IEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogbmV3ZXN0Q2FjaGVkUmVzb3VyY2UpOwpJbmRleDog
V2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVI
b3N0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVIb3N0LmgiCisKKyNpZiBFTkFCTEUoT0ZGTElORV9X
RUJfQVBQTElDQVRJT05TKQorCisjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZS5oIgorI2luY2x1
ZGUgIkFwcGxpY2F0aW9uQ2FjaGVHcm91cC5oIgorI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZS5oIgorI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRE9NQXBw
bGljYXRpb25DYWNoZS5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2Fk
ZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgIk1haW5SZXNv
dXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiUmVz
b3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitBcHBsaWNhdGlvbkNhY2hlSG9zdDo6QXBwbGljYXRpb25DYWNoZUhvc3QoRG9jdW1l
bnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyKQorICAgIDogbV9ET01BcHBsaWNhdGlvbkNhY2hlKDAp
CisgICAgLCBtX2RvY3VtZW50TG9hZGVyKGRvY3VtZW50TG9hZGVyKQorICAgICwgbV9jYW5kaWRh
dGVBcHBsaWNhdGlvbkNhY2hlR3JvdXAoMCkKK3sKKyAgICBBU1NFUlQobV9kb2N1bWVudExvYWRl
cik7Cit9CisKK0FwcGxpY2F0aW9uQ2FjaGVIb3N0Ojp+QXBwbGljYXRpb25DYWNoZUhvc3QoKQor
eworICAgIGlmIChtX2FwcGxpY2F0aW9uQ2FjaGUpCisgICAgICAgIG1fYXBwbGljYXRpb25DYWNo
ZS0+Z3JvdXAoKS0+ZGlzYXNzb2NpYXRlRG9jdW1lbnRMb2FkZXIobV9kb2N1bWVudExvYWRlcik7
CisgICAgZWxzZSBpZiAobV9jYW5kaWRhdGVBcHBsaWNhdGlvbkNhY2hlR3JvdXApCisgICAgICAg
IG1fY2FuZGlkYXRlQXBwbGljYXRpb25DYWNoZUdyb3VwLT5kaXNhc3NvY2lhdGVEb2N1bWVudExv
YWRlcihtX2RvY3VtZW50TG9hZGVyKTsKK30KKwordm9pZCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6
c2VsZWN0Q2FjaGVXaXRob3V0TWFuaWZlc3QoKQoreworICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91
cDo6c2VsZWN0Q2FjaGVXaXRob3V0TWFuaWZlc3RVUkwobV9kb2N1bWVudExvYWRlci0+ZnJhbWUo
KSk7Cit9CisKK3ZvaWQgQXBwbGljYXRpb25DYWNoZUhvc3Q6OnNlbGVjdENhY2hlV2l0aE1hbmlm
ZXN0KGNvbnN0IEtVUkwmIG1hbmlmZXN0VVJMKQoreworICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91
cDo6c2VsZWN0Q2FjaGUobV9kb2N1bWVudExvYWRlci0+ZnJhbWUoKSwgbWFuaWZlc3RVUkwpOwor
fQorCit2b2lkIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjptYXliZUxvYWRNYWluUmVzb3VyY2UoUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdWJzdGl0dXRlRGF0YSYgc3Vic3RpdHV0ZURhdGEpCit7
CisgICAgLy8gQ2hlY2sgaWYgdGhpcyByZXF1ZXN0IHNob3VsZCBiZSBsb2FkZWQgZnJvbSB0aGUg
YXBwbGljYXRpb24gY2FjaGUKKyAgICBpZiAoIXN1YnN0aXR1dGVEYXRhLmlzVmFsaWQoKSAmJiBp
c0FwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKCkpIHsKKyAgICAgICAgQVNTRVJUKCFtX21haW5SZXNv
dXJjZUFwcGxpY2F0aW9uQ2FjaGUpOworCisgICAgICAgIG1fbWFpblJlc291cmNlQXBwbGljYXRp
b25DYWNoZSA9IEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6Y2FjaGVGb3JNYWluUmVxdWVzdChyZXF1
ZXN0LCBtX2RvY3VtZW50TG9hZGVyKTsKKworICAgICAgICBpZiAobV9tYWluUmVzb3VyY2VBcHBs
aWNhdGlvbkNhY2hlKSB7CisgICAgICAgICAgICAvLyBHZXQgdGhlIHJlc291cmNlIGZyb20gdGhl
IGFwcGxpY2F0aW9uIGNhY2hlLiBCeSBkZWZpbml0aW9uLCBjYWNoZUZvck1haW5SZXF1ZXN0KCkg
cmV0dXJucyBhIGNhY2hlIHRoYXQgY29udGFpbnMgdGhlIHJlc291cmNlLgorICAgICAgICAgICAg
QXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSA9IG1fbWFpblJlc291cmNlQXBwbGlj
YXRpb25DYWNoZS0+cmVzb3VyY2VGb3JSZXF1ZXN0KHJlcXVlc3QpOworICAgICAgICAgICAgc3Vi
c3RpdHV0ZURhdGEgPSBTdWJzdGl0dXRlRGF0YShyZXNvdXJjZS0+ZGF0YSgpLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UtPnJlc3BvbnNlKCku
bWltZVR5cGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVzb3VyY2UtPnJlc3BvbnNlKCkudGV4dEVuY29kaW5nTmFtZSgpLCBLVVJMKCkpOworICAgICAg
ICB9CisgICAgfQorfQorCitib29sIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjptYXliZUxvYWRGYWxs
YmFja0Zvck1haW5SZXNwb25zZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHIpCit7CisgICAgaWYgKHIuaHR0cFN0YXR1c0NvZGUoKSAvIDEw
MCA9PSA0IHx8IHIuaHR0cFN0YXR1c0NvZGUoKSAvIDEwMCA9PSA1KSB7CisgICAgICAgIEFTU0VS
VCghbV9tYWluUmVzb3VyY2VBcHBsaWNhdGlvbkNhY2hlKTsKKyAgICAgICAgaWYgKGlzQXBwbGlj
YXRpb25DYWNoZUVuYWJsZWQoKSkgeworICAgICAgICAgICAgbV9tYWluUmVzb3VyY2VBcHBsaWNh
dGlvbkNhY2hlID0gQXBwbGljYXRpb25DYWNoZUdyb3VwOjpmYWxsYmFja0NhY2hlRm9yTWFpblJl
cXVlc3QocmVxdWVzdCwgZG9jdW1lbnRMb2FkZXIoKSk7CisKKyAgICAgICAgICAgIGlmIChzY2hl
ZHVsZUxvYWRGYWxsYmFja1Jlc291cmNlRnJvbUFwcGxpY2F0aW9uQ2FjaGUoZG9jdW1lbnRMb2Fk
ZXIoKS0+bWFpblJlc291cmNlTG9hZGVyKCksIG1fbWFpblJlc291cmNlQXBwbGljYXRpb25DYWNo
ZS5nZXQoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjptYXli
ZUxvYWRGYWxsYmFja0Zvck1haW5FcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQoreworICAgIGlmICghZXJyb3IuaXNDYW5jZWxs
YXRpb24oKSkgeworICAgICAgICBBU1NFUlQoIW1fbWFpblJlc291cmNlQXBwbGljYXRpb25DYWNo
ZSk7CisgICAgICAgIGlmIChpc0FwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKCkpIHsKKyAgICAgICAg
ICAgIG1fbWFpblJlc291cmNlQXBwbGljYXRpb25DYWNoZSA9IEFwcGxpY2F0aW9uQ2FjaGVHcm91
cDo6ZmFsbGJhY2tDYWNoZUZvck1haW5SZXF1ZXN0KHJlcXVlc3QsIG1fZG9jdW1lbnRMb2FkZXIp
OworCisgICAgICAgICAgICBpZiAoc2NoZWR1bGVMb2FkRmFsbGJhY2tSZXNvdXJjZUZyb21BcHBs
aWNhdGlvbkNhY2hlKGRvY3VtZW50TG9hZGVyKCktPm1haW5SZXNvdXJjZUxvYWRlcigpLCBtX21h
aW5SZXNvdXJjZUFwcGxpY2F0aW9uQ2FjaGUuZ2V0KCkpKQorICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBB
cHBsaWNhdGlvbkNhY2hlSG9zdDo6bWFpblJlc291cmNlRGF0YVJlY2VpdmVkKGNvbnN0IGNoYXIq
LCBpbnQsIGxvbmcgbG9uZywgYm9vbCkKK3sKKyAgICAvLyBUaGlzIG1ldGhvZCBpcyBoZXJlIHRv
IGZhY2lsaXRhdGUgYWx0ZXJuYXRlIGltcGxlbWV0YXRpb25zIG9mIHRoaXMgaW50ZXJmYWNlIGJ5
IHRoZSBob3N0IGJyb3dzZXIuCit9CisKK3ZvaWQgQXBwbGljYXRpb25DYWNoZUhvc3Q6OmZhaWxl
ZExvYWRpbmdNYWluUmVzb3VyY2UoKQoreworICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogZ3Jv
dXAgPSBtX2NhbmRpZGF0ZUFwcGxpY2F0aW9uQ2FjaGVHcm91cDsKKyAgICBpZiAoIWdyb3VwICYm
IG1fYXBwbGljYXRpb25DYWNoZSkgeworICAgICAgICBBU1NFUlQoIW1haW5SZXNvdXJjZUFwcGxp
Y2F0aW9uQ2FjaGUoKSk7IC8vIElmIHRoZSBtYWluIHJlc291cmNlIHdlcmUgbG9hZGVkIGZyb20g
YSBjYWNoZSwgaXQgd291bGRuJ3QgZmFpbC4KKyAgICAgICAgZ3JvdXAgPSBtX2FwcGxpY2F0aW9u
Q2FjaGUtPmdyb3VwKCk7CisgICAgfQorICAgIAorICAgIGlmIChncm91cCkKKyAgICAgICAgZ3Jv
dXAtPmZhaWxlZExvYWRpbmdNYWluUmVzb3VyY2UobV9kb2N1bWVudExvYWRlcik7Cit9CisKK3Zv
aWQgQXBwbGljYXRpb25DYWNoZUhvc3Q6OmZpbmlzaGVkTG9hZGluZ01haW5SZXNvdXJjZSgpCit7
CisgICAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBncm91cCA9IGNhbmRpZGF0ZUFwcGxpY2F0aW9u
Q2FjaGVHcm91cCgpOworICAgIGlmICghZ3JvdXAgJiYgYXBwbGljYXRpb25DYWNoZSgpICYmICFt
YWluUmVzb3VyY2VBcHBsaWNhdGlvbkNhY2hlKCkpCisgICAgICAgIGdyb3VwID0gYXBwbGljYXRp
b25DYWNoZSgpLT5ncm91cCgpOworICAgIAorICAgIGlmIChncm91cCkKKyAgICAgICAgZ3JvdXAt
PmZpbmlzaGVkTG9hZGluZ01haW5SZXNvdXJjZShtX2RvY3VtZW50TG9hZGVyKTsKK30KKworYm9v
bCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6bWF5YmVMb2FkUmVzb3VyY2UoUmVzb3VyY2VMb2FkZXIq
IGxvYWRlciwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBLVVJMJiBvcmlnaW5hbFVS
TCkKK3sKKyAgICBpZiAoIWlzQXBwbGljYXRpb25DYWNoZUVuYWJsZWQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIGlmIChyZXF1ZXN0LnVybCgpICE9IG9yaWdpbmFsVVJMKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJl
c291cmNlOworICAgIGlmICghc2hvdWxkTG9hZFJlc291cmNlRnJvbUFwcGxpY2F0aW9uQ2FjaGUo
cmVxdWVzdCwgcmVzb3VyY2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgbV9k
b2N1bWVudExvYWRlci0+bV9wZW5kaW5nU3Vic3RpdHV0ZVJlc291cmNlcy5zZXQobG9hZGVyLCBy
ZXNvdXJjZSk7CisgICAgbV9kb2N1bWVudExvYWRlci0+ZGVsaXZlclN1YnN0aXR1dGVSZXNvdXJj
ZXNBZnRlckRlbGF5KCk7CisgICAgICAgIAorICAgIHJldHVybiB0cnVlOworfQorCitib29sIEFw
cGxpY2F0aW9uQ2FjaGVIb3N0OjptYXliZUxvYWRGYWxsYmFja0ZvclJlZGlyZWN0KFJlc291cmNl
TG9hZGVyKiByZXNvdXJjZUxvYWRlciwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQoreworICAgIGlmICghcmVkaXJlY3RS
ZXNwb25zZS5pc051bGwoKSAmJiAhcHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFsKHJlcXVlc3Qu
dXJsKCksIHJlZGlyZWN0UmVzcG9uc2UudXJsKCkpKQorICAgICAgICBpZiAoc2NoZWR1bGVMb2Fk
RmFsbGJhY2tSZXNvdXJjZUZyb21BcHBsaWNhdGlvbkNhY2hlKHJlc291cmNlTG9hZGVyKSkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBcHBs
aWNhdGlvbkNhY2hlSG9zdDo6bWF5YmVMb2FkRmFsbGJhY2tGb3JSZXNwb25zZShSZXNvdXJjZUxv
YWRlciogcmVzb3VyY2VMb2FkZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQor
eworICAgIGlmIChyZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpIC8gMTAwID09IDQgfHwgcmVzcG9u
c2UuaHR0cFN0YXR1c0NvZGUoKSAvIDEwMCA9PSA1KQorICAgICAgICBpZiAoc2NoZWR1bGVMb2Fk
RmFsbGJhY2tSZXNvdXJjZUZyb21BcHBsaWNhdGlvbkNhY2hlKHJlc291cmNlTG9hZGVyKSkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBcHBs
aWNhdGlvbkNhY2hlSG9zdDo6bWF5YmVMb2FkRmFsbGJhY2tGb3JFcnJvcihSZXNvdXJjZUxvYWRl
ciogcmVzb3VyY2VMb2FkZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQoreworICAgIGlm
ICghZXJyb3IuaXNDYW5jZWxsYXRpb24oKSkKKyAgICAgICAgaWYgKHNjaGVkdWxlTG9hZEZhbGxi
YWNrUmVzb3VyY2VGcm9tQXBwbGljYXRpb25DYWNoZShyZXNvdXJjZUxvYWRlcikpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQXBwbGljYXRp
b25DYWNoZUhvc3Q6Om1heWJlTG9hZFN5bmNocm9ub3VzbHkoUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZl
Y3RvcjxjaGFyPiYgZGF0YSkKK3sKKyAgICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291
cmNlOworICAgIGlmIChzaG91bGRMb2FkUmVzb3VyY2VGcm9tQXBwbGljYXRpb25DYWNoZShyZXF1
ZXN0LCByZXNvdXJjZSkpIHsKKyAgICAgICAgaWYgKHJlc291cmNlKSB7CisgICAgICAgICAgICBy
ZXNwb25zZSA9IHJlc291cmNlLT5yZXNwb25zZSgpOworICAgICAgICAgICAgZGF0YS5hcHBlbmQo
cmVzb3VyY2UtPmRhdGEoKS0+ZGF0YSgpLCByZXNvdXJjZS0+ZGF0YSgpLT5zaXplKCkpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXJyb3IgPSBkb2N1bWVudExvYWRlcigpLT5mcmFt
ZUxvYWRlcigpLT5jbGllbnQoKS0+Y2Fubm90U2hvd1VSTEVycm9yKHJlcXVlc3QpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgQXBwbGljYXRpb25DYWNoZUhvc3Q6Om1heWJlTG9hZEZhbGxiYWNrU3luY2hyb25vdXNs
eShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlRXJyb3ImIGVycm9yLCBS
ZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQoreworICAgIC8v
IElmIG5vcm1hbCBsb2FkaW5nIHJlc3VsdHMgaW4gYSByZWRpcmVjdCB0byBhIHJlc291cmNlIHdp
dGggYW5vdGhlciBvcmlnaW4gKGluZGljYXRpdmUgb2YgYSBjYXB0aXZlIHBvcnRhbCksIG9yIGEg
NHh4IG9yIDV4eCBzdGF0dXMgY29kZSBvciBlcXVpdmFsZW50LAorICAgIC8vIG9yIGlmIHRoZXJl
IHdlcmUgbmV0d29yayBlcnJvcnMgKGJ1dCBub3QgaWYgdGhlIHVzZXIgY2FuY2VsZWQgdGhlIGRv
d25sb2FkKSwgdGhlbiBpbnN0ZWFkIGdldCwgZnJvbSB0aGUgY2FjaGUsIHRoZSByZXNvdXJjZSBv
ZiB0aGUgZmFsbGJhY2sgZW50cnkKKyAgICAvLyBjb3JyZXNwb25kaW5nIHRvIHRoZSBtYXRjaGVk
IG5hbWVzcGFjZS4KKyAgICBpZiAoKCFlcnJvci5pc051bGwoKSAmJiAhZXJyb3IuaXNDYW5jZWxs
YXRpb24oKSkKKyAgICAgICAgIHx8IHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgLyAxMDAgPT0g
NCB8fCByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpIC8gMTAwID09IDUKKyAgICAgICAgIHx8ICFw
cm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwocmVxdWVzdC51cmwoKSwgcmVzcG9uc2UudXJsKCkp
KSB7CisgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2U7CisgICAgICAg
IGlmIChnZXRBcHBsaWNhdGlvbkNhY2hlRmFsbGJhY2tSZXNvdXJjZShyZXF1ZXN0LCByZXNvdXJj
ZSkpIHsKKyAgICAgICAgICAgIHJlc3BvbnNlID0gcmVzb3VyY2UtPnJlc3BvbnNlKCk7CisgICAg
ICAgICAgICBkYXRhLmNsZWFyKCk7CisgICAgICAgICAgICBkYXRhLmFwcGVuZChyZXNvdXJjZS0+
ZGF0YSgpLT5kYXRhKCksIHJlc291cmNlLT5kYXRhKCktPnNpemUoKSk7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK2Jvb2wgQXBwbGljYXRpb25DYWNoZUhvc3Q6OmNhbkNhY2hlSW5QYWdlQ2FjaGUo
KSBjb25zdCAKK3sKKyAgICByZXR1cm4gIWFwcGxpY2F0aW9uQ2FjaGUoKSAmJiAhY2FuZGlkYXRl
QXBwbGljYXRpb25DYWNoZUdyb3VwKCk7Cit9CisKK3ZvaWQgQXBwbGljYXRpb25DYWNoZUhvc3Q6
OnNldENhbmRpZGF0ZUFwcGxpY2F0aW9uQ2FjaGVHcm91cChBcHBsaWNhdGlvbkNhY2hlR3JvdXAq
IGdyb3VwKQoreworICAgIEFTU0VSVCghbV9hcHBsaWNhdGlvbkNhY2hlKTsKKyAgICBtX2NhbmRp
ZGF0ZUFwcGxpY2F0aW9uQ2FjaGVHcm91cCA9IGdyb3VwOworfQorICAgIAordm9pZCBBcHBsaWNh
dGlvbkNhY2hlSG9zdDo6c2V0QXBwbGljYXRpb25DYWNoZShQYXNzUmVmUHRyPEFwcGxpY2F0aW9u
Q2FjaGU+IGFwcGxpY2F0aW9uQ2FjaGUpCit7CisgICAgaWYgKG1fY2FuZGlkYXRlQXBwbGljYXRp
b25DYWNoZUdyb3VwKSB7CisgICAgICAgIEFTU0VSVCghbV9hcHBsaWNhdGlvbkNhY2hlKTsKKyAg
ICAgICAgbV9jYW5kaWRhdGVBcHBsaWNhdGlvbkNhY2hlR3JvdXAgPSAwOworICAgIH0KKworICAg
IG1fYXBwbGljYXRpb25DYWNoZSA9IGFwcGxpY2F0aW9uQ2FjaGU7Cit9CisKK2Jvb2wgQXBwbGlj
YXRpb25DYWNoZUhvc3Q6OnNob3VsZExvYWRSZXNvdXJjZUZyb21BcHBsaWNhdGlvbkNhY2hlKGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiYg
cmVzb3VyY2UpCit7CisgICAgQXBwbGljYXRpb25DYWNoZSogY2FjaGUgPSBhcHBsaWNhdGlvbkNh
Y2hlKCk7CisgICAgaWYgKCFjYWNoZSB8fCAhY2FjaGUtPmlzQ29tcGxldGUoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgLy8gSWYgdGhlIHJlc291cmNlIGlzIG5vdCBhIEhUVFAvSFRU
UFMgR0VULCB0aGVuIGFib3J0CisgICAgaWYgKCFBcHBsaWNhdGlvbkNhY2hlOjpyZXF1ZXN0SXNI
VFRQT3JIVFRQU0dldChyZXF1ZXN0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8g
SWYgdGhlIHJlc291cmNlJ3MgVVJMIGlzIGFuIG1hc3RlciBlbnRyeSwgdGhlIG1hbmlmZXN0LCBh
biBleHBsaWNpdCBlbnRyeSwgb3IgYSBmYWxsYmFjayBlbnRyeQorICAgIC8vIGluIHRoZSBhcHBs
aWNhdGlvbiBjYWNoZSwgdGhlbiBnZXQgdGhlIHJlc291cmNlIGZyb20gdGhlIGNhY2hlIChpbnN0
ZWFkIG9mIGZldGNoaW5nIGl0KS4KKyAgICByZXNvdXJjZSA9IGNhY2hlLT5yZXNvdXJjZUZvclVS
TChyZXF1ZXN0LnVybCgpKTsKKworICAgIC8vIFJlc291cmNlcyB0aGF0IG1hdGNoIGZhbGxiYWNr
IG5hbWVzcGFjZXMgb3Igb25saW5lIHdoaXRlbGlzdCBlbnRyaWVzIGFyZSBmZXRjaGVkIGZyb20g
dGhlIG5ldHdvcmssCisgICAgLy8gdW5sZXNzIHRoZXkgYXJlIGFsc28gY2FjaGVkLgorICAgIGlm
ICghcmVzb3VyY2UgJiYgKGNhY2hlLT51cmxNYXRjaGVzRmFsbGJhY2tOYW1lc3BhY2UocmVxdWVz
dC51cmwoKSkgfHwgY2FjaGUtPmlzVVJMSW5PbmxpbmVXaGl0ZWxpc3QocmVxdWVzdC51cmwoKSkp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBSZXNvdXJjZXMgdGhhdCBhcmUgbm90
IHByZXNlbnQgaW4gdGhlIG1hbmlmZXN0IHdpbGwgYWx3YXlzIGZhaWwgdG8gbG9hZCAoYXQgbGVh
c3QsIGFmdGVyIHRoZQorICAgIC8vIGNhY2hlIGhhcyBiZWVuIHByaW1lZCB0aGUgZmlyc3QgdGlt
ZSksIG1ha2luZyB0aGUgdGVzdGluZyBvZiBvZmZsaW5lIGFwcGxpY2F0aW9ucyBzaW1wbGVyLgor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpnZXRBcHBs
aWNhdGlvbkNhY2hlRmFsbGJhY2tSZXNvdXJjZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QsIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSomIHJlc291cmNlLCBBcHBsaWNhdGlvbkNhY2hl
KiBjYWNoZSkKK3sKKyAgICBpZiAoIWNhY2hlKSB7CisgICAgICAgIGNhY2hlID0gYXBwbGljYXRp
b25DYWNoZSgpOworICAgICAgICBpZiAoIWNhY2hlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICBpZiAoIWNhY2hlLT5pc0NvbXBsZXRlKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICAvLyBJZiB0aGUgcmVzb3VyY2UgaXMgbm90IGEgSFRUUC9IVFRQUyBH
RVQsIHRoZW4gYWJvcnQKKyAgICBpZiAoIUFwcGxpY2F0aW9uQ2FjaGU6OnJlcXVlc3RJc0hUVFBP
ckhUVFBTR2V0KHJlcXVlc3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBLVVJMIGZh
bGxiYWNrVVJMOworICAgIGlmICghY2FjaGUtPnVybE1hdGNoZXNGYWxsYmFja05hbWVzcGFjZShy
ZXF1ZXN0LnVybCgpLCAmZmFsbGJhY2tVUkwpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICByZXNvdXJjZSA9IGNhY2hlLT5yZXNvdXJjZUZvclVSTChmYWxsYmFja1VSTCk7CisgICAgQVNT
RVJUKHJlc291cmNlKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEFwcGxpY2F0aW9u
Q2FjaGVIb3N0OjpzY2hlZHVsZUxvYWRGYWxsYmFja1Jlc291cmNlRnJvbUFwcGxpY2F0aW9uQ2Fj
aGUoUmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgQXBwbGljYXRpb25DYWNoZSogY2FjaGUpCit7Cisg
ICAgaWYgKCFpc0FwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2U7CisgICAgaWYgKCFn
ZXRBcHBsaWNhdGlvbkNhY2hlRmFsbGJhY2tSZXNvdXJjZShsb2FkZXItPnJlcXVlc3QoKSwgcmVz
b3VyY2UsIGNhY2hlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9kb2N1bWVudExv
YWRlci0+bV9wZW5kaW5nU3Vic3RpdHV0ZVJlc291cmNlcy5zZXQobG9hZGVyLCByZXNvdXJjZSk7
CisgICAgbV9kb2N1bWVudExvYWRlci0+ZGVsaXZlclN1YnN0aXR1dGVSZXNvdXJjZXNBZnRlckRl
bGF5KCk7CisgICAgCisgICAgbG9hZGVyLT5oYW5kbGUoKS0+Y2FuY2VsKCk7CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworRE9NQXBwbGljYXRpb25DYWNoZTo6U3RhdHVzIEFwcGxpY2F0aW9uQ2Fj
aGVIb3N0OjpzdGF0dXMoKSBjb25zdAoreworICAgIEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlID0g
YXBwbGljYXRpb25DYWNoZSgpOyAgICAKKyAgICBpZiAoIWNhY2hlKQorICAgICAgICByZXR1cm4g
RE9NQXBwbGljYXRpb25DYWNoZTo6VU5DQUNIRUQ7CisKKyAgICBzd2l0Y2ggKGNhY2hlLT5ncm91
cCgpLT51cGRhdGVTdGF0dXMoKSkgeworICAgICAgICBjYXNlIEFwcGxpY2F0aW9uQ2FjaGVHcm91
cDo6Q2hlY2tpbmc6CisgICAgICAgICAgICByZXR1cm4gRE9NQXBwbGljYXRpb25DYWNoZTo6Q0hF
Q0tJTkc7CisgICAgICAgIGNhc2UgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpEb3dubG9hZGluZzoK
KyAgICAgICAgICAgIHJldHVybiBET01BcHBsaWNhdGlvbkNhY2hlOjpET1dOTE9BRElORzsKKyAg
ICAgICAgY2FzZSBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OklkbGU6IHsKKyAgICAgICAgICAgIGlm
IChjYWNoZS0+Z3JvdXAoKS0+aXNPYnNvbGV0ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBE
T01BcHBsaWNhdGlvbkNhY2hlOjpPQlNPTEVURTsKKyAgICAgICAgICAgIGlmIChjYWNoZSAhPSBj
YWNoZS0+Z3JvdXAoKS0+bmV3ZXN0Q2FjaGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gRE9N
QXBwbGljYXRpb25DYWNoZTo6VVBEQVRFUkVBRFk7CisgICAgICAgICAgICByZXR1cm4gRE9NQXBw
bGljYXRpb25DYWNoZTo6SURMRTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiBET01BcHBsaWNhdGlvbkNhY2hlOjpVTkNBQ0hFRDsKK30K
KworYm9vbCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6dXBkYXRlKCkKK3sKKyAgICBBcHBsaWNhdGlv
bkNhY2hlKiBjYWNoZSA9IGFwcGxpY2F0aW9uQ2FjaGUoKTsKKyAgICBpZiAoIWNhY2hlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FjaGUtPmdyb3VwKCktPnVwZGF0ZShtX2RvY3VtZW50
TG9hZGVyLT5mcmFtZSgpLCBBcHBsaWNhdGlvbkNhY2hlVXBkYXRlV2l0aG91dEJyb3dzaW5nQ29u
dGV4dCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQXBwbGljYXRpb25DYWNoZUhvc3Q6
OnN3YXBDYWNoZSgpCit7CisgICAgQXBwbGljYXRpb25DYWNoZSogY2FjaGUgPSBhcHBsaWNhdGlv
bkNhY2hlKCk7CisgICAgaWYgKCFjYWNoZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Ly8gSWYgdGhlIGdyb3VwIG9mIGFwcGxpY2F0aW9uIGNhY2hlcyB0byB3aGljaCBjYWNoZSBiZWxv
bmdzIGhhcyB0aGUgbGlmZWN5Y2xlIHN0YXR1cyBvYnNvbGV0ZSwgdW5hc3NvY2lhdGUgZG9jdW1l
bnQgZnJvbSBjYWNoZS4KKyAgICBpZiAoY2FjaGUtPmdyb3VwKCktPmlzT2Jzb2xldGUoKSkgewor
ICAgICAgICBjYWNoZS0+Z3JvdXAoKS0+ZGlzYXNzb2NpYXRlRG9jdW1lbnRMb2FkZXIobV9kb2N1
bWVudExvYWRlcik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIElmIHRo
ZXJlIGlzIG5vIG5ld2VyIGNhY2hlLCByYWlzZSBhbiBJTlZBTElEX1NUQVRFX0VSUiBleGNlcHRp
b24uCisgICAgQXBwbGljYXRpb25DYWNoZSogbmV3ZXN0Q2FjaGUgPSBjYWNoZS0+Z3JvdXAoKS0+
bmV3ZXN0Q2FjaGUoKTsKKyAgICBpZiAoY2FjaGUgPT0gbmV3ZXN0Q2FjaGUpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICBBU1NFUlQoY2FjaGUtPmdyb3VwKCkgPT0gbmV3ZXN0Q2Fj
aGUtPmdyb3VwKCkpOworICAgIHNldEFwcGxpY2F0aW9uQ2FjaGUobmV3ZXN0Q2FjaGUpOworICAg
IAorICAgIHJldHVybiB0cnVlOworfQorCitib29sIEFwcGxpY2F0aW9uQ2FjaGVIb3N0Ojppc0Fw
cGxpY2F0aW9uQ2FjaGVFbmFibGVkKCkKK3sKKyAgICByZXR1cm4gbV9kb2N1bWVudExvYWRlci0+
ZnJhbWUoKS0+c2V0dGluZ3MoKQorICAgICAgICAgICAmJiBtX2RvY3VtZW50TG9hZGVyLT5mcmFt
ZSgpLT5zZXR0aW5ncygpLT5vZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQoKTsKK30K
KworfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmICAvLyBFTkFCTEUoQVBQTElDQVRJ
T05fQ0FDSEUpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9B
cHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZXhlY3V0YWJsZQog
ICArICoKCkluZGV4OiBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlSG9z
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGVIb3N0LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNh
dGlvbkNhY2hlSG9zdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIENv
cHlyaWdodCAoYykgMjAwOSwgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBBcHBsaWNhdGlvbkNhY2hlSG9zdF9oCisjZGVmaW5lIEFwcGxpY2F0aW9uQ2FjaGVIb3N0X2gK
KworI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisKKyNpbmNsdWRlICJET01B
cHBsaWNhdGlvbkNhY2hlLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
ICAgIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGU7CisgICAgY2xhc3MgQXBwbGljYXRpb25DYWNoZUdy
b3VwOworICAgIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTsKKyAgICBjbGFzcyBBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZTsKKyAgICBjbGFzcyBEb2N1bWVudExvYWRlcjsKKyAgICBjbGFz
cyBSZXNvdXJjZUxvYWRlcjsKKyAgICBjbGFzcyBSZXNvdXJjZUVycm9yOworICAgIGNsYXNzIFJl
c291cmNlUmVxdWVzdDsKKyAgICBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOworICAgIGNsYXNzIFN1
YnN0aXR1dGVEYXRhOworCisgICAgY2xhc3MgQXBwbGljYXRpb25DYWNoZUhvc3QgeworICAgIHB1
YmxpYzoKKyAgICAgICAgQXBwbGljYXRpb25DYWNoZUhvc3QoRG9jdW1lbnRMb2FkZXIqKTsKKyAg
ICAgICAgfkFwcGxpY2F0aW9uQ2FjaGVIb3N0KCk7CisKKyAgICAgICAgdm9pZCBzZWxlY3RDYWNo
ZVdpdGhvdXRNYW5pZmVzdCgpOworICAgICAgICB2b2lkIHNlbGVjdENhY2hlV2l0aE1hbmlmZXN0
KGNvbnN0IEtVUkwmIG1hbmlmZXN0VVJMKTsKKworICAgICAgICB2b2lkIG1heWJlTG9hZE1haW5S
ZXNvdXJjZShSZXNvdXJjZVJlcXVlc3QmLCBTdWJzdGl0dXRlRGF0YSYpOworICAgICAgICBib29s
IG1heWJlTG9hZEZhbGxiYWNrRm9yTWFpblJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYs
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICAgICAgYm9vbCBtYXliZUxvYWRGYWxsYmFj
a0Zvck1haW5FcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZUVycm9y
Jik7CisgICAgICAgIHZvaWQgbWFpblJlc291cmNlRGF0YVJlY2VpdmVkKGNvbnN0IGNoYXIqIGRh
dGEsIGludCBsZW5ndGgsIGxvbmcgbG9uZyBsZW5ndGhSZWNlaXZlZCwgYm9vbCBhbGxBdE9uY2Up
OworICAgICAgICB2b2lkIGZpbmlzaGVkTG9hZGluZ01haW5SZXNvdXJjZSgpOworICAgICAgICB2
b2lkIGZhaWxlZExvYWRpbmdNYWluUmVzb3VyY2UoKTsKKworICAgICAgICBib29sIG1heWJlTG9h
ZFJlc291cmNlKFJlc291cmNlTG9hZGVyKiwgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgS1VSTCYg
b3JpZ2luYWxVUkwpOworICAgICAgICBib29sIG1heWJlTG9hZEZhbGxiYWNrRm9yUmVkaXJlY3Qo
UmVzb3VyY2VMb2FkZXIqLCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNl
Jik7CisgICAgICAgIGJvb2wgbWF5YmVMb2FkRmFsbGJhY2tGb3JSZXNwb25zZShSZXNvdXJjZUxv
YWRlciosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICAgICAgYm9vbCBtYXliZUxvYWRG
YWxsYmFja0ZvckVycm9yKFJlc291cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOwor
CisgICAgICAgIGJvb2wgbWF5YmVMb2FkU3luY2hyb25vdXNseShSZXNvdXJjZVJlcXVlc3QmLCBS
ZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYgZGF0YSk7Cisg
ICAgICAgIHZvaWQgbWF5YmVMb2FkRmFsbGJhY2tTeW5jaHJvbm91c2x5KGNvbnN0IFJlc291cmNl
UmVxdWVzdCYsIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+
JiBkYXRhKTsKKworICAgICAgICBib29sIGNhbkNhY2hlSW5QYWdlQ2FjaGUoKSBjb25zdDsKKwor
ICAgICAgICBET01BcHBsaWNhdGlvbkNhY2hlOjpTdGF0dXMgc3RhdHVzKCkgY29uc3Q7ICAKKyAg
ICAgICAgYm9vbCB1cGRhdGUoKTsKKyAgICAgICAgYm9vbCBzd2FwQ2FjaGUoKTsKKworICAgICAg
ICB2b2lkIHNldERPTUFwcGxpY2F0aW9uQ2FjaGUoRE9NQXBwbGljYXRpb25DYWNoZSogZG9tQXBw
bGljYXRpb25DYWNoZSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKCFtX0RPTUFwcGxp
Y2F0aW9uQ2FjaGUgfHwgIWRvbUFwcGxpY2F0aW9uQ2FjaGUpOworICAgICAgICAgICAgbV9ET01B
cHBsaWNhdGlvbkNhY2hlID0gZG9tQXBwbGljYXRpb25DYWNoZTsKKyAgICAgICAgfQorCisgICAg
ICAgIHZvaWQgbm90aWZ5RXZlbnRMaXN0ZW5lcihET01BcHBsaWNhdGlvbkNhY2hlOjpFdmVudFR5
cGUgZXZlbnRUeXBlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9ET01BcHBsaWNhdGlv
bkNhY2hlKQorICAgICAgICAgICAgICAgIG1fRE9NQXBwbGljYXRpb25DYWNoZS0+Y2FsbEV2ZW50
TGlzdGVuZXIoZXZlbnRUeXBlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBwcml2YXRlOgor
ICAgICAgICBmcmllbmQgY2xhc3MgQXBwbGljYXRpb25DYWNoZUdyb3VwOworICAgICAgICBmcmll
bmQgY2xhc3MgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U7CisKKyAgICAgICAgYm9vbCBzY2hlZHVs
ZUxvYWRGYWxsYmFja1Jlc291cmNlRnJvbUFwcGxpY2F0aW9uQ2FjaGUoUmVzb3VyY2VMb2FkZXIq
LCBBcHBsaWNhdGlvbkNhY2hlKiA9IDApOworICAgICAgICBib29sIHNob3VsZExvYWRSZXNvdXJj
ZUZyb21BcHBsaWNhdGlvbkNhY2hlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIEFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZSomKTsKKyAgICAgICAgYm9vbCBnZXRBcHBsaWNhdGlvbkNhY2hlRmFsbGJh
Y2tSZXNvdXJjZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBBcHBsaWNhdGlvbkNhY2hlUmVzb3Vy
Y2UqJiwgQXBwbGljYXRpb25DYWNoZSogPSAwKTsKKyAgICAgICAgdm9pZCBzZXRDYW5kaWRhdGVB
cHBsaWNhdGlvbkNhY2hlR3JvdXAoQXBwbGljYXRpb25DYWNoZUdyb3VwKiBncm91cCk7CisgICAg
ICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogY2FuZGlkYXRlQXBwbGljYXRpb25DYWNoZUdyb3Vw
KCkgY29uc3QgeyByZXR1cm4gbV9jYW5kaWRhdGVBcHBsaWNhdGlvbkNhY2hlR3JvdXA7IH0KKyAg
ICAgICAgdm9pZCBzZXRBcHBsaWNhdGlvbkNhY2hlKFBhc3NSZWZQdHI8QXBwbGljYXRpb25DYWNo
ZT4gYXBwbGljYXRpb25DYWNoZSk7CisgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGUqIGFwcGxpY2F0
aW9uQ2FjaGUoKSBjb25zdCB7IHJldHVybiBtX2FwcGxpY2F0aW9uQ2FjaGUuZ2V0KCk7IH0KKyAg
ICAgICAgQXBwbGljYXRpb25DYWNoZSogbWFpblJlc291cmNlQXBwbGljYXRpb25DYWNoZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbWFpblJlc291cmNlQXBwbGljYXRpb25DYWNoZS5nZXQoKTsgfQorCisg
ICAgICAgIGJvb2wgaXNBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCgpOworICAgICAgICBEb2N1bWVu
dExvYWRlciogZG9jdW1lbnRMb2FkZXIoKSB7IHJldHVybiBtX2RvY3VtZW50TG9hZGVyOyB9CisK
KyAgICAgICAgRE9NQXBwbGljYXRpb25DYWNoZSogbV9ET01BcHBsaWNhdGlvbkNhY2hlOworICAg
ICAgICBEb2N1bWVudExvYWRlciogbV9kb2N1bWVudExvYWRlcjsKKworICAgICAgICAvLyBUaGUg
YXBwbGljYXRpb24gY2FjaGUgdGhhdCB0aGUgZG9jdW1lbnQgbG9hZGVyIGlzIGFzc29jaWF0ZWQg
d2l0aCAoaWYgYW55KS4KKyAgICAgICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+IG1fYXBwbGlj
YXRpb25DYWNoZTsKKworICAgICAgICAvLyBCZWZvcmUgYW4gYXBwbGljYXRpb24gY2FjaGUgaGFz
IGZpbmlzaGVkIGxvYWRpbmcsIHRoaXMgd2lsbCBiZSB0aGUgY2FuZGlkYXRlIGFwcGxpY2F0aW9u
CisgICAgICAgIC8vIGdyb3VwIHRoYXQgdGhlIGRvY3VtZW50IGxvYWRlciBpcyBhc3NvY2lhdGVk
IHdpdGguCisgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogbV9jYW5kaWRhdGVBcHBsaWNh
dGlvbkNhY2hlR3JvdXA7CisKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgYXBwbGljYXRpb24gY2Fj
aGUgdGhlIG1haW4gcmVzb3VyY2Ugd2FzIGxvYWRlZCBmcm9tIChpZiBhbnkpLgorICAgICAgICBS
ZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gbV9tYWluUmVzb3VyY2VBcHBsaWNhdGlvbkNhY2hlOwor
ICAgIH07CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAgLy8gRU5BQkxFKEFQ
UExJQ0FUSU9OX0NBQ0hFKQorI2VuZGlmICAvLyBBcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmRfaAoK
UHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25D
YWNoZUhvc3QuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6
IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZS5jcHAJKHJldmlzaW9uIDQ2NTY4KQorKysgV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAj
aWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKIAogI2luY2x1ZGUgIkFwcGxpY2F0
aW9uQ2FjaGUuaCIKKyNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlSG9zdC5oIgogI2luY2x1ZGUg
IkFwcGxpY2F0aW9uQ2FjaGVHcm91cC5oIgogI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVSZXNv
dXJjZS5oIgogI2luY2x1ZGUgIkNTdHJpbmcuaCIKQEAgLTkzNyw2ICs5MzgsMTQgQEAgdm9pZCBB
cHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZW1wdHkoKQogICAgICAgICBpdC0+c2Vjb25kLT5jbGVh
clN0b3JhZ2VJRCgpOwogfSAgICAKIAorYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6dHJh
bnNmZXJBcHBsaWNhdGlvbkNhY2hlKGNvbnN0IFN0cmluZyYgY2FjaGVEaXJlY3RvcnksIEFwcGxp
Y2F0aW9uQ2FjaGVIb3N0KiBjYWNoZUhvc3QpCit7CisgICAgQXBwbGljYXRpb25DYWNoZSogY2Fj
aGUgPSBjYWNoZUhvc3QtPmFwcGxpY2F0aW9uQ2FjaGUoKTsKKyAgICBpZiAoIWNhY2hlKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0
b3JlQ29weU9mQ2FjaGUoY2FjaGVEaXJlY3RvcnksIGNhY2hlKTsKK30KKwogYm9vbCBBcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVDb3B5T2ZDYWNoZShjb25zdCBTdHJpbmcmIGNhY2hlRGly
ZWN0b3J5LCBBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSkKIHsKICAgICAvLyBDcmVhdGUgYSBuZXcg
Y2FjaGUuCkluZGV4OiBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlLmgJKHJldmlzaW9uIDQ2NTY4KQorKysgV2ViQ29yZS9sb2FkZXIvYXBwY2Fj
aGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcs
NyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlOworY2xh
c3MgQXBwbGljYXRpb25DYWNoZUhvc3Q7CiBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlR3JvdXA7CiBj
bGFzcyBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U7CiBjbGFzcyBLVVJMOwpAQCAtNjksNiArNzAs
NyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBlbXB0eSgpOwogICAgIAorICAgIHN0YXRpYyBi
b29sIHRyYW5zZmVyQXBwbGljYXRpb25DYWNoZShjb25zdCBTdHJpbmcmIGNhY2hlRGlyZWN0b3J5
LCBBcHBsaWNhdGlvbkNhY2hlSG9zdCopOwogICAgIHN0YXRpYyBib29sIHN0b3JlQ29weU9mQ2Fj
aGUoY29uc3QgU3RyaW5nJiBjYWNoZURpcmVjdG9yeSwgQXBwbGljYXRpb25DYWNoZSopOwogCiAg
ICAgYm9vbCBtYW5pZmVzdFVSTHMoVmVjdG9yPEtVUkw+KiB1cmxzKTsKSW5kZXg6IFdlYkNvcmUv
bG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuY3BwCShyZXZpc2lvbiA0
NjU2OCkKKysrIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoT0ZGTElORV9X
RUJfQVBQTElDQVRJT05TKQogCi0jaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZS5oIgotI2luY2x1
ZGUgIkFwcGxpY2F0aW9uQ2FjaGVHcm91cC5oIgotI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZS5oIgorI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVIb3N0LmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV2ZW50RXhj
ZXB0aW9uLmgiCkBAIC00NCw4MCArNDIsNDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogRE9NQXBw
bGljYXRpb25DYWNoZTo6RE9NQXBwbGljYXRpb25DYWNoZShGcmFtZSogZnJhbWUpCiAgICAgOiBt
X2ZyYW1lKGZyYW1lKQogeworICAgIEFTU0VSVChhcHBsaWNhdGlvbkNhY2hlSG9zdCgpKTsKKyAg
ICBhcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5zZXRET01BcHBsaWNhdGlvbkNhY2hlKHRoaXMpOwog
fQogCiB2b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6OmRpc2Nvbm5lY3RGcmFtZSgpCiB7CisgICAg
QXBwbGljYXRpb25DYWNoZUhvc3QqIGNhY2hlSG9zdCA9IGFwcGxpY2F0aW9uQ2FjaGVIb3N0KCk7
CisgICAgaWYgKGNhY2hlSG9zdCkKKyAgICAgICAgY2FjaGVIb3N0LT5zZXRET01BcHBsaWNhdGlv
bkNhY2hlKDApOwogICAgIG1fZnJhbWUgPSAwOwogfQogCi1BcHBsaWNhdGlvbkNhY2hlKiBET01B
cHBsaWNhdGlvbkNhY2hlOjphc3NvY2lhdGVkQ2FjaGUoKSBjb25zdAorQXBwbGljYXRpb25DYWNo
ZUhvc3QqIERPTUFwcGxpY2F0aW9uQ2FjaGU6OmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCkgY29uc3QK
IHsKLSAgICBpZiAoIW1fZnJhbWUpCisgICAgaWYgKCFtX2ZyYW1lIHx8ICFtX2ZyYW1lLT5sb2Fk
ZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gCi0gICAgcmV0dXJu
IG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5hcHBsaWNhdGlvbkNhY2hlKCk7
CisgICAgcmV0dXJuIG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5hcHBsaWNh
dGlvbkNhY2hlSG9zdCgpOwogfQogCiB1bnNpZ25lZCBzaG9ydCBET01BcHBsaWNhdGlvbkNhY2hl
OjpzdGF0dXMoKSBjb25zdAogewotICAgIEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlID0gYXNzb2Np
YXRlZENhY2hlKCk7ICAgIAotICAgIGlmICghY2FjaGUpCisgICAgQXBwbGljYXRpb25DYWNoZUhv
c3QqIGNhY2hlSG9zdCA9IGFwcGxpY2F0aW9uQ2FjaGVIb3N0KCk7CisgICAgaWYgKCFjYWNoZUhv
c3QpCiAgICAgICAgIHJldHVybiBVTkNBQ0hFRDsKLQotICAgIHN3aXRjaCAoY2FjaGUtPmdyb3Vw
KCktPnVwZGF0ZVN0YXR1cygpKSB7Ci0gICAgICAgIGNhc2UgQXBwbGljYXRpb25DYWNoZUdyb3Vw
OjpDaGVja2luZzoKLSAgICAgICAgICAgIHJldHVybiBDSEVDS0lORzsKLSAgICAgICAgY2FzZSBB
cHBsaWNhdGlvbkNhY2hlR3JvdXA6OkRvd25sb2FkaW5nOgotICAgICAgICAgICAgcmV0dXJuIERP
V05MT0FESU5HOwotICAgICAgICBjYXNlIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6SWRsZTogewot
ICAgICAgICAgICAgaWYgKGNhY2hlLT5ncm91cCgpLT5pc09ic29sZXRlKCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIE9CU09MRVRFOwotICAgICAgICAgICAgaWYgKGNhY2hlICE9IGNhY2hlLT5n
cm91cCgpLT5uZXdlc3RDYWNoZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBVUERBVEVSRUFE
WTsKLSAgICAgICAgICAgIHJldHVybiBJRExFOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNhY2hlSG9zdC0+
c3RhdHVzKCk7CiB9CiAKIHZvaWQgRE9NQXBwbGljYXRpb25DYWNoZTo6dXBkYXRlKEV4Y2VwdGlv
bkNvZGUmIGVjKQogewotICAgIEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlID0gYXNzb2NpYXRlZENh
Y2hlKCk7Ci0gICAgaWYgKCFjYWNoZSkgeworICAgIEFwcGxpY2F0aW9uQ2FjaGVIb3N0KiBjYWNo
ZUhvc3QgPSBhcHBsaWNhdGlvbkNhY2hlSG9zdCgpOworICAgIGlmICghY2FjaGVIb3N0IHx8ICFj
YWNoZUhvc3QtPnVwZGF0ZSgpKQogICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGNhY2hlLT5ncm91cCgpLT51cGRhdGUobV9m
cmFtZSwgQXBwbGljYXRpb25DYWNoZVVwZGF0ZVdpdGhvdXRCcm93c2luZ0NvbnRleHQpOwogfQog
CiBib29sIERPTUFwcGxpY2F0aW9uQ2FjaGU6OnN3YXBDYWNoZSgpCiB7Ci0gICAgaWYgKCFtX2Zy
YW1lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgQXBwbGljYXRpb25DYWNoZSog
Y2FjaGUgPSBtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+YXBwbGljYXRpb25D
YWNoZSgpOwotICAgIGlmICghY2FjaGUpCisgICAgQXBwbGljYXRpb25DYWNoZUhvc3QqIGNhY2hl
SG9zdCA9IGFwcGxpY2F0aW9uQ2FjaGVIb3N0KCk7CisgICAgaWYgKCFjYWNoZUhvc3QpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIElmIHRoZSBncm91cCBvZiBhcHBsaWNhdGlvbiBj
YWNoZXMgdG8gd2hpY2ggY2FjaGUgYmVsb25ncyBoYXMgdGhlIGxpZmVjeWNsZSBzdGF0dXMgb2Jz
b2xldGUsIHVuYXNzb2NpYXRlIGRvY3VtZW50IGZyb20gY2FjaGUuCi0gICAgaWYgKGNhY2hlLT5n
cm91cCgpLT5pc09ic29sZXRlKCkpIHsKLSAgICAgICAgY2FjaGUtPmdyb3VwKCktPmRpc2Fzc29j
aWF0ZURvY3VtZW50TG9hZGVyKG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpKTsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlcmUgaXMgbm8gbmV3
ZXIgY2FjaGUsIHJhaXNlIGFuIElOVkFMSURfU1RBVEVfRVJSIGV4Y2VwdGlvbi4KLSAgICBBcHBs
aWNhdGlvbkNhY2hlKiBuZXdlc3RDYWNoZSA9IGNhY2hlLT5ncm91cCgpLT5uZXdlc3RDYWNoZSgp
OwotICAgIGlmIChjYWNoZSA9PSBuZXdlc3RDYWNoZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIAotICAgIEFTU0VSVChjYWNoZS0+Z3JvdXAoKSA9PSBuZXdlc3RDYWNoZS0+Z3JvdXAoKSk7
Ci0gICAgbV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnNldEFwcGxpY2F0aW9u
Q2FjaGUobmV3ZXN0Q2FjaGUpOwotICAgIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBj
YWNoZUhvc3QtPnN3YXBDYWNoZSgpOwogfQogICAgIAogdm9pZCBET01BcHBsaWNhdGlvbkNhY2hl
Ojpzd2FwQ2FjaGUoRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0xMzEsMTMgKzk1LDEzIEBAIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIERPTUFwcGxpY2F0aW9uQ2EKICAgICByZXR1cm4gbV9mcmFtZS0+
ZG9jdW1lbnQoKTsKIH0KIAotdm9pZCBET01BcHBsaWNhdGlvbkNhY2hlOjphZGRFdmVudExpc3Rl
bmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+IGV2ZW50TGlzdGVuZXIsIGJvb2wpCit2b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6OmFkZEV2
ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudE5hbWUsIFBhc3NSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lciwgYm9vbCkKIHsKLSAgICBFdmVudExpc3RlbmVyc01h
cDo6aXRlcmF0b3IgaXRlciA9IG1fZXZlbnRMaXN0ZW5lcnMuZmluZChldmVudFR5cGUpOworICAg
IEV2ZW50TGlzdGVuZXJzTWFwOjppdGVyYXRvciBpdGVyID0gbV9ldmVudExpc3RlbmVycy5maW5k
KGV2ZW50TmFtZSk7CiAgICAgaWYgKGl0ZXIgPT0gbV9ldmVudExpc3RlbmVycy5lbmQoKSkgewog
ICAgICAgICBMaXN0ZW5lclZlY3RvciBsaXN0ZW5lcnM7CiAgICAgICAgIGxpc3RlbmVycy5hcHBl
bmQoZXZlbnRMaXN0ZW5lcik7Ci0gICAgICAgIG1fZXZlbnRMaXN0ZW5lcnMuYWRkKGV2ZW50VHlw
ZSwgbGlzdGVuZXJzKTsKKyAgICAgICAgbV9ldmVudExpc3RlbmVycy5hZGQoZXZlbnROYW1lLCBs
aXN0ZW5lcnMpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIExpc3RlbmVyVmVjdG9yJiBsaXN0ZW5l
cnMgPSBpdGVyLT5zZWNvbmQ7CiAgICAgICAgIGZvciAoTGlzdGVuZXJWZWN0b3I6Oml0ZXJhdG9y
IGxpc3RlbmVySXRlciA9IGxpc3RlbmVycy5iZWdpbigpOyBsaXN0ZW5lckl0ZXIgIT0gbGlzdGVu
ZXJzLmVuZCgpOyArK2xpc3RlbmVySXRlcikgewpAQCAtMTQ2LDEzICsxMTAsMTMgQEAgdm9pZCBE
T01BcHBsaWNhdGlvbkNhY2hlOjphZGRFdmVudExpc3RlbgogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBsaXN0ZW5lcnMuYXBwZW5kKGV2ZW50TGlzdGVuZXIpOwotICAgICAgICBtX2V2ZW50
TGlzdGVuZXJzLmFkZChldmVudFR5cGUsIGxpc3RlbmVycyk7CisgICAgICAgIG1fZXZlbnRMaXN0
ZW5lcnMuYWRkKGV2ZW50TmFtZSwgbGlzdGVuZXJzKTsKICAgICB9ICAgIAogfQogCi12b2lkIERP
TUFwcGxpY2F0aW9uQ2FjaGU6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5n
JiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqIGV2ZW50TGlzdGVuZXIsIGJvb2wpCit2b2lkIERP
TUFwcGxpY2F0aW9uQ2FjaGU6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5n
JiBldmVudE5hbWUsIEV2ZW50TGlzdGVuZXIqIGV2ZW50TGlzdGVuZXIsIGJvb2wpCiB7Ci0gICAg
RXZlbnRMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2V2ZW50TGlzdGVuZXJzLmZpbmQo
ZXZlbnRUeXBlKTsKKyAgICBFdmVudExpc3RlbmVyc01hcDo6aXRlcmF0b3IgaXRlciA9IG1fZXZl
bnRMaXN0ZW5lcnMuZmluZChldmVudE5hbWUpOwogICAgIGlmIChpdGVyID09IG1fZXZlbnRMaXN0
ZW5lcnMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKQEAgLTE3MSw3ICsxMzUsNyBAQCBi
b29sIERPTUFwcGxpY2F0aW9uQ2FjaGU6OmRpc3BhdGNoRXZlbnQoCiAgICAgICAgIGVjID0gRXZl
bnRFeGNlcHRpb246OlVOU1BFQ0lGSUVEX0VWRU5UX1RZUEVfRVJSOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICBMaXN0ZW5lclZlY3RvciBsaXN0ZW5lcnNDb3B5ID0g
bV9ldmVudExpc3RlbmVycy5nZXQoZXZlbnQtPnR5cGUoKSk7CiAgICAgZm9yIChMaXN0ZW5lclZl
Y3Rvcjo6Y29uc3RfaXRlcmF0b3IgbGlzdGVuZXJJdGVyID0gbGlzdGVuZXJzQ29weS5iZWdpbigp
OyBsaXN0ZW5lckl0ZXIgIT0gbGlzdGVuZXJzQ29weS5lbmQoKTsgKytsaXN0ZW5lckl0ZXIpIHsK
ICAgICAgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKQEAgLTE4MiwxMSArMTQ2LDExIEBAIGJv
b2wgRE9NQXBwbGljYXRpb25DYWNoZTo6ZGlzcGF0Y2hFdmVudCgKICAgICByZXR1cm4gIWV2ZW50
LT5kZWZhdWx0UHJldmVudGVkKCk7CiB9CiAKLXZvaWQgRE9NQXBwbGljYXRpb25DYWNoZTo6Y2Fs
bExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiBs
aXN0ZW5lcikKK3ZvaWQgRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbExpc3RlbmVyKGNvbnN0IEF0
b21pY1N0cmluZyYgZXZlbnROYW1lLCBFdmVudExpc3RlbmVyKiBsaXN0ZW5lcikKIHsKICAgICBB
U1NFUlQobV9mcmFtZSk7CiAgICAgCi0gICAgUmVmUHRyPEV2ZW50PiBldmVudCA9IEV2ZW50Ojpj
cmVhdGUoZXZlbnRUeXBlLCBmYWxzZSwgZmFsc2UpOworICAgIFJlZlB0cjxFdmVudD4gZXZlbnQg
PSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZSwgZmFsc2UsIGZhbHNlKTsKICAgICBpZiAobGlzdGVu
ZXIpIHsKICAgICAgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKICAgICAgICAgZXZlbnQtPnNl
dEN1cnJlbnRUYXJnZXQodGhpcyk7CkBAIC0xOTgsNDUgKzE2Miw1NSBAQCB2b2lkIERPTUFwcGxp
Y2F0aW9uQ2FjaGU6OmNhbGxMaXN0ZW5lcihjCiAgICAgQVNTRVJUKCFlYyk7ICAgIAogfQogCi12
b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxDaGVja2luZ0xpc3RlbmVyKCkKKy8vIHN0YXRp
YworY29uc3QgQXRvbWljU3RyaW5nJiBET01BcHBsaWNhdGlvbkNhY2hlOjp0b0V2ZW50TmFtZShF
dmVudFR5cGUgZXZlbnRUeXBlKQogewotICAgIGNhbGxMaXN0ZW5lcihldmVudE5hbWVzKCkuY2hl
Y2tpbmdFdmVudCwgbV9vbkNoZWNraW5nTGlzdGVuZXIuZ2V0KCkpOwotfQotCi12b2lkIERPTUFw
cGxpY2F0aW9uQ2FjaGU6OmNhbGxFcnJvckxpc3RlbmVyKCkKLXsKLSAgICBjYWxsTGlzdGVuZXIo
ZXZlbnROYW1lcygpLmVycm9yRXZlbnQsIG1fb25FcnJvckxpc3RlbmVyLmdldCgpKTsKLX0KLQot
dm9pZCBET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsTm9VcGRhdGVMaXN0ZW5lcigpCi17Ci0gICAg
Y2FsbExpc3RlbmVyKGV2ZW50TmFtZXMoKS5ub3VwZGF0ZUV2ZW50LCBtX29uTm9VcGRhdGVMaXN0
ZW5lci5nZXQoKSk7Ci19Ci0KLXZvaWQgRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbERvd25sb2Fk
aW5nTGlzdGVuZXIoKQotewotICAgIGNhbGxMaXN0ZW5lcihldmVudE5hbWVzKCkuZG93bmxvYWRp
bmdFdmVudCwgbV9vbkRvd25sb2FkaW5nTGlzdGVuZXIuZ2V0KCkpOwotfQotCi12b2lkIERPTUFw
cGxpY2F0aW9uQ2FjaGU6OmNhbGxQcm9ncmVzc0xpc3RlbmVyKCkKLXsKLSAgICBjYWxsTGlzdGVu
ZXIoZXZlbnROYW1lcygpLnByb2dyZXNzRXZlbnQsIG1fb25Qcm9ncmVzc0xpc3RlbmVyLmdldCgp
KTsKLX0KLQotdm9pZCBET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsVXBkYXRlUmVhZHlMaXN0ZW5l
cigpCi17Ci0gICAgY2FsbExpc3RlbmVyKGV2ZW50TmFtZXMoKS51cGRhdGVyZWFkeUV2ZW50LCBt
X29uVXBkYXRlUmVhZHlMaXN0ZW5lci5nZXQoKSk7CisgICAgc3dpdGNoIChldmVudFR5cGUpIHsK
KyAgICAgICAgY2FzZSBDSEVDS0lOR19FVkVOVDoKKyAgICAgICAgICAgIHJldHVybiBldmVudE5h
bWVzKCkuY2hlY2tpbmdFdmVudDsKKyAgICAgICAgY2FzZSBFUlJPUl9FVkVOVDoKKyAgICAgICAg
ICAgIHJldHVybiBldmVudE5hbWVzKCkuZXJyb3JFdmVudDsKKyAgICAgICAgY2FzZSBOT1VQREFU
RV9FVkVOVDoKKyAgICAgICAgICAgIHJldHVybiBldmVudE5hbWVzKCkubm91cGRhdGVFdmVudDsK
KyAgICAgICAgY2FzZSBET1dOTE9BRElOR19FVkVOVDoKKyAgICAgICAgICAgIHJldHVybiBldmVu
dE5hbWVzKCkuZG93bmxvYWRpbmdFdmVudDsKKyAgICAgICAgY2FzZSBQUk9HUkVTU19FVkVOVDoK
KyAgICAgICAgICAgIHJldHVybiBldmVudE5hbWVzKCkucHJvZ3Jlc3NFdmVudDsKKyAgICAgICAg
Y2FzZSBVUERBVEVSRUFEWV9FVkVOVDoKKyAgICAgICAgICAgIHJldHVybiBldmVudE5hbWVzKCku
dXBkYXRlcmVhZHlFdmVudDsKKyAgICAgICAgY2FzZSBDQUNIRURfRVZFTlQ6CisgICAgICAgICAg
ICByZXR1cm4gZXZlbnROYW1lcygpLmNhY2hlZEV2ZW50OworICAgICAgICBjYXNlIE9CU09MRVRF
X0VWRU5UOiAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5vYnNv
bGV0ZUV2ZW50OworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
ZXZlbnROYW1lcygpLmVycm9yRXZlbnQ7CiB9CiAKLXZvaWQgRE9NQXBwbGljYXRpb25DYWNoZTo6
Y2FsbENhY2hlZExpc3RlbmVyKCkKKy8vIHN0YXRpYworRE9NQXBwbGljYXRpb25DYWNoZTo6RXZl
bnRUeXBlIERPTUFwcGxpY2F0aW9uQ2FjaGU6OnRvRXZlbnRUeXBlKGNvbnN0IEF0b21pY1N0cmlu
ZyYgZXZlbnROYW1lKQogewotICAgIGNhbGxMaXN0ZW5lcihldmVudE5hbWVzKCkuY2FjaGVkRXZl
bnQsIG1fb25DYWNoZWRMaXN0ZW5lci5nZXQoKSk7CisgICAgaWYgKGV2ZW50TmFtZSA9PSBldmVu
dE5hbWVzKCkuY2hlY2tpbmdFdmVudCkKKyAgICAgICAgcmV0dXJuIENIRUNLSU5HX0VWRU5UOwor
ICAgIGlmIChldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLmVycm9yRXZlbnQpCisgICAgICAgIHJl
dHVybiBFUlJPUl9FVkVOVDsKKyAgICBpZiAoZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5ub3Vw
ZGF0ZUV2ZW50KQorICAgICAgICByZXR1cm4gTk9VUERBVEVfRVZFTlQ7CisgICAgaWYgKGV2ZW50
TmFtZSA9PSBldmVudE5hbWVzKCkuZG93bmxvYWRpbmdFdmVudCkKKyAgICAgICAgcmV0dXJuIERP
V05MT0FESU5HX0VWRU5UOworICAgIGlmIChldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnByb2dy
ZXNzRXZlbnQpCisgICAgICAgIHJldHVybiBQUk9HUkVTU19FVkVOVDsKKyAgICBpZiAoZXZlbnRO
YW1lID09IGV2ZW50TmFtZXMoKS51cGRhdGVyZWFkeUV2ZW50KQorICAgICAgICByZXR1cm4gVVBE
QVRFUkVBRFlfRVZFTlQ7CisgICAgaWYgKGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkuY2FjaGVk
RXZlbnQpCisgICAgICAgIHJldHVybiBDQUNIRURfRVZFTlQ7CisgICAgaWYgKGV2ZW50TmFtZSA9
PSBldmVudE5hbWVzKCkub2Jzb2xldGVFdmVudCkKKyAgICAgICAgcmV0dXJuIE9CU09MRVRFX0VW
RU5UOworICAKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gRVJST1JfRVZF
TlQ7CiB9CiAKLXZvaWQgRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbE9ic29sZXRlTGlzdGVuZXIo
KQotewotICAgIGNhbGxMaXN0ZW5lcihldmVudE5hbWVzKCkub2Jzb2xldGVFdmVudCwgbV9vbk9i
c29sZXRlTGlzdGVuZXIuZ2V0KCkpOwotfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5k
ZXg6IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmgJKHJl
dmlzaW9uIDQ2NTY4KQorKysgV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvRE9NQXBwbGljYXRpb25D
YWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotY2xhc3MgQXBwbGljYXRpb25DYWNoZTsKK2NsYXNzIEFwcGxpY2F0aW9uQ2FjaGVI
b3N0OwogY2xhc3MgQXRvbWljU3RyaW5nSW1wbDsKIGNsYXNzIEZyYW1lOwogY2xhc3MgS1VSTDsK
QEAgLTU4LDE1ICs1OCwzMyBAQCBwdWJsaWM6CiAgICAgICAgIE9CU09MRVRFID0gNQogICAgIH07
CiAKKyAgICBlbnVtIEV2ZW50VHlwZSB7CisgICAgICAgIENIRUNLSU5HX0VWRU5UID0gMCwKKyAg
ICAgICAgRVJST1JfRVZFTlQsCisgICAgICAgIE5PVVBEQVRFX0VWRU5ULAorICAgICAgICBET1dO
TE9BRElOR19FVkVOVCwKKyAgICAgICAgUFJPR1JFU1NfRVZFTlQsCisgICAgICAgIFVQREFURVJF
QURZX0VWRU5ULAorICAgICAgICBDQUNIRURfRVZFTlQsCisgICAgICAgIE9CU09MRVRFX0VWRU5U
CisgICAgfTsKKwogICAgIHVuc2lnbmVkIHNob3J0IHN0YXR1cygpIGNvbnN0OwotICAgIAogICAg
IHZvaWQgdXBkYXRlKEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHN3YXBDYWNoZShFeGNlcHRp
b25Db2RlJik7Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoY29uc3Qg
QXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4sIGJvb2wg
dXNlQ2FwdHVyZSk7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3Qg
QXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqLCBib29sIHVzZUNhcHR1cmUp
OworCisgICAgLy8gRXZlbnQgbGlzdGVuZXIgYXR0cmlidXRlcyBieSBFdmVudFR5cGUKKworICAg
IHZvaWQgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihFdmVudFR5cGUgdHlwZSwgUGFzc1JlZlB0
cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fYXR0cmlidXRlRXZlbnRMaXN0ZW5l
cnNbdHlwZV0gPSBldmVudExpc3RlbmVyOyB9CisgICAgRXZlbnRMaXN0ZW5lciogZ2V0QXR0cmli
dXRlRXZlbnRMaXN0ZW5lcihFdmVudFR5cGUgdHlwZSkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1
dGVFdmVudExpc3RlbmVyc1t0eXBlXS5nZXQoKTsgfQorICAgIHZvaWQgY2xlYXJBdHRyaWJ1dGVF
dmVudExpc3RlbmVyKEV2ZW50VHlwZSB0eXBlKSB7IG1fYXR0cmlidXRlRXZlbnRMaXN0ZW5lcnNb
dHlwZV0gPSAwOyB9CisgICAgdm9pZCBjYWxsRXZlbnRMaXN0ZW5lcihFdmVudFR5cGUgdHlwZSkg
eyBjYWxsTGlzdGVuZXIodG9FdmVudE5hbWUodHlwZSksIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVu
ZXIodHlwZSkpOyB9CisKKyAgICAvLyBFdmVudFRhcmdldCBpbXBsCisKKyAgICB2aXJ0dWFsIHZv
aWQgYWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50TmFtZSwgUGFzc1Jl
ZlB0cjxFdmVudExpc3RlbmVyPiwgYm9vbCB1c2VDYXB0dXJlKTsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50TmFtZSwgRXZlbnRM
aXN0ZW5lciosIGJvb2wgdXNlQ2FwdHVyZSk7CiAgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZl
bnQoUGFzc1JlZlB0cjxFdmVudD4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICAKICAgICB0eXBlZGVm
IFZlY3RvcjxSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gPiBMaXN0ZW5lclZlY3RvcjsKICAgICB0eXBl
ZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBMaXN0ZW5lclZlY3Rvcj4gRXZlbnRMaXN0ZW5lcnNN
YXA7CiAgICAgRXZlbnRMaXN0ZW5lcnNNYXAmIGV2ZW50TGlzdGVuZXJzKCkgeyByZXR1cm4gbV9l
dmVudExpc3RlbmVyczsgfQpAQCAtNzQsNjEgKzkyLDU0IEBAIHB1YmxpYzoKICAgICB1c2luZyBS
ZWZDb3VudGVkPERPTUFwcGxpY2F0aW9uQ2FjaGU+OjpyZWY7CiAgICAgdXNpbmcgUmVmQ291bnRl
ZDxET01BcHBsaWNhdGlvbkNhY2hlPjo6ZGVyZWY7CiAKLSAgICB2b2lkIHNldE9uY2hlY2tpbmco
UGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fb25DaGVja2luZ0xp
c3RlbmVyID0gZXZlbnRMaXN0ZW5lcjsgfQotICAgIEV2ZW50TGlzdGVuZXIqIG9uY2hlY2tpbmco
KSBjb25zdCB7IHJldHVybiBtX29uQ2hlY2tpbmdMaXN0ZW5lci5nZXQoKTsgfQorICAgIC8vIEV4
cGxpY2l0bHkgbmFtZWQgYXR0cmlidXRlIGV2ZW50IGxpc3RlbmVyIGhlbHBlcnMKIAotICAgIHZv
aWQgc2V0T25lcnJvcihQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpIHsg
bV9vbkVycm9yTGlzdGVuZXIgPSBldmVudExpc3RlbmVyOyB9Ci0gICAgRXZlbnRMaXN0ZW5lciog
b25lcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fb25FcnJvckxpc3RlbmVyLmdldCgpOyB9CisgICAg
dm9pZCBzZXRPbmNoZWNraW5nKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIpIHsg
c2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihDSEVDS0lOR19FVkVOVCwgbGlzdGVuZXIpOyB9Cisg
ICAgRXZlbnRMaXN0ZW5lciogb25jaGVja2luZygpIGNvbnN0IHsgcmV0dXJuIGdldEF0dHJpYnV0
ZUV2ZW50TGlzdGVuZXIoQ0hFQ0tJTkdfRVZFTlQpOyB9CiAKLSAgICB2b2lkIHNldE9ubm91cGRh
dGUoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fb25Ob1VwZGF0
ZUxpc3RlbmVyID0gZXZlbnRMaXN0ZW5lcjsgfQotICAgIEV2ZW50TGlzdGVuZXIqIG9ubm91cGRh
dGUoKSBjb25zdCB7IHJldHVybiBtX29uTm9VcGRhdGVMaXN0ZW5lci5nZXQoKTsgfQorICAgIHZv
aWQgc2V0T25lcnJvcihQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyKSB7IHNldEF0
dHJpYnV0ZUV2ZW50TGlzdGVuZXIoRVJST1JfRVZFTlQsIGxpc3RlbmVyKTt9CisgICAgRXZlbnRM
aXN0ZW5lciogb25lcnJvcigpIGNvbnN0IHsgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVu
ZXIoRVJST1JfRVZFTlQpOyB9CiAKLSAgICB2b2lkIHNldE9uZG93bmxvYWRpbmcoUGFzc1JlZlB0
cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fb25Eb3dubG9hZGluZ0xpc3RlbmVy
ID0gZXZlbnRMaXN0ZW5lcjsgfQotICAgIEV2ZW50TGlzdGVuZXIqIG9uZG93bmxvYWRpbmcoKSBj
b25zdCB7IHJldHVybiBtX29uRG93bmxvYWRpbmdMaXN0ZW5lci5nZXQoKTsgfQotICAgIAotICAg
IHZvaWQgc2V0T25wcm9ncmVzcyhQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVu
ZXIpIHsgbV9vblByb2dyZXNzTGlzdGVuZXIgPSBldmVudExpc3RlbmVyOyB9Ci0gICAgRXZlbnRM
aXN0ZW5lciogb25wcm9ncmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fb25Qcm9ncmVzc0xpc3RlbmVy
LmdldCgpOyB9CisgICAgdm9pZCBzZXRPbm5vdXBkYXRlKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5l
cj4gbGlzdGVuZXIpIHsgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihOT1VQREFURV9FVkVOVCwg
bGlzdGVuZXIpOyB9CisgICAgRXZlbnRMaXN0ZW5lciogb25ub3VwZGF0ZSgpIGNvbnN0IHsgcmV0
dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoTk9VUERBVEVfRVZFTlQpOyB9CisKKyAgICB2
b2lkIHNldE9uZG93bmxvYWRpbmcoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lcikg
eyBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKERPV05MT0FESU5HX0VWRU5ULCBsaXN0ZW5lcik7
IH0KKyAgICBFdmVudExpc3RlbmVyKiBvbmRvd25sb2FkaW5nKCkgY29uc3QgeyByZXR1cm4gZ2V0
QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihET1dOTE9BRElOR19FVkVOVCk7IH0KKworICAgIHZvaWQg
c2V0T25wcm9ncmVzcyhQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyKSB7IHNldEF0
dHJpYnV0ZUV2ZW50TGlzdGVuZXIoUFJPR1JFU1NfRVZFTlQsIGxpc3RlbmVyKTsgfQorICAgIEV2
ZW50TGlzdGVuZXIqIG9ucHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiBnZXRBdHRyaWJ1dGVFdmVu
dExpc3RlbmVyKFBST0dSRVNTX0VWRU5UKTsgfQogCi0gICAgdm9pZCBzZXRPbnVwZGF0ZXJlYWR5
KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBtX29uVXBkYXRlUmVh
ZHlMaXN0ZW5lciA9IGV2ZW50TGlzdGVuZXI7IH0KLSAgICBFdmVudExpc3RlbmVyKiBvbnVwZGF0
ZXJlYWR5KCkgY29uc3QgeyByZXR1cm4gbV9vblVwZGF0ZVJlYWR5TGlzdGVuZXIuZ2V0KCk7IH0K
KyAgICB2b2lkIHNldE9udXBkYXRlcmVhZHkoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0
ZW5lcikgeyBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKFVQREFURVJFQURZX0VWRU5ULCBsaXN0
ZW5lcik7IH0KKyAgICBFdmVudExpc3RlbmVyKiBvbnVwZGF0ZXJlYWR5KCkgY29uc3QgeyByZXR1
cm4gZ2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihVUERBVEVSRUFEWV9FVkVOVCk7IH0KIAotICAg
IHZvaWQgc2V0T25jYWNoZWQoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVy
KSB7IG1fb25DYWNoZWRMaXN0ZW5lciA9IGV2ZW50TGlzdGVuZXI7IH0KLSAgICBFdmVudExpc3Rl
bmVyKiBvbmNhY2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1fb25DYWNoZWRMaXN0ZW5lci5nZXQoKTsg
fQorICAgIHZvaWQgc2V0T25jYWNoZWQoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5l
cikgeyBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKENBQ0hFRF9FVkVOVCwgbGlzdGVuZXIpOyB9
CisgICAgRXZlbnRMaXN0ZW5lciogb25jYWNoZWQoKSBjb25zdCB7IHJldHVybiBnZXRBdHRyaWJ1
dGVFdmVudExpc3RlbmVyKENBQ0hFRF9FVkVOVCk7IH0KIAotICAgIHZvaWQgc2V0T25vYnNvbGV0
ZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpIHsgbV9vbk9ic29sZXRl
TGlzdGVuZXIgPSBldmVudExpc3RlbmVyOyB9Ci0gICAgRXZlbnRMaXN0ZW5lciogb25vYnNvbGV0
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb25PYnNvbGV0ZUxpc3RlbmVyLmdldCgpOyB9CisgICAgdm9p
ZCBzZXRPbm9ic29sZXRlKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIpIHsgc2V0
QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihPQlNPTEVURV9FVkVOVCwgbGlzdGVuZXIpOyB9CisgICAg
RXZlbnRMaXN0ZW5lciogb25vYnNvbGV0ZSgpIGNvbnN0IHsgcmV0dXJuIGdldEF0dHJpYnV0ZUV2
ZW50TGlzdGVuZXIoT0JTT0xFVEVfRVZFTlQpOyB9CiAKICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKICAgICBET01BcHBs
aWNhdGlvbkNhY2hlKiB0b0RPTUFwcGxpY2F0aW9uQ2FjaGUoKSB7IHJldHVybiB0aGlzOyB9CiAK
LSAgICB2b2lkIGNhbGxDaGVja2luZ0xpc3RlbmVyKCk7Ci0gICAgdm9pZCBjYWxsRXJyb3JMaXN0
ZW5lcigpOyAgICAKLSAgICB2b2lkIGNhbGxOb1VwZGF0ZUxpc3RlbmVyKCk7ICAgIAotICAgIHZv
aWQgY2FsbERvd25sb2FkaW5nTGlzdGVuZXIoKTsKLSAgICB2b2lkIGNhbGxQcm9ncmVzc0xpc3Rl
bmVyKCk7Ci0gICAgdm9pZCBjYWxsVXBkYXRlUmVhZHlMaXN0ZW5lcigpOwotICAgIHZvaWQgY2Fs
bENhY2hlZExpc3RlbmVyKCk7Ci0gICAgdm9pZCBjYWxsT2Jzb2xldGVMaXN0ZW5lcigpOwotICAg
IAorICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIHRvRXZlbnROYW1lKEV2ZW50VHlwZSBl
dmVudFR5cGUpOworICAgIHN0YXRpYyBFdmVudFR5cGUgdG9FdmVudFR5cGUoY29uc3QgQXRvbWlj
U3RyaW5nJiBldmVudE5hbWUpOworCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBSZWZDb3Vu
dGVkPERPTUFwcGxpY2F0aW9uQ2FjaGU+OworICAgIAogICAgIERPTUFwcGxpY2F0aW9uQ2FjaGUo
RnJhbWUqKTsKLSAgICB2b2lkIGNhbGxMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50
VHlwZSwgRXZlbnRMaXN0ZW5lciopOworICAgIH5ET01BcHBsaWNhdGlvbkNhY2hlKCkgeyBBU1NF
UlQoIW1fZnJhbWUpOyB9CisKKyAgICB2b2lkIGNhbGxMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJp
bmcmIGV2ZW50TmFtZSwgRXZlbnRMaXN0ZW5lciopOwogICAgIAogICAgIHZpcnR1YWwgdm9pZCBy
ZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRh
cmdldCgpIHsgZGVyZWYoKTsgfQogCi0gICAgQXBwbGljYXRpb25DYWNoZSogYXNzb2NpYXRlZENh
Y2hlKCkgY29uc3Q7CisgICAgQXBwbGljYXRpb25DYWNoZUhvc3QqIGFwcGxpY2F0aW9uQ2FjaGVI
b3N0KCkgY29uc3Q7CiAgICAgYm9vbCBzd2FwQ2FjaGUoKTsKICAgICAKLSAgICBSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4gbV9vbkNoZWNraW5nTGlzdGVuZXI7Ci0gICAgUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+IG1fb25FcnJvckxpc3RlbmVyOwotICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBtX29uTm9V
cGRhdGVMaXN0ZW5lcjsKLSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9vbkRvd25sb2FkaW5n
TGlzdGVuZXI7Ci0gICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1fb25Qcm9ncmVzc0xpc3RlbmVy
OwotICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBtX29uVXBkYXRlUmVhZHlMaXN0ZW5lcjsKLSAg
ICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9vbkNhY2hlZExpc3RlbmVyOwotICAgIFJlZlB0cjxF
dmVudExpc3RlbmVyPiBtX29uT2Jzb2xldGVMaXN0ZW5lcjsKLSAgICAKKyAgICBSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4gbV9hdHRyaWJ1dGVFdmVudExpc3RlbmVyc1tPQlNPTEVURV9FVkVOVCArIDFd
OworCiAgICAgRXZlbnRMaXN0ZW5lcnNNYXAgbV9ldmVudExpc3RlbmVyczsKIAogICAgIEZyYW1l
KiBtX2ZyYW1lOwpJbmRleDogV2ViQ29yZS9wYWdlL2Nocm9taXVtL0Nocm9tZUNsaWVudENocm9t
aXVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL2Nocm9taXVtL0Nocm9tZUNsaWVudENo
cm9taXVtLmgJKHJldmlzaW9uIDQ2NTY4KQorKysgV2ViQ29yZS9wYWdlL2Nocm9taXVtL0Nocm9t
ZUNsaWVudENocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDE1IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gVE9ETyh4amkpOiBhZGRlZCB0ZW1wcmFyaWx5IHRv
IG1ha2UgQ2hyb21pdW0gY29tcGlsZSBhZnRlciBwaWNrIHVwIHRoaXMKICAgICAgICAgLy8gV2Vi
a2l0IHBhdGNoLiBTaG91bGQgYmUgcmVtb3ZlZCBhZnRlciBhZGRpbmcgaXQgaW4gQ2hyb21pdW0n
cyBvd24gY29kZS4KICAgICAgICAgdmlydHVhbCB2b2lkIHNldFRvb2xUaXAoY29uc3QgU3RyaW5n
JiB0b29sdGlwX3RleHQsIFRleHREaXJlY3Rpb24gZGlyKSB7IH0KKworI2lmIEVOQUJMRShPRkZM
SU5FX1dFQl9BUFBMSUNBVElPTlMpDQorICAgICAgICAvLyBDYWxsYmFjayBpbnZva2VkIHdoZW4g
dGhlIGFwcGxpY2F0aW9uIGNhY2hlIGZhaWxzIHRvIHNhdmUgYSBjYWNoZSBvYmplY3QNCisgICAg
ICAgIC8vIGJlY2F1c2Ugc3RvcmluZyBpdCB3b3VsZCBncm93IHRoZSBkYXRhYmFzZSBmaWxlIHBh
c3QgaXRzIGRlZmluZWQgbWF4aW11bQ0KKyAgICAgICAgLy8gc2l6ZSBvciBwYXN0IHRoZSBhbW91
bnQgb2YgZnJlZSBzcGFjZSBvbiB0aGUgZGV2aWNlLiANCisgICAgICAgIC8vIFRoZSBjaHJvbWUg
Y2xpZW50IHdvdWxkIG5lZWQgdG8gdGFrZSBzb21lIGFjdGlvbiBzdWNoIGFzIGV2aWN0aW5nIHNv
bWUNCisgICAgICAgIC8vIG9sZCBjYWNoZXMuDQorICAgICAgICB2aXJ0dWFsIHZvaWQgcmVhY2hl
ZE1heEFwcENhY2hlU2l6ZShpbnQ2NF90IHNwYWNlTmVlZGVkKSB7IH0NCisjZW5kaWYKICAgICB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0tVUkxH
b29nbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vS1VSTEdvb2dsZS5jcHAJ
KHJldmlzaW9uIDQ2NTY4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9LVVJMR29vZ2xlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTU3LDYgKzk1NywzMiBAQCBpbmxpbmUgYm9vbCBLVVJMOjpwcm90b2Nv
bElzKGNvbnN0IFN0cmluCiAgICAgcmV0dXJuIFdlYkNvcmU6OnByb3RvY29sSXMoc3RyaW5nLCBw
cm90b2NvbCk7CiB9CiAKK2Jvb2wgcHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFsKGNvbnN0IEtV
UkwmIGEsIGNvbnN0IEtVUkwmIGIpCit7CisgICAgaWYgKGEucGFyc2VkKCkuc2NoZW1lLmVuZCgp
ICE9IGIucGFyc2VkKCkuc2NoZW1lLmVuZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpbnQgaG9zdFN0YXJ0QSA9IGEuaG9zdFN0YXJ0KCk7CisgICAgaW50IGhvc3RTdGFydEIgPSBi
Lmhvc3RTdGFydCgpOworICAgIGlmIChhLmhvc3RFbmQoKSAtIGhvc3RTdGFydEEgIT0gYi5ob3N0
RW5kKCkgLSBob3N0U3RhcnRCKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBDaGVj
ayB0aGUgc2NoZW1lCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhLnBhcnNlZCgpLnNjaGVtZS5l
bmQoKTsgKytpKQorICAgICAgICBpZiAoYS5zdHJpbmcoKVtpXSAhPSBiLnN0cmluZygpW2ldKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIC8vIEFuZCB0aGUgaG9zdAorICAg
IGZvciAoaW50IGkgPSBob3N0U3RhcnRBOyBpIDwgc3RhdGljX2Nhc3Q8aW50PihhLmhvc3RFbmQo
KSk7ICsraSkKKyAgICAgICAgaWYgKGEuc3RyaW5nKClbaV0gIT0gYi5zdHJpbmcoKVtpXSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoYS5wb3J0KCkgIT0gYi5wb3J0
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBVU0UoR09PR0xFVVJMKQpJbmRleDogV2Vi
S2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDQ2NTY4KQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNCBAQAorMjAwOS0wNy0yOSAgTWljaGFlbCBOb3JkbWFuICA8bWljaGFlbG5AZ29v
Z2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjc4MjEKKworICAgICAg
ICBNb2RzIHRvIGtlZXAgdXAgd2l0aCBBcHBsaWNhdGlvbkNhY2hlSG9zdCByZWZhY3RvcmluZy4K
KworICAgICAgICAqIFdlYlZpZXcvV2ViRGF0YVNvdXJjZS5tbToKKyAgICAgICAgKC1bV2ViRGF0
YVNvdXJjZSBfdHJhbnNmZXJBcHBsaWNhdGlvbkNhY2hlOl0pOgorCiAyMDA5LTA3LTI5ICBEYXZp
ZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAKICAgICAgICAgPGh0dHA6Ly93ZWJraXQu
b3JnL2IvMjc3ODg+IERvbid0IGV4cG9ydCBXZWJQbHVnaW5Db250cm9sbGVyLmggYXMgYSBwcml2
YXRlIGhlYWRlcgpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkRhdGFTb3VyY2UubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkRhdGFTb3VyY2UubW0JKHJldmlzaW9u
IDQ2NTY4KQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYkRhdGFTb3VyY2UubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTE5OCwxNCArMTk4LDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRUeXBlc0Zy
b21DbGFzcyhOU00KICAgICAKICAgICBpZiAoIWxvYWRlcikKICAgICAgICAgcmV0dXJuIE5POwot
ICAgIAotICAgIEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlID0gbG9hZGVyLT5hcHBsaWNhdGlvbkNh
Y2hlKCk7Ci0gICAgaWYgKCFjYWNoZSkKLSAgICAgICAgcmV0dXJuIFlFUzsKLSAgICAKKyAgICAg
ICAgCiAgICAgTlNTdHJpbmcgKmNhY2hlRGlyID0gW05TU3RyaW5nIF93ZWJraXRfbG9jYWxDYWNo
ZURpcmVjdG9yeVdpdGhCdW5kbGVJZGVudGlmaWVyOmRlc3RpbmF0aW9uQnVuZGxlSWRlbnRpZmll
cl07CiAgICAgCi0gICAgcmV0dXJuIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZUNvcHlP
ZkNhY2hlKGNhY2hlRGlyLCBjYWNoZSk7CisgICAgcmV0dXJuIEFwcGxpY2F0aW9uQ2FjaGVTdG9y
YWdlOjp0cmFuc2ZlckFwcGxpY2F0aW9uQ2FjaGUoY2FjaGVEaXIsIGxvYWRlci0+YXBwbGljYXRp
b25DYWNoZUhvc3QoKSk7CiB9CiAKIEBlbmQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33810</attachid>
            <date>2009-07-30 12:58:48 -0700</date>
            <delta_ts>2009-07-30 15:18:05 -0700</delta_ts>
            <desc>class ApplicationCacheHost rev3</desc>
            <filename>AppCacheHostPatch_3.txt</filename>
            <type>text/plain</type>
            <size>101047</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjU2OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUzIEBACisyMDA5LTA3LTI5ICBNaWNoYWVsIE5vcmRtYW4gIDxtaWNoYWVsbkBn
b29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzgyMQorCisgICAg
ICAgIEFwcGxpY2F0aW9uQ2FjaGVIb3N0IHJlZmFjdG9yaW5nLgorICAgICAgICAKKyAgICAgICAg
MSkgQmV0dGVyIGVuY2Fwc3VsYXRlIHRoZSBpbnRlcmZhY2VzIGJldHdlZW4gd2ViY29yZSBjb21t
b24gY29kZQorICAgICAgICBhbmQgdGhlIGFwcGNhY2hlIHN5c3RlbSB3aXRoaW4gYSBuZXcgY2xh
c3MgQXBwbGljYXRpb25DYWNoZUhvc3QuCisKKyAgICAgICAgMikgVXNlIHRoYXQgaW50ZXJmYWNl
IHRocm91Z2hvdXQgdGhlIGxvYWRlciBzeXN0ZW0sIHJlcGxhY2luZyBpbmxpbmUgYXBwY2FjaGUg
bG9naWMuCisKKyAgICAgICAgMykgSW1wbGVtZW50IHRoZSBpbnRlcmZhY2UgaW4gdGVybXMgb2Yg
d2ViY29yZSdzIGFwcGNhY2hlIHN5c3RlbS4KKworICAgICAgICA0KSBBZGQgdGhlIG5ldyBmaWxl
cyB0byB2YXJpb3VzIG1ha2VmaWxlcy4KKworICAgICAgICA1KSBJbXBsZW1lbnQgcHJvdG9jb2xI
b3N0QW5kUG9ydEFyZUVxdWFsKCkgaW4gS1VSTEdvb2dsZS5jcHAKKworICAgICAgICBObyBuZXcg
ZmVhdHVyZXMsIG5vIG5ldyB0ZXN0cy4gVGhlIGV4aXN0aW5nIGxheW91dCB0ZXN0cyBhbGwgcGFz
cy4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuYmFzZS5l
eHA6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAg
ICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlU291cmNlcy5ia2w6
CisgICAgICAgICogaHRtbC9IVE1MSHRtbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEh0bWxFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCk6CisgICAgICAgICogbG9hZGVy
L0RvY3VtZW50TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyOjpE
b2N1bWVudExvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6fkRvY3Vt
ZW50TG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyOjptYWluUmVjZWl2
ZWRFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6ZGV0YWNoRnJvbUZy
YW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyOjpzZXRQcmltYXJ5TG9hZENv
bXBsZXRlKToKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRMb2FkZXIuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50TG9hZGVyOjphcHBsaWNhdGlvbkNhY2hlSG9zdCk6CisgICAgICAgICog
bG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpj
YW5DYWNoZVBhZ2VDb250YWluaW5nVGhpc0ZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
TG9hZGVyOjpsb2dDYW5DYWNoZUZyYW1lRGVjaXNpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAgICAqIGxvYWRlci9N
YWluUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWFpblJlc291cmNlTG9h
ZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6TWFpblJlc291cmNl
TG9hZGVyOjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpNYWluUmVzb3VyY2VM
b2FkZXI6OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWFpblJlc291cmNl
TG9hZGVyOjpkaWRGYWlsKToKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5SZXNvdXJjZUxvYWRlcjo6
bG9hZCk6CisgICAgICAgICogbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5oOgorICAgICAgICAq
IGxvYWRlci9SZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxv
YWRlcjo6bG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRlcjo6d2lsbFNlbmRS
ZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVz
cG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6OmRpZEZhaWwpOgorICAg
ICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRlci5oOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNo
ZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRp
b25DYWNoZUdyb3VwOjpzZWxlY3RDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlv
bkNhY2hlR3JvdXA6OnNlbGVjdENhY2hlV2l0aG91dE1hbmlmZXN0VVJMKToKKyAgICAgICAgKFdl
YkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6ZmluaXNoZWRMb2FkaW5nTWFpblJlc291cmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6ZmFpbGVkTG9hZGlu
Z01haW5SZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlR3JvdXA6
OmRpc2Fzc29jaWF0ZURvY3VtZW50TG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0
aW9uQ2FjaGVHcm91cDo6dXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2Fj
aGVHcm91cDo6ZGlkRmluaXNoTG9hZGluZ01hbmlmZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGxpY2F0aW9uQ2FjaGVHcm91cDo6bWFuaWZlc3ROb3RGb3VuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmNoZWNrSWZMb2FkSXNDb21wbGV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OnN0YXJ0TG9hZGluZ0VudHJ5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6YXNzb2NpYXRlRG9jdW1lbnRM
b2FkZXJXaXRoQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FsbENhY2hlTGlzdGVuZXJUYXNr
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FsbENhY2hlTGlzdGVuZXJUYXNrOjpwZXJm
b3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpDYWxsQ2FjaGVMaXN0ZW5lclRhc2s6OkNhbGxD
YWNoZUxpc3RlbmVyVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlR3Jv
dXA6OnBvc3RMaXN0ZW5lclRhc2spOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNh
dGlvbkNhY2hlR3JvdXAuaDoKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25D
YWNoZUhvc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVI
b3N0OjpBcHBsaWNhdGlvbkNhY2hlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlv
bkNhY2hlSG9zdDo6fkFwcGxpY2F0aW9uQ2FjaGVIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGxpY2F0aW9uQ2FjaGVIb3N0OjpzZWxlY3RDYWNoZVdpdGhvdXRNYW5pZmVzdCk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlSG9zdDo6c2VsZWN0Q2FjaGVXaXRoTWFuaWZlc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUhvc3Q6Om1heWJlTG9hZE1haW5S
ZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlSG9zdDo6bWF5YmVM
b2FkRmFsbGJhY2tGb3JNYWluUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRp
b25DYWNoZUhvc3Q6Om1heWJlTG9hZEZhbGxiYWNrRm9yTWFpbkVycm9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVIb3N0OjptYWluUmVzb3VyY2VEYXRhUmVjZWl2ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUhvc3Q6OmZhaWxlZExvYWRpbmdNYWlu
UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUhvc3Q6OmZpbmlz
aGVkTG9hZGluZ01haW5SZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNh
Y2hlSG9zdDo6bWF5YmVMb2FkUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRp
b25DYWNoZUhvc3Q6Om1heWJlTG9hZEZhbGxiYWNrRm9yUmVkaXJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbGljYXRpb25DYWNoZUhvc3Q6Om1heWJlTG9hZEZhbGxiYWNrRm9yUmVzcG9uc2Up
OgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUhvc3Q6Om1heWJlTG9hZEZhbGxi
YWNrRm9yRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUhvc3Q6Om1h
eWJlTG9hZFN5bmNocm9ub3VzbHkpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNo
ZUhvc3Q6Om1heWJlTG9hZEZhbGxiYWNrU3luY2hyb25vdXNseSk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBsaWNhdGlvbkNhY2hlSG9zdDo6Y2FuQ2FjaGVJblBhZ2VDYWNoZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlSG9zdDo6c2V0Q2FuZGlkYXRlQXBwbGljYXRpb25DYWNo
ZUdyb3VwKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpzZXRBcHBs
aWNhdGlvbkNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVIb3N0Ojpz
aG91bGRMb2FkUmVzb3VyY2VGcm9tQXBwbGljYXRpb25DYWNoZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBsaWNhdGlvbkNhY2hlSG9zdDo6Z2V0QXBwbGljYXRpb25DYWNoZUZhbGxiYWNrUmVzb3Vy
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUhvc3Q6OnNjaGVkdWxlTG9h
ZEZhbGxiYWNrUmVzb3VyY2VGcm9tQXBwbGljYXRpb25DYWNoZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBsaWNhdGlvbkNhY2hlSG9zdDo6c3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxp
Y2F0aW9uQ2FjaGVIb3N0Ojp1cGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25D
YWNoZUhvc3Q6OnN3YXBDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hl
SG9zdDo6aXNBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCk6CisgICAgICAgICogbG9hZGVyL2FwcGNh
Y2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QXBw
bGljYXRpb25DYWNoZUhvc3Q6OnNldERPTUFwcGxpY2F0aW9uQ2FjaGUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbGljYXRpb25DYWNoZUhvc3Q6Om5vdGlmeUV2ZW50TGlzdGVuZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUhvc3Q6OmNhbmRpZGF0ZUFwcGxpY2F0aW9uQ2Fj
aGVHcm91cCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlSG9zdDo6YXBwbGlj
YXRpb25DYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlSG9zdDo6bWFp
blJlc291cmNlQXBwbGljYXRpb25DYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlv
bkNhY2hlSG9zdDo6ZG9jdW1lbnRMb2FkZXIpOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9B
cHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlv
bkNhY2hlU3RvcmFnZTo6dHJhbnNmZXJBcHBsaWNhdGlvbkNhY2hlKToKKyAgICAgICAgKiBsb2Fk
ZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaDoKKyAgICAgICAgKiBsb2FkZXIv
YXBwY2FjaGUvRE9NQXBwbGljYXRpb25DYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01B
cHBsaWNhdGlvbkNhY2hlOjpET01BcHBsaWNhdGlvbkNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmRpc2Nvbm5lY3RGcmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpET01BcHBsaWNhdGlvbkNhY2hlOjphcHBsaWNhdGlvbkNhY2hlSG9zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hlOjpzdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6
RE9NQXBwbGljYXRpb25DYWNoZTo6dXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxp
Y2F0aW9uQ2FjaGU6OnN3YXBDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpET01BcHBsaWNhdGlv
bkNhY2hlOjphZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0
aW9uQ2FjaGU6OnJlbW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6RE9NQXBw
bGljYXRpb25DYWNoZTo6ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpET01BcHBs
aWNhdGlvbkNhY2hlOjpjYWxsTGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6RE9NQXBwbGlj
YXRpb25DYWNoZTo6dG9FdmVudE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NQXBwbGljYXRp
b25DYWNoZTo6dG9FdmVudFR5cGUpOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9ET01BcHBs
aWNhdGlvbkNhY2hlLmg6CisgICAgICAgIChXZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hlOjop
OgorICAgICAgICAoV2ViQ29yZTo6RE9NQXBwbGljYXRpb25DYWNoZTo6c2V0QXR0cmlidXRlRXZl
bnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hlOjpnZXRB
dHRyaWJ1dGVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9u
Q2FjaGU6OmNsZWFyQXR0cmlidXRlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpE
T01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3Jl
OjpET01BcHBsaWNhdGlvbkNhY2hlOjpzZXRPbmNoZWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OkRPTUFwcGxpY2F0aW9uQ2FjaGU6Om9uY2hlY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RE9N
QXBwbGljYXRpb25DYWNoZTo6c2V0T25lcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpET01BcHBs
aWNhdGlvbkNhY2hlOjpvbmVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9u
Q2FjaGU6OnNldE9ubm91cGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NQXBwbGljYXRpb25D
YWNoZTo6b25ub3VwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hl
OjpzZXRPbmRvd25sb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2Fj
aGU6Om9uZG93bmxvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RE9NQXBwbGljYXRpb25DYWNo
ZTo6c2V0T25wcm9ncmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hl
OjpvbnByb2dyZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6OnNl
dE9udXBkYXRlcmVhZHkpOgorICAgICAgICAoV2ViQ29yZTo6RE9NQXBwbGljYXRpb25DYWNoZTo6
b251cGRhdGVyZWFkeSk6CisgICAgICAgIChXZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hlOjpz
ZXRPbmNhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hlOjpvbmNh
Y2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hlOjpzZXRPbm9ic29s
ZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6Om9ub2Jzb2xldGUp
OgorICAgICAgICAoV2ViQ29yZTo6RE9NQXBwbGljYXRpb25DYWNoZTo6fkRPTUFwcGxpY2F0aW9u
Q2FjaGUpOgorICAgICAgICAqIHBhZ2UvY2hyb21pdW0vQ2hyb21lQ2xpZW50Q2hyb21pdW0uaDoK
KyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudENocm9taXVtOjpyZWFjaGVkTWF4QXBwQ2Fj
aGVTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9LVVJMR29vZ2xlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbCk6CisKIDIwMDktMDctMjkgIFlvbmcg
TGkgIDx5b25nLmxpQHRvcmNobW9iaWxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHZW9y
Z2UgU3RhaWtvcy4KSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNDY1NjgpCisrKyBXZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMDA2LDYgKzIwMDYsOCBAQCB3ZWJjb3JlX3Nv
dXJjZXMgKz0gXAogCVdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuaCBc
CiAJV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcCBcCiAJ
V2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmggXAorCVdlYkNv
cmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcCBcCisJV2ViQ29yZS9s
b2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3QuaCBcCiAJV2ViQ29yZS9sb2FkZXIv
YXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmNwcCBcCiAJV2ViQ29yZS9sb2FkZXIv
YXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmggXAogCVdlYkNvcmUvbG9hZGVyL2Fw
cGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcCBcCkluZGV4OiBXZWJDb3JlL1dlYkNv
cmUuYmFzZS5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCShyZXZp
c2lvbiA0NjU2OCkKKysrIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkod29ya2luZyBjb3B5KQpA
QCAtNDQzLDcgKzQ0Myw3IEBAIF9fWk43V2ViQ29yZTIyYXBwbGljYXRpb25Jc0FwcGxlTWFpbEV2
CiBfX1pON1dlYkNvcmUyMmNyZWF0ZUZyYWdtZW50RnJvbVRleHRFUE5TXzVSYW5nZUVSS05TXzZT
dHJpbmdFCiBfX1pON1dlYkNvcmUyMmV4dGVybmFsUmVwcmVzZW50YXRpb25FUE5TXzEyUmVuZGVy
T2JqZWN0RQogX19aTjdXZWJDb3JlMjNBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTE0c2V0TWF4aW11
bVNpemVFeAotX19aTjdXZWJDb3JlMjNBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTE2c3RvcmVDb3B5
T2ZDYWNoZUVSS05TXzZTdHJpbmdFUE5TXzE2QXBwbGljYXRpb25DYWNoZUUKK19fWk43V2ViQ29y
ZTIzQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UyNHRyYW5zZmVyQXBwbGljYXRpb25DYWNoZUVSS05T
XzZTdHJpbmdFUE5TXzIwQXBwbGljYXRpb25DYWNoZUhvc3RFCiBfX1pON1dlYkNvcmUyM0FwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlMTdzZXRDYWNoZURpcmVjdG9yeUVSS05TXzZTdHJpbmdFCiBfX1pO
N1dlYkNvcmUyM0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlMTh2YWN1dW1EYXRhYmFzZUZpbGVFdgog
X19aTjdXZWJDb3JlMjNBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTVlbXB0eUV2CkluZGV4OiBXZWJD
b3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2
aXNpb24gNDY1NjgpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAt
MTQyNSw2ICsxNDI1LDggQEAKICAgICAgICAgICAgICdsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRp
b25DYWNoZS5oJywKICAgICAgICAgICAgICdsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNo
ZUdyb3VwLmNwcCcsCiAgICAgICAgICAgICAnbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGVHcm91cC5oJywKKyAgICAgICAgICAgICdsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNo
ZUhvc3QuY3BwJywKKyAgICAgICAgICAgICdsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNo
ZUhvc3QuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZS5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNh
Y2hlUmVzb3VyY2UuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlLmNwcCcsCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDQ2NTY4KQorKysgV2ViQ29yZS9XZWJD
b3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTUxMyw2ICsxNTEzLDcgQEAgSEVBREVSUyArPSBc
CiAgICAgaW5zcGVjdG9yL0phdmFTY3JpcHRQcm9maWxlLmggXAogICAgIGluc3BlY3Rvci9KYXZh
U2NyaXB0UHJvZmlsZU5vZGUuaCBcCiAgICAgbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGVHcm91cC5oIFwKKyAgICBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3QuaCBc
CiAgICAgbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuaCBcCiAgICAgbG9hZGVyL2Fw
cGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5oIFwKICAgICBsb2FkZXIvYXBwY2FjaGUv
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaCBcCkBAIC0zMDMzLDYgKzMwMzQsNyBAQCBJRExfQklO
RElOR1MgKz0gXAogU09VUkNFUyArPSBcCiAgICAgbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9u
Q2FjaGUuY3BwIFwKICAgICBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNw
cCBcCisgICAgbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcCBcCiAgICAg
bG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcCBcCiAgICAgbG9hZGVy
L2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHAgXAogICAgIGxvYWRlci9hcHBj
YWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmNwcCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmVTb3Vy
Y2VzLmJrbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAkocmV2aXNp
b24gNDY1NjgpCisrKyBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAkod29ya2luZyBjb3B5KQpA
QCAtNjc2LDYgKzY3Niw3IEBAIFRoaXMgZmlsZSBjb250YWlucyB0aGUgbGlzdCBvZiBmaWxlcyBu
ZWUKICAgICA8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfTE9BREVSIj4KICAg
ICAgICAgbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuY3BwCiAgICAgICAgIGxvYWRl
ci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwCisgICAgICAgIGxvYWRlci9hcHBj
YWNoZS9BcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAKICAgICAgICAgbG9hZGVyL2FwcGNhY2hlL0Fw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHAKICAgICAgICAgbG9hZGVyL2FwcGNhY2hlL0RPTUFw
cGxpY2F0aW9uQ2FjaGUuY3BwCiAgICAgICAgIGxvYWRlci9hcHBjYWNoZS9NYW5pZmVzdFBhcnNl
ci5jcHAKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24g
NDY1NjgpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzI5Niw2ICsxNzI5NiwxNCBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJ
CQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXGFwcGNhY2hlXEFwcGxpY2F0
aW9uQ2FjaGVIb3N0LmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcYXBwY2FjaGVcQXBwbGljYXRpb25DYWNoZUhvc3Qu
aCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxsb2FkZXJcYXBwY2FjaGVcQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmNwcCINCiAJCQkJ
CT4NCiAJCQkJPC9GaWxlPg0KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiA0NjU2OCkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MjQsNiArNTI0LDggQEAKIAkJMUNG
NkJFMTQwRTlCQjQ2NzAwMjVFMUNEIC8qIE9iakNOb2RlRmlsdGVyQ29uZGl0aW9uLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUNGNkJFMTIwRTlCQjQ2
NzAwMjVFMUNEIC8qIE9iakNOb2RlRmlsdGVyQ29uZGl0aW9uLm1tICovOyB9OwogCQkxQ0Y2QkUx
NTBFOUJCNDY3MDAyNUUxQ0QgLyogT2JqQ05vZGVGaWx0ZXJDb25kaXRpb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDRjZCRTEzMEU5QkI0NjcwMDI1
RTFDRCAvKiBPYmpDTm9kZUZpbHRlckNvbmRpdGlvbi5oICovOyB9OwogCQkxQ0ZBRTMyMzBBNkQ2
QTNGMDAzMjU5M0QgLyogbGlib2JqYy5keWxpYiBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDRkFFMzIyMEE2RDZBM0YwMDMyNTkzRCAvKiBsaWJvYmpj
LmR5bGliICovOyB9OworCQkyNEY1NEVBQzEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRpb25D
YWNoZUhvc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMjRGNTRFQUExMDFGRTkxNDAwMEFFNzQxIC8qIEFwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcCAq
LzsgfTsKKwkJMjRGNTRFQUQxMDFGRTkxNDAwMEFFNzQxIC8qIEFwcGxpY2F0aW9uQ2FjaGVIb3N0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNEY1NEVB
QjEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRpb25DYWNoZUhvc3QuaCAqLzsgfTsKIAkJMjlB
ODEyMjYwRkJCOUMxRDAwNTEwMjkzIC8qIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlBODEyMDgwRkJC
OUMxRDAwNTEwMjkzIC8qIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwICovOyB9OwogCQky
OUE4MTIyNzBGQkI5QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eVRhYmxlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5QTgxMjA5MEZCQjlDMUQw
MDUxMDI5MyAvKiBBY2Nlc3NpYmlsaXR5VGFibGUuY3BwICovOyB9OwogCQkyOUE4MTIyODBGQkI5
QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5QTgxMjBBMEZCQjlDMUQwMDUxMDI5MyAv
KiBBY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwICovOyB9OwpAQCAtNTQ4Nyw2ICs1NDg5LDggQEAK
IAkJMUNGNkJFMTIwRTlCQjQ2NzAwMjVFMUNEIC8qIE9iakNOb2RlRmlsdGVyQ29uZGl0aW9uLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gT2JqQ05vZGVGaWx0ZXJD
b25kaXRpb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDRjZCRTEzMEU5QkI0
NjcwMDI1RTFDRCAvKiBPYmpDTm9kZUZpbHRlckNvbmRpdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBPYmpDTm9kZUZpbHRlckNvbmRpdGlvbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxQ0ZBRTMyMjBBNkQ2QTNGMDAzMjU5M0QgLyogbGlib2JqYy5keWxp
YiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9ICJjb21w
aWxlZC5tYWNoLW8uZHlsaWIiOyBuYW1lID0gbGlib2JqYy5keWxpYjsgcGF0aCA9IC91c3IvbGli
L2xpYm9iamMuZHlsaWI7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CisJCTI0RjU0RUFB
MTAxRkU5MTQwMDBBRTc0MSAvKiBBcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI0RjU0RUFCMTAxRkU5MTQwMDBBRTc0MSAvKiBBcHBs
aWNhdGlvbkNhY2hlSG9zdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcHBs
aWNhdGlvbkNhY2hlSG9zdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyOUE4MTIw
ODBGQkI5QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjlBODEyMDkwRkJCOUMxRDAwNTEw
MjkzIC8qIEFjY2Vzc2liaWxpdHlUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBBY2Nlc3NpYmlsaXR5VGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkyOUE4MTIwQTBGQkI5QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eUFSSUFHcmlk
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlB
UklBR3JpZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NzA4LDYgKzk3MTIs
OCBAQAogCQkxQThGNkJCMDBEQjU1Q0RDMDAxREI3OTQgLyogYXBwY2FjaGUgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTI0RjU0RUFBMTAxRkU5MTQwMDBB
RTc0MSAvKiBBcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAgKi8sCisJCQkJMjRGNTRFQUIxMDFGRTkx
NDAwMEFFNzQxIC8qIEFwcGxpY2F0aW9uQ2FjaGVIb3N0LmggKi8sCiAJCQkJMUE4RjZCQjEwREI1
NUNEQzAwMURCNzk0IC8qIEFwcGxpY2F0aW9uQ2FjaGUuY3BwICovLAogCQkJCTFBOEY2QkIyMERC
NTVDREMwMDFEQjc5NCAvKiBBcHBsaWNhdGlvbkNhY2hlLmggKi8sCiAJCQkJMUE4RjZCQjMwREI1
NUNEQzAwMURCNzk0IC8qIEFwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAgKi8sCkBAIC0xNzA2Miw2
ICsxNzA2OCw3IEBACiAJCQkJQ0U1NEZEMzgxMDE2RDlBNjAwOEI0NEM4IC8qIFNjcmlwdFNvdXJj
ZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QTc0RUNCQjEwMTgzOUE2MDBCRjkzOUUg
LyogSW5zcGVjdG9yQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0ExRTg4RjYxMDFDQzM4
NDAwMEM0REY1IC8qIFNjcmlwdEFycmF5LmggaW4gSGVhZGVycyAqLywKKwkJCQkyNEY1NEVBRDEw
MUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRpb25DYWNoZUhvc3QuaCBpbiBIZWFkZXJzICovLAog
CQkJCTQxQTNENThGMTAxQzE1MkQwMDMxNkQwNyAvKiBEZWRpY2F0ZWRXb3JrZXJUaHJlYWQuaCBp
biBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOwpAQCAtMTkxMDQsNiArMTkxMTEsNyBAQAogCQkJCTdBNzRFQ0JBMTAxODM5QTYwMEJG
OTM5RSAvKiBJbnNwZWN0b3JCYWNrZW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdBNzRFQ0JE
MTAxODM5REEwMEJGOTM5RSAvKiBKU0luc3BlY3RvckJhY2tlbmRDdXN0b20uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJN0ExRTg4RjUxMDFDQzM4NDAwMEM0REY1IC8qIFNjcmlwdEFycmF5LmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTI0RjU0RUFDMTAxRkU5MTQwMDBBRTc0MSAvKiBBcHBsaWNhdGlv
bkNhY2hlSG9zdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MUEzRDU4RTEwMUMxNTJEMDAzMTZE
MDcgLyogRGVkaWNhdGVkV29ya2VyVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxIdG1sRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxI
dG1sRWxlbWVudC5jcHAJKHJldmlzaW9uIDQ2NTY4KQorKysgV2ViQ29yZS9odG1sL0hUTUxIdG1s
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDEzIEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiSFRNTEh0bWxFbGVtZW50LmgiCiAKLSNpbmNsdWRlICJBcHBs
aWNhdGlvbkNhY2hlR3JvdXAuaCIKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05T
KQorI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVIb3N0LmgiCisjZW5kaWYKKwogI2luY2x1ZGUg
IkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFt
ZS5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02
OCwxMiArNzMsMTYgQEAgdm9pZCBIVE1MSHRtbEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZQog
ICAgIGlmICghZG9jdW1lbnQoKS0+ZnJhbWUoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgRG9j
dW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bG9hZGVy
KCktPmRvY3VtZW50TG9hZGVyKCk7CisgICAgaWYgKCFkb2N1bWVudExvYWRlcikKKyAgICAgICAg
cmV0dXJuOworCiAgICAgLy8gQ2hlY2sgdGhlIG1hbmlmZXN0IGF0dHJpYnV0ZQogICAgIEF0b21p
Y1N0cmluZyBtYW5pZmVzdCA9IGdldEF0dHJpYnV0ZShtYW5pZmVzdEF0dHIpOwotICAgIGlmICht
YW5pZmVzdC5pc051bGwoKSkKLSAgICAgICAgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpzZWxlY3RD
YWNoZVdpdGhvdXRNYW5pZmVzdFVSTChkb2N1bWVudCgpLT5mcmFtZSgpKTsKKyAgICBpZiAobWFu
aWZlc3QuaXNOdWxsKCkgfHwgbWFuaWZlc3QuaXNFbXB0eSgpKQorICAgICAgICBkb2N1bWVudExv
YWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+c2VsZWN0Q2FjaGVXaXRob3V0TWFuaWZlc3Qo
KTsKICAgICBlbHNlCi0gICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6c2VsZWN0Q2FjaGUo
ZG9jdW1lbnQoKS0+ZnJhbWUoKSwgZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwobWFuaWZlc3QpKTsK
KyAgICAgICAgZG9jdW1lbnRMb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPnNlbGVjdENh
Y2hlV2l0aE1hbmlmZXN0KGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKG1hbmlmZXN0KSk7CiB9CiAj
ZW5kaWYKIApJbmRleDogV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAkocmV2aXNpb24gNDY1Njgp
CisrKyBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDkgKzMwLDcgQEAKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogCiAjaWYgRU5BQkxF
KE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLSNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlLmgi
Ci0jaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUdyb3VwLmgiCi0jaW5jbHVkZSAiQXBwbGljYXRp
b25DYWNoZVJlc291cmNlLmgiCisjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUhvc3QuaCIKICNl
bmRpZgogI2luY2x1ZGUgIkFyY2hpdmVGYWN0b3J5LmgiCiAjaW5jbHVkZSAiQXJjaGl2ZVJlc291
cmNlQ29sbGVjdGlvbi5oIgpAQCAtMTUzLDcgKzE1MSw3IEBAIERvY3VtZW50TG9hZGVyOjpEb2N1
bWVudExvYWRlcihjb25zdCBSZXMKICAgICAsIG1fc3Vic3RpdHV0ZVJlc291cmNlRGVsaXZlcnlU
aW1lcih0aGlzLCAmRG9jdW1lbnRMb2FkZXI6OnN1YnN0aXR1dGVSZXNvdXJjZURlbGl2ZXJ5VGlt
ZXJGaXJlZCkKICAgICAsIG1fZGlkQ3JlYXRlR2xvYmFsSGlzdG9yeUVudHJ5KGZhbHNlKQogI2lm
IEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCi0gICAgLCBtX2NhbmRpZGF0ZUFwcGxp
Y2F0aW9uQ2FjaGVHcm91cCgwKQorICAgICwgbV9hcHBsaWNhdGlvbkNhY2hlSG9zdChuZXcgQXBw
bGljYXRpb25DYWNoZUhvc3QodGhpcykpCiAjZW5kaWYKIHsKIH0KQEAgLTE2OCwxMyArMTY2LDYg
QEAgRnJhbWVMb2FkZXIqIERvY3VtZW50TG9hZGVyOjpmcmFtZUxvYWRlcgogRG9jdW1lbnRMb2Fk
ZXI6On5Eb2N1bWVudExvYWRlcigpCiB7CiAgICAgQVNTRVJUKCFtX2ZyYW1lIHx8IGZyYW1lTG9h
ZGVyKCktPmFjdGl2ZURvY3VtZW50TG9hZGVyKCkgIT0gdGhpcyB8fCAhZnJhbWVMb2FkZXIoKS0+
aXNMb2FkaW5nKCkpOwotICAgIAotI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMp
Ci0gICAgaWYgKG1fYXBwbGljYXRpb25DYWNoZSkKLSAgICAgICAgbV9hcHBsaWNhdGlvbkNhY2hl
LT5ncm91cCgpLT5kaXNhc3NvY2lhdGVEb2N1bWVudExvYWRlcih0aGlzKTsKLSAgICBlbHNlIGlm
IChtX2NhbmRpZGF0ZUFwcGxpY2F0aW9uQ2FjaGVHcm91cCkKLSAgICAgICAgbV9jYW5kaWRhdGVB
cHBsaWNhdGlvbkNhY2hlR3JvdXAtPmRpc2Fzc29jaWF0ZURvY3VtZW50TG9hZGVyKHRoaXMpOwot
I2VuZGlmCiB9CiAKIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBEb2N1bWVudExvYWRlcjo6bWFp
blJlc291cmNlRGF0YSgpIGNvbnN0CkBAIC0yNTgsMTQgKzI0OSw3IEBAIHZvaWQgRG9jdW1lbnRM
b2FkZXI6Om1haW5SZWNlaXZlZEVycm9yKGMKICAgICBBU1NFUlQoIWVycm9yLmlzTnVsbCgpKTsK
IAogI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCi0gICAgQXBwbGljYXRpb25D
YWNoZUdyb3VwKiBncm91cCA9IG1fY2FuZGlkYXRlQXBwbGljYXRpb25DYWNoZUdyb3VwOwotICAg
IGlmICghZ3JvdXAgJiYgbV9hcHBsaWNhdGlvbkNhY2hlKSB7Ci0gICAgICAgIEFTU0VSVCghbWFp
blJlc291cmNlQXBwbGljYXRpb25DYWNoZSgpKTsgLy8gSWYgdGhlIG1haW4gcmVzb3VyY2Ugd2Vy
ZSBsb2FkZWQgZnJvbSBhIGNhY2hlLCBpdCB3b3VsZG4ndCBmYWlsLgotICAgICAgICBncm91cCA9
IG1fYXBwbGljYXRpb25DYWNoZS0+Z3JvdXAoKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGdyb3Vw
KQotICAgICAgICBncm91cC0+ZmFpbGVkTG9hZGluZ01haW5SZXNvdXJjZSh0aGlzKTsKKyAgICBt
X2FwcGxpY2F0aW9uQ2FjaGVIb3N0LT5mYWlsZWRMb2FkaW5nTWFpblJlc291cmNlKCk7CiAjZW5k
aWYKICAgICAKICAgICBpZiAoIWZyYW1lTG9hZGVyKCkpCkBAIC00MzAsNiArNDE0LDkgQEAgdm9p
ZCBEb2N1bWVudExvYWRlcjo6YXR0YWNoVG9GcmFtZSgpCiB2b2lkIERvY3VtZW50TG9hZGVyOjpk
ZXRhY2hGcm9tRnJhbWUoKQogewogICAgIEFTU0VSVChtX2ZyYW1lKTsKKyNpZiBFTkFCTEUoT0ZG
TElORV9XRUJfQVBQTElDQVRJT05TKQorICAgIG1fYXBwbGljYXRpb25DYWNoZUhvc3QtPnNldERP
TUFwcGxpY2F0aW9uQ2FjaGUoMCk7CisjZW5kaWYKICAgICBtX2ZyYW1lID0gMDsKIH0KIApAQCAt
NDUxLDkgKzQzOCw2IEBAIHZvaWQgRG9jdW1lbnRMb2FkZXI6OnNldFByaW1hcnlMb2FkQ29tcGwK
ICAgICBpZiAoZmxhZykgewogICAgICAgICBpZiAobV9tYWluUmVzb3VyY2VMb2FkZXIpIHsKICAg
ICAgICAgICAgIG1fbWFpblJlc291cmNlRGF0YSA9IG1fbWFpblJlc291cmNlTG9hZGVyLT5yZXNv
dXJjZURhdGEoKTsKLSNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotICAgICAg
ICAgICAgbV9tYWluUmVzb3VyY2VBcHBsaWNhdGlvbkNhY2hlID0gbV9tYWluUmVzb3VyY2VMb2Fk
ZXItPmFwcGxpY2F0aW9uQ2FjaGUoKTsKLSNlbmRpZgogICAgICAgICAgICAgbV9tYWluUmVzb3Vy
Y2VMb2FkZXIgPSAwOwogICAgICAgICB9CiAKQEAgLTg0NywxMTMgKzgzMSw0IEBAIHZvaWQgRG9j
dW1lbnRMb2FkZXI6Omljb25Mb2FkRGVjaXNpb25BdmEKICAgICAgICAgbV9mcmFtZS0+bG9hZGVy
KCktPmljb25Mb2FkRGVjaXNpb25BdmFpbGFibGUoKTsKIH0KIAotI2lmIEVOQUJMRShPRkZMSU5F
X1dFQl9BUFBMSUNBVElPTlMpCi12b2lkIERvY3VtZW50TG9hZGVyOjpzZXRDYW5kaWRhdGVBcHBs
aWNhdGlvbkNhY2hlR3JvdXAoQXBwbGljYXRpb25DYWNoZUdyb3VwKiBncm91cCkKLXsKLSAgICBB
U1NFUlQoIW1fYXBwbGljYXRpb25DYWNoZSk7Ci0gICAgbV9jYW5kaWRhdGVBcHBsaWNhdGlvbkNh
Y2hlR3JvdXAgPSBncm91cDsKLX0KLSAgICAKLXZvaWQgRG9jdW1lbnRMb2FkZXI6OnNldEFwcGxp
Y2F0aW9uQ2FjaGUoUGFzc1JlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBhcHBsaWNhdGlvbkNhY2hl
KQotewotICAgIGlmIChtX2NhbmRpZGF0ZUFwcGxpY2F0aW9uQ2FjaGVHcm91cCkgewotICAgICAg
ICBBU1NFUlQoIW1fYXBwbGljYXRpb25DYWNoZSk7Ci0gICAgICAgIG1fY2FuZGlkYXRlQXBwbGlj
YXRpb25DYWNoZUdyb3VwID0gMDsKLSAgICB9Ci0KLSAgICBtX2FwcGxpY2F0aW9uQ2FjaGUgPSBh
cHBsaWNhdGlvbkNhY2hlOwotfQotCi1BcHBsaWNhdGlvbkNhY2hlKiBEb2N1bWVudExvYWRlcjo6
bWFpblJlc291cmNlQXBwbGljYXRpb25DYWNoZSgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fbWFpblJl
c291cmNlQXBwbGljYXRpb25DYWNoZSkKLSAgICAgICAgcmV0dXJuIG1fbWFpblJlc291cmNlQXBw
bGljYXRpb25DYWNoZS5nZXQoKTsKLSAgICBpZiAobV9tYWluUmVzb3VyY2VMb2FkZXIpCi0gICAg
ICAgIHJldHVybiBtX21haW5SZXNvdXJjZUxvYWRlci0+YXBwbGljYXRpb25DYWNoZSgpOwotICAg
IHJldHVybiAwOwotfQotCi1ib29sIERvY3VtZW50TG9hZGVyOjpzaG91bGRMb2FkUmVzb3VyY2VG
cm9tQXBwbGljYXRpb25DYWNoZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIEFwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZSomIHJlc291cmNlKQotewotICAgIEFwcGxpY2F0aW9uQ2FjaGUq
IGNhY2hlID0gYXBwbGljYXRpb25DYWNoZSgpOwotICAgIGlmICghY2FjaGUgfHwgIWNhY2hlLT5p
c0NvbXBsZXRlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIElmIHRoZSByZXNv
dXJjZSBpcyBub3QgYSBIVFRQL0hUVFBTIEdFVCwgdGhlbiBhYm9ydAotICAgIGlmICghQXBwbGlj
YXRpb25DYWNoZTo6cmVxdWVzdElzSFRUUE9ySFRUUFNHZXQocmVxdWVzdCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIC8vIElmIHRoZSByZXNvdXJjZSdzIFVSTCBpcyBhbiBtYXN0ZXIg
ZW50cnksIHRoZSBtYW5pZmVzdCwgYW4gZXhwbGljaXQgZW50cnksIG9yIGEgZmFsbGJhY2sgZW50
cnkKLSAgICAvLyBpbiB0aGUgYXBwbGljYXRpb24gY2FjaGUsIHRoZW4gZ2V0IHRoZSByZXNvdXJj
ZSBmcm9tIHRoZSBjYWNoZSAoaW5zdGVhZCBvZiBmZXRjaGluZyBpdCkuCi0gICAgcmVzb3VyY2Ug
PSBjYWNoZS0+cmVzb3VyY2VGb3JVUkwocmVxdWVzdC51cmwoKSk7Ci0KLSAgICAvLyBSZXNvdXJj
ZXMgdGhhdCBtYXRjaCBmYWxsYmFjayBuYW1lc3BhY2VzIG9yIG9ubGluZSB3aGl0ZWxpc3QgZW50
cmllcyBhcmUgZmV0Y2hlZCBmcm9tIHRoZSBuZXR3b3JrLAotICAgIC8vIHVubGVzcyB0aGV5IGFy
ZSBhbHNvIGNhY2hlZC4KLSAgICBpZiAoIXJlc291cmNlICYmIChjYWNoZS0+dXJsTWF0Y2hlc0Zh
bGxiYWNrTmFtZXNwYWNlKHJlcXVlc3QudXJsKCkpIHx8IGNhY2hlLT5pc1VSTEluT25saW5lV2hp
dGVsaXN0KHJlcXVlc3QudXJsKCkpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8g
UmVzb3VyY2VzIHRoYXQgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBtYW5pZmVzdCB3aWxsIGFsd2F5
cyBmYWlsIHRvIGxvYWQgKGF0IGxlYXN0LCBhZnRlciB0aGUKLSAgICAvLyBjYWNoZSBoYXMgYmVl
biBwcmltZWQgdGhlIGZpcnN0IHRpbWUpLCBtYWtpbmcgdGhlIHRlc3Rpbmcgb2Ygb2ZmbGluZSBh
cHBsaWNhdGlvbnMgc2ltcGxlci4KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBEb2N1bWVu
dExvYWRlcjo6Z2V0QXBwbGljYXRpb25DYWNoZUZhbGxiYWNrUmVzb3VyY2UoY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqJiByZXNvdXJjZSwg
QXBwbGljYXRpb25DYWNoZSogY2FjaGUpCi17Ci0gICAgaWYgKCFjYWNoZSkgewotICAgICAgICBj
YWNoZSA9IGFwcGxpY2F0aW9uQ2FjaGUoKTsKLSAgICAgICAgaWYgKCFjYWNoZSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKCFjYWNoZS0+aXNDb21wbGV0ZSgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgLy8gSWYgdGhlIHJlc291cmNlIGlzIG5v
dCBhIEhUVFAvSFRUUFMgR0VULCB0aGVuIGFib3J0Ci0gICAgaWYgKCFBcHBsaWNhdGlvbkNhY2hl
OjpyZXF1ZXN0SXNIVFRQT3JIVFRQU0dldChyZXF1ZXN0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgS1VSTCBmYWxsYmFja1VSTDsKLSAgICBpZiAoIWNhY2hlLT51cmxNYXRjaGVzRmFs
bGJhY2tOYW1lc3BhY2UocmVxdWVzdC51cmwoKSwgJmZhbGxiYWNrVVJMKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgcmVzb3VyY2UgPSBjYWNoZS0+cmVzb3VyY2VGb3JVUkwoZmFsbGJh
Y2tVUkwpOwotICAgIEFTU0VSVChyZXNvdXJjZSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBEb2N1bWVudExvYWRlcjo6c2NoZWR1bGVBcHBsaWNhdGlvbkNhY2hlTG9hZChSZXNvdXJj
ZUxvYWRlciogbG9hZGVyLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IEtV
UkwmIG9yaWdpbmFsVVJMKQotewotICAgIGlmICghZnJhbWVMb2FkZXIoKS0+ZnJhbWUoKS0+c2V0
dGluZ3MoKSB8fCAhZnJhbWVMb2FkZXIoKS0+ZnJhbWUoKS0+c2V0dGluZ3MoKS0+b2ZmbGluZVdl
YkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAK
LSAgICBpZiAocmVxdWVzdC51cmwoKSAhPSBvcmlnaW5hbFVSTCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZTsKLSAgICBpZiAo
IXNob3VsZExvYWRSZXNvdXJjZUZyb21BcHBsaWNhdGlvbkNhY2hlKHJlcXVlc3QsIHJlc291cmNl
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIG1fcGVuZGluZ1N1YnN0aXR1dGVS
ZXNvdXJjZXMuc2V0KGxvYWRlciwgcmVzb3VyY2UpOwotICAgIGRlbGl2ZXJTdWJzdGl0dXRlUmVz
b3VyY2VzQWZ0ZXJEZWxheSgpOwotICAgICAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBEb2N1bWVudExvYWRlcjo6c2NoZWR1bGVMb2FkRmFsbGJhY2tSZXNvdXJjZUZyb21BcHBsaWNh
dGlvbkNhY2hlKFJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgQXBwbGljYXRpb25DYWNoZSogY2FjaGUpCi17Ci0gICAgaWYgKCFmcmFtZUxvYWRl
cigpLT5mcmFtZSgpLT5zZXR0aW5ncygpIHx8ICFmcmFtZUxvYWRlcigpLT5mcmFtZSgpLT5zZXR0
aW5ncygpLT5vZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZTsKLSAg
ICBpZiAoIWdldEFwcGxpY2F0aW9uQ2FjaGVGYWxsYmFja1Jlc291cmNlKHJlcXVlc3QsIHJlc291
cmNlLCBjYWNoZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fcGVuZGluZ1N1YnN0
aXR1dGVSZXNvdXJjZXMuc2V0KGxvYWRlciwgcmVzb3VyY2UpOwotICAgIGRlbGl2ZXJTdWJzdGl0
dXRlUmVzb3VyY2VzQWZ0ZXJEZWxheSgpOwotICAgICAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotI2VuZGlmIC8vIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCi0KIH0KSW5kZXg6
IFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9s
b2FkZXIvRG9jdW1lbnRMb2FkZXIuaAkocmV2aXNpb24gNDY1NjgpCisrKyBXZWJDb3JlL2xvYWRl
ci9Eb2N1bWVudExvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw5ICszOCw3IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGU7Ci0gICAgY2xh
c3MgQXBwbGljYXRpb25DYWNoZUdyb3VwOwotICAgIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGVSZXNv
dXJjZTsKKyAgICBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlSG9zdDsKICAgICBjbGFzcyBBcmNoaXZl
OwogICAgIGNsYXNzIEFyY2hpdmVSZXNvdXJjZTsKICAgICBjbGFzcyBBcmNoaXZlUmVzb3VyY2VD
b2xsZWN0aW9uOwpAQCAtMjA3LDE4ICsyMDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIHZvaWQgdGFrZU1lbW9yeUNhY2hlTG9hZHNGb3JDbGllbnROb3RpZmljYXRpb24oVmVjdG9y
PFN0cmluZz4mIGxvYWRzKTsKIAogI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMp
Ci0gICAgICAgIGJvb2wgc2NoZWR1bGVBcHBsaWNhdGlvbkNhY2hlTG9hZChSZXNvdXJjZUxvYWRl
ciosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IEtVUkwmIG9yaWdpbmFsVVJMKTsKLSAg
ICAgICAgYm9vbCBzY2hlZHVsZUxvYWRGYWxsYmFja1Jlc291cmNlRnJvbUFwcGxpY2F0aW9uQ2Fj
aGUoUmVzb3VyY2VMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBBcHBsaWNhdGlvbkNh
Y2hlKiA9IDApOwotICAgICAgICBib29sIHNob3VsZExvYWRSZXNvdXJjZUZyb21BcHBsaWNhdGlv
bkNhY2hlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSom
KTsKLSAgICAgICAgYm9vbCBnZXRBcHBsaWNhdGlvbkNhY2hlRmFsbGJhY2tSZXNvdXJjZShjb25z
dCBSZXNvdXJjZVJlcXVlc3QmLCBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqJiwgQXBwbGljYXRp
b25DYWNoZSogPSAwKTsKLSAgICAgICAgCi0gICAgICAgIHZvaWQgc2V0Q2FuZGlkYXRlQXBwbGlj
YXRpb25DYWNoZUdyb3VwKEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogZ3JvdXApOwotICAgICAgICBB
cHBsaWNhdGlvbkNhY2hlR3JvdXAqIGNhbmRpZGF0ZUFwcGxpY2F0aW9uQ2FjaGVHcm91cCgpIGNv
bnN0IHsgcmV0dXJuIG1fY2FuZGlkYXRlQXBwbGljYXRpb25DYWNoZUdyb3VwOyB9Ci0gICAgICAg
IAotICAgICAgICB2b2lkIHNldEFwcGxpY2F0aW9uQ2FjaGUoUGFzc1JlZlB0cjxBcHBsaWNhdGlv
bkNhY2hlPiBhcHBsaWNhdGlvbkNhY2hlKTsKLSAgICAgICAgQXBwbGljYXRpb25DYWNoZSogYXBw
bGljYXRpb25DYWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbGljYXRpb25DYWNoZS5nZXQoKTsg
fQotCi0gICAgICAgIEFwcGxpY2F0aW9uQ2FjaGUqIG1haW5SZXNvdXJjZUFwcGxpY2F0aW9uQ2Fj
aGUoKSBjb25zdDsKKyAgICAgICAgQXBwbGljYXRpb25DYWNoZUhvc3QqIGFwcGxpY2F0aW9uQ2Fj
aGVIb3N0KCkgY29uc3QgeyByZXR1cm4gbV9hcHBsaWNhdGlvbkNhY2hlSG9zdC5nZXQoKTsgfQog
I2VuZGlmCiAKICAgICBwcm90ZWN0ZWQ6CkBAIC0zMDYsMTYgKzI5Myw5IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgU3RyaW5nIG1fY2xpZW50UmVkaXJlY3RTb3VyY2VGb3JIaXN0b3J5
OwogICAgICAgICBib29sIG1fZGlkQ3JlYXRlR2xvYmFsSGlzdG9yeUVudHJ5OwogCi0jaWYgRU5B
QkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykgIAotICAgICAgICAvLyBUaGUgYXBwbGljYXRp
b24gY2FjaGUgdGhhdCB0aGUgZG9jdW1lbnQgbG9hZGVyIGlzIGFzc29jaWF0ZWQgd2l0aCAoaWYg
YW55KS4KLSAgICAgICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+IG1fYXBwbGljYXRpb25DYWNo
ZTsKLSAgICAgICAgCi0gICAgICAgIC8vIEJlZm9yZSBhbiBhcHBsaWNhdGlvbiBjYWNoZSBoYXMg
ZmluaXNoZWQgbG9hZGluZywgdGhpcyB3aWxsIGJlIHRoZSBjYW5kaWRhdGUgYXBwbGljYXRpb24K
LSAgICAgICAgLy8gZ3JvdXAgdGhhdCB0aGUgZG9jdW1lbnQgbG9hZGVyIGlzIGFzc29jaWF0ZWQg
d2l0aC4KLSAgICAgICAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBtX2NhbmRpZGF0ZUFwcGxpY2F0
aW9uQ2FjaGVHcm91cDsKLSAgICAgICAgCi0gICAgICAgIC8vIE9uY2UgdGhlIG1haW4gcmVzb3Vy
Y2UgaGFzIGZpbmlzaGVkIGxvYWRpbmcsIHRoaXMgaXMgdGhlIGFwcGxpY2F0aW9uIGNhY2hlIGl0
IHdhcyBsb2FkZWQgZnJvbSAoaWYgYW55KS4KLSAgICAgICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2Fj
aGU+IG1fbWFpblJlc291cmNlQXBwbGljYXRpb25DYWNoZTsKKyNpZiBFTkFCTEUoT0ZGTElORV9X
RUJfQVBQTElDQVRJT05TKQorICAgICAgICBmcmllbmQgY2xhc3MgQXBwbGljYXRpb25DYWNoZUhv
c3Q7ICAvLyBmb3Igc3Vic3RpdHV0ZSByZXNvdXJjZSBkZWxpdmVyeQorICAgICAgICBPd25QdHI8
QXBwbGljYXRpb25DYWNoZUhvc3Q+IG1fYXBwbGljYXRpb25DYWNoZUhvc3Q7CiAjZW5kaWYKICAg
ICB9OwogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiA0NjU2OCkKKysrIFdl
YkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsOCArOTUs
NyBAQAogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogI2lmIEVOQUJMRShPRkZMSU5F
X1dFQl9BUFBMSUNBVElPTlMpCi0jaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZS5oIgotI2luY2x1
ZGUgIkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5oIgorI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2Fj
aGVIb3N0LmgiCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTVkcpCkBAIC0xODE2LDggKzE4MTUsNyBA
QCBib29sIEZyYW1lTG9hZGVyOjpjYW5DYWNoZVBhZ2VDb250YWluaW5nCiAjaWYgRU5BQkxFKE9G
RkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBpbnZl
c3RpZ2F0aW5nIGNhY2hpbmcgZnJhbWVzIHRoYXQgaGF2ZSBhbiBhc3NvY2lhdGVkCiAgICAgICAg
IC8vIGFwcGxpY2F0aW9uIGNhY2hlLiA8cmRhcjovL3Byb2JsZW0vNTkxNzg5OT4gdHJhY2tzIHRo
YXQgd29yay4KLSAgICAgICAgJiYgIW1fZG9jdW1lbnRMb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGUo
KQotICAgICAgICAmJiAhbV9kb2N1bWVudExvYWRlci0+Y2FuZGlkYXRlQXBwbGljYXRpb25DYWNo
ZUdyb3VwKCkKKyAgICAgICAgJiYgbV9kb2N1bWVudExvYWRlci0+YXBwbGljYXRpb25DYWNoZUhv
c3QoKS0+Y2FuQ2FjaGVJblBhZ2VDYWNoZSgpCiAjZW5kaWYKICNpZiBFTkFCTEUoV01MKQogICAg
ICAgICAmJiAhZnJhbWVDb250YWluc1dNTENvbnRlbnQobV9mcmFtZSkKQEAgLTE5NjcsMTAgKzE5
NjUsOCBAQCBib29sIEZyYW1lTG9hZGVyOjpsb2dDYW5DYWNoZUZyYW1lRGVjaXNpCiAgICAgICAg
IGlmICghbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y2FuU3VzcGVuZEFjdGl2ZURPTU9iamVjdHMoKSkK
ICAgICAgICAgICAgIHsgUENMT0coIiAgIC1UaGUgZG9jdW1lbnQgY2Fubm90IHN1c3BlY3QgaXRz
IGFjdGl2ZSBET00gT2JqZWN0cyIpOyBjYW5ub3RDYWNoZSA9IHRydWU7IH0KICNpZiBFTkFCTEUo
T0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotICAgICAgICBpZiAobV9kb2N1bWVudExvYWRlci0+
YXBwbGljYXRpb25DYWNoZSgpKQotICAgICAgICAgICAgeyBQQ0xPRygiICAgLVRoZSBEb2N1bWVu
dExvYWRlciBoYXMgYW4gYWN0aXZlIGFwcGxpY2F0aW9uIGNhY2hlIik7IGNhbm5vdENhY2hlID0g
dHJ1ZTsgfQotICAgICAgICBpZiAobV9kb2N1bWVudExvYWRlci0+Y2FuZGlkYXRlQXBwbGljYXRp
b25DYWNoZUdyb3VwKCkpCi0gICAgICAgICAgICB7IFBDTE9HKCIgICAtVGhlIERvY3VtZW50TG9h
ZGVyIGhhcyBhIGNhbmRpZGF0ZUFwcGxpY2F0aW9uQ2FjaGVHcm91cCIpOyBjYW5ub3RDYWNoZSA9
IHRydWU7IH0KKyAgICAgICAgaWYgKCFtX2RvY3VtZW50TG9hZGVyLT5hcHBsaWNhdGlvbkNhY2hl
SG9zdCgpLT5jYW5DYWNoZUluUGFnZUNhY2hlKCkpCisgICAgICAgICAgICB7IFBDTE9HKCIgICAt
VGhlIERvY3VtZW50TG9hZGVyIHVzZXMgYW4gYXBwbGljYXRpb24gY2FjaGUiKTsgY2Fubm90Q2Fj
aGUgPSB0cnVlOyB9CiAjZW5kaWYKICAgICAgICAgaWYgKCFtX2NsaWVudC0+Y2FuQ2FjaGVQYWdl
KCkpCiAgICAgICAgICAgICB7IFBDTE9HKCIgICAtVGhlIGNsaWVudCBzYXlzIHRoaXMgZnJhbWUg
Y2Fubm90IGJlIGNhY2hlZCIpOyBjYW5ub3RDYWNoZSA9IHRydWU7IH0KQEAgLTM2ODEsMzAgKzM2
NzcsMTEgQEAgdW5zaWduZWQgbG9uZyBGcmFtZUxvYWRlcjo6bG9hZFJlc291cmNlUwogICAgICAg
ICBBU1NFUlQoIW5ld1JlcXVlc3QuaXNOdWxsKCkpOwogICAgICAgICAKICNpZiBFTkFCTEUoT0ZG
TElORV9XRUJfQVBQTElDQVRJT05TKQotICAgICAgICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2Uq
IHJlc291cmNlOwotICAgICAgICBpZiAoZG9jdW1lbnRMb2FkZXIoKS0+c2hvdWxkTG9hZFJlc291
cmNlRnJvbUFwcGxpY2F0aW9uQ2FjaGUobmV3UmVxdWVzdCwgcmVzb3VyY2UpKSB7Ci0gICAgICAg
ICAgICBpZiAocmVzb3VyY2UpIHsKLSAgICAgICAgICAgICAgICByZXNwb25zZSA9IHJlc291cmNl
LT5yZXNwb25zZSgpOwotICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKHJlc291cmNlLT5kYXRh
KCktPmRhdGEoKSwgcmVzb3VyY2UtPmRhdGEoKS0+c2l6ZSgpKTsKLSAgICAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgICAgIGVycm9yID0gY2Fubm90U2hvd1VSTEVycm9yKG5ld1JlcXVlc3Qp
OwotICAgICAgICB9IGVsc2UgeworICAgICAgICBpZiAoIWRvY3VtZW50TG9hZGVyKCktPmFwcGxp
Y2F0aW9uQ2FjaGVIb3N0KCktPm1heWJlTG9hZFN5bmNocm9ub3VzbHkobmV3UmVxdWVzdCwgZXJy
b3IsIHJlc3BvbnNlLCBkYXRhKSkgewogI2VuZGlmCiAgICAgICAgICAgICBSZXNvdXJjZUhhbmRs
ZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShuZXdSZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFs
cywgZXJyb3IsIHJlc3BvbnNlLCBkYXRhLCBtX2ZyYW1lKTsKLQogI2lmIEVOQUJMRShPRkZMSU5F
X1dFQl9BUFBMSUNBVElPTlMpCi0gICAgICAgICAgICAvLyBJZiBub3JtYWwgbG9hZGluZyByZXN1
bHRzIGluIGEgcmVkaXJlY3QgdG8gYSByZXNvdXJjZSB3aXRoIGFub3RoZXIgb3JpZ2luIChpbmRp
Y2F0aXZlIG9mIGEgY2FwdGl2ZSBwb3J0YWwpLCBvciBhIDR4eCBvciA1eHggc3RhdHVzIGNvZGUg
b3IgZXF1aXZhbGVudCwKLSAgICAgICAgICAgIC8vIG9yIGlmIHRoZXJlIHdlcmUgbmV0d29yayBl
cnJvcnMgKGJ1dCBub3QgaWYgdGhlIHVzZXIgY2FuY2VsZWQgdGhlIGRvd25sb2FkKSwgdGhlbiBp
bnN0ZWFkIGdldCwgZnJvbSB0aGUgY2FjaGUsIHRoZSByZXNvdXJjZSBvZiB0aGUgZmFsbGJhY2sg
ZW50cnkKLSAgICAgICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1hdGNoZWQgbmFtZXNw
YWNlLgotICAgICAgICAgICAgaWYgKCghZXJyb3IuaXNOdWxsKCkgJiYgIWVycm9yLmlzQ2FuY2Vs
bGF0aW9uKCkpCi0gICAgICAgICAgICAgICAgIHx8IHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkg
LyAxMDAgPT0gNCB8fCByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpIC8gMTAwID09IDUKLSAgICAg
ICAgICAgICAgICAgfHwgIXByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbChuZXdSZXF1ZXN0LnVy
bCgpLCByZXNwb25zZS51cmwoKSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnRMb2Fk
ZXIoKS0+Z2V0QXBwbGljYXRpb25DYWNoZUZhbGxiYWNrUmVzb3VyY2UobmV3UmVxdWVzdCwgcmVz
b3VyY2UpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gcmVzb3VyY2UtPnJlc3Bv
bnNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGEuY2xlYXIoKTsKLSAgICAgICAgICAgICAg
ICAgICAgZGF0YS5hcHBlbmQocmVzb3VyY2UtPmRhdGEoKS0+ZGF0YSgpLCByZXNvdXJjZS0+ZGF0
YSgpLT5zaXplKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGRvY3VtZW50TG9hZGVyKCktPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPm1heWJlTG9hZEZh
bGxiYWNrU3luY2hyb25vdXNseShuZXdSZXF1ZXN0LCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOwog
ICAgICAgICB9CiAjZW5kaWYKICAgICB9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9NYWluUmVzb3Vy
Y2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxv
YWRlci5jcHAJKHJldmlzaW9uIDQ2NTY4KQorKysgV2ViQ29yZS9sb2FkZXIvTWFpblJlc291cmNl
TG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsOSArNDIsNyBAQAogI2luY2x1ZGUgIlNl
dHRpbmdzLmgiCiAKICNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotI2luY2x1
ZGUgIkFwcGxpY2F0aW9uQ2FjaGUuaCIKLSNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlR3JvdXAu
aCIKLSNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJBcHBs
aWNhdGlvbkNhY2hlSG9zdC5oIgogI2VuZGlmCiAKIC8vIEZJWE1FOiBNb3JlIHRoYXQgaXMgaW4g
Y29tbW9uIHdpdGggU3VicmVzb3VyY2VMb2FkZXIgc2hvdWxkIG1vdmUgdXAgaW50byBSZXNvdXJj
ZUxvYWRlci4KQEAgLTI4MywxNSArMjgxLDggQEAgdm9pZCBNYWluUmVzb3VyY2VMb2FkZXI6OmNv
bnRpbnVlQWZ0ZXJDbwogdm9pZCBNYWluUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25z
ZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByKQogewogI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9B
UFBMSUNBVElPTlMpCi0gICAgaWYgKHIuaHR0cFN0YXR1c0NvZGUoKSAvIDEwMCA9PSA0IHx8IHIu
aHR0cFN0YXR1c0NvZGUoKSAvIDEwMCA9PSA1KSB7Ci0gICAgICAgIEFTU0VSVCghbV9hcHBsaWNh
dGlvbkNhY2hlKTsKLSAgICAgICAgaWYgKG1fZnJhbWUtPnNldHRpbmdzKCkgJiYgbV9mcmFtZS0+
c2V0dGluZ3MoKS0+b2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKCkpIHsKLSAgICAg
ICAgICAgIG1fYXBwbGljYXRpb25DYWNoZSA9IEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6ZmFsbGJh
Y2tDYWNoZUZvck1haW5SZXF1ZXN0KHJlcXVlc3QoKSwgZG9jdW1lbnRMb2FkZXIoKSk7Ci0KLSAg
ICAgICAgICAgIGlmIChzY2hlZHVsZUxvYWRGYWxsYmFja1Jlc291cmNlRnJvbUFwcGxpY2F0aW9u
Q2FjaGUobV9hcHBsaWNhdGlvbkNhY2hlLmdldCgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYgKGRvY3VtZW50TG9hZGVyKCktPmFwcGxpY2F0aW9u
Q2FjaGVIb3N0KCktPm1heWJlTG9hZEZhbGxiYWNrRm9yTWFpblJlc3BvbnNlKHJlcXVlc3QoKSwg
cikpCisgICAgICAgIHJldHVybjsKICNlbmRpZgogCiAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSByLmh0dHBIZWFkZXJGaWVsZHMoKS5maW5kKEF0b21pY1N0cmluZygieC1m
cmFtZS1vcHRpb25zIikpOwpAQCAtMzUzLDYgKzM0NCwxMCBAQCB2b2lkIE1haW5SZXNvdXJjZUxv
YWRlcjo6ZGlkUmVjZWl2ZURhdGEoCiAgICAgQVNTRVJUKCFkZWZlcnNMb2FkaW5nKCkpOwogI2Vu
ZGlmCiAgCisgI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisgICAgZG9jdW1l
bnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+bWFpblJlc291cmNlRGF0YVJlY2Vp
dmVkKGRhdGEsIGxlbmd0aCwgbGVuZ3RoUmVjZWl2ZWQsIGFsbEF0T25jZSk7CisjZW5kaWYKKwog
ICAgIC8vIFRoZSBhZGRpdGlvbmFsIHByb2Nlc3NpbmcgY2FuIGRvIGFueXRoaW5nIGluY2x1ZGlu
ZyBwb3NzaWJseSByZW1vdmluZyB0aGUgbGFzdAogICAgIC8vIHJlZmVyZW5jZSB0byB0aGlzIG9i
amVjdDsgb25lIGV4YW1wbGUgb2YgdGhpcyBpcyAzMjY2MjE2LgogICAgIFJlZlB0cjxNYWluUmVz
b3VyY2VMb2FkZXI+IHByb3RlY3QodGhpcyk7CkBAIC0zODAsMjcgKzM3NSwxNSBAQCB2b2lkIE1h
aW5SZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluCiAgICAgUmVzb3VyY2VMb2FkZXI6OmRp
ZEZpbmlzaExvYWRpbmcoKTsKICAgICAKICNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJ
T05TKQotICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogZ3JvdXAgPSBkbC0+Y2FuZGlkYXRlQXBw
bGljYXRpb25DYWNoZUdyb3VwKCk7Ci0gICAgaWYgKCFncm91cCAmJiBkbC0+YXBwbGljYXRpb25D
YWNoZSgpICYmICFkbC0+bWFpblJlc291cmNlQXBwbGljYXRpb25DYWNoZSgpKQotICAgICAgICBn
cm91cCA9IGRsLT5hcHBsaWNhdGlvbkNhY2hlKCktPmdyb3VwKCk7Ci0gICAgCi0gICAgaWYgKGdy
b3VwKQotICAgICAgICBncm91cC0+ZmluaXNoZWRMb2FkaW5nTWFpblJlc291cmNlKGRsLmdldCgp
KTsKKyAgICBkbC0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+ZmluaXNoZWRMb2FkaW5nTWFpblJl
c291cmNlKCk7CiAjZW5kaWYKIH0KIAogdm9pZCBNYWluUmVzb3VyY2VMb2FkZXI6OmRpZEZhaWwo
Y29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7CiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQ
UExJQ0FUSU9OUykKLSAgICBpZiAoIWVycm9yLmlzQ2FuY2VsbGF0aW9uKCkpIHsKLSAgICAgICAg
QVNTRVJUKCFtX2FwcGxpY2F0aW9uQ2FjaGUpOwotICAgICAgICBpZiAobV9mcmFtZS0+c2V0dGlu
Z3MoKSAmJiBtX2ZyYW1lLT5zZXR0aW5ncygpLT5vZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVu
YWJsZWQoKSkgewotICAgICAgICAgICAgbV9hcHBsaWNhdGlvbkNhY2hlID0gQXBwbGljYXRpb25D
YWNoZUdyb3VwOjpmYWxsYmFja0NhY2hlRm9yTWFpblJlcXVlc3QocmVxdWVzdCgpLCBkb2N1bWVu
dExvYWRlcigpKTsKLQotICAgICAgICAgICAgaWYgKHNjaGVkdWxlTG9hZEZhbGxiYWNrUmVzb3Vy
Y2VGcm9tQXBwbGljYXRpb25DYWNoZShtX2FwcGxpY2F0aW9uQ2FjaGUuZ2V0KCkpKQotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KKyAgICBpZiAoZG9jdW1lbnRMb2Fk
ZXIoKS0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+bWF5YmVMb2FkRmFsbGJhY2tGb3JNYWluRXJy
b3IocmVxdWVzdCgpLCBlcnJvcikpCisgICAgICAgIHJldHVybjsKICNlbmRpZgogCiAgICAgLy8g
VGhlcmUgaXMgYSBidWcgaW4gQ0ZOZXR3b3JrIHdoZXJlIGNhbGxiYWNrcyBjYW4gYmUgZGlzcGF0
Y2hlZCBldmVuIHdoZW4gbG9hZHMgYXJlIGRlZmVycmVkLgpAQCAtNDk1LDI3ICs0NzgsMTUgQEAg
Ym9vbCBNYWluUmVzb3VyY2VMb2FkZXI6OmxvYWQoY29uc3QgUmVzbwogCiAgICAgbV9zdWJzdGl0
dXRlRGF0YSA9IHN1YnN0aXR1dGVEYXRhOwogCisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Qo
cik7CisKICNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotICAgIC8vIENoZWNr
IGlmIHRoaXMgcmVxdWVzdCBzaG91bGQgYmUgbG9hZGVkIGZyb20gdGhlIGFwcGxpY2F0aW9uIGNh
Y2hlCi0gICAgaWYgKCFtX3N1YnN0aXR1dGVEYXRhLmlzVmFsaWQoKSAmJiBmcmFtZUxvYWRlcigp
LT5mcmFtZSgpLT5zZXR0aW5ncygpICYmIGZyYW1lTG9hZGVyKCktPmZyYW1lKCktPnNldHRpbmdz
KCktPm9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCgpKSB7Ci0gICAgICAgIEFTU0VS
VCghbV9hcHBsaWNhdGlvbkNhY2hlKTsKLQotICAgICAgICBtX2FwcGxpY2F0aW9uQ2FjaGUgPSBB
cHBsaWNhdGlvbkNhY2hlR3JvdXA6OmNhY2hlRm9yTWFpblJlcXVlc3QociwgbV9kb2N1bWVudExv
YWRlci5nZXQoKSk7Ci0KLSAgICAgICAgaWYgKG1fYXBwbGljYXRpb25DYWNoZSkgewotICAgICAg
ICAgICAgLy8gR2V0IHRoZSByZXNvdXJjZSBmcm9tIHRoZSBhcHBsaWNhdGlvbiBjYWNoZS4gQnkg
ZGVmaW5pdGlvbiwgY2FjaGVGb3JNYWluUmVxdWVzdCgpIHJldHVybnMgYSBjYWNoZSB0aGF0IGNv
bnRhaW5zIHRoZSByZXNvdXJjZS4KLSAgICAgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJj
ZSogcmVzb3VyY2UgPSBtX2FwcGxpY2F0aW9uQ2FjaGUtPnJlc291cmNlRm9yUmVxdWVzdChyKTsK
LSAgICAgICAgICAgIG1fc3Vic3RpdHV0ZURhdGEgPSBTdWJzdGl0dXRlRGF0YShyZXNvdXJjZS0+
ZGF0YSgpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXNvdXJjZS0+cmVzcG9uc2UoKS5taW1lVHlwZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlLT5yZXNwb25zZSgpLnRleHRFbmNvZGluZ05h
bWUoKSwgS1VSTCgpKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBkb2N1bWVudExvYWRlcigpLT5h
cHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5tYXliZUxvYWRNYWluUmVzb3VyY2UocmVxdWVzdCwgbV9z
dWJzdGl0dXRlRGF0YSk7CiAjZW5kaWYKIAotICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KHIp
OwogICAgIGJvb2wgZGVmZXIgPSBkZWZlcnNMb2FkaW5nKCk7CiAgICAgaWYgKGRlZmVyKSB7Ci0g
ICAgICAgIGJvb2wgc2hvdWxkTG9hZEVtcHR5ID0gc2hvdWxkTG9hZEFzRW1wdHlEb2N1bWVudChy
LnVybCgpKTsKKyAgICAgICAgYm9vbCBzaG91bGRMb2FkRW1wdHkgPSBzaG91bGRMb2FkQXNFbXB0
eURvY3VtZW50KHJlcXVlc3QudXJsKCkpOwogICAgICAgICBpZiAoc2hvdWxkTG9hZEVtcHR5KQog
ICAgICAgICAgICAgZGVmZXIgPSBmYWxzZTsKICAgICB9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9N
YWluUmVzb3VyY2VMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9NYWluUmVz
b3VyY2VMb2FkZXIuaAkocmV2aXNpb24gNDY1NjgpCisrKyBXZWJDb3JlL2xvYWRlci9NYWluUmVz
b3VyY2VMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzksOSArMzksNiBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLSNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotICAg
IGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGU7Ci0jZW5kaWYKICAgICBjbGFzcyBGb3JtU3RhdGU7CiAg
ICAgc3RydWN0IFJlc291cmNlUmVxdWVzdDsKIApAQCAtNzEsMTAgKzY4LDYgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAgICAgICAgIGJvb2wgaXNMb2FkaW5nTXVsdGlwYXJ0Q29udGVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fbG9hZGluZ011bHRpcGFydENvbnRlbnQ7IH0KIAotI2lmIEVOQUJMRShP
RkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCi0gICAgICAgIEFwcGxpY2F0aW9uQ2FjaGUqIGFwcGxp
Y2F0aW9uQ2FjaGUoKSBjb25zdCB7IHJldHVybiBtX2FwcGxpY2F0aW9uQ2FjaGUuZ2V0KCk7IH0K
LSNlbmRpZgotCiAgICAgcHJpdmF0ZToKICAgICAgICAgTWFpblJlc291cmNlTG9hZGVyKEZyYW1l
Kik7CiAKQEAgLTEwNSwxMSArOTgsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAg
TWFpblJlc291cmNlTG9hZGVyVGltZXIgbV9kYXRhTG9hZFRpbWVyOwogCi0jaWYgRU5BQkxFKE9G
RkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLSAgICAgICAgLy8gVGhlIGFwcGxpY2F0aW9uIGNhY2hl
IHRoYXQgdGhlIG1haW4gcmVzb3VyY2Ugd2FzIGxvYWRlZCBmcm9tIChpZiBhbnkpLgotICAgICAg
ICBSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gbV9hcHBsaWNhdGlvbkNhY2hlOwotI2VuZGlmCi0K
ICAgICAgICAgYm9vbCBtX2xvYWRpbmdNdWx0aXBhcnRDb250ZW50OwogICAgICAgICBib29sIG1f
d2FpdGluZ0ZvckNvbnRlbnRQb2xpY3k7CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1Jl
c291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxv
YWRlci5jcHAJKHJldmlzaW9uIDQ2NTY4KQorKysgV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2Fk
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw5IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXIuaCIKIAorI2lmIEVOQUJMRShPRkZMSU5FX1dF
Ql9BUFBMSUNBVElPTlMpCisjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUhvc3QuaCIKKyNlbmRp
ZgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNs
dWRlICJGcmFtZUxvYWRlci5oIgpAQCAtMTE5LDcgKzEyMiw3IEBAIGJvb2wgUmVzb3VyY2VMb2Fk
ZXI6OmxvYWQoY29uc3QgUmVzb3VyY2UKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCiAjaWYg
RU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLSAgICBpZiAobV9kb2N1bWVudExvYWRl
ci0+c2NoZWR1bGVBcHBsaWNhdGlvbkNhY2hlTG9hZCh0aGlzLCBjbGllbnRSZXF1ZXN0LCByLnVy
bCgpKSkKKyAgICBpZiAobV9kb2N1bWVudExvYWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+
bWF5YmVMb2FkUmVzb3VyY2UodGhpcywgY2xpZW50UmVxdWVzdCwgci51cmwoKSkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogI2VuZGlmCiAKQEAgLTE5MCwxNyArMTkzLDYgQEAgdm9pZCBSZXNvdXJj
ZUxvYWRlcjo6Y2xlYXJSZXNvdXJjZURhdGEoKQogICAgICAgICBtX3Jlc291cmNlRGF0YS0+Y2xl
YXIoKTsKIH0KIAotI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCi1ib29sIFJl
c291cmNlTG9hZGVyOjpzY2hlZHVsZUxvYWRGYWxsYmFja1Jlc291cmNlRnJvbUFwcGxpY2F0aW9u
Q2FjaGUoQXBwbGljYXRpb25DYWNoZSogY2FjaGUpCi17Ci0gICAgaWYgKGRvY3VtZW50TG9hZGVy
KCktPnNjaGVkdWxlTG9hZEZhbGxiYWNrUmVzb3VyY2VGcm9tQXBwbGljYXRpb25DYWNoZSh0aGlz
LCBtX3JlcXVlc3QsIGNhY2hlKSkgewotICAgICAgICBoYW5kbGUoKS0+Y2FuY2VsKCk7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0jZW5kaWYKLQog
dm9pZCBSZXNvdXJjZUxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKIHsKICAgICAv
LyBQcm90ZWN0IHRoaXMgaW4gdGhpcyBkZWxlZ2F0ZSBtZXRob2Qgc2luY2UgdGhlIGFkZGl0aW9u
YWwgcHJvY2Vzc2luZyBjYW4gZG8KQEAgLTM4MiwxMCArMzc0LDggQEAgUmVzb3VyY2VFcnJvciBS
ZXNvdXJjZUxvYWRlcjo6Y2Fubm90U2hvdwogdm9pZCBSZXNvdXJjZUxvYWRlcjo6d2lsbFNlbmRS
ZXF1ZXN0KFJlc291cmNlSGFuZGxlKiwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQogewogI2lmIEVOQUJMRShPRkZMSU5F
X1dFQl9BUFBMSUNBVElPTlMpCi0gICAgaWYgKCFyZWRpcmVjdFJlc3BvbnNlLmlzTnVsbCgpICYm
ICFwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwocmVxdWVzdC51cmwoKSwgcmVkaXJlY3RSZXNw
b25zZS51cmwoKSkpIHsKLSAgICAgICAgaWYgKHNjaGVkdWxlTG9hZEZhbGxiYWNrUmVzb3VyY2VG
cm9tQXBwbGljYXRpb25DYWNoZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAoZG9jdW1lbnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+bWF5YmVMb2FkRmFs
bGJhY2tGb3JSZWRpcmVjdCh0aGlzLCByZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKSkKKyAgICAg
ICAgcmV0dXJuOwogI2VuZGlmCiAgICAgd2lsbFNlbmRSZXF1ZXN0KHJlcXVlc3QsIHJlZGlyZWN0
UmVzcG9uc2UpOwogfQpAQCAtMzk4LDEwICszODgsOCBAQCB2b2lkIFJlc291cmNlTG9hZGVyOjpk
aWRTZW5kRGF0YShSZXNvdXJjCiB2b2lkIFJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9u
c2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsK
ICNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotICAgIGlmIChyZXNwb25zZS5o
dHRwU3RhdHVzQ29kZSgpIC8gMTAwID09IDQgfHwgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSAv
IDEwMCA9PSA1KSB7Ci0gICAgICAgIGlmIChzY2hlZHVsZUxvYWRGYWxsYmFja1Jlc291cmNlRnJv
bUFwcGxpY2F0aW9uQ2FjaGUoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYg
KGRvY3VtZW50TG9hZGVyKCktPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPm1heWJlTG9hZEZhbGxi
YWNrRm9yUmVzcG9uc2UodGhpcywgcmVzcG9uc2UpKQorICAgICAgICByZXR1cm47CiAjZW5kaWYK
ICAgICBkaWRSZWNlaXZlUmVzcG9uc2UocmVzcG9uc2UpOwogfQpAQCAtNDE5LDEwICs0MDcsOCBA
QCB2b2lkIFJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKFJlCiB2b2lkIFJlc291cmNl
TG9hZGVyOjpkaWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJy
b3IpCiB7CiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLSAgICBpZiAoIWVy
cm9yLmlzQ2FuY2VsbGF0aW9uKCkpIHsKLSAgICAgICAgaWYgKGRvY3VtZW50TG9hZGVyKCktPnNj
aGVkdWxlTG9hZEZhbGxiYWNrUmVzb3VyY2VGcm9tQXBwbGljYXRpb25DYWNoZSh0aGlzLCBtX3Jl
cXVlc3QpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoZG9jdW1lbnRMb2Fk
ZXIoKS0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+bWF5YmVMb2FkRmFsbGJhY2tGb3JFcnJvcih0
aGlzLCBlcnJvcikpCisgICAgICAgIHJldHVybjsKICNlbmRpZgogICAgIGRpZEZhaWwoZXJyb3Ip
OwogfQpJbmRleDogV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5oCShyZXZpc2lvbiA0NjU2OCkKKysrIFdl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQw
LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgQXBwbGljYXRpb25DYWNo
ZTsKKyAgICBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlSG9zdDsKICAgICBjbGFzcyBEb2N1bWVudExv
YWRlcjsKICAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFzcyBGcmFtZUxvYWRlcjsKQEAgLTExOSw3
ICsxMTksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFJlc291cmNlTG9hZGVyKEZy
YW1lKiwgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzLCBib29sIHNob3VsZENvbnRlbnRT
bmlmZik7CiAKICNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotICAgICAgICBi
b29sIHNjaGVkdWxlTG9hZEZhbGxiYWNrUmVzb3VyY2VGcm9tQXBwbGljYXRpb25DYWNoZShBcHBs
aWNhdGlvbkNhY2hlKiA9IDApOworICAgICAgICBmcmllbmQgY2xhc3MgQXBwbGljYXRpb25DYWNo
ZUhvc3Q7ICAvLyBmb3IgYWNjZXNzIHRvIHJlcXVlc3QoKQogI2VuZGlmCiAKICAgICAgICAgdmly
dHVhbCB2b2lkIGRpZENhbmNlbChjb25zdCBSZXNvdXJjZUVycm9yJik7CkBAIC0xMzMsMTMgKzEz
MywxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRs
ZT4gbV9oYW5kbGU7CiAgICAgICAgIFJlZlB0cjxGcmFtZT4gbV9mcmFtZTsKICAgICAgICAgUmVm
UHRyPERvY3VtZW50TG9hZGVyPiBtX2RvY3VtZW50TG9hZGVyOwotICAgICAgICBSZXNvdXJjZVJl
c3BvbnNlIG1fcmVzcG9uc2U7ICAgICAgICAKKyAgICAgICAgUmVzb3VyY2VSZXNwb25zZSBtX3Jl
c3BvbnNlOwogICAgICAgICAKICAgICBwcml2YXRlOgogICAgICAgICBSZXNvdXJjZVJlcXVlc3Qg
bV9yZXF1ZXN0OwogICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX3Jlc291cmNlRGF0YTsK
ICAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgbV9pZGVudGlmaWVyOyAgICAgICAgCisg
ICAgICAgIHVuc2lnbmVkIGxvbmcgbV9pZGVudGlmaWVyOwogCiAgICAgICAgIGJvb2wgbV9yZWFj
aGVkVGVybWluYWxTdGF0ZTsKICAgICAgICAgYm9vbCBtX2NhbmNlbGxlZDsKSW5kZXg6IFdlYkNv
cmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcAkocmV2
aXNpb24gNDY1NjgpCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hl
R3JvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKE9G
RkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKIAogI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGUuaCIK
KyNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlSG9zdC5oIgogI2luY2x1ZGUgIkFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZS5oIgogI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmgiCiAj
aW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCkBAIC0xMjYsNyArMTI3LDcgQEAgdm9pZCBBcHBsaWNh
dGlvbkNhY2hlR3JvdXA6OnNlbGVjdENhY2hlKAogICAgICAgICByZXR1cm47CiAgICAgCiAgICAg
RG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVu
dExvYWRlcigpOwotICAgIEFTU0VSVCghZG9jdW1lbnRMb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGUo
KSk7CisgICAgQVNTRVJUKCFkb2N1bWVudExvYWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+
YXBwbGljYXRpb25DYWNoZSgpKTsKIAogICAgIGlmIChwYXNzZWRNYW5pZmVzdFVSTC5pc051bGwo
KSkgewogICAgICAgICBzZWxlY3RDYWNoZVdpdGhvdXRNYW5pZmVzdFVSTChmcmFtZSk7ICAgICAg
ICAKQEAgLTEzNyw3ICsxMzgsNyBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6c2VsZWN0
Q2FjaGUoCiAgICAgaWYgKG1hbmlmZXN0VVJMLmhhc1JlZigpKQogICAgICAgICBtYW5pZmVzdFVS
TC5yZW1vdmVSZWYoKTsKIAotICAgIEFwcGxpY2F0aW9uQ2FjaGUqIG1haW5SZXNvdXJjZUNhY2hl
ID0gZG9jdW1lbnRMb2FkZXItPm1haW5SZXNvdXJjZUFwcGxpY2F0aW9uQ2FjaGUoKTsKKyAgICBB
cHBsaWNhdGlvbkNhY2hlKiBtYWluUmVzb3VyY2VDYWNoZSA9IGRvY3VtZW50TG9hZGVyLT5hcHBs
aWNhdGlvbkNhY2hlSG9zdCgpLT5tYWluUmVzb3VyY2VBcHBsaWNhdGlvbkNhY2hlKCk7CiAgICAg
CiAgICAgaWYgKG1haW5SZXNvdXJjZUNhY2hlKSB7CiAgICAgICAgIGlmIChtYW5pZmVzdFVSTCA9
PSBtYWluUmVzb3VyY2VDYWNoZS0+Z3JvdXAoKS0+bV9tYW5pZmVzdFVSTCkgewpAQCAtMTc1LDE0
ICsxNzYsMTQgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OnNlbGVjdENhY2hlKAogCiAg
ICAgLy8gRG9uJ3QgY2hhbmdlIGFueXRoaW5nIG9uIGRpc2sgaWYgcHJpdmF0ZSBicm93c2luZyBp
cyBlbmFibGVkLgogICAgIGlmICghZnJhbWUtPnNldHRpbmdzKCkgfHwgZnJhbWUtPnNldHRpbmdz
KCktPnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKSkgewotICAgICAgICBwb3N0TGlzdGVuZXJUYXNr
KCZET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsQ2hlY2tpbmdMaXN0ZW5lciwgZG9jdW1lbnRMb2Fk
ZXIpOwotICAgICAgICBwb3N0TGlzdGVuZXJUYXNrKCZET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxs
RXJyb3JMaXN0ZW5lciwgZG9jdW1lbnRMb2FkZXIpOworICAgICAgICBwb3N0TGlzdGVuZXJUYXNr
KERPTUFwcGxpY2F0aW9uQ2FjaGU6OkNIRUNLSU5HX0VWRU5ULCBkb2N1bWVudExvYWRlcik7Cisg
ICAgICAgIHBvc3RMaXN0ZW5lclRhc2soRE9NQXBwbGljYXRpb25DYWNoZTo6RVJST1JfRVZFTlQs
IGRvY3VtZW50TG9hZGVyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIEFwcGxpY2F0
aW9uQ2FjaGVHcm91cCogZ3JvdXAgPSBjYWNoZVN0b3JhZ2UoKS5maW5kT3JDcmVhdGVDYWNoZUdy
b3VwKG1hbmlmZXN0VVJMKTsKIAotICAgIGRvY3VtZW50TG9hZGVyLT5zZXRDYW5kaWRhdGVBcHBs
aWNhdGlvbkNhY2hlR3JvdXAoZ3JvdXApOworICAgIGRvY3VtZW50TG9hZGVyLT5hcHBsaWNhdGlv
bkNhY2hlSG9zdCgpLT5zZXRDYW5kaWRhdGVBcHBsaWNhdGlvbkNhY2hlR3JvdXAoZ3JvdXApOwog
ICAgIGdyb3VwLT5tX3BlbmRpbmdNYXN0ZXJSZXNvdXJjZUxvYWRlcnMuYWRkKGRvY3VtZW50TG9h
ZGVyKTsKICAgICBncm91cC0+bV9kb3dubG9hZGluZ1BlbmRpbmdNYXN0ZXJSZXNvdXJjZUxvYWRl
cnNDb3VudCsrOwogCkBAIC0xOTYsOSArMTk3LDkgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3Jv
dXA6OnNlbGVjdENhY2hlVwogICAgICAgICByZXR1cm47CiAKICAgICBEb2N1bWVudExvYWRlciog
ZG9jdW1lbnRMb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCk7Ci0gICAg
QVNTRVJUKCFkb2N1bWVudExvYWRlci0+YXBwbGljYXRpb25DYWNoZSgpKTsKKyAgICBBU1NFUlQo
IWRvY3VtZW50TG9hZGVyLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5hcHBsaWNhdGlvbkNhY2hl
KCkpOwogCi0gICAgQXBwbGljYXRpb25DYWNoZSogbWFpblJlc291cmNlQ2FjaGUgPSBkb2N1bWVu
dExvYWRlci0+bWFpblJlc291cmNlQXBwbGljYXRpb25DYWNoZSgpOworICAgIEFwcGxpY2F0aW9u
Q2FjaGUqIG1haW5SZXNvdXJjZUNhY2hlID0gZG9jdW1lbnRMb2FkZXItPmFwcGxpY2F0aW9uQ2Fj
aGVIb3N0KCktPm1haW5SZXNvdXJjZUFwcGxpY2F0aW9uQ2FjaGUoKTsKIAogICAgIGlmIChtYWlu
UmVzb3VyY2VDYWNoZSkgewogICAgICAgICBtYWluUmVzb3VyY2VDYWNoZS0+Z3JvdXAoKS0+YXNz
b2NpYXRlRG9jdW1lbnRMb2FkZXJXaXRoQ2FjaGUoZG9jdW1lbnRMb2FkZXIsIG1haW5SZXNvdXJj
ZUNhY2hlKTsKQEAgLTIzNSw5ICsyMzYsOSBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6
ZmluaXNoZWRMb2FkCiAgICAgICAgIC8vIENhY2hlIHVwZGF0ZSBoYXMgYmVlbiBhIGZhaWx1cmUs
IHNvIHRoZXJlIGlzIG5vIHJlYXNvbiB0byBrZWVwIHRoZSBkb2N1bWVudCBhc3NvY2lhdGVkIHdp
dGggdGhlIGluY29tcGxldGUgY2FjaGUKICAgICAgICAgLy8gKGl0cyBtYWluIHJlc291cmNlIHdh
cyBub3QgY2FjaGVkIHlldCwgc28gaXQgaXMgbGlrZWx5IHRoYXQgdGhlIGFwcGxpY2F0aW9uIGNo
YW5nZWQgc2lnbmlmaWNhbnRseSBzZXJ2ZXItc2lkZSkuCiAgICAgICAgIEFTU0VSVCghbV9jYWNo
ZUJlaW5nVXBkYXRlZCk7IC8vIEFscmVhZHkgY2xlYXJlZCBvdXQgYnkgc3RvcExvYWRpbmcoKS4K
LSAgICAgICAgbG9hZGVyLT5zZXRBcHBsaWNhdGlvbkNhY2hlKDApOyAvLyBXaWxsIHVuc2V0IGNh
bmRpZGF0ZSwgdG9vLgorICAgICAgICBsb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPnNl
dEFwcGxpY2F0aW9uQ2FjaGUoMCk7IC8vIFdpbGwgdW5zZXQgY2FuZGlkYXRlLCB0b28uCiAgICAg
ICAgIG1fYXNzb2NpYXRlZERvY3VtZW50TG9hZGVycy5yZW1vdmUobG9hZGVyKTsKLSAgICAgICAg
cG9zdExpc3RlbmVyVGFzaygmRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbEVycm9yTGlzdGVuZXIs
IGxvYWRlcik7CisgICAgICAgIHBvc3RMaXN0ZW5lclRhc2soRE9NQXBwbGljYXRpb25DYWNoZTo6
RVJST1JfRVZFTlQsIGxvYWRlcik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29tcGxldGVk
OgogICAgICAgICBBU1NFUlQobV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzLmNvbnRhaW5zKGxv
YWRlcikpOwpAQCAtMjcxLDI4ICsyNzIsMjggQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6
OmZhaWxlZExvYWRpbgogCiAgICAgICAgIC8vIFRoZSBtYW5pZmVzdCBkaWRuJ3QgY2hhbmdlLCBh
bmQgd2UgaGF2ZSBhIHJlbGV2YW50IGNhY2hlIC0gYnV0IHRoZSBtYWluIHJlc291cmNlIGRvd25s
b2FkIGZhaWxlZCBtaWQtd2F5LCBzbyBpdCBjYW5ub3QgYmUgc3RvcmVkIHRvIHRoZSBjYWNoZSwK
ICAgICAgICAgLy8gYW5kIHRoZSBsb2FkZXIgZG9lcyBub3QgZ2V0IGFzc29jaWF0ZWQgdG8gaXQu
IElmIHRoZXJlIGFyZSBvdGhlciBtYWluIHJlc291cmNlcyBiZWluZyBkb3dubG9hZGVkIGZvciB0
aGlzIGNhY2hlIGdyb3VwLCB0aGV5IG1heSBzdGlsbCBzdWNjZWVkLgotICAgICAgICBwb3N0TGlz
dGVuZXJUYXNrKCZET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsRXJyb3JMaXN0ZW5lciwgbG9hZGVy
KTsKKyAgICAgICAgcG9zdExpc3RlbmVyVGFzayhET01BcHBsaWNhdGlvbkNhY2hlOjpFUlJPUl9F
VkVOVCwgbG9hZGVyKTsKIAogICAgICAgICBicmVhazsKICAgICBjYXNlIEZhaWx1cmU6CiAgICAg
ICAgIC8vIENhY2hlIHVwZGF0ZSBmYWlsZWQsIHRvby4KICAgICAgICAgQVNTRVJUKCFtX2NhY2hl
QmVpbmdVcGRhdGVkKTsgLy8gQWxyZWFkeSBjbGVhcmVkIG91dCBieSBzdG9wTG9hZGluZygpLgot
ICAgICAgICBBU1NFUlQoIWxvYWRlci0+YXBwbGljYXRpb25DYWNoZSgpIHx8IGxvYWRlci0+YXBw
bGljYXRpb25DYWNoZSgpID09IG1fY2FjaGVCZWluZ1VwZGF0ZWQpOworICAgICAgICBBU1NFUlQo
IWxvYWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+YXBwbGljYXRpb25DYWNoZSgpIHx8IGxv
YWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+YXBwbGljYXRpb25DYWNoZSgpID09IG1fY2Fj
aGVCZWluZ1VwZGF0ZWQpOwogCi0gICAgICAgIGxvYWRlci0+c2V0QXBwbGljYXRpb25DYWNoZSgw
KTsgLy8gV2lsbCB1bnNldCBjYW5kaWRhdGUsIHRvby4KKyAgICAgICAgbG9hZGVyLT5hcHBsaWNh
dGlvbkNhY2hlSG9zdCgpLT5zZXRBcHBsaWNhdGlvbkNhY2hlKDApOyAvLyBXaWxsIHVuc2V0IGNh
bmRpZGF0ZSwgdG9vLgogICAgICAgICBtX2Fzc29jaWF0ZWREb2N1bWVudExvYWRlcnMucmVtb3Zl
KGxvYWRlcik7Ci0gICAgICAgIHBvc3RMaXN0ZW5lclRhc2soJkRPTUFwcGxpY2F0aW9uQ2FjaGU6
OmNhbGxFcnJvckxpc3RlbmVyLCBsb2FkZXIpOworICAgICAgICBwb3N0TGlzdGVuZXJUYXNrKERP
TUFwcGxpY2F0aW9uQ2FjaGU6OkVSUk9SX0VWRU5ULCBsb2FkZXIpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIENvbXBsZXRlZDoKICAgICAgICAgLy8gVGhlIGNhY2hlIG1hbmlmZXN0IGRpZG4n
dCBsaXN0IHRoaXMgbWFpbiByZXNvdXJjZSwgYW5kIGFsbCBjYWNoZSBlbnRyaWVzIHdlcmUgYWxy
ZWFkeSB1cGRhdGVkIHN1Y2Nlc3NmdWxseSAtIGJ1dCB0aGUgbWFpbiByZXNvdXJjZSBmYWlsZWQg
dG8gbG9hZCwKICAgICAgICAgLy8gc28gaXQgY2Fubm90IGJlIHN0b3JlZCB0byB0aGUgY2FjaGUu
IElmIHRoZXJlIGFyZSBvdGhlciBtYWluIHJlc291cmNlcyBiZWluZyBkb3dubG9hZGVkIGZvciB0
aGlzIGNhY2hlIGdyb3VwLCB0aGV5IG1heSBzdGlsbCBzdWNjZWVkLgogICAgICAgICBBU1NFUlQo
bV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzLmNvbnRhaW5zKGxvYWRlcikpOwotICAgICAgICBB
U1NFUlQobG9hZGVyLT5hcHBsaWNhdGlvbkNhY2hlKCkgPT0gbV9jYWNoZUJlaW5nVXBkYXRlZCk7
Ci0gICAgICAgIEFTU0VSVCghbG9hZGVyLT5jYW5kaWRhdGVBcHBsaWNhdGlvbkNhY2hlR3JvdXAo
KSk7CisgICAgICAgIEFTU0VSVChsb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPmFwcGxp
Y2F0aW9uQ2FjaGUoKSA9PSBtX2NhY2hlQmVpbmdVcGRhdGVkKTsKKyAgICAgICAgQVNTRVJUKCFs
b2FkZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPmNhbmRpZGF0ZUFwcGxpY2F0aW9uQ2FjaGVH
cm91cCgpKTsKICAgICAgICAgbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzLnJlbW92ZShsb2Fk
ZXIpOwotICAgICAgICBsb2FkZXItPnNldEFwcGxpY2F0aW9uQ2FjaGUoMCk7CisgICAgICAgIGxv
YWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+c2V0QXBwbGljYXRpb25DYWNoZSgwKTsKIAot
ICAgICAgICBwb3N0TGlzdGVuZXJUYXNrKCZET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsRXJyb3JM
aXN0ZW5lciwgbG9hZGVyKTsKKyAgICAgICAgcG9zdExpc3RlbmVyVGFzayhET01BcHBsaWNhdGlv
bkNhY2hlOjpFUlJPUl9FVkVOVCwgbG9hZGVyKTsKIAogICAgICAgICBicmVhazsKICAgICB9CkBA
IC0zMzIsNyArMzMzLDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmRpc2Fzc29jaWF0
ZQogCiAgICAgbV9wZW5kaW5nTWFzdGVyUmVzb3VyY2VMb2FkZXJzLnJlbW92ZShsb2FkZXIpOwog
Ci0gICAgbG9hZGVyLT5zZXRBcHBsaWNhdGlvbkNhY2hlKDApOyAvLyBXaWxsIHNldCBjYW5kaWRh
dGUgdG8gMCwgdG9vLgorICAgIGxvYWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+c2V0QXBw
bGljYXRpb25DYWNoZSgwKTsgLy8gV2lsbCBzZXQgY2FuZGlkYXRlIHRvIDAsIHRvby4KIAogICAg
IGlmICghbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzLmlzRW1wdHkoKSB8fCAhbV9wZW5kaW5n
TWFzdGVyUmVzb3VyY2VMb2FkZXJzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzg4
LDkgKzM4OSw5IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjp1cGRhdGUoRnJhbWUKIHsK
ICAgICBpZiAobV91cGRhdGVTdGF0dXMgPT0gQ2hlY2tpbmcgfHwgbV91cGRhdGVTdGF0dXMgPT0g
RG93bmxvYWRpbmcpIHsKICAgICAgICAgaWYgKHVwZGF0ZU9wdGlvbiA9PSBBcHBsaWNhdGlvbkNh
Y2hlVXBkYXRlV2l0aEJyb3dzaW5nQ29udGV4dCkgewotICAgICAgICAgICAgcG9zdExpc3RlbmVy
VGFzaygmRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbENoZWNraW5nTGlzdGVuZXIsIGZyYW1lLT5s
b2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSk7CisgICAgICAgICAgICBwb3N0TGlzdGVuZXJUYXNr
KERPTUFwcGxpY2F0aW9uQ2FjaGU6OkNIRUNLSU5HX0VWRU5ULCBmcmFtZS0+bG9hZGVyKCktPmRv
Y3VtZW50TG9hZGVyKCkpOwogICAgICAgICAgICAgaWYgKG1fdXBkYXRlU3RhdHVzID09IERvd25s
b2FkaW5nKQotICAgICAgICAgICAgICAgIHBvc3RMaXN0ZW5lclRhc2soJkRPTUFwcGxpY2F0aW9u
Q2FjaGU6OmNhbGxEb3dubG9hZGluZ0xpc3RlbmVyLCBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50
TG9hZGVyKCkpOworICAgICAgICAgICAgICAgIHBvc3RMaXN0ZW5lclRhc2soRE9NQXBwbGljYXRp
b25DYWNoZTo6RE9XTkxPQURJTkdfRVZFTlQsIGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2Fk
ZXIoKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTQwMCw4ICs0MDEs
OCBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6dXBkYXRlKEZyYW1lCiAgICAgICAgIEFT
U0VSVChtX3BlbmRpbmdNYXN0ZXJSZXNvdXJjZUxvYWRlcnMuaXNFbXB0eSgpKTsKICAgICAgICAg
QVNTRVJUKG1fcGVuZGluZ0VudHJpZXMuaXNFbXB0eSgpKTsKICAgICAgICAgQVNTRVJUKCFtX2Nh
Y2hlQmVpbmdVcGRhdGVkKTsKLSAgICAgICAgcG9zdExpc3RlbmVyVGFzaygmRE9NQXBwbGljYXRp
b25DYWNoZTo6Y2FsbENoZWNraW5nTGlzdGVuZXIsIGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRM
b2FkZXIoKSk7Ci0gICAgICAgIHBvc3RMaXN0ZW5lclRhc2soJkRPTUFwcGxpY2F0aW9uQ2FjaGU6
OmNhbGxOb1VwZGF0ZUxpc3RlbmVyLCBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkp
OworICAgICAgICBwb3N0TGlzdGVuZXJUYXNrKERPTUFwcGxpY2F0aW9uQ2FjaGU6OkNIRUNLSU5H
X0VWRU5ULCBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkpOworICAgICAgICBwb3N0
TGlzdGVuZXJUYXNrKERPTUFwcGxpY2F0aW9uQ2FjaGU6Ok5PVVBEQVRFX0VWRU5ULCBmcmFtZS0+
bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBA
IC00MTAsMTAgKzQxMSwxMCBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6dXBkYXRlKEZy
YW1lCiAKICAgICBtX3VwZGF0ZVN0YXR1cyA9IENoZWNraW5nOwogCi0gICAgcG9zdExpc3RlbmVy
VGFzaygmRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbENoZWNraW5nTGlzdGVuZXIsIG1fYXNzb2Np
YXRlZERvY3VtZW50TG9hZGVycyk7CisgICAgcG9zdExpc3RlbmVyVGFzayhET01BcHBsaWNhdGlv
bkNhY2hlOjpDSEVDS0lOR19FVkVOVCwgbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzKTsKICAg
ICBpZiAoIW1fbmV3ZXN0Q2FjaGUpIHsKICAgICAgICAgQVNTRVJUKHVwZGF0ZU9wdGlvbiA9PSBB
cHBsaWNhdGlvbkNhY2hlVXBkYXRlV2l0aEJyb3dzaW5nQ29udGV4dCk7Ci0gICAgICAgIHBvc3RM
aXN0ZW5lclRhc2soJkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxDaGVja2luZ0xpc3RlbmVyLCBm
cmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkpOworICAgICAgICBwb3N0TGlzdGVuZXJU
YXNrKERPTUFwcGxpY2F0aW9uQ2FjaGU6OkNIRUNLSU5HX0VWRU5ULCBmcmFtZS0+bG9hZGVyKCkt
PmRvY3VtZW50TG9hZGVyKCkpOwogICAgIH0KICAgICAKICAgICBBU1NFUlQoIW1fbWFuaWZlc3RI
YW5kbGUpOwpAQCAtNjQ4LDcgKzY0OSw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpk
aWRGaW5pc2hMb2EKICAgICAvLyBXZSBoYXZlIHRoZSBtYW5pZmVzdCwgbm93IGRvd25sb2FkIHRo
ZSByZXNvdXJjZXMuCiAgICAgbV91cGRhdGVTdGF0dXMgPSBEb3dubG9hZGluZzsKICAgICAKLSAg
ICBwb3N0TGlzdGVuZXJUYXNrKCZET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsRG93bmxvYWRpbmdM
aXN0ZW5lciwgbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzKTsKKyAgICBwb3N0TGlzdGVuZXJU
YXNrKERPTUFwcGxpY2F0aW9uQ2FjaGU6OkRPV05MT0FESU5HX0VWRU5ULCBtX2Fzc29jaWF0ZWRE
b2N1bWVudExvYWRlcnMpOwogCiAgICAgQVNTRVJUKG1fcGVuZGluZ0VudHJpZXMuaXNFbXB0eSgp
KTsKIApAQCAtNjk4LDggKzY5OSw4IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjptYW5p
ZmVzdE5vdEYKIHsKICAgICBtYWtlT2Jzb2xldGUoKTsKIAotICAgIHBvc3RMaXN0ZW5lclRhc2so
JkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxPYnNvbGV0ZUxpc3RlbmVyLCBtX2Fzc29jaWF0ZWRE
b2N1bWVudExvYWRlcnMpOwotICAgIHBvc3RMaXN0ZW5lclRhc2soJkRPTUFwcGxpY2F0aW9uQ2Fj
aGU6OmNhbGxFcnJvckxpc3RlbmVyLCBtX3BlbmRpbmdNYXN0ZXJSZXNvdXJjZUxvYWRlcnMpOwor
ICAgIHBvc3RMaXN0ZW5lclRhc2soRE9NQXBwbGljYXRpb25DYWNoZTo6T0JTT0xFVEVfRVZFTlQs
IG1fYXNzb2NpYXRlZERvY3VtZW50TG9hZGVycyk7CisgICAgcG9zdExpc3RlbmVyVGFzayhET01B
cHBsaWNhdGlvbkNhY2hlOjpFUlJPUl9FVkVOVCwgbV9wZW5kaW5nTWFzdGVyUmVzb3VyY2VMb2Fk
ZXJzKTsKIAogICAgIHN0b3BMb2FkaW5nKCk7CiAKQEAgLTcwOSw5ICs3MTAsOSBAQCB2b2lkIEFw
cGxpY2F0aW9uQ2FjaGVHcm91cDo6bWFuaWZlc3ROb3RGCiAgICAgd2hpbGUgKCFtX3BlbmRpbmdN
YXN0ZXJSZXNvdXJjZUxvYWRlcnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIEhhc2hTZXQ8RG9jdW1l
bnRMb2FkZXIqPjo6aXRlcmF0b3IgaXQgPSBtX3BlbmRpbmdNYXN0ZXJSZXNvdXJjZUxvYWRlcnMu
YmVnaW4oKTsKICAgICAgICAgCi0gICAgICAgIEFTU0VSVCgoKml0KS0+Y2FuZGlkYXRlQXBwbGlj
YXRpb25DYWNoZUdyb3VwKCkgPT0gdGhpcyk7Ci0gICAgICAgIEFTU0VSVCghKCppdCktPmFwcGxp
Y2F0aW9uQ2FjaGUoKSk7Ci0gICAgICAgICgqaXQpLT5zZXRDYW5kaWRhdGVBcHBsaWNhdGlvbkNh
Y2hlR3JvdXAoMCk7CisgICAgICAgIEFTU0VSVCgoKml0KS0+YXBwbGljYXRpb25DYWNoZUhvc3Qo
KS0+Y2FuZGlkYXRlQXBwbGljYXRpb25DYWNoZUdyb3VwKCkgPT0gdGhpcyk7CisgICAgICAgIEFT
U0VSVCghKCppdCktPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPmFwcGxpY2F0aW9uQ2FjaGUoKSk7
CisgICAgICAgICgqaXQpLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5zZXRDYW5kaWRhdGVBcHBs
aWNhdGlvbkNhY2hlR3JvdXAoMCk7CiAgICAgICAgIG1fcGVuZGluZ01hc3RlclJlc291cmNlTG9h
ZGVycy5yZW1vdmUoaXQpOwogICAgIH0KIApAQCAtNzQ3LDExICs3NDgsMTEgQEAgdm9pZCBBcHBs
aWNhdGlvbkNhY2hlR3JvdXA6OmNoZWNrSWZMb2FkSQogICAgICAgICBpZiAoIW1fc3RvcmFnZUlE
KQogICAgICAgICAgICAgY2FjaGVTdG9yYWdlKCkuc3RvcmVOZXdlc3RDYWNoZSh0aGlzKTsKIAot
ICAgICAgICBwb3N0TGlzdGVuZXJUYXNrKCZET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsTm9VcGRh
dGVMaXN0ZW5lciwgbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzKTsKKyAgICAgICAgcG9zdExp
c3RlbmVyVGFzayhET01BcHBsaWNhdGlvbkNhY2hlOjpOT1VQREFURV9FVkVOVCwgbV9hc3NvY2lh
dGVkRG9jdW1lbnRMb2FkZXJzKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGYWlsdXJlOgog
ICAgICAgICBBU1NFUlQoIW1fY2FjaGVCZWluZ1VwZGF0ZWQpOwotICAgICAgICBwb3N0TGlzdGVu
ZXJUYXNrKCZET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsRXJyb3JMaXN0ZW5lciwgbV9hc3NvY2lh
dGVkRG9jdW1lbnRMb2FkZXJzKTsKKyAgICAgICAgcG9zdExpc3RlbmVyVGFzayhET01BcHBsaWNh
dGlvbkNhY2hlOjpFUlJPUl9FVkVOVCwgbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzKTsKICAg
ICAgICAgaWYgKG1fY2FjaGVzLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgQVNTRVJUKG1fYXNz
b2NpYXRlZERvY3VtZW50TG9hZGVycy5pc0VtcHR5KCkpOwogICAgICAgICAgICAgZGVsZXRlIHRo
aXM7CkBAIC03ODAsNyArNzgxLDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmNoZWNr
SWZMb2FkSQogICAgICAgICAgICAgaWYgKG9sZE5ld2VzdENhY2hlKQogICAgICAgICAgICAgICAg
IGNhY2hlU3RvcmFnZSgpLnJlbW92ZShvbGROZXdlc3RDYWNoZS5nZXQoKSk7CiAgICAgICAgICAg
ICAvLyBGaXJlIHRoZSBzdWNjZXNzIGV2ZW50cy4KLSAgICAgICAgICAgIHBvc3RMaXN0ZW5lclRh
c2soaXNVcGdyYWRlQXR0ZW1wdCA/ICZET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsVXBkYXRlUmVh
ZHlMaXN0ZW5lciA6ICZET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsQ2FjaGVkTGlzdGVuZXIsIG1f
YXNzb2NpYXRlZERvY3VtZW50TG9hZGVycyk7CisgICAgICAgICAgICBwb3N0TGlzdGVuZXJUYXNr
KGlzVXBncmFkZUF0dGVtcHQgPyBET01BcHBsaWNhdGlvbkNhY2hlOjpVUERBVEVSRUFEWV9FVkVO
VCA6IERPTUFwcGxpY2F0aW9uQ2FjaGU6OkNBQ0hFRF9FVkVOVCwgbV9hc3NvY2lhdGVkRG9jdW1l
bnRMb2FkZXJzKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChjYWNoZVN0b3Jh
Z2UoKS5pc01heGltdW1TaXplUmVhY2hlZCgpICYmICFtX2NhbGxlZFJlYWNoZWRNYXhBcHBDYWNo
ZVNpemUpIHsKICAgICAgICAgICAgICAgICAvLyBXZSByYW4gb3V0IG9mIHNwYWNlLiBBbGwgdGhl
IGNoYW5nZXMgaW4gdGhlIGNhY2hlIHN0b3JhZ2UgaGF2ZQpAQCAtODAwLDcgKzgwMSw3IEBAIHZv
aWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpjaGVja0lmTG9hZEkKICAgICAgICAgICAgICAgICAv
LyBSdW4gdGhlICJjYWNoZSBmYWlsdXJlIHN0ZXBzIgogICAgICAgICAgICAgICAgIC8vIEZpcmUg
dGhlIGVycm9yIGV2ZW50cyB0byBhbGwgcGVuZGluZyBtYXN0ZXIgZW50cmllcywgYXMgd2VsbCBh
bnkgb3RoZXIgY2FjaGUgaG9zdHMKICAgICAgICAgICAgICAgICAvLyBjdXJyZW50bHkgYXNzb2Np
YXRlZCB3aXRoIGEgY2FjaGUgaW4gdGhpcyBncm91cC4KLSAgICAgICAgICAgICAgICBwb3N0TGlz
dGVuZXJUYXNrKCZET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsRXJyb3JMaXN0ZW5lciwgbV9hc3Nv
Y2lhdGVkRG9jdW1lbnRMb2FkZXJzKTsKKyAgICAgICAgICAgICAgICBwb3N0TGlzdGVuZXJUYXNr
KERPTUFwcGxpY2F0aW9uQ2FjaGU6OkVSUk9SX0VWRU5ULCBtX2Fzc29jaWF0ZWREb2N1bWVudExv
YWRlcnMpOwogICAgICAgICAgICAgICAgIC8vIERpc2Fzc29jaWF0ZSB0aGUgcGVuZGluZyBtYXN0
ZXIgZW50cmllcyBmcm9tIHRoZSBmYWlsZWQgbmV3IGNhY2hlLiBOb3RlIHRoYXQKICAgICAgICAg
ICAgICAgICAvLyBhbGwgb3RoZXIgbG9hZGVycyBpbiB0aGUgbV9hc3NvY2lhdGVkRG9jdW1lbnRM
b2FkZXJzIGFyZSBzdGlsbCBhc3NvY2lhdGVkIHdpdGgKICAgICAgICAgICAgICAgICAvLyBzb21l
IG90aGVyIGNhY2hlIGluIHRoaXMgZ3JvdXAuIFRoZXkgYXJlIG5vdCBhc3NvY2lhdGVkIHdpdGgg
dGhlIGZhaWxlZCBuZXcgY2FjaGUuCkBAIC04NDYsNyArODQ3LDcgQEAgdm9pZCBBcHBsaWNhdGlv
bkNhY2hlR3JvdXA6OnN0YXJ0TG9hZGluZwogICAgIAogICAgIEVudHJ5TWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fcGVuZGluZ0VudHJpZXMuYmVnaW4oKTsKIAotICAgIHBvc3RMaXN0ZW5lclRh
c2soJkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxQcm9ncmVzc0xpc3RlbmVyLCBtX2Fzc29jaWF0
ZWREb2N1bWVudExvYWRlcnMpOworICAgIHBvc3RMaXN0ZW5lclRhc2soRE9NQXBwbGljYXRpb25D
YWNoZTo6UFJPR1JFU1NfRVZFTlQsIG1fYXNzb2NpYXRlZERvY3VtZW50TG9hZGVycyk7CiAKICAg
ICBBU1NFUlQoIW1fY3VycmVudEhhbmRsZSk7CiAgICAgCkBAIC05MTAsNyArOTExLDcgQEAgdm9p
ZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmFzc29jaWF0ZURvYwogCiAgICAgQVNTRVJUKCFtX2lz
T2Jzb2xldGUpOwogCi0gICAgbG9hZGVyLT5zZXRBcHBsaWNhdGlvbkNhY2hlKGNhY2hlKTsKKyAg
ICBsb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPnNldEFwcGxpY2F0aW9uQ2FjaGUoY2Fj
aGUpOwogCiAgICAgQVNTRVJUKCFtX2Fzc29jaWF0ZWREb2N1bWVudExvYWRlcnMuY29udGFpbnMo
bG9hZGVyKSk7CiAgICAgbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzLmFkZChsb2FkZXIpOwpA
QCAtOTQ0LDM5ICs5NDUsNDQgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OnNjaGVkdWxl
UmVhYwogfQogCiBjbGFzcyBDYWxsQ2FjaGVMaXN0ZW5lclRhc2sgOiBwdWJsaWMgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6VGFzayB7Ci0gICAgdHlwZWRlZiB2b2lkIChET01BcHBsaWNhdGlvbkNh
Y2hlOjoqTGlzdGVuZXJGdW5jdGlvbikoKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxDYWxsQ2FjaGVMaXN0ZW5lclRhc2s+IGNyZWF0ZShMaXN0ZW5lckZ1bmN0aW9uIGxpc3RlbmVy
RnVuY3Rpb24pCisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FsbENhY2hlTGlzdGVuZXJUYXNrPiBj
cmVhdGUoUGFzc1JlZlB0cjxEb2N1bWVudExvYWRlcj4gbG9hZGVyLCBET01BcHBsaWNhdGlvbkNh
Y2hlOjpFdmVudFR5cGUgZXZlbnRUeXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBDYWxsQ2FjaGVMaXN0ZW5lclRhc2sobGlzdGVuZXJGdW5jdGlvbikpOworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IENhbGxDYWNoZUxpc3RlbmVyVGFzayhsb2FkZXIsIGV2ZW50VHlw
ZSkpOwogICAgIH0KIAogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0KQogICAgIHsKLSAgICAgICAgQVNTRVJUKGNvbnRleHQtPmlzRG9j
dW1lbnQoKSk7Ci0gICAgICAgIGlmIChET01XaW5kb3cqIHdpbmRvdyA9IHN0YXRpY19jYXN0PERv
Y3VtZW50Kj4oY29udGV4dCktPmRvbVdpbmRvdygpKSB7Ci0gICAgICAgICAgICBpZiAoRE9NQXBw
bGljYXRpb25DYWNoZSogZG9tQ2FjaGUgPSB3aW5kb3ctPm9wdGlvbmFsQXBwbGljYXRpb25DYWNo
ZSgpKQotICAgICAgICAgICAgICAgIChkb21DYWNoZS0+Km1fbGlzdGVuZXJGdW5jdGlvbikoKTsK
LSAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCBjb250
ZXh0LT5pc0RvY3VtZW50KCkpOworICAgICAgICBGcmFtZSogZnJhbWUgPSBtX2RvY3VtZW50TG9h
ZGVyLT5mcmFtZSgpOworICAgICAgICBpZiAoIWZyYW1lKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgICAgICBBU1NFUlQoZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpID09
IG1fZG9jdW1lbnRMb2FkZXIuZ2V0KCkpOworCisgICAgICAgIG1fZG9jdW1lbnRMb2FkZXItPmFw
cGxpY2F0aW9uQ2FjaGVIb3N0KCktPm5vdGlmeUV2ZW50TGlzdGVuZXIobV9ldmVudFR5cGUpOwog
ICAgIH0KIAogcHJpdmF0ZToKLSAgICBDYWxsQ2FjaGVMaXN0ZW5lclRhc2soTGlzdGVuZXJGdW5j
dGlvbiBsaXN0ZW5lckZ1bmN0aW9uKQotICAgICAgICA6IG1fbGlzdGVuZXJGdW5jdGlvbihsaXN0
ZW5lckZ1bmN0aW9uKQorICAgIENhbGxDYWNoZUxpc3RlbmVyVGFzayhQYXNzUmVmUHRyPERvY3Vt
ZW50TG9hZGVyPiBsb2FkZXIsIERPTUFwcGxpY2F0aW9uQ2FjaGU6OkV2ZW50VHlwZSBldmVudFR5
cGUpCisgICAgICAgIDogbV9kb2N1bWVudExvYWRlcihsb2FkZXIpCisgICAgICAgICwgbV9ldmVu
dFR5cGUoZXZlbnRUeXBlKQogICAgIHsKICAgICB9CiAKLSAgICBMaXN0ZW5lckZ1bmN0aW9uIG1f
bGlzdGVuZXJGdW5jdGlvbjsKKyAgICBSZWZQdHI8RG9jdW1lbnRMb2FkZXI+IG1fZG9jdW1lbnRM
b2FkZXI7CisgICAgRE9NQXBwbGljYXRpb25DYWNoZTo6RXZlbnRUeXBlIG1fZXZlbnRUeXBlOwog
fTsKIAotdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OnBvc3RMaXN0ZW5lclRhc2soTGlzdGVu
ZXJGdW5jdGlvbiBsaXN0ZW5lckZ1bmN0aW9uLCBjb25zdCBIYXNoU2V0PERvY3VtZW50TG9hZGVy
Kj4mIGxvYWRlclNldCkKK3ZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpwb3N0TGlzdGVuZXJU
YXNrKERPTUFwcGxpY2F0aW9uQ2FjaGU6OkV2ZW50VHlwZSBldmVudFR5cGUsIGNvbnN0IEhhc2hT
ZXQ8RG9jdW1lbnRMb2FkZXIqPiYgbG9hZGVyU2V0KQogewogICAgIEhhc2hTZXQ8RG9jdW1lbnRM
b2FkZXIqPjo6Y29uc3RfaXRlcmF0b3IgbG9hZGVyU2V0RW5kID0gbG9hZGVyU2V0LmVuZCgpOwog
ICAgIGZvciAoSGFzaFNldDxEb2N1bWVudExvYWRlcio+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0g
bG9hZGVyU2V0LmJlZ2luKCk7IGl0ZXIgIT0gbG9hZGVyU2V0RW5kOyArK2l0ZXIpCi0gICAgICAg
IHBvc3RMaXN0ZW5lclRhc2sobGlzdGVuZXJGdW5jdGlvbiwgKml0ZXIpOworICAgICAgICBwb3N0
TGlzdGVuZXJUYXNrKGV2ZW50VHlwZSwgKml0ZXIpOwogfQogCi12b2lkIEFwcGxpY2F0aW9uQ2Fj
aGVHcm91cDo6cG9zdExpc3RlbmVyVGFzayhMaXN0ZW5lckZ1bmN0aW9uIGxpc3RlbmVyRnVuY3Rp
b24sIERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCit2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6
cG9zdExpc3RlbmVyVGFzayhET01BcHBsaWNhdGlvbkNhY2hlOjpFdmVudFR5cGUgZXZlbnRUeXBl
LCBEb2N1bWVudExvYWRlciogbG9hZGVyKQogewogICAgIEZyYW1lKiBmcmFtZSA9IGxvYWRlci0+
ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQpAQCAtOTg0LDcgKzk5MCw3IEBAIHZvaWQgQXBwbGlj
YXRpb25DYWNoZUdyb3VwOjpwb3N0TGlzdGVuZXIKICAgICAKICAgICBBU1NFUlQoZnJhbWUtPmxv
YWRlcigpLT5kb2N1bWVudExvYWRlcigpID09IGxvYWRlcik7CiAKLSAgICBmcmFtZS0+ZG9jdW1l
bnQoKS0+cG9zdFRhc2soQ2FsbENhY2hlTGlzdGVuZXJUYXNrOjpjcmVhdGUobGlzdGVuZXJGdW5j
dGlvbikpOworICAgIGZyYW1lLT5kb2N1bWVudCgpLT5wb3N0VGFzayhDYWxsQ2FjaGVMaXN0ZW5l
clRhc2s6OmNyZWF0ZShsb2FkZXIsIGV2ZW50VHlwZSkpOwogfQogCiB2b2lkIEFwcGxpY2F0aW9u
Q2FjaGVHcm91cDo6Y2xlYXJTdG9yYWdlSUQoKQpJbmRleDogV2ViQ29yZS9sb2FkZXIvYXBwY2Fj
aGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIv
YXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmgJKHJldmlzaW9uIDQ2NTY4KQorKysgV2Vi
Q29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUg
PHd0Zi9IYXNoU2V0Lmg+CiAKKyNpbmNsdWRlICJET01BcHBsaWNhdGlvbkNhY2hlLmgiCiAjaW5j
bHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiUmVz
b3VyY2VIYW5kbGUuaCIKQEAgLTQyLDcgKzQzLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBBcHBsaWNhdGlvbkNhY2hlOwogY2xhc3MgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOwot
Y2xhc3MgRE9NQXBwbGljYXRpb25DYWNoZTsKIGNsYXNzIERvY3VtZW50OwogY2xhc3MgRG9jdW1l
bnRMb2FkZXI7CiBjbGFzcyBGcmFtZTsKQEAgLTkyLDkgKzkyLDggQEAgcHVibGljOgogCiBwcml2
YXRlOgogICAgIHR5cGVkZWYgdm9pZCAoRE9NQXBwbGljYXRpb25DYWNoZTo6Kkxpc3RlbmVyRnVu
Y3Rpb24pKCk7Ci0gICAgc3RhdGljIHZvaWQgcG9zdExpc3RlbmVyVGFzayhMaXN0ZW5lckZ1bmN0
aW9uLCBjb25zdCBIYXNoU2V0PERvY3VtZW50TG9hZGVyKj4mKTsKLSAgICBzdGF0aWMgdm9pZCBw
b3N0TGlzdGVuZXJUYXNrKExpc3RlbmVyRnVuY3Rpb24sIGNvbnN0IFZlY3RvcjxSZWZQdHI8RG9j
dW1lbnRMb2FkZXI+ID4mIGxvYWRlcnMpOwotICAgIHN0YXRpYyB2b2lkIHBvc3RMaXN0ZW5lclRh
c2soTGlzdGVuZXJGdW5jdGlvbiwgRG9jdW1lbnRMb2FkZXIqKTsKKyAgICBzdGF0aWMgdm9pZCBw
b3N0TGlzdGVuZXJUYXNrKERPTUFwcGxpY2F0aW9uQ2FjaGU6OkV2ZW50VHlwZSwgY29uc3QgSGFz
aFNldDxEb2N1bWVudExvYWRlcio+Jik7CisgICAgc3RhdGljIHZvaWQgcG9zdExpc3RlbmVyVGFz
ayhET01BcHBsaWNhdGlvbkNhY2hlOjpFdmVudFR5cGUsIERvY3VtZW50TG9hZGVyKik7CiAgICAg
dm9pZCBzY2hlZHVsZVJlYWNoZWRNYXhBcHBDYWNoZVNpemVDYWxsYmFjaygpOwogCiAgICAgUGFz
c1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gY3JlYXRlUmVzb3VyY2VIYW5kbGUoY29uc3QgS1VSTCYs
IEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogbmV3ZXN0Q2FjaGVkUmVzb3VyY2UpOwpJbmRleDog
V2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVI
b3N0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVIb3N0LmgiCisKKyNpZiBFTkFCTEUoT0ZGTElORV9X
RUJfQVBQTElDQVRJT05TKQorCisjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZS5oIgorI2luY2x1
ZGUgIkFwcGxpY2F0aW9uQ2FjaGVHcm91cC5oIgorI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZS5oIgorI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRE9NQXBw
bGljYXRpb25DYWNoZS5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2Fk
ZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgIk1haW5SZXNv
dXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiUmVz
b3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitBcHBsaWNhdGlvbkNhY2hlSG9zdDo6QXBwbGljYXRpb25DYWNoZUhvc3QoRG9jdW1l
bnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyKQorICAgIDogbV9ET01BcHBsaWNhdGlvbkNhY2hlKDAp
CisgICAgLCBtX2RvY3VtZW50TG9hZGVyKGRvY3VtZW50TG9hZGVyKQorICAgICwgbV9jYW5kaWRh
dGVBcHBsaWNhdGlvbkNhY2hlR3JvdXAoMCkKK3sKKyAgICBBU1NFUlQobV9kb2N1bWVudExvYWRl
cik7Cit9CisKK0FwcGxpY2F0aW9uQ2FjaGVIb3N0Ojp+QXBwbGljYXRpb25DYWNoZUhvc3QoKQor
eworICAgIGlmIChtX2FwcGxpY2F0aW9uQ2FjaGUpCisgICAgICAgIG1fYXBwbGljYXRpb25DYWNo
ZS0+Z3JvdXAoKS0+ZGlzYXNzb2NpYXRlRG9jdW1lbnRMb2FkZXIobV9kb2N1bWVudExvYWRlcik7
CisgICAgZWxzZSBpZiAobV9jYW5kaWRhdGVBcHBsaWNhdGlvbkNhY2hlR3JvdXApCisgICAgICAg
IG1fY2FuZGlkYXRlQXBwbGljYXRpb25DYWNoZUdyb3VwLT5kaXNhc3NvY2lhdGVEb2N1bWVudExv
YWRlcihtX2RvY3VtZW50TG9hZGVyKTsKK30KKwordm9pZCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6
c2VsZWN0Q2FjaGVXaXRob3V0TWFuaWZlc3QoKQoreworICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91
cDo6c2VsZWN0Q2FjaGVXaXRob3V0TWFuaWZlc3RVUkwobV9kb2N1bWVudExvYWRlci0+ZnJhbWUo
KSk7Cit9CisKK3ZvaWQgQXBwbGljYXRpb25DYWNoZUhvc3Q6OnNlbGVjdENhY2hlV2l0aE1hbmlm
ZXN0KGNvbnN0IEtVUkwmIG1hbmlmZXN0VVJMKQoreworICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91
cDo6c2VsZWN0Q2FjaGUobV9kb2N1bWVudExvYWRlci0+ZnJhbWUoKSwgbWFuaWZlc3RVUkwpOwor
fQorCit2b2lkIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjptYXliZUxvYWRNYWluUmVzb3VyY2UoUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdWJzdGl0dXRlRGF0YSYgc3Vic3RpdHV0ZURhdGEpCit7
CisgICAgLy8gQ2hlY2sgaWYgdGhpcyByZXF1ZXN0IHNob3VsZCBiZSBsb2FkZWQgZnJvbSB0aGUg
YXBwbGljYXRpb24gY2FjaGUKKyAgICBpZiAoIXN1YnN0aXR1dGVEYXRhLmlzVmFsaWQoKSAmJiBp
c0FwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKCkpIHsKKyAgICAgICAgQVNTRVJUKCFtX21haW5SZXNv
dXJjZUFwcGxpY2F0aW9uQ2FjaGUpOworCisgICAgICAgIG1fbWFpblJlc291cmNlQXBwbGljYXRp
b25DYWNoZSA9IEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6Y2FjaGVGb3JNYWluUmVxdWVzdChyZXF1
ZXN0LCBtX2RvY3VtZW50TG9hZGVyKTsKKworICAgICAgICBpZiAobV9tYWluUmVzb3VyY2VBcHBs
aWNhdGlvbkNhY2hlKSB7CisgICAgICAgICAgICAvLyBHZXQgdGhlIHJlc291cmNlIGZyb20gdGhl
IGFwcGxpY2F0aW9uIGNhY2hlLiBCeSBkZWZpbml0aW9uLCBjYWNoZUZvck1haW5SZXF1ZXN0KCkg
cmV0dXJucyBhIGNhY2hlIHRoYXQgY29udGFpbnMgdGhlIHJlc291cmNlLgorICAgICAgICAgICAg
QXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSA9IG1fbWFpblJlc291cmNlQXBwbGlj
YXRpb25DYWNoZS0+cmVzb3VyY2VGb3JSZXF1ZXN0KHJlcXVlc3QpOworICAgICAgICAgICAgc3Vi
c3RpdHV0ZURhdGEgPSBTdWJzdGl0dXRlRGF0YShyZXNvdXJjZS0+ZGF0YSgpLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UtPnJlc3BvbnNlKCku
bWltZVR5cGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVzb3VyY2UtPnJlc3BvbnNlKCkudGV4dEVuY29kaW5nTmFtZSgpLCBLVVJMKCkpOworICAgICAg
ICB9CisgICAgfQorfQorCitib29sIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjptYXliZUxvYWRGYWxs
YmFja0Zvck1haW5SZXNwb25zZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHIpCit7CisgICAgaWYgKHIuaHR0cFN0YXR1c0NvZGUoKSAvIDEw
MCA9PSA0IHx8IHIuaHR0cFN0YXR1c0NvZGUoKSAvIDEwMCA9PSA1KSB7CisgICAgICAgIEFTU0VS
VCghbV9tYWluUmVzb3VyY2VBcHBsaWNhdGlvbkNhY2hlKTsKKyAgICAgICAgaWYgKGlzQXBwbGlj
YXRpb25DYWNoZUVuYWJsZWQoKSkgeworICAgICAgICAgICAgbV9tYWluUmVzb3VyY2VBcHBsaWNh
dGlvbkNhY2hlID0gQXBwbGljYXRpb25DYWNoZUdyb3VwOjpmYWxsYmFja0NhY2hlRm9yTWFpblJl
cXVlc3QocmVxdWVzdCwgZG9jdW1lbnRMb2FkZXIoKSk7CisKKyAgICAgICAgICAgIGlmIChzY2hl
ZHVsZUxvYWRGYWxsYmFja1Jlc291cmNlRnJvbUFwcGxpY2F0aW9uQ2FjaGUoZG9jdW1lbnRMb2Fk
ZXIoKS0+bWFpblJlc291cmNlTG9hZGVyKCksIG1fbWFpblJlc291cmNlQXBwbGljYXRpb25DYWNo
ZS5nZXQoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjptYXli
ZUxvYWRGYWxsYmFja0Zvck1haW5FcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQoreworICAgIGlmICghZXJyb3IuaXNDYW5jZWxs
YXRpb24oKSkgeworICAgICAgICBBU1NFUlQoIW1fbWFpblJlc291cmNlQXBwbGljYXRpb25DYWNo
ZSk7CisgICAgICAgIGlmIChpc0FwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKCkpIHsKKyAgICAgICAg
ICAgIG1fbWFpblJlc291cmNlQXBwbGljYXRpb25DYWNoZSA9IEFwcGxpY2F0aW9uQ2FjaGVHcm91
cDo6ZmFsbGJhY2tDYWNoZUZvck1haW5SZXF1ZXN0KHJlcXVlc3QsIG1fZG9jdW1lbnRMb2FkZXIp
OworCisgICAgICAgICAgICBpZiAoc2NoZWR1bGVMb2FkRmFsbGJhY2tSZXNvdXJjZUZyb21BcHBs
aWNhdGlvbkNhY2hlKGRvY3VtZW50TG9hZGVyKCktPm1haW5SZXNvdXJjZUxvYWRlcigpLCBtX21h
aW5SZXNvdXJjZUFwcGxpY2F0aW9uQ2FjaGUuZ2V0KCkpKQorICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBB
cHBsaWNhdGlvbkNhY2hlSG9zdDo6bWFpblJlc291cmNlRGF0YVJlY2VpdmVkKGNvbnN0IGNoYXIq
LCBpbnQsIGxvbmcgbG9uZywgYm9vbCkKK3sKKyAgICAvLyBUaGlzIG1ldGhvZCBpcyBoZXJlIHRv
IGZhY2lsaXRhdGUgYWx0ZXJuYXRlIGltcGxlbWV0YXRpb25zIG9mIHRoaXMgaW50ZXJmYWNlIGJ5
IHRoZSBob3N0IGJyb3dzZXIuCit9CisKK3ZvaWQgQXBwbGljYXRpb25DYWNoZUhvc3Q6OmZhaWxl
ZExvYWRpbmdNYWluUmVzb3VyY2UoKQoreworICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogZ3Jv
dXAgPSBtX2NhbmRpZGF0ZUFwcGxpY2F0aW9uQ2FjaGVHcm91cDsKKyAgICBpZiAoIWdyb3VwICYm
IG1fYXBwbGljYXRpb25DYWNoZSkgeworICAgICAgICBBU1NFUlQoIW1haW5SZXNvdXJjZUFwcGxp
Y2F0aW9uQ2FjaGUoKSk7IC8vIElmIHRoZSBtYWluIHJlc291cmNlIHdlcmUgbG9hZGVkIGZyb20g
YSBjYWNoZSwgaXQgd291bGRuJ3QgZmFpbC4KKyAgICAgICAgZ3JvdXAgPSBtX2FwcGxpY2F0aW9u
Q2FjaGUtPmdyb3VwKCk7CisgICAgfQorICAgIAorICAgIGlmIChncm91cCkKKyAgICAgICAgZ3Jv
dXAtPmZhaWxlZExvYWRpbmdNYWluUmVzb3VyY2UobV9kb2N1bWVudExvYWRlcik7Cit9CisKK3Zv
aWQgQXBwbGljYXRpb25DYWNoZUhvc3Q6OmZpbmlzaGVkTG9hZGluZ01haW5SZXNvdXJjZSgpCit7
CisgICAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBncm91cCA9IGNhbmRpZGF0ZUFwcGxpY2F0aW9u
Q2FjaGVHcm91cCgpOworICAgIGlmICghZ3JvdXAgJiYgYXBwbGljYXRpb25DYWNoZSgpICYmICFt
YWluUmVzb3VyY2VBcHBsaWNhdGlvbkNhY2hlKCkpCisgICAgICAgIGdyb3VwID0gYXBwbGljYXRp
b25DYWNoZSgpLT5ncm91cCgpOworICAgIAorICAgIGlmIChncm91cCkKKyAgICAgICAgZ3JvdXAt
PmZpbmlzaGVkTG9hZGluZ01haW5SZXNvdXJjZShtX2RvY3VtZW50TG9hZGVyKTsKK30KKworYm9v
bCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6bWF5YmVMb2FkUmVzb3VyY2UoUmVzb3VyY2VMb2FkZXIq
IGxvYWRlciwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBLVVJMJiBvcmlnaW5hbFVS
TCkKK3sKKyAgICBpZiAoIWlzQXBwbGljYXRpb25DYWNoZUVuYWJsZWQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIGlmIChyZXF1ZXN0LnVybCgpICE9IG9yaWdpbmFsVVJMKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJl
c291cmNlOworICAgIGlmICghc2hvdWxkTG9hZFJlc291cmNlRnJvbUFwcGxpY2F0aW9uQ2FjaGUo
cmVxdWVzdCwgcmVzb3VyY2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgbV9k
b2N1bWVudExvYWRlci0+bV9wZW5kaW5nU3Vic3RpdHV0ZVJlc291cmNlcy5zZXQobG9hZGVyLCBy
ZXNvdXJjZSk7CisgICAgbV9kb2N1bWVudExvYWRlci0+ZGVsaXZlclN1YnN0aXR1dGVSZXNvdXJj
ZXNBZnRlckRlbGF5KCk7CisgICAgICAgIAorICAgIHJldHVybiB0cnVlOworfQorCitib29sIEFw
cGxpY2F0aW9uQ2FjaGVIb3N0OjptYXliZUxvYWRGYWxsYmFja0ZvclJlZGlyZWN0KFJlc291cmNl
TG9hZGVyKiByZXNvdXJjZUxvYWRlciwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQoreworICAgIGlmICghcmVkaXJlY3RS
ZXNwb25zZS5pc051bGwoKSAmJiAhcHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFsKHJlcXVlc3Qu
dXJsKCksIHJlZGlyZWN0UmVzcG9uc2UudXJsKCkpKQorICAgICAgICBpZiAoc2NoZWR1bGVMb2Fk
RmFsbGJhY2tSZXNvdXJjZUZyb21BcHBsaWNhdGlvbkNhY2hlKHJlc291cmNlTG9hZGVyKSkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBcHBs
aWNhdGlvbkNhY2hlSG9zdDo6bWF5YmVMb2FkRmFsbGJhY2tGb3JSZXNwb25zZShSZXNvdXJjZUxv
YWRlciogcmVzb3VyY2VMb2FkZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQor
eworICAgIGlmIChyZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpIC8gMTAwID09IDQgfHwgcmVzcG9u
c2UuaHR0cFN0YXR1c0NvZGUoKSAvIDEwMCA9PSA1KQorICAgICAgICBpZiAoc2NoZWR1bGVMb2Fk
RmFsbGJhY2tSZXNvdXJjZUZyb21BcHBsaWNhdGlvbkNhY2hlKHJlc291cmNlTG9hZGVyKSkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBcHBs
aWNhdGlvbkNhY2hlSG9zdDo6bWF5YmVMb2FkRmFsbGJhY2tGb3JFcnJvcihSZXNvdXJjZUxvYWRl
ciogcmVzb3VyY2VMb2FkZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQoreworICAgIGlm
ICghZXJyb3IuaXNDYW5jZWxsYXRpb24oKSkKKyAgICAgICAgaWYgKHNjaGVkdWxlTG9hZEZhbGxi
YWNrUmVzb3VyY2VGcm9tQXBwbGljYXRpb25DYWNoZShyZXNvdXJjZUxvYWRlcikpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQXBwbGljYXRp
b25DYWNoZUhvc3Q6Om1heWJlTG9hZFN5bmNocm9ub3VzbHkoUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZl
Y3RvcjxjaGFyPiYgZGF0YSkKK3sKKyAgICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291
cmNlOworICAgIGlmIChzaG91bGRMb2FkUmVzb3VyY2VGcm9tQXBwbGljYXRpb25DYWNoZShyZXF1
ZXN0LCByZXNvdXJjZSkpIHsKKyAgICAgICAgaWYgKHJlc291cmNlKSB7CisgICAgICAgICAgICBy
ZXNwb25zZSA9IHJlc291cmNlLT5yZXNwb25zZSgpOworICAgICAgICAgICAgZGF0YS5hcHBlbmQo
cmVzb3VyY2UtPmRhdGEoKS0+ZGF0YSgpLCByZXNvdXJjZS0+ZGF0YSgpLT5zaXplKCkpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXJyb3IgPSBkb2N1bWVudExvYWRlcigpLT5mcmFt
ZUxvYWRlcigpLT5jbGllbnQoKS0+Y2Fubm90U2hvd1VSTEVycm9yKHJlcXVlc3QpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgQXBwbGljYXRpb25DYWNoZUhvc3Q6Om1heWJlTG9hZEZhbGxiYWNrU3luY2hyb25vdXNs
eShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlRXJyb3ImIGVycm9yLCBS
ZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQoreworICAgIC8v
IElmIG5vcm1hbCBsb2FkaW5nIHJlc3VsdHMgaW4gYSByZWRpcmVjdCB0byBhIHJlc291cmNlIHdp
dGggYW5vdGhlciBvcmlnaW4gKGluZGljYXRpdmUgb2YgYSBjYXB0aXZlIHBvcnRhbCksIG9yIGEg
NHh4IG9yIDV4eCBzdGF0dXMgY29kZSBvciBlcXVpdmFsZW50LAorICAgIC8vIG9yIGlmIHRoZXJl
IHdlcmUgbmV0d29yayBlcnJvcnMgKGJ1dCBub3QgaWYgdGhlIHVzZXIgY2FuY2VsZWQgdGhlIGRv
d25sb2FkKSwgdGhlbiBpbnN0ZWFkIGdldCwgZnJvbSB0aGUgY2FjaGUsIHRoZSByZXNvdXJjZSBv
ZiB0aGUgZmFsbGJhY2sgZW50cnkKKyAgICAvLyBjb3JyZXNwb25kaW5nIHRvIHRoZSBtYXRjaGVk
IG5hbWVzcGFjZS4KKyAgICBpZiAoKCFlcnJvci5pc051bGwoKSAmJiAhZXJyb3IuaXNDYW5jZWxs
YXRpb24oKSkKKyAgICAgICAgIHx8IHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgLyAxMDAgPT0g
NCB8fCByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpIC8gMTAwID09IDUKKyAgICAgICAgIHx8ICFw
cm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwocmVxdWVzdC51cmwoKSwgcmVzcG9uc2UudXJsKCkp
KSB7CisgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2U7CisgICAgICAg
IGlmIChnZXRBcHBsaWNhdGlvbkNhY2hlRmFsbGJhY2tSZXNvdXJjZShyZXF1ZXN0LCByZXNvdXJj
ZSkpIHsKKyAgICAgICAgICAgIHJlc3BvbnNlID0gcmVzb3VyY2UtPnJlc3BvbnNlKCk7CisgICAg
ICAgICAgICBkYXRhLmNsZWFyKCk7CisgICAgICAgICAgICBkYXRhLmFwcGVuZChyZXNvdXJjZS0+
ZGF0YSgpLT5kYXRhKCksIHJlc291cmNlLT5kYXRhKCktPnNpemUoKSk7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK2Jvb2wgQXBwbGljYXRpb25DYWNoZUhvc3Q6OmNhbkNhY2hlSW5QYWdlQ2FjaGUo
KSBjb25zdCAKK3sKKyAgICByZXR1cm4gIWFwcGxpY2F0aW9uQ2FjaGUoKSAmJiAhY2FuZGlkYXRl
QXBwbGljYXRpb25DYWNoZUdyb3VwKCk7Cit9CisKK3ZvaWQgQXBwbGljYXRpb25DYWNoZUhvc3Q6
OnNldENhbmRpZGF0ZUFwcGxpY2F0aW9uQ2FjaGVHcm91cChBcHBsaWNhdGlvbkNhY2hlR3JvdXAq
IGdyb3VwKQoreworICAgIEFTU0VSVCghbV9hcHBsaWNhdGlvbkNhY2hlKTsKKyAgICBtX2NhbmRp
ZGF0ZUFwcGxpY2F0aW9uQ2FjaGVHcm91cCA9IGdyb3VwOworfQorICAgIAordm9pZCBBcHBsaWNh
dGlvbkNhY2hlSG9zdDo6c2V0QXBwbGljYXRpb25DYWNoZShQYXNzUmVmUHRyPEFwcGxpY2F0aW9u
Q2FjaGU+IGFwcGxpY2F0aW9uQ2FjaGUpCit7CisgICAgaWYgKG1fY2FuZGlkYXRlQXBwbGljYXRp
b25DYWNoZUdyb3VwKSB7CisgICAgICAgIEFTU0VSVCghbV9hcHBsaWNhdGlvbkNhY2hlKTsKKyAg
ICAgICAgbV9jYW5kaWRhdGVBcHBsaWNhdGlvbkNhY2hlR3JvdXAgPSAwOworICAgIH0KKworICAg
IG1fYXBwbGljYXRpb25DYWNoZSA9IGFwcGxpY2F0aW9uQ2FjaGU7Cit9CisKK2Jvb2wgQXBwbGlj
YXRpb25DYWNoZUhvc3Q6OnNob3VsZExvYWRSZXNvdXJjZUZyb21BcHBsaWNhdGlvbkNhY2hlKGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiYg
cmVzb3VyY2UpCit7CisgICAgQXBwbGljYXRpb25DYWNoZSogY2FjaGUgPSBhcHBsaWNhdGlvbkNh
Y2hlKCk7CisgICAgaWYgKCFjYWNoZSB8fCAhY2FjaGUtPmlzQ29tcGxldGUoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgLy8gSWYgdGhlIHJlc291cmNlIGlzIG5vdCBhIEhUVFAvSFRU
UFMgR0VULCB0aGVuIGFib3J0CisgICAgaWYgKCFBcHBsaWNhdGlvbkNhY2hlOjpyZXF1ZXN0SXNI
VFRQT3JIVFRQU0dldChyZXF1ZXN0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8g
SWYgdGhlIHJlc291cmNlJ3MgVVJMIGlzIGFuIG1hc3RlciBlbnRyeSwgdGhlIG1hbmlmZXN0LCBh
biBleHBsaWNpdCBlbnRyeSwgb3IgYSBmYWxsYmFjayBlbnRyeQorICAgIC8vIGluIHRoZSBhcHBs
aWNhdGlvbiBjYWNoZSwgdGhlbiBnZXQgdGhlIHJlc291cmNlIGZyb20gdGhlIGNhY2hlIChpbnN0
ZWFkIG9mIGZldGNoaW5nIGl0KS4KKyAgICByZXNvdXJjZSA9IGNhY2hlLT5yZXNvdXJjZUZvclVS
TChyZXF1ZXN0LnVybCgpKTsKKworICAgIC8vIFJlc291cmNlcyB0aGF0IG1hdGNoIGZhbGxiYWNr
IG5hbWVzcGFjZXMgb3Igb25saW5lIHdoaXRlbGlzdCBlbnRyaWVzIGFyZSBmZXRjaGVkIGZyb20g
dGhlIG5ldHdvcmssCisgICAgLy8gdW5sZXNzIHRoZXkgYXJlIGFsc28gY2FjaGVkLgorICAgIGlm
ICghcmVzb3VyY2UgJiYgKGNhY2hlLT51cmxNYXRjaGVzRmFsbGJhY2tOYW1lc3BhY2UocmVxdWVz
dC51cmwoKSkgfHwgY2FjaGUtPmlzVVJMSW5PbmxpbmVXaGl0ZWxpc3QocmVxdWVzdC51cmwoKSkp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBSZXNvdXJjZXMgdGhhdCBhcmUgbm90
IHByZXNlbnQgaW4gdGhlIG1hbmlmZXN0IHdpbGwgYWx3YXlzIGZhaWwgdG8gbG9hZCAoYXQgbGVh
c3QsIGFmdGVyIHRoZQorICAgIC8vIGNhY2hlIGhhcyBiZWVuIHByaW1lZCB0aGUgZmlyc3QgdGlt
ZSksIG1ha2luZyB0aGUgdGVzdGluZyBvZiBvZmZsaW5lIGFwcGxpY2F0aW9ucyBzaW1wbGVyLgor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpnZXRBcHBs
aWNhdGlvbkNhY2hlRmFsbGJhY2tSZXNvdXJjZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QsIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSomIHJlc291cmNlLCBBcHBsaWNhdGlvbkNhY2hl
KiBjYWNoZSkKK3sKKyAgICBpZiAoIWNhY2hlKSB7CisgICAgICAgIGNhY2hlID0gYXBwbGljYXRp
b25DYWNoZSgpOworICAgICAgICBpZiAoIWNhY2hlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICBpZiAoIWNhY2hlLT5pc0NvbXBsZXRlKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICAvLyBJZiB0aGUgcmVzb3VyY2UgaXMgbm90IGEgSFRUUC9IVFRQUyBH
RVQsIHRoZW4gYWJvcnQKKyAgICBpZiAoIUFwcGxpY2F0aW9uQ2FjaGU6OnJlcXVlc3RJc0hUVFBP
ckhUVFBTR2V0KHJlcXVlc3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBLVVJMIGZh
bGxiYWNrVVJMOworICAgIGlmICghY2FjaGUtPnVybE1hdGNoZXNGYWxsYmFja05hbWVzcGFjZShy
ZXF1ZXN0LnVybCgpLCAmZmFsbGJhY2tVUkwpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICByZXNvdXJjZSA9IGNhY2hlLT5yZXNvdXJjZUZvclVSTChmYWxsYmFja1VSTCk7CisgICAgQVNT
RVJUKHJlc291cmNlKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEFwcGxpY2F0aW9u
Q2FjaGVIb3N0OjpzY2hlZHVsZUxvYWRGYWxsYmFja1Jlc291cmNlRnJvbUFwcGxpY2F0aW9uQ2Fj
aGUoUmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgQXBwbGljYXRpb25DYWNoZSogY2FjaGUpCit7Cisg
ICAgaWYgKCFpc0FwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2U7CisgICAgaWYgKCFn
ZXRBcHBsaWNhdGlvbkNhY2hlRmFsbGJhY2tSZXNvdXJjZShsb2FkZXItPnJlcXVlc3QoKSwgcmVz
b3VyY2UsIGNhY2hlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9kb2N1bWVudExv
YWRlci0+bV9wZW5kaW5nU3Vic3RpdHV0ZVJlc291cmNlcy5zZXQobG9hZGVyLCByZXNvdXJjZSk7
CisgICAgbV9kb2N1bWVudExvYWRlci0+ZGVsaXZlclN1YnN0aXR1dGVSZXNvdXJjZXNBZnRlckRl
bGF5KCk7CisgICAgCisgICAgbG9hZGVyLT5oYW5kbGUoKS0+Y2FuY2VsKCk7CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworRE9NQXBwbGljYXRpb25DYWNoZTo6U3RhdHVzIEFwcGxpY2F0aW9uQ2Fj
aGVIb3N0OjpzdGF0dXMoKSBjb25zdAoreworICAgIEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlID0g
YXBwbGljYXRpb25DYWNoZSgpOyAgICAKKyAgICBpZiAoIWNhY2hlKQorICAgICAgICByZXR1cm4g
RE9NQXBwbGljYXRpb25DYWNoZTo6VU5DQUNIRUQ7CisKKyAgICBzd2l0Y2ggKGNhY2hlLT5ncm91
cCgpLT51cGRhdGVTdGF0dXMoKSkgeworICAgICAgICBjYXNlIEFwcGxpY2F0aW9uQ2FjaGVHcm91
cDo6Q2hlY2tpbmc6CisgICAgICAgICAgICByZXR1cm4gRE9NQXBwbGljYXRpb25DYWNoZTo6Q0hF
Q0tJTkc7CisgICAgICAgIGNhc2UgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpEb3dubG9hZGluZzoK
KyAgICAgICAgICAgIHJldHVybiBET01BcHBsaWNhdGlvbkNhY2hlOjpET1dOTE9BRElORzsKKyAg
ICAgICAgY2FzZSBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OklkbGU6IHsKKyAgICAgICAgICAgIGlm
IChjYWNoZS0+Z3JvdXAoKS0+aXNPYnNvbGV0ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBE
T01BcHBsaWNhdGlvbkNhY2hlOjpPQlNPTEVURTsKKyAgICAgICAgICAgIGlmIChjYWNoZSAhPSBj
YWNoZS0+Z3JvdXAoKS0+bmV3ZXN0Q2FjaGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gRE9N
QXBwbGljYXRpb25DYWNoZTo6VVBEQVRFUkVBRFk7CisgICAgICAgICAgICByZXR1cm4gRE9NQXBw
bGljYXRpb25DYWNoZTo6SURMRTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiBET01BcHBsaWNhdGlvbkNhY2hlOjpVTkNBQ0hFRDsKK30K
KworYm9vbCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6dXBkYXRlKCkKK3sKKyAgICBBcHBsaWNhdGlv
bkNhY2hlKiBjYWNoZSA9IGFwcGxpY2F0aW9uQ2FjaGUoKTsKKyAgICBpZiAoIWNhY2hlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FjaGUtPmdyb3VwKCktPnVwZGF0ZShtX2RvY3VtZW50
TG9hZGVyLT5mcmFtZSgpLCBBcHBsaWNhdGlvbkNhY2hlVXBkYXRlV2l0aG91dEJyb3dzaW5nQ29u
dGV4dCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQXBwbGljYXRpb25DYWNoZUhvc3Q6
OnN3YXBDYWNoZSgpCit7CisgICAgQXBwbGljYXRpb25DYWNoZSogY2FjaGUgPSBhcHBsaWNhdGlv
bkNhY2hlKCk7CisgICAgaWYgKCFjYWNoZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Ly8gSWYgdGhlIGdyb3VwIG9mIGFwcGxpY2F0aW9uIGNhY2hlcyB0byB3aGljaCBjYWNoZSBiZWxv
bmdzIGhhcyB0aGUgbGlmZWN5Y2xlIHN0YXR1cyBvYnNvbGV0ZSwgdW5hc3NvY2lhdGUgZG9jdW1l
bnQgZnJvbSBjYWNoZS4KKyAgICBpZiAoY2FjaGUtPmdyb3VwKCktPmlzT2Jzb2xldGUoKSkgewor
ICAgICAgICBjYWNoZS0+Z3JvdXAoKS0+ZGlzYXNzb2NpYXRlRG9jdW1lbnRMb2FkZXIobV9kb2N1
bWVudExvYWRlcik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIElmIHRo
ZXJlIGlzIG5vIG5ld2VyIGNhY2hlLCByYWlzZSBhbiBJTlZBTElEX1NUQVRFX0VSUiBleGNlcHRp
b24uCisgICAgQXBwbGljYXRpb25DYWNoZSogbmV3ZXN0Q2FjaGUgPSBjYWNoZS0+Z3JvdXAoKS0+
bmV3ZXN0Q2FjaGUoKTsKKyAgICBpZiAoY2FjaGUgPT0gbmV3ZXN0Q2FjaGUpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICBBU1NFUlQoY2FjaGUtPmdyb3VwKCkgPT0gbmV3ZXN0Q2Fj
aGUtPmdyb3VwKCkpOworICAgIHNldEFwcGxpY2F0aW9uQ2FjaGUobmV3ZXN0Q2FjaGUpOworICAg
IAorICAgIHJldHVybiB0cnVlOworfQorCitib29sIEFwcGxpY2F0aW9uQ2FjaGVIb3N0Ojppc0Fw
cGxpY2F0aW9uQ2FjaGVFbmFibGVkKCkKK3sKKyAgICByZXR1cm4gbV9kb2N1bWVudExvYWRlci0+
ZnJhbWUoKS0+c2V0dGluZ3MoKQorICAgICAgICAgICAmJiBtX2RvY3VtZW50TG9hZGVyLT5mcmFt
ZSgpLT5zZXR0aW5ncygpLT5vZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQoKTsKK30K
KworfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmICAvLyBFTkFCTEUoQVBQTElDQVRJ
T05fQ0FDSEUpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9B
cHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZXhlY3V0YWJsZQog
ICArICoKCkluZGV4OiBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlSG9z
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGVIb3N0LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNh
dGlvbkNhY2hlSG9zdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIENv
cHlyaWdodCAoYykgMjAwOSwgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBBcHBsaWNhdGlvbkNhY2hlSG9zdF9oCisjZGVmaW5lIEFwcGxpY2F0aW9uQ2FjaGVIb3N0X2gK
KworI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisKKyNpbmNsdWRlICJET01B
cHBsaWNhdGlvbkNhY2hlLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
ICAgIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGU7CisgICAgY2xhc3MgQXBwbGljYXRpb25DYWNoZUdy
b3VwOworICAgIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTsKKyAgICBjbGFzcyBBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZTsKKyAgICBjbGFzcyBEb2N1bWVudExvYWRlcjsKKyAgICBjbGFz
cyBSZXNvdXJjZUxvYWRlcjsKKyAgICBjbGFzcyBSZXNvdXJjZUVycm9yOworICAgIGNsYXNzIFJl
c291cmNlUmVxdWVzdDsKKyAgICBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOworICAgIGNsYXNzIFN1
YnN0aXR1dGVEYXRhOworCisgICAgY2xhc3MgQXBwbGljYXRpb25DYWNoZUhvc3QgeworICAgIHB1
YmxpYzoKKyAgICAgICAgQXBwbGljYXRpb25DYWNoZUhvc3QoRG9jdW1lbnRMb2FkZXIqKTsKKyAg
ICAgICAgfkFwcGxpY2F0aW9uQ2FjaGVIb3N0KCk7CisKKyAgICAgICAgdm9pZCBzZWxlY3RDYWNo
ZVdpdGhvdXRNYW5pZmVzdCgpOworICAgICAgICB2b2lkIHNlbGVjdENhY2hlV2l0aE1hbmlmZXN0
KGNvbnN0IEtVUkwmIG1hbmlmZXN0VVJMKTsKKworICAgICAgICB2b2lkIG1heWJlTG9hZE1haW5S
ZXNvdXJjZShSZXNvdXJjZVJlcXVlc3QmLCBTdWJzdGl0dXRlRGF0YSYpOworICAgICAgICBib29s
IG1heWJlTG9hZEZhbGxiYWNrRm9yTWFpblJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYs
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICAgICAgYm9vbCBtYXliZUxvYWRGYWxsYmFj
a0Zvck1haW5FcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZUVycm9y
Jik7CisgICAgICAgIHZvaWQgbWFpblJlc291cmNlRGF0YVJlY2VpdmVkKGNvbnN0IGNoYXIqIGRh
dGEsIGludCBsZW5ndGgsIGxvbmcgbG9uZyBsZW5ndGhSZWNlaXZlZCwgYm9vbCBhbGxBdE9uY2Up
OworICAgICAgICB2b2lkIGZpbmlzaGVkTG9hZGluZ01haW5SZXNvdXJjZSgpOworICAgICAgICB2
b2lkIGZhaWxlZExvYWRpbmdNYWluUmVzb3VyY2UoKTsKKworICAgICAgICBib29sIG1heWJlTG9h
ZFJlc291cmNlKFJlc291cmNlTG9hZGVyKiwgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgS1VSTCYg
b3JpZ2luYWxVUkwpOworICAgICAgICBib29sIG1heWJlTG9hZEZhbGxiYWNrRm9yUmVkaXJlY3Qo
UmVzb3VyY2VMb2FkZXIqLCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNl
Jik7CisgICAgICAgIGJvb2wgbWF5YmVMb2FkRmFsbGJhY2tGb3JSZXNwb25zZShSZXNvdXJjZUxv
YWRlciosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICAgICAgYm9vbCBtYXliZUxvYWRG
YWxsYmFja0ZvckVycm9yKFJlc291cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOwor
CisgICAgICAgIGJvb2wgbWF5YmVMb2FkU3luY2hyb25vdXNseShSZXNvdXJjZVJlcXVlc3QmLCBS
ZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYgZGF0YSk7Cisg
ICAgICAgIHZvaWQgbWF5YmVMb2FkRmFsbGJhY2tTeW5jaHJvbm91c2x5KGNvbnN0IFJlc291cmNl
UmVxdWVzdCYsIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+
JiBkYXRhKTsKKworICAgICAgICBib29sIGNhbkNhY2hlSW5QYWdlQ2FjaGUoKSBjb25zdDsKKwor
ICAgICAgICBET01BcHBsaWNhdGlvbkNhY2hlOjpTdGF0dXMgc3RhdHVzKCkgY29uc3Q7ICAKKyAg
ICAgICAgYm9vbCB1cGRhdGUoKTsKKyAgICAgICAgYm9vbCBzd2FwQ2FjaGUoKTsKKworICAgICAg
ICB2b2lkIHNldERPTUFwcGxpY2F0aW9uQ2FjaGUoRE9NQXBwbGljYXRpb25DYWNoZSogZG9tQXBw
bGljYXRpb25DYWNoZSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKCFtX0RPTUFwcGxp
Y2F0aW9uQ2FjaGUgfHwgIWRvbUFwcGxpY2F0aW9uQ2FjaGUpOworICAgICAgICAgICAgbV9ET01B
cHBsaWNhdGlvbkNhY2hlID0gZG9tQXBwbGljYXRpb25DYWNoZTsKKyAgICAgICAgfQorCisgICAg
ICAgIHZvaWQgbm90aWZ5RXZlbnRMaXN0ZW5lcihET01BcHBsaWNhdGlvbkNhY2hlOjpFdmVudFR5
cGUgZXZlbnRUeXBlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9ET01BcHBsaWNhdGlv
bkNhY2hlKQorICAgICAgICAgICAgICAgIG1fRE9NQXBwbGljYXRpb25DYWNoZS0+Y2FsbEV2ZW50
TGlzdGVuZXIoZXZlbnRUeXBlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBwcml2YXRlOgor
ICAgICAgICBmcmllbmQgY2xhc3MgQXBwbGljYXRpb25DYWNoZUdyb3VwOworICAgICAgICBmcmll
bmQgY2xhc3MgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U7CisKKyAgICAgICAgYm9vbCBzY2hlZHVs
ZUxvYWRGYWxsYmFja1Jlc291cmNlRnJvbUFwcGxpY2F0aW9uQ2FjaGUoUmVzb3VyY2VMb2FkZXIq
LCBBcHBsaWNhdGlvbkNhY2hlKiA9IDApOworICAgICAgICBib29sIHNob3VsZExvYWRSZXNvdXJj
ZUZyb21BcHBsaWNhdGlvbkNhY2hlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIEFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZSomKTsKKyAgICAgICAgYm9vbCBnZXRBcHBsaWNhdGlvbkNhY2hlRmFsbGJh
Y2tSZXNvdXJjZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBBcHBsaWNhdGlvbkNhY2hlUmVzb3Vy
Y2UqJiwgQXBwbGljYXRpb25DYWNoZSogPSAwKTsKKyAgICAgICAgdm9pZCBzZXRDYW5kaWRhdGVB
cHBsaWNhdGlvbkNhY2hlR3JvdXAoQXBwbGljYXRpb25DYWNoZUdyb3VwKiBncm91cCk7CisgICAg
ICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogY2FuZGlkYXRlQXBwbGljYXRpb25DYWNoZUdyb3Vw
KCkgY29uc3QgeyByZXR1cm4gbV9jYW5kaWRhdGVBcHBsaWNhdGlvbkNhY2hlR3JvdXA7IH0KKyAg
ICAgICAgdm9pZCBzZXRBcHBsaWNhdGlvbkNhY2hlKFBhc3NSZWZQdHI8QXBwbGljYXRpb25DYWNo
ZT4gYXBwbGljYXRpb25DYWNoZSk7CisgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGUqIGFwcGxpY2F0
aW9uQ2FjaGUoKSBjb25zdCB7IHJldHVybiBtX2FwcGxpY2F0aW9uQ2FjaGUuZ2V0KCk7IH0KKyAg
ICAgICAgQXBwbGljYXRpb25DYWNoZSogbWFpblJlc291cmNlQXBwbGljYXRpb25DYWNoZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbWFpblJlc291cmNlQXBwbGljYXRpb25DYWNoZS5nZXQoKTsgfQorCisg
ICAgICAgIGJvb2wgaXNBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCgpOworICAgICAgICBEb2N1bWVu
dExvYWRlciogZG9jdW1lbnRMb2FkZXIoKSB7IHJldHVybiBtX2RvY3VtZW50TG9hZGVyOyB9CisK
KyAgICAgICAgRE9NQXBwbGljYXRpb25DYWNoZSogbV9ET01BcHBsaWNhdGlvbkNhY2hlOworICAg
ICAgICBEb2N1bWVudExvYWRlciogbV9kb2N1bWVudExvYWRlcjsKKworICAgICAgICAvLyBUaGUg
YXBwbGljYXRpb24gY2FjaGUgdGhhdCB0aGUgZG9jdW1lbnQgbG9hZGVyIGlzIGFzc29jaWF0ZWQg
d2l0aCAoaWYgYW55KS4KKyAgICAgICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+IG1fYXBwbGlj
YXRpb25DYWNoZTsKKworICAgICAgICAvLyBCZWZvcmUgYW4gYXBwbGljYXRpb24gY2FjaGUgaGFz
IGZpbmlzaGVkIGxvYWRpbmcsIHRoaXMgd2lsbCBiZSB0aGUgY2FuZGlkYXRlIGFwcGxpY2F0aW9u
CisgICAgICAgIC8vIGdyb3VwIHRoYXQgdGhlIGRvY3VtZW50IGxvYWRlciBpcyBhc3NvY2lhdGVk
IHdpdGguCisgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogbV9jYW5kaWRhdGVBcHBsaWNh
dGlvbkNhY2hlR3JvdXA7CisKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgYXBwbGljYXRpb24gY2Fj
aGUgdGhlIG1haW4gcmVzb3VyY2Ugd2FzIGxvYWRlZCBmcm9tIChpZiBhbnkpLgorICAgICAgICBS
ZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gbV9tYWluUmVzb3VyY2VBcHBsaWNhdGlvbkNhY2hlOwor
ICAgIH07CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAgLy8gRU5BQkxFKEFQ
UExJQ0FUSU9OX0NBQ0hFKQorI2VuZGlmICAvLyBBcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmRfaAoK
UHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25D
YWNoZUhvc3QuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6
IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZS5jcHAJKHJldmlzaW9uIDQ2NTY4KQorKysgV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAj
aWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKIAogI2luY2x1ZGUgIkFwcGxpY2F0
aW9uQ2FjaGUuaCIKKyNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlSG9zdC5oIgogI2luY2x1ZGUg
IkFwcGxpY2F0aW9uQ2FjaGVHcm91cC5oIgogI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVSZXNv
dXJjZS5oIgogI2luY2x1ZGUgIkNTdHJpbmcuaCIKQEAgLTkzNyw2ICs5MzgsMTQgQEAgdm9pZCBB
cHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZW1wdHkoKQogICAgICAgICBpdC0+c2Vjb25kLT5jbGVh
clN0b3JhZ2VJRCgpOwogfSAgICAKIAorYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6dHJh
bnNmZXJBcHBsaWNhdGlvbkNhY2hlKGNvbnN0IFN0cmluZyYgY2FjaGVEaXJlY3RvcnksIEFwcGxp
Y2F0aW9uQ2FjaGVIb3N0KiBjYWNoZUhvc3QpCit7CisgICAgQXBwbGljYXRpb25DYWNoZSogY2Fj
aGUgPSBjYWNoZUhvc3QtPmFwcGxpY2F0aW9uQ2FjaGUoKTsKKyAgICBpZiAoIWNhY2hlKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0
b3JlQ29weU9mQ2FjaGUoY2FjaGVEaXJlY3RvcnksIGNhY2hlKTsKK30KKwogYm9vbCBBcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVDb3B5T2ZDYWNoZShjb25zdCBTdHJpbmcmIGNhY2hlRGly
ZWN0b3J5LCBBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSkKIHsKICAgICAvLyBDcmVhdGUgYSBuZXcg
Y2FjaGUuCkluZGV4OiBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlLmgJKHJldmlzaW9uIDQ2NTY4KQorKysgV2ViQ29yZS9sb2FkZXIvYXBwY2Fj
aGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcs
NyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlOworY2xh
c3MgQXBwbGljYXRpb25DYWNoZUhvc3Q7CiBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlR3JvdXA7CiBj
bGFzcyBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U7CiBjbGFzcyBLVVJMOwpAQCAtNjksNiArNzAs
NyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBlbXB0eSgpOwogICAgIAorICAgIHN0YXRpYyBi
b29sIHRyYW5zZmVyQXBwbGljYXRpb25DYWNoZShjb25zdCBTdHJpbmcmIGNhY2hlRGlyZWN0b3J5
LCBBcHBsaWNhdGlvbkNhY2hlSG9zdCopOwogICAgIHN0YXRpYyBib29sIHN0b3JlQ29weU9mQ2Fj
aGUoY29uc3QgU3RyaW5nJiBjYWNoZURpcmVjdG9yeSwgQXBwbGljYXRpb25DYWNoZSopOwogCiAg
ICAgYm9vbCBtYW5pZmVzdFVSTHMoVmVjdG9yPEtVUkw+KiB1cmxzKTsKSW5kZXg6IFdlYkNvcmUv
bG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuY3BwCShyZXZpc2lvbiA0
NjU2OCkKKysrIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoT0ZGTElORV9X
RUJfQVBQTElDQVRJT05TKQogCi0jaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZS5oIgotI2luY2x1
ZGUgIkFwcGxpY2F0aW9uQ2FjaGVHcm91cC5oIgotI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZS5oIgorI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVIb3N0LmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV2ZW50RXhj
ZXB0aW9uLmgiCkBAIC00NCw4MCArNDIsNDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogRE9NQXBw
bGljYXRpb25DYWNoZTo6RE9NQXBwbGljYXRpb25DYWNoZShGcmFtZSogZnJhbWUpCiAgICAgOiBt
X2ZyYW1lKGZyYW1lKQogeworICAgIEFTU0VSVChhcHBsaWNhdGlvbkNhY2hlSG9zdCgpKTsKKyAg
ICBhcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5zZXRET01BcHBsaWNhdGlvbkNhY2hlKHRoaXMpOwog
fQogCiB2b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6OmRpc2Nvbm5lY3RGcmFtZSgpCiB7CisgICAg
QXBwbGljYXRpb25DYWNoZUhvc3QqIGNhY2hlSG9zdCA9IGFwcGxpY2F0aW9uQ2FjaGVIb3N0KCk7
CisgICAgaWYgKGNhY2hlSG9zdCkKKyAgICAgICAgY2FjaGVIb3N0LT5zZXRET01BcHBsaWNhdGlv
bkNhY2hlKDApOwogICAgIG1fZnJhbWUgPSAwOwogfQogCi1BcHBsaWNhdGlvbkNhY2hlKiBET01B
cHBsaWNhdGlvbkNhY2hlOjphc3NvY2lhdGVkQ2FjaGUoKSBjb25zdAorQXBwbGljYXRpb25DYWNo
ZUhvc3QqIERPTUFwcGxpY2F0aW9uQ2FjaGU6OmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCkgY29uc3QK
IHsKLSAgICBpZiAoIW1fZnJhbWUpCisgICAgaWYgKCFtX2ZyYW1lIHx8ICFtX2ZyYW1lLT5sb2Fk
ZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gCi0gICAgcmV0dXJu
IG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5hcHBsaWNhdGlvbkNhY2hlKCk7
CisgICAgcmV0dXJuIG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5hcHBsaWNh
dGlvbkNhY2hlSG9zdCgpOwogfQogCiB1bnNpZ25lZCBzaG9ydCBET01BcHBsaWNhdGlvbkNhY2hl
OjpzdGF0dXMoKSBjb25zdAogewotICAgIEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlID0gYXNzb2Np
YXRlZENhY2hlKCk7ICAgIAotICAgIGlmICghY2FjaGUpCisgICAgQXBwbGljYXRpb25DYWNoZUhv
c3QqIGNhY2hlSG9zdCA9IGFwcGxpY2F0aW9uQ2FjaGVIb3N0KCk7CisgICAgaWYgKCFjYWNoZUhv
c3QpCiAgICAgICAgIHJldHVybiBVTkNBQ0hFRDsKLQotICAgIHN3aXRjaCAoY2FjaGUtPmdyb3Vw
KCktPnVwZGF0ZVN0YXR1cygpKSB7Ci0gICAgICAgIGNhc2UgQXBwbGljYXRpb25DYWNoZUdyb3Vw
OjpDaGVja2luZzoKLSAgICAgICAgICAgIHJldHVybiBDSEVDS0lORzsKLSAgICAgICAgY2FzZSBB
cHBsaWNhdGlvbkNhY2hlR3JvdXA6OkRvd25sb2FkaW5nOgotICAgICAgICAgICAgcmV0dXJuIERP
V05MT0FESU5HOwotICAgICAgICBjYXNlIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6SWRsZTogewot
ICAgICAgICAgICAgaWYgKGNhY2hlLT5ncm91cCgpLT5pc09ic29sZXRlKCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIE9CU09MRVRFOwotICAgICAgICAgICAgaWYgKGNhY2hlICE9IGNhY2hlLT5n
cm91cCgpLT5uZXdlc3RDYWNoZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBVUERBVEVSRUFE
WTsKLSAgICAgICAgICAgIHJldHVybiBJRExFOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNhY2hlSG9zdC0+
c3RhdHVzKCk7CiB9CiAKIHZvaWQgRE9NQXBwbGljYXRpb25DYWNoZTo6dXBkYXRlKEV4Y2VwdGlv
bkNvZGUmIGVjKQogewotICAgIEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlID0gYXNzb2NpYXRlZENh
Y2hlKCk7Ci0gICAgaWYgKCFjYWNoZSkgeworICAgIEFwcGxpY2F0aW9uQ2FjaGVIb3N0KiBjYWNo
ZUhvc3QgPSBhcHBsaWNhdGlvbkNhY2hlSG9zdCgpOworICAgIGlmICghY2FjaGVIb3N0IHx8ICFj
YWNoZUhvc3QtPnVwZGF0ZSgpKQogICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGNhY2hlLT5ncm91cCgpLT51cGRhdGUobV9m
cmFtZSwgQXBwbGljYXRpb25DYWNoZVVwZGF0ZVdpdGhvdXRCcm93c2luZ0NvbnRleHQpOwogfQog
CiBib29sIERPTUFwcGxpY2F0aW9uQ2FjaGU6OnN3YXBDYWNoZSgpCiB7Ci0gICAgaWYgKCFtX2Zy
YW1lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgQXBwbGljYXRpb25DYWNoZSog
Y2FjaGUgPSBtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+YXBwbGljYXRpb25D
YWNoZSgpOwotICAgIGlmICghY2FjaGUpCisgICAgQXBwbGljYXRpb25DYWNoZUhvc3QqIGNhY2hl
SG9zdCA9IGFwcGxpY2F0aW9uQ2FjaGVIb3N0KCk7CisgICAgaWYgKCFjYWNoZUhvc3QpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIElmIHRoZSBncm91cCBvZiBhcHBsaWNhdGlvbiBj
YWNoZXMgdG8gd2hpY2ggY2FjaGUgYmVsb25ncyBoYXMgdGhlIGxpZmVjeWNsZSBzdGF0dXMgb2Jz
b2xldGUsIHVuYXNzb2NpYXRlIGRvY3VtZW50IGZyb20gY2FjaGUuCi0gICAgaWYgKGNhY2hlLT5n
cm91cCgpLT5pc09ic29sZXRlKCkpIHsKLSAgICAgICAgY2FjaGUtPmdyb3VwKCktPmRpc2Fzc29j
aWF0ZURvY3VtZW50TG9hZGVyKG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpKTsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlcmUgaXMgbm8gbmV3
ZXIgY2FjaGUsIHJhaXNlIGFuIElOVkFMSURfU1RBVEVfRVJSIGV4Y2VwdGlvbi4KLSAgICBBcHBs
aWNhdGlvbkNhY2hlKiBuZXdlc3RDYWNoZSA9IGNhY2hlLT5ncm91cCgpLT5uZXdlc3RDYWNoZSgp
OwotICAgIGlmIChjYWNoZSA9PSBuZXdlc3RDYWNoZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIAotICAgIEFTU0VSVChjYWNoZS0+Z3JvdXAoKSA9PSBuZXdlc3RDYWNoZS0+Z3JvdXAoKSk7
Ci0gICAgbV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnNldEFwcGxpY2F0aW9u
Q2FjaGUobmV3ZXN0Q2FjaGUpOwotICAgIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBj
YWNoZUhvc3QtPnN3YXBDYWNoZSgpOwogfQogICAgIAogdm9pZCBET01BcHBsaWNhdGlvbkNhY2hl
Ojpzd2FwQ2FjaGUoRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0xMzEsMTMgKzk1LDEzIEBAIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIERPTUFwcGxpY2F0aW9uQ2EKICAgICByZXR1cm4gbV9mcmFtZS0+
ZG9jdW1lbnQoKTsKIH0KIAotdm9pZCBET01BcHBsaWNhdGlvbkNhY2hlOjphZGRFdmVudExpc3Rl
bmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+IGV2ZW50TGlzdGVuZXIsIGJvb2wpCit2b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6OmFkZEV2
ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudE5hbWUsIFBhc3NSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lciwgYm9vbCkKIHsKLSAgICBFdmVudExpc3RlbmVyc01h
cDo6aXRlcmF0b3IgaXRlciA9IG1fZXZlbnRMaXN0ZW5lcnMuZmluZChldmVudFR5cGUpOworICAg
IEV2ZW50TGlzdGVuZXJzTWFwOjppdGVyYXRvciBpdGVyID0gbV9ldmVudExpc3RlbmVycy5maW5k
KGV2ZW50TmFtZSk7CiAgICAgaWYgKGl0ZXIgPT0gbV9ldmVudExpc3RlbmVycy5lbmQoKSkgewog
ICAgICAgICBMaXN0ZW5lclZlY3RvciBsaXN0ZW5lcnM7CiAgICAgICAgIGxpc3RlbmVycy5hcHBl
bmQoZXZlbnRMaXN0ZW5lcik7Ci0gICAgICAgIG1fZXZlbnRMaXN0ZW5lcnMuYWRkKGV2ZW50VHlw
ZSwgbGlzdGVuZXJzKTsKKyAgICAgICAgbV9ldmVudExpc3RlbmVycy5hZGQoZXZlbnROYW1lLCBs
aXN0ZW5lcnMpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIExpc3RlbmVyVmVjdG9yJiBsaXN0ZW5l
cnMgPSBpdGVyLT5zZWNvbmQ7CiAgICAgICAgIGZvciAoTGlzdGVuZXJWZWN0b3I6Oml0ZXJhdG9y
IGxpc3RlbmVySXRlciA9IGxpc3RlbmVycy5iZWdpbigpOyBsaXN0ZW5lckl0ZXIgIT0gbGlzdGVu
ZXJzLmVuZCgpOyArK2xpc3RlbmVySXRlcikgewpAQCAtMTQ2LDEzICsxMTAsMTMgQEAgdm9pZCBE
T01BcHBsaWNhdGlvbkNhY2hlOjphZGRFdmVudExpc3RlbgogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBsaXN0ZW5lcnMuYXBwZW5kKGV2ZW50TGlzdGVuZXIpOwotICAgICAgICBtX2V2ZW50
TGlzdGVuZXJzLmFkZChldmVudFR5cGUsIGxpc3RlbmVycyk7CisgICAgICAgIG1fZXZlbnRMaXN0
ZW5lcnMuYWRkKGV2ZW50TmFtZSwgbGlzdGVuZXJzKTsKICAgICB9ICAgIAogfQogCi12b2lkIERP
TUFwcGxpY2F0aW9uQ2FjaGU6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5n
JiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqIGV2ZW50TGlzdGVuZXIsIGJvb2wpCit2b2lkIERP
TUFwcGxpY2F0aW9uQ2FjaGU6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5n
JiBldmVudE5hbWUsIEV2ZW50TGlzdGVuZXIqIGV2ZW50TGlzdGVuZXIsIGJvb2wpCiB7Ci0gICAg
RXZlbnRMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2V2ZW50TGlzdGVuZXJzLmZpbmQo
ZXZlbnRUeXBlKTsKKyAgICBFdmVudExpc3RlbmVyc01hcDo6aXRlcmF0b3IgaXRlciA9IG1fZXZl
bnRMaXN0ZW5lcnMuZmluZChldmVudE5hbWUpOwogICAgIGlmIChpdGVyID09IG1fZXZlbnRMaXN0
ZW5lcnMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKQEAgLTE3MSw3ICsxMzUsNyBAQCBi
b29sIERPTUFwcGxpY2F0aW9uQ2FjaGU6OmRpc3BhdGNoRXZlbnQoCiAgICAgICAgIGVjID0gRXZl
bnRFeGNlcHRpb246OlVOU1BFQ0lGSUVEX0VWRU5UX1RZUEVfRVJSOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICBMaXN0ZW5lclZlY3RvciBsaXN0ZW5lcnNDb3B5ID0g
bV9ldmVudExpc3RlbmVycy5nZXQoZXZlbnQtPnR5cGUoKSk7CiAgICAgZm9yIChMaXN0ZW5lclZl
Y3Rvcjo6Y29uc3RfaXRlcmF0b3IgbGlzdGVuZXJJdGVyID0gbGlzdGVuZXJzQ29weS5iZWdpbigp
OyBsaXN0ZW5lckl0ZXIgIT0gbGlzdGVuZXJzQ29weS5lbmQoKTsgKytsaXN0ZW5lckl0ZXIpIHsK
ICAgICAgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKQEAgLTE4MiwxMSArMTQ2LDExIEBAIGJv
b2wgRE9NQXBwbGljYXRpb25DYWNoZTo6ZGlzcGF0Y2hFdmVudCgKICAgICByZXR1cm4gIWV2ZW50
LT5kZWZhdWx0UHJldmVudGVkKCk7CiB9CiAKLXZvaWQgRE9NQXBwbGljYXRpb25DYWNoZTo6Y2Fs
bExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiBs
aXN0ZW5lcikKK3ZvaWQgRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbExpc3RlbmVyKGNvbnN0IEF0
b21pY1N0cmluZyYgZXZlbnROYW1lLCBFdmVudExpc3RlbmVyKiBsaXN0ZW5lcikKIHsKICAgICBB
U1NFUlQobV9mcmFtZSk7CiAgICAgCi0gICAgUmVmUHRyPEV2ZW50PiBldmVudCA9IEV2ZW50Ojpj
cmVhdGUoZXZlbnRUeXBlLCBmYWxzZSwgZmFsc2UpOworICAgIFJlZlB0cjxFdmVudD4gZXZlbnQg
PSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZSwgZmFsc2UsIGZhbHNlKTsKICAgICBpZiAobGlzdGVu
ZXIpIHsKICAgICAgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKICAgICAgICAgZXZlbnQtPnNl
dEN1cnJlbnRUYXJnZXQodGhpcyk7CkBAIC0xOTgsNDUgKzE2Miw1NSBAQCB2b2lkIERPTUFwcGxp
Y2F0aW9uQ2FjaGU6OmNhbGxMaXN0ZW5lcihjCiAgICAgQVNTRVJUKCFlYyk7ICAgIAogfQogCi12
b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxDaGVja2luZ0xpc3RlbmVyKCkKKy8vIHN0YXRp
YworY29uc3QgQXRvbWljU3RyaW5nJiBET01BcHBsaWNhdGlvbkNhY2hlOjp0b0V2ZW50TmFtZShF
dmVudFR5cGUgZXZlbnRUeXBlKQogewotICAgIGNhbGxMaXN0ZW5lcihldmVudE5hbWVzKCkuY2hl
Y2tpbmdFdmVudCwgbV9vbkNoZWNraW5nTGlzdGVuZXIuZ2V0KCkpOwotfQotCi12b2lkIERPTUFw
cGxpY2F0aW9uQ2FjaGU6OmNhbGxFcnJvckxpc3RlbmVyKCkKLXsKLSAgICBjYWxsTGlzdGVuZXIo
ZXZlbnROYW1lcygpLmVycm9yRXZlbnQsIG1fb25FcnJvckxpc3RlbmVyLmdldCgpKTsKLX0KLQot
dm9pZCBET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsTm9VcGRhdGVMaXN0ZW5lcigpCi17Ci0gICAg
Y2FsbExpc3RlbmVyKGV2ZW50TmFtZXMoKS5ub3VwZGF0ZUV2ZW50LCBtX29uTm9VcGRhdGVMaXN0
ZW5lci5nZXQoKSk7Ci19Ci0KLXZvaWQgRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbERvd25sb2Fk
aW5nTGlzdGVuZXIoKQotewotICAgIGNhbGxMaXN0ZW5lcihldmVudE5hbWVzKCkuZG93bmxvYWRp
bmdFdmVudCwgbV9vbkRvd25sb2FkaW5nTGlzdGVuZXIuZ2V0KCkpOwotfQotCi12b2lkIERPTUFw
cGxpY2F0aW9uQ2FjaGU6OmNhbGxQcm9ncmVzc0xpc3RlbmVyKCkKLXsKLSAgICBjYWxsTGlzdGVu
ZXIoZXZlbnROYW1lcygpLnByb2dyZXNzRXZlbnQsIG1fb25Qcm9ncmVzc0xpc3RlbmVyLmdldCgp
KTsKLX0KLQotdm9pZCBET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsVXBkYXRlUmVhZHlMaXN0ZW5l
cigpCi17Ci0gICAgY2FsbExpc3RlbmVyKGV2ZW50TmFtZXMoKS51cGRhdGVyZWFkeUV2ZW50LCBt
X29uVXBkYXRlUmVhZHlMaXN0ZW5lci5nZXQoKSk7CisgICAgc3dpdGNoIChldmVudFR5cGUpIHsK
KyAgICAgICAgY2FzZSBDSEVDS0lOR19FVkVOVDoKKyAgICAgICAgICAgIHJldHVybiBldmVudE5h
bWVzKCkuY2hlY2tpbmdFdmVudDsKKyAgICAgICAgY2FzZSBFUlJPUl9FVkVOVDoKKyAgICAgICAg
ICAgIHJldHVybiBldmVudE5hbWVzKCkuZXJyb3JFdmVudDsKKyAgICAgICAgY2FzZSBOT1VQREFU
RV9FVkVOVDoKKyAgICAgICAgICAgIHJldHVybiBldmVudE5hbWVzKCkubm91cGRhdGVFdmVudDsK
KyAgICAgICAgY2FzZSBET1dOTE9BRElOR19FVkVOVDoKKyAgICAgICAgICAgIHJldHVybiBldmVu
dE5hbWVzKCkuZG93bmxvYWRpbmdFdmVudDsKKyAgICAgICAgY2FzZSBQUk9HUkVTU19FVkVOVDoK
KyAgICAgICAgICAgIHJldHVybiBldmVudE5hbWVzKCkucHJvZ3Jlc3NFdmVudDsKKyAgICAgICAg
Y2FzZSBVUERBVEVSRUFEWV9FVkVOVDoKKyAgICAgICAgICAgIHJldHVybiBldmVudE5hbWVzKCku
dXBkYXRlcmVhZHlFdmVudDsKKyAgICAgICAgY2FzZSBDQUNIRURfRVZFTlQ6CisgICAgICAgICAg
ICByZXR1cm4gZXZlbnROYW1lcygpLmNhY2hlZEV2ZW50OworICAgICAgICBjYXNlIE9CU09MRVRF
X0VWRU5UOiAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5vYnNv
bGV0ZUV2ZW50OworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
ZXZlbnROYW1lcygpLmVycm9yRXZlbnQ7CiB9CiAKLXZvaWQgRE9NQXBwbGljYXRpb25DYWNoZTo6
Y2FsbENhY2hlZExpc3RlbmVyKCkKKy8vIHN0YXRpYworRE9NQXBwbGljYXRpb25DYWNoZTo6RXZl
bnRUeXBlIERPTUFwcGxpY2F0aW9uQ2FjaGU6OnRvRXZlbnRUeXBlKGNvbnN0IEF0b21pY1N0cmlu
ZyYgZXZlbnROYW1lKQogewotICAgIGNhbGxMaXN0ZW5lcihldmVudE5hbWVzKCkuY2FjaGVkRXZl
bnQsIG1fb25DYWNoZWRMaXN0ZW5lci5nZXQoKSk7CisgICAgaWYgKGV2ZW50TmFtZSA9PSBldmVu
dE5hbWVzKCkuY2hlY2tpbmdFdmVudCkKKyAgICAgICAgcmV0dXJuIENIRUNLSU5HX0VWRU5UOwor
ICAgIGlmIChldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLmVycm9yRXZlbnQpCisgICAgICAgIHJl
dHVybiBFUlJPUl9FVkVOVDsKKyAgICBpZiAoZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5ub3Vw
ZGF0ZUV2ZW50KQorICAgICAgICByZXR1cm4gTk9VUERBVEVfRVZFTlQ7CisgICAgaWYgKGV2ZW50
TmFtZSA9PSBldmVudE5hbWVzKCkuZG93bmxvYWRpbmdFdmVudCkKKyAgICAgICAgcmV0dXJuIERP
V05MT0FESU5HX0VWRU5UOworICAgIGlmIChldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnByb2dy
ZXNzRXZlbnQpCisgICAgICAgIHJldHVybiBQUk9HUkVTU19FVkVOVDsKKyAgICBpZiAoZXZlbnRO
YW1lID09IGV2ZW50TmFtZXMoKS51cGRhdGVyZWFkeUV2ZW50KQorICAgICAgICByZXR1cm4gVVBE
QVRFUkVBRFlfRVZFTlQ7CisgICAgaWYgKGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkuY2FjaGVk
RXZlbnQpCisgICAgICAgIHJldHVybiBDQUNIRURfRVZFTlQ7CisgICAgaWYgKGV2ZW50TmFtZSA9
PSBldmVudE5hbWVzKCkub2Jzb2xldGVFdmVudCkKKyAgICAgICAgcmV0dXJuIE9CU09MRVRFX0VW
RU5UOworICAKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gRVJST1JfRVZF
TlQ7CiB9CiAKLXZvaWQgRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbE9ic29sZXRlTGlzdGVuZXIo
KQotewotICAgIGNhbGxMaXN0ZW5lcihldmVudE5hbWVzKCkub2Jzb2xldGVFdmVudCwgbV9vbk9i
c29sZXRlTGlzdGVuZXIuZ2V0KCkpOwotfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5k
ZXg6IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmgJKHJl
dmlzaW9uIDQ2NTY4KQorKysgV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvRE9NQXBwbGljYXRpb25D
YWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotY2xhc3MgQXBwbGljYXRpb25DYWNoZTsKK2NsYXNzIEFwcGxpY2F0aW9uQ2FjaGVI
b3N0OwogY2xhc3MgQXRvbWljU3RyaW5nSW1wbDsKIGNsYXNzIEZyYW1lOwogY2xhc3MgS1VSTDsK
QEAgLTQ3LDYgKzQ3LDggQEAgY2xhc3MgU3RyaW5nOwogY2xhc3MgRE9NQXBwbGljYXRpb25DYWNo
ZSA6IHB1YmxpYyBSZWZDb3VudGVkPERPTUFwcGxpY2F0aW9uQ2FjaGU+LCBwdWJsaWMgRXZlbnRU
YXJnZXQgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPERPTUFwcGxpY2F0aW9uQ2Fj
aGU+IGNyZWF0ZShGcmFtZSogZnJhbWUpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBET01BcHBsaWNh
dGlvbkNhY2hlKGZyYW1lKSk7IH0KKyAgICB+RE9NQXBwbGljYXRpb25DYWNoZSgpIHsgQVNTRVJU
KCFtX2ZyYW1lKTsgfQorCiAgICAgdm9pZCBkaXNjb25uZWN0RnJhbWUoKTsKIAogICAgIGVudW0g
U3RhdHVzIHsKQEAgLTU4LDE1ICs2MCwzMyBAQCBwdWJsaWM6CiAgICAgICAgIE9CU09MRVRFID0g
NQogICAgIH07CiAKKyAgICBlbnVtIEV2ZW50VHlwZSB7CisgICAgICAgIENIRUNLSU5HX0VWRU5U
ID0gMCwKKyAgICAgICAgRVJST1JfRVZFTlQsCisgICAgICAgIE5PVVBEQVRFX0VWRU5ULAorICAg
ICAgICBET1dOTE9BRElOR19FVkVOVCwKKyAgICAgICAgUFJPR1JFU1NfRVZFTlQsCisgICAgICAg
IFVQREFURVJFQURZX0VWRU5ULAorICAgICAgICBDQUNIRURfRVZFTlQsCisgICAgICAgIE9CU09M
RVRFX0VWRU5UCisgICAgfTsKKwogICAgIHVuc2lnbmVkIHNob3J0IHN0YXR1cygpIGNvbnN0Owot
ICAgIAogICAgIHZvaWQgdXBkYXRlKEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHN3YXBDYWNo
ZShFeGNlcHRpb25Db2RlJik7Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIGFkZEV2ZW50TGlzdGVu
ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5l
cj4sIGJvb2wgdXNlQ2FwdHVyZSk7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUV2ZW50TGlzdGVu
ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqLCBib29sIHVz
ZUNhcHR1cmUpOworCisgICAgLy8gRXZlbnQgbGlzdGVuZXIgYXR0cmlidXRlcyBieSBFdmVudFR5
cGUKKworICAgIHZvaWQgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihFdmVudFR5cGUgdHlwZSwg
UGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fYXR0cmlidXRlRXZl
bnRMaXN0ZW5lcnNbdHlwZV0gPSBldmVudExpc3RlbmVyOyB9CisgICAgRXZlbnRMaXN0ZW5lciog
Z2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihFdmVudFR5cGUgdHlwZSkgY29uc3QgeyByZXR1cm4g
bV9hdHRyaWJ1dGVFdmVudExpc3RlbmVyc1t0eXBlXS5nZXQoKTsgfQorICAgIHZvaWQgY2xlYXJB
dHRyaWJ1dGVFdmVudExpc3RlbmVyKEV2ZW50VHlwZSB0eXBlKSB7IG1fYXR0cmlidXRlRXZlbnRM
aXN0ZW5lcnNbdHlwZV0gPSAwOyB9CisgICAgdm9pZCBjYWxsRXZlbnRMaXN0ZW5lcihFdmVudFR5
cGUgdHlwZSkgeyBjYWxsTGlzdGVuZXIodG9FdmVudE5hbWUodHlwZSksIGdldEF0dHJpYnV0ZUV2
ZW50TGlzdGVuZXIodHlwZSkpOyB9CisKKyAgICAvLyBFdmVudFRhcmdldCBpbXBsCisKKyAgICB2
aXJ0dWFsIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50TmFt
ZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiwgYm9vbCB1c2VDYXB0dXJlKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50TmFt
ZSwgRXZlbnRMaXN0ZW5lciosIGJvb2wgdXNlQ2FwdHVyZSk7CiAgICAgdmlydHVhbCBib29sIGRp
c3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICAKICAg
ICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gPiBMaXN0ZW5lclZlY3RvcjsK
ICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBMaXN0ZW5lclZlY3Rvcj4gRXZlbnRM
aXN0ZW5lcnNNYXA7CiAgICAgRXZlbnRMaXN0ZW5lcnNNYXAmIGV2ZW50TGlzdGVuZXJzKCkgeyBy
ZXR1cm4gbV9ldmVudExpc3RlbmVyczsgfQpAQCAtNzQsNjEgKzk0LDUxIEBAIHB1YmxpYzoKICAg
ICB1c2luZyBSZWZDb3VudGVkPERPTUFwcGxpY2F0aW9uQ2FjaGU+OjpyZWY7CiAgICAgdXNpbmcg
UmVmQ291bnRlZDxET01BcHBsaWNhdGlvbkNhY2hlPjo6ZGVyZWY7CiAKLSAgICB2b2lkIHNldE9u
Y2hlY2tpbmcoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fb25D
aGVja2luZ0xpc3RlbmVyID0gZXZlbnRMaXN0ZW5lcjsgfQotICAgIEV2ZW50TGlzdGVuZXIqIG9u
Y2hlY2tpbmcoKSBjb25zdCB7IHJldHVybiBtX29uQ2hlY2tpbmdMaXN0ZW5lci5nZXQoKTsgfQor
ICAgIC8vIEV4cGxpY2l0bHkgbmFtZWQgYXR0cmlidXRlIGV2ZW50IGxpc3RlbmVyIGhlbHBlcnMK
IAotICAgIHZvaWQgc2V0T25lcnJvcihQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlz
dGVuZXIpIHsgbV9vbkVycm9yTGlzdGVuZXIgPSBldmVudExpc3RlbmVyOyB9Ci0gICAgRXZlbnRM
aXN0ZW5lciogb25lcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fb25FcnJvckxpc3RlbmVyLmdldCgp
OyB9CisgICAgdm9pZCBzZXRPbmNoZWNraW5nKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlz
dGVuZXIpIHsgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihDSEVDS0lOR19FVkVOVCwgbGlzdGVu
ZXIpOyB9CisgICAgRXZlbnRMaXN0ZW5lciogb25jaGVja2luZygpIGNvbnN0IHsgcmV0dXJuIGdl
dEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoQ0hFQ0tJTkdfRVZFTlQpOyB9CiAKLSAgICB2b2lkIHNl
dE9ubm91cGRhdGUoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1f
b25Ob1VwZGF0ZUxpc3RlbmVyID0gZXZlbnRMaXN0ZW5lcjsgfQotICAgIEV2ZW50TGlzdGVuZXIq
IG9ubm91cGRhdGUoKSBjb25zdCB7IHJldHVybiBtX29uTm9VcGRhdGVMaXN0ZW5lci5nZXQoKTsg
fQorICAgIHZvaWQgc2V0T25lcnJvcihQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVy
KSB7IHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoRVJST1JfRVZFTlQsIGxpc3RlbmVyKTt9Cisg
ICAgRXZlbnRMaXN0ZW5lciogb25lcnJvcigpIGNvbnN0IHsgcmV0dXJuIGdldEF0dHJpYnV0ZUV2
ZW50TGlzdGVuZXIoRVJST1JfRVZFTlQpOyB9CiAKLSAgICB2b2lkIHNldE9uZG93bmxvYWRpbmco
UGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fb25Eb3dubG9hZGlu
Z0xpc3RlbmVyID0gZXZlbnRMaXN0ZW5lcjsgfQotICAgIEV2ZW50TGlzdGVuZXIqIG9uZG93bmxv
YWRpbmcoKSBjb25zdCB7IHJldHVybiBtX29uRG93bmxvYWRpbmdMaXN0ZW5lci5nZXQoKTsgfQot
ICAgIAotICAgIHZvaWQgc2V0T25wcm9ncmVzcyhQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2
ZW50TGlzdGVuZXIpIHsgbV9vblByb2dyZXNzTGlzdGVuZXIgPSBldmVudExpc3RlbmVyOyB9Ci0g
ICAgRXZlbnRMaXN0ZW5lciogb25wcm9ncmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fb25Qcm9ncmVz
c0xpc3RlbmVyLmdldCgpOyB9CisgICAgdm9pZCBzZXRPbm5vdXBkYXRlKFBhc3NSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4gbGlzdGVuZXIpIHsgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihOT1VQREFU
RV9FVkVOVCwgbGlzdGVuZXIpOyB9CisgICAgRXZlbnRMaXN0ZW5lciogb25ub3VwZGF0ZSgpIGNv
bnN0IHsgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoTk9VUERBVEVfRVZFTlQpOyB9
CisKKyAgICB2b2lkIHNldE9uZG93bmxvYWRpbmcoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBs
aXN0ZW5lcikgeyBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKERPV05MT0FESU5HX0VWRU5ULCBs
aXN0ZW5lcik7IH0KKyAgICBFdmVudExpc3RlbmVyKiBvbmRvd25sb2FkaW5nKCkgY29uc3QgeyBy
ZXR1cm4gZ2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihET1dOTE9BRElOR19FVkVOVCk7IH0KIAot
ICAgIHZvaWQgc2V0T251cGRhdGVyZWFkeShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50
TGlzdGVuZXIpIHsgbV9vblVwZGF0ZVJlYWR5TGlzdGVuZXIgPSBldmVudExpc3RlbmVyOyB9Ci0g
ICAgRXZlbnRMaXN0ZW5lciogb251cGRhdGVyZWFkeSgpIGNvbnN0IHsgcmV0dXJuIG1fb25VcGRh
dGVSZWFkeUxpc3RlbmVyLmdldCgpOyB9CisgICAgdm9pZCBzZXRPbnByb2dyZXNzKFBhc3NSZWZQ
dHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIpIHsgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihQ
Uk9HUkVTU19FVkVOVCwgbGlzdGVuZXIpOyB9CisgICAgRXZlbnRMaXN0ZW5lciogb25wcm9ncmVz
cygpIGNvbnN0IHsgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoUFJPR1JFU1NfRVZF
TlQpOyB9CiAKLSAgICB2b2lkIHNldE9uY2FjaGVkKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4g
ZXZlbnRMaXN0ZW5lcikgeyBtX29uQ2FjaGVkTGlzdGVuZXIgPSBldmVudExpc3RlbmVyOyB9Ci0g
ICAgRXZlbnRMaXN0ZW5lciogb25jYWNoZWQoKSBjb25zdCB7IHJldHVybiBtX29uQ2FjaGVkTGlz
dGVuZXIuZ2V0KCk7IH0KKyAgICB2b2lkIHNldE9udXBkYXRlcmVhZHkoUGFzc1JlZlB0cjxFdmVu
dExpc3RlbmVyPiBsaXN0ZW5lcikgeyBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKFVQREFURVJF
QURZX0VWRU5ULCBsaXN0ZW5lcik7IH0KKyAgICBFdmVudExpc3RlbmVyKiBvbnVwZGF0ZXJlYWR5
KCkgY29uc3QgeyByZXR1cm4gZ2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihVUERBVEVSRUFEWV9F
VkVOVCk7IH0KIAotICAgIHZvaWQgc2V0T25vYnNvbGV0ZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+IGV2ZW50TGlzdGVuZXIpIHsgbV9vbk9ic29sZXRlTGlzdGVuZXIgPSBldmVudExpc3RlbmVy
OyB9Ci0gICAgRXZlbnRMaXN0ZW5lciogb25vYnNvbGV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb25P
YnNvbGV0ZUxpc3RlbmVyLmdldCgpOyB9CisgICAgdm9pZCBzZXRPbmNhY2hlZChQYXNzUmVmUHRy
PEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyKSB7IHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoQ0FD
SEVEX0VWRU5ULCBsaXN0ZW5lcik7IH0KKyAgICBFdmVudExpc3RlbmVyKiBvbmNhY2hlZCgpIGNv
bnN0IHsgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoQ0FDSEVEX0VWRU5UKTsgfQor
CisgICAgdm9pZCBzZXRPbm9ic29sZXRlKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVu
ZXIpIHsgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihPQlNPTEVURV9FVkVOVCwgbGlzdGVuZXIp
OyB9CisgICAgRXZlbnRMaXN0ZW5lciogb25vYnNvbGV0ZSgpIGNvbnN0IHsgcmV0dXJuIGdldEF0
dHJpYnV0ZUV2ZW50TGlzdGVuZXIoT0JTT0xFVEVfRVZFTlQpOyB9CiAKICAgICB2aXJ0dWFsIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKICAg
ICBET01BcHBsaWNhdGlvbkNhY2hlKiB0b0RPTUFwcGxpY2F0aW9uQ2FjaGUoKSB7IHJldHVybiB0
aGlzOyB9CiAKLSAgICB2b2lkIGNhbGxDaGVja2luZ0xpc3RlbmVyKCk7Ci0gICAgdm9pZCBjYWxs
RXJyb3JMaXN0ZW5lcigpOyAgICAKLSAgICB2b2lkIGNhbGxOb1VwZGF0ZUxpc3RlbmVyKCk7ICAg
IAotICAgIHZvaWQgY2FsbERvd25sb2FkaW5nTGlzdGVuZXIoKTsKLSAgICB2b2lkIGNhbGxQcm9n
cmVzc0xpc3RlbmVyKCk7Ci0gICAgdm9pZCBjYWxsVXBkYXRlUmVhZHlMaXN0ZW5lcigpOwotICAg
IHZvaWQgY2FsbENhY2hlZExpc3RlbmVyKCk7Ci0gICAgdm9pZCBjYWxsT2Jzb2xldGVMaXN0ZW5l
cigpOwotICAgIAorICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIHRvRXZlbnROYW1lKEV2
ZW50VHlwZSBldmVudFR5cGUpOworICAgIHN0YXRpYyBFdmVudFR5cGUgdG9FdmVudFR5cGUoY29u
c3QgQXRvbWljU3RyaW5nJiBldmVudE5hbWUpOworCiBwcml2YXRlOgogICAgIERPTUFwcGxpY2F0
aW9uQ2FjaGUoRnJhbWUqKTsKLSAgICB2b2lkIGNhbGxMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJp
bmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciopOworCisgICAgdm9pZCBjYWxsTGlzdGVuZXIo
Y29uc3QgQXRvbWljU3RyaW5nJiBldmVudE5hbWUsIEV2ZW50TGlzdGVuZXIqKTsKICAgICAKICAg
ICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9CiAgICAgdmlydHVhbCB2
b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0KIAotICAgIEFwcGxpY2F0aW9uQ2Fj
aGUqIGFzc29jaWF0ZWRDYWNoZSgpIGNvbnN0OworICAgIEFwcGxpY2F0aW9uQ2FjaGVIb3N0KiBh
cHBsaWNhdGlvbkNhY2hlSG9zdCgpIGNvbnN0OwogICAgIGJvb2wgc3dhcENhY2hlKCk7CiAgICAg
Ci0gICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1fb25DaGVja2luZ0xpc3RlbmVyOwotICAgIFJl
ZlB0cjxFdmVudExpc3RlbmVyPiBtX29uRXJyb3JMaXN0ZW5lcjsKLSAgICBSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gbV9vbk5vVXBkYXRlTGlzdGVuZXI7Ci0gICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+
IG1fb25Eb3dubG9hZGluZ0xpc3RlbmVyOwotICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBtX29u
UHJvZ3Jlc3NMaXN0ZW5lcjsKLSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9vblVwZGF0ZVJl
YWR5TGlzdGVuZXI7Ci0gICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1fb25DYWNoZWRMaXN0ZW5l
cjsKLSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9vbk9ic29sZXRlTGlzdGVuZXI7Ci0gICAg
CisgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1fYXR0cmlidXRlRXZlbnRMaXN0ZW5lcnNbT0JT
T0xFVEVfRVZFTlQgKyAxXTsKKwogICAgIEV2ZW50TGlzdGVuZXJzTWFwIG1fZXZlbnRMaXN0ZW5l
cnM7CiAKICAgICBGcmFtZSogbV9mcmFtZTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9jaHJvbWl1bS9D
aHJvbWVDbGllbnRDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9jaHJvbWl1
bS9DaHJvbWVDbGllbnRDaHJvbWl1bS5oCShyZXZpc2lvbiA0NjU2OCkKKysrIFdlYkNvcmUvcGFn
ZS9jaHJvbWl1bS9DaHJvbWVDbGllbnRDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2
ICs1MSwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIFRPRE8oeGppKTogYWRk
ZWQgdGVtcHJhcmlseSB0byBtYWtlIENocm9taXVtIGNvbXBpbGUgYWZ0ZXIgcGljayB1cCB0aGlz
CiAgICAgICAgIC8vIFdlYmtpdCBwYXRjaC4gU2hvdWxkIGJlIHJlbW92ZWQgYWZ0ZXIgYWRkaW5n
IGl0IGluIENocm9taXVtJ3Mgb3duIGNvZGUuCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRUb29s
VGlwKGNvbnN0IFN0cmluZyYgdG9vbHRpcF90ZXh0LCBUZXh0RGlyZWN0aW9uIGRpcikgeyB9CisK
KyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQ0KKyAgICAgICAgLy8gQ2FsbGJh
Y2sgaW52b2tlZCB3aGVuIHRoZSBhcHBsaWNhdGlvbiBjYWNoZSBmYWlscyB0byBzYXZlIGEgY2Fj
aGUgb2JqZWN0DQorICAgICAgICAvLyBiZWNhdXNlIHN0b3JpbmcgaXQgd291bGQgZ3JvdyB0aGUg
ZGF0YWJhc2UgZmlsZSBwYXN0IGl0cyBkZWZpbmVkIG1heGltdW0NCisgICAgICAgIC8vIHNpemUg
b3IgcGFzdCB0aGUgYW1vdW50IG9mIGZyZWUgc3BhY2Ugb24gdGhlIGRldmljZS4gDQorICAgICAg
ICAvLyBUaGUgY2hyb21lIGNsaWVudCB3b3VsZCBuZWVkIHRvIHRha2Ugc29tZSBhY3Rpb24gc3Vj
aCBhcyBldmljdGluZyBzb21lDQorICAgICAgICAvLyBvbGQgY2FjaGVzLg0KKyAgICAgICAgdmly
dHVhbCB2b2lkIHJlYWNoZWRNYXhBcHBDYWNoZVNpemUoaW50NjRfdCBzcGFjZU5lZWRlZCkgeyB9
DQorI2VuZGlmCiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9LVVJMR29vZ2xlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L0tVUkxHb29nbGUuY3BwCShyZXZpc2lvbiA0NjU2OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vS1VS
TEdvb2dsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1Nyw2ICs5NTcsMzIgQEAgaW5saW5lIGJv
b2wgS1VSTDo6cHJvdG9jb2xJcyhjb25zdCBTdHJpbgogICAgIHJldHVybiBXZWJDb3JlOjpwcm90
b2NvbElzKHN0cmluZywgcHJvdG9jb2wpOwogfQogCitib29sIHByb3RvY29sSG9zdEFuZFBvcnRB
cmVFcXVhbChjb25zdCBLVVJMJiBhLCBjb25zdCBLVVJMJiBiKQoreworICAgIGlmIChhLnBhcnNl
ZCgpLnNjaGVtZS5lbmQoKSAhPSBiLnBhcnNlZCgpLnNjaGVtZS5lbmQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaW50IGhvc3RTdGFydEEgPSBhLmhvc3RTdGFydCgpOworICAgIGlu
dCBob3N0U3RhcnRCID0gYi5ob3N0U3RhcnQoKTsKKyAgICBpZiAoYS5ob3N0RW5kKCkgLSBob3N0
U3RhcnRBICE9IGIuaG9zdEVuZCgpIC0gaG9zdFN0YXJ0QikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgLy8gQ2hlY2sgdGhlIHNjaGVtZQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYS5w
YXJzZWQoKS5zY2hlbWUuZW5kKCk7ICsraSkKKyAgICAgICAgaWYgKGEuc3RyaW5nKClbaV0gIT0g
Yi5zdHJpbmcoKVtpXSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBB
bmQgdGhlIGhvc3QKKyAgICBmb3IgKGludCBpID0gaG9zdFN0YXJ0QTsgaSA8IHN0YXRpY19jYXN0
PGludD4oYS5ob3N0RW5kKCkpOyArK2kpCisgICAgICAgIGlmIChhLnN0cmluZygpW2ldICE9IGIu
c3RyaW5nKClbaV0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKGEu
cG9ydCgpICE9IGIucG9ydCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gVVNFKEdPT0dM
RVVSTCkKSW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9t
YWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA0NjU2OCkKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDktMDctMjkgIE1pY2hhZWwgTm9yZG1h
biAgPG1pY2hhZWxuQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTI3ODIxCisKKyAgICAgICAgTW9kcyB0byBrZWVwIHVwIHdpdGggQXBwbGljYXRpb25DYWNoZUhv
c3QgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkRhdGFTb3VyY2UubW06Cisg
ICAgICAgICgtW1dlYkRhdGFTb3VyY2UgX3RyYW5zZmVyQXBwbGljYXRpb25DYWNoZTpdKToKKwog
MjAwOS0wNy0yOSAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAg
IDxodHRwOi8vd2Via2l0Lm9yZy9iLzI3Nzg4PiBEb24ndCBleHBvcnQgV2ViUGx1Z2luQ29udHJv
bGxlci5oIGFzIGEgcHJpdmF0ZSBoZWFkZXIKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJE
YXRhU291cmNlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJEYXRhU291
cmNlLm1tCShyZXZpc2lvbiA0NjU2OCkKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJEYXRhU291
cmNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xOTgsMTQgKzE5OCwxMCBAQCBzdGF0aWMgaW5saW5l
IHZvaWQgYWRkVHlwZXNGcm9tQ2xhc3MoTlNNCiAgICAgCiAgICAgaWYgKCFsb2FkZXIpCiAgICAg
ICAgIHJldHVybiBOTzsKLSAgICAKLSAgICBBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSA9IGxvYWRl
ci0+YXBwbGljYXRpb25DYWNoZSgpOwotICAgIGlmICghY2FjaGUpCi0gICAgICAgIHJldHVybiBZ
RVM7Ci0gICAgCisgICAgICAgIAogICAgIE5TU3RyaW5nICpjYWNoZURpciA9IFtOU1N0cmluZyBf
d2Via2l0X2xvY2FsQ2FjaGVEaXJlY3RvcnlXaXRoQnVuZGxlSWRlbnRpZmllcjpkZXN0aW5hdGlv
bkJ1bmRsZUlkZW50aWZpZXJdOwogICAgIAotICAgIHJldHVybiBBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTo6c3RvcmVDb3B5T2ZDYWNoZShjYWNoZURpciwgY2FjaGUpOworICAgIHJldHVybiBBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZTo6dHJhbnNmZXJBcHBsaWNhdGlvbkNhY2hlKGNhY2hlRGlyLCBs
b2FkZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCkpOwogfQogCiBAZW5kCg==
</data>
<flag name="review"
          id="18009"
          type_id="1"
          status="-"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33843</attachid>
            <date>2009-07-30 15:15:06 -0700</date>
            <delta_ts>2009-08-03 23:21:18 -0700</delta_ts>
            <desc>class ApplicationCacheHost rev4</desc>
            <filename>AppCacheHostPatch_4.txt</filename>
            <type>text/plain</type>
            <size>99224</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjU2OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTE5IEBACisyMDA5LTA3LTI5ICBNaWNoYWVsIE5vcmRtYW4gIDxtaWNoYWVsbkBn
b29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzgyMQorCisgICAg
ICAgIEFwcGxpY2F0aW9uQ2FjaGVIb3N0IHJlZmFjdG9yaW5nLgorICAgICAgICAKKyAgICAgICAg
MSkgQmV0dGVyIGVuY2Fwc3VsYXRlIHRoZSBpbnRlcmZhY2VzIGJldHdlZW4gd2ViY29yZSBjb21t
b24gY29kZQorICAgICAgICBhbmQgdGhlIGFwcGNhY2hlIHN5c3RlbSB3aXRoaW4gYSBuZXcgY2xh
c3MgQXBwbGljYXRpb25DYWNoZUhvc3QuCisKKyAgICAgICAgMikgVXNlIHRoYXQgaW50ZXJmYWNl
IHRocm91Z2hvdXQgdGhlIGxvYWRlciBzeXN0ZW0sIHJlcGxhY2luZyBpbmxpbmUgYXBwY2FjaGUg
bG9naWMuCisKKyAgICAgICAgMykgSW1wbGVtZW50IHRoZSBpbnRlcmZhY2UgaW4gdGVybXMgb2Yg
d2ViY29yZSdzIGFwcGNhY2hlIHN5c3RlbS4KKworICAgICAgICA0KSBBZGQgdGhlIG5ldyBmaWxl
cyB0byB2YXJpb3VzIG1ha2VmaWxlcy4KKworICAgICAgICA1KSBJbXBsZW1lbnQgcHJvdG9jb2xI
b3N0QW5kUG9ydEFyZUVxdWFsKCkgaW4gS1VSTEdvb2dsZS5jcHAKKworICAgICAgICBObyBuZXcg
ZmVhdHVyZXMsIG5vIG5ldyB0ZXN0cy4gVGhlIGV4aXN0aW5nIGxheW91dCB0ZXN0cyBhbGwgcGFz
cy4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuYmFzZS5l
eHA6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAg
ICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlU291cmNlcy5ia2w6
CisgICAgICAgICogaHRtbC9IVE1MSHRtbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEh0bWxFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCk6CisgICAgICAgICogbG9hZGVy
L0RvY3VtZW50TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyOjpE
b2N1bWVudExvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6fkRvY3Vt
ZW50TG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyOjptYWluUmVjZWl2
ZWRFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6ZGV0YWNoRnJvbUZy
YW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyOjpzZXRQcmltYXJ5TG9hZENv
bXBsZXRlKToKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRMb2FkZXIuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50TG9hZGVyOjphcHBsaWNhdGlvbkNhY2hlSG9zdCk6CisgICAgICAgICog
bG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpj
YW5DYWNoZVBhZ2VDb250YWluaW5nVGhpc0ZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
TG9hZGVyOjpsb2dDYW5DYWNoZUZyYW1lRGVjaXNpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAgICAqIGxvYWRlci9N
YWluUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWFpblJlc291cmNlTG9h
ZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6TWFpblJlc291cmNl
TG9hZGVyOjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpNYWluUmVzb3VyY2VM
b2FkZXI6OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TWFpblJlc291cmNl
TG9hZGVyOjpkaWRGYWlsKToKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5SZXNvdXJjZUxvYWRlcjo6
bG9hZCk6CisgICAgICAgICogbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5oOgorICAgICAgICAq
IGxvYWRlci9SZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxv
YWRlcjo6bG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRlcjo6d2lsbFNlbmRS
ZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVz
cG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6OmRpZEZhaWwpOgorICAg
ICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRlci5oOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNo
ZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRp
b25DYWNoZUdyb3VwOjpzZWxlY3RDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlv
bkNhY2hlR3JvdXA6OnNlbGVjdENhY2hlV2l0aG91dE1hbmlmZXN0VVJMKToKKyAgICAgICAgKFdl
YkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6ZmluaXNoZWRMb2FkaW5nTWFpblJlc291cmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6ZmFpbGVkTG9hZGlu
Z01haW5SZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlR3JvdXA6
OmRpc2Fzc29jaWF0ZURvY3VtZW50TG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0
aW9uQ2FjaGVHcm91cDo6dXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2Fj
aGVHcm91cDo6ZGlkRmluaXNoTG9hZGluZ01hbmlmZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGxpY2F0aW9uQ2FjaGVHcm91cDo6bWFuaWZlc3ROb3RGb3VuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmNoZWNrSWZMb2FkSXNDb21wbGV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OnN0YXJ0TG9hZGluZ0VudHJ5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6YXNzb2NpYXRlRG9jdW1lbnRM
b2FkZXJXaXRoQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FsbENhY2hlTGlzdGVuZXJUYXNr
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FsbENhY2hlTGlzdGVuZXJUYXNrOjpwZXJm
b3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpDYWxsQ2FjaGVMaXN0ZW5lclRhc2s6OkNhbGxD
YWNoZUxpc3RlbmVyVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlR3Jv
dXA6OnBvc3RMaXN0ZW5lclRhc2spOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNh
dGlvbkNhY2hlR3JvdXAuaDoKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25D
YWNoZUhvc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRp
b25DYWNoZUhvc3QuaDogQWRkZWQuCisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlOjp0cmFuc2ZlckFwcGxpY2F0aW9uQ2FjaGUpOgorICAgICAgICAqIGxvYWRlci9hcHBj
YWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNo
ZS9ET01BcHBsaWNhdGlvbkNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0
aW9uQ2FjaGU6OkRPTUFwcGxpY2F0aW9uQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NQXBw
bGljYXRpb25DYWNoZTo6ZGlzY29ubmVjdEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFw
cGxpY2F0aW9uQ2FjaGU6OmFwcGxpY2F0aW9uQ2FjaGVIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRPTUFwcGxpY2F0aW9uQ2FjaGU6OnN0YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpET01BcHBs
aWNhdGlvbkNhY2hlOjp1cGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NQXBwbGljYXRpb25D
YWNoZTo6c3dhcENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6
OmFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6RE9NQXBwbGljYXRpb25DYWNo
ZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpET01BcHBsaWNhdGlv
bkNhY2hlOjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9u
Q2FjaGU6OmNhbGxMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpET01BcHBsaWNhdGlvbkNh
Y2hlOjp0b0V2ZW50TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hl
Ojp0b0V2ZW50VHlwZSk6CisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9u
Q2FjaGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6Oik6CisgICAg
ICAgIChXZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hlOjpzZXRBdHRyaWJ1dGVFdmVudExpc3Rl
bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmdldEF0dHJpYnV0
ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6RE9NQXBwbGljYXRpb25DYWNoZTo6
Y2xlYXJBdHRyaWJ1dGVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxp
Y2F0aW9uQ2FjaGU6OmNhbGxFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFw
cGxpY2F0aW9uQ2FjaGU6OnNldE9uY2hlY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RE9NQXBw
bGljYXRpb25DYWNoZTo6b25jaGVja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpET01BcHBsaWNh
dGlvbkNhY2hlOjpzZXRPbmVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9u
Q2FjaGU6Om9uZXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6RE9NQXBwbGljYXRpb25DYWNoZTo6
c2V0T25ub3VwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hlOjpv
bm5vdXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6OnNldE9u
ZG93bmxvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RE9NQXBwbGljYXRpb25DYWNoZTo6b25k
b3dubG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hlOjpzZXRP
bnByb2dyZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6Om9ucHJv
Z3Jlc3MpOgorICAgICAgICAoV2ViQ29yZTo6RE9NQXBwbGljYXRpb25DYWNoZTo6c2V0T251cGRh
dGVyZWFkeSk6CisgICAgICAgIChXZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hlOjpvbnVwZGF0
ZXJlYWR5KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6OnNldE9uY2Fj
aGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6Om9uY2FjaGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6OnNldE9ub2Jzb2xldGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RE9NQXBwbGljYXRpb25DYWNoZTo6b25vYnNvbGV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hlOjp+RE9NQXBwbGljYXRpb25DYWNoZSk6
CisgICAgICAgICogcGxhdGZvcm0vS1VSTEdvb2dsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpw
cm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwpOgorCiAyMDA5LTA3LTI5ICBZb25nIExpICA8eW9u
Zy5saUB0b3JjaG1vYmlsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2VvcmdlIFN0YWlr
b3MuCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
R05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDQ2NTY4KQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bQkod29ya2luZyBjb3B5KQpAQCAtMjAwNiw2ICsyMDA2LDggQEAgd2ViY29yZV9zb3VyY2VzICs9
IFwKIAlXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlLmggXAogCVdlYkNv
cmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAgXAogCVdlYkNvcmUv
bG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5oIFwKKwlXZWJDb3JlL2xvYWRl
ci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAgXAorCVdlYkNvcmUvbG9hZGVyL2Fw
cGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmggXAogCVdlYkNvcmUvbG9hZGVyL2FwcGNhY2hl
L0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHAgXAogCVdlYkNvcmUvbG9hZGVyL2FwcGNhY2hl
L0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5oIFwKIAlXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9B
cHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmJhc2Uu
ZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkocmV2aXNpb24gNDY1
NjgpCisrKyBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0Myw3
ICs0NDMsNyBAQCBfX1pON1dlYkNvcmUyMmFwcGxpY2F0aW9uSXNBcHBsZU1haWxFdgogX19aTjdX
ZWJDb3JlMjJjcmVhdGVGcmFnbWVudEZyb21UZXh0RVBOU181UmFuZ2VFUktOU182U3RyaW5nRQog
X19aTjdXZWJDb3JlMjJleHRlcm5hbFJlcHJlc2VudGF0aW9uRVBOU18xMlJlbmRlck9iamVjdEUK
IF9fWk43V2ViQ29yZTIzQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UxNHNldE1heGltdW1TaXplRXgK
LV9fWk43V2ViQ29yZTIzQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UxNnN0b3JlQ29weU9mQ2FjaGVF
UktOU182U3RyaW5nRVBOU18xNkFwcGxpY2F0aW9uQ2FjaGVFCitfX1pON1dlYkNvcmUyM0FwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlMjR0cmFuc2ZlckFwcGxpY2F0aW9uQ2FjaGVFUktOU182U3RyaW5n
RVBOU18yMEFwcGxpY2F0aW9uQ2FjaGVIb3N0RQogX19aTjdXZWJDb3JlMjNBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTE3c2V0Q2FjaGVEaXJlY3RvcnlFUktOU182U3RyaW5nRQogX19aTjdXZWJDb3Jl
MjNBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTE4dmFjdXVtRGF0YWJhc2VGaWxlRXYKIF9fWk43V2Vi
Q29yZTIzQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U1ZW1wdHlFdgpJbmRleDogV2ViQ29yZS9XZWJD
b3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDQ2
NTY4KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTE0MjUsNiAr
MTQyNSw4IEBACiAgICAgICAgICAgICAnbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUu
aCcsCiAgICAgICAgICAgICAnbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5j
cHAnLAogICAgICAgICAgICAgJ2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAu
aCcsCisgICAgICAgICAgICAnbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmNw
cCcsCisgICAgICAgICAgICAnbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0Lmgn
LAogICAgICAgICAgICAgJ2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2Uu
Y3BwJywKICAgICAgICAgICAgICdsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291
cmNlLmgnLAogICAgICAgICAgICAgJ2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZS5jcHAnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiA0NjU2OCkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8J
KHdvcmtpbmcgY29weSkKQEAgLTE1MTMsNiArMTUxMyw3IEBAIEhFQURFUlMgKz0gXAogICAgIGlu
c3BlY3Rvci9KYXZhU2NyaXB0UHJvZmlsZS5oIFwKICAgICBpbnNwZWN0b3IvSmF2YVNjcmlwdFBy
b2ZpbGVOb2RlLmggXAogICAgIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAu
aCBcCisgICAgbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmggXAogICAgIGxv
YWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlLmggXAogICAgIGxvYWRlci9hcHBjYWNoZS9B
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuaCBcCiAgICAgbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlLmggXApAQCAtMzAzMyw2ICszMDM0LDcgQEAgSURMX0JJTkRJTkdTICs9
IFwKIFNPVVJDRVMgKz0gXAogICAgIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlLmNw
cCBcCiAgICAgbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAgXAorICAg
IGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAgXAogICAgIGxvYWRlci9h
cHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAgXAogICAgIGxvYWRlci9hcHBjYWNo
ZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuY3BwIFwKICAgICBsb2FkZXIvYXBwY2FjaGUvRE9N
QXBwbGljYXRpb25DYWNoZS5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wJKHJldmlzaW9uIDQ2NTY4
KQorKysgV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wJKHdvcmtpbmcgY29weSkKQEAgLTY3Niw2
ICs2NzYsNyBAQCBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGxpc3Qgb2YgZmlsZXMgbmVlCiAgICAg
PHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX0xPQURFUiI+CiAgICAgICAgIGxv
YWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlLmNwcAogICAgICAgICBsb2FkZXIvYXBwY2Fj
aGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcAorICAgICAgICBsb2FkZXIvYXBwY2FjaGUvQXBw
bGljYXRpb25DYWNoZUhvc3QuY3BwCiAgICAgICAgIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlv
bkNhY2hlUmVzb3VyY2UuY3BwCiAgICAgICAgIGxvYWRlci9hcHBjYWNoZS9ET01BcHBsaWNhdGlv
bkNhY2hlLmNwcAogICAgICAgICBsb2FkZXIvYXBwY2FjaGUvTWFuaWZlc3RQYXJzZXIuY3BwCklu
ZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDQ2NTY4KQor
KysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpA
QCAtMTcyOTYsNiArMTcyOTYsMTQgQEAKIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxl
DQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxhcHBjYWNoZVxBcHBsaWNhdGlvbkNhY2hl
SG9zdC5jcHAiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0
aXZlUGF0aD0iLi5cbG9hZGVyXGFwcGNhY2hlXEFwcGxpY2F0aW9uQ2FjaGVIb3N0LmgiDQorCQkJ
CQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9h
ZGVyXGFwcGNhY2hlXEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHAiDQogCQkJCQk+DQogCQkJ
CTwvRmlsZT4NCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gNDY1NjgpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzUyLDcgKzM1Miw3IEBACiAJCTFBOEY2QkMwMERC
NTVDREMwMDFEQjc5NCAvKiBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE4RjZCQjUwREI1NUNEQzAwMURC
Nzk0IC8qIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHAgKi87IH07CiAJCTFBOEY2QkMxMERC
NTVDREMwMDFEQjc5NCAvKiBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOEY2QkI2MERCNTVDREMwMDFEQjc5
NCAvKiBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuaCAqLzsgfTsKIAkJMUE4RjZCQzIwREI1NUNE
QzAwMURCNzk0IC8qIERPTUFwcGxpY2F0aW9uQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE4RjZCQjcwREI1NUNEQzAwMURCNzk0IC8qIERP
TUFwcGxpY2F0aW9uQ2FjaGUuY3BwICovOyB9OwotCQkxQThGNkJDMzBEQjU1Q0RDMDAxREI3OTQg
LyogRE9NQXBwbGljYXRpb25DYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUE4RjZCQjgwREI1NUNEQzAwMURCNzk0IC8qIERPTUFwcGxpY2F0aW9u
Q2FjaGUuaCAqLzsgfTsKKwkJMUE4RjZCQzMwREI1NUNEQzAwMURCNzk0IC8qIERPTUFwcGxpY2F0
aW9uQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFBOEY2QkI4MERCNTVDREMwMDFEQjc5NCAvKiBET01BcHBsaWNhdGlvbkNhY2hlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUE4RjZCQzUwREI1
NUNEQzAwMURCNzk0IC8qIE1hbmlmZXN0UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOEY2QkJBMERCNTVDREMwMDFEQjc5NCAvKiBNYW5p
ZmVzdFBhcnNlci5jcHAgKi87IH07CiAJCTFBOEY2QkM2MERCNTVDREMwMDFEQjc5NCAvKiBNYW5p
ZmVzdFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUE4RjZCQkIwREI1NUNEQzAwMURCNzk0IC8qIE1hbmlmZXN0UGFyc2VyLmggKi87IH07CiAJ
CTFBOTg5NTZCMEFBNzhGODAwMDVFRjVFRiAvKiBLVVJMQ0ZOZXQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5ODk1NkEwQUE3OEY4MDAwNUVGNUVG
IC8qIEtVUkxDRk5ldC5jcHAgKi87IH07CkBAIC01MjQsNiArNTI0LDggQEAKIAkJMUNGNkJFMTQw
RTlCQjQ2NzAwMjVFMUNEIC8qIE9iakNOb2RlRmlsdGVyQ29uZGl0aW9uLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUNGNkJFMTIwRTlCQjQ2NzAwMjVF
MUNEIC8qIE9iakNOb2RlRmlsdGVyQ29uZGl0aW9uLm1tICovOyB9OwogCQkxQ0Y2QkUxNTBFOUJC
NDY3MDAyNUUxQ0QgLyogT2JqQ05vZGVGaWx0ZXJDb25kaXRpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDRjZCRTEzMEU5QkI0NjcwMDI1RTFDRCAv
KiBPYmpDTm9kZUZpbHRlckNvbmRpdGlvbi5oICovOyB9OwogCQkxQ0ZBRTMyMzBBNkQ2QTNGMDAz
MjU5M0QgLyogbGlib2JqYy5keWxpYiBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFDRkFFMzIyMEE2RDZBM0YwMDMyNTkzRCAvKiBsaWJvYmpjLmR5bGli
ICovOyB9OworCQkyNEY1NEVBQzEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRpb25DYWNoZUhv
c3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjRG
NTRFQUExMDFGRTkxNDAwMEFFNzQxIC8qIEFwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcCAqLzsgfTsK
KwkJMjRGNTRFQUQxMDFGRTkxNDAwMEFFNzQxIC8qIEFwcGxpY2F0aW9uQ2FjaGVIb3N0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNEY1NEVBQjEwMUZF
OTE0MDAwQUU3NDEgLyogQXBwbGljYXRpb25DYWNoZUhvc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyOUE4MTIyNjBGQkI5QzFEMDA1MTAyOTMg
LyogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOUE4MTIwODBGQkI5QzFEMDA1MTAyOTMgLyogQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdC5jcHAgKi87IH07CiAJCTI5QTgxMjI3MEZCQjlDMUQwMDUxMDI5
MyAvKiBBY2Nlc3NpYmlsaXR5VGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMjlBODEyMDkwRkJCOUMxRDAwNTEwMjkzIC8qIEFjY2Vzc2liaWxp
dHlUYWJsZS5jcHAgKi87IH07CiAJCTI5QTgxMjI4MEZCQjlDMUQwMDUxMDI5MyAvKiBBY2Nlc3Np
YmlsaXR5QVJJQUdyaWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMjlBODEyMEEwRkJCOUMxRDAwNTEwMjkzIC8qIEFjY2Vzc2liaWxpdHlBUklBR3Jp
ZC5jcHAgKi87IH07CkBAIC01NDg3LDYgKzU0ODksOCBAQAogCQkxQ0Y2QkUxMjBFOUJCNDY3MDAy
NUUxQ0QgLyogT2JqQ05vZGVGaWx0ZXJDb25kaXRpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBPYmpDTm9kZUZpbHRlckNvbmRpdGlvbi5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNGNkJFMTMwRTlCQjQ2NzAwMjVFMUNEIC8qIE9iakNOb2Rl
RmlsdGVyQ29uZGl0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9iakNO
b2RlRmlsdGVyQ29uZGl0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDRkFF
MzIyMEE2RDZBM0YwMDMyNTkzRCAvKiBsaWJvYmpjLmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IG5h
bWUgPSBsaWJvYmpjLmR5bGliOyBwYXRoID0gL3Vzci9saWIvbGlib2JqYy5keWxpYjsgc291cmNl
VHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKKwkJMjRGNTRFQUExMDFGRTkxNDAwMEFFNzQxIC8qIEFw
cGxpY2F0aW9uQ2FjaGVIb3N0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEFwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMjRGNTRFQUIxMDFGRTkxNDAwMEFFNzQxIC8qIEFwcGxpY2F0aW9uQ2FjaGVIb3N0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFwcGxpY2F0aW9uQ2FjaGVIb3N0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI5QTgxMjA4MEZCQjlDMUQwMDUxMDI5MyAvKiBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyOUE4MTIwOTBGQkI5QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eVRh
YmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFjY2Vzc2liaWxp
dHlUYWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI5QTgxMjBBMEZCQjlD
MUQwMDUxMDI5MyAvKiBBY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk3MDgsNiArOTcxMiw4IEBACiAJCTFBOEY2QkIwMERCNTVD
REMwMDFEQjc5NCAvKiBhcHBjYWNoZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCisJCQkJMjRGNTRFQUExMDFGRTkxNDAwMEFFNzQxIC8qIEFwcGxpY2F0aW9uQ2Fj
aGVIb3N0LmNwcCAqLywKKwkJCQkyNEY1NEVBQjEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRp
b25DYWNoZUhvc3QuaCAqLywKIAkJCQkxQThGNkJCMTBEQjU1Q0RDMDAxREI3OTQgLyogQXBwbGlj
YXRpb25DYWNoZS5jcHAgKi8sCiAJCQkJMUE4RjZCQjIwREI1NUNEQzAwMURCNzk0IC8qIEFwcGxp
Y2F0aW9uQ2FjaGUuaCAqLywKIAkJCQkxQThGNkJCMzBEQjU1Q0RDMDAxREI3OTQgLyogQXBwbGlj
YXRpb25DYWNoZUdyb3VwLmNwcCAqLywKQEAgLTE3MDYyLDYgKzE3MDY4LDcgQEAKIAkJCQlDRTU0
RkQzODEwMTZEOUE2MDA4QjQ0QzggLyogU2NyaXB0U291cmNlUHJvdmlkZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTdBNzRFQ0JCMTAxODM5QTYwMEJGOTM5RSAvKiBJbnNwZWN0b3JCYWNrZW5kLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3QTFFODhGNjEwMUNDMzg0MDAwQzRERjUgLyogU2NyaXB0QXJy
YXkuaCBpbiBIZWFkZXJzICovLAorCQkJCTI0RjU0RUFEMTAxRkU5MTQwMDBBRTc0MSAvKiBBcHBs
aWNhdGlvbkNhY2hlSG9zdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFBM0Q1OEYxMDFDMTUyRDAw
MzE2RDA3IC8qIERlZGljYXRlZFdvcmtlclRocmVhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwog
CQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkBAIC0xOTEwNCw2ICsx
OTExMSw3IEBACiAJCQkJN0E3NEVDQkExMDE4MzlBNjAwQkY5MzlFIC8qIEluc3BlY3RvckJhY2tl
bmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0E3NEVDQkQxMDE4MzlEQTAwQkY5MzlFIC8qIEpT
SW5zcGVjdG9yQmFja2VuZEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QTFFODhGNTEw
MUNDMzg0MDAwQzRERjUgLyogU2NyaXB0QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMjRG
NTRFQUMxMDFGRTkxNDAwMEFFNzQxIC8qIEFwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTQxQTNENThFMTAxQzE1MkQwMDMxNkQwNyAvKiBEZWRpY2F0ZWRXb3JrZXJU
aHJlYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEh0bWxFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEh0bWxFbGVtZW50LmNwcAkocmV2aXNp
b24gNDY1NjgpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEh0bWxFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjMsOCArMjMsMTMgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJI
VE1MSHRtbEVsZW1lbnQuaCIKIAotI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVHcm91cC5oIgor
I2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisjaW5jbHVkZSAiQXBwbGljYXRp
b25DYWNoZUhvc3QuaCIKKyNlbmRpZgorCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRl
ICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTY4LDEyICs3MywxNiBAQCB2b2lkIEhU
TUxIdG1sRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lCiAgICAgaWYgKCFkb2N1bWVudCgpLT5m
cmFtZSgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRM
b2FkZXIgPSBkb2N1bWVudCgpLT5mcmFtZSgpLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKTsK
KyAgICBpZiAoIWRvY3VtZW50TG9hZGVyKQorICAgICAgICByZXR1cm47CisKICAgICAvLyBDaGVj
ayB0aGUgbWFuaWZlc3QgYXR0cmlidXRlCiAgICAgQXRvbWljU3RyaW5nIG1hbmlmZXN0ID0gZ2V0
QXR0cmlidXRlKG1hbmlmZXN0QXR0cik7Ci0gICAgaWYgKG1hbmlmZXN0LmlzTnVsbCgpKQotICAg
ICAgICBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OnNlbGVjdENhY2hlV2l0aG91dE1hbmlmZXN0VVJM
KGRvY3VtZW50KCktPmZyYW1lKCkpOworICAgIGlmIChtYW5pZmVzdC5pc0VtcHR5KCkpCisgICAg
ICAgIGRvY3VtZW50TG9hZGVyLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5zZWxlY3RDYWNoZVdp
dGhvdXRNYW5pZmVzdCgpOwogICAgIGVsc2UKLSAgICAgICAgQXBwbGljYXRpb25DYWNoZUdyb3Vw
OjpzZWxlY3RDYWNoZShkb2N1bWVudCgpLT5mcmFtZSgpLCBkb2N1bWVudCgpLT5jb21wbGV0ZVVS
TChtYW5pZmVzdCkpOworICAgICAgICBkb2N1bWVudExvYWRlci0+YXBwbGljYXRpb25DYWNoZUhv
c3QoKS0+c2VsZWN0Q2FjaGVXaXRoTWFuaWZlc3QoZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwobWFu
aWZlc3QpKTsKIH0KICNlbmRpZgogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCShy
ZXZpc2lvbiA0NjU2OCkKKysrIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjksMTEgKzI5LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJEb2N1bWVudExvYWRlci5oIgogCi0jaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FU
SU9OUykKLSNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlLmgiCi0jaW5jbHVkZSAiQXBwbGljYXRp
b25DYWNoZUdyb3VwLmgiCi0jaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmgiCi0j
ZW5kaWYKICNpbmNsdWRlICJBcmNoaXZlRmFjdG9yeS5oIgogI2luY2x1ZGUgIkFyY2hpdmVSZXNv
dXJjZUNvbGxlY3Rpb24uaCIKICNpbmNsdWRlICJDYWNoZWRQYWdlLmgiCkBAIC0xNTMsNyArMTQ4
LDcgQEAgRG9jdW1lbnRMb2FkZXI6OkRvY3VtZW50TG9hZGVyKGNvbnN0IFJlcwogICAgICwgbV9z
dWJzdGl0dXRlUmVzb3VyY2VEZWxpdmVyeVRpbWVyKHRoaXMsICZEb2N1bWVudExvYWRlcjo6c3Vi
c3RpdHV0ZVJlc291cmNlRGVsaXZlcnlUaW1lckZpcmVkKQogICAgICwgbV9kaWRDcmVhdGVHbG9i
YWxIaXN0b3J5RW50cnkoZmFsc2UpCiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9O
UykKLSAgICAsIG1fY2FuZGlkYXRlQXBwbGljYXRpb25DYWNoZUdyb3VwKDApCisgICAgLCBtX2Fw
cGxpY2F0aW9uQ2FjaGVIb3N0KHRoaXMpCiAjZW5kaWYKIHsKIH0KQEAgLTE2OCwxMyArMTYzLDYg
QEAgRnJhbWVMb2FkZXIqIERvY3VtZW50TG9hZGVyOjpmcmFtZUxvYWRlcgogRG9jdW1lbnRMb2Fk
ZXI6On5Eb2N1bWVudExvYWRlcigpCiB7CiAgICAgQVNTRVJUKCFtX2ZyYW1lIHx8IGZyYW1lTG9h
ZGVyKCktPmFjdGl2ZURvY3VtZW50TG9hZGVyKCkgIT0gdGhpcyB8fCAhZnJhbWVMb2FkZXIoKS0+
aXNMb2FkaW5nKCkpOwotICAgIAotI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMp
Ci0gICAgaWYgKG1fYXBwbGljYXRpb25DYWNoZSkKLSAgICAgICAgbV9hcHBsaWNhdGlvbkNhY2hl
LT5ncm91cCgpLT5kaXNhc3NvY2lhdGVEb2N1bWVudExvYWRlcih0aGlzKTsKLSAgICBlbHNlIGlm
IChtX2NhbmRpZGF0ZUFwcGxpY2F0aW9uQ2FjaGVHcm91cCkKLSAgICAgICAgbV9jYW5kaWRhdGVB
cHBsaWNhdGlvbkNhY2hlR3JvdXAtPmRpc2Fzc29jaWF0ZURvY3VtZW50TG9hZGVyKHRoaXMpOwot
I2VuZGlmCiB9CiAKIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBEb2N1bWVudExvYWRlcjo6bWFp
blJlc291cmNlRGF0YSgpIGNvbnN0CkBAIC0yNTgsMTQgKzI0Niw3IEBAIHZvaWQgRG9jdW1lbnRM
b2FkZXI6Om1haW5SZWNlaXZlZEVycm9yKGMKICAgICBBU1NFUlQoIWVycm9yLmlzTnVsbCgpKTsK
IAogI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCi0gICAgQXBwbGljYXRpb25D
YWNoZUdyb3VwKiBncm91cCA9IG1fY2FuZGlkYXRlQXBwbGljYXRpb25DYWNoZUdyb3VwOwotICAg
IGlmICghZ3JvdXAgJiYgbV9hcHBsaWNhdGlvbkNhY2hlKSB7Ci0gICAgICAgIEFTU0VSVCghbWFp
blJlc291cmNlQXBwbGljYXRpb25DYWNoZSgpKTsgLy8gSWYgdGhlIG1haW4gcmVzb3VyY2Ugd2Vy
ZSBsb2FkZWQgZnJvbSBhIGNhY2hlLCBpdCB3b3VsZG4ndCBmYWlsLgotICAgICAgICBncm91cCA9
IG1fYXBwbGljYXRpb25DYWNoZS0+Z3JvdXAoKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGdyb3Vw
KQotICAgICAgICBncm91cC0+ZmFpbGVkTG9hZGluZ01haW5SZXNvdXJjZSh0aGlzKTsKKyAgICBt
X2FwcGxpY2F0aW9uQ2FjaGVIb3N0LmZhaWxlZExvYWRpbmdNYWluUmVzb3VyY2UoKTsKICNlbmRp
ZgogICAgIAogICAgIGlmICghZnJhbWVMb2FkZXIoKSkKQEAgLTQzMCw2ICs0MTEsOSBAQCB2b2lk
IERvY3VtZW50TG9hZGVyOjphdHRhY2hUb0ZyYW1lKCkKIHZvaWQgRG9jdW1lbnRMb2FkZXI6OmRl
dGFjaEZyb21GcmFtZSgpCiB7CiAgICAgQVNTRVJUKG1fZnJhbWUpOworI2lmIEVOQUJMRShPRkZM
SU5FX1dFQl9BUFBMSUNBVElPTlMpCisgICAgbV9hcHBsaWNhdGlvbkNhY2hlSG9zdC5zZXRET01B
cHBsaWNhdGlvbkNhY2hlKDApOworI2VuZGlmCiAgICAgbV9mcmFtZSA9IDA7CiB9CiAKQEAgLTQ1
MSw5ICs0MzUsNiBAQCB2b2lkIERvY3VtZW50TG9hZGVyOjpzZXRQcmltYXJ5TG9hZENvbXBsCiAg
ICAgaWYgKGZsYWcpIHsKICAgICAgICAgaWYgKG1fbWFpblJlc291cmNlTG9hZGVyKSB7CiAgICAg
ICAgICAgICBtX21haW5SZXNvdXJjZURhdGEgPSBtX21haW5SZXNvdXJjZUxvYWRlci0+cmVzb3Vy
Y2VEYXRhKCk7Ci0jaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLSAgICAgICAg
ICAgIG1fbWFpblJlc291cmNlQXBwbGljYXRpb25DYWNoZSA9IG1fbWFpblJlc291cmNlTG9hZGVy
LT5hcHBsaWNhdGlvbkNhY2hlKCk7Ci0jZW5kaWYKICAgICAgICAgICAgIG1fbWFpblJlc291cmNl
TG9hZGVyID0gMDsKICAgICAgICAgfQogCkBAIC04NDcsMTEzICs4MjgsNCBAQCB2b2lkIERvY3Vt
ZW50TG9hZGVyOjppY29uTG9hZERlY2lzaW9uQXZhCiAgICAgICAgIG1fZnJhbWUtPmxvYWRlcigp
LT5pY29uTG9hZERlY2lzaW9uQXZhaWxhYmxlKCk7CiB9CiAKLSNpZiBFTkFCTEUoT0ZGTElORV9X
RUJfQVBQTElDQVRJT05TKQotdm9pZCBEb2N1bWVudExvYWRlcjo6c2V0Q2FuZGlkYXRlQXBwbGlj
YXRpb25DYWNoZUdyb3VwKEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogZ3JvdXApCi17Ci0gICAgQVNT
RVJUKCFtX2FwcGxpY2F0aW9uQ2FjaGUpOwotICAgIG1fY2FuZGlkYXRlQXBwbGljYXRpb25DYWNo
ZUdyb3VwID0gZ3JvdXA7Ci19Ci0gICAgCi12b2lkIERvY3VtZW50TG9hZGVyOjpzZXRBcHBsaWNh
dGlvbkNhY2hlKFBhc3NSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gYXBwbGljYXRpb25DYWNoZSkK
LXsKLSAgICBpZiAobV9jYW5kaWRhdGVBcHBsaWNhdGlvbkNhY2hlR3JvdXApIHsKLSAgICAgICAg
QVNTRVJUKCFtX2FwcGxpY2F0aW9uQ2FjaGUpOwotICAgICAgICBtX2NhbmRpZGF0ZUFwcGxpY2F0
aW9uQ2FjaGVHcm91cCA9IDA7Ci0gICAgfQotCi0gICAgbV9hcHBsaWNhdGlvbkNhY2hlID0gYXBw
bGljYXRpb25DYWNoZTsKLX0KLQotQXBwbGljYXRpb25DYWNoZSogRG9jdW1lbnRMb2FkZXI6Om1h
aW5SZXNvdXJjZUFwcGxpY2F0aW9uQ2FjaGUoKSBjb25zdAotewotICAgIGlmIChtX21haW5SZXNv
dXJjZUFwcGxpY2F0aW9uQ2FjaGUpCi0gICAgICAgIHJldHVybiBtX21haW5SZXNvdXJjZUFwcGxp
Y2F0aW9uQ2FjaGUuZ2V0KCk7Ci0gICAgaWYgKG1fbWFpblJlc291cmNlTG9hZGVyKQotICAgICAg
ICByZXR1cm4gbV9tYWluUmVzb3VyY2VMb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGUoKTsKLSAgICBy
ZXR1cm4gMDsKLX0KLQotYm9vbCBEb2N1bWVudExvYWRlcjo6c2hvdWxkTG9hZFJlc291cmNlRnJv
bUFwcGxpY2F0aW9uQ2FjaGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2UqJiByZXNvdXJjZSkKLXsKLSAgICBBcHBsaWNhdGlvbkNhY2hlKiBj
YWNoZSA9IGFwcGxpY2F0aW9uQ2FjaGUoKTsKLSAgICBpZiAoIWNhY2hlIHx8ICFjYWNoZS0+aXND
b21wbGV0ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBJZiB0aGUgcmVzb3Vy
Y2UgaXMgbm90IGEgSFRUUC9IVFRQUyBHRVQsIHRoZW4gYWJvcnQKLSAgICBpZiAoIUFwcGxpY2F0
aW9uQ2FjaGU6OnJlcXVlc3RJc0hUVFBPckhUVFBTR2V0KHJlcXVlc3QpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAvLyBJZiB0aGUgcmVzb3VyY2UncyBVUkwgaXMgYW4gbWFzdGVyIGVu
dHJ5LCB0aGUgbWFuaWZlc3QsIGFuIGV4cGxpY2l0IGVudHJ5LCBvciBhIGZhbGxiYWNrIGVudHJ5
Ci0gICAgLy8gaW4gdGhlIGFwcGxpY2F0aW9uIGNhY2hlLCB0aGVuIGdldCB0aGUgcmVzb3VyY2Ug
ZnJvbSB0aGUgY2FjaGUgKGluc3RlYWQgb2YgZmV0Y2hpbmcgaXQpLgotICAgIHJlc291cmNlID0g
Y2FjaGUtPnJlc291cmNlRm9yVVJMKHJlcXVlc3QudXJsKCkpOwotCi0gICAgLy8gUmVzb3VyY2Vz
IHRoYXQgbWF0Y2ggZmFsbGJhY2sgbmFtZXNwYWNlcyBvciBvbmxpbmUgd2hpdGVsaXN0IGVudHJp
ZXMgYXJlIGZldGNoZWQgZnJvbSB0aGUgbmV0d29yaywKLSAgICAvLyB1bmxlc3MgdGhleSBhcmUg
YWxzbyBjYWNoZWQuCi0gICAgaWYgKCFyZXNvdXJjZSAmJiAoY2FjaGUtPnVybE1hdGNoZXNGYWxs
YmFja05hbWVzcGFjZShyZXF1ZXN0LnVybCgpKSB8fCBjYWNoZS0+aXNVUkxJbk9ubGluZVdoaXRl
bGlzdChyZXF1ZXN0LnVybCgpKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFJl
c291cmNlcyB0aGF0IGFyZSBub3QgcHJlc2VudCBpbiB0aGUgbWFuaWZlc3Qgd2lsbCBhbHdheXMg
ZmFpbCB0byBsb2FkIChhdCBsZWFzdCwgYWZ0ZXIgdGhlCi0gICAgLy8gY2FjaGUgaGFzIGJlZW4g
cHJpbWVkIHRoZSBmaXJzdCB0aW1lKSwgbWFraW5nIHRoZSB0ZXN0aW5nIG9mIG9mZmxpbmUgYXBw
bGljYXRpb25zIHNpbXBsZXIuCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRG9jdW1lbnRM
b2FkZXI6OmdldEFwcGxpY2F0aW9uQ2FjaGVGYWxsYmFja1Jlc291cmNlKGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiYgcmVzb3VyY2UsIEFw
cGxpY2F0aW9uQ2FjaGUqIGNhY2hlKQotewotICAgIGlmICghY2FjaGUpIHsKLSAgICAgICAgY2Fj
aGUgPSBhcHBsaWNhdGlvbkNhY2hlKCk7Ci0gICAgICAgIGlmICghY2FjaGUpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmICghY2FjaGUtPmlzQ29tcGxldGUoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIC8vIElmIHRoZSByZXNvdXJjZSBpcyBub3Qg
YSBIVFRQL0hUVFBTIEdFVCwgdGhlbiBhYm9ydAotICAgIGlmICghQXBwbGljYXRpb25DYWNoZTo6
cmVxdWVzdElzSFRUUE9ySFRUUFNHZXQocmVxdWVzdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIEtVUkwgZmFsbGJhY2tVUkw7Ci0gICAgaWYgKCFjYWNoZS0+dXJsTWF0Y2hlc0ZhbGxi
YWNrTmFtZXNwYWNlKHJlcXVlc3QudXJsKCksICZmYWxsYmFja1VSTCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIHJlc291cmNlID0gY2FjaGUtPnJlc291cmNlRm9yVVJMKGZhbGxiYWNr
VVJMKTsKLSAgICBBU1NFUlQocmVzb3VyY2UpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgRG9jdW1lbnRMb2FkZXI6OnNjaGVkdWxlQXBwbGljYXRpb25DYWNoZUxvYWQoUmVzb3VyY2VM
b2FkZXIqIGxvYWRlciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBLVVJM
JiBvcmlnaW5hbFVSTCkKLXsKLSAgICBpZiAoIWZyYW1lTG9hZGVyKCktPmZyYW1lKCktPnNldHRp
bmdzKCkgfHwgIWZyYW1lTG9hZGVyKCktPmZyYW1lKCktPnNldHRpbmdzKCktPm9mZmxpbmVXZWJB
cHBsaWNhdGlvbkNhY2hlRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0g
ICAgaWYgKHJlcXVlc3QudXJsKCkgIT0gb3JpZ2luYWxVUkwpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2U7Ci0gICAgaWYgKCFz
aG91bGRMb2FkUmVzb3VyY2VGcm9tQXBwbGljYXRpb25DYWNoZShyZXF1ZXN0LCByZXNvdXJjZSkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBtX3BlbmRpbmdTdWJzdGl0dXRlUmVz
b3VyY2VzLnNldChsb2FkZXIsIHJlc291cmNlKTsKLSAgICBkZWxpdmVyU3Vic3RpdHV0ZVJlc291
cmNlc0FmdGVyRGVsYXkoKTsKLSAgICAgICAgCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wg
RG9jdW1lbnRMb2FkZXI6OnNjaGVkdWxlTG9hZEZhbGxiYWNrUmVzb3VyY2VGcm9tQXBwbGljYXRp
b25DYWNoZShSZXNvdXJjZUxvYWRlciogbG9hZGVyLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QsIEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlKQotewotICAgIGlmICghZnJhbWVMb2FkZXIo
KS0+ZnJhbWUoKS0+c2V0dGluZ3MoKSB8fCAhZnJhbWVMb2FkZXIoKS0+ZnJhbWUoKS0+c2V0dGlu
Z3MoKS0+b2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2U7Ci0gICAg
aWYgKCFnZXRBcHBsaWNhdGlvbkNhY2hlRmFsbGJhY2tSZXNvdXJjZShyZXF1ZXN0LCByZXNvdXJj
ZSwgY2FjaGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX3BlbmRpbmdTdWJzdGl0
dXRlUmVzb3VyY2VzLnNldChsb2FkZXIsIHJlc291cmNlKTsKLSAgICBkZWxpdmVyU3Vic3RpdHV0
ZVJlc291cmNlc0FmdGVyRGVsYXkoKTsKLSAgICAgICAgCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LSNlbmRpZiAvLyBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotCiB9CkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9h
ZGVyL0RvY3VtZW50TG9hZGVyLmgJKHJldmlzaW9uIDQ2NTY4KQorKysgV2ViQ29yZS9sb2FkZXIv
RG9jdW1lbnRMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksMTAgQEAKICNpZm5k
ZWYgRG9jdW1lbnRMb2FkZXJfaAogI2RlZmluZSBEb2N1bWVudExvYWRlcl9oCiAKKyNpZiBFTkFC
TEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVI
b3N0LmgiCisjZW5kaWYKKwogI2luY2x1ZGUgIk5hdmlnYXRpb25BY3Rpb24uaCIKICNpbmNsdWRl
ICJSZXNvdXJjZUVycm9yLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCkBAIC0zOCw5
ICs0Miw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIEFwcGxpY2F0aW9u
Q2FjaGU7Ci0gICAgY2xhc3MgQXBwbGljYXRpb25DYWNoZUdyb3VwOwotICAgIGNsYXNzIEFwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZTsKICAgICBjbGFzcyBBcmNoaXZlOwogICAgIGNsYXNzIEFyY2hp
dmVSZXNvdXJjZTsKICAgICBjbGFzcyBBcmNoaXZlUmVzb3VyY2VDb2xsZWN0aW9uOwpAQCAtMjA3
LDE4ICsyMDgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgdGFrZU1lbW9y
eUNhY2hlTG9hZHNGb3JDbGllbnROb3RpZmljYXRpb24oVmVjdG9yPFN0cmluZz4mIGxvYWRzKTsK
IAogI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCi0gICAgICAgIGJvb2wgc2No
ZWR1bGVBcHBsaWNhdGlvbkNhY2hlTG9hZChSZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYsIGNvbnN0IEtVUkwmIG9yaWdpbmFsVVJMKTsKLSAgICAgICAgYm9vbCBzY2hlZHVs
ZUxvYWRGYWxsYmFja1Jlc291cmNlRnJvbUFwcGxpY2F0aW9uQ2FjaGUoUmVzb3VyY2VMb2FkZXIq
LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBBcHBsaWNhdGlvbkNhY2hlKiA9IDApOwotICAgICAg
ICBib29sIHNob3VsZExvYWRSZXNvdXJjZUZyb21BcHBsaWNhdGlvbkNhY2hlKGNvbnN0IFJlc291
cmNlUmVxdWVzdCYsIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSomKTsKLSAgICAgICAgYm9vbCBn
ZXRBcHBsaWNhdGlvbkNhY2hlRmFsbGJhY2tSZXNvdXJjZShjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
LCBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqJiwgQXBwbGljYXRpb25DYWNoZSogPSAwKTsKLSAg
ICAgICAgCi0gICAgICAgIHZvaWQgc2V0Q2FuZGlkYXRlQXBwbGljYXRpb25DYWNoZUdyb3VwKEFw
cGxpY2F0aW9uQ2FjaGVHcm91cCogZ3JvdXApOwotICAgICAgICBBcHBsaWNhdGlvbkNhY2hlR3Jv
dXAqIGNhbmRpZGF0ZUFwcGxpY2F0aW9uQ2FjaGVHcm91cCgpIGNvbnN0IHsgcmV0dXJuIG1fY2Fu
ZGlkYXRlQXBwbGljYXRpb25DYWNoZUdyb3VwOyB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIHNl
dEFwcGxpY2F0aW9uQ2FjaGUoUGFzc1JlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBhcHBsaWNhdGlv
bkNhY2hlKTsKLSAgICAgICAgQXBwbGljYXRpb25DYWNoZSogYXBwbGljYXRpb25DYWNoZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYXBwbGljYXRpb25DYWNoZS5nZXQoKTsgfQotCi0gICAgICAgIEFwcGxp
Y2F0aW9uQ2FjaGUqIG1haW5SZXNvdXJjZUFwcGxpY2F0aW9uQ2FjaGUoKSBjb25zdDsKKyAgICAg
ICAgQXBwbGljYXRpb25DYWNoZUhvc3QqIGFwcGxpY2F0aW9uQ2FjaGVIb3N0KCkgeyByZXR1cm4g
Jm1fYXBwbGljYXRpb25DYWNoZUhvc3Q7IH0KICNlbmRpZgogCiAgICAgcHJvdGVjdGVkOgpAQCAt
MzA2LDE2ICsyOTYsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFN0cmluZyBtX2Ns
aWVudFJlZGlyZWN0U291cmNlRm9ySGlzdG9yeTsKICAgICAgICAgYm9vbCBtX2RpZENyZWF0ZUds
b2JhbEhpc3RvcnlFbnRyeTsKIAotI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMp
ICAKLSAgICAgICAgLy8gVGhlIGFwcGxpY2F0aW9uIGNhY2hlIHRoYXQgdGhlIGRvY3VtZW50IGxv
YWRlciBpcyBhc3NvY2lhdGVkIHdpdGggKGlmIGFueSkuCi0gICAgICAgIFJlZlB0cjxBcHBsaWNh
dGlvbkNhY2hlPiBtX2FwcGxpY2F0aW9uQ2FjaGU7Ci0gICAgICAgIAotICAgICAgICAvLyBCZWZv
cmUgYW4gYXBwbGljYXRpb24gY2FjaGUgaGFzIGZpbmlzaGVkIGxvYWRpbmcsIHRoaXMgd2lsbCBi
ZSB0aGUgY2FuZGlkYXRlIGFwcGxpY2F0aW9uCi0gICAgICAgIC8vIGdyb3VwIHRoYXQgdGhlIGRv
Y3VtZW50IGxvYWRlciBpcyBhc3NvY2lhdGVkIHdpdGguCi0gICAgICAgIEFwcGxpY2F0aW9uQ2Fj
aGVHcm91cCogbV9jYW5kaWRhdGVBcHBsaWNhdGlvbkNhY2hlR3JvdXA7Ci0gICAgICAgIAotICAg
ICAgICAvLyBPbmNlIHRoZSBtYWluIHJlc291cmNlIGhhcyBmaW5pc2hlZCBsb2FkaW5nLCB0aGlz
IGlzIHRoZSBhcHBsaWNhdGlvbiBjYWNoZSBpdCB3YXMgbG9hZGVkIGZyb20gKGlmIGFueSkuCi0g
ICAgICAgIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBtX21haW5SZXNvdXJjZUFwcGxpY2F0aW9u
Q2FjaGU7CisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyAgICAgICAgZnJp
ZW5kIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OyAgLy8gZm9yIHN1YnN0aXR1dGUgcmVzb3Vy
Y2UgZGVsaXZlcnkKKyAgICAgICAgQXBwbGljYXRpb25DYWNoZUhvc3QgbV9hcHBsaWNhdGlvbkNh
Y2hlSG9zdDsKICNlbmRpZgogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJl
dmlzaW9uIDQ2NTY4KQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05NSw4ICs5NSw3IEBACiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgog
CiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLSNpbmNsdWRlICJBcHBsaWNh
dGlvbkNhY2hlLmgiCi0jaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmgiCisjaW5j
bHVkZSAiQXBwbGljYXRpb25DYWNoZUhvc3QuaCIKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNWRykK
QEAgLTE4MTYsOCArMTgxNSw3IEBAIGJvb2wgRnJhbWVMb2FkZXI6OmNhbkNhY2hlUGFnZUNvbnRh
aW5pbmcKICNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQogICAgICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIGludmVzdGlnYXRpbmcgY2FjaGluZyBmcmFtZXMgdGhhdCBoYXZlIGFu
IGFzc29jaWF0ZWQKICAgICAgICAgLy8gYXBwbGljYXRpb24gY2FjaGUuIDxyZGFyOi8vcHJvYmxl
bS81OTE3ODk5PiB0cmFja3MgdGhhdCB3b3JrLgotICAgICAgICAmJiAhbV9kb2N1bWVudExvYWRl
ci0+YXBwbGljYXRpb25DYWNoZSgpCi0gICAgICAgICYmICFtX2RvY3VtZW50TG9hZGVyLT5jYW5k
aWRhdGVBcHBsaWNhdGlvbkNhY2hlR3JvdXAoKQorICAgICAgICAmJiBtX2RvY3VtZW50TG9hZGVy
LT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5jYW5DYWNoZUluUGFnZUNhY2hlKCkKICNlbmRpZgog
I2lmIEVOQUJMRShXTUwpCiAgICAgICAgICYmICFmcmFtZUNvbnRhaW5zV01MQ29udGVudChtX2Zy
YW1lKQpAQCAtMTk2NywxMCArMTk2NSw4IEBAIGJvb2wgRnJhbWVMb2FkZXI6OmxvZ0NhbkNhY2hl
RnJhbWVEZWNpc2kKICAgICAgICAgaWYgKCFtX2ZyYW1lLT5kb2N1bWVudCgpLT5jYW5TdXNwZW5k
QWN0aXZlRE9NT2JqZWN0cygpKQogICAgICAgICAgICAgeyBQQ0xPRygiICAgLVRoZSBkb2N1bWVu
dCBjYW5ub3Qgc3VzcGVjdCBpdHMgYWN0aXZlIERPTSBPYmplY3RzIik7IGNhbm5vdENhY2hlID0g
dHJ1ZTsgfQogI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCi0gICAgICAgIGlm
IChtX2RvY3VtZW50TG9hZGVyLT5hcHBsaWNhdGlvbkNhY2hlKCkpCi0gICAgICAgICAgICB7IFBD
TE9HKCIgICAtVGhlIERvY3VtZW50TG9hZGVyIGhhcyBhbiBhY3RpdmUgYXBwbGljYXRpb24gY2Fj
aGUiKTsgY2Fubm90Q2FjaGUgPSB0cnVlOyB9Ci0gICAgICAgIGlmIChtX2RvY3VtZW50TG9hZGVy
LT5jYW5kaWRhdGVBcHBsaWNhdGlvbkNhY2hlR3JvdXAoKSkKLSAgICAgICAgICAgIHsgUENMT0co
IiAgIC1UaGUgRG9jdW1lbnRMb2FkZXIgaGFzIGEgY2FuZGlkYXRlQXBwbGljYXRpb25DYWNoZUdy
b3VwIik7IGNhbm5vdENhY2hlID0gdHJ1ZTsgfQorICAgICAgICBpZiAoIW1fZG9jdW1lbnRMb2Fk
ZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPmNhbkNhY2hlSW5QYWdlQ2FjaGUoKSkKKyAgICAg
ICAgICAgIHsgUENMT0coIiAgIC1UaGUgRG9jdW1lbnRMb2FkZXIgdXNlcyBhbiBhcHBsaWNhdGlv
biBjYWNoZSIpOyBjYW5ub3RDYWNoZSA9IHRydWU7IH0KICNlbmRpZgogICAgICAgICBpZiAoIW1f
Y2xpZW50LT5jYW5DYWNoZVBhZ2UoKSkKICAgICAgICAgICAgIHsgUENMT0coIiAgIC1UaGUgY2xp
ZW50IHNheXMgdGhpcyBmcmFtZSBjYW5ub3QgYmUgY2FjaGVkIik7IGNhbm5vdENhY2hlID0gdHJ1
ZTsgfQpAQCAtMzY4MSwzMCArMzY3NywxMSBAQCB1bnNpZ25lZCBsb25nIEZyYW1lTG9hZGVyOjps
b2FkUmVzb3VyY2VTCiAgICAgICAgIEFTU0VSVCghbmV3UmVxdWVzdC5pc051bGwoKSk7CiAgICAg
ICAgIAogI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCi0gICAgICAgIEFwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2U7Ci0gICAgICAgIGlmIChkb2N1bWVudExvYWRl
cigpLT5zaG91bGRMb2FkUmVzb3VyY2VGcm9tQXBwbGljYXRpb25DYWNoZShuZXdSZXF1ZXN0LCBy
ZXNvdXJjZSkpIHsKLSAgICAgICAgICAgIGlmIChyZXNvdXJjZSkgewotICAgICAgICAgICAgICAg
IHJlc3BvbnNlID0gcmVzb3VyY2UtPnJlc3BvbnNlKCk7Ci0gICAgICAgICAgICAgICAgZGF0YS5h
cHBlbmQocmVzb3VyY2UtPmRhdGEoKS0+ZGF0YSgpLCByZXNvdXJjZS0+ZGF0YSgpLT5zaXplKCkp
OwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgZXJyb3IgPSBjYW5ub3RTaG93
VVJMRXJyb3IobmV3UmVxdWVzdCk7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghZG9j
dW1lbnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+bWF5YmVMb2FkU3luY2hyb25v
dXNseShuZXdSZXF1ZXN0LCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpKSB7CiAjZW5kaWYKICAgICAg
ICAgICAgIFJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KG5ld1JlcXVl
c3QsIHN0b3JlZENyZWRlbnRpYWxzLCBlcnJvciwgcmVzcG9uc2UsIGRhdGEsIG1fZnJhbWUpOwot
CiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLSAgICAgICAgICAgIC8vIElm
IG5vcm1hbCBsb2FkaW5nIHJlc3VsdHMgaW4gYSByZWRpcmVjdCB0byBhIHJlc291cmNlIHdpdGgg
YW5vdGhlciBvcmlnaW4gKGluZGljYXRpdmUgb2YgYSBjYXB0aXZlIHBvcnRhbCksIG9yIGEgNHh4
IG9yIDV4eCBzdGF0dXMgY29kZSBvciBlcXVpdmFsZW50LAotICAgICAgICAgICAgLy8gb3IgaWYg
dGhlcmUgd2VyZSBuZXR3b3JrIGVycm9ycyAoYnV0IG5vdCBpZiB0aGUgdXNlciBjYW5jZWxlZCB0
aGUgZG93bmxvYWQpLCB0aGVuIGluc3RlYWQgZ2V0LCBmcm9tIHRoZSBjYWNoZSwgdGhlIHJlc291
cmNlIG9mIHRoZSBmYWxsYmFjayBlbnRyeQotICAgICAgICAgICAgLy8gY29ycmVzcG9uZGluZyB0
byB0aGUgbWF0Y2hlZCBuYW1lc3BhY2UuCi0gICAgICAgICAgICBpZiAoKCFlcnJvci5pc051bGwo
KSAmJiAhZXJyb3IuaXNDYW5jZWxsYXRpb24oKSkKLSAgICAgICAgICAgICAgICAgfHwgcmVzcG9u
c2UuaHR0cFN0YXR1c0NvZGUoKSAvIDEwMCA9PSA0IHx8IHJlc3BvbnNlLmh0dHBTdGF0dXNDb2Rl
KCkgLyAxMDAgPT0gNQotICAgICAgICAgICAgICAgICB8fCAhcHJvdG9jb2xIb3N0QW5kUG9ydEFy
ZUVxdWFsKG5ld1JlcXVlc3QudXJsKCksIHJlc3BvbnNlLnVybCgpKSkgewotICAgICAgICAgICAg
ICAgIGlmIChkb2N1bWVudExvYWRlcigpLT5nZXRBcHBsaWNhdGlvbkNhY2hlRmFsbGJhY2tSZXNv
dXJjZShuZXdSZXF1ZXN0LCByZXNvdXJjZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzcG9u
c2UgPSByZXNvdXJjZS0+cmVzcG9uc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgZGF0YS5jbGVh
cigpOwotICAgICAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZChyZXNvdXJjZS0+ZGF0YSgpLT5k
YXRhKCksIHJlc291cmNlLT5kYXRhKCktPnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNo
ZUhvc3QoKS0+bWF5YmVMb2FkRmFsbGJhY2tTeW5jaHJvbm91c2x5KG5ld1JlcXVlc3QsIGVycm9y
LCByZXNwb25zZSwgZGF0YSk7CiAgICAgICAgIH0KICNlbmRpZgogICAgIH0KSW5kZXg6IFdlYkNv
cmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9s
b2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gNDY1NjgpCisrKyBXZWJDb3Jl
L2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw5ICs0
Miw3IEBACiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKIAogI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9B
UFBMSUNBVElPTlMpCi0jaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZS5oIgotI2luY2x1ZGUgIkFw
cGxpY2F0aW9uQ2FjaGVHcm91cC5oIgotI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJj
ZS5oIgorI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVIb3N0LmgiCiAjZW5kaWYKIAogLy8gRklY
TUU6IE1vcmUgdGhhdCBpcyBpbiBjb21tb24gd2l0aCBTdWJyZXNvdXJjZUxvYWRlciBzaG91bGQg
bW92ZSB1cCBpbnRvIFJlc291cmNlTG9hZGVyLgpAQCAtMjgzLDE1ICsyODEsOCBAQCB2b2lkIE1h
aW5SZXNvdXJjZUxvYWRlcjo6Y29udGludWVBZnRlckNvCiB2b2lkIE1haW5SZXNvdXJjZUxvYWRl
cjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHIpCiB7CiAjaWYg
RU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLSAgICBpZiAoci5odHRwU3RhdHVzQ29k
ZSgpIC8gMTAwID09IDQgfHwgci5odHRwU3RhdHVzQ29kZSgpIC8gMTAwID09IDUpIHsKLSAgICAg
ICAgQVNTRVJUKCFtX2FwcGxpY2F0aW9uQ2FjaGUpOwotICAgICAgICBpZiAobV9mcmFtZS0+c2V0
dGluZ3MoKSAmJiBtX2ZyYW1lLT5zZXR0aW5ncygpLT5vZmZsaW5lV2ViQXBwbGljYXRpb25DYWNo
ZUVuYWJsZWQoKSkgewotICAgICAgICAgICAgbV9hcHBsaWNhdGlvbkNhY2hlID0gQXBwbGljYXRp
b25DYWNoZUdyb3VwOjpmYWxsYmFja0NhY2hlRm9yTWFpblJlcXVlc3QocmVxdWVzdCgpLCBkb2N1
bWVudExvYWRlcigpKTsKLQotICAgICAgICAgICAgaWYgKHNjaGVkdWxlTG9hZEZhbGxiYWNrUmVz
b3VyY2VGcm9tQXBwbGljYXRpb25DYWNoZShtX2FwcGxpY2F0aW9uQ2FjaGUuZ2V0KCkpKQotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KKyAgICBpZiAoZG9jdW1lbnRM
b2FkZXIoKS0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+bWF5YmVMb2FkRmFsbGJhY2tGb3JNYWlu
UmVzcG9uc2UocmVxdWVzdCgpLCByKSkKKyAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAKICAgICBI
VFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHIuaHR0cEhlYWRlckZpZWxkcygpLmZp
bmQoQXRvbWljU3RyaW5nKCJ4LWZyYW1lLW9wdGlvbnMiKSk7CkBAIC0zNTMsNiArMzQ0LDEwIEBA
IHZvaWQgTWFpblJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YSgKICAgICBBU1NFUlQoIWRl
ZmVyc0xvYWRpbmcoKSk7CiAjZW5kaWYKICAKKyAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJ
Q0FUSU9OUykKKyAgICBkb2N1bWVudExvYWRlcigpLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5t
YWluUmVzb3VyY2VEYXRhUmVjZWl2ZWQoZGF0YSwgbGVuZ3RoLCBsZW5ndGhSZWNlaXZlZCwgYWxs
QXRPbmNlKTsKKyNlbmRpZgorCiAgICAgLy8gVGhlIGFkZGl0aW9uYWwgcHJvY2Vzc2luZyBjYW4g
ZG8gYW55dGhpbmcgaW5jbHVkaW5nIHBvc3NpYmx5IHJlbW92aW5nIHRoZSBsYXN0CiAgICAgLy8g
cmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0OyBvbmUgZXhhbXBsZSBvZiB0aGlzIGlzIDMyNjYyMTYu
CiAgICAgUmVmUHRyPE1haW5SZXNvdXJjZUxvYWRlcj4gcHJvdGVjdCh0aGlzKTsKQEAgLTM4MCwy
NyArMzc1LDE1IEBAIHZvaWQgTWFpblJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW4KICAg
ICBSZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZygpOwogICAgIAogI2lmIEVOQUJMRShP
RkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCi0gICAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBncm91
cCA9IGRsLT5jYW5kaWRhdGVBcHBsaWNhdGlvbkNhY2hlR3JvdXAoKTsKLSAgICBpZiAoIWdyb3Vw
ICYmIGRsLT5hcHBsaWNhdGlvbkNhY2hlKCkgJiYgIWRsLT5tYWluUmVzb3VyY2VBcHBsaWNhdGlv
bkNhY2hlKCkpCi0gICAgICAgIGdyb3VwID0gZGwtPmFwcGxpY2F0aW9uQ2FjaGUoKS0+Z3JvdXAo
KTsKLSAgICAKLSAgICBpZiAoZ3JvdXApCi0gICAgICAgIGdyb3VwLT5maW5pc2hlZExvYWRpbmdN
YWluUmVzb3VyY2UoZGwuZ2V0KCkpOworICAgIGRsLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5m
aW5pc2hlZExvYWRpbmdNYWluUmVzb3VyY2UoKTsKICNlbmRpZgogfQogCiB2b2lkIE1haW5SZXNv
dXJjZUxvYWRlcjo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKICNpZiBF
TkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotICAgIGlmICghZXJyb3IuaXNDYW5jZWxs
YXRpb24oKSkgewotICAgICAgICBBU1NFUlQoIW1fYXBwbGljYXRpb25DYWNoZSk7Ci0gICAgICAg
IGlmIChtX2ZyYW1lLT5zZXR0aW5ncygpICYmIG1fZnJhbWUtPnNldHRpbmdzKCktPm9mZmxpbmVX
ZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBtX2FwcGxpY2F0aW9u
Q2FjaGUgPSBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmZhbGxiYWNrQ2FjaGVGb3JNYWluUmVxdWVz
dChyZXF1ZXN0KCksIGRvY3VtZW50TG9hZGVyKCkpOwotCi0gICAgICAgICAgICBpZiAoc2NoZWR1
bGVMb2FkRmFsbGJhY2tSZXNvdXJjZUZyb21BcHBsaWNhdGlvbkNhY2hlKG1fYXBwbGljYXRpb25D
YWNoZS5nZXQoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQor
ICAgIGlmIChkb2N1bWVudExvYWRlcigpLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5tYXliZUxv
YWRGYWxsYmFja0Zvck1haW5FcnJvcihyZXF1ZXN0KCksIGVycm9yKSkKKyAgICAgICAgcmV0dXJu
OwogI2VuZGlmCiAKICAgICAvLyBUaGVyZSBpcyBhIGJ1ZyBpbiBDRk5ldHdvcmsgd2hlcmUgY2Fs
bGJhY2tzIGNhbiBiZSBkaXNwYXRjaGVkIGV2ZW4gd2hlbiBsb2FkcyBhcmUgZGVmZXJyZWQuCkBA
IC00OTUsMjcgKzQ3OCwxNSBAQCBib29sIE1haW5SZXNvdXJjZUxvYWRlcjo6bG9hZChjb25zdCBS
ZXNvCiAKICAgICBtX3N1YnN0aXR1dGVEYXRhID0gc3Vic3RpdHV0ZURhdGE7CiAKKyAgICBSZXNv
dXJjZVJlcXVlc3QgcmVxdWVzdChyKTsKKwogI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNB
VElPTlMpCi0gICAgLy8gQ2hlY2sgaWYgdGhpcyByZXF1ZXN0IHNob3VsZCBiZSBsb2FkZWQgZnJv
bSB0aGUgYXBwbGljYXRpb24gY2FjaGUKLSAgICBpZiAoIW1fc3Vic3RpdHV0ZURhdGEuaXNWYWxp
ZCgpICYmIGZyYW1lTG9hZGVyKCktPmZyYW1lKCktPnNldHRpbmdzKCkgJiYgZnJhbWVMb2FkZXIo
KS0+ZnJhbWUoKS0+c2V0dGluZ3MoKS0+b2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVk
KCkpIHsKLSAgICAgICAgQVNTRVJUKCFtX2FwcGxpY2F0aW9uQ2FjaGUpOwotCi0gICAgICAgIG1f
YXBwbGljYXRpb25DYWNoZSA9IEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6Y2FjaGVGb3JNYWluUmVx
dWVzdChyLCBtX2RvY3VtZW50TG9hZGVyLmdldCgpKTsKLQotICAgICAgICBpZiAobV9hcHBsaWNh
dGlvbkNhY2hlKSB7Ci0gICAgICAgICAgICAvLyBHZXQgdGhlIHJlc291cmNlIGZyb20gdGhlIGFw
cGxpY2F0aW9uIGNhY2hlLiBCeSBkZWZpbml0aW9uLCBjYWNoZUZvck1haW5SZXF1ZXN0KCkgcmV0
dXJucyBhIGNhY2hlIHRoYXQgY29udGFpbnMgdGhlIHJlc291cmNlLgotICAgICAgICAgICAgQXBw
bGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSA9IG1fYXBwbGljYXRpb25DYWNoZS0+cmVz
b3VyY2VGb3JSZXF1ZXN0KHIpOwotICAgICAgICAgICAgbV9zdWJzdGl0dXRlRGF0YSA9IFN1YnN0
aXR1dGVEYXRhKHJlc291cmNlLT5kYXRhKCksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc291cmNlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UtPnJlc3Bv
bnNlKCkudGV4dEVuY29kaW5nTmFtZSgpLCBLVVJMKCkpOwotICAgICAgICB9Ci0gICAgfQorICAg
IGRvY3VtZW50TG9hZGVyKCktPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPm1heWJlTG9hZE1haW5S
ZXNvdXJjZShyZXF1ZXN0LCBtX3N1YnN0aXR1dGVEYXRhKTsKICNlbmRpZgogCi0gICAgUmVzb3Vy
Y2VSZXF1ZXN0IHJlcXVlc3Qocik7CiAgICAgYm9vbCBkZWZlciA9IGRlZmVyc0xvYWRpbmcoKTsK
ICAgICBpZiAoZGVmZXIpIHsKLSAgICAgICAgYm9vbCBzaG91bGRMb2FkRW1wdHkgPSBzaG91bGRM
b2FkQXNFbXB0eURvY3VtZW50KHIudXJsKCkpOworICAgICAgICBib29sIHNob3VsZExvYWRFbXB0
eSA9IHNob3VsZExvYWRBc0VtcHR5RG9jdW1lbnQocmVxdWVzdC51cmwoKSk7CiAgICAgICAgIGlm
IChzaG91bGRMb2FkRW1wdHkpCiAgICAgICAgICAgICBkZWZlciA9IGZhbHNlOwogICAgIH0KSW5k
ZXg6IFdlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5oCShyZXZpc2lvbiA0NjU2OCkKKysrIFdl
YkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw5
ICszOSw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmIEVOQUJMRShPRkZMSU5FX1dF
Ql9BUFBMSUNBVElPTlMpCi0gICAgY2xhc3MgQXBwbGljYXRpb25DYWNoZTsKLSNlbmRpZgogICAg
IGNsYXNzIEZvcm1TdGF0ZTsKICAgICBzdHJ1Y3QgUmVzb3VyY2VSZXF1ZXN0OwogCkBAIC03MSwx
MCArNjgsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgYm9vbCBpc0xvYWRpbmdN
dWx0aXBhcnRDb250ZW50KCkgY29uc3QgeyByZXR1cm4gbV9sb2FkaW5nTXVsdGlwYXJ0Q29udGVu
dDsgfQogCi0jaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLSAgICAgICAgQXBw
bGljYXRpb25DYWNoZSogYXBwbGljYXRpb25DYWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbGlj
YXRpb25DYWNoZS5nZXQoKTsgfQotI2VuZGlmCi0KICAgICBwcml2YXRlOgogICAgICAgICBNYWlu
UmVzb3VyY2VMb2FkZXIoRnJhbWUqKTsKIApAQCAtMTA1LDExICs5OCw2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogICAgICAgICBNYWluUmVzb3VyY2VMb2FkZXJUaW1lciBtX2RhdGFMb2FkVGlt
ZXI7CiAKLSNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotICAgICAgICAvLyBU
aGUgYXBwbGljYXRpb24gY2FjaGUgdGhhdCB0aGUgbWFpbiByZXNvdXJjZSB3YXMgbG9hZGVkIGZy
b20gKGlmIGFueSkuCi0gICAgICAgIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBtX2FwcGxpY2F0
aW9uQ2FjaGU7Ci0jZW5kaWYKLQogICAgICAgICBib29sIG1fbG9hZGluZ011bHRpcGFydENvbnRl
bnQ7CiAgICAgICAgIGJvb2wgbV93YWl0aW5nRm9yQ29udGVudFBvbGljeTsKICAgICB9OwpJbmRl
eDogV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gNDY1NjgpCisrKyBXZWJDb3Jl
L2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDkg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRlci5oIgogCisj
aWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyNpbmNsdWRlICJBcHBsaWNhdGlv
bkNhY2hlSG9zdC5oIgorI2VuZGlmCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNs
dWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCkBAIC0xMTksNyArMTIyLDcg
QEAgYm9vbCBSZXNvdXJjZUxvYWRlcjo6bG9hZChjb25zdCBSZXNvdXJjZQogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAKICNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotICAg
IGlmIChtX2RvY3VtZW50TG9hZGVyLT5zY2hlZHVsZUFwcGxpY2F0aW9uQ2FjaGVMb2FkKHRoaXMs
IGNsaWVudFJlcXVlc3QsIHIudXJsKCkpKQorICAgIGlmIChtX2RvY3VtZW50TG9hZGVyLT5hcHBs
aWNhdGlvbkNhY2hlSG9zdCgpLT5tYXliZUxvYWRSZXNvdXJjZSh0aGlzLCBjbGllbnRSZXF1ZXN0
LCByLnVybCgpKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKIApAQCAtMTkwLDE3ICsx
OTMsNiBAQCB2b2lkIFJlc291cmNlTG9hZGVyOjpjbGVhclJlc291cmNlRGF0YSgpCiAgICAgICAg
IG1fcmVzb3VyY2VEYXRhLT5jbGVhcigpOwogfQogCi0jaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQ
UExJQ0FUSU9OUykKLWJvb2wgUmVzb3VyY2VMb2FkZXI6OnNjaGVkdWxlTG9hZEZhbGxiYWNrUmVz
b3VyY2VGcm9tQXBwbGljYXRpb25DYWNoZShBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSkKLXsKLSAg
ICBpZiAoZG9jdW1lbnRMb2FkZXIoKS0+c2NoZWR1bGVMb2FkRmFsbGJhY2tSZXNvdXJjZUZyb21B
cHBsaWNhdGlvbkNhY2hlKHRoaXMsIG1fcmVxdWVzdCwgY2FjaGUpKSB7Ci0gICAgICAgIGhhbmRs
ZSgpLT5jYW5jZWwoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBm
YWxzZTsKLX0KLSNlbmRpZgotCiB2b2lkIFJlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJlcXVlc3Qo
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVj
dFJlc3BvbnNlKQogewogICAgIC8vIFByb3RlY3QgdGhpcyBpbiB0aGlzIGRlbGVnYXRlIG1ldGhv
ZCBzaW5jZSB0aGUgYWRkaXRpb25hbCBwcm9jZXNzaW5nIGNhbiBkbwpAQCAtMzgyLDEwICszNzQs
OCBAQCBSZXNvdXJjZUVycm9yIFJlc291cmNlTG9hZGVyOjpjYW5ub3RTaG93CiB2b2lkIFJlc291
cmNlTG9hZGVyOjp3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VIYW5kbGUqLCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCiB7
CiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLSAgICBpZiAoIXJlZGlyZWN0
UmVzcG9uc2UuaXNOdWxsKCkgJiYgIXByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbChyZXF1ZXN0
LnVybCgpLCByZWRpcmVjdFJlc3BvbnNlLnVybCgpKSkgewotICAgICAgICBpZiAoc2NoZWR1bGVM
b2FkRmFsbGJhY2tSZXNvdXJjZUZyb21BcHBsaWNhdGlvbkNhY2hlKCkpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgIGlmIChkb2N1bWVudExvYWRlcigpLT5hcHBsaWNhdGlvbkNhY2hl
SG9zdCgpLT5tYXliZUxvYWRGYWxsYmFja0ZvclJlZGlyZWN0KHRoaXMsIHJlcXVlc3QsIHJlZGly
ZWN0UmVzcG9uc2UpKQorICAgICAgICByZXR1cm47CiAjZW5kaWYKICAgICB3aWxsU2VuZFJlcXVl
c3QocmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7CiB9CkBAIC0zOTgsMTAgKzM4OCw4IEBAIHZv
aWQgUmVzb3VyY2VMb2FkZXI6OmRpZFNlbmREYXRhKFJlc291cmMKIHZvaWQgUmVzb3VyY2VMb2Fk
ZXI6OmRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmIHJlc3BvbnNlKQogewogI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMp
Ci0gICAgaWYgKHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgLyAxMDAgPT0gNCB8fCByZXNwb25z
ZS5odHRwU3RhdHVzQ29kZSgpIC8gMTAwID09IDUpIHsKLSAgICAgICAgaWYgKHNjaGVkdWxlTG9h
ZEZhbGxiYWNrUmVzb3VyY2VGcm9tQXBwbGljYXRpb25DYWNoZSgpKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICBpZiAoZG9jdW1lbnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNoZUhv
c3QoKS0+bWF5YmVMb2FkRmFsbGJhY2tGb3JSZXNwb25zZSh0aGlzLCByZXNwb25zZSkpCisgICAg
ICAgIHJldHVybjsKICNlbmRpZgogICAgIGRpZFJlY2VpdmVSZXNwb25zZShyZXNwb25zZSk7CiB9
CkBAIC00MTksMTAgKzQwNyw4IEBAIHZvaWQgUmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRp
bmcoUmUKIHZvaWQgUmVzb3VyY2VMb2FkZXI6OmRpZEZhaWwoUmVzb3VyY2VIYW5kbGUqLCBjb25z
dCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKICNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElD
QVRJT05TKQotICAgIGlmICghZXJyb3IuaXNDYW5jZWxsYXRpb24oKSkgewotICAgICAgICBpZiAo
ZG9jdW1lbnRMb2FkZXIoKS0+c2NoZWR1bGVMb2FkRmFsbGJhY2tSZXNvdXJjZUZyb21BcHBsaWNh
dGlvbkNhY2hlKHRoaXMsIG1fcmVxdWVzdCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQor
ICAgIGlmIChkb2N1bWVudExvYWRlcigpLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5tYXliZUxv
YWRGYWxsYmFja0ZvckVycm9yKHRoaXMsIGVycm9yKSkKKyAgICAgICAgcmV0dXJuOwogI2VuZGlm
CiAgICAgZGlkRmFpbChlcnJvcik7CiB9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxv
YWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmgJKHJl
dmlzaW9uIDQ2NTY4KQorKysgV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBj
bGFzcyBBcHBsaWNhdGlvbkNhY2hlOworICAgIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGVIb3N0Owog
ICAgIGNsYXNzIERvY3VtZW50TG9hZGVyOwogICAgIGNsYXNzIEZyYW1lOwogICAgIGNsYXNzIEZy
YW1lTG9hZGVyOwpAQCAtMTE5LDcgKzExOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgUmVzb3VyY2VMb2FkZXIoRnJhbWUqLCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3Ms
IGJvb2wgc2hvdWxkQ29udGVudFNuaWZmKTsKIAogI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBM
SUNBVElPTlMpCi0gICAgICAgIGJvb2wgc2NoZWR1bGVMb2FkRmFsbGJhY2tSZXNvdXJjZUZyb21B
cHBsaWNhdGlvbkNhY2hlKEFwcGxpY2F0aW9uQ2FjaGUqID0gMCk7CisgICAgICAgIGZyaWVuZCBj
bGFzcyBBcHBsaWNhdGlvbkNhY2hlSG9zdDsgIC8vIGZvciBhY2Nlc3MgdG8gcmVxdWVzdCgpCiAj
ZW5kaWYKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2FuY2VsKGNvbnN0IFJlc291cmNlRXJy
b3ImKTsKQEAgLTEzMywxMyArMTMzLDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
UmVmUHRyPFJlc291cmNlSGFuZGxlPiBtX2hhbmRsZTsKICAgICAgICAgUmVmUHRyPEZyYW1lPiBt
X2ZyYW1lOwogICAgICAgICBSZWZQdHI8RG9jdW1lbnRMb2FkZXI+IG1fZG9jdW1lbnRMb2FkZXI7
Ci0gICAgICAgIFJlc291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsgICAgICAgIAorICAgICAgICBS
ZXNvdXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7CiAgICAgICAgIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIFJlc291cmNlUmVxdWVzdCBtX3JlcXVlc3Q7CiAgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZm
ZXI+IG1fcmVzb3VyY2VEYXRhOwogICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgbG9uZyBtX2lk
ZW50aWZpZXI7ICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbG9uZyBtX2lkZW50aWZpZXI7CiAK
ICAgICAgICAgYm9vbCBtX3JlYWNoZWRUZXJtaW5hbFN0YXRlOwogICAgICAgICBib29sIG1fY2Fu
Y2VsbGVkOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdy
b3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlv
bkNhY2hlR3JvdXAuY3BwCShyZXZpc2lvbiA0NjU2OCkKKysrIFdlYkNvcmUvbG9hZGVyL2FwcGNh
Y2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5
LDcgQEAKICNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQogCiAjaW5jbHVkZSAi
QXBwbGljYXRpb25DYWNoZS5oIgorI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVIb3N0LmgiCiAj
aW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmgiCiAjaW5jbHVkZSAiQXBwbGljYXRp
b25DYWNoZVN0b3JhZ2UuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKQEAgLTEyNiw3ICsx
MjcsNyBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6c2VsZWN0Q2FjaGUoCiAgICAgICAg
IHJldHVybjsKICAgICAKICAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBmcmFt
ZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCk7Ci0gICAgQVNTRVJUKCFkb2N1bWVudExvYWRl
ci0+YXBwbGljYXRpb25DYWNoZSgpKTsKKyAgICBBU1NFUlQoIWRvY3VtZW50TG9hZGVyLT5hcHBs
aWNhdGlvbkNhY2hlSG9zdCgpLT5hcHBsaWNhdGlvbkNhY2hlKCkpOwogCiAgICAgaWYgKHBhc3Nl
ZE1hbmlmZXN0VVJMLmlzTnVsbCgpKSB7CiAgICAgICAgIHNlbGVjdENhY2hlV2l0aG91dE1hbmlm
ZXN0VVJMKGZyYW1lKTsgICAgICAgIApAQCAtMTM3LDcgKzEzOCw3IEBAIHZvaWQgQXBwbGljYXRp
b25DYWNoZUdyb3VwOjpzZWxlY3RDYWNoZSgKICAgICBpZiAobWFuaWZlc3RVUkwuaGFzUmVmKCkp
CiAgICAgICAgIG1hbmlmZXN0VVJMLnJlbW92ZVJlZigpOwogCi0gICAgQXBwbGljYXRpb25DYWNo
ZSogbWFpblJlc291cmNlQ2FjaGUgPSBkb2N1bWVudExvYWRlci0+bWFpblJlc291cmNlQXBwbGlj
YXRpb25DYWNoZSgpOworICAgIEFwcGxpY2F0aW9uQ2FjaGUqIG1haW5SZXNvdXJjZUNhY2hlID0g
ZG9jdW1lbnRMb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPm1haW5SZXNvdXJjZUFwcGxp
Y2F0aW9uQ2FjaGUoKTsKICAgICAKICAgICBpZiAobWFpblJlc291cmNlQ2FjaGUpIHsKICAgICAg
ICAgaWYgKG1hbmlmZXN0VVJMID09IG1haW5SZXNvdXJjZUNhY2hlLT5ncm91cCgpLT5tX21hbmlm
ZXN0VVJMKSB7CkBAIC0xNzUsMTQgKzE3NiwxNCBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91
cDo6c2VsZWN0Q2FjaGUoCiAKICAgICAvLyBEb24ndCBjaGFuZ2UgYW55dGhpbmcgb24gZGlzayBp
ZiBwcml2YXRlIGJyb3dzaW5nIGlzIGVuYWJsZWQuCiAgICAgaWYgKCFmcmFtZS0+c2V0dGluZ3Mo
KSB8fCBmcmFtZS0+c2V0dGluZ3MoKS0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpKSB7Ci0gICAg
ICAgIHBvc3RMaXN0ZW5lclRhc2soJkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxDaGVja2luZ0xp
c3RlbmVyLCBkb2N1bWVudExvYWRlcik7Ci0gICAgICAgIHBvc3RMaXN0ZW5lclRhc2soJkRPTUFw
cGxpY2F0aW9uQ2FjaGU6OmNhbGxFcnJvckxpc3RlbmVyLCBkb2N1bWVudExvYWRlcik7CisgICAg
ICAgIHBvc3RMaXN0ZW5lclRhc2soRE9NQXBwbGljYXRpb25DYWNoZTo6Q0hFQ0tJTkdfRVZFTlQs
IGRvY3VtZW50TG9hZGVyKTsKKyAgICAgICAgcG9zdExpc3RlbmVyVGFzayhET01BcHBsaWNhdGlv
bkNhY2hlOjpFUlJPUl9FVkVOVCwgZG9jdW1lbnRMb2FkZXIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBncm91cCA9IGNhY2hlU3RvcmFnZSgp
LmZpbmRPckNyZWF0ZUNhY2hlR3JvdXAobWFuaWZlc3RVUkwpOwogCi0gICAgZG9jdW1lbnRMb2Fk
ZXItPnNldENhbmRpZGF0ZUFwcGxpY2F0aW9uQ2FjaGVHcm91cChncm91cCk7CisgICAgZG9jdW1l
bnRMb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPnNldENhbmRpZGF0ZUFwcGxpY2F0aW9u
Q2FjaGVHcm91cChncm91cCk7CiAgICAgZ3JvdXAtPm1fcGVuZGluZ01hc3RlclJlc291cmNlTG9h
ZGVycy5hZGQoZG9jdW1lbnRMb2FkZXIpOwogICAgIGdyb3VwLT5tX2Rvd25sb2FkaW5nUGVuZGlu
Z01hc3RlclJlc291cmNlTG9hZGVyc0NvdW50Kys7CiAKQEAgLTE5Niw5ICsxOTcsOSBAQCB2b2lk
IEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6c2VsZWN0Q2FjaGVXCiAgICAgICAgIHJldHVybjsKIAog
ICAgIERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IGZyYW1lLT5sb2FkZXIoKS0+ZG9j
dW1lbnRMb2FkZXIoKTsKLSAgICBBU1NFUlQoIWRvY3VtZW50TG9hZGVyLT5hcHBsaWNhdGlvbkNh
Y2hlKCkpOworICAgIEFTU0VSVCghZG9jdW1lbnRMb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0
KCktPmFwcGxpY2F0aW9uQ2FjaGUoKSk7CiAKLSAgICBBcHBsaWNhdGlvbkNhY2hlKiBtYWluUmVz
b3VyY2VDYWNoZSA9IGRvY3VtZW50TG9hZGVyLT5tYWluUmVzb3VyY2VBcHBsaWNhdGlvbkNhY2hl
KCk7CisgICAgQXBwbGljYXRpb25DYWNoZSogbWFpblJlc291cmNlQ2FjaGUgPSBkb2N1bWVudExv
YWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+bWFpblJlc291cmNlQXBwbGljYXRpb25DYWNo
ZSgpOwogCiAgICAgaWYgKG1haW5SZXNvdXJjZUNhY2hlKSB7CiAgICAgICAgIG1haW5SZXNvdXJj
ZUNhY2hlLT5ncm91cCgpLT5hc3NvY2lhdGVEb2N1bWVudExvYWRlcldpdGhDYWNoZShkb2N1bWVu
dExvYWRlciwgbWFpblJlc291cmNlQ2FjaGUpOwpAQCAtMjM1LDkgKzIzNiw5IEBAIHZvaWQgQXBw
bGljYXRpb25DYWNoZUdyb3VwOjpmaW5pc2hlZExvYWQKICAgICAgICAgLy8gQ2FjaGUgdXBkYXRl
IGhhcyBiZWVuIGEgZmFpbHVyZSwgc28gdGhlcmUgaXMgbm8gcmVhc29uIHRvIGtlZXAgdGhlIGRv
Y3VtZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5jb21wbGV0ZSBjYWNoZQogICAgICAgICAvLyAo
aXRzIG1haW4gcmVzb3VyY2Ugd2FzIG5vdCBjYWNoZWQgeWV0LCBzbyBpdCBpcyBsaWtlbHkgdGhh
dCB0aGUgYXBwbGljYXRpb24gY2hhbmdlZCBzaWduaWZpY2FudGx5IHNlcnZlci1zaWRlKS4KICAg
ICAgICAgQVNTRVJUKCFtX2NhY2hlQmVpbmdVcGRhdGVkKTsgLy8gQWxyZWFkeSBjbGVhcmVkIG91
dCBieSBzdG9wTG9hZGluZygpLgotICAgICAgICBsb2FkZXItPnNldEFwcGxpY2F0aW9uQ2FjaGUo
MCk7IC8vIFdpbGwgdW5zZXQgY2FuZGlkYXRlLCB0b28uCisgICAgICAgIGxvYWRlci0+YXBwbGlj
YXRpb25DYWNoZUhvc3QoKS0+c2V0QXBwbGljYXRpb25DYWNoZSgwKTsgLy8gV2lsbCB1bnNldCBj
YW5kaWRhdGUsIHRvby4KICAgICAgICAgbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzLnJlbW92
ZShsb2FkZXIpOwotICAgICAgICBwb3N0TGlzdGVuZXJUYXNrKCZET01BcHBsaWNhdGlvbkNhY2hl
OjpjYWxsRXJyb3JMaXN0ZW5lciwgbG9hZGVyKTsKKyAgICAgICAgcG9zdExpc3RlbmVyVGFzayhE
T01BcHBsaWNhdGlvbkNhY2hlOjpFUlJPUl9FVkVOVCwgbG9hZGVyKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBDb21wbGV0ZWQ6CiAgICAgICAgIEFTU0VSVChtX2Fzc29jaWF0ZWREb2N1bWVu
dExvYWRlcnMuY29udGFpbnMobG9hZGVyKSk7CkBAIC0yNzEsMjggKzI3MiwyOCBAQCB2b2lkIEFw
cGxpY2F0aW9uQ2FjaGVHcm91cDo6ZmFpbGVkTG9hZGluCiAKICAgICAgICAgLy8gVGhlIG1hbmlm
ZXN0IGRpZG4ndCBjaGFuZ2UsIGFuZCB3ZSBoYXZlIGEgcmVsZXZhbnQgY2FjaGUgLSBidXQgdGhl
IG1haW4gcmVzb3VyY2UgZG93bmxvYWQgZmFpbGVkIG1pZC13YXksIHNvIGl0IGNhbm5vdCBiZSBz
dG9yZWQgdG8gdGhlIGNhY2hlLAogICAgICAgICAvLyBhbmQgdGhlIGxvYWRlciBkb2VzIG5vdCBn
ZXQgYXNzb2NpYXRlZCB0byBpdC4gSWYgdGhlcmUgYXJlIG90aGVyIG1haW4gcmVzb3VyY2VzIGJl
aW5nIGRvd25sb2FkZWQgZm9yIHRoaXMgY2FjaGUgZ3JvdXAsIHRoZXkgbWF5IHN0aWxsIHN1Y2Nl
ZWQuCi0gICAgICAgIHBvc3RMaXN0ZW5lclRhc2soJkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxF
cnJvckxpc3RlbmVyLCBsb2FkZXIpOworICAgICAgICBwb3N0TGlzdGVuZXJUYXNrKERPTUFwcGxp
Y2F0aW9uQ2FjaGU6OkVSUk9SX0VWRU5ULCBsb2FkZXIpOwogCiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgRmFpbHVyZToKICAgICAgICAgLy8gQ2FjaGUgdXBkYXRlIGZhaWxlZCwgdG9vLgogICAg
ICAgICBBU1NFUlQoIW1fY2FjaGVCZWluZ1VwZGF0ZWQpOyAvLyBBbHJlYWR5IGNsZWFyZWQgb3V0
IGJ5IHN0b3BMb2FkaW5nKCkuCi0gICAgICAgIEFTU0VSVCghbG9hZGVyLT5hcHBsaWNhdGlvbkNh
Y2hlKCkgfHwgbG9hZGVyLT5hcHBsaWNhdGlvbkNhY2hlKCkgPT0gbV9jYWNoZUJlaW5nVXBkYXRl
ZCk7CisgICAgICAgIEFTU0VSVCghbG9hZGVyLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5hcHBs
aWNhdGlvbkNhY2hlKCkgfHwgbG9hZGVyLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5hcHBsaWNh
dGlvbkNhY2hlKCkgPT0gbV9jYWNoZUJlaW5nVXBkYXRlZCk7CiAKLSAgICAgICAgbG9hZGVyLT5z
ZXRBcHBsaWNhdGlvbkNhY2hlKDApOyAvLyBXaWxsIHVuc2V0IGNhbmRpZGF0ZSwgdG9vLgorICAg
ICAgICBsb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPnNldEFwcGxpY2F0aW9uQ2FjaGUo
MCk7IC8vIFdpbGwgdW5zZXQgY2FuZGlkYXRlLCB0b28uCiAgICAgICAgIG1fYXNzb2NpYXRlZERv
Y3VtZW50TG9hZGVycy5yZW1vdmUobG9hZGVyKTsKLSAgICAgICAgcG9zdExpc3RlbmVyVGFzaygm
RE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbEVycm9yTGlzdGVuZXIsIGxvYWRlcik7CisgICAgICAg
IHBvc3RMaXN0ZW5lclRhc2soRE9NQXBwbGljYXRpb25DYWNoZTo6RVJST1JfRVZFTlQsIGxvYWRl
cik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29tcGxldGVkOgogICAgICAgICAvLyBUaGUg
Y2FjaGUgbWFuaWZlc3QgZGlkbid0IGxpc3QgdGhpcyBtYWluIHJlc291cmNlLCBhbmQgYWxsIGNh
Y2hlIGVudHJpZXMgd2VyZSBhbHJlYWR5IHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5IC0gYnV0IHRoZSBt
YWluIHJlc291cmNlIGZhaWxlZCB0byBsb2FkLAogICAgICAgICAvLyBzbyBpdCBjYW5ub3QgYmUg
c3RvcmVkIHRvIHRoZSBjYWNoZS4gSWYgdGhlcmUgYXJlIG90aGVyIG1haW4gcmVzb3VyY2VzIGJl
aW5nIGRvd25sb2FkZWQgZm9yIHRoaXMgY2FjaGUgZ3JvdXAsIHRoZXkgbWF5IHN0aWxsIHN1Y2Nl
ZWQuCiAgICAgICAgIEFTU0VSVChtX2Fzc29jaWF0ZWREb2N1bWVudExvYWRlcnMuY29udGFpbnMo
bG9hZGVyKSk7Ci0gICAgICAgIEFTU0VSVChsb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGUoKSA9PSBt
X2NhY2hlQmVpbmdVcGRhdGVkKTsKLSAgICAgICAgQVNTRVJUKCFsb2FkZXItPmNhbmRpZGF0ZUFw
cGxpY2F0aW9uQ2FjaGVHcm91cCgpKTsKKyAgICAgICAgQVNTRVJUKGxvYWRlci0+YXBwbGljYXRp
b25DYWNoZUhvc3QoKS0+YXBwbGljYXRpb25DYWNoZSgpID09IG1fY2FjaGVCZWluZ1VwZGF0ZWQp
OworICAgICAgICBBU1NFUlQoIWxvYWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+Y2FuZGlk
YXRlQXBwbGljYXRpb25DYWNoZUdyb3VwKCkpOwogICAgICAgICBtX2Fzc29jaWF0ZWREb2N1bWVu
dExvYWRlcnMucmVtb3ZlKGxvYWRlcik7Ci0gICAgICAgIGxvYWRlci0+c2V0QXBwbGljYXRpb25D
YWNoZSgwKTsKKyAgICAgICAgbG9hZGVyLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5zZXRBcHBs
aWNhdGlvbkNhY2hlKDApOwogCi0gICAgICAgIHBvc3RMaXN0ZW5lclRhc2soJkRPTUFwcGxpY2F0
aW9uQ2FjaGU6OmNhbGxFcnJvckxpc3RlbmVyLCBsb2FkZXIpOworICAgICAgICBwb3N0TGlzdGVu
ZXJUYXNrKERPTUFwcGxpY2F0aW9uQ2FjaGU6OkVSUk9SX0VWRU5ULCBsb2FkZXIpOwogCiAgICAg
ICAgIGJyZWFrOwogICAgIH0KQEAgLTMzMiw3ICszMzMsNyBAQCB2b2lkIEFwcGxpY2F0aW9uQ2Fj
aGVHcm91cDo6ZGlzYXNzb2NpYXRlCiAKICAgICBtX3BlbmRpbmdNYXN0ZXJSZXNvdXJjZUxvYWRl
cnMucmVtb3ZlKGxvYWRlcik7CiAKLSAgICBsb2FkZXItPnNldEFwcGxpY2F0aW9uQ2FjaGUoMCk7
IC8vIFdpbGwgc2V0IGNhbmRpZGF0ZSB0byAwLCB0b28uCisgICAgbG9hZGVyLT5hcHBsaWNhdGlv
bkNhY2hlSG9zdCgpLT5zZXRBcHBsaWNhdGlvbkNhY2hlKDApOyAvLyBXaWxsIHNldCBjYW5kaWRh
dGUgdG8gMCwgdG9vLgogCiAgICAgaWYgKCFtX2Fzc29jaWF0ZWREb2N1bWVudExvYWRlcnMuaXNF
bXB0eSgpIHx8ICFtX3BlbmRpbmdNYXN0ZXJSZXNvdXJjZUxvYWRlcnMuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47CkBAIC0zODgsOSArMzg5LDkgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3Jv
dXA6OnVwZGF0ZShGcmFtZQogewogICAgIGlmIChtX3VwZGF0ZVN0YXR1cyA9PSBDaGVja2luZyB8
fCBtX3VwZGF0ZVN0YXR1cyA9PSBEb3dubG9hZGluZykgewogICAgICAgICBpZiAodXBkYXRlT3B0
aW9uID09IEFwcGxpY2F0aW9uQ2FjaGVVcGRhdGVXaXRoQnJvd3NpbmdDb250ZXh0KSB7Ci0gICAg
ICAgICAgICBwb3N0TGlzdGVuZXJUYXNrKCZET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsQ2hlY2tp
bmdMaXN0ZW5lciwgZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpKTsKKyAgICAgICAg
ICAgIHBvc3RMaXN0ZW5lclRhc2soRE9NQXBwbGljYXRpb25DYWNoZTo6Q0hFQ0tJTkdfRVZFTlQs
IGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSk7CiAgICAgICAgICAgICBpZiAobV91
cGRhdGVTdGF0dXMgPT0gRG93bmxvYWRpbmcpCi0gICAgICAgICAgICAgICAgcG9zdExpc3RlbmVy
VGFzaygmRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbERvd25sb2FkaW5nTGlzdGVuZXIsIGZyYW1l
LT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSk7CisgICAgICAgICAgICAgICAgcG9zdExpc3Rl
bmVyVGFzayhET01BcHBsaWNhdGlvbkNhY2hlOjpET1dOTE9BRElOR19FVkVOVCwgZnJhbWUtPmxv
YWRlcigpLT5kb2N1bWVudExvYWRlcigpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAg
ICAgfQpAQCAtNDAwLDggKzQwMSw4IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjp1cGRh
dGUoRnJhbWUKICAgICAgICAgQVNTRVJUKG1fcGVuZGluZ01hc3RlclJlc291cmNlTG9hZGVycy5p
c0VtcHR5KCkpOwogICAgICAgICBBU1NFUlQobV9wZW5kaW5nRW50cmllcy5pc0VtcHR5KCkpOwog
ICAgICAgICBBU1NFUlQoIW1fY2FjaGVCZWluZ1VwZGF0ZWQpOwotICAgICAgICBwb3N0TGlzdGVu
ZXJUYXNrKCZET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsQ2hlY2tpbmdMaXN0ZW5lciwgZnJhbWUt
PmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpKTsKLSAgICAgICAgcG9zdExpc3RlbmVyVGFzaygm
RE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbE5vVXBkYXRlTGlzdGVuZXIsIGZyYW1lLT5sb2FkZXIo
KS0+ZG9jdW1lbnRMb2FkZXIoKSk7CisgICAgICAgIHBvc3RMaXN0ZW5lclRhc2soRE9NQXBwbGlj
YXRpb25DYWNoZTo6Q0hFQ0tJTkdfRVZFTlQsIGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2Fk
ZXIoKSk7CisgICAgICAgIHBvc3RMaXN0ZW5lclRhc2soRE9NQXBwbGljYXRpb25DYWNoZTo6Tk9V
UERBVEVfRVZFTlQsIGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTQxMCwxMCArNDExLDEwIEBAIHZvaWQgQXBwbGljYXRpb25D
YWNoZUdyb3VwOjp1cGRhdGUoRnJhbWUKIAogICAgIG1fdXBkYXRlU3RhdHVzID0gQ2hlY2tpbmc7
CiAKLSAgICBwb3N0TGlzdGVuZXJUYXNrKCZET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsQ2hlY2tp
bmdMaXN0ZW5lciwgbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzKTsKKyAgICBwb3N0TGlzdGVu
ZXJUYXNrKERPTUFwcGxpY2F0aW9uQ2FjaGU6OkNIRUNLSU5HX0VWRU5ULCBtX2Fzc29jaWF0ZWRE
b2N1bWVudExvYWRlcnMpOwogICAgIGlmICghbV9uZXdlc3RDYWNoZSkgewogICAgICAgICBBU1NF
UlQodXBkYXRlT3B0aW9uID09IEFwcGxpY2F0aW9uQ2FjaGVVcGRhdGVXaXRoQnJvd3NpbmdDb250
ZXh0KTsKLSAgICAgICAgcG9zdExpc3RlbmVyVGFzaygmRE9NQXBwbGljYXRpb25DYWNoZTo6Y2Fs
bENoZWNraW5nTGlzdGVuZXIsIGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSk7Cisg
ICAgICAgIHBvc3RMaXN0ZW5lclRhc2soRE9NQXBwbGljYXRpb25DYWNoZTo6Q0hFQ0tJTkdfRVZF
TlQsIGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSk7CiAgICAgfQogICAgIAogICAg
IEFTU0VSVCghbV9tYW5pZmVzdEhhbmRsZSk7CkBAIC02NDgsNyArNjQ5LDcgQEAgdm9pZCBBcHBs
aWNhdGlvbkNhY2hlR3JvdXA6OmRpZEZpbmlzaExvYQogICAgIC8vIFdlIGhhdmUgdGhlIG1hbmlm
ZXN0LCBub3cgZG93bmxvYWQgdGhlIHJlc291cmNlcy4KICAgICBtX3VwZGF0ZVN0YXR1cyA9IERv
d25sb2FkaW5nOwogICAgIAotICAgIHBvc3RMaXN0ZW5lclRhc2soJkRPTUFwcGxpY2F0aW9uQ2Fj
aGU6OmNhbGxEb3dubG9hZGluZ0xpc3RlbmVyLCBtX2Fzc29jaWF0ZWREb2N1bWVudExvYWRlcnMp
OworICAgIHBvc3RMaXN0ZW5lclRhc2soRE9NQXBwbGljYXRpb25DYWNoZTo6RE9XTkxPQURJTkdf
RVZFTlQsIG1fYXNzb2NpYXRlZERvY3VtZW50TG9hZGVycyk7CiAKICAgICBBU1NFUlQobV9wZW5k
aW5nRW50cmllcy5pc0VtcHR5KCkpOwogCkBAIC02OTgsOCArNjk5LDggQEAgdm9pZCBBcHBsaWNh
dGlvbkNhY2hlR3JvdXA6Om1hbmlmZXN0Tm90RgogewogICAgIG1ha2VPYnNvbGV0ZSgpOwogCi0g
ICAgcG9zdExpc3RlbmVyVGFzaygmRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbE9ic29sZXRlTGlz
dGVuZXIsIG1fYXNzb2NpYXRlZERvY3VtZW50TG9hZGVycyk7Ci0gICAgcG9zdExpc3RlbmVyVGFz
aygmRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbEVycm9yTGlzdGVuZXIsIG1fcGVuZGluZ01hc3Rl
clJlc291cmNlTG9hZGVycyk7CisgICAgcG9zdExpc3RlbmVyVGFzayhET01BcHBsaWNhdGlvbkNh
Y2hlOjpPQlNPTEVURV9FVkVOVCwgbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzKTsKKyAgICBw
b3N0TGlzdGVuZXJUYXNrKERPTUFwcGxpY2F0aW9uQ2FjaGU6OkVSUk9SX0VWRU5ULCBtX3BlbmRp
bmdNYXN0ZXJSZXNvdXJjZUxvYWRlcnMpOwogCiAgICAgc3RvcExvYWRpbmcoKTsKIApAQCAtNzA5
LDkgKzcxMCw5IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjptYW5pZmVzdE5vdEYKICAg
ICB3aGlsZSAoIW1fcGVuZGluZ01hc3RlclJlc291cmNlTG9hZGVycy5pc0VtcHR5KCkpIHsKICAg
ICAgICAgSGFzaFNldDxEb2N1bWVudExvYWRlcio+OjppdGVyYXRvciBpdCA9IG1fcGVuZGluZ01h
c3RlclJlc291cmNlTG9hZGVycy5iZWdpbigpOwogICAgICAgICAKLSAgICAgICAgQVNTRVJUKCgq
aXQpLT5jYW5kaWRhdGVBcHBsaWNhdGlvbkNhY2hlR3JvdXAoKSA9PSB0aGlzKTsKLSAgICAgICAg
QVNTRVJUKCEoKml0KS0+YXBwbGljYXRpb25DYWNoZSgpKTsKLSAgICAgICAgKCppdCktPnNldENh
bmRpZGF0ZUFwcGxpY2F0aW9uQ2FjaGVHcm91cCgwKTsKKyAgICAgICAgQVNTRVJUKCgqaXQpLT5h
cHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5jYW5kaWRhdGVBcHBsaWNhdGlvbkNhY2hlR3JvdXAoKSA9
PSB0aGlzKTsKKyAgICAgICAgQVNTRVJUKCEoKml0KS0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+
YXBwbGljYXRpb25DYWNoZSgpKTsKKyAgICAgICAgKCppdCktPmFwcGxpY2F0aW9uQ2FjaGVIb3N0
KCktPnNldENhbmRpZGF0ZUFwcGxpY2F0aW9uQ2FjaGVHcm91cCgwKTsKICAgICAgICAgbV9wZW5k
aW5nTWFzdGVyUmVzb3VyY2VMb2FkZXJzLnJlbW92ZShpdCk7CiAgICAgfQogCkBAIC03NDcsMTEg
Kzc0OCwxMSBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6Y2hlY2tJZkxvYWRJCiAgICAg
ICAgIGlmICghbV9zdG9yYWdlSUQpCiAgICAgICAgICAgICBjYWNoZVN0b3JhZ2UoKS5zdG9yZU5l
d2VzdENhY2hlKHRoaXMpOwogCi0gICAgICAgIHBvc3RMaXN0ZW5lclRhc2soJkRPTUFwcGxpY2F0
aW9uQ2FjaGU6OmNhbGxOb1VwZGF0ZUxpc3RlbmVyLCBtX2Fzc29jaWF0ZWREb2N1bWVudExvYWRl
cnMpOworICAgICAgICBwb3N0TGlzdGVuZXJUYXNrKERPTUFwcGxpY2F0aW9uQ2FjaGU6Ok5PVVBE
QVRFX0VWRU5ULCBtX2Fzc29jaWF0ZWREb2N1bWVudExvYWRlcnMpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIEZhaWx1cmU6CiAgICAgICAgIEFTU0VSVCghbV9jYWNoZUJlaW5nVXBkYXRlZCk7
Ci0gICAgICAgIHBvc3RMaXN0ZW5lclRhc2soJkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxFcnJv
ckxpc3RlbmVyLCBtX2Fzc29jaWF0ZWREb2N1bWVudExvYWRlcnMpOworICAgICAgICBwb3N0TGlz
dGVuZXJUYXNrKERPTUFwcGxpY2F0aW9uQ2FjaGU6OkVSUk9SX0VWRU5ULCBtX2Fzc29jaWF0ZWRE
b2N1bWVudExvYWRlcnMpOwogICAgICAgICBpZiAobV9jYWNoZXMuaXNFbXB0eSgpKSB7CiAgICAg
ICAgICAgICBBU1NFUlQobV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzLmlzRW1wdHkoKSk7CiAg
ICAgICAgICAgICBkZWxldGUgdGhpczsKQEAgLTc4MCw3ICs3ODEsNyBAQCB2b2lkIEFwcGxpY2F0
aW9uQ2FjaGVHcm91cDo6Y2hlY2tJZkxvYWRJCiAgICAgICAgICAgICBpZiAob2xkTmV3ZXN0Q2Fj
aGUpCiAgICAgICAgICAgICAgICAgY2FjaGVTdG9yYWdlKCkucmVtb3ZlKG9sZE5ld2VzdENhY2hl
LmdldCgpKTsKICAgICAgICAgICAgIC8vIEZpcmUgdGhlIHN1Y2Nlc3MgZXZlbnRzLgotICAgICAg
ICAgICAgcG9zdExpc3RlbmVyVGFzayhpc1VwZ3JhZGVBdHRlbXB0ID8gJkRPTUFwcGxpY2F0aW9u
Q2FjaGU6OmNhbGxVcGRhdGVSZWFkeUxpc3RlbmVyIDogJkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmNh
bGxDYWNoZWRMaXN0ZW5lciwgbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzKTsKKyAgICAgICAg
ICAgIHBvc3RMaXN0ZW5lclRhc2soaXNVcGdyYWRlQXR0ZW1wdCA/IERPTUFwcGxpY2F0aW9uQ2Fj
aGU6OlVQREFURVJFQURZX0VWRU5UIDogRE9NQXBwbGljYXRpb25DYWNoZTo6Q0FDSEVEX0VWRU5U
LCBtX2Fzc29jaWF0ZWREb2N1bWVudExvYWRlcnMpOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgaWYgKGNhY2hlU3RvcmFnZSgpLmlzTWF4aW11bVNpemVSZWFjaGVkKCkgJiYgIW1fY2Fs
bGVkUmVhY2hlZE1heEFwcENhY2hlU2l6ZSkgewogICAgICAgICAgICAgICAgIC8vIFdlIHJhbiBv
dXQgb2Ygc3BhY2UuIEFsbCB0aGUgY2hhbmdlcyBpbiB0aGUgY2FjaGUgc3RvcmFnZSBoYXZlCkBA
IC04MDAsNyArODAxLDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmNoZWNrSWZMb2Fk
SQogICAgICAgICAgICAgICAgIC8vIFJ1biB0aGUgImNhY2hlIGZhaWx1cmUgc3RlcHMiCiAgICAg
ICAgICAgICAgICAgLy8gRmlyZSB0aGUgZXJyb3IgZXZlbnRzIHRvIGFsbCBwZW5kaW5nIG1hc3Rl
ciBlbnRyaWVzLCBhcyB3ZWxsIGFueSBvdGhlciBjYWNoZSBob3N0cwogICAgICAgICAgICAgICAg
IC8vIGN1cnJlbnRseSBhc3NvY2lhdGVkIHdpdGggYSBjYWNoZSBpbiB0aGlzIGdyb3VwLgotICAg
ICAgICAgICAgICAgIHBvc3RMaXN0ZW5lclRhc2soJkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxF
cnJvckxpc3RlbmVyLCBtX2Fzc29jaWF0ZWREb2N1bWVudExvYWRlcnMpOworICAgICAgICAgICAg
ICAgIHBvc3RMaXN0ZW5lclRhc2soRE9NQXBwbGljYXRpb25DYWNoZTo6RVJST1JfRVZFTlQsIG1f
YXNzb2NpYXRlZERvY3VtZW50TG9hZGVycyk7CiAgICAgICAgICAgICAgICAgLy8gRGlzYXNzb2Np
YXRlIHRoZSBwZW5kaW5nIG1hc3RlciBlbnRyaWVzIGZyb20gdGhlIGZhaWxlZCBuZXcgY2FjaGUu
IE5vdGUgdGhhdAogICAgICAgICAgICAgICAgIC8vIGFsbCBvdGhlciBsb2FkZXJzIGluIHRoZSBt
X2Fzc29jaWF0ZWREb2N1bWVudExvYWRlcnMgYXJlIHN0aWxsIGFzc29jaWF0ZWQgd2l0aAogICAg
ICAgICAgICAgICAgIC8vIHNvbWUgb3RoZXIgY2FjaGUgaW4gdGhpcyBncm91cC4gVGhleSBhcmUg
bm90IGFzc29jaWF0ZWQgd2l0aCB0aGUgZmFpbGVkIG5ldyBjYWNoZS4KQEAgLTg0Niw3ICs4NDcs
NyBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6c3RhcnRMb2FkaW5nCiAgICAgCiAgICAg
RW50cnlNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nRW50cmllcy5iZWdpbigpOwog
Ci0gICAgcG9zdExpc3RlbmVyVGFzaygmRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbFByb2dyZXNz
TGlzdGVuZXIsIG1fYXNzb2NpYXRlZERvY3VtZW50TG9hZGVycyk7CisgICAgcG9zdExpc3RlbmVy
VGFzayhET01BcHBsaWNhdGlvbkNhY2hlOjpQUk9HUkVTU19FVkVOVCwgbV9hc3NvY2lhdGVkRG9j
dW1lbnRMb2FkZXJzKTsKIAogICAgIEFTU0VSVCghbV9jdXJyZW50SGFuZGxlKTsKICAgICAKQEAg
LTkxMCw3ICs5MTEsNyBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6YXNzb2NpYXRlRG9j
CiAKICAgICBBU1NFUlQoIW1faXNPYnNvbGV0ZSk7CiAKLSAgICBsb2FkZXItPnNldEFwcGxpY2F0
aW9uQ2FjaGUoY2FjaGUpOworICAgIGxvYWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+c2V0
QXBwbGljYXRpb25DYWNoZShjYWNoZSk7CiAKICAgICBBU1NFUlQoIW1fYXNzb2NpYXRlZERvY3Vt
ZW50TG9hZGVycy5jb250YWlucyhsb2FkZXIpKTsKICAgICBtX2Fzc29jaWF0ZWREb2N1bWVudExv
YWRlcnMuYWRkKGxvYWRlcik7CkBAIC05NDQsMzkgKzk0NSw0NCBAQCB2b2lkIEFwcGxpY2F0aW9u
Q2FjaGVHcm91cDo6c2NoZWR1bGVSZWFjCiB9CiAKIGNsYXNzIENhbGxDYWNoZUxpc3RlbmVyVGFz
ayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKLSAgICB0eXBlZGVmIHZv
aWQgKERPTUFwcGxpY2F0aW9uQ2FjaGU6OipMaXN0ZW5lckZ1bmN0aW9uKSgpOwogcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbGxDYWNoZUxpc3RlbmVyVGFzaz4gY3JlYXRlKExpc3Rl
bmVyRnVuY3Rpb24gbGlzdGVuZXJGdW5jdGlvbikKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYWxs
Q2FjaGVMaXN0ZW5lclRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPERvY3VtZW50TG9hZGVyPiBsb2Fk
ZXIsIERPTUFwcGxpY2F0aW9uQ2FjaGU6OkV2ZW50VHlwZSBldmVudFR5cGUpCiAgICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENhbGxDYWNoZUxpc3RlbmVyVGFzayhsaXN0ZW5lckZ1
bmN0aW9uKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FsbENhY2hlTGlzdGVuZXJU
YXNrKGxvYWRlciwgZXZlbnRUeXBlKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB2b2lkIHBlcmZv
cm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAgewotICAgICAgICBB
U1NFUlQoY29udGV4dC0+aXNEb2N1bWVudCgpKTsKLSAgICAgICAgaWYgKERPTVdpbmRvdyogd2lu
ZG93ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250ZXh0KS0+ZG9tV2luZG93KCkpIHsKLSAg
ICAgICAgICAgIGlmIChET01BcHBsaWNhdGlvbkNhY2hlKiBkb21DYWNoZSA9IHdpbmRvdy0+b3B0
aW9uYWxBcHBsaWNhdGlvbkNhY2hlKCkpCi0gICAgICAgICAgICAgICAgKGRvbUNhY2hlLT4qbV9s
aXN0ZW5lckZ1bmN0aW9uKSgpOwotICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBU1NFUlRf
VU5VU0VEKGNvbnRleHQsIGNvbnRleHQtPmlzRG9jdW1lbnQoKSk7CisgICAgICAgIEZyYW1lKiBm
cmFtZSA9IG1fZG9jdW1lbnRMb2FkZXItPmZyYW1lKCk7CisgICAgICAgIGlmICghZnJhbWUpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgCisgICAgICAgIEFTU0VSVChmcmFtZS0+bG9hZGVyKCkt
PmRvY3VtZW50TG9hZGVyKCkgPT0gbV9kb2N1bWVudExvYWRlci5nZXQoKSk7CisKKyAgICAgICAg
bV9kb2N1bWVudExvYWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+bm90aWZ5RXZlbnRMaXN0
ZW5lcihtX2V2ZW50VHlwZSk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIENhbGxDYWNoZUxpc3Rl
bmVyVGFzayhMaXN0ZW5lckZ1bmN0aW9uIGxpc3RlbmVyRnVuY3Rpb24pCi0gICAgICAgIDogbV9s
aXN0ZW5lckZ1bmN0aW9uKGxpc3RlbmVyRnVuY3Rpb24pCisgICAgQ2FsbENhY2hlTGlzdGVuZXJU
YXNrKFBhc3NSZWZQdHI8RG9jdW1lbnRMb2FkZXI+IGxvYWRlciwgRE9NQXBwbGljYXRpb25DYWNo
ZTo6RXZlbnRUeXBlIGV2ZW50VHlwZSkKKyAgICAgICAgOiBtX2RvY3VtZW50TG9hZGVyKGxvYWRl
cikKKyAgICAgICAgLCBtX2V2ZW50VHlwZShldmVudFR5cGUpCiAgICAgewogICAgIH0KIAotICAg
IExpc3RlbmVyRnVuY3Rpb24gbV9saXN0ZW5lckZ1bmN0aW9uOworICAgIFJlZlB0cjxEb2N1bWVu
dExvYWRlcj4gbV9kb2N1bWVudExvYWRlcjsKKyAgICBET01BcHBsaWNhdGlvbkNhY2hlOjpFdmVu
dFR5cGUgbV9ldmVudFR5cGU7CiB9OwogCi12b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6cG9z
dExpc3RlbmVyVGFzayhMaXN0ZW5lckZ1bmN0aW9uIGxpc3RlbmVyRnVuY3Rpb24sIGNvbnN0IEhh
c2hTZXQ8RG9jdW1lbnRMb2FkZXIqPiYgbG9hZGVyU2V0KQordm9pZCBBcHBsaWNhdGlvbkNhY2hl
R3JvdXA6OnBvc3RMaXN0ZW5lclRhc2soRE9NQXBwbGljYXRpb25DYWNoZTo6RXZlbnRUeXBlIGV2
ZW50VHlwZSwgY29uc3QgSGFzaFNldDxEb2N1bWVudExvYWRlcio+JiBsb2FkZXJTZXQpCiB7CiAg
ICAgSGFzaFNldDxEb2N1bWVudExvYWRlcio+Ojpjb25zdF9pdGVyYXRvciBsb2FkZXJTZXRFbmQg
PSBsb2FkZXJTZXQuZW5kKCk7CiAgICAgZm9yIChIYXNoU2V0PERvY3VtZW50TG9hZGVyKj46OmNv
bnN0X2l0ZXJhdG9yIGl0ZXIgPSBsb2FkZXJTZXQuYmVnaW4oKTsgaXRlciAhPSBsb2FkZXJTZXRF
bmQ7ICsraXRlcikKLSAgICAgICAgcG9zdExpc3RlbmVyVGFzayhsaXN0ZW5lckZ1bmN0aW9uLCAq
aXRlcik7CisgICAgICAgIHBvc3RMaXN0ZW5lclRhc2soZXZlbnRUeXBlLCAqaXRlcik7CiB9CiAK
LXZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpwb3N0TGlzdGVuZXJUYXNrKExpc3RlbmVyRnVu
Y3Rpb24gbGlzdGVuZXJGdW5jdGlvbiwgRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKK3ZvaWQgQXBw
bGljYXRpb25DYWNoZUdyb3VwOjpwb3N0TGlzdGVuZXJUYXNrKERPTUFwcGxpY2F0aW9uQ2FjaGU6
OkV2ZW50VHlwZSBldmVudFR5cGUsIERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiB7CiAgICAgRnJh
bWUqIGZyYW1lID0gbG9hZGVyLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCkBAIC05ODQsNyAr
OTkwLDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OnBvc3RMaXN0ZW5lcgogICAgIAog
ICAgIEFTU0VSVChmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkgPT0gbG9hZGVyKTsK
IAotICAgIGZyYW1lLT5kb2N1bWVudCgpLT5wb3N0VGFzayhDYWxsQ2FjaGVMaXN0ZW5lclRhc2s6
OmNyZWF0ZShsaXN0ZW5lckZ1bmN0aW9uKSk7CisgICAgZnJhbWUtPmRvY3VtZW50KCktPnBvc3RU
YXNrKENhbGxDYWNoZUxpc3RlbmVyVGFzazo6Y3JlYXRlKGxvYWRlciwgZXZlbnRUeXBlKSk7CiB9
CiAKIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpjbGVhclN0b3JhZ2VJRCgpCkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuaAkocmV2
aXNpb24gNDY1NjgpCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hl
R3JvdXAuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KIAorI2luY2x1ZGUgIkRPTUFwcGxp
Y2F0aW9uQ2FjaGUuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgpAQCAtNDIsNyArNDMsNiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGU7CiBjbGFzcyBBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2U7Ci1jbGFzcyBET01BcHBsaWNhdGlvbkNhY2hlOwogY2xhc3MgRG9j
dW1lbnQ7CiBjbGFzcyBEb2N1bWVudExvYWRlcjsKIGNsYXNzIEZyYW1lOwpAQCAtOTIsOSArOTIs
OCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgdHlwZWRlZiB2b2lkIChET01BcHBsaWNhdGlv
bkNhY2hlOjoqTGlzdGVuZXJGdW5jdGlvbikoKTsKLSAgICBzdGF0aWMgdm9pZCBwb3N0TGlzdGVu
ZXJUYXNrKExpc3RlbmVyRnVuY3Rpb24sIGNvbnN0IEhhc2hTZXQ8RG9jdW1lbnRMb2FkZXIqPiYp
OwotICAgIHN0YXRpYyB2b2lkIHBvc3RMaXN0ZW5lclRhc2soTGlzdGVuZXJGdW5jdGlvbiwgY29u
c3QgVmVjdG9yPFJlZlB0cjxEb2N1bWVudExvYWRlcj4gPiYgbG9hZGVycyk7Ci0gICAgc3RhdGlj
IHZvaWQgcG9zdExpc3RlbmVyVGFzayhMaXN0ZW5lckZ1bmN0aW9uLCBEb2N1bWVudExvYWRlciop
OworICAgIHN0YXRpYyB2b2lkIHBvc3RMaXN0ZW5lclRhc2soRE9NQXBwbGljYXRpb25DYWNoZTo6
RXZlbnRUeXBlLCBjb25zdCBIYXNoU2V0PERvY3VtZW50TG9hZGVyKj4mKTsKKyAgICBzdGF0aWMg
dm9pZCBwb3N0TGlzdGVuZXJUYXNrKERPTUFwcGxpY2F0aW9uQ2FjaGU6OkV2ZW50VHlwZSwgRG9j
dW1lbnRMb2FkZXIqKTsKICAgICB2b2lkIHNjaGVkdWxlUmVhY2hlZE1heEFwcENhY2hlU2l6ZUNh
bGxiYWNrKCk7CiAKICAgICBQYXNzUmVmUHRyPFJlc291cmNlSGFuZGxlPiBjcmVhdGVSZXNvdXJj
ZUhhbmRsZShjb25zdCBLVVJMJiwgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiBuZXdlc3RDYWNo
ZWRSZXNvdXJjZSk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNh
Y2hlSG9zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGlj
YXRpb25DYWNoZUhvc3QuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9sb2FkZXIvYXBwY2Fj
aGUvQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM2OSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUhvc3QuaCIKKwor
I2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisKKyNpbmNsdWRlICJBcHBsaWNh
dGlvbkNhY2hlLmgiCisjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUdyb3VwLmgiCisjaW5jbHVk
ZSAiQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmgiCisjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIu
aCIKKyNpbmNsdWRlICJET01BcHBsaWNhdGlvbkNhY2hlLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIK
KyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50Lmgi
CisjaW5jbHVkZSAiTWFpblJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2Fk
ZXIuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0FwcGxpY2F0aW9uQ2FjaGVIb3N0OjpBcHBsaWNh
dGlvbkNhY2hlSG9zdChEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIpCisgICAgOiBtX0RP
TUFwcGxpY2F0aW9uQ2FjaGUoMCkKKyAgICAsIG1fZG9jdW1lbnRMb2FkZXIoZG9jdW1lbnRMb2Fk
ZXIpCisgICAgLCBtX2NhbmRpZGF0ZUFwcGxpY2F0aW9uQ2FjaGVHcm91cCgwKQoreworICAgIEFT
U0VSVChtX2RvY3VtZW50TG9hZGVyKTsKK30KKworQXBwbGljYXRpb25DYWNoZUhvc3Q6On5BcHBs
aWNhdGlvbkNhY2hlSG9zdCgpCit7CisgICAgaWYgKG1fYXBwbGljYXRpb25DYWNoZSkKKyAgICAg
ICAgbV9hcHBsaWNhdGlvbkNhY2hlLT5ncm91cCgpLT5kaXNhc3NvY2lhdGVEb2N1bWVudExvYWRl
cihtX2RvY3VtZW50TG9hZGVyKTsKKyAgICBlbHNlIGlmIChtX2NhbmRpZGF0ZUFwcGxpY2F0aW9u
Q2FjaGVHcm91cCkKKyAgICAgICAgbV9jYW5kaWRhdGVBcHBsaWNhdGlvbkNhY2hlR3JvdXAtPmRp
c2Fzc29jaWF0ZURvY3VtZW50TG9hZGVyKG1fZG9jdW1lbnRMb2FkZXIpOworfQorCit2b2lkIEFw
cGxpY2F0aW9uQ2FjaGVIb3N0OjpzZWxlY3RDYWNoZVdpdGhvdXRNYW5pZmVzdCgpCit7CisgICAg
QXBwbGljYXRpb25DYWNoZUdyb3VwOjpzZWxlY3RDYWNoZVdpdGhvdXRNYW5pZmVzdFVSTChtX2Rv
Y3VtZW50TG9hZGVyLT5mcmFtZSgpKTsKK30KKwordm9pZCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6
c2VsZWN0Q2FjaGVXaXRoTWFuaWZlc3QoY29uc3QgS1VSTCYgbWFuaWZlc3RVUkwpCit7CisgICAg
QXBwbGljYXRpb25DYWNoZUdyb3VwOjpzZWxlY3RDYWNoZShtX2RvY3VtZW50TG9hZGVyLT5mcmFt
ZSgpLCBtYW5pZmVzdFVSTCk7Cit9CisKK3ZvaWQgQXBwbGljYXRpb25DYWNoZUhvc3Q6Om1heWJl
TG9hZE1haW5SZXNvdXJjZShSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN1YnN0aXR1dGVEYXRh
JiBzdWJzdGl0dXRlRGF0YSkKK3sKKyAgICAvLyBDaGVjayBpZiB0aGlzIHJlcXVlc3Qgc2hvdWxk
IGJlIGxvYWRlZCBmcm9tIHRoZSBhcHBsaWNhdGlvbiBjYWNoZQorICAgIGlmICghc3Vic3RpdHV0
ZURhdGEuaXNWYWxpZCgpICYmIGlzQXBwbGljYXRpb25DYWNoZUVuYWJsZWQoKSkgeworICAgICAg
ICBBU1NFUlQoIW1fbWFpblJlc291cmNlQXBwbGljYXRpb25DYWNoZSk7CisKKyAgICAgICAgbV9t
YWluUmVzb3VyY2VBcHBsaWNhdGlvbkNhY2hlID0gQXBwbGljYXRpb25DYWNoZUdyb3VwOjpjYWNo
ZUZvck1haW5SZXF1ZXN0KHJlcXVlc3QsIG1fZG9jdW1lbnRMb2FkZXIpOworCisgICAgICAgIGlm
IChtX21haW5SZXNvdXJjZUFwcGxpY2F0aW9uQ2FjaGUpIHsKKyAgICAgICAgICAgIC8vIEdldCB0
aGUgcmVzb3VyY2UgZnJvbSB0aGUgYXBwbGljYXRpb24gY2FjaGUuIEJ5IGRlZmluaXRpb24sIGNh
Y2hlRm9yTWFpblJlcXVlc3QoKSByZXR1cm5zIGEgY2FjaGUgdGhhdCBjb250YWlucyB0aGUgcmVz
b3VyY2UuCisgICAgICAgICAgICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNlID0g
bV9tYWluUmVzb3VyY2VBcHBsaWNhdGlvbkNhY2hlLT5yZXNvdXJjZUZvclJlcXVlc3QocmVxdWVz
dCk7CisgICAgICAgICAgICBzdWJzdGl0dXRlRGF0YSA9IFN1YnN0aXR1dGVEYXRhKHJlc291cmNl
LT5kYXRhKCksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXNvdXJjZS0+cmVzcG9uc2UoKS5taW1lVHlwZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS0+cmVzcG9uc2UoKS50ZXh0RW5jb2RpbmdOYW1l
KCksIEtVUkwoKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgQXBwbGljYXRpb25DYWNo
ZUhvc3Q6Om1heWJlTG9hZEZhbGxiYWNrRm9yTWFpblJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcikKK3sKKyAgICBpZiAoci5o
dHRwU3RhdHVzQ29kZSgpIC8gMTAwID09IDQgfHwgci5odHRwU3RhdHVzQ29kZSgpIC8gMTAwID09
IDUpIHsKKyAgICAgICAgQVNTRVJUKCFtX21haW5SZXNvdXJjZUFwcGxpY2F0aW9uQ2FjaGUpOwor
ICAgICAgICBpZiAoaXNBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCgpKSB7CisgICAgICAgICAgICBt
X21haW5SZXNvdXJjZUFwcGxpY2F0aW9uQ2FjaGUgPSBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmZh
bGxiYWNrQ2FjaGVGb3JNYWluUmVxdWVzdChyZXF1ZXN0LCBkb2N1bWVudExvYWRlcigpKTsKKwor
ICAgICAgICAgICAgaWYgKHNjaGVkdWxlTG9hZEZhbGxiYWNrUmVzb3VyY2VGcm9tQXBwbGljYXRp
b25DYWNoZShkb2N1bWVudExvYWRlcigpLT5tYWluUmVzb3VyY2VMb2FkZXIoKSwgbV9tYWluUmVz
b3VyY2VBcHBsaWNhdGlvbkNhY2hlLmdldCgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQXBwbGlj
YXRpb25DYWNoZUhvc3Q6Om1heWJlTG9hZEZhbGxiYWNrRm9yTWFpbkVycm9yKGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit7CisgICAg
aWYgKCFlcnJvci5pc0NhbmNlbGxhdGlvbigpKSB7CisgICAgICAgIEFTU0VSVCghbV9tYWluUmVz
b3VyY2VBcHBsaWNhdGlvbkNhY2hlKTsKKyAgICAgICAgaWYgKGlzQXBwbGljYXRpb25DYWNoZUVu
YWJsZWQoKSkgeworICAgICAgICAgICAgbV9tYWluUmVzb3VyY2VBcHBsaWNhdGlvbkNhY2hlID0g
QXBwbGljYXRpb25DYWNoZUdyb3VwOjpmYWxsYmFja0NhY2hlRm9yTWFpblJlcXVlc3QocmVxdWVz
dCwgbV9kb2N1bWVudExvYWRlcik7CisKKyAgICAgICAgICAgIGlmIChzY2hlZHVsZUxvYWRGYWxs
YmFja1Jlc291cmNlRnJvbUFwcGxpY2F0aW9uQ2FjaGUoZG9jdW1lbnRMb2FkZXIoKS0+bWFpblJl
c291cmNlTG9hZGVyKCksIG1fbWFpblJlc291cmNlQXBwbGljYXRpb25DYWNoZS5nZXQoKSkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJu
IGZhbHNlOworfQorCit2b2lkIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjptYWluUmVzb3VyY2VEYXRh
UmVjZWl2ZWQoY29uc3QgY2hhciosIGludCwgbG9uZyBsb25nLCBib29sKQoreworICAgIC8vIFRo
aXMgbWV0aG9kIGlzIGhlcmUgdG8gZmFjaWxpdGF0ZSBhbHRlcm5hdGUgaW1wbGVtZXRhdGlvbnMg
b2YgdGhpcyBpbnRlcmZhY2UgYnkgdGhlIGhvc3QgYnJvd3Nlci4KK30KKwordm9pZCBBcHBsaWNh
dGlvbkNhY2hlSG9zdDo6ZmFpbGVkTG9hZGluZ01haW5SZXNvdXJjZSgpCit7CisgICAgQXBwbGlj
YXRpb25DYWNoZUdyb3VwKiBncm91cCA9IG1fY2FuZGlkYXRlQXBwbGljYXRpb25DYWNoZUdyb3Vw
OworICAgIGlmICghZ3JvdXAgJiYgbV9hcHBsaWNhdGlvbkNhY2hlKSB7CisgICAgICAgIEFTU0VS
VCghbWFpblJlc291cmNlQXBwbGljYXRpb25DYWNoZSgpKTsgLy8gSWYgdGhlIG1haW4gcmVzb3Vy
Y2Ugd2VyZSBsb2FkZWQgZnJvbSBhIGNhY2hlLCBpdCB3b3VsZG4ndCBmYWlsLgorICAgICAgICBn
cm91cCA9IG1fYXBwbGljYXRpb25DYWNoZS0+Z3JvdXAoKTsKKyAgICB9CisgICAgCisgICAgaWYg
KGdyb3VwKQorICAgICAgICBncm91cC0+ZmFpbGVkTG9hZGluZ01haW5SZXNvdXJjZShtX2RvY3Vt
ZW50TG9hZGVyKTsKK30KKwordm9pZCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6ZmluaXNoZWRMb2Fk
aW5nTWFpblJlc291cmNlKCkKK3sKKyAgICBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIGdyb3VwID0g
Y2FuZGlkYXRlQXBwbGljYXRpb25DYWNoZUdyb3VwKCk7CisgICAgaWYgKCFncm91cCAmJiBhcHBs
aWNhdGlvbkNhY2hlKCkgJiYgIW1haW5SZXNvdXJjZUFwcGxpY2F0aW9uQ2FjaGUoKSkKKyAgICAg
ICAgZ3JvdXAgPSBhcHBsaWNhdGlvbkNhY2hlKCktPmdyb3VwKCk7CisgICAgCisgICAgaWYgKGdy
b3VwKQorICAgICAgICBncm91cC0+ZmluaXNoZWRMb2FkaW5nTWFpblJlc291cmNlKG1fZG9jdW1l
bnRMb2FkZXIpOworfQorCitib29sIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjptYXliZUxvYWRSZXNv
dXJjZShSZXNvdXJjZUxvYWRlciogbG9hZGVyLCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNv
bnN0IEtVUkwmIG9yaWdpbmFsVVJMKQoreworICAgIGlmICghaXNBcHBsaWNhdGlvbkNhY2hlRW5h
YmxlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKHJlcXVlc3QudXJs
KCkgIT0gb3JpZ2luYWxVUkwpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFwcGxpY2F0
aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2U7CisgICAgaWYgKCFzaG91bGRMb2FkUmVzb3VyY2VG
cm9tQXBwbGljYXRpb25DYWNoZShyZXF1ZXN0LCByZXNvdXJjZSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICBtX2RvY3VtZW50TG9hZGVyLT5tX3BlbmRpbmdTdWJzdGl0dXRlUmVz
b3VyY2VzLnNldChsb2FkZXIsIHJlc291cmNlKTsKKyAgICBtX2RvY3VtZW50TG9hZGVyLT5kZWxp
dmVyU3Vic3RpdHV0ZVJlc291cmNlc0FmdGVyRGVsYXkoKTsKKyAgICAgICAgCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgQXBwbGljYXRpb25DYWNoZUhvc3Q6Om1heWJlTG9hZEZhbGxiYWNr
Rm9yUmVkaXJlY3QoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVyLCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCit7
CisgICAgaWYgKCFyZWRpcmVjdFJlc3BvbnNlLmlzTnVsbCgpICYmICFwcm90b2NvbEhvc3RBbmRQ
b3J0QXJlRXF1YWwocmVxdWVzdC51cmwoKSwgcmVkaXJlY3RSZXNwb25zZS51cmwoKSkpCisgICAg
ICAgIGlmIChzY2hlZHVsZUxvYWRGYWxsYmFja1Jlc291cmNlRnJvbUFwcGxpY2F0aW9uQ2FjaGUo
cmVzb3VyY2VMb2FkZXIpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjptYXliZUxvYWRGYWxsYmFja0Zv
clJlc3BvbnNlKFJlc291cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRlciwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgaWYgKHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkg
LyAxMDAgPT0gNCB8fCByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpIC8gMTAwID09IDUpCisgICAg
ICAgIGlmIChzY2hlZHVsZUxvYWRGYWxsYmFja1Jlc291cmNlRnJvbUFwcGxpY2F0aW9uQ2FjaGUo
cmVzb3VyY2VMb2FkZXIpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjptYXliZUxvYWRGYWxsYmFja0Zv
ckVycm9yKFJlc291cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRlciwgY29uc3QgUmVzb3VyY2VFcnJv
ciYgZXJyb3IpCit7CisgICAgaWYgKCFlcnJvci5pc0NhbmNlbGxhdGlvbigpKQorICAgICAgICBp
ZiAoc2NoZWR1bGVMb2FkRmFsbGJhY2tSZXNvdXJjZUZyb21BcHBsaWNhdGlvbkNhY2hlKHJlc291
cmNlTG9hZGVyKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsK
K30KKworYm9vbCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6bWF5YmVMb2FkU3luY2hyb25vdXNseShS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJl
c3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQoreworICAgIEFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZSogcmVzb3VyY2U7CisgICAgaWYgKHNob3VsZExvYWRSZXNvdXJjZUZyb21B
cHBsaWNhdGlvbkNhY2hlKHJlcXVlc3QsIHJlc291cmNlKSkgeworICAgICAgICBpZiAocmVzb3Vy
Y2UpIHsKKyAgICAgICAgICAgIHJlc3BvbnNlID0gcmVzb3VyY2UtPnJlc3BvbnNlKCk7CisgICAg
ICAgICAgICBkYXRhLmFwcGVuZChyZXNvdXJjZS0+ZGF0YSgpLT5kYXRhKCksIHJlc291cmNlLT5k
YXRhKCktPnNpemUoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlcnJvciA9IGRv
Y3VtZW50TG9hZGVyKCktPmZyYW1lTG9hZGVyKCktPmNsaWVudCgpLT5jYW5ub3RTaG93VVJMRXJy
b3IocmVxdWVzdCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IHJldHVybiBmYWxzZTsKK30KKwordm9pZCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6bWF5YmVMb2Fk
RmFsbGJhY2tTeW5jaHJvbm91c2x5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVz
b3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hh
cj4mIGRhdGEpCit7CisgICAgLy8gSWYgbm9ybWFsIGxvYWRpbmcgcmVzdWx0cyBpbiBhIHJlZGly
ZWN0IHRvIGEgcmVzb3VyY2Ugd2l0aCBhbm90aGVyIG9yaWdpbiAoaW5kaWNhdGl2ZSBvZiBhIGNh
cHRpdmUgcG9ydGFsKSwgb3IgYSA0eHggb3IgNXh4IHN0YXR1cyBjb2RlIG9yIGVxdWl2YWxlbnQs
CisgICAgLy8gb3IgaWYgdGhlcmUgd2VyZSBuZXR3b3JrIGVycm9ycyAoYnV0IG5vdCBpZiB0aGUg
dXNlciBjYW5jZWxlZCB0aGUgZG93bmxvYWQpLCB0aGVuIGluc3RlYWQgZ2V0LCBmcm9tIHRoZSBj
YWNoZSwgdGhlIHJlc291cmNlIG9mIHRoZSBmYWxsYmFjayBlbnRyeQorICAgIC8vIGNvcnJlc3Bv
bmRpbmcgdG8gdGhlIG1hdGNoZWQgbmFtZXNwYWNlLgorICAgIGlmICgoIWVycm9yLmlzTnVsbCgp
ICYmICFlcnJvci5pc0NhbmNlbGxhdGlvbigpKQorICAgICAgICAgfHwgcmVzcG9uc2UuaHR0cFN0
YXR1c0NvZGUoKSAvIDEwMCA9PSA0IHx8IHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgLyAxMDAg
PT0gNQorICAgICAgICAgfHwgIXByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbChyZXF1ZXN0LnVy
bCgpLCByZXNwb25zZS51cmwoKSkpIHsKKyAgICAgICAgQXBwbGljYXRpb25DYWNoZVJlc291cmNl
KiByZXNvdXJjZTsKKyAgICAgICAgaWYgKGdldEFwcGxpY2F0aW9uQ2FjaGVGYWxsYmFja1Jlc291
cmNlKHJlcXVlc3QsIHJlc291cmNlKSkgeworICAgICAgICAgICAgcmVzcG9uc2UgPSByZXNvdXJj
ZS0+cmVzcG9uc2UoKTsKKyAgICAgICAgICAgIGRhdGEuY2xlYXIoKTsKKyAgICAgICAgICAgIGRh
dGEuYXBwZW5kKHJlc291cmNlLT5kYXRhKCktPmRhdGEoKSwgcmVzb3VyY2UtPmRhdGEoKS0+c2l6
ZSgpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6
Y2FuQ2FjaGVJblBhZ2VDYWNoZSgpIGNvbnN0IAoreworICAgIHJldHVybiAhYXBwbGljYXRpb25D
YWNoZSgpICYmICFjYW5kaWRhdGVBcHBsaWNhdGlvbkNhY2hlR3JvdXAoKTsKK30KKwordm9pZCBB
cHBsaWNhdGlvbkNhY2hlSG9zdDo6c2V0Q2FuZGlkYXRlQXBwbGljYXRpb25DYWNoZUdyb3VwKEFw
cGxpY2F0aW9uQ2FjaGVHcm91cCogZ3JvdXApCit7CisgICAgQVNTRVJUKCFtX2FwcGxpY2F0aW9u
Q2FjaGUpOworICAgIG1fY2FuZGlkYXRlQXBwbGljYXRpb25DYWNoZUdyb3VwID0gZ3JvdXA7Cit9
CisgICAgCit2b2lkIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpzZXRBcHBsaWNhdGlvbkNhY2hlKFBh
c3NSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gYXBwbGljYXRpb25DYWNoZSkKK3sKKyAgICBpZiAo
bV9jYW5kaWRhdGVBcHBsaWNhdGlvbkNhY2hlR3JvdXApIHsKKyAgICAgICAgQVNTRVJUKCFtX2Fw
cGxpY2F0aW9uQ2FjaGUpOworICAgICAgICBtX2NhbmRpZGF0ZUFwcGxpY2F0aW9uQ2FjaGVHcm91
cCA9IDA7CisgICAgfQorCisgICAgbV9hcHBsaWNhdGlvbkNhY2hlID0gYXBwbGljYXRpb25DYWNo
ZTsKK30KKworYm9vbCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6c2hvdWxkTG9hZFJlc291cmNlRnJv
bUFwcGxpY2F0aW9uQ2FjaGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2UqJiByZXNvdXJjZSkKK3sKKyAgICBBcHBsaWNhdGlvbkNhY2hlKiBj
YWNoZSA9IGFwcGxpY2F0aW9uQ2FjaGUoKTsKKyAgICBpZiAoIWNhY2hlIHx8ICFjYWNoZS0+aXND
b21wbGV0ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBJZiB0aGUgcmVzb3Vy
Y2UgaXMgbm90IGEgSFRUUC9IVFRQUyBHRVQsIHRoZW4gYWJvcnQKKyAgICBpZiAoIUFwcGxpY2F0
aW9uQ2FjaGU6OnJlcXVlc3RJc0hUVFBPckhUVFBTR2V0KHJlcXVlc3QpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAvLyBJZiB0aGUgcmVzb3VyY2UncyBVUkwgaXMgYW4gbWFzdGVyIGVu
dHJ5LCB0aGUgbWFuaWZlc3QsIGFuIGV4cGxpY2l0IGVudHJ5LCBvciBhIGZhbGxiYWNrIGVudHJ5
CisgICAgLy8gaW4gdGhlIGFwcGxpY2F0aW9uIGNhY2hlLCB0aGVuIGdldCB0aGUgcmVzb3VyY2Ug
ZnJvbSB0aGUgY2FjaGUgKGluc3RlYWQgb2YgZmV0Y2hpbmcgaXQpLgorICAgIHJlc291cmNlID0g
Y2FjaGUtPnJlc291cmNlRm9yVVJMKHJlcXVlc3QudXJsKCkpOworCisgICAgLy8gUmVzb3VyY2Vz
IHRoYXQgbWF0Y2ggZmFsbGJhY2sgbmFtZXNwYWNlcyBvciBvbmxpbmUgd2hpdGVsaXN0IGVudHJp
ZXMgYXJlIGZldGNoZWQgZnJvbSB0aGUgbmV0d29yaywKKyAgICAvLyB1bmxlc3MgdGhleSBhcmUg
YWxzbyBjYWNoZWQuCisgICAgaWYgKCFyZXNvdXJjZSAmJiAoY2FjaGUtPnVybE1hdGNoZXNGYWxs
YmFja05hbWVzcGFjZShyZXF1ZXN0LnVybCgpKSB8fCBjYWNoZS0+aXNVUkxJbk9ubGluZVdoaXRl
bGlzdChyZXF1ZXN0LnVybCgpKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFJl
c291cmNlcyB0aGF0IGFyZSBub3QgcHJlc2VudCBpbiB0aGUgbWFuaWZlc3Qgd2lsbCBhbHdheXMg
ZmFpbCB0byBsb2FkIChhdCBsZWFzdCwgYWZ0ZXIgdGhlCisgICAgLy8gY2FjaGUgaGFzIGJlZW4g
cHJpbWVkIHRoZSBmaXJzdCB0aW1lKSwgbWFraW5nIHRoZSB0ZXN0aW5nIG9mIG9mZmxpbmUgYXBw
bGljYXRpb25zIHNpbXBsZXIuCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQXBwbGljYXRp
b25DYWNoZUhvc3Q6OmdldEFwcGxpY2F0aW9uQ2FjaGVGYWxsYmFja1Jlc291cmNlKGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiYgcmVzb3Vy
Y2UsIEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlKQoreworICAgIGlmICghY2FjaGUpIHsKKyAgICAg
ICAgY2FjaGUgPSBhcHBsaWNhdGlvbkNhY2hlKCk7CisgICAgICAgIGlmICghY2FjaGUpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghY2FjaGUtPmlzQ29tcGxldGUo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIC8vIElmIHRoZSByZXNvdXJjZSBp
cyBub3QgYSBIVFRQL0hUVFBTIEdFVCwgdGhlbiBhYm9ydAorICAgIGlmICghQXBwbGljYXRpb25D
YWNoZTo6cmVxdWVzdElzSFRUUE9ySFRUUFNHZXQocmVxdWVzdCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIEtVUkwgZmFsbGJhY2tVUkw7CisgICAgaWYgKCFjYWNoZS0+dXJsTWF0Y2hl
c0ZhbGxiYWNrTmFtZXNwYWNlKHJlcXVlc3QudXJsKCksICZmYWxsYmFja1VSTCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHJlc291cmNlID0gY2FjaGUtPnJlc291cmNlRm9yVVJMKGZh
bGxiYWNrVVJMKTsKKyAgICBBU1NFUlQocmVzb3VyY2UpOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgQXBwbGljYXRpb25DYWNoZUhvc3Q6OnNjaGVkdWxlTG9hZEZhbGxiYWNrUmVzb3Vy
Y2VGcm9tQXBwbGljYXRpb25DYWNoZShSZXNvdXJjZUxvYWRlciogbG9hZGVyLCBBcHBsaWNhdGlv
bkNhY2hlKiBjYWNoZSkKK3sKKyAgICBpZiAoIWlzQXBwbGljYXRpb25DYWNoZUVuYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiBy
ZXNvdXJjZTsKKyAgICBpZiAoIWdldEFwcGxpY2F0aW9uQ2FjaGVGYWxsYmFja1Jlc291cmNlKGxv
YWRlci0+cmVxdWVzdCgpLCByZXNvdXJjZSwgY2FjaGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBtX2RvY3VtZW50TG9hZGVyLT5tX3BlbmRpbmdTdWJzdGl0dXRlUmVzb3VyY2VzLnNl
dChsb2FkZXIsIHJlc291cmNlKTsKKyAgICBtX2RvY3VtZW50TG9hZGVyLT5kZWxpdmVyU3Vic3Rp
dHV0ZVJlc291cmNlc0FmdGVyRGVsYXkoKTsKKyAgICAKKyAgICBsb2FkZXItPmhhbmRsZSgpLT5j
YW5jZWwoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitET01BcHBsaWNhdGlvbkNhY2hlOjpT
dGF0dXMgQXBwbGljYXRpb25DYWNoZUhvc3Q6OnN0YXR1cygpIGNvbnN0Cit7CisgICAgQXBwbGlj
YXRpb25DYWNoZSogY2FjaGUgPSBhcHBsaWNhdGlvbkNhY2hlKCk7ICAgIAorICAgIGlmICghY2Fj
aGUpCisgICAgICAgIHJldHVybiBET01BcHBsaWNhdGlvbkNhY2hlOjpVTkNBQ0hFRDsKKworICAg
IHN3aXRjaCAoY2FjaGUtPmdyb3VwKCktPnVwZGF0ZVN0YXR1cygpKSB7CisgICAgICAgIGNhc2Ug
QXBwbGljYXRpb25DYWNoZUdyb3VwOjpDaGVja2luZzoKKyAgICAgICAgICAgIHJldHVybiBET01B
cHBsaWNhdGlvbkNhY2hlOjpDSEVDS0lORzsKKyAgICAgICAgY2FzZSBBcHBsaWNhdGlvbkNhY2hl
R3JvdXA6OkRvd25sb2FkaW5nOgorICAgICAgICAgICAgcmV0dXJuIERPTUFwcGxpY2F0aW9uQ2Fj
aGU6OkRPV05MT0FESU5HOworICAgICAgICBjYXNlIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6SWRs
ZTogeworICAgICAgICAgICAgaWYgKGNhY2hlLT5ncm91cCgpLT5pc09ic29sZXRlKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIERPTUFwcGxpY2F0aW9uQ2FjaGU6Ok9CU09MRVRFOworICAgICAg
ICAgICAgaWYgKGNhY2hlICE9IGNhY2hlLT5ncm91cCgpLT5uZXdlc3RDYWNoZSgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBET01BcHBsaWNhdGlvbkNhY2hlOjpVUERBVEVSRUFEWTsKKyAgICAg
ICAgICAgIHJldHVybiBET01BcHBsaWNhdGlvbkNhY2hlOjpJRExFOworICAgICAgICB9CisgICAg
fQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIERPTUFwcGxpY2F0aW9u
Q2FjaGU6OlVOQ0FDSEVEOworfQorCitib29sIEFwcGxpY2F0aW9uQ2FjaGVIb3N0Ojp1cGRhdGUo
KQoreworICAgIEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlID0gYXBwbGljYXRpb25DYWNoZSgpOwor
ICAgIGlmICghY2FjaGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYWNoZS0+Z3JvdXAo
KS0+dXBkYXRlKG1fZG9jdW1lbnRMb2FkZXItPmZyYW1lKCksIEFwcGxpY2F0aW9uQ2FjaGVVcGRh
dGVXaXRob3V0QnJvd3NpbmdDb250ZXh0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBB
cHBsaWNhdGlvbkNhY2hlSG9zdDo6c3dhcENhY2hlKCkKK3sKKyAgICBBcHBsaWNhdGlvbkNhY2hl
KiBjYWNoZSA9IGFwcGxpY2F0aW9uQ2FjaGUoKTsKKyAgICBpZiAoIWNhY2hlKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAvLyBJZiB0aGUgZ3JvdXAgb2YgYXBwbGljYXRpb24gY2FjaGVz
IHRvIHdoaWNoIGNhY2hlIGJlbG9uZ3MgaGFzIHRoZSBsaWZlY3ljbGUgc3RhdHVzIG9ic29sZXRl
LCB1bmFzc29jaWF0ZSBkb2N1bWVudCBmcm9tIGNhY2hlLgorICAgIGlmIChjYWNoZS0+Z3JvdXAo
KS0+aXNPYnNvbGV0ZSgpKSB7CisgICAgICAgIGNhY2hlLT5ncm91cCgpLT5kaXNhc3NvY2lhdGVE
b2N1bWVudExvYWRlcihtX2RvY3VtZW50TG9hZGVyKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgLy8gSWYgdGhlcmUgaXMgbm8gbmV3ZXIgY2FjaGUsIHJhaXNlIGFuIElOVkFM
SURfU1RBVEVfRVJSIGV4Y2VwdGlvbi4KKyAgICBBcHBsaWNhdGlvbkNhY2hlKiBuZXdlc3RDYWNo
ZSA9IGNhY2hlLT5ncm91cCgpLT5uZXdlc3RDYWNoZSgpOworICAgIGlmIChjYWNoZSA9PSBuZXdl
c3RDYWNoZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIEFTU0VSVChjYWNoZS0+
Z3JvdXAoKSA9PSBuZXdlc3RDYWNoZS0+Z3JvdXAoKSk7CisgICAgc2V0QXBwbGljYXRpb25DYWNo
ZShuZXdlc3RDYWNoZSk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQXBwbGlj
YXRpb25DYWNoZUhvc3Q6OmlzQXBwbGljYXRpb25DYWNoZUVuYWJsZWQoKQoreworICAgIHJldHVy
biBtX2RvY3VtZW50TG9hZGVyLT5mcmFtZSgpLT5zZXR0aW5ncygpCisgICAgICAgICAgICYmIG1f
ZG9jdW1lbnRMb2FkZXItPmZyYW1lKCktPnNldHRpbmdzKCktPm9mZmxpbmVXZWJBcHBsaWNhdGlv
bkNhY2hlRW5hYmxlZCgpOworfQorCit9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
IC8vIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNv
cmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcApfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5h
bWU6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hl
L0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvYXBw
Y2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3QuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvbG9h
ZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTI4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBHb29nbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIEFwcGxpY2F0aW9uQ2FjaGVIb3N0X2gKKyNkZWZpbmUgQXBw
bGljYXRpb25DYWNoZUhvc3RfaAorCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9O
UykKKworI2luY2x1ZGUgIkRPTUFwcGxpY2F0aW9uQ2FjaGUuaCIKKyNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
KyAgICBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlOworICAgIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGVH
cm91cDsKKyAgICBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U7CisgICAgY2xhc3MgQXBw
bGljYXRpb25DYWNoZVN0b3JhZ2U7CisgICAgY2xhc3MgRG9jdW1lbnRMb2FkZXI7CisgICAgY2xh
c3MgS1VSTDsKKyAgICBjbGFzcyBSZXNvdXJjZUxvYWRlcjsKKyAgICBjbGFzcyBSZXNvdXJjZUVy
cm9yOworICAgIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKKyAgICBjbGFzcyBSZXNvdXJjZVJlc3Bv
bnNlOworICAgIGNsYXNzIFN1YnN0aXR1dGVEYXRhOworCisgICAgY2xhc3MgQXBwbGljYXRpb25D
YWNoZUhvc3QgeworICAgIHB1YmxpYzoKKyAgICAgICAgQXBwbGljYXRpb25DYWNoZUhvc3QoRG9j
dW1lbnRMb2FkZXIqKTsKKyAgICAgICAgfkFwcGxpY2F0aW9uQ2FjaGVIb3N0KCk7CisKKyAgICAg
ICAgdm9pZCBzZWxlY3RDYWNoZVdpdGhvdXRNYW5pZmVzdCgpOworICAgICAgICB2b2lkIHNlbGVj
dENhY2hlV2l0aE1hbmlmZXN0KGNvbnN0IEtVUkwmIG1hbmlmZXN0VVJMKTsKKworICAgICAgICB2
b2lkIG1heWJlTG9hZE1haW5SZXNvdXJjZShSZXNvdXJjZVJlcXVlc3QmLCBTdWJzdGl0dXRlRGF0
YSYpOworICAgICAgICBib29sIG1heWJlTG9hZEZhbGxiYWNrRm9yTWFpblJlc3BvbnNlKGNvbnN0
IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICAgICAgYm9v
bCBtYXliZUxvYWRGYWxsYmFja0Zvck1haW5FcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBj
b25zdCBSZXNvdXJjZUVycm9yJik7CisgICAgICAgIHZvaWQgbWFpblJlc291cmNlRGF0YVJlY2Vp
dmVkKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgsIGxvbmcgbG9uZyBsZW5ndGhSZWNlaXZl
ZCwgYm9vbCBhbGxBdE9uY2UpOworICAgICAgICB2b2lkIGZpbmlzaGVkTG9hZGluZ01haW5SZXNv
dXJjZSgpOworICAgICAgICB2b2lkIGZhaWxlZExvYWRpbmdNYWluUmVzb3VyY2UoKTsKKworICAg
ICAgICBib29sIG1heWJlTG9hZFJlc291cmNlKFJlc291cmNlTG9hZGVyKiwgUmVzb3VyY2VSZXF1
ZXN0JiwgY29uc3QgS1VSTCYgb3JpZ2luYWxVUkwpOworICAgICAgICBib29sIG1heWJlTG9hZEZh
bGxiYWNrRm9yUmVkaXJlY3QoUmVzb3VyY2VMb2FkZXIqLCBSZXNvdXJjZVJlcXVlc3QmLCBjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgICAgIGJvb2wgbWF5YmVMb2FkRmFsbGJhY2tGb3JS
ZXNwb25zZShSZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICAg
ICAgYm9vbCBtYXliZUxvYWRGYWxsYmFja0ZvckVycm9yKFJlc291cmNlTG9hZGVyKiwgY29uc3Qg
UmVzb3VyY2VFcnJvciYpOworCisgICAgICAgIGJvb2wgbWF5YmVMb2FkU3luY2hyb25vdXNseShS
ZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rv
cjxjaGFyPiYgZGF0YSk7CisgICAgICAgIHZvaWQgbWF5YmVMb2FkRmFsbGJhY2tTeW5jaHJvbm91
c2x5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3Bv
bnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKTsKKworICAgICAgICBib29sIGNhbkNhY2hlSW5QYWdl
Q2FjaGUoKSBjb25zdDsKKworICAgICAgICBET01BcHBsaWNhdGlvbkNhY2hlOjpTdGF0dXMgc3Rh
dHVzKCkgY29uc3Q7ICAKKyAgICAgICAgYm9vbCB1cGRhdGUoKTsKKyAgICAgICAgYm9vbCBzd2Fw
Q2FjaGUoKTsKKworICAgICAgICB2b2lkIHNldERPTUFwcGxpY2F0aW9uQ2FjaGUoRE9NQXBwbGlj
YXRpb25DYWNoZSogZG9tQXBwbGljYXRpb25DYWNoZSkKKyAgICAgICAgeworICAgICAgICAgICAg
QVNTRVJUKCFtX0RPTUFwcGxpY2F0aW9uQ2FjaGUgfHwgIWRvbUFwcGxpY2F0aW9uQ2FjaGUpOwor
ICAgICAgICAgICAgbV9ET01BcHBsaWNhdGlvbkNhY2hlID0gZG9tQXBwbGljYXRpb25DYWNoZTsK
KyAgICAgICAgfQorCisgICAgICAgIHZvaWQgbm90aWZ5RXZlbnRMaXN0ZW5lcihET01BcHBsaWNh
dGlvbkNhY2hlOjpFdmVudFR5cGUgZXZlbnRUeXBlKQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAobV9ET01BcHBsaWNhdGlvbkNhY2hlKQorICAgICAgICAgICAgICAgIG1fRE9NQXBwbGljYXRp
b25DYWNoZS0+Y2FsbEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICBwcml2YXRlOgorICAgICAgICBmcmllbmQgY2xhc3MgQXBwbGljYXRpb25DYWNoZUdy
b3VwOworICAgICAgICBmcmllbmQgY2xhc3MgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U7CisKKyAg
ICAgICAgYm9vbCBzY2hlZHVsZUxvYWRGYWxsYmFja1Jlc291cmNlRnJvbUFwcGxpY2F0aW9uQ2Fj
aGUoUmVzb3VyY2VMb2FkZXIqLCBBcHBsaWNhdGlvbkNhY2hlKiA9IDApOworICAgICAgICBib29s
IHNob3VsZExvYWRSZXNvdXJjZUZyb21BcHBsaWNhdGlvbkNhY2hlKGNvbnN0IFJlc291cmNlUmVx
dWVzdCYsIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSomKTsKKyAgICAgICAgYm9vbCBnZXRBcHBs
aWNhdGlvbkNhY2hlRmFsbGJhY2tSZXNvdXJjZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBBcHBs
aWNhdGlvbkNhY2hlUmVzb3VyY2UqJiwgQXBwbGljYXRpb25DYWNoZSogPSAwKTsKKyAgICAgICAg
dm9pZCBzZXRDYW5kaWRhdGVBcHBsaWNhdGlvbkNhY2hlR3JvdXAoQXBwbGljYXRpb25DYWNoZUdy
b3VwKiBncm91cCk7CisgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogY2FuZGlkYXRlQXBw
bGljYXRpb25DYWNoZUdyb3VwKCkgY29uc3QgeyByZXR1cm4gbV9jYW5kaWRhdGVBcHBsaWNhdGlv
bkNhY2hlR3JvdXA7IH0KKyAgICAgICAgdm9pZCBzZXRBcHBsaWNhdGlvbkNhY2hlKFBhc3NSZWZQ
dHI8QXBwbGljYXRpb25DYWNoZT4gYXBwbGljYXRpb25DYWNoZSk7CisgICAgICAgIEFwcGxpY2F0
aW9uQ2FjaGUqIGFwcGxpY2F0aW9uQ2FjaGUoKSBjb25zdCB7IHJldHVybiBtX2FwcGxpY2F0aW9u
Q2FjaGUuZ2V0KCk7IH0KKyAgICAgICAgQXBwbGljYXRpb25DYWNoZSogbWFpblJlc291cmNlQXBw
bGljYXRpb25DYWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFpblJlc291cmNlQXBwbGljYXRpb25D
YWNoZS5nZXQoKTsgfQorCisgICAgICAgIGJvb2wgaXNBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCgp
OworICAgICAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIoKSB7IHJldHVybiBtX2Rv
Y3VtZW50TG9hZGVyOyB9CisKKyAgICAgICAgRE9NQXBwbGljYXRpb25DYWNoZSogbV9ET01BcHBs
aWNhdGlvbkNhY2hlOworICAgICAgICBEb2N1bWVudExvYWRlciogbV9kb2N1bWVudExvYWRlcjsK
KworICAgICAgICAvLyBUaGUgYXBwbGljYXRpb24gY2FjaGUgdGhhdCB0aGUgZG9jdW1lbnQgbG9h
ZGVyIGlzIGFzc29jaWF0ZWQgd2l0aCAoaWYgYW55KS4KKyAgICAgICAgUmVmUHRyPEFwcGxpY2F0
aW9uQ2FjaGU+IG1fYXBwbGljYXRpb25DYWNoZTsKKworICAgICAgICAvLyBCZWZvcmUgYW4gYXBw
bGljYXRpb24gY2FjaGUgaGFzIGZpbmlzaGVkIGxvYWRpbmcsIHRoaXMgd2lsbCBiZSB0aGUgY2Fu
ZGlkYXRlIGFwcGxpY2F0aW9uCisgICAgICAgIC8vIGdyb3VwIHRoYXQgdGhlIGRvY3VtZW50IGxv
YWRlciBpcyBhc3NvY2lhdGVkIHdpdGguCisgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCog
bV9jYW5kaWRhdGVBcHBsaWNhdGlvbkNhY2hlR3JvdXA7CisKKyAgICAgICAgLy8gVGhpcyBpcyB0
aGUgYXBwbGljYXRpb24gY2FjaGUgdGhlIG1haW4gcmVzb3VyY2Ugd2FzIGxvYWRlZCBmcm9tIChp
ZiBhbnkpLgorICAgICAgICBSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gbV9tYWluUmVzb3VyY2VB
cHBsaWNhdGlvbkNhY2hlOworICAgIH07CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAgLy8gRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQorI2VuZGlmICAvLyBBcHBsaWNhdGlv
bkNhY2hlRnJvbnRlbmRfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9sb2FkZXIvYXBw
Y2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3QuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjpleGVjdXRh
YmxlCiAgICsgKgoKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAJKHJldmlzaW9uIDQ2NTY4KQorKysgV2ViQ29yZS9sb2Fk
ZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKIAog
I2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGUuaCIKKyNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hl
SG9zdC5oIgogI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVHcm91cC5oIgogI2luY2x1ZGUgIkFw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5oIgogI2luY2x1ZGUgIkNTdHJpbmcuaCIKQEAgLTkzNyw2
ICs5MzgsMTQgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZW1wdHkoKQogICAgICAg
ICBpdC0+c2Vjb25kLT5jbGVhclN0b3JhZ2VJRCgpOwogfSAgICAKIAorYm9vbCBBcHBsaWNhdGlv
bkNhY2hlU3RvcmFnZTo6dHJhbnNmZXJBcHBsaWNhdGlvbkNhY2hlKGNvbnN0IFN0cmluZyYgY2Fj
aGVEaXJlY3RvcnksIEFwcGxpY2F0aW9uQ2FjaGVIb3N0KiBjYWNoZUhvc3QpCit7CisgICAgQXBw
bGljYXRpb25DYWNoZSogY2FjaGUgPSBjYWNoZUhvc3QtPmFwcGxpY2F0aW9uQ2FjaGUoKTsKKyAg
ICBpZiAoIWNhY2hlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gQXBwbGljYXRp
b25DYWNoZVN0b3JhZ2U6OnN0b3JlQ29weU9mQ2FjaGUoY2FjaGVEaXJlY3RvcnksIGNhY2hlKTsK
K30KKwogYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVDb3B5T2ZDYWNoZShjb25z
dCBTdHJpbmcmIGNhY2hlRGlyZWN0b3J5LCBBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSkKIHsKICAg
ICAvLyBDcmVhdGUgYSBuZXcgY2FjaGUuCkluZGV4OiBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9B
cHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2Fw
cGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmgJKHJldmlzaW9uIDQ2NTY4KQorKysgV2Vi
Q29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMzcsNiArMzcsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBcHBs
aWNhdGlvbkNhY2hlOworY2xhc3MgQXBwbGljYXRpb25DYWNoZUhvc3Q7CiBjbGFzcyBBcHBsaWNh
dGlvbkNhY2hlR3JvdXA7CiBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U7CiBjbGFzcyBL
VVJMOwpAQCAtNjksNiArNzAsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBlbXB0eSgpOwog
ICAgIAorICAgIHN0YXRpYyBib29sIHRyYW5zZmVyQXBwbGljYXRpb25DYWNoZShjb25zdCBTdHJp
bmcmIGNhY2hlRGlyZWN0b3J5LCBBcHBsaWNhdGlvbkNhY2hlSG9zdCopOwogICAgIHN0YXRpYyBi
b29sIHN0b3JlQ29weU9mQ2FjaGUoY29uc3QgU3RyaW5nJiBjYWNoZURpcmVjdG9yeSwgQXBwbGlj
YXRpb25DYWNoZSopOwogCiAgICAgYm9vbCBtYW5pZmVzdFVSTHMoVmVjdG9yPEtVUkw+KiB1cmxz
KTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2Fj
aGUuY3BwCShyZXZpc2lvbiA0NjU2OCkKKysrIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0RPTUFw
cGxpY2F0aW9uQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCw3IEBACiAKICNp
ZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQogCi0jaW5jbHVkZSAiQXBwbGljYXRp
b25DYWNoZS5oIgotI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVHcm91cC5oIgotI2luY2x1ZGUg
IkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5oIgorI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVI
b3N0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJFdmVudC5oIgog
I2luY2x1ZGUgIkV2ZW50RXhjZXB0aW9uLmgiCkBAIC00NCw4MCArNDIsNDYgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogRE9NQXBwbGljYXRpb25DYWNoZTo6RE9NQXBwbGljYXRpb25DYWNoZShGcmFt
ZSogZnJhbWUpCiAgICAgOiBtX2ZyYW1lKGZyYW1lKQogeworICAgIEFTU0VSVChhcHBsaWNhdGlv
bkNhY2hlSG9zdCgpKTsKKyAgICBhcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5zZXRET01BcHBsaWNh
dGlvbkNhY2hlKHRoaXMpOwogfQogCiB2b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6OmRpc2Nvbm5l
Y3RGcmFtZSgpCiB7CisgICAgQXBwbGljYXRpb25DYWNoZUhvc3QqIGNhY2hlSG9zdCA9IGFwcGxp
Y2F0aW9uQ2FjaGVIb3N0KCk7CisgICAgaWYgKGNhY2hlSG9zdCkKKyAgICAgICAgY2FjaGVIb3N0
LT5zZXRET01BcHBsaWNhdGlvbkNhY2hlKDApOwogICAgIG1fZnJhbWUgPSAwOwogfQogCi1BcHBs
aWNhdGlvbkNhY2hlKiBET01BcHBsaWNhdGlvbkNhY2hlOjphc3NvY2lhdGVkQ2FjaGUoKSBjb25z
dAorQXBwbGljYXRpb25DYWNoZUhvc3QqIERPTUFwcGxpY2F0aW9uQ2FjaGU6OmFwcGxpY2F0aW9u
Q2FjaGVIb3N0KCkgY29uc3QKIHsKLSAgICBpZiAoIW1fZnJhbWUpCisgICAgaWYgKCFtX2ZyYW1l
IHx8ICFtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSkKICAgICAgICAgcmV0dXJu
IDA7Ci0gCi0gICAgcmV0dXJuIG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5h
cHBsaWNhdGlvbkNhY2hlKCk7CisgICAgcmV0dXJuIG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVu
dExvYWRlcigpLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpOwogfQogCiB1bnNpZ25lZCBzaG9ydCBE
T01BcHBsaWNhdGlvbkNhY2hlOjpzdGF0dXMoKSBjb25zdAogewotICAgIEFwcGxpY2F0aW9uQ2Fj
aGUqIGNhY2hlID0gYXNzb2NpYXRlZENhY2hlKCk7ICAgIAotICAgIGlmICghY2FjaGUpCisgICAg
QXBwbGljYXRpb25DYWNoZUhvc3QqIGNhY2hlSG9zdCA9IGFwcGxpY2F0aW9uQ2FjaGVIb3N0KCk7
CisgICAgaWYgKCFjYWNoZUhvc3QpCiAgICAgICAgIHJldHVybiBVTkNBQ0hFRDsKLQotICAgIHN3
aXRjaCAoY2FjaGUtPmdyb3VwKCktPnVwZGF0ZVN0YXR1cygpKSB7Ci0gICAgICAgIGNhc2UgQXBw
bGljYXRpb25DYWNoZUdyb3VwOjpDaGVja2luZzoKLSAgICAgICAgICAgIHJldHVybiBDSEVDS0lO
RzsKLSAgICAgICAgY2FzZSBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OkRvd25sb2FkaW5nOgotICAg
ICAgICAgICAgcmV0dXJuIERPV05MT0FESU5HOwotICAgICAgICBjYXNlIEFwcGxpY2F0aW9uQ2Fj
aGVHcm91cDo6SWRsZTogewotICAgICAgICAgICAgaWYgKGNhY2hlLT5ncm91cCgpLT5pc09ic29s
ZXRlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE9CU09MRVRFOwotICAgICAgICAgICAgaWYg
KGNhY2hlICE9IGNhY2hlLT5ncm91cCgpLT5uZXdlc3RDYWNoZSgpKQotICAgICAgICAgICAgICAg
IHJldHVybiBVUERBVEVSRUFEWTsKLSAgICAgICAgICAgIHJldHVybiBJRExFOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7CisgICAg
cmV0dXJuIGNhY2hlSG9zdC0+c3RhdHVzKCk7CiB9CiAKIHZvaWQgRE9NQXBwbGljYXRpb25DYWNo
ZTo6dXBkYXRlKEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIEFwcGxpY2F0aW9uQ2FjaGUqIGNh
Y2hlID0gYXNzb2NpYXRlZENhY2hlKCk7Ci0gICAgaWYgKCFjYWNoZSkgeworICAgIEFwcGxpY2F0
aW9uQ2FjaGVIb3N0KiBjYWNoZUhvc3QgPSBhcHBsaWNhdGlvbkNhY2hlSG9zdCgpOworICAgIGlm
ICghY2FjaGVIb3N0IHx8ICFjYWNoZUhvc3QtPnVwZGF0ZSgpKQogICAgICAgICBlYyA9IElOVkFM
SURfU1RBVEVfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGNhY2hlLT5n
cm91cCgpLT51cGRhdGUobV9mcmFtZSwgQXBwbGljYXRpb25DYWNoZVVwZGF0ZVdpdGhvdXRCcm93
c2luZ0NvbnRleHQpOwogfQogCiBib29sIERPTUFwcGxpY2F0aW9uQ2FjaGU6OnN3YXBDYWNoZSgp
CiB7Ci0gICAgaWYgKCFtX2ZyYW1lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAg
QXBwbGljYXRpb25DYWNoZSogY2FjaGUgPSBtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2Fk
ZXIoKS0+YXBwbGljYXRpb25DYWNoZSgpOwotICAgIGlmICghY2FjaGUpCisgICAgQXBwbGljYXRp
b25DYWNoZUhvc3QqIGNhY2hlSG9zdCA9IGFwcGxpY2F0aW9uQ2FjaGVIb3N0KCk7CisgICAgaWYg
KCFjYWNoZUhvc3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIElmIHRoZSBncm91
cCBvZiBhcHBsaWNhdGlvbiBjYWNoZXMgdG8gd2hpY2ggY2FjaGUgYmVsb25ncyBoYXMgdGhlIGxp
ZmVjeWNsZSBzdGF0dXMgb2Jzb2xldGUsIHVuYXNzb2NpYXRlIGRvY3VtZW50IGZyb20gY2FjaGUu
Ci0gICAgaWYgKGNhY2hlLT5ncm91cCgpLT5pc09ic29sZXRlKCkpIHsKLSAgICAgICAgY2FjaGUt
Pmdyb3VwKCktPmRpc2Fzc29jaWF0ZURvY3VtZW50TG9hZGVyKG1fZnJhbWUtPmxvYWRlcigpLT5k
b2N1bWVudExvYWRlcigpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8g
SWYgdGhlcmUgaXMgbm8gbmV3ZXIgY2FjaGUsIHJhaXNlIGFuIElOVkFMSURfU1RBVEVfRVJSIGV4
Y2VwdGlvbi4KLSAgICBBcHBsaWNhdGlvbkNhY2hlKiBuZXdlc3RDYWNoZSA9IGNhY2hlLT5ncm91
cCgpLT5uZXdlc3RDYWNoZSgpOwotICAgIGlmIChjYWNoZSA9PSBuZXdlc3RDYWNoZSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIEFTU0VSVChjYWNoZS0+Z3JvdXAoKSA9PSBuZXdl
c3RDYWNoZS0+Z3JvdXAoKSk7Ci0gICAgbV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVy
KCktPnNldEFwcGxpY2F0aW9uQ2FjaGUobmV3ZXN0Q2FjaGUpOwotICAgIAotICAgIHJldHVybiB0
cnVlOworICAgIHJldHVybiBjYWNoZUhvc3QtPnN3YXBDYWNoZSgpOwogfQogICAgIAogdm9pZCBE
T01BcHBsaWNhdGlvbkNhY2hlOjpzd2FwQ2FjaGUoRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0xMzEs
MTMgKzk1LDEzIEBAIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIERPTUFwcGxpY2F0aW9uQ2EKICAg
ICByZXR1cm4gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKIH0KIAotdm9pZCBET01BcHBsaWNhdGlvbkNh
Y2hlOjphZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNz
UmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIsIGJvb2wpCit2b2lkIERPTUFwcGxp
Y2F0aW9uQ2FjaGU6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudE5h
bWUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lciwgYm9vbCkKIHsKLSAg
ICBFdmVudExpc3RlbmVyc01hcDo6aXRlcmF0b3IgaXRlciA9IG1fZXZlbnRMaXN0ZW5lcnMuZmlu
ZChldmVudFR5cGUpOworICAgIEV2ZW50TGlzdGVuZXJzTWFwOjppdGVyYXRvciBpdGVyID0gbV9l
dmVudExpc3RlbmVycy5maW5kKGV2ZW50TmFtZSk7CiAgICAgaWYgKGl0ZXIgPT0gbV9ldmVudExp
c3RlbmVycy5lbmQoKSkgewogICAgICAgICBMaXN0ZW5lclZlY3RvciBsaXN0ZW5lcnM7CiAgICAg
ICAgIGxpc3RlbmVycy5hcHBlbmQoZXZlbnRMaXN0ZW5lcik7Ci0gICAgICAgIG1fZXZlbnRMaXN0
ZW5lcnMuYWRkKGV2ZW50VHlwZSwgbGlzdGVuZXJzKTsKKyAgICAgICAgbV9ldmVudExpc3RlbmVy
cy5hZGQoZXZlbnROYW1lLCBsaXN0ZW5lcnMpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIExpc3Rl
bmVyVmVjdG9yJiBsaXN0ZW5lcnMgPSBpdGVyLT5zZWNvbmQ7CiAgICAgICAgIGZvciAoTGlzdGVu
ZXJWZWN0b3I6Oml0ZXJhdG9yIGxpc3RlbmVySXRlciA9IGxpc3RlbmVycy5iZWdpbigpOyBsaXN0
ZW5lckl0ZXIgIT0gbGlzdGVuZXJzLmVuZCgpOyArK2xpc3RlbmVySXRlcikgewpAQCAtMTQ2LDEz
ICsxMTAsMTMgQEAgdm9pZCBET01BcHBsaWNhdGlvbkNhY2hlOjphZGRFdmVudExpc3RlbgogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBsaXN0ZW5lcnMuYXBwZW5kKGV2ZW50TGlzdGVuZXIp
OwotICAgICAgICBtX2V2ZW50TGlzdGVuZXJzLmFkZChldmVudFR5cGUsIGxpc3RlbmVycyk7Cisg
ICAgICAgIG1fZXZlbnRMaXN0ZW5lcnMuYWRkKGV2ZW50TmFtZSwgbGlzdGVuZXJzKTsKICAgICB9
ICAgIAogfQogCi12b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6OnJlbW92ZUV2ZW50TGlzdGVuZXIo
Y29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqIGV2ZW50TGlzdGVu
ZXIsIGJvb2wpCit2b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6OnJlbW92ZUV2ZW50TGlzdGVuZXIo
Y29uc3QgQXRvbWljU3RyaW5nJiBldmVudE5hbWUsIEV2ZW50TGlzdGVuZXIqIGV2ZW50TGlzdGVu
ZXIsIGJvb2wpCiB7Ci0gICAgRXZlbnRMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2V2
ZW50TGlzdGVuZXJzLmZpbmQoZXZlbnRUeXBlKTsKKyAgICBFdmVudExpc3RlbmVyc01hcDo6aXRl
cmF0b3IgaXRlciA9IG1fZXZlbnRMaXN0ZW5lcnMuZmluZChldmVudE5hbWUpOwogICAgIGlmIChp
dGVyID09IG1fZXZlbnRMaXN0ZW5lcnMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKQEAg
LTE3MSw3ICsxMzUsNyBAQCBib29sIERPTUFwcGxpY2F0aW9uQ2FjaGU6OmRpc3BhdGNoRXZlbnQo
CiAgICAgICAgIGVjID0gRXZlbnRFeGNlcHRpb246OlVOU1BFQ0lGSUVEX0VWRU5UX1RZUEVfRVJS
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICBMaXN0ZW5lclZlY3Rv
ciBsaXN0ZW5lcnNDb3B5ID0gbV9ldmVudExpc3RlbmVycy5nZXQoZXZlbnQtPnR5cGUoKSk7CiAg
ICAgZm9yIChMaXN0ZW5lclZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgbGlzdGVuZXJJdGVyID0gbGlz
dGVuZXJzQ29weS5iZWdpbigpOyBsaXN0ZW5lckl0ZXIgIT0gbGlzdGVuZXJzQ29weS5lbmQoKTsg
KytsaXN0ZW5lckl0ZXIpIHsKICAgICAgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKQEAgLTE4
MiwxMSArMTQ2LDExIEBAIGJvb2wgRE9NQXBwbGljYXRpb25DYWNoZTo6ZGlzcGF0Y2hFdmVudCgK
ICAgICByZXR1cm4gIWV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCk7CiB9CiAKLXZvaWQgRE9NQXBw
bGljYXRpb25DYWNoZTo6Y2FsbExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBl
LCBFdmVudExpc3RlbmVyKiBsaXN0ZW5lcikKK3ZvaWQgRE9NQXBwbGljYXRpb25DYWNoZTo6Y2Fs
bExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnROYW1lLCBFdmVudExpc3RlbmVyKiBs
aXN0ZW5lcikKIHsKICAgICBBU1NFUlQobV9mcmFtZSk7CiAgICAgCi0gICAgUmVmUHRyPEV2ZW50
PiBldmVudCA9IEV2ZW50OjpjcmVhdGUoZXZlbnRUeXBlLCBmYWxzZSwgZmFsc2UpOworICAgIFJl
ZlB0cjxFdmVudD4gZXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZSwgZmFsc2UsIGZhbHNl
KTsKICAgICBpZiAobGlzdGVuZXIpIHsKICAgICAgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsK
ICAgICAgICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQodGhpcyk7CkBAIC0xOTgsNDUgKzE2Miw1
NSBAQCB2b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxMaXN0ZW5lcihjCiAgICAgQVNTRVJU
KCFlYyk7ICAgIAogfQogCi12b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxDaGVja2luZ0xp
c3RlbmVyKCkKKy8vIHN0YXRpYworY29uc3QgQXRvbWljU3RyaW5nJiBET01BcHBsaWNhdGlvbkNh
Y2hlOjp0b0V2ZW50TmFtZShFdmVudFR5cGUgZXZlbnRUeXBlKQogewotICAgIGNhbGxMaXN0ZW5l
cihldmVudE5hbWVzKCkuY2hlY2tpbmdFdmVudCwgbV9vbkNoZWNraW5nTGlzdGVuZXIuZ2V0KCkp
OwotfQotCi12b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxFcnJvckxpc3RlbmVyKCkKLXsK
LSAgICBjYWxsTGlzdGVuZXIoZXZlbnROYW1lcygpLmVycm9yRXZlbnQsIG1fb25FcnJvckxpc3Rl
bmVyLmdldCgpKTsKLX0KLQotdm9pZCBET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsTm9VcGRhdGVM
aXN0ZW5lcigpCi17Ci0gICAgY2FsbExpc3RlbmVyKGV2ZW50TmFtZXMoKS5ub3VwZGF0ZUV2ZW50
LCBtX29uTm9VcGRhdGVMaXN0ZW5lci5nZXQoKSk7Ci19Ci0KLXZvaWQgRE9NQXBwbGljYXRpb25D
YWNoZTo6Y2FsbERvd25sb2FkaW5nTGlzdGVuZXIoKQotewotICAgIGNhbGxMaXN0ZW5lcihldmVu
dE5hbWVzKCkuZG93bmxvYWRpbmdFdmVudCwgbV9vbkRvd25sb2FkaW5nTGlzdGVuZXIuZ2V0KCkp
OwotfQotCi12b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxQcm9ncmVzc0xpc3RlbmVyKCkK
LXsKLSAgICBjYWxsTGlzdGVuZXIoZXZlbnROYW1lcygpLnByb2dyZXNzRXZlbnQsIG1fb25Qcm9n
cmVzc0xpc3RlbmVyLmdldCgpKTsKLX0KLQotdm9pZCBET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxs
VXBkYXRlUmVhZHlMaXN0ZW5lcigpCi17Ci0gICAgY2FsbExpc3RlbmVyKGV2ZW50TmFtZXMoKS51
cGRhdGVyZWFkeUV2ZW50LCBtX29uVXBkYXRlUmVhZHlMaXN0ZW5lci5nZXQoKSk7CisgICAgc3dp
dGNoIChldmVudFR5cGUpIHsKKyAgICAgICAgY2FzZSBDSEVDS0lOR19FVkVOVDoKKyAgICAgICAg
ICAgIHJldHVybiBldmVudE5hbWVzKCkuY2hlY2tpbmdFdmVudDsKKyAgICAgICAgY2FzZSBFUlJP
Ul9FVkVOVDoKKyAgICAgICAgICAgIHJldHVybiBldmVudE5hbWVzKCkuZXJyb3JFdmVudDsKKyAg
ICAgICAgY2FzZSBOT1VQREFURV9FVkVOVDoKKyAgICAgICAgICAgIHJldHVybiBldmVudE5hbWVz
KCkubm91cGRhdGVFdmVudDsKKyAgICAgICAgY2FzZSBET1dOTE9BRElOR19FVkVOVDoKKyAgICAg
ICAgICAgIHJldHVybiBldmVudE5hbWVzKCkuZG93bmxvYWRpbmdFdmVudDsKKyAgICAgICAgY2Fz
ZSBQUk9HUkVTU19FVkVOVDoKKyAgICAgICAgICAgIHJldHVybiBldmVudE5hbWVzKCkucHJvZ3Jl
c3NFdmVudDsKKyAgICAgICAgY2FzZSBVUERBVEVSRUFEWV9FVkVOVDoKKyAgICAgICAgICAgIHJl
dHVybiBldmVudE5hbWVzKCkudXBkYXRlcmVhZHlFdmVudDsKKyAgICAgICAgY2FzZSBDQUNIRURf
RVZFTlQ6CisgICAgICAgICAgICByZXR1cm4gZXZlbnROYW1lcygpLmNhY2hlZEV2ZW50OworICAg
ICAgICBjYXNlIE9CU09MRVRFX0VWRU5UOiAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJu
IGV2ZW50TmFtZXMoKS5vYnNvbGV0ZUV2ZW50OworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gZXZlbnROYW1lcygpLmVycm9yRXZlbnQ7CiB9CiAKLXZvaWQgRE9N
QXBwbGljYXRpb25DYWNoZTo6Y2FsbENhY2hlZExpc3RlbmVyKCkKKy8vIHN0YXRpYworRE9NQXBw
bGljYXRpb25DYWNoZTo6RXZlbnRUeXBlIERPTUFwcGxpY2F0aW9uQ2FjaGU6OnRvRXZlbnRUeXBl
KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnROYW1lKQogewotICAgIGNhbGxMaXN0ZW5lcihldmVu
dE5hbWVzKCkuY2FjaGVkRXZlbnQsIG1fb25DYWNoZWRMaXN0ZW5lci5nZXQoKSk7CisgICAgaWYg
KGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkuY2hlY2tpbmdFdmVudCkKKyAgICAgICAgcmV0dXJu
IENIRUNLSU5HX0VWRU5UOworICAgIGlmIChldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLmVycm9y
RXZlbnQpCisgICAgICAgIHJldHVybiBFUlJPUl9FVkVOVDsKKyAgICBpZiAoZXZlbnROYW1lID09
IGV2ZW50TmFtZXMoKS5ub3VwZGF0ZUV2ZW50KQorICAgICAgICByZXR1cm4gTk9VUERBVEVfRVZF
TlQ7CisgICAgaWYgKGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkuZG93bmxvYWRpbmdFdmVudCkK
KyAgICAgICAgcmV0dXJuIERPV05MT0FESU5HX0VWRU5UOworICAgIGlmIChldmVudE5hbWUgPT0g
ZXZlbnROYW1lcygpLnByb2dyZXNzRXZlbnQpCisgICAgICAgIHJldHVybiBQUk9HUkVTU19FVkVO
VDsKKyAgICBpZiAoZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS51cGRhdGVyZWFkeUV2ZW50KQor
ICAgICAgICByZXR1cm4gVVBEQVRFUkVBRFlfRVZFTlQ7CisgICAgaWYgKGV2ZW50TmFtZSA9PSBl
dmVudE5hbWVzKCkuY2FjaGVkRXZlbnQpCisgICAgICAgIHJldHVybiBDQUNIRURfRVZFTlQ7Cisg
ICAgaWYgKGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkub2Jzb2xldGVFdmVudCkKKyAgICAgICAg
cmV0dXJuIE9CU09MRVRFX0VWRU5UOworICAKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gRVJST1JfRVZFTlQ7CiB9CiAKLXZvaWQgRE9NQXBwbGljYXRpb25DYWNoZTo6Y2Fs
bE9ic29sZXRlTGlzdGVuZXIoKQotewotICAgIGNhbGxMaXN0ZW5lcihldmVudE5hbWVzKCkub2Jz
b2xldGVFdmVudCwgbV9vbk9ic29sZXRlTGlzdGVuZXIuZ2V0KCkpOwotfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0
aW9uQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9ET01BcHBs
aWNhdGlvbkNhY2hlLmgJKHJldmlzaW9uIDQ2NTY4KQorKysgV2ViQ29yZS9sb2FkZXIvYXBwY2Fj
aGUvRE9NQXBwbGljYXRpb25DYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQXBwbGljYXRpb25DYWNoZTsKK2NsYXNz
IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OwogY2xhc3MgQXRvbWljU3RyaW5nSW1wbDsKIGNsYXNzIEZy
YW1lOwogY2xhc3MgS1VSTDsKQEAgLTQ3LDYgKzQ3LDggQEAgY2xhc3MgU3RyaW5nOwogY2xhc3Mg
RE9NQXBwbGljYXRpb25DYWNoZSA6IHB1YmxpYyBSZWZDb3VudGVkPERPTUFwcGxpY2F0aW9uQ2Fj
aGU+LCBwdWJsaWMgRXZlbnRUYXJnZXQgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PERPTUFwcGxpY2F0aW9uQ2FjaGU+IGNyZWF0ZShGcmFtZSogZnJhbWUpIHsgcmV0dXJuIGFkb3B0
UmVmKG5ldyBET01BcHBsaWNhdGlvbkNhY2hlKGZyYW1lKSk7IH0KKyAgICB+RE9NQXBwbGljYXRp
b25DYWNoZSgpIHsgQVNTRVJUKCFtX2ZyYW1lKTsgfQorCiAgICAgdm9pZCBkaXNjb25uZWN0RnJh
bWUoKTsKIAogICAgIGVudW0gU3RhdHVzIHsKQEAgLTU4LDE1ICs2MCwzMyBAQCBwdWJsaWM6CiAg
ICAgICAgIE9CU09MRVRFID0gNQogICAgIH07CiAKKyAgICBlbnVtIEV2ZW50VHlwZSB7CisgICAg
ICAgIENIRUNLSU5HX0VWRU5UID0gMCwKKyAgICAgICAgRVJST1JfRVZFTlQsCisgICAgICAgIE5P
VVBEQVRFX0VWRU5ULAorICAgICAgICBET1dOTE9BRElOR19FVkVOVCwKKyAgICAgICAgUFJPR1JF
U1NfRVZFTlQsCisgICAgICAgIFVQREFURVJFQURZX0VWRU5ULAorICAgICAgICBDQUNIRURfRVZF
TlQsCisgICAgICAgIE9CU09MRVRFX0VWRU5UCisgICAgfTsKKwogICAgIHVuc2lnbmVkIHNob3J0
IHN0YXR1cygpIGNvbnN0OwotICAgIAogICAgIHZvaWQgdXBkYXRlKEV4Y2VwdGlvbkNvZGUmKTsK
ICAgICB2b2lkIHN3YXBDYWNoZShFeGNlcHRpb25Db2RlJik7Ci0gICAgCi0gICAgdmlydHVhbCB2
b2lkIGFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NS
ZWZQdHI8RXZlbnRMaXN0ZW5lcj4sIGJvb2wgdXNlQ2FwdHVyZSk7Ci0gICAgdmlydHVhbCB2b2lk
IHJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50
TGlzdGVuZXIqLCBib29sIHVzZUNhcHR1cmUpOworCisgICAgLy8gRXZlbnQgbGlzdGVuZXIgYXR0
cmlidXRlcyBieSBFdmVudFR5cGUKKworICAgIHZvaWQgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5l
cihFdmVudFR5cGUgdHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVy
KSB7IG1fYXR0cmlidXRlRXZlbnRMaXN0ZW5lcnNbdHlwZV0gPSBldmVudExpc3RlbmVyOyB9Cisg
ICAgRXZlbnRMaXN0ZW5lciogZ2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihFdmVudFR5cGUgdHlw
ZSkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVFdmVudExpc3RlbmVyc1t0eXBlXS5nZXQoKTsg
fQorICAgIHZvaWQgY2xlYXJBdHRyaWJ1dGVFdmVudExpc3RlbmVyKEV2ZW50VHlwZSB0eXBlKSB7
IG1fYXR0cmlidXRlRXZlbnRMaXN0ZW5lcnNbdHlwZV0gPSAwOyB9CisgICAgdm9pZCBjYWxsRXZl
bnRMaXN0ZW5lcihFdmVudFR5cGUgdHlwZSkgeyBjYWxsTGlzdGVuZXIodG9FdmVudE5hbWUodHlw
ZSksIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIodHlwZSkpOyB9CisKKyAgICAvLyBFdmVudFRh
cmdldCBpbXBsCisKKyAgICB2aXJ0dWFsIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9t
aWNTdHJpbmcmIGV2ZW50TmFtZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiwgYm9vbCB1c2VD
YXB0dXJlKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9t
aWNTdHJpbmcmIGV2ZW50TmFtZSwgRXZlbnRMaXN0ZW5lciosIGJvb2wgdXNlQ2FwdHVyZSk7CiAg
ICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4sIEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICAKICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8RXZlbnRMaXN0ZW5lcj4g
PiBMaXN0ZW5lclZlY3RvcjsKICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBMaXN0
ZW5lclZlY3Rvcj4gRXZlbnRMaXN0ZW5lcnNNYXA7CiAgICAgRXZlbnRMaXN0ZW5lcnNNYXAmIGV2
ZW50TGlzdGVuZXJzKCkgeyByZXR1cm4gbV9ldmVudExpc3RlbmVyczsgfQpAQCAtNzQsNjEgKzk0
LDUxIEBAIHB1YmxpYzoKICAgICB1c2luZyBSZWZDb3VudGVkPERPTUFwcGxpY2F0aW9uQ2FjaGU+
OjpyZWY7CiAgICAgdXNpbmcgUmVmQ291bnRlZDxET01BcHBsaWNhdGlvbkNhY2hlPjo6ZGVyZWY7
CiAKLSAgICB2b2lkIHNldE9uY2hlY2tpbmcoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVu
dExpc3RlbmVyKSB7IG1fb25DaGVja2luZ0xpc3RlbmVyID0gZXZlbnRMaXN0ZW5lcjsgfQotICAg
IEV2ZW50TGlzdGVuZXIqIG9uY2hlY2tpbmcoKSBjb25zdCB7IHJldHVybiBtX29uQ2hlY2tpbmdM
aXN0ZW5lci5nZXQoKTsgfQorICAgIC8vIEV4cGxpY2l0bHkgbmFtZWQgYXR0cmlidXRlIGV2ZW50
IGxpc3RlbmVyIGhlbHBlcnMKIAotICAgIHZvaWQgc2V0T25lcnJvcihQYXNzUmVmUHRyPEV2ZW50
TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpIHsgbV9vbkVycm9yTGlzdGVuZXIgPSBldmVudExpc3Rl
bmVyOyB9Ci0gICAgRXZlbnRMaXN0ZW5lciogb25lcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fb25F
cnJvckxpc3RlbmVyLmdldCgpOyB9CisgICAgdm9pZCBzZXRPbmNoZWNraW5nKFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIpIHsgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihDSEVD
S0lOR19FVkVOVCwgbGlzdGVuZXIpOyB9CisgICAgRXZlbnRMaXN0ZW5lciogb25jaGVja2luZygp
IGNvbnN0IHsgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoQ0hFQ0tJTkdfRVZFTlQp
OyB9CiAKLSAgICB2b2lkIHNldE9ubm91cGRhdGUoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBl
dmVudExpc3RlbmVyKSB7IG1fb25Ob1VwZGF0ZUxpc3RlbmVyID0gZXZlbnRMaXN0ZW5lcjsgfQot
ICAgIEV2ZW50TGlzdGVuZXIqIG9ubm91cGRhdGUoKSBjb25zdCB7IHJldHVybiBtX29uTm9VcGRh
dGVMaXN0ZW5lci5nZXQoKTsgfQorICAgIHZvaWQgc2V0T25lcnJvcihQYXNzUmVmUHRyPEV2ZW50
TGlzdGVuZXI+IGxpc3RlbmVyKSB7IHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoRVJST1JfRVZF
TlQsIGxpc3RlbmVyKTt9CisgICAgRXZlbnRMaXN0ZW5lciogb25lcnJvcigpIGNvbnN0IHsgcmV0
dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoRVJST1JfRVZFTlQpOyB9CiAKLSAgICB2b2lk
IHNldE9uZG93bmxvYWRpbmcoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVy
KSB7IG1fb25Eb3dubG9hZGluZ0xpc3RlbmVyID0gZXZlbnRMaXN0ZW5lcjsgfQotICAgIEV2ZW50
TGlzdGVuZXIqIG9uZG93bmxvYWRpbmcoKSBjb25zdCB7IHJldHVybiBtX29uRG93bmxvYWRpbmdM
aXN0ZW5lci5nZXQoKTsgfQotICAgIAotICAgIHZvaWQgc2V0T25wcm9ncmVzcyhQYXNzUmVmUHRy
PEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpIHsgbV9vblByb2dyZXNzTGlzdGVuZXIgPSBl
dmVudExpc3RlbmVyOyB9Ci0gICAgRXZlbnRMaXN0ZW5lciogb25wcm9ncmVzcygpIGNvbnN0IHsg
cmV0dXJuIG1fb25Qcm9ncmVzc0xpc3RlbmVyLmdldCgpOyB9CisgICAgdm9pZCBzZXRPbm5vdXBk
YXRlKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIpIHsgc2V0QXR0cmlidXRlRXZl
bnRMaXN0ZW5lcihOT1VQREFURV9FVkVOVCwgbGlzdGVuZXIpOyB9CisgICAgRXZlbnRMaXN0ZW5l
ciogb25ub3VwZGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIo
Tk9VUERBVEVfRVZFTlQpOyB9CisKKyAgICB2b2lkIHNldE9uZG93bmxvYWRpbmcoUGFzc1JlZlB0
cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lcikgeyBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKERP
V05MT0FESU5HX0VWRU5ULCBsaXN0ZW5lcik7IH0KKyAgICBFdmVudExpc3RlbmVyKiBvbmRvd25s
b2FkaW5nKCkgY29uc3QgeyByZXR1cm4gZ2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihET1dOTE9B
RElOR19FVkVOVCk7IH0KIAotICAgIHZvaWQgc2V0T251cGRhdGVyZWFkeShQYXNzUmVmUHRyPEV2
ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpIHsgbV9vblVwZGF0ZVJlYWR5TGlzdGVuZXIgPSBl
dmVudExpc3RlbmVyOyB9Ci0gICAgRXZlbnRMaXN0ZW5lciogb251cGRhdGVyZWFkeSgpIGNvbnN0
IHsgcmV0dXJuIG1fb25VcGRhdGVSZWFkeUxpc3RlbmVyLmdldCgpOyB9CisgICAgdm9pZCBzZXRP
bnByb2dyZXNzKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIpIHsgc2V0QXR0cmli
dXRlRXZlbnRMaXN0ZW5lcihQUk9HUkVTU19FVkVOVCwgbGlzdGVuZXIpOyB9CisgICAgRXZlbnRM
aXN0ZW5lciogb25wcm9ncmVzcygpIGNvbnN0IHsgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlz
dGVuZXIoUFJPR1JFU1NfRVZFTlQpOyB9CiAKLSAgICB2b2lkIHNldE9uY2FjaGVkKFBhc3NSZWZQ
dHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBtX29uQ2FjaGVkTGlzdGVuZXIgPSBl
dmVudExpc3RlbmVyOyB9Ci0gICAgRXZlbnRMaXN0ZW5lciogb25jYWNoZWQoKSBjb25zdCB7IHJl
dHVybiBtX29uQ2FjaGVkTGlzdGVuZXIuZ2V0KCk7IH0KKyAgICB2b2lkIHNldE9udXBkYXRlcmVh
ZHkoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lcikgeyBzZXRBdHRyaWJ1dGVFdmVu
dExpc3RlbmVyKFVQREFURVJFQURZX0VWRU5ULCBsaXN0ZW5lcik7IH0KKyAgICBFdmVudExpc3Rl
bmVyKiBvbnVwZGF0ZXJlYWR5KCkgY29uc3QgeyByZXR1cm4gZ2V0QXR0cmlidXRlRXZlbnRMaXN0
ZW5lcihVUERBVEVSRUFEWV9FVkVOVCk7IH0KIAotICAgIHZvaWQgc2V0T25vYnNvbGV0ZShQYXNz
UmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpIHsgbV9vbk9ic29sZXRlTGlzdGVu
ZXIgPSBldmVudExpc3RlbmVyOyB9Ci0gICAgRXZlbnRMaXN0ZW5lciogb25vYnNvbGV0ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fb25PYnNvbGV0ZUxpc3RlbmVyLmdldCgpOyB9CisgICAgdm9pZCBzZXRP
bmNhY2hlZChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyKSB7IHNldEF0dHJpYnV0
ZUV2ZW50TGlzdGVuZXIoQ0FDSEVEX0VWRU5ULCBsaXN0ZW5lcik7IH0KKyAgICBFdmVudExpc3Rl
bmVyKiBvbmNhY2hlZCgpIGNvbnN0IHsgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIo
Q0FDSEVEX0VWRU5UKTsgfQorCisgICAgdm9pZCBzZXRPbm9ic29sZXRlKFBhc3NSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4gbGlzdGVuZXIpIHsgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihPQlNPTEVU
RV9FVkVOVCwgbGlzdGVuZXIpOyB9CisgICAgRXZlbnRMaXN0ZW5lciogb25vYnNvbGV0ZSgpIGNv
bnN0IHsgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoT0JTT0xFVEVfRVZFTlQpOyB9
CiAKICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSBjb25zdDsKICAgICBET01BcHBsaWNhdGlvbkNhY2hlKiB0b0RPTUFwcGxpY2F0aW9u
Q2FjaGUoKSB7IHJldHVybiB0aGlzOyB9CiAKLSAgICB2b2lkIGNhbGxDaGVja2luZ0xpc3RlbmVy
KCk7Ci0gICAgdm9pZCBjYWxsRXJyb3JMaXN0ZW5lcigpOyAgICAKLSAgICB2b2lkIGNhbGxOb1Vw
ZGF0ZUxpc3RlbmVyKCk7ICAgIAotICAgIHZvaWQgY2FsbERvd25sb2FkaW5nTGlzdGVuZXIoKTsK
LSAgICB2b2lkIGNhbGxQcm9ncmVzc0xpc3RlbmVyKCk7Ci0gICAgdm9pZCBjYWxsVXBkYXRlUmVh
ZHlMaXN0ZW5lcigpOwotICAgIHZvaWQgY2FsbENhY2hlZExpc3RlbmVyKCk7Ci0gICAgdm9pZCBj
YWxsT2Jzb2xldGVMaXN0ZW5lcigpOwotICAgIAorICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJp
bmcmIHRvRXZlbnROYW1lKEV2ZW50VHlwZSBldmVudFR5cGUpOworICAgIHN0YXRpYyBFdmVudFR5
cGUgdG9FdmVudFR5cGUoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudE5hbWUpOworCiBwcml2YXRl
OgogICAgIERPTUFwcGxpY2F0aW9uQ2FjaGUoRnJhbWUqKTsKLSAgICB2b2lkIGNhbGxMaXN0ZW5l
cihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciopOworCisgICAg
dm9pZCBjYWxsTGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudE5hbWUsIEV2ZW50TGlz
dGVuZXIqKTsKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigp
OyB9CiAgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0KIAot
ICAgIEFwcGxpY2F0aW9uQ2FjaGUqIGFzc29jaWF0ZWRDYWNoZSgpIGNvbnN0OworICAgIEFwcGxp
Y2F0aW9uQ2FjaGVIb3N0KiBhcHBsaWNhdGlvbkNhY2hlSG9zdCgpIGNvbnN0OwogICAgIGJvb2wg
c3dhcENhY2hlKCk7CiAgICAgCi0gICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1fb25DaGVja2lu
Z0xpc3RlbmVyOwotICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBtX29uRXJyb3JMaXN0ZW5lcjsK
LSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9vbk5vVXBkYXRlTGlzdGVuZXI7Ci0gICAgUmVm
UHRyPEV2ZW50TGlzdGVuZXI+IG1fb25Eb3dubG9hZGluZ0xpc3RlbmVyOwotICAgIFJlZlB0cjxF
dmVudExpc3RlbmVyPiBtX29uUHJvZ3Jlc3NMaXN0ZW5lcjsKLSAgICBSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4gbV9vblVwZGF0ZVJlYWR5TGlzdGVuZXI7Ci0gICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+
IG1fb25DYWNoZWRMaXN0ZW5lcjsKLSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9vbk9ic29s
ZXRlTGlzdGVuZXI7Ci0gICAgCisgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1fYXR0cmlidXRl
RXZlbnRMaXN0ZW5lcnNbT0JTT0xFVEVfRVZFTlQgKyAxXTsKKwogICAgIEV2ZW50TGlzdGVuZXJz
TWFwIG1fZXZlbnRMaXN0ZW5lcnM7CiAKICAgICBGcmFtZSogbV9mcmFtZTsKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vS1VSTEdvb2dsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9LVVJMR29vZ2xlLmNwcAkocmV2aXNpb24gNDY1NjgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0tV
UkxHb29nbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NTcsNiArOTU3LDMyIEBAIGlubGluZSBi
b29sIEtVUkw6OnByb3RvY29sSXMoY29uc3QgU3RyaW4KICAgICByZXR1cm4gV2ViQ29yZTo6cHJv
dG9jb2xJcyhzdHJpbmcsIHByb3RvY29sKTsKIH0KIAorYm9vbCBwcm90b2NvbEhvc3RBbmRQb3J0
QXJlRXF1YWwoY29uc3QgS1VSTCYgYSwgY29uc3QgS1VSTCYgYikKK3sKKyAgICBpZiAoYS5wYXJz
ZWQoKS5zY2hlbWUuZW5kKCkgIT0gYi5wYXJzZWQoKS5zY2hlbWUuZW5kKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGludCBob3N0U3RhcnRBID0gYS5ob3N0U3RhcnQoKTsKKyAgICBp
bnQgaG9zdFN0YXJ0QiA9IGIuaG9zdFN0YXJ0KCk7CisgICAgaWYgKGEuaG9zdEVuZCgpIC0gaG9z
dFN0YXJ0QSAhPSBiLmhvc3RFbmQoKSAtIGhvc3RTdGFydEIpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIC8vIENoZWNrIHRoZSBzY2hlbWUKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGEu
cGFyc2VkKCkuc2NoZW1lLmVuZCgpOyArK2kpCisgICAgICAgIGlmIChhLnN0cmluZygpW2ldICE9
IGIuc3RyaW5nKClbaV0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8g
QW5kIHRoZSBob3N0CisgICAgZm9yIChpbnQgaSA9IGhvc3RTdGFydEE7IGkgPCBzdGF0aWNfY2Fz
dDxpbnQ+KGEuaG9zdEVuZCgpKTsgKytpKQorICAgICAgICBpZiAoYS5zdHJpbmcoKVtpXSAhPSBi
LnN0cmluZygpW2ldKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChh
LnBvcnQoKSAhPSBiLnBvcnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJu
IHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFVTRShHT09H
TEVVUkwpCkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
bWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNDY1NjgpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDA5LTA3LTI5ICBNaWNoYWVsIE5vcmRt
YW4gIDxtaWNoYWVsbkBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yNzgyMQorCisgICAgICAgIE1vZHMgdG8ga2VlcCB1cCB3aXRoIEFwcGxpY2F0aW9uQ2FjaGVI
b3N0IHJlZmFjdG9yaW5nLgorCisgICAgICAgICogV2ViVmlldy9XZWJEYXRhU291cmNlLm1tOgor
ICAgICAgICAoLVtXZWJEYXRhU291cmNlIF90cmFuc2ZlckFwcGxpY2F0aW9uQ2FjaGU6XSk6CisK
IDIwMDktMDctMjkgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAg
ICA8aHR0cDovL3dlYmtpdC5vcmcvYi8yNzc4OD4gRG9uJ3QgZXhwb3J0IFdlYlBsdWdpbkNvbnRy
b2xsZXIuaCBhcyBhIHByaXZhdGUgaGVhZGVyCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
RGF0YVNvdXJjZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRGF0YVNv
dXJjZS5tbQkocmV2aXNpb24gNDY1NjgpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRGF0YVNv
dXJjZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTk4LDE0ICsxOTgsMTAgQEAgc3RhdGljIGlubGlu
ZSB2b2lkIGFkZFR5cGVzRnJvbUNsYXNzKE5TTQogICAgIAogICAgIGlmICghbG9hZGVyKQogICAg
ICAgICByZXR1cm4gTk87Ci0gICAgCi0gICAgQXBwbGljYXRpb25DYWNoZSogY2FjaGUgPSBsb2Fk
ZXItPmFwcGxpY2F0aW9uQ2FjaGUoKTsKLSAgICBpZiAoIWNhY2hlKQotICAgICAgICByZXR1cm4g
WUVTOwotICAgIAorICAgICAgICAKICAgICBOU1N0cmluZyAqY2FjaGVEaXIgPSBbTlNTdHJpbmcg
X3dlYmtpdF9sb2NhbENhY2hlRGlyZWN0b3J5V2l0aEJ1bmRsZUlkZW50aWZpZXI6ZGVzdGluYXRp
b25CdW5kbGVJZGVudGlmaWVyXTsKICAgICAKLSAgICByZXR1cm4gQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2U6OnN0b3JlQ29weU9mQ2FjaGUoY2FjaGVEaXIsIGNhY2hlKTsKKyAgICByZXR1cm4gQXBw
bGljYXRpb25DYWNoZVN0b3JhZ2U6OnRyYW5zZmVyQXBwbGljYXRpb25DYWNoZShjYWNoZURpciwg
bG9hZGVyLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpKTsKIH0KIAogQGVuZAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34026</attachid>
            <date>2009-08-03 17:17:07 -0700</date>
            <delta_ts>2009-08-04 16:05:41 -0700</delta_ts>
            <desc>Patch to address ap&apos;s comments</desc>
            <filename>AppCacheHostAP.1.txt</filename>
            <type>text/plain</type>
            <size>44664</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjczOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOTggQEAKKzIwMDktMDgtMDMgIE1pY2hhZWwgTm9yZG1hbiAgPG1pY2hhZWxuQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3ODIxCisKKyAgICAg
ICAgTm8gbmV3IGZlYXR1cmVzLCBubyBuZXcgdGVzdHMuIEV4aXN0aW5nIGxheW91dCB0ZXN0cyBw
YXNzLgorCisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4cDoKKworICAgICAgICBFeHBvcnQgQXBw
bGlhdGlvbkNhY2hlR3JvdXA6OnN0b3JlQ29weU9mQ2FjaGUKKworICAgICAgICAqIGh0bWwvSFRN
TEh0bWxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxIdG1sRWxlbWVudDo6aW5z
ZXJ0ZWRJbnRvRG9jdW1lbnQpOgorCisgICAgICAgIFJlaW5zdGF0ZSB0aGUgdGVzdCBmb3IgbWFu
aWZlc3QuaXNOdWxsIGluc3RlYWQgb2YgLmlzRW10cHR5KCkuCisgICAgICAgIEFkZGVkIGEgRklY
TUUgdG8gcmV2aXNpdCBvbmNlIHRoZSBzcGVjIGdldHMgY2xhcmlmaWVkLgorICAgICAgICAKKyAg
ICAgICAgKiBsb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnRMb2FkZXI6OkRvY3VtZW50TG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
TG9hZGVyOjptYWluUmVjZWl2ZWRFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExv
YWRlcjo6ZGV0YWNoRnJvbUZyYW1lKToKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRMb2FkZXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyOjphcHBsaWNhdGlvbkNhY2hlSG9z
dCk6CisKKyAgICAgICAgQXBwbGljYXRpb25DYWNoZUhvc3QgaXMgaGVsZCBpbiBhbiBPd25QdHI8
PiBieSBEb2N1bWVudExvYWRlci4KKworICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6
CisgICAgICAgICogbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgICogbG9h
ZGVyL1Jlc291cmNlTG9hZGVyLmNwcDoKKworICAgICAgICBDbGVhbnVwIHVzc2FnZSBvZiBFTkFC
TEUoeHh4KSBhcm91bmQgaW5jbHVkZXMuCisKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBw
bGljYXRpb25DYWNoZUdyb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2Fj
aGVHcm91cDo6c2VsZWN0Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNo
ZUdyb3VwOjpmaW5pc2hlZExvYWRpbmdNYWluUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbGljYXRpb25DYWNoZUdyb3VwOjpmYWlsZWRMb2FkaW5nTWFpblJlc291cmNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6dXBkYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6ZGlkRmluaXNoTG9hZGluZ01hbmlmZXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6bWFuaWZlc3ROb3RGb3Vu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmNoZWNrSWZMb2Fk
SXNDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OnN0
YXJ0TG9hZGluZ0VudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbGxDYWNoZUxpc3RlbmVyVGFz
azo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbGxDYWNoZUxpc3RlbmVyVGFzazo6cGVy
Zm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6Q2FsbENhY2hlTGlzdGVuZXJUYXNrOjpDYWxs
Q2FjaGVMaXN0ZW5lclRhc2spOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUdy
b3VwOjpwb3N0TGlzdGVuZXJUYXNrKToKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGlj
YXRpb25DYWNoZUdyb3VwLmg6CisKKyAgICAgICAgVXNlIEFwcGxpY2F0aW9uQ2FjaEhvc3QgZGVm
aW5lZCBjb25zdGFudHMsIG5vIGxvbmdlciBkZXBlbmRzIG9uIERPTUFwcGxpY2F0aW9uQ2FjaGUu
CisKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUhvc3Q6OkFwcGxpY2F0aW9uQ2FjaGVI
b3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpzZXRET01BcHBs
aWNhdGlvbkNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVIb3N0Ojpu
b3RpZnlFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVI
b3N0OjpzdGF0dXMpOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hl
SG9zdC5oOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUhvc3Q6Oik6CisgICAg
ICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZUNvcHlPZkNhY2hlKToK
KyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaDoKKwor
ICAgICAgICBNZXJnZSByZWNlbnRseSBhZGRlZCB0cmFuc2ZlckFwcGxpY2F0aW9uQ2FjaGUgYW5k
IHByZS1leGlzdGluZyBzdG9yZUNvcHlPZkNhY2hlIG1ldGhvZHMuCisKKyAgICAgICAgKiBsb2Fk
ZXIvYXBwY2FjaGUvRE9NQXBwbGljYXRpb25DYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
T01BcHBsaWNhdGlvbkNhY2hlOjpzdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6RE9NQXBwbGlj
YXRpb25DYWNoZTo6YWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpET01BcHBs
aWNhdGlvbkNhY2hlOjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRP
TUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpET01B
cHBsaWNhdGlvbkNhY2hlOjp0b0V2ZW50VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpET01BcHBs
aWNhdGlvbkNhY2hlOjp0b0V2ZW50SUQpOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9ET01B
cHBsaWNhdGlvbkNhY2hlLmg6CisgICAgICAgIChXZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hl
OjpzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxp
Y2F0aW9uQ2FjaGU6OmdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NQXBwbGljYXRpb25DYWNoZTo6Y2xlYXJBdHRyaWJ1dGVFdmVudExpc3RlbmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxFdmVudExpc3RlbmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6OnNldE9uY2hlY2tpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6RE9NQXBwbGljYXRpb25DYWNoZTo6b25jaGVja2luZyk6CisgICAg
ICAgIChXZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hlOjpzZXRPbmVycm9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6Om9uZXJyb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NQXBwbGljYXRpb25DYWNoZTo6c2V0T25ub3VwZGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpET01BcHBsaWNhdGlvbkNhY2hlOjpvbm5vdXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRP
TUFwcGxpY2F0aW9uQ2FjaGU6OnNldE9uZG93bmxvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
RE9NQXBwbGljYXRpb25DYWNoZTo6b25kb3dubG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpE
T01BcHBsaWNhdGlvbkNhY2hlOjpzZXRPbnByb2dyZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkRP
TUFwcGxpY2F0aW9uQ2FjaGU6Om9ucHJvZ3Jlc3MpOgorICAgICAgICAoV2ViQ29yZTo6RE9NQXBw
bGljYXRpb25DYWNoZTo6c2V0T251cGRhdGVyZWFkeSk6CisgICAgICAgIChXZWJDb3JlOjpET01B
cHBsaWNhdGlvbkNhY2hlOjpvbnVwZGF0ZXJlYWR5KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFw
cGxpY2F0aW9uQ2FjaGU6OnNldE9uY2FjaGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxp
Y2F0aW9uQ2FjaGU6Om9uY2FjaGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9u
Q2FjaGU6OnNldE9ub2Jzb2xldGUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NQXBwbGljYXRpb25D
YWNoZTo6b25vYnNvbGV0ZSk6CisKKyAgICAgICAgVXNlIEFwcGxpY2F0aW9uQ2FjaEhvc3QgZGVm
aW5lZCBjb25zdGFudHMgZm9yIFN0YXR1cyBhbmQgRXZlbnRJRHMuCisgICAgICAKKwogMjAwOS0w
Ny0yNyAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCShyZXZpc2lvbiA0NjcyOCkKKysr
IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkod29ya2luZyBjb3B5KQpAQCAtNDQzLDggKzQ0Myw4
IEBAIF9fWk43V2ViQ29yZTIyYXBwbGljYXRpb25Jc0FwcGxlTWFpbEV2CiBfX1pON1dlYkNvcmUy
MmNyZWF0ZUZyYWdtZW50RnJvbVRleHRFUE5TXzVSYW5nZUVSS05TXzZTdHJpbmdFCiBfX1pON1dl
YkNvcmUyMmV4dGVybmFsUmVwcmVzZW50YXRpb25FUE5TXzEyUmVuZGVyT2JqZWN0RQogX19aTjdX
ZWJDb3JlMjNBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTE0c2V0TWF4aW11bVNpemVFeAotX19aTjdX
ZWJDb3JlMjNBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTI0dHJhbnNmZXJBcHBsaWNhdGlvbkNhY2hl
RVJLTlNfNlN0cmluZ0VQTlNfMjBBcHBsaWNhdGlvbkNhY2hlSG9zdEUKIF9fWk43V2ViQ29yZTIz
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2UxN3NldENhY2hlRGlyZWN0b3J5RVJLTlNfNlN0cmluZ0UK
K19fWk43V2ViQ29yZTIzQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UxNnN0b3JlQ29weU9mQ2FjaGVF
UktOU182U3RyaW5nRVBOU18yMEFwcGxpY2F0aW9uQ2FjaGVIb3N0RQogX19aTjdXZWJDb3JlMjNB
cHBsaWNhdGlvbkNhY2hlU3RvcmFnZTE4dmFjdXVtRGF0YWJhc2VGaWxlRXYKIF9fWk43V2ViQ29y
ZTIzQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U1ZW1wdHlFdgogX19aTjdXZWJDb3JlMjNSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZEMxRVBOU184RG9jdW1lbnRFTjNXVEYxMFBhc3NSZWZQdHJJTlNfMTZE
b2N1bWVudEZyYWdtZW50RUVFYmJiYmJOU18xMEVkaXRBY3Rpb25FCkluZGV4OiBXZWJDb3JlL2h0
bWwvSFRNTEh0bWxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEh0
bWxFbGVtZW50LmNwcAkocmV2aXNpb24gNDY3MjgpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEh0bWxF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTAgKzIzLDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJIVE1MSHRtbEVsZW1lbnQuaCIKIAotI2lmIEVOQUJMRShPRkZM
SU5FX1dFQl9BUFBMSUNBVElPTlMpCiAjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUhvc3QuaCIK
LSNlbmRpZgotCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRl
ci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCkBAIC03OCw4ICs3NSwxMSBAQCB2b2lkIEhUTUxIdG1s
RWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIENo
ZWNrIHRoZSBtYW5pZmVzdCBhdHRyaWJ1dGUKKyAgICAvLyBGSVhNRTogUmV2aXNpdCB0aGlzIHdo
ZW4gd2UgZ2V0IGEgY2xhcmlmaWNhdGlvbiBmcm9tIHdoYXR3ZyBvbiBob3cgdG8gaGFuZGxlIGVt
cHR5CisgICAgLy8gbWFuaWZlc3QgYXR0cmlidXRlcy4gQXMgc3BlYydkLCBhbmQgY29kZWQgaGVy
ZSwgdGhlIHN5c3RlbSB3aWxsIGluaXRpYXRlIGFuIHVwZGF0ZQorICAgIC8vIHBhc3NpbmcgaW4g
dGhlIGRvY3VtZW50IHVybCBhcyB0aGUgbWFuaWZlc3QgdXJsLiBUaGF0J3Mgbm90IGEgZ29vZCB0
aGluZy4KICAgICBBdG9taWNTdHJpbmcgbWFuaWZlc3QgPSBnZXRBdHRyaWJ1dGUobWFuaWZlc3RB
dHRyKTsKLSAgICBpZiAobWFuaWZlc3QuaXNFbXB0eSgpKQorICAgIGlmIChtYW5pZmVzdC5pc051
bGwoKSkKICAgICAgICAgZG9jdW1lbnRMb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPnNl
bGVjdENhY2hlV2l0aG91dE1hbmlmZXN0KCk7CiAgICAgZWxzZQogICAgICAgICBkb2N1bWVudExv
YWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+c2VsZWN0Q2FjaGVXaXRoTWFuaWZlc3QoZG9j
dW1lbnQoKS0+Y29tcGxldGVVUkwobWFuaWZlc3QpKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0Rv
Y3VtZW50TG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExv
YWRlci5jcHAJKHJldmlzaW9uIDQ2NzI4KQorKysgV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2Fk
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKIAorI2luY2x1ZGUgIkFwcGxpY2F0aW9u
Q2FjaGVIb3N0LmgiCiAjaW5jbHVkZSAiQXJjaGl2ZUZhY3RvcnkuaCIKICNpbmNsdWRlICJBcmNo
aXZlUmVzb3VyY2VDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUGFnZS5oIgpAQCAtMTQ4
LDcgKzE0OSw3IEBAIERvY3VtZW50TG9hZGVyOjpEb2N1bWVudExvYWRlcihjb25zdCBSZXMKICAg
ICAsIG1fc3Vic3RpdHV0ZVJlc291cmNlRGVsaXZlcnlUaW1lcih0aGlzLCAmRG9jdW1lbnRMb2Fk
ZXI6OnN1YnN0aXR1dGVSZXNvdXJjZURlbGl2ZXJ5VGltZXJGaXJlZCkKICAgICAsIG1fZGlkQ3Jl
YXRlR2xvYmFsSGlzdG9yeUVudHJ5KGZhbHNlKQogI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBM
SUNBVElPTlMpCi0gICAgLCBtX2FwcGxpY2F0aW9uQ2FjaGVIb3N0KHRoaXMpCisgICAgLCBtX2Fw
cGxpY2F0aW9uQ2FjaGVIb3N0KG5ldyBBcHBsaWNhdGlvbkNhY2hlSG9zdCh0aGlzKSkKICNlbmRp
ZgogewogfQpAQCAtMjQ2LDcgKzI0Nyw3IEBAIHZvaWQgRG9jdW1lbnRMb2FkZXI6Om1haW5SZWNl
aXZlZEVycm9yKGMKICAgICBBU1NFUlQoIWVycm9yLmlzTnVsbCgpKTsKIAogI2lmIEVOQUJMRShP
RkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCi0gICAgbV9hcHBsaWNhdGlvbkNhY2hlSG9zdC5mYWls
ZWRMb2FkaW5nTWFpblJlc291cmNlKCk7CisgICAgbV9hcHBsaWNhdGlvbkNhY2hlSG9zdC0+ZmFp
bGVkTG9hZGluZ01haW5SZXNvdXJjZSgpOwogI2VuZGlmCiAgICAgCiAgICAgaWYgKCFmcmFtZUxv
YWRlcigpKQpAQCAtNDEyLDcgKzQxMyw3IEBAIHZvaWQgRG9jdW1lbnRMb2FkZXI6OmRldGFjaEZy
b21GcmFtZSgpCiB7CiAgICAgQVNTRVJUKG1fZnJhbWUpOwogI2lmIEVOQUJMRShPRkZMSU5FX1dF
Ql9BUFBMSUNBVElPTlMpCi0gICAgbV9hcHBsaWNhdGlvbkNhY2hlSG9zdC5zZXRET01BcHBsaWNh
dGlvbkNhY2hlKDApOworICAgIG1fYXBwbGljYXRpb25DYWNoZUhvc3QtPnNldERPTUFwcGxpY2F0
aW9uQ2FjaGUoMCk7CiAjZW5kaWYKICAgICBtX2ZyYW1lID0gMDsKIH0KSW5kZXg6IFdlYkNvcmUv
bG9hZGVyL0RvY3VtZW50TG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRG9j
dW1lbnRMb2FkZXIuaAkocmV2aXNpb24gNDY3MjgpCisrKyBXZWJDb3JlL2xvYWRlci9Eb2N1bWVu
dExvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMCArMjksNiBAQAogI2lmbmRlZiBEb2N1
bWVudExvYWRlcl9oCiAjZGVmaW5lIERvY3VtZW50TG9hZGVyX2gKIAotI2lmIEVOQUJMRShPRkZM
SU5FX1dFQl9BUFBMSUNBVElPTlMpCi0jaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUhvc3QuaCIK
LSNlbmRpZgotCiAjaW5jbHVkZSAiTmF2aWdhdGlvbkFjdGlvbi5oIgogI2luY2x1ZGUgIlJlc291
cmNlRXJyb3IuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKQEAgLTQyLDYgKzM4LDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisgICAgY2xhc3MgQXBwbGljYXRpb25DYWNoZUhv
c3Q7CiAgICAgY2xhc3MgQXJjaGl2ZTsKICAgICBjbGFzcyBBcmNoaXZlUmVzb3VyY2U7CiAgICAg
Y2xhc3MgQXJjaGl2ZVJlc291cmNlQ29sbGVjdGlvbjsKQEAgLTIwOCw3ICsyMDUsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgdGFrZU1lbW9yeUNhY2hlTG9hZHNGb3JDbGll
bnROb3RpZmljYXRpb24oVmVjdG9yPFN0cmluZz4mIGxvYWRzKTsKIAogI2lmIEVOQUJMRShPRkZM
SU5FX1dFQl9BUFBMSUNBVElPTlMpCi0gICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVIb3N0KiBhcHBs
aWNhdGlvbkNhY2hlSG9zdCgpIHsgcmV0dXJuICZtX2FwcGxpY2F0aW9uQ2FjaGVIb3N0OyB9Cisg
ICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVIb3N0KiBhcHBsaWNhdGlvbkNhY2hlSG9zdCgpIGNvbnN0
IHsgcmV0dXJuIG1fYXBwbGljYXRpb25DYWNoZUhvc3QuZ2V0KCk7IH0KICNlbmRpZgogCiAgICAg
cHJvdGVjdGVkOgpAQCAtMjk4LDcgKzI5NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lm
IEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCiAgICAgICAgIGZyaWVuZCBjbGFzcyBB
cHBsaWNhdGlvbkNhY2hlSG9zdDsgIC8vIGZvciBzdWJzdGl0dXRlIHJlc291cmNlIGRlbGl2ZXJ5
Ci0gICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVIb3N0IG1fYXBwbGljYXRpb25DYWNoZUhvc3Q7Cisg
ICAgICAgIE93blB0cjxBcHBsaWNhdGlvbkNhY2hlSG9zdD4gbV9hcHBsaWNhdGlvbkNhY2hlSG9z
dDsKICNlbmRpZgogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9u
IDQ2NzI4KQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRnJhbWVM
b2FkZXIuaCIKIAorI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVIb3N0LmgiCiAjaW5jbHVkZSAi
QXJjaGl2ZS5oIgogI2luY2x1ZGUgIkFyY2hpdmVGYWN0b3J5LmgiCiAjaW5jbHVkZSAiQ1N0cmlu
Zy5oIgpAQCAtOTQsOSArOTUsNiBAQAogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAotI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBM
SUNBVElPTlMpCi0jaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUhvc3QuaCIKLSNlbmRpZgogCiAj
aWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJTVkdEb2N1bWVudC5oIgpJbmRleDogV2ViQ29yZS9s
b2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRl
ci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiA0NjcyOCkKKysrIFdlYkNvcmUvbG9h
ZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNYWluUmVzb3VyY2VMb2FkZXIuaCIK
IAorI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVIb3N0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRM
b2FkZXIuaCIKICNpbmNsdWRlICJGb3JtU3RhdGUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgpAQCAt
NDEsMTAgKzQyLDYgQEAKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1ZGUgIlNl
dHRpbmdzLmgiCiAKLSNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotI2luY2x1
ZGUgIkFwcGxpY2F0aW9uQ2FjaGVIb3N0LmgiCi0jZW5kaWYKLQogLy8gRklYTUU6IE1vcmUgdGhh
dCBpcyBpbiBjb21tb24gd2l0aCBTdWJyZXNvdXJjZUxvYWRlciBzaG91bGQgbW92ZSB1cCBpbnRv
IFJlc291cmNlTG9hZGVyLgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBXZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvUmVz
b3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiA0NjcyOCkKKysrIFdlYkNvcmUvbG9hZGVyL1Jlc291
cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsOSArMzAsNyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyLmgiCiAKLSNpZiBFTkFCTEUoT0ZG
TElORV9XRUJfQVBQTElDQVRJT05TKQogI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVIb3N0Lmgi
Ci0jZW5kaWYKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgi
CiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hl
L0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIv
YXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcAkocmV2aXNpb24gNDY3MjgpCisrKyBX
ZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzYsOCArMTc2LDggQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OnNl
bGVjdENhY2hlKAogCiAgICAgLy8gRG9uJ3QgY2hhbmdlIGFueXRoaW5nIG9uIGRpc2sgaWYgcHJp
dmF0ZSBicm93c2luZyBpcyBlbmFibGVkLgogICAgIGlmICghZnJhbWUtPnNldHRpbmdzKCkgfHwg
ZnJhbWUtPnNldHRpbmdzKCktPnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKSkgewotICAgICAgICBw
b3N0TGlzdGVuZXJUYXNrKERPTUFwcGxpY2F0aW9uQ2FjaGU6OkNIRUNLSU5HX0VWRU5ULCBkb2N1
bWVudExvYWRlcik7Ci0gICAgICAgIHBvc3RMaXN0ZW5lclRhc2soRE9NQXBwbGljYXRpb25DYWNo
ZTo6RVJST1JfRVZFTlQsIGRvY3VtZW50TG9hZGVyKTsKKyAgICAgICAgcG9zdExpc3RlbmVyVGFz
ayhBcHBsaWNhdGlvbkNhY2hlSG9zdDo6Q0hFQ0tJTkdfRVZFTlQsIGRvY3VtZW50TG9hZGVyKTsK
KyAgICAgICAgcG9zdExpc3RlbmVyVGFzayhBcHBsaWNhdGlvbkNhY2hlSG9zdDo6RVJST1JfRVZF
TlQsIGRvY3VtZW50TG9hZGVyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjM4LDcg
KzIzOCw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpmaW5pc2hlZExvYWQKICAgICAg
ICAgQVNTRVJUKCFtX2NhY2hlQmVpbmdVcGRhdGVkKTsgLy8gQWxyZWFkeSBjbGVhcmVkIG91dCBi
eSBzdG9wTG9hZGluZygpLgogICAgICAgICBsb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCkt
PnNldEFwcGxpY2F0aW9uQ2FjaGUoMCk7IC8vIFdpbGwgdW5zZXQgY2FuZGlkYXRlLCB0b28uCiAg
ICAgICAgIG1fYXNzb2NpYXRlZERvY3VtZW50TG9hZGVycy5yZW1vdmUobG9hZGVyKTsKLSAgICAg
ICAgcG9zdExpc3RlbmVyVGFzayhET01BcHBsaWNhdGlvbkNhY2hlOjpFUlJPUl9FVkVOVCwgbG9h
ZGVyKTsKKyAgICAgICAgcG9zdExpc3RlbmVyVGFzayhBcHBsaWNhdGlvbkNhY2hlSG9zdDo6RVJS
T1JfRVZFTlQsIGxvYWRlcik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29tcGxldGVkOgog
ICAgICAgICBBU1NFUlQobV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzLmNvbnRhaW5zKGxvYWRl
cikpOwpAQCAtMjcyLDcgKzI3Miw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpmYWls
ZWRMb2FkaW4KIAogICAgICAgICAvLyBUaGUgbWFuaWZlc3QgZGlkbid0IGNoYW5nZSwgYW5kIHdl
IGhhdmUgYSByZWxldmFudCBjYWNoZSAtIGJ1dCB0aGUgbWFpbiByZXNvdXJjZSBkb3dubG9hZCBm
YWlsZWQgbWlkLXdheSwgc28gaXQgY2Fubm90IGJlIHN0b3JlZCB0byB0aGUgY2FjaGUsCiAgICAg
ICAgIC8vIGFuZCB0aGUgbG9hZGVyIGRvZXMgbm90IGdldCBhc3NvY2lhdGVkIHRvIGl0LiBJZiB0
aGVyZSBhcmUgb3RoZXIgbWFpbiByZXNvdXJjZXMgYmVpbmcgZG93bmxvYWRlZCBmb3IgdGhpcyBj
YWNoZSBncm91cCwgdGhleSBtYXkgc3RpbGwgc3VjY2VlZC4KLSAgICAgICAgcG9zdExpc3RlbmVy
VGFzayhET01BcHBsaWNhdGlvbkNhY2hlOjpFUlJPUl9FVkVOVCwgbG9hZGVyKTsKKyAgICAgICAg
cG9zdExpc3RlbmVyVGFzayhBcHBsaWNhdGlvbkNhY2hlSG9zdDo6RVJST1JfRVZFTlQsIGxvYWRl
cik7CiAKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGYWlsdXJlOgpAQCAtMjgyLDcgKzI4Miw3
IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpmYWlsZWRMb2FkaW4KIAogICAgICAgICBs
b2FkZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPnNldEFwcGxpY2F0aW9uQ2FjaGUoMCk7IC8v
IFdpbGwgdW5zZXQgY2FuZGlkYXRlLCB0b28uCiAgICAgICAgIG1fYXNzb2NpYXRlZERvY3VtZW50
TG9hZGVycy5yZW1vdmUobG9hZGVyKTsKLSAgICAgICAgcG9zdExpc3RlbmVyVGFzayhET01BcHBs
aWNhdGlvbkNhY2hlOjpFUlJPUl9FVkVOVCwgbG9hZGVyKTsKKyAgICAgICAgcG9zdExpc3RlbmVy
VGFzayhBcHBsaWNhdGlvbkNhY2hlSG9zdDo6RVJST1JfRVZFTlQsIGxvYWRlcik7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgQ29tcGxldGVkOgogICAgICAgICAvLyBUaGUgY2FjaGUgbWFuaWZl
c3QgZGlkbid0IGxpc3QgdGhpcyBtYWluIHJlc291cmNlLCBhbmQgYWxsIGNhY2hlIGVudHJpZXMg
d2VyZSBhbHJlYWR5IHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5IC0gYnV0IHRoZSBtYWluIHJlc291cmNl
IGZhaWxlZCB0byBsb2FkLApAQCAtMjkzLDcgKzI5Myw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNo
ZUdyb3VwOjpmYWlsZWRMb2FkaW4KICAgICAgICAgbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJz
LnJlbW92ZShsb2FkZXIpOwogICAgICAgICBsb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCkt
PnNldEFwcGxpY2F0aW9uQ2FjaGUoMCk7CiAKLSAgICAgICAgcG9zdExpc3RlbmVyVGFzayhET01B
cHBsaWNhdGlvbkNhY2hlOjpFUlJPUl9FVkVOVCwgbG9hZGVyKTsKKyAgICAgICAgcG9zdExpc3Rl
bmVyVGFzayhBcHBsaWNhdGlvbkNhY2hlSG9zdDo6RVJST1JfRVZFTlQsIGxvYWRlcik7CiAKICAg
ICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzg5LDkgKzM4OSw5IEBAIHZvaWQgQXBwbGljYXRpb25D
YWNoZUdyb3VwOjp1cGRhdGUoRnJhbWUKIHsKICAgICBpZiAobV91cGRhdGVTdGF0dXMgPT0gQ2hl
Y2tpbmcgfHwgbV91cGRhdGVTdGF0dXMgPT0gRG93bmxvYWRpbmcpIHsKICAgICAgICAgaWYgKHVw
ZGF0ZU9wdGlvbiA9PSBBcHBsaWNhdGlvbkNhY2hlVXBkYXRlV2l0aEJyb3dzaW5nQ29udGV4dCkg
ewotICAgICAgICAgICAgcG9zdExpc3RlbmVyVGFzayhET01BcHBsaWNhdGlvbkNhY2hlOjpDSEVD
S0lOR19FVkVOVCwgZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpKTsKKyAgICAgICAg
ICAgIHBvc3RMaXN0ZW5lclRhc2soQXBwbGljYXRpb25DYWNoZUhvc3Q6OkNIRUNLSU5HX0VWRU5U
LCBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkpOwogICAgICAgICAgICAgaWYgKG1f
dXBkYXRlU3RhdHVzID09IERvd25sb2FkaW5nKQotICAgICAgICAgICAgICAgIHBvc3RMaXN0ZW5l
clRhc2soRE9NQXBwbGljYXRpb25DYWNoZTo6RE9XTkxPQURJTkdfRVZFTlQsIGZyYW1lLT5sb2Fk
ZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSk7CisgICAgICAgICAgICAgICAgcG9zdExpc3RlbmVyVGFz
ayhBcHBsaWNhdGlvbkNhY2hlSG9zdDo6RE9XTkxPQURJTkdfRVZFTlQsIGZyYW1lLT5sb2FkZXIo
KS0+ZG9jdW1lbnRMb2FkZXIoKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTQwMSw4ICs0MDEsOCBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6dXBkYXRlKEZy
YW1lCiAgICAgICAgIEFTU0VSVChtX3BlbmRpbmdNYXN0ZXJSZXNvdXJjZUxvYWRlcnMuaXNFbXB0
eSgpKTsKICAgICAgICAgQVNTRVJUKG1fcGVuZGluZ0VudHJpZXMuaXNFbXB0eSgpKTsKICAgICAg
ICAgQVNTRVJUKCFtX2NhY2hlQmVpbmdVcGRhdGVkKTsKLSAgICAgICAgcG9zdExpc3RlbmVyVGFz
ayhET01BcHBsaWNhdGlvbkNhY2hlOjpDSEVDS0lOR19FVkVOVCwgZnJhbWUtPmxvYWRlcigpLT5k
b2N1bWVudExvYWRlcigpKTsKLSAgICAgICAgcG9zdExpc3RlbmVyVGFzayhET01BcHBsaWNhdGlv
bkNhY2hlOjpOT1VQREFURV9FVkVOVCwgZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigp
KTsKKyAgICAgICAgcG9zdExpc3RlbmVyVGFzayhBcHBsaWNhdGlvbkNhY2hlSG9zdDo6Q0hFQ0tJ
TkdfRVZFTlQsIGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSk7CisgICAgICAgIHBv
c3RMaXN0ZW5lclRhc2soQXBwbGljYXRpb25DYWNoZUhvc3Q6Ok5PVVBEQVRFX0VWRU5ULCBmcmFt
ZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CkBAIC00MTEsMTAgKzQxMSwxMCBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6dXBkYXRl
KEZyYW1lCiAKICAgICBtX3VwZGF0ZVN0YXR1cyA9IENoZWNraW5nOwogCi0gICAgcG9zdExpc3Rl
bmVyVGFzayhET01BcHBsaWNhdGlvbkNhY2hlOjpDSEVDS0lOR19FVkVOVCwgbV9hc3NvY2lhdGVk
RG9jdW1lbnRMb2FkZXJzKTsKKyAgICBwb3N0TGlzdGVuZXJUYXNrKEFwcGxpY2F0aW9uQ2FjaGVI
b3N0OjpDSEVDS0lOR19FVkVOVCwgbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzKTsKICAgICBp
ZiAoIW1fbmV3ZXN0Q2FjaGUpIHsKICAgICAgICAgQVNTRVJUKHVwZGF0ZU9wdGlvbiA9PSBBcHBs
aWNhdGlvbkNhY2hlVXBkYXRlV2l0aEJyb3dzaW5nQ29udGV4dCk7Ci0gICAgICAgIHBvc3RMaXN0
ZW5lclRhc2soRE9NQXBwbGljYXRpb25DYWNoZTo6Q0hFQ0tJTkdfRVZFTlQsIGZyYW1lLT5sb2Fk
ZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSk7CisgICAgICAgIHBvc3RMaXN0ZW5lclRhc2soQXBwbGlj
YXRpb25DYWNoZUhvc3Q6OkNIRUNLSU5HX0VWRU5ULCBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50
TG9hZGVyKCkpOwogICAgIH0KICAgICAKICAgICBBU1NFUlQoIW1fbWFuaWZlc3RIYW5kbGUpOwpA
QCAtNjQ5LDcgKzY0OSw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpkaWRGaW5pc2hM
b2EKICAgICAvLyBXZSBoYXZlIHRoZSBtYW5pZmVzdCwgbm93IGRvd25sb2FkIHRoZSByZXNvdXJj
ZXMuCiAgICAgbV91cGRhdGVTdGF0dXMgPSBEb3dubG9hZGluZzsKICAgICAKLSAgICBwb3N0TGlz
dGVuZXJUYXNrKERPTUFwcGxpY2F0aW9uQ2FjaGU6OkRPV05MT0FESU5HX0VWRU5ULCBtX2Fzc29j
aWF0ZWREb2N1bWVudExvYWRlcnMpOworICAgIHBvc3RMaXN0ZW5lclRhc2soQXBwbGljYXRpb25D
YWNoZUhvc3Q6OkRPV05MT0FESU5HX0VWRU5ULCBtX2Fzc29jaWF0ZWREb2N1bWVudExvYWRlcnMp
OwogCiAgICAgQVNTRVJUKG1fcGVuZGluZ0VudHJpZXMuaXNFbXB0eSgpKTsKIApAQCAtNjk5LDgg
KzY5OSw4IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjptYW5pZmVzdE5vdEYKIHsKICAg
ICBtYWtlT2Jzb2xldGUoKTsKIAotICAgIHBvc3RMaXN0ZW5lclRhc2soRE9NQXBwbGljYXRpb25D
YWNoZTo6T0JTT0xFVEVfRVZFTlQsIG1fYXNzb2NpYXRlZERvY3VtZW50TG9hZGVycyk7Ci0gICAg
cG9zdExpc3RlbmVyVGFzayhET01BcHBsaWNhdGlvbkNhY2hlOjpFUlJPUl9FVkVOVCwgbV9wZW5k
aW5nTWFzdGVyUmVzb3VyY2VMb2FkZXJzKTsKKyAgICBwb3N0TGlzdGVuZXJUYXNrKEFwcGxpY2F0
aW9uQ2FjaGVIb3N0OjpPQlNPTEVURV9FVkVOVCwgbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJz
KTsKKyAgICBwb3N0TGlzdGVuZXJUYXNrKEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpFUlJPUl9FVkVO
VCwgbV9wZW5kaW5nTWFzdGVyUmVzb3VyY2VMb2FkZXJzKTsKIAogICAgIHN0b3BMb2FkaW5nKCk7
CiAKQEAgLTc0OCwxMSArNzQ4LDExIEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpjaGVj
a0lmTG9hZEkKICAgICAgICAgaWYgKCFtX3N0b3JhZ2VJRCkKICAgICAgICAgICAgIGNhY2hlU3Rv
cmFnZSgpLnN0b3JlTmV3ZXN0Q2FjaGUodGhpcyk7CiAKLSAgICAgICAgcG9zdExpc3RlbmVyVGFz
ayhET01BcHBsaWNhdGlvbkNhY2hlOjpOT1VQREFURV9FVkVOVCwgbV9hc3NvY2lhdGVkRG9jdW1l
bnRMb2FkZXJzKTsKKyAgICAgICAgcG9zdExpc3RlbmVyVGFzayhBcHBsaWNhdGlvbkNhY2hlSG9z
dDo6Tk9VUERBVEVfRVZFTlQsIG1fYXNzb2NpYXRlZERvY3VtZW50TG9hZGVycyk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgRmFpbHVyZToKICAgICAgICAgQVNTRVJUKCFtX2NhY2hlQmVpbmdV
cGRhdGVkKTsKLSAgICAgICAgcG9zdExpc3RlbmVyVGFzayhET01BcHBsaWNhdGlvbkNhY2hlOjpF
UlJPUl9FVkVOVCwgbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzKTsKKyAgICAgICAgcG9zdExp
c3RlbmVyVGFzayhBcHBsaWNhdGlvbkNhY2hlSG9zdDo6RVJST1JfRVZFTlQsIG1fYXNzb2NpYXRl
ZERvY3VtZW50TG9hZGVycyk7CiAgICAgICAgIGlmIChtX2NhY2hlcy5pc0VtcHR5KCkpIHsKICAg
ICAgICAgICAgIEFTU0VSVChtX2Fzc29jaWF0ZWREb2N1bWVudExvYWRlcnMuaXNFbXB0eSgpKTsK
ICAgICAgICAgICAgIGRlbGV0ZSB0aGlzOwpAQCAtNzgxLDcgKzc4MSw3IEBAIHZvaWQgQXBwbGlj
YXRpb25DYWNoZUdyb3VwOjpjaGVja0lmTG9hZEkKICAgICAgICAgICAgIGlmIChvbGROZXdlc3RD
YWNoZSkKICAgICAgICAgICAgICAgICBjYWNoZVN0b3JhZ2UoKS5yZW1vdmUob2xkTmV3ZXN0Q2Fj
aGUuZ2V0KCkpOwogICAgICAgICAgICAgLy8gRmlyZSB0aGUgc3VjY2VzcyBldmVudHMuCi0gICAg
ICAgICAgICBwb3N0TGlzdGVuZXJUYXNrKGlzVXBncmFkZUF0dGVtcHQgPyBET01BcHBsaWNhdGlv
bkNhY2hlOjpVUERBVEVSRUFEWV9FVkVOVCA6IERPTUFwcGxpY2F0aW9uQ2FjaGU6OkNBQ0hFRF9F
VkVOVCwgbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzKTsKKyAgICAgICAgICAgIHBvc3RMaXN0
ZW5lclRhc2soaXNVcGdyYWRlQXR0ZW1wdCA/IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpVUERBVEVS
RUFEWV9FVkVOVCA6IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpDQUNIRURfRVZFTlQsIG1fYXNzb2Np
YXRlZERvY3VtZW50TG9hZGVycyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAo
Y2FjaGVTdG9yYWdlKCkuaXNNYXhpbXVtU2l6ZVJlYWNoZWQoKSAmJiAhbV9jYWxsZWRSZWFjaGVk
TWF4QXBwQ2FjaGVTaXplKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgcmFuIG91dCBvZiBzcGFj
ZS4gQWxsIHRoZSBjaGFuZ2VzIGluIHRoZSBjYWNoZSBzdG9yYWdlIGhhdmUKQEAgLTgwMSw3ICs4
MDEsNyBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6Y2hlY2tJZkxvYWRJCiAgICAgICAg
ICAgICAgICAgLy8gUnVuIHRoZSAiY2FjaGUgZmFpbHVyZSBzdGVwcyIKICAgICAgICAgICAgICAg
ICAvLyBGaXJlIHRoZSBlcnJvciBldmVudHMgdG8gYWxsIHBlbmRpbmcgbWFzdGVyIGVudHJpZXMs
IGFzIHdlbGwgYW55IG90aGVyIGNhY2hlIGhvc3RzCiAgICAgICAgICAgICAgICAgLy8gY3VycmVu
dGx5IGFzc29jaWF0ZWQgd2l0aCBhIGNhY2hlIGluIHRoaXMgZ3JvdXAuCi0gICAgICAgICAgICAg
ICAgcG9zdExpc3RlbmVyVGFzayhET01BcHBsaWNhdGlvbkNhY2hlOjpFUlJPUl9FVkVOVCwgbV9h
c3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzKTsKKyAgICAgICAgICAgICAgICBwb3N0TGlzdGVuZXJU
YXNrKEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpFUlJPUl9FVkVOVCwgbV9hc3NvY2lhdGVkRG9jdW1l
bnRMb2FkZXJzKTsKICAgICAgICAgICAgICAgICAvLyBEaXNhc3NvY2lhdGUgdGhlIHBlbmRpbmcg
bWFzdGVyIGVudHJpZXMgZnJvbSB0aGUgZmFpbGVkIG5ldyBjYWNoZS4gTm90ZSB0aGF0CiAgICAg
ICAgICAgICAgICAgLy8gYWxsIG90aGVyIGxvYWRlcnMgaW4gdGhlIG1fYXNzb2NpYXRlZERvY3Vt
ZW50TG9hZGVycyBhcmUgc3RpbGwgYXNzb2NpYXRlZCB3aXRoCiAgICAgICAgICAgICAgICAgLy8g
c29tZSBvdGhlciBjYWNoZSBpbiB0aGlzIGdyb3VwLiBUaGV5IGFyZSBub3QgYXNzb2NpYXRlZCB3
aXRoIHRoZSBmYWlsZWQgbmV3IGNhY2hlLgpAQCAtODQ3LDcgKzg0Nyw3IEBAIHZvaWQgQXBwbGlj
YXRpb25DYWNoZUdyb3VwOjpzdGFydExvYWRpbmcKICAgICAKICAgICBFbnRyeU1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3BlbmRpbmdFbnRyaWVzLmJlZ2luKCk7CiAKLSAgICBwb3N0TGlzdGVu
ZXJUYXNrKERPTUFwcGxpY2F0aW9uQ2FjaGU6OlBST0dSRVNTX0VWRU5ULCBtX2Fzc29jaWF0ZWRE
b2N1bWVudExvYWRlcnMpOworICAgIHBvc3RMaXN0ZW5lclRhc2soQXBwbGljYXRpb25DYWNoZUhv
c3Q6OlBST0dSRVNTX0VWRU5ULCBtX2Fzc29jaWF0ZWREb2N1bWVudExvYWRlcnMpOwogCiAgICAg
QVNTRVJUKCFtX2N1cnJlbnRIYW5kbGUpOwogICAgIApAQCAtOTQ2LDkgKzk0Niw5IEBAIHZvaWQg
QXBwbGljYXRpb25DYWNoZUdyb3VwOjpzY2hlZHVsZVJlYWMKIAogY2xhc3MgQ2FsbENhY2hlTGlz
dGVuZXJUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewogcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbGxDYWNoZUxpc3RlbmVyVGFzaz4gY3JlYXRlKFBh
c3NSZWZQdHI8RG9jdW1lbnRMb2FkZXI+IGxvYWRlciwgRE9NQXBwbGljYXRpb25DYWNoZTo6RXZl
bnRUeXBlIGV2ZW50VHlwZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYWxsQ2FjaGVMaXN0ZW5l
clRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPERvY3VtZW50TG9hZGVyPiBsb2FkZXIsIEFwcGxpY2F0
aW9uQ2FjaGVIb3N0OjpFdmVudElEIGV2ZW50SUQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IENhbGxDYWNoZUxpc3RlbmVyVGFzayhsb2FkZXIsIGV2ZW50VHlwZSkpOworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENhbGxDYWNoZUxpc3RlbmVyVGFzayhsb2FkZXIsIGV2
ZW50SUQpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCkKQEAgLTk2MSwyOCArOTYxLDI4IEBAIHB1YmxpYzoKICAg
ICAKICAgICAgICAgQVNTRVJUKGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSA9PSBt
X2RvY3VtZW50TG9hZGVyLmdldCgpKTsKIAotICAgICAgICBtX2RvY3VtZW50TG9hZGVyLT5hcHBs
aWNhdGlvbkNhY2hlSG9zdCgpLT5ub3RpZnlFdmVudExpc3RlbmVyKG1fZXZlbnRUeXBlKTsKKyAg
ICAgICAgbV9kb2N1bWVudExvYWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+bm90aWZ5RXZl
bnRMaXN0ZW5lcihtX2V2ZW50SUQpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBDYWxsQ2FjaGVM
aXN0ZW5lclRhc2soUGFzc1JlZlB0cjxEb2N1bWVudExvYWRlcj4gbG9hZGVyLCBET01BcHBsaWNh
dGlvbkNhY2hlOjpFdmVudFR5cGUgZXZlbnRUeXBlKQorICAgIENhbGxDYWNoZUxpc3RlbmVyVGFz
ayhQYXNzUmVmUHRyPERvY3VtZW50TG9hZGVyPiBsb2FkZXIsIEFwcGxpY2F0aW9uQ2FjaGVIb3N0
OjpFdmVudElEIGV2ZW50SUQpCiAgICAgICAgIDogbV9kb2N1bWVudExvYWRlcihsb2FkZXIpCi0g
ICAgICAgICwgbV9ldmVudFR5cGUoZXZlbnRUeXBlKQorICAgICAgICAsIG1fZXZlbnRJRChldmVu
dElEKQogICAgIHsKICAgICB9CiAKICAgICBSZWZQdHI8RG9jdW1lbnRMb2FkZXI+IG1fZG9jdW1l
bnRMb2FkZXI7Ci0gICAgRE9NQXBwbGljYXRpb25DYWNoZTo6RXZlbnRUeXBlIG1fZXZlbnRUeXBl
OworICAgIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpFdmVudElEIG1fZXZlbnRJRDsKIH07CiAKLXZv
aWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpwb3N0TGlzdGVuZXJUYXNrKERPTUFwcGxpY2F0aW9u
Q2FjaGU6OkV2ZW50VHlwZSBldmVudFR5cGUsIGNvbnN0IEhhc2hTZXQ8RG9jdW1lbnRMb2FkZXIq
PiYgbG9hZGVyU2V0KQordm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OnBvc3RMaXN0ZW5lclRh
c2soQXBwbGljYXRpb25DYWNoZUhvc3Q6OkV2ZW50SUQgZXZlbnRJRCwgY29uc3QgSGFzaFNldDxE
b2N1bWVudExvYWRlcio+JiBsb2FkZXJTZXQpCiB7CiAgICAgSGFzaFNldDxEb2N1bWVudExvYWRl
cio+Ojpjb25zdF9pdGVyYXRvciBsb2FkZXJTZXRFbmQgPSBsb2FkZXJTZXQuZW5kKCk7CiAgICAg
Zm9yIChIYXNoU2V0PERvY3VtZW50TG9hZGVyKj46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBsb2Fk
ZXJTZXQuYmVnaW4oKTsgaXRlciAhPSBsb2FkZXJTZXRFbmQ7ICsraXRlcikKLSAgICAgICAgcG9z
dExpc3RlbmVyVGFzayhldmVudFR5cGUsICppdGVyKTsKKyAgICAgICAgcG9zdExpc3RlbmVyVGFz
ayhldmVudElELCAqaXRlcik7CiB9CiAKLXZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpwb3N0
TGlzdGVuZXJUYXNrKERPTUFwcGxpY2F0aW9uQ2FjaGU6OkV2ZW50VHlwZSBldmVudFR5cGUsIERv
Y3VtZW50TG9hZGVyKiBsb2FkZXIpCit2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6cG9zdExp
c3RlbmVyVGFzayhBcHBsaWNhdGlvbkNhY2hlSG9zdDo6RXZlbnRJRCBldmVudElELCBEb2N1bWVu
dExvYWRlciogbG9hZGVyKQogewogICAgIEZyYW1lKiBmcmFtZSA9IGxvYWRlci0+ZnJhbWUoKTsK
ICAgICBpZiAoIWZyYW1lKQpAQCAtOTkwLDcgKzk5MCw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNo
ZUdyb3VwOjpwb3N0TGlzdGVuZXIKICAgICAKICAgICBBU1NFUlQoZnJhbWUtPmxvYWRlcigpLT5k
b2N1bWVudExvYWRlcigpID09IGxvYWRlcik7CiAKLSAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+cG9z
dFRhc2soQ2FsbENhY2hlTGlzdGVuZXJUYXNrOjpjcmVhdGUobG9hZGVyLCBldmVudFR5cGUpKTsK
KyAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+cG9zdFRhc2soQ2FsbENhY2hlTGlzdGVuZXJUYXNrOjpj
cmVhdGUobG9hZGVyLCBldmVudElEKSk7CiB9CiAKIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3Vw
OjpjbGVhclN0b3JhZ2VJRCgpCkluZGV4OiBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNh
dGlvbkNhY2hlR3JvdXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9B
cHBsaWNhdGlvbkNhY2hlR3JvdXAuaAkocmV2aXNpb24gNDY3MjgpCisrKyBXZWJDb3JlL2xvYWRl
ci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuaAkod29ya2luZyBjb3B5KQpAQCAtOTEs
OSArOTEsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0NvcHkoKSBjb25zdCB7IHJldHVybiBtX2lz
Q29weTsgfQogCiBwcml2YXRlOgotICAgIHR5cGVkZWYgdm9pZCAoRE9NQXBwbGljYXRpb25DYWNo
ZTo6Kkxpc3RlbmVyRnVuY3Rpb24pKCk7Ci0gICAgc3RhdGljIHZvaWQgcG9zdExpc3RlbmVyVGFz
ayhET01BcHBsaWNhdGlvbkNhY2hlOjpFdmVudFR5cGUsIGNvbnN0IEhhc2hTZXQ8RG9jdW1lbnRM
b2FkZXIqPiYpOwotICAgIHN0YXRpYyB2b2lkIHBvc3RMaXN0ZW5lclRhc2soRE9NQXBwbGljYXRp
b25DYWNoZTo6RXZlbnRUeXBlLCBEb2N1bWVudExvYWRlciopOworICAgIHN0YXRpYyB2b2lkIHBv
c3RMaXN0ZW5lclRhc2soQXBwbGljYXRpb25DYWNoZUhvc3Q6OkV2ZW50SUQsIGNvbnN0IEhhc2hT
ZXQ8RG9jdW1lbnRMb2FkZXIqPiYpOworICAgIHN0YXRpYyB2b2lkIHBvc3RMaXN0ZW5lclRhc2so
QXBwbGljYXRpb25DYWNoZUhvc3Q6OkV2ZW50SUQsIERvY3VtZW50TG9hZGVyKik7CiAgICAgdm9p
ZCBzY2hlZHVsZVJlYWNoZWRNYXhBcHBDYWNoZVNpemVDYWxsYmFjaygpOwogCiAgICAgUGFzc1Jl
ZlB0cjxSZXNvdXJjZUhhbmRsZT4gY3JlYXRlUmVzb3VyY2VIYW5kbGUoY29uc3QgS1VSTCYsIEFw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogbmV3ZXN0Q2FjaGVkUmVzb3VyY2UpOwpJbmRleDogV2Vi
Q29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcAkocmV2
aXNpb24gNDY3MjgpCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hl
SG9zdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogQXBwbGljYXRpb25DYWNoZUhvc3Q6OkFwcGxpY2F0aW9uQ2FjaGVIb3N0KERvY3Vt
ZW50TG9hZGVyKiBkb2N1bWVudExvYWRlcikKLSAgICA6IG1fRE9NQXBwbGljYXRpb25DYWNoZSgw
KQorICAgIDogbV9kb21BcHBsaWNhdGlvbkNhY2hlKDApCiAgICAgLCBtX2RvY3VtZW50TG9hZGVy
KGRvY3VtZW50TG9hZGVyKQogICAgICwgbV9jYW5kaWRhdGVBcHBsaWNhdGlvbkNhY2hlR3JvdXAo
MCkKIHsKQEAgLTIyMSw2ICsyMjEsMTggQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6Y2Fu
Q2FjaGVJblBhZwogICAgIHJldHVybiAhYXBwbGljYXRpb25DYWNoZSgpICYmICFjYW5kaWRhdGVB
cHBsaWNhdGlvbkNhY2hlR3JvdXAoKTsKIH0KIAordm9pZCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6
c2V0RE9NQXBwbGljYXRpb25DYWNoZShET01BcHBsaWNhdGlvbkNhY2hlKiBkb21BcHBsaWNhdGlv
bkNhY2hlKQoreworICAgIEFTU0VSVCghbV9kb21BcHBsaWNhdGlvbkNhY2hlIHx8ICFkb21BcHBs
aWNhdGlvbkNhY2hlKTsKKyAgICBtX2RvbUFwcGxpY2F0aW9uQ2FjaGUgPSBkb21BcHBsaWNhdGlv
bkNhY2hlOworfQorCit2b2lkIEFwcGxpY2F0aW9uQ2FjaGVIb3N0Ojpub3RpZnlFdmVudExpc3Rl
bmVyKEV2ZW50SUQgaWQpCit7CisgICAgaWYgKG1fZG9tQXBwbGljYXRpb25DYWNoZSkKKyAgICAg
ICAgbV9kb21BcHBsaWNhdGlvbkNhY2hlLT5jYWxsRXZlbnRMaXN0ZW5lcihpZCk7Cit9CisKIHZv
aWQgQXBwbGljYXRpb25DYWNoZUhvc3Q6OnNldENhbmRpZGF0ZUFwcGxpY2F0aW9uQ2FjaGVHcm91
cChBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIGdyb3VwKQogewogICAgIEFTU0VSVCghbV9hcHBsaWNh
dGlvbkNhY2hlKTsKQEAgLTMwMiwyOCArMzE0LDI4IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZUhv
c3Q6OnNjaGVkdWxlTG9hZEYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotRE9NQXBwbGljYXRpb25D
YWNoZTo6U3RhdHVzIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpzdGF0dXMoKSBjb25zdAorQXBwbGlj
YXRpb25DYWNoZUhvc3Q6OlN0YXR1cyBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6c3RhdHVzKCkgY29u
c3QKIHsKICAgICBBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSA9IGFwcGxpY2F0aW9uQ2FjaGUoKTsg
ICAgCiAgICAgaWYgKCFjYWNoZSkKLSAgICAgICAgcmV0dXJuIERPTUFwcGxpY2F0aW9uQ2FjaGU6
OlVOQ0FDSEVEOworICAgICAgICByZXR1cm4gVU5DQUNIRUQ7CiAKICAgICBzd2l0Y2ggKGNhY2hl
LT5ncm91cCgpLT51cGRhdGVTdGF0dXMoKSkgewogICAgICAgICBjYXNlIEFwcGxpY2F0aW9uQ2Fj
aGVHcm91cDo6Q2hlY2tpbmc6Ci0gICAgICAgICAgICByZXR1cm4gRE9NQXBwbGljYXRpb25DYWNo
ZTo6Q0hFQ0tJTkc7CisgICAgICAgICAgICByZXR1cm4gQ0hFQ0tJTkc7CiAgICAgICAgIGNhc2Ug
QXBwbGljYXRpb25DYWNoZUdyb3VwOjpEb3dubG9hZGluZzoKLSAgICAgICAgICAgIHJldHVybiBE
T01BcHBsaWNhdGlvbkNhY2hlOjpET1dOTE9BRElORzsKKyAgICAgICAgICAgIHJldHVybiBET1dO
TE9BRElORzsKICAgICAgICAgY2FzZSBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OklkbGU6IHsKICAg
ICAgICAgICAgIGlmIChjYWNoZS0+Z3JvdXAoKS0+aXNPYnNvbGV0ZSgpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBET01BcHBsaWNhdGlvbkNhY2hlOjpPQlNPTEVURTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gT0JTT0xFVEU7CiAgICAgICAgICAgICBpZiAoY2FjaGUgIT0gY2FjaGUtPmdyb3Vw
KCktPm5ld2VzdENhY2hlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIERPTUFwcGxpY2F0aW9u
Q2FjaGU6OlVQREFURVJFQURZOwotICAgICAgICAgICAgcmV0dXJuIERPTUFwcGxpY2F0aW9uQ2Fj
aGU6OklETEU7CisgICAgICAgICAgICAgICAgcmV0dXJuIFVQREFURVJFQURZOworICAgICAgICAg
ICAgcmV0dXJuIElETEU7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gRE9NQXBwbGljYXRpb25DYWNoZTo6VU5DQUNIRUQ7CisgICAgcmV0
dXJuIFVOQ0FDSEVEOwogfQogCiBib29sIEFwcGxpY2F0aW9uQ2FjaGVIb3N0Ojp1cGRhdGUoKQpJ
bmRleDogV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlSG9zdC5o
CShyZXZpc2lvbiA0NjcyOCkKKysrIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9u
Q2FjaGVIb3N0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKIAogI2lmIEVOQUJM
RShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCiAKLSNpbmNsdWRlICJET01BcHBsaWNhdGlvbkNh
Y2hlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC00MywxNiArNDMsMzggQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDsKICAgICBjbGFz
cyBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U7CiAgICAgY2xhc3MgQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2U7CisgICAgY2xhc3MgRE9NQXBwbGljYXRpb25DYWNoZTsKICAgICBjbGFzcyBEb2N1bWVu
dExvYWRlcjsKICAgICBjbGFzcyBLVVJMOwogICAgIGNsYXNzIFJlc291cmNlTG9hZGVyOwogICAg
IGNsYXNzIFJlc291cmNlRXJyb3I7Ci0gICAgY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OworICAgIHN0
cnVjdCBSZXNvdXJjZVJlcXVlc3Q7CiAgICAgY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKICAgICBj
bGFzcyBTdWJzdGl0dXRlRGF0YTsKIAogICAgIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGVIb3N0IHsK
ICAgICBwdWJsaWM6CisgICAgICAgIC8vIFRoZSBTdGF0dXMgbnVtZXJpYyB2YWx1ZXMgYXJlIHNw
ZWNpZmllZCBpbiB0aGUgSFRNTDUgc3BlYy4KKyAgICAgICAgZW51bSBTdGF0dXMgeworICAgICAg
ICAgICAgVU5DQUNIRUQgPSAwLAorICAgICAgICAgICAgSURMRSA9IDEsCisgICAgICAgICAgICBD
SEVDS0lORyA9IDIsCisgICAgICAgICAgICBET1dOTE9BRElORyA9IDMsCisgICAgICAgICAgICBV
UERBVEVSRUFEWSA9IDQsCisgICAgICAgICAgICBPQlNPTEVURSA9IDUKKyAgICAgICAgfTsKKwor
ICAgICAgICBlbnVtIEV2ZW50SUQgeworICAgICAgICAgICAgQ0hFQ0tJTkdfRVZFTlQgPSAwLAor
ICAgICAgICAgICAgRVJST1JfRVZFTlQsCisgICAgICAgICAgICBOT1VQREFURV9FVkVOVCwKKyAg
ICAgICAgICAgIERPV05MT0FESU5HX0VWRU5ULAorICAgICAgICAgICAgUFJPR1JFU1NfRVZFTlQs
CisgICAgICAgICAgICBVUERBVEVSRUFEWV9FVkVOVCwKKyAgICAgICAgICAgIENBQ0hFRF9FVkVO
VCwKKyAgICAgICAgICAgIE9CU09MRVRFX0VWRU5UICAvLyBNdXN0IHJlbWFpbiB0aGUgbGFzdCB2
YWx1ZSwgdGhpcyBpcyB1c2VkIHRvIHNpemUgYXJyYXlzLgorICAgICAgICB9OworCiAgICAgICAg
IEFwcGxpY2F0aW9uQ2FjaGVIb3N0KERvY3VtZW50TG9hZGVyKik7CiAgICAgICAgIH5BcHBsaWNh
dGlvbkNhY2hlSG9zdCgpOwogCkBAIC03NiwyMSArOTgsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAgICAgICAgIGJvb2wgY2FuQ2FjaGVJblBhZ2VDYWNoZSgpIGNvbnN0OwogCi0gICAgICAg
IERPTUFwcGxpY2F0aW9uQ2FjaGU6OlN0YXR1cyBzdGF0dXMoKSBjb25zdDsgIAorICAgICAgICBT
dGF0dXMgc3RhdHVzKCkgY29uc3Q7ICAKICAgICAgICAgYm9vbCB1cGRhdGUoKTsKICAgICAgICAg
Ym9vbCBzd2FwQ2FjaGUoKTsKIAotICAgICAgICB2b2lkIHNldERPTUFwcGxpY2F0aW9uQ2FjaGUo
RE9NQXBwbGljYXRpb25DYWNoZSogZG9tQXBwbGljYXRpb25DYWNoZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgQVNTRVJUKCFtX0RPTUFwcGxpY2F0aW9uQ2FjaGUgfHwgIWRvbUFwcGxpY2F0aW9u
Q2FjaGUpOwotICAgICAgICAgICAgbV9ET01BcHBsaWNhdGlvbkNhY2hlID0gZG9tQXBwbGljYXRp
b25DYWNoZTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgbm90aWZ5RXZlbnRMaXN0ZW5lcihE
T01BcHBsaWNhdGlvbkNhY2hlOjpFdmVudFR5cGUgZXZlbnRUeXBlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAobV9ET01BcHBsaWNhdGlvbkNhY2hlKQotICAgICAgICAgICAgICAgIG1fRE9N
QXBwbGljYXRpb25DYWNoZS0+Y2FsbEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlKTsKLSAgICAgICAg
fQorICAgICAgICB2b2lkIHNldERPTUFwcGxpY2F0aW9uQ2FjaGUoRE9NQXBwbGljYXRpb25DYWNo
ZSogZG9tQXBwbGljYXRpb25DYWNoZSk7CisgICAgICAgIHZvaWQgbm90aWZ5RXZlbnRMaXN0ZW5l
cihFdmVudElEIGlkKTsKICAgICAgICAgCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNs
YXNzIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDsKQEAgLTEwOCw3ICsxMjEsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIGJvb2wgaXNBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCgpOwogICAg
ICAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIoKSB7IHJldHVybiBtX2RvY3VtZW50
TG9hZGVyOyB9CiAKLSAgICAgICAgRE9NQXBwbGljYXRpb25DYWNoZSogbV9ET01BcHBsaWNhdGlv
bkNhY2hlOworICAgICAgICBET01BcHBsaWNhdGlvbkNhY2hlKiBtX2RvbUFwcGxpY2F0aW9uQ2Fj
aGU7CiAgICAgICAgIERvY3VtZW50TG9hZGVyKiBtX2RvY3VtZW50TG9hZGVyOwogCiAgICAgICAg
IC8vIFRoZSBhcHBsaWNhdGlvbiBjYWNoZSB0aGF0IHRoZSBkb2N1bWVudCBsb2FkZXIgaXMgYXNz
b2NpYXRlZCB3aXRoIChpZiBhbnkpLgpJbmRleDogV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBw
bGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2Fw
cGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcAkocmV2aXNpb24gNDY3MjgpCisrKyBX
ZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTkzOCwxNiArOTM4LDEyIEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2U6OmVtcHR5KCkKICAgICAgICAgaXQtPnNlY29uZC0+Y2xlYXJTdG9yYWdlSUQoKTsKIH0gICAg
CiAKLWJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnRyYW5zZmVyQXBwbGljYXRpb25DYWNo
ZShjb25zdCBTdHJpbmcmIGNhY2hlRGlyZWN0b3J5LCBBcHBsaWNhdGlvbkNhY2hlSG9zdCogY2Fj
aGVIb3N0KQorYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVDb3B5T2ZDYWNoZShj
b25zdCBTdHJpbmcmIGNhY2hlRGlyZWN0b3J5LCBBcHBsaWNhdGlvbkNhY2hlSG9zdCogY2FjaGVI
b3N0KQogewogICAgIEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlID0gY2FjaGVIb3N0LT5hcHBsaWNh
dGlvbkNhY2hlKCk7CiAgICAgaWYgKCFjYWNoZSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
cmV0dXJuIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZUNvcHlPZkNhY2hlKGNhY2hlRGly
ZWN0b3J5LCBjYWNoZSk7Ci19CiAKLWJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3Jl
Q29weU9mQ2FjaGUoY29uc3QgU3RyaW5nJiBjYWNoZURpcmVjdG9yeSwgQXBwbGljYXRpb25DYWNo
ZSogY2FjaGUpCi17CiAgICAgLy8gQ3JlYXRlIGEgbmV3IGNhY2hlLgogICAgIFJlZlB0cjxBcHBs
aWNhdGlvbkNhY2hlPiBjYWNoZUNvcHkgPSBBcHBsaWNhdGlvbkNhY2hlOjpjcmVhdGUoKTsKIApJ
bmRleDogV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZS5oCShyZXZpc2lvbiA0NjcyOCkKKysrIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDggKzcwLDcgQEAgcHVi
bGljOgogICAgIAogICAgIHZvaWQgZW1wdHkoKTsKICAgICAKLSAgICBzdGF0aWMgYm9vbCB0cmFu
c2ZlckFwcGxpY2F0aW9uQ2FjaGUoY29uc3QgU3RyaW5nJiBjYWNoZURpcmVjdG9yeSwgQXBwbGlj
YXRpb25DYWNoZUhvc3QqKTsKLSAgICBzdGF0aWMgYm9vbCBzdG9yZUNvcHlPZkNhY2hlKGNvbnN0
IFN0cmluZyYgY2FjaGVEaXJlY3RvcnksIEFwcGxpY2F0aW9uQ2FjaGUqKTsKKyAgICBzdGF0aWMg
Ym9vbCBzdG9yZUNvcHlPZkNhY2hlKGNvbnN0IFN0cmluZyYgY2FjaGVEaXJlY3RvcnksIEFwcGxp
Y2F0aW9uQ2FjaGVIb3N0Kik7CiAKICAgICBib29sIG1hbmlmZXN0VVJMcyhWZWN0b3I8S1VSTD4q
IHVybHMpOwogICAgIGJvb2wgY2FjaGVHcm91cFNpemUoY29uc3QgU3RyaW5nJiBtYW5pZmVzdFVS
TCwgaW50NjRfdCogc2l6ZSk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9ET01BcHBs
aWNhdGlvbkNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9E
T01BcHBsaWNhdGlvbkNhY2hlLmNwcAkocmV2aXNpb24gNDY3MjgpCisrKyBXZWJDb3JlL2xvYWRl
ci9hcHBjYWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUs
NyArNjUsNyBAQCB1bnNpZ25lZCBzaG9ydCBET01BcHBsaWNhdGlvbkNhY2hlOjpzdGF0CiB7CiAg
ICAgQXBwbGljYXRpb25DYWNoZUhvc3QqIGNhY2hlSG9zdCA9IGFwcGxpY2F0aW9uQ2FjaGVIb3N0
KCk7CiAgICAgaWYgKCFjYWNoZUhvc3QpCi0gICAgICAgIHJldHVybiBVTkNBQ0hFRDsKKyAgICAg
ICAgcmV0dXJuIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpVTkNBQ0hFRDsKICAgICByZXR1cm4gY2Fj
aGVIb3N0LT5zdGF0dXMoKTsKIH0KIApAQCAtOTUsMTMgKzk1LDEzIEBAIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIERPTUFwcGxpY2F0aW9uQ2EKICAgICByZXR1cm4gbV9mcmFtZS0+ZG9jdW1lbnQo
KTsKIH0KIAotdm9pZCBET01BcHBsaWNhdGlvbkNhY2hlOjphZGRFdmVudExpc3RlbmVyKGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnROYW1lLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50
TGlzdGVuZXIsIGJvb2wpCit2b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6OmFkZEV2ZW50TGlzdGVu
ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5l
cj4gZXZlbnRMaXN0ZW5lciwgYm9vbCkKIHsKLSAgICBFdmVudExpc3RlbmVyc01hcDo6aXRlcmF0
b3IgaXRlciA9IG1fZXZlbnRMaXN0ZW5lcnMuZmluZChldmVudE5hbWUpOworICAgIEV2ZW50TGlz
dGVuZXJzTWFwOjppdGVyYXRvciBpdGVyID0gbV9ldmVudExpc3RlbmVycy5maW5kKGV2ZW50VHlw
ZSk7CiAgICAgaWYgKGl0ZXIgPT0gbV9ldmVudExpc3RlbmVycy5lbmQoKSkgewogICAgICAgICBM
aXN0ZW5lclZlY3RvciBsaXN0ZW5lcnM7CiAgICAgICAgIGxpc3RlbmVycy5hcHBlbmQoZXZlbnRM
aXN0ZW5lcik7Ci0gICAgICAgIG1fZXZlbnRMaXN0ZW5lcnMuYWRkKGV2ZW50TmFtZSwgbGlzdGVu
ZXJzKTsKKyAgICAgICAgbV9ldmVudExpc3RlbmVycy5hZGQoZXZlbnRUeXBlLCBsaXN0ZW5lcnMp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIExpc3RlbmVyVmVjdG9yJiBsaXN0ZW5lcnMgPSBpdGVy
LT5zZWNvbmQ7CiAgICAgICAgIGZvciAoTGlzdGVuZXJWZWN0b3I6Oml0ZXJhdG9yIGxpc3RlbmVy
SXRlciA9IGxpc3RlbmVycy5iZWdpbigpOyBsaXN0ZW5lckl0ZXIgIT0gbGlzdGVuZXJzLmVuZCgp
OyArK2xpc3RlbmVySXRlcikgewpAQCAtMTEwLDEzICsxMTAsMTMgQEAgdm9pZCBET01BcHBsaWNh
dGlvbkNhY2hlOjphZGRFdmVudExpc3RlbgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBs
aXN0ZW5lcnMuYXBwZW5kKGV2ZW50TGlzdGVuZXIpOwotICAgICAgICBtX2V2ZW50TGlzdGVuZXJz
LmFkZChldmVudE5hbWUsIGxpc3RlbmVycyk7CisgICAgICAgIG1fZXZlbnRMaXN0ZW5lcnMuYWRk
KGV2ZW50VHlwZSwgbGlzdGVuZXJzKTsKICAgICB9ICAgIAogfQogCi12b2lkIERPTUFwcGxpY2F0
aW9uQ2FjaGU6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudE5h
bWUsIEV2ZW50TGlzdGVuZXIqIGV2ZW50TGlzdGVuZXIsIGJvb2wpCit2b2lkIERPTUFwcGxpY2F0
aW9uQ2FjaGU6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5
cGUsIEV2ZW50TGlzdGVuZXIqIGV2ZW50TGlzdGVuZXIsIGJvb2wpCiB7Ci0gICAgRXZlbnRMaXN0
ZW5lcnNNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2V2ZW50TGlzdGVuZXJzLmZpbmQoZXZlbnROYW1l
KTsKKyAgICBFdmVudExpc3RlbmVyc01hcDo6aXRlcmF0b3IgaXRlciA9IG1fZXZlbnRMaXN0ZW5l
cnMuZmluZChldmVudFR5cGUpOwogICAgIGlmIChpdGVyID09IG1fZXZlbnRMaXN0ZW5lcnMuZW5k
KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKQEAgLTE0NiwxMSArMTQ2LDExIEBAIGJvb2wgRE9N
QXBwbGljYXRpb25DYWNoZTo6ZGlzcGF0Y2hFdmVudCgKICAgICByZXR1cm4gIWV2ZW50LT5kZWZh
dWx0UHJldmVudGVkKCk7CiB9CiAKLXZvaWQgRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbExpc3Rl
bmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnROYW1lLCBFdmVudExpc3RlbmVyKiBsaXN0ZW5l
cikKK3ZvaWQgRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbExpc3RlbmVyKGNvbnN0IEF0b21pY1N0
cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiBsaXN0ZW5lcikKIHsKICAgICBBU1NFUlQo
bV9mcmFtZSk7CiAgICAgCi0gICAgUmVmUHRyPEV2ZW50PiBldmVudCA9IEV2ZW50OjpjcmVhdGUo
ZXZlbnROYW1lLCBmYWxzZSwgZmFsc2UpOworICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSBFdmVu
dDo6Y3JlYXRlKGV2ZW50VHlwZSwgZmFsc2UsIGZhbHNlKTsKICAgICBpZiAobGlzdGVuZXIpIHsK
ICAgICAgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKICAgICAgICAgZXZlbnQtPnNldEN1cnJl
bnRUYXJnZXQodGhpcyk7CkBAIC0xNjIsNTMgKzE2Miw1MSBAQCB2b2lkIERPTUFwcGxpY2F0aW9u
Q2FjaGU6OmNhbGxMaXN0ZW5lcihjCiAgICAgQVNTRVJUKCFlYyk7ICAgIAogfQogCi0vLyBzdGF0
aWMKLWNvbnN0IEF0b21pY1N0cmluZyYgRE9NQXBwbGljYXRpb25DYWNoZTo6dG9FdmVudE5hbWUo
RXZlbnRUeXBlIGV2ZW50VHlwZSkKK2NvbnN0IEF0b21pY1N0cmluZyYgRE9NQXBwbGljYXRpb25D
YWNoZTo6dG9FdmVudFR5cGUoQXBwbGljYXRpb25DYWNoZUhvc3Q6OkV2ZW50SUQgaWQpCiB7Ci0g
ICAgc3dpdGNoIChldmVudFR5cGUpIHsKLSAgICBjYXNlIENIRUNLSU5HX0VWRU5UOgorICAgIHN3
aXRjaCAoaWQpIHsKKyAgICBjYXNlIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpDSEVDS0lOR19FVkVO
VDoKICAgICAgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5jaGVja2luZ0V2ZW50OwotICAgIGNhc2Ug
RVJST1JfRVZFTlQ6CisgICAgY2FzZSBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6RVJST1JfRVZFTlQ6
CiAgICAgICAgIHJldHVybiBldmVudE5hbWVzKCkuZXJyb3JFdmVudDsKLSAgICBjYXNlIE5PVVBE
QVRFX0VWRU5UOgorICAgIGNhc2UgQXBwbGljYXRpb25DYWNoZUhvc3Q6Ok5PVVBEQVRFX0VWRU5U
OgogICAgICAgICByZXR1cm4gZXZlbnROYW1lcygpLm5vdXBkYXRlRXZlbnQ7Ci0gICAgY2FzZSBE
T1dOTE9BRElOR19FVkVOVDoKKyAgICBjYXNlIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpET1dOTE9B
RElOR19FVkVOVDoKICAgICAgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5kb3dubG9hZGluZ0V2ZW50
OwotICAgIGNhc2UgUFJPR1JFU1NfRVZFTlQ6CisgICAgY2FzZSBBcHBsaWNhdGlvbkNhY2hlSG9z
dDo6UFJPR1JFU1NfRVZFTlQ6CiAgICAgICAgIHJldHVybiBldmVudE5hbWVzKCkucHJvZ3Jlc3NF
dmVudDsKLSAgICBjYXNlIFVQREFURVJFQURZX0VWRU5UOgorICAgIGNhc2UgQXBwbGljYXRpb25D
YWNoZUhvc3Q6OlVQREFURVJFQURZX0VWRU5UOgogICAgICAgICByZXR1cm4gZXZlbnROYW1lcygp
LnVwZGF0ZXJlYWR5RXZlbnQ7Ci0gICAgY2FzZSBDQUNIRURfRVZFTlQ6CisgICAgY2FzZSBBcHBs
aWNhdGlvbkNhY2hlSG9zdDo6Q0FDSEVEX0VWRU5UOgogICAgICAgICByZXR1cm4gZXZlbnROYW1l
cygpLmNhY2hlZEV2ZW50OwotICAgIGNhc2UgT0JTT0xFVEVfRVZFTlQ6ICAgICAgICAgICAgCisg
ICAgY2FzZSBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6T0JTT0xFVEVfRVZFTlQ6ICAgICAgICAgICAg
CiAgICAgICAgIHJldHVybiBldmVudE5hbWVzKCkub2Jzb2xldGVFdmVudDsKICAgICB9CiAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50
OwogfQogCi0vLyBzdGF0aWMKLURPTUFwcGxpY2F0aW9uQ2FjaGU6OkV2ZW50VHlwZSBET01BcHBs
aWNhdGlvbkNhY2hlOjp0b0V2ZW50VHlwZShjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50TmFtZSkK
K0FwcGxpY2F0aW9uQ2FjaGVIb3N0OjpFdmVudElEIERPTUFwcGxpY2F0aW9uQ2FjaGU6OnRvRXZl
bnRJRChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkKIHsKLSAgICBpZiAoZXZlbnROYW1l
ID09IGV2ZW50TmFtZXMoKS5jaGVja2luZ0V2ZW50KQotICAgICAgICByZXR1cm4gQ0hFQ0tJTkdf
RVZFTlQ7Ci0gICAgaWYgKGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkuZXJyb3JFdmVudCkKLSAg
ICAgICAgcmV0dXJuIEVSUk9SX0VWRU5UOwotICAgIGlmIChldmVudE5hbWUgPT0gZXZlbnROYW1l
cygpLm5vdXBkYXRlRXZlbnQpCi0gICAgICAgIHJldHVybiBOT1VQREFURV9FVkVOVDsKLSAgICBp
ZiAoZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5kb3dubG9hZGluZ0V2ZW50KQotICAgICAgICBy
ZXR1cm4gRE9XTkxPQURJTkdfRVZFTlQ7Ci0gICAgaWYgKGV2ZW50TmFtZSA9PSBldmVudE5hbWVz
KCkucHJvZ3Jlc3NFdmVudCkKLSAgICAgICAgcmV0dXJuIFBST0dSRVNTX0VWRU5UOwotICAgIGlm
IChldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnVwZGF0ZXJlYWR5RXZlbnQpCi0gICAgICAgIHJl
dHVybiBVUERBVEVSRUFEWV9FVkVOVDsKLSAgICBpZiAoZXZlbnROYW1lID09IGV2ZW50TmFtZXMo
KS5jYWNoZWRFdmVudCkKLSAgICAgICAgcmV0dXJuIENBQ0hFRF9FVkVOVDsKLSAgICBpZiAoZXZl
bnROYW1lID09IGV2ZW50TmFtZXMoKS5vYnNvbGV0ZUV2ZW50KQotICAgICAgICByZXR1cm4gT0JT
T0xFVEVfRVZFTlQ7CisgICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuY2hlY2tpbmdF
dmVudCkKKyAgICAgICAgcmV0dXJuIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpDSEVDS0lOR19FVkVO
VDsKKyAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50KQorICAgICAg
ICByZXR1cm4gQXBwbGljYXRpb25DYWNoZUhvc3Q6OkVSUk9SX0VWRU5UOworICAgIGlmIChldmVu
dFR5cGUgPT0gZXZlbnROYW1lcygpLm5vdXBkYXRlRXZlbnQpCisgICAgICAgIHJldHVybiBBcHBs
aWNhdGlvbkNhY2hlSG9zdDo6Tk9VUERBVEVfRVZFTlQ7CisgICAgaWYgKGV2ZW50VHlwZSA9PSBl
dmVudE5hbWVzKCkuZG93bmxvYWRpbmdFdmVudCkKKyAgICAgICAgcmV0dXJuIEFwcGxpY2F0aW9u
Q2FjaGVIb3N0OjpET1dOTE9BRElOR19FVkVOVDsKKyAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50
TmFtZXMoKS5wcm9ncmVzc0V2ZW50KQorICAgICAgICByZXR1cm4gQXBwbGljYXRpb25DYWNoZUhv
c3Q6OlBST0dSRVNTX0VWRU5UOworICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnVw
ZGF0ZXJlYWR5RXZlbnQpCisgICAgICAgIHJldHVybiBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6VVBE
QVRFUkVBRFlfRVZFTlQ7CisgICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuY2FjaGVk
RXZlbnQpCisgICAgICAgIHJldHVybiBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6Q0FDSEVEX0VWRU5U
OworICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm9ic29sZXRlRXZlbnQpCisgICAg
ICAgIHJldHVybiBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6T0JTT0xFVEVfRVZFTlQ7CiAgIAogICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBFUlJPUl9FVkVOVDsKKyAgICByZXR1
cm4gQXBwbGljYXRpb25DYWNoZUhvc3Q6OkVSUk9SX0VWRU5UOwogfQogCiAKSW5kZXg6IFdlYkNv
cmUvbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmgJKHJldmlzaW9uIDQ2
NzI4KQorKysgV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvRE9NQXBwbGljYXRpb25DYWNoZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoT0ZGTElORV9XRUJf
QVBQTElDQVRJT05TKQogCisjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUhvc3QuaCIKICNpbmNs
dWRlICJBdG9taWNTdHJpbmdIYXNoLmgiCiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKICNpbmNs
dWRlICJFdmVudExpc3RlbmVyLmgiCkBAIC0zOCwxMiArMzksMTEgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBBcHBsaWNhdGlvbkNhY2hlSG9zdDsKIGNsYXNzIEF0b21pY1N0cmlu
Z0ltcGw7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEtVUkw7CiBjbGFzcyBTdHJpbmc7Ci0gICAgCisK
IGNsYXNzIERPTUFwcGxpY2F0aW9uQ2FjaGUgOiBwdWJsaWMgUmVmQ291bnRlZDxET01BcHBsaWNh
dGlvbkNhY2hlPiwgcHVibGljIEV2ZW50VGFyZ2V0IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxET01BcHBsaWNhdGlvbkNhY2hlPiBjcmVhdGUoRnJhbWUqIGZyYW1lKSB7IHJldHVy
biBhZG9wdFJlZihuZXcgRE9NQXBwbGljYXRpb25DYWNoZShmcmFtZSkpOyB9CkBAIC01MSw0MSAr
NTEsMjEgQEAgcHVibGljOgogCiAgICAgdm9pZCBkaXNjb25uZWN0RnJhbWUoKTsKIAotICAgIGVu
dW0gU3RhdHVzIHsKLSAgICAgICAgVU5DQUNIRUQgPSAwLAotICAgICAgICBJRExFID0gMSwKLSAg
ICAgICAgQ0hFQ0tJTkcgPSAyLAotICAgICAgICBET1dOTE9BRElORyA9IDMsCi0gICAgICAgIFVQ
REFURVJFQURZID0gNCwKLSAgICAgICAgT0JTT0xFVEUgPSA1Ci0gICAgfTsKLQotICAgIGVudW0g
RXZlbnRUeXBlIHsKLSAgICAgICAgQ0hFQ0tJTkdfRVZFTlQgPSAwLAotICAgICAgICBFUlJPUl9F
VkVOVCwKLSAgICAgICAgTk9VUERBVEVfRVZFTlQsCi0gICAgICAgIERPV05MT0FESU5HX0VWRU5U
LAotICAgICAgICBQUk9HUkVTU19FVkVOVCwKLSAgICAgICAgVVBEQVRFUkVBRFlfRVZFTlQsCi0g
ICAgICAgIENBQ0hFRF9FVkVOVCwKLSAgICAgICAgT0JTT0xFVEVfRVZFTlQKLSAgICB9OwotCiAg
ICAgdW5zaWduZWQgc2hvcnQgc3RhdHVzKCkgY29uc3Q7CiAgICAgdm9pZCB1cGRhdGUoRXhjZXB0
aW9uQ29kZSYpOwogICAgIHZvaWQgc3dhcENhY2hlKEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgIC8v
IEV2ZW50IGxpc3RlbmVyIGF0dHJpYnV0ZXMgYnkgRXZlbnRUeXBlCisgICAgLy8gRXZlbnQgbGlz
dGVuZXIgYXR0cmlidXRlcyBieSBFdmVudElECiAKLSAgICB2b2lkIHNldEF0dHJpYnV0ZUV2ZW50
TGlzdGVuZXIoRXZlbnRUeXBlIHR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRM
aXN0ZW5lcikgeyBtX2F0dHJpYnV0ZUV2ZW50TGlzdGVuZXJzW3R5cGVdID0gZXZlbnRMaXN0ZW5l
cjsgfQotICAgIEV2ZW50TGlzdGVuZXIqIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoRXZlbnRU
eXBlIHR5cGUpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlRXZlbnRMaXN0ZW5lcnNbdHlwZV0u
Z2V0KCk7IH0KLSAgICB2b2lkIGNsZWFyQXR0cmlidXRlRXZlbnRMaXN0ZW5lcihFdmVudFR5cGUg
dHlwZSkgeyBtX2F0dHJpYnV0ZUV2ZW50TGlzdGVuZXJzW3R5cGVdID0gMDsgfQotICAgIHZvaWQg
Y2FsbEV2ZW50TGlzdGVuZXIoRXZlbnRUeXBlIHR5cGUpIHsgY2FsbExpc3RlbmVyKHRvRXZlbnRO
YW1lKHR5cGUpLCBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKHR5cGUpKTsgfQorICAgIHZvaWQg
c2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihBcHBsaWNhdGlvbkNhY2hlSG9zdDo6RXZlbnRJRCBp
ZCwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fYXR0cmlidXRl
RXZlbnRMaXN0ZW5lcnNbaWRdID0gZXZlbnRMaXN0ZW5lcjsgfQorICAgIEV2ZW50TGlzdGVuZXIq
IGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoQXBwbGljYXRpb25DYWNoZUhvc3Q6OkV2ZW50SUQg
aWQpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlRXZlbnRMaXN0ZW5lcnNbaWRdLmdldCgpOyB9
CisgICAgdm9pZCBjbGVhckF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoQXBwbGljYXRpb25DYWNoZUhv
c3Q6OkV2ZW50SUQgaWQpIHsgbV9hdHRyaWJ1dGVFdmVudExpc3RlbmVyc1tpZF0gPSAwOyB9Cisg
ICAgdm9pZCBjYWxsRXZlbnRMaXN0ZW5lcihBcHBsaWNhdGlvbkNhY2hlSG9zdDo6RXZlbnRJRCBp
ZCkgeyBjYWxsTGlzdGVuZXIodG9FdmVudFR5cGUoaWQpLCBnZXRBdHRyaWJ1dGVFdmVudExpc3Rl
bmVyKGlkKSk7IH0KIAogICAgIC8vIEV2ZW50VGFyZ2V0IGltcGwKIAotICAgIHZpcnR1YWwgdm9p
ZCBhZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnROYW1lLCBQYXNzUmVm
UHRyPEV2ZW50TGlzdGVuZXI+LCBib29sIHVzZUNhcHR1cmUpOwotICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnROYW1lLCBFdmVudExp
c3RlbmVyKiwgYm9vbCB1c2VDYXB0dXJlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkRXZlbnRMaXN0
ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3Rl
bmVyPiwgYm9vbCB1c2VDYXB0dXJlKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRXZlbnRMaXN0
ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciosIGJvb2wg
dXNlQ2FwdHVyZSk7CiAgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxF
dmVudD4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gPiBMaXN0ZW5lclZlY3RvcjsKICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3Ry
aW5nLCBMaXN0ZW5lclZlY3Rvcj4gRXZlbnRMaXN0ZW5lcnNNYXA7CkBAIC05Niw0MCArNzYsNDAg
QEAgcHVibGljOgogCiAgICAgLy8gRXhwbGljaXRseSBuYW1lZCBhdHRyaWJ1dGUgZXZlbnQgbGlz
dGVuZXIgaGVscGVycwogCi0gICAgdm9pZCBzZXRPbmNoZWNraW5nKFBhc3NSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gbGlzdGVuZXIpIHsgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihDSEVDS0lOR19F
VkVOVCwgbGlzdGVuZXIpOyB9Ci0gICAgRXZlbnRMaXN0ZW5lciogb25jaGVja2luZygpIGNvbnN0
IHsgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoQ0hFQ0tJTkdfRVZFTlQpOyB9Cisg
ICAgdm9pZCBzZXRPbmNoZWNraW5nKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIp
IHsgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihBcHBsaWNhdGlvbkNhY2hlSG9zdDo6Q0hFQ0tJ
TkdfRVZFTlQsIGxpc3RlbmVyKTsgfQorICAgIEV2ZW50TGlzdGVuZXIqIG9uY2hlY2tpbmcoKSBj
b25zdCB7IHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKEFwcGxpY2F0aW9uQ2FjaGVI
b3N0OjpDSEVDS0lOR19FVkVOVCk7IH0KIAotICAgIHZvaWQgc2V0T25lcnJvcihQYXNzUmVmUHRy
PEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyKSB7IHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoRVJS
T1JfRVZFTlQsIGxpc3RlbmVyKTt9Ci0gICAgRXZlbnRMaXN0ZW5lciogb25lcnJvcigpIGNvbnN0
IHsgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoRVJST1JfRVZFTlQpOyB9CisgICAg
dm9pZCBzZXRPbmVycm9yKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIpIHsgc2V0
QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihBcHBsaWNhdGlvbkNhY2hlSG9zdDo6RVJST1JfRVZFTlQs
IGxpc3RlbmVyKTt9CisgICAgRXZlbnRMaXN0ZW5lciogb25lcnJvcigpIGNvbnN0IHsgcmV0dXJu
IGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoQXBwbGljYXRpb25DYWNoZUhvc3Q6OkVSUk9SX0VW
RU5UKTsgfQogCi0gICAgdm9pZCBzZXRPbm5vdXBkYXRlKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5l
cj4gbGlzdGVuZXIpIHsgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihOT1VQREFURV9FVkVOVCwg
bGlzdGVuZXIpOyB9Ci0gICAgRXZlbnRMaXN0ZW5lciogb25ub3VwZGF0ZSgpIGNvbnN0IHsgcmV0
dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoTk9VUERBVEVfRVZFTlQpOyB9CisgICAgdm9p
ZCBzZXRPbm5vdXBkYXRlKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIpIHsgc2V0
QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihBcHBsaWNhdGlvbkNhY2hlSG9zdDo6Tk9VUERBVEVfRVZF
TlQsIGxpc3RlbmVyKTsgfQorICAgIEV2ZW50TGlzdGVuZXIqIG9ubm91cGRhdGUoKSBjb25zdCB7
IHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpO
T1VQREFURV9FVkVOVCk7IH0KIAotICAgIHZvaWQgc2V0T25kb3dubG9hZGluZyhQYXNzUmVmUHRy
PEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyKSB7IHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoRE9X
TkxPQURJTkdfRVZFTlQsIGxpc3RlbmVyKTsgfQotICAgIEV2ZW50TGlzdGVuZXIqIG9uZG93bmxv
YWRpbmcoKSBjb25zdCB7IHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKERPV05MT0FE
SU5HX0VWRU5UKTsgfQorICAgIHZvaWQgc2V0T25kb3dubG9hZGluZyhQYXNzUmVmUHRyPEV2ZW50
TGlzdGVuZXI+IGxpc3RlbmVyKSB7IHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoQXBwbGljYXRp
b25DYWNoZUhvc3Q6OkRPV05MT0FESU5HX0VWRU5ULCBsaXN0ZW5lcik7IH0KKyAgICBFdmVudExp
c3RlbmVyKiBvbmRvd25sb2FkaW5nKCkgY29uc3QgeyByZXR1cm4gZ2V0QXR0cmlidXRlRXZlbnRM
aXN0ZW5lcihBcHBsaWNhdGlvbkNhY2hlSG9zdDo6RE9XTkxPQURJTkdfRVZFTlQpOyB9CiAKLSAg
ICB2b2lkIHNldE9ucHJvZ3Jlc3MoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lcikg
eyBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKFBST0dSRVNTX0VWRU5ULCBsaXN0ZW5lcik7IH0K
LSAgICBFdmVudExpc3RlbmVyKiBvbnByb2dyZXNzKCkgY29uc3QgeyByZXR1cm4gZ2V0QXR0cmli
dXRlRXZlbnRMaXN0ZW5lcihQUk9HUkVTU19FVkVOVCk7IH0KKyAgICB2b2lkIHNldE9ucHJvZ3Jl
c3MoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lcikgeyBzZXRBdHRyaWJ1dGVFdmVu
dExpc3RlbmVyKEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpQUk9HUkVTU19FVkVOVCwgbGlzdGVuZXIp
OyB9CisgICAgRXZlbnRMaXN0ZW5lciogb25wcm9ncmVzcygpIGNvbnN0IHsgcmV0dXJuIGdldEF0
dHJpYnV0ZUV2ZW50TGlzdGVuZXIoQXBwbGljYXRpb25DYWNoZUhvc3Q6OlBST0dSRVNTX0VWRU5U
KTsgfQogCi0gICAgdm9pZCBzZXRPbnVwZGF0ZXJlYWR5KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5l
cj4gbGlzdGVuZXIpIHsgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihVUERBVEVSRUFEWV9FVkVO
VCwgbGlzdGVuZXIpOyB9Ci0gICAgRXZlbnRMaXN0ZW5lciogb251cGRhdGVyZWFkeSgpIGNvbnN0
IHsgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoVVBEQVRFUkVBRFlfRVZFTlQpOyB9
CisgICAgdm9pZCBzZXRPbnVwZGF0ZXJlYWR5KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlz
dGVuZXIpIHsgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihBcHBsaWNhdGlvbkNhY2hlSG9zdDo6
VVBEQVRFUkVBRFlfRVZFTlQsIGxpc3RlbmVyKTsgfQorICAgIEV2ZW50TGlzdGVuZXIqIG9udXBk
YXRlcmVhZHkoKSBjb25zdCB7IHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKEFwcGxp
Y2F0aW9uQ2FjaGVIb3N0OjpVUERBVEVSRUFEWV9FVkVOVCk7IH0KIAotICAgIHZvaWQgc2V0T25j
YWNoZWQoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lcikgeyBzZXRBdHRyaWJ1dGVF
dmVudExpc3RlbmVyKENBQ0hFRF9FVkVOVCwgbGlzdGVuZXIpOyB9Ci0gICAgRXZlbnRMaXN0ZW5l
ciogb25jYWNoZWQoKSBjb25zdCB7IHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKENB
Q0hFRF9FVkVOVCk7IH0KKyAgICB2b2lkIHNldE9uY2FjaGVkKFBhc3NSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4gbGlzdGVuZXIpIHsgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihBcHBsaWNhdGlvbkNh
Y2hlSG9zdDo6Q0FDSEVEX0VWRU5ULCBsaXN0ZW5lcik7IH0KKyAgICBFdmVudExpc3RlbmVyKiBv
bmNhY2hlZCgpIGNvbnN0IHsgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoQXBwbGlj
YXRpb25DYWNoZUhvc3Q6OkNBQ0hFRF9FVkVOVCk7IH0KIAotICAgIHZvaWQgc2V0T25vYnNvbGV0
ZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyKSB7IHNldEF0dHJpYnV0ZUV2ZW50
TGlzdGVuZXIoT0JTT0xFVEVfRVZFTlQsIGxpc3RlbmVyKTsgfQotICAgIEV2ZW50TGlzdGVuZXIq
IG9ub2Jzb2xldGUoKSBjb25zdCB7IHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKE9C
U09MRVRFX0VWRU5UKTsgfQorICAgIHZvaWQgc2V0T25vYnNvbGV0ZShQYXNzUmVmUHRyPEV2ZW50
TGlzdGVuZXI+IGxpc3RlbmVyKSB7IHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoQXBwbGljYXRp
b25DYWNoZUhvc3Q6Ok9CU09MRVRFX0VWRU5ULCBsaXN0ZW5lcik7IH0KKyAgICBFdmVudExpc3Rl
bmVyKiBvbm9ic29sZXRlKCkgY29uc3QgeyByZXR1cm4gZ2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5l
cihBcHBsaWNhdGlvbkNhY2hlSG9zdDo6T0JTT0xFVEVfRVZFTlQpOyB9CiAKICAgICB2aXJ0dWFs
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsK
ICAgICBET01BcHBsaWNhdGlvbkNhY2hlKiB0b0RPTUFwcGxpY2F0aW9uQ2FjaGUoKSB7IHJldHVy
biB0aGlzOyB9CiAKLSAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiB0b0V2ZW50TmFtZShF
dmVudFR5cGUgZXZlbnRUeXBlKTsKLSAgICBzdGF0aWMgRXZlbnRUeXBlIHRvRXZlbnRUeXBlKGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnROYW1lKTsKKyAgICBzdGF0aWMgY29uc3QgQXRvbWljU3Ry
aW5nJiB0b0V2ZW50VHlwZShBcHBsaWNhdGlvbkNhY2hlSG9zdDo6RXZlbnRJRCBpZCk7CisgICAg
c3RhdGljIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpFdmVudElEIHRvRXZlbnRJRChjb25zdCBBdG9t
aWNTdHJpbmcmIGV2ZW50VHlwZSk7CiAKIHByaXZhdGU6CiAgICAgRE9NQXBwbGljYXRpb25DYWNo
ZShGcmFtZSopOwogCi0gICAgdm9pZCBjYWxsTGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBl
dmVudE5hbWUsIEV2ZW50TGlzdGVuZXIqKTsKKyAgICB2b2lkIGNhbGxMaXN0ZW5lcihjb25zdCBB
dG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciopOwogICAgIAogICAgIHZpcnR1
YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGVy
ZWZFdmVudFRhcmdldCgpIHsgZGVyZWYoKTsgfQpAQCAtMTM3LDcgKzExNyw3IEBAIHByaXZhdGU6
CiAgICAgQXBwbGljYXRpb25DYWNoZUhvc3QqIGFwcGxpY2F0aW9uQ2FjaGVIb3N0KCkgY29uc3Q7
CiAgICAgYm9vbCBzd2FwQ2FjaGUoKTsKICAgICAKLSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4g
bV9hdHRyaWJ1dGVFdmVudExpc3RlbmVyc1tPQlNPTEVURV9FVkVOVCArIDFdOworICAgIFJlZlB0
cjxFdmVudExpc3RlbmVyPiBtX2F0dHJpYnV0ZUV2ZW50TGlzdGVuZXJzW0FwcGxpY2F0aW9uQ2Fj
aGVIb3N0OjpPQlNPTEVURV9FVkVOVCArIDFdOwogCiAgICAgRXZlbnRMaXN0ZW5lcnNNYXAgbV9l
dmVudExpc3RlbmVyczsKIApJbmRleDogV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ2NzM4KQorKysgV2ViS2l0L21hYy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAwOS0wOC0wMyAgTWlj
aGFlbCBOb3JkbWFuICA8bWljaGFlbG5AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9Mjc4MjEKKworICAgICAgICBNb2RzIHRvIGtlZXAgdXAgd2l0aCBBcHBsaWNh
dGlvbkNhY2hlSG9zdCByZWZhY3RvcmluZy4KKworICAgICAgICAqIFdlYlZpZXcvV2ViRGF0YVNv
dXJjZS5tbToKKyAgICAgICAgKC1bV2ViRGF0YVNvdXJjZSBfdHJhbnNmZXJBcHBsaWNhdGlvbkNh
Y2hlOl0pOgorCiAyMDA5LTA3LTMwICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4KSW5kZXg6IFdlYktpdC9tYWMvV2ViVmll
dy9XZWJEYXRhU291cmNlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJE
YXRhU291cmNlLm1tCShyZXZpc2lvbiA0NjcyOCkKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJE
YXRhU291cmNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMDEsNyArMjAxLDcgQEAgc3RhdGljIGlu
bGluZSB2b2lkIGFkZFR5cGVzRnJvbUNsYXNzKE5TTQogICAgICAgICAKICAgICBOU1N0cmluZyAq
Y2FjaGVEaXIgPSBbTlNTdHJpbmcgX3dlYmtpdF9sb2NhbENhY2hlRGlyZWN0b3J5V2l0aEJ1bmRs
ZUlkZW50aWZpZXI6ZGVzdGluYXRpb25CdW5kbGVJZGVudGlmaWVyXTsKICAgICAKLSAgICByZXR1
cm4gQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnRyYW5zZmVyQXBwbGljYXRpb25DYWNoZShjYWNo
ZURpciwgbG9hZGVyLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpKTsKKyAgICByZXR1cm4gQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlQ29weU9mQ2FjaGUoY2FjaGVEaXIsIGxvYWRlci0+YXBw
bGljYXRpb25DYWNoZUhvc3QoKSk7CiB9CiAKIEBlbmQK
</data>
<flag name="review"
          id="18188"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34095</attachid>
            <date>2009-08-04 16:05:41 -0700</date>
            <delta_ts>2009-08-04 16:47:36 -0700</delta_ts>
            <desc>Patch to address ap&apos;s comments (rev2)</desc>
            <filename>AppCacheHostAP.3.txt</filename>
            <type>text/plain</type>
            <size>48210</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0Njc3NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTA4IEBACisyMDA5LTA4LTAzICBNaWNoYWVsIE5vcmRtYW4gIDxtaWNoYWVsbkBn
b29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzgyMQorCisgICAg
ICAgIE5vIG5ldyBmZWF0dXJlcywgbm8gbmV3IHRlc3RzLiBFeGlzdGluZyBsYXlvdXQgdGVzdHMg
cGFzcy4KKworICAgICAgICAqIFdlYkNvcmUuYmFzZS5leHA6CisKKyAgICAgICAgRXhwb3J0IEFw
cGxpYXRpb25DYWNoZUdyb3VwOjpzdG9yZUNvcHlPZkNhY2hlCisKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKKyAgICAgICAgUmVzdG9yZSBET01BcHBsaWNh
dGlvbkNhY2hlLmggYW5kIEFwcGxpY2F0aW9uQ2FjaGVIb3N0LmggdG8gJ3Byb2plY3QnIGhlYWRl
cnMKKyAgICAgICAgaW5zdGVhZCBvZiAncHJpdmF0ZScgaGVhZGVycyBzaW5jZSB0aGV5J3JlIG5v
IGxvbmdlciBpbiBoZSBEb2N1bWVudExvYWRlci5oCisgICAgICAgIGluY2x1ZGUgZ3JhcGguCisK
KyAgICAgICAgKiBodG1sL0hUTUxIdG1sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MSHRtbEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KToKKworICAgICAgICBSZWluc3Rh
dGUgdGhlIHRlc3QgZm9yIG1hbmlmZXN0LmlzTnVsbCBpbnN0ZWFkIG9mIC5pc0VtdHB0eSgpLgor
ICAgICAgICBBZGRlZCBhIEZJWE1FIHRvIHJldmlzaXQgb25jZSB0aGUgc3BlYyBnZXRzIGNsYXJp
ZmllZC4KKyAgICAgICAgCisgICAgICAgICogbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyOjpEb2N1bWVudExvYWRlcik6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6bWFpblJlY2VpdmVkRXJyb3IpOgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OmRldGFjaEZyb21GcmFtZSk6CisgICAgICAgICogbG9h
ZGVyL0RvY3VtZW50TG9hZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6
YXBwbGljYXRpb25DYWNoZUhvc3QpOgorCisgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVIb3N0IGlz
IGhlbGQgaW4gYW4gT3duUHRyPD4gYnkgRG9jdW1lbnRMb2FkZXIuIFRoaXMgd2FzIGRvbmUKKyAg
ICAgICAgZm9yIGNvbXBpbGUgdGltZSBmcmllbmRsaW5lc3MsIGl0IHJlc3VsdHMgaW4gYSBzbWFs
bGVyIGluY2x1ZGUgZ3JhcGggZm9yIGZpbGVzCisgICAgICAgIGRlcGVuZGVudCBvbiBEb2N1bWVu
dExvYWRlci5oLgorCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAg
KiBsb2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKiBsb2FkZXIvUmVzb3Vy
Y2VMb2FkZXIuY3BwOgorCisgICAgICAgIENsZWFudXAgdXNzYWdlIG9mIEVOQUJMRSh4eHgpIGFy
b3VuZCBpbmNsdWRlcywgZ2VuZXJhbGx5IHJlbW92ZSB0aG9zZSBndWFyZHMuCisgICAgICAgIFRo
aXMgd2FzIGRvbmUgZm9yIHJlYWRhYmlsaXR5IGF0IHRoZSBpbmNsdWRlIHNpdGUuIFRoZSBpbmNs
dWRlZCBmaWxlcyBjb250YWluIGFwcHJvcHJpYXRlIGd1YXJkcywKKyAgICAgICAgc28gdGhleSdy
ZSBub3QgbmVlZGVkIGF0IHRoZSBpbmNsdWRlIHNpdGUuCisKKyAgICAgICAgKiBsb2FkZXIvYXBw
Y2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxp
Y2F0aW9uQ2FjaGVHcm91cDo6c2VsZWN0Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGlj
YXRpb25DYWNoZUdyb3VwOjpmaW5pc2hlZExvYWRpbmdNYWluUmVzb3VyY2UpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUdyb3VwOjpmYWlsZWRMb2FkaW5nTWFpblJlc291cmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6dXBkYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6ZGlkRmluaXNoTG9hZGluZ01h
bmlmZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6bWFuaWZl
c3ROb3RGb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmNo
ZWNrSWZMb2FkSXNDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hl
R3JvdXA6OnN0YXJ0TG9hZGluZ0VudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbGxDYWNoZUxp
c3RlbmVyVGFzazo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbGxDYWNoZUxpc3RlbmVy
VGFzazo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6Q2FsbENhY2hlTGlzdGVuZXJU
YXNrOjpDYWxsQ2FjaGVMaXN0ZW5lclRhc2spOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRp
b25DYWNoZUdyb3VwOjpwb3N0TGlzdGVuZXJUYXNrKToKKyAgICAgICAgKiBsb2FkZXIvYXBwY2Fj
aGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmg6CisKKyAgICAgICAgVXNlIEFwcGxpY2F0aW9uQ2Fj
aEhvc3QgZGVmaW5lZCBjb25zdGFudHMsIG5vIGxvbmdlciBkZXBlbmRzIG9uIERPTUFwcGxpY2F0
aW9uQ2FjaGUuCisKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhv
c3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUhvc3Q6OkFwcGxpY2F0
aW9uQ2FjaGVIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVIb3N0Ojpz
ZXRET01BcHBsaWNhdGlvbkNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2Fj
aGVIb3N0Ojpub3RpZnlFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0
aW9uQ2FjaGVIb3N0OjpzdGF0dXMpOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNh
dGlvbkNhY2hlSG9zdC5oOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUhvc3Q6
Oik6CisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZUNvcHlP
ZkNhY2hlKToKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2UuaDoKKworICAgICAgICBNZXJnZSByZWNlbnRseSBhZGRlZCB0cmFuc2ZlckFwcGxpY2F0aW9u
Q2FjaGUgYW5kIHByZS1leGlzdGluZyBzdG9yZUNvcHlPZkNhY2hlIG1ldGhvZHMuCisKKyAgICAg
ICAgKiBsb2FkZXIvYXBwY2FjaGUvRE9NQXBwbGljYXRpb25DYWNoZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hlOjpzdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6
RE9NQXBwbGljYXRpb25DYWNoZTo6YWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3Jl
OjpET01BcHBsaWNhdGlvbkNhY2hlOjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxMaXN0ZW5lcik6CisgICAgICAgIChXZWJD
b3JlOjpET01BcHBsaWNhdGlvbkNhY2hlOjp0b0V2ZW50VHlwZSk6CisgICAgICAgIChXZWJDb3Jl
OjpET01BcHBsaWNhdGlvbkNhY2hlOjp0b0V2ZW50SUQpOgorICAgICAgICAqIGxvYWRlci9hcHBj
YWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmg6CisgICAgICAgIChXZWJDb3JlOjpET01BcHBsaWNh
dGlvbkNhY2hlOjpzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NQXBwbGljYXRpb25DYWNoZTo6Y2xlYXJBdHRyaWJ1dGVFdmVudExpc3Rl
bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxFdmVudExp
c3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6OnNldE9uY2hl
Y2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RE9NQXBwbGljYXRpb25DYWNoZTo6b25jaGVja2lu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hlOjpzZXRPbmVycm9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6Om9uZXJyb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NQXBwbGljYXRpb25DYWNoZTo6c2V0T25ub3VwZGF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hlOjpvbm5vdXBkYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6OnNldE9uZG93bmxvYWRpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6RE9NQXBwbGljYXRpb25DYWNoZTo6b25kb3dubG9hZGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hlOjpzZXRPbnByb2dyZXNzKToKKyAgICAgICAgKFdl
YkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6Om9ucHJvZ3Jlc3MpOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NQXBwbGljYXRpb25DYWNoZTo6c2V0T251cGRhdGVyZWFkeSk6CisgICAgICAgIChXZWJD
b3JlOjpET01BcHBsaWNhdGlvbkNhY2hlOjpvbnVwZGF0ZXJlYWR5KToKKyAgICAgICAgKFdlYkNv
cmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6OnNldE9uY2FjaGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkRPTUFwcGxpY2F0aW9uQ2FjaGU6Om9uY2FjaGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFw
cGxpY2F0aW9uQ2FjaGU6OnNldE9ub2Jzb2xldGUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NQXBw
bGljYXRpb25DYWNoZTo6b25vYnNvbGV0ZSk6CisKKyAgICAgICAgVXNlIEFwcGxpY2F0aW9uQ2Fj
aEhvc3QgZGVmaW5lZCBjb25zdGFudHMgZm9yIFN0YXR1cyBhbmQgRXZlbnRJRHMuCisgICAgICAK
KwogMjAwOS0wOC0wNCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEYXZlIEh5YXR0LgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmJh
c2UuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkocmV2aXNpb24g
NDY3NzcpCisrKyBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0
Myw4ICs0NDMsOCBAQCBfX1pON1dlYkNvcmUyMmFwcGxpY2F0aW9uSXNBcHBsZU1haWxFdgogX19a
TjdXZWJDb3JlMjJjcmVhdGVGcmFnbWVudEZyb21UZXh0RVBOU181UmFuZ2VFUktOU182U3RyaW5n
RQogX19aTjdXZWJDb3JlMjJleHRlcm5hbFJlcHJlc2VudGF0aW9uRVBOU18xMlJlbmRlck9iamVj
dEUKIF9fWk43V2ViQ29yZTIzQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UxNHNldE1heGltdW1TaXpl
RXgKLV9fWk43V2ViQ29yZTIzQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UyNHRyYW5zZmVyQXBwbGlj
YXRpb25DYWNoZUVSS05TXzZTdHJpbmdFUE5TXzIwQXBwbGljYXRpb25DYWNoZUhvc3RFCiBfX1pO
N1dlYkNvcmUyM0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlMTdzZXRDYWNoZURpcmVjdG9yeUVSS05T
XzZTdHJpbmdFCitfX1pON1dlYkNvcmUyM0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlMTZzdG9yZUNv
cHlPZkNhY2hlRVJLTlNfNlN0cmluZ0VQTlNfMjBBcHBsaWNhdGlvbkNhY2hlSG9zdEUKIF9fWk43
V2ViQ29yZTIzQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UxOHZhY3V1bURhdGFiYXNlRmlsZUV2CiBf
X1pON1dlYkNvcmUyM0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlNWVtcHR5RXYKIF9fWk43V2ViQ29y
ZTIzUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmRDMUVQTlNfOERvY3VtZW50RU4zV1RGMTBQYXNzUmVm
UHRySU5TXzE2RG9jdW1lbnRGcmFnbWVudEVFRWJiYmJiTlNfMTBFZGl0QWN0aW9uRQpJbmRleDog
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDQ2Nzc3
KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTM1NCw3ICszNTQsNyBAQAogCQkxQThGNkJDMDBEQjU1Q0RDMDAxREI3OTQgLyog
QXBwbGljYXRpb25DYWNoZVJlc291cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBOEY2QkI1MERCNTVDREMwMDFEQjc5NCAvKiBBcHBsaWNhdGlv
bkNhY2hlUmVzb3VyY2UuY3BwICovOyB9OwogCQkxQThGNkJDMTBEQjU1Q0RDMDAxREI3OTQgLyog
QXBwbGljYXRpb25DYWNoZVJlc291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQThGNkJCNjBEQjU1Q0RDMDAxREI3OTQgLyogQXBwbGljYXRpb25D
YWNoZVJlc291cmNlLmggKi87IH07CiAJCTFBOEY2QkMyMERCNTVDREMwMDFEQjc5NCAvKiBET01B
cHBsaWNhdGlvbkNhY2hlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFBOEY2QkI3MERCNTVDREMwMDFEQjc5NCAvKiBET01BcHBsaWNhdGlvbkNhY2hl
LmNwcCAqLzsgfTsKLQkJMUE4RjZCQzMwREI1NUNEQzAwMURCNzk0IC8qIERPTUFwcGxpY2F0aW9u
Q2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFB
OEY2QkI4MERCNTVDREMwMDFEQjc5NCAvKiBET01BcHBsaWNhdGlvbkNhY2hlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMUE4RjZCQzMwREI1NUNE
QzAwMURCNzk0IC8qIERPTUFwcGxpY2F0aW9uQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOEY2QkI4MERCNTVDREMwMDFEQjc5NCAvKiBET01B
cHBsaWNhdGlvbkNhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsK
IAkJMUE4RjZCQzUwREI1NUNEQzAwMURCNzk0IC8qIE1hbmlmZXN0UGFyc2VyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOEY2QkJBMERCNTVDREMw
MDFEQjc5NCAvKiBNYW5pZmVzdFBhcnNlci5jcHAgKi87IH07CiAJCTFBOEY2QkM2MERCNTVDREMw
MDFEQjc5NCAvKiBNYW5pZmVzdFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUE4RjZCQkIwREI1NUNEQzAwMURCNzk0IC8qIE1hbmlmZXN0UGFy
c2VyLmggKi87IH07CiAJCTFBOTg5NTZCMEFBNzhGODAwMDVFRjVFRiAvKiBLVVJMQ0ZOZXQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5ODk1NkEw
QUE3OEY4MDAwNUVGNUVGIC8qIEtVUkxDRk5ldC5jcHAgKi87IH07CkBAIC01MjcsNyArNTI3LDcg
QEAKIAkJMUNGNkJFMTUwRTlCQjQ2NzAwMjVFMUNEIC8qIE9iakNOb2RlRmlsdGVyQ29uZGl0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQ0Y2QkUx
MzBFOUJCNDY3MDAyNUUxQ0QgLyogT2JqQ05vZGVGaWx0ZXJDb25kaXRpb24uaCAqLzsgfTsKIAkJ
MUNGQUUzMjMwQTZENkEzRjAwMzI1OTNEIC8qIGxpYm9iamMuZHlsaWIgaW4gRnJhbWV3b3JrcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQ0ZBRTMyMjBBNkQ2QTNGMDAzMjU5
M0QgLyogbGlib2JqYy5keWxpYiAqLzsgfTsKIAkJMjRGNTRFQUMxMDFGRTkxNDAwMEFFNzQxIC8q
IEFwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDI0RjU0RUFBMTAxRkU5MTQwMDBBRTc0MSAvKiBBcHBsaWNhdGlvbkNh
Y2hlSG9zdC5jcHAgKi87IH07Ci0JCTI0RjU0RUFEMTAxRkU5MTQwMDBBRTc0MSAvKiBBcHBsaWNh
dGlvbkNhY2hlSG9zdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMjRGNTRFQUIxMDFGRTkxNDAwMEFFNzQxIC8qIEFwcGxpY2F0aW9uQ2FjaGVIb3N0Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMjRGNTRF
QUQxMDFGRTkxNDAwMEFFNzQxIC8qIEFwcGxpY2F0aW9uQ2FjaGVIb3N0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNEY1NEVBQjEwMUZFOTE0MDAwQUU3
NDEgLyogQXBwbGljYXRpb25DYWNoZUhvc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
ICgpOyB9OyB9OwogCQkyOUE4MTIyNjBGQkI5QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyOUE4MTIwODBGQkI5QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dC5jcHAgKi87IH07CiAJCTI5QTgxMjI3MEZCQjlDMUQwMDUxMDI5MyAvKiBBY2Nlc3NpYmlsaXR5
VGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MjlBODEyMDkwRkJCOUMxRDAwNTEwMjkzIC8qIEFjY2Vzc2liaWxpdHlUYWJsZS5jcHAgKi87IH07
CiAJCTI5QTgxMjI4MEZCQjlDMUQwMDUxMDI5MyAvKiBBY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlBODEyMEEw
RkJCOUMxRDAwNTEwMjkzIC8qIEFjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHAgKi87IH07CkluZGV4
OiBXZWJDb3JlL2h0bWwvSFRNTEh0bWxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvSFRNTEh0bWxFbGVtZW50LmNwcAkocmV2aXNpb24gNDY3NzcpCisrKyBXZWJDb3JlL2h0
bWwvSFRNTEh0bWxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTAgKzIzLDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJIVE1MSHRtbEVsZW1lbnQuaCIKIAotI2lm
IEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCiAjaW5jbHVkZSAiQXBwbGljYXRpb25D
YWNoZUhvc3QuaCIKLSNlbmRpZgotCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJE
b2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCkBAIC03OCw4ICs3NSwxMSBAQCB2
b2lkIEhUTUxIdG1sRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lCiAgICAgICAgIHJldHVybjsK
IAogICAgIC8vIENoZWNrIHRoZSBtYW5pZmVzdCBhdHRyaWJ1dGUKKyAgICAvLyBGSVhNRTogUmV2
aXNpdCB0aGlzIHdoZW4gd2UgZ2V0IGEgY2xhcmlmaWNhdGlvbiBmcm9tIHdoYXR3ZyBvbiBob3cg
dG8gaGFuZGxlIGVtcHR5CisgICAgLy8gbWFuaWZlc3QgYXR0cmlidXRlcy4gQXMgc3BlYydkLCBh
bmQgY29kZWQgaGVyZSwgdGhlIHN5c3RlbSB3aWxsIGluaXRpYXRlIGFuIHVwZGF0ZQorICAgIC8v
IHBhc3NpbmcgaW4gdGhlIGRvY3VtZW50IHVybCBhcyB0aGUgbWFuaWZlc3QgdXJsLiBUaGF0J3Mg
bm90IGEgZ29vZCB0aGluZy4KICAgICBBdG9taWNTdHJpbmcgbWFuaWZlc3QgPSBnZXRBdHRyaWJ1
dGUobWFuaWZlc3RBdHRyKTsKLSAgICBpZiAobWFuaWZlc3QuaXNFbXB0eSgpKQorICAgIGlmICht
YW5pZmVzdC5pc051bGwoKSkKICAgICAgICAgZG9jdW1lbnRMb2FkZXItPmFwcGxpY2F0aW9uQ2Fj
aGVIb3N0KCktPnNlbGVjdENhY2hlV2l0aG91dE1hbmlmZXN0KCk7CiAgICAgZWxzZQogICAgICAg
ICBkb2N1bWVudExvYWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+c2VsZWN0Q2FjaGVXaXRo
TWFuaWZlc3QoZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwobWFuaWZlc3QpKTsKSW5kZXg6IFdlYkNv
cmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRl
ci9Eb2N1bWVudExvYWRlci5jcHAJKHJldmlzaW9uIDQ2Nzc3KQorKysgV2ViQ29yZS9sb2FkZXIv
RG9jdW1lbnRMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKIAorI2luY2x1ZGUg
IkFwcGxpY2F0aW9uQ2FjaGVIb3N0LmgiCiAjaW5jbHVkZSAiQXJjaGl2ZUZhY3RvcnkuaCIKICNp
bmNsdWRlICJBcmNoaXZlUmVzb3VyY2VDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUGFn
ZS5oIgpAQCAtMTQ4LDcgKzE0OSw3IEBAIERvY3VtZW50TG9hZGVyOjpEb2N1bWVudExvYWRlcihj
b25zdCBSZXMKICAgICAsIG1fc3Vic3RpdHV0ZVJlc291cmNlRGVsaXZlcnlUaW1lcih0aGlzLCAm
RG9jdW1lbnRMb2FkZXI6OnN1YnN0aXR1dGVSZXNvdXJjZURlbGl2ZXJ5VGltZXJGaXJlZCkKICAg
ICAsIG1fZGlkQ3JlYXRlR2xvYmFsSGlzdG9yeUVudHJ5KGZhbHNlKQogI2lmIEVOQUJMRShPRkZM
SU5FX1dFQl9BUFBMSUNBVElPTlMpCi0gICAgLCBtX2FwcGxpY2F0aW9uQ2FjaGVIb3N0KHRoaXMp
CisgICAgLCBtX2FwcGxpY2F0aW9uQ2FjaGVIb3N0KG5ldyBBcHBsaWNhdGlvbkNhY2hlSG9zdCh0
aGlzKSkKICNlbmRpZgogewogfQpAQCAtMjQ2LDcgKzI0Nyw3IEBAIHZvaWQgRG9jdW1lbnRMb2Fk
ZXI6Om1haW5SZWNlaXZlZEVycm9yKGMKICAgICBBU1NFUlQoIWVycm9yLmlzTnVsbCgpKTsKIAog
I2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCi0gICAgbV9hcHBsaWNhdGlvbkNh
Y2hlSG9zdC5mYWlsZWRMb2FkaW5nTWFpblJlc291cmNlKCk7CisgICAgbV9hcHBsaWNhdGlvbkNh
Y2hlSG9zdC0+ZmFpbGVkTG9hZGluZ01haW5SZXNvdXJjZSgpOwogI2VuZGlmCiAgICAgCiAgICAg
aWYgKCFmcmFtZUxvYWRlcigpKQpAQCAtNDEyLDcgKzQxMyw3IEBAIHZvaWQgRG9jdW1lbnRMb2Fk
ZXI6OmRldGFjaEZyb21GcmFtZSgpCiB7CiAgICAgQVNTRVJUKG1fZnJhbWUpOwogI2lmIEVOQUJM
RShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCi0gICAgbV9hcHBsaWNhdGlvbkNhY2hlSG9zdC5z
ZXRET01BcHBsaWNhdGlvbkNhY2hlKDApOworICAgIG1fYXBwbGljYXRpb25DYWNoZUhvc3QtPnNl
dERPTUFwcGxpY2F0aW9uQ2FjaGUoMCk7CiAjZW5kaWYKICAgICBtX2ZyYW1lID0gMDsKIH0KSW5k
ZXg6IFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuaAkocmV2aXNpb24gNDY3NzcpCisrKyBXZWJDb3JlL2xv
YWRlci9Eb2N1bWVudExvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMCArMjksNiBAQAog
I2lmbmRlZiBEb2N1bWVudExvYWRlcl9oCiAjZGVmaW5lIERvY3VtZW50TG9hZGVyX2gKIAotI2lm
IEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCi0jaW5jbHVkZSAiQXBwbGljYXRpb25D
YWNoZUhvc3QuaCIKLSNlbmRpZgotCiAjaW5jbHVkZSAiTmF2aWdhdGlvbkFjdGlvbi5oIgogI2lu
Y2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKQEAg
LTQyLDYgKzM4LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisgICAgY2xhc3MgQXBwbGlj
YXRpb25DYWNoZUhvc3Q7CiAgICAgY2xhc3MgQXJjaGl2ZTsKICAgICBjbGFzcyBBcmNoaXZlUmVz
b3VyY2U7CiAgICAgY2xhc3MgQXJjaGl2ZVJlc291cmNlQ29sbGVjdGlvbjsKQEAgLTIwOCw3ICsy
MDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgdGFrZU1lbW9yeUNhY2hl
TG9hZHNGb3JDbGllbnROb3RpZmljYXRpb24oVmVjdG9yPFN0cmluZz4mIGxvYWRzKTsKIAogI2lm
IEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCi0gICAgICAgIEFwcGxpY2F0aW9uQ2Fj
aGVIb3N0KiBhcHBsaWNhdGlvbkNhY2hlSG9zdCgpIHsgcmV0dXJuICZtX2FwcGxpY2F0aW9uQ2Fj
aGVIb3N0OyB9CisgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVIb3N0KiBhcHBsaWNhdGlvbkNhY2hl
SG9zdCgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbGljYXRpb25DYWNoZUhvc3QuZ2V0KCk7IH0KICNl
bmRpZgogCiAgICAgcHJvdGVjdGVkOgpAQCAtMjk4LDcgKzI5NSw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCiAgICAgICAgIGZy
aWVuZCBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlSG9zdDsgIC8vIGZvciBzdWJzdGl0dXRlIHJlc291
cmNlIGRlbGl2ZXJ5Ci0gICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVIb3N0IG1fYXBwbGljYXRpb25D
YWNoZUhvc3Q7CisgICAgICAgIE93blB0cjxBcHBsaWNhdGlvbkNhY2hlSG9zdD4gbV9hcHBsaWNh
dGlvbkNhY2hlSG9zdDsKICNlbmRpZgogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5j
cHAJKHJldmlzaW9uIDQ2Nzc3KQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiRnJhbWVMb2FkZXIuaCIKIAorI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVIb3N0Lmgi
CiAjaW5jbHVkZSAiQXJjaGl2ZS5oIgogI2luY2x1ZGUgIkFyY2hpdmVGYWN0b3J5LmgiCiAjaW5j
bHVkZSAiQ1N0cmluZy5oIgpAQCAtOTQsOSArOTUsNiBAQAogI2luY2x1ZGUgPHd0Zi9DdXJyZW50
VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAotI2lmIEVOQUJMRShPRkZM
SU5FX1dFQl9BUFBMSUNBVElPTlMpCi0jaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUhvc3QuaCIK
LSNlbmRpZgogCiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJTVkdEb2N1bWVudC5oIgpJbmRl
eDogV2ViQ29yZS9sb2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiA0Njc3NykKKysr
IFdlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNYWluUmVzb3Vy
Y2VMb2FkZXIuaCIKIAorI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVIb3N0LmgiCiAjaW5jbHVk
ZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJGb3JtU3RhdGUuaCIKICNpbmNsdWRlICJG
cmFtZS5oIgpAQCAtNDEsMTAgKzQyLDYgQEAKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgog
I2luY2x1ZGUgIlNldHRpbmdzLmgiCiAKLSNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJ
T05TKQotI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVIb3N0LmgiCi0jZW5kaWYKLQogLy8gRklY
TUU6IE1vcmUgdGhhdCBpcyBpbiBjb21tb24gd2l0aCBTdWJyZXNvdXJjZUxvYWRlciBzaG91bGQg
bW92ZSB1cCBpbnRvIFJlc291cmNlTG9hZGVyLgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4
OiBXZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiA0Njc3NykKKysrIFdlYkNvcmUv
bG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsOSArMzAsNyBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyLmgiCiAKLSNp
ZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQogI2luY2x1ZGUgIkFwcGxpY2F0aW9u
Q2FjaGVIb3N0LmgiCi0jZW5kaWYKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1
ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKSW5kZXg6IFdlYkNvcmUvbG9h
ZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcAkocmV2aXNpb24g
NDY3NzcpCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsOCArMTc2LDggQEAgdm9pZCBBcHBsaWNhdGlvbkNh
Y2hlR3JvdXA6OnNlbGVjdENhY2hlKAogCiAgICAgLy8gRG9uJ3QgY2hhbmdlIGFueXRoaW5nIG9u
IGRpc2sgaWYgcHJpdmF0ZSBicm93c2luZyBpcyBlbmFibGVkLgogICAgIGlmICghZnJhbWUtPnNl
dHRpbmdzKCkgfHwgZnJhbWUtPnNldHRpbmdzKCktPnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKSkg
ewotICAgICAgICBwb3N0TGlzdGVuZXJUYXNrKERPTUFwcGxpY2F0aW9uQ2FjaGU6OkNIRUNLSU5H
X0VWRU5ULCBkb2N1bWVudExvYWRlcik7Ci0gICAgICAgIHBvc3RMaXN0ZW5lclRhc2soRE9NQXBw
bGljYXRpb25DYWNoZTo6RVJST1JfRVZFTlQsIGRvY3VtZW50TG9hZGVyKTsKKyAgICAgICAgcG9z
dExpc3RlbmVyVGFzayhBcHBsaWNhdGlvbkNhY2hlSG9zdDo6Q0hFQ0tJTkdfRVZFTlQsIGRvY3Vt
ZW50TG9hZGVyKTsKKyAgICAgICAgcG9zdExpc3RlbmVyVGFzayhBcHBsaWNhdGlvbkNhY2hlSG9z
dDo6RVJST1JfRVZFTlQsIGRvY3VtZW50TG9hZGVyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtMjM4LDcgKzIzOCw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpmaW5pc2hl
ZExvYWQKICAgICAgICAgQVNTRVJUKCFtX2NhY2hlQmVpbmdVcGRhdGVkKTsgLy8gQWxyZWFkeSBj
bGVhcmVkIG91dCBieSBzdG9wTG9hZGluZygpLgogICAgICAgICBsb2FkZXItPmFwcGxpY2F0aW9u
Q2FjaGVIb3N0KCktPnNldEFwcGxpY2F0aW9uQ2FjaGUoMCk7IC8vIFdpbGwgdW5zZXQgY2FuZGlk
YXRlLCB0b28uCiAgICAgICAgIG1fYXNzb2NpYXRlZERvY3VtZW50TG9hZGVycy5yZW1vdmUobG9h
ZGVyKTsKLSAgICAgICAgcG9zdExpc3RlbmVyVGFzayhET01BcHBsaWNhdGlvbkNhY2hlOjpFUlJP
Ul9FVkVOVCwgbG9hZGVyKTsKKyAgICAgICAgcG9zdExpc3RlbmVyVGFzayhBcHBsaWNhdGlvbkNh
Y2hlSG9zdDo6RVJST1JfRVZFTlQsIGxvYWRlcik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
Q29tcGxldGVkOgogICAgICAgICBBU1NFUlQobV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzLmNv
bnRhaW5zKGxvYWRlcikpOwpAQCAtMjcyLDcgKzI3Miw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNo
ZUdyb3VwOjpmYWlsZWRMb2FkaW4KIAogICAgICAgICAvLyBUaGUgbWFuaWZlc3QgZGlkbid0IGNo
YW5nZSwgYW5kIHdlIGhhdmUgYSByZWxldmFudCBjYWNoZSAtIGJ1dCB0aGUgbWFpbiByZXNvdXJj
ZSBkb3dubG9hZCBmYWlsZWQgbWlkLXdheSwgc28gaXQgY2Fubm90IGJlIHN0b3JlZCB0byB0aGUg
Y2FjaGUsCiAgICAgICAgIC8vIGFuZCB0aGUgbG9hZGVyIGRvZXMgbm90IGdldCBhc3NvY2lhdGVk
IHRvIGl0LiBJZiB0aGVyZSBhcmUgb3RoZXIgbWFpbiByZXNvdXJjZXMgYmVpbmcgZG93bmxvYWRl
ZCBmb3IgdGhpcyBjYWNoZSBncm91cCwgdGhleSBtYXkgc3RpbGwgc3VjY2VlZC4KLSAgICAgICAg
cG9zdExpc3RlbmVyVGFzayhET01BcHBsaWNhdGlvbkNhY2hlOjpFUlJPUl9FVkVOVCwgbG9hZGVy
KTsKKyAgICAgICAgcG9zdExpc3RlbmVyVGFzayhBcHBsaWNhdGlvbkNhY2hlSG9zdDo6RVJST1Jf
RVZFTlQsIGxvYWRlcik7CiAKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGYWlsdXJlOgpAQCAt
MjgyLDcgKzI4Miw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpmYWlsZWRMb2FkaW4K
IAogICAgICAgICBsb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPnNldEFwcGxpY2F0aW9u
Q2FjaGUoMCk7IC8vIFdpbGwgdW5zZXQgY2FuZGlkYXRlLCB0b28uCiAgICAgICAgIG1fYXNzb2Np
YXRlZERvY3VtZW50TG9hZGVycy5yZW1vdmUobG9hZGVyKTsKLSAgICAgICAgcG9zdExpc3RlbmVy
VGFzayhET01BcHBsaWNhdGlvbkNhY2hlOjpFUlJPUl9FVkVOVCwgbG9hZGVyKTsKKyAgICAgICAg
cG9zdExpc3RlbmVyVGFzayhBcHBsaWNhdGlvbkNhY2hlSG9zdDo6RVJST1JfRVZFTlQsIGxvYWRl
cik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29tcGxldGVkOgogICAgICAgICAvLyBUaGUg
Y2FjaGUgbWFuaWZlc3QgZGlkbid0IGxpc3QgdGhpcyBtYWluIHJlc291cmNlLCBhbmQgYWxsIGNh
Y2hlIGVudHJpZXMgd2VyZSBhbHJlYWR5IHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5IC0gYnV0IHRoZSBt
YWluIHJlc291cmNlIGZhaWxlZCB0byBsb2FkLApAQCAtMjkzLDcgKzI5Myw3IEBAIHZvaWQgQXBw
bGljYXRpb25DYWNoZUdyb3VwOjpmYWlsZWRMb2FkaW4KICAgICAgICAgbV9hc3NvY2lhdGVkRG9j
dW1lbnRMb2FkZXJzLnJlbW92ZShsb2FkZXIpOwogICAgICAgICBsb2FkZXItPmFwcGxpY2F0aW9u
Q2FjaGVIb3N0KCktPnNldEFwcGxpY2F0aW9uQ2FjaGUoMCk7CiAKLSAgICAgICAgcG9zdExpc3Rl
bmVyVGFzayhET01BcHBsaWNhdGlvbkNhY2hlOjpFUlJPUl9FVkVOVCwgbG9hZGVyKTsKKyAgICAg
ICAgcG9zdExpc3RlbmVyVGFzayhBcHBsaWNhdGlvbkNhY2hlSG9zdDo6RVJST1JfRVZFTlQsIGxv
YWRlcik7CiAKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzg5LDkgKzM4OSw5IEBAIHZvaWQg
QXBwbGljYXRpb25DYWNoZUdyb3VwOjp1cGRhdGUoRnJhbWUKIHsKICAgICBpZiAobV91cGRhdGVT
dGF0dXMgPT0gQ2hlY2tpbmcgfHwgbV91cGRhdGVTdGF0dXMgPT0gRG93bmxvYWRpbmcpIHsKICAg
ICAgICAgaWYgKHVwZGF0ZU9wdGlvbiA9PSBBcHBsaWNhdGlvbkNhY2hlVXBkYXRlV2l0aEJyb3dz
aW5nQ29udGV4dCkgewotICAgICAgICAgICAgcG9zdExpc3RlbmVyVGFzayhET01BcHBsaWNhdGlv
bkNhY2hlOjpDSEVDS0lOR19FVkVOVCwgZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigp
KTsKKyAgICAgICAgICAgIHBvc3RMaXN0ZW5lclRhc2soQXBwbGljYXRpb25DYWNoZUhvc3Q6OkNI
RUNLSU5HX0VWRU5ULCBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkpOwogICAgICAg
ICAgICAgaWYgKG1fdXBkYXRlU3RhdHVzID09IERvd25sb2FkaW5nKQotICAgICAgICAgICAgICAg
IHBvc3RMaXN0ZW5lclRhc2soRE9NQXBwbGljYXRpb25DYWNoZTo6RE9XTkxPQURJTkdfRVZFTlQs
IGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSk7CisgICAgICAgICAgICAgICAgcG9z
dExpc3RlbmVyVGFzayhBcHBsaWNhdGlvbkNhY2hlSG9zdDo6RE9XTkxPQURJTkdfRVZFTlQsIGZy
YW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTQwMSw4ICs0MDEsOCBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91
cDo6dXBkYXRlKEZyYW1lCiAgICAgICAgIEFTU0VSVChtX3BlbmRpbmdNYXN0ZXJSZXNvdXJjZUxv
YWRlcnMuaXNFbXB0eSgpKTsKICAgICAgICAgQVNTRVJUKG1fcGVuZGluZ0VudHJpZXMuaXNFbXB0
eSgpKTsKICAgICAgICAgQVNTRVJUKCFtX2NhY2hlQmVpbmdVcGRhdGVkKTsKLSAgICAgICAgcG9z
dExpc3RlbmVyVGFzayhET01BcHBsaWNhdGlvbkNhY2hlOjpDSEVDS0lOR19FVkVOVCwgZnJhbWUt
PmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpKTsKLSAgICAgICAgcG9zdExpc3RlbmVyVGFzayhE
T01BcHBsaWNhdGlvbkNhY2hlOjpOT1VQREFURV9FVkVOVCwgZnJhbWUtPmxvYWRlcigpLT5kb2N1
bWVudExvYWRlcigpKTsKKyAgICAgICAgcG9zdExpc3RlbmVyVGFzayhBcHBsaWNhdGlvbkNhY2hl
SG9zdDo6Q0hFQ0tJTkdfRVZFTlQsIGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSk7
CisgICAgICAgIHBvc3RMaXN0ZW5lclRhc2soQXBwbGljYXRpb25DYWNoZUhvc3Q6Ok5PVVBEQVRF
X0VWRU5ULCBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC00MTEsMTAgKzQxMSwxMCBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVH
cm91cDo6dXBkYXRlKEZyYW1lCiAKICAgICBtX3VwZGF0ZVN0YXR1cyA9IENoZWNraW5nOwogCi0g
ICAgcG9zdExpc3RlbmVyVGFzayhET01BcHBsaWNhdGlvbkNhY2hlOjpDSEVDS0lOR19FVkVOVCwg
bV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzKTsKKyAgICBwb3N0TGlzdGVuZXJUYXNrKEFwcGxp
Y2F0aW9uQ2FjaGVIb3N0OjpDSEVDS0lOR19FVkVOVCwgbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2Fk
ZXJzKTsKICAgICBpZiAoIW1fbmV3ZXN0Q2FjaGUpIHsKICAgICAgICAgQVNTRVJUKHVwZGF0ZU9w
dGlvbiA9PSBBcHBsaWNhdGlvbkNhY2hlVXBkYXRlV2l0aEJyb3dzaW5nQ29udGV4dCk7Ci0gICAg
ICAgIHBvc3RMaXN0ZW5lclRhc2soRE9NQXBwbGljYXRpb25DYWNoZTo6Q0hFQ0tJTkdfRVZFTlQs
IGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSk7CisgICAgICAgIHBvc3RMaXN0ZW5l
clRhc2soQXBwbGljYXRpb25DYWNoZUhvc3Q6OkNIRUNLSU5HX0VWRU5ULCBmcmFtZS0+bG9hZGVy
KCktPmRvY3VtZW50TG9hZGVyKCkpOwogICAgIH0KICAgICAKICAgICBBU1NFUlQoIW1fbWFuaWZl
c3RIYW5kbGUpOwpAQCAtNjQ5LDcgKzY0OSw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3Vw
OjpkaWRGaW5pc2hMb2EKICAgICAvLyBXZSBoYXZlIHRoZSBtYW5pZmVzdCwgbm93IGRvd25sb2Fk
IHRoZSByZXNvdXJjZXMuCiAgICAgbV91cGRhdGVTdGF0dXMgPSBEb3dubG9hZGluZzsKICAgICAK
LSAgICBwb3N0TGlzdGVuZXJUYXNrKERPTUFwcGxpY2F0aW9uQ2FjaGU6OkRPV05MT0FESU5HX0VW
RU5ULCBtX2Fzc29jaWF0ZWREb2N1bWVudExvYWRlcnMpOworICAgIHBvc3RMaXN0ZW5lclRhc2so
QXBwbGljYXRpb25DYWNoZUhvc3Q6OkRPV05MT0FESU5HX0VWRU5ULCBtX2Fzc29jaWF0ZWREb2N1
bWVudExvYWRlcnMpOwogCiAgICAgQVNTRVJUKG1fcGVuZGluZ0VudHJpZXMuaXNFbXB0eSgpKTsK
IApAQCAtNjk5LDggKzY5OSw4IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjptYW5pZmVz
dE5vdEYKIHsKICAgICBtYWtlT2Jzb2xldGUoKTsKIAotICAgIHBvc3RMaXN0ZW5lclRhc2soRE9N
QXBwbGljYXRpb25DYWNoZTo6T0JTT0xFVEVfRVZFTlQsIG1fYXNzb2NpYXRlZERvY3VtZW50TG9h
ZGVycyk7Ci0gICAgcG9zdExpc3RlbmVyVGFzayhET01BcHBsaWNhdGlvbkNhY2hlOjpFUlJPUl9F
VkVOVCwgbV9wZW5kaW5nTWFzdGVyUmVzb3VyY2VMb2FkZXJzKTsKKyAgICBwb3N0TGlzdGVuZXJU
YXNrKEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpPQlNPTEVURV9FVkVOVCwgbV9hc3NvY2lhdGVkRG9j
dW1lbnRMb2FkZXJzKTsKKyAgICBwb3N0TGlzdGVuZXJUYXNrKEFwcGxpY2F0aW9uQ2FjaGVIb3N0
OjpFUlJPUl9FVkVOVCwgbV9wZW5kaW5nTWFzdGVyUmVzb3VyY2VMb2FkZXJzKTsKIAogICAgIHN0
b3BMb2FkaW5nKCk7CiAKQEAgLTc0OCwxMSArNzQ4LDExIEBAIHZvaWQgQXBwbGljYXRpb25DYWNo
ZUdyb3VwOjpjaGVja0lmTG9hZEkKICAgICAgICAgaWYgKCFtX3N0b3JhZ2VJRCkKICAgICAgICAg
ICAgIGNhY2hlU3RvcmFnZSgpLnN0b3JlTmV3ZXN0Q2FjaGUodGhpcyk7CiAKLSAgICAgICAgcG9z
dExpc3RlbmVyVGFzayhET01BcHBsaWNhdGlvbkNhY2hlOjpOT1VQREFURV9FVkVOVCwgbV9hc3Nv
Y2lhdGVkRG9jdW1lbnRMb2FkZXJzKTsKKyAgICAgICAgcG9zdExpc3RlbmVyVGFzayhBcHBsaWNh
dGlvbkNhY2hlSG9zdDo6Tk9VUERBVEVfRVZFTlQsIG1fYXNzb2NpYXRlZERvY3VtZW50TG9hZGVy
cyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRmFpbHVyZToKICAgICAgICAgQVNTRVJUKCFt
X2NhY2hlQmVpbmdVcGRhdGVkKTsKLSAgICAgICAgcG9zdExpc3RlbmVyVGFzayhET01BcHBsaWNh
dGlvbkNhY2hlOjpFUlJPUl9FVkVOVCwgbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzKTsKKyAg
ICAgICAgcG9zdExpc3RlbmVyVGFzayhBcHBsaWNhdGlvbkNhY2hlSG9zdDo6RVJST1JfRVZFTlQs
IG1fYXNzb2NpYXRlZERvY3VtZW50TG9hZGVycyk7CiAgICAgICAgIGlmIChtX2NhY2hlcy5pc0Vt
cHR5KCkpIHsKICAgICAgICAgICAgIEFTU0VSVChtX2Fzc29jaWF0ZWREb2N1bWVudExvYWRlcnMu
aXNFbXB0eSgpKTsKICAgICAgICAgICAgIGRlbGV0ZSB0aGlzOwpAQCAtNzgxLDcgKzc4MSw3IEBA
IHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpjaGVja0lmTG9hZEkKICAgICAgICAgICAgIGlm
IChvbGROZXdlc3RDYWNoZSkKICAgICAgICAgICAgICAgICBjYWNoZVN0b3JhZ2UoKS5yZW1vdmUo
b2xkTmV3ZXN0Q2FjaGUuZ2V0KCkpOwogICAgICAgICAgICAgLy8gRmlyZSB0aGUgc3VjY2VzcyBl
dmVudHMuCi0gICAgICAgICAgICBwb3N0TGlzdGVuZXJUYXNrKGlzVXBncmFkZUF0dGVtcHQgPyBE
T01BcHBsaWNhdGlvbkNhY2hlOjpVUERBVEVSRUFEWV9FVkVOVCA6IERPTUFwcGxpY2F0aW9uQ2Fj
aGU6OkNBQ0hFRF9FVkVOVCwgbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzKTsKKyAgICAgICAg
ICAgIHBvc3RMaXN0ZW5lclRhc2soaXNVcGdyYWRlQXR0ZW1wdCA/IEFwcGxpY2F0aW9uQ2FjaGVI
b3N0OjpVUERBVEVSRUFEWV9FVkVOVCA6IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpDQUNIRURfRVZF
TlQsIG1fYXNzb2NpYXRlZERvY3VtZW50TG9hZGVycyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBpZiAoY2FjaGVTdG9yYWdlKCkuaXNNYXhpbXVtU2l6ZVJlYWNoZWQoKSAmJiAhbV9j
YWxsZWRSZWFjaGVkTWF4QXBwQ2FjaGVTaXplKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgcmFu
IG91dCBvZiBzcGFjZS4gQWxsIHRoZSBjaGFuZ2VzIGluIHRoZSBjYWNoZSBzdG9yYWdlIGhhdmUK
QEAgLTgwMSw3ICs4MDEsNyBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6Y2hlY2tJZkxv
YWRJCiAgICAgICAgICAgICAgICAgLy8gUnVuIHRoZSAiY2FjaGUgZmFpbHVyZSBzdGVwcyIKICAg
ICAgICAgICAgICAgICAvLyBGaXJlIHRoZSBlcnJvciBldmVudHMgdG8gYWxsIHBlbmRpbmcgbWFz
dGVyIGVudHJpZXMsIGFzIHdlbGwgYW55IG90aGVyIGNhY2hlIGhvc3RzCiAgICAgICAgICAgICAg
ICAgLy8gY3VycmVudGx5IGFzc29jaWF0ZWQgd2l0aCBhIGNhY2hlIGluIHRoaXMgZ3JvdXAuCi0g
ICAgICAgICAgICAgICAgcG9zdExpc3RlbmVyVGFzayhET01BcHBsaWNhdGlvbkNhY2hlOjpFUlJP
Ul9FVkVOVCwgbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzKTsKKyAgICAgICAgICAgICAgICBw
b3N0TGlzdGVuZXJUYXNrKEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpFUlJPUl9FVkVOVCwgbV9hc3Nv
Y2lhdGVkRG9jdW1lbnRMb2FkZXJzKTsKICAgICAgICAgICAgICAgICAvLyBEaXNhc3NvY2lhdGUg
dGhlIHBlbmRpbmcgbWFzdGVyIGVudHJpZXMgZnJvbSB0aGUgZmFpbGVkIG5ldyBjYWNoZS4gTm90
ZSB0aGF0CiAgICAgICAgICAgICAgICAgLy8gYWxsIG90aGVyIGxvYWRlcnMgaW4gdGhlIG1fYXNz
b2NpYXRlZERvY3VtZW50TG9hZGVycyBhcmUgc3RpbGwgYXNzb2NpYXRlZCB3aXRoCiAgICAgICAg
ICAgICAgICAgLy8gc29tZSBvdGhlciBjYWNoZSBpbiB0aGlzIGdyb3VwLiBUaGV5IGFyZSBub3Qg
YXNzb2NpYXRlZCB3aXRoIHRoZSBmYWlsZWQgbmV3IGNhY2hlLgpAQCAtODQ3LDcgKzg0Nyw3IEBA
IHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpzdGFydExvYWRpbmcKICAgICAKICAgICBFbnRy
eU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BlbmRpbmdFbnRyaWVzLmJlZ2luKCk7CiAKLSAg
ICBwb3N0TGlzdGVuZXJUYXNrKERPTUFwcGxpY2F0aW9uQ2FjaGU6OlBST0dSRVNTX0VWRU5ULCBt
X2Fzc29jaWF0ZWREb2N1bWVudExvYWRlcnMpOworICAgIHBvc3RMaXN0ZW5lclRhc2soQXBwbGlj
YXRpb25DYWNoZUhvc3Q6OlBST0dSRVNTX0VWRU5ULCBtX2Fzc29jaWF0ZWREb2N1bWVudExvYWRl
cnMpOwogCiAgICAgQVNTRVJUKCFtX2N1cnJlbnRIYW5kbGUpOwogICAgIApAQCAtOTQ2LDkgKzk0
Niw5IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpzY2hlZHVsZVJlYWMKIAogY2xhc3Mg
Q2FsbENhY2hlTGlzdGVuZXJUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRh
c2sgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbGxDYWNoZUxpc3RlbmVyVGFz
az4gY3JlYXRlKFBhc3NSZWZQdHI8RG9jdW1lbnRMb2FkZXI+IGxvYWRlciwgRE9NQXBwbGljYXRp
b25DYWNoZTo6RXZlbnRUeXBlIGV2ZW50VHlwZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYWxs
Q2FjaGVMaXN0ZW5lclRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPERvY3VtZW50TG9hZGVyPiBsb2Fk
ZXIsIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpFdmVudElEIGV2ZW50SUQpCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IENhbGxDYWNoZUxpc3RlbmVyVGFzayhsb2FkZXIsIGV2ZW50
VHlwZSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENhbGxDYWNoZUxpc3RlbmVyVGFz
ayhsb2FkZXIsIGV2ZW50SUQpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRh
c2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKQEAgLTk2MSwyOCArOTYxLDI4IEBA
IHB1YmxpYzoKICAgICAKICAgICAgICAgQVNTRVJUKGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRM
b2FkZXIoKSA9PSBtX2RvY3VtZW50TG9hZGVyLmdldCgpKTsKIAotICAgICAgICBtX2RvY3VtZW50
TG9hZGVyLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5ub3RpZnlFdmVudExpc3RlbmVyKG1fZXZl
bnRUeXBlKTsKKyAgICAgICAgbV9kb2N1bWVudExvYWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3Qo
KS0+bm90aWZ5RXZlbnRMaXN0ZW5lcihtX2V2ZW50SUQpOwogICAgIH0KIAogcHJpdmF0ZToKLSAg
ICBDYWxsQ2FjaGVMaXN0ZW5lclRhc2soUGFzc1JlZlB0cjxEb2N1bWVudExvYWRlcj4gbG9hZGVy
LCBET01BcHBsaWNhdGlvbkNhY2hlOjpFdmVudFR5cGUgZXZlbnRUeXBlKQorICAgIENhbGxDYWNo
ZUxpc3RlbmVyVGFzayhQYXNzUmVmUHRyPERvY3VtZW50TG9hZGVyPiBsb2FkZXIsIEFwcGxpY2F0
aW9uQ2FjaGVIb3N0OjpFdmVudElEIGV2ZW50SUQpCiAgICAgICAgIDogbV9kb2N1bWVudExvYWRl
cihsb2FkZXIpCi0gICAgICAgICwgbV9ldmVudFR5cGUoZXZlbnRUeXBlKQorICAgICAgICAsIG1f
ZXZlbnRJRChldmVudElEKQogICAgIHsKICAgICB9CiAKICAgICBSZWZQdHI8RG9jdW1lbnRMb2Fk
ZXI+IG1fZG9jdW1lbnRMb2FkZXI7Ci0gICAgRE9NQXBwbGljYXRpb25DYWNoZTo6RXZlbnRUeXBl
IG1fZXZlbnRUeXBlOworICAgIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpFdmVudElEIG1fZXZlbnRJ
RDsKIH07CiAKLXZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpwb3N0TGlzdGVuZXJUYXNrKERP
TUFwcGxpY2F0aW9uQ2FjaGU6OkV2ZW50VHlwZSBldmVudFR5cGUsIGNvbnN0IEhhc2hTZXQ8RG9j
dW1lbnRMb2FkZXIqPiYgbG9hZGVyU2V0KQordm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OnBv
c3RMaXN0ZW5lclRhc2soQXBwbGljYXRpb25DYWNoZUhvc3Q6OkV2ZW50SUQgZXZlbnRJRCwgY29u
c3QgSGFzaFNldDxEb2N1bWVudExvYWRlcio+JiBsb2FkZXJTZXQpCiB7CiAgICAgSGFzaFNldDxE
b2N1bWVudExvYWRlcio+Ojpjb25zdF9pdGVyYXRvciBsb2FkZXJTZXRFbmQgPSBsb2FkZXJTZXQu
ZW5kKCk7CiAgICAgZm9yIChIYXNoU2V0PERvY3VtZW50TG9hZGVyKj46OmNvbnN0X2l0ZXJhdG9y
IGl0ZXIgPSBsb2FkZXJTZXQuYmVnaW4oKTsgaXRlciAhPSBsb2FkZXJTZXRFbmQ7ICsraXRlcikK
LSAgICAgICAgcG9zdExpc3RlbmVyVGFzayhldmVudFR5cGUsICppdGVyKTsKKyAgICAgICAgcG9z
dExpc3RlbmVyVGFzayhldmVudElELCAqaXRlcik7CiB9CiAKLXZvaWQgQXBwbGljYXRpb25DYWNo
ZUdyb3VwOjpwb3N0TGlzdGVuZXJUYXNrKERPTUFwcGxpY2F0aW9uQ2FjaGU6OkV2ZW50VHlwZSBl
dmVudFR5cGUsIERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCit2b2lkIEFwcGxpY2F0aW9uQ2FjaGVH
cm91cDo6cG9zdExpc3RlbmVyVGFzayhBcHBsaWNhdGlvbkNhY2hlSG9zdDo6RXZlbnRJRCBldmVu
dElELCBEb2N1bWVudExvYWRlciogbG9hZGVyKQogewogICAgIEZyYW1lKiBmcmFtZSA9IGxvYWRl
ci0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQpAQCAtOTkwLDcgKzk5MCw3IEBAIHZvaWQgQXBw
bGljYXRpb25DYWNoZUdyb3VwOjpwb3N0TGlzdGVuZXIKICAgICAKICAgICBBU1NFUlQoZnJhbWUt
PmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpID09IGxvYWRlcik7CiAKLSAgICBmcmFtZS0+ZG9j
dW1lbnQoKS0+cG9zdFRhc2soQ2FsbENhY2hlTGlzdGVuZXJUYXNrOjpjcmVhdGUobG9hZGVyLCBl
dmVudFR5cGUpKTsKKyAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+cG9zdFRhc2soQ2FsbENhY2hlTGlz
dGVuZXJUYXNrOjpjcmVhdGUobG9hZGVyLCBldmVudElEKSk7CiB9CiAKIHZvaWQgQXBwbGljYXRp
b25DYWNoZUdyb3VwOjpjbGVhclN0b3JhZ2VJRCgpCkluZGV4OiBXZWJDb3JlL2xvYWRlci9hcHBj
YWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRl
ci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuaAkocmV2aXNpb24gNDY3NzcpCisrKyBX
ZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuaAkod29ya2luZyBj
b3B5KQpAQCAtOTEsOSArOTEsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0NvcHkoKSBjb25zdCB7
IHJldHVybiBtX2lzQ29weTsgfQogCiBwcml2YXRlOgotICAgIHR5cGVkZWYgdm9pZCAoRE9NQXBw
bGljYXRpb25DYWNoZTo6Kkxpc3RlbmVyRnVuY3Rpb24pKCk7Ci0gICAgc3RhdGljIHZvaWQgcG9z
dExpc3RlbmVyVGFzayhET01BcHBsaWNhdGlvbkNhY2hlOjpFdmVudFR5cGUsIGNvbnN0IEhhc2hT
ZXQ8RG9jdW1lbnRMb2FkZXIqPiYpOwotICAgIHN0YXRpYyB2b2lkIHBvc3RMaXN0ZW5lclRhc2so
RE9NQXBwbGljYXRpb25DYWNoZTo6RXZlbnRUeXBlLCBEb2N1bWVudExvYWRlciopOworICAgIHN0
YXRpYyB2b2lkIHBvc3RMaXN0ZW5lclRhc2soQXBwbGljYXRpb25DYWNoZUhvc3Q6OkV2ZW50SUQs
IGNvbnN0IEhhc2hTZXQ8RG9jdW1lbnRMb2FkZXIqPiYpOworICAgIHN0YXRpYyB2b2lkIHBvc3RM
aXN0ZW5lclRhc2soQXBwbGljYXRpb25DYWNoZUhvc3Q6OkV2ZW50SUQsIERvY3VtZW50TG9hZGVy
Kik7CiAgICAgdm9pZCBzY2hlZHVsZVJlYWNoZWRNYXhBcHBDYWNoZVNpemVDYWxsYmFjaygpOwog
CiAgICAgUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gY3JlYXRlUmVzb3VyY2VIYW5kbGUoY29u
c3QgS1VSTCYsIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogbmV3ZXN0Q2FjaGVkUmVzb3VyY2Up
OwpJbmRleDogV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVI
b3N0LmNwcAkocmV2aXNpb24gNDY3NzcpCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBs
aWNhdGlvbkNhY2hlSG9zdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogQXBwbGljYXRpb25DYWNoZUhvc3Q6OkFwcGxpY2F0aW9uQ2Fj
aGVIb3N0KERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlcikKLSAgICA6IG1fRE9NQXBwbGlj
YXRpb25DYWNoZSgwKQorICAgIDogbV9kb21BcHBsaWNhdGlvbkNhY2hlKDApCiAgICAgLCBtX2Rv
Y3VtZW50TG9hZGVyKGRvY3VtZW50TG9hZGVyKQogICAgICwgbV9jYW5kaWRhdGVBcHBsaWNhdGlv
bkNhY2hlR3JvdXAoMCkKIHsKQEAgLTIyMSw2ICsyMjEsMTggQEAgYm9vbCBBcHBsaWNhdGlvbkNh
Y2hlSG9zdDo6Y2FuQ2FjaGVJblBhZwogICAgIHJldHVybiAhYXBwbGljYXRpb25DYWNoZSgpICYm
ICFjYW5kaWRhdGVBcHBsaWNhdGlvbkNhY2hlR3JvdXAoKTsKIH0KIAordm9pZCBBcHBsaWNhdGlv
bkNhY2hlSG9zdDo6c2V0RE9NQXBwbGljYXRpb25DYWNoZShET01BcHBsaWNhdGlvbkNhY2hlKiBk
b21BcHBsaWNhdGlvbkNhY2hlKQoreworICAgIEFTU0VSVCghbV9kb21BcHBsaWNhdGlvbkNhY2hl
IHx8ICFkb21BcHBsaWNhdGlvbkNhY2hlKTsKKyAgICBtX2RvbUFwcGxpY2F0aW9uQ2FjaGUgPSBk
b21BcHBsaWNhdGlvbkNhY2hlOworfQorCit2b2lkIEFwcGxpY2F0aW9uQ2FjaGVIb3N0Ojpub3Rp
ZnlFdmVudExpc3RlbmVyKEV2ZW50SUQgaWQpCit7CisgICAgaWYgKG1fZG9tQXBwbGljYXRpb25D
YWNoZSkKKyAgICAgICAgbV9kb21BcHBsaWNhdGlvbkNhY2hlLT5jYWxsRXZlbnRMaXN0ZW5lcihp
ZCk7Cit9CisKIHZvaWQgQXBwbGljYXRpb25DYWNoZUhvc3Q6OnNldENhbmRpZGF0ZUFwcGxpY2F0
aW9uQ2FjaGVHcm91cChBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIGdyb3VwKQogewogICAgIEFTU0VS
VCghbV9hcHBsaWNhdGlvbkNhY2hlKTsKQEAgLTMwMiwyOCArMzE0LDI4IEBAIGJvb2wgQXBwbGlj
YXRpb25DYWNoZUhvc3Q6OnNjaGVkdWxlTG9hZEYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotRE9N
QXBwbGljYXRpb25DYWNoZTo6U3RhdHVzIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpzdGF0dXMoKSBj
b25zdAorQXBwbGljYXRpb25DYWNoZUhvc3Q6OlN0YXR1cyBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6
c3RhdHVzKCkgY29uc3QKIHsKICAgICBBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSA9IGFwcGxpY2F0
aW9uQ2FjaGUoKTsgICAgCiAgICAgaWYgKCFjYWNoZSkKLSAgICAgICAgcmV0dXJuIERPTUFwcGxp
Y2F0aW9uQ2FjaGU6OlVOQ0FDSEVEOworICAgICAgICByZXR1cm4gVU5DQUNIRUQ7CiAKICAgICBz
d2l0Y2ggKGNhY2hlLT5ncm91cCgpLT51cGRhdGVTdGF0dXMoKSkgewogICAgICAgICBjYXNlIEFw
cGxpY2F0aW9uQ2FjaGVHcm91cDo6Q2hlY2tpbmc6Ci0gICAgICAgICAgICByZXR1cm4gRE9NQXBw
bGljYXRpb25DYWNoZTo6Q0hFQ0tJTkc7CisgICAgICAgICAgICByZXR1cm4gQ0hFQ0tJTkc7CiAg
ICAgICAgIGNhc2UgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpEb3dubG9hZGluZzoKLSAgICAgICAg
ICAgIHJldHVybiBET01BcHBsaWNhdGlvbkNhY2hlOjpET1dOTE9BRElORzsKKyAgICAgICAgICAg
IHJldHVybiBET1dOTE9BRElORzsKICAgICAgICAgY2FzZSBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6
OklkbGU6IHsKICAgICAgICAgICAgIGlmIChjYWNoZS0+Z3JvdXAoKS0+aXNPYnNvbGV0ZSgpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBET01BcHBsaWNhdGlvbkNhY2hlOjpPQlNPTEVURTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gT0JTT0xFVEU7CiAgICAgICAgICAgICBpZiAoY2FjaGUgIT0g
Y2FjaGUtPmdyb3VwKCktPm5ld2VzdENhY2hlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIERP
TUFwcGxpY2F0aW9uQ2FjaGU6OlVQREFURVJFQURZOwotICAgICAgICAgICAgcmV0dXJuIERPTUFw
cGxpY2F0aW9uQ2FjaGU6OklETEU7CisgICAgICAgICAgICAgICAgcmV0dXJuIFVQREFURVJFQURZ
OworICAgICAgICAgICAgcmV0dXJuIElETEU7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gRE9NQXBwbGljYXRpb25DYWNoZTo6VU5DQUNI
RUQ7CisgICAgcmV0dXJuIFVOQ0FDSEVEOwogfQogCiBib29sIEFwcGxpY2F0aW9uQ2FjaGVIb3N0
Ojp1cGRhdGUoKQpJbmRleDogV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNo
ZUhvc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlv
bkNhY2hlSG9zdC5oCShyZXZpc2lvbiA0Njc3NykKKysrIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hl
L0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAK
IAogI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCiAKLSNpbmNsdWRlICJET01B
cHBsaWNhdGlvbkNhY2hlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC00MywxNiArNDMs
MzggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGVHcm91
cDsKICAgICBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U7CiAgICAgY2xhc3MgQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U7CisgICAgY2xhc3MgRE9NQXBwbGljYXRpb25DYWNoZTsKICAgICBj
bGFzcyBEb2N1bWVudExvYWRlcjsKICAgICBjbGFzcyBLVVJMOwogICAgIGNsYXNzIFJlc291cmNl
TG9hZGVyOwogICAgIGNsYXNzIFJlc291cmNlRXJyb3I7Ci0gICAgY2xhc3MgUmVzb3VyY2VSZXF1
ZXN0OworICAgIHN0cnVjdCBSZXNvdXJjZVJlcXVlc3Q7CiAgICAgY2xhc3MgUmVzb3VyY2VSZXNw
b25zZTsKICAgICBjbGFzcyBTdWJzdGl0dXRlRGF0YTsKIAogICAgIGNsYXNzIEFwcGxpY2F0aW9u
Q2FjaGVIb3N0IHsKICAgICBwdWJsaWM6CisgICAgICAgIC8vIFRoZSBTdGF0dXMgbnVtZXJpYyB2
YWx1ZXMgYXJlIHNwZWNpZmllZCBpbiB0aGUgSFRNTDUgc3BlYy4KKyAgICAgICAgZW51bSBTdGF0
dXMgeworICAgICAgICAgICAgVU5DQUNIRUQgPSAwLAorICAgICAgICAgICAgSURMRSA9IDEsCisg
ICAgICAgICAgICBDSEVDS0lORyA9IDIsCisgICAgICAgICAgICBET1dOTE9BRElORyA9IDMsCisg
ICAgICAgICAgICBVUERBVEVSRUFEWSA9IDQsCisgICAgICAgICAgICBPQlNPTEVURSA9IDUKKyAg
ICAgICAgfTsKKworICAgICAgICBlbnVtIEV2ZW50SUQgeworICAgICAgICAgICAgQ0hFQ0tJTkdf
RVZFTlQgPSAwLAorICAgICAgICAgICAgRVJST1JfRVZFTlQsCisgICAgICAgICAgICBOT1VQREFU
RV9FVkVOVCwKKyAgICAgICAgICAgIERPV05MT0FESU5HX0VWRU5ULAorICAgICAgICAgICAgUFJP
R1JFU1NfRVZFTlQsCisgICAgICAgICAgICBVUERBVEVSRUFEWV9FVkVOVCwKKyAgICAgICAgICAg
IENBQ0hFRF9FVkVOVCwKKyAgICAgICAgICAgIE9CU09MRVRFX0VWRU5UICAvLyBNdXN0IHJlbWFp
biB0aGUgbGFzdCB2YWx1ZSwgdGhpcyBpcyB1c2VkIHRvIHNpemUgYXJyYXlzLgorICAgICAgICB9
OworCiAgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVIb3N0KERvY3VtZW50TG9hZGVyKik7CiAgICAg
ICAgIH5BcHBsaWNhdGlvbkNhY2hlSG9zdCgpOwogCkBAIC03NiwyMSArOTgsMTIgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAgICAgICAgIGJvb2wgY2FuQ2FjaGVJblBhZ2VDYWNoZSgpIGNvbnN0
OwogCi0gICAgICAgIERPTUFwcGxpY2F0aW9uQ2FjaGU6OlN0YXR1cyBzdGF0dXMoKSBjb25zdDsg
IAorICAgICAgICBTdGF0dXMgc3RhdHVzKCkgY29uc3Q7ICAKICAgICAgICAgYm9vbCB1cGRhdGUo
KTsKICAgICAgICAgYm9vbCBzd2FwQ2FjaGUoKTsKIAotICAgICAgICB2b2lkIHNldERPTUFwcGxp
Y2F0aW9uQ2FjaGUoRE9NQXBwbGljYXRpb25DYWNoZSogZG9tQXBwbGljYXRpb25DYWNoZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgQVNTRVJUKCFtX0RPTUFwcGxpY2F0aW9uQ2FjaGUgfHwgIWRv
bUFwcGxpY2F0aW9uQ2FjaGUpOwotICAgICAgICAgICAgbV9ET01BcHBsaWNhdGlvbkNhY2hlID0g
ZG9tQXBwbGljYXRpb25DYWNoZTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgbm90aWZ5RXZl
bnRMaXN0ZW5lcihET01BcHBsaWNhdGlvbkNhY2hlOjpFdmVudFR5cGUgZXZlbnRUeXBlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAobV9ET01BcHBsaWNhdGlvbkNhY2hlKQotICAgICAgICAg
ICAgICAgIG1fRE9NQXBwbGljYXRpb25DYWNoZS0+Y2FsbEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBl
KTsKLSAgICAgICAgfQorICAgICAgICB2b2lkIHNldERPTUFwcGxpY2F0aW9uQ2FjaGUoRE9NQXBw
bGljYXRpb25DYWNoZSogZG9tQXBwbGljYXRpb25DYWNoZSk7CisgICAgICAgIHZvaWQgbm90aWZ5
RXZlbnRMaXN0ZW5lcihFdmVudElEIGlkKTsKICAgICAgICAgCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgZnJpZW5kIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDsKQEAgLTEwOCw3ICsxMjEsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgaXNBcHBsaWNhdGlvbkNhY2hlRW5h
YmxlZCgpOwogICAgICAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIoKSB7IHJldHVy
biBtX2RvY3VtZW50TG9hZGVyOyB9CiAKLSAgICAgICAgRE9NQXBwbGljYXRpb25DYWNoZSogbV9E
T01BcHBsaWNhdGlvbkNhY2hlOworICAgICAgICBET01BcHBsaWNhdGlvbkNhY2hlKiBtX2RvbUFw
cGxpY2F0aW9uQ2FjaGU7CiAgICAgICAgIERvY3VtZW50TG9hZGVyKiBtX2RvY3VtZW50TG9hZGVy
OwogCiAgICAgICAgIC8vIFRoZSBhcHBsaWNhdGlvbiBjYWNoZSB0aGF0IHRoZSBkb2N1bWVudCBs
b2FkZXIgaXMgYXNzb2NpYXRlZCB3aXRoIChpZiBhbnkpLgpJbmRleDogV2ViQ29yZS9sb2FkZXIv
YXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcAkocmV2aXNpb24g
NDY3NzcpCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzOCwxNiArOTM4LDEyIEBAIHZvaWQgQXBwbGljYXRp
b25DYWNoZVN0b3JhZ2U6OmVtcHR5KCkKICAgICAgICAgaXQtPnNlY29uZC0+Y2xlYXJTdG9yYWdl
SUQoKTsKIH0gICAgCiAKLWJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnRyYW5zZmVyQXBw
bGljYXRpb25DYWNoZShjb25zdCBTdHJpbmcmIGNhY2hlRGlyZWN0b3J5LCBBcHBsaWNhdGlvbkNh
Y2hlSG9zdCogY2FjaGVIb3N0KQorYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVD
b3B5T2ZDYWNoZShjb25zdCBTdHJpbmcmIGNhY2hlRGlyZWN0b3J5LCBBcHBsaWNhdGlvbkNhY2hl
SG9zdCogY2FjaGVIb3N0KQogewogICAgIEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlID0gY2FjaGVI
b3N0LT5hcHBsaWNhdGlvbkNhY2hlKCk7CiAgICAgaWYgKCFjYWNoZSkKICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgcmV0dXJuIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZUNvcHlPZkNh
Y2hlKGNhY2hlRGlyZWN0b3J5LCBjYWNoZSk7Ci19CiAKLWJvb2wgQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2U6OnN0b3JlQ29weU9mQ2FjaGUoY29uc3QgU3RyaW5nJiBjYWNoZURpcmVjdG9yeSwgQXBw
bGljYXRpb25DYWNoZSogY2FjaGUpCi17CiAgICAgLy8gQ3JlYXRlIGEgbmV3IGNhY2hlLgogICAg
IFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBjYWNoZUNvcHkgPSBBcHBsaWNhdGlvbkNhY2hlOjpj
cmVhdGUoKTsKIApJbmRleDogV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZS5oCShyZXZpc2lvbiA0Njc3NykKKysrIFdlYkNvcmUvbG9hZGVyL2Fw
cGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDgg
KzcwLDcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgZW1wdHkoKTsKICAgICAKLSAgICBzdGF0
aWMgYm9vbCB0cmFuc2ZlckFwcGxpY2F0aW9uQ2FjaGUoY29uc3QgU3RyaW5nJiBjYWNoZURpcmVj
dG9yeSwgQXBwbGljYXRpb25DYWNoZUhvc3QqKTsKLSAgICBzdGF0aWMgYm9vbCBzdG9yZUNvcHlP
ZkNhY2hlKGNvbnN0IFN0cmluZyYgY2FjaGVEaXJlY3RvcnksIEFwcGxpY2F0aW9uQ2FjaGUqKTsK
KyAgICBzdGF0aWMgYm9vbCBzdG9yZUNvcHlPZkNhY2hlKGNvbnN0IFN0cmluZyYgY2FjaGVEaXJl
Y3RvcnksIEFwcGxpY2F0aW9uQ2FjaGVIb3N0Kik7CiAKICAgICBib29sIG1hbmlmZXN0VVJMcyhW
ZWN0b3I8S1VSTD4qIHVybHMpOwogICAgIGJvb2wgY2FjaGVHcm91cFNpemUoY29uc3QgU3RyaW5n
JiBtYW5pZmVzdFVSTCwgaW50NjRfdCogc2l6ZSk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9hcHBj
YWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRl
ci9hcHBjYWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmNwcAkocmV2aXNpb24gNDY3NzcpCisrKyBX
ZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjUsNyArNjUsNyBAQCB1bnNpZ25lZCBzaG9ydCBET01BcHBsaWNhdGlvbkNhY2hl
OjpzdGF0CiB7CiAgICAgQXBwbGljYXRpb25DYWNoZUhvc3QqIGNhY2hlSG9zdCA9IGFwcGxpY2F0
aW9uQ2FjaGVIb3N0KCk7CiAgICAgaWYgKCFjYWNoZUhvc3QpCi0gICAgICAgIHJldHVybiBVTkNB
Q0hFRDsKKyAgICAgICAgcmV0dXJuIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpVTkNBQ0hFRDsKICAg
ICByZXR1cm4gY2FjaGVIb3N0LT5zdGF0dXMoKTsKIH0KIApAQCAtOTUsMTMgKzk1LDEzIEBAIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIERPTUFwcGxpY2F0aW9uQ2EKICAgICByZXR1cm4gbV9mcmFt
ZS0+ZG9jdW1lbnQoKTsKIH0KIAotdm9pZCBET01BcHBsaWNhdGlvbkNhY2hlOjphZGRFdmVudExp
c3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnROYW1lLCBQYXNzUmVmUHRyPEV2ZW50TGlz
dGVuZXI+IGV2ZW50TGlzdGVuZXIsIGJvb2wpCit2b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6OmFk
ZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lciwgYm9vbCkKIHsKLSAgICBFdmVudExpc3RlbmVy
c01hcDo6aXRlcmF0b3IgaXRlciA9IG1fZXZlbnRMaXN0ZW5lcnMuZmluZChldmVudE5hbWUpOwor
ICAgIEV2ZW50TGlzdGVuZXJzTWFwOjppdGVyYXRvciBpdGVyID0gbV9ldmVudExpc3RlbmVycy5m
aW5kKGV2ZW50VHlwZSk7CiAgICAgaWYgKGl0ZXIgPT0gbV9ldmVudExpc3RlbmVycy5lbmQoKSkg
ewogICAgICAgICBMaXN0ZW5lclZlY3RvciBsaXN0ZW5lcnM7CiAgICAgICAgIGxpc3RlbmVycy5h
cHBlbmQoZXZlbnRMaXN0ZW5lcik7Ci0gICAgICAgIG1fZXZlbnRMaXN0ZW5lcnMuYWRkKGV2ZW50
TmFtZSwgbGlzdGVuZXJzKTsKKyAgICAgICAgbV9ldmVudExpc3RlbmVycy5hZGQoZXZlbnRUeXBl
LCBsaXN0ZW5lcnMpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIExpc3RlbmVyVmVjdG9yJiBsaXN0
ZW5lcnMgPSBpdGVyLT5zZWNvbmQ7CiAgICAgICAgIGZvciAoTGlzdGVuZXJWZWN0b3I6Oml0ZXJh
dG9yIGxpc3RlbmVySXRlciA9IGxpc3RlbmVycy5iZWdpbigpOyBsaXN0ZW5lckl0ZXIgIT0gbGlz
dGVuZXJzLmVuZCgpOyArK2xpc3RlbmVySXRlcikgewpAQCAtMTEwLDEzICsxMTAsMTMgQEAgdm9p
ZCBET01BcHBsaWNhdGlvbkNhY2hlOjphZGRFdmVudExpc3RlbgogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBsaXN0ZW5lcnMuYXBwZW5kKGV2ZW50TGlzdGVuZXIpOwotICAgICAgICBtX2V2
ZW50TGlzdGVuZXJzLmFkZChldmVudE5hbWUsIGxpc3RlbmVycyk7CisgICAgICAgIG1fZXZlbnRM
aXN0ZW5lcnMuYWRkKGV2ZW50VHlwZSwgbGlzdGVuZXJzKTsKICAgICB9ICAgIAogfQogCi12b2lk
IERPTUFwcGxpY2F0aW9uQ2FjaGU6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3Ry
aW5nJiBldmVudE5hbWUsIEV2ZW50TGlzdGVuZXIqIGV2ZW50TGlzdGVuZXIsIGJvb2wpCit2b2lk
IERPTUFwcGxpY2F0aW9uQ2FjaGU6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3Ry
aW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqIGV2ZW50TGlzdGVuZXIsIGJvb2wpCiB7Ci0g
ICAgRXZlbnRMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2V2ZW50TGlzdGVuZXJzLmZp
bmQoZXZlbnROYW1lKTsKKyAgICBFdmVudExpc3RlbmVyc01hcDo6aXRlcmF0b3IgaXRlciA9IG1f
ZXZlbnRMaXN0ZW5lcnMuZmluZChldmVudFR5cGUpOwogICAgIGlmIChpdGVyID09IG1fZXZlbnRM
aXN0ZW5lcnMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKQEAgLTE0NiwxMSArMTQ2LDEx
IEBAIGJvb2wgRE9NQXBwbGljYXRpb25DYWNoZTo6ZGlzcGF0Y2hFdmVudCgKICAgICByZXR1cm4g
IWV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCk7CiB9CiAKLXZvaWQgRE9NQXBwbGljYXRpb25DYWNo
ZTo6Y2FsbExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnROYW1lLCBFdmVudExpc3Rl
bmVyKiBsaXN0ZW5lcikKK3ZvaWQgRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbExpc3RlbmVyKGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiBsaXN0ZW5lcikKIHsK
ICAgICBBU1NFUlQobV9mcmFtZSk7CiAgICAgCi0gICAgUmVmUHRyPEV2ZW50PiBldmVudCA9IEV2
ZW50OjpjcmVhdGUoZXZlbnROYW1lLCBmYWxzZSwgZmFsc2UpOworICAgIFJlZlB0cjxFdmVudD4g
ZXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50VHlwZSwgZmFsc2UsIGZhbHNlKTsKICAgICBpZiAo
bGlzdGVuZXIpIHsKICAgICAgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKICAgICAgICAgZXZl
bnQtPnNldEN1cnJlbnRUYXJnZXQodGhpcyk7CkBAIC0xNjIsNTMgKzE2Miw1MSBAQCB2b2lkIERP
TUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxMaXN0ZW5lcihjCiAgICAgQVNTRVJUKCFlYyk7ICAgIAog
fQogCi0vLyBzdGF0aWMKLWNvbnN0IEF0b21pY1N0cmluZyYgRE9NQXBwbGljYXRpb25DYWNoZTo6
dG9FdmVudE5hbWUoRXZlbnRUeXBlIGV2ZW50VHlwZSkKK2NvbnN0IEF0b21pY1N0cmluZyYgRE9N
QXBwbGljYXRpb25DYWNoZTo6dG9FdmVudFR5cGUoQXBwbGljYXRpb25DYWNoZUhvc3Q6OkV2ZW50
SUQgaWQpCiB7Ci0gICAgc3dpdGNoIChldmVudFR5cGUpIHsKLSAgICBjYXNlIENIRUNLSU5HX0VW
RU5UOgorICAgIHN3aXRjaCAoaWQpIHsKKyAgICBjYXNlIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpD
SEVDS0lOR19FVkVOVDoKICAgICAgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5jaGVja2luZ0V2ZW50
OwotICAgIGNhc2UgRVJST1JfRVZFTlQ6CisgICAgY2FzZSBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6
RVJST1JfRVZFTlQ6CiAgICAgICAgIHJldHVybiBldmVudE5hbWVzKCkuZXJyb3JFdmVudDsKLSAg
ICBjYXNlIE5PVVBEQVRFX0VWRU5UOgorICAgIGNhc2UgQXBwbGljYXRpb25DYWNoZUhvc3Q6Ok5P
VVBEQVRFX0VWRU5UOgogICAgICAgICByZXR1cm4gZXZlbnROYW1lcygpLm5vdXBkYXRlRXZlbnQ7
Ci0gICAgY2FzZSBET1dOTE9BRElOR19FVkVOVDoKKyAgICBjYXNlIEFwcGxpY2F0aW9uQ2FjaGVI
b3N0OjpET1dOTE9BRElOR19FVkVOVDoKICAgICAgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5kb3du
bG9hZGluZ0V2ZW50OwotICAgIGNhc2UgUFJPR1JFU1NfRVZFTlQ6CisgICAgY2FzZSBBcHBsaWNh
dGlvbkNhY2hlSG9zdDo6UFJPR1JFU1NfRVZFTlQ6CiAgICAgICAgIHJldHVybiBldmVudE5hbWVz
KCkucHJvZ3Jlc3NFdmVudDsKLSAgICBjYXNlIFVQREFURVJFQURZX0VWRU5UOgorICAgIGNhc2Ug
QXBwbGljYXRpb25DYWNoZUhvc3Q6OlVQREFURVJFQURZX0VWRU5UOgogICAgICAgICByZXR1cm4g
ZXZlbnROYW1lcygpLnVwZGF0ZXJlYWR5RXZlbnQ7Ci0gICAgY2FzZSBDQUNIRURfRVZFTlQ6Cisg
ICAgY2FzZSBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6Q0FDSEVEX0VWRU5UOgogICAgICAgICByZXR1
cm4gZXZlbnROYW1lcygpLmNhY2hlZEV2ZW50OwotICAgIGNhc2UgT0JTT0xFVEVfRVZFTlQ6ICAg
ICAgICAgICAgCisgICAgY2FzZSBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6T0JTT0xFVEVfRVZFTlQ6
ICAgICAgICAgICAgCiAgICAgICAgIHJldHVybiBldmVudE5hbWVzKCkub2Jzb2xldGVFdmVudDsK
ICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIGV2ZW50TmFtZXMo
KS5lcnJvckV2ZW50OwogfQogCi0vLyBzdGF0aWMKLURPTUFwcGxpY2F0aW9uQ2FjaGU6OkV2ZW50
VHlwZSBET01BcHBsaWNhdGlvbkNhY2hlOjp0b0V2ZW50VHlwZShjb25zdCBBdG9taWNTdHJpbmcm
IGV2ZW50TmFtZSkKK0FwcGxpY2F0aW9uQ2FjaGVIb3N0OjpFdmVudElEIERPTUFwcGxpY2F0aW9u
Q2FjaGU6OnRvRXZlbnRJRChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkKIHsKLSAgICBp
ZiAoZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5jaGVja2luZ0V2ZW50KQotICAgICAgICByZXR1
cm4gQ0hFQ0tJTkdfRVZFTlQ7Ci0gICAgaWYgKGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkuZXJy
b3JFdmVudCkKLSAgICAgICAgcmV0dXJuIEVSUk9SX0VWRU5UOwotICAgIGlmIChldmVudE5hbWUg
PT0gZXZlbnROYW1lcygpLm5vdXBkYXRlRXZlbnQpCi0gICAgICAgIHJldHVybiBOT1VQREFURV9F
VkVOVDsKLSAgICBpZiAoZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5kb3dubG9hZGluZ0V2ZW50
KQotICAgICAgICByZXR1cm4gRE9XTkxPQURJTkdfRVZFTlQ7Ci0gICAgaWYgKGV2ZW50TmFtZSA9
PSBldmVudE5hbWVzKCkucHJvZ3Jlc3NFdmVudCkKLSAgICAgICAgcmV0dXJuIFBST0dSRVNTX0VW
RU5UOwotICAgIGlmIChldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnVwZGF0ZXJlYWR5RXZlbnQp
Ci0gICAgICAgIHJldHVybiBVUERBVEVSRUFEWV9FVkVOVDsKLSAgICBpZiAoZXZlbnROYW1lID09
IGV2ZW50TmFtZXMoKS5jYWNoZWRFdmVudCkKLSAgICAgICAgcmV0dXJuIENBQ0hFRF9FVkVOVDsK
LSAgICBpZiAoZXZlbnROYW1lID09IGV2ZW50TmFtZXMoKS5vYnNvbGV0ZUV2ZW50KQotICAgICAg
ICByZXR1cm4gT0JTT0xFVEVfRVZFTlQ7CisgICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVz
KCkuY2hlY2tpbmdFdmVudCkKKyAgICAgICAgcmV0dXJuIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpD
SEVDS0lOR19FVkVOVDsKKyAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5lcnJvckV2
ZW50KQorICAgICAgICByZXR1cm4gQXBwbGljYXRpb25DYWNoZUhvc3Q6OkVSUk9SX0VWRU5UOwor
ICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm5vdXBkYXRlRXZlbnQpCisgICAgICAg
IHJldHVybiBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6Tk9VUERBVEVfRVZFTlQ7CisgICAgaWYgKGV2
ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuZG93bmxvYWRpbmdFdmVudCkKKyAgICAgICAgcmV0dXJu
IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpET1dOTE9BRElOR19FVkVOVDsKKyAgICBpZiAoZXZlbnRU
eXBlID09IGV2ZW50TmFtZXMoKS5wcm9ncmVzc0V2ZW50KQorICAgICAgICByZXR1cm4gQXBwbGlj
YXRpb25DYWNoZUhvc3Q6OlBST0dSRVNTX0VWRU5UOworICAgIGlmIChldmVudFR5cGUgPT0gZXZl
bnROYW1lcygpLnVwZGF0ZXJlYWR5RXZlbnQpCisgICAgICAgIHJldHVybiBBcHBsaWNhdGlvbkNh
Y2hlSG9zdDo6VVBEQVRFUkVBRFlfRVZFTlQ7CisgICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5h
bWVzKCkuY2FjaGVkRXZlbnQpCisgICAgICAgIHJldHVybiBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6
Q0FDSEVEX0VWRU5UOworICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm9ic29sZXRl
RXZlbnQpCisgICAgICAgIHJldHVybiBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6T0JTT0xFVEVfRVZF
TlQ7CiAgIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBFUlJPUl9FVkVO
VDsKKyAgICByZXR1cm4gQXBwbGljYXRpb25DYWNoZUhvc3Q6OkVSUk9SX0VWRU5UOwogfQogCiAK
SW5kZXg6IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmgJ
KHJldmlzaW9uIDQ2Nzc3KQorKysgV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvRE9NQXBwbGljYXRp
b25DYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUo
T0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQogCisjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUhv
c3QuaCIKICNpbmNsdWRlICJBdG9taWNTdHJpbmdIYXNoLmgiCiAjaW5jbHVkZSAiRXZlbnRUYXJn
ZXQuaCIKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCkBAIC0zOCwxMiArMzksMTEgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBBcHBsaWNhdGlvbkNhY2hlSG9zdDsKIGNsYXNz
IEF0b21pY1N0cmluZ0ltcGw7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEtVUkw7CiBjbGFzcyBTdHJp
bmc7Ci0gICAgCisKIGNsYXNzIERPTUFwcGxpY2F0aW9uQ2FjaGUgOiBwdWJsaWMgUmVmQ291bnRl
ZDxET01BcHBsaWNhdGlvbkNhY2hlPiwgcHVibGljIEV2ZW50VGFyZ2V0IHsKIHB1YmxpYzoKICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxET01BcHBsaWNhdGlvbkNhY2hlPiBjcmVhdGUoRnJhbWUqIGZy
YW1lKSB7IHJldHVybiBhZG9wdFJlZihuZXcgRE9NQXBwbGljYXRpb25DYWNoZShmcmFtZSkpOyB9
CkBAIC01MSw0MSArNTEsMjEgQEAgcHVibGljOgogCiAgICAgdm9pZCBkaXNjb25uZWN0RnJhbWUo
KTsKIAotICAgIGVudW0gU3RhdHVzIHsKLSAgICAgICAgVU5DQUNIRUQgPSAwLAotICAgICAgICBJ
RExFID0gMSwKLSAgICAgICAgQ0hFQ0tJTkcgPSAyLAotICAgICAgICBET1dOTE9BRElORyA9IDMs
Ci0gICAgICAgIFVQREFURVJFQURZID0gNCwKLSAgICAgICAgT0JTT0xFVEUgPSA1Ci0gICAgfTsK
LQotICAgIGVudW0gRXZlbnRUeXBlIHsKLSAgICAgICAgQ0hFQ0tJTkdfRVZFTlQgPSAwLAotICAg
ICAgICBFUlJPUl9FVkVOVCwKLSAgICAgICAgTk9VUERBVEVfRVZFTlQsCi0gICAgICAgIERPV05M
T0FESU5HX0VWRU5ULAotICAgICAgICBQUk9HUkVTU19FVkVOVCwKLSAgICAgICAgVVBEQVRFUkVB
RFlfRVZFTlQsCi0gICAgICAgIENBQ0hFRF9FVkVOVCwKLSAgICAgICAgT0JTT0xFVEVfRVZFTlQK
LSAgICB9OwotCiAgICAgdW5zaWduZWQgc2hvcnQgc3RhdHVzKCkgY29uc3Q7CiAgICAgdm9pZCB1
cGRhdGUoRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgc3dhcENhY2hlKEV4Y2VwdGlvbkNvZGUm
KTsKIAotICAgIC8vIEV2ZW50IGxpc3RlbmVyIGF0dHJpYnV0ZXMgYnkgRXZlbnRUeXBlCisgICAg
Ly8gRXZlbnQgbGlzdGVuZXIgYXR0cmlidXRlcyBieSBFdmVudElECiAKLSAgICB2b2lkIHNldEF0
dHJpYnV0ZUV2ZW50TGlzdGVuZXIoRXZlbnRUeXBlIHR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBtX2F0dHJpYnV0ZUV2ZW50TGlzdGVuZXJzW3R5cGVdID0g
ZXZlbnRMaXN0ZW5lcjsgfQotICAgIEV2ZW50TGlzdGVuZXIqIGdldEF0dHJpYnV0ZUV2ZW50TGlz
dGVuZXIoRXZlbnRUeXBlIHR5cGUpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlRXZlbnRMaXN0
ZW5lcnNbdHlwZV0uZ2V0KCk7IH0KLSAgICB2b2lkIGNsZWFyQXR0cmlidXRlRXZlbnRMaXN0ZW5l
cihFdmVudFR5cGUgdHlwZSkgeyBtX2F0dHJpYnV0ZUV2ZW50TGlzdGVuZXJzW3R5cGVdID0gMDsg
fQotICAgIHZvaWQgY2FsbEV2ZW50TGlzdGVuZXIoRXZlbnRUeXBlIHR5cGUpIHsgY2FsbExpc3Rl
bmVyKHRvRXZlbnROYW1lKHR5cGUpLCBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKHR5cGUpKTsg
fQorICAgIHZvaWQgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihBcHBsaWNhdGlvbkNhY2hlSG9z
dDo6RXZlbnRJRCBpZCwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7
IG1fYXR0cmlidXRlRXZlbnRMaXN0ZW5lcnNbaWRdID0gZXZlbnRMaXN0ZW5lcjsgfQorICAgIEV2
ZW50TGlzdGVuZXIqIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoQXBwbGljYXRpb25DYWNoZUhv
c3Q6OkV2ZW50SUQgaWQpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlRXZlbnRMaXN0ZW5lcnNb
aWRdLmdldCgpOyB9CisgICAgdm9pZCBjbGVhckF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoQXBwbGlj
YXRpb25DYWNoZUhvc3Q6OkV2ZW50SUQgaWQpIHsgbV9hdHRyaWJ1dGVFdmVudExpc3RlbmVyc1tp
ZF0gPSAwOyB9CisgICAgdm9pZCBjYWxsRXZlbnRMaXN0ZW5lcihBcHBsaWNhdGlvbkNhY2hlSG9z
dDo6RXZlbnRJRCBpZCkgeyBjYWxsTGlzdGVuZXIodG9FdmVudFR5cGUoaWQpLCBnZXRBdHRyaWJ1
dGVFdmVudExpc3RlbmVyKGlkKSk7IH0KIAogICAgIC8vIEV2ZW50VGFyZ2V0IGltcGwKIAotICAg
IHZpcnR1YWwgdm9pZCBhZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRO
YW1lLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+LCBib29sIHVzZUNhcHR1cmUpOwotICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRO
YW1lLCBFdmVudExpc3RlbmVyKiwgYm9vbCB1c2VDYXB0dXJlKTsKKyAgICB2aXJ0dWFsIHZvaWQg
YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0
cjxFdmVudExpc3RlbmVyPiwgYm9vbCB1c2VDYXB0dXJlKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0
ZW5lciosIGJvb2wgdXNlQ2FwdHVyZSk7CiAgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQo
UGFzc1JlZlB0cjxFdmVudD4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB0eXBlZGVmIFZlY3RvcjxS
ZWZQdHI8RXZlbnRMaXN0ZW5lcj4gPiBMaXN0ZW5lclZlY3RvcjsKICAgICB0eXBlZGVmIEhhc2hN
YXA8QXRvbWljU3RyaW5nLCBMaXN0ZW5lclZlY3Rvcj4gRXZlbnRMaXN0ZW5lcnNNYXA7CkBAIC05
Niw0MCArNzYsNDAgQEAgcHVibGljOgogCiAgICAgLy8gRXhwbGljaXRseSBuYW1lZCBhdHRyaWJ1
dGUgZXZlbnQgbGlzdGVuZXIgaGVscGVycwogCi0gICAgdm9pZCBzZXRPbmNoZWNraW5nKFBhc3NS
ZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIpIHsgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5l
cihDSEVDS0lOR19FVkVOVCwgbGlzdGVuZXIpOyB9Ci0gICAgRXZlbnRMaXN0ZW5lciogb25jaGVj
a2luZygpIGNvbnN0IHsgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoQ0hFQ0tJTkdf
RVZFTlQpOyB9CisgICAgdm9pZCBzZXRPbmNoZWNraW5nKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5l
cj4gbGlzdGVuZXIpIHsgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihBcHBsaWNhdGlvbkNhY2hl
SG9zdDo6Q0hFQ0tJTkdfRVZFTlQsIGxpc3RlbmVyKTsgfQorICAgIEV2ZW50TGlzdGVuZXIqIG9u
Y2hlY2tpbmcoKSBjb25zdCB7IHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKEFwcGxp
Y2F0aW9uQ2FjaGVIb3N0OjpDSEVDS0lOR19FVkVOVCk7IH0KIAotICAgIHZvaWQgc2V0T25lcnJv
cihQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyKSB7IHNldEF0dHJpYnV0ZUV2ZW50
TGlzdGVuZXIoRVJST1JfRVZFTlQsIGxpc3RlbmVyKTt9Ci0gICAgRXZlbnRMaXN0ZW5lciogb25l
cnJvcigpIGNvbnN0IHsgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoRVJST1JfRVZF
TlQpOyB9CisgICAgdm9pZCBzZXRPbmVycm9yKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlz
dGVuZXIpIHsgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihBcHBsaWNhdGlvbkNhY2hlSG9zdDo6
RVJST1JfRVZFTlQsIGxpc3RlbmVyKTt9CisgICAgRXZlbnRMaXN0ZW5lciogb25lcnJvcigpIGNv
bnN0IHsgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoQXBwbGljYXRpb25DYWNoZUhv
c3Q6OkVSUk9SX0VWRU5UKTsgfQogCi0gICAgdm9pZCBzZXRPbm5vdXBkYXRlKFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIpIHsgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihOT1VQ
REFURV9FVkVOVCwgbGlzdGVuZXIpOyB9Ci0gICAgRXZlbnRMaXN0ZW5lciogb25ub3VwZGF0ZSgp
IGNvbnN0IHsgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoTk9VUERBVEVfRVZFTlQp
OyB9CisgICAgdm9pZCBzZXRPbm5vdXBkYXRlKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlz
dGVuZXIpIHsgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihBcHBsaWNhdGlvbkNhY2hlSG9zdDo6
Tk9VUERBVEVfRVZFTlQsIGxpc3RlbmVyKTsgfQorICAgIEV2ZW50TGlzdGVuZXIqIG9ubm91cGRh
dGUoKSBjb25zdCB7IHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKEFwcGxpY2F0aW9u
Q2FjaGVIb3N0OjpOT1VQREFURV9FVkVOVCk7IH0KIAotICAgIHZvaWQgc2V0T25kb3dubG9hZGlu
ZyhQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyKSB7IHNldEF0dHJpYnV0ZUV2ZW50
TGlzdGVuZXIoRE9XTkxPQURJTkdfRVZFTlQsIGxpc3RlbmVyKTsgfQotICAgIEV2ZW50TGlzdGVu
ZXIqIG9uZG93bmxvYWRpbmcoKSBjb25zdCB7IHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExpc3Rl
bmVyKERPV05MT0FESU5HX0VWRU5UKTsgfQorICAgIHZvaWQgc2V0T25kb3dubG9hZGluZyhQYXNz
UmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyKSB7IHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVu
ZXIoQXBwbGljYXRpb25DYWNoZUhvc3Q6OkRPV05MT0FESU5HX0VWRU5ULCBsaXN0ZW5lcik7IH0K
KyAgICBFdmVudExpc3RlbmVyKiBvbmRvd25sb2FkaW5nKCkgY29uc3QgeyByZXR1cm4gZ2V0QXR0
cmlidXRlRXZlbnRMaXN0ZW5lcihBcHBsaWNhdGlvbkNhY2hlSG9zdDo6RE9XTkxPQURJTkdfRVZF
TlQpOyB9CiAKLSAgICB2b2lkIHNldE9ucHJvZ3Jlc3MoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVy
PiBsaXN0ZW5lcikgeyBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKFBST0dSRVNTX0VWRU5ULCBs
aXN0ZW5lcik7IH0KLSAgICBFdmVudExpc3RlbmVyKiBvbnByb2dyZXNzKCkgY29uc3QgeyByZXR1
cm4gZ2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihQUk9HUkVTU19FVkVOVCk7IH0KKyAgICB2b2lk
IHNldE9ucHJvZ3Jlc3MoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lcikgeyBzZXRB
dHRyaWJ1dGVFdmVudExpc3RlbmVyKEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpQUk9HUkVTU19FVkVO
VCwgbGlzdGVuZXIpOyB9CisgICAgRXZlbnRMaXN0ZW5lciogb25wcm9ncmVzcygpIGNvbnN0IHsg
cmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoQXBwbGljYXRpb25DYWNoZUhvc3Q6OlBS
T0dSRVNTX0VWRU5UKTsgfQogCi0gICAgdm9pZCBzZXRPbnVwZGF0ZXJlYWR5KFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIpIHsgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihVUERB
VEVSRUFEWV9FVkVOVCwgbGlzdGVuZXIpOyB9Ci0gICAgRXZlbnRMaXN0ZW5lciogb251cGRhdGVy
ZWFkeSgpIGNvbnN0IHsgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoVVBEQVRFUkVB
RFlfRVZFTlQpOyB9CisgICAgdm9pZCBzZXRPbnVwZGF0ZXJlYWR5KFBhc3NSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gbGlzdGVuZXIpIHsgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihBcHBsaWNhdGlv
bkNhY2hlSG9zdDo6VVBEQVRFUkVBRFlfRVZFTlQsIGxpc3RlbmVyKTsgfQorICAgIEV2ZW50TGlz
dGVuZXIqIG9udXBkYXRlcmVhZHkoKSBjb25zdCB7IHJldHVybiBnZXRBdHRyaWJ1dGVFdmVudExp
c3RlbmVyKEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpVUERBVEVSRUFEWV9FVkVOVCk7IH0KIAotICAg
IHZvaWQgc2V0T25jYWNoZWQoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lcikgeyBz
ZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKENBQ0hFRF9FVkVOVCwgbGlzdGVuZXIpOyB9Ci0gICAg
RXZlbnRMaXN0ZW5lciogb25jYWNoZWQoKSBjb25zdCB7IHJldHVybiBnZXRBdHRyaWJ1dGVFdmVu
dExpc3RlbmVyKENBQ0hFRF9FVkVOVCk7IH0KKyAgICB2b2lkIHNldE9uY2FjaGVkKFBhc3NSZWZQ
dHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIpIHsgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihB
cHBsaWNhdGlvbkNhY2hlSG9zdDo6Q0FDSEVEX0VWRU5ULCBsaXN0ZW5lcik7IH0KKyAgICBFdmVu
dExpc3RlbmVyKiBvbmNhY2hlZCgpIGNvbnN0IHsgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlz
dGVuZXIoQXBwbGljYXRpb25DYWNoZUhvc3Q6OkNBQ0hFRF9FVkVOVCk7IH0KIAotICAgIHZvaWQg
c2V0T25vYnNvbGV0ZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyKSB7IHNldEF0
dHJpYnV0ZUV2ZW50TGlzdGVuZXIoT0JTT0xFVEVfRVZFTlQsIGxpc3RlbmVyKTsgfQotICAgIEV2
ZW50TGlzdGVuZXIqIG9ub2Jzb2xldGUoKSBjb25zdCB7IHJldHVybiBnZXRBdHRyaWJ1dGVFdmVu
dExpc3RlbmVyKE9CU09MRVRFX0VWRU5UKTsgfQorICAgIHZvaWQgc2V0T25vYnNvbGV0ZShQYXNz
UmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyKSB7IHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVu
ZXIoQXBwbGljYXRpb25DYWNoZUhvc3Q6Ok9CU09MRVRFX0VWRU5ULCBsaXN0ZW5lcik7IH0KKyAg
ICBFdmVudExpc3RlbmVyKiBvbm9ic29sZXRlKCkgY29uc3QgeyByZXR1cm4gZ2V0QXR0cmlidXRl
RXZlbnRMaXN0ZW5lcihBcHBsaWNhdGlvbkNhY2hlSG9zdDo6T0JTT0xFVEVfRVZFTlQpOyB9CiAK
ICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSBjb25zdDsKICAgICBET01BcHBsaWNhdGlvbkNhY2hlKiB0b0RPTUFwcGxpY2F0aW9uQ2Fj
aGUoKSB7IHJldHVybiB0aGlzOyB9CiAKLSAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiB0
b0V2ZW50TmFtZShFdmVudFR5cGUgZXZlbnRUeXBlKTsKLSAgICBzdGF0aWMgRXZlbnRUeXBlIHRv
RXZlbnRUeXBlKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnROYW1lKTsKKyAgICBzdGF0aWMgY29u
c3QgQXRvbWljU3RyaW5nJiB0b0V2ZW50VHlwZShBcHBsaWNhdGlvbkNhY2hlSG9zdDo6RXZlbnRJ
RCBpZCk7CisgICAgc3RhdGljIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpFdmVudElEIHRvRXZlbnRJ
RChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSk7CiAKIHByaXZhdGU6CiAgICAgRE9NQXBw
bGljYXRpb25DYWNoZShGcmFtZSopOwogCi0gICAgdm9pZCBjYWxsTGlzdGVuZXIoY29uc3QgQXRv
bWljU3RyaW5nJiBldmVudE5hbWUsIEV2ZW50TGlzdGVuZXIqKTsKKyAgICB2b2lkIGNhbGxMaXN0
ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciopOwogICAg
IAogICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KICAgICB2aXJ0
dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIHsgZGVyZWYoKTsgfQpAQCAtMTM3LDcgKzExNyw3
IEBAIHByaXZhdGU6CiAgICAgQXBwbGljYXRpb25DYWNoZUhvc3QqIGFwcGxpY2F0aW9uQ2FjaGVI
b3N0KCkgY29uc3Q7CiAgICAgYm9vbCBzd2FwQ2FjaGUoKTsKICAgICAKLSAgICBSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4gbV9hdHRyaWJ1dGVFdmVudExpc3RlbmVyc1tPQlNPTEVURV9FVkVOVCArIDFd
OworICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBtX2F0dHJpYnV0ZUV2ZW50TGlzdGVuZXJzW0Fw
cGxpY2F0aW9uQ2FjaGVIb3N0OjpPQlNPTEVURV9FVkVOVCArIDFdOwogCiAgICAgRXZlbnRMaXN0
ZW5lcnNNYXAgbV9ldmVudExpc3RlbmVyczsKIApJbmRleDogV2ViS2l0L21hYy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ2Nzc3KQorKysg
V2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAw
OS0wOC0wMyAgTWljaGFlbCBOb3JkbWFuICA8bWljaGFlbG5AZ29vZ2xlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjc4MjEKKworICAgICAgICBNb2RzIHRvIGtlZXAgdXAg
d2l0aCBBcHBsaWNhdGlvbkNhY2hlSG9zdCByZWZhY3RvcmluZy4KKworICAgICAgICAqIFdlYlZp
ZXcvV2ViRGF0YVNvdXJjZS5tbToKKyAgICAgICAgKC1bV2ViRGF0YVNvdXJjZSBfdHJhbnNmZXJB
cHBsaWNhdGlvbkNhY2hlOl0pOgorCiAyMDA5LTA3LTMwICBEYXJpbiBBZGxlciAgPGRhcmluQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4KSW5kZXg6IFdlYktp
dC9tYWMvV2ViVmlldy9XZWJEYXRhU291cmNlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMv
V2ViVmlldy9XZWJEYXRhU291cmNlLm1tCShyZXZpc2lvbiA0Njc3NykKKysrIFdlYktpdC9tYWMv
V2ViVmlldy9XZWJEYXRhU291cmNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMDEsNyArMjAxLDcg
QEAgc3RhdGljIGlubGluZSB2b2lkIGFkZFR5cGVzRnJvbUNsYXNzKE5TTQogICAgICAgICAKICAg
ICBOU1N0cmluZyAqY2FjaGVEaXIgPSBbTlNTdHJpbmcgX3dlYmtpdF9sb2NhbENhY2hlRGlyZWN0
b3J5V2l0aEJ1bmRsZUlkZW50aWZpZXI6ZGVzdGluYXRpb25CdW5kbGVJZGVudGlmaWVyXTsKICAg
ICAKLSAgICByZXR1cm4gQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnRyYW5zZmVyQXBwbGljYXRp
b25DYWNoZShjYWNoZURpciwgbG9hZGVyLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpKTsKKyAgICBy
ZXR1cm4gQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlQ29weU9mQ2FjaGUoY2FjaGVEaXIs
IGxvYWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKSk7CiB9CiAKIEBlbmQK
</data>
<flag name="review"
          id="18264"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>