<?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>31569</bug_id>
          
          <creation_ts>2009-11-16 15:37:36 -0800</creation_ts>
          <short_desc>Initial implementation of WebKitSharedScript and SharedScriptContext</short_desc>
          <delta_ts>2009-11-24 22:05:19 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>31317</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dmitry Titov">dimich</reporter>
          <assigned_to name="Dmitry Titov">dimich</assigned_to>
          <cc>ap</cc>
    
    <cc>fishd</cc>
    
    <cc>levin</cc>
    
    <cc>mjs</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>164110</commentid>
    <comment_count>0</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-11-16 15:37:36 -0800</bug_when>
    <thetext>This is another step of implementing GlobalScript feature, as described in bug 31317.

Includes initial IDL files for both, loading of initial script, firing of &apos;load&apos; event and GlobalScriptContext lifetime.

It compiles with or without ENABLE_GLOBAL_SCRIPT, but JS bindings, tests and other port&apos;s build files will come separately (too avoid a huge patch).

The WebKitGlobalScript is the DOM object that returns, wrapped, from a WebKitGlobalScript constructor. It has a property &apos;context&apos; that exposes inner global context.

The WebKitGlobalScriptRepository contains a list of all running GlobalScriptContexts and connects document to them using (origin, url, name) identification. Each GlobalScript holds a list of all documents that are connected to it. When Documents get &apos;detached&apos;, they get removed from that list, and once the document list of a GloballScriptContext becomes empty, it starts self-destruction timer which deletes it in a few seconds until there is a new Document that connects to it.

When GlobalScriptContext is initially created, the script indentified by URL is loaded and executed, after which all WebKitGlobalScripts that requested the same GlobalScriptContext will get the &apos;load&apos; event and their &apos;context&apos; property will return the GlobalScriptContext.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164111</commentid>
    <comment_count>1</comment_count>
      <attachid>43331</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-11-16 15:56:00 -0800</bug_when>
    <thetext>Created attachment 43331
Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165943</commentid>
    <comment_count>2</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-11-23 14:53:55 -0800</bug_when>
    <thetext>Updating the title because of the name change. See bug 31317 for related discussion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165944</commentid>
    <comment_count>3</comment_count>
      <attachid>43737</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-11-23 14:54:50 -0800</bug_when>
    <thetext>Created attachment 43737
Patch updated for the name change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165961</commentid>
    <comment_count>4</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-11-23 16:22:13 -0800</bug_when>
    <thetext>fwiw, I&apos;m starting to review this. I should finish by tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166153</commentid>
    <comment_count>5</comment_count>
      <attachid>43737</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-11-24 10:28:09 -0800</bug_when>
    <thetext>Comment on attachment 43737
Patch updated for the name change.

&gt; diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
&gt; +        Initial implementation of WebKitSharedScript and SharedScriptContext
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=31569
&gt; +
&gt; +        No new tests since there is no bindings yet (soon to come).

s/is/are/

&gt; +        * workers/WorkerScriptLoader.cpp:
&gt; +        (WebCore::WorkerScriptLoader::loadSynchronously): Changed ASSERT because this loader can work with SharedScript as well.

Then the class is now misnamed.

&gt; diff --git a/WebCore/shared-script/SharedScriptContext.cpp b/WebCore/shared-script/SharedScriptContext.cpp

regarding &quot;shared-script&quot; -- There seem to be a mix of directory names either NamedLikeThis or like-this (e.g. WebCore, WebKitTools), but in my cursory examination NamedLikeThis seems more common.

&gt; +#include &quot;config.h&quot;
&gt; +
&gt; +#if ENABLE(SHARED_SCRIPT)
&gt; +
&gt; +#include &quot;SharedScriptContext.h&quot;

&gt; +#include &quot;SharedScriptController.h&quot;

This one is out of place.

&gt; +#include &quot;Event.h&quot;
&gt; +#include &quot;EventException.h&quot;
&gt; +#include &quot;NotImplemented.h&quot;
&gt; +#include &quot;ScriptSourceCode.h&quot;
&gt; +#include &quot;scriptValue.h&quot;

Should be ScriptValue.h

&gt; +#include &quot;SecurityOrigin.h&quot;
&gt; +#include &quot;WebKitSharedScriptRepository.h&quot;
&gt; +
&gt; +namespace WebCore {
&gt; +
&gt; +// Interval to allow orphaned SharedScriptContext to gain potential new owner.
&gt; +// This can happen on navigation when both pages connect to the same SharedScript.
&gt; +static const double destructionInterval = 5.0;

Is this part of the feature in dispute right now?

&gt; +SharedScriptContext::SharedScriptContext(const String&amp; name, const KURL&amp; url, PassRefPtr&lt;SecurityOrigin&gt; origin)
&gt; +    : m_name(name)
&gt; +    , m_url(url)
&gt; +    , m_script(new SharedScriptController(this))
&gt; +    , m_destructionTimer(this, &amp;SharedScriptContext::destructionTimerFired)
&gt; +    , m_loaded(false)
&gt; +{
&gt; +    setSecurityOrigin(origin);
&gt; +    ref(); // Matching deref is in destructionTimer callback.

s/destructionTimer/destructionTimerFired/ ?

&gt; +void SharedScriptContext::addMessage(MessageDestination destination, MessageSource source, MessageType type, MessageLevel level, const String&amp; message, unsigned lineNumber, const String&amp; sourceURL)
&gt; +{
&gt; +    // FIXME: figure out console/incspector story for SharedScript. Maybe similar to SharedWorkers.

typo: incspector (throughout).

&gt; +bool SharedScriptContext::matches(const String&amp; name, PassRefPtr&lt;SecurityOrigin&gt; origin, const KURL&amp; urlToMatch) const

Since this method doesn&apos;t take ownership of origin, it should be a SecurityOrigin* instead of a PassRefPtr&lt;SecurityOrigin&gt;.
Actually SecurityOrigin&amp; would be even better since this method always wants it to be non-0.

&gt; +{
...
&gt; +    // If the names are both empty, compares the URLs instead per the Web Workers spec.

s/per/like/
I feel that you don&apos;t need to do something per the Web Workers spec since this isn&apos;t Web Workers but it is good to have a consistent pattern.
(It should be per the SharedScript spec.)

&gt; +void SharedScriptContext::addToDocumentsList(ScriptExecutionContext* context)

Why does it say Document but take a ScriptExecutionContext?

I guess you don&apos;t need everything a document provides and the SEC is sufficient but it seems like a mixed message. I guess you could take a Document* but store it as an SEC.

&gt; +void SharedScriptContext::removeFromDocumentList(ScriptExecutionContext* context)

Why not only start the timer when &quot;if (!m_documentList.size())&quot;?
&gt; +    m_destructionTimer.startOneShot(destructionInterval);

&gt; +void SharedScriptContext::postTask(PassOwnPtr&lt;Task&gt; task)
&gt; +{
&gt; +    // FIXME: Need to implement ScriptExecutionContext::postTaskToMainThread to share between Document and SharedScritpContext.

typo: SharedScritpContext.

&gt; +ScriptExecutionContext* SharedScriptContext::scriptExecutionContext() const

Why is this const? It doesn&apos;t look like a const operation?

&gt; +{
&gt; +    return const_cast&lt;SharedScriptContext*&gt;(this);
&gt; +}

&gt; diff --git a/WebCore/shared-script/SharedScriptContext.h b/WebCore/shared-script/SharedScriptContext.h

&gt; +namespace WebCore {
&gt; +
&gt; +class Document;
&gt; +class SharedScriptController;
&gt; +class KURL;

KURL is out of sort order.

&gt; +class String;

&gt; +class SharedScriptContext : public RefCounted&lt;SharedScriptContext&gt;, public ScriptExecutionContext, public EventTarget {
&gt; +public:

&gt; +    virtual ~SharedScriptContext();
Does the destructor need to be public? (Since this is ref counted, I expect that it should be either private or protected ).

&gt; +    // JS wrapper and EventTaret support.

typo: EventTaret

&gt; +    bool matches(const String&amp; name, PassRefPtr&lt;SecurityOrigin&gt; origin, const KURL&amp; urlToMatch) const;

remove param name &quot;origin&quot;


&gt; diff --git a/WebCore/shared-script/WebKitSharedScript.cpp b/WebCore/shared-script/WebKitSharedScript.cpp

&gt; +#include &quot;Event.h&quot;
&gt; +#include &quot;EventException.h&quot;
&gt; +#include &quot;SharedScriptContext.h&quot;

#include &quot;Shared.. is out of order.

&gt; +WebKitSharedScript::WebKitSharedScript(const String&amp; url, const String&amp; name, ScriptExecutionContext* context, ExceptionCode&amp; ec)

&gt; +    // FIXME: This should use the dynamic global scope (bug #27887)

Add &quot;.&quot; to end of comment.

&gt; diff --git a/WebCore/shared-script/WebKitSharedScript.h b/WebCore/shared-script/WebKitSharedScript.h

&gt; +        void setContext(PassRefPtr&lt;SharedScriptContext&gt; context);
&gt; +
&gt; +        // When fired, will set the innerContext into this WebKitSharedScript and dispatch &apos;load&apos; event.

s/will/this will/


&gt; diff --git a/WebCore/shared-script/WebKitSharedScriptRepository.cpp b/WebCore/shared-script/WebKitSharedScriptRepository.cpp

&gt; +#include &quot;ActiveDOMObject.h&quot;
&gt; +#include &quot;Document.h&quot;
&gt; +#include &quot;Event.h&quot;
&gt; +#include &quot;EventNames.h&quot;
&gt; +#include &quot;ExceptionCode.h&quot;
&gt; +#include &quot;SharedScriptContext.h&quot;

Shared... is out of order.

&gt; +#include &quot;SecurityOrigin.h&quot;

&gt; +// Helper class to load the initial script on behalf of a SharedScript.
&gt; +class ScriptLoader : public RefCounted&lt;ScriptLoader&gt;, public ActiveDOMObject, private WorkerScriptLoaderClient {

Should this be &quot;SharedScriptLoader&quot;? It doesn&apos;t load all scripts, so ScriptLoader seems a little too broad.

&gt; +void ScriptLoader::notifyFinished()
&gt; +{
&gt; +    if (m_scriptLoader-&gt;failed())
&gt; +        m_sharedScript-&gt;dispatchEvent(Event::create(eventNames().errorEvent, false, true));
&gt; +    else {
&gt; +        // If another loader have not yet initialized the SharedScriptContext - do so.

s/have/has/
s/-/,/

&gt; +    m_sharedScript-&gt;unsetPendingActivity(m_sharedScript.get());
&gt; +    unsetPendingActivity(this); // This frees this object - must be the last action in this function.

s/-/so it/

&gt; +void WebKitSharedScriptRepository::documentDetached(Document* document)
&gt; +{
&gt; +    UNUSED_PARAM(document);

document is used.

&gt; +    WebKitSharedScriptRepository&amp; repository = instance();
&gt; +    for (unsigned i = 0; i &lt; repository.m_sharedScriptContexts.size(); i++)
&gt; +        repository.m_sharedScriptContexts[i]-&gt;removeFromDocumentList(document);
&gt; +}

&gt; +void WebKitSharedScriptRepository::connectToSharedScript(PassRefPtr&lt;WebKitSharedScript&gt; sharedScript, const KURL&amp; url, const String&amp; name, ExceptionCode&amp; ec)
&gt; +{
&gt; +    ASSERT(sharedScript-&gt;scriptExecutionContext()-&gt;securityOrigin()-&gt;canAccess(SecurityOrigin::create(url).get()));
&gt; +    RefPtr&lt;SharedScriptContext&gt; innerContext = getSharedScriptContext(name, url);
&gt; +
&gt; +    innerContext-&gt;addToDocumentsList(sharedScript-&gt;scriptExecutionContext());

Should this document get added before the url check is done?

&gt; +    if (innerContext-&gt;url() != url) {
&gt; +        // SharedScript with same name but different URL already exists - return an error.
&gt; +        ec = URL_MISMATCH_ERR;
&gt; +        return;
&gt; +    }
&gt; +    // If SharedScriptContext is already running, just schedule a load event - otherwise, kick off a loader to load the script.
&gt; +    if (innerContext-&gt;loaded())
&gt; +        sharedScript-&gt;scheduleLoadEvent(innerContext);
&gt; +    else {
&gt; +        RefPtr&lt;ScriptLoader&gt; loader = adoptRef(new ScriptLoader(sharedScript, innerContext.release()));

Ideally there would be a create method (to match the general pattern followed for RefCounted objects).

&gt; +        loader-&gt;load(url); // Pending activity will keep the loader alive.

This has the potential to do multiple loads of the same url for the same SharedScript. Then, it could fail for the first one and succeed later for another, which leaves me confused. A document gets some notification that the SharedScript failed to load but then it does load.

It would be better to only do one load. (You could track this by changing from a bool to track &quot;loaded&quot; to and enum to track when the laod starts as well or when it failed. It seems that if a shared script fails to load, then another document tries to get it, it shouldn&apos;t just appear.


&gt; diff --git a/WebCore/shared-script/WebKitSharedScriptRepository.h b/WebCore/shared-script/WebKitSharedScriptRepository.h

&gt; +namespace WebCore {
&gt; +
&gt; +typedef int ExceptionCode;
&gt; +
&gt; +class Document;
&gt; +class KURL;
&gt; +class SharedScriptContext;
&gt; +class WebKitSharedScript;
&gt; +class String;

Please sort.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166277</commentid>
    <comment_count>6</comment_count>
      <attachid>43806</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-11-24 14:35:03 -0800</bug_when>
    <thetext>Created attachment 43806
Updated for David&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166281</commentid>
    <comment_count>7</comment_count>
      <attachid>43809</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-11-24 14:37:45 -0800</bug_when>
    <thetext>Created attachment 43809
Updated per David&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166285</commentid>
    <comment_count>8</comment_count>
      <attachid>43809</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-11-24 14:55:48 -0800</bug_when>
    <thetext>Comment on attachment 43809
Updated per David&apos;s comments.


&gt; diff --git a/WebCore/sharedScript/SharedScriptContext.cpp b/WebCore/sharedScript/SharedScriptContext.cpp

&gt; +void SharedScriptContext::addToDocumentsList(Document* context)

Would be nice to call it document instead of context.

&gt; +void SharedScriptContext::removeFromDocumentList(Document* context)

Ditto.

&gt; +void SharedScriptContext::removeFromDocumentList(Document* context)

Ditto.

It would be nice to not set-up the timer if it isn&apos;t needed.

&gt; +    m_destructionTimer.startOneShot(destructionInterval);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166331</commentid>
    <comment_count>9</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-11-24 18:43:37 -0800</bug_when>
    <thetext>Thanks for review!

Capturing the details of the chat we had offline:

It makes sense to rename workers/WorkerScriptLoader.h,cpp into ScriptLoader and move it to WebCore/loader. It has no Worker semantics.

&gt; &gt; +static const double destructionInterval = 5.0;
&gt; Is this part of the feature in dispute right now?

The &quot;navigation hop&quot; which would check the URL of the next document during navigation is indeed removed from the current implementation plan. However, I still need the final destruction of the SharedScriptContext to be an async operation, so even if I use 0 here there is still a possibility that a new document will come and hook to the still existing SharedScriptContext which is ok. It could be any random number here. It is basically &apos;non deterministic&apos; delay.

&gt; &gt; +        loader-&gt;load(url); // Pending activity will keep the loader alive.
&gt; 
&gt; This has the potential to do multiple loads of the same url for the same
&gt; SharedScript. Then, it could fail for the first one and succeed later for
&gt; another, which leaves me confused. A document gets some notification that the
&gt; SharedScript failed to load but then it does load.
&gt; 
&gt; It would be better to only do one load. (You could track this by changing from
&gt; a bool to track &quot;loaded&quot; to and enum to track when the laod starts as well or
&gt; when it failed. It seems that if a shared script fails to load, then another
&gt; document tries to get it, it shouldn&apos;t just appear.

Unfortunately, at the moment we depend on a ThreadabkeLoader to load the script, which is using the owner Document. So if more then one page requests the same SharedScript and then one is destroyed while loading the script, the load may never happen so we start load on all documents is the script is not yet loaded and then the first one wins. It&apos;s the same algorithm as SharedWorkers do. It is another indication that we do need DocumentlessLoader (naming?) and I&apos;lltry to address this later (XHR in SharedWorkers and SharedScript needs that too).

Will update with last comments and land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166353</commentid>
    <comment_count>10</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-11-24 22:05:19 -0800</bug_when>
    <thetext>Landed: http://trac.webkit.org/changeset/51374</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43331</attachid>
            <date>2009-11-16 15:56:00 -0800</date>
            <delta_ts>2009-11-23 14:54:50 -0800</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>57735</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NmEyZjNjNy4uYzU0Mjg4ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5NSBAQAorMjAwOS0xMS0xNiAgRG1pdHJ5IFRpdG92
ICA8ZGltaWNoQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBJbml0aWFsIGltcGxlbWVudGF0aW9uIG9mIFdlYktpdEdsb2JhbFNj
cmlwdCBhbmQgR2xvYmFsU2NyaXB0Q29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzE1NjkKKworICAgICAgICBObyBuZXcgdGVzdHMgc2luY2Ug
dGhlcmUgaXMgbm8gYmluZGluZ3MgeWV0IChzb29uIHRvIGNvbWUpLgorCisgICAgICAgICogRGVy
aXZlZFNvdXJjZXMubWFrZTogQWRkIFdlYktpdEdsb2JhbFNjcmlwdCBhbmQgR2xvYmFsU2NyaXB0
Q29udGV4dCB0byBhIGxpc3Qgb2YgaWRsIGZpbGVzLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRldGFjaCk6IE5vdGlmeSBXZWJLaXRHbG9iYWxTY3JpcHRS
ZXBvc2l0b3J5IHRoYXQgZG9jdW1lbnQgaXMgZGV0YWNoaW5nLgorICAgICAgICAqIGRvbS9FdmVu
dFRhcmdldC5jcHA6IEFkZCBuZXcgY2FzdGluZyBtZXRob2RzLCBzaW5jZSB0aGUgbmV3IHR5cGVz
IGFyZSBFdmVudFRhcmdldHMuCisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdldDo6dG9XZWJL
aXRHbG9iYWxTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJnZXQ6OnRvR2xvYmFs
U2NyaXB0Q29udGV4dCk6CisgICAgICAgICogZG9tL0V2ZW50VGFyZ2V0Lmg6IERpdHRvCisgICAg
ICAgICogZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmlzR2xvYmFsU2NyaXB0Q29udGV4dCk6IE5ldyB2aXJ0dWFs
IG1ldGhvZCwgc2luY2UgdGhlcmUgaXMgYSBuZXcgdHlwZSBvZiBjb250ZXh0LgorCisgICAgICAg
ICogZ2xvYmFsLXNjcmlwdC9HbG9iYWxTY3JpcHRDb250ZXh0LmNwcDogQWRkZWQuIFNpbWlsYXIg
dG8gV29ya2VyQ29udGV4dCwgYnV0IHcvbyB0aHJlYWRpbmcuCisgICAgICAgIChXZWJDb3JlOjpH
bG9iYWxTY3JpcHRDb250ZXh0OjpHbG9iYWxTY3JpcHRDb250ZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6Okdsb2JhbFNjcmlwdENvbnRleHQ6On5HbG9iYWxTY3JpcHRDb250ZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6Okdsb2JhbFNjcmlwdENvbnRleHQ6OmNsZWFyU2NyaXB0KToKKyAgICAgICAgKFdl
YkNvcmU6Okdsb2JhbFNjcmlwdENvbnRleHQ6OnZpcnR1YWxVUkwpOgorICAgICAgICAoV2ViQ29y
ZTo6R2xvYmFsU2NyaXB0Q29udGV4dDo6dmlydHVhbENvbXBsZXRlVVJMKToKKyAgICAgICAgKFdl
YkNvcmU6Okdsb2JhbFNjcmlwdENvbnRleHQ6OnJlcG9ydEV4Y2VwdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpHbG9iYWxTY3JpcHRDb250ZXh0OjphZGRNZXNzYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6Okdsb2JhbFNjcmlwdENvbnRleHQ6OnJlc291cmNlUmV0cmlldmVkQnlYTUxIdHRwUmVxdWVz
dCk6CisgICAgICAgIChXZWJDb3JlOjpHbG9iYWxTY3JpcHRDb250ZXh0OjpzY3JpcHRJbXBvcnRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpHbG9iYWxTY3JpcHRDb250ZXh0OjptYXRjaGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6Okdsb2JhbFNjcmlwdENvbnRleHQ6OmFkZFRvRG9jdW1lbnRzTGlzdCk6
CisgICAgICAgIChXZWJDb3JlOjpHbG9iYWxTY3JpcHRDb250ZXh0OjpkZXN0cnVjdGlvblRpbWVy
RmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6R2xvYmFsU2NyaXB0Q29udGV4dDo6cmVtb3ZlRnJv
bURvY3VtZW50TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpHbG9iYWxTY3JpcHRDb250ZXh0Ojps
b2FkKToKKyAgICAgICAgKFdlYkNvcmU6Okdsb2JhbFNjcmlwdENvbnRleHQ6OnBvc3RUYXNrKToK
KyAgICAgICAgKFdlYkNvcmU6Okdsb2JhbFNjcmlwdENvbnRleHQ6OmV2ZW50VGFyZ2V0RGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpHbG9iYWxTY3JpcHRDb250ZXh0OjplbnN1cmVFdmVudFRhcmdl
dERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R2xvYmFsU2NyaXB0Q29udGV4dDo6c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCk6CisgICAgICAgICogZ2xvYmFsLXNjcmlwdC9HbG9iYWxTY3JpcHRDb250
ZXh0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R2xvYmFsU2NyaXB0Q29udGV4dDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okdsb2JhbFNjcmlwdENvbnRleHQ6OmlzR2xvYmFsU2Ny
aXB0Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHbG9iYWxTY3JpcHRDb250ZXh0Ojp1c2Vy
QWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R2xvYmFsU2NyaXB0Q29udGV4dDo6dG9HbG9iYWxT
Y3JpcHRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Okdsb2JhbFNjcmlwdENvbnRleHQ6OnNl
bGYpOgorICAgICAgICAoV2ViQ29yZTo6R2xvYmFsU2NyaXB0Q29udGV4dDo6c2NyaXB0KToKKyAg
ICAgICAgKFdlYkNvcmU6Okdsb2JhbFNjcmlwdENvbnRleHQ6OmxvYWRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpHbG9iYWxTY3JpcHRDb250ZXh0OjpuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Okds
b2JhbFNjcmlwdENvbnRleHQ6OnJlZkV2ZW50VGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6Okds
b2JhbFNjcmlwdENvbnRleHQ6OmRlcmVmRXZlbnRUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6
R2xvYmFsU2NyaXB0Q29udGV4dDo6cmVmU2NyaXB0RXhlY3V0aW9uQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpHbG9iYWxTY3JpcHRDb250ZXh0OjpkZXJlZlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQpOgorICAgICAgICAqIGdsb2JhbC1zY3JpcHQvR2xvYmFsU2NyaXB0Q29udGV4dC5pZGw6IEFk
ZGVkLgorCisgICAgICAgICogZ2xvYmFsLXNjcmlwdC9HbG9iYWxTY3JpcHRDb250cm9sbGVyLmg6
IAorICAgICAgICBBZGRlZC4gRW1wdHkgaW1wbGVtZW50YXRpb24gb2YgYSBTY3JpcHRDb250cm9s
bGVyLCB3aWxsIGNvbWUgbGF0ZXIgYXMgcGFydCBvZiBiaW5kaW5ncy4gTmVlZGVkIHRvIGNvbXBp
bGUuCisKKyAgICAgICAgKiBnbG9iYWwtc2NyaXB0L1dlYktpdEdsb2JhbFNjcmlwdC5jcHA6IEFk
ZGVkLiBFdmVudFRhcmdldC1iYXNlZCBET00gb2JqZWN0LgorICAgICAgICAoV2ViQ29yZTo6V2Vi
S2l0R2xvYmFsU2NyaXB0OjpXZWJLaXRHbG9iYWxTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViS2l0R2xvYmFsU2NyaXB0Ojp+V2ViS2l0R2xvYmFsU2NyaXB0KToKKyAgICAgICAgKFdlYkNv
cmU6OldlYktpdEdsb2JhbFNjcmlwdDo6c2V0Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpM
b2FkRXZlbnRUYXNrOjpjcmVhdGUpOiBGaXJlcyBhc3luY2hyb25vdXMgJ2xvYWQnIGV2ZW50IHdo
ZW4gdW5kZXJseWluZyBHbG9iYWxTY3JpcHRDb250ZXh0IGlzIGluaXRpYWxpemVkLgorICAgICAg
ICAoV2ViQ29yZTo6TG9hZEV2ZW50VGFzazo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29y
ZTo6TG9hZEV2ZW50VGFzazo6TG9hZEV2ZW50VGFzayk6CisgICAgICAgIChXZWJDb3JlOjpXZWJL
aXRHbG9iYWxTY3JpcHQ6OnNjaGVkdWxlTG9hZEV2ZW50KToKKyAgICAgICAgKiBnbG9iYWwtc2Ny
aXB0L1dlYktpdEdsb2JhbFNjcmlwdC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYktp
dEdsb2JhbFNjcmlwdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdEdsb2JhbFNj
cmlwdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRH
bG9iYWxTY3JpcHQ6OnRvV2ViS2l0R2xvYmFsU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YktpdEdsb2JhbFNjcmlwdDo6Y29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRHbG9i
YWxTY3JpcHQ6OnJlZkV2ZW50VGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdEdsb2Jh
bFNjcmlwdDo6ZGVyZWZFdmVudFRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRHbG9i
YWxTY3JpcHQ6OmV2ZW50VGFyZ2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRHbG9i
YWxTY3JpcHQ6OmVuc3VyZUV2ZW50VGFyZ2V0RGF0YSk6CisgICAgICAgICogZ2xvYmFsLXNjcmlw
dC9XZWJLaXRHbG9iYWxTY3JpcHQuaWRsOiBBZGRlZC4KKworICAgICAgICAqIGdsb2JhbC1zY3Jp
cHQvV2ViS2l0R2xvYmFsU2NyaXB0UmVwb3NpdG9yeS5jcHA6IEFkZGVkLiBJbXBsZW1lbnRzIGEg
bGlzdCBvZiBydW5uaW5nIEdsb2JhbFNjcmlwdENvbnRleHRzLgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0TG9hZGVyOjpTY3JpcHRMb2FkZXIpOiBUaGUgaGVscGVyIGNsYXNzIHRvIGxvYWQgYW4g
aW5pdGlhbCBzY3JpcHQgb2YgR2xvYmFsU2NyaXB0Q29udGV4dC4KKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdExvYWRlcjo6bG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRMb2FkZXI6Om5v
dGlmeUZpbmlzaGVkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdEdsb2JhbFNjcmlwdFJlcG9z
aXRvcnk6Omluc3RhbmNlKTogUmVwb3NpdG9yeSBpcyBhIHN0YXRpYyBnbG9iYWwuCisgICAgICAg
IChXZWJDb3JlOjpXZWJLaXRHbG9iYWxTY3JpcHRSZXBvc2l0b3J5Ojpjb25uZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYktpdEdsb2JhbFNjcmlwdFJlcG9zaXRvcnk6OmRvY3VtZW50RGV0YWNo
ZWQpOiBDYWxsZWQgZnJvbSBEb2N1bWVudDo6ZGV0YWNoKCkuCisgICAgICAgIChXZWJDb3JlOjpX
ZWJLaXRHbG9iYWxTY3JpcHRSZXBvc2l0b3J5OjpyZW1vdmVHbG9iYWxTY3JpcHRDb250ZXh0KTog
Q2FsbGVkIGZyb20gfkdsb2JhbFNjcmlwdENvbnRleHQoKS4KKyAgICAgICAgKFdlYkNvcmU6Oldl
YktpdEdsb2JhbFNjcmlwdFJlcG9zaXRvcnk6OmNvbm5lY3RUb0dsb2JhbFNjcmlwdCk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJLaXRHbG9iYWxTY3JpcHRSZXBvc2l0b3J5OjpnZXRHbG9iYWxTY3Jp
cHRDb250ZXh0KToKKyAgICAgICAgKiBnbG9iYWwtc2NyaXB0L1dlYktpdEdsb2JhbFNjcmlwdFJl
cG9zaXRvcnkuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRHbG9iYWxTY3JpcHRS
ZXBvc2l0b3J5OjpXZWJLaXRHbG9iYWxTY3JpcHRSZXBvc2l0b3J5KToKKworICAgICAgICAqIHdv
cmtlcnMvV29ya2VyU2NyaXB0TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNj
cmlwdExvYWRlcjo6bG9hZFN5bmNocm9ub3VzbHkpOiBDaGFuZ2VkIEFTU0VSVCBiZWNhdXNlIHRo
aXMgbG9hZGVyIGNhbiB3b3JrIHdpdGggR2xvYmFsU2NyaXB0IGFzIHdlbGwuCisKIDIwMDktMTEt
MTIgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCmRpZmYgLS1naXQgYS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2Vz
Lm1ha2UgYi9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggNTg0NDYwOS4uMDdmZjQ3
NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1dlYkNvcmUv
RGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMzIsNiArMzIsNyBAQCBWUEFUSCA9IFwKICAgICAkKFdl
YkNvcmUpL2JpbmRpbmdzL29iamMgXAogICAgICQoV2ViQ29yZSkvY3NzIFwKICAgICAkKFdlYkNv
cmUpL2RvbSBcCisgICAgJChXZWJDb3JlKS9nbG9iYWwtc2NyaXB0IFwKICAgICAkKFdlYkNvcmUp
L2h0bWwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMgXAogICAgICQoV2ViQ29yZSkvaW5z
cGVjdG9yIFwKQEAgLTEyNyw2ICsxMjgsNyBAQCBET01fQ0xBU1NFUyA9IFwKICAgICBGaWxlTGlz
dCBcCiAgICAgR2VvbG9jYXRpb24gXAogICAgIEdlb3Bvc2l0aW9uIFwKKyAgICBHbG9iYWxTY3Jp
cHRDb250ZXh0IFwKICAgICBIVE1MQWxsQ29sbGVjdGlvbiBcCiAgICAgSFRNTEFuY2hvckVsZW1l
bnQgXAogICAgIEhUTUxBcHBsZXRFbGVtZW50IFwKQEAgLTQwMCw2ICs0MDIsNyBAQCBET01fQ0xB
U1NFUyA9IFwKICAgICBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlIFwKICAgICBXZWJLaXRDU1NNYXRy
aXggXAogICAgIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlIFwKKyAgICBXZWJLaXRHbG9iYWxTY3Jp
cHQgXAogICAgIFdlYktpdFBvaW50IFwKICAgICBXZWJLaXRUcmFuc2l0aW9uRXZlbnQgXAogICAg
IFdlYlNvY2tldCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IGI2MzI2M2EuLmIwNTIyYTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC0yNDIsNiArMjQyLDE0IEBACiAJCTE4NUJDRjI5MEYzMjc5Q0UwMDBFQTI2
MiAvKiBUaHJlYWRUaW1lcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDE4NUJDRjI3MEYzMjc5Q0UwMDBFQTI2MiAvKiBUaHJlYWRUaW1lcnMuaCAqLzsg
fTsKIAkJMTg4NjA0QjMwRjJFNjU0QTAwMEI2NDQzIC8qIERPTVRpbWVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE4ODYwNEIxMEYyRTY1NEEwMDBC
NjQ0MyAvKiBET01UaW1lci5jcHAgKi87IH07CiAJCTE4ODYwNEI0MEYyRTY1NEEwMDBCNjQ0MyAv
KiBET01UaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTg4NjA0QjIwRjJFNjU0QTAwMEI2NDQzIC8qIERPTVRpbWVyLmggKi87IH07CisJCTE4QzVG
Q0E1MTBBMzk5MUYwMDQ4NDM4RCAvKiBXZWJLaXRHbG9iYWxTY3JpcHQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMThDNUZDQTAxMEEzOTkxRjAwNDg0
MzhEIC8qIFdlYktpdEdsb2JhbFNjcmlwdC5jcHAgKi87IH07CisJCTE4QzVGQ0E2MTBBMzk5MUYw
MDQ4NDM4RCAvKiBXZWJLaXRHbG9iYWxTY3JpcHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE4QzVGQ0ExMTBBMzk5MUYwMDQ4NDM4RCAvKiBXZWJLaXRH
bG9iYWxTY3JpcHQuaCAqLzsgfTsKKwkJMThDNUZDQTcxMEEzOTkxRjAwNDg0MzhEIC8qIFdlYktp
dEdsb2JhbFNjcmlwdC5pZGwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDE4QzVGQ0EyMTBBMzk5MUYwMDQ4NDM4RCAvKiBXZWJLaXRHbG9iYWxTY3JpcHQu
aWRsICovOyB9OworCQkxOEM1RkNBODEwQTM5OTFGMDA0ODQzOEQgLyogV2ViS2l0R2xvYmFsU2Ny
aXB0UmVwb3NpdG9yeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxOEM1RkNBMzEwQTM5OTFGMDA0ODQzOEQgLyogV2ViS2l0R2xvYmFsU2NyaXB0UmVw
b3NpdG9yeS5jcHAgKi87IH07CisJCTE4QzVGQ0E5MTBBMzk5MUYwMDQ4NDM4RCAvKiBXZWJLaXRH
bG9iYWxTY3JpcHRSZXBvc2l0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxOEM1RkNBNDEwQTM5OTFGMDA0ODQzOEQgLyogV2ViS2l0R2xvYmFsU2Ny
aXB0UmVwb3NpdG9yeS5oICovOyB9OworCQkxOEM1RkNCNzEwQTNDNkYyMDA0ODQzOEQgLyogR2xv
YmFsU2NyaXB0Q29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxOEM1RkNCNDEwQTNDNkYyMDA0ODQzOEQgLyogR2xvYmFsU2NyaXB0Q29udGV4
dC5jcHAgKi87IH07CisJCTE4QzVGQ0I4MTBBM0M2RjIwMDQ4NDM4RCAvKiBHbG9iYWxTY3JpcHRD
b250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
OEM1RkNCNTEwQTNDNkYyMDA0ODQzOEQgLyogR2xvYmFsU2NyaXB0Q29udGV4dC5oICovOyB9Owor
CQkxOEM1RkNCOTEwQTNDNkYyMDA0ODQzOEQgLyogR2xvYmFsU2NyaXB0Q29udGV4dC5pZGwgaW4g
UmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE4QzVGQ0I2MTBB
M0M2RjIwMDQ4NDM4RCAvKiBHbG9iYWxTY3JpcHRDb250ZXh0LmlkbCAqLzsgfTsKIAkJMThGODMx
QjgwRkQ0OEM3ODAwRDhDNTZCIC8qIFdvcmtlckxvYWRlclByb3h5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxOEY4MzFCNzBGRDQ4Qzc4MDBEOEM1NkIg
LyogV29ya2VyTG9hZGVyUHJveHkuaCAqLzsgfTsKIAkJMUEwRDU3MzYwQTVDNzdGRTAwN0VERDRD
IC8qIE92ZXJmbG93RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUEwRDU3MzQwQTVDNzdGRTAwN0VERDRDIC8qIE92ZXJmbG93RXZlbnQuY3Bw
ICovOyB9OwogCQkxQTBENTczNzBBNUM3N0ZFMDA3RURENEMgLyogT3ZlcmZsb3dFdmVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEwRDU3MzUwQTVD
NzdGRTAwN0VERDRDIC8qIE92ZXJmbG93RXZlbnQuaCAqLzsgfTsKQEAgLTU0MjcsNiArNTQzNSwx
NCBAQAogCQkxODVCQ0YyNzBGMzI3OUNFMDAwRUEyNjIgLyogVGhyZWFkVGltZXJzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZFRpbWVycy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxODg2MDRCMTBGMkU2NTRBMDAwQjY0NDMgLyogRE9NVGltZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRE9NVGltZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxODg2MDRCMjBGMkU2NTRBMDAwQjY0NDMgLyogRE9N
VGltZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NVGltZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMThDNUZDQTAxMEEzOTkxRjAwNDg0MzhEIC8qIFdl
YktpdEdsb2JhbFNjcmlwdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXZWJLaXRHbG9iYWxTY3JpcHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkx
OEM1RkNBMTEwQTM5OTFGMDA0ODQzOEQgLyogV2ViS2l0R2xvYmFsU2NyaXB0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdEdsb2JhbFNjcmlwdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkxOEM1RkNBMjEwQTM5OTFGMDA0ODQzOEQgLyogV2ViS2l0R2xv
YmFsU2NyaXB0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJLaXRHbG9iYWxTY3JpcHQu
aWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxOEM1RkNBMzEwQTM5OTFGMDA0ODQz
OEQgLyogV2ViS2l0R2xvYmFsU2NyaXB0UmVwb3NpdG9yeS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXZWJLaXRHbG9iYWxTY3JpcHRSZXBvc2l0b3J5LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMThDNUZDQTQxMEEzOTkxRjAwNDg0MzhEIC8qIFdl
YktpdEdsb2JhbFNjcmlwdFJlcG9zaXRvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViS2l0R2xvYmFsU2NyaXB0UmVwb3NpdG9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkxOEM1RkNCNDEwQTNDNkYyMDA0ODQzOEQgLyogR2xvYmFsU2NyaXB0Q29udGV4
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHbG9iYWxTY3JpcHRD
b250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMThDNUZDQjUxMEEzQzZG
MjAwNDg0MzhEIC8qIEdsb2JhbFNjcmlwdENvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gR2xvYmFsU2NyaXB0Q29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkxOEM1RkNCNjEwQTNDNkYyMDA0ODQzOEQgLyogR2xvYmFsU2NyaXB0Q29udGV4dC5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gR2xvYmFsU2NyaXB0Q29udGV4dC5pZGw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE4RjgzMUI3MEZENDhDNzgwMEQ4QzU2QiAvKiBXb3Jr
ZXJMb2FkZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXb3JrZXJM
b2FkZXJQcm94eS5oOyBwYXRoID0gd29ya2Vycy9Xb3JrZXJMb2FkZXJQcm94eS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxQTBENTczNDBBNUM3N0ZFMDA3RURENEMgLyogT3ZlcmZs
b3dFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3ZlcmZs
b3dFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMEQ1NzM1MEE1Qzc3
RkUwMDdFREQ0QyAvKiBPdmVyZmxvd0V2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBPdmVyZmxvd0V2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MDA0Miw2ICsxMDA1OCw3IEBACiAJCQkJRjUyM0QxODQwMkRFNDJFODAxODYzNUNBIC8qIGNzcyAq
LywKIAkJCQlGNTIzRDMyNDAyREU0NDc4MDE4NjM1Q0EgLyogZG9tICovLAogCQkJCTkzMzA5RDg2
MDk5RTY0OTEwMDU2RTU4MSAvKiBlZGl0aW5nICovLAorCQkJCTE4QzVGQzlGMTBBMzk5MUYwMDQ4
NDM4RCAvKiBnbG9iYWwtc2NyaXB0ICovLAogCQkJCTUxNzQxRDA4MEIwNzI1NzAwMEVENDQyQyAv
KiBoaXN0b3J5ICovLAogCQkJCTkzRUVDMUVDMDlDMjg3NzcwMEM1MTVEMSAvKiBodG1sICovLAog
CQkJCTFDODFCOTREMEU5NzMyRDkwMDI2NkUwNyAvKiBpbnNwZWN0b3IgKi8sCkBAIC0xMDE1Myw2
ICsxMDE3MCwyMSBAQAogCQkJcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYkNvcmU7CiAJCQlzb3Vy
Y2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOwogCQl9OworCQkxOEM1RkM5RjEwQTM5OTFGMDA0
ODQzOEQgLyogZ2xvYmFsLXNjcmlwdCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hp
bGRyZW4gPSAoCisJCQkJMThDNUZDQjQxMEEzQzZGMjAwNDg0MzhEIC8qIEdsb2JhbFNjcmlwdENv
bnRleHQuY3BwICovLAorCQkJCTE4QzVGQ0I1MTBBM0M2RjIwMDQ4NDM4RCAvKiBHbG9iYWxTY3Jp
cHRDb250ZXh0LmggKi8sCisJCQkJMThDNUZDQjYxMEEzQzZGMjAwNDg0MzhEIC8qIEdsb2JhbFNj
cmlwdENvbnRleHQuaWRsICovLAorCQkJCTE4QzVGQ0EwMTBBMzk5MUYwMDQ4NDM4RCAvKiBXZWJL
aXRHbG9iYWxTY3JpcHQuY3BwICovLAorCQkJCTE4QzVGQ0ExMTBBMzk5MUYwMDQ4NDM4RCAvKiBX
ZWJLaXRHbG9iYWxTY3JpcHQuaCAqLywKKwkJCQkxOEM1RkNBMjEwQTM5OTFGMDA0ODQzOEQgLyog
V2ViS2l0R2xvYmFsU2NyaXB0LmlkbCAqLywKKwkJCQkxOEM1RkNBMzEwQTM5OTFGMDA0ODQzOEQg
LyogV2ViS2l0R2xvYmFsU2NyaXB0UmVwb3NpdG9yeS5jcHAgKi8sCisJCQkJMThDNUZDQTQxMEEz
OTkxRjAwNDg0MzhEIC8qIFdlYktpdEdsb2JhbFNjcmlwdFJlcG9zaXRvcnkuaCAqLywKKwkJCSk7
CisJCQlwYXRoID0gImdsb2JhbC1zY3JpcHQiOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
KwkJfTsKIAkJMUEyRTZFNTYwQ0M1NTFFMDAwNEEyMDYyIC8qIHNxbCAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0xNDI5Niw2ICsxNDMyOCw4IEBACiAJCQkJ
QThFREIwM0MxMDE2ODQ5NDAwRkU4MTEzIC8qIERPTU9iamVjdFdpdGhTVkdDb250ZXh0LmggKi8s
CiAJCQkJMTQzMkU4NDgwQzUxNDkzRjAwQjE1MDBGIC8qIEdDQ29udHJvbGxlci5jcHAgKi8sCiAJ
CQkJMTQzMkU4NDYwQzUxNDkzODAwQjE1MDBGIC8qIEdDQ29udHJvbGxlci5oICovLAorCQkJCTE4
MDgyNUFCMTBCMjA1OEEwMDEyRkU1MCAvKiBHbG9iYWxTY3JpcHRDb250cm9sbGVyLmNwcCAqLywK
KwkJCQkxODA4MjVBQzEwQjIwNThBMDAxMkZFNTAgLyogR2xvYmFsU2NyaXB0Q29udHJvbGxlci5o
ICovLAogCQkJCTkzQjcwRDQ3MDlFQjBDN0MwMDlEODQ2OCAvKiBKU0RPTUJpbmRpbmcuY3BwICov
LAogCQkJCTkzQjcwRDQ4MDlFQjBDN0MwMDlEODQ2OCAvKiBKU0RPTUJpbmRpbmcuaCAqLywKIAkJ
CQlFMUMzNkNCQzBFQjA4MDYyMDA3NDEwQkMgLyogSlNET01HbG9iYWxPYmplY3QuY3BwICovLApA
QCAtMTgxMjQsOSArMTgxNTgsMTMgQEAKIAkJCQkxNDc5RkFGMDEwOUFFMzc1MDBERUQ2NTUgLyog
UmVuZGVyUnVieUJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NzlGQUYyMTA5QUUzNzUwMERF
RDY1NSAvKiBSZW5kZXJSdWJ5UnVuLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDc5RkFGNDEwOUFF
Mzc1MDBERUQ2NTUgLyogUmVuZGVyUnVieVRleHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTE4QzVG
Q0E2MTBBMzk5MUYwMDQ4NDM4RCAvKiBXZWJLaXRHbG9iYWxTY3JpcHQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTE4QzVGQ0E5MTBBMzk5MUYwMDQ4NDM4RCAvKiBXZWJLaXRHbG9iYWxTY3JpcHRSZXBv
c2l0b3J5LmggaW4gSGVhZGVycyAqLywKKwkJCQkxOEM1RkNCODEwQTNDNkYyMDA0ODQzOEQgLyog
R2xvYmFsU2NyaXB0Q29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEyNDc0ODQxMEFBMTYx
RDAwQjc5NDkzIC8qIEF1dGhlbnRpY2F0aW9uQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5
MzgyREY1ODEwQThENUM5MDA5MjU2NTIgLyogQ29sb3JTcGFjZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQUIzMUM5MUUxMEFFMUI4RTAwMEM3QjkyIC8qIExpbmVDbGFtcFZhbHVlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkxODA4MjVBRTEwQjIwNThBMDAxMkZFNTAgLyogR2xvYmFsU2NyaXB0Q29udHJv
bGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xODIyOCw2ICsxODI2Niw4IEBACiAJCQkJODUxMzZD
QTgwQUVENjY1OTAwRjkwQTNEIC8qIHdlc3RSZXNpemVDdXJzb3IucG5nIGluIFJlc291cmNlcyAq
LywKIAkJCQkxQUIxQUU3QTBDMDUxRkRFMDAxMzlGNEYgLyogem9vbUluQ3Vyc29yLnBuZyBpbiBS
ZXNvdXJjZXMgKi8sCiAJCQkJMUFCMUFFN0IwQzA1MUZERTAwMTM5RjRGIC8qIHpvb21PdXRDdXJz
b3IucG5nIGluIFJlc291cmNlcyAqLywKKwkJCQkxOEM1RkNBNzEwQTM5OTFGMDA0ODQzOEQgLyog
V2ViS2l0R2xvYmFsU2NyaXB0LmlkbCBpbiBSZXNvdXJjZXMgKi8sCisJCQkJMThDNUZDQjkxMEEz
QzZGMjAwNDg0MzhEIC8qIEdsb2JhbFNjcmlwdENvbnRleHQuaWRsIGluIFJlc291cmNlcyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
QEAgLTIwMjY5LDYgKzIwMzA5LDkgQEAKIAkJCQkxNDc5RkFFRjEwOUFFMzc1MDBERUQ2NTUgLyog
UmVuZGVyUnVieUJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3OUZBRjExMDlBRTM3NTAw
REVENjU1IC8qIFJlbmRlclJ1YnlSdW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3OUZBRjMx
MDlBRTM3NTAwREVENjU1IC8qIFJlbmRlclJ1YnlUZXh0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTE4QzVGQ0E1MTBBMzk5MUYwMDQ4NDM4RCAvKiBXZWJLaXRHbG9iYWxTY3JpcHQuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMThDNUZDQTgxMEEzOTkxRjAwNDg0MzhEIC8qIFdlYktpdEdsb2JhbFNj
cmlwdFJlcG9zaXRvcnkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMThDNUZDQjcxMEEzQzZGMjAw
NDg0MzhEIC8qIEdsb2JhbFNjcmlwdENvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwog
CQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAK
aW5kZXggOTEzZjU3MC4uYmNiZTVhMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCisrKyBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtMTQzLDYgKzE0MywxMCBAQAog
I2luY2x1ZGUgIlNoYXJlZFdvcmtlclJlcG9zaXRvcnkuaCIKICNlbmRpZgogCisjaWYgRU5BQkxF
KEdMT0JBTF9TQ1JJUFQpCisjaW5jbHVkZSAiV2ViS2l0R2xvYmFsU2NyaXB0UmVwb3NpdG9yeS5o
IgorI2VuZGlmCisKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAjaW5jbHVkZSAiU3RvcmFnZUV2
ZW50LmgiCiAjZW5kaWYKQEAgLTE0NDIsNiArMTQ0NiwxMCBAQCB2b2lkIERvY3VtZW50OjpkZXRh
Y2goKQogICAgIFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6OmRvY3VtZW50RGV0YWNoZWQodGhpcyk7
CiAjZW5kaWYKIAorI2lmIEVOQUJMRShHTE9CQUxfU0NSSVBUKQorICAgIFdlYktpdEdsb2JhbFNj
cmlwdFJlcG9zaXRvcnk6OmRvY3VtZW50RGV0YWNoZWQodGhpcyk7CisjZW5kaWYKKwogICAgIGlm
IChtX2ZyYW1lKSB7CiAgICAgICAgIEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKTsK
ICAgICAgICAgaWYgKHZpZXcpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5j
cHAgYi9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAKaW5kZXggNjVkNzUxYS4uZDQ4YzM3YSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCisrKyBiL1dlYkNvcmUvZG9t
L0V2ZW50VGFyZ2V0LmNwcApAQCAtMTU2LDYgKzE1NiwxOCBAQCBOb3RpZmljYXRpb24qIEV2ZW50
VGFyZ2V0Ojp0b05vdGlmaWNhdGlvbigpCiB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShHTE9CQUxf
U0NSSVBUKQorV2ViS2l0R2xvYmFsU2NyaXB0KiBFdmVudFRhcmdldDo6dG9XZWJLaXRHbG9iYWxT
Y3JpcHQoKQoreworICAgIHJldHVybiAwOworfQorCitHbG9iYWxTY3JpcHRDb250ZXh0KiBFdmVu
dFRhcmdldDo6dG9HbG9iYWxTY3JpcHRDb250ZXh0KCkKK3sKKyAgICByZXR1cm4gMDsKK30KKyNl
bmRpZgorCiBib29sIEV2ZW50VGFyZ2V0OjphZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0
cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyLCBib29s
IHVzZUNhcHR1cmUpCiB7CiAgICAgRXZlbnRUYXJnZXREYXRhKiBkID0gZW5zdXJlRXZlbnRUYXJn
ZXREYXRhKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oIGIvV2ViQ29y
ZS9kb20vRXZlbnRUYXJnZXQuaAppbmRleCAyZDc3Yzg3Li45ZDdmODRlIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCisrKyBiL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgK
QEAgLTU5LDYgKzU5LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBYTUxIdHRw
UmVxdWVzdDsKICAgICBjbGFzcyBYTUxIdHRwUmVxdWVzdFVwbG9hZDsKIAorI2lmIEVOQUJMRShH
TE9CQUxfU0NSSVBUKQorICAgIGNsYXNzIEdsb2JhbFNjcmlwdENvbnRleHQ7CisgICAgY2xhc3Mg
V2ViS2l0R2xvYmFsU2NyaXB0OworI2VuZGlmCisKICAgICB0eXBlZGVmIGludCBFeGNlcHRpb25D
b2RlOwogCiAgICAgc3RydWN0IEZpcmluZ0V2ZW50SXRlcmF0b3IgewpAQCAtMTE4LDYgKzEyMywx
MSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgTm90aWZpY2F0aW9uKiB0
b05vdGlmaWNhdGlvbigpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoR0xPQkFMX1NDUklQVCkKKyAg
ICAgICAgdmlydHVhbCBXZWJLaXRHbG9iYWxTY3JpcHQqIHRvV2ViS2l0R2xvYmFsU2NyaXB0KCk7
CisgICAgICAgIHZpcnR1YWwgR2xvYmFsU2NyaXB0Q29udGV4dCogdG9HbG9iYWxTY3JpcHRDb250
ZXh0KCk7CisjZW5kaWYKKwogICAgICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCA9IDA7CiAKICAgICAgICAgdmlydHVhbCBi
b29sIGFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NS
ZWZQdHI8RXZlbnRMaXN0ZW5lcj4sIGJvb2wgdXNlQ2FwdHVyZSk7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmggYi9XZWJDb3JlL2RvbS9TY3JpcHRFeGVj
dXRpb25Db250ZXh0LmgKaW5kZXggMGU1NTIxYi4uZWI2ZWQ3ZiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCisrKyBiL1dlYkNvcmUvZG9tL1NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuaApAQCAtNTcsNiArNTcsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICAgICAgdmlydHVhbCBib29sIGlzRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNXb3JrZXJDb250ZXh0KCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KKyNpZiBFTkFCTEUoR0xPQkFMX1NDUklQVCkKKyAgICAgICAgdmlydHVhbCBib29s
IGlzR2xvYmFsU2NyaXB0Q29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisjZW5kaWYK
IAogICAgICAgICBjb25zdCBLVVJMJiB1cmwoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsVVJMKCk7
IH0KICAgICAgICAgS1VSTCBjb21wbGV0ZVVSTChjb25zdCBTdHJpbmcmIHVybCkgY29uc3QgeyBy
ZXR1cm4gdmlydHVhbENvbXBsZXRlVVJMKHVybCk7IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZ2xv
YmFsLXNjcmlwdC9HbG9iYWxTY3JpcHRDb250ZXh0LmNwcCBiL1dlYkNvcmUvZ2xvYmFsLXNjcmlw
dC9HbG9iYWxTY3JpcHRDb250ZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi40MzUzNWU1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9nbG9iYWwtc2NyaXB0L0ds
b2JhbFNjcmlwdENvbnRleHQuY3BwCkBAIC0wLDAgKzEsMTk2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaWYgRU5BQkxFKEdMT0JBTF9TQ1JJUFQpCisKKyNpbmNsdWRlICJHbG9iYWxTY3JpcHRD
b250ZXh0LmgiCisjaW5jbHVkZSAiR2xvYmFsU2NyaXB0Q29udHJvbGxlci5oIgorI2luY2x1ZGUg
IkV2ZW50LmgiCisjaW5jbHVkZSAiRXZlbnRFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgorI2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIKKyNpbmNsdWRlICJzY3Jp
cHRWYWx1ZS5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiV2ViS2l0
R2xvYmFsU2NyaXB0UmVwb3NpdG9yeS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIElu
dGVydmFsIHRvIGFsbG93IG9ycGhhbmVkIEdsb2JhbFNjaXJwQ29udGV4dCB0byBnYWluIHBvdGVu
dGlhbCBuZXcgb3duZXIuCisvLyBUaGlzIGNhbiBoYXBwZW4gb24gbmF2aWdhdGlvbiB3aGVuIGJv
dGggcGFnZXMgY29ubmVjdCB0byB0aGUgc2FtZSBHbG9iYWxTY3JpcHQuCitzdGF0aWMgY29uc3Qg
ZG91YmxlIGRlc3RydWN0aW9uSW50ZXJ2YWwgPSA1LjA7CisKK0dsb2JhbFNjcmlwdENvbnRleHQ6
Okdsb2JhbFNjcmlwdENvbnRleHQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBLVVJMJiB1cmws
IFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpbikKKyAgICA6IG1fbmFtZShuYW1lKQor
ICAgICwgbV91cmwodXJsKQorICAgICwgbV9zY3JpcHQobmV3IEdsb2JhbFNjcmlwdENvbnRyb2xs
ZXIodGhpcykpCisgICAgLCBtX2Rlc3RydWN0aW9uVGltZXIodGhpcywgJkdsb2JhbFNjcmlwdENv
bnRleHQ6OmRlc3RydWN0aW9uVGltZXJGaXJlZCkKKyAgICAsIG1fbG9hZGVkKGZhbHNlKQorewor
ICAgIHNldFNlY3VyaXR5T3JpZ2luKG9yaWdpbik7CisgICAgcmVmKCk7IC8vIE1hdGNoaW5nIGRl
cmVmIGlzIGluIGRlc3RydWN0aW9uVGltZXIgY2FsbGJhY2suCit9CisKK0dsb2JhbFNjcmlwdENv
bnRleHQ6On5HbG9iYWxTY3JpcHRDb250ZXh0KCkKK3sKK30KKwordm9pZCBHbG9iYWxTY3JpcHRD
b250ZXh0OjpjbGVhclNjcmlwdCgpCit7CisgICAgbV9zY3JpcHQuY2xlYXIoKTsgCit9CisKK2Nv
bnN0IEtVUkwmIEdsb2JhbFNjcmlwdENvbnRleHQ6OnZpcnR1YWxVUkwoKSBjb25zdAoreworICAg
IHJldHVybiBtX3VybDsKK30KKworS1VSTCBHbG9iYWxTY3JpcHRDb250ZXh0Ojp2aXJ0dWFsQ29t
cGxldGVVUkwoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0Cit7CisgICAgLy8gQWx3YXlzIHJldHVy
biBhIG51bGwgVVJMIHdoZW4gcGFzc2VkIGEgbnVsbCBzdHJpbmcuCisgICAgLy8gRklYTUU6IFNo
b3VsZCB3ZSBjaGFuZ2UgdGhlIEtVUkwgY29uc3RydWN0b3IgdG8gaGF2ZSB0aGlzIGJlaGF2aW9y
PworICAgIGlmICh1cmwuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBLVVJMKCk7CisgICAgLy8g
QWx3YXlzIHVzZSBVVEYtOCBpbiBXb3JrZXJzLgorICAgIHJldHVybiBLVVJMKG1fdXJsLCB1cmwp
OworfQorCit2b2lkIEdsb2JhbFNjcmlwdENvbnRleHQ6OnJlcG9ydEV4Y2VwdGlvbihjb25zdCBT
dHJpbmcmIGVycm9yTWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNl
VVJMKQoreworICAgIGJvb2wgZXJyb3JIYW5kbGVkID0gZmFsc2U7CisgICAgaWYgKG9uZXJyb3Io
KSkKKyAgICAgICAgZXJyb3JIYW5kbGVkID0gb25lcnJvcigpLT5yZXBvcnRFcnJvcih0aGlzLCBl
cnJvck1lc3NhZ2UsIHNvdXJjZVVSTCwgbGluZU51bWJlcik7Cit9CisKK3ZvaWQgR2xvYmFsU2Ny
aXB0Q29udGV4dDo6YWRkTWVzc2FnZShNZXNzYWdlRGVzdGluYXRpb24gZGVzdGluYXRpb24sIE1l
c3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWws
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5n
JiBzb3VyY2VVUkwpCit7CisgICAgLy8gRklYTUU6IGZpZ3VyZSBvdXQgY29uc29sZS9pbmNzcGVj
dG9yIHN0b3J5IGZvciBHbG9iYWwgU2NyaXB0LiBNYXliZSBzaW1pbGFyIHRvIFNoYXJlZFdvcmtl
cnMuCisgICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0oc291
cmNlKTsKKyAgICBVTlVTRURfUEFSQU0odHlwZSk7CisgICAgVU5VU0VEX1BBUkFNKGxldmVsKTsK
KyAgICBVTlVTRURfUEFSQU0obWVzc2FnZSk7CisgICAgVU5VU0VEX1BBUkFNKGxpbmVOdW1iZXIp
OworICAgIFVOVVNFRF9QQVJBTShzb3VyY2VVUkwpOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgR2xvYmFsU2NyaXB0Q29udGV4dDo6cmVzb3VyY2VSZXRyaWV2ZWRCeVhNTEh0dHBS
ZXF1ZXN0KHVuc2lnbmVkIGxvbmcsIGNvbnN0IFNjcmlwdFN0cmluZyYpCit7CisgICAgLy8gRklY
TUU6IGZpZ3VyZSBvdXQgY29uc29sZS9pbmNzcGVjdG9yIHN0b3J5IGZvciBHbG9iYWwgU2NyaXB0
LiBNYXliZSBzaW1pbGFyIHRvIFNoYXJlZFdvcmtlcnMuCisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKwordm9pZCBHbG9iYWxTY3JpcHRDb250ZXh0OjpzY3JpcHRJbXBvcnRlZCh1bnNpZ25lZCBs
b25nLCBjb25zdCBTdHJpbmcmKQoreworICAgIC8vIEZJWE1FOiBmaWd1cmUgb3V0IGNvbnNvbGUv
aW5jc3BlY3RvciBzdG9yeSBmb3IgR2xvYmFsIFNjcmlwdC4gTWF5YmUgc2ltaWxhciB0byBTaGFy
ZWRXb3JrZXJzLgorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgR2xvYmFsU2NyaXB0
Q29udGV4dDo6bWF0Y2hlcyhjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+IG9yaWdpbiwgY29uc3QgS1VSTCYgdXJsVG9NYXRjaCkgY29uc3QKK3sKKyAgICAvLyBJ
ZiB0aGUgb3JpZ2lucyBkb24ndCBtYXRjaCwgb3IgdGhlIG5hbWVzIGRvbid0IG1hdGNoLCB0aGVu
IHRoaXMgaXMgbm90IHRoZSBwcm94eSB3ZSBhcmUgbG9va2luZyBmb3IuCisgICAgaWYgKCFvcmln
aW4tPmVxdWFsKHNlY3VyaXR5T3JpZ2luKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAvLyBJZiB0aGUgbmFtZXMgYXJlIGJvdGggZW1wdHksIGNvbXBhcmVzIHRoZSBVUkxzIGluc3Rl
YWQgcGVyIHRoZSBXZWIgV29ya2VycyBzcGVjLgorICAgIGlmIChuYW1lLmlzRW1wdHkoKSAmJiBt
X25hbWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdXJsVG9NYXRjaCA9PSBtX3VybDsKKwor
ICAgIHJldHVybiBuYW1lID09IG1fbmFtZTsKK30KKwordm9pZCBHbG9iYWxTY3JpcHRDb250ZXh0
OjphZGRUb0RvY3VtZW50c0xpc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKK3sK
KyAgICBBU1NFUlQoY29udGV4dC0+aXNEb2N1bWVudCgpKTsKKyAgICBtX2RvY3VtZW50TGlzdC5h
ZGQoY29udGV4dCk7CisKKyAgICBpZiAobV9kZXN0cnVjdGlvblRpbWVyLmlzQWN0aXZlKCkpCisg
ICAgICAgIG1fZGVzdHJ1Y3Rpb25UaW1lci5zdG9wKCk7Cit9CisKK3ZvaWQgR2xvYmFsU2NyaXB0
Q29udGV4dDo6ZGVzdHJ1Y3Rpb25UaW1lckZpcmVkKFRpbWVyPEdsb2JhbFNjcmlwdENvbnRleHQ+
KikKK3sKKyAgICBpZiAoIW1fZG9jdW1lbnRMaXN0LnNpemUoKSkgeworICAgICAgICBXZWJLaXRH
bG9iYWxTY3JpcHRSZXBvc2l0b3J5OjpyZW1vdmVHbG9iYWxTY3JpcHRDb250ZXh0KHRoaXMpOwor
ICAgICAgICBzdG9wQWN0aXZlRE9NT2JqZWN0cygpOworICAgICAgICBjbGVhclNjcmlwdCgpOwor
ICAgICAgICBkZXJlZigpOworICAgIH0KK30KKwordm9pZCBHbG9iYWxTY3JpcHRDb250ZXh0Ojpy
ZW1vdmVGcm9tRG9jdW1lbnRMaXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCit7
CisgICAgSGFzaFNldDxTY3JpcHRFeGVjdXRpb25Db250ZXh0Kj46Oml0ZXJhdG9yIGl0ID0gbV9k
b2N1bWVudExpc3QuZmluZChjb250ZXh0KTsKKyAgICBpZiAoaXQgPT0gbV9kb2N1bWVudExpc3Qu
ZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZG9jdW1lbnRMaXN0LnJlbW92ZShpdCk7
CisKKyAgICAvLyBTdGFydCB0aW1lciB0byBjaGVjayBpZiB0aGlzIGNvbnRleHQgaGFzIHRvIHNl
bGYtZGVzdHJ1Y3QuCisgICAgLy8gVGhlIHVzZSBvZiBhIHRpbWVyIG1ha2VzIGRlc3RydWN0aW9u
IG9mIHRoZSBjb250ZXh0IGhhcHBlbiBsYXRlciB0byBhdm9pZCBkZWFsbG9jYXRpbmcgaXQKKyAg
ICAvLyByaWdodCBub3cgd2hpbGUgaXQgaXMgbm90aWZpZWQuIEFsc28sIGl0IGFsbG93cyB0aGUg
Y29udGV4dCB0byBleGlzdCBpbiBhIG9ycGhhbmVkIHN0YXRlCisgICAgLy8gZm9yIGEgc2hvcnQg
cGVyaW9kIG9mIHRpbWUgdG8gc2VlIGlmIHRoZXJlIHdpbGwgYmUgYSBuZXcgb3duZXIgKGFzIGlu
IG5hdmlnYXRpb24pLgorICAgIC8vIFRoaXMgcmVzZXRzIHRoZSB0aW1lciB0byBhIGZ1bGwgaW50
ZXJ2YWwgaWYgaXQgaXMgYWxyZWFkeSBhY3RpdmUuCisgICAgbV9kZXN0cnVjdGlvblRpbWVyLnN0
YXJ0T25lU2hvdChkZXN0cnVjdGlvbkludGVydmFsKTsKK30KKwordm9pZCBHbG9iYWxTY3JpcHRD
b250ZXh0Ojpsb2FkKGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIGluaXRp
YWxTY3JpcHQpCit7CisgICAgbV91c2VyQWdlbnQgPSB1c2VyQWdlbnQ7CisgICAgc2NyaXB0KCkt
PmV2YWx1YXRlKFNjcmlwdFNvdXJjZUNvZGUoaW5pdGlhbFNjcmlwdCwgbV91cmwpKTsKKyAgICBt
X2xvYWRlZCA9IHRydWU7Cit9CisKK3ZvaWQgR2xvYmFsU2NyaXB0Q29udGV4dDo6cG9zdFRhc2so
UGFzc093blB0cjxUYXNrPiB0YXNrKQoreworICAgIHBvc3RUYXNrVG9NYWluVGhyZWFkKHRhc2sp
OworfQorCitFdmVudFRhcmdldERhdGEqIEdsb2JhbFNjcmlwdENvbnRleHQ6OmV2ZW50VGFyZ2V0
RGF0YSgpCit7CisgICAgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsKK30KKworRXZlbnRUYXJn
ZXREYXRhKiBHbG9iYWxTY3JpcHRDb250ZXh0OjplbnN1cmVFdmVudFRhcmdldERhdGEoKQorewor
ICAgIHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7Cit9CisKK1NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIEdsb2JhbFNjcmlwdENvbnRleHQ6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdAor
eworICAgIHJldHVybiBjb25zdF9jYXN0PEdsb2JhbFNjcmlwdENvbnRleHQqPih0aGlzKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdMT0JBTF9TQ1JJ
UFQpCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZ2xvYmFsLXNjcmlwdC9HbG9iYWxTY3JpcHRDb250
ZXh0LmggYi9XZWJDb3JlL2dsb2JhbC1zY3JpcHQvR2xvYmFsU2NyaXB0Q29udGV4dC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMjBmYWIKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL2dsb2JhbC1zY3JpcHQvR2xvYmFsU2NyaXB0Q29udGV4dC5oCkBAIC0wLDAgKzEs
MTI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBHbG9iYWxTY3JpcHRDb250ZXh0X2gKKyNkZWZpbmUgR2xvYmFsU2NyaXB0
Q29udGV4dF9oCisKKyNpZiBFTkFCTEUoR0xPQkFMX1NDUklQVCkKKworI2luY2x1ZGUgIkV2ZW50
VGFyZ2V0LmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJUaW1lci5o
IgorI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgor
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERvY3VtZW50OworY2xhc3MgR2xvYmFsU2NyaXB0
Q29udHJvbGxlcjsKK2NsYXNzIEtVUkw7CitjbGFzcyBTdHJpbmc7CisKKworY2xhc3MgR2xvYmFs
U2NyaXB0Q29udGV4dCA6IHB1YmxpYyBSZWZDb3VudGVkPEdsb2JhbFNjcmlwdENvbnRleHQ+LCBw
dWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgcHVibGljIEV2ZW50VGFyZ2V0IHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHbG9iYWxTY3JpcHRDb250ZXh0PiBjcmVhdGUoY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBLVVJMJiB1cmwsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmln
aW4+IG9yaWdpbikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgR2xvYmFsU2Ny
aXB0Q29udGV4dChuYW1lLCB1cmwsIG9yaWdpbikpOworICAgIH0KKyAgICB2aXJ0dWFsIH5HbG9i
YWxTY3JpcHRDb250ZXh0KCk7CisKKyAgICAvLyBTY3JpcHRFeGVjdXRpb25Db250ZXh0CisgICAg
dmlydHVhbCBib29sIGlzR2xvYmFsU2NyaXB0Q29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KKyAgICB2aXJ0dWFsIFN0cmluZyB1c2VyQWdlbnQoY29uc3QgS1VSTCYpIGNvbnN0IHsgcmV0
dXJuIG1fdXNlckFnZW50OyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0RXhjZXB0aW9uKGNv
bnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBz
b3VyY2VVUkwpOworICAgIHZpcnR1YWwgdm9pZCBhZGRNZXNzYWdlKE1lc3NhZ2VEZXN0aW5hdGlv
biwgTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5n
JiBtZXNzYWdlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCk7
CisgICAgdmlydHVhbCB2b2lkIHJlc291cmNlUmV0cmlldmVkQnlYTUxIdHRwUmVxdWVzdCh1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFNjcmlwdFN0cmluZyYgc291cmNlU3RyaW5nKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2NyaXB0SW1wb3J0ZWQodW5zaWduZWQgbG9uZywgY29uc3QgU3Ry
aW5nJik7CisgICAgdmlydHVhbCB2b2lkIHBvc3RUYXNrKFBhc3NPd25QdHI8VGFzaz4pOyAvLyBF
eGVjdXRlcyB0aGUgdGFzayBvbiBjb250ZXh0J3MgdGhyZWFkIGFzeW5jaHJvbm91c2x5LgorCisg
ICAgLy8gSlMgd3JhcHBlciBhbmQgRXZlbnRUYXJldCBzdXBwb3J0LgorICAgIHZpcnR1YWwgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OworICAg
IHZpcnR1YWwgR2xvYmFsU2NyaXB0Q29udGV4dCogdG9HbG9iYWxTY3JpcHRDb250ZXh0KCkgeyBy
ZXR1cm4gdGhpczsgfQorICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoZXJyb3Ip
OworCisgICAgLy8gR2xvYmFsU2NyaXB0R2xvYmFsU2NvcGUKKyAgICBHbG9iYWxTY3JpcHRDb250
ZXh0KiBzZWxmKCkgeyByZXR1cm4gdGhpczsgfQorCisgICAgLy8gTGlmZXRpbWUgLSBrZWVwIHRo
ZSBsaXN0IG9mIGRvY3VtZW50cyB0aGF0IGFyZSBjb25uZWN0ZWQsIGRlcmVmIHdoZW4gdGhlIGxh
c3QgZGlzY29ubmVjdHMuCisgICAgdm9pZCBhZGRUb0RvY3VtZW50c0xpc3QoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCopOworICAgIHZvaWQgcmVtb3ZlRnJvbURvY3VtZW50TGlzdChTY3JpcHRFeGVj
dXRpb25Db250ZXh0Kik7CisKKyAgICBHbG9iYWxTY3JpcHRDb250cm9sbGVyKiBzY3JpcHQoKSB7
IHJldHVybiBtX3NjcmlwdC5nZXQoKTsgfQorICAgIHZvaWQgY2xlYXJTY3JpcHQoKTsKKworICAg
IC8vIFRydWUgaWYgaW5pdGlhbCBzY3JpcHQgaGFzIGJlZW4gZXZhbHVhdGVkLgorICAgIGJvb2wg
bG9hZGVkKCkgeyByZXR1cm4gbV9sb2FkZWQ7IH0KKyAgICB2b2lkIGxvYWQoY29uc3QgU3RyaW5n
JiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgaW5pdGlhbFNjcmlwdCk7CisKKyAgICBib29sIG1h
dGNoZXMoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmln
aW4sIGNvbnN0IEtVUkwmIHVybFRvTWF0Y2gpIGNvbnN0OworICAgIFN0cmluZyBuYW1lKCkgY29u
c3QgeyByZXR1cm4gbV9uYW1lOyB9CisKKyAgICB1c2luZyBSZWZDb3VudGVkPEdsb2JhbFNjcmlw
dENvbnRleHQ+OjpyZWY7CisgICAgdXNpbmcgUmVmQ291bnRlZDxHbG9iYWxTY3JpcHRDb250ZXh0
Pjo6ZGVyZWY7CisKK3ByaXZhdGU6CisgICAgR2xvYmFsU2NyaXB0Q29udGV4dChjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IEtVUkwmLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPik7CisgICAg
CisgICAgLy8gRXZlbnRUYXJnZXQKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRU
YXJnZXREYXRhKCk7CisgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGVuc3VyZUV2ZW50VGFy
Z2V0RGF0YSgpOworICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIHsgZGVyZWYoKTsgfQorICAgIAor
ICAgIC8vIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQKKyAgICB2aXJ0dWFsIGNvbnN0IEtVUkwmIHZp
cnR1YWxVUkwoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEtVUkwgdmlydHVhbENvbXBsZXRlVVJMKGNv
bnN0IFN0cmluZyYpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCByZWZTY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkgeyByZWYoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXJlZlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSB7IGRlcmVmKCk7IH0KKyAgICAgICAgICAgIAorICAgIHZvaWQgZGVzdHJ1Y3Rp
b25UaW1lckZpcmVkKFRpbWVyPEdsb2JhbFNjcmlwdENvbnRleHQ+Kik7CisgICAgICAgICAgICAK
KyAgICBTdHJpbmcgbV9uYW1lOworICAgIFN0cmluZyBtX3VzZXJBZ2VudDsKKyAgICBLVVJMIG1f
dXJsOworICAgIE93blB0cjxHbG9iYWxTY3JpcHRDb250cm9sbGVyPiBtX3NjcmlwdDsKKyAgICBI
YXNoU2V0PFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqPiBtX2RvY3VtZW50TGlzdDsKKyAgICBUaW1l
cjxHbG9iYWxTY3JpcHRDb250ZXh0PiBtX2Rlc3RydWN0aW9uVGltZXI7CisgICAgRXZlbnRUYXJn
ZXREYXRhIG1fZXZlbnRUYXJnZXREYXRhOworCisgICAgYm9vbCBtX2xvYWRlZDsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShHTE9CQUxfU0NSSVBUKQor
CisjZW5kaWYgLy8gR2xvYmFsU2NyaXB0Q29udGV4dF9oCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
Z2xvYmFsLXNjcmlwdC9HbG9iYWxTY3JpcHRDb250ZXh0LmlkbCBiL1dlYkNvcmUvZ2xvYmFsLXNj
cmlwdC9HbG9iYWxTY3JpcHRDb250ZXh0LmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5kYWIyNjI0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9nbG9iYWwtc2NyaXB0
L0dsb2JhbFNjcmlwdENvbnRleHQuaWRsCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgd2luZG93IHsK
KworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPUdMT0JBTF9TQ1JJUFQsCisg
ICAgICAgIEN1c3RvbU1hcmtGdW5jdGlvbiwKKyAgICAgICAgRXZlbnRUYXJnZXQsCisgICAgICAg
IEV4dGVuZHNET01HbG9iYWxPYmplY3QsCisgICAgICAgIElzV29ya2VyQ29udGV4dCwKKyAgICAg
ICAgR2VuZXJhdGVOYXRpdmVDb252ZXJ0ZXIsCisgICAgICAgIExlZ2FjeVBhcmVudD1KU0dsb2Jh
bFNjcmlwdENvbnRleHRCYXNlLAorICAgICAgICBOb1N0YXRpY1RhYmxlcworICAgIF0gR2xvYmFs
U2NyaXB0Q29udGV4dCB7CisKKyAgICAgICAgLy8gR2xvYmFsU2NyaXB0Q29udGV4dEdsb2JhbFNj
b3BlCisjaWYgZGVmaW5lZChMQU5HVUFHRV9KQVZBU0NSSVBUKSAmJiBMQU5HVUFHRV9KQVZBU0NS
SVBUCisgICAgICAgIGF0dHJpYnV0ZSBbUmVwbGFjZWFibGVdIEdsb2JhbFNjcmlwdENvbnRleHQg
c2VsZjsKKyNlbmRpZgorCisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFt
ZTsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25lcnJvcjsKKworICAgICAgICAv
LyBFdmVudFRhcmdldCBpbnRlcmZhY2UKKyAgICAgICAgW0N1c3RvbV0gdm9pZCBhZGRFdmVudExp
c3RlbmVyKGluIERPTVN0cmluZyB0eXBlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiB1c2VDYXB0dXJlKTsKKyAgICAgICAgW0N1
c3RvbV0gdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBlLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEV2ZW50TGlzdGVuZXIgbGlz
dGVuZXIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYm9v
bGVhbiB1c2VDYXB0dXJlKTsKKyAgICAgICAgYm9vbGVhbiBkaXNwYXRjaEV2ZW50KGluIEV2ZW50
IGV2dCkKKyAgICAgICAgICAgIHJhaXNlcyhFdmVudEV4Y2VwdGlvbik7CisKKyAgICB9OworCisK
K30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZ2xvYmFsLXNjcmlwdC9HbG9iYWxTY3JpcHRDb250cm9s
bGVyLmggYi9XZWJDb3JlL2dsb2JhbC1zY3JpcHQvR2xvYmFsU2NyaXB0Q29udHJvbGxlci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMjAwYTUKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL2dsb2JhbC1zY3JpcHQvR2xvYmFsU2NyaXB0Q29udHJvbGxlci5oCkBAIC0w
LDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIEdsb2JhbFNjcmlwdENvbnRyb2xsZXJfaAorI2RlZmluZSBHbG9i
YWxTY3JpcHRDb250cm9sbGVyX2gKKworI2lmIEVOQUJMRShHTE9CQUxfU0NSSVBUKQorCisvLyBO
b24tZnVuY3Rpb25pbmcgU2NyaXB0Q29udHJvbGxlci4gV2lsbCBiZSBpbXBsZW1lbnRlZCB3aXRo
IGNvcnJlc3BvbmRpbmcgYmluZGluZ3MgKHNpbmNlIGl0J3MgSlNDLSBhbmQgVjgtZGVwZW5kYW50
KS4KKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKyAgICBjbGFzcyBHbG9iYWxTY3JpcHRDb250ZXh0OworICAgIGNsYXNzIFNjcmlwdFNvdXJj
ZUNvZGU7CisKKyAgICBjbGFzcyBHbG9iYWxTY3JpcHRDb250cm9sbGVyIDogcHVibGljIE5vbmNv
cHlhYmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEdsb2JhbFNjcmlwdENvbnRyb2xsZXIoR2xv
YmFsU2NyaXB0Q29udGV4dCopIHsgfQorICAgICAgICB+R2xvYmFsU2NyaXB0Q29udHJvbGxlcigp
IHsgfQorCisgICAgICAgIHZvaWQgZXZhbHVhdGUoY29uc3QgU2NyaXB0U291cmNlQ29kZSYpIHsg
fQorICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShH
TE9CQUxfU0NSSVBUKQorCisjZW5kaWYgLy8gR2xvYmFsU2NyaXB0Q29udHJvbGxlcl9oCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2dsb2JhbC1zY3JpcHQvV2ViS2l0R2xvYmFsU2NyaXB0LmNwcCBiL1dl
YkNvcmUvZ2xvYmFsLXNjcmlwdC9XZWJLaXRHbG9iYWxTY3JpcHQuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MDVjNjkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L2dsb2JhbC1zY3JpcHQvV2ViS2l0R2xvYmFsU2NyaXB0LmNwcApAQCAtMCwwICsxLDExNyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShHTE9CQUxfU0NSSVBUKQorCisjaW5jbHVk
ZSAiV2ViS2l0R2xvYmFsU2NyaXB0LmgiCisKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUg
IkV2ZW50RXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiR2xvYmFsU2NyaXB0Q29udGV4dC5oIgorI2lu
Y2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdp
bi5oIgorI2luY2x1ZGUgIldlYktpdEdsb2JhbFNjcmlwdFJlcG9zaXRvcnkuaCIKKyNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dlYktpdEdsb2Jh
bFNjcmlwdDo6V2ViS2l0R2xvYmFsU2NyaXB0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJp
bmcmIG5hbWUsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQorICAgIDogQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQsIHRoaXMpCit7CisgICAgaWYgKHVy
bC5pc0VtcHR5KCkpIHsKKyAgICAgICAgZWMgPSBTWU5UQVhfRVJSOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSB0aGUgZHluYW1pYyBnbG9i
YWwgc2NvcGUgKGJ1ZyAjMjc4ODcpCisgICAgS1VSTCBzY3JpcHRVUkwgPSBjb250ZXh0LT5jb21w
bGV0ZVVSTCh1cmwpOworICAgIGlmICghc2NyaXB0VVJMLmlzVmFsaWQoKSkgeworICAgICAgICBl
YyA9IFNZTlRBWF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWNvbnRl
eHQtPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2VzcyhTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKHNj
cmlwdFVSTCkuZ2V0KCkpKSB7CisgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgV2ViS2l0R2xvYmFsU2NyaXB0UmVwb3NpdG9yeTo6Y29ubmVj
dCh0aGlzLCBzY3JpcHRVUkwsIG5hbWUsIGVjKTsKK30KKworV2ViS2l0R2xvYmFsU2NyaXB0Ojp+
V2ViS2l0R2xvYmFsU2NyaXB0KCkKK3sKK30KKwordm9pZCBXZWJLaXRHbG9iYWxTY3JpcHQ6OnNl
dENvbnRleHQoUGFzc1JlZlB0cjxHbG9iYWxTY3JpcHRDb250ZXh0PiBjb250ZXh0KQoreyAKKyAg
ICBtX2lubmVyQ29udGV4dCA9IGNvbnRleHQ7Cit9CisKK2NsYXNzIExvYWRFdmVudFRhc2sgOiBw
dWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NPd25QdHI8TG9hZEV2ZW50VGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8V2ViS2l0R2xvYmFs
U2NyaXB0PiBnbG9iYWxTY3JpcHQsIFBhc3NSZWZQdHI8R2xvYmFsU2NyaXB0Q29udGV4dD4gaW5u
ZXJDb250ZXh0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBMb2FkRXZlbnRUYXNrKGdsb2Jh
bFNjcmlwdCwgaW5uZXJDb250ZXh0KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9y
bVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKKyAgICB7CisgICAgICAgIEFT
U0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4dC0+aXNEb2N1bWVudCgpKTsKKyAgICAgICAgbV9n
bG9iYWxTY3JpcHQtPnNldENvbnRleHQobV9pbm5lckNvbnRleHQpOworICAgICAgICBtX2dsb2Jh
bFNjcmlwdC0+ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKEV2ZW50TmFtZXMoKS5sb2FkRXZl
bnQsIGZhbHNlLCBmYWxzZSkpOworCisgICAgICAgIG1fZ2xvYmFsU2NyaXB0LT51bnNldFBlbmRp
bmdBY3Rpdml0eShtX2dsb2JhbFNjcmlwdC5nZXQoKSk7CisgICAgfQorCitwcml2YXRlOgorICAg
IExvYWRFdmVudFRhc2soUGFzc1JlZlB0cjxXZWJLaXRHbG9iYWxTY3JpcHQ+IGdsb2JhbFNjcmlw
dCwgUGFzc1JlZlB0cjxHbG9iYWxTY3JpcHRDb250ZXh0PiBpbm5lckNvbnRleHQpCisgICAgICAg
IDogbV9nbG9iYWxTY3JpcHQoZ2xvYmFsU2NyaXB0KQorICAgICAgICAsIG1faW5uZXJDb250ZXh0
KGlubmVyQ29udGV4dCkKKyAgICB7CisgICAgICAgIC8vIEtlZXAgZXZlbnQgbGlzdGVuZXJzIGFs
aXZlLgorICAgICAgICBtX2dsb2JhbFNjcmlwdC0+c2V0UGVuZGluZ0FjdGl2aXR5KG1fZ2xvYmFs
U2NyaXB0LmdldCgpKTsKKyAgICB9CisKKyAgICBSZWZQdHI8V2ViS2l0R2xvYmFsU2NyaXB0PiBt
X2dsb2JhbFNjcmlwdDsKKyAgICBSZWZQdHI8R2xvYmFsU2NyaXB0Q29udGV4dD4gbV9pbm5lckNv
bnRleHQ7Cit9OworCit2b2lkIFdlYktpdEdsb2JhbFNjcmlwdDo6c2NoZWR1bGVMb2FkRXZlbnQo
UGFzc1JlZlB0cjxHbG9iYWxTY3JpcHRDb250ZXh0PiBpbm5lckNvbnRleHQpCit7CisgICAgQVNT
RVJUKCFtX2lubmVyQ29udGV4dCk7CisgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5wb3N0
VGFzayhMb2FkRXZlbnRUYXNrOjpjcmVhdGUodGhpcywgaW5uZXJDb250ZXh0KSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShHTE9CQUxfU0NSSVBUKQor
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2dsb2JhbC1zY3JpcHQvV2ViS2l0R2xvYmFsU2NyaXB0Lmgg
Yi9XZWJDb3JlL2dsb2JhbC1zY3JpcHQvV2ViS2l0R2xvYmFsU2NyaXB0LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY5MjUxNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNv
cmUvZ2xvYmFsLXNjcmlwdC9XZWJLaXRHbG9iYWxTY3JpcHQuaApAQCAtMCwwICsxLDkxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBXZWJLaXRHbG9iYWxTY3JpcHRfaAorI2RlZmluZSBXZWJLaXRHbG9iYWxTY3JpcHRfaAor
CisjaWYgRU5BQkxFKEdMT0JBTF9TQ1JJUFQpCisKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3Qu
aCIKKyNpbmNsdWRlICJBdG9taWNTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5l
ci5oIgorI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgS1VSTDsKKyAgICBjbGFzcyBHbG9i
YWxTY3JpcHRDb250ZXh0OworICAgIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CisKKyAg
ICBjbGFzcyBXZWJLaXRHbG9iYWxTY3JpcHQgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJLaXRHbG9i
YWxTY3JpcHQ+LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0LCBwdWJsaWMgRXZlbnRUYXJnZXQgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViS2l0R2xvYmFsU2NyaXB0
PiBjcmVhdGUoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSwgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViS2l0R2xvYmFsU2NyaXB0KHVybCwgbmFt
ZSwgY29udGV4dCwgZWMpKTsKKyAgICAgICAgfQorICAgICAgICB2aXJ0dWFsIH5XZWJLaXRHbG9i
YWxTY3JpcHQoKTsKKworICAgICAgICAvLyBFdmVudFRhcmdldCBBUElzCisgICAgICAgIHZpcnR1
YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0
IHsgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOyB9Cisg
ICAgICAgIHZpcnR1YWwgV2ViS2l0R2xvYmFsU2NyaXB0KiB0b1dlYktpdEdsb2JhbFNjcmlwdCgp
IHsgcmV0dXJuIHRoaXM7IH0KKworICAgICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RF
TkVSKGVycm9yKTsKKyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihsb2Fk
KTsKKworICAgICAgICB1c2luZyBSZWZDb3VudGVkPFdlYktpdEdsb2JhbFNjcmlwdD46OnJlZjsK
KyAgICAgICAgdXNpbmcgUmVmQ291bnRlZDxXZWJLaXRHbG9iYWxTY3JpcHQ+OjpkZXJlZjsKKwor
ICAgICAgICBHbG9iYWxTY3JpcHRDb250ZXh0KiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9p
bm5lckNvbnRleHQuZ2V0KCk7IH0KKyAgICAgICAgdm9pZCBzZXRDb250ZXh0KFBhc3NSZWZQdHI8
R2xvYmFsU2NyaXB0Q29udGV4dD4gY29udGV4dCk7CisKKyAgICAgICAgLy8gV2hlbiBmaXJlZCwg
d2lsbCBzZXQgdGhlIGlubmVyQ29udGV4dCBpbnRvIHRoaXMgV2ViS2l0R2xvYmFsU2NyaXB0IGFu
ZCBkaXNwYXRjaCAnbG9hZCcgZXZlbnQuCisgICAgICAgIHZvaWQgc2NoZWR1bGVMb2FkRXZlbnQo
UGFzc1JlZlB0cjxHbG9iYWxTY3JpcHRDb250ZXh0PiBpbm5lckNvbnRleHQpOworCisgICAgcHJp
dmF0ZToKKyAgICAgICAgV2ViS2l0R2xvYmFsU2NyaXB0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25z
dCBTdHJpbmcmIG5hbWUsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFeGNlcHRpb25Db2RlJik7
CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgeyByZWYoKTsgfQorICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIHsgZGVyZWYoKTsgfQorICAgICAg
ICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXREYXRhKCkgeyByZXR1cm4gJm1f
ZXZlbnRUYXJnZXREYXRhOyB9CisgICAgICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBlbnN1
cmVFdmVudFRhcmdldERhdGEoKSB7IHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7IH0KKworICAg
ICAgICBFdmVudFRhcmdldERhdGEgbV9ldmVudFRhcmdldERhdGE7CisgICAgICAgIFJlZlB0cjxH
bG9iYWxTY3JpcHRDb250ZXh0PiBtX2lubmVyQ29udGV4dDsKKyAgICB9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoR0xPQkFMX1NDUklQVCkKKworI2VuZGlm
IC8vIFdlYktpdEdsb2JhbFNjcmlwdF9oCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZ2xvYmFsLXNj
cmlwdC9XZWJLaXRHbG9iYWxTY3JpcHQuaWRsIGIvV2ViQ29yZS9nbG9iYWwtc2NyaXB0L1dlYktp
dEdsb2JhbFNjcmlwdC5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVj
ZTg5ZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvZ2xvYmFsLXNjcmlwdC9XZWJLaXRHbG9i
YWxTY3JpcHQuaWRsCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgd2luZG93IHsKKworICAgIGludGVy
ZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPUdMT0JBTF9TQ1JJUFQsCisgICAgICAgIEV2ZW50
VGFyZ2V0LAorICAgICAgICBHZW5lcmF0ZVRvSlMKKyAgICBdIFdlYktpdEdsb2JhbFNjcmlwdCB7
CisKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25lcnJvcjsKKyAgICAgICAgYXR0
cmlidXRlIEV2ZW50TGlzdGVuZXIgb25sb2FkOworCisgICAgICAgIFtDdXN0b21dIHZvaWQgYWRk
RXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFuIHVzZUNhcHR1cmUpOworICAgICAg
ICBbQ3VzdG9tXSB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBFdmVudExpc3RlbmVy
IGxpc3RlbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4g
Ym9vbGVhbiB1c2VDYXB0dXJlKTsKKworICAgICAgICBib29sZWFuIGRpc3BhdGNoRXZlbnQoaW4g
RXZlbnQgZXZ0KQorICAgICAgICAgICAgcmFpc2VzKEV2ZW50RXhjZXB0aW9uKTsKKworICAgICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgR2xvYmFsU2NyaXB0Q29udGV4dCBjb250ZXh0OworICAgIH07
Cit9CisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZ2xvYmFsLXNjcmlwdC9XZWJLaXRHbG9iYWxTY3Jp
cHRSZXBvc2l0b3J5LmNwcCBiL1dlYkNvcmUvZ2xvYmFsLXNjcmlwdC9XZWJLaXRHbG9iYWxTY3Jp
cHRSZXBvc2l0b3J5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2Zi
MmE4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9nbG9iYWwtc2NyaXB0L1dlYktpdEdsb2Jh
bFNjcmlwdFJlcG9zaXRvcnkuY3BwCkBAIC0wLDAgKzEsMTcwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaWYgRU5BQkxFKEdMT0JBTF9TQ1JJUFQpCisKKyNpbmNsdWRlICJXZWJLaXRHbG9iYWxT
Y3JpcHRSZXBvc2l0b3J5LmgiCisKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNs
dWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiRXZlbnROYW1l
cy5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJHbG9iYWxTY3JpcHRD
b250ZXh0LmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJXZWJLaXRH
bG9iYWxTY3JpcHQuaCIKKyNpbmNsdWRlICJXb3JrZXJTY3JpcHRMb2FkZXIuaCIKKyNpbmNsdWRl
ICJXb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgor
I2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisv
LyBIZWxwZXIgY2xhc3MgdG8gbG9hZCB0aGUgaW5pdGlhbCBzY3JpcHQgb24gYmVoYWxmIG9mIGEg
Z2xvYmFsIHNjcmlwdC4KK2NsYXNzIFNjcmlwdExvYWRlciA6IHB1YmxpYyBSZWZDb3VudGVkPFNj
cmlwdExvYWRlcj4sIHB1YmxpYyBBY3RpdmVET01PYmplY3QsIHByaXZhdGUgV29ya2VyU2NyaXB0
TG9hZGVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBTY3JpcHRMb2FkZXIoUGFzc1JlZlB0cjxXZWJL
aXRHbG9iYWxTY3JpcHQ+LCBQYXNzUmVmUHRyPEdsb2JhbFNjcmlwdENvbnRleHQ+IGlubmVyQ29u
dGV4dCk7CisgICAgdm9pZCBsb2FkKGNvbnN0IEtVUkwmKTsKKworcHJpdmF0ZToKKyAgICAvLyBX
b3JrZXJTY3JpcHRMb2FkZXJDbGllbnQgY2FsbGJhY2sKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5
RmluaXNoZWQoKTsKKworICAgIFJlZlB0cjxXZWJLaXRHbG9iYWxTY3JpcHQ+IG1fZ2xvYmFsU2Ny
aXB0OworICAgIFJlZlB0cjxHbG9iYWxTY3JpcHRDb250ZXh0PiBtX2lubmVyQ29udGV4dDsKKyAg
ICBPd25QdHI8V29ya2VyU2NyaXB0TG9hZGVyPiBtX3NjcmlwdExvYWRlcjsKK307CisKK1Njcmlw
dExvYWRlcjo6U2NyaXB0TG9hZGVyKFBhc3NSZWZQdHI8V2ViS2l0R2xvYmFsU2NyaXB0PiBnbG9i
YWxTY3JpcHQsIFBhc3NSZWZQdHI8R2xvYmFsU2NyaXB0Q29udGV4dD4gaW5uZXJDb250ZXh0KQor
ICAgIDogQWN0aXZlRE9NT2JqZWN0KGdsb2JhbFNjcmlwdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpLCB0aGlzKQorICAgICwgbV9nbG9iYWxTY3JpcHQoZ2xvYmFsU2NyaXB0KQorICAgICwgbV9p
bm5lckNvbnRleHQoaW5uZXJDb250ZXh0KQoreworfQorCit2b2lkIFNjcmlwdExvYWRlcjo6bG9h
ZChjb25zdCBLVVJMJiB1cmwpCit7CisgICAgLy8gTWFyayB0aGlzIG9iamVjdCBhcyBhY3RpdmUg
Zm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgbG9hZC4KKyAgICBBU1NFUlQoIWhhc1BlbmRpbmdBY3Rp
dml0eSgpKTsKKyAgICBtX3NjcmlwdExvYWRlciA9IG5ldyBXb3JrZXJTY3JpcHRMb2FkZXIoKTsK
KyAgICBtX3NjcmlwdExvYWRlci0+bG9hZEFzeW5jaHJvbm91c2x5KHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSwgdXJsLCBEZW55Q3Jvc3NPcmlnaW5SZXF1ZXN0cywgdGhpcyk7CisKKyAgICAvLyBT
dGF5IGFsaXZlIHVudGlsIHRoZSBsb2FkIGZpbmlzaGVzLgorICAgIHNldFBlbmRpbmdBY3Rpdml0
eSh0aGlzKTsKKyAgICBtX2dsb2JhbFNjcmlwdC0+c2V0UGVuZGluZ0FjdGl2aXR5KG1fZ2xvYmFs
U2NyaXB0LmdldCgpKTsKK30KKwordm9pZCBTY3JpcHRMb2FkZXI6Om5vdGlmeUZpbmlzaGVkKCkK
K3sKKyAgICBpZiAobV9zY3JpcHRMb2FkZXItPmZhaWxlZCgpKQorICAgICAgICBtX2dsb2JhbFNj
cmlwdC0+ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50
LCBmYWxzZSwgdHJ1ZSkpOworICAgIGVsc2UgeworICAgICAgICAvLyBJZiBhbm90aGVyIGxvYWRl
ciBoYXZlIG5vdCB5ZXQgaW5pdGlhbGl6ZWQgdGhlIGdsb2JhbCBzY3JpcHQgY29udGV4dCAtIGRv
IHNvLgorICAgICAgICBpZiAoIW1faW5uZXJDb250ZXh0LT5sb2FkZWQoKSkKKyAgICAgICAgICAg
IG1faW5uZXJDb250ZXh0LT5sb2FkKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+dXNlckFnZW50
KG1fc2NyaXB0TG9hZGVyLT51cmwoKSksIG1fc2NyaXB0TG9hZGVyLT5zY3JpcHQoKSk7CisgICAg
CisgICAgICAgIG1fZ2xvYmFsU2NyaXB0LT5zY2hlZHVsZUxvYWRFdmVudChtX2lubmVyQ29udGV4
dCk7CisgICAgfQorCisgICAgbV9nbG9iYWxTY3JpcHQtPnVuc2V0UGVuZGluZ0FjdGl2aXR5KG1f
Z2xvYmFsU2NyaXB0LmdldCgpKTsKKyAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsgLy8g
VGhpcyBmcmVlcyB0aGlzIG9iamVjdCAtIG11c3QgYmUgdGhlIGxhc3QgYWN0aW9uIGluIHRoaXMg
ZnVuY3Rpb24uCit9CisKK1dlYktpdEdsb2JhbFNjcmlwdFJlcG9zaXRvcnkmIFdlYktpdEdsb2Jh
bFNjcmlwdFJlcG9zaXRvcnk6Omluc3RhbmNlKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KFdlYktpdEdsb2JhbFNjcmlwdFJlcG9zaXRvcnksIGluc3RhbmNlLCAoKSk7CisgICAgcmV0dXJu
IGluc3RhbmNlOworfQorCit2b2lkIFdlYktpdEdsb2JhbFNjcmlwdFJlcG9zaXRvcnk6OmNvbm5l
Y3QoUGFzc1JlZlB0cjxXZWJLaXRHbG9iYWxTY3JpcHQ+IGdsb2JhbFNjcmlwdCwgY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlu
c3RhbmNlKCkuY29ubmVjdFRvR2xvYmFsU2NyaXB0KGdsb2JhbFNjcmlwdCwgdXJsLCBuYW1lLCBl
Yyk7Cit9CisKK3ZvaWQgV2ViS2l0R2xvYmFsU2NyaXB0UmVwb3NpdG9yeTo6ZG9jdW1lbnREZXRh
Y2hlZChEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50KTsK
KyAgICBXZWJLaXRHbG9iYWxTY3JpcHRSZXBvc2l0b3J5JiByZXBvc2l0b3J5ID0gaW5zdGFuY2Uo
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVwb3NpdG9yeS5tX2dsb2JhbFNjcmlw
dENvbnRleHRzLnNpemUoKTsgaSsrKQorICAgICAgICByZXBvc2l0b3J5Lm1fZ2xvYmFsU2NyaXB0
Q29udGV4dHNbaV0tPnJlbW92ZUZyb21Eb2N1bWVudExpc3QoZG9jdW1lbnQpOworfQorCit2b2lk
IFdlYktpdEdsb2JhbFNjcmlwdFJlcG9zaXRvcnk6OnJlbW92ZUdsb2JhbFNjcmlwdENvbnRleHQo
R2xvYmFsU2NyaXB0Q29udGV4dCogY29udGV4dCkKK3sKKyAgICBXZWJLaXRHbG9iYWxTY3JpcHRS
ZXBvc2l0b3J5JiByZXBvc2l0b3J5ID0gaW5zdGFuY2UoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgcmVwb3NpdG9yeS5tX2dsb2JhbFNjcmlwdENvbnRleHRzLnNpemUoKTsgaSsrKSB7
CisgICAgICAgIGlmIChjb250ZXh0ID09IHJlcG9zaXRvcnkubV9nbG9iYWxTY3JpcHRDb250ZXh0
c1tpXSkgeworICAgICAgICAgICAgcmVwb3NpdG9yeS5tX2dsb2JhbFNjcmlwdENvbnRleHRzLnJl
bW92ZShpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9p
ZCBXZWJLaXRHbG9iYWxTY3JpcHRSZXBvc2l0b3J5Ojpjb25uZWN0VG9HbG9iYWxTY3JpcHQoUGFz
c1JlZlB0cjxXZWJLaXRHbG9iYWxTY3JpcHQ+IGdsb2JhbFNjcmlwdCwgY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIEFTU0VSVChn
bG9iYWxTY3JpcHQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+
Y2FuQWNjZXNzKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUodXJsKS5nZXQoKSkpOworICAgIC8vIEZl
dGNoIGEgc2hhcmVkIGdsb2JhbCBzY3JpcHQgY29ycmVzcG9uZGluZyB0byB0aGlzIFdlYktpdEdv
YmFsU2NyaXB0IG9iamVjdC4KKyAgICBSZWZQdHI8R2xvYmFsU2NyaXB0Q29udGV4dD4gaW5uZXJD
b250ZXh0ID0gZ2V0R2xvYmFsU2NyaXB0Q29udGV4dChuYW1lLCB1cmwpOworCisgICAgaW5uZXJD
b250ZXh0LT5hZGRUb0RvY3VtZW50c0xpc3QoZ2xvYmFsU2NyaXB0LT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpOworICAgIGlmIChpbm5lckNvbnRleHQtPnVybCgpICE9IHVybCkgeworICAgICAg
ICAvLyBHbG9iYWwgc2NyaXB0IGFscmVhZHkgZXhpc3RlZCB1bmRlciBhbHRlcm5hdGUgVVJMIC0g
cmV0dXJuIGFuIGVycm9yLgorICAgICAgICBlYyA9IFVSTF9NSVNNQVRDSF9FUlI7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgLy8gSWYgZ2xvYmFsIHNjcmlwdCBpcyBhbHJlYWR5IHJ1bm5p
bmcsIGp1c3Qgc2NoZWR1bGUgYSBsb2FkIGV2ZW50IC0gb3RoZXJ3aXNlLCBraWNrIG9mZiBhIGxv
YWRlciB0byBsb2FkIHRoZSBzY3JpcHQuCisgICAgaWYgKGlubmVyQ29udGV4dC0+bG9hZGVkKCkp
CisgICAgICAgIGdsb2JhbFNjcmlwdC0+c2NoZWR1bGVMb2FkRXZlbnQoaW5uZXJDb250ZXh0KTsK
KyAgICBlbHNlIHsKKyAgICAgICAgUmVmUHRyPFNjcmlwdExvYWRlcj4gbG9hZGVyID0gYWRvcHRS
ZWYobmV3IFNjcmlwdExvYWRlcihnbG9iYWxTY3JpcHQsIGlubmVyQ29udGV4dC5yZWxlYXNlKCkp
KTsKKyAgICAgICAgbG9hZGVyLT5sb2FkKHVybCk7IC8vIFBlbmRpbmcgYWN0aXZpdHkgd2lsbCBr
ZWVwIHRoZSBsb2FkZXIgYWxpdmUuCisgICAgfQorfQorCisvLyBDcmVhdGVzIGEgbmV3IEdsb2Jh
bFNjcmlwdENvbnRleHQgb3IgcmV0dXJucyBhbiBleGlzdGluZyBvbmUgZnJvbSB0aGUgcmVwb3Np
dG9yeS4KK1Bhc3NSZWZQdHI8R2xvYmFsU2NyaXB0Q29udGV4dD4gV2ViS2l0R2xvYmFsU2NyaXB0
UmVwb3NpdG9yeTo6Z2V0R2xvYmFsU2NyaXB0Q29udGV4dChjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IEtVUkwmIHVybCkKK3sKKyAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpbiA9IFNl
Y3VyaXR5T3JpZ2luOjpjcmVhdGUodXJsKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9nbG9iYWxTY3JpcHRDb250ZXh0cy5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAobV9nbG9i
YWxTY3JpcHRDb250ZXh0c1tpXS0+bWF0Y2hlcyhuYW1lLCBvcmlnaW4sIHVybCkpCisgICAgICAg
ICAgICByZXR1cm4gbV9nbG9iYWxTY3JpcHRDb250ZXh0c1tpXTsKKyAgICB9CisKKyAgICBSZWZQ
dHI8R2xvYmFsU2NyaXB0Q29udGV4dD4gZ2xvYmFsU2NyaXB0Q29udGV4dCA9IEdsb2JhbFNjcmlw
dENvbnRleHQ6OmNyZWF0ZShuYW1lLCB1cmwsIG9yaWdpbi5yZWxlYXNlKCkpOworICAgIG1fZ2xv
YmFsU2NyaXB0Q29udGV4dHMuYXBwZW5kKGdsb2JhbFNjcmlwdENvbnRleHQuZ2V0KCkpOworICAg
IHJldHVybiBnbG9iYWxTY3JpcHRDb250ZXh0LnJlbGVhc2UoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdMT0JBTF9TQ1JJUFQpCisKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvZ2xvYmFsLXNjcmlwdC9XZWJLaXRHbG9iYWxTY3JpcHRSZXBvc2l0b3J5Lmgg
Yi9XZWJDb3JlL2dsb2JhbC1zY3JpcHQvV2ViS2l0R2xvYmFsU2NyaXB0UmVwb3NpdG9yeS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMGExMjQKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL2dsb2JhbC1zY3JpcHQvV2ViS2l0R2xvYmFsU2NyaXB0UmVwb3NpdG9yeS5o
CkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYktpdEdsb2JhbFNjcmlwdFJlcG9zaXRvcnlfaAor
I2RlZmluZSBXZWJLaXRHbG9iYWxTY3JpcHRSZXBvc2l0b3J5X2gKKworI2lmIEVOQUJMRShHTE9C
QUxfU0NSSVBUKQorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBpbnQgRXhjZXB0aW9u
Q29kZTsKKworY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBLVVJMOworY2xhc3MgR2xvYmFsU2NyaXB0
Q29udGV4dDsKK2NsYXNzIFdlYktpdEdsb2JhbFNjcmlwdDsKK2NsYXNzIFN0cmluZzsKKworLy8g
SW50ZXJmYWNlIHRvIGEgcmVwb3NpdG9yeSB3aGljaCBtYW5hZ2VzIHJlZmVyZW5jZXMgdG8gdGhl
IHNldCBvZiBhY3RpdmUgZ2xvYmFsIHNjcmlwdHMuCitjbGFzcyBXZWJLaXRHbG9iYWxTY3JpcHRS
ZXBvc2l0b3J5IHsKK3B1YmxpYzoKKyAgICAvLyBDb25uZWN0cyB0aGUgcGFzc2VkIFdlYktpdEds
b2JhbFNjcmlwdCBvYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIHJ1bm5pbmcgZ2xvYmFsIHNjcmlw
dCwgY3JlYXRpbmcgYSBuZXcgb25lIGlmIG5lY2Vzc2FyeS4KKyAgICBzdGF0aWMgdm9pZCBjb25u
ZWN0KFBhc3NSZWZQdHI8V2ViS2l0R2xvYmFsU2NyaXB0PiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0
cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgc3RhdGljIHZvaWQgcmVtb3ZlR2xv
YmFsU2NyaXB0Q29udGV4dChHbG9iYWxTY3JpcHRDb250ZXh0Kik7CisgICAgc3RhdGljIHZvaWQg
ZG9jdW1lbnREZXRhY2hlZChEb2N1bWVudCopOworCitwcml2YXRlOgorICAgIFdlYktpdEdsb2Jh
bFNjcmlwdFJlcG9zaXRvcnkoKSB7IH0KKyAgICBzdGF0aWMgV2ViS2l0R2xvYmFsU2NyaXB0UmVw
b3NpdG9yeSYgaW5zdGFuY2UoKTsKKyAgICB2b2lkIGNvbm5lY3RUb0dsb2JhbFNjcmlwdChQYXNz
UmVmUHRyPFdlYktpdEdsb2JhbFNjcmlwdD4sIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIG5h
bWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPEdsb2JhbFNjcmlwdENvbnRleHQ+
IGdldEdsb2JhbFNjcmlwdENvbnRleHQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBLVVJMJik7
CisKKyAgICAvLyBMaXN0IG9mIGdsb2JhbCBzY3JpcHQgY29udGV4dHMuCisgICAgLy8gRXhwZWN0
YXRpb24gaXMgdGhhdCB0aGVyZSB3aWxsIGJlIGEgbGltaXRlZCBudW1iZXIgb2YgZ2xvYmFsIHNj
cmlwdHMsIGFuZCBzbyB0cmFja2luZyB0aGVtIGluIGEgVmVjdG9yIGlzIG1vcmUgZWZmaWNpZW50
IHRoYW4gbmVzdGVkIEhhc2hNYXBzLgorICAgIHR5cGVkZWYgVmVjdG9yPEdsb2JhbFNjcmlwdENv
bnRleHQqPiBHbG9iYWxTY3JpcHRDb250ZXh0TGlzdDsKKyAgICBHbG9iYWxTY3JpcHRDb250ZXh0
TGlzdCBtX2dsb2JhbFNjcmlwdENvbnRleHRzOworCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoR0xPQkFMX1NDUklQVCkKKworI2VuZGlmIC8vIFdlYktp
dEdsb2JhbFNjcmlwdFJlcG9zaXRvcnlfaAorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyU2NyaXB0TG9hZGVyLmNwcCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2Fk
ZXIuY3BwCmluZGV4IDUyYmFmMmQuLmZkMWE5YjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXJTY3JpcHRMb2FkZXIuY3BwCisrKyBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJTY3Jp
cHRMb2FkZXIuY3BwCkBAIC01OCw3ICs1OCw3IEBAIHZvaWQgV29ya2VyU2NyaXB0TG9hZGVyOjps
b2FkU3luY2hyb25vdXNseShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpCiAg
ICAgaWYgKCFyZXF1ZXN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQoc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpOworICAgIEFTU0VSVCghc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC0+aXNEb2N1bWVudCgpKTsKIAogICAgIFRocmVhZGFibGVMb2FkZXJPcHRp
b25zIG9wdGlvbnM7CiAgICAgb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzID0gdHJ1ZTsK
</data>
<flag name="commit-queue"
          id="25033"
          type_id="3"
          status="-"
          setter="dimich"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43737</attachid>
            <date>2009-11-23 14:54:50 -0800</date>
            <delta_ts>2009-11-24 14:35:03 -0800</delta_ts>
            <desc>Patch updated for the name change.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>58294</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NzRkMmI5My4uMDE0ZTg4MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiw5OCBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgogCisgICAgICAgIEluaXRpYWwgaW1wbGVtZW50YXRpb24gb2YgV2ViS2l0
U2hhcmVkU2NyaXB0IGFuZCBTaGFyZWRTY3JpcHRDb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTU2OQorCisgICAgICAgIE5vIG5ldyB0ZXN0
cyBzaW5jZSB0aGVyZSBpcyBubyBiaW5kaW5ncyB5ZXQgKHNvb24gdG8gY29tZSkuCisKKyAgICAg
ICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOiBBZGQgV2ViS2l0U2hhcmVkU2NyaXB0IGFuZCBTaGFy
ZWRTY3JpcHRDb250ZXh0IHRvIGEgbGlzdCBvZiBpZGwgZmlsZXMuCisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZGV0YWNoKTogTm90aWZ5IFdlYktpdFNoYXJl
ZFNjcmlwdFJlcG9zaXRvcnkgdGhhdCBkb2N1bWVudCBpcyBkZXRhY2hpbmcuCisgICAgICAgICog
ZG9tL0V2ZW50VGFyZ2V0LmNwcDogQWRkIG5ldyBjYXN0aW5nIG1ldGhvZHMsIHNpbmNlIHRoZSBu
ZXcgdHlwZXMgYXJlIEV2ZW50VGFyZ2V0cy4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0
Ojp0b1dlYktpdFNoYXJlZFNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdldDo6
dG9TaGFyZWRTY3JpcHRDb250ZXh0KToKKyAgICAgICAgKiBkb20vRXZlbnRUYXJnZXQuaDogRGl0
dG8KKyAgICAgICAgKiBkb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oOgorICAgICAgICAoV2Vi
Q29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6aXNTaGFyZWRTY3JpcHRDb250ZXh0KTogTmV3
IHZpcnR1YWwgbWV0aG9kLCBzaW5jZSB0aGVyZSBpcyBhIG5ldyB0eXBlIG9mIGNvbnRleHQuCisK
KyAgICAgICAgKiBzaGFyZWQtc2NyaXB0L1NoYXJlZFNjcmlwdENvbnRleHQuY3BwOiBBZGRlZC4g
U2ltaWxhciB0byBXb3JrZXJDb250ZXh0LCBidXQgdy9vIHRocmVhZGluZy4KKyAgICAgICAgKFdl
YkNvcmU6OlNoYXJlZFNjcmlwdENvbnRleHQ6OlNoYXJlZFNjcmlwdENvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2hhcmVkU2NyaXB0Q29udGV4dDo6flNoYXJlZFNjcmlwdENvbnRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2hhcmVkU2NyaXB0Q29udGV4dDo6Y2xlYXJTY3JpcHQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcmVkU2NyaXB0Q29udGV4dDo6dmlydHVhbFVSTCk6CisgICAgICAg
IChXZWJDb3JlOjpTaGFyZWRTY3JpcHRDb250ZXh0Ojp2aXJ0dWFsQ29tcGxldGVVUkwpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcmVkU2NyaXB0Q29udGV4dDo6cmVwb3J0RXhjZXB0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXJlZFNjcmlwdENvbnRleHQ6OmFkZE1lc3NhZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6U2hhcmVkU2NyaXB0Q29udGV4dDo6cmVzb3VyY2VSZXRyaWV2ZWRCeVhNTEh0
dHBSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFNjcmlwdENvbnRleHQ6OnNjcmlw
dEltcG9ydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFNjcmlwdENvbnRleHQ6Om1hdGNo
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkU2NyaXB0Q29udGV4dDo6YWRkVG9Eb2N1bWVu
dHNMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFNjcmlwdENvbnRleHQ6OmRlc3RydWN0
aW9uVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRTY3JpcHRDb250ZXh0Ojpy
ZW1vdmVGcm9tRG9jdW1lbnRMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFNjcmlwdENv
bnRleHQ6OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkU2NyaXB0Q29udGV4dDo6cG9z
dFRhc2spOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkU2NyaXB0Q29udGV4dDo6ZXZlbnRUYXJn
ZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFNjcmlwdENvbnRleHQ6OmVuc3VyZUV2
ZW50VGFyZ2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRTY3JpcHRDb250ZXh0Ojpz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KToKKyAgICAgICAgKiBzaGFyZWQtc2NyaXB0L1NoYXJlZFNj
cmlwdENvbnRleHQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRTY3JpcHRDb250
ZXh0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkU2NyaXB0Q29udGV4dDo6aXNT
aGFyZWRTY3JpcHRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFNjcmlwdENvbnRl
eHQ6OnVzZXJBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRTY3JpcHRDb250ZXh0Ojp0
b1NoYXJlZFNjcmlwdENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkU2NyaXB0Q29u
dGV4dDo6c2VsZik6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRTY3JpcHRDb250ZXh0OjpzY3Jp
cHQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkU2NyaXB0Q29udGV4dDo6bG9hZGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXJlZFNjcmlwdENvbnRleHQ6Om5hbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6U2hhcmVkU2NyaXB0Q29udGV4dDo6cmVmRXZlbnRUYXJnZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6U2hhcmVkU2NyaXB0Q29udGV4dDo6ZGVyZWZFdmVudFRhcmdldCk6CisgICAgICAgIChX
ZWJDb3JlOjpTaGFyZWRTY3JpcHRDb250ZXh0OjpyZWZTY3JpcHRFeGVjdXRpb25Db250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFNjcmlwdENvbnRleHQ6OmRlcmVmU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCk6CisgICAgICAgICogc2hhcmVkLXNjcmlwdC9TaGFyZWRTY3JpcHRDb250ZXh0
LmlkbDogQWRkZWQuCisKKyAgICAgICAgKiBzaGFyZWQtc2NyaXB0L1NoYXJlZFNjcmlwdENvbnRy
b2xsZXIuaDogCisgICAgICAgIEFkZGVkLiBFbXB0eSBpbXBsZW1lbnRhdGlvbiBvZiBhIFNjcmlw
dENvbnRyb2xsZXIsIHdpbGwgY29tZSBsYXRlciBhcyBwYXJ0IG9mIGJpbmRpbmdzLiBOZWVkZWQg
dG8gY29tcGlsZS4KKworICAgICAgICAqIHNoYXJlZC1zY3JpcHQvV2ViS2l0U2hhcmVkU2NyaXB0
LmNwcDogQWRkZWQuIEV2ZW50VGFyZ2V0LWJhc2VkIERPTSBvYmplY3QuCisgICAgICAgIChXZWJD
b3JlOjpXZWJLaXRTaGFyZWRTY3JpcHQ6OldlYktpdFNoYXJlZFNjcmlwdCk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJLaXRTaGFyZWRTY3JpcHQ6On5XZWJLaXRTaGFyZWRTY3JpcHQpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViS2l0U2hhcmVkU2NyaXB0OjpzZXRDb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxvYWRFdmVudFRhc2s6OmNyZWF0ZSk6IEZpcmVzIGFzeW5jaHJvbm91cyAnbG9hZCcg
ZXZlbnQgd2hlbiB1bmRlcmx5aW5nIFNoYXJlZFNjcmlwdENvbnRleHQgaXMgaW5pdGlhbGl6ZWQu
CisgICAgICAgIChXZWJDb3JlOjpMb2FkRXZlbnRUYXNrOjpwZXJmb3JtVGFzayk6CisgICAgICAg
IChXZWJDb3JlOjpMb2FkRXZlbnRUYXNrOjpMb2FkRXZlbnRUYXNrKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYktpdFNoYXJlZFNjcmlwdDo6c2NoZWR1bGVMb2FkRXZlbnQpOgorICAgICAgICAqIHNo
YXJlZC1zY3JpcHQvV2ViS2l0U2hhcmVkU2NyaXB0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6V2ViS2l0U2hhcmVkU2NyaXB0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0
U2hhcmVkU2NyaXB0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OldlYktpdFNoYXJlZFNjcmlwdDo6dG9XZWJLaXRTaGFyZWRTY3JpcHQpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViS2l0U2hhcmVkU2NyaXB0Ojpjb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YktpdFNoYXJlZFNjcmlwdDo6cmVmRXZlbnRUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
S2l0U2hhcmVkU2NyaXB0OjpkZXJlZkV2ZW50VGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YktpdFNoYXJlZFNjcmlwdDo6ZXZlbnRUYXJnZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YktpdFNoYXJlZFNjcmlwdDo6ZW5zdXJlRXZlbnRUYXJnZXREYXRhKToKKyAgICAgICAgKiBzaGFy
ZWQtc2NyaXB0L1dlYktpdFNoYXJlZFNjcmlwdC5pZGw6IEFkZGVkLgorCisgICAgICAgICogc2hh
cmVkLXNjcmlwdC9XZWJLaXRTaGFyZWRTY3JpcHRSZXBvc2l0b3J5LmNwcDogQWRkZWQuIEltcGxl
bWVudHMgYSBsaXN0IG9mIHJ1bm5pbmcgU2hhcmVkU2NyaXB0Q29udGV4dHMuCisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRMb2FkZXI6OlNjcmlwdExvYWRlcik6IFRoZSBoZWxwZXIgY2xhc3MgdG8g
bG9hZCBhbiBpbml0aWFsIHNjcmlwdCBvZiBTaGFyZWRTY3JpcHRDb250ZXh0LgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0TG9hZGVyOjpsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdExv
YWRlcjo6bm90aWZ5RmluaXNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0U2hhcmVkU2Ny
aXB0UmVwb3NpdG9yeTo6aW5zdGFuY2UpOiBSZXBvc2l0b3J5IGhhcyBhIHN0YXRpYyBnbG9iYWwg
aW5zdGFuY2UuCisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRTaGFyZWRTY3JpcHRSZXBvc2l0b3J5
Ojpjb25uZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdFNoYXJlZFNjcmlwdFJlcG9zaXRv
cnk6OmRvY3VtZW50RGV0YWNoZWQpOiBDYWxsZWQgZnJvbSBEb2N1bWVudDo6ZGV0YWNoKCkuCisg
ICAgICAgIChXZWJDb3JlOjpXZWJLaXRTaGFyZWRTY3JpcHRSZXBvc2l0b3J5OjpyZW1vdmVTaGFy
ZWRTY3JpcHRDb250ZXh0KTogQ2FsbGVkIGZyb20gflNoYXJlZFNjcmlwdENvbnRleHQoKS4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYktpdFNoYXJlZFNjcmlwdFJlcG9zaXRvcnk6OmNvbm5lY3RUb1No
YXJlZFNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRTaGFyZWRTY3JpcHRSZXBvc2l0
b3J5OjpnZXRTaGFyZWRTY3JpcHRDb250ZXh0KToKKyAgICAgICAgKiBzaGFyZWQtc2NyaXB0L1dl
YktpdFNoYXJlZFNjcmlwdFJlcG9zaXRvcnkuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpX
ZWJLaXRTaGFyZWRTY3JpcHRSZXBvc2l0b3J5OjpXZWJLaXRTaGFyZWRTY3JpcHRSZXBvc2l0b3J5
KToKKworICAgICAgICAqIHdvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldvcmtlclNjcmlwdExvYWRlcjo6bG9hZFN5bmNocm9ub3VzbHkpOiBDaGFuZ2Vk
IEFTU0VSVCBiZWNhdXNlIHRoaXMgbG9hZGVyIGNhbiB3b3JrIHdpdGggU2hhcmVkU2NyaXB0IGFz
IHdlbGwuCisKKzIwMDktMTEtMjMgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKICAgICAgICAgQWRkIEVO
QUJMRV9TSEFSRURfU0NSSVBUIGZlYXR1cmUgZGVmaW5lIGFuZCBmbGFnIGZvciBidWlsZC13ZWJr
aXQKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMxNDQ0
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1dlYkNvcmUvRGVy
aXZlZFNvdXJjZXMubWFrZQppbmRleCA1ODQ0NjA5Li41M2ViZjY3IDEwMDY0NAotLS0gYS9XZWJD
b3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtl
CkBAIC0zOSw2ICszOSw3IEBAIFZQQVRIID0gXAogICAgICQoV2ViQ29yZSkvbm90aWZpY2F0aW9u
cyBcCiAgICAgJChXZWJDb3JlKS9wYWdlIFwKICAgICAkKFdlYkNvcmUpL3BsdWdpbnMgXAorICAg
ICQoV2ViQ29yZSkvc2hhcmVkLXNjcmlwdCBcCiAgICAgJChXZWJDb3JlKS9zdG9yYWdlIFwKICAg
ICAkKFdlYkNvcmUpL3htbCBcCiAgICAgJChXZWJDb3JlKS93bWwgXApAQCAtMjMyLDYgKzIzMyw3
IEBAIERPTV9DTEFTU0VTID0gXAogICAgIFJhbmdlIFwKICAgICBSYW5nZUV4Y2VwdGlvbiBcCiAg
ICAgUmVjdCBcCisgICAgU2hhcmVkU2NyaXB0Q29udGV4dCBcCiAgICAgU2hhcmVkV29ya2VyIFwK
ICAgICBTaGFyZWRXb3JrZXJDb250ZXh0IFwKICAgICBTUUxFcnJvciBcCkBAIC00MDAsNiArNDAy
LDcgQEAgRE9NX0NMQVNTRVMgPSBcCiAgICAgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSBcCiAgICAg
V2ViS2l0Q1NTTWF0cml4IFwKICAgICBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSBcCisgICAgV2Vi
S2l0U2hhcmVkU2NyaXB0IFwKICAgICBXZWJLaXRQb2ludCBcCiAgICAgV2ViS2l0VHJhbnNpdGlv
bkV2ZW50IFwKICAgICBXZWJTb2NrZXQgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oKaW5kZXggYjI0YTQwMi4uNzIzZGQxNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCkBAIC00MTc3Miw2ICs0MTc3MiwzOCBAQAogCQkJPC9GaWx0ZXI+DQogCQk8L0ZpbHRl
cj4NCiAJCTxGaWx0ZXINCisJCQlOYW1lPSJzaGFyZWQtc2NyaXB0Ig0KKwkJCT4NCisJCQk8Rmls
ZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHNoYXJlZC1zY3JpcHRcU2hhcmVkU2NyaXB0Q29udGV4
dC5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlxzaGFyZWQtc2NyaXB0XFNoYXJlZFNjcmlwdENvbnRleHQuaCINCisJCQkJPg0KKwkJCTwv
RmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHNoYXJlZC1zY3JpcHRcU2hh
cmVkU2NyaXB0Q29udHJvbGxlci5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQor
CQkJCVJlbGF0aXZlUGF0aD0iLi5cc2hhcmVkLXNjcmlwdFxXZWJLaXRTaGFyZWRTY3JpcHQuY3Bw
Ig0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
c2hhcmVkLXNjcmlwdFxXZWJLaXRTaGFyZWRTY3JpcHQuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4N
CisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHNoYXJlZC1zY3JpcHRcV2ViS2l0U2hh
cmVkU2NyaXB0UmVwb3NpdG9yeS5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUN
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlxzaGFyZWQtc2NyaXB0XFdlYktpdFNoYXJlZFNjcmlwdFJl
cG9zaXRvcnkuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCTwvRmlsdGVyPg0KKwkJPEZpbHRl
cg0KIAkJCU5hbWU9InN0b3JhZ2UiDQogCQkJPg0KIAkJCTxGaWxlDQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBhZWFkZWJlLi44OWU4MzdmIDEwMDY0NAot
LS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjQyLDYgKzI0MiwxNCBA
QAogCQkxODVCQ0YyOTBGMzI3OUNFMDAwRUEyNjIgLyogVGhyZWFkVGltZXJzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxODVCQ0YyNzBGMzI3OUNFMDAw
RUEyNjIgLyogVGhyZWFkVGltZXJzLmggKi87IH07CiAJCTE4ODYwNEIzMEYyRTY1NEEwMDBCNjQ0
MyAvKiBET01UaW1lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxODg2MDRCMTBGMkU2NTRBMDAwQjY0NDMgLyogRE9NVGltZXIuY3BwICovOyB9Owog
CQkxODg2MDRCNDBGMkU2NTRBMDAwQjY0NDMgLyogRE9NVGltZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE4ODYwNEIyMEYyRTY1NEEwMDBCNjQ0MyAv
KiBET01UaW1lci5oICovOyB9OworCQkxOEM1RkNBNTEwQTM5OTFGMDA0ODQzOEQgLyogV2ViS2l0
U2hhcmVkU2NyaXB0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE4QzVGQ0EwMTBBMzk5MUYwMDQ4NDM4RCAvKiBXZWJLaXRTaGFyZWRTY3JpcHQuY3Bw
ICovOyB9OworCQkxOEM1RkNBNjEwQTM5OTFGMDA0ODQzOEQgLyogV2ViS2l0U2hhcmVkU2NyaXB0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxOEM1RkNB
MTEwQTM5OTFGMDA0ODQzOEQgLyogV2ViS2l0U2hhcmVkU2NyaXB0LmggKi87IH07CisJCTE4QzVG
Q0E3MTBBMzk5MUYwMDQ4NDM4RCAvKiBXZWJLaXRTaGFyZWRTY3JpcHQuaWRsIGluIFJlc291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxOEM1RkNBMjEwQTM5OTFGMDA0
ODQzOEQgLyogV2ViS2l0U2hhcmVkU2NyaXB0LmlkbCAqLzsgfTsKKwkJMThDNUZDQTgxMEEzOTkx
RjAwNDg0MzhEIC8qIFdlYktpdFNoYXJlZFNjcmlwdFJlcG9zaXRvcnkuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMThDNUZDQTMxMEEzOTkxRjAwNDg0
MzhEIC8qIFdlYktpdFNoYXJlZFNjcmlwdFJlcG9zaXRvcnkuY3BwICovOyB9OworCQkxOEM1RkNB
OTEwQTM5OTFGMDA0ODQzOEQgLyogV2ViS2l0U2hhcmVkU2NyaXB0UmVwb3NpdG9yeS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMThDNUZDQTQxMEEzOTkx
RjAwNDg0MzhEIC8qIFdlYktpdFNoYXJlZFNjcmlwdFJlcG9zaXRvcnkuaCAqLzsgfTsKKwkJMThD
NUZDQjcxMEEzQzZGMjAwNDg0MzhEIC8qIFNoYXJlZFNjcmlwdENvbnRleHQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMThDNUZDQjQxMEEzQzZGMjAw
NDg0MzhEIC8qIFNoYXJlZFNjcmlwdENvbnRleHQuY3BwICovOyB9OworCQkxOEM1RkNCODEwQTND
NkYyMDA0ODQzOEQgLyogU2hhcmVkU2NyaXB0Q29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMThDNUZDQjUxMEEzQzZGMjAwNDg0MzhEIC8qIFNo
YXJlZFNjcmlwdENvbnRleHQuaCAqLzsgfTsKKwkJMThDNUZDQjkxMEEzQzZGMjAwNDg0MzhEIC8q
IFNoYXJlZFNjcmlwdENvbnRleHQuaWRsIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxOEM1RkNCNjEwQTNDNkYyMDA0ODQzOEQgLyogU2hhcmVkU2NyaXB0
Q29udGV4dC5pZGwgKi87IH07CiAJCTE4RjgzMUI4MEZENDhDNzgwMEQ4QzU2QiAvKiBXb3JrZXJM
b2FkZXJQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMThGODMxQjcwRkQ0OEM3ODAwRDhDNTZCIC8qIFdvcmtlckxvYWRlclByb3h5LmggKi87IH07
CiAJCTFBMEQ1NzM2MEE1Qzc3RkUwMDdFREQ0QyAvKiBPdmVyZmxvd0V2ZW50LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMEQ1NzM0MEE1Qzc3RkUw
MDdFREQ0QyAvKiBPdmVyZmxvd0V2ZW50LmNwcCAqLzsgfTsKIAkJMUEwRDU3MzcwQTVDNzdGRTAw
N0VERDRDIC8qIE92ZXJmbG93RXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBMEQ1NzM1MEE1Qzc3RkUwMDdFREQ0QyAvKiBPdmVyZmxvd0V2ZW50
LmggKi87IH07CkBAIC01NDI5LDYgKzU0MzcsMTQgQEAKIAkJMTg1QkNGMjcwRjMyNzlDRTAwMEVB
MjYyIC8qIFRocmVhZFRpbWVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBU
aHJlYWRUaW1lcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTg4NjA0QjEwRjJF
NjU0QTAwMEI2NDQzIC8qIERPTVRpbWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IERPTVRpbWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTg4
NjA0QjIwRjJFNjU0QTAwMEI2NDQzIC8qIERPTVRpbWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERPTVRpbWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE4
QzVGQ0EwMTBBMzk5MUYwMDQ4NDM4RCAvKiBXZWJLaXRTaGFyZWRTY3JpcHQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViS2l0U2hhcmVkU2NyaXB0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMThDNUZDQTExMEEzOTkxRjAwNDg0MzhEIC8qIFdl
YktpdFNoYXJlZFNjcmlwdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJL
aXRTaGFyZWRTY3JpcHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMThDNUZDQTIx
MEEzOTkxRjAwNDg0MzhEIC8qIFdlYktpdFNoYXJlZFNjcmlwdC5pZGwgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBwYXRoID0gV2ViS2l0U2hhcmVkU2NyaXB0LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMThDNUZDQTMxMEEzOTkxRjAwNDg0MzhEIC8qIFdlYktpdFNoYXJlZFNjcmlwdFJlcG9z
aXRvcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViS2l0U2hh
cmVkU2NyaXB0UmVwb3NpdG9yeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE4
QzVGQ0E0MTBBMzk5MUYwMDQ4NDM4RCAvKiBXZWJLaXRTaGFyZWRTY3JpcHRSZXBvc2l0b3J5Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdFNoYXJlZFNjcmlwdFJlcG9z
aXRvcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMThDNUZDQjQxMEEzQzZGMjAw
NDg0MzhEIC8qIFNoYXJlZFNjcmlwdENvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU2hhcmVkU2NyaXB0Q29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTE4QzVGQ0I1MTBBM0M2RjIwMDQ4NDM4RCAvKiBTaGFyZWRTY3JpcHRDb250
ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYXJlZFNjcmlwdENvbnRl
eHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMThDNUZDQjYxMEEzQzZGMjAwNDg0
MzhEIC8qIFNoYXJlZFNjcmlwdENvbnRleHQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNo
YXJlZFNjcmlwdENvbnRleHQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxOEY4
MzFCNzBGRDQ4Qzc4MDBEOEM1NkIgLyogV29ya2VyTG9hZGVyUHJveHkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gV29ya2VyTG9hZGVyUHJveHkuaDsgcGF0aCA9IHdvcmtlcnMv
V29ya2VyTG9hZGVyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEwRDU3
MzQwQTVDNzdGRTAwN0VERDRDIC8qIE92ZXJmbG93RXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE92ZXJmbG93RXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxQTBENTczNTBBNUM3N0ZFMDA3RURENEMgLyogT3ZlcmZsb3dFdmVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3ZlcmZsb3dFdmVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAwNTYsNiArMTAwNzIsNyBAQAogCQkJCUJDRjFB
NUJBMDk3ODMyMDkwMDYxQTEyMyAvKiBwbGF0Zm9ybSAqLywKIAkJCQk1RENGODM2OTBENTkxNTc4
MDA5NTNCQzYgLyogcGx1Z2lucyAqLywKIAkJCQlGNTIzRDJGMzAyREU0NDNCMDE4NjM1Q0EgLyog
cmVuZGVyaW5nICovLAorCQkJCTE4QzVGQzlGMTBBMzk5MUYwMDQ4NDM4RCAvKiBzaGFyZWQtc2Ny
aXB0ICovLAogCQkJCTFBRTgyRUM5MENBQUUxNzcwMDIyMzdBRSAvKiBzdG9yYWdlICovLAogCQkJ
CUIyMjI3N0NBMEQwMEJGMUUwMDcxQjc4MiAvKiBzdmcgKi8sCiAJCQkJNTE4QTM0QkQxMDI2Qzgz
MTAwMUI2ODk2IC8qIHdlYnNvY2tldHMgKi8sCkBAIC0xMDE1Nyw2ICsxMDE3NCwyMSBAQAogCQkJ
cGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYkNvcmU7CiAJCQlzb3VyY2VUcmVlID0gQlVJTFRfUFJP
RFVDVFNfRElSOwogCQl9OworCQkxOEM1RkM5RjEwQTM5OTFGMDA0ODQzOEQgLyogc2hhcmVkLXNj
cmlwdCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMThD
NUZDQjQxMEEzQzZGMjAwNDg0MzhEIC8qIFNoYXJlZFNjcmlwdENvbnRleHQuY3BwICovLAorCQkJ
CTE4QzVGQ0I1MTBBM0M2RjIwMDQ4NDM4RCAvKiBTaGFyZWRTY3JpcHRDb250ZXh0LmggKi8sCisJ
CQkJMThDNUZDQjYxMEEzQzZGMjAwNDg0MzhEIC8qIFNoYXJlZFNjcmlwdENvbnRleHQuaWRsICov
LAorCQkJCTE4QzVGQ0EwMTBBMzk5MUYwMDQ4NDM4RCAvKiBXZWJLaXRTaGFyZWRTY3JpcHQuY3Bw
ICovLAorCQkJCTE4QzVGQ0ExMTBBMzk5MUYwMDQ4NDM4RCAvKiBXZWJLaXRTaGFyZWRTY3JpcHQu
aCAqLywKKwkJCQkxOEM1RkNBMjEwQTM5OTFGMDA0ODQzOEQgLyogV2ViS2l0U2hhcmVkU2NyaXB0
LmlkbCAqLywKKwkJCQkxOEM1RkNBMzEwQTM5OTFGMDA0ODQzOEQgLyogV2ViS2l0U2hhcmVkU2Ny
aXB0UmVwb3NpdG9yeS5jcHAgKi8sCisJCQkJMThDNUZDQTQxMEEzOTkxRjAwNDg0MzhEIC8qIFdl
YktpdFNoYXJlZFNjcmlwdFJlcG9zaXRvcnkuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gInNoYXJl
ZC1zY3JpcHQiOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJMUEyRTZFNTYw
Q0M1NTFFMDAwNEEyMDYyIC8qIHNxbCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCkBAIC0xODEzMSw2ICsxODE2Myw5IEBACiAJCQkJMTQ3OUZBRjAxMDlBRTM3NTAw
REVENjU1IC8qIFJlbmRlclJ1YnlCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDc5RkFGMjEw
OUFFMzc1MDBERUQ2NTUgLyogUmVuZGVyUnVieVJ1bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3
OUZBRjQxMDlBRTM3NTAwREVENjU1IC8qIFJlbmRlclJ1YnlUZXh0LmggaW4gSGVhZGVycyAqLywK
KwkJCQkxOEM1RkNBNjEwQTM5OTFGMDA0ODQzOEQgLyogV2ViS2l0U2hhcmVkU2NyaXB0LmggaW4g
SGVhZGVycyAqLywKKwkJCQkxOEM1RkNBOTEwQTM5OTFGMDA0ODQzOEQgLyogV2ViS2l0U2hhcmVk
U2NyaXB0UmVwb3NpdG9yeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMThDNUZDQjgxMEEzQzZGMjAw
NDg0MzhEIC8qIFNoYXJlZFNjcmlwdENvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxMjQ3
NDg0MTBBQTE2MUQwMEI3OTQ5MyAvKiBBdXRoZW50aWNhdGlvbkNsaWVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTM4MkRGNTgxMEE4RDVDOTAwOTI1NjUyIC8qIENvbG9yU3BhY2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUFCMzFDOTFFMTBBRTFCOEUwMDBDN0I5MiAvKiBMaW5lQ2xhbXBWYWx1ZS5o
IGluIEhlYWRlcnMgKi8sCkBAIC0xODIzNSw2ICsxODI3MCw4IEBACiAJCQkJODUxMzZDQTgwQUVE
NjY1OTAwRjkwQTNEIC8qIHdlc3RSZXNpemVDdXJzb3IucG5nIGluIFJlc291cmNlcyAqLywKIAkJ
CQkxQUIxQUU3QTBDMDUxRkRFMDAxMzlGNEYgLyogem9vbUluQ3Vyc29yLnBuZyBpbiBSZXNvdXJj
ZXMgKi8sCiAJCQkJMUFCMUFFN0IwQzA1MUZERTAwMTM5RjRGIC8qIHpvb21PdXRDdXJzb3IucG5n
IGluIFJlc291cmNlcyAqLywKKwkJCQkxOEM1RkNBNzEwQTM5OTFGMDA0ODQzOEQgLyogV2ViS2l0
U2hhcmVkU2NyaXB0LmlkbCBpbiBSZXNvdXJjZXMgKi8sCisJCQkJMThDNUZDQjkxMEEzQzZGMjAw
NDg0MzhEIC8qIFNoYXJlZFNjcmlwdENvbnRleHQuaWRsIGluIFJlc291cmNlcyAqLywKIAkJCSk7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTIw
Mjc3LDYgKzIwMzE0LDkgQEAKIAkJCQkxNDc5RkFFRjEwOUFFMzc1MDBERUQ2NTUgLyogUmVuZGVy
UnVieUJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3OUZBRjExMDlBRTM3NTAwREVENjU1
IC8qIFJlbmRlclJ1YnlSdW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3OUZBRjMxMDlBRTM3
NTAwREVENjU1IC8qIFJlbmRlclJ1YnlUZXh0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTE4QzVG
Q0E1MTBBMzk5MUYwMDQ4NDM4RCAvKiBXZWJLaXRTaGFyZWRTY3JpcHQuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMThDNUZDQTgxMEEzOTkxRjAwNDg0MzhEIC8qIFdlYktpdFNoYXJlZFNjcmlwdFJl
cG9zaXRvcnkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMThDNUZDQjcxMEEzQzZGMjAwNDg0MzhE
IC8qIFNoYXJlZFNjcmlwdENvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXgg
NmIxODYwMy4uNDU0MjZlMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisr
KyBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtMTQzLDYgKzE0MywxMCBAQAogI2luY2x1
ZGUgIlNoYXJlZFdvcmtlclJlcG9zaXRvcnkuaCIKICNlbmRpZgogCisjaWYgRU5BQkxFKFNIQVJF
RF9TQ1JJUFQpCisjaW5jbHVkZSAiV2ViS2l0U2hhcmVkU2NyaXB0UmVwb3NpdG9yeS5oIgorI2Vu
ZGlmCisKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAjaW5jbHVkZSAiU3RvcmFnZUV2ZW50Lmgi
CiAjZW5kaWYKQEAgLTE0NDIsNiArMTQ0NiwxMCBAQCB2b2lkIERvY3VtZW50OjpkZXRhY2goKQog
ICAgIFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6OmRvY3VtZW50RGV0YWNoZWQodGhpcyk7CiAjZW5k
aWYKIAorI2lmIEVOQUJMRShTSEFSRURfU0NSSVBUKQorICAgIFdlYktpdFNoYXJlZFNjcmlwdFJl
cG9zaXRvcnk6OmRvY3VtZW50RGV0YWNoZWQodGhpcyk7CisjZW5kaWYKKwogICAgIGlmIChtX2Zy
YW1lKSB7CiAgICAgICAgIEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKTsKICAgICAg
ICAgaWYgKHZpZXcpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAgYi9X
ZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAKaW5kZXggNjVkNzUxYS4uOGVlMWY1MiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL0V2ZW50
VGFyZ2V0LmNwcApAQCAtMTU2LDYgKzE1NiwxOCBAQCBOb3RpZmljYXRpb24qIEV2ZW50VGFyZ2V0
Ojp0b05vdGlmaWNhdGlvbigpCiB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShTSEFSRURfU0NSSVBU
KQorV2ViS2l0U2hhcmVkU2NyaXB0KiBFdmVudFRhcmdldDo6dG9XZWJLaXRTaGFyZWRTY3JpcHQo
KQoreworICAgIHJldHVybiAwOworfQorCitTaGFyZWRTY3JpcHRDb250ZXh0KiBFdmVudFRhcmdl
dDo6dG9TaGFyZWRTY3JpcHRDb250ZXh0KCkKK3sKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgor
CiBib29sIEV2ZW50VGFyZ2V0OjphZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYg
ZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyLCBib29sIHVzZUNh
cHR1cmUpCiB7CiAgICAgRXZlbnRUYXJnZXREYXRhKiBkID0gZW5zdXJlRXZlbnRUYXJnZXREYXRh
KCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oIGIvV2ViQ29yZS9kb20v
RXZlbnRUYXJnZXQuaAppbmRleCAyZDc3Yzg3Li5kMGMxYjY3IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2RvbS9FdmVudFRhcmdldC5oCisrKyBiL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgKQEAgLTU5
LDYgKzU5LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBYTUxIdHRwUmVxdWVz
dDsKICAgICBjbGFzcyBYTUxIdHRwUmVxdWVzdFVwbG9hZDsKIAorI2lmIEVOQUJMRShTSEFSRURf
U0NSSVBUKQorICAgIGNsYXNzIFNoYXJlZFNjcmlwdENvbnRleHQ7CisgICAgY2xhc3MgV2ViS2l0
U2hhcmVkU2NyaXB0OworI2VuZGlmCisKICAgICB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwog
CiAgICAgc3RydWN0IEZpcmluZ0V2ZW50SXRlcmF0b3IgewpAQCAtMTE4LDYgKzEyMywxMSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgTm90aWZpY2F0aW9uKiB0b05vdGlm
aWNhdGlvbigpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoU0hBUkVEX1NDUklQVCkKKyAgICAgICAg
dmlydHVhbCBXZWJLaXRTaGFyZWRTY3JpcHQqIHRvV2ViS2l0U2hhcmVkU2NyaXB0KCk7CisgICAg
ICAgIHZpcnR1YWwgU2hhcmVkU2NyaXB0Q29udGV4dCogdG9TaGFyZWRTY3JpcHRDb250ZXh0KCk7
CisjZW5kaWYKKwogICAgICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCA9IDA7CiAKICAgICAgICAgdmlydHVhbCBib29sIGFk
ZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4sIGJvb2wgdXNlQ2FwdHVyZSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2Rv
bS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmggYi9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgKaW5kZXggMTQxNDEyNS4uM2VmNDhlYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20v
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCisrKyBiL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuaApAQCAtNTcsNiArNTcsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAg
ICAgdmlydHVhbCBib29sIGlzRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAg
ICAgICB2aXJ0dWFsIGJvb2wgaXNXb3JrZXJDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KKyNpZiBFTkFCTEUoU0hBUkVEX1NDUklQVCkKKyAgICAgICAgdmlydHVhbCBib29sIGlzU2hh
cmVkU2NyaXB0Q29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisjZW5kaWYKIAogICAg
ICAgICBjb25zdCBLVVJMJiB1cmwoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsVVJMKCk7IH0KICAg
ICAgICAgS1VSTCBjb21wbGV0ZVVSTChjb25zdCBTdHJpbmcmIHVybCkgY29uc3QgeyByZXR1cm4g
dmlydHVhbENvbXBsZXRlVVJMKHVybCk7IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvc2hhcmVkLXNj
cmlwdC9TaGFyZWRTY3JpcHRDb250ZXh0LmNwcCBiL1dlYkNvcmUvc2hhcmVkLXNjcmlwdC9TaGFy
ZWRTY3JpcHRDb250ZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41
ZjRhZDUxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9zaGFyZWQtc2NyaXB0L1NoYXJlZFNj
cmlwdENvbnRleHQuY3BwCkBAIC0wLDAgKzEsMTk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aWYgRU5BQkxFKFNIQVJFRF9TQ1JJUFQpCisKKyNpbmNsdWRlICJTaGFyZWRTY3JpcHRDb250ZXh0
LmgiCisjaW5jbHVkZSAiU2hhcmVkU2NyaXB0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIkV2ZW50
LmgiCisjaW5jbHVkZSAiRXZlbnRFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgorI2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIKKyNpbmNsdWRlICJzY3JpcHRWYWx1
ZS5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiV2ViS2l0U2hhcmVk
U2NyaXB0UmVwb3NpdG9yeS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEludGVydmFs
IHRvIGFsbG93IG9ycGhhbmVkIFNoYXJlZFNjcmlwdENvbnRleHQgdG8gZ2FpbiBwb3RlbnRpYWwg
bmV3IG93bmVyLgorLy8gVGhpcyBjYW4gaGFwcGVuIG9uIG5hdmlnYXRpb24gd2hlbiBib3RoIHBh
Z2VzIGNvbm5lY3QgdG8gdGhlIHNhbWUgU2hhcmVkU2NyaXB0Lgorc3RhdGljIGNvbnN0IGRvdWJs
ZSBkZXN0cnVjdGlvbkludGVydmFsID0gNS4wOworCitTaGFyZWRTY3JpcHRDb250ZXh0OjpTaGFy
ZWRTY3JpcHRDb250ZXh0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgS1VSTCYgdXJsLCBQYXNz
UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4pCisgICAgOiBtX25hbWUobmFtZSkKKyAgICAs
IG1fdXJsKHVybCkKKyAgICAsIG1fc2NyaXB0KG5ldyBTaGFyZWRTY3JpcHRDb250cm9sbGVyKHRo
aXMpKQorICAgICwgbV9kZXN0cnVjdGlvblRpbWVyKHRoaXMsICZTaGFyZWRTY3JpcHRDb250ZXh0
OjpkZXN0cnVjdGlvblRpbWVyRmlyZWQpCisgICAgLCBtX2xvYWRlZChmYWxzZSkKK3sKKyAgICBz
ZXRTZWN1cml0eU9yaWdpbihvcmlnaW4pOworICAgIHJlZigpOyAvLyBNYXRjaGluZyBkZXJlZiBp
cyBpbiBkZXN0cnVjdGlvblRpbWVyIGNhbGxiYWNrLgorfQorCitTaGFyZWRTY3JpcHRDb250ZXh0
Ojp+U2hhcmVkU2NyaXB0Q29udGV4dCgpCit7Cit9CisKK3ZvaWQgU2hhcmVkU2NyaXB0Q29udGV4
dDo6Y2xlYXJTY3JpcHQoKQoreworICAgIG1fc2NyaXB0LmNsZWFyKCk7IAorfQorCitjb25zdCBL
VVJMJiBTaGFyZWRTY3JpcHRDb250ZXh0Ojp2aXJ0dWFsVVJMKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV91cmw7Cit9CisKK0tVUkwgU2hhcmVkU2NyaXB0Q29udGV4dDo6dmlydHVhbENvbXBsZXRl
VVJMKGNvbnN0IFN0cmluZyYgdXJsKSBjb25zdAoreworICAgIC8vIEFsd2F5cyByZXR1cm4gYSBu
dWxsIFVSTCB3aGVuIHBhc3NlZCBhIG51bGwgc3RyaW5nLgorICAgIC8vIEZJWE1FOiBTaG91bGQg
d2UgY2hhbmdlIHRoZSBLVVJMIGNvbnN0cnVjdG9yIHRvIGhhdmUgdGhpcyBiZWhhdmlvcj8KKyAg
ICBpZiAodXJsLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gS1VSTCgpOworICAgIC8vIEFsd2F5
cyB1c2UgVVRGLTggaW4gV29ya2Vycy4KKyAgICByZXR1cm4gS1VSTChtX3VybCwgdXJsKTsKK30K
Kwordm9pZCBTaGFyZWRTY3JpcHRDb250ZXh0OjpyZXBvcnRFeGNlcHRpb24oY29uc3QgU3RyaW5n
JiBlcnJvck1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkK
K3sKKyAgICBib29sIGVycm9ySGFuZGxlZCA9IGZhbHNlOworICAgIGlmIChvbmVycm9yKCkpCisg
ICAgICAgIGVycm9ySGFuZGxlZCA9IG9uZXJyb3IoKS0+cmVwb3J0RXJyb3IodGhpcywgZXJyb3JN
ZXNzYWdlLCBzb3VyY2VVUkwsIGxpbmVOdW1iZXIpOworfQorCit2b2lkIFNoYXJlZFNjcmlwdENv
bnRleHQ6OmFkZE1lc3NhZ2UoTWVzc2FnZURlc3RpbmF0aW9uIGRlc3RpbmF0aW9uLCBNZXNzYWdl
U291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291
cmNlVVJMKQoreworICAgIC8vIEZJWE1FOiBmaWd1cmUgb3V0IGNvbnNvbGUvaW5jc3BlY3RvciBz
dG9yeSBmb3IgU2hhcmVkU2NyaXB0LiBNYXliZSBzaW1pbGFyIHRvIFNoYXJlZFdvcmtlcnMuCisg
ICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0oc291cmNlKTsK
KyAgICBVTlVTRURfUEFSQU0odHlwZSk7CisgICAgVU5VU0VEX1BBUkFNKGxldmVsKTsKKyAgICBV
TlVTRURfUEFSQU0obWVzc2FnZSk7CisgICAgVU5VU0VEX1BBUkFNKGxpbmVOdW1iZXIpOworICAg
IFVOVVNFRF9QQVJBTShzb3VyY2VVUkwpOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgU2hhcmVkU2NyaXB0Q29udGV4dDo6cmVzb3VyY2VSZXRyaWV2ZWRCeVhNTEh0dHBSZXF1ZXN0
KHVuc2lnbmVkIGxvbmcsIGNvbnN0IFNjcmlwdFN0cmluZyYpCit7CisgICAgLy8gRklYTUU6IGZp
Z3VyZSBvdXQgY29uc29sZS9pbmNzcGVjdG9yIHN0b3J5IGZvciBTaGFyZWRTY3JpcHQuIE1heWJl
IHNpbWlsYXIgdG8gU2hhcmVkV29ya2Vycy4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIFNoYXJlZFNjcmlwdENvbnRleHQ6OnNjcmlwdEltcG9ydGVkKHVuc2lnbmVkIGxvbmcsIGNv
bnN0IFN0cmluZyYpCit7CisgICAgLy8gRklYTUU6IGZpZ3VyZSBvdXQgY29uc29sZS9pbmNzcGVj
dG9yIHN0b3J5IGZvciBTaGFyZWRTY3JpcHQuIE1heWJlIHNpbWlsYXIgdG8gU2hhcmVkV29ya2Vy
cy4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIFNoYXJlZFNjcmlwdENvbnRleHQ6
Om1hdGNoZXMoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBv
cmlnaW4sIGNvbnN0IEtVUkwmIHVybFRvTWF0Y2gpIGNvbnN0Cit7CisgICAgLy8gSWYgdGhlIG9y
aWdpbnMgZG9uJ3QgbWF0Y2gsIG9yIHRoZSBuYW1lcyBkb24ndCBtYXRjaCwgdGhlbiB0aGlzIGlz
IG5vdCB0aGUgcHJveHkgd2UgYXJlIGxvb2tpbmcgZm9yLgorICAgIGlmICghb3JpZ2luLT5lcXVh
bChzZWN1cml0eU9yaWdpbigpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gSWYg
dGhlIG5hbWVzIGFyZSBib3RoIGVtcHR5LCBjb21wYXJlcyB0aGUgVVJMcyBpbnN0ZWFkIHBlciB0
aGUgV2ViIFdvcmtlcnMgc3BlYy4KKyAgICBpZiAobmFtZS5pc0VtcHR5KCkgJiYgbV9uYW1lLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHVybFRvTWF0Y2ggPT0gbV91cmw7CisKKyAgICByZXR1
cm4gbmFtZSA9PSBtX25hbWU7Cit9CisKK3ZvaWQgU2hhcmVkU2NyaXB0Q29udGV4dDo6YWRkVG9E
b2N1bWVudHNMaXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCit7CisgICAgQVNT
RVJUKGNvbnRleHQtPmlzRG9jdW1lbnQoKSk7CisgICAgbV9kb2N1bWVudExpc3QuYWRkKGNvbnRl
eHQpOworCisgICAgaWYgKG1fZGVzdHJ1Y3Rpb25UaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBt
X2Rlc3RydWN0aW9uVGltZXIuc3RvcCgpOworfQorCit2b2lkIFNoYXJlZFNjcmlwdENvbnRleHQ6
OmRlc3RydWN0aW9uVGltZXJGaXJlZChUaW1lcjxTaGFyZWRTY3JpcHRDb250ZXh0PiopCit7Cisg
ICAgaWYgKCFtX2RvY3VtZW50TGlzdC5zaXplKCkpIHsKKyAgICAgICAgV2ViS2l0U2hhcmVkU2Ny
aXB0UmVwb3NpdG9yeTo6cmVtb3ZlU2hhcmVkU2NyaXB0Q29udGV4dCh0aGlzKTsKKyAgICAgICAg
c3RvcEFjdGl2ZURPTU9iamVjdHMoKTsKKyAgICAgICAgY2xlYXJTY3JpcHQoKTsKKyAgICAgICAg
ZGVyZWYoKTsKKyAgICB9Cit9CisKK3ZvaWQgU2hhcmVkU2NyaXB0Q29udGV4dDo6cmVtb3ZlRnJv
bURvY3VtZW50TGlzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQoreworICAgIEhh
c2hTZXQ8U2NyaXB0RXhlY3V0aW9uQ29udGV4dCo+OjppdGVyYXRvciBpdCA9IG1fZG9jdW1lbnRM
aXN0LmZpbmQoY29udGV4dCk7CisgICAgaWYgKGl0ID09IG1fZG9jdW1lbnRMaXN0LmVuZCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX2RvY3VtZW50TGlzdC5yZW1vdmUoaXQpOworCisgICAg
Ly8gU3RhcnQgdGltZXIgdG8gY2hlY2sgaWYgdGhpcyBjb250ZXh0IGhhcyB0byBzZWxmLWRlc3Ry
dWN0LgorICAgIC8vIFRoZSB1c2Ugb2YgYSB0aW1lciBtYWtlcyBkZXN0cnVjdGlvbiBvZiB0aGUg
Y29udGV4dCBoYXBwZW4gbGF0ZXIgdG8gYXZvaWQgZGVhbGxvY2F0aW5nIGl0CisgICAgLy8gcmln
aHQgbm93IHdoaWxlIGl0IGlzIG5vdGlmaWVkLiBBbHNvLCBpdCBhbGxvd3MgdGhlIGNvbnRleHQg
dG8gZXhpc3QgaW4gYSBvcnBoYW5lZCBzdGF0ZQorICAgIC8vIGZvciBhIHNob3J0IHBlcmlvZCBv
ZiB0aW1lIHRvIHNlZSBpZiB0aGVyZSB3aWxsIGJlIGEgbmV3IG93bmVyIChhcyBpbiBuYXZpZ2F0
aW9uKS4KKyAgICAvLyBUaGlzIHJlc2V0cyB0aGUgdGltZXIgdG8gYSBmdWxsIGludGVydmFsIGlm
IGl0IGlzIGFscmVhZHkgYWN0aXZlLgorICAgIG1fZGVzdHJ1Y3Rpb25UaW1lci5zdGFydE9uZVNo
b3QoZGVzdHJ1Y3Rpb25JbnRlcnZhbCk7Cit9CisKK3ZvaWQgU2hhcmVkU2NyaXB0Q29udGV4dDo6
bG9hZChjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBpbml0aWFsU2NyaXB0
KQoreworICAgIG1fdXNlckFnZW50ID0gdXNlckFnZW50OworICAgIHNjcmlwdCgpLT5ldmFsdWF0
ZShTY3JpcHRTb3VyY2VDb2RlKGluaXRpYWxTY3JpcHQsIG1fdXJsKSk7CisgICAgbV9sb2FkZWQg
PSB0cnVlOworfQorCit2b2lkIFNoYXJlZFNjcmlwdENvbnRleHQ6OnBvc3RUYXNrKFBhc3NPd25Q
dHI8VGFzaz4gdGFzaykKK3sKKyAgICAvLyBGSVhNRTogTmVlZCB0byBpbXBsZW1lbnQgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dDo6cG9zdFRhc2tUb01haW5UaHJlYWQgdG8gc2hhcmUgYmV0d2VlbiBE
b2N1bWVudCBhbmQgU2hhcmVkU2NyaXRwQ29udGV4dC4KKyAgICBVTlVTRURfUEFSQU0odGFzayk7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworRXZlbnRUYXJnZXREYXRhKiBTaGFyZWRTY3Jp
cHRDb250ZXh0OjpldmVudFRhcmdldERhdGEoKQoreworICAgIHJldHVybiAmbV9ldmVudFRhcmdl
dERhdGE7Cit9CisKK0V2ZW50VGFyZ2V0RGF0YSogU2hhcmVkU2NyaXB0Q29udGV4dDo6ZW5zdXJl
RXZlbnRUYXJnZXREYXRhKCkKK3sKKyAgICByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOworfQor
CitTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBTaGFyZWRTY3JpcHRDb250ZXh0OjpzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RfY2FzdDxTaGFyZWRTY3Jp
cHRDb250ZXh0Kj4odGhpcyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShTSEFSRURfU0NSSVBUKQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3NoYXJlZC1z
Y3JpcHQvU2hhcmVkU2NyaXB0Q29udGV4dC5oIGIvV2ViQ29yZS9zaGFyZWQtc2NyaXB0L1NoYXJl
ZFNjcmlwdENvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWE1
MDIwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9zaGFyZWQtc2NyaXB0L1NoYXJlZFNjcmlw
dENvbnRleHQuaApAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2hhcmVkU2NyaXB0Q29udGV4dF9o
CisjZGVmaW5lIFNoYXJlZFNjcmlwdENvbnRleHRfaAorCisjaWYgRU5BQkxFKFNIQVJFRF9TQ1JJ
UFQpCisKKyNpbmNsdWRlICJFdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2lu
LmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCisjaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEb2N1bWVu
dDsKK2NsYXNzIFNoYXJlZFNjcmlwdENvbnRyb2xsZXI7CitjbGFzcyBLVVJMOworY2xhc3MgU3Ry
aW5nOworCisKK2NsYXNzIFNoYXJlZFNjcmlwdENvbnRleHQgOiBwdWJsaWMgUmVmQ291bnRlZDxT
aGFyZWRTY3JpcHRDb250ZXh0PiwgcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIHB1Ymxp
YyBFdmVudFRhcmdldCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkU2Ny
aXB0Q29udGV4dD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgS1VSTCYgdXJsLCBQ
YXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4pCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFNoYXJlZFNjcmlwdENvbnRleHQobmFtZSwgdXJsLCBvcmlnaW4pKTsKKyAg
ICB9CisgICAgdmlydHVhbCB+U2hhcmVkU2NyaXB0Q29udGV4dCgpOworCisgICAgLy8gU2NyaXB0
RXhlY3V0aW9uQ29udGV4dAorICAgIHZpcnR1YWwgYm9vbCBpc1NoYXJlZFNjcmlwdENvbnRleHQo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBTdHJpbmcgdXNlckFnZW50KGNv
bnN0IEtVUkwmKSBjb25zdCB7IHJldHVybiBtX3VzZXJBZ2VudDsgfQorCisgICAgdmlydHVhbCB2
b2lkIHJlcG9ydEV4Y2VwdGlvbihjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgaW50IGxpbmVO
dW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkTWVz
c2FnZShNZXNzYWdlRGVzdGluYXRpb24sIE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNz
YWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29u
c3QgU3RyaW5nJiBzb3VyY2VVUkwpOworICAgIHZpcnR1YWwgdm9pZCByZXNvdXJjZVJldHJpZXZl
ZEJ5WE1MSHR0cFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTY3JpcHRT
dHJpbmcmIHNvdXJjZVN0cmluZyk7CisgICAgdmlydHVhbCB2b2lkIHNjcmlwdEltcG9ydGVkKHVu
c2lnbmVkIGxvbmcsIGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCBwb3N0VGFzayhQ
YXNzT3duUHRyPFRhc2s+KTsgLy8gRXhlY3V0ZXMgdGhlIHRhc2sgb24gY29udGV4dCdzIHRocmVh
ZCBhc3luY2hyb25vdXNseS4KKworICAgIC8vIEpTIHdyYXBwZXIgYW5kIEV2ZW50VGFyZXQgc3Vw
cG9ydC4KKyAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFNoYXJlZFNjcmlwdENvbnRleHQqIHRvU2hh
cmVkU2NyaXB0Q29udGV4dCgpIHsgcmV0dXJuIHRoaXM7IH0KKyAgICBERUZJTkVfQVRUUklCVVRF
X0VWRU5UX0xJU1RFTkVSKGVycm9yKTsKKworICAgIC8vIFNoYXJlZFNjcmlwdEdsb2JhbFNjb3Bl
CisgICAgU2hhcmVkU2NyaXB0Q29udGV4dCogc2VsZigpIHsgcmV0dXJuIHRoaXM7IH0KKworICAg
IC8vIExpZmV0aW1lIC0ga2VlcCB0aGUgbGlzdCBvZiBkb2N1bWVudHMgdGhhdCBhcmUgY29ubmVj
dGVkLCBkZXJlZiB3aGVuIHRoZSBsYXN0IGRpc2Nvbm5lY3RzLgorICAgIHZvaWQgYWRkVG9Eb2N1
bWVudHNMaXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKyAgICB2b2lkIHJlbW92ZUZyb21E
b2N1bWVudExpc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworCisgICAgU2hhcmVkU2NyaXB0
Q29udHJvbGxlciogc2NyaXB0KCkgeyByZXR1cm4gbV9zY3JpcHQuZ2V0KCk7IH0KKyAgICB2b2lk
IGNsZWFyU2NyaXB0KCk7CisKKyAgICAvLyBUcnVlIGlmIGluaXRpYWwgc2NyaXB0IGhhcyBiZWVu
IGV2YWx1YXRlZC4KKyAgICBib29sIGxvYWRlZCgpIHsgcmV0dXJuIG1fbG9hZGVkOyB9CisgICAg
dm9pZCBsb2FkKGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIGluaXRpYWxT
Y3JpcHQpOworCisgICAgYm9vbCBtYXRjaGVzKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0
cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luLCBjb25zdCBLVVJMJiB1cmxUb01hdGNoKSBjb25zdDsK
KyAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorCisgICAgdXNpbmcg
UmVmQ291bnRlZDxTaGFyZWRTY3JpcHRDb250ZXh0Pjo6cmVmOworICAgIHVzaW5nIFJlZkNvdW50
ZWQ8U2hhcmVkU2NyaXB0Q29udGV4dD46OmRlcmVmOworCitwcml2YXRlOgorICAgIFNoYXJlZFNj
cmlwdENvbnRleHQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBLVVJMJiwgUGFzc1JlZlB0cjxT
ZWN1cml0eU9yaWdpbj4pOworICAgIAorICAgIC8vIEV2ZW50VGFyZ2V0CisgICAgdmlydHVhbCBF
dmVudFRhcmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpOworICAgIHZpcnR1YWwgRXZlbnRUYXJn
ZXREYXRhKiBlbnN1cmVFdmVudFRhcmdldERhdGEoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVmRXZl
bnRUYXJnZXQoKSB7IHJlZigpOyB9CisgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQo
KSB7IGRlcmVmKCk7IH0KKyAgICAKKyAgICAvLyBTY3JpcHRFeGVjdXRpb25Db250ZXh0CisgICAg
dmlydHVhbCBjb25zdCBLVVJMJiB2aXJ0dWFsVVJMKCkgY29uc3Q7CisgICAgdmlydHVhbCBLVVJM
IHZpcnR1YWxDb21wbGV0ZVVSTChjb25zdCBTdHJpbmcmKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgcmVmU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIHsgcmVmKCk7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgZGVyZWZTY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgeyBkZXJlZigpOyB9CisgICAgICAgICAg
ICAKKyAgICB2b2lkIGRlc3RydWN0aW9uVGltZXJGaXJlZChUaW1lcjxTaGFyZWRTY3JpcHRDb250
ZXh0PiopOworICAgICAgICAgICAgCisgICAgU3RyaW5nIG1fbmFtZTsKKyAgICBTdHJpbmcgbV91
c2VyQWdlbnQ7CisgICAgS1VSTCBtX3VybDsKKyAgICBPd25QdHI8U2hhcmVkU2NyaXB0Q29udHJv
bGxlcj4gbV9zY3JpcHQ7CisgICAgSGFzaFNldDxTY3JpcHRFeGVjdXRpb25Db250ZXh0Kj4gbV9k
b2N1bWVudExpc3Q7CisgICAgVGltZXI8U2hhcmVkU2NyaXB0Q29udGV4dD4gbV9kZXN0cnVjdGlv
blRpbWVyOworICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2ZW50VGFyZ2V0RGF0YTsKKworICAgIGJv
b2wgbV9sb2FkZWQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoU0hBUkVEX1NDUklQVCkKKworI2VuZGlmIC8vIFNoYXJlZFNjcmlwdENvbnRleHRfaAor
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3NoYXJlZC1zY3JpcHQvU2hhcmVkU2NyaXB0Q29udGV4dC5p
ZGwgYi9XZWJDb3JlL3NoYXJlZC1zY3JpcHQvU2hhcmVkU2NyaXB0Q29udGV4dC5pZGwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODExZmZjYQotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvc2hhcmVkLXNjcmlwdC9TaGFyZWRTY3JpcHRDb250ZXh0LmlkbApAQCAtMCwwICsx
LDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworbW9kdWxlIHdpbmRvdyB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRp
b25hbD1TSEFSRURfU0NSSVBULAorICAgICAgICBDdXN0b21NYXJrRnVuY3Rpb24sCisgICAgICAg
IEV2ZW50VGFyZ2V0LAorICAgICAgICBFeHRlbmRzRE9NR2xvYmFsT2JqZWN0LAorICAgICAgICBJ
c1dvcmtlckNvbnRleHQsCisgICAgICAgIEdlbmVyYXRlTmF0aXZlQ29udmVydGVyLAorICAgICAg
ICBMZWdhY3lQYXJlbnQ9SlNTaGFyZWRTY3JpcHRDb250ZXh0QmFzZSwKKyAgICAgICAgTm9TdGF0
aWNUYWJsZXMKKyAgICBdIFNoYXJlZFNjcmlwdENvbnRleHQgeworCisjaWYgZGVmaW5lZChMQU5H
VUFHRV9KQVZBU0NSSVBUKSAmJiBMQU5HVUFHRV9KQVZBU0NSSVBUCisgICAgICAgIGF0dHJpYnV0
ZSBbUmVwbGFjZWFibGVdIFNoYXJlZFNjcmlwdENvbnRleHQgc2VsZjsKKyNlbmRpZgorCisgICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKKyAgICAgICAgYXR0cmlidXRl
IEV2ZW50TGlzdGVuZXIgb25lcnJvcjsKKworICAgICAgICAvLyBFdmVudFRhcmdldCBpbnRlcmZh
Y2UKKyAgICAgICAgW0N1c3RvbV0gdm9pZCBhZGRFdmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0
eXBlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEV2ZW50TGlz
dGVuZXIgbGlzdGVuZXIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW4gYm9vbGVhbiB1c2VDYXB0dXJlKTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCByZW1vdmVFdmVu
dExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiB1c2VDYXB0dXJlKTsKKyAg
ICAgICAgYm9vbGVhbiBkaXNwYXRjaEV2ZW50KGluIEV2ZW50IGV2dCkKKyAgICAgICAgICAgIHJh
aXNlcyhFdmVudEV4Y2VwdGlvbik7CisKKyAgICB9OworCit9CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3NoYXJlZC1zY3JpcHQvU2hhcmVkU2NyaXB0Q29udHJvbGxlci5oIGIvV2ViQ29yZS9zaGFyZWQt
c2NyaXB0L1NoYXJlZFNjcmlwdENvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5jYzNlNDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9zaGFyZWQtc2Ny
aXB0L1NoYXJlZFNjcmlwdENvbnRyb2xsZXIuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTaGFy
ZWRTY3JpcHRDb250cm9sbGVyX2gKKyNkZWZpbmUgU2hhcmVkU2NyaXB0Q29udHJvbGxlcl9oCisK
KyNpZiBFTkFCTEUoU0hBUkVEX1NDUklQVCkKKworLy8gTm9uLWZ1bmN0aW9uaW5nIFNjcmlwdENv
bnRyb2xsZXIuIFdpbGwgYmUgaW1wbGVtZW50ZWQgd2l0aCBjb3JyZXNwb25kaW5nIGJpbmRpbmdz
IChzaW5jZSBpdCdzIEpTQy0gYW5kIFY4LWRlcGVuZGFudCkuCisKKyNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgU2hhcmVkU2Ny
aXB0Q29udGV4dDsKKyAgICBjbGFzcyBTY3JpcHRTb3VyY2VDb2RlOworCisgICAgY2xhc3MgU2hh
cmVkU2NyaXB0Q29udHJvbGxlciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CisgICAgcHVibGljOgor
ICAgICAgICBTaGFyZWRTY3JpcHRDb250cm9sbGVyKFNoYXJlZFNjcmlwdENvbnRleHQqKSB7IH0K
KyAgICAgICAgflNoYXJlZFNjcmlwdENvbnRyb2xsZXIoKSB7IH0KKworICAgICAgICB2b2lkIGV2
YWx1YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmKSB7IH0KKyAgICB9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU0hBUkVEX1NDUklQVCkKKworI2VuZGlm
IC8vIFNoYXJlZFNjcmlwdENvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zaGFyZWQt
c2NyaXB0L1dlYktpdFNoYXJlZFNjcmlwdC5jcHAgYi9XZWJDb3JlL3NoYXJlZC1zY3JpcHQvV2Vi
S2l0U2hhcmVkU2NyaXB0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43
ZDU0M2FlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9zaGFyZWQtc2NyaXB0L1dlYktpdFNo
YXJlZFNjcmlwdC5jcHAKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBFTkFCTEUoU0hBUkVEX1NDUklQVCkKKworI2luY2x1ZGUgIldlYktpdFNoYXJlZFNjcmlwdC5o
IgorCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudEV4Y2VwdGlvbi5oIgorI2lu
Y2x1ZGUgIlNoYXJlZFNjcmlwdENvbnRleHQuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJXZWJLaXRT
aGFyZWRTY3JpcHRSZXBvc2l0b3J5LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitXZWJLaXRTaGFyZWRTY3JpcHQ6OldlYktpdFNoYXJlZFNj
cmlwdChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1lLCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKKyAgICA6IEFjdGl2ZURPTU9i
amVjdChjb250ZXh0LCB0aGlzKQoreworICAgIGlmICh1cmwuaXNFbXB0eSgpKSB7CisgICAgICAg
IGVjID0gU1lOVEFYX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1F
OiBUaGlzIHNob3VsZCB1c2UgdGhlIGR5bmFtaWMgZ2xvYmFsIHNjb3BlIChidWcgIzI3ODg3KQor
ICAgIEtVUkwgc2NyaXB0VVJMID0gY29udGV4dC0+Y29tcGxldGVVUkwodXJsKTsKKyAgICBpZiAo
IXNjcmlwdFVSTC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgZWMgPSBTWU5UQVhfRVJSOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT5j
YW5BY2Nlc3MoU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShzY3JpcHRVUkwpLmdldCgpKSkgeworICAg
ICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFdl
YktpdFNoYXJlZFNjcmlwdFJlcG9zaXRvcnk6OmNvbm5lY3QodGhpcywgc2NyaXB0VVJMLCBuYW1l
LCBlYyk7Cit9CisKK1dlYktpdFNoYXJlZFNjcmlwdDo6fldlYktpdFNoYXJlZFNjcmlwdCgpCit7
Cit9CisKK3ZvaWQgV2ViS2l0U2hhcmVkU2NyaXB0OjpzZXRDb250ZXh0KFBhc3NSZWZQdHI8U2hh
cmVkU2NyaXB0Q29udGV4dD4gY29udGV4dCkKK3sgCisgICAgbV9pbm5lckNvbnRleHQgPSBjb250
ZXh0OworfQorCitjbGFzcyBMb2FkRXZlbnRUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OlRhc2sgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPExvYWRFdmVudFRh
c2s+IGNyZWF0ZShQYXNzUmVmUHRyPFdlYktpdFNoYXJlZFNjcmlwdD4gc2hhcmVkU2NyaXB0LCBQ
YXNzUmVmUHRyPFNoYXJlZFNjcmlwdENvbnRleHQ+IGlubmVyQ29udGV4dCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBuZXcgTG9hZEV2ZW50VGFzayhzaGFyZWRTY3JpcHQsIGlubmVyQ29udGV4dCk7
CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQpCisgICAgeworICAgICAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIGNv
bnRleHQtPmlzRG9jdW1lbnQoKSk7CisgICAgICAgIG1fc2hhcmVkU2NyaXB0LT5zZXRDb250ZXh0
KG1faW5uZXJDb250ZXh0KTsKKyAgICAgICAgbV9zaGFyZWRTY3JpcHQtPmRpc3BhdGNoRXZlbnQo
RXZlbnQ6OmNyZWF0ZShFdmVudE5hbWVzKCkubG9hZEV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKKwor
ICAgICAgICBtX3NoYXJlZFNjcmlwdC0+dW5zZXRQZW5kaW5nQWN0aXZpdHkobV9zaGFyZWRTY3Jp
cHQuZ2V0KCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBMb2FkRXZlbnRUYXNrKFBhc3NSZWZQ
dHI8V2ViS2l0U2hhcmVkU2NyaXB0PiBzaGFyZWRTY3JpcHQsIFBhc3NSZWZQdHI8U2hhcmVkU2Ny
aXB0Q29udGV4dD4gaW5uZXJDb250ZXh0KQorICAgICAgICA6IG1fc2hhcmVkU2NyaXB0KHNoYXJl
ZFNjcmlwdCkKKyAgICAgICAgLCBtX2lubmVyQ29udGV4dChpbm5lckNvbnRleHQpCisgICAgewor
ICAgICAgICAvLyBLZWVwIGV2ZW50IGxpc3RlbmVycyBhbGl2ZS4KKyAgICAgICAgbV9zaGFyZWRT
Y3JpcHQtPnNldFBlbmRpbmdBY3Rpdml0eShtX3NoYXJlZFNjcmlwdC5nZXQoKSk7CisgICAgfQor
CisgICAgUmVmUHRyPFdlYktpdFNoYXJlZFNjcmlwdD4gbV9zaGFyZWRTY3JpcHQ7CisgICAgUmVm
UHRyPFNoYXJlZFNjcmlwdENvbnRleHQ+IG1faW5uZXJDb250ZXh0OworfTsKKwordm9pZCBXZWJL
aXRTaGFyZWRTY3JpcHQ6OnNjaGVkdWxlTG9hZEV2ZW50KFBhc3NSZWZQdHI8U2hhcmVkU2NyaXB0
Q29udGV4dD4gaW5uZXJDb250ZXh0KQoreworICAgIEFTU0VSVCghbV9pbm5lckNvbnRleHQpOwor
ICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+cG9zdFRhc2soTG9hZEV2ZW50VGFzazo6Y3Jl
YXRlKHRoaXMsIGlubmVyQ29udGV4dCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoU0hBUkVEX1NDUklQVCkKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9z
aGFyZWQtc2NyaXB0L1dlYktpdFNoYXJlZFNjcmlwdC5oIGIvV2ViQ29yZS9zaGFyZWQtc2NyaXB0
L1dlYktpdFNoYXJlZFNjcmlwdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmU5NTI3MGUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3NoYXJlZC1zY3JpcHQvV2ViS2l0
U2hhcmVkU2NyaXB0LmgKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViS2l0U2hhcmVkU2NyaXB0
X2gKKyNkZWZpbmUgV2ViS2l0U2hhcmVkU2NyaXB0X2gKKworI2lmIEVOQUJMRShTSEFSRURfU0NS
SVBUKQorCisjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiQXRvbWljU3Ry
aW5nSGFzaC5oIgorI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJFdmVudFRh
cmdldC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworICAgIGNsYXNzIEtVUkw7CisgICAgY2xhc3MgU2hhcmVkU2NyaXB0Q29udGV4dDsKKyAgICBj
bGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworCisgICAgY2xhc3MgV2ViS2l0U2hhcmVkU2Ny
aXB0IDogcHVibGljIFJlZkNvdW50ZWQ8V2ViS2l0U2hhcmVkU2NyaXB0PiwgcHVibGljIEFjdGl2
ZURPTU9iamVjdCwgcHVibGljIEV2ZW50VGFyZ2V0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFdlYktpdFNoYXJlZFNjcmlwdD4gY3JlYXRlKGNvbnN0IFN0cmluZyYg
dXJsLCBjb25zdCBTdHJpbmcmIG5hbWUsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IEV4Y2VwdGlvbkNvZGUmIGVjKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFdlYktpdFNoYXJlZFNjcmlwdCh1cmwsIG5hbWUsIGNvbnRleHQsIGVjKSk7CisgICAg
ICAgIH0KKyAgICAgICAgdmlydHVhbCB+V2ViS2l0U2hhcmVkU2NyaXB0KCk7CisKKyAgICAgICAg
Ly8gRXZlbnRUYXJnZXQgQVBJcworICAgICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBBY3RpdmVET01PYmpl
Y3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsgfQorICAgICAgICB2aXJ0dWFsIFdlYktpdFNo
YXJlZFNjcmlwdCogdG9XZWJLaXRTaGFyZWRTY3JpcHQoKSB7IHJldHVybiB0aGlzOyB9CisKKyAg
ICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihlcnJvcik7CisgICAgICAgIERF
RklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIobG9hZCk7CisKKyAgICAgICAgdXNpbmcgUmVm
Q291bnRlZDxXZWJLaXRTaGFyZWRTY3JpcHQ+OjpyZWY7CisgICAgICAgIHVzaW5nIFJlZkNvdW50
ZWQ8V2ViS2l0U2hhcmVkU2NyaXB0Pjo6ZGVyZWY7CisKKyAgICAgICAgU2hhcmVkU2NyaXB0Q29u
dGV4dCogY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faW5uZXJDb250ZXh0LmdldCgpOyB9Cisg
ICAgICAgIHZvaWQgc2V0Q29udGV4dChQYXNzUmVmUHRyPFNoYXJlZFNjcmlwdENvbnRleHQ+IGNv
bnRleHQpOworCisgICAgICAgIC8vIFdoZW4gZmlyZWQsIHdpbGwgc2V0IHRoZSBpbm5lckNvbnRl
eHQgaW50byB0aGlzIFdlYktpdFNoYXJlZFNjcmlwdCBhbmQgZGlzcGF0Y2ggJ2xvYWQnIGV2ZW50
LgorICAgICAgICB2b2lkIHNjaGVkdWxlTG9hZEV2ZW50KFBhc3NSZWZQdHI8U2hhcmVkU2NyaXB0
Q29udGV4dD4gaW5uZXJDb250ZXh0KTsKKworICAgIHByaXZhdGU6CisgICAgICAgIFdlYktpdFNo
YXJlZFNjcmlwdChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1lLCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgICAgIHZpcnR1YWwgdm9p
ZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGRlcmVm
RXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0KKyAgICAgICAgdmlydHVhbCBFdmVudFRhcmdldERh
dGEqIGV2ZW50VGFyZ2V0RGF0YSgpIHsgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsgfQorICAg
ICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZW5zdXJlRXZlbnRUYXJnZXREYXRhKCkgeyBy
ZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOyB9CisKKyAgICAgICAgRXZlbnRUYXJnZXREYXRhIG1f
ZXZlbnRUYXJnZXREYXRhOworICAgICAgICBSZWZQdHI8U2hhcmVkU2NyaXB0Q29udGV4dD4gbV9p
bm5lckNvbnRleHQ7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKFNIQVJFRF9TQ1JJUFQpCisKKyNlbmRpZiAvLyBXZWJLaXRTaGFyZWRTY3JpcHRf
aAorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3NoYXJlZC1zY3JpcHQvV2ViS2l0U2hhcmVkU2NyaXB0
LmlkbCBiL1dlYkNvcmUvc2hhcmVkLXNjcmlwdC9XZWJLaXRTaGFyZWRTY3JpcHQuaWRsCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5MzQ1MDgKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL3NoYXJlZC1zY3JpcHQvV2ViS2l0U2hhcmVkU2NyaXB0LmlkbApAQCAtMCwwICsx
LDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworbW9kdWxlIHdpbmRvdyB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRp
b25hbD1TSEFSRURfU0NSSVBULAorICAgICAgICBFdmVudFRhcmdldCwKKyAgICAgICAgR2VuZXJh
dGVUb0pTCisgICAgXSBXZWJLaXRTaGFyZWRTY3JpcHQgeworCisgICAgICAgIGF0dHJpYnV0ZSBF
dmVudExpc3RlbmVyIG9uZXJyb3I7CisgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9u
bG9hZDsKKworICAgICAgICAvLyBFdmVudFRhcmdldCBpbnRlcmZhY2UKKyAgICAgICAgW0N1c3Rv
bV0gdm9pZCBhZGRFdmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGJvb2xlYW4gdXNlQ2FwdHVy
ZSk7CisgICAgICAgIFtDdXN0b21dIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihpbiBET01TdHJp
bmcgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEV2
ZW50TGlzdGVuZXIgbGlzdGVuZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbiBib29sZWFuIHVzZUNhcHR1cmUpOworICAgICAgICBib29sZWFuIGRpc3BhdGNo
RXZlbnQoaW4gRXZlbnQgZXZ0KQorICAgICAgICAgICAgcmFpc2VzKEV2ZW50RXhjZXB0aW9uKTsK
KworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgU2hhcmVkU2NyaXB0Q29udGV4dCBjb250ZXh0
OworICAgIH07Cit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3NoYXJlZC1zY3JpcHQvV2ViS2l0U2hh
cmVkU2NyaXB0UmVwb3NpdG9yeS5jcHAgYi9XZWJDb3JlL3NoYXJlZC1zY3JpcHQvV2ViS2l0U2hh
cmVkU2NyaXB0UmVwb3NpdG9yeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMzRmZGVhYwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvc2hhcmVkLXNjcmlwdC9XZWJL
aXRTaGFyZWRTY3JpcHRSZXBvc2l0b3J5LmNwcApAQCAtMCwwICsxLDE2OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2lmIEVOQUJMRShTSEFSRURfU0NSSVBUKQorCisjaW5jbHVkZSAiV2ViS2l0
U2hhcmVkU2NyaXB0UmVwb3NpdG9yeS5oIgorCisjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0Lmgi
CisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgIkV2
ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiU2hhcmVk
U2NyaXB0Q29udGV4dC5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAi
V2ViS2l0U2hhcmVkU2NyaXB0LmgiCisjaW5jbHVkZSAiV29ya2VyU2NyaXB0TG9hZGVyLmgiCisj
aW5jbHVkZSAiV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworLy8gSGVscGVyIGNsYXNzIHRvIGxvYWQgdGhlIGluaXRpYWwgc2NyaXB0IG9uIGJlaGFs
ZiBvZiBhIFNoYXJlZFNjcmlwdC4KK2NsYXNzIFNjcmlwdExvYWRlciA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFNjcmlwdExvYWRlcj4sIHB1YmxpYyBBY3RpdmVET01PYmplY3QsIHByaXZhdGUgV29ya2Vy
U2NyaXB0TG9hZGVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBTY3JpcHRMb2FkZXIoUGFzc1JlZlB0
cjxXZWJLaXRTaGFyZWRTY3JpcHQ+LCBQYXNzUmVmUHRyPFNoYXJlZFNjcmlwdENvbnRleHQ+IGlu
bmVyQ29udGV4dCk7CisgICAgdm9pZCBsb2FkKGNvbnN0IEtVUkwmKTsKKworcHJpdmF0ZToKKyAg
ICAvLyBXb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQgY2FsbGJhY2sKKyAgICB2aXJ0dWFsIHZvaWQg
bm90aWZ5RmluaXNoZWQoKTsKKworICAgIFJlZlB0cjxXZWJLaXRTaGFyZWRTY3JpcHQ+IG1fc2hh
cmVkU2NyaXB0OworICAgIFJlZlB0cjxTaGFyZWRTY3JpcHRDb250ZXh0PiBtX2lubmVyQ29udGV4
dDsKKyAgICBPd25QdHI8V29ya2VyU2NyaXB0TG9hZGVyPiBtX3NjcmlwdExvYWRlcjsKK307CisK
K1NjcmlwdExvYWRlcjo6U2NyaXB0TG9hZGVyKFBhc3NSZWZQdHI8V2ViS2l0U2hhcmVkU2NyaXB0
PiBzaGFyZWRTY3JpcHQsIFBhc3NSZWZQdHI8U2hhcmVkU2NyaXB0Q29udGV4dD4gaW5uZXJDb250
ZXh0KQorICAgIDogQWN0aXZlRE9NT2JqZWN0KHNoYXJlZFNjcmlwdC0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLCB0aGlzKQorICAgICwgbV9zaGFyZWRTY3JpcHQoc2hhcmVkU2NyaXB0KQorICAg
ICwgbV9pbm5lckNvbnRleHQoaW5uZXJDb250ZXh0KQoreworfQorCit2b2lkIFNjcmlwdExvYWRl
cjo6bG9hZChjb25zdCBLVVJMJiB1cmwpCit7CisgICAgLy8gTWFyayB0aGlzIG9iamVjdCBhcyBh
Y3RpdmUgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgbG9hZC4KKyAgICBBU1NFUlQoIWhhc1BlbmRp
bmdBY3Rpdml0eSgpKTsKKyAgICBtX3NjcmlwdExvYWRlciA9IG5ldyBXb3JrZXJTY3JpcHRMb2Fk
ZXIoKTsKKyAgICBtX3NjcmlwdExvYWRlci0+bG9hZEFzeW5jaHJvbm91c2x5KHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSwgdXJsLCBEZW55Q3Jvc3NPcmlnaW5SZXF1ZXN0cywgdGhpcyk7CisKKyAg
ICAvLyBTdGF5IGFsaXZlIHVudGlsIHRoZSBsb2FkIGZpbmlzaGVzLgorICAgIHNldFBlbmRpbmdB
Y3Rpdml0eSh0aGlzKTsKKyAgICBtX3NoYXJlZFNjcmlwdC0+c2V0UGVuZGluZ0FjdGl2aXR5KG1f
c2hhcmVkU2NyaXB0LmdldCgpKTsKK30KKwordm9pZCBTY3JpcHRMb2FkZXI6Om5vdGlmeUZpbmlz
aGVkKCkKK3sKKyAgICBpZiAobV9zY3JpcHRMb2FkZXItPmZhaWxlZCgpKQorICAgICAgICBtX3No
YXJlZFNjcmlwdC0+ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5lcnJv
ckV2ZW50LCBmYWxzZSwgdHJ1ZSkpOworICAgIGVsc2UgeworICAgICAgICAvLyBJZiBhbm90aGVy
IGxvYWRlciBoYXZlIG5vdCB5ZXQgaW5pdGlhbGl6ZWQgdGhlIFNoYXJlZFNjcmlwdENvbnRleHQg
LSBkbyBzby4KKyAgICAgICAgaWYgKCFtX2lubmVyQ29udGV4dC0+bG9hZGVkKCkpCisgICAgICAg
ICAgICBtX2lubmVyQ29udGV4dC0+bG9hZChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnVzZXJB
Z2VudChtX3NjcmlwdExvYWRlci0+dXJsKCkpLCBtX3NjcmlwdExvYWRlci0+c2NyaXB0KCkpOwor
ICAgIAorICAgICAgICBtX3NoYXJlZFNjcmlwdC0+c2NoZWR1bGVMb2FkRXZlbnQobV9pbm5lckNv
bnRleHQpOworICAgIH0KKworICAgIG1fc2hhcmVkU2NyaXB0LT51bnNldFBlbmRpbmdBY3Rpdml0
eShtX3NoYXJlZFNjcmlwdC5nZXQoKSk7CisgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7
IC8vIFRoaXMgZnJlZXMgdGhpcyBvYmplY3QgLSBtdXN0IGJlIHRoZSBsYXN0IGFjdGlvbiBpbiB0
aGlzIGZ1bmN0aW9uLgorfQorCitXZWJLaXRTaGFyZWRTY3JpcHRSZXBvc2l0b3J5JiBXZWJLaXRT
aGFyZWRTY3JpcHRSZXBvc2l0b3J5OjppbnN0YW5jZSgpCit7CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChXZWJLaXRTaGFyZWRTY3JpcHRSZXBvc2l0b3J5LCBpbnN0YW5jZSwgKCkpOworICAgIHJl
dHVybiBpbnN0YW5jZTsKK30KKwordm9pZCBXZWJLaXRTaGFyZWRTY3JpcHRSZXBvc2l0b3J5Ojpj
b25uZWN0KFBhc3NSZWZQdHI8V2ViS2l0U2hhcmVkU2NyaXB0PiBzaGFyZWRTY3JpcHQsIGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBpbnN0YW5jZSgpLmNvbm5lY3RUb1NoYXJlZFNjcmlwdChzaGFyZWRTY3JpcHQsIHVybCwgbmFt
ZSwgZWMpOworfQorCit2b2lkIFdlYktpdFNoYXJlZFNjcmlwdFJlcG9zaXRvcnk6OmRvY3VtZW50
RGV0YWNoZWQoRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIFVOVVNFRF9QQVJBTShkb2N1bWVu
dCk7CisgICAgV2ViS2l0U2hhcmVkU2NyaXB0UmVwb3NpdG9yeSYgcmVwb3NpdG9yeSA9IGluc3Rh
bmNlKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlcG9zaXRvcnkubV9zaGFyZWRT
Y3JpcHRDb250ZXh0cy5zaXplKCk7IGkrKykKKyAgICAgICAgcmVwb3NpdG9yeS5tX3NoYXJlZFNj
cmlwdENvbnRleHRzW2ldLT5yZW1vdmVGcm9tRG9jdW1lbnRMaXN0KGRvY3VtZW50KTsKK30KKwor
dm9pZCBXZWJLaXRTaGFyZWRTY3JpcHRSZXBvc2l0b3J5OjpyZW1vdmVTaGFyZWRTY3JpcHRDb250
ZXh0KFNoYXJlZFNjcmlwdENvbnRleHQqIGNvbnRleHQpCit7CisgICAgV2ViS2l0U2hhcmVkU2Ny
aXB0UmVwb3NpdG9yeSYgcmVwb3NpdG9yeSA9IGluc3RhbmNlKCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHJlcG9zaXRvcnkubV9zaGFyZWRTY3JpcHRDb250ZXh0cy5zaXplKCk7IGkr
KykgeworICAgICAgICBpZiAoY29udGV4dCA9PSByZXBvc2l0b3J5Lm1fc2hhcmVkU2NyaXB0Q29u
dGV4dHNbaV0pIHsKKyAgICAgICAgICAgIHJlcG9zaXRvcnkubV9zaGFyZWRTY3JpcHRDb250ZXh0
cy5yZW1vdmUoaSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cit9CisK
K3ZvaWQgV2ViS2l0U2hhcmVkU2NyaXB0UmVwb3NpdG9yeTo6Y29ubmVjdFRvU2hhcmVkU2NyaXB0
KFBhc3NSZWZQdHI8V2ViS2l0U2hhcmVkU2NyaXB0PiBzaGFyZWRTY3JpcHQsIGNvbnN0IEtVUkwm
IHVybCwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBBU1NF
UlQoc2hhcmVkU2NyaXB0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnNlY3VyaXR5T3JpZ2lu
KCktPmNhbkFjY2VzcyhTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKHVybCkuZ2V0KCkpKTsKKyAgICBS
ZWZQdHI8U2hhcmVkU2NyaXB0Q29udGV4dD4gaW5uZXJDb250ZXh0ID0gZ2V0U2hhcmVkU2NyaXB0
Q29udGV4dChuYW1lLCB1cmwpOworCisgICAgaW5uZXJDb250ZXh0LT5hZGRUb0RvY3VtZW50c0xp
c3Qoc2hhcmVkU2NyaXB0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworICAgIGlmIChpbm5l
ckNvbnRleHQtPnVybCgpICE9IHVybCkgeworICAgICAgICAvLyBTaGFyZWRTY3JpcHQgd2l0aCBz
YW1lIG5hbWUgYnV0IGRpZmZlcmVudCBVUkwgYWxyZWFkeSBleGlzdHMgLSByZXR1cm4gYW4gZXJy
b3IuCisgICAgICAgIGVjID0gVVJMX01JU01BVENIX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAvLyBJZiBTaGFyZWRTY3JpcHRDb250ZXh0IGlzIGFscmVhZHkgcnVubmluZywganVz
dCBzY2hlZHVsZSBhIGxvYWQgZXZlbnQgLSBvdGhlcndpc2UsIGtpY2sgb2ZmIGEgbG9hZGVyIHRv
IGxvYWQgdGhlIHNjcmlwdC4KKyAgICBpZiAoaW5uZXJDb250ZXh0LT5sb2FkZWQoKSkKKyAgICAg
ICAgc2hhcmVkU2NyaXB0LT5zY2hlZHVsZUxvYWRFdmVudChpbm5lckNvbnRleHQpOworICAgIGVs
c2UgeworICAgICAgICBSZWZQdHI8U2NyaXB0TG9hZGVyPiBsb2FkZXIgPSBhZG9wdFJlZihuZXcg
U2NyaXB0TG9hZGVyKHNoYXJlZFNjcmlwdCwgaW5uZXJDb250ZXh0LnJlbGVhc2UoKSkpOworICAg
ICAgICBsb2FkZXItPmxvYWQodXJsKTsgLy8gUGVuZGluZyBhY3Rpdml0eSB3aWxsIGtlZXAgdGhl
IGxvYWRlciBhbGl2ZS4KKyAgICB9Cit9CisKKy8vIENyZWF0ZXMgYSBuZXcgU2hhcmVkU2NyaXB0
Q29udGV4dCBvciByZXR1cm5zIGFuIGV4aXN0aW5nIG9uZSBmcm9tIHRoZSByZXBvc2l0b3J5Lgor
UGFzc1JlZlB0cjxTaGFyZWRTY3JpcHRDb250ZXh0PiBXZWJLaXRTaGFyZWRTY3JpcHRSZXBvc2l0
b3J5OjpnZXRTaGFyZWRTY3JpcHRDb250ZXh0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgS1VS
TCYgdXJsKQoreworICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luID0gU2VjdXJpdHlP
cmlnaW46OmNyZWF0ZSh1cmwpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3NoYXJl
ZFNjcmlwdENvbnRleHRzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGlmIChtX3NoYXJlZFNjcmlw
dENvbnRleHRzW2ldLT5tYXRjaGVzKG5hbWUsIG9yaWdpbiwgdXJsKSkKKyAgICAgICAgICAgIHJl
dHVybiBtX3NoYXJlZFNjcmlwdENvbnRleHRzW2ldOworICAgIH0KKworICAgIFJlZlB0cjxTaGFy
ZWRTY3JpcHRDb250ZXh0PiBzaGFyZWRTY3JpcHRDb250ZXh0ID0gU2hhcmVkU2NyaXB0Q29udGV4
dDo6Y3JlYXRlKG5hbWUsIHVybCwgb3JpZ2luLnJlbGVhc2UoKSk7CisgICAgbV9zaGFyZWRTY3Jp
cHRDb250ZXh0cy5hcHBlbmQoc2hhcmVkU2NyaXB0Q29udGV4dC5nZXQoKSk7CisgICAgcmV0dXJu
IHNoYXJlZFNjcmlwdENvbnRleHQucmVsZWFzZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU0hBUkVEX1NDUklQVCkKKwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9zaGFyZWQtc2NyaXB0L1dlYktpdFNoYXJlZFNjcmlwdFJlcG9zaXRvcnkuaCBiL1dlYkNv
cmUvc2hhcmVkLXNjcmlwdC9XZWJLaXRTaGFyZWRTY3JpcHRSZXBvc2l0b3J5LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAzYWY3YgotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvc2hhcmVkLXNjcmlwdC9XZWJLaXRTaGFyZWRTY3JpcHRSZXBvc2l0b3J5LmgKQEAgLTAs
MCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgV2ViS2l0U2hhcmVkU2NyaXB0UmVwb3NpdG9yeV9oCisjZGVmaW5l
IFdlYktpdFNoYXJlZFNjcmlwdFJlcG9zaXRvcnlfaAorCisjaWYgRU5BQkxFKFNIQVJFRF9TQ1JJ
UFQpCisKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwor
CitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIEtVUkw7CitjbGFzcyBTaGFyZWRTY3JpcHRDb250ZXh0
OworY2xhc3MgV2ViS2l0U2hhcmVkU2NyaXB0OworY2xhc3MgU3RyaW5nOworCisvLyBJbnRlcmZh
Y2UgdG8gYSByZXBvc2l0b3J5IHdoaWNoIG1hbmFnZXMgcmVmZXJlbmNlcyB0byB0aGUgc2V0IG9m
IGFjdGl2ZSBTaGFyZWRTY3JpcHRDb250ZXh0cy4KK2NsYXNzIFdlYktpdFNoYXJlZFNjcmlwdFJl
cG9zaXRvcnkgeworcHVibGljOgorICAgIC8vIENvbm5lY3RzIHRoZSBwYXNzZWQgV2ViS2l0U2hh
cmVkU2NyaXB0IG9iamVjdCB3aXRoIGEgU2hhcmVkU2NyaXB0Q29udGV4dCwgY3JlYXRpbmcgYSBu
ZXcgb25lIGlmIG5lY2Vzc2FyeS4KKyAgICBzdGF0aWMgdm9pZCBjb25uZWN0KFBhc3NSZWZQdHI8
V2ViS2l0U2hhcmVkU2NyaXB0PiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhj
ZXB0aW9uQ29kZSYpOworCisgICAgc3RhdGljIHZvaWQgcmVtb3ZlU2hhcmVkU2NyaXB0Q29udGV4
dChTaGFyZWRTY3JpcHRDb250ZXh0Kik7CisgICAgc3RhdGljIHZvaWQgZG9jdW1lbnREZXRhY2hl
ZChEb2N1bWVudCopOworCitwcml2YXRlOgorICAgIFdlYktpdFNoYXJlZFNjcmlwdFJlcG9zaXRv
cnkoKSB7IH0KKyAgICBzdGF0aWMgV2ViS2l0U2hhcmVkU2NyaXB0UmVwb3NpdG9yeSYgaW5zdGFu
Y2UoKTsKKyAgICB2b2lkIGNvbm5lY3RUb1NoYXJlZFNjcmlwdChQYXNzUmVmUHRyPFdlYktpdFNo
YXJlZFNjcmlwdD4sIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICBQYXNzUmVmUHRyPFNoYXJlZFNjcmlwdENvbnRleHQ+IGdldFNoYXJlZFNjcmlw
dENvbnRleHQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBLVVJMJik7CisKKyAgICAvLyBMaXN0
IG9mIFNoYXJlZFNjcmlwdENvbnRleHRzLgorICAgIC8vIEV4cGVjdGF0aW9uIGlzIHRoYXQgdGhl
cmUgd2lsbCBiZSBhIGxpbWl0ZWQgbnVtYmVyIG9mIFNoYXJlZFNjcmlwdENvbnRleHRzLCBhbmQg
c28gdHJhY2tpbmcgdGhlbSBpbiBhIFZlY3RvciBpcyBtb3JlIGVmZmljaWVudCB0aGFuIG5lc3Rl
ZCBIYXNoTWFwcy4KKyAgICB0eXBlZGVmIFZlY3RvcjxTaGFyZWRTY3JpcHRDb250ZXh0Kj4gU2hh
cmVkU2NyaXB0Q29udGV4dExpc3Q7CisgICAgU2hhcmVkU2NyaXB0Q29udGV4dExpc3QgbV9zaGFy
ZWRTY3JpcHRDb250ZXh0czsKKworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKFNIQVJFRF9TQ1JJUFQpCisKKyNlbmRpZiAvLyBXZWJLaXRTaGFyZWRTY3Jp
cHRSZXBvc2l0b3J5X2gKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlclNjcmlw
dExvYWRlci5jcHAgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVyLmNwcAppbmRl
eCA1MmJhZjJkLi5mZDFhOWI4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyU2Ny
aXB0TG9hZGVyLmNwcAorKysgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVyLmNw
cApAQCAtNTgsNyArNTgsNyBAQCB2b2lkIFdvcmtlclNjcmlwdExvYWRlcjo6bG9hZFN5bmNocm9u
b3VzbHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aQogICAgIGlmICghcmVx
dWVzdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQtPmlzV29ya2VyQ29udGV4dCgpKTsKKyAgICBBU1NFUlQoIXNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQtPmlzRG9jdW1lbnQoKSk7CiAKICAgICBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyBvcHRpb25z
OwogICAgIG9wdGlvbnMuYWxsb3dDcmVkZW50aWFscyA9IHRydWU7Cg==
</data>
<flag name="review"
          id="25463"
          type_id="1"
          status="-"
          setter="levin"
    />
    <flag name="commit-queue"
          id="25464"
          type_id="3"
          status="-"
          setter="dimich"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43806</attachid>
            <date>2009-11-24 14:35:03 -0800</date>
            <delta_ts>2009-11-24 14:37:45 -0800</delta_ts>
            <desc>Updated for David&apos;s comments.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>57758</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NzRkMmI5My4uOWQ1MDFiOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiw5OCBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgogCisgICAgICAgIEluaXRpYWwgaW1wbGVtZW50YXRpb24gb2YgV2ViS2l0
U2hhcmVkU2NyaXB0IGFuZCBTaGFyZWRTY3JpcHRDb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTU2OQorCisgICAgICAgIE5vIG5ldyB0ZXN0
cyBzaW5jZSB0aGVyZSBhcmUgbm8gYmluZGluZ3MgeWV0IChzb29uIHRvIGNvbWUpLgorCisgICAg
ICAgICogRGVyaXZlZFNvdXJjZXMubWFrZTogQWRkIFdlYktpdFNoYXJlZFNjcmlwdCBhbmQgU2hh
cmVkU2NyaXB0Q29udGV4dCB0byBhIGxpc3Qgb2YgaWRsIGZpbGVzLgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRldGFjaCk6IE5vdGlmeSBXZWJLaXRTaGFy
ZWRTY3JpcHRSZXBvc2l0b3J5IHRoYXQgZG9jdW1lbnQgaXMgZGV0YWNoaW5nLgorICAgICAgICAq
IGRvbS9FdmVudFRhcmdldC5jcHA6IEFkZCBuZXcgY2FzdGluZyBtZXRob2RzLCBzaW5jZSB0aGUg
bmV3IHR5cGVzIGFyZSBFdmVudFRhcmdldHMuCisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdl
dDo6dG9XZWJLaXRTaGFyZWRTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJnZXQ6
OnRvU2hhcmVkU2NyaXB0Q29udGV4dCk6CisgICAgICAgICogZG9tL0V2ZW50VGFyZ2V0Lmg6IERp
dHRvCisgICAgICAgICogZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmlzU2hhcmVkU2NyaXB0Q29udGV4dCk6IE5l
dyB2aXJ0dWFsIG1ldGhvZCwgc2luY2UgdGhlcmUgaXMgYSBuZXcgdHlwZSBvZiBjb250ZXh0Lgor
CisgICAgICAgICogc2hhcmVkU2NyaXB0L1NoYXJlZFNjcmlwdENvbnRleHQuY3BwOiBBZGRlZC4g
U2ltaWxhciB0byBXb3JrZXJDb250ZXh0LCBidXQgdy9vIHRocmVhZGluZy4KKyAgICAgICAgKFdl
YkNvcmU6OlNoYXJlZFNjcmlwdENvbnRleHQ6OlNoYXJlZFNjcmlwdENvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2hhcmVkU2NyaXB0Q29udGV4dDo6flNoYXJlZFNjcmlwdENvbnRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2hhcmVkU2NyaXB0Q29udGV4dDo6Y2xlYXJTY3JpcHQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcmVkU2NyaXB0Q29udGV4dDo6dmlydHVhbFVSTCk6CisgICAgICAg
IChXZWJDb3JlOjpTaGFyZWRTY3JpcHRDb250ZXh0Ojp2aXJ0dWFsQ29tcGxldGVVUkwpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcmVkU2NyaXB0Q29udGV4dDo6cmVwb3J0RXhjZXB0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXJlZFNjcmlwdENvbnRleHQ6OmFkZE1lc3NhZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6U2hhcmVkU2NyaXB0Q29udGV4dDo6cmVzb3VyY2VSZXRyaWV2ZWRCeVhNTEh0
dHBSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFNjcmlwdENvbnRleHQ6OnNjcmlw
dEltcG9ydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFNjcmlwdENvbnRleHQ6Om1hdGNo
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkU2NyaXB0Q29udGV4dDo6YWRkVG9Eb2N1bWVu
dHNMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFNjcmlwdENvbnRleHQ6OmRlc3RydWN0
aW9uVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRTY3JpcHRDb250ZXh0Ojpy
ZW1vdmVGcm9tRG9jdW1lbnRMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFNjcmlwdENv
bnRleHQ6OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkU2NyaXB0Q29udGV4dDo6cG9z
dFRhc2spOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkU2NyaXB0Q29udGV4dDo6ZXZlbnRUYXJn
ZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFNjcmlwdENvbnRleHQ6OmVuc3VyZUV2
ZW50VGFyZ2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRTY3JpcHRDb250ZXh0Ojpz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KToKKyAgICAgICAgKiBzaGFyZWRTY3JpcHQvU2hhcmVkU2Ny
aXB0Q29udGV4dC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFNjcmlwdENvbnRl
eHQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRTY3JpcHRDb250ZXh0Ojppc1No
YXJlZFNjcmlwdENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkU2NyaXB0Q29udGV4
dDo6dXNlckFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFNjcmlwdENvbnRleHQ6OnRv
U2hhcmVkU2NyaXB0Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRTY3JpcHRDb250
ZXh0OjpzZWxmKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFNjcmlwdENvbnRleHQ6OnNjcmlw
dCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRTY3JpcHRDb250ZXh0Ojpsb2FkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcmVkU2NyaXB0Q29udGV4dDo6bmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpTaGFyZWRTY3JpcHRDb250ZXh0OjpyZWZFdmVudFRhcmdldCk6CisgICAgICAgIChXZWJD
b3JlOjpTaGFyZWRTY3JpcHRDb250ZXh0OjpkZXJlZkV2ZW50VGFyZ2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXJlZFNjcmlwdENvbnRleHQ6OnJlZlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2hhcmVkU2NyaXB0Q29udGV4dDo6ZGVyZWZTY3JpcHRFeGVjdXRp
b25Db250ZXh0KToKKyAgICAgICAgKiBzaGFyZWRTY3JpcHQvU2hhcmVkU2NyaXB0Q29udGV4dC5p
ZGw6IEFkZGVkLgorCisgICAgICAgICogc2hhcmVkU2NyaXB0L1NoYXJlZFNjcmlwdENvbnRyb2xs
ZXIuaDogCisgICAgICAgIEFkZGVkLiBFbXB0eSBpbXBsZW1lbnRhdGlvbiBvZiBhIFNjcmlwdENv
bnRyb2xsZXIsIHdpbGwgY29tZSBsYXRlciBhcyBwYXJ0IG9mIGJpbmRpbmdzLiBOZWVkZWQgdG8g
Y29tcGlsZS4KKworICAgICAgICAqIHNoYXJlZFNjcmlwdC9XZWJLaXRTaGFyZWRTY3JpcHQuY3Bw
OiBBZGRlZC4gRXZlbnRUYXJnZXQtYmFzZWQgRE9NIG9iamVjdC4KKyAgICAgICAgKFdlYkNvcmU6
OldlYktpdFNoYXJlZFNjcmlwdDo6V2ViS2l0U2hhcmVkU2NyaXB0KToKKyAgICAgICAgKFdlYkNv
cmU6OldlYktpdFNoYXJlZFNjcmlwdDo6fldlYktpdFNoYXJlZFNjcmlwdCk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJLaXRTaGFyZWRTY3JpcHQ6OnNldENvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6TG9hZEV2ZW50VGFzazo6Y3JlYXRlKTogRmlyZXMgYXN5bmNocm9ub3VzICdsb2FkJyBldmVu
dCB3aGVuIHVuZGVybHlpbmcgU2hhcmVkU2NyaXB0Q29udGV4dCBpcyBpbml0aWFsaXplZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxvYWRFdmVudFRhc2s6OnBlcmZvcm1UYXNrKToKKyAgICAgICAgKFdl
YkNvcmU6OkxvYWRFdmVudFRhc2s6OkxvYWRFdmVudFRhc2spOgorICAgICAgICAoV2ViQ29yZTo6
V2ViS2l0U2hhcmVkU2NyaXB0OjpzY2hlZHVsZUxvYWRFdmVudCk6CisgICAgICAgICogc2hhcmVk
U2NyaXB0L1dlYktpdFNoYXJlZFNjcmlwdC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oldl
YktpdFNoYXJlZFNjcmlwdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdFNoYXJl
ZFNjcmlwdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJL
aXRTaGFyZWRTY3JpcHQ6OnRvV2ViS2l0U2hhcmVkU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6
OldlYktpdFNoYXJlZFNjcmlwdDo6Y29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRT
aGFyZWRTY3JpcHQ6OnJlZkV2ZW50VGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdFNo
YXJlZFNjcmlwdDo6ZGVyZWZFdmVudFRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRT
aGFyZWRTY3JpcHQ6OmV2ZW50VGFyZ2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRT
aGFyZWRTY3JpcHQ6OmVuc3VyZUV2ZW50VGFyZ2V0RGF0YSk6CisgICAgICAgICogc2hhcmVkU2Ny
aXB0L1dlYktpdFNoYXJlZFNjcmlwdC5pZGw6IEFkZGVkLgorCisgICAgICAgICogc2hhcmVkU2Ny
aXB0L1dlYktpdFNoYXJlZFNjcmlwdFJlcG9zaXRvcnkuY3BwOiBBZGRlZC4gSW1wbGVtZW50cyBh
IGxpc3Qgb2YgcnVubmluZyBTaGFyZWRTY3JpcHRDb250ZXh0cy4KKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdExvYWRlcjo6U2NyaXB0TG9hZGVyKTogVGhlIGhlbHBlciBjbGFzcyB0byBsb2FkIGFu
IGluaXRpYWwgc2NyaXB0IG9mIFNoYXJlZFNjcmlwdENvbnRleHQuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRMb2FkZXI6OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0TG9hZGVyOjpu
b3RpZnlGaW5pc2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRTaGFyZWRTY3JpcHRSZXBv
c2l0b3J5OjppbnN0YW5jZSk6IFJlcG9zaXRvcnkgaGFzIGEgc3RhdGljIGdsb2JhbCBpbnN0YW5j
ZS4KKyAgICAgICAgKFdlYkNvcmU6OldlYktpdFNoYXJlZFNjcmlwdFJlcG9zaXRvcnk6OmNvbm5l
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0U2hhcmVkU2NyaXB0UmVwb3NpdG9yeTo6ZG9j
dW1lbnREZXRhY2hlZCk6IENhbGxlZCBmcm9tIERvY3VtZW50OjpkZXRhY2goKS4KKyAgICAgICAg
KFdlYkNvcmU6OldlYktpdFNoYXJlZFNjcmlwdFJlcG9zaXRvcnk6OnJlbW92ZVNoYXJlZFNjcmlw
dENvbnRleHQpOiBDYWxsZWQgZnJvbSB+U2hhcmVkU2NyaXB0Q29udGV4dCgpLgorICAgICAgICAo
V2ViQ29yZTo6V2ViS2l0U2hhcmVkU2NyaXB0UmVwb3NpdG9yeTo6Y29ubmVjdFRvU2hhcmVkU2Ny
aXB0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdFNoYXJlZFNjcmlwdFJlcG9zaXRvcnk6Omdl
dFNoYXJlZFNjcmlwdENvbnRleHQpOgorICAgICAgICAqIHNoYXJlZFNjcmlwdC9XZWJLaXRTaGFy
ZWRTY3JpcHRSZXBvc2l0b3J5Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0U2hh
cmVkU2NyaXB0UmVwb3NpdG9yeTo6V2ViS2l0U2hhcmVkU2NyaXB0UmVwb3NpdG9yeSk6CisKKyAg
ICAgICAgKiB3b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXb3JrZXJTY3JpcHRMb2FkZXI6OmxvYWRTeW5jaHJvbm91c2x5KTogQ2hhbmdlZCBBU1NFUlQg
YmVjYXVzZSB0aGlzIGxvYWRlciBjYW4gd29yayB3aXRoIFNoYXJlZFNjcmlwdCBhcyB3ZWxsLgor
CisyMDA5LTExLTIzICBEbWl0cnkgVGl0b3YgIDxkaW1pY2hAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAgIEFkZCBFTkFCTEVfU0hB
UkVEX1NDUklQVCBmZWF0dXJlIGRlZmluZSBhbmQgZmxhZyBmb3IgYnVpbGQtd2Via2l0CiAgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTQ0NAogCmRpZmYg
LS1naXQgYS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9XZWJDb3JlL0Rlcml2ZWRTb3Vy
Y2VzLm1ha2UKaW5kZXggNTg0NDYwOS4uODI2ZDI1NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9EZXJp
dmVkU291cmNlcy5tYWtlCisrKyBiL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMzks
NiArMzksNyBAQCBWUEFUSCA9IFwKICAgICAkKFdlYkNvcmUpL25vdGlmaWNhdGlvbnMgXAogICAg
ICQoV2ViQ29yZSkvcGFnZSBcCiAgICAgJChXZWJDb3JlKS9wbHVnaW5zIFwKKyAgICAkKFdlYkNv
cmUpL3NoYXJlZFNjcmlwdCBcCiAgICAgJChXZWJDb3JlKS9zdG9yYWdlIFwKICAgICAkKFdlYkNv
cmUpL3htbCBcCiAgICAgJChXZWJDb3JlKS93bWwgXApAQCAtMjMyLDYgKzIzMyw3IEBAIERPTV9D
TEFTU0VTID0gXAogICAgIFJhbmdlIFwKICAgICBSYW5nZUV4Y2VwdGlvbiBcCiAgICAgUmVjdCBc
CisgICAgU2hhcmVkU2NyaXB0Q29udGV4dCBcCiAgICAgU2hhcmVkV29ya2VyIFwKICAgICBTaGFy
ZWRXb3JrZXJDb250ZXh0IFwKICAgICBTUUxFcnJvciBcCkBAIC00MDAsNiArNDAyLDcgQEAgRE9N
X0NMQVNTRVMgPSBcCiAgICAgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSBcCiAgICAgV2ViS2l0Q1NT
TWF0cml4IFwKICAgICBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSBcCisgICAgV2ViS2l0U2hhcmVk
U2NyaXB0IFwKICAgICBXZWJLaXRQb2ludCBcCiAgICAgV2ViS2l0VHJhbnNpdGlvbkV2ZW50IFwK
ICAgICBXZWJTb2NrZXQgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXgg
YjI0YTQwMi4uZTQ2NmU3OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBA
IC00MTc3Miw2ICs0MTc3MiwzOCBAQAogCQkJPC9GaWx0ZXI+DQogCQk8L0ZpbHRlcj4NCiAJCTxG
aWx0ZXINCisJCQlOYW1lPSJzaGFyZWRTY3JpcHQiDQorCQkJPg0KKwkJCTxGaWxlDQorCQkJCVJl
bGF0aXZlUGF0aD0iLi5cc2hhcmVkU2NyaXB0XFNoYXJlZFNjcmlwdENvbnRleHQuY3BwIg0KKwkJ
CQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cc2hhcmVk
U2NyaXB0XFNoYXJlZFNjcmlwdENvbnRleHQuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8
RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHNoYXJlZFNjcmlwdFxTaGFyZWRTY3JpcHRDb250
cm9sbGVyLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxzaGFyZWRTY3JpcHRcV2ViS2l0U2hhcmVkU2NyaXB0LmNwcCINCisJCQkJPg0KKwkJ
CTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHNoYXJlZFNjcmlwdFxX
ZWJLaXRTaGFyZWRTY3JpcHQuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHNoYXJlZFNjcmlwdFxXZWJLaXRTaGFyZWRTY3JpcHRSZXBvc2l0
b3J5LmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHNoYXJlZFNjcmlwdFxXZWJLaXRTaGFyZWRTY3JpcHRSZXBvc2l0b3J5LmgiDQorCQkJ
CT4NCisJCQk8L0ZpbGU+DQorCQk8L0ZpbHRlcj4NCisJCTxGaWx0ZXINCiAJCQlOYW1lPSJzdG9y
YWdlIg0KIAkJCT4NCiAJCQk8RmlsZQ0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggYWVhZGViZS4uMDZmYjRmNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTI0Miw2ICsyNDIsMTQgQEAKIAkJMTg1QkNGMjkwRjMy
NzlDRTAwMEVBMjYyIC8qIFRocmVhZFRpbWVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTg1QkNGMjcwRjMyNzlDRTAwMEVBMjYyIC8qIFRocmVhZFRp
bWVycy5oICovOyB9OwogCQkxODg2MDRCMzBGMkU2NTRBMDAwQjY0NDMgLyogRE9NVGltZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTg4NjA0QjEw
RjJFNjU0QTAwMEI2NDQzIC8qIERPTVRpbWVyLmNwcCAqLzsgfTsKIAkJMTg4NjA0QjQwRjJFNjU0
QTAwMEI2NDQzIC8qIERPTVRpbWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxODg2MDRCMjBGMkU2NTRBMDAwQjY0NDMgLyogRE9NVGltZXIuaCAqLzsg
fTsKKwkJMThDNUZDQTUxMEEzOTkxRjAwNDg0MzhEIC8qIFdlYktpdFNoYXJlZFNjcmlwdC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxOEM1RkNBMDEw
QTM5OTFGMDA0ODQzOEQgLyogV2ViS2l0U2hhcmVkU2NyaXB0LmNwcCAqLzsgfTsKKwkJMThDNUZD
QTYxMEEzOTkxRjAwNDg0MzhEIC8qIFdlYktpdFNoYXJlZFNjcmlwdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMThDNUZDQTExMEEzOTkxRjAwNDg0MzhE
IC8qIFdlYktpdFNoYXJlZFNjcmlwdC5oICovOyB9OworCQkxOEM1RkNBNzEwQTM5OTFGMDA0ODQz
OEQgLyogV2ViS2l0U2hhcmVkU2NyaXB0LmlkbCBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMThDNUZDQTIxMEEzOTkxRjAwNDg0MzhEIC8qIFdlYktpdFNo
YXJlZFNjcmlwdC5pZGwgKi87IH07CisJCTE4QzVGQ0E4MTBBMzk5MUYwMDQ4NDM4RCAvKiBXZWJL
aXRTaGFyZWRTY3JpcHRSZXBvc2l0b3J5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDE4QzVGQ0EzMTBBMzk5MUYwMDQ4NDM4RCAvKiBXZWJLaXRTaGFy
ZWRTY3JpcHRSZXBvc2l0b3J5LmNwcCAqLzsgfTsKKwkJMThDNUZDQTkxMEEzOTkxRjAwNDg0MzhE
IC8qIFdlYktpdFNoYXJlZFNjcmlwdFJlcG9zaXRvcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE4QzVGQ0E0MTBBMzk5MUYwMDQ4NDM4RCAvKiBXZWJL
aXRTaGFyZWRTY3JpcHRSZXBvc2l0b3J5LmggKi87IH07CisJCTE4QzVGQ0I3MTBBM0M2RjIwMDQ4
NDM4RCAvKiBTaGFyZWRTY3JpcHRDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE4QzVGQ0I0MTBBM0M2RjIwMDQ4NDM4RCAvKiBTaGFyZWRT
Y3JpcHRDb250ZXh0LmNwcCAqLzsgfTsKKwkJMThDNUZDQjgxMEEzQzZGMjAwNDg0MzhEIC8qIFNo
YXJlZFNjcmlwdENvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDE4QzVGQ0I1MTBBM0M2RjIwMDQ4NDM4RCAvKiBTaGFyZWRTY3JpcHRDb250ZXh0
LmggKi87IH07CisJCTE4QzVGQ0I5MTBBM0M2RjIwMDQ4NDM4RCAvKiBTaGFyZWRTY3JpcHRDb250
ZXh0LmlkbCBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MThDNUZDQjYxMEEzQzZGMjAwNDg0MzhEIC8qIFNoYXJlZFNjcmlwdENvbnRleHQuaWRsICovOyB9
OwogCQkxOEY4MzFCODBGRDQ4Qzc4MDBEOEM1NkIgLyogV29ya2VyTG9hZGVyUHJveHkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE4RjgzMUI3MEZENDhD
NzgwMEQ4QzU2QiAvKiBXb3JrZXJMb2FkZXJQcm94eS5oICovOyB9OwogCQkxQTBENTczNjBBNUM3
N0ZFMDA3RURENEMgLyogT3ZlcmZsb3dFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTBENTczNDBBNUM3N0ZFMDA3RURENEMgLyogT3ZlcmZs
b3dFdmVudC5jcHAgKi87IH07CiAJCTFBMEQ1NzM3MEE1Qzc3RkUwMDdFREQ0QyAvKiBPdmVyZmxv
d0V2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QTBENTczNTBBNUM3N0ZFMDA3RURENEMgLyogT3ZlcmZsb3dFdmVudC5oICovOyB9OwpAQCAtNTQy
OSw2ICs1NDM3LDE0IEBACiAJCTE4NUJDRjI3MEYzMjc5Q0UwMDBFQTI2MiAvKiBUaHJlYWRUaW1l
cnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFkVGltZXJzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE4ODYwNEIxMEYyRTY1NEEwMDBCNjQ0MyAvKiBE
T01UaW1lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBET01UaW1l
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE4ODYwNEIyMEYyRTY1NEEwMDBC
NjQ0MyAvKiBET01UaW1lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01U
aW1lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxOEM1RkNBMDEwQTM5OTFGMDA0
ODQzOEQgLyogV2ViS2l0U2hhcmVkU2NyaXB0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdlYktpdFNoYXJlZFNjcmlwdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTE4QzVGQ0ExMTBBMzk5MUYwMDQ4NDM4RCAvKiBXZWJLaXRTaGFyZWRTY3JpcHQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViS2l0U2hhcmVkU2NyaXB0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE4QzVGQ0EyMTBBMzk5MUYwMDQ4NDM4RCAv
KiBXZWJLaXRTaGFyZWRTY3JpcHQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYktpdFNo
YXJlZFNjcmlwdC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE4QzVGQ0EzMTBB
Mzk5MUYwMDQ4NDM4RCAvKiBXZWJLaXRTaGFyZWRTY3JpcHRSZXBvc2l0b3J5LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYktpdFNoYXJlZFNjcmlwdFJlcG9zaXRv
cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxOEM1RkNBNDEwQTM5OTFGMDA0
ODQzOEQgLyogV2ViS2l0U2hhcmVkU2NyaXB0UmVwb3NpdG9yeS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJLaXRTaGFyZWRTY3JpcHRSZXBvc2l0b3J5Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTE4QzVGQ0I0MTBBM0M2RjIwMDQ4NDM4RCAvKiBTaGFyZWRT
Y3JpcHRDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNo
YXJlZFNjcmlwdENvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxOEM1
RkNCNTEwQTNDNkYyMDA0ODQzOEQgLyogU2hhcmVkU2NyaXB0Q29udGV4dC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTaGFyZWRTY3JpcHRDb250ZXh0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTE4QzVGQ0I2MTBBM0M2RjIwMDQ4NDM4RCAvKiBTaGFyZWRTY3Jp
cHRDb250ZXh0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTaGFyZWRTY3JpcHRDb250ZXh0
LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMThGODMxQjcwRkQ0OEM3ODAwRDhD
NTZCIC8qIFdvcmtlckxvYWRlclByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IFdvcmtlckxvYWRlclByb3h5Lmg7IHBhdGggPSB3b3JrZXJzL1dvcmtlckxvYWRlclByb3h5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMEQ1NzM0MEE1Qzc3RkUwMDdFREQ0
QyAvKiBPdmVyZmxvd0V2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBPdmVyZmxvd0V2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEw
RDU3MzUwQTVDNzdGRTAwN0VERDRDIC8qIE92ZXJmbG93RXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE92ZXJmbG93RXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTEwMDU2LDYgKzEwMDcyLDcgQEAKIAkJCQlCQ0YxQTVCQTA5NzgzMjA5MDA2MUEx
MjMgLyogcGxhdGZvcm0gKi8sCiAJCQkJNURDRjgzNjkwRDU5MTU3ODAwOTUzQkM2IC8qIHBsdWdp
bnMgKi8sCiAJCQkJRjUyM0QyRjMwMkRFNDQzQjAxODYzNUNBIC8qIHJlbmRlcmluZyAqLywKKwkJ
CQkxOEM1RkM5RjEwQTM5OTFGMDA0ODQzOEQgLyogc2hhcmVkU2NyaXB0ICovLAogCQkJCTFBRTgy
RUM5MENBQUUxNzcwMDIyMzdBRSAvKiBzdG9yYWdlICovLAogCQkJCUIyMjI3N0NBMEQwMEJGMUUw
MDcxQjc4MiAvKiBzdmcgKi8sCiAJCQkJNTE4QTM0QkQxMDI2QzgzMTAwMUI2ODk2IC8qIHdlYnNv
Y2tldHMgKi8sCkBAIC0xMDE1Nyw2ICsxMDE3NCwyMSBAQAogCQkJcGF0aCA9IERlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmU7CiAJCQlzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOwogCQl9Owor
CQkxOEM1RkM5RjEwQTM5OTFGMDA0ODQzOEQgLyogc2hhcmVkU2NyaXB0ICovID0geworCQkJaXNh
ID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkxOEM1RkNCNDEwQTNDNkYyMDA0ODQz
OEQgLyogU2hhcmVkU2NyaXB0Q29udGV4dC5jcHAgKi8sCisJCQkJMThDNUZDQjUxMEEzQzZGMjAw
NDg0MzhEIC8qIFNoYXJlZFNjcmlwdENvbnRleHQuaCAqLywKKwkJCQkxOEM1RkNCNjEwQTNDNkYy
MDA0ODQzOEQgLyogU2hhcmVkU2NyaXB0Q29udGV4dC5pZGwgKi8sCisJCQkJMThDNUZDQTAxMEEz
OTkxRjAwNDg0MzhEIC8qIFdlYktpdFNoYXJlZFNjcmlwdC5jcHAgKi8sCisJCQkJMThDNUZDQTEx
MEEzOTkxRjAwNDg0MzhEIC8qIFdlYktpdFNoYXJlZFNjcmlwdC5oICovLAorCQkJCTE4QzVGQ0Ey
MTBBMzk5MUYwMDQ4NDM4RCAvKiBXZWJLaXRTaGFyZWRTY3JpcHQuaWRsICovLAorCQkJCTE4QzVG
Q0EzMTBBMzk5MUYwMDQ4NDM4RCAvKiBXZWJLaXRTaGFyZWRTY3JpcHRSZXBvc2l0b3J5LmNwcCAq
LywKKwkJCQkxOEM1RkNBNDEwQTM5OTFGMDA0ODQzOEQgLyogV2ViS2l0U2hhcmVkU2NyaXB0UmVw
b3NpdG9yeS5oICovLAorCQkJKTsKKwkJCXBhdGggPSAic2hhcmVkU2NyaXB0IjsKKwkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTFBMkU2RTU2MENDNTUxRTAwMDRBMjA2MiAvKiBz
cWwgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMTgxMzEs
NiArMTgxNjMsOSBAQAogCQkJCTE0NzlGQUYwMTA5QUUzNzUwMERFRDY1NSAvKiBSZW5kZXJSdWJ5
QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3OUZBRjIxMDlBRTM3NTAwREVENjU1IC8qIFJl
bmRlclJ1YnlSdW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NzlGQUY0MTA5QUUzNzUwMERFRDY1
NSAvKiBSZW5kZXJSdWJ5VGV4dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMThDNUZDQTYxMEEzOTkx
RjAwNDg0MzhEIC8qIFdlYktpdFNoYXJlZFNjcmlwdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMThD
NUZDQTkxMEEzOTkxRjAwNDg0MzhEIC8qIFdlYktpdFNoYXJlZFNjcmlwdFJlcG9zaXRvcnkuaCBp
biBIZWFkZXJzICovLAorCQkJCTE4QzVGQ0I4MTBBM0M2RjIwMDQ4NDM4RCAvKiBTaGFyZWRTY3Jp
cHRDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTI0NzQ4NDEwQUExNjFEMDBCNzk0OTMg
LyogQXV0aGVudGljYXRpb25DbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzODJERjU4MTBB
OEQ1QzkwMDkyNTY1MiAvKiBDb2xvclNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBQjMxQzkx
RTEwQUUxQjhFMDAwQzdCOTIgLyogTGluZUNsYW1wVmFsdWUuaCBpbiBIZWFkZXJzICovLApAQCAt
MTgyMzUsNiArMTgyNzAsOCBAQAogCQkJCTg1MTM2Q0E4MEFFRDY2NTkwMEY5MEEzRCAvKiB3ZXN0
UmVzaXplQ3Vyc29yLnBuZyBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJMUFCMUFFN0EwQzA1MUZERTAw
MTM5RjRGIC8qIHpvb21JbkN1cnNvci5wbmcgaW4gUmVzb3VyY2VzICovLAogCQkJCTFBQjFBRTdC
MEMwNTFGREUwMDEzOUY0RiAvKiB6b29tT3V0Q3Vyc29yLnBuZyBpbiBSZXNvdXJjZXMgKi8sCisJ
CQkJMThDNUZDQTcxMEEzOTkxRjAwNDg0MzhEIC8qIFdlYktpdFNoYXJlZFNjcmlwdC5pZGwgaW4g
UmVzb3VyY2VzICovLAorCQkJCTE4QzVGQ0I5MTBBM0M2RjIwMDQ4NDM4RCAvKiBTaGFyZWRTY3Jp
cHRDb250ZXh0LmlkbCBpbiBSZXNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yMDI3Nyw2ICsyMDMxNCw5IEBACiAJ
CQkJMTQ3OUZBRUYxMDlBRTM3NTAwREVENjU1IC8qIFJlbmRlclJ1YnlCYXNlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0NzlGQUYxMTA5QUUzNzUwMERFRDY1NSAvKiBSZW5kZXJSdWJ5UnVuLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0NzlGQUYzMTA5QUUzNzUwMERFRDY1NSAvKiBSZW5kZXJS
dWJ5VGV4dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxOEM1RkNBNTEwQTM5OTFGMDA0ODQzOEQg
LyogV2ViS2l0U2hhcmVkU2NyaXB0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTE4QzVGQ0E4MTBB
Mzk5MUYwMDQ4NDM4RCAvKiBXZWJLaXRTaGFyZWRTY3JpcHRSZXBvc2l0b3J5LmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTE4QzVGQ0I3MTBBM0M2RjIwMDQ4NDM4RCAvKiBTaGFyZWRTY3JpcHRDb250
ZXh0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDZiMTg2MDMuLjQ1NDI2ZTEgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAKQEAgLTE0Myw2ICsxNDMsMTAgQEAKICNpbmNsdWRlICJTaGFyZWRXb3JrZXJSZXBv
c2l0b3J5LmgiCiAjZW5kaWYKIAorI2lmIEVOQUJMRShTSEFSRURfU0NSSVBUKQorI2luY2x1ZGUg
IldlYktpdFNoYXJlZFNjcmlwdFJlcG9zaXRvcnkuaCIKKyNlbmRpZgorCiAjaWYgRU5BQkxFKERP
TV9TVE9SQUdFKQogI2luY2x1ZGUgIlN0b3JhZ2VFdmVudC5oIgogI2VuZGlmCkBAIC0xNDQyLDYg
KzE0NDYsMTAgQEAgdm9pZCBEb2N1bWVudDo6ZGV0YWNoKCkKICAgICBTaGFyZWRXb3JrZXJSZXBv
c2l0b3J5Ojpkb2N1bWVudERldGFjaGVkKHRoaXMpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoU0hB
UkVEX1NDUklQVCkKKyAgICBXZWJLaXRTaGFyZWRTY3JpcHRSZXBvc2l0b3J5Ojpkb2N1bWVudERl
dGFjaGVkKHRoaXMpOworI2VuZGlmCisKICAgICBpZiAobV9mcmFtZSkgewogICAgICAgICBGcmFt
ZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCk7CiAgICAgICAgIGlmICh2aWV3KQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwIGIvV2ViQ29yZS9kb20vRXZlbnRUYXJn
ZXQuY3BwCmluZGV4IDY1ZDc1MWEuLjhlZTFmNTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0V2
ZW50VGFyZ2V0LmNwcAorKysgYi9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAKQEAgLTE1Niw2
ICsxNTYsMTggQEAgTm90aWZpY2F0aW9uKiBFdmVudFRhcmdldDo6dG9Ob3RpZmljYXRpb24oKQog
fQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoU0hBUkVEX1NDUklQVCkKK1dlYktpdFNoYXJlZFNjcmlw
dCogRXZlbnRUYXJnZXQ6OnRvV2ViS2l0U2hhcmVkU2NyaXB0KCkKK3sKKyAgICByZXR1cm4gMDsK
K30KKworU2hhcmVkU2NyaXB0Q29udGV4dCogRXZlbnRUYXJnZXQ6OnRvU2hhcmVkU2NyaXB0Q29u
dGV4dCgpCit7CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogYm9vbCBFdmVudFRhcmdldDo6
YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0
cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQogewogICAgIEV2ZW50
VGFyZ2V0RGF0YSogZCA9IGVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9kb20vRXZlbnRUYXJnZXQuaCBiL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgKaW5kZXgg
MmQ3N2M4Ny4uZDBjMWI2NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAor
KysgYi9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCkBAIC01OSw2ICs1OSwxMSBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgWE1MSHR0cFJlcXVlc3Q7CiAgICAgY2xhc3MgWE1MSHR0
cFJlcXVlc3RVcGxvYWQ7CiAKKyNpZiBFTkFCTEUoU0hBUkVEX1NDUklQVCkKKyAgICBjbGFzcyBT
aGFyZWRTY3JpcHRDb250ZXh0OworICAgIGNsYXNzIFdlYktpdFNoYXJlZFNjcmlwdDsKKyNlbmRp
ZgorCiAgICAgdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAogICAgIHN0cnVjdCBGaXJpbmdF
dmVudEl0ZXJhdG9yIHsKQEAgLTExOCw2ICsxMjMsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICB2aXJ0dWFsIE5vdGlmaWNhdGlvbiogdG9Ob3RpZmljYXRpb24oKTsKICNlbmRpZgog
CisjaWYgRU5BQkxFKFNIQVJFRF9TQ1JJUFQpCisgICAgICAgIHZpcnR1YWwgV2ViS2l0U2hhcmVk
U2NyaXB0KiB0b1dlYktpdFNoYXJlZFNjcmlwdCgpOworICAgICAgICB2aXJ0dWFsIFNoYXJlZFNj
cmlwdENvbnRleHQqIHRvU2hhcmVkU2NyaXB0Q29udGV4dCgpOworI2VuZGlmCisKICAgICAgICAg
dmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkg
Y29uc3QgPSAwOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBhZGRFdmVudExpc3RlbmVyKGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+LCBib29s
IHVzZUNhcHR1cmUpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5oIGIvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCmluZGV4IDE0MTQx
MjUuLjNlZjQ4ZWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaAorKysgYi9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgKQEAgLTU3LDYg
KzU3LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0Rv
Y3VtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlz
V29ya2VyQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisjaWYgRU5BQkxFKFNIQVJF
RF9TQ1JJUFQpCisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1NoYXJlZFNjcmlwdENvbnRleHQoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorI2VuZGlmCiAKICAgICAgICAgY29uc3QgS1VSTCYgdXJs
KCkgY29uc3QgeyByZXR1cm4gdmlydHVhbFVSTCgpOyB9CiAgICAgICAgIEtVUkwgY29tcGxldGVV
UkwoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxDb21wbGV0ZVVSTCh1
cmwpOyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3NoYXJlZFNjcmlwdC9TaGFyZWRTY3JpcHRDb250
ZXh0LmNwcCBiL1dlYkNvcmUvc2hhcmVkU2NyaXB0L1NoYXJlZFNjcmlwdENvbnRleHQuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzY2I2MTQKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL3NoYXJlZFNjcmlwdC9TaGFyZWRTY3JpcHRDb250ZXh0LmNwcApAQCAtMCww
ICsxLDE5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTSEFSRURfU0NSSVBU
KQorCisjaW5jbHVkZSAiU2hhcmVkU2NyaXB0Q29udGV4dC5oIgorI2luY2x1ZGUgIkV2ZW50Lmgi
CisjaW5jbHVkZSAiRXZlbnRFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgorI2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIKKyNpbmNsdWRlICJTY3JpcHRWYWx1ZS5o
IgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiU2hhcmVkU2NyaXB0Q29u
dHJvbGxlci5oIgorI2luY2x1ZGUgIldlYktpdFNoYXJlZFNjcmlwdFJlcG9zaXRvcnkuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBJbnRlcnZhbCB0byBhbGxvdyBvcnBoYW5lZCBTaGFy
ZWRTY3JpcHRDb250ZXh0IHRvIGdhaW4gcG90ZW50aWFsIG5ldyBvd25lci4KKy8vIFRoaXMgY2Fu
IGhhcHBlbiBvbiBuYXZpZ2F0aW9uIHdoZW4gYm90aCBwYWdlcyBjb25uZWN0IHRvIHRoZSBzYW1l
IFNoYXJlZFNjcmlwdC4KK3N0YXRpYyBjb25zdCBkb3VibGUgZGVzdHJ1Y3Rpb25JbnRlcnZhbCA9
IDUuMDsKKworU2hhcmVkU2NyaXB0Q29udGV4dDo6U2hhcmVkU2NyaXB0Q29udGV4dChjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IEtVUkwmIHVybCwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4g
b3JpZ2luKQorICAgIDogbV9uYW1lKG5hbWUpCisgICAgLCBtX3VybCh1cmwpCisgICAgLCBtX3Nj
cmlwdChuZXcgU2hhcmVkU2NyaXB0Q29udHJvbGxlcih0aGlzKSkKKyAgICAsIG1fZGVzdHJ1Y3Rp
b25UaW1lcih0aGlzLCAmU2hhcmVkU2NyaXB0Q29udGV4dDo6ZGVzdHJ1Y3Rpb25UaW1lckZpcmVk
KQorICAgICwgbV9sb2FkZWQoZmFsc2UpCit7CisgICAgc2V0U2VjdXJpdHlPcmlnaW4ob3JpZ2lu
KTsKKyAgICByZWYoKTsgLy8gTWF0Y2hpbmcgZGVyZWYgaXMgaW4gZGVzdHJ1Y3Rpb25UaW1lckZp
cmVkIGNhbGxiYWNrLgorfQorCit2b2lkIFNoYXJlZFNjcmlwdENvbnRleHQ6OmNsZWFyU2NyaXB0
KCkKK3sKKyAgICBtX3NjcmlwdC5jbGVhcigpOyAKK30KKworY29uc3QgS1VSTCYgU2hhcmVkU2Ny
aXB0Q29udGV4dDo6dmlydHVhbFVSTCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdXJsOworfQor
CitLVVJMIFNoYXJlZFNjcmlwdENvbnRleHQ6OnZpcnR1YWxDb21wbGV0ZVVSTChjb25zdCBTdHJp
bmcmIHVybCkgY29uc3QKK3sKKyAgICAvLyBBbHdheXMgcmV0dXJuIGEgbnVsbCBVUkwgd2hlbiBw
YXNzZWQgYSBudWxsIHN0cmluZy4KKyAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGNoYW5nZSB0aGUg
S1VSTCBjb25zdHJ1Y3RvciB0byBoYXZlIHRoaXMgYmVoYXZpb3I/CisgICAgaWYgKHVybC5pc051
bGwoKSkKKyAgICAgICAgcmV0dXJuIEtVUkwoKTsKKyAgICAvLyBBbHdheXMgdXNlIFVURi04IGlu
IFdvcmtlcnMuCisgICAgcmV0dXJuIEtVUkwobV91cmwsIHVybCk7Cit9CisKK3ZvaWQgU2hhcmVk
U2NyaXB0Q29udGV4dDo6cmVwb3J0RXhjZXB0aW9uKGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdl
LCBpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCit7CisgICAgYm9vbCBl
cnJvckhhbmRsZWQgPSBmYWxzZTsKKyAgICBpZiAob25lcnJvcigpKQorICAgICAgICBlcnJvckhh
bmRsZWQgPSBvbmVycm9yKCktPnJlcG9ydEVycm9yKHRoaXMsIGVycm9yTWVzc2FnZSwgc291cmNl
VVJMLCBsaW5lTnVtYmVyKTsKK30KKwordm9pZCBTaGFyZWRTY3JpcHRDb250ZXh0OjphZGRNZXNz
YWdlKE1lc3NhZ2VEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbiwgTWVzc2FnZVNvdXJjZSBzb3VyY2Us
IE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNz
YWdlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKK3sKKyAg
ICAvLyBGSVhNRTogZmlndXJlIG91dCBjb25zb2xlL2luc3BlY3RvciBzdG9yeSBmb3IgU2hhcmVk
U2NyaXB0LiBNYXliZSBzaW1pbGFyIHRvIFNoYXJlZFdvcmtlcnMuCisgICAgVU5VU0VEX1BBUkFN
KGRlc3RpbmF0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0oc291cmNlKTsKKyAgICBVTlVTRURfUEFS
QU0odHlwZSk7CisgICAgVU5VU0VEX1BBUkFNKGxldmVsKTsKKyAgICBVTlVTRURfUEFSQU0obWVz
c2FnZSk7CisgICAgVU5VU0VEX1BBUkFNKGxpbmVOdW1iZXIpOworICAgIFVOVVNFRF9QQVJBTShz
b3VyY2VVUkwpOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgU2hhcmVkU2NyaXB0
Q29udGV4dDo6cmVzb3VyY2VSZXRyaWV2ZWRCeVhNTEh0dHBSZXF1ZXN0KHVuc2lnbmVkIGxvbmcs
IGNvbnN0IFNjcmlwdFN0cmluZyYpCit7CisgICAgLy8gRklYTUU6IGZpZ3VyZSBvdXQgY29uc29s
ZS9pbnNwZWN0b3Igc3RvcnkgZm9yIFNoYXJlZFNjcmlwdC4gTWF5YmUgc2ltaWxhciB0byBTaGFy
ZWRXb3JrZXJzLgorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgU2hhcmVkU2NyaXB0
Q29udGV4dDo6c2NyaXB0SW1wb3J0ZWQodW5zaWduZWQgbG9uZywgY29uc3QgU3RyaW5nJikKK3sK
KyAgICAvLyBGSVhNRTogZmlndXJlIG91dCBjb25zb2xlL2luc3BlY3RvciBzdG9yeSBmb3IgU2hh
cmVkU2NyaXB0LiBNYXliZSBzaW1pbGFyIHRvIFNoYXJlZFdvcmtlcnMuCisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKworYm9vbCBTaGFyZWRTY3JpcHRDb250ZXh0OjptYXRjaGVzKGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU2VjdXJpdHlPcmlnaW4mIG9yaWdpbiwgY29uc3QgS1VSTCYgdXJs
VG9NYXRjaCkgY29uc3QKK3sKKyAgICAvLyBJZiB0aGUgb3JpZ2lucyBkb24ndCBtYXRjaCwgb3Ig
dGhlIG5hbWVzIGRvbid0IG1hdGNoLCB0aGVuIHRoaXMgaXMgbm90IHRoZSBjb250ZXh0IHdlIGFy
ZSBsb29raW5nIGZvci4KKyAgICBpZiAoIW9yaWdpbi5lcXVhbChzZWN1cml0eU9yaWdpbigpKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gSWYgdGhlIG5hbWVzIGFyZSBib3RoIGVt
cHR5LCBjb21wYXJlcyB0aGUgVVJMcyBpbnN0ZWFkLgorICAgIGlmIChuYW1lLmlzRW1wdHkoKSAm
JiBtX25hbWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdXJsVG9NYXRjaCA9PSBtX3VybDsK
KworICAgIHJldHVybiBuYW1lID09IG1fbmFtZTsKK30KKwordm9pZCBTaGFyZWRTY3JpcHRDb250
ZXh0OjphZGRUb0RvY3VtZW50c0xpc3QoRG9jdW1lbnQqIGNvbnRleHQpCit7CisgICAgbV9kb2N1
bWVudExpc3QuYWRkKGNvbnRleHQpOworCisgICAgaWYgKG1fZGVzdHJ1Y3Rpb25UaW1lci5pc0Fj
dGl2ZSgpKQorICAgICAgICBtX2Rlc3RydWN0aW9uVGltZXIuc3RvcCgpOworfQorCit2b2lkIFNo
YXJlZFNjcmlwdENvbnRleHQ6OmRlc3RydWN0aW9uVGltZXJGaXJlZChUaW1lcjxTaGFyZWRTY3Jp
cHRDb250ZXh0PiopCit7CisgICAgaWYgKCFtX2RvY3VtZW50TGlzdC5zaXplKCkpIHsKKyAgICAg
ICAgV2ViS2l0U2hhcmVkU2NyaXB0UmVwb3NpdG9yeTo6cmVtb3ZlU2hhcmVkU2NyaXB0Q29udGV4
dCh0aGlzKTsKKyAgICAgICAgc3RvcEFjdGl2ZURPTU9iamVjdHMoKTsKKyAgICAgICAgY2xlYXJT
Y3JpcHQoKTsKKyAgICAgICAgZGVyZWYoKTsKKyAgICB9Cit9CisKK3ZvaWQgU2hhcmVkU2NyaXB0
Q29udGV4dDo6cmVtb3ZlRnJvbURvY3VtZW50TGlzdChEb2N1bWVudCogY29udGV4dCkKK3sKKyAg
ICBIYXNoU2V0PERvY3VtZW50Kj46Oml0ZXJhdG9yIGl0ID0gbV9kb2N1bWVudExpc3QuZmluZChj
b250ZXh0KTsKKyAgICBpZiAoaXQgPT0gbV9kb2N1bWVudExpc3QuZW5kKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fZG9jdW1lbnRMaXN0LnJlbW92ZShpdCk7CisKKyAgICAvLyBTdGFydCB0
aW1lciB0byBjaGVjayBpZiB0aGlzIGNvbnRleHQgaGFzIHRvIHNlbGYtZGVzdHJ1Y3QuCisgICAg
Ly8gVGhlIHVzZSBvZiBhIHRpbWVyIG1ha2VzIGRlc3RydWN0aW9uIG9mIHRoZSBjb250ZXh0IGhh
cHBlbiBsYXRlciB0byBhdm9pZCBkZWFsbG9jYXRpbmcgaXQKKyAgICAvLyByaWdodCBub3cgd2hp
bGUgaXQgaXMgbm90aWZpZWQuIEFsc28sIGl0IGFsbG93cyB0aGUgY29udGV4dCB0byBleGlzdCBp
biBhIG9ycGhhbmVkIHN0YXRlCisgICAgLy8gZm9yIGEgc2hvcnQgcGVyaW9kIG9mIHRpbWUgdG8g
c2VlIGlmIHRoZXJlIHdpbGwgYmUgYSBuZXcgb3duZXIgKGFzIGluIG5hdmlnYXRpb24pLgorICAg
IC8vIFRoaXMgcmVzZXRzIHRoZSB0aW1lciB0byBhIGZ1bGwgaW50ZXJ2YWwgaWYgaXQgaXMgYWxy
ZWFkeSBhY3RpdmUuCisgICAgbV9kZXN0cnVjdGlvblRpbWVyLnN0YXJ0T25lU2hvdChkZXN0cnVj
dGlvbkludGVydmFsKTsKK30KKwordm9pZCBTaGFyZWRTY3JpcHRDb250ZXh0Ojpsb2FkKGNvbnN0
IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIGluaXRpYWxTY3JpcHQpCit7CisgICAg
bV91c2VyQWdlbnQgPSB1c2VyQWdlbnQ7CisgICAgc2NyaXB0KCktPmV2YWx1YXRlKFNjcmlwdFNv
dXJjZUNvZGUoaW5pdGlhbFNjcmlwdCwgbV91cmwpKTsKKyAgICBtX2xvYWRlZCA9IHRydWU7Cit9
CisKK3ZvaWQgU2hhcmVkU2NyaXB0Q29udGV4dDo6cG9zdFRhc2soUGFzc093blB0cjxUYXNrPiB0
YXNrKQoreworICAgIC8vIEZJWE1FOiBOZWVkIHRvIGltcGxlbWVudCBTY3JpcHRFeGVjdXRpb25D
b250ZXh0Ojpwb3N0VGFza1RvTWFpblRocmVhZCB0byBzaGFyZSBiZXR3ZWVuIERvY3VtZW50IGFu
ZCBTaGFyZWRTY3JpcHRDb250ZXh0LgorICAgIFVOVVNFRF9QQVJBTSh0YXNrKTsKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCitFdmVudFRhcmdldERhdGEqIFNoYXJlZFNjcmlwdENvbnRleHQ6
OmV2ZW50VGFyZ2V0RGF0YSgpCit7CisgICAgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsKK30K
KworRXZlbnRUYXJnZXREYXRhKiBTaGFyZWRTY3JpcHRDb250ZXh0OjplbnN1cmVFdmVudFRhcmdl
dERhdGEoKQoreworICAgIHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7Cit9CisKK1NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIFNoYXJlZFNjcmlwdENvbnRleHQ6OnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSBjb25zdAoreworICAgIHJldHVybiBjb25zdF9jYXN0PFNoYXJlZFNjcmlwdENvbnRleHQq
Pih0aGlzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KFNIQVJFRF9TQ1JJUFQpCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc2hhcmVkU2NyaXB0L1NoYXJl
ZFNjcmlwdENvbnRleHQuaCBiL1dlYkNvcmUvc2hhcmVkU2NyaXB0L1NoYXJlZFNjcmlwdENvbnRl
eHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTAzYzVkCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9zaGFyZWRTY3JpcHQvU2hhcmVkU2NyaXB0Q29udGV4dC5oCkBA
IC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBTaGFyZWRTY3JpcHRDb250ZXh0X2gKKyNkZWZpbmUgU2hh
cmVkU2NyaXB0Q29udGV4dF9oCisKKyNpZiBFTkFCTEUoU0hBUkVEX1NDUklQVCkKKworI2luY2x1
ZGUgIkV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRl
ICJTaGFyZWRTY3JpcHRDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRl
ICJXb3JrZXJDb250ZXh0LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIEtVUkw7CitjbGFzcyBTdHJpbmc7CisK
K2NsYXNzIFNoYXJlZFNjcmlwdENvbnRleHQgOiBwdWJsaWMgUmVmQ291bnRlZDxTaGFyZWRTY3Jp
cHRDb250ZXh0PiwgcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIHB1YmxpYyBFdmVudFRh
cmdldCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkU2NyaXB0Q29udGV4
dD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgS1VSTCYgdXJsLCBQYXNzUmVmUHRy
PFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFNoYXJlZFNjcmlwdENvbnRleHQobmFtZSwgdXJsLCBvcmlnaW4pKTsKKyAgICB9CisKKyAg
ICAvLyBTY3JpcHRFeGVjdXRpb25Db250ZXh0CisgICAgdmlydHVhbCBib29sIGlzU2hhcmVkU2Ny
aXB0Q29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIFN0cmluZyB1
c2VyQWdlbnQoY29uc3QgS1VSTCYpIGNvbnN0IHsgcmV0dXJuIG1fdXNlckFnZW50OyB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVwb3J0RXhjZXB0aW9uKGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdl
LCBpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpOworICAgIHZpcnR1YWwg
dm9pZCBhZGRNZXNzYWdlKE1lc3NhZ2VEZXN0aW5hdGlvbiwgTWVzc2FnZVNvdXJjZSwgTWVzc2Fn
ZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsaW5l
TnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCk7CisgICAgdmlydHVhbCB2b2lkIHJlc291
cmNlUmV0cmlldmVkQnlYTUxIdHRwUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNv
bnN0IFNjcmlwdFN0cmluZyYgc291cmNlU3RyaW5nKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2NyaXB0
SW1wb3J0ZWQodW5zaWduZWQgbG9uZywgY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lk
IHBvc3RUYXNrKFBhc3NPd25QdHI8VGFzaz4pOyAvLyBFeGVjdXRlcyB0aGUgdGFzayBvbiBjb250
ZXh0J3MgdGhyZWFkIGFzeW5jaHJvbm91c2x5LgorCisgICAgLy8gSlMgd3JhcHBlciBhbmQgRXZl
bnRUYXJnZXQgc3VwcG9ydC4KKyAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFNoYXJlZFNjcmlwdENv
bnRleHQqIHRvU2hhcmVkU2NyaXB0Q29udGV4dCgpIHsgcmV0dXJuIHRoaXM7IH0KKyAgICBERUZJ
TkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGVycm9yKTsKKworICAgIC8vIFNoYXJlZFNjcmlw
dEdsb2JhbFNjb3BlCisgICAgU2hhcmVkU2NyaXB0Q29udGV4dCogc2VsZigpIHsgcmV0dXJuIHRo
aXM7IH0KKworICAgIC8vIExpZmV0aW1lIC0ga2VlcCB0aGUgbGlzdCBvZiBkb2N1bWVudHMgdGhh
dCBhcmUgY29ubmVjdGVkLCBkZXJlZiB3aGVuIHRoZSBsYXN0IGRpc2Nvbm5lY3RzLgorICAgIHZv
aWQgYWRkVG9Eb2N1bWVudHNMaXN0KERvY3VtZW50Kik7CisgICAgdm9pZCByZW1vdmVGcm9tRG9j
dW1lbnRMaXN0KERvY3VtZW50Kik7CisKKyAgICBTaGFyZWRTY3JpcHRDb250cm9sbGVyKiBzY3Jp
cHQoKSB7IHJldHVybiBtX3NjcmlwdC5nZXQoKTsgfQorICAgIHZvaWQgY2xlYXJTY3JpcHQoKTsK
KworICAgIGJvb2wgbG9hZGVkKCkgeyByZXR1cm4gbV9sb2FkZWQ7IH0KKyAgICB2b2lkIGxvYWQo
Y29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgaW5pdGlhbFNjcmlwdCk7CisK
KyAgICBib29sIG1hdGNoZXMoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTZWN1cml0eU9yaWdp
biYsIGNvbnN0IEtVUkwmKSBjb25zdDsKKyAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbmFtZTsgfQorCisgICAgdXNpbmcgUmVmQ291bnRlZDxTaGFyZWRTY3JpcHRDb250ZXh0Pjo6
cmVmOworICAgIHVzaW5nIFJlZkNvdW50ZWQ8U2hhcmVkU2NyaXB0Q29udGV4dD46OmRlcmVmOwor
Citwcm90ZWN0ZWQ6CisgICAgU2hhcmVkU2NyaXB0Q29udGV4dChjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IEtVUkwmLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPik7CisKK3ByaXZhdGU6Cisg
ICAgLy8gRXZlbnRUYXJnZXQKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJn
ZXREYXRhKCk7CisgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGVuc3VyZUV2ZW50VGFyZ2V0
RGF0YSgpOworICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIHsgZGVyZWYoKTsgfQorICAgIAorICAg
IC8vIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQKKyAgICB2aXJ0dWFsIGNvbnN0IEtVUkwmIHZpcnR1
YWxVUkwoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEtVUkwgdmlydHVhbENvbXBsZXRlVVJMKGNvbnN0
IFN0cmluZyYpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCByZWZTY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkgeyByZWYoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXJlZlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSB7IGRlcmVmKCk7IH0KKyAgICAgICAgICAgIAorICAgIHZvaWQgZGVzdHJ1Y3Rpb25U
aW1lckZpcmVkKFRpbWVyPFNoYXJlZFNjcmlwdENvbnRleHQ+Kik7CisgICAgICAgICAgICAKKyAg
ICBTdHJpbmcgbV9uYW1lOworICAgIFN0cmluZyBtX3VzZXJBZ2VudDsKKyAgICBLVVJMIG1fdXJs
OworICAgIE93blB0cjxTaGFyZWRTY3JpcHRDb250cm9sbGVyPiBtX3NjcmlwdDsKKyAgICBIYXNo
U2V0PERvY3VtZW50Kj4gbV9kb2N1bWVudExpc3Q7CisgICAgVGltZXI8U2hhcmVkU2NyaXB0Q29u
dGV4dD4gbV9kZXN0cnVjdGlvblRpbWVyOworICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2ZW50VGFy
Z2V0RGF0YTsKKworICAgIGJvb2wgbV9sb2FkZWQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU0hBUkVEX1NDUklQVCkKKworI2VuZGlmIC8vIFNoYXJl
ZFNjcmlwdENvbnRleHRfaAorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3NoYXJlZFNjcmlwdC9TaGFy
ZWRTY3JpcHRDb250ZXh0LmlkbCBiL1dlYkNvcmUvc2hhcmVkU2NyaXB0L1NoYXJlZFNjcmlwdENv
bnRleHQuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMWZmY2EKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3NoYXJlZFNjcmlwdC9TaGFyZWRTY3JpcHRDb250ZXh0
LmlkbApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIHdpbmRvdyB7CisKKyAgICBpbnRlcmZhY2UgWwor
ICAgICAgICBDb25kaXRpb25hbD1TSEFSRURfU0NSSVBULAorICAgICAgICBDdXN0b21NYXJrRnVu
Y3Rpb24sCisgICAgICAgIEV2ZW50VGFyZ2V0LAorICAgICAgICBFeHRlbmRzRE9NR2xvYmFsT2Jq
ZWN0LAorICAgICAgICBJc1dvcmtlckNvbnRleHQsCisgICAgICAgIEdlbmVyYXRlTmF0aXZlQ29u
dmVydGVyLAorICAgICAgICBMZWdhY3lQYXJlbnQ9SlNTaGFyZWRTY3JpcHRDb250ZXh0QmFzZSwK
KyAgICAgICAgTm9TdGF0aWNUYWJsZXMKKyAgICBdIFNoYXJlZFNjcmlwdENvbnRleHQgeworCisj
aWYgZGVmaW5lZChMQU5HVUFHRV9KQVZBU0NSSVBUKSAmJiBMQU5HVUFHRV9KQVZBU0NSSVBUCisg
ICAgICAgIGF0dHJpYnV0ZSBbUmVwbGFjZWFibGVdIFNoYXJlZFNjcmlwdENvbnRleHQgc2VsZjsK
KyNlbmRpZgorCisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKKyAg
ICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25lcnJvcjsKKworICAgICAgICAvLyBFdmVu
dFRhcmdldCBpbnRlcmZhY2UKKyAgICAgICAgW0N1c3RvbV0gdm9pZCBhZGRFdmVudExpc3RlbmVy
KGluIERPTVN0cmluZyB0eXBlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW4gYm9vbGVhbiB1c2VDYXB0dXJlKTsKKyAgICAgICAgW0N1c3RvbV0g
dm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBlLCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIs
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiB1
c2VDYXB0dXJlKTsKKyAgICAgICAgYm9vbGVhbiBkaXNwYXRjaEV2ZW50KGluIEV2ZW50IGV2dCkK
KyAgICAgICAgICAgIHJhaXNlcyhFdmVudEV4Y2VwdGlvbik7CisKKyAgICB9OworCit9CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3NoYXJlZFNjcmlwdC9TaGFyZWRTY3JpcHRDb250cm9sbGVyLmggYi9X
ZWJDb3JlL3NoYXJlZFNjcmlwdC9TaGFyZWRTY3JpcHRDb250cm9sbGVyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MzZTQ0NQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNv
cmUvc2hhcmVkU2NyaXB0L1NoYXJlZFNjcmlwdENvbnRyb2xsZXIuaApAQCAtMCwwICsxLDU3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBTaGFyZWRTY3JpcHRDb250cm9sbGVyX2gKKyNkZWZpbmUgU2hhcmVkU2NyaXB0Q29u
dHJvbGxlcl9oCisKKyNpZiBFTkFCTEUoU0hBUkVEX1NDUklQVCkKKworLy8gTm9uLWZ1bmN0aW9u
aW5nIFNjcmlwdENvbnRyb2xsZXIuIFdpbGwgYmUgaW1wbGVtZW50ZWQgd2l0aCBjb3JyZXNwb25k
aW5nIGJpbmRpbmdzIChzaW5jZSBpdCdzIEpTQy0gYW5kIFY4LWRlcGVuZGFudCkuCisKKyNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xh
c3MgU2hhcmVkU2NyaXB0Q29udGV4dDsKKyAgICBjbGFzcyBTY3JpcHRTb3VyY2VDb2RlOworCisg
ICAgY2xhc3MgU2hhcmVkU2NyaXB0Q29udHJvbGxlciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7Cisg
ICAgcHVibGljOgorICAgICAgICBTaGFyZWRTY3JpcHRDb250cm9sbGVyKFNoYXJlZFNjcmlwdENv
bnRleHQqKSB7IH0KKyAgICAgICAgflNoYXJlZFNjcmlwdENvbnRyb2xsZXIoKSB7IH0KKworICAg
ICAgICB2b2lkIGV2YWx1YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmKSB7IH0KKyAgICB9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU0hBUkVEX1NDUklQ
VCkKKworI2VuZGlmIC8vIFNoYXJlZFNjcmlwdENvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9zaGFyZWRTY3JpcHQvV2ViS2l0U2hhcmVkU2NyaXB0LmNwcCBiL1dlYkNvcmUvc2hhcmVk
U2NyaXB0L1dlYktpdFNoYXJlZFNjcmlwdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uM2NkYWM5MQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvc2hhcmVkU2NyaXB0
L1dlYktpdFNoYXJlZFNjcmlwdC5jcHAKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBFTkFCTEUoU0hBUkVEX1NDUklQVCkKKworI2luY2x1ZGUgIldlYktpdFNoYXJl
ZFNjcmlwdC5oIgorCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudEV4Y2VwdGlv
bi5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJTZWN1
cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIlNoYXJlZFNjcmlwdENvbnRleHQuaCIKKyNpbmNsdWRl
ICJXZWJLaXRTaGFyZWRTY3JpcHRSZXBvc2l0b3J5LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXZWJLaXRTaGFyZWRTY3JpcHQ6OldlYktp
dFNoYXJlZFNjcmlwdChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1lLCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKKyAgICA6IEFj
dGl2ZURPTU9iamVjdChjb250ZXh0LCB0aGlzKQoreworICAgIGlmICh1cmwuaXNFbXB0eSgpKSB7
CisgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgdGhlIGR5bmFtaWMgZ2xvYmFsIHNjb3BlIChidWcg
IzI3ODg3KS4KKyAgICBLVVJMIHNjcmlwdFVSTCA9IGNvbnRleHQtPmNvbXBsZXRlVVJMKHVybCk7
CisgICAgaWYgKCFzY3JpcHRVUkwuaXNWYWxpZCgpKSB7CisgICAgICAgIGVjID0gU1lOVEFYX0VS
UjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghY29udGV4dC0+c2VjdXJpdHlP
cmlnaW4oKS0+Y2FuQWNjZXNzKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUoc2NyaXB0VVJMKS5nZXQo
KSkpIHsKKyAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBXZWJLaXRTaGFyZWRTY3JpcHRSZXBvc2l0b3J5Ojpjb25uZWN0KHRoaXMsIHNjcmlw
dFVSTCwgbmFtZSwgZWMpOworfQorCitXZWJLaXRTaGFyZWRTY3JpcHQ6On5XZWJLaXRTaGFyZWRT
Y3JpcHQoKQoreworfQorCit2b2lkIFdlYktpdFNoYXJlZFNjcmlwdDo6c2V0Q29udGV4dChQYXNz
UmVmUHRyPFNoYXJlZFNjcmlwdENvbnRleHQ+IGNvbnRleHQpCit7IAorICAgIG1faW5uZXJDb250
ZXh0ID0gY29udGV4dDsKK30KKworY2xhc3MgTG9hZEV2ZW50VGFzayA6IHB1YmxpYyBTY3JpcHRF
eGVjdXRpb25Db250ZXh0OjpUYXNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxM
b2FkRXZlbnRUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxXZWJLaXRTaGFyZWRTY3JpcHQ+IHNoYXJl
ZFNjcmlwdCwgUGFzc1JlZlB0cjxTaGFyZWRTY3JpcHRDb250ZXh0PiBpbm5lckNvbnRleHQpCisg
ICAgeworICAgICAgICByZXR1cm4gbmV3IExvYWRFdmVudFRhc2soc2hhcmVkU2NyaXB0LCBpbm5l
ckNvbnRleHQpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChj
b250ZXh0LCBjb250ZXh0LT5pc0RvY3VtZW50KCkpOworICAgICAgICBtX3NoYXJlZFNjcmlwdC0+
c2V0Q29udGV4dChtX2lubmVyQ29udGV4dCk7CisgICAgICAgIG1fc2hhcmVkU2NyaXB0LT5kaXNw
YXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoRXZlbnROYW1lcygpLmxvYWRFdmVudCwgZmFsc2UsIGZh
bHNlKSk7CisKKyAgICAgICAgbV9zaGFyZWRTY3JpcHQtPnVuc2V0UGVuZGluZ0FjdGl2aXR5KG1f
c2hhcmVkU2NyaXB0LmdldCgpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTG9hZEV2ZW50VGFz
ayhQYXNzUmVmUHRyPFdlYktpdFNoYXJlZFNjcmlwdD4gc2hhcmVkU2NyaXB0LCBQYXNzUmVmUHRy
PFNoYXJlZFNjcmlwdENvbnRleHQ+IGlubmVyQ29udGV4dCkKKyAgICAgICAgOiBtX3NoYXJlZFNj
cmlwdChzaGFyZWRTY3JpcHQpCisgICAgICAgICwgbV9pbm5lckNvbnRleHQoaW5uZXJDb250ZXh0
KQorICAgIHsKKyAgICAgICAgLy8gS2VlcCBldmVudCBsaXN0ZW5lcnMgYWxpdmUuCisgICAgICAg
IG1fc2hhcmVkU2NyaXB0LT5zZXRQZW5kaW5nQWN0aXZpdHkobV9zaGFyZWRTY3JpcHQuZ2V0KCkp
OworICAgIH0KKworICAgIFJlZlB0cjxXZWJLaXRTaGFyZWRTY3JpcHQ+IG1fc2hhcmVkU2NyaXB0
OworICAgIFJlZlB0cjxTaGFyZWRTY3JpcHRDb250ZXh0PiBtX2lubmVyQ29udGV4dDsKK307CisK
K3ZvaWQgV2ViS2l0U2hhcmVkU2NyaXB0OjpzY2hlZHVsZUxvYWRFdmVudChQYXNzUmVmUHRyPFNo
YXJlZFNjcmlwdENvbnRleHQ+IGlubmVyQ29udGV4dCkKK3sKKyAgICBBU1NFUlQoIW1faW5uZXJD
b250ZXh0KTsKKyAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnBvc3RUYXNrKExvYWRFdmVu
dFRhc2s6OmNyZWF0ZSh0aGlzLCBpbm5lckNvbnRleHQpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNIQVJFRF9TQ1JJUFQpCisKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvc2hhcmVkU2NyaXB0L1dlYktpdFNoYXJlZFNjcmlwdC5oIGIvV2ViQ29yZS9zaGFy
ZWRTY3JpcHQvV2ViS2l0U2hhcmVkU2NyaXB0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNGQ5ZDQ3NgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvc2hhcmVkU2NyaXB0
L1dlYktpdFNoYXJlZFNjcmlwdC5oCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYktpdFNoYXJl
ZFNjcmlwdF9oCisjZGVmaW5lIFdlYktpdFNoYXJlZFNjcmlwdF9oCisKKyNpZiBFTkFCTEUoU0hB
UkVEX1NDUklQVCkKKworI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkF0
b21pY1N0cmluZ0hhc2guaCIKKyNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAi
RXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKKyAgICBjbGFzcyBLVVJMOworICAgIGNsYXNzIFNoYXJlZFNjcmlwdENvbnRleHQ7
CisgICAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKworICAgIGNsYXNzIFdlYktpdFNo
YXJlZFNjcmlwdCA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYktpdFNoYXJlZFNjcmlwdD4sIHB1Ymxp
YyBBY3RpdmVET01PYmplY3QsIHB1YmxpYyBFdmVudFRhcmdldCB7CisgICAgcHVibGljOgorICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJLaXRTaGFyZWRTY3JpcHQ+IGNyZWF0ZShjb25zdCBT
dHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1lLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBXZWJLaXRTaGFyZWRTY3JpcHQodXJsLCBuYW1lLCBjb250ZXh0LCBlYykp
OworICAgICAgICB9CisgICAgICAgIHZpcnR1YWwgfldlYktpdFNoYXJlZFNjcmlwdCgpOworCisg
ICAgICAgIC8vIEV2ZW50VGFyZ2V0IEFQSXMKKyAgICAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gQWN0aXZl
RE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0KKyAgICAgICAgdmlydHVhbCBX
ZWJLaXRTaGFyZWRTY3JpcHQqIHRvV2ViS2l0U2hhcmVkU2NyaXB0KCkgeyByZXR1cm4gdGhpczsg
fQorCisgICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoZXJyb3IpOworICAg
ICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGxvYWQpOworCisgICAgICAgIHVz
aW5nIFJlZkNvdW50ZWQ8V2ViS2l0U2hhcmVkU2NyaXB0Pjo6cmVmOworICAgICAgICB1c2luZyBS
ZWZDb3VudGVkPFdlYktpdFNoYXJlZFNjcmlwdD46OmRlcmVmOworCisgICAgICAgIFNoYXJlZFNj
cmlwdENvbnRleHQqIGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2lubmVyQ29udGV4dC5nZXQo
KTsgfQorICAgICAgICB2b2lkIHNldENvbnRleHQoUGFzc1JlZlB0cjxTaGFyZWRTY3JpcHRDb250
ZXh0PiBjb250ZXh0KTsKKworICAgICAgICAvLyBXaGVuIGZpcmVkLCB0aGlzIHdpbGwgc2V0IHRo
ZSBpbm5lckNvbnRleHQgaW50byB0aGlzIFdlYktpdFNoYXJlZFNjcmlwdCBhbmQgZGlzcGF0Y2gg
J2xvYWQnIGV2ZW50LgorICAgICAgICB2b2lkIHNjaGVkdWxlTG9hZEV2ZW50KFBhc3NSZWZQdHI8
U2hhcmVkU2NyaXB0Q29udGV4dD4gaW5uZXJDb250ZXh0KTsKKworICAgIHByaXZhdGU6CisgICAg
ICAgIFdlYktpdFNoYXJlZFNjcmlwdChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgICAg
IHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KKyAgICAgICAgdmlydHVh
bCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0KKyAgICAgICAgdmlydHVhbCBF
dmVudFRhcmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpIHsgcmV0dXJuICZtX2V2ZW50VGFyZ2V0
RGF0YTsgfQorICAgICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZW5zdXJlRXZlbnRUYXJn
ZXREYXRhKCkgeyByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOyB9CisKKyAgICAgICAgRXZlbnRU
YXJnZXREYXRhIG1fZXZlbnRUYXJnZXREYXRhOworICAgICAgICBSZWZQdHI8U2hhcmVkU2NyaXB0
Q29udGV4dD4gbV9pbm5lckNvbnRleHQ7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKFNIQVJFRF9TQ1JJUFQpCisKKyNlbmRpZiAvLyBXZWJLaXRT
aGFyZWRTY3JpcHRfaAorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3NoYXJlZFNjcmlwdC9XZWJLaXRT
aGFyZWRTY3JpcHQuaWRsIGIvV2ViQ29yZS9zaGFyZWRTY3JpcHQvV2ViS2l0U2hhcmVkU2NyaXB0
LmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTM0NTA4Ci0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9zaGFyZWRTY3JpcHQvV2ViS2l0U2hhcmVkU2NyaXB0LmlkbApA
QCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworbW9kdWxlIHdpbmRvdyB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAg
ICBDb25kaXRpb25hbD1TSEFSRURfU0NSSVBULAorICAgICAgICBFdmVudFRhcmdldCwKKyAgICAg
ICAgR2VuZXJhdGVUb0pTCisgICAgXSBXZWJLaXRTaGFyZWRTY3JpcHQgeworCisgICAgICAgIGF0
dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uZXJyb3I7CisgICAgICAgIGF0dHJpYnV0ZSBFdmVudExp
c3RlbmVyIG9ubG9hZDsKKworICAgICAgICAvLyBFdmVudFRhcmdldCBpbnRlcmZhY2UKKyAgICAg
ICAgW0N1c3RvbV0gdm9pZCBhZGRFdmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBsaXN0
ZW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGJvb2xlYW4g
dXNlQ2FwdHVyZSk7CisgICAgICAgIFtDdXN0b21dIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihp
biBET01TdHJpbmcgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbiBib29sZWFuIHVzZUNhcHR1cmUpOworICAgICAgICBib29sZWFu
IGRpc3BhdGNoRXZlbnQoaW4gRXZlbnQgZXZ0KQorICAgICAgICAgICAgcmFpc2VzKEV2ZW50RXhj
ZXB0aW9uKTsKKworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgU2hhcmVkU2NyaXB0Q29udGV4
dCBjb250ZXh0OworICAgIH07Cit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3NoYXJlZFNjcmlwdC9X
ZWJLaXRTaGFyZWRTY3JpcHRSZXBvc2l0b3J5LmNwcCBiL1dlYkNvcmUvc2hhcmVkU2NyaXB0L1dl
YktpdFNoYXJlZFNjcmlwdFJlcG9zaXRvcnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmUyMzMyMTgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3NoYXJlZFNjcmlw
dC9XZWJLaXRTaGFyZWRTY3JpcHRSZXBvc2l0b3J5LmNwcApAQCAtMCwwICsxLDE3NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTSEFSRURfU0NSSVBUKQorCisjaW5jbHVkZSAi
V2ViS2l0U2hhcmVkU2NyaXB0UmVwb3NpdG9yeS5oIgorCisjaW5jbHVkZSAiQWN0aXZlRE9NT2Jq
ZWN0LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1
ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAi
U2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJTaGFyZWRTY3JpcHRDb250ZXh0LmgiCisjaW5j
bHVkZSAiV2ViS2l0U2hhcmVkU2NyaXB0LmgiCisjaW5jbHVkZSAiV29ya2VyU2NyaXB0TG9hZGVy
LmgiCisjaW5jbHVkZSAiV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworLy8gSGVscGVyIGNsYXNzIHRvIGxvYWQgdGhlIGluaXRpYWwgc2NyaXB0IG9u
IGJlaGFsZiBvZiBhIFNoYXJlZFNjcmlwdC4KK2NsYXNzIFNoYXJlZFNjcmlwdExvYWRlciA6IHB1
YmxpYyBSZWZDb3VudGVkPFNoYXJlZFNjcmlwdExvYWRlcj4sIHB1YmxpYyBBY3RpdmVET01PYmpl
Y3QsIHByaXZhdGUgV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTaGFyZWRTY3JpcHRMb2FkZXI+IGNyZWF0ZShQYXNzUmVmUHRyPFdlYktp
dFNoYXJlZFNjcmlwdD4gc2hhcmVkU2NyaXB0LCBQYXNzUmVmUHRyPFNoYXJlZFNjcmlwdENvbnRl
eHQ+IGlubmVyQ29udGV4dCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hh
cmVkU2NyaXB0TG9hZGVyKHNoYXJlZFNjcmlwdCwgaW5uZXJDb250ZXh0KSk7CisgICAgfQorCisg
ICAgdm9pZCBsb2FkKGNvbnN0IEtVUkwmKTsKKworcHJpdmF0ZToKKyAgICBTaGFyZWRTY3JpcHRM
b2FkZXIoUGFzc1JlZlB0cjxXZWJLaXRTaGFyZWRTY3JpcHQ+LCBQYXNzUmVmUHRyPFNoYXJlZFNj
cmlwdENvbnRleHQ+KTsKKyAgICAvLyBXb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQgY2FsbGJhY2sK
KyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RmluaXNoZWQoKTsKKworICAgIFJlZlB0cjxXZWJLaXRT
aGFyZWRTY3JpcHQ+IG1fc2hhcmVkU2NyaXB0OworICAgIFJlZlB0cjxTaGFyZWRTY3JpcHRDb250
ZXh0PiBtX2lubmVyQ29udGV4dDsKKyAgICBPd25QdHI8V29ya2VyU2NyaXB0TG9hZGVyPiBtX3Nj
cmlwdExvYWRlcjsKK307CisKK1NoYXJlZFNjcmlwdExvYWRlcjo6U2hhcmVkU2NyaXB0TG9hZGVy
KFBhc3NSZWZQdHI8V2ViS2l0U2hhcmVkU2NyaXB0PiBzaGFyZWRTY3JpcHQsIFBhc3NSZWZQdHI8
U2hhcmVkU2NyaXB0Q29udGV4dD4gaW5uZXJDb250ZXh0KQorICAgIDogQWN0aXZlRE9NT2JqZWN0
KHNoYXJlZFNjcmlwdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0aGlzKQorICAgICwgbV9z
aGFyZWRTY3JpcHQoc2hhcmVkU2NyaXB0KQorICAgICwgbV9pbm5lckNvbnRleHQoaW5uZXJDb250
ZXh0KQoreworfQorCit2b2lkIFNoYXJlZFNjcmlwdExvYWRlcjo6bG9hZChjb25zdCBLVVJMJiB1
cmwpCit7CisgICAgLy8gTWFyayB0aGlzIG9iamVjdCBhcyBhY3RpdmUgZm9yIHRoZSBkdXJhdGlv
biBvZiB0aGUgbG9hZC4KKyAgICBBU1NFUlQoIWhhc1BlbmRpbmdBY3Rpdml0eSgpKTsKKyAgICBt
X3NjcmlwdExvYWRlciA9IG5ldyBXb3JrZXJTY3JpcHRMb2FkZXIoKTsKKyAgICBtX3NjcmlwdExv
YWRlci0+bG9hZEFzeW5jaHJvbm91c2x5KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgdXJsLCBE
ZW55Q3Jvc3NPcmlnaW5SZXF1ZXN0cywgdGhpcyk7CisKKyAgICAvLyBTdGF5IGFsaXZlIHVudGls
IHRoZSBsb2FkIGZpbmlzaGVzLgorICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICBt
X3NoYXJlZFNjcmlwdC0+c2V0UGVuZGluZ0FjdGl2aXR5KG1fc2hhcmVkU2NyaXB0LmdldCgpKTsK
K30KKwordm9pZCBTaGFyZWRTY3JpcHRMb2FkZXI6Om5vdGlmeUZpbmlzaGVkKCkKK3sKKyAgICBp
ZiAobV9zY3JpcHRMb2FkZXItPmZhaWxlZCgpKQorICAgICAgICBtX3NoYXJlZFNjcmlwdC0+ZGlz
cGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50LCBmYWxzZSwg
dHJ1ZSkpOworICAgIGVsc2UgeworICAgICAgICAvLyBJZiBhbm90aGVyIGxvYWRlciBoYXMgbm90
IHlldCBpbml0aWFsaXplZCB0aGUgU2hhcmVkU2NyaXB0Q29udGV4dCwgZG8gc28uCisgICAgICAg
IGlmICghbV9pbm5lckNvbnRleHQtPmxvYWRlZCgpKQorICAgICAgICAgICAgbV9pbm5lckNvbnRl
eHQtPmxvYWQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT51c2VyQWdlbnQobV9zY3JpcHRMb2Fk
ZXItPnVybCgpKSwgbV9zY3JpcHRMb2FkZXItPnNjcmlwdCgpKTsKKyAgICAKKyAgICAgICAgbV9z
aGFyZWRTY3JpcHQtPnNjaGVkdWxlTG9hZEV2ZW50KG1faW5uZXJDb250ZXh0KTsKKyAgICB9CisK
KyAgICBtX3NoYXJlZFNjcmlwdC0+dW5zZXRQZW5kaW5nQWN0aXZpdHkobV9zaGFyZWRTY3JpcHQu
Z2V0KCkpOworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOyAvLyBUaGlzIGZyZWVzIHRo
aXMgb2JqZWN0IHNvIGl0IG11c3QgYmUgdGhlIGxhc3QgYWN0aW9uIGluIHRoaXMgZnVuY3Rpb24u
Cit9CisKK1dlYktpdFNoYXJlZFNjcmlwdFJlcG9zaXRvcnkmIFdlYktpdFNoYXJlZFNjcmlwdFJl
cG9zaXRvcnk6Omluc3RhbmNlKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFdlYktpdFNo
YXJlZFNjcmlwdFJlcG9zaXRvcnksIGluc3RhbmNlLCAoKSk7CisgICAgcmV0dXJuIGluc3RhbmNl
OworfQorCit2b2lkIFdlYktpdFNoYXJlZFNjcmlwdFJlcG9zaXRvcnk6OmNvbm5lY3QoUGFzc1Jl
ZlB0cjxXZWJLaXRTaGFyZWRTY3JpcHQ+IHNoYXJlZFNjcmlwdCwgY29uc3QgS1VSTCYgdXJsLCBj
b25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGluc3RhbmNlKCku
Y29ubmVjdFRvU2hhcmVkU2NyaXB0KHNoYXJlZFNjcmlwdCwgdXJsLCBuYW1lLCBlYyk7Cit9CisK
K3ZvaWQgV2ViS2l0U2hhcmVkU2NyaXB0UmVwb3NpdG9yeTo6ZG9jdW1lbnREZXRhY2hlZChEb2N1
bWVudCogZG9jdW1lbnQpCit7CisgICAgV2ViS2l0U2hhcmVkU2NyaXB0UmVwb3NpdG9yeSYgcmVw
b3NpdG9yeSA9IGluc3RhbmNlKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlcG9z
aXRvcnkubV9zaGFyZWRTY3JpcHRDb250ZXh0cy5zaXplKCk7IGkrKykKKyAgICAgICAgcmVwb3Np
dG9yeS5tX3NoYXJlZFNjcmlwdENvbnRleHRzW2ldLT5yZW1vdmVGcm9tRG9jdW1lbnRMaXN0KGRv
Y3VtZW50KTsKK30KKwordm9pZCBXZWJLaXRTaGFyZWRTY3JpcHRSZXBvc2l0b3J5OjpyZW1vdmVT
aGFyZWRTY3JpcHRDb250ZXh0KFNoYXJlZFNjcmlwdENvbnRleHQqIGNvbnRleHQpCit7CisgICAg
V2ViS2l0U2hhcmVkU2NyaXB0UmVwb3NpdG9yeSYgcmVwb3NpdG9yeSA9IGluc3RhbmNlKCk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlcG9zaXRvcnkubV9zaGFyZWRTY3JpcHRDb250
ZXh0cy5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAoY29udGV4dCA9PSByZXBvc2l0b3J5Lm1f
c2hhcmVkU2NyaXB0Q29udGV4dHNbaV0pIHsKKyAgICAgICAgICAgIHJlcG9zaXRvcnkubV9zaGFy
ZWRTY3JpcHRDb250ZXh0cy5yZW1vdmUoaSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICB9Cit9CisKK3ZvaWQgV2ViS2l0U2hhcmVkU2NyaXB0UmVwb3NpdG9yeTo6Y29ubmVj
dFRvU2hhcmVkU2NyaXB0KFBhc3NSZWZQdHI8V2ViS2l0U2hhcmVkU2NyaXB0PiBzaGFyZWRTY3Jp
cHQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBBU1NFUlQoc2hhcmVkU2NyaXB0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkt
PnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2VzcyhTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKHVybCku
Z2V0KCkpKTsKKyAgICBSZWZQdHI8U2hhcmVkU2NyaXB0Q29udGV4dD4gaW5uZXJDb250ZXh0ID0g
Z2V0U2hhcmVkU2NyaXB0Q29udGV4dChuYW1lLCB1cmwpOworCisgICAgaWYgKGlubmVyQ29udGV4
dC0+dXJsKCkgIT0gdXJsKSB7CisgICAgICAgIC8vIFNoYXJlZFNjcmlwdCB3aXRoIHNhbWUgbmFt
ZSBidXQgZGlmZmVyZW50IFVSTCBhbHJlYWR5IGV4aXN0cyAtIHJldHVybiBhbiBlcnJvci4KKyAg
ICAgICAgZWMgPSBVUkxfTUlTTUFUQ0hfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgQVNTRVJUKHNoYXJlZFNjcmlwdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0RvY3Vt
ZW50KCkpOworICAgIGlubmVyQ29udGV4dC0+YWRkVG9Eb2N1bWVudHNMaXN0KHN0YXRpY19jYXN0
PERvY3VtZW50Kj4oc2hhcmVkU2NyaXB0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpKTsKKwor
ICAgIC8vIElmIFNoYXJlZFNjcmlwdENvbnRleHQgaXMgYWxyZWFkeSBydW5uaW5nLCBqdXN0IHNj
aGVkdWxlIGEgbG9hZCBldmVudCAtIG90aGVyd2lzZSwga2ljayBvZmYgYSBsb2FkZXIgdG8gbG9h
ZCB0aGUgc2NyaXB0LgorICAgIGlmIChpbm5lckNvbnRleHQtPmxvYWRlZCgpKQorICAgICAgICBz
aGFyZWRTY3JpcHQtPnNjaGVkdWxlTG9hZEV2ZW50KGlubmVyQ29udGV4dCk7CisgICAgZWxzZSB7
CisgICAgICAgIFJlZlB0cjxTaGFyZWRTY3JpcHRMb2FkZXI+IGxvYWRlciA9IFNoYXJlZFNjcmlw
dExvYWRlcjo6Y3JlYXRlKHNoYXJlZFNjcmlwdCwgaW5uZXJDb250ZXh0LnJlbGVhc2UoKSk7Cisg
ICAgICAgIGxvYWRlci0+bG9hZCh1cmwpOyAvLyBQZW5kaW5nIGFjdGl2aXR5IHdpbGwga2VlcCB0
aGUgbG9hZGVyIGFsaXZlLgorICAgIH0KK30KKworLy8gQ3JlYXRlcyBhIG5ldyBTaGFyZWRTY3Jp
cHRDb250ZXh0IG9yIHJldHVybnMgYW4gZXhpc3Rpbmcgb25lIGZyb20gdGhlIHJlcG9zaXRvcnku
CitQYXNzUmVmUHRyPFNoYXJlZFNjcmlwdENvbnRleHQ+IFdlYktpdFNoYXJlZFNjcmlwdFJlcG9z
aXRvcnk6OmdldFNoYXJlZFNjcmlwdENvbnRleHQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBL
VVJMJiB1cmwpCit7CisgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4gPSBTZWN1cml0
eU9yaWdpbjo6Y3JlYXRlKHVybCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2hh
cmVkU2NyaXB0Q29udGV4dHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKG1fc2hhcmVkU2Ny
aXB0Q29udGV4dHNbaV0tPm1hdGNoZXMobmFtZSwgKm9yaWdpbiwgdXJsKSkKKyAgICAgICAgICAg
IHJldHVybiBtX3NoYXJlZFNjcmlwdENvbnRleHRzW2ldOworICAgIH0KKworICAgIFJlZlB0cjxT
aGFyZWRTY3JpcHRDb250ZXh0PiBzaGFyZWRTY3JpcHRDb250ZXh0ID0gU2hhcmVkU2NyaXB0Q29u
dGV4dDo6Y3JlYXRlKG5hbWUsIHVybCwgb3JpZ2luLnJlbGVhc2UoKSk7CisgICAgbV9zaGFyZWRT
Y3JpcHRDb250ZXh0cy5hcHBlbmQoc2hhcmVkU2NyaXB0Q29udGV4dC5nZXQoKSk7CisgICAgcmV0
dXJuIHNoYXJlZFNjcmlwdENvbnRleHQucmVsZWFzZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU0hBUkVEX1NDUklQVCkKKwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9zaGFyZWRTY3JpcHQvV2ViS2l0U2hhcmVkU2NyaXB0UmVwb3NpdG9yeS5oIGIvV2Vi
Q29yZS9zaGFyZWRTY3JpcHQvV2ViS2l0U2hhcmVkU2NyaXB0UmVwb3NpdG9yeS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3YzYwZDAKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL3NoYXJlZFNjcmlwdC9XZWJLaXRTaGFyZWRTY3JpcHRSZXBvc2l0b3J5LmgKQEAgLTAs
MCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgV2ViS2l0U2hhcmVkU2NyaXB0UmVwb3NpdG9yeV9oCisjZGVmaW5l
IFdlYktpdFNoYXJlZFNjcmlwdFJlcG9zaXRvcnlfaAorCisjaWYgRU5BQkxFKFNIQVJFRF9TQ1JJ
UFQpCisKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwor
CitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIEtVUkw7CitjbGFzcyBTaGFyZWRTY3JpcHRDb250ZXh0
OworY2xhc3MgU3RyaW5nOworY2xhc3MgV2ViS2l0U2hhcmVkU2NyaXB0OworCisvLyBJbnRlcmZh
Y2UgdG8gYSByZXBvc2l0b3J5IHdoaWNoIG1hbmFnZXMgcmVmZXJlbmNlcyB0byB0aGUgc2V0IG9m
IGFjdGl2ZSBTaGFyZWRTY3JpcHRDb250ZXh0cy4KK2NsYXNzIFdlYktpdFNoYXJlZFNjcmlwdFJl
cG9zaXRvcnkgeworcHVibGljOgorICAgIC8vIENvbm5lY3RzIHRoZSBwYXNzZWQgV2ViS2l0U2hh
cmVkU2NyaXB0IG9iamVjdCB3aXRoIGEgU2hhcmVkU2NyaXB0Q29udGV4dCwgY3JlYXRpbmcgYSBu
ZXcgb25lIGlmIG5lY2Vzc2FyeS4KKyAgICBzdGF0aWMgdm9pZCBjb25uZWN0KFBhc3NSZWZQdHI8
V2ViS2l0U2hhcmVkU2NyaXB0PiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhj
ZXB0aW9uQ29kZSYpOworCisgICAgc3RhdGljIHZvaWQgcmVtb3ZlU2hhcmVkU2NyaXB0Q29udGV4
dChTaGFyZWRTY3JpcHRDb250ZXh0Kik7CisgICAgc3RhdGljIHZvaWQgZG9jdW1lbnREZXRhY2hl
ZChEb2N1bWVudCopOworCitwcml2YXRlOgorICAgIFdlYktpdFNoYXJlZFNjcmlwdFJlcG9zaXRv
cnkoKSB7IH0KKyAgICBzdGF0aWMgV2ViS2l0U2hhcmVkU2NyaXB0UmVwb3NpdG9yeSYgaW5zdGFu
Y2UoKTsKKyAgICB2b2lkIGNvbm5lY3RUb1NoYXJlZFNjcmlwdChQYXNzUmVmUHRyPFdlYktpdFNo
YXJlZFNjcmlwdD4sIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICBQYXNzUmVmUHRyPFNoYXJlZFNjcmlwdENvbnRleHQ+IGdldFNoYXJlZFNjcmlw
dENvbnRleHQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBLVVJMJik7CisKKyAgICAvLyBMaXN0
IG9mIFNoYXJlZFNjcmlwdENvbnRleHRzLgorICAgIC8vIEV4cGVjdGF0aW9uIGlzIHRoYXQgdGhl
cmUgd2lsbCBiZSBhIGxpbWl0ZWQgbnVtYmVyIG9mIFNoYXJlZFNjcmlwdENvbnRleHRzLCBhbmQg
c28gdHJhY2tpbmcgdGhlbSBpbiBhIFZlY3RvciBpcyBtb3JlIGVmZmljaWVudCB0aGFuIG5lc3Rl
ZCBIYXNoTWFwcy4KKyAgICB0eXBlZGVmIFZlY3RvcjxTaGFyZWRTY3JpcHRDb250ZXh0Kj4gU2hh
cmVkU2NyaXB0Q29udGV4dExpc3Q7CisgICAgU2hhcmVkU2NyaXB0Q29udGV4dExpc3QgbV9zaGFy
ZWRTY3JpcHRDb250ZXh0czsKKworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKFNIQVJFRF9TQ1JJUFQpCisKKyNlbmRpZiAvLyBXZWJLaXRTaGFyZWRTY3Jp
cHRSZXBvc2l0b3J5X2gKKwo=
</data>
<flag name="commit-queue"
          id="25540"
          type_id="3"
          status="-"
          setter="dimich"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43809</attachid>
            <date>2009-11-24 14:37:45 -0800</date>
            <delta_ts>2009-11-24 14:55:48 -0800</delta_ts>
            <desc>Updated per David&apos;s comments.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>57583</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NzRkMmI5My4uZWJiNTVhMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiw5NSBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgogCisgICAgICAgIEluaXRpYWwgaW1wbGVtZW50YXRpb24gb2YgV2ViS2l0
U2hhcmVkU2NyaXB0IGFuZCBTaGFyZWRTY3JpcHRDb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTU2OQorCisgICAgICAgIE5vIG5ldyB0ZXN0
cyBzaW5jZSB0aGVyZSBhcmUgbm8gYmluZGluZ3MgeWV0IChzb29uIHRvIGNvbWUpLgorCisgICAg
ICAgICogRGVyaXZlZFNvdXJjZXMubWFrZTogQWRkIFdlYktpdFNoYXJlZFNjcmlwdCBhbmQgU2hh
cmVkU2NyaXB0Q29udGV4dCB0byBhIGxpc3Qgb2YgaWRsIGZpbGVzLgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRldGFjaCk6IE5vdGlmeSBXZWJLaXRTaGFy
ZWRTY3JpcHRSZXBvc2l0b3J5IHRoYXQgZG9jdW1lbnQgaXMgZGV0YWNoaW5nLgorICAgICAgICAq
IGRvbS9FdmVudFRhcmdldC5jcHA6IEFkZCBuZXcgY2FzdGluZyBtZXRob2RzLCBzaW5jZSB0aGUg
bmV3IHR5cGVzIGFyZSBFdmVudFRhcmdldHMuCisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdl
dDo6dG9XZWJLaXRTaGFyZWRTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJnZXQ6
OnRvU2hhcmVkU2NyaXB0Q29udGV4dCk6CisgICAgICAgICogZG9tL0V2ZW50VGFyZ2V0Lmg6IERp
dHRvCisgICAgICAgICogZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmlzU2hhcmVkU2NyaXB0Q29udGV4dCk6IE5l
dyB2aXJ0dWFsIG1ldGhvZCwgc2luY2UgdGhlcmUgaXMgYSBuZXcgdHlwZSBvZiBjb250ZXh0Lgor
CisgICAgICAgICogc2hhcmVkU2NyaXB0L1NoYXJlZFNjcmlwdENvbnRleHQuY3BwOiBBZGRlZC4g
U2ltaWxhciB0byBXb3JrZXJDb250ZXh0LCBidXQgdy9vIHRocmVhZGluZy4KKyAgICAgICAgKFdl
YkNvcmU6OlNoYXJlZFNjcmlwdENvbnRleHQ6OlNoYXJlZFNjcmlwdENvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2hhcmVkU2NyaXB0Q29udGV4dDo6flNoYXJlZFNjcmlwdENvbnRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2hhcmVkU2NyaXB0Q29udGV4dDo6Y2xlYXJTY3JpcHQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcmVkU2NyaXB0Q29udGV4dDo6dmlydHVhbFVSTCk6CisgICAgICAg
IChXZWJDb3JlOjpTaGFyZWRTY3JpcHRDb250ZXh0Ojp2aXJ0dWFsQ29tcGxldGVVUkwpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcmVkU2NyaXB0Q29udGV4dDo6cmVwb3J0RXhjZXB0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXJlZFNjcmlwdENvbnRleHQ6OmFkZE1lc3NhZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6U2hhcmVkU2NyaXB0Q29udGV4dDo6cmVzb3VyY2VSZXRyaWV2ZWRCeVhNTEh0
dHBSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFNjcmlwdENvbnRleHQ6OnNjcmlw
dEltcG9ydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFNjcmlwdENvbnRleHQ6Om1hdGNo
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkU2NyaXB0Q29udGV4dDo6YWRkVG9Eb2N1bWVu
dHNMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFNjcmlwdENvbnRleHQ6OmRlc3RydWN0
aW9uVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRTY3JpcHRDb250ZXh0Ojpy
ZW1vdmVGcm9tRG9jdW1lbnRMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFNjcmlwdENv
bnRleHQ6OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkU2NyaXB0Q29udGV4dDo6cG9z
dFRhc2spOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkU2NyaXB0Q29udGV4dDo6ZXZlbnRUYXJn
ZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFNjcmlwdENvbnRleHQ6OmVuc3VyZUV2
ZW50VGFyZ2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRTY3JpcHRDb250ZXh0Ojpz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KToKKyAgICAgICAgKiBzaGFyZWRTY3JpcHQvU2hhcmVkU2Ny
aXB0Q29udGV4dC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFNjcmlwdENvbnRl
eHQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRTY3JpcHRDb250ZXh0Ojppc1No
YXJlZFNjcmlwdENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkU2NyaXB0Q29udGV4
dDo6dXNlckFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFNjcmlwdENvbnRleHQ6OnRv
U2hhcmVkU2NyaXB0Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRTY3JpcHRDb250
ZXh0OjpzZWxmKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFNjcmlwdENvbnRleHQ6OnNjcmlw
dCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRTY3JpcHRDb250ZXh0Ojpsb2FkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcmVkU2NyaXB0Q29udGV4dDo6bmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpTaGFyZWRTY3JpcHRDb250ZXh0OjpyZWZFdmVudFRhcmdldCk6CisgICAgICAgIChXZWJD
b3JlOjpTaGFyZWRTY3JpcHRDb250ZXh0OjpkZXJlZkV2ZW50VGFyZ2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXJlZFNjcmlwdENvbnRleHQ6OnJlZlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2hhcmVkU2NyaXB0Q29udGV4dDo6ZGVyZWZTY3JpcHRFeGVjdXRp
b25Db250ZXh0KToKKyAgICAgICAgKiBzaGFyZWRTY3JpcHQvU2hhcmVkU2NyaXB0Q29udGV4dC5p
ZGw6IEFkZGVkLgorCisgICAgICAgICogc2hhcmVkU2NyaXB0L1NoYXJlZFNjcmlwdENvbnRyb2xs
ZXIuaDogCisgICAgICAgIEFkZGVkLiBFbXB0eSBpbXBsZW1lbnRhdGlvbiBvZiBhIFNjcmlwdENv
bnRyb2xsZXIsIHdpbGwgY29tZSBsYXRlciBhcyBwYXJ0IG9mIGJpbmRpbmdzLiBOZWVkZWQgdG8g
Y29tcGlsZS4KKworICAgICAgICAqIHNoYXJlZFNjcmlwdC9XZWJLaXRTaGFyZWRTY3JpcHQuY3Bw
OiBBZGRlZC4gRXZlbnRUYXJnZXQtYmFzZWQgRE9NIG9iamVjdC4KKyAgICAgICAgKFdlYkNvcmU6
OldlYktpdFNoYXJlZFNjcmlwdDo6V2ViS2l0U2hhcmVkU2NyaXB0KToKKyAgICAgICAgKFdlYkNv
cmU6OldlYktpdFNoYXJlZFNjcmlwdDo6fldlYktpdFNoYXJlZFNjcmlwdCk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJLaXRTaGFyZWRTY3JpcHQ6OnNldENvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6TG9hZEV2ZW50VGFzazo6Y3JlYXRlKTogRmlyZXMgYXN5bmNocm9ub3VzICdsb2FkJyBldmVu
dCB3aGVuIHVuZGVybHlpbmcgU2hhcmVkU2NyaXB0Q29udGV4dCBpcyBpbml0aWFsaXplZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxvYWRFdmVudFRhc2s6OnBlcmZvcm1UYXNrKToKKyAgICAgICAgKFdl
YkNvcmU6OkxvYWRFdmVudFRhc2s6OkxvYWRFdmVudFRhc2spOgorICAgICAgICAoV2ViQ29yZTo6
V2ViS2l0U2hhcmVkU2NyaXB0OjpzY2hlZHVsZUxvYWRFdmVudCk6CisgICAgICAgICogc2hhcmVk
U2NyaXB0L1dlYktpdFNoYXJlZFNjcmlwdC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oldl
YktpdFNoYXJlZFNjcmlwdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdFNoYXJl
ZFNjcmlwdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJL
aXRTaGFyZWRTY3JpcHQ6OnRvV2ViS2l0U2hhcmVkU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6
OldlYktpdFNoYXJlZFNjcmlwdDo6Y29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRT
aGFyZWRTY3JpcHQ6OnJlZkV2ZW50VGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdFNo
YXJlZFNjcmlwdDo6ZGVyZWZFdmVudFRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRT
aGFyZWRTY3JpcHQ6OmV2ZW50VGFyZ2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRT
aGFyZWRTY3JpcHQ6OmVuc3VyZUV2ZW50VGFyZ2V0RGF0YSk6CisgICAgICAgICogc2hhcmVkU2Ny
aXB0L1dlYktpdFNoYXJlZFNjcmlwdC5pZGw6IEFkZGVkLgorCisgICAgICAgICogc2hhcmVkU2Ny
aXB0L1dlYktpdFNoYXJlZFNjcmlwdFJlcG9zaXRvcnkuY3BwOiBBZGRlZC4gSW1wbGVtZW50cyBh
IGxpc3Qgb2YgcnVubmluZyBTaGFyZWRTY3JpcHRDb250ZXh0cy4KKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdExvYWRlcjo6U2NyaXB0TG9hZGVyKTogVGhlIGhlbHBlciBjbGFzcyB0byBsb2FkIGFu
IGluaXRpYWwgc2NyaXB0IG9mIFNoYXJlZFNjcmlwdENvbnRleHQuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRMb2FkZXI6OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0TG9hZGVyOjpu
b3RpZnlGaW5pc2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRTaGFyZWRTY3JpcHRSZXBv
c2l0b3J5OjppbnN0YW5jZSk6IFJlcG9zaXRvcnkgaGFzIGEgc3RhdGljIGdsb2JhbCBpbnN0YW5j
ZS4KKyAgICAgICAgKFdlYkNvcmU6OldlYktpdFNoYXJlZFNjcmlwdFJlcG9zaXRvcnk6OmNvbm5l
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0U2hhcmVkU2NyaXB0UmVwb3NpdG9yeTo6ZG9j
dW1lbnREZXRhY2hlZCk6IENhbGxlZCBmcm9tIERvY3VtZW50OjpkZXRhY2goKS4KKyAgICAgICAg
KFdlYkNvcmU6OldlYktpdFNoYXJlZFNjcmlwdFJlcG9zaXRvcnk6OnJlbW92ZVNoYXJlZFNjcmlw
dENvbnRleHQpOiBDYWxsZWQgZnJvbSB+U2hhcmVkU2NyaXB0Q29udGV4dCgpLgorICAgICAgICAo
V2ViQ29yZTo6V2ViS2l0U2hhcmVkU2NyaXB0UmVwb3NpdG9yeTo6Y29ubmVjdFRvU2hhcmVkU2Ny
aXB0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdFNoYXJlZFNjcmlwdFJlcG9zaXRvcnk6Omdl
dFNoYXJlZFNjcmlwdENvbnRleHQpOgorICAgICAgICAqIHNoYXJlZFNjcmlwdC9XZWJLaXRTaGFy
ZWRTY3JpcHRSZXBvc2l0b3J5Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0U2hh
cmVkU2NyaXB0UmVwb3NpdG9yeTo6V2ViS2l0U2hhcmVkU2NyaXB0UmVwb3NpdG9yeSk6CisKKzIw
MDktMTEtMjMgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKICAgICAgICAgQWRkIEVOQUJMRV9TSEFSRURf
U0NSSVBUIGZlYXR1cmUgZGVmaW5lIGFuZCBmbGFnIGZvciBidWlsZC13ZWJraXQKICAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMxNDQ0CiAKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMu
bWFrZQppbmRleCA1ODQ0NjA5Li44MjZkMjU1IDEwMDY0NAotLS0gYS9XZWJDb3JlL0Rlcml2ZWRT
b3VyY2VzLm1ha2UKKysrIGIvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC0zOSw2ICsz
OSw3IEBAIFZQQVRIID0gXAogICAgICQoV2ViQ29yZSkvbm90aWZpY2F0aW9ucyBcCiAgICAgJChX
ZWJDb3JlKS9wYWdlIFwKICAgICAkKFdlYkNvcmUpL3BsdWdpbnMgXAorICAgICQoV2ViQ29yZSkv
c2hhcmVkU2NyaXB0IFwKICAgICAkKFdlYkNvcmUpL3N0b3JhZ2UgXAogICAgICQoV2ViQ29yZSkv
eG1sIFwKICAgICAkKFdlYkNvcmUpL3dtbCBcCkBAIC0yMzIsNiArMjMzLDcgQEAgRE9NX0NMQVNT
RVMgPSBcCiAgICAgUmFuZ2UgXAogICAgIFJhbmdlRXhjZXB0aW9uIFwKICAgICBSZWN0IFwKKyAg
ICBTaGFyZWRTY3JpcHRDb250ZXh0IFwKICAgICBTaGFyZWRXb3JrZXIgXAogICAgIFNoYXJlZFdv
cmtlckNvbnRleHQgXAogICAgIFNRTEVycm9yIFwKQEAgLTQwMCw2ICs0MDIsNyBAQCBET01fQ0xB
U1NFUyA9IFwKICAgICBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlIFwKICAgICBXZWJLaXRDU1NNYXRy
aXggXAogICAgIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlIFwKKyAgICBXZWJLaXRTaGFyZWRTY3Jp
cHQgXAogICAgIFdlYktpdFBvaW50IFwKICAgICBXZWJLaXRUcmFuc2l0aW9uRXZlbnQgXAogICAg
IFdlYlNvY2tldCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCBiMjRh
NDAyLi5lNDY2ZTc4IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTQx
NzcyLDYgKzQxNzcyLDM4IEBACiAJCQk8L0ZpbHRlcj4NCiAJCTwvRmlsdGVyPg0KIAkJPEZpbHRl
cg0KKwkJCU5hbWU9InNoYXJlZFNjcmlwdCINCisJCQk+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlxzaGFyZWRTY3JpcHRcU2hhcmVkU2NyaXB0Q29udGV4dC5jcHAiDQorCQkJCT4N
CisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxzaGFyZWRTY3Jp
cHRcU2hhcmVkU2NyaXB0Q29udGV4dC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxl
DQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cc2hhcmVkU2NyaXB0XFNoYXJlZFNjcmlwdENvbnRyb2xs
ZXIuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHNoYXJlZFNjcmlwdFxXZWJLaXRTaGFyZWRTY3JpcHQuY3BwIg0KKwkJCQk+DQorCQkJPC9G
aWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cc2hhcmVkU2NyaXB0XFdlYktp
dFNoYXJlZFNjcmlwdC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJl
bGF0aXZlUGF0aD0iLi5cc2hhcmVkU2NyaXB0XFdlYktpdFNoYXJlZFNjcmlwdFJlcG9zaXRvcnku
Y3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0i
Li5cc2hhcmVkU2NyaXB0XFdlYktpdFNoYXJlZFNjcmlwdFJlcG9zaXRvcnkuaCINCisJCQkJPg0K
KwkJCTwvRmlsZT4NCisJCTwvRmlsdGVyPg0KKwkJPEZpbHRlcg0KIAkJCU5hbWU9InN0b3JhZ2Ui
DQogCQkJPg0KIAkJCTxGaWxlDQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCBhZWFkZWJlLi4wNmZiNGY3IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtMjQyLDYgKzI0MiwxNCBAQAogCQkxODVCQ0YyOTBGMzI3OUNF
MDAwRUEyNjIgLyogVGhyZWFkVGltZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxODVCQ0YyNzBGMzI3OUNFMDAwRUEyNjIgLyogVGhyZWFkVGltZXJz
LmggKi87IH07CiAJCTE4ODYwNEIzMEYyRTY1NEEwMDBCNjQ0MyAvKiBET01UaW1lci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxODg2MDRCMTBGMkU2
NTRBMDAwQjY0NDMgLyogRE9NVGltZXIuY3BwICovOyB9OwogCQkxODg2MDRCNDBGMkU2NTRBMDAw
QjY0NDMgLyogRE9NVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDE4ODYwNEIyMEYyRTY1NEEwMDBCNjQ0MyAvKiBET01UaW1lci5oICovOyB9Owor
CQkxOEM1RkNBNTEwQTM5OTFGMDA0ODQzOEQgLyogV2ViS2l0U2hhcmVkU2NyaXB0LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE4QzVGQ0EwMTBBMzk5
MUYwMDQ4NDM4RCAvKiBXZWJLaXRTaGFyZWRTY3JpcHQuY3BwICovOyB9OworCQkxOEM1RkNBNjEw
QTM5OTFGMDA0ODQzOEQgLyogV2ViS2l0U2hhcmVkU2NyaXB0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxOEM1RkNBMTEwQTM5OTFGMDA0ODQzOEQgLyog
V2ViS2l0U2hhcmVkU2NyaXB0LmggKi87IH07CisJCTE4QzVGQ0E3MTBBMzk5MUYwMDQ4NDM4RCAv
KiBXZWJLaXRTaGFyZWRTY3JpcHQuaWRsIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxOEM1RkNBMjEwQTM5OTFGMDA0ODQzOEQgLyogV2ViS2l0U2hhcmVk
U2NyaXB0LmlkbCAqLzsgfTsKKwkJMThDNUZDQTgxMEEzOTkxRjAwNDg0MzhEIC8qIFdlYktpdFNo
YXJlZFNjcmlwdFJlcG9zaXRvcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMThDNUZDQTMxMEEzOTkxRjAwNDg0MzhEIC8qIFdlYktpdFNoYXJlZFNj
cmlwdFJlcG9zaXRvcnkuY3BwICovOyB9OworCQkxOEM1RkNBOTEwQTM5OTFGMDA0ODQzOEQgLyog
V2ViS2l0U2hhcmVkU2NyaXB0UmVwb3NpdG9yeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMThDNUZDQTQxMEEzOTkxRjAwNDg0MzhEIC8qIFdlYktpdFNo
YXJlZFNjcmlwdFJlcG9zaXRvcnkuaCAqLzsgfTsKKwkJMThDNUZDQjcxMEEzQzZGMjAwNDg0MzhE
IC8qIFNoYXJlZFNjcmlwdENvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMThDNUZDQjQxMEEzQzZGMjAwNDg0MzhEIC8qIFNoYXJlZFNjcmlw
dENvbnRleHQuY3BwICovOyB9OworCQkxOEM1RkNCODEwQTNDNkYyMDA0ODQzOEQgLyogU2hhcmVk
U2NyaXB0Q29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMThDNUZDQjUxMEEzQzZGMjAwNDg0MzhEIC8qIFNoYXJlZFNjcmlwdENvbnRleHQuaCAq
LzsgfTsKKwkJMThDNUZDQjkxMEEzQzZGMjAwNDg0MzhEIC8qIFNoYXJlZFNjcmlwdENvbnRleHQu
aWRsIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxOEM1
RkNCNjEwQTNDNkYyMDA0ODQzOEQgLyogU2hhcmVkU2NyaXB0Q29udGV4dC5pZGwgKi87IH07CiAJ
CTE4RjgzMUI4MEZENDhDNzgwMEQ4QzU2QiAvKiBXb3JrZXJMb2FkZXJQcm94eS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMThGODMxQjcwRkQ0OEM3ODAw
RDhDNTZCIC8qIFdvcmtlckxvYWRlclByb3h5LmggKi87IH07CiAJCTFBMEQ1NzM2MEE1Qzc3RkUw
MDdFREQ0QyAvKiBPdmVyZmxvd0V2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBMEQ1NzM0MEE1Qzc3RkUwMDdFREQ0QyAvKiBPdmVyZmxvd0V2
ZW50LmNwcCAqLzsgfTsKIAkJMUEwRDU3MzcwQTVDNzdGRTAwN0VERDRDIC8qIE92ZXJmbG93RXZl
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMEQ1
NzM1MEE1Qzc3RkUwMDdFREQ0QyAvKiBPdmVyZmxvd0V2ZW50LmggKi87IH07CkBAIC01NDI5LDYg
KzU0MzcsMTQgQEAKIAkJMTg1QkNGMjcwRjMyNzlDRTAwMEVBMjYyIC8qIFRocmVhZFRpbWVycy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRUaW1lcnMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTg4NjA0QjEwRjJFNjU0QTAwMEI2NDQzIC8qIERPTVRp
bWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERPTVRpbWVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTg4NjA0QjIwRjJFNjU0QTAwMEI2NDQz
IC8qIERPTVRpbWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVRpbWVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE4QzVGQ0EwMTBBMzk5MUYwMDQ4NDM4
RCAvKiBXZWJLaXRTaGFyZWRTY3JpcHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV2ViS2l0U2hhcmVkU2NyaXB0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMThDNUZDQTExMEEzOTkxRjAwNDg0MzhEIC8qIFdlYktpdFNoYXJlZFNjcmlwdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXRTaGFyZWRTY3JpcHQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMThDNUZDQTIxMEEzOTkxRjAwNDg0MzhEIC8qIFdl
YktpdFNoYXJlZFNjcmlwdC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViS2l0U2hhcmVk
U2NyaXB0LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMThDNUZDQTMxMEEzOTkx
RjAwNDg0MzhEIC8qIFdlYktpdFNoYXJlZFNjcmlwdFJlcG9zaXRvcnkuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViS2l0U2hhcmVkU2NyaXB0UmVwb3NpdG9yeS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE4QzVGQ0E0MTBBMzk5MUYwMDQ4NDM4
RCAvKiBXZWJLaXRTaGFyZWRTY3JpcHRSZXBvc2l0b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdlYktpdFNoYXJlZFNjcmlwdFJlcG9zaXRvcnkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMThDNUZDQjQxMEEzQzZGMjAwNDg0MzhEIC8qIFNoYXJlZFNjcmlw
dENvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2hhcmVk
U2NyaXB0Q29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE4QzVGQ0I1
MTBBM0M2RjIwMDQ4NDM4RCAvKiBTaGFyZWRTY3JpcHRDb250ZXh0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNoYXJlZFNjcmlwdENvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMThDNUZDQjYxMEEzQzZGMjAwNDg0MzhEIC8qIFNoYXJlZFNjcmlwdENv
bnRleHQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNoYXJlZFNjcmlwdENvbnRleHQuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxOEY4MzFCNzBGRDQ4Qzc4MDBEOEM1NkIg
LyogV29ya2VyTG9hZGVyUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
V29ya2VyTG9hZGVyUHJveHkuaDsgcGF0aCA9IHdvcmtlcnMvV29ya2VyTG9hZGVyUHJveHkuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEwRDU3MzQwQTVDNzdGRTAwN0VERDRDIC8q
IE92ZXJmbG93RXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IE92ZXJmbG93RXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTBENTcz
NTBBNUM3N0ZFMDA3RURENEMgLyogT3ZlcmZsb3dFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gT3ZlcmZsb3dFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTAwNTYsNiArMTAwNzIsNyBAQAogCQkJCUJDRjFBNUJBMDk3ODMyMDkwMDYxQTEyMyAv
KiBwbGF0Zm9ybSAqLywKIAkJCQk1RENGODM2OTBENTkxNTc4MDA5NTNCQzYgLyogcGx1Z2lucyAq
LywKIAkJCQlGNTIzRDJGMzAyREU0NDNCMDE4NjM1Q0EgLyogcmVuZGVyaW5nICovLAorCQkJCTE4
QzVGQzlGMTBBMzk5MUYwMDQ4NDM4RCAvKiBzaGFyZWRTY3JpcHQgKi8sCiAJCQkJMUFFODJFQzkw
Q0FBRTE3NzAwMjIzN0FFIC8qIHN0b3JhZ2UgKi8sCiAJCQkJQjIyMjc3Q0EwRDAwQkYxRTAwNzFC
NzgyIC8qIHN2ZyAqLywKIAkJCQk1MThBMzRCRDEwMjZDODMxMDAxQjY4OTYgLyogd2Vic29ja2V0
cyAqLywKQEAgLTEwMTU3LDYgKzEwMTc0LDIxIEBACiAJCQlwYXRoID0gRGVyaXZlZFNvdXJjZXMv
V2ViQ29yZTsKIAkJCXNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7CiAJCX07CisJCTE4
QzVGQzlGMTBBMzk5MUYwMDQ4NDM4RCAvKiBzaGFyZWRTY3JpcHQgKi8gPSB7CisJCQlpc2EgPSBQ
QlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTE4QzVGQ0I0MTBBM0M2RjIwMDQ4NDM4RCAv
KiBTaGFyZWRTY3JpcHRDb250ZXh0LmNwcCAqLywKKwkJCQkxOEM1RkNCNTEwQTNDNkYyMDA0ODQz
OEQgLyogU2hhcmVkU2NyaXB0Q29udGV4dC5oICovLAorCQkJCTE4QzVGQ0I2MTBBM0M2RjIwMDQ4
NDM4RCAvKiBTaGFyZWRTY3JpcHRDb250ZXh0LmlkbCAqLywKKwkJCQkxOEM1RkNBMDEwQTM5OTFG
MDA0ODQzOEQgLyogV2ViS2l0U2hhcmVkU2NyaXB0LmNwcCAqLywKKwkJCQkxOEM1RkNBMTEwQTM5
OTFGMDA0ODQzOEQgLyogV2ViS2l0U2hhcmVkU2NyaXB0LmggKi8sCisJCQkJMThDNUZDQTIxMEEz
OTkxRjAwNDg0MzhEIC8qIFdlYktpdFNoYXJlZFNjcmlwdC5pZGwgKi8sCisJCQkJMThDNUZDQTMx
MEEzOTkxRjAwNDg0MzhEIC8qIFdlYktpdFNoYXJlZFNjcmlwdFJlcG9zaXRvcnkuY3BwICovLAor
CQkJCTE4QzVGQ0E0MTBBMzk5MUYwMDQ4NDM4RCAvKiBXZWJLaXRTaGFyZWRTY3JpcHRSZXBvc2l0
b3J5LmggKi8sCisJCQkpOworCQkJcGF0aCA9ICJzaGFyZWRTY3JpcHQiOworCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJMUEyRTZFNTYwQ0M1NTFFMDAwNEEyMDYyIC8qIHNxbCAq
LyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0xODEzMSw2ICsx
ODE2Myw5IEBACiAJCQkJMTQ3OUZBRjAxMDlBRTM3NTAwREVENjU1IC8qIFJlbmRlclJ1YnlCYXNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDc5RkFGMjEwOUFFMzc1MDBERUQ2NTUgLyogUmVuZGVy
UnVieVJ1bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3OUZBRjQxMDlBRTM3NTAwREVENjU1IC8q
IFJlbmRlclJ1YnlUZXh0LmggaW4gSGVhZGVycyAqLywKKwkJCQkxOEM1RkNBNjEwQTM5OTFGMDA0
ODQzOEQgLyogV2ViS2l0U2hhcmVkU2NyaXB0LmggaW4gSGVhZGVycyAqLywKKwkJCQkxOEM1RkNB
OTEwQTM5OTFGMDA0ODQzOEQgLyogV2ViS2l0U2hhcmVkU2NyaXB0UmVwb3NpdG9yeS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMThDNUZDQjgxMEEzQzZGMjAwNDg0MzhEIC8qIFNoYXJlZFNjcmlwdENv
bnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxMjQ3NDg0MTBBQTE2MUQwMEI3OTQ5MyAvKiBB
dXRoZW50aWNhdGlvbkNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM4MkRGNTgxMEE4RDVD
OTAwOTI1NjUyIC8qIENvbG9yU3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUFCMzFDOTFFMTBB
RTFCOEUwMDBDN0I5MiAvKiBMaW5lQ2xhbXBWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xODIz
NSw2ICsxODI3MCw4IEBACiAJCQkJODUxMzZDQTgwQUVENjY1OTAwRjkwQTNEIC8qIHdlc3RSZXNp
emVDdXJzb3IucG5nIGluIFJlc291cmNlcyAqLywKIAkJCQkxQUIxQUU3QTBDMDUxRkRFMDAxMzlG
NEYgLyogem9vbUluQ3Vyc29yLnBuZyBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJMUFCMUFFN0IwQzA1
MUZERTAwMTM5RjRGIC8qIHpvb21PdXRDdXJzb3IucG5nIGluIFJlc291cmNlcyAqLywKKwkJCQkx
OEM1RkNBNzEwQTM5OTFGMDA0ODQzOEQgLyogV2ViS2l0U2hhcmVkU2NyaXB0LmlkbCBpbiBSZXNv
dXJjZXMgKi8sCisJCQkJMThDNUZDQjkxMEEzQzZGMjAwNDg0MzhEIC8qIFNoYXJlZFNjcmlwdENv
bnRleHQuaWRsIGluIFJlc291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTIwMjc3LDYgKzIwMzE0LDkgQEAKIAkJCQkx
NDc5RkFFRjEwOUFFMzc1MDBERUQ2NTUgLyogUmVuZGVyUnVieUJhc2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQ3OUZBRjExMDlBRTM3NTAwREVENjU1IC8qIFJlbmRlclJ1YnlSdW4uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMTQ3OUZBRjMxMDlBRTM3NTAwREVENjU1IC8qIFJlbmRlclJ1YnlU
ZXh0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTE4QzVGQ0E1MTBBMzk5MUYwMDQ4NDM4RCAvKiBX
ZWJLaXRTaGFyZWRTY3JpcHQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMThDNUZDQTgxMEEzOTkx
RjAwNDg0MzhEIC8qIFdlYktpdFNoYXJlZFNjcmlwdFJlcG9zaXRvcnkuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMThDNUZDQjcxMEEzQzZGMjAwNDg0MzhEIC8qIFNoYXJlZFNjcmlwdENvbnRleHQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAg
Yi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggNmIxODYwMy4uNDU0MjZlMSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcApAQCAtMTQzLDYgKzE0MywxMCBAQAogI2luY2x1ZGUgIlNoYXJlZFdvcmtlclJlcG9zaXRv
cnkuaCIKICNlbmRpZgogCisjaWYgRU5BQkxFKFNIQVJFRF9TQ1JJUFQpCisjaW5jbHVkZSAiV2Vi
S2l0U2hhcmVkU2NyaXB0UmVwb3NpdG9yeS5oIgorI2VuZGlmCisKICNpZiBFTkFCTEUoRE9NX1NU
T1JBR0UpCiAjaW5jbHVkZSAiU3RvcmFnZUV2ZW50LmgiCiAjZW5kaWYKQEAgLTE0NDIsNiArMTQ0
NiwxMCBAQCB2b2lkIERvY3VtZW50OjpkZXRhY2goKQogICAgIFNoYXJlZFdvcmtlclJlcG9zaXRv
cnk6OmRvY3VtZW50RGV0YWNoZWQodGhpcyk7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShTSEFSRURf
U0NSSVBUKQorICAgIFdlYktpdFNoYXJlZFNjcmlwdFJlcG9zaXRvcnk6OmRvY3VtZW50RGV0YWNo
ZWQodGhpcyk7CisjZW5kaWYKKwogICAgIGlmIChtX2ZyYW1lKSB7CiAgICAgICAgIEZyYW1lVmll
dyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKTsKICAgICAgICAgaWYgKHZpZXcpCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAgYi9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5j
cHAKaW5kZXggNjVkNzUxYS4uOGVlMWY1MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRXZlbnRU
YXJnZXQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcApAQCAtMTU2LDYgKzE1
NiwxOCBAQCBOb3RpZmljYXRpb24qIEV2ZW50VGFyZ2V0Ojp0b05vdGlmaWNhdGlvbigpCiB9CiAj
ZW5kaWYKIAorI2lmIEVOQUJMRShTSEFSRURfU0NSSVBUKQorV2ViS2l0U2hhcmVkU2NyaXB0KiBF
dmVudFRhcmdldDo6dG9XZWJLaXRTaGFyZWRTY3JpcHQoKQoreworICAgIHJldHVybiAwOworfQor
CitTaGFyZWRTY3JpcHRDb250ZXh0KiBFdmVudFRhcmdldDo6dG9TaGFyZWRTY3JpcHRDb250ZXh0
KCkKK3sKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgorCiBib29sIEV2ZW50VGFyZ2V0OjphZGRF
dmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2
ZW50TGlzdGVuZXI+IGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCiB7CiAgICAgRXZlbnRUYXJn
ZXREYXRhKiBkID0gZW5zdXJlRXZlbnRUYXJnZXREYXRhKCk7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2RvbS9FdmVudFRhcmdldC5oIGIvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAppbmRleCAyZDc3
Yzg3Li5kMGMxYjY3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCisrKyBi
L1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgKQEAgLTU5LDYgKzU5LDExIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICBjbGFzcyBYTUxIdHRwUmVxdWVzdDsKICAgICBjbGFzcyBYTUxIdHRwUmVx
dWVzdFVwbG9hZDsKIAorI2lmIEVOQUJMRShTSEFSRURfU0NSSVBUKQorICAgIGNsYXNzIFNoYXJl
ZFNjcmlwdENvbnRleHQ7CisgICAgY2xhc3MgV2ViS2l0U2hhcmVkU2NyaXB0OworI2VuZGlmCisK
ICAgICB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCiAgICAgc3RydWN0IEZpcmluZ0V2ZW50
SXRlcmF0b3IgewpAQCAtMTE4LDYgKzEyMywxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIHZpcnR1YWwgTm90aWZpY2F0aW9uKiB0b05vdGlmaWNhdGlvbigpOwogI2VuZGlmCiAKKyNp
ZiBFTkFCTEUoU0hBUkVEX1NDUklQVCkKKyAgICAgICAgdmlydHVhbCBXZWJLaXRTaGFyZWRTY3Jp
cHQqIHRvV2ViS2l0U2hhcmVkU2NyaXB0KCk7CisgICAgICAgIHZpcnR1YWwgU2hhcmVkU2NyaXB0
Q29udGV4dCogdG9TaGFyZWRTY3JpcHRDb250ZXh0KCk7CisjZW5kaWYKKwogICAgICAgICB2aXJ0
dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25z
dCA9IDA7CiAKICAgICAgICAgdmlydHVhbCBib29sIGFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRv
bWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4sIGJvb2wgdXNl
Q2FwdHVyZSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0
LmggYi9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgKaW5kZXggMTQxNDEyNS4u
M2VmNDhlYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
CisrKyBiL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaApAQCAtNTcsNiArNTcs
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVhbCBib29sIGlzRG9jdW1l
bnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNXb3Jr
ZXJDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyNpZiBFTkFCTEUoU0hBUkVEX1ND
UklQVCkKKyAgICAgICAgdmlydHVhbCBib29sIGlzU2hhcmVkU2NyaXB0Q29udGV4dCgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisjZW5kaWYKIAogICAgICAgICBjb25zdCBLVVJMJiB1cmwoKSBj
b25zdCB7IHJldHVybiB2aXJ0dWFsVVJMKCk7IH0KICAgICAgICAgS1VSTCBjb21wbGV0ZVVSTChj
b25zdCBTdHJpbmcmIHVybCkgY29uc3QgeyByZXR1cm4gdmlydHVhbENvbXBsZXRlVVJMKHVybCk7
IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvc2hhcmVkU2NyaXB0L1NoYXJlZFNjcmlwdENvbnRleHQu
Y3BwIGIvV2ViQ29yZS9zaGFyZWRTY3JpcHQvU2hhcmVkU2NyaXB0Q29udGV4dC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNjYjYxNAotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvc2hhcmVkU2NyaXB0L1NoYXJlZFNjcmlwdENvbnRleHQuY3BwCkBAIC0wLDAgKzEs
MTkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNIQVJFRF9TQ1JJUFQpCisK
KyNpbmNsdWRlICJTaGFyZWRTY3JpcHRDb250ZXh0LmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNp
bmNsdWRlICJFdmVudEV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisj
aW5jbHVkZSAiU2NyaXB0U291cmNlQ29kZS5oIgorI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCisj
aW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJTaGFyZWRTY3JpcHRDb250cm9s
bGVyLmgiCisjaW5jbHVkZSAiV2ViS2l0U2hhcmVkU2NyaXB0UmVwb3NpdG9yeS5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKy8vIEludGVydmFsIHRvIGFsbG93IG9ycGhhbmVkIFNoYXJlZFNj
cmlwdENvbnRleHQgdG8gZ2FpbiBwb3RlbnRpYWwgbmV3IG93bmVyLgorLy8gVGhpcyBjYW4gaGFw
cGVuIG9uIG5hdmlnYXRpb24gd2hlbiBib3RoIHBhZ2VzIGNvbm5lY3QgdG8gdGhlIHNhbWUgU2hh
cmVkU2NyaXB0Lgorc3RhdGljIGNvbnN0IGRvdWJsZSBkZXN0cnVjdGlvbkludGVydmFsID0gNS4w
OworCitTaGFyZWRTY3JpcHRDb250ZXh0OjpTaGFyZWRTY3JpcHRDb250ZXh0KGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgS1VSTCYgdXJsLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmln
aW4pCisgICAgOiBtX25hbWUobmFtZSkKKyAgICAsIG1fdXJsKHVybCkKKyAgICAsIG1fc2NyaXB0
KG5ldyBTaGFyZWRTY3JpcHRDb250cm9sbGVyKHRoaXMpKQorICAgICwgbV9kZXN0cnVjdGlvblRp
bWVyKHRoaXMsICZTaGFyZWRTY3JpcHRDb250ZXh0OjpkZXN0cnVjdGlvblRpbWVyRmlyZWQpCisg
ICAgLCBtX2xvYWRlZChmYWxzZSkKK3sKKyAgICBzZXRTZWN1cml0eU9yaWdpbihvcmlnaW4pOwor
ICAgIHJlZigpOyAvLyBNYXRjaGluZyBkZXJlZiBpcyBpbiBkZXN0cnVjdGlvblRpbWVyRmlyZWQg
Y2FsbGJhY2suCit9CisKK3ZvaWQgU2hhcmVkU2NyaXB0Q29udGV4dDo6Y2xlYXJTY3JpcHQoKQor
eworICAgIG1fc2NyaXB0LmNsZWFyKCk7IAorfQorCitjb25zdCBLVVJMJiBTaGFyZWRTY3JpcHRD
b250ZXh0Ojp2aXJ0dWFsVVJMKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV91cmw7Cit9CisKK0tV
UkwgU2hhcmVkU2NyaXB0Q29udGV4dDo6dmlydHVhbENvbXBsZXRlVVJMKGNvbnN0IFN0cmluZyYg
dXJsKSBjb25zdAoreworICAgIC8vIEFsd2F5cyByZXR1cm4gYSBudWxsIFVSTCB3aGVuIHBhc3Nl
ZCBhIG51bGwgc3RyaW5nLgorICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgY2hhbmdlIHRoZSBLVVJM
IGNvbnN0cnVjdG9yIHRvIGhhdmUgdGhpcyBiZWhhdmlvcj8KKyAgICBpZiAodXJsLmlzTnVsbCgp
KQorICAgICAgICByZXR1cm4gS1VSTCgpOworICAgIC8vIEFsd2F5cyB1c2UgVVRGLTggaW4gV29y
a2Vycy4KKyAgICByZXR1cm4gS1VSTChtX3VybCwgdXJsKTsKK30KKwordm9pZCBTaGFyZWRTY3Jp
cHRDb250ZXh0OjpyZXBvcnRFeGNlcHRpb24oY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGlu
dCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKK3sKKyAgICBib29sIGVycm9y
SGFuZGxlZCA9IGZhbHNlOworICAgIGlmIChvbmVycm9yKCkpCisgICAgICAgIGVycm9ySGFuZGxl
ZCA9IG9uZXJyb3IoKS0+cmVwb3J0RXJyb3IodGhpcywgZXJyb3JNZXNzYWdlLCBzb3VyY2VVUkws
IGxpbmVOdW1iZXIpOworfQorCit2b2lkIFNoYXJlZFNjcmlwdENvbnRleHQ6OmFkZE1lc3NhZ2Uo
TWVzc2FnZURlc3RpbmF0aW9uIGRlc3RpbmF0aW9uLCBNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVz
c2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2Us
IHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQoreworICAgIC8v
IEZJWE1FOiBmaWd1cmUgb3V0IGNvbnNvbGUvaW5zcGVjdG9yIHN0b3J5IGZvciBTaGFyZWRTY3Jp
cHQuIE1heWJlIHNpbWlsYXIgdG8gU2hhcmVkV29ya2Vycy4KKyAgICBVTlVTRURfUEFSQU0oZGVz
dGluYXRpb24pOworICAgIFVOVVNFRF9QQVJBTShzb3VyY2UpOworICAgIFVOVVNFRF9QQVJBTSh0
eXBlKTsKKyAgICBVTlVTRURfUEFSQU0obGV2ZWwpOworICAgIFVOVVNFRF9QQVJBTShtZXNzYWdl
KTsKKyAgICBVTlVTRURfUEFSQU0obGluZU51bWJlcik7CisgICAgVU5VU0VEX1BBUkFNKHNvdXJj
ZVVSTCk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBTaGFyZWRTY3JpcHRDb250
ZXh0OjpyZXNvdXJjZVJldHJpZXZlZEJ5WE1MSHR0cFJlcXVlc3QodW5zaWduZWQgbG9uZywgY29u
c3QgU2NyaXB0U3RyaW5nJikKK3sKKyAgICAvLyBGSVhNRTogZmlndXJlIG91dCBjb25zb2xlL2lu
c3BlY3RvciBzdG9yeSBmb3IgU2hhcmVkU2NyaXB0LiBNYXliZSBzaW1pbGFyIHRvIFNoYXJlZFdv
cmtlcnMuCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBTaGFyZWRTY3JpcHRDb250
ZXh0OjpzY3JpcHRJbXBvcnRlZCh1bnNpZ25lZCBsb25nLCBjb25zdCBTdHJpbmcmKQoreworICAg
IC8vIEZJWE1FOiBmaWd1cmUgb3V0IGNvbnNvbGUvaW5zcGVjdG9yIHN0b3J5IGZvciBTaGFyZWRT
Y3JpcHQuIE1heWJlIHNpbWlsYXIgdG8gU2hhcmVkV29ya2Vycy4KKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCitib29sIFNoYXJlZFNjcmlwdENvbnRleHQ6Om1hdGNoZXMoY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTZWN1cml0eU9yaWdpbiYgb3JpZ2luLCBjb25zdCBLVVJMJiB1cmxUb01h
dGNoKSBjb25zdAoreworICAgIC8vIElmIHRoZSBvcmlnaW5zIGRvbid0IG1hdGNoLCBvciB0aGUg
bmFtZXMgZG9uJ3QgbWF0Y2gsIHRoZW4gdGhpcyBpcyBub3QgdGhlIGNvbnRleHQgd2UgYXJlIGxv
b2tpbmcgZm9yLgorICAgIGlmICghb3JpZ2luLmVxdWFsKHNlY3VyaXR5T3JpZ2luKCkpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBJZiB0aGUgbmFtZXMgYXJlIGJvdGggZW1wdHks
IGNvbXBhcmVzIHRoZSBVUkxzIGluc3RlYWQuCisgICAgaWYgKG5hbWUuaXNFbXB0eSgpICYmIG1f
bmFtZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB1cmxUb01hdGNoID09IG1fdXJsOworCisg
ICAgcmV0dXJuIG5hbWUgPT0gbV9uYW1lOworfQorCit2b2lkIFNoYXJlZFNjcmlwdENvbnRleHQ6
OmFkZFRvRG9jdW1lbnRzTGlzdChEb2N1bWVudCogY29udGV4dCkKK3sKKyAgICBtX2RvY3VtZW50
TGlzdC5hZGQoY29udGV4dCk7CisKKyAgICBpZiAobV9kZXN0cnVjdGlvblRpbWVyLmlzQWN0aXZl
KCkpCisgICAgICAgIG1fZGVzdHJ1Y3Rpb25UaW1lci5zdG9wKCk7Cit9CisKK3ZvaWQgU2hhcmVk
U2NyaXB0Q29udGV4dDo6ZGVzdHJ1Y3Rpb25UaW1lckZpcmVkKFRpbWVyPFNoYXJlZFNjcmlwdENv
bnRleHQ+KikKK3sKKyAgICBpZiAoIW1fZG9jdW1lbnRMaXN0LnNpemUoKSkgeworICAgICAgICBX
ZWJLaXRTaGFyZWRTY3JpcHRSZXBvc2l0b3J5OjpyZW1vdmVTaGFyZWRTY3JpcHRDb250ZXh0KHRo
aXMpOworICAgICAgICBzdG9wQWN0aXZlRE9NT2JqZWN0cygpOworICAgICAgICBjbGVhclNjcmlw
dCgpOworICAgICAgICBkZXJlZigpOworICAgIH0KK30KKwordm9pZCBTaGFyZWRTY3JpcHRDb250
ZXh0OjpyZW1vdmVGcm9tRG9jdW1lbnRMaXN0KERvY3VtZW50KiBjb250ZXh0KQoreworICAgIEhh
c2hTZXQ8RG9jdW1lbnQqPjo6aXRlcmF0b3IgaXQgPSBtX2RvY3VtZW50TGlzdC5maW5kKGNvbnRl
eHQpOworICAgIGlmIChpdCA9PSBtX2RvY3VtZW50TGlzdC5lbmQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9kb2N1bWVudExpc3QucmVtb3ZlKGl0KTsKKworICAgIC8vIFN0YXJ0IHRpbWVy
IHRvIGNoZWNrIGlmIHRoaXMgY29udGV4dCBoYXMgdG8gc2VsZi1kZXN0cnVjdC4KKyAgICAvLyBU
aGUgdXNlIG9mIGEgdGltZXIgbWFrZXMgZGVzdHJ1Y3Rpb24gb2YgdGhlIGNvbnRleHQgaGFwcGVu
IGxhdGVyIHRvIGF2b2lkIGRlYWxsb2NhdGluZyBpdAorICAgIC8vIHJpZ2h0IG5vdyB3aGlsZSBp
dCBpcyBub3RpZmllZC4gQWxzbywgaXQgYWxsb3dzIHRoZSBjb250ZXh0IHRvIGV4aXN0IGluIGEg
b3JwaGFuZWQgc3RhdGUKKyAgICAvLyBmb3IgYSBzaG9ydCBwZXJpb2Qgb2YgdGltZSB0byBzZWUg
aWYgdGhlcmUgd2lsbCBiZSBhIG5ldyBvd25lciAoYXMgaW4gbmF2aWdhdGlvbikuCisgICAgLy8g
VGhpcyByZXNldHMgdGhlIHRpbWVyIHRvIGEgZnVsbCBpbnRlcnZhbCBpZiBpdCBpcyBhbHJlYWR5
IGFjdGl2ZS4KKyAgICBtX2Rlc3RydWN0aW9uVGltZXIuc3RhcnRPbmVTaG90KGRlc3RydWN0aW9u
SW50ZXJ2YWwpOworfQorCit2b2lkIFNoYXJlZFNjcmlwdENvbnRleHQ6OmxvYWQoY29uc3QgU3Ry
aW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgaW5pdGlhbFNjcmlwdCkKK3sKKyAgICBtX3Vz
ZXJBZ2VudCA9IHVzZXJBZ2VudDsKKyAgICBzY3JpcHQoKS0+ZXZhbHVhdGUoU2NyaXB0U291cmNl
Q29kZShpbml0aWFsU2NyaXB0LCBtX3VybCkpOworICAgIG1fbG9hZGVkID0gdHJ1ZTsKK30KKwor
dm9pZCBTaGFyZWRTY3JpcHRDb250ZXh0Ojpwb3N0VGFzayhQYXNzT3duUHRyPFRhc2s+IHRhc2sp
Cit7CisgICAgLy8gRklYTUU6IE5lZWQgdG8gaW1wbGVtZW50IFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ6OnBvc3RUYXNrVG9NYWluVGhyZWFkIHRvIHNoYXJlIGJldHdlZW4gRG9jdW1lbnQgYW5kIFNo
YXJlZFNjcmlwdENvbnRleHQuCisgICAgVU5VU0VEX1BBUkFNKHRhc2spOworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK0V2ZW50VGFyZ2V0RGF0YSogU2hhcmVkU2NyaXB0Q29udGV4dDo6ZXZl
bnRUYXJnZXREYXRhKCkKK3sKKyAgICByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOworfQorCitF
dmVudFRhcmdldERhdGEqIFNoYXJlZFNjcmlwdENvbnRleHQ6OmVuc3VyZUV2ZW50VGFyZ2V0RGF0
YSgpCit7CisgICAgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsKK30KKworU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogU2hhcmVkU2NyaXB0Q29udGV4dDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8U2hhcmVkU2NyaXB0Q29udGV4dCo+KHRo
aXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU0hB
UkVEX1NDUklQVCkKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zaGFyZWRTY3JpcHQvU2hhcmVkU2Ny
aXB0Q29udGV4dC5oIGIvV2ViQ29yZS9zaGFyZWRTY3JpcHQvU2hhcmVkU2NyaXB0Q29udGV4dC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMDNjNWQKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL3NoYXJlZFNjcmlwdC9TaGFyZWRTY3JpcHRDb250ZXh0LmgKQEAgLTAs
MCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFNoYXJlZFNjcmlwdENvbnRleHRfaAorI2RlZmluZSBTaGFyZWRT
Y3JpcHRDb250ZXh0X2gKKworI2lmIEVOQUJMRShTSEFSRURfU0NSSVBUKQorCisjaW5jbHVkZSAi
RXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIlNo
YXJlZFNjcmlwdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIldv
cmtlckNvbnRleHQuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIERvY3VtZW50OworY2xhc3MgS1VSTDsKK2NsYXNzIFN0cmluZzsKKworY2xh
c3MgU2hhcmVkU2NyaXB0Q29udGV4dCA6IHB1YmxpYyBSZWZDb3VudGVkPFNoYXJlZFNjcmlwdENv
bnRleHQ+LCBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgcHVibGljIEV2ZW50VGFyZ2V0
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRTY3JpcHRDb250ZXh0PiBj
cmVhdGUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBLVVJMJiB1cmwsIFBhc3NSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+IG9yaWdpbikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
U2hhcmVkU2NyaXB0Q29udGV4dChuYW1lLCB1cmwsIG9yaWdpbikpOworICAgIH0KKworICAgIC8v
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQKKyAgICB2aXJ0dWFsIGJvb2wgaXNTaGFyZWRTY3JpcHRD
b250ZXh0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgU3RyaW5nIHVzZXJB
Z2VudChjb25zdCBLVVJMJikgY29uc3QgeyByZXR1cm4gbV91c2VyQWdlbnQ7IH0KKworICAgIHZp
cnR1YWwgdm9pZCByZXBvcnRFeGNlcHRpb24oY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGlu
dCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCk7CisgICAgdmlydHVhbCB2b2lk
IGFkZE1lc3NhZ2UoTWVzc2FnZURlc3RpbmF0aW9uLCBNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlw
ZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGxpbmVOdW1i
ZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzb3VyY2VS
ZXRyaWV2ZWRCeVhNTEh0dHBSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3Qg
U2NyaXB0U3RyaW5nJiBzb3VyY2VTdHJpbmcpOworICAgIHZpcnR1YWwgdm9pZCBzY3JpcHRJbXBv
cnRlZCh1bnNpZ25lZCBsb25nLCBjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9z
dFRhc2soUGFzc093blB0cjxUYXNrPik7IC8vIEV4ZWN1dGVzIHRoZSB0YXNrIG9uIGNvbnRleHQn
cyB0aHJlYWQgYXN5bmNocm9ub3VzbHkuCisKKyAgICAvLyBKUyB3cmFwcGVyIGFuZCBFdmVudFRh
cmdldCBzdXBwb3J0LgorICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OworICAgIHZpcnR1YWwgU2hhcmVkU2NyaXB0Q29udGV4
dCogdG9TaGFyZWRTY3JpcHRDb250ZXh0KCkgeyByZXR1cm4gdGhpczsgfQorICAgIERFRklORV9B
VFRSSUJVVEVfRVZFTlRfTElTVEVORVIoZXJyb3IpOworCisgICAgLy8gU2hhcmVkU2NyaXB0R2xv
YmFsU2NvcGUKKyAgICBTaGFyZWRTY3JpcHRDb250ZXh0KiBzZWxmKCkgeyByZXR1cm4gdGhpczsg
fQorCisgICAgLy8gTGlmZXRpbWUgLSBrZWVwIHRoZSBsaXN0IG9mIGRvY3VtZW50cyB0aGF0IGFy
ZSBjb25uZWN0ZWQsIGRlcmVmIHdoZW4gdGhlIGxhc3QgZGlzY29ubmVjdHMuCisgICAgdm9pZCBh
ZGRUb0RvY3VtZW50c0xpc3QoRG9jdW1lbnQqKTsKKyAgICB2b2lkIHJlbW92ZUZyb21Eb2N1bWVu
dExpc3QoRG9jdW1lbnQqKTsKKworICAgIFNoYXJlZFNjcmlwdENvbnRyb2xsZXIqIHNjcmlwdCgp
IHsgcmV0dXJuIG1fc2NyaXB0LmdldCgpOyB9CisgICAgdm9pZCBjbGVhclNjcmlwdCgpOworCisg
ICAgYm9vbCBsb2FkZWQoKSB7IHJldHVybiBtX2xvYWRlZDsgfQorICAgIHZvaWQgbG9hZChjb25z
dCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBpbml0aWFsU2NyaXB0KTsKKworICAg
IGJvb2wgbWF0Y2hlcyhjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFNlY3VyaXR5T3JpZ2luJiwg
Y29uc3QgS1VSTCYpIGNvbnN0OworICAgIFN0cmluZyBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9u
YW1lOyB9CisKKyAgICB1c2luZyBSZWZDb3VudGVkPFNoYXJlZFNjcmlwdENvbnRleHQ+OjpyZWY7
CisgICAgdXNpbmcgUmVmQ291bnRlZDxTaGFyZWRTY3JpcHRDb250ZXh0Pjo6ZGVyZWY7CisKK3By
b3RlY3RlZDoKKyAgICBTaGFyZWRTY3JpcHRDb250ZXh0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgS1VSTCYsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+KTsKKworcHJpdmF0ZToKKyAgICAv
LyBFdmVudFRhcmdldAorICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBldmVudFRhcmdldERh
dGEoKTsKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZW5zdXJlRXZlbnRUYXJnZXREYXRh
KCk7CisgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgeyByZWYoKTsgfQorICAgIHZp
cnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgeyBkZXJlZigpOyB9CisgICAgCisgICAgLy8g
U2NyaXB0RXhlY3V0aW9uQ29udGV4dAorICAgIHZpcnR1YWwgY29uc3QgS1VSTCYgdmlydHVhbFVS
TCgpIGNvbnN0OworICAgIHZpcnR1YWwgS1VSTCB2aXJ0dWFsQ29tcGxldGVVUkwoY29uc3QgU3Ry
aW5nJikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHJlZlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSB7IHJlZigpOyB9CisgICAgdmlydHVhbCB2b2lkIGRlcmVmU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpIHsgZGVyZWYoKTsgfQorICAgICAgICAgICAgCisgICAgdm9pZCBkZXN0cnVjdGlvblRpbWVy
RmlyZWQoVGltZXI8U2hhcmVkU2NyaXB0Q29udGV4dD4qKTsKKyAgICAgICAgICAgIAorICAgIFN0
cmluZyBtX25hbWU7CisgICAgU3RyaW5nIG1fdXNlckFnZW50OworICAgIEtVUkwgbV91cmw7Cisg
ICAgT3duUHRyPFNoYXJlZFNjcmlwdENvbnRyb2xsZXI+IG1fc2NyaXB0OworICAgIEhhc2hTZXQ8
RG9jdW1lbnQqPiBtX2RvY3VtZW50TGlzdDsKKyAgICBUaW1lcjxTaGFyZWRTY3JpcHRDb250ZXh0
PiBtX2Rlc3RydWN0aW9uVGltZXI7CisgICAgRXZlbnRUYXJnZXREYXRhIG1fZXZlbnRUYXJnZXRE
YXRhOworCisgICAgYm9vbCBtX2xvYWRlZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShTSEFSRURfU0NSSVBUKQorCisjZW5kaWYgLy8gU2hhcmVkU2Ny
aXB0Q29udGV4dF9oCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc2hhcmVkU2NyaXB0L1NoYXJlZFNj
cmlwdENvbnRleHQuaWRsIGIvV2ViQ29yZS9zaGFyZWRTY3JpcHQvU2hhcmVkU2NyaXB0Q29udGV4
dC5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODExZmZjYQotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvc2hhcmVkU2NyaXB0L1NoYXJlZFNjcmlwdENvbnRleHQuaWRs
CkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCittb2R1bGUgd2luZG93IHsKKworICAgIGludGVyZmFjZSBbCisgICAg
ICAgIENvbmRpdGlvbmFsPVNIQVJFRF9TQ1JJUFQsCisgICAgICAgIEN1c3RvbU1hcmtGdW5jdGlv
biwKKyAgICAgICAgRXZlbnRUYXJnZXQsCisgICAgICAgIEV4dGVuZHNET01HbG9iYWxPYmplY3Qs
CisgICAgICAgIElzV29ya2VyQ29udGV4dCwKKyAgICAgICAgR2VuZXJhdGVOYXRpdmVDb252ZXJ0
ZXIsCisgICAgICAgIExlZ2FjeVBhcmVudD1KU1NoYXJlZFNjcmlwdENvbnRleHRCYXNlLAorICAg
ICAgICBOb1N0YXRpY1RhYmxlcworICAgIF0gU2hhcmVkU2NyaXB0Q29udGV4dCB7CisKKyNpZiBk
ZWZpbmVkKExBTkdVQUdFX0pBVkFTQ1JJUFQpICYmIExBTkdVQUdFX0pBVkFTQ1JJUFQKKyAgICAg
ICAgYXR0cmlidXRlIFtSZXBsYWNlYWJsZV0gU2hhcmVkU2NyaXB0Q29udGV4dCBzZWxmOworI2Vu
ZGlmCisKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBuYW1lOworICAgICAg
ICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmVycm9yOworCisgICAgICAgIC8vIEV2ZW50VGFy
Z2V0IGludGVyZmFjZQorICAgICAgICBbQ3VzdG9tXSB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoaW4g
RE9NU3RyaW5nIHR5cGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbiBib29sZWFuIHVzZUNhcHR1cmUpOworICAgICAgICBbQ3VzdG9tXSB2b2lk
IHJlbW92ZUV2ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFuIHVzZUNh
cHR1cmUpOworICAgICAgICBib29sZWFuIGRpc3BhdGNoRXZlbnQoaW4gRXZlbnQgZXZ0KQorICAg
ICAgICAgICAgcmFpc2VzKEV2ZW50RXhjZXB0aW9uKTsKKworICAgIH07CisKK30KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvc2hhcmVkU2NyaXB0L1NoYXJlZFNjcmlwdENvbnRyb2xsZXIuaCBiL1dlYkNv
cmUvc2hhcmVkU2NyaXB0L1NoYXJlZFNjcmlwdENvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5jYzNlNDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9z
aGFyZWRTY3JpcHQvU2hhcmVkU2NyaXB0Q29udHJvbGxlci5oCkBAIC0wLDAgKzEsNTcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFNoYXJlZFNjcmlwdENvbnRyb2xsZXJfaAorI2RlZmluZSBTaGFyZWRTY3JpcHRDb250cm9s
bGVyX2gKKworI2lmIEVOQUJMRShTSEFSRURfU0NSSVBUKQorCisvLyBOb24tZnVuY3Rpb25pbmcg
U2NyaXB0Q29udHJvbGxlci4gV2lsbCBiZSBpbXBsZW1lbnRlZCB3aXRoIGNvcnJlc3BvbmRpbmcg
YmluZGluZ3MgKHNpbmNlIGl0J3MgSlNDLSBhbmQgVjgtZGVwZW5kYW50KS4KKworI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBT
aGFyZWRTY3JpcHRDb250ZXh0OworICAgIGNsYXNzIFNjcmlwdFNvdXJjZUNvZGU7CisKKyAgICBj
bGFzcyBTaGFyZWRTY3JpcHRDb250cm9sbGVyIDogcHVibGljIE5vbmNvcHlhYmxlIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIFNoYXJlZFNjcmlwdENvbnRyb2xsZXIoU2hhcmVkU2NyaXB0Q29udGV4
dCopIHsgfQorICAgICAgICB+U2hhcmVkU2NyaXB0Q29udHJvbGxlcigpIHsgfQorCisgICAgICAg
IHZvaWQgZXZhbHVhdGUoY29uc3QgU2NyaXB0U291cmNlQ29kZSYpIHsgfQorICAgIH07CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTSEFSRURfU0NSSVBUKQor
CisjZW5kaWYgLy8gU2hhcmVkU2NyaXB0Q29udHJvbGxlcl9oCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3NoYXJlZFNjcmlwdC9XZWJLaXRTaGFyZWRTY3JpcHQuY3BwIGIvV2ViQ29yZS9zaGFyZWRTY3Jp
cHQvV2ViS2l0U2hhcmVkU2NyaXB0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4zY2RhYzkxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9zaGFyZWRTY3JpcHQvV2Vi
S2l0U2hhcmVkU2NyaXB0LmNwcApAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIEVOQUJMRShTSEFSRURfU0NSSVBUKQorCisjaW5jbHVkZSAiV2ViS2l0U2hhcmVkU2Ny
aXB0LmgiCisKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgIkV2ZW50RXhjZXB0aW9uLmgi
CisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlNlY3VyaXR5
T3JpZ2luLmgiCisjaW5jbHVkZSAiU2hhcmVkU2NyaXB0Q29udGV4dC5oIgorI2luY2x1ZGUgIldl
YktpdFNoYXJlZFNjcmlwdFJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dlYktpdFNoYXJlZFNjcmlwdDo6V2ViS2l0U2hh
cmVkU2NyaXB0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUsIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQorICAgIDogQWN0aXZl
RE9NT2JqZWN0KGNvbnRleHQsIHRoaXMpCit7CisgICAgaWYgKHVybC5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgZWMgPSBTWU5UQVhfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8g
RklYTUU6IFRoaXMgc2hvdWxkIHVzZSB0aGUgZHluYW1pYyBnbG9iYWwgc2NvcGUgKGJ1ZyAjMjc4
ODcpLgorICAgIEtVUkwgc2NyaXB0VVJMID0gY29udGV4dC0+Y29tcGxldGVVUkwodXJsKTsKKyAg
ICBpZiAoIXNjcmlwdFVSTC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFjb250ZXh0LT5zZWN1cml0eU9yaWdp
bigpLT5jYW5BY2Nlc3MoU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShzY3JpcHRVUkwpLmdldCgpKSkg
eworICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIFdlYktpdFNoYXJlZFNjcmlwdFJlcG9zaXRvcnk6OmNvbm5lY3QodGhpcywgc2NyaXB0VVJM
LCBuYW1lLCBlYyk7Cit9CisKK1dlYktpdFNoYXJlZFNjcmlwdDo6fldlYktpdFNoYXJlZFNjcmlw
dCgpCit7Cit9CisKK3ZvaWQgV2ViS2l0U2hhcmVkU2NyaXB0OjpzZXRDb250ZXh0KFBhc3NSZWZQ
dHI8U2hhcmVkU2NyaXB0Q29udGV4dD4gY29udGV4dCkKK3sgCisgICAgbV9pbm5lckNvbnRleHQg
PSBjb250ZXh0OworfQorCitjbGFzcyBMb2FkRXZlbnRUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ6OlRhc2sgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPExvYWRF
dmVudFRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPFdlYktpdFNoYXJlZFNjcmlwdD4gc2hhcmVkU2Ny
aXB0LCBQYXNzUmVmUHRyPFNoYXJlZFNjcmlwdENvbnRleHQ+IGlubmVyQ29udGV4dCkKKyAgICB7
CisgICAgICAgIHJldHVybiBuZXcgTG9hZEV2ZW50VGFzayhzaGFyZWRTY3JpcHQsIGlubmVyQ29u
dGV4dCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgeworICAgICAgICBBU1NFUlRfVU5VU0VEKGNvbnRl
eHQsIGNvbnRleHQtPmlzRG9jdW1lbnQoKSk7CisgICAgICAgIG1fc2hhcmVkU2NyaXB0LT5zZXRD
b250ZXh0KG1faW5uZXJDb250ZXh0KTsKKyAgICAgICAgbV9zaGFyZWRTY3JpcHQtPmRpc3BhdGNo
RXZlbnQoRXZlbnQ6OmNyZWF0ZShFdmVudE5hbWVzKCkubG9hZEV2ZW50LCBmYWxzZSwgZmFsc2Up
KTsKKworICAgICAgICBtX3NoYXJlZFNjcmlwdC0+dW5zZXRQZW5kaW5nQWN0aXZpdHkobV9zaGFy
ZWRTY3JpcHQuZ2V0KCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBMb2FkRXZlbnRUYXNrKFBh
c3NSZWZQdHI8V2ViS2l0U2hhcmVkU2NyaXB0PiBzaGFyZWRTY3JpcHQsIFBhc3NSZWZQdHI8U2hh
cmVkU2NyaXB0Q29udGV4dD4gaW5uZXJDb250ZXh0KQorICAgICAgICA6IG1fc2hhcmVkU2NyaXB0
KHNoYXJlZFNjcmlwdCkKKyAgICAgICAgLCBtX2lubmVyQ29udGV4dChpbm5lckNvbnRleHQpCisg
ICAgeworICAgICAgICAvLyBLZWVwIGV2ZW50IGxpc3RlbmVycyBhbGl2ZS4KKyAgICAgICAgbV9z
aGFyZWRTY3JpcHQtPnNldFBlbmRpbmdBY3Rpdml0eShtX3NoYXJlZFNjcmlwdC5nZXQoKSk7Cisg
ICAgfQorCisgICAgUmVmUHRyPFdlYktpdFNoYXJlZFNjcmlwdD4gbV9zaGFyZWRTY3JpcHQ7Cisg
ICAgUmVmUHRyPFNoYXJlZFNjcmlwdENvbnRleHQ+IG1faW5uZXJDb250ZXh0OworfTsKKwordm9p
ZCBXZWJLaXRTaGFyZWRTY3JpcHQ6OnNjaGVkdWxlTG9hZEV2ZW50KFBhc3NSZWZQdHI8U2hhcmVk
U2NyaXB0Q29udGV4dD4gaW5uZXJDb250ZXh0KQoreworICAgIEFTU0VSVCghbV9pbm5lckNvbnRl
eHQpOworICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+cG9zdFRhc2soTG9hZEV2ZW50VGFz
azo6Y3JlYXRlKHRoaXMsIGlubmVyQ29udGV4dCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU0hBUkVEX1NDUklQVCkKKwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9zaGFyZWRTY3JpcHQvV2ViS2l0U2hhcmVkU2NyaXB0LmggYi9XZWJDb3JlL3NoYXJlZFNj
cmlwdC9XZWJLaXRTaGFyZWRTY3JpcHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi40ZDlkNDc2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9zaGFyZWRTY3JpcHQvV2Vi
S2l0U2hhcmVkU2NyaXB0LmgKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViS2l0U2hhcmVkU2Ny
aXB0X2gKKyNkZWZpbmUgV2ViS2l0U2hhcmVkU2NyaXB0X2gKKworI2lmIEVOQUJMRShTSEFSRURf
U0NSSVBUKQorCisjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiQXRvbWlj
U3RyaW5nSGFzaC5oIgorI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJFdmVu
dFRhcmdldC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworICAgIGNsYXNzIEtVUkw7CisgICAgY2xhc3MgU2hhcmVkU2NyaXB0Q29udGV4dDsKKyAg
ICBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworCisgICAgY2xhc3MgV2ViS2l0U2hhcmVk
U2NyaXB0IDogcHVibGljIFJlZkNvdW50ZWQ8V2ViS2l0U2hhcmVkU2NyaXB0PiwgcHVibGljIEFj
dGl2ZURPTU9iamVjdCwgcHVibGljIEV2ZW50VGFyZ2V0IHsKKyAgICBwdWJsaWM6CisgICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFdlYktpdFNoYXJlZFNjcmlwdD4gY3JlYXRlKGNvbnN0IFN0cmlu
ZyYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFdlYktpdFNoYXJlZFNjcmlwdCh1cmwsIG5hbWUsIGNvbnRleHQsIGVjKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgdmlydHVhbCB+V2ViS2l0U2hhcmVkU2NyaXB0KCk7CisKKyAgICAg
ICAgLy8gRXZlbnRUYXJnZXQgQVBJcworICAgICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBBY3RpdmVET01P
YmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsgfQorICAgICAgICB2aXJ0dWFsIFdlYktp
dFNoYXJlZFNjcmlwdCogdG9XZWJLaXRTaGFyZWRTY3JpcHQoKSB7IHJldHVybiB0aGlzOyB9CisK
KyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihlcnJvcik7CisgICAgICAg
IERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIobG9hZCk7CisKKyAgICAgICAgdXNpbmcg
UmVmQ291bnRlZDxXZWJLaXRTaGFyZWRTY3JpcHQ+OjpyZWY7CisgICAgICAgIHVzaW5nIFJlZkNv
dW50ZWQ8V2ViS2l0U2hhcmVkU2NyaXB0Pjo6ZGVyZWY7CisKKyAgICAgICAgU2hhcmVkU2NyaXB0
Q29udGV4dCogY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faW5uZXJDb250ZXh0LmdldCgpOyB9
CisgICAgICAgIHZvaWQgc2V0Q29udGV4dChQYXNzUmVmUHRyPFNoYXJlZFNjcmlwdENvbnRleHQ+
IGNvbnRleHQpOworCisgICAgICAgIC8vIFdoZW4gZmlyZWQsIHRoaXMgd2lsbCBzZXQgdGhlIGlu
bmVyQ29udGV4dCBpbnRvIHRoaXMgV2ViS2l0U2hhcmVkU2NyaXB0IGFuZCBkaXNwYXRjaCAnbG9h
ZCcgZXZlbnQuCisgICAgICAgIHZvaWQgc2NoZWR1bGVMb2FkRXZlbnQoUGFzc1JlZlB0cjxTaGFy
ZWRTY3JpcHRDb250ZXh0PiBpbm5lckNvbnRleHQpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAg
V2ViS2l0U2hhcmVkU2NyaXB0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUs
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFeGNlcHRpb25Db2RlJik7CisKKyAgICAgICAgdmly
dHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgeyByZWYoKTsgfQorICAgICAgICB2aXJ0dWFsIHZv
aWQgZGVyZWZFdmVudFRhcmdldCgpIHsgZGVyZWYoKTsgfQorICAgICAgICB2aXJ0dWFsIEV2ZW50
VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXREYXRhKCkgeyByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRh
OyB9CisgICAgICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBlbnN1cmVFdmVudFRhcmdldERh
dGEoKSB7IHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7IH0KKworICAgICAgICBFdmVudFRhcmdl
dERhdGEgbV9ldmVudFRhcmdldERhdGE7CisgICAgICAgIFJlZlB0cjxTaGFyZWRTY3JpcHRDb250
ZXh0PiBtX2lubmVyQ29udGV4dDsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoU0hBUkVEX1NDUklQVCkKKworI2VuZGlmIC8vIFdlYktpdFNoYXJl
ZFNjcmlwdF9oCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc2hhcmVkU2NyaXB0L1dlYktpdFNoYXJl
ZFNjcmlwdC5pZGwgYi9XZWJDb3JlL3NoYXJlZFNjcmlwdC9XZWJLaXRTaGFyZWRTY3JpcHQuaWRs
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5MzQ1MDgKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL3NoYXJlZFNjcmlwdC9XZWJLaXRTaGFyZWRTY3JpcHQuaWRsCkBAIC0w
LDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCittb2R1bGUgd2luZG93IHsKKworICAgIGludGVyZmFjZSBbCisgICAgICAgIENv
bmRpdGlvbmFsPVNIQVJFRF9TQ1JJUFQsCisgICAgICAgIEV2ZW50VGFyZ2V0LAorICAgICAgICBH
ZW5lcmF0ZVRvSlMKKyAgICBdIFdlYktpdFNoYXJlZFNjcmlwdCB7CisKKyAgICAgICAgYXR0cmli
dXRlIEV2ZW50TGlzdGVuZXIgb25lcnJvcjsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVu
ZXIgb25sb2FkOworCisgICAgICAgIC8vIEV2ZW50VGFyZ2V0IGludGVyZmFjZQorICAgICAgICBb
Q3VzdG9tXSB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBFdmVudExpc3RlbmVyIGxpc3RlbmVy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiB1c2VD
YXB0dXJlKTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGluIERP
TVN0cmluZyB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluIGJvb2xlYW4gdXNlQ2FwdHVyZSk7CisgICAgICAgIGJvb2xlYW4gZGlz
cGF0Y2hFdmVudChpbiBFdmVudCBldnQpCisgICAgICAgICAgICByYWlzZXMoRXZlbnRFeGNlcHRp
b24pOworCisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTaGFyZWRTY3JpcHRDb250ZXh0IGNv
bnRleHQ7CisgICAgfTsKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvc2hhcmVkU2NyaXB0L1dlYktp
dFNoYXJlZFNjcmlwdFJlcG9zaXRvcnkuY3BwIGIvV2ViQ29yZS9zaGFyZWRTY3JpcHQvV2ViS2l0
U2hhcmVkU2NyaXB0UmVwb3NpdG9yeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uZTIzMzIxOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvc2hhcmVkU2NyaXB0L1dl
YktpdFNoYXJlZFNjcmlwdFJlcG9zaXRvcnkuY3BwCkBAIC0wLDAgKzEsMTc2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNIQVJFRF9TQ1JJUFQpCisKKyNpbmNsdWRlICJXZWJL
aXRTaGFyZWRTY3JpcHRSZXBvc2l0b3J5LmgiCisKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3Qu
aCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAi
RXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJTZWN1
cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIlNoYXJlZFNjcmlwdENvbnRleHQuaCIKKyNpbmNsdWRl
ICJXZWJLaXRTaGFyZWRTY3JpcHQuaCIKKyNpbmNsdWRlICJXb3JrZXJTY3JpcHRMb2FkZXIuaCIK
KyNpbmNsdWRlICJXb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisvLyBIZWxwZXIgY2xhc3MgdG8gbG9hZCB0aGUgaW5pdGlhbCBzY3JpcHQgb24gYmVo
YWxmIG9mIGEgU2hhcmVkU2NyaXB0LgorY2xhc3MgU2hhcmVkU2NyaXB0TG9hZGVyIDogcHVibGlj
IFJlZkNvdW50ZWQ8U2hhcmVkU2NyaXB0TG9hZGVyPiwgcHVibGljIEFjdGl2ZURPTU9iamVjdCwg
cHJpdmF0ZSBXb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQgeworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFNoYXJlZFNjcmlwdExvYWRlcj4gY3JlYXRlKFBhc3NSZWZQdHI8V2ViS2l0U2hh
cmVkU2NyaXB0PiBzaGFyZWRTY3JpcHQsIFBhc3NSZWZQdHI8U2hhcmVkU2NyaXB0Q29udGV4dD4g
aW5uZXJDb250ZXh0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWRT
Y3JpcHRMb2FkZXIoc2hhcmVkU2NyaXB0LCBpbm5lckNvbnRleHQpKTsKKyAgICB9CisKKyAgICB2
b2lkIGxvYWQoY29uc3QgS1VSTCYpOworCitwcml2YXRlOgorICAgIFNoYXJlZFNjcmlwdExvYWRl
cihQYXNzUmVmUHRyPFdlYktpdFNoYXJlZFNjcmlwdD4sIFBhc3NSZWZQdHI8U2hhcmVkU2NyaXB0
Q29udGV4dD4pOworICAgIC8vIFdvcmtlclNjcmlwdExvYWRlckNsaWVudCBjYWxsYmFjaworICAg
IHZpcnR1YWwgdm9pZCBub3RpZnlGaW5pc2hlZCgpOworCisgICAgUmVmUHRyPFdlYktpdFNoYXJl
ZFNjcmlwdD4gbV9zaGFyZWRTY3JpcHQ7CisgICAgUmVmUHRyPFNoYXJlZFNjcmlwdENvbnRleHQ+
IG1faW5uZXJDb250ZXh0OworICAgIE93blB0cjxXb3JrZXJTY3JpcHRMb2FkZXI+IG1fc2NyaXB0
TG9hZGVyOworfTsKKworU2hhcmVkU2NyaXB0TG9hZGVyOjpTaGFyZWRTY3JpcHRMb2FkZXIoUGFz
c1JlZlB0cjxXZWJLaXRTaGFyZWRTY3JpcHQ+IHNoYXJlZFNjcmlwdCwgUGFzc1JlZlB0cjxTaGFy
ZWRTY3JpcHRDb250ZXh0PiBpbm5lckNvbnRleHQpCisgICAgOiBBY3RpdmVET01PYmplY3Qoc2hh
cmVkU2NyaXB0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHRoaXMpCisgICAgLCBtX3NoYXJl
ZFNjcmlwdChzaGFyZWRTY3JpcHQpCisgICAgLCBtX2lubmVyQ29udGV4dChpbm5lckNvbnRleHQp
Cit7Cit9CisKK3ZvaWQgU2hhcmVkU2NyaXB0TG9hZGVyOjpsb2FkKGNvbnN0IEtVUkwmIHVybCkK
K3sKKyAgICAvLyBNYXJrIHRoaXMgb2JqZWN0IGFzIGFjdGl2ZSBmb3IgdGhlIGR1cmF0aW9uIG9m
IHRoZSBsb2FkLgorICAgIEFTU0VSVCghaGFzUGVuZGluZ0FjdGl2aXR5KCkpOworICAgIG1fc2Ny
aXB0TG9hZGVyID0gbmV3IFdvcmtlclNjcmlwdExvYWRlcigpOworICAgIG1fc2NyaXB0TG9hZGVy
LT5sb2FkQXN5bmNocm9ub3VzbHkoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB1cmwsIERlbnlD
cm9zc09yaWdpblJlcXVlc3RzLCB0aGlzKTsKKworICAgIC8vIFN0YXkgYWxpdmUgdW50aWwgdGhl
IGxvYWQgZmluaXNoZXMuCisgICAgc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIG1fc2hh
cmVkU2NyaXB0LT5zZXRQZW5kaW5nQWN0aXZpdHkobV9zaGFyZWRTY3JpcHQuZ2V0KCkpOworfQor
Cit2b2lkIFNoYXJlZFNjcmlwdExvYWRlcjo6bm90aWZ5RmluaXNoZWQoKQoreworICAgIGlmICht
X3NjcmlwdExvYWRlci0+ZmFpbGVkKCkpCisgICAgICAgIG1fc2hhcmVkU2NyaXB0LT5kaXNwYXRj
aEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVycm9yRXZlbnQsIGZhbHNlLCB0cnVl
KSk7CisgICAgZWxzZSB7CisgICAgICAgIC8vIElmIGFub3RoZXIgbG9hZGVyIGhhcyBub3QgeWV0
IGluaXRpYWxpemVkIHRoZSBTaGFyZWRTY3JpcHRDb250ZXh0LCBkbyBzby4KKyAgICAgICAgaWYg
KCFtX2lubmVyQ29udGV4dC0+bG9hZGVkKCkpCisgICAgICAgICAgICBtX2lubmVyQ29udGV4dC0+
bG9hZChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnVzZXJBZ2VudChtX3NjcmlwdExvYWRlci0+
dXJsKCkpLCBtX3NjcmlwdExvYWRlci0+c2NyaXB0KCkpOworICAgIAorICAgICAgICBtX3NoYXJl
ZFNjcmlwdC0+c2NoZWR1bGVMb2FkRXZlbnQobV9pbm5lckNvbnRleHQpOworICAgIH0KKworICAg
IG1fc2hhcmVkU2NyaXB0LT51bnNldFBlbmRpbmdBY3Rpdml0eShtX3NoYXJlZFNjcmlwdC5nZXQo
KSk7CisgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7IC8vIFRoaXMgZnJlZXMgdGhpcyBv
YmplY3Qgc28gaXQgbXVzdCBiZSB0aGUgbGFzdCBhY3Rpb24gaW4gdGhpcyBmdW5jdGlvbi4KK30K
KworV2ViS2l0U2hhcmVkU2NyaXB0UmVwb3NpdG9yeSYgV2ViS2l0U2hhcmVkU2NyaXB0UmVwb3Np
dG9yeTo6aW5zdGFuY2UoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoV2ViS2l0U2hhcmVk
U2NyaXB0UmVwb3NpdG9yeSwgaW5zdGFuY2UsICgpKTsKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9
CisKK3ZvaWQgV2ViS2l0U2hhcmVkU2NyaXB0UmVwb3NpdG9yeTo6Y29ubmVjdChQYXNzUmVmUHRy
PFdlYktpdFNoYXJlZFNjcmlwdD4gc2hhcmVkU2NyaXB0LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0
IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaW5zdGFuY2UoKS5jb25u
ZWN0VG9TaGFyZWRTY3JpcHQoc2hhcmVkU2NyaXB0LCB1cmwsIG5hbWUsIGVjKTsKK30KKwordm9p
ZCBXZWJLaXRTaGFyZWRTY3JpcHRSZXBvc2l0b3J5Ojpkb2N1bWVudERldGFjaGVkKERvY3VtZW50
KiBkb2N1bWVudCkKK3sKKyAgICBXZWJLaXRTaGFyZWRTY3JpcHRSZXBvc2l0b3J5JiByZXBvc2l0
b3J5ID0gaW5zdGFuY2UoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVwb3NpdG9y
eS5tX3NoYXJlZFNjcmlwdENvbnRleHRzLnNpemUoKTsgaSsrKQorICAgICAgICByZXBvc2l0b3J5
Lm1fc2hhcmVkU2NyaXB0Q29udGV4dHNbaV0tPnJlbW92ZUZyb21Eb2N1bWVudExpc3QoZG9jdW1l
bnQpOworfQorCit2b2lkIFdlYktpdFNoYXJlZFNjcmlwdFJlcG9zaXRvcnk6OnJlbW92ZVNoYXJl
ZFNjcmlwdENvbnRleHQoU2hhcmVkU2NyaXB0Q29udGV4dCogY29udGV4dCkKK3sKKyAgICBXZWJL
aXRTaGFyZWRTY3JpcHRSZXBvc2l0b3J5JiByZXBvc2l0b3J5ID0gaW5zdGFuY2UoKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVwb3NpdG9yeS5tX3NoYXJlZFNjcmlwdENvbnRleHRz
LnNpemUoKTsgaSsrKSB7CisgICAgICAgIGlmIChjb250ZXh0ID09IHJlcG9zaXRvcnkubV9zaGFy
ZWRTY3JpcHRDb250ZXh0c1tpXSkgeworICAgICAgICAgICAgcmVwb3NpdG9yeS5tX3NoYXJlZFNj
cmlwdENvbnRleHRzLnJlbW92ZShpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgIH0KK30KKwordm9pZCBXZWJLaXRTaGFyZWRTY3JpcHRSZXBvc2l0b3J5Ojpjb25uZWN0VG9T
aGFyZWRTY3JpcHQoUGFzc1JlZlB0cjxXZWJLaXRTaGFyZWRTY3JpcHQ+IHNoYXJlZFNjcmlwdCwg
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIEFTU0VSVChzaGFyZWRTY3JpcHQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+c2Vj
dXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNzKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUodXJsKS5nZXQo
KSkpOworICAgIFJlZlB0cjxTaGFyZWRTY3JpcHRDb250ZXh0PiBpbm5lckNvbnRleHQgPSBnZXRT
aGFyZWRTY3JpcHRDb250ZXh0KG5hbWUsIHVybCk7CisKKyAgICBpZiAoaW5uZXJDb250ZXh0LT51
cmwoKSAhPSB1cmwpIHsKKyAgICAgICAgLy8gU2hhcmVkU2NyaXB0IHdpdGggc2FtZSBuYW1lIGJ1
dCBkaWZmZXJlbnQgVVJMIGFscmVhZHkgZXhpc3RzIC0gcmV0dXJuIGFuIGVycm9yLgorICAgICAg
ICBlYyA9IFVSTF9NSVNNQVRDSF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBB
U1NFUlQoc2hhcmVkU2NyaXB0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzRG9jdW1lbnQo
KSk7CisgICAgaW5uZXJDb250ZXh0LT5hZGRUb0RvY3VtZW50c0xpc3Qoc3RhdGljX2Nhc3Q8RG9j
dW1lbnQqPihzaGFyZWRTY3JpcHQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkpOworCisgICAg
Ly8gSWYgU2hhcmVkU2NyaXB0Q29udGV4dCBpcyBhbHJlYWR5IHJ1bm5pbmcsIGp1c3Qgc2NoZWR1
bGUgYSBsb2FkIGV2ZW50IC0gb3RoZXJ3aXNlLCBraWNrIG9mZiBhIGxvYWRlciB0byBsb2FkIHRo
ZSBzY3JpcHQuCisgICAgaWYgKGlubmVyQ29udGV4dC0+bG9hZGVkKCkpCisgICAgICAgIHNoYXJl
ZFNjcmlwdC0+c2NoZWR1bGVMb2FkRXZlbnQoaW5uZXJDb250ZXh0KTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgUmVmUHRyPFNoYXJlZFNjcmlwdExvYWRlcj4gbG9hZGVyID0gU2hhcmVkU2NyaXB0TG9h
ZGVyOjpjcmVhdGUoc2hhcmVkU2NyaXB0LCBpbm5lckNvbnRleHQucmVsZWFzZSgpKTsKKyAgICAg
ICAgbG9hZGVyLT5sb2FkKHVybCk7IC8vIFBlbmRpbmcgYWN0aXZpdHkgd2lsbCBrZWVwIHRoZSBs
b2FkZXIgYWxpdmUuCisgICAgfQorfQorCisvLyBDcmVhdGVzIGEgbmV3IFNoYXJlZFNjcmlwdENv
bnRleHQgb3IgcmV0dXJucyBhbiBleGlzdGluZyBvbmUgZnJvbSB0aGUgcmVwb3NpdG9yeS4KK1Bh
c3NSZWZQdHI8U2hhcmVkU2NyaXB0Q29udGV4dD4gV2ViS2l0U2hhcmVkU2NyaXB0UmVwb3NpdG9y
eTo6Z2V0U2hhcmVkU2NyaXB0Q29udGV4dChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEtVUkwm
IHVybCkKK3sKKyAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpbiA9IFNlY3VyaXR5T3Jp
Z2luOjpjcmVhdGUodXJsKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zaGFyZWRT
Y3JpcHRDb250ZXh0cy5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAobV9zaGFyZWRTY3JpcHRD
b250ZXh0c1tpXS0+bWF0Y2hlcyhuYW1lLCAqb3JpZ2luLCB1cmwpKQorICAgICAgICAgICAgcmV0
dXJuIG1fc2hhcmVkU2NyaXB0Q29udGV4dHNbaV07CisgICAgfQorCisgICAgUmVmUHRyPFNoYXJl
ZFNjcmlwdENvbnRleHQ+IHNoYXJlZFNjcmlwdENvbnRleHQgPSBTaGFyZWRTY3JpcHRDb250ZXh0
OjpjcmVhdGUobmFtZSwgdXJsLCBvcmlnaW4ucmVsZWFzZSgpKTsKKyAgICBtX3NoYXJlZFNjcmlw
dENvbnRleHRzLmFwcGVuZChzaGFyZWRTY3JpcHRDb250ZXh0LmdldCgpKTsKKyAgICByZXR1cm4g
c2hhcmVkU2NyaXB0Q29udGV4dC5yZWxlYXNlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShTSEFSRURfU0NSSVBUKQorCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3NoYXJlZFNjcmlwdC9XZWJLaXRTaGFyZWRTY3JpcHRSZXBvc2l0b3J5LmggYi9XZWJDb3Jl
L3NoYXJlZFNjcmlwdC9XZWJLaXRTaGFyZWRTY3JpcHRSZXBvc2l0b3J5LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdjNjBkMAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNv
cmUvc2hhcmVkU2NyaXB0L1dlYktpdFNoYXJlZFNjcmlwdFJlcG9zaXRvcnkuaApAQCAtMCwwICsx
LDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBXZWJLaXRTaGFyZWRTY3JpcHRSZXBvc2l0b3J5X2gKKyNkZWZpbmUgV2Vi
S2l0U2hhcmVkU2NyaXB0UmVwb3NpdG9yeV9oCisKKyNpZiBFTkFCTEUoU0hBUkVEX1NDUklQVCkK
KworI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKK2Ns
YXNzIERvY3VtZW50OworY2xhc3MgS1VSTDsKK2NsYXNzIFNoYXJlZFNjcmlwdENvbnRleHQ7Citj
bGFzcyBTdHJpbmc7CitjbGFzcyBXZWJLaXRTaGFyZWRTY3JpcHQ7CisKKy8vIEludGVyZmFjZSB0
byBhIHJlcG9zaXRvcnkgd2hpY2ggbWFuYWdlcyByZWZlcmVuY2VzIHRvIHRoZSBzZXQgb2YgYWN0
aXZlIFNoYXJlZFNjcmlwdENvbnRleHRzLgorY2xhc3MgV2ViS2l0U2hhcmVkU2NyaXB0UmVwb3Np
dG9yeSB7CitwdWJsaWM6CisgICAgLy8gQ29ubmVjdHMgdGhlIHBhc3NlZCBXZWJLaXRTaGFyZWRT
Y3JpcHQgb2JqZWN0IHdpdGggYSBTaGFyZWRTY3JpcHRDb250ZXh0LCBjcmVhdGluZyBhIG5ldyBv
bmUgaWYgbmVjZXNzYXJ5LgorICAgIHN0YXRpYyB2b2lkIGNvbm5lY3QoUGFzc1JlZlB0cjxXZWJL
aXRTaGFyZWRTY3JpcHQ+LCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRp
b25Db2RlJik7CisKKyAgICBzdGF0aWMgdm9pZCByZW1vdmVTaGFyZWRTY3JpcHRDb250ZXh0KFNo
YXJlZFNjcmlwdENvbnRleHQqKTsKKyAgICBzdGF0aWMgdm9pZCBkb2N1bWVudERldGFjaGVkKERv
Y3VtZW50Kik7CisKK3ByaXZhdGU6CisgICAgV2ViS2l0U2hhcmVkU2NyaXB0UmVwb3NpdG9yeSgp
IHsgfQorICAgIHN0YXRpYyBXZWJLaXRTaGFyZWRTY3JpcHRSZXBvc2l0b3J5JiBpbnN0YW5jZSgp
OworICAgIHZvaWQgY29ubmVjdFRvU2hhcmVkU2NyaXB0KFBhc3NSZWZQdHI8V2ViS2l0U2hhcmVk
U2NyaXB0PiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYp
OworICAgIFBhc3NSZWZQdHI8U2hhcmVkU2NyaXB0Q29udGV4dD4gZ2V0U2hhcmVkU2NyaXB0Q29u
dGV4dChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEtVUkwmKTsKKworICAgIC8vIExpc3Qgb2Yg
U2hhcmVkU2NyaXB0Q29udGV4dHMuCisgICAgLy8gRXhwZWN0YXRpb24gaXMgdGhhdCB0aGVyZSB3
aWxsIGJlIGEgbGltaXRlZCBudW1iZXIgb2YgU2hhcmVkU2NyaXB0Q29udGV4dHMsIGFuZCBzbyB0
cmFja2luZyB0aGVtIGluIGEgVmVjdG9yIGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gbmVzdGVkIEhh
c2hNYXBzLgorICAgIHR5cGVkZWYgVmVjdG9yPFNoYXJlZFNjcmlwdENvbnRleHQqPiBTaGFyZWRT
Y3JpcHRDb250ZXh0TGlzdDsKKyAgICBTaGFyZWRTY3JpcHRDb250ZXh0TGlzdCBtX3NoYXJlZFNj
cmlwdENvbnRleHRzOworCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoU0hBUkVEX1NDUklQVCkKKworI2VuZGlmIC8vIFdlYktpdFNoYXJlZFNjcmlwdFJl
cG9zaXRvcnlfaAorCg==
</data>
<flag name="review"
          id="25543"
          type_id="1"
          status="+"
          setter="levin"
    />
    <flag name="commit-queue"
          id="25544"
          type_id="3"
          status="-"
          setter="dimich"
    />
          </attachment>
      

    </bug>

</bugzilla>