<?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>128782</bug_id>
          
          <creation_ts>2014-02-13 17:37:48 -0800</creation_ts>
          <short_desc>Web Replay: upstream input storage, capture/replay machinery, and inspector domain</short_desc>
          <delta_ts>2014-03-03 08:55:32 -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>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>129395</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Blaze Burg">bburg</reporter>
          <assigned_to name="Blaze Burg">bburg</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>graouts</cc>
    
    <cc>joepeck</cc>
    
    <cc>kling</cc>
    
    <cc>sam</cc>
    
    <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>980555</commentid>
    <comment_count>0</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2014-02-13 17:37:48 -0800</bug_when>
    <thetext>This will be a large patch. It is the smallest subset of functionality that will capture and
deterministically replay a minimal webpage test case that uses Math.random() and Date.now().

It adds the following core data classes:

ReplaySession
ReplaySessionSegment
SegmentedInputStorage

It adds the &apos;Replay&apos; inspector domain and related InspectorReplayAgent.
It adds a few simple replay inputs specific to WebCore.
It adds the core capture and playback classes: ReplayController, EventLoopInputDispatcher.
It adds input cursor subclasses that know how to capture and replay inputs from a ReplaySessionSegment.
It adds a few helper functions and headers to glue it all together.


I will add some more CC: people once a patch is ready for eyes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>982925</commentid>
    <comment_count>1</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2014-02-20 11:58:01 -0800</bug_when>
    <thetext>I will post two patches here that can be reviewed separately.

 1) replay machinery
 2) new test infrastructure to support replay tests, and said tests

They can be combined for EWS after review and landed as one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>982983</commentid>
    <comment_count>2</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2014-02-20 14:42:05 -0800</bug_when>
    <thetext>Tests for replay will be part of the inspector layout tests, and require an alternate bootstrapping process.

The current protocol tests open up a page from the specific test using window.open(). This child page serves as the dummy inspector page, and the parent (test) page serves as the inspected page. We instantiate protocol handlers and inspector models into existence using eval(), and route messages from the backend to the child inspector page.

This won&apos;t work for testing replay functionality with reference tests (i.e., comparing output of two runs), because the child inspector page will be disconnected when the main frame navigates during capture or replay.

For such tests, we could use the &quot;old&quot; inspector test bootstrapping, which calls showWebInspector() to launch a Web Inspector page (including views, IIRC) that persists across navigatios. We can use evaluateInWebInspector() to feed it the test script (calls to backend, etc).

In a replay context, the test.html page would include the various replay test commands inside a runTest() method, which would be evaluated in the inspector page on the first page load (but not subsequent loads). The runTest() method will start capturing by reloading the test page, and save its output into a capture output buffer. Then, runTest() will replay the captured replay session which causes another reload, and save its output into a replay output buffer. Then the test can diff the two output buffers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983000</commentid>
    <comment_count>3</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-02-20 15:01:37 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; For such tests, we could use the &quot;old&quot; inspector test bootstrapping, which calls showWebInspector() to launch a Web Inspector page (including views, IIRC) that persists across navigatios. We can use evaluateInWebInspector() to feed it the test script (calls to backend, etc).

I was never fond of evaluateInWebInspector(). I think it causes more UI testing than model/controller testing (even if not intentional).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983001</commentid>
    <comment_count>4</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2014-02-20 15:04:07 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; For such tests, we could use the &quot;old&quot; inspector test bootstrapping, which calls showWebInspector() to launch a Web Inspector page (including views, IIRC) that persists across navigatios. We can use evaluateInWebInspector() to feed it the test script (calls to backend, etc).
&gt; 
&gt; I was never fond of evaluateInWebInspector(). I think it causes more UI testing than model/controller testing (even if not intentional).

If there&apos;s some reasonable way to do so, I&apos;d be happy to only load the controllers and models into the separate inspector page. I only care about the inspector persisting across navigations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983069</commentid>
    <comment_count>5</comment_count>
      <attachid>224819</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2014-02-20 18:57:58 -0800</bug_when>
    <thetext>Created attachment 224819
patch part 1 - v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983070</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-02-20 18:58:55 -0800</bug_when>
    <thetext>Attachment 224819 did not pass style-queue:


ERROR: Source/WebCore/replay/SerializationMethods.cpp:93:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
ERROR: Source/WebCore/replay/ReplayInputTypes.cpp:41:  Wrong number of spaces before statement. (expected: 4)  [whitespace/indent] [4]
ERROR: Source/WebCore/replay/SerializationMethods.h:64:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 3 in 42 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983387</commentid>
    <comment_count>7</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2014-02-21 15:18:49 -0800</bug_when>
    <thetext>After some discussion, we think it will take a bit of refactoring to make the test harness do what we want without inadvertently loading 400+ inspector resources on every test. So, let&apos;s move forward with this patch and the test situation will catch up next week.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>984367</commentid>
    <comment_count>8</comment_count>
      <attachid>224819</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-02-25 09:43:51 -0800</bug_when>
    <thetext>Comment on attachment 224819
patch part 1 - v1

View in context: https://bugs.webkit.org/attachment.cgi?id=224819&amp;action=review

Oops, meant to dump this nitpickery yesterday!

&gt; Source/WebCore/inspector/InspectorReplayAgent.cpp:61
&gt; +    RefPtr&lt;TypeBuilder::Replay::ReplayPosition&gt; positionObject = TypeBuilder::Replay::ReplayPosition::create()
&gt; +    .setSegmentOffset(position.segmentOffset)
&gt; +    .setInputOffset(position.inputOffset);

You&apos;ve indented the lines starting with &quot;.&quot; below, but not here.

&gt; Source/WebCore/inspector/InspectorReplayAgent.cpp:93
&gt; +    return sessionObject;

Avoid churning the reference count with .release():
return sessionObject.release();

(Though I&apos;d skip the temporary RefPtr entirely here.)

&gt; Source/WebCore/inspector/InspectorReplayAgent.cpp:114
&gt; +    RefPtr&lt;TypeBuilder::Array&lt;TypeBuilder::Replay::ReplayInput&gt; &gt; m_inputs;

No need for &quot;&gt; &gt;&quot; in WebKit.

&gt; Source/WebCore/inspector/InspectorReplayAgent.cpp:145
&gt; +    , m_frontendDispatcher(nullptr)
&gt; +    , m_backendDispatcher(nullptr)

You don&apos;t need to null-intialize smart pointers; their default constructors will take care of that.

&gt; Source/WebCore/inspector/InspectorReplayAgent.cpp:149
&gt; +    , m_sessionsMap(SessionsMap())
&gt; +    , m_segmentsMap(SegmentsMap())

These lines are not needed.

&gt; Source/WebCore/inspector/InspectorReplayAgent.h:122
&gt; +    typedef HashMap&lt;int, RefPtr&lt;ReplaySession&gt;, WTF::IntHash&lt;int&gt;, WTF::UnsignedWithZeroKeyHashTraits&lt;int&gt;&gt; SessionsMap;
&gt; +    SessionsMap m_sessionsMap;
&gt; +
&gt; +    typedef HashMap&lt;int, RefPtr&lt;ReplaySessionSegment&gt;, WTF::IntHash&lt;int&gt;, WTF::UnsignedWithZeroKeyHashTraits&lt;int&gt;&gt; SegmentsMap;
&gt; +    SegmentsMap m_segmentsMap;

I would use &quot;auto&quot; instead of typedeffing these.

&gt; Source/WebCore/replay/CapturingInputCursor.cpp:41
&gt; +    : m_storage(storage)
&gt; +{
&gt; +    ASSERT(m_storage);

m_storage should just be a reference

&gt; Source/WebCore/replay/CapturingInputCursor.cpp:78
&gt; +#endif // ENABLE(TIMEALPSE)

;)

&gt; Source/WebCore/replay/CapturingInputCursor.h:55
&gt; +    CapturingInputCursor(SegmentedInputStorage*);

explicit

&gt; Source/WebCore/replay/ReplaySession.cpp:46
&gt; +    : m_segments(Vector&lt;RefPtr&lt;ReplaySessionSegment&gt;&gt;())

This line is not needed.

&gt; Source/WebCore/replay/ReplaySession.cpp:68
&gt; +    m_segments.append(segment);

Avoid ref count churn by doing:
m_segments.append(segment.release());

&gt; Source/WebCore/replay/ReplaySession.h:56
&gt; +    SegmentIterator begin() const { return m_segments.begin(); };
&gt; +    SegmentIterator end() const { return m_segments.end(); };

The semicolons at EOL are not needed.

&gt; Source/WebCore/replay/ReplaySessionSegment.cpp:45
&gt; +    return adoptRef(new ReplaySessionSegment());

Unofficial(?) WebKit style is to omit () for argument-less constructors:
return adoptRef(new ReplaySessionSegment);

&gt; Source/WebCore/replay/ReplaySessionSegment.cpp:74
&gt; +    return std::make_unique&lt;FunctorInputCursor&gt;(m_storage.get());

Looks like m_storage will never be non-null, so we should pass it by reference and make the input cursor take/store it as such.

&gt; Source/WebCore/replay/ReplayingInputCursor.cpp:44
&gt; +    , m_positions(Vector&lt;size_t&gt;())

This line is not needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>984506</commentid>
    <comment_count>9</comment_count>
      <attachid>224819</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-02-25 15:11:20 -0800</bug_when>
    <thetext>Comment on attachment 224819
patch part 1 - v1

View in context: https://bugs.webkit.org/attachment.cgi?id=224819&amp;action=review

Looks good to me as well. Maybe one more set of eyes on an updated patch?

&gt; Source/WebCore/DerivedSources.make:1149
&gt; +    $(WebReplayScripts)/CodeGeneratorReplayInputs.py \
&gt; +    $(WebReplayScripts)/CodeGeneratorReplayInputsTemplates.py \

Also update Source/WebCore/make-generated-sources.sh to export WebReplayScripts. AFAIK that is a helper tool to just run DerivedSources.make outside of Xcode, and it should have all external variables, like WebReplayScripts, be defined.

&gt; Source/WebCore/inspector/InspectorInstrumentation.h:1830
&gt; +inline void InspectorInstrumentation::sessionCreated(Page* page, PassRefPtr&lt;ReplaySession&gt; session)
&gt; +{
&gt; +#if ENABLE(INSPECTOR)
&gt; +    if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsForPage(page))
&gt; +        sessionCreatedImpl(instrumentingAgents, session);

I think these should all fast return if no frontends:

    FAST_RETURN_IF_NO_FRONTENDS(void());

Since the instrumentingAgentsForPage -&gt; inspectorReplayAgent would only return the agent when a frontend is attached (it adds the agent in didCreateFrontendAndBackend). Until there is a frontend, these methods will do nothing.

&gt; Source/WebCore/inspector/InspectorReplayAgent.cpp:147
&gt; +    , m_page(nullptr)

How about initializing m_page here to be pageAgent-&gt;page() and avoiding the possibility of it ever being null.

&gt; Source/WebCore/inspector/InspectorReplayAgent.cpp:161
&gt; +    ASSERT(m_page);

You can remove this.

&gt; Source/WebCore/inspector/InspectorReplayAgent.cpp:171
&gt; +    m_page = m_pageAgent-&gt;page();

And this.

&gt; Source/WebCore/inspector/InspectorReplayAgent.cpp:189
&gt; +    m_page = nullptr;

And this.

&gt; Source/WebCore/inspector/InspectorReplayAgent.cpp:217
&gt; +    if (m_frontendDispatcher)
&gt; +        m_frontendDispatcher-&gt;sessionCreated(session-&gt;identifier());

Should not need to if-check m_frontendDispatcher here (or anywhere in this file). If m_frontendDispatcher is null, then this agent would not be in InstrumentingAgents, and all InspectorInstrumentation calls would have flubbed.

&gt; Source/WebCore/inspector/InspectorReplayAgent.cpp:313
&gt; +        *errorString = &quot;Can&apos;t start capturing if the session is already capturing or replaying.&quot;;

Nit: ASCIILiteral for all *errorString = ASCIILiteral(&quot;...&quot;);

&gt; Source/WebCore/inspector/InspectorReplayAgent.h:60
&gt; +class InspectorReplayAgent final
&gt; +    : public InspectorAgentBase
&gt; +    , public Inspector::InspectorReplayBackendDispatcherHandler {

Nit: 1 line is normal, unless you think this is better, then we should change other inspector agents.

&gt; Source/WebCore/inspector/InspectorReplayAgent.h:107
&gt; +    void startCapturing(ErrorString*) override;
&gt; +    void stopCapturing(ErrorString*) override;
&gt; +
&gt; +    void replayToPosition(ErrorString*, const RefPtr&lt;Inspector::InspectorObject&gt;&amp;, bool shouldFastForward) override;
&gt; +    void replayToCompletion(ErrorString*, bool shouldFastForward) override;
&gt; +    void pausePlayback(ErrorString*) override;
&gt; +    void cancelPlayback(ErrorString*) override;
&gt; +
&gt; +    void switchSession(ErrorString*, SessionIdentifier) override;
&gt; +    void insertSessionSegment(ErrorString*, SessionIdentifier, SegmentIdentifier, int segmentIndex) override;
&gt; +    void removeSessionSegment(ErrorString*, SessionIdentifier, int segmentIndex) override;
&gt; +
&gt; +    void getAvailableSessions(ErrorString*, RefPtr&lt;Inspector::TypeBuilder::Array&lt;SessionIdentifier&gt;&gt;&amp;) override;
&gt; +    void getSerializedSession(ErrorString*, SessionIdentifier, RefPtr&lt;Inspector::TypeBuilder::Replay::ReplaySession&gt;&amp;) override;
&gt; +    void getSerializedSegment(ErrorString*, SegmentIdentifier, RefPtr&lt;Inspector::TypeBuilder::Replay::SessionSegment&gt;&amp;) override;
&gt; +

Nit: I&apos;d prefer to see &quot;virtual&quot; on all of these. They are virtual, as evident by override. But it also makes it easier them easier to find in the header.

&gt; Source/WebCore/inspector/protocol/Replay.json:18
&gt; +               { &quot;name&quot;: &quot;segmentOffset&quot;, &quot;type&quot;: &quot;integer&quot;, &quot;description&quot;: &quot;Offset for an event loop input within the specified session segment.&quot; },
&gt; +               { &quot;name&quot;: &quot;inputOffset&quot;, &quot;type&quot;: &quot;integer&quot;, &quot;description&quot;: &quot;Offset for an event loop input within the specified session segment.&quot; }

The description of these are the same. There should be some difference in the description if these truly are different!

&gt; Source/WebCore/inspector/protocol/Replay.json:35
&gt; +                { &quot;name&quot;: &quot;type&quot;, &quot;type&quot;: &quot;string&quot;, &quot;description&quot;: &quot;Queue type&quot; },

Should this be an enum?

&gt; Source/WebCore/inspector/protocol/Replay.json:40
&gt; +            &quot;id&quot;: &quot;SessionSegment&quot;, &quot;description&quot;: &quot;A standalone segment of a replay session that corresponds to a single main frame navigation and execution.&quot;,

Neat style. This is fine, or description as the second line.

&gt; Source/WebCore/inspector/protocol/Replay.json:85
&gt; +            },

Wrong indentation.

&gt; Source/WebCore/inspector/protocol/Replay.json:125
&gt; +                { &quot;name&quot;: &quot;sessionId&quot;, &quot;$ref&quot;: &quot;SessionIdentifier&quot; }

Most of the time this is &quot;sessionIdentifier&quot; but here it is &quot;sessionId&quot;. The name in the protocol is important, because this will be in the generated code and we may need to be backwards compatible with it. Lets settle on sessionIdentifier.

&gt; Source/WebCore/inspector/protocol/Replay.json:128
&gt; +                { &quot;name&quot;: &quot;session&quot;, &quot;$ref&quot;: &quot;ReplaySession&quot;, &quot;description&quot;: &quot;The requested serialized replay session.&quot;, &quot;optional&quot;: true }

Nit: Move optional before description.

&gt; Source/WebCore/inspector/protocol/Replay.json:138
&gt; +                { &quot;name&quot;: &quot;segment&quot;, &quot;$ref&quot;: &quot;SessionSegment&quot;, &quot;description&quot;: &quot;The requested serialized session segment.&quot;, &quot;optional&quot;: true }

Nit: Move optional before description.

&gt; Source/WebCore/inspector/protocol/Replay.json:142
&gt; +

Nit: unnecessary blank space.

&gt; Source/WebCore/inspector/protocol/Replay.json:235
&gt; +                { &quot;name&quot;: &quot;segmentId&quot;, &quot;$ref&quot;: &quot;SegmentIdentifier&quot;, &quot;description&quot;: &quot;Id for the loaded segment.&quot; }

Same here. Lets go with segmentIdentifier.

&gt; Source/WebCore/replay/CapturingInputCursor.cpp:43
&gt; +    LOG(WebReplay, &quot;%-30sCreated capture cursor=%p.\n&quot;, &quot;[ReplayController]&quot;, (void*)this);

Is the void* cast needed? I think just doing &quot;this&quot; will be fine. If the cast is needed, then static_cast&lt;void*&gt;(...).

&gt; Source/WebCore/replay/CapturingInputCursor.cpp:48
&gt; +    LOG(WebReplay, &quot;%-30sDestroyed capture cursor=%p.\n&quot;, &quot;[ReplayController]&quot;, (void*)this);

Ditto.

&gt; Source/WebCore/replay/CapturingInputCursor.h:38
&gt; +class EventLoopInputBase;

Nit: Unneeded?

&gt; Source/WebCore/replay/EventLoopInputDispatcher.cpp:100
&gt; +        // The goal is to reproduce the dispatch delay between inputs is it was

Typo: &quot;is it was was&quot; =&gt; &quot;as it was&quot;

&gt; Source/WebCore/replay/EventLoopInputDispatcher.cpp:161
&gt; +        m_client-&gt;didDispatchFinalInput();

Should this set m_running to false here?

&gt; Source/WebCore/replay/EventLoopInputDispatcher.h:45
&gt; +    Realtime,

RealTime?

&gt; Source/WebCore/replay/EventLoopInputDispatcher.h:56
&gt; +    virtual void willDispatchInput(const EventLoopInputBase&amp;) =0;
&gt; +    virtual void didDispatchInput(const EventLoopInputBase&amp;) =0;
&gt; +    virtual void didDispatchFinalInput() =0;

Style: &quot;= 0;&quot;

&gt; Source/WebCore/replay/EventLoopInputDispatcher.h:59
&gt; +class EventLoopInputDispatcher final {

Nit: &quot;final&quot; not needed. This doesn&apos;t appear to subclass anything.

&gt; Source/WebCore/replay/FunctorInputCursor.h:42
&gt; +class FunctorInputCursor : public InputCursor {

Style: final on the class definition instead of each method individually. I don&apos;t see anyone extending this right now. You can leave as is if this will change in the future.

&gt; Source/WebCore/replay/FunctorInputCursor.h:66
&gt; +    for (size_t i = 0; i &lt; m_storage-&gt;m_queues[static_cast&lt;size_t&gt;(queue)]-&gt;size(); i++)

Instead of reaching into m_storage-&gt;m_queues directly, how about providing a friend method on SegmentedInputStorage that ASSERTs the validity of &quot;queue&quot;:

    const QueuedInputs&amp; queue(InputQueue queue)
    {
        ASSERT(queue &lt; InputQueue::Count);
        return m_queues.at(offsetForInputQueue(queue));
    }

Here you could use it to get the queue, assert the input queue is valid, and prevent some duplication in the long lines.

SegmentedInputStorage::load and SegmentedInputStorage::queueSize could use that as well and get the ASSERT.

&gt; Source/WebCore/replay/ReplayController.cpp:75
&gt; +    LOG(WebReplay, &quot;%-20sSwitching sessions from %p to %p.\n&quot;, &quot;ReplayController&quot;, (void*)m_loadedSession.get(), (void*)session.get());

Same comment regarding the (void*) cast. There are more places below as well.

&gt; Source/WebCore/replay/ReplayController.cpp:113
&gt; +    unloadSegment(true);

Mysterious bool. You can assign to a local to give it a name:

    bool suppressNotifications = true;
    unloadSegment(suppressNotifications);

&gt; Source/WebCore/replay/ReplayController.cpp:298
&gt; +    loader-&gt;frame()-&gt;document()-&gt;setInputCursor(m_activeCursor.get());

No frame tree traversal is needed here?

&gt; Source/WebCore/replay/ReplayController.cpp:310
&gt; +RefPtr&lt;ReplaySession&gt; ReplayController::loadedSession() const
&gt; +{
&gt; +    return m_loadedSession;
&gt; +}
&gt; +
&gt; +RefPtr&lt;ReplaySessionSegment&gt; ReplayController::loadedSegment() const
&gt; +{
&gt; +    return m_loadedSegment;
&gt; +}

We don&apos;t normally return RefPtrs. I think we would return a raw pointer here, e.g. m_loadedSession.get(). These could be inlined in the header.

&gt; Source/WebCore/replay/ReplayController.h:53
&gt; +class ReplaySession;
&gt; +class ReplaySessionSegment;
&gt; +class DOMWindow;
&gt; +class Document;
&gt; +class DocumentLoader;
&gt; +class Element;
&gt; +class Event;
&gt; +class EventLoopInputBase;
&gt; +class Frame;
&gt; +class Node;
&gt; +class Page;

Style: sort

&gt; Source/WebCore/replay/ReplaySession.cpp:54
&gt; +ReplaySession::~ReplaySession()
&gt; +{
&gt; +}

Empty, should be fine to inline in the header file.

&gt; Source/WebCore/replay/ReplaySession.h:49
&gt; +    unsigned identifier() const { return m_identifier; };

Nit: semicolon at end not needed

&gt; Source/WebCore/replay/SegmentedInputStorage.cpp:51
&gt; +        case InputQueue::EventLoopInput: return &quot;(DSPTCH-LOAD)&quot;;
&gt; +        case InputQueue::LoaderMemoizedData: return &quot;&lt;LDMEMO-LOAD&quot;;
&gt; +        case InputQueue::ScriptMemoizedData: return &quot;&lt;---&lt;---&lt;---JSMEMO-LOAD&quot;;
&gt; +        case InputQueue::Count: return &quot;ERROR!&quot;;

These seem a bit Cryptic.

&gt; Source/WebCore/replay/SegmentedInputStorage.cpp:79
&gt; +        m_queues.append(new QueuedInputs());

Style: constructor &quot;()&quot; not needed here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>984989</commentid>
    <comment_count>10</comment_count>
      <attachid>224819</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2014-02-26 16:47:45 -0800</bug_when>
    <thetext>Comment on attachment 224819
patch part 1 - v1

View in context: https://bugs.webkit.org/attachment.cgi?id=224819&amp;action=review

&gt;&gt; Source/WebCore/DerivedSources.make:1149
&gt;&gt; +    $(WebReplayScripts)/CodeGeneratorReplayInputsTemplates.py \
&gt; 
&gt; Also update Source/WebCore/make-generated-sources.sh to export WebReplayScripts. AFAIK that is a helper tool to just run DerivedSources.make outside of Xcode, and it should have all external variables, like WebReplayScripts, be defined.

OK

&gt;&gt; Source/WebCore/inspector/InspectorInstrumentation.h:1830
&gt;&gt; +        sessionCreatedImpl(instrumentingAgents, session);
&gt; 
&gt; I think these should all fast return if no frontends:
&gt; 
&gt;     FAST_RETURN_IF_NO_FRONTENDS(void());
&gt; 
&gt; Since the instrumentingAgentsForPage -&gt; inspectorReplayAgent would only return the agent when a frontend is attached (it adds the agent in didCreateFrontendAndBackend). Until there is a frontend, these methods will do nothing.

OK

&gt;&gt; Source/WebCore/inspector/InspectorReplayAgent.cpp:93
&gt;&gt; +    return sessionObject;
&gt; 
&gt; Avoid churning the reference count with .release():
&gt; return sessionObject.release();
&gt; 
&gt; (Though I&apos;d skip the temporary RefPtr entirely here.)

I tried removing it once; the temporary is needed for the static template checking stuff in Inspector::TypeBuilder. I think it sets some &quot;completed&quot; bit when assigning, but not returning.

&gt;&gt; Source/WebCore/inspector/InspectorReplayAgent.cpp:147
&gt;&gt; +    , m_page(nullptr)
&gt; 
&gt; How about initializing m_page here to be pageAgent-&gt;page() and avoiding the possibility of it ever being null.

OK

&gt;&gt; Source/WebCore/inspector/InspectorReplayAgent.cpp:217
&gt;&gt; +        m_frontendDispatcher-&gt;sessionCreated(session-&gt;identifier());
&gt; 
&gt; Should not need to if-check m_frontendDispatcher here (or anywhere in this file). If m_frontendDispatcher is null, then this agent would not be in InstrumentingAgents, and all InspectorInstrumentation calls would have flubbed.

OK

&gt;&gt; Source/WebCore/inspector/InspectorReplayAgent.h:60
&gt;&gt; +    , public Inspector::InspectorReplayBackendDispatcherHandler {
&gt; 
&gt; Nit: 1 line is normal, unless you think this is better, then we should change other inspector agents.

I prefer multi-line, since there&apos;s a lot going on (especially now with final). Templates are also multi-line.

&gt;&gt; Source/WebCore/inspector/InspectorReplayAgent.h:107
&gt;&gt; +
&gt; 
&gt; Nit: I&apos;d prefer to see &quot;virtual&quot; on all of these. They are virtual, as evident by override. But it also makes it easier them easier to find in the header.

Oops

&gt;&gt; Source/WebCore/inspector/protocol/Replay.json:18
&gt;&gt; +               { &quot;name&quot;: &quot;inputOffset&quot;, &quot;type&quot;: &quot;integer&quot;, &quot;description&quot;: &quot;Offset for an event loop input within the specified session segment.&quot; }
&gt; 
&gt; The description of these are the same. There should be some difference in the description if these truly are different!

oops!

&gt;&gt; Source/WebCore/inspector/protocol/Replay.json:35
&gt;&gt; +                { &quot;name&quot;: &quot;type&quot;, &quot;type&quot;: &quot;string&quot;, &quot;description&quot;: &quot;Queue type&quot; },
&gt; 
&gt; Should this be an enum?

I tried that but IIRC it caused problems with the code generator. I&apos;ll double-check that.

&gt;&gt; Source/WebCore/inspector/protocol/Replay.json:125
&gt;&gt; +                { &quot;name&quot;: &quot;sessionId&quot;, &quot;$ref&quot;: &quot;SessionIdentifier&quot; }
&gt; 
&gt; Most of the time this is &quot;sessionIdentifier&quot; but here it is &quot;sessionId&quot;. The name in the protocol is important, because this will be in the generated code and we may need to be backwards compatible with it. Lets settle on sessionIdentifier.

Oops

&gt;&gt; Source/WebCore/replay/CapturingInputCursor.cpp:78
&gt;&gt; +#endif // ENABLE(TIMEALPSE)
&gt; 
&gt; ;)

muscle memory gone bad, or something!

&gt;&gt; Source/WebCore/replay/CapturingInputCursor.h:55
&gt;&gt; +    CapturingInputCursor(SegmentedInputStorage*);
&gt; 
&gt; explicit

Nice catch, I recently changed the arity

&gt;&gt; Source/WebCore/replay/EventLoopInputDispatcher.cpp:161
&gt;&gt; +        m_client-&gt;didDispatchFinalInput();
&gt; 
&gt; Should this set m_running to false here?

Yes, that would make sense.

&gt;&gt; Source/WebCore/replay/FunctorInputCursor.h:66
&gt;&gt; +    for (size_t i = 0; i &lt; m_storage-&gt;m_queues[static_cast&lt;size_t&gt;(queue)]-&gt;size(); i++)
&gt; 
&gt; Instead of reaching into m_storage-&gt;m_queues directly, how about providing a friend method on SegmentedInputStorage that ASSERTs the validity of &quot;queue&quot;:
&gt; 
&gt;     const QueuedInputs&amp; queue(InputQueue queue)
&gt;     {
&gt;         ASSERT(queue &lt; InputQueue::Count);
&gt;         return m_queues.at(offsetForInputQueue(queue));
&gt;     }
&gt; 
&gt; Here you could use it to get the queue, assert the input queue is valid, and prevent some duplication in the long lines.
&gt; 
&gt; SegmentedInputStorage::load and SegmentedInputStorage::queueSize could use that as well and get the ASSERT.

OK.

&gt;&gt; Source/WebCore/replay/ReplayController.cpp:113
&gt;&gt; +    unloadSegment(true);
&gt; 
&gt; Mysterious bool. You can assign to a local to give it a name:
&gt; 
&gt;     bool suppressNotifications = true;
&gt;     unloadSegment(suppressNotifications);

OK

&gt;&gt; Source/WebCore/replay/ReplayController.cpp:298
&gt;&gt; +    loader-&gt;frame()-&gt;document()-&gt;setInputCursor(m_activeCursor.get());
&gt; 
&gt; No frame tree traversal is needed here?

This method gets called as each subframe is created. So there will never be a case when a descendant frame has navigated into the current replay session segment but its children have not.

&gt;&gt; Source/WebCore/replay/ReplayController.cpp:310
&gt;&gt; +}
&gt; 
&gt; We don&apos;t normally return RefPtrs. I think we would return a raw pointer here, e.g. m_loadedSession.get(). These could be inlined in the header.

It should be PassRefPtr probably. The segment and session aren&apos;t owned by the controller, and callers might want to add a ref (say, if they decide to unload it). I&apos;ll look through code to see where it is used eventually.

&gt;&gt; Source/WebCore/replay/ReplaySession.cpp:68
&gt;&gt; +    m_segments.append(segment);
&gt; 
&gt; Avoid ref count churn by doing:
&gt; m_segments.append(segment.release());

OK

&gt;&gt; Source/WebCore/replay/SegmentedInputStorage.cpp:51
&gt;&gt; +        case InputQueue::Count: return &quot;ERROR!&quot;;
&gt; 
&gt; These seem a bit Cryptic.

They are carefully formatted to make LOG(WebReplay, ...) spew very readable. But not apparent from looking here :) I&apos;ll add a commen.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>985031</commentid>
    <comment_count>11</comment_count>
      <attachid>225336</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2014-02-26 18:24:45 -0800</bug_when>
    <thetext>Created attachment 225336
revised patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>985033</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-02-26 18:27:54 -0800</bug_when>
    <thetext>Attachment 225336 did not pass style-queue:


ERROR: Source/WebCore/replay/SerializationMethods.cpp:93:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
ERROR: Source/WebCore/replay/ReplayInputTypes.cpp:41:  Wrong number of spaces before statement. (expected: 4)  [whitespace/indent] [4]
ERROR: Source/WebCore/replay/SerializationMethods.h:64:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 3 in 43 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>986337</commentid>
    <comment_count>13</comment_count>
      <attachid>225336</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-03-03 07:32:41 -0800</bug_when>
    <thetext>Comment on attachment 225336
revised patch

View in context: https://bugs.webkit.org/attachment.cgi?id=225336&amp;action=review

Looks good to me too.

&gt; Source/WebCore/inspector/InspectorReplayAgent.cpp:456
&gt; +    for (auto it = m_sessionsMap.begin(); it != m_sessionsMap.end(); ++it)

Could be modernized.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>986357</commentid>
    <comment_count>14</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2014-03-03 08:55:32 -0800</bug_when>
    <thetext>Committed r164986: &lt;http://trac.webkit.org/changeset/164986&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>224819</attachid>
            <date>2014-02-20 18:57:58 -0800</date>
            <delta_ts>2014-02-26 18:24:43 -0800</delta_ts>
            <desc>patch part 1 - v1</desc>
            <filename>bug-128782-20140220185757.patch</filename>
            <type>text/plain</type>
            <size>197229</size>
            <attacher name="Blaze Burg">bburg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY0NDYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
ZTQ3MDBmYjRmZTZiOWMwZjE4MGJiMjMxOTkyOTNkN2I1N2ZjM2ZmLi5mZTE1ZGUyY2E3MGI5NTM4
NWViZmQ3YTY4Njk5MWNjNGViYjMwYmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMiBAQAorMjAxNC0wMi0yMCAgQnJpYW4gQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBXZWIgUmVwbGF5OiB1cHN0cmVhbSBpbnB1dCBzdG9yYWdlLCBjYXB0dXJlL3JlcGxh
eSBtYWNoaW5lcnksIGFuZCBpbnNwZWN0b3IgZG9tYWluCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjg3ODIKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBbHRlciB0aGUgcmVwbGF5IGlucHV0cyBjb2RlIGdl
bmVyYXRvciBzbyB0aGF0IGl0IGtub3dzIHdoZW4gaXQgaXMgbmVjZXNzYXJ5IHRvCisgICAgICAg
IHRvIGluY2x1ZGUgaGVhZGVycyBmb3IgSEVBVllfU0NBTEFSIHR5cGVzIHN1Y2ggYXMgV1RGOjpT
dHJpbmcgYW5kIFdlYkNvcmU6OlVSTC4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVy
YXRvclJlcGxheUlucHV0cy5weToKKyAgICAgICAgKEZyYW1ld29yay5mcm9tU3RyaW5nKToKKyAg
ICAgICAgKEZyYW1ld29ya3MpOiBBZGQgV1RGIGFzIGFuIGFsbG93ZWQgZnJhbWV3b3JrIGZvciBj
b2RlIGdlbmVyYXRpb24uCisgICAgICAgIChHZW5lcmF0b3IuZ2VuZXJhdGVfaW5jbHVkZXMpOiBJ
bmNsdWRlIGhlYWRlcnMgZm9yIEhFQVZZX1NDQUxBUiB0eXBlcyBpbiB0aGUgaGVhZGVyIGZpbGUu
CisgICAgICAgIChHZW5lcmF0b3IuZ2VuZXJhdGVfaW5jbHVkZXMuZGVjbGFyYXRpb24pOgorICAg
ICAgICAoR2VuZXJhdG9yLmdlbmVyYXRlX2luY2x1ZGVzLm9yKToKKyAgICAgICAgKEdlbmVyYXRv
ci5nZW5lcmF0ZV90eXBlX2ZvcndhcmRfZGVjbGFyYXRpb25zKTogU2tpcCBIRUFWWV9TQ0FMQVIg
dHlwZXMuCisKIDIwMTQtMDItMjAgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4K
IAogICAgICAgICBNYXRoLmltdWwgZ2l2ZXMgd3JvbmcgcmVzdWx0cwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGU5
ZTE3OWQ0YTRjYzdmMzkyZTRlNWIzMzAxZTc1YjczODc2ODkzZWYuLmMyYmFhOTUzMTkxOGE5NDJj
N2M2NTI2NjIzMzVmMDA0ZmJlZjkzYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNzMgQEAKKzIw
MTQtMDItMjAgIEJyaWFuIEJ1cmcgIDxiYnVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIFJl
cGxheTogdXBzdHJlYW0gaW5wdXQgc3RvcmFnZSwgY2FwdHVyZS9yZXBsYXkgbWFjaGluZXJ5LCBh
bmQgaW5zcGVjdG9yIGRvbWFpbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTI4NzgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzIHlldCwgYXMgdGhleSByZWx5IG9uIHBhcnQgMiBvZiB0
aGlzIGJ1Zy4KKworICAgICAgICBSZXBsYXlhYmxlIGV4ZWN1dGlvbnMgYXJlIG9yZ2FuaXplZCBp
bnRvIFJlcGxheVNlc3Npb25zLCB3aGljaCBjYW4KKyAgICAgICAgY29udGFpbiBzZXZlcmFsIFJl
cGxheVNlc3Npb25TZWdtZW50cyB0aGF0IGRpdmlkZSBvdmVyYWxsIGV4ZWN1dGlvbgorICAgICAg
ICBhdCBtYWluIGZyYW1lIG5hdmlnYXRpb24gYm91bmRhcmllcy4gTm9uZGV0ZXJtaW5pc3RpY0lu
cHV0IHN1YmNsYXNzZXMKKyAgICAgICAgYXJlIHN0b3JlZCBpbiBTZWdtZW50ZWRJbnB1dFN0b3Jh
Z2UgYWNjb3JkaW5nIHRvIHRoZSBpbnB1dCdzIElucHV0UXVldWUuCisKKyAgICAgICAgQ2FwdHVy
ZSBhbmQgcGxheWJhY2sgYXJlIGNvbnRyb2xsZWQgYXQgdGhlIHBhZ2UgZ3JhbnVsYXJpdHkgYnkg
dGhlIFBhZ2UncworICAgICAgICBSZXBsYXlDb250cm9sbGVyLiBUaGUgY29udHJvbGxlciBrbm93
cyBob3cgdG8gY3JlYXRlIG5ldyBzZWdtZW50cywgcmVwbGF5IHRvCisgICAgICAgIGFyYml0cmFy
eSBwb3NpdGlvbnMgaW4gdGhlIFJlcGxheVNlc3Npb24sIGFuZCB0cmFjayB0aGUgYWN0aXZlIElu
cHV0Q3Vyc29yLgorCisgICAgICAgIFRoZSBjYXB0dXJpbmcgYW5kIHJlcGxheWluZyBpbnB1dCBj
dXJzb3Igc3ViY2xhc3NlcyBlbmNhcHN1bGF0ZSBzdGF0ZSBmb3IKKyAgICAgICAgc3RvcmluZyBu
ZXcgaW5wdXRzIGFuZCBsb2FkaW5nL2Rpc3BhdGNoaW5nIHNhdmVkIGlucHV0cywgcmVzcGVjdGl2
ZWx5LgorCisgICAgICAgIFRoZSBSZXBsYXlBZ2VudCBhbmQgYXNzb2NpYXRlZCBpbnNwZWN0b3Ig
cHJvdG9jb2wgZG9tYWluIGlzIHRoZSBmcmllbmRseQorICAgICAgICBwdWJsaWMgQVBJIGZvciBw
cm9ncmFtbWF0aWNhbGx5IGNhcHR1cmluZyBhbmQgcmVwbGF5aW5nIHNlc3Npb25zLgorCisgICAg
ICAgICogRGVyaXZlZFNvdXJjZXMubWFrZTogQWRkIHJlcGxheSBpbnB1dHMgY29kZSBnZW5lcmF0
aW9uIHRhcmdldC4gQWRkIHRoZQorICAgICAgICByZXBsYXkgZG9tYWluIHNwZWNpZmljYXRpb24g
dG8gdGhlIGxpc3Qgb2YgaW5zcGVjdG9yIGRvbWFpbnMuCisKKyAgICAgICAgKiBGb3J3YXJkaW5n
SGVhZGVycy9yZXBsYXkvRW5jb2RlZFZhbHVlLmg6IEFkZGVkLgorICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRkIG1hbnkgZmlsZXMsIGFuZCBleHBvcnQKKyAg
ICAgICAgYFdlYlJlcGxheVNjcmlwdHNgIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIERlcml2ZWRT
b3VyY2VzLm1ha2UuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5j
cHA6IEFkZCB0aGUgcmVwbGF5IGFnZW50LgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29u
dHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcik6CisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcDoKKyAgICAgICAgQWRkIGV2ZW50cyBmb3Igc2VnbWVu
dCBsaWZlY3ljbGUgZXZlbnRzLCBhbmQgbG9hZGluZy91bmxvYWRpbmcgb2Ygc2Vzc2lvbnMKKyAg
ICAgICAgYW5kIHNlZ21lbnRzLCBhbmQgY2FwdHVyZS9yZXBsYXkgcHJvZ3Jlc3MgZXZlbnRzLiBU
aGUgcmVwbGF5IGNvbnRyb2xsZXIKKyAgICAgICAgYWxzbyBuZWVkcyB0byBrbm93IGFib3V0IGRl
dGFjaGVkIGFuZCBjb21taXR0ZWQgZnJhbWVzLgorCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmZyYW1lRGV0YWNoZWRGcm9tUGFyZW50SW1wbCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENvbW1pdExvYWRJbXBsKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2Vzc2lvbkNyZWF0
ZWRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2Vz
c2lvbkxvYWRlZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpzZXNzaW9uTW9kaWZpZWRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6c2VnbWVudENyZWF0ZWRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2VnbWVudENvbXBsZXRlZEltcGwpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZWdtZW50TG9hZGVkSW1wbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlZ21lbnRVbmxvYWRl
ZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjYXB0
dXJlU3RhcnRlZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpjYXB0dXJlU3RvcHBlZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpwbGF5YmFja1N0YXJ0ZWRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6cGxheWJhY2tQYXVzZWRJbXBsKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6cGxheWJhY2tIaXRQb3NpdGlvbkltcGwp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpyZXBsYXlBZ2Vu
dEVuYWJsZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24u
aDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6cmVwbGF5QWdl
bnRFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
c2Vzc2lvbkNyZWF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpzZXNzaW9uTG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6c2Vzc2lvbk1vZGlmaWVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6c2VnbWVudENyZWF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpzZWdtZW50Q29tcGxldGVkKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2VnbWVudExvYWRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlZ21lbnRVbmxvYWRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNhcHR1cmVTdGFydGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y2FwdHVyZVN0b3BwZWQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpwbGF5YmFja1N0
YXJ0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpwbGF5
YmFja1BhdXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OnBsYXliYWNrSGl0UG9zaXRpb24pOgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclJl
cGxheUFnZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpidWlsZEluc3BlY3Rvck9i
amVjdEZvclBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkSW5zcGVjdG9yT2JqZWN0
Rm9ySW5wdXQpOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRJbnNwZWN0b3JPYmplY3RGb3JTZXNz
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZUlucHV0VG9KU09ORnVuY3Rvcjo6U2Vy
aWFsaXplSW5wdXRUb0pTT05GdW5jdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZUlu
cHV0VG9KU09ORnVuY3Rvcjo6flNlcmlhbGl6ZUlucHV0VG9KU09ORnVuY3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpTZXJpYWxpemVJbnB1dFRvSlNPTkZ1bmN0b3I6Om9wZXJhdG9yKCkpOgorICAg
ICAgICAoV2ViQ29yZTo6U2VyaWFsaXplSW5wdXRUb0pTT05GdW5jdG9yOjpyZXR1cm5WYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpidWlsZEluc3BlY3Rvck9iamVjdEZvclNlZ21lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6Okluc3BlY3RvclJlcGxheUFnZW50
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlcGxheUFnZW50Ojp+SW5zcGVjdG9yUmVw
bGF5QWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnNlc3Np
b25TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXBsYXlBZ2VudDo6ZGlkQ3Jl
YXRlRnJvbnRlbmRBbmRCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlcGxh
eUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JSZXBsYXlBZ2VudDo6ZnJhbWVOYXZpZ2F0ZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmZyYW1lRGV0YWNoZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnNlc3Npb25DcmVhdGVkKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclJlcGxheUFnZW50OjpzZXNzaW9uTW9kaWZpZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnNlc3Npb25Mb2FkZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnNlZ21lbnRDcmVhdGVkKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclJlcGxheUFnZW50OjpzZWdtZW50Q29tcGxldGVkKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclJlcGxheUFnZW50OjpzZWdtZW50TG9hZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclJlcGxheUFnZW50OjpzZWdtZW50VW5sb2FkZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmNhcHR1cmVTdGFydGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclJlcGxheUFnZW50OjpjYXB0dXJlU3RvcHBlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXBsYXlBZ2VudDo6cGxheWJhY2tTdGFydGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlcGxheUFnZW50OjpwbGF5YmFja1BhdXNlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXBsYXlBZ2VudDo6cGxheWJhY2tIaXRQb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXBsYXlBZ2VudDo6c3RhcnRDYXB0dXJp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnN0b3BDYXB0dXJp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnJlcGxheVRvUG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnJlcGxheVRv
Q29tcGxldGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXBsYXlBZ2VudDo6cGF1
c2VQbGF5YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXBsYXlBZ2VudDo6Y2Fu
Y2VsUGxheWJhY2spOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnN3
aXRjaFNlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6Omlu
c2VydFNlc3Npb25TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlcGxheUFn
ZW50OjpyZW1vdmVTZXNzaW9uU2VnbWVudCk6CisgICAgICAgIFByb3ZpZGUgYSBwdWJsaWMgQVBJ
IGZvciBtb2RpZnlpbmcgc2Vzc2lvbnMuIFRoaXMgaXMgdGhlIGJhY2tlbmQgc3VwcG9ydAorICAg
ICAgICBmb3IgdXNlciBlZGl0aW5nIG9mIHJlcGxheSBzZXNzaW9ucyB0byBhZGQvcmVtb3ZlIHNw
ZWNpZmljIHNlZ21lbnRzLgorCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXBsYXlBZ2Vu
dDo6ZmluZFNlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6
OmZpbmRTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlcGxheUFnZW50Ojpn
ZXRBdmFpbGFibGVTZXNzaW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXBsYXlB
Z2VudDo6Z2V0U2VyaWFsaXplZFNlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
UmVwbGF5QWdlbnQ6OmdldFNlcmlhbGl6ZWRTZWdtZW50KToKKyAgICAgICAgTW9zdCBvZiB0aGUg
cmVwbGF5IHByb3RvY29sIGRvbWFpbiBzcGVha3MgaW4gdGVybXMgb2Ygc2Vzc3Npb24gYW5kCisg
ICAgICAgIHNlZ21lbnQgaWRlbnRpZmllcnMuIFRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gdGhlIGFj
dHVhbCBkYXRhIGFzc29jaWF0ZWQKKyAgICAgICAgd2l0aCB0aGVzZSBpZGVudGlmaWVycy4KKwor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JSZXBsYXlBZ2VudC5oOiBBZGRlZC4KKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zdHJ1bWVudGluZ0FnZW50cy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbnN0cnVtZW50aW5nQWdlbnRzOjpJbnN0cnVtZW50aW5nQWdlbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3RydW1lbnRpbmdBZ2VudHM6OnJlc2V0KToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zdHJ1bWVudGluZ0FnZW50cy5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zdHJ1bWVudGluZ0Fn
ZW50czo6aW5zcGVjdG9yUmVwbGF5QWdlbnQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklu
c3RydW1lbnRpbmdBZ2VudHM6OnNldEluc3BlY3RvclJlcGxheUFnZW50KTogQWRkZWQuCisgICAg
ICAgICogaW5zcGVjdG9yL3Byb3RvY29sL1JlcGxheS5qc29uOiBBZGRlZC4KKworICAgICAgICAq
IHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpQYWdlKToKKyAgICAgICAg
KiBwYWdlL1BhZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnJlcGxheUNvbnRyb2xsZXIp
OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9Mb2dnaW5nLmg6IEFkZCBXZWJSZXBsYXkgbG9n
Z2luZyBjaGFubmVsLgorICAgICAgICAqIHJlcGxheS9BbGxSZXBsYXlJbnB1dHMuaDogQWRkZWQu
IFNpbXBsaWZpZXMgaW1wb3J0aW5nIGFsbCBpbnB1dCBkZWZpbml0aW9ucy4KKworICAgICAgICAq
IHJlcGxheS9DYXB0dXJpbmdJbnB1dEN1cnNvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q2FwdHVyaW5nSW5wdXRDdXJzb3I6OkNhcHR1cmluZ0lucHV0Q3Vyc29yKToKKyAgICAgICAg
KFdlYkNvcmU6OkNhcHR1cmluZ0lucHV0Q3Vyc29yOjp+Q2FwdHVyaW5nSW5wdXRDdXJzb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FwdHVyaW5nSW5wdXRDdXJzb3I6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDYXB0dXJpbmdJbnB1dEN1cnNvcjo6c3RvcmVJbnB1dCk6CisgICAgICAgIChX
ZWJDb3JlOjpDYXB0dXJpbmdJbnB1dEN1cnNvcjo6bG9hZElucHV0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNhcHR1cmluZ0lucHV0Q3Vyc29yOjp1bmNoZWNrZWRMb2FkSW5wdXQpOgorICAgICAgICAq
IHJlcGxheS9DYXB0dXJpbmdJbnB1dEN1cnNvci5oOiBBZGRlZC4KKworICAgICAgICAqIHJlcGxh
eS9FdmVudExvb3BJbnB1dC5oOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMb29wSW5wdXRCYXNl
OjpFdmVudExvb3BJbnB1dEJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMb29wSW5wdXRC
YXNlOjp0aW1lc3RhbXApOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMb29wSW5wdXRCYXNlOjpz
ZXRUaW1lc3RhbXApOiBTdXBwb3J0IGRlc2VyaWFsaXphdGlvbi4KKworICAgICAgICAqIHJlcGxh
eS9FdmVudExvb3BJbnB1dERpc3BhdGNoZXIuY3BwOiBBZGRlZC4gVGhpcyBjbGFzcyBlbmNhcHN1
bGF0ZXMgdGhlIHRpbWVycworICAgICAgICBhbmQgbWVhc3VyZW1lbnRzIHVzZWQgdG8gZGlzcGF0
Y2ggZXZlbnQgbG9vcCBpbnB1dHMgZHVyaW5nIHJlcGxheS4KKworICAgICAgICAoV2ViQ29yZTo6
RXZlbnRMb29wSW5wdXREaXNwYXRjaGVyOjpFdmVudExvb3BJbnB1dERpc3BhdGNoZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRMb29wSW5wdXREaXNwYXRjaGVyOjpydW4pOgorICAgICAgICAo
V2ViQ29yZTo6RXZlbnRMb29wSW5wdXREaXNwYXRjaGVyOjpwYXVzZSk6CisgICAgICAgIChXZWJD
b3JlOjpFdmVudExvb3BJbnB1dERpc3BhdGNoZXI6OnRpbWVyRmlyZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6RXZlbnRMb29wSW5wdXREaXNwYXRjaGVyOjpkaXNwYXRjaElucHV0U29vbik6CisgICAg
ICAgIChXZWJDb3JlOjpFdmVudExvb3BJbnB1dERpc3BhdGNoZXI6OmRpc3BhdGNoSW5wdXQpOgor
ICAgICAgICAqIHJlcGxheS9FdmVudExvb3BJbnB1dERpc3BhdGNoZXIuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpFdmVudExvb3BJbnB1dERpc3BhdGNoZXJDbGllbnQ6OkV2ZW50TG9vcElu
cHV0RGlzcGF0Y2hlckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudExvb3BJbnB1dERp
c3BhdGNoZXJDbGllbnQ6On5FdmVudExvb3BJbnB1dERpc3BhdGNoZXJDbGllbnQpOgorCisgICAg
ICAgICogcmVwbGF5L0Z1bmN0b3JJbnB1dEN1cnNvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZ1bmN0b3JJbnB1dEN1cnNvcjo6fkZ1bmN0b3JJbnB1dEN1cnNvcik6CisgICAgICAgIChX
ZWJDb3JlOjpGdW5jdG9ySW5wdXRDdXJzb3I6OmZvckVhY2hJbnB1dEluUXVldWUpOgorICAgICAg
ICAoV2ViQ29yZTo6RnVuY3RvcklucHV0Q3Vyc29yOjpGdW5jdG9ySW5wdXRDdXJzb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6RnVuY3RvcklucHV0Q3Vyc29yOjpzdG9yZUlucHV0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZ1bmN0b3JJbnB1dEN1cnNvcjo6bG9hZElucHV0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZ1bmN0b3JJbnB1dEN1cnNvcjo6dW5jaGVja2VkTG9hZElucHV0KToKKworICAgICAgICAq
IHJlcGxheS9SZXBsYXlDb250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZXBsYXlDb250cm9sbGVyOjpSZXBsYXlDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
cGxheUNvbnRyb2xsZXI6OnN3aXRjaFNlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGF5
Q29udHJvbGxlcjo6Y3JlYXRlU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYXlDb250
cm9sbGVyOjpjb21wbGV0ZVNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGF5Q29udHJv
bGxlcjo6bG9hZFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGF5Q29udHJvbGxlcjo6
dW5sb2FkU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYXlDb250cm9sbGVyOjpzdGFy
dENhcHR1cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYXlDb250cm9sbGVyOjpzdG9wQ2Fw
dHVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxheUNvbnRyb2xsZXI6OnN0YXJ0UGxheWJh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGF5Q29udHJvbGxlcjo6cGF1c2VQbGF5YmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpSZXBsYXlDb250cm9sbGVyOjpjYW5jZWxQbGF5YmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXBsYXlDb250cm9sbGVyOjpyZXBsYXlUb1Bvc2l0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlcGxheUNvbnRyb2xsZXI6OmZyYW1lRGV0YWNoZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVwbGF5Q29udHJvbGxlcjo6ZnJhbWVOYXZpZ2F0ZWQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVwbGF5Q29udHJvbGxlcjo6bG9hZGVkU2Vzc2lvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZXBsYXlDb250cm9sbGVyOjpsb2FkZWRTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlcGxheUNvbnRyb2xsZXI6OmFjdGl2ZUlucHV0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlcGxheUNvbnRyb2xsZXI6OmRpc3BhdGNoZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGF5
Q29udHJvbGxlcjo6d2lsbERpc3BhdGNoSW5wdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGF5
Q29udHJvbGxlcjo6ZGlkRGlzcGF0Y2hJbnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYXlD
b250cm9sbGVyOjpkaWREaXNwYXRjaEZpbmFsSW5wdXQpOgorICAgICAgICAqIHJlcGxheS9SZXBs
YXlDb250cm9sbGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVwbGF5UG9zaXRpb246
OlJlcGxheVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxheVBvc2l0aW9uOjpvcGVy
YXRvcjwpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGF5UG9zaXRpb246Om9wZXJhdG9yPT0pOgor
CisgICAgICAgICogcmVwbGF5L1JlcGxheUlucHV0Q3JlYXRpb25NZXRob2RzLmNwcDogQWRkZWQu
CisgICAgICAgIFN0YXRpYyBmYWN0b3J5IGltcGxlbWVudGF0aW9ucyBmb3IgaW5wdXRzIGJlbG9u
ZyBoZXJlLgorICAgICAgICAoV2ViQ29yZTo6SW5pdGlhbE5hdmlnYXRpb246OmNyZWF0ZUZyb21Q
YWdlKToKKworICAgICAgICAqIHJlcGxheS9SZXBsYXlJbnB1dERpc3BhdGNoTWV0aG9kcy5jcHA6
IEFkZGVkLgorICAgICAgICBBbGwgZGlzcGF0Y2goKSBpbXBsZW1lbnRhdGlvbnMgZm9yIGdlbmVy
YXRlZCByZXBsYXkgaW5wdXRzIGJlbG9uZyBoZXJlLgorICAgICAgICAoV2ViQ29yZTo6QmVnaW5T
ZWdtZW50U2VudGluZWw6OmRpc3BhdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkVuZFNlZ21lbnRT
ZW50aW5lbDo6ZGlzcGF0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6SW5pdGlhbE5hdmlnYXRpb246
OmRpc3BhdGNoKToKKworICAgICAgICAqIHJlcGxheS9SZXBsYXlJbnB1dFR5cGVzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlcGxheUlucHV0VHlwZXM6OlJlcGxheUlucHV0VHlwZXMpOgorICAg
ICAgICAqIHJlcGxheS9SZXBsYXlJbnB1dFR5cGVzLmg6IERlZmluZSBzdHJpbmdzIGZvciBXZWJD
b3JlIGlucHV0cy4KKworICAgICAgICAqIHJlcGxheS9SZXBsYXlTZXNzaW9uLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZXBsYXlTZXNzaW9uOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVwbGF5U2Vzc2lvbjo6UmVwbGF5U2Vzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZXBsYXlTZXNzaW9uOjp+UmVwbGF5U2Vzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYXlT
ZXNzaW9uOjphcHBlbmRTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxheVNlc3Npb246
Omluc2VydFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGF5U2Vzc2lvbjo6cmVtb3Zl
U2VnbWVudCk6CisgICAgICAgICogcmVwbGF5L1JlcGxheVNlc3Npb24uaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZXBsYXlTZXNzaW9uOjppZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlcGxheVNlc3Npb246OnRpbWVzdGFtcCk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYXlT
ZXNzaW9uOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxheVNlc3Npb246OmF0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlcGxheVNlc3Npb246OmJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlcGxheVNlc3Npb246OmVuZCk6CisKKyAgICAgICAgKiByZXBsYXkvUmVwbGF5U2Vzc2lvblNl
Z21lbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlcGxheVNlc3Npb25TZWdtZW50
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGF5U2Vzc2lvblNlZ21lbnQ6OlJlcGxh
eVNlc3Npb25TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxheVNlc3Npb25TZWdtZW50
Ojp+UmVwbGF5U2Vzc2lvblNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGF5U2Vzc2lv
blNlZ21lbnQ6OmNyZWF0ZUNhcHR1cmluZ0N1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpSZXBs
YXlTZXNzaW9uU2VnbWVudDo6Y3JlYXRlUmVwbGF5aW5nQ3Vyc29yKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlcGxheVNlc3Npb25TZWdtZW50OjpjcmVhdGVGdW5jdG9yQ3Vyc29yKToKKyAgICAgICAg
KiByZXBsYXkvUmVwbGF5U2Vzc2lvblNlZ21lbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSZXBsYXlTZXNzaW9uU2VnbWVudDo6aWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpS
ZXBsYXlTZXNzaW9uU2VnbWVudDo6dGltZXN0YW1wKToKKworICAgICAgICAqIHJlcGxheS9SZXBs
YXlpbmdJbnB1dEN1cnNvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVwbGF5aW5n
SW5wdXRDdXJzb3I6OlJlcGxheWluZ0lucHV0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
cGxheWluZ0lucHV0Q3Vyc29yOjp+UmVwbGF5aW5nSW5wdXRDdXJzb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVwbGF5aW5nSW5wdXRDdXJzb3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXBsYXlpbmdJbnB1dEN1cnNvcjo6c3RvcmVJbnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpSZXBs
YXlpbmdJbnB1dEN1cnNvcjo6bG9hZElucHV0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxheWlu
Z0lucHV0Q3Vyc29yOjp1bmNoZWNrZWRMb2FkSW5wdXQpOgorICAgICAgICAqIHJlcGxheS9SZXBs
YXlpbmdJbnB1dEN1cnNvci5oOiBBZGRlZC4KKworICAgICAgICAqIHJlcGxheS9TZWdtZW50ZWRJ
bnB1dFN0b3JhZ2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnF1ZXVlVHlwZVRvTG9n
UHJlZml4KToKKyAgICAgICAgKFdlYkNvcmU6Ompzb25TdHJpbmdGb3JJbnB1dCk6CisgICAgICAg
IChXZWJDb3JlOjpvZmZzZXRGb3JJbnB1dFF1ZXVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21l
bnRlZElucHV0U3RvcmFnZTo6U2VnbWVudGVkSW5wdXRTdG9yYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNlZ21lbnRlZElucHV0U3RvcmFnZTo6flNlZ21lbnRlZElucHV0U3RvcmFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTZWdtZW50ZWRJbnB1dFN0b3JhZ2U6OmxvYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6U2VnbWVudGVkSW5wdXRTdG9yYWdlOjpzdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpT
ZWdtZW50ZWRJbnB1dFN0b3JhZ2U6OnF1ZXVlU2l6ZSk6CisgICAgICAgICogcmVwbGF5L1NlZ21l
bnRlZElucHV0U3RvcmFnZS5oOiBBZGRlZC4KKworICAgICAgICAqIHJlcGxheS9TZXJpYWxpemF0
aW9uTWV0aG9kcy5jcHA6IEFkZGVkLgorICAgICAgICBTcGVjaWFsaXphdGlvbnMgb2YgRW5jb2Rp
bmdUcmFpdHMgZm9yIFdlYkNvcmUgdHlwZXMgYmVsb25nIGhlcmUuCisKKyAgICAgICAgKEpTQzo6
RW5jb2RpbmdUcmFpdHM8Tm9uZGV0ZXJtaW5pc3RpY0lucHV0QmFzZT46OmVuY29kZVZhbHVlKToK
KyAgICAgICAgKEpTQzo6RW5jb2RpbmdUcmFpdHM8Tm9uZGV0ZXJtaW5pc3RpY0lucHV0QmFzZT46
OmRlY29kZVZhbHVlKToKKyAgICAgICAgKEpTQzo6RW5jb2RpbmdUcmFpdHM8U2VjdXJpdHlPcmln
aW4+OjplbmNvZGVWYWx1ZSk6CisgICAgICAgIChKU0M6OkVuY29kaW5nVHJhaXRzPFNlY3VyaXR5
T3JpZ2luPjo6ZGVjb2RlVmFsdWUpOgorICAgICAgICAoSlNDOjpFbmNvZGluZ1RyYWl0czxVUkw+
OjplbmNvZGVWYWx1ZSk6CisgICAgICAgIChKU0M6OkVuY29kaW5nVHJhaXRzPFVSTD46OmRlY29k
ZVZhbHVlKToKKyAgICAgICAgKiByZXBsYXkvU2VyaWFsaXphdGlvbk1ldGhvZHMuaDogQWRkZWQu
CisgICAgICAgICogcmVwbGF5L1dlYklucHV0cy5qc29uOiBBZGRlZC4KKyAgICAgICAgSW4gdGhp
cyBpbml0YWwgcGF0Y2gsIHdlIGRlZmluZSBCZWdpblNlZ21lbnRTZW50aW5lbCwKKyAgICAgICAg
RW5kU2VnbWVudFNlbnRpbmVsLCBhbmQgSW5pdGlhbE5hdmlnYXRpb24gaW5wdXRzLgorCiAyMDE0
LTAyLTIwICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBNb3Zl
IHRoZSBpbWFnZSBjb250cm9scyBzZXR0aW5nIHRvIFNldHRpbmdzLmluCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IDdmZTEzMmJjMDUyMGY1YmJjZjk1YzE1NGQ3N2UzMjhlYTdkZTAx
YzQuLmNlNDlmYzI2YjRhYjE0YTU4NmEyY2QzMGVkNzRlZGNhM2UxMWJjMzIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC05NDMsNiArOTQzLDggQEAKIAkJOTY5QTA3OUIwRUQxRDNB
RTAwRjFGNjgxIC8qIE9wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTY5QTA3OTUwRUQxRDNBRTAwRjFGNjgxIC8qIE9wY29kZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTk3ODgwMTQwMTQ3MUFE
OTIwMDQxQjAxNiAvKiBKU0RhdGVNYXRoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDk3ODhGQzIyMTQ3MUFEMEMwMDY4Q0UyRCAvKiBKU0RhdGVNYXRo
LmNwcCAqLzsgfTsKIAkJOTc4ODAxNDExNDcxQUQ5MjAwNDFCMDE2IC8qIEpTRGF0ZU1hdGguaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3ODhGQzIzMTQ3
MUFEMEMwMDY4Q0UyRCAvKiBKU0RhdGVNYXRoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJOTkwQTFBMEQxOEFEQTdFOTAwMTgzRkQxIC8qIENvZGVH
ZW5lcmF0b3JSZXBsYXlJbnB1dHMucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5OUU0NUExRDE4QTFCMUU3MDAyNkQ4OEYgLyogQ29kZUdlbmVyYXRvclJl
cGxheUlucHV0cy5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk5OTBBMUEwRTE4QURBN0U5MDAxODNGRDEgLyogQ29kZUdlbmVyYXRvclJlcGxheUlu
cHV0c1RlbXBsYXRlcy5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDk5RTQ1QTFFMThBMUIxRTcwMDI2RDg4RiAvKiBDb2RlR2VuZXJhdG9yUmVwbGF5SW5w
dXRzVGVtcGxhdGVzLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTk5MjhGRjNCMThBQzRBRUMwMEI4Q0YxMiAvKiBKU1JlcGxheUlucHV0cy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OTI4RkYzOTE4
QUM0QUVDMDBCOENGMTIgLyogSlNSZXBsYXlJbnB1dHMuY3BwICovOyB9OwogCQk5OTI4RkYzQzE4
QUM0QUVDMDBCOENGMTIgLyogSlNSZXBsYXlJbnB1dHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5MjhGRjNBMThBQzRBRUMwMEI4Q0YxMiAvKiBKU1Jl
cGxheUlucHV0cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTk5RTQ1QTI0MThBMUIyNTkwMDI2RDg4RiAvKiBFbXB0eUlucHV0Q3Vyc29yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OUU0NUExRjE4QTFC
MjU5MDAyNkQ4OEYgLyogRW1wdHlJbnB1dEN1cnNvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00ODI0LDYgKzQ4MjYsOCBAQAogCQkJCTg2RDNC
MkM0MTAxNTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg2QUREMTQ1MEZEREVBOTgwMDA2RUVDMiAvKiBBUk12N0Fzc2VtYmxlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTVDRUVFMTUxODdGM0JBRDAwRTU1Qzk5IC8qIEluc3BlY3RvckFnZW50LmggaW4g
SGVhZGVycyAqLywKKwkJCQk5OTBBMUEwRDE4QURBN0U5MDAxODNGRDEgLyogQ29kZUdlbmVyYXRv
clJlcGxheUlucHV0cy5weSBpbiBIZWFkZXJzICovLAorCQkJCTk5MEExQTBFMThBREE3RTkwMDE4
M0ZEMSAvKiBDb2RlR2VuZXJhdG9yUmVwbGF5SW5wdXRzVGVtcGxhdGVzLnB5IGluIEhlYWRlcnMg
Ki8sCiAJCQkJMkEzNDNGNzYxOEExNzQ4QjAwMzlCMDg1IC8qIEdDU2VnbWVudGVkQXJyYXkuaCBp
biBIZWFkZXJzICovLAogCQkJCTJBMzQzRjc4MThBMTc0OUQwMDM5QjA4NSAvKiBHQ1NlZ21lbnRl
ZEFycmF5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjVDMDI4NUQxNzE3OTY2ODAwMzUx
RTM1IC8qIEFSTXY3RE9wY29kZS5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvclJlcGxheUlucHV0cy5w
eSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9yUmVw
bGF5SW5wdXRzLnB5CmluZGV4IGUzYzgxOTk2YTE3NjJiZDQ4ZTNlNWFhMTc2ZTNlOTViMTZmZDE5
ZjguLmNkNjUxMDhlMTZjMmVhYjc5ZWUwOWM3ZTI2ZDVhMzMyMTg0Y2YxM2IgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9yUmVwbGF5
SW5wdXRzLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9yUmVwbGF5SW5wdXRzLnB5CkBAIC0xMDMsNiArMTAzLDEwIEBAIEZSQU1FV09SS19D
T05GSUdfTUFQID0gewogICAgICAgICAibmFtZXNwYWNlIjogIiIKICAgICB9LAogCisgICAgIldU
RiI6IHsKKyAgICAgICAgInByZWZpeCI6ICJXVEYiLAorICAgICAgICAibmFtZXNwYWNlIjogIldU
RiIsCisgICAgfSwKICAgICAiSmF2YVNjcmlwdENvcmUiOiB7CiAgICAgICAgICJwcmVmaXgiOiAi
SlMiLAogICAgICAgICAibmFtZXNwYWNlIjogIkpTQyIsCkBAIC0xNjYsNiArMTcwLDkgQEAgY2xh
c3MgRnJhbWV3b3JrOgogICAgICAgICBpZiBmcmFtZXdvcmtTdHJpbmcgPT0gIkdsb2JhbCI6CiAg
ICAgICAgICAgICByZXR1cm4gRnJhbWV3b3Jrcy5HbG9iYWwKIAorICAgICAgICBpZiBmcmFtZXdv
cmtTdHJpbmcgPT0gIldURiI6CisgICAgICAgICAgICByZXR1cm4gRnJhbWV3b3Jrcy5XVEYKKwog
ICAgICAgICBpZiBmcmFtZXdvcmtTdHJpbmcgPT0gIkphdmFTY3JpcHRDb3JlIjoKICAgICAgICAg
ICAgIHJldHVybiBGcmFtZXdvcmtzLkphdmFTY3JpcHRDb3JlCiAKQEAgLTE4MCw2ICsxODcsNyBA
QCBjbGFzcyBGcmFtZXdvcms6CiAKIGNsYXNzIEZyYW1ld29ya3M6CiAgICAgR2xvYmFsID0gRnJh
bWV3b3JrKCJHbG9iYWwiKQorICAgIFdURiA9IEZyYW1ld29yaygiV1RGIikKICAgICBKYXZhU2Ny
aXB0Q29yZSA9IEZyYW1ld29yaygiSmF2YVNjcmlwdENvcmUiKQogICAgIFdlYkNvcmUgPSBGcmFt
ZXdvcmsoIldlYkNvcmUiKQogICAgIFRlc3QgPSBGcmFtZXdvcmsoIlRlc3QiKQpAQCAtNjE2LDEx
ICs2MjQsMTQgQEAgY2xhc3MgR2VuZXJhdG9yOgogICAgICAgICAgICAgaWYgX3R5cGUuZnJhbWV3
b3JrIGlzIEZyYW1ld29ya3MuR2xvYmFsOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAg
ICAgICAgICAjIEZvciBSZWZDb3VudGVkIHR5cGVzLCB3ZSByZXZlcnNlIHdoZW4gdG8gaW5jbHVk
ZSB0aGUgaGVhZGVyIHNvIHRoYXQgdGhlIGRlc3RydWN0b3IgY2FuIGJlCi0gICAgICAgICAgICAj
IHVzZWQgaW4gdGhlIGhlYWRlciBmaWxlLiBFbnVtcyB3aXRoaW4gY2xhc3NlcyBjYW5ub3QgYmUg
Zm9yd2FyZCBkZWNsYXJlZCwgc28gd2UgaW5jbHVkZQotICAgICAgICAgICAgIyBoZWFkZXJzIHdp
dGggdGhlIHJlbGV2YW50IGNsYXNzIGRlY2xhcmF0aW9uLgorICAgICAgICAgICAgIyB1c2VkIGlu
IHRoZSBoZWFkZXIgZmlsZS4KICAgICAgICAgICAgIGluY2x1ZGVfZm9yX2Rlc3RydWN0b3IgPSBf
dHlwZS5tb2RlIGlzIFR5cGVNb2Rlcy5TSEFSRUQKKyAgICAgICAgICAgICMgRW51bXMgd2l0aGlu
IGNsYXNzZXMgY2Fubm90IGJlIGZvcndhcmQgZGVjbGFyZWQsIHNvIHdlIGluY2x1ZGUKKyAgICAg
ICAgICAgICMgaGVhZGVycyB3aXRoIHRoZSByZWxldmFudCBjbGFzcyBkZWNsYXJhdGlvbi4KICAg
ICAgICAgICAgIGluY2x1ZGVfZm9yX2VuY2xvc2luZ19jbGFzcyA9IF90eXBlLmlzX2VudW0oKSBh
bmQgX3R5cGUuZW5jbG9zaW5nX2NsYXNzIGlzIG5vdCBOb25lCi0gICAgICAgICAgICBpZiAobm90
IGluY2x1ZGVzX2Zvcl90eXBlcykgXiAoaW5jbHVkZV9mb3JfZGVzdHJ1Y3RvciBvciBpbmNsdWRl
X2Zvcl9lbmNsb3NpbmdfY2xhc3MpOgorICAgICAgICAgICAgIyBJbmNsdWRlIGhlYWRlcnMgZm9y
IHR5cGVzIGxpa2UgVVJMIGFuZCBTdHJpbmcgd2hpY2ggYXJlIGNvcGllZCwgbm90IG93bmVkIG9y
IHNoYXJlZC4KKyAgICAgICAgICAgIGluY2x1ZGVfZm9yX2NvcHlhYmxlX21lbWJlciA9IF90eXBl
Lm1vZGUgaXMgVHlwZU1vZGVzLkhFQVZZX1NDQUxBUiBvciBfdHlwZS5tb2RlIGlzIFR5cGVNb2Rl
cy5TQ0FMQVIKKyAgICAgICAgICAgIGlmIChub3QgaW5jbHVkZXNfZm9yX3R5cGVzKSBeIChpbmNs
dWRlX2Zvcl9kZXN0cnVjdG9yIG9yIGluY2x1ZGVfZm9yX2VuY2xvc2luZ19jbGFzcyBvciBpbmNs
dWRlX2Zvcl9jb3B5YWJsZV9tZW1iZXIpOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKICAg
ICAgICAgICAgIGlmIHNlbGYudGFyZ2V0X2ZyYW1ld29yayAhPSBfdHlwZS5mcmFtZXdvcms6CkBA
IC02NTQsNiArNjY1LDggQEAgY2xhc3MgR2VuZXJhdG9yOgogICAgICAgICAgICAgICAgIGNvbnRp
bnVlCiAgICAgICAgICAgICBpZiBfdHlwZS5lbmNsb3NpbmdfY2xhc3MgaXMgbm90IE5vbmU6CiAg
ICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIF90eXBlLm1vZGUgPT0gVHlw
ZU1vZGVzLlNDQUxBUiBvciBfdHlwZS5tb2RlID09IFR5cGVNb2Rlcy5IRUFWWV9TQ0FMQVI6Cisg
ICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGlmIF90eXBlLmlzX2VudW0oKToK
ICAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbiA9ICJlbnVtICVzIDogJXM7IiAlIChfdHlwZS50
eXBlX25hbWUoKSwgX3R5cGUudW5kZXJseWluZ19zdG9yYWdlKQogICAgICAgICAgICAgZWxzZToK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2Uv
V2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IGY3ZjRhOGM5MWFkM2VmYTdhNmJhNjY2
ZjZiN2FiMjhmODJkNjJmOGYuLjczMzA4MmMzZGQzOGNiOTkyNmE4NjY5YmQ3YjBlYjYyYjhlM2E3
MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIv
U291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMTEwMSw2ICsxMTAxLDcgQEAg
SU5TUEVDVE9SX0RPTUFJTlMgPSBcCiAgICAgJChXZWJDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wv
TmV0d29yay5qc29uIFwKICAgICAkKFdlYkNvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9QYWdlLmpz
b24gXAogICAgICQoV2ViQ29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL1Byb2ZpbGVyLmpzb24gXAor
ICAgICQoV2ViQ29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL1JlcGxheS5qc29uIFwKICAgICAkKFdl
YkNvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9UaW1lbGluZS5qc29uIFwKICAgICAkKFdlYkNvcmUp
L2luc3BlY3Rvci9wcm90b2NvbC9Xb3JrZXIuanNvbiBcCiAjCkBAIC0xMTQxLDYgKzExNDIsMjIg
QEAgSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVTb3VyY2UuaCA6IEluamVjdGVkU2NyaXB0Q2Fu
dmFzTW9kdWxlU291cmNlLmpzCiAJcGVybCAkKEluc3BlY3RvclNjcmlwdHMpL3h4ZC5wbCBJbmpl
Y3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZV9qcyAuL0luamVjdGVkU2NyaXB0Q2FudmFzTW9k
dWxlU291cmNlLm1pbi5qcyBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZS5oCiAJcm0g
LWYgLi9JbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZS5taW4uanMKIAorIyBXZWIgUmVw
bGF5IGlucHV0cyBnZW5lcmF0b3IKKworSU5QVVRfR0VORVJBVE9SX1NDUklQVFMgPSBcCisgICAg
JChXZWJSZXBsYXlTY3JpcHRzKS9Db2RlR2VuZXJhdG9yUmVwbGF5SW5wdXRzLnB5IFwKKyAgICAk
KFdlYlJlcGxheVNjcmlwdHMpL0NvZGVHZW5lcmF0b3JSZXBsYXlJbnB1dHNUZW1wbGF0ZXMucHkg
XAorIworCitJTlBVVF9HRU5FUkFUT1JfU1BFQ0lGSUNBVElPTlMgPSBcCisJJChXZWJDb3JlKS9y
ZXBsYXkvV2ViSW5wdXRzLmpzb24gXAorIworCithbGwgOiBXZWJSZXBsYXlJbnB1dHMuaAorCitX
ZWJSZXBsYXlJbnB1dHMuaCA6ICQoSU5QVVRfR0VORVJBVE9SX1NQRUNJRklDQVRJT05TKSAkKElO
UFVUX0dFTkVSQVRPUl9TQ1JJUFRTKQorCXB5dGhvbiAkKFdlYlJlcGxheVNjcmlwdHMpL0NvZGVH
ZW5lcmF0b3JSZXBsYXlJbnB1dHMucHkgLS1vdXRwdXREaXIgLiAtLWZyYW1ld29yayBXZWJDb3Jl
ICQoSU5QVVRfR0VORVJBVE9SX1NQRUNJRklDQVRJT05TKQorCiAtaW5jbHVkZSAkKEpTX0RPTV9I
RUFERVJTOi5oPS5kZXApCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9yZXBsYXkvRW5jb2RlZFZhbHVlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9yZXBsYXkvRW5jb2RlZFZhbHVlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNWU3Y2U2MzZjYTlmZDI3YThlZTA5NTIzNGEyYWQ1MTViMDZlZDE0NAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3JlcGxheS9F
bmNvZGVkVmFsdWUuaApAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYgV2ViQ29yZV9GV0RfRW5jb2Rl
ZFZhbHVlX2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfRW5jb2RlZFZhbHVlX2gKKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9FbmNvZGVkVmFsdWUuaD4KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDUxZTA1YmY5OTk3M2Iz
NmNkZjkzNTQzYjBmODIzOTRlNWEwMDU2NTcuLjNiZjVjN2RlOTYwYWExODM1OTVhNTBkZGEzMTZj
ZDY0Nzk1MzJhZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTM0ODIsOCArMzQ4MiwzMyBAQAogCQk5OENFNDMyNjEyOUUwMEJE
MDA1ODIxREMgLyogTGlua0xvYWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5OENFNDMyNTEyOUUwMEJEMDA1ODIxREMgLyogTGlua0xvYWRlci5j
cHAgKi87IH07CiAJCTk4Q0U0MzJBMTI5RTAwRTUwMDU4MjFEQyAvKiBMaW5rTG9hZGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OENFNDMyOTEyOUUw
MEU1MDA1ODIxREMgLyogTGlua0xvYWRlci5oICovOyB9OwogCQk5OEVCMUY5NTEzMTNGRTA1MDBE
MEUxRUEgLyogTm90SW1wbGVtZW50ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk4RUIxRjk0MTMxM0ZFMDUwMEQwRTFFQSAvKiBOb3RJbXBsZW1lbnRl
ZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTk5
MEExOUZEMThBREE0ODQwMDE4M0ZEMSAvKiBBbGxSZXBsYXlJbnB1dHMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5MEExOUVEMThBREE0ODQwMDE4M0ZE
MSAvKiBBbGxSZXBsYXlJbnB1dHMuaCAqLzsgfTsKKwkJOTkwQTE5RkUxOEFEQTQ4NDAwMTgzRkQx
IC8qIEV2ZW50TG9vcElucHV0RGlzcGF0Y2hlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTkwQTE5RUUxOEFEQTQ4NDAwMTgzRkQxIC8qIEV2ZW50TG9v
cElucHV0RGlzcGF0Y2hlci5oICovOyB9OworCQk5OTBBMUEwMTE4QURBNDg0MDAxODNGRDEgLyog
UmVwbGF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTkwQTE5RjExOEFEQTQ4NDAwMTgzRkQxIC8qIFJlcGxheUNvbnRyb2xsZXIuaCAq
LzsgfTsKKwkJOTkwQTFBMDIxOEFEQTQ4NDAwMTgzRkQxIC8qIFJlcGxheUlucHV0Q3JlYXRpb25N
ZXRob2RzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDk5MEExOUYyMThBREE0ODQwMDE4M0ZEMSAvKiBSZXBsYXlJbnB1dENyZWF0aW9uTWV0aG9kcy5j
cHAgKi87IH07CisJCTk5MEExQTAzMThBREE0ODQwMDE4M0ZEMSAvKiBSZXBsYXlJbnB1dERpc3Bh
dGNoTWV0aG9kcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5OTBBMTlGMzE4QURBNDg0MDAxODNGRDEgLyogUmVwbGF5SW5wdXREaXNwYXRjaE1ldGhv
ZHMuY3BwICovOyB9OwogCQk5OTBBMUEwNDE4QURBNDg0MDAxODNGRDEgLyogUmVwbGF5SW5wdXRU
eXBlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
OTBBMTlGNDE4QURBNDg0MDAxODNGRDEgLyogUmVwbGF5SW5wdXRUeXBlcy5jcHAgKi87IH07CiAJ
CTk5MEExQTA1MThBREE0ODQwMDE4M0ZEMSAvKiBSZXBsYXlJbnB1dFR5cGVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OTBBMTlGNTE4QURBNDg0MDAx
ODNGRDEgLyogUmVwbGF5SW5wdXRUeXBlcy5oICovOyB9OworCQk5OTBBMUEwNjE4QURBNDg0MDAx
ODNGRDEgLyogUmVwbGF5U2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTkwQTE5RjYxOEFEQTQ4NDAwMTgzRkQxIC8qIFJlcGxheVNlc3Npb24u
aCAqLzsgfTsKKwkJOTkwQTFBMDcxOEFEQTQ4NDAwMTgzRkQxIC8qIFJlcGxheVNlc3Npb25TZWdt
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OTBB
MTlGNzE4QURBNDg0MDAxODNGRDEgLyogUmVwbGF5U2Vzc2lvblNlZ21lbnQuaCAqLzsgfTsKKwkJ
OTkwQTFBMDgxOEFEQTQ4NDAwMTgzRkQxIC8qIFNlZ21lbnRlZElucHV0U3RvcmFnZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OTBBMTlGODE4QURB
NDg0MDAxODNGRDEgLyogU2VnbWVudGVkSW5wdXRTdG9yYWdlLmNwcCAqLzsgfTsKKwkJOTkwQTFB
MDkxOEFEQTQ4NDAwMTgzRkQxIC8qIFNlZ21lbnRlZElucHV0U3RvcmFnZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTkwQTE5RjkxOEFEQTQ4NDAwMTgz
RkQxIC8qIFNlZ21lbnRlZElucHV0U3RvcmFnZS5oICovOyB9OworCQk5OTBBMUEwQTE4QURBNDg0
MDAxODNGRDEgLyogU2VyaWFsaXphdGlvbk1ldGhvZHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTkwQTE5RkExOEFEQTQ4NDAwMTgzRkQxIC8qIFNl
cmlhbGl6YXRpb25NZXRob2RzLmNwcCAqLzsgfTsKKwkJOTkwQTFBMEIxOEFEQTQ4NDAwMTgzRkQx
IC8qIFNlcmlhbGl6YXRpb25NZXRob2RzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5OTBBMTlGQjE4QURBNDg0MDAxODNGRDEgLyogU2VyaWFsaXphdGlv
bk1ldGhvZHMuaCAqLzsgfTsKKwkJOTkwQTFBMEMxOEFEQTQ4NDAwMTgzRkQxIC8qIFdlYklucHV0
cy5qc29uIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
OTBBMTlGQzE4QURBNDg0MDAxODNGRDEgLyogV2ViSW5wdXRzLmpzb24gKi87IH07CisJCTk5MEEx
QTExMThBRURERDQwMDE4M0ZEMSAvKiBDYXB0dXJpbmdJbnB1dEN1cnNvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTkwQTFBMEYxOEFFRERENDAwMTgz
RkQxIC8qIENhcHR1cmluZ0lucHV0Q3Vyc29yLmggKi87IH07CisJCTk5MEExQTEyMThBRURERDQw
MDE4M0ZEMSAvKiBSZXBsYXlpbmdJbnB1dEN1cnNvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTkwQTFBMTAxOEFFRERENDAwMTgzRkQxIC8qIFJlcGxh
eWluZ0lucHV0Q3Vyc29yLmggKi87IH07CisJCTk5MEExQTE0MThBRUYzMjQwMDE4M0ZEMSAvKiBF
dmVudExvb3BJbnB1dERpc3BhdGNoZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTkwQTFBMTMxOEFFRjMyNDAwMTgzRkQxIC8qIEV2ZW50TG9vcElu
cHV0RGlzcGF0Y2hlci5jcHAgKi87IH07CisJCTk5MEExQTE3MThCM0NBOEQwMDE4M0ZEMSAvKiBJ
bnNwZWN0b3JSZXBsYXlBZ2VudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5OTBBMUExNTE4QjNDQThEMDAxODNGRDEgLyogSW5zcGVjdG9yUmVwbGF5
QWdlbnQuY3BwICovOyB9OworCQk5OTBBMUExODE4QjNDQThFMDAxODNGRDEgLyogSW5zcGVjdG9y
UmVwbGF5QWdlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDk5MEExQTE2MThCM0NBOEQwMDE4M0ZEMSAvKiBJbnNwZWN0b3JSZXBsYXlBZ2VudC5oICov
OyB9OworCQk5OTBBMUExQTE4QjNEQUVDMDAxODNGRDEgLyogRnVuY3RvcklucHV0Q3Vyc29yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OTBBMUExOTE4
QjNEQUVDMDAxODNGRDEgLyogRnVuY3RvcklucHV0Q3Vyc29yLmggKi87IH07CisJCTk5MEExQTFE
MThCM0UyNjUwMDE4M0ZEMSAvKiBXZWJSZXBsYXlJbnB1dHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTkwQTFBMUIxOEIzRTI2NTAwMTgzRkQxIC8q
IFdlYlJlcGxheUlucHV0cy5jcHAgKi87IH07CisJCTk5MEExQTFFMThCM0UyNjUwMDE4M0ZEMSAv
KiBXZWJSZXBsYXlJbnB1dHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDk5MEExQTFDMThCM0UyNjUwMDE4M0ZEMSAvKiBXZWJSZXBsYXlJbnB1dHMuaCAq
LzsgfTsKKwkJOTkwQTFBMjAxOEI0MUExOTAwMTgzRkQxIC8qIFJlcGxheVNlc3Npb25TZWdtZW50
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5MEEx
QTFGMThCNDFBMTkwMDE4M0ZEMSAvKiBSZXBsYXlTZXNzaW9uU2VnbWVudC5jcHAgKi87IH07CisJ
CTk5MEExQTIyMThCNDRDRDgwMDE4M0ZEMSAvKiBSZXBsYXlTZXNzaW9uLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5MEExQTIxMThCNDRDRDgwMDE4
M0ZEMSAvKiBSZXBsYXlTZXNzaW9uLmNwcCAqLzsgfTsKKwkJOTkwQTFBMjQxOEI1NjVGNDAwMTgz
RkQxIC8qIFJlcGxheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTkwQTFBMjMxOEI1NjVGNDAwMTgzRkQxIC8qIFJlcGxheUNvbnRy
b2xsZXIuY3BwICovOyB9OworCQk5OTBBMUEyNzE4QjU2RDcwMDAxODNGRDEgLyogQ2FwdHVyaW5n
SW5wdXRDdXJzb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTkwQTFBMjUxOEI1NkQ3MDAwMTgzRkQxIC8qIENhcHR1cmluZ0lucHV0Q3Vyc29yLmNw
cCAqLzsgfTsKKwkJOTkwQTFBMjgxOEI1NkQ3MDAwMTgzRkQxIC8qIFJlcGxheWluZ0lucHV0Q3Vy
c29yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5
MEExQTI2MThCNTZENzAwMDE4M0ZEMSAvKiBSZXBsYXlpbmdJbnB1dEN1cnNvci5jcHAgKi87IH07
CiAJCTk5RTQ1QTE3MThBMDYzQkUwMDI2RDg4RiAvKiBFdmVudExvb3BJbnB1dC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTlFNDVBMTYxOEEwNjNCRTAw
MjZEODhGIC8qIEV2ZW50TG9vcElucHV0LmggKi87IH07CiAJCTlBMTE0MjA0MTgzMkQxMzUwMDBC
QjhBRCAvKiBWYWx1ZVRvU3RyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5QTExNDIwMzE4MzJEMTM0MDAwQkI4QUQgLyogVmFsdWVUb1N0cmluZy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTlBMUI2
Rjk3MTU4ODY5QzgwMDExQThDNCAvKiBKU0RPTVN0cmluZ0xpc3RDdXN0b20uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUExQjZGOTYxNTg4NjlDODAw
MTFBOEM0IC8qIEpTRE9NU3RyaW5nTGlzdEN1c3RvbS5jcHAgKi87IH07CkBAIC0xMDQzNSw4ICsx
MDQ2MCwzMyBAQAogCQk5OENFNDMyNTEyOUUwMEJEMDA1ODIxREMgLyogTGlua0xvYWRlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMaW5rTG9hZGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOThDRTQzMjkxMjlFMDBFNTAwNTgyMURDIC8qIExp
bmtMb2FkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGlua0xvYWRlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OEVCMUY5NDEzMTNGRTA1MDBEMEUxRUEg
LyogTm90SW1wbGVtZW50ZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm90
SW1wbGVtZW50ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTkwQTE5RUQxOEFE
QTQ4NDAwMTgzRkQxIC8qIEFsbFJlcGxheUlucHV0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBbGxSZXBsYXlJbnB1dHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJOTkwQTE5RUUxOEFEQTQ4NDAwMTgzRkQxIC8qIEV2ZW50TG9vcElucHV0RGlzcGF0Y2hlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFdmVudExvb3BJbnB1dERpc3BhdGNo
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTkwQTE5RjExOEFEQTQ4NDAwMTgz
RkQxIC8qIFJlcGxheUNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVwbGF5Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5OTBB
MTlGMjE4QURBNDg0MDAxODNGRDEgLyogUmVwbGF5SW5wdXRDcmVhdGlvbk1ldGhvZHMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVwbGF5SW5wdXRDcmVhdGlvbk1l
dGhvZHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5OTBBMTlGMzE4QURBNDg0
MDAxODNGRDEgLyogUmVwbGF5SW5wdXREaXNwYXRjaE1ldGhvZHMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVwbGF5SW5wdXREaXNwYXRjaE1ldGhvZHMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTBBMTlGNDE4QURBNDg0MDAxODNGRDEgLyog
UmVwbGF5SW5wdXRUeXBlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBSZXBsYXlJbnB1dFR5cGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTkw
QTE5RjUxOEFEQTQ4NDAwMTgzRkQxIC8qIFJlcGxheUlucHV0VHlwZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVwbGF5SW5wdXRUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk5OTBBMTlGNjE4QURBNDg0MDAxODNGRDEgLyogUmVwbGF5U2Vzc2lvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXBsYXlTZXNzaW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk5MEExOUY3MThBREE0ODQwMDE4M0ZEMSAvKiBSZXBs
YXlTZXNzaW9uU2VnbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXBs
YXlTZXNzaW9uU2VnbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5OTBBMTlG
ODE4QURBNDg0MDAxODNGRDEgLyogU2VnbWVudGVkSW5wdXRTdG9yYWdlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlZ21lbnRlZElucHV0U3RvcmFnZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk5MEExOUY5MThBREE0ODQwMDE4M0ZEMSAvKiBT
ZWdtZW50ZWRJbnB1dFN0b3JhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U2VnbWVudGVkSW5wdXRTdG9yYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk5
MEExOUZBMThBREE0ODQwMDE4M0ZEMSAvKiBTZXJpYWxpemF0aW9uTWV0aG9kcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZXJpYWxpemF0aW9uTWV0aG9kcy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk5MEExOUZCMThBREE0ODQwMDE4M0ZEMSAv
KiBTZXJpYWxpemF0aW9uTWV0aG9kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTZXJpYWxpemF0aW9uTWV0aG9kcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5
OTBBMTlGQzE4QURBNDg0MDAxODNGRDEgLyogV2ViSW5wdXRzLmpzb24gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
Lmpzb247IHBhdGggPSBXZWJJbnB1dHMuanNvbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJOTkwQTFBMEYxOEFFRERENDAwMTgzRkQxIC8qIENhcHR1cmluZ0lucHV0Q3Vyc29yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhcHR1cmluZ0lucHV0Q3Vyc29yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk5MEExQTEwMThBRURERDQwMDE4M0ZEMSAvKiBS
ZXBsYXlpbmdJbnB1dEN1cnNvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZXBsYXlpbmdJbnB1dEN1cnNvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5OTBB
MUExMzE4QUVGMzI0MDAxODNGRDEgLyogRXZlbnRMb29wSW5wdXREaXNwYXRjaGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV2ZW50TG9vcElucHV0RGlzcGF0Y2hl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk5MEExQTE1MThCM0NBOEQwMDE4
M0ZEMSAvKiBJbnNwZWN0b3JSZXBsYXlBZ2VudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBJbnNwZWN0b3JSZXBsYXlBZ2VudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTk5MEExQTE2MThCM0NBOEQwMDE4M0ZEMSAvKiBJbnNwZWN0b3JSZXBsYXlB
Z2VudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JSZXBsYXlB
Z2VudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5OTBBMUExOTE4QjNEQUVDMDAx
ODNGRDEgLyogRnVuY3RvcklucHV0Q3Vyc29yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZ1bmN0b3JJbnB1dEN1cnNvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk5OTBBMUExQjE4QjNFMjY1MDAxODNGRDEgLyogV2ViUmVwbGF5SW5wdXRzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlJlcGxheUlucHV0cy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk5MEExQTFDMThCM0UyNjUwMDE4M0ZEMSAvKiBXZWJS
ZXBsYXlJbnB1dHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUmVwbGF5
SW5wdXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk5MEExQTFGMThCNDFBMTkw
MDE4M0ZEMSAvKiBSZXBsYXlTZXNzaW9uU2VnbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBSZXBsYXlTZXNzaW9uU2VnbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTk5MEExQTIxMThCNDRDRDgwMDE4M0ZEMSAvKiBSZXBsYXlTZXNzaW9u
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlcGxheVNlc3Npb24u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5OTBBMUEyMzE4QjU2NUY0MDAxODNG
RDEgLyogUmVwbGF5Q29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBSZXBsYXlDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJOTkwQTFBMjUxOEI1NkQ3MDAwMTgzRkQxIC8qIENhcHR1cmluZ0lucHV0Q3Vyc29yLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhcHR1cmluZ0lucHV0Q3Vyc29y
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTkwQTFBMjYxOEI1NkQ3MDAwMTgz
RkQxIC8qIFJlcGxheWluZ0lucHV0Q3Vyc29yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFJlcGxheWluZ0lucHV0Q3Vyc29yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOTlFNDVBMTYxOEEwNjNCRTAwMjZEODhGIC8qIEV2ZW50TG9vcElucHV0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV2ZW50TG9vcElucHV0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlBMTE0MjAzMTgzMkQxMzQwMDBCQjhBRCAvKiBWYWx1
ZVRvU3RyaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhbHVlVG9TdHJp
bmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUExQjZGOTYxNTg4NjlDODAwMTFB
OEM0IC8qIEpTRE9NU3RyaW5nTGlzdEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU0RPTVN0cmluZ0xpc3RDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTQ4NDYsNiArMTQ4OTYsOCBAQAogCQkJCTRGNkZERDYzMTM0MURFREQw
MDFGOEVFMyAvKiBJbnNwZWN0b3JQYWdlQWdlbnQuaCAqLywKIAkJCQk5RjBENkIyQzEyMUJGRUJB
MDA2QzAyODggLyogSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAgKi8sCiAJCQkJOUYwRDZCMkQx
MjFCRkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdlbnQuaCAqLywKKwkJCQk5OTBB
MUExNTE4QjNDQThEMDAxODNGRDEgLyogSW5zcGVjdG9yUmVwbGF5QWdlbnQuY3BwICovLAorCQkJ
CTk5MEExQTE2MThCM0NBOEQwMDE4M0ZEMSAvKiBJbnNwZWN0b3JSZXBsYXlBZ2VudC5oICovLAog
CQkJCTgyQUIxNzcxMTI1QzgyNjcwMEM1MDY5RCAvKiBJbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNw
cCAqLywKIAkJCQk4MkFCMTc3MjEyNUM4MjY3MDBDNTA2OUQgLyogSW5zcGVjdG9yUmVzb3VyY2VB
Z2VudC5oICovLAogCQkJCTgyQUIxNzZGMTI1QzgyNjcwMEM1MDY5RCAvKiBJbnNwZWN0b3JTdHls
ZVNoZWV0LmNwcCAqLywKQEAgLTE1NzkzLDYgKzE1ODQ1LDggQEAKIAkJCQk2NTY1ODFBRjA5RDE0
RUU2MDAwRTYxRDcgLyogVXNlckFnZW50U3R5bGVTaGVldHNEYXRhLmNwcCAqLywKIAkJCQkxQTE0
MTRCMzEzQTBGMDUwMDAxOTk5NkMgLyogV2ViS2l0Rm9udEZhbWlseU5hbWVzLmNwcCAqLywKIAkJ
CQkxQTE0MTRCNDEzQTBGMDUwMDAxOTk5NkMgLyogV2ViS2l0Rm9udEZhbWlseU5hbWVzLmggKi8s
CisJCQkJOTkwQTFBMUIxOEIzRTI2NTAwMTgzRkQxIC8qIFdlYlJlcGxheUlucHV0cy5jcHAgKi8s
CisJCQkJOTkwQTFBMUMxOEIzRTI2NTAwMTgzRkQxIC8qIFdlYlJlcGxheUlucHV0cy5oICovLAog
CQkJCTY1NjU4MUVBMDlEMTUwOEQwMDBFNjFENyAvKiBYTGlua05hbWVzLmNwcCAqLywKIAkJCQk2
NTY1ODFFQjA5RDE1MDhEMDAwRTYxRDcgLyogWExpbmtOYW1lcy5oICovLAogCQkJCUE4MzNDODBB
MEEyQ0YyNTYwMEQ1NzY2NCAvKiBYTUxOYW1lcy5jcHAgKi8sCkBAIC0xNzgzOCw5ICsxNzg5Miwz
MCBAQAogCQk5OUU0NUExMzE4QTAyMTc2MDAyNkQ4OEYgLyogcmVwbGF5ICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk5OTBBMTlFRDE4QURBNDg0MDAxODNG
RDEgLyogQWxsUmVwbGF5SW5wdXRzLmggKi8sCisJCQkJOTkwQTFBMjUxOEI1NkQ3MDAwMTgzRkQx
IC8qIENhcHR1cmluZ0lucHV0Q3Vyc29yLmNwcCAqLywKKwkJCQk5OTBBMUEwRjE4QUVEREQ0MDAx
ODNGRDEgLyogQ2FwdHVyaW5nSW5wdXRDdXJzb3IuaCAqLywKIAkJCQk5OUU0NUExNjE4QTA2M0JF
MDAyNkQ4OEYgLyogRXZlbnRMb29wSW5wdXQuaCAqLywKKwkJCQk5OTBBMUExMzE4QUVGMzI0MDAx
ODNGRDEgLyogRXZlbnRMb29wSW5wdXREaXNwYXRjaGVyLmNwcCAqLywKKwkJCQk5OTBBMTlFRTE4
QURBNDg0MDAxODNGRDEgLyogRXZlbnRMb29wSW5wdXREaXNwYXRjaGVyLmggKi8sCisJCQkJOTkw
QTFBMTkxOEIzREFFQzAwMTgzRkQxIC8qIEZ1bmN0b3JJbnB1dEN1cnNvci5oICovLAorCQkJCTk5
MEExQTIzMThCNTY1RjQwMDE4M0ZEMSAvKiBSZXBsYXlDb250cm9sbGVyLmNwcCAqLywKKwkJCQk5
OTBBMTlGMTE4QURBNDg0MDAxODNGRDEgLyogUmVwbGF5Q29udHJvbGxlci5oICovLAorCQkJCTk5
MEExQTI2MThCNTZENzAwMDE4M0ZEMSAvKiBSZXBsYXlpbmdJbnB1dEN1cnNvci5jcHAgKi8sCisJ
CQkJOTkwQTFBMTAxOEFFRERENDAwMTgzRkQxIC8qIFJlcGxheWluZ0lucHV0Q3Vyc29yLmggKi8s
CisJCQkJOTkwQTE5RjIxOEFEQTQ4NDAwMTgzRkQxIC8qIFJlcGxheUlucHV0Q3JlYXRpb25NZXRo
b2RzLmNwcCAqLywKKwkJCQk5OTBBMTlGMzE4QURBNDg0MDAxODNGRDEgLyogUmVwbGF5SW5wdXRE
aXNwYXRjaE1ldGhvZHMuY3BwICovLAogCQkJCTk5MEExOUY0MThBREE0ODQwMDE4M0ZEMSAvKiBS
ZXBsYXlJbnB1dFR5cGVzLmNwcCAqLywKIAkJCQk5OTBBMTlGNTE4QURBNDg0MDAxODNGRDEgLyog
UmVwbGF5SW5wdXRUeXBlcy5oICovLAorCQkJCTk5MEExQTIxMThCNDRDRDgwMDE4M0ZEMSAvKiBS
ZXBsYXlTZXNzaW9uLmNwcCAqLywKKwkJCQk5OTBBMTlGNjE4QURBNDg0MDAxODNGRDEgLyogUmVw
bGF5U2Vzc2lvbi5oICovLAorCQkJCTk5MEExQTFGMThCNDFBMTkwMDE4M0ZEMSAvKiBSZXBsYXlT
ZXNzaW9uU2VnbWVudC5jcHAgKi8sCisJCQkJOTkwQTE5RjcxOEFEQTQ4NDAwMTgzRkQxIC8qIFJl
cGxheVNlc3Npb25TZWdtZW50LmggKi8sCisJCQkJOTkwQTE5RjgxOEFEQTQ4NDAwMTgzRkQxIC8q
IFNlZ21lbnRlZElucHV0U3RvcmFnZS5jcHAgKi8sCisJCQkJOTkwQTE5RjkxOEFEQTQ4NDAwMTgz
RkQxIC8qIFNlZ21lbnRlZElucHV0U3RvcmFnZS5oICovLAorCQkJCTk5MEExOUZBMThBREE0ODQw
MDE4M0ZEMSAvKiBTZXJpYWxpemF0aW9uTWV0aG9kcy5jcHAgKi8sCisJCQkJOTkwQTE5RkIxOEFE
QTQ4NDAwMTgzRkQxIC8qIFNlcmlhbGl6YXRpb25NZXRob2RzLmggKi8sCisJCQkJOTkwQTE5RkMx
OEFEQTQ4NDAwMTgzRkQxIC8qIFdlYklucHV0cy5qc29uICovLAogCQkJKTsKIAkJCXBhdGggPSBy
ZXBsYXk7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjI2ODQsNiArMjI3NTksNyBA
QAogCQkJCUUxQ0RFOTIyMTUwMTkxNjkwMDg2MkNDNSAvKiBBc3luY0ZpbGVTdHJlYW0uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTI2QzE1Q0Y3MTg1N0UxNUUwMEYxNUMwMyAvKiBSZXNvdXJjZUhhbmRs
ZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlLmggaW4gSGVhZGVycyAq
LywKIAkJCQk3QzUzNDNGRDE3Qjc0QjYzMDA0MjMyRjAgLyogSlNNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk5OTBBMUEwOTE4QURBNDg0MDAxODNGRDEgLyogU2Vn
bWVudGVkSW5wdXRTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzN0M2MUYwMTEyMDk1Qzg3
MDA3QTNDNjcgLyogQXRvbWljU3RyaW5nS2V5ZWRNUlVDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRTFGRjhGNjAxODA3NDQyMTAwMTMyNjc0IC8qIFN1YnRsZUNyeXB0by5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQThDNEE4MEQwOUQ1NjMyNzAwMDNBQzhEIC8qIEF0dHIuaCBpbiBIZWFkZXJzICov
LApAQCAtMjM0NzQsNiArMjM1NTAsNyBAQAogCQkJCTk3QjM4RTI3MTUxQzQyNzEwMDQ2MjJFOSAv
KiBET01XaW5kb3dOb3RpZmljYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUFCQjVCOTE4
NkQwRUQxMDA4MzkxQTEgLyogSURCT2JqZWN0U3RvcmVNZXRhZGF0YS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTdEMkFEMDQxNEI4MjNBNjAwOTNERjMyIC8qIERPTVdpbmRvd1Byb3BlcnR5LmggaW4g
SGVhZGVycyAqLywKKwkJCQk5OTBBMTlGRTE4QURBNDg0MDAxODNGRDEgLyogRXZlbnRMb29wSW5w
dXREaXNwYXRjaGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzc5QkYwRTE4NDUzMTY4MDAwQjZB
RTcgLyogSFRNTE1lZGlhRWxlbWVudE1lZGlhU3RyZWFtLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
OUY2MEIxMTE1N0Y2ODZFMDA3NUUxNTcgLyogRE9NV2luZG93UXVvdGEuaCBpbiBIZWFkZXJzICov
LAogCQkJCUFBMkE1QUQ2MTZBNDg2MTYwMDk3NUEyNSAvKiBET01XaW5kb3dTcGVlY2hTeW50aGVz
aXMuaCBpbiBIZWFkZXJzICovLApAQCAtMjM0OTUsNiArMjM1NzIsNyBAQAogCQkJCTgxRjY1RkY2
MTM3ODhGQUEwMEZGNkYyRCAvKiBEcmFnU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5ODc3
MERDMTI0MkM1MzUwMDIyMjZCQSAvKiBEcmF3aW5nQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlFMUJBNjZGMTE3NDJCRDg2MDBDMjAyNTEgLyogRHluYW1pY0xpbmtlckludGVycG9zaW5nLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk5OTBBMUExRTE4QjNFMjY1MDAxODNGRDEgLyogV2ViUmVwbGF5
SW5wdXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDZFRDJDODEzNkI4RTY2MDAzQ0YwNzIgLyog
RHluYW1pY3NDb21wcmVzc29yLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDUzNzM1NzEzN0I2NTNC
MDAwMDhEQ0UgLyogRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlGRDZFRDJDNDEzNkI4RTQyMDAzQ0YwNzIgLyogRHluYW1pY3NDb21wcmVzc29yTm9kZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0yMzU2Nyw2ICsyMzY0NSw3IEBACiAJCQkJMDc4RTA5MjUxN0QxNEQx
QzAwNDIwQUExIC8qIFJUQ1BlZXJDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDgw
MTk1NTEwOEJBRkIzMDBDQjJCMUYgLyogRkVHYXVzc2lhbkJsdXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTg0NzMwRDgxMTI0OEYwQjMwMEQzQTlDOSAvKiBGRUxpZ2h0aW5nLmggaW4gSGVhZGVycyAq
LywKKwkJCQk5OTBBMUEwMTE4QURBNDg0MDAxODNGRDEgLyogUmVwbGF5Q29udHJvbGxlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODQ3MzBEODMxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFTWVyZ2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTg0NzMwRDg1MTI0OEYwQjMwMEQzQTlDOSAvKiBGRU1vcnBob2xv
Z3kuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0NzMwRDg3MTI0OEYwQjMwMEQzQTlDOSAvKiBGRU9m
ZnNldC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMzcyMiw2ICsyMzgwMSw3IEBACiAJCQkJOTMwOTA4
OTEwQUY3RURFNDAwODFERjAxIC8qIEhpdFRlc3RSZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5MzA3RjFEODBBRjJENTkwMDBEQkEzMUEgLyogSGl0VGVzdFJlc3VsdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTE0ODMyQ0YxODdGNjg0NzAwREE2M0E2IC8qIFdlYkNvcmVUaHJlYWRTeXN0ZW1J
bnRlcmZhY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTk5MEExQTEyMThBRURERDQwMDE4M0ZEMSAv
KiBSZXBsYXlpbmdJbnB1dEN1cnNvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMzQkMyOUMwRTkx
QUIwRjAwODM1NTg4IC8qIEhvc3RXaW5kb3cuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE2MDk5
MTJCMDI2RjcwMEMxQTM1OSAvKiBIUlRGRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUZE
MzE2MDlCMTJCMDI2RjcwMEMxQTM1OSAvKiBIUlRGRGF0YWJhc2VMb2FkZXIuaCBpbiBIZWFkZXJz
ICovLApAQCAtMjM3ODQsNiArMjM4NjQsNyBAQAogCQkJCUE4NzFERTJBMEExNTJBQzgwMEIxMkE2
OCAvKiBIVE1MSUZyYW1lRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThFQTdEMkQwQTE5
Mzg1NTAwQThFRjVGIC8qIEhUTUxJbWFnZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
RUE3RDJCMEExOTM4NTUwMEE4RUY1RiAvKiBIVE1MSW1hZ2VMb2FkZXIuaCBpbiBIZWFkZXJzICov
LAorCQkJCTk5MEExQTE4MThCM0NBOEUwMDE4M0ZEMSAvKiBJbnNwZWN0b3JSZXBsYXlBZ2VudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTgxMzY5Q0MwOTczNzRGNjAwRDc0NDYzIC8qIEhUTUxJbnB1
dEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzRFNDEwMTg3RjgyRTEwMDQ1ODgyQyAv
KiBTY3JvbGxpbmdUcmVlSU9TLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0JDODQ5QjEyMzcwQTRC
MDAwQzYxNjEgLyogSFRNTElucHV0U3RyZWFtLmggaW4gSGVhZGVycyAqLywKQEAgLTIzODgwLDYg
KzIzOTYxLDcgQEAKIAkJCQlDMEMwNTRDRDExMThDOEU0MDBDRTI2MzYgLyogSURMUGFyc2VyLnBt
IGluIEhlYWRlcnMgKi8sCiAJCQkJQzNDRjE3QTUxNUIwMDYzRjAwMjc2RDM5IC8qIElkVGFyZ2V0
T2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUMzQ0YxN0E3MTVCMDA2M0YwMDI3NkQzOSAv
KiBJZFRhcmdldE9ic2VydmVyUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovLAorCQkJCTk5MEExOUZE
MThBREE0ODQwMDE4M0ZEMSAvKiBBbGxSZXBsYXlJbnB1dHMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CThBQjRCQzc3MTI2RkRCNzEwMERFQjcyNyAvKiBJZ25vcmVEZXN0cnVjdGl2ZVdyaXRlQ291bnRJ
bmNyZW1lbnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjI3NTM1NzAwQjA1MzgxNDAwMkNFNjRG
IC8qIEltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkExMEI5MjBCMzgxOEJEMDAwOTlBQTQg
LyogSW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjQyNjcsNiArMjQzNDksNyBAQAog
CQkJCThBOUE1ODc1MTFFODRDODEwMDhBQ0ZEMSAvKiBKU1BlcmZvcm1hbmNlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4QTlBNTg3MTExRTg0QzM2MDA4QUNGRDEgLyogSlNQZXJmb3JtYW5jZU5hdmln
YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCThBOUE1ODg4MTFFODRGMzcwMDhBQ0ZEMSAvKiBK
U1BlcmZvcm1hbmNlVGltaW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQk5OTBBMUEwNzE4QURBNDg0
MDAxODNGRDEgLyogUmVwbGF5U2Vzc2lvblNlZ21lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUZE
RUE2MjQ3MTUyMTAyRkMwMDQ3OURGMCAvKiBKU1BlcmlvZGljV2F2ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTNCNzBENkMwOUVCMEM3QzAwOUQ4NDY4IC8qIEpTUGx1Z2luRWxlbWVudEZ1bmN0aW9u
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4OUYwMUUxMEIzN0JEOTAwRjNDNzM5IC8qIEpTUG9w
U3RhdGVFdmVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNDQyNCw2ICsyNDUwNyw3IEBACiAJCQkJ
QjJGQTNEQ0IwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNT
bW9vdGhBYnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyRkEzRENEMEFCNzVBNkYwMDBFNUFDNCAv
KiBKU1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCMkZBM0RDRjBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdQYXRoU2VnTGluZXRvQWJzLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk5OTBBMUEwQjE4QURBNDg0MDAxODNGRDEgLyogU2VyaWFsaXph
dGlvbk1ldGhvZHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyRkEzREQxMEFCNzVBNkYwMDBFNUFD
NCAvKiBKU1NWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCMkZBM0REMzBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRh
bFJlbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE2NjBBQjkxODI4QkI4MjAwMDc0Q0FEIC8qIElE
QkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNDQ0Niw2ICsyNDUz
MCw3IEBACiAJCQkJQjJGQTNERUEwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNERUMwQUI3NUE2RjAwMEU1QUM0IC8q
IEpTU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTQyQTc5
MzBBRTVDOTNGMDBERjU4REYgLyogSlNTVkdSZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQk5OTBB
MUEwNjE4QURBNDg0MDAxODNGRDEgLyogUmVwbGF5U2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjJGQTNERUUwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUmVjdEVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUIyRkEzREYxMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1JlbmRlcmluZ0lu
dGVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNERjMwQUI3NUE2RjAwMEU1QUM0IC8qIEpT
U1ZHU2NyaXB0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNDgwMyw2ICsyNDg4OCw3IEBA
CiAJCQkJNTE4ODlGMEMxNTU0QUYzRDAwNDQyN0Y3IC8qIFBERkRvY3VtZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCMjc1MzU2NTBCMDUzODE0MDAyQ0U2NEYgLyogUERGRG9jdW1lbnRJbWFnZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOEE3Q0M5NkIxMjA3NkQ3MzAwMUQ0NTg4IC8qIFBlbmRpbmdT
Y3JpcHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTk5MEExQTFBMThCM0RBRUMwMDE4M0ZEMSAvKiBG
dW5jdG9ySW5wdXRDdXJzb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3MDM2M0U2MTgxQTFDREMw
MEMwNzRBNSAvKiBBVlZpZGVvQ2FwdHVyZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOEE4
NDREMDUxMUQzQzE4RTAwMTQwNjVDIC8qIFBlcmZvcm1hbmNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwNzk2OURCMDE3RDE0MTUxMDA3RkY4NDIgLyogSlNSVENEVE1GU2VuZGVyLmggaW4gSGVhZGVy
cyAqLywKQEAgLTI1OTA0LDYgKzI1OTkwLDcgQEAKIAkJCQkwNzNCRTM0RDE3RDE3RTdBMDAyQkQ0
MzEgLyogSlNOYXZpZ2F0b3JVc2VyTWVkaWFTdWNjZXNzQ2FsbGJhY2suaCBpbiBIZWFkZXJzICov
LAogCQkJCTFBQjdGQzY5MEE4QjkyRUMwMEQ5RDM3QiAvKiBYUGF0aEV2YWx1YXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkM2MERBNUIwRDJBMzFGNzAwQjk5MThGIC8qIFhQYXRoRXhjZXB0aW9u
LmggaW4gSGVhZGVycyAqLywKKwkJCQk5OTBBMUExMTE4QUVEREQ0MDAxODNGRDEgLyogQ2FwdHVy
aW5nSW5wdXRDdXJzb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQjdGQzZDMEE4QjkyRUMwMEQ5
RDM3QiAvKiBYUGF0aEV4cHJlc3Npb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQjdGQzZGMEE4
QjkyRUMwMEQ5RDM3QiAvKiBYUGF0aEV4cHJlc3Npb25Ob2RlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQUI3RkM3MTBBOEI5MkVDMDBEOUQzN0IgLyogWFBhdGhGdW5jdGlvbnMuaCBpbiBIZWFkZXJz
ICovLApAQCAtMjYxMjcsNiArMjYyMTQsNyBAQAogCQkJCTQ2RjlENURGMEIwRDYwMTcwMDI4RUUz
NiAvKiBwcm9ncmVzc0N1cnNvci5wbmcgaW4gUmVzb3VyY2VzICovLAogCQkJCTg1MTM2Q0E0MEFF
RDY2NTkwMEY5MEEzRCAvKiBzb3V0aEVhc3RSZXNpemVDdXJzb3IucG5nIGluIFJlc291cmNlcyAq
LywKIAkJCQk4NTEzNkNBNTBBRUQ2NjU5MDBGOTBBM0QgLyogc291dGhSZXNpemVDdXJzb3IucG5n
IGluIFJlc291cmNlcyAqLywKKwkJCQk5OTBBMUEwQzE4QURBNDg0MDAxODNGRDEgLyogV2ViSW5w
dXRzLmpzb24gaW4gUmVzb3VyY2VzICovLAogCQkJCTg1MTM2Q0E2MEFFRDY2NTkwMEY5MEEzRCAv
KiBzb3V0aFdlc3RSZXNpemVDdXJzb3IucG5nIGluIFJlc291cmNlcyAqLywKIAkJCQk5MzE1M0JE
QzE0MTk1OUJDMDBGQ0Y1QkUgLyogdGV4dEFyZWFSZXNpemVDb3JuZXIucG5nIGluIFJlc291cmNl
cyAqLywKIAkJCQk5MzcwOTE4RDE0MTZEODZCMDA0NzczMzMgLyogdGV4dEFyZWFSZXNpemVDb3Ju
ZXJAMngucG5nIGluIFJlc291cmNlcyAqLywKQEAgLTI2MjQ1LDcgKzI2MzMzLDcgQEAKIAkJCSk7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJCXNoZWxsUGF0
aCA9IC9iaW4vc2g7Ci0JCQlzaGVsbFNjcmlwdCA9ICJta2RpciAtcCBcIiR7QlVJTFRfUFJPRFVD
VFNfRElSfS9EZXJpdmVkU291cmNlcy9XZWJDb3JlXCJcbmNkIFwiJHtCVUlMVF9QUk9EVUNUU19E
SVJ9L0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmVcIlxuXG4vYmluL2xuIC1zZmggXCIke1NSQ1JPT1R9
XCIgV2ViQ29yZVxuZXhwb3J0IFdlYkNvcmU9XCJXZWJDb3JlXCJcbmV4cG9ydCBJbnNwZWN0b3JT
Y3JpcHRzPVwiJHtKQVZBU0NSSVBUQ09SRV9QUklWQVRFX0hFQURFUlNfRElSfVwiXG5cbmlmIFsg
ISAkQ0MgXTsgdGhlblxuICAgIGV4cG9ydCBDQz1cImB4Y3J1biAtZmluZCBjbGFuZ2BcIlxuZmlc
blxuaWYgWyAhICRHUEVSRiBdOyB0aGVuXG4gICAgZXhwb3J0IEdQRVJGPVwiYHhjcnVuIC1maW5k
IGdwZXJmYFwiXG5maVxuXG5pZiBbIFwiJHtBQ1RJT059XCIgPSBcImJ1aWxkXCIgLW8gXCIke0FD
VElPTn1cIiA9IFwiaW5zdGFsbFwiIC1vIFwiJHtBQ1RJT059XCIgPSBcImluc3RhbGxoZHJzXCIg
XTsgdGhlblxuICAgIG1ha2UgIC0tbm8tYnVpbHRpbi1ydWxlcyAtZiBcIldlYkNvcmUvRGVyaXZl
ZFNvdXJjZXMubWFrZVwiIC1qIGAvdXNyL3NiaW4vc3lzY3RsIC1uIGh3LmFjdGl2ZWNwdWAgU0RL
Uk9PVD1cIiR7U0RLUk9PVH1cIlxuZmlcbiI7CisJCQlzaGVsbFNjcmlwdCA9ICJta2RpciAtcCBc
IiR7QlVJTFRfUFJPRFVDVFNfRElSfS9EZXJpdmVkU291cmNlcy9XZWJDb3JlXCJcbmNkIFwiJHtC
VUlMVF9QUk9EVUNUU19ESVJ9L0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmVcIlxuXG4vYmluL2xuIC1z
ZmggXCIke1NSQ1JPT1R9XCIgV2ViQ29yZVxuZXhwb3J0IFdlYkNvcmU9XCJXZWJDb3JlXCJcbmV4
cG9ydCBJbnNwZWN0b3JTY3JpcHRzPVwiJHtKQVZBU0NSSVBUQ09SRV9QUklWQVRFX0hFQURFUlNf
RElSfVwiXG5leHBvcnQgV2ViUmVwbGF5U2NyaXB0cz1cIiR7SkFWQVNDUklQVENPUkVfUFJJVkFU
RV9IRUFERVJTX0RJUn1cIlxuXG5pZiBbICEgJENDIF07IHRoZW5cbiAgICBleHBvcnQgQ0M9XCJg
eGNydW4gLWZpbmQgY2xhbmdgXCJcbmZpXG5cbmlmIFsgISAkR1BFUkYgXTsgdGhlblxuICAgIGV4
cG9ydCBHUEVSRj1cImB4Y3J1biAtZmluZCBncGVyZmBcIlxuZmlcblxuaWYgWyBcIiR7QUNUSU9O
fVwiID0gXCJidWlsZFwiIC1vIFwiJHtBQ1RJT059XCIgPSBcImluc3RhbGxcIiAtbyBcIiR7QUNU
SU9OfVwiID0gXCJpbnN0YWxsaGRyc1wiIF07IHRoZW5cbiAgICBtYWtlICAtLW5vLWJ1aWx0aW4t
cnVsZXMgLWYgXCJXZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2VcIiAtaiBgL3Vzci9zYmluL3N5
c2N0bCAtbiBody5hY3RpdmVjcHVgIFNES1JPT1Q9XCIke1NES1JPT1R9XCJcbmZpXG4iOwogCQl9
OwogLyogRW5kIFBCWFNoZWxsU2NyaXB0QnVpbGRQaGFzZSBzZWN0aW9uICovCiAKQEAgLTI2MzQ1
LDYgKzI2NDMzLDcgQEAKIAkJCQlGRDMxNjAxNzEyQjAyNjc2MDBDMUEzNTkgLyogQXVkaW9Ob2Rl
T3V0cHV0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEMzE2MDFDMTJCMDI2NzYwMEMxQTM1OSAv
KiBBdWRpb1BhcmFtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEMzU5MThGMTM4REIyMjAwMEUx
RUJFQyAvKiBBdWRpb1BhcmFtVGltZWxpbmUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTkwQTFB
MTQxOEFFRjMyNDAwMTgzRkQxIC8qIEV2ZW50TG9vcElucHV0RGlzcGF0Y2hlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlGRDMxNjAxRjEyQjAyNjc2MDBDMUEzNTkgLyogQXVkaW9Qcm9jZXNzaW5n
RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQzMTYwODUxMkIwMjZGNzAwQzFBMzU5IC8q
IEF1ZGlvUmVzYW1wbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEMzE2MDg3MTJCMDI2Rjcw
MEMxQTM1OSAvKiBBdWRpb1Jlc2FtcGxlcktlcm5lbC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI2
Mzk0LDYgKzI2NDgzLDcgQEAKIAkJCQkzNzdBM0E5MDE1RUZDRTlCMDA1OUY1QzcgLyogQml0bWFw
SW1hZ2VDRy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzZENkM3ODEyMkI4QTNEMDAxRkQxRjcg
LyogQmxvYi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRURFRjFGMzEyMUIwRUZDMDA3MjZEQjIg
LyogQmxvYkRhdGEuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTkwQTFBMDIxOEFEQTQ4NDAwMTgz
RkQxIC8qIFJlcGxheUlucHV0Q3JlYXRpb25NZXRob2RzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUUxNEE5NEQ3MTZERkRGOTUwMDY4REU4MiAvKiBCbG9iUmVnaXN0cnkuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMkVERUYxRjYxMjFCMEVGQzAwNzI2REIyIC8qIEJsb2JSZWdpc3RyeUltcGwuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMkVCNEJDRDIxMjFGMDNFMzAwRUM0ODg1IC8qIEJsb2JSZXNv
dXJjZUhhbmRsZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI2NzE3LDYgKzI2ODA3LDcgQEAKIAkJ
CQlCQzFCREYyNDE1NkMxODgzMDAxQzEyNDMgLyogRE9NRXJyb3IuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJODVBRkE4MjMwQUFGNTI4QTAwRTg0MzA1IC8qIERPTUV2ZW50Lm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkMxQTM3QjMwOTdDNzE1RjAwMTlGM0Q4IC8qIERPTUV2ZW50cy5tbSBpbiBTb3Vy
Y2VzICovLAorCQkJCTk5MEExQTAzMThBREE0ODQwMDE4M0ZEMSAvKiBSZXBsYXlJbnB1dERpc3Bh
dGNoTWV0aG9kcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzAwRjAwNTBFMEExODU1MDBGRDA0
RTMgLyogRE9NRmlsZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTJFM0JDMTA5MTE3RDQ3OTgwMEI5
NDA5QSAvKiBET01GaWxlRXJyb3IubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzAwRjAwODBFMEEx
ODU1MDBGRDA0RTMgLyogRE9NRmlsZUxpc3QubW0gaW4gU291cmNlcyAqLywKQEAgLTI2NzUxLDYg
KzI2ODQyLDcgQEAKIAkJCQk4NUMwNTBCQjBBRDg0RjVFMDA1NTMyRTcgLyogRE9NSFRNTEVtYmVk
RWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTg1QkE0Q0UwMEFBNjg2MUIwMDg4MDUyRCAv
KiBET01IVE1MRmllbGRTZXRFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJODVFQ0JFRjAw
QUE3NjI2OTAwNTQ0RjBCIC8qIERPTUhUTUxGb250RWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAor
CQkJCTk5MEExQTI3MThCNTZENzAwMDE4M0ZEMSAvKiBDYXB0dXJpbmdJbnB1dEN1cnNvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk4NURGMkM1RDBBQTM0MUY2MDBBRDY0QzUgLyogRE9NSFRNTEZv
cm1FbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJODVERjgxOTYwQUE3N0U0QjAwNDg2QUQ3
IC8qIERPTUhUTUxGcmFtZUVsZW1lbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NURGODE5ODBB
QTc3RTRCMDA0ODZBRDcgLyogRE9NSFRNTEZyYW1lU2V0RWxlbWVudC5tbSBpbiBTb3VyY2VzICov
LApAQCAtMjcyNDAsNiArMjczMzIsNyBAQAogCQkJCTA3OTQxNzkxMTY2RTg1NUYwMDk0MTZDMiAv
KiBJbmJhbmRUZXh0VHJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDdCNDQyRDYxNjZDNzBC
MDAwNTU2Q0FEIC8qIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMDdBQTZCNkIxNjZEMkMwNzAwRDQ1NjcxIC8qIEluYmFuZFRleHRUcmFja1ByaXZhdGVB
VkZPYmpDLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJOTkwQTFBMDgxOEFEQTQ4NDAwMTgzRkQxIC8q
IFNlZ21lbnRlZElucHV0U3RvcmFnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNzM2N0RFMDE3
MkNBNjgyMDBEODYxQjkgLyogSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUxlZ2FjeUFWRk9iakMubW0g
aW4gU291cmNlcyAqLywKIAkJCQlEQjIzQzJDQjBBNTA4RDI5MDAyNDg5RUIgLyogSW5kZW50T3V0
ZGVudENvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQUE3MzE4M0UxNTkyNTVCOTAwQTkz
RTZFIC8qIEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
Mjc1MjQsNiArMjc2MTcsNyBAQAogCQkJCUJDRDQxQUJCMEMwNjBERTgwMEMwRTQ0NiAvKiBKU0hU
TUxGcmFtZVNldEVsZW1lbnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgwRTdCMTQw
QTE5RDYwNjAwN0ZCOEM1IC8qIEpTSFRNTEhlYWRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTFBRTJBQTJFMEExQ0RBQjQwMEI0MkIyNSAvKiBKU0hUTUxIZWFkaW5nRWxlbWVudC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk5OTBBMUEyODE4QjU2RDcwMDAxODNGRDEgLyogUmVwbGF5aW5n
SW5wdXRDdXJzb3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFFMkFBMzAwQTFDREFCNDAwQjQy
QjI1IC8qIEpTSFRNTEhSRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTg1QjE4RjBB
MUIxOEEyMDBEOEM4N0MgLyogSlNIVE1MSHRtbEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMDcwNTg1MzgxN0ZFMDQ0RjAwNUYyQkNCIC8qIE1lZGlhVHJhY2tDb25zdHJhaW50U2V0LmNw
cCBpbiBTb3VyY2VzICovLApAQCAtMjc1OTYsNiArMjc2OTAsNyBAQAogCQkJCUNEMjdGNkU1MTQ1
NzY4NUEwMDc4MjA3RCAvKiBKU01lZGlhQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlGRDIzQTEyNTEzRjVGQTU5MDBGNjcwMDEgLyogSlNNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5v
ZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ0NjE0MTgwQ0Q2ODI2OTAwRkFEQTc1IC8qIEpT
TWVkaWFFcnJvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5OTBBMUEyMDE4QjQxQTE5MDAxODNG
RDEgLyogUmVwbGF5U2Vzc2lvblNlZ21lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE5QUMz
RjQxODI0REM3OTAwMzQ5NDI2IC8qIENyeXB0b0FsZ29yaXRobVNIQTUxMi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1MTBCN0RCNzE4MkQ5RjVEMDA5QkY5NTcgLyogSURCVHJhbnNhY3Rpb25CYWNr
ZW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExNDgzMkNCMTg3RjY3QjQwMERBNjNBNiAvKiBX
ZWJDb3JlVGhyZWFkUnVuLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjc3NDAsNiArMjc4MzUsNyBA
QAogCQkJCTUxNjYwQUMwMTgyOEM4NDYwMDA3NENBRCAvKiBJREJCYWNraW5nU3RvcmVDdXJzb3JM
ZXZlbERCLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEzRDU2MEFCNzVBNkYwMDBFNUFDNCAv
KiBKU1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNENTgw
QUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHQ2lyY2xlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk5OTBBMUEyMjE4QjQ0Q0Q4MDAxODNGRDEgLyogUmVwbGF5U2Vzc2lvbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCMkZBM0Q1QTBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdDbGlwUGF0aEVs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNENUMwQUI3NUE2RjAwMEU1QUM0IC8q
IEpTU1ZHQ29sb3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNENUUwQUI3NUE2RjAwMEU1
QUM0IC8qIEpTU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC0yNzc2NCw2ICsyNzg2MCw3IEBACiAJCQkJQjJGQTNENzIwQUI3NUE2RjAwMEU1
QUM0IC8qIEpTU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUIyRkEzRDc0MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxl
bWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxRjcyQkYwQTE4N0ZENDQ5MDAwOUJDQjMgLyog
VGlsZUNvbnRyb2xsZXJNZW1vcnlIYW5kbGVySU9TLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk5
MEExQTFEMThCM0UyNjUwMDE4M0ZEMSAvKiBXZWJSZXBsYXlJbnB1dHMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQjJGQTNENzYwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHRkVEaXN0YW50TGlnaHRF
bGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQzNThFODdDMTM2MEEyRUUwMEU0NzQ4QyAv
KiBKU1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNE
NzgwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHRkVGbG9vZEVsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC0yODA0NSw2ICsyODE0Miw3IEBACiAJCQkJRkE2NTRBNkIxMTA4QUJFRDAwMjYxNUUw
IC8qIE1hdGhNTFRleHRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0NTM5MDQ1MEVB
RkQ2MzcwMDM2OTVDOCAvKiBTY3JvbGxWaWV3SU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlE
NURDMkIwRjQyM0E3MzAwOEYyMEZEIC8qIE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTk5MEExQTE3MThCM0NBOEQwMDE4M0ZEMSAvKiBJbnNwZWN0b3JS
ZXBsYXlBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUU5MTFDNjBFRjg2RDQ3MDA5RDBD
QUYgLyogTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQx
NzI1M0FBMTM1NEJCQkMwMDM2MEYyQSAvKiBNZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlERUJDQ0RENTE2NjQ2RUIyMDBBNDUyRTEgLyogTWVkaWFDb250cm9sRWxl
bWVudFR5cGVzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjg1NDMsNiArMjg2NDEsNyBAQAogCQkJ
CTkzMzA5RTExMDk5RTY0OTIwMDU2RTU4MSAvKiBTcGxpdEVsZW1lbnRDb21tYW5kLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTkzMzA5RTEzMDk5RTY0OTIwMDU2RTU4MSAvKiBTcGxpdFRleHROb2Rl
Q29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNzhFMDk0QjE3RDE3MDk2MDA0MjBBQTEg
LyogTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQk5OTBBMUEwQTE4QURBNDg0MDAxODNGRDEgLyogU2VyaWFsaXphdGlvbk1ldGhvZHMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMDcwRTA5MUIxODc1RUY3MTAwM0ExRDNDIC8qIE1lZGlhU2Vzc2lv
bi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUUxNTA5OUU2NDkyMDA1NkU1ODEgLyogU3Bs
aXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBMUUxMTU0ODEzMDE1QzVEMDA1NEFDOEMgLyogU3BvdExpZ2h0U291cmNlLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtMjg2NTIsNiArMjg3NTEsNyBAQAogCQkJCTQzODE3NjNCMTNBNjk3RDQwMDdE
MTE4NyAvKiBTVkdBbmltYXRlZExlbmd0aC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MzFBMkZE
NzEzQjc3MDdBMDA3NzkxRTQgLyogU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTQzQTBGMEIxMTNBQzdENkQwMEE1RjBBNyAvKiBTVkdBbmltYXRlZE51bWJlci5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk5OTBBMUEyNDE4QjU2NUY0MDAxODNGRDEgLyogUmVwbGF5
Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNzNCRTM0ODE3RDE3RTdBMDAyQkQ0
MzEgLyogSlNOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0
MzMxQUM3ODEzQjY4NzAwMDBBOUU1QUUgLyogU1ZHQW5pbWF0ZWROdW1iZXJMaXN0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTQzMUEyRjlEMTNCNkYyQjAwMDc3OTFFNCAvKiBTVkdBbmltYXRlZE51
bWJlck9wdGlvbmFsTnVtYmVyLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IDgzNWZmNGM5MzA1MGQ1
OTQwZTE2OTUzNjQyZDk0ZTJiNGYyZGQ4NWYuLjNiYjgwZDIwNzFiZjJlZmNhMzM4MjUzMjY2YTRk
NDUyMTM1ZWJjMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQpAQCAtNTQsNiArNTUsNyBAQAogI2luY2x1ZGUgIkluc3BlY3Rvck92ZXJsYXku
aCIKICNpbmNsdWRlICJJbnNwZWN0b3JQYWdlQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JQ
cm9maWxlckFnZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yUmVwbGF5QWdlbnQuaCIKICNpbmNs
dWRlICJJbnNwZWN0b3JSZXNvdXJjZUFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yVGltZWxp
bmVBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvcldlYkJhY2tlbmREaXNwYXRjaGVycy5oIgpA
QCAtMTI2LDYgKzEyOCwxMCBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9s
bGVyKFBhZ2UmIHBhZ2UsIEluc3BlY3RvckNsaWVudCogaW5zcGVjdG9yQwogICAgIG1fYWdlbnRz
LmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPEluc3BlY3RvckluZGV4ZWREQkFnZW50PihtX2luc3Ry
dW1lbnRpbmdBZ2VudHMuZ2V0KCksIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmdldCgpLCBwYWdl
QWdlbnQpKTsKICNlbmRpZgogCisjaWYgRU5BQkxFKFdFQl9SRVBMQVkpCisgICAgbV9hZ2VudHMu
YXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8SW5zcGVjdG9yUmVwbGF5QWdlbnQ+KG1faW5zdHJ1bWVu
dGluZ0FnZW50cy5nZXQoKSwgcGFnZUFnZW50KSk7CisjZW5kaWYKKwogICAgIGF1dG8gZG9tU3Rv
cmFnZUFnZW50UHRyID0gc3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ+
KG1faW5zdHJ1bWVudGluZ0FnZW50cy5nZXQoKSwgbV9wYWdlQWdlbnQpOwogICAgIEluc3BlY3Rv
ckRPTVN0b3JhZ2VBZ2VudCogZG9tU3RvcmFnZUFnZW50ID0gZG9tU3RvcmFnZUFnZW50UHRyLmdl
dCgpOwogICAgIG1fYWdlbnRzLmFwcGVuZChzdGQ6Om1vdmUoZG9tU3RvcmFnZUFnZW50UHRyKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50
YXRpb24uY3BwCmluZGV4IDMwNTEyYWIzYjVkZTQ0YzFkM2ZjYTU3Nzg1M2IyZWZhMDVmMjBkM2Uu
LmY1M2MyODdkMzI2YWUwZGE0ODdiMzNkYTNmNDA1Y2FiMzljOTJiYjkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwCkBA
IC0xLDUgKzEsNiBAQAogLyoKICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAqCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC03Nyw2ICs3
OCwxMSBAQAogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CiAKKyNpZiBFTkFCTEUoV0VCX1JFUExBWSkKKyNpbmNsdWRlICJJbnNwZWN0
b3JSZXBsYXlBZ2VudC5oIgorI2luY2x1ZGUgIlJlcGxheUNvbnRyb2xsZXIuaCIgLy8gZm9yIFJl
cGxheVBvc2l0aW9uLgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTc0Myw2ICs3NDksMTMgQEAgdm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmZyYW1lRGV0YWNoZWRGcm9tUGFyZW50SW1wbChJbnN0cnVtZW50aW5nQWdl
bnRzKgogICAgICAgICBjYW52YXNBZ2VudC0+ZnJhbWVEZXRhY2hlZChmcmFtZSk7CiAgICAgaWYg
KEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5z
cGVjdG9yUGFnZUFnZW50KCkpCiAgICAgICAgIHBhZ2VBZ2VudC0+ZnJhbWVEZXRhY2hlZChmcmFt
ZSk7CisKKyNpZiBFTkFCTEUoV0VCX1JFUExBWSkKKyAgICBpZiAoZnJhbWUtPmlzTWFpbkZyYW1l
KCkpIHsKKyAgICAgICAgaWYgKEluc3BlY3RvclJlcGxheUFnZW50KiByZXBsYXlBZ2VudCA9IGlu
c3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvclJlcGxheUFnZW50KCkpCisgICAgICAgICAgICBy
ZXBsYXlBZ2VudC0+ZnJhbWVEZXRhY2hlZChmcmFtZSk7CisgICAgfQorI2VuZGlmCiB9CiAKIHZv
aWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDb21taXRMb2FkSW1wbChJbnN0cnVtZW50
aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBQYWdlKiBwYWdlLCBEb2N1bWVudExvYWRl
ciogbG9hZGVyKQpAQCAtNzc3LDYgKzc5MCwxMCBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6ZGlkQ29tbWl0TG9hZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudAog
ICAgICAgICBjYW52YXNBZ2VudC0+ZnJhbWVOYXZpZ2F0ZWQobG9hZGVyLT5mcmFtZSgpKTsKICAg
ICBpZiAoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRz
LT5pbnNwZWN0b3JQYWdlQWdlbnQoKSkKICAgICAgICAgcGFnZUFnZW50LT5mcmFtZU5hdmlnYXRl
ZChsb2FkZXIpOworI2lmIEVOQUJMRShXRUJfUkVQTEFZKQorICAgIGlmIChJbnNwZWN0b3JSZXBs
YXlBZ2VudCogcmVwbGF5QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JSZXBs
YXlBZ2VudCgpKQorICAgICAgICByZXBsYXlBZ2VudC0+ZnJhbWVOYXZpZ2F0ZWQobG9hZGVyKTsK
KyNlbmRpZgogfQogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZnJhbWVEb2N1bWVu
dFVwZGF0ZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEZy
YW1lKiBmcmFtZSkKQEAgLTEwNTAsNiArMTA2Nyw4MCBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6ZGlkU2VuZFdlYlNvY2tldEZyYW1lSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBp
bgogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoV0VCX1JFUExBWSkKK3ZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpzZXNzaW9uQ3JlYXRlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5z
dHJ1bWVudGluZ0FnZW50cywgUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uPiBzZXNzaW9uKQorewor
ICAgIGlmIChJbnNwZWN0b3JSZXBsYXlBZ2VudCogcmVwbGF5QWdlbnQgPSBpbnN0cnVtZW50aW5n
QWdlbnRzLT5pbnNwZWN0b3JSZXBsYXlBZ2VudCgpKQorICAgICAgICByZXBsYXlBZ2VudC0+c2Vz
c2lvbkNyZWF0ZWQoc2Vzc2lvbik7Cit9CisKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpzZXNzaW9uTG9hZGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdl
bnRzLCBQYXNzUmVmUHRyPFJlcGxheVNlc3Npb24+IHNlc3Npb24pCit7CisgICAgaWYgKEluc3Bl
Y3RvclJlcGxheUFnZW50KiByZXBsYXlBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3Bl
Y3RvclJlcGxheUFnZW50KCkpCisgICAgICAgIHJlcGxheUFnZW50LT5zZXNzaW9uTG9hZGVkKHNl
c3Npb24pOworfQorCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2Vzc2lvbk1vZGlm
aWVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBQYXNzUmVm
UHRyPFJlcGxheVNlc3Npb24+IHNlc3Npb24pCit7CisgICAgaWYgKEluc3BlY3RvclJlcGxheUFn
ZW50KiByZXBsYXlBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvclJlcGxheUFn
ZW50KCkpCisgICAgICAgIHJlcGxheUFnZW50LT5zZXNzaW9uTW9kaWZpZWQoc2Vzc2lvbik7Cit9
CisKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZWdtZW50Q3JlYXRlZEltcGwoSW5z
dHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgUGFzc1JlZlB0cjxSZXBsYXlT
ZXNzaW9uU2VnbWVudD4gc2VnbWVudCkKK3sKKyAgICBpZiAoSW5zcGVjdG9yUmVwbGF5QWdlbnQq
IHJlcGxheUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yUmVwbGF5QWdlbnQo
KSkKKyAgICAgICAgcmVwbGF5QWdlbnQtPnNlZ21lbnRDcmVhdGVkKHNlZ21lbnQpOworfQorCit2
b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2VnbWVudENvbXBsZXRlZEltcGwoSW5zdHJ1
bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgUGFzc1JlZlB0cjxSZXBsYXlTZXNz
aW9uU2VnbWVudD4gc2VnbWVudCkKK3sKKyAgICBpZiAoSW5zcGVjdG9yUmVwbGF5QWdlbnQqIHJl
cGxheUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yUmVwbGF5QWdlbnQoKSkK
KyAgICAgICAgcmVwbGF5QWdlbnQtPnNlZ21lbnRDb21wbGV0ZWQoc2VnbWVudCk7Cit9CisKK3Zv
aWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZWdtZW50TG9hZGVkSW1wbChJbnN0cnVtZW50
aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBQYXNzUmVmUHRyPFJlcGxheVNlc3Npb25T
ZWdtZW50PiBzZWdtZW50KQoreworICAgIGlmIChJbnNwZWN0b3JSZXBsYXlBZ2VudCogcmVwbGF5
QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JSZXBsYXlBZ2VudCgpKQorICAg
ICAgICByZXBsYXlBZ2VudC0+c2VnbWVudExvYWRlZChzZWdtZW50KTsKK30KKwordm9pZCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OnNlZ21lbnRVbmxvYWRlZEltcGwoSW5zdHJ1bWVudGluZ0Fn
ZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cykKK3sKKyAgICBpZiAoSW5zcGVjdG9yUmVwbGF5QWdl
bnQqIHJlcGxheUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yUmVwbGF5QWdl
bnQoKSkKKyAgICAgICAgcmVwbGF5QWdlbnQtPnNlZ21lbnRVbmxvYWRlZCgpOworfQorCit2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y2FwdHVyZVN0YXJ0ZWRJbXBsKEluc3RydW1lbnRp
bmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMpCit7CisgICAgaWYgKEluc3BlY3RvclJlcGxh
eUFnZW50KiByZXBsYXlBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvclJlcGxh
eUFnZW50KCkpCisgICAgICAgIHJlcGxheUFnZW50LT5jYXB0dXJlU3RhcnRlZCgpOworfQorCit2
b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y2FwdHVyZVN0b3BwZWRJbXBsKEluc3RydW1l
bnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMpCit7CisgICAgaWYgKEluc3BlY3RvclJl
cGxheUFnZW50KiByZXBsYXlBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvclJl
cGxheUFnZW50KCkpCisgICAgICAgIHJlcGxheUFnZW50LT5jYXB0dXJlU3RvcHBlZCgpOworfQor
Cit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6cGxheWJhY2tTdGFydGVkSW1wbChJbnN0
cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzKQoreworICAgIGlmIChJbnNwZWN0
b3JSZXBsYXlBZ2VudCogcmVwbGF5QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0
b3JSZXBsYXlBZ2VudCgpKQorICAgICAgICByZXBsYXlBZ2VudC0+cGxheWJhY2tTdGFydGVkKCk7
Cit9CisKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpwbGF5YmFja1BhdXNlZEltcGwo
SW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgY29uc3QgUmVwbGF5UG9z
aXRpb24mIHBvc2l0aW9uKQoreworICAgIGlmIChJbnNwZWN0b3JSZXBsYXlBZ2VudCogcmVwbGF5
QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JSZXBsYXlBZ2VudCgpKQorICAg
ICAgICByZXBsYXlBZ2VudC0+cGxheWJhY2tQYXVzZWQocG9zaXRpb24pOworfQorCit2b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6cGxheWJhY2tIaXRQb3NpdGlvbkltcGwoSW5zdHJ1bWVu
dGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgY29uc3QgUmVwbGF5UG9zaXRpb24mIHBv
c2l0aW9uKQoreworICAgIGlmIChJbnNwZWN0b3JSZXBsYXlBZ2VudCogcmVwbGF5QWdlbnQgPSBp
bnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JSZXBsYXlBZ2VudCgpKQorICAgICAgICByZXBs
YXlBZ2VudC0+cGxheWJhY2tIaXRQb3NpdGlvbihwb3NpdGlvbik7Cit9CisjZW5kaWYKKwogdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Om5ldHdvcmtTdGF0ZUNoYW5nZWRJbXBsKEluc3Ry
dW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMpCiB7CiAgICAgaWYgKEluc3BlY3Rv
ckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCogYXBwbGljYXRpb25DYWNoZUFnZW50ID0gaW5zdHJ1bWVu
dGluZ0FnZW50cy0+aW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KCkpCkBAIC0xMDgxLDYg
KzExNzIsMTcgQEAgYm9vbCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnRpbWVsaW5lQWdlbnRF
bmFibGVkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmkKICAgICByZXR1cm4gaW5zdHJ1bWVu
dGluZ0FnZW50cyAmJiBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JUaW1lbGluZUFnZW50
KCk7CiB9CiAKK2Jvb2wgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpyZXBsYXlBZ2VudEVuYWJs
ZWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKK3sKKyNp
ZiBFTkFCTEUoV0VCX1JFUExBWSkKKyAgICBJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50
aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckNvbnRleHQoc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCk7CisgICAgcmV0dXJuIGluc3RydW1lbnRpbmdBZ2VudHMgJiYgaW5zdHJ1bWVudGlu
Z0FnZW50cy0+aW5zcGVjdG9yUmVwbGF5QWdlbnQoKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOworICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQor
CiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6cGF1c2VPbk5hdGl2ZUV2ZW50SWZOZWVk
ZWQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgYm9vbCBpc0RPTUV2
ZW50LCBjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSwgYm9vbCBzeW5jaHJvbm91cykKIHsKICAgICBp
ZiAoSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCogZG9tRGVidWdnZXJBZ2VudCA9IGluc3RydW1l
bnRpbmdBZ2VudHMtPmluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaAppbmRleCBkZGZm
ODkyZWU1Y2FiMWNkNjM2OWQwZDVkNTQ2YjI4M2I3NjU3NWE1Li43Yjk0YzBhOTAyYTJlNWVjODgz
YWM3Y2M0YzQ1MDY4NzM1OTkzMTI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqCiAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC00NSw2ICs0NiwxMiBAQAogI2luY2x1ZGUgPGluc3Bl
Y3Rvci9Db25zb2xlVHlwZXMuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKKyNpZiBFTkFC
TEUoV0VCX1JFUExBWSkKKyNpbmNsdWRlICJSZXBsYXlTZXNzaW9uLmgiCisjaW5jbHVkZSAiUmVw
bGF5U2Vzc2lvblNlZ21lbnQuaCIKKyNlbmRpZgorCisKIG5hbWVzcGFjZSBEZXByZWNhdGVkIHsK
IGNsYXNzIFNjcmlwdE9iamVjdDsKIH0KQEAgLTkzLDYgKzEwMCw4IEBAIGNsYXNzIFdvcmtlckds
b2JhbFNjb3BlOwogY2xhc3MgV29ya2VyR2xvYmFsU2NvcGVQcm94eTsKIGNsYXNzIFhNTEh0dHBS
ZXF1ZXN0OwogCitzdHJ1Y3QgUmVwbGF5UG9zaXRpb247CisKICNkZWZpbmUgRkFTVF9SRVRVUk5f
SUZfTk9fRlJPTlRFTkRTKHZhbHVlKSBpZiAoTElLRUxZKCFoYXNGcm9udGVuZHMoKSkpIHJldHVy
biB2YWx1ZTsKIAogY2xhc3MgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uIHsKQEAgLTIzOSw2ICsy
NDgsMjQgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHdvcmtlckdsb2JhbFNjb3BlVGVybWlu
YXRlZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV29ya2VyR2xvYmFsU2NvcGVQcm94eSopOwog
ICAgIHN0YXRpYyB2b2lkIHdpbGxFdmFsdWF0ZVdvcmtlclNjcmlwdChXb3JrZXJHbG9iYWxTY29w
ZSosIGludCB3b3JrZXJUaHJlYWRTdGFydE1vZGUpOwogCisjaWYgRU5BQkxFKFdFQl9SRVBMQVkp
CisgICAgc3RhdGljIHZvaWQgc2Vzc2lvbkNyZWF0ZWQoUGFnZSosIFBhc3NSZWZQdHI8UmVwbGF5
U2Vzc2lvbj4pOworICAgIHN0YXRpYyB2b2lkIHNlc3Npb25Mb2FkZWQoUGFnZSosIFBhc3NSZWZQ
dHI8UmVwbGF5U2Vzc2lvbj4pOworICAgIHN0YXRpYyB2b2lkIHNlc3Npb25Nb2RpZmllZChQYWdl
KiwgUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uPik7CisKKyAgICBzdGF0aWMgdm9pZCBzZWdtZW50
Q3JlYXRlZChQYWdlKiwgUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4pOworICAgIHN0
YXRpYyB2b2lkIHNlZ21lbnRDb21wbGV0ZWQoUGFnZSosIFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lv
blNlZ21lbnQ+KTsKKyAgICBzdGF0aWMgdm9pZCBzZWdtZW50TG9hZGVkKFBhZ2UqLCBQYXNzUmVm
UHRyPFJlcGxheVNlc3Npb25TZWdtZW50Pik7CisgICAgc3RhdGljIHZvaWQgc2VnbWVudFVubG9h
ZGVkKFBhZ2UqKTsKKworICAgIHN0YXRpYyB2b2lkIGNhcHR1cmVTdGFydGVkKFBhZ2UqKTsKKyAg
ICBzdGF0aWMgdm9pZCBjYXB0dXJlU3RvcHBlZChQYWdlKik7CisKKyAgICBzdGF0aWMgdm9pZCBw
bGF5YmFja1N0YXJ0ZWQoUGFnZSopOworICAgIHN0YXRpYyB2b2lkIHBsYXliYWNrUGF1c2VkKFBh
Z2UqLCBjb25zdCBSZXBsYXlQb3NpdGlvbiYpOworICAgIHN0YXRpYyB2b2lkIHBsYXliYWNrSGl0
UG9zaXRpb24oUGFnZSosIGNvbnN0IFJlcGxheVBvc2l0aW9uJik7CisjZW5kaWYKKwogI2lmIEVO
QUJMRShXRUJfU09DS0VUUykKICAgICBzdGF0aWMgdm9pZCBkaWRDcmVhdGVXZWJTb2NrZXQoRG9j
dW1lbnQqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFVSTCYgcmVxdWVzdFVSTCwg
Y29uc3QgVVJMJiBkb2N1bWVudFVSTCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCk7CiAgICAgc3Rh
dGljIHZvaWQgd2lsbFNlbmRXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0KERvY3VtZW50KiwgdW5z
aWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKQEAgLTI2NCwx
MiArMjkxLDE0IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBjYW52YXNBZ2VudEVuYWJsZWQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogICAgIHN0YXRpYyBib29sIGNvbnNvbGVBZ2VudEVu
YWJsZWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogICAgIHN0YXRpYyBib29sIHRpbWVsaW5l
QWdlbnRFbmFibGVkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKyAgICBzdGF0aWMgYm9vbCBy
ZXBsYXlBZ2VudEVuYWJsZWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogI2Vsc2UKICAgICBz
dGF0aWMgYm9vbCBoYXNGcm9udGVuZHMoKSB7IHJldHVybiBmYWxzZTsgfQogICAgIHN0YXRpYyBi
b29sIGNhbnZhc0FnZW50RW5hYmxlZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KikgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICBzdGF0aWMgYm9vbCBjb25zb2xlQWdlbnRFbmFibGVkKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqKSB7IHJldHVybiBmYWxzZTsgfQogICAgIHN0YXRpYyBib29sIHJ1bnRpbWVB
Z2VudEVuYWJsZWQoRnJhbWUqKSB7IHJldHVybiBmYWxzZTsgfQogICAgIHN0YXRpYyBib29sIHRp
bWVsaW5lQWdlbnRFbmFibGVkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKSB7IHJldHVybiBmYWxz
ZTsgfQorICAgIHN0YXRpYyBib29sIHJlcGxheUFnZW50RW5hYmxlZChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KikgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCiAgICAgc3RhdGljIHZvaWQgcmVn
aXN0ZXJJbnN0cnVtZW50aW5nQWdlbnRzKEluc3RydW1lbnRpbmdBZ2VudHMqKTsKQEAgLTQxOCw2
ICs0NDcsMjQgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBkaWRTdGFydFdvcmtlckdsb2Jh
bFNjb3BlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgV29ya2VyR2xvYmFsU2NvcGVQcm94eSos
IGNvbnN0IFVSTCYpOwogICAgIHN0YXRpYyB2b2lkIHdvcmtlckdsb2JhbFNjb3BlVGVybWluYXRl
ZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIFdvcmtlckdsb2JhbFNjb3BlUHJveHkqKTsKIAor
I2lmIEVOQUJMRShXRUJfUkVQTEFZKQorICAgIHN0YXRpYyB2b2lkIHNlc3Npb25DcmVhdGVkSW1w
bChJbnN0cnVtZW50aW5nQWdlbnRzKiwgUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uPik7CisgICAg
c3RhdGljIHZvaWQgc2Vzc2lvbkxvYWRlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIFBhc3NS
ZWZQdHI8UmVwbGF5U2Vzc2lvbj4pOworICAgIHN0YXRpYyB2b2lkIHNlc3Npb25Nb2RpZmllZElt
cGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvbj4pOworCisg
ICAgc3RhdGljIHZvaWQgc2VnbWVudENyZWF0ZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCBQ
YXNzUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50Pik7CisgICAgc3RhdGljIHZvaWQgc2VnbWVu
dENvbXBsZXRlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIFBhc3NSZWZQdHI8UmVwbGF5U2Vz
c2lvblNlZ21lbnQ+KTsKKyAgICBzdGF0aWMgdm9pZCBzZWdtZW50TG9hZGVkSW1wbChJbnN0cnVt
ZW50aW5nQWdlbnRzKiwgUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4pOworICAgIHN0
YXRpYyB2b2lkIHNlZ21lbnRVbmxvYWRlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyopOworCisg
ICAgc3RhdGljIHZvaWQgY2FwdHVyZVN0YXJ0ZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqKTsK
KyAgICBzdGF0aWMgdm9pZCBjYXB0dXJlU3RvcHBlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyop
OworCisgICAgc3RhdGljIHZvaWQgcGxheWJhY2tTdGFydGVkSW1wbChJbnN0cnVtZW50aW5nQWdl
bnRzKik7CisgICAgc3RhdGljIHZvaWQgcGxheWJhY2tQYXVzZWRJbXBsKEluc3RydW1lbnRpbmdB
Z2VudHMqLCBjb25zdCBSZXBsYXlQb3NpdGlvbiYpOworICAgIHN0YXRpYyB2b2lkIHBsYXliYWNr
SGl0UG9zaXRpb25JbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCBjb25zdCBSZXBsYXlQb3NpdGlv
biYpOworI2VuZGlmCisKICNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMpCiAgICAgc3RhdGljIHZvaWQg
ZGlkQ3JlYXRlV2ViU29ja2V0SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgdW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyLCBjb25zdCBVUkwmIHJlcXVlc3RVUkwsIGNvbnN0IFVSTCYgZG9jdW1lbnRV
UkwsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wsIERvY3VtZW50Kik7CiAgICAgc3RhdGljIHZvaWQg
d2lsbFNlbmRXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0SW1wbChJbnN0cnVtZW50aW5nQWdlbnRz
KiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBEb2N1
bWVudCopOwpAQCAtMTc3NSw2ICsxODIyLDEzNiBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmRpZFNlbmRXZWJTb2NrZXRGcmFtZShEb2N1bWVudCogZG9jdW1lbnQsCiB9
CiAjZW5kaWYKIAorI2lmIEVOQUJMRShXRUJfUkVQTEFZKQoraW5saW5lIHZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpzZXNzaW9uQ3JlYXRlZChQYWdlKiBwYWdlLCBQYXNzUmVmUHRyPFJl
cGxheVNlc3Npb24+IHNlc3Npb24pCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICBpZiAo
SW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdB
Z2VudHNGb3JQYWdlKHBhZ2UpKQorICAgICAgICBzZXNzaW9uQ3JlYXRlZEltcGwoaW5zdHJ1bWVu
dGluZ0FnZW50cywgc2Vzc2lvbik7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShwYWdlKTsKKyAg
ICBVTlVTRURfUEFSQU0oc2Vzc2lvbik7CisjZW5kaWYKK30KKworaW5saW5lIHZvaWQgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpzZXNzaW9uTG9hZGVkKFBhZ2UqIHBhZ2UsIFBhc3NSZWZQdHI8
UmVwbGF5U2Vzc2lvbj4gc2Vzc2lvbikKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgIGlm
IChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGlu
Z0FnZW50c0ZvclBhZ2UocGFnZSkpCisgICAgICAgIHNlc3Npb25Mb2FkZWRJbXBsKGluc3RydW1l
bnRpbmdBZ2VudHMsIHNlc3Npb24pOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocGFnZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHNlc3Npb24pOworI2VuZGlmCit9CisKK2lubGluZSB2b2lkIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6c2Vzc2lvbk1vZGlmaWVkKFBhZ2UqIHBhZ2UsIFBhc3NSZWZQ
dHI8UmVwbGF5U2Vzc2lvbj4gc2Vzc2lvbikKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAg
IGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVu
dGluZ0FnZW50c0ZvclBhZ2UocGFnZSkpCisgICAgICAgIHNlc3Npb25Nb2RpZmllZEltcGwoaW5z
dHJ1bWVudGluZ0FnZW50cywgc2Vzc2lvbik7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShwYWdl
KTsKKyAgICBVTlVTRURfUEFSQU0oc2Vzc2lvbik7CisjZW5kaWYKK30KKworaW5saW5lIHZvaWQg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZWdtZW50Q3JlYXRlZChQYWdlKiBwYWdlLCBQYXNz
UmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiBzZWdtZW50KQoreworI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMg
PSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFnZShwYWdlKSkKKyAgICAgICAgc2VnbWVudENyZWF0
ZWRJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMsIHNlZ21lbnQpOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0ocGFnZSk7CisgICAgVU5VU0VEX1BBUkFNKHNlZ21lbnQpOworI2VuZGlmCit9CisKK2lu
bGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2VnbWVudENvbXBsZXRlZChQYWdl
KiBwYWdlLCBQYXNzUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiBzZWdtZW50KQoreworI2lm
IEVOQUJMRShJTlNQRUNUT1IpCisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1l
bnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFnZShwYWdlKSkKKyAgICAgICAg
c2VnbWVudENvbXBsZXRlZEltcGwoaW5zdHJ1bWVudGluZ0FnZW50cywgc2VnbWVudCk7CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShwYWdlKTsKKyAgICBVTlVTRURfUEFSQU0oc2VnbWVudCk7Cisj
ZW5kaWYKK30KKworaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZWdtZW50
TG9hZGVkKFBhZ2UqIHBhZ2UsIFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+IHNlZ21l
bnQpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50
cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JQYWdlKHBhZ2Up
KQorICAgICAgICBzZWdtZW50TG9hZGVkSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCBzZWdtZW50
KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHBhZ2UpOworICAgIFVOVVNFRF9QQVJBTShzZWdt
ZW50KTsKKyNlbmRpZgorfQorCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OnNlZ21lbnRVbmxvYWRlZChQYWdlKiBwYWdlKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisg
ICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzRm9yUGFnZShwYWdlKSkKKyAgICAgICAgc2VnbWVudFVubG9hZGVkSW1wbChp
bnN0cnVtZW50aW5nQWdlbnRzKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHBhZ2UpOworI2Vu
ZGlmCit9CisKK2lubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y2FwdHVyZVN0
YXJ0ZWQoUGFnZSogcGFnZSkKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgIGlmIChJbnN0
cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50
c0ZvclBhZ2UocGFnZSkpCisgICAgICAgIGNhcHR1cmVTdGFydGVkSW1wbChpbnN0cnVtZW50aW5n
QWdlbnRzKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHBhZ2UpOworI2VuZGlmCit9CisKK2lu
bGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y2FwdHVyZVN0b3BwZWQoUGFnZSog
cGFnZSkKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgIGlmIChJbnN0cnVtZW50aW5nQWdl
bnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UocGFn
ZSkpCisgICAgICAgIGNhcHR1cmVTdG9wcGVkSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzKTsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKHBhZ2UpOworI2VuZGlmCit9CisKK2lubGluZSB2b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6cGxheWJhY2tTdGFydGVkKFBhZ2UqIHBhZ2UpCit7Cisj
aWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1
bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JQYWdlKHBhZ2UpKQorICAgICAg
ICBwbGF5YmFja1N0YXJ0ZWRJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMpOworI2Vsc2UKKyAgICBV
TlVTRURfUEFSQU0ocGFnZSk7CisjZW5kaWYKK30KKworaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpwbGF5YmFja1BhdXNlZChQYWdlKiBwYWdlLCBjb25zdCBSZXBsYXlQb3Np
dGlvbiYgcG9zaXRpb24pCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICBpZiAoSW5zdHJ1
bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNG
b3JQYWdlKHBhZ2UpKQorICAgICAgICBwbGF5YmFja1BhdXNlZEltcGwoaW5zdHJ1bWVudGluZ0Fn
ZW50cywgcG9zaXRpb24pOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocGFnZSk7CisgICAgVU5V
U0VEX1BBUkFNKHBvc2l0aW9uKTsKKyNlbmRpZgorfQorCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OnBsYXliYWNrSGl0UG9zaXRpb24oUGFnZSogcGFnZSwgY29uc3QgUmVw
bGF5UG9zaXRpb24mIHBvc2l0aW9uKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisgICAgaWYg
KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5n
QWdlbnRzRm9yUGFnZShwYWdlKSkKKyAgICAgICAgcGxheWJhY2tIaXRQb3NpdGlvbkltcGwoaW5z
dHJ1bWVudGluZ0FnZW50cywgcG9zaXRpb24pOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocGFn
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHBvc2l0aW9uKTsKKyNlbmRpZgorfQorI2VuZGlmIC8vIEVO
QUJMRShXRUJfUkVQTEFZKQorCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
Om5ldHdvcmtTdGF0ZUNoYW5nZWQoUGFnZSogcGFnZSkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9S
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlcGxheUFn
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXBsYXlBZ2VudC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMzdhMjE4NTQ0YWNkNzJiMjE3MjUzOWVmZTU0N2Q4MTllZDA1NGNlYQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXBs
YXlBZ2VudC5jcHAKQEAgLTAsMCArMSw1MDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAxMyBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTCisgKiBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAqIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQQorICogUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJ
bnNwZWN0b3JSZXBsYXlBZ2VudC5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikgJiYgRU5BQkxF
KFdFQl9SRVBMQVkpCisKKyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkV2
ZW50LmgiCisjaW5jbHVkZSAiRXZlbnRMb29wSW5wdXQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgor
I2luY2x1ZGUgIkZ1bmN0b3JJbnB1dEN1cnNvci5oIgorI2luY2x1ZGUgIkluc3BlY3RvckNvbnRy
b2xsZXIuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JQYWdlQWdlbnQuaCIKKyNpbmNsdWRlICJJbnNw
ZWN0b3JXZWJUeXBlQnVpbGRlcnMuaCIKKyNpbmNsdWRlICJJbnN0cnVtZW50aW5nQWdlbnRzLmgi
CisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJSZXBs
YXlDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiUmVwbGF5U2Vzc2lvbi5oIgorI2luY2x1ZGUgIlJl
cGxheVNlc3Npb25TZWdtZW50LmgiCisjaW5jbHVkZSAiU2VyaWFsaXphdGlvbk1ldGhvZHMuaCIK
KyNpbmNsdWRlICJXZWJSZXBsYXlJbnB1dHMuaCIgLy8gRm9yIEVuY29kaW5nVHJhaXRzPElucHV0
UXVldWU+LgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3Rh
dGljIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlJlcGxheTo6UmVwbGF5UG9zaXRpb24+IGJ1aWxk
SW5zcGVjdG9yT2JqZWN0Rm9yUG9zaXRpb24oY29uc3QgUmVwbGF5UG9zaXRpb24mIHBvc2l0aW9u
KQoreworICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6UmVwbGF5OjpSZXBsYXlQb3NpdGlvbj4gcG9z
aXRpb25PYmplY3QgPSBUeXBlQnVpbGRlcjo6UmVwbGF5OjpSZXBsYXlQb3NpdGlvbjo6Y3JlYXRl
KCkKKyAgICAuc2V0U2VnbWVudE9mZnNldChwb3NpdGlvbi5zZWdtZW50T2Zmc2V0KQorICAgIC5z
ZXRJbnB1dE9mZnNldChwb3NpdGlvbi5pbnB1dE9mZnNldCk7CisKKyAgICByZXR1cm4gcG9zaXRp
b25PYmplY3QucmVsZWFzZSgpOworfQorCitzdGF0aWMgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6
UmVwbGF5OjpSZXBsYXlJbnB1dD4gYnVpbGRJbnNwZWN0b3JPYmplY3RGb3JJbnB1dChjb25zdCBO
b25kZXRlcm1pbmlzdGljSW5wdXRCYXNlJiBpbnB1dCwgc2l6ZV90IG9mZnNldCkKK3sKKyAgICBF
bmNvZGVkVmFsdWUgZW5jb2RlZElucHV0ID0gRW5jb2RpbmdUcmFpdHM8Tm9uZGV0ZXJtaW5pc3Rp
Y0lucHV0QmFzZT46OmVuY29kZVZhbHVlKGlucHV0KTsKKyAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6
OlJlcGxheTo6UmVwbGF5SW5wdXQ+IGlucHV0T2JqZWN0ID0gVHlwZUJ1aWxkZXI6OlJlcGxheTo6
UmVwbGF5SW5wdXQ6OmNyZWF0ZSgpCisgICAgICAgIC5zZXRUeXBlKGlucHV0LnR5cGUoKSkKKyAg
ICAgICAgLnNldE9mZnNldChvZmZzZXQpCisgICAgICAgIC5zZXREYXRhKGVuY29kZWRJbnB1dC5h
c09iamVjdCgpKTsKKworICAgIGlmIChpbnB1dC5xdWV1ZSgpID09IElucHV0UXVldWU6OkV2ZW50
TG9vcElucHV0KQorICAgICAgICBpbnB1dE9iamVjdC0+c2V0VGltZXN0YW1wKHN0YXRpY19jYXN0
PGNvbnN0IEV2ZW50TG9vcElucHV0QmFzZSY+KGlucHV0KS50aW1lc3RhbXAoKSk7CisKKyAgICBy
ZXR1cm4gaW5wdXRPYmplY3QucmVsZWFzZSgpOworfQorCitzdGF0aWMgUGFzc1JlZlB0cjxUeXBl
QnVpbGRlcjo6UmVwbGF5OjpSZXBsYXlTZXNzaW9uPiBidWlsZEluc3BlY3Rvck9iamVjdEZvclNl
c3Npb24oUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uPiBwcnBTZXNzaW9uKQoreworICAgIFJlZlB0
cjxSZXBsYXlTZXNzaW9uPiBzZXNzaW9uID0gcHJwU2Vzc2lvbjsKKyAgICBSZWZQdHI8VHlwZUJ1
aWxkZXI6OkFycmF5PFNlZ21lbnRJZGVudGlmaWVyPj4gc2VnbWVudHMgPSBUeXBlQnVpbGRlcjo6
QXJyYXk8U2VnbWVudElkZW50aWZpZXI+OjpjcmVhdGUoKTsKKworICAgIGZvciAoYXV0byBpdCA9
IHNlc3Npb24tPmJlZ2luKCk7IGl0ICE9IHNlc3Npb24tPmVuZCgpOyArK2l0KQorICAgICAgICBz
ZWdtZW50cy0+YWRkSXRlbSgoKml0KS0+aWRlbnRpZmllcigpKTsKKworICAgIFJlZlB0cjxUeXBl
QnVpbGRlcjo6UmVwbGF5OjpSZXBsYXlTZXNzaW9uPiBzZXNzaW9uT2JqZWN0ID0gVHlwZUJ1aWxk
ZXI6OlJlcGxheTo6UmVwbGF5U2Vzc2lvbjo6Y3JlYXRlKCkKKyAgICAgICAgLnNldElkKHNlc3Np
b24tPmlkZW50aWZpZXIoKSkKKyAgICAgICAgLnNldFRpbWVzdGFtcChzZXNzaW9uLT50aW1lc3Rh
bXAoKSkKKyAgICAgICAgLnNldFNlZ21lbnRzKHNlZ21lbnRzLnJlbGVhc2UoKSk7CisKKyAgICBy
ZXR1cm4gc2Vzc2lvbk9iamVjdDsKK30KKworY2xhc3MgU2VyaWFsaXplSW5wdXRUb0pTT05GdW5j
dG9yIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5
PFR5cGVCdWlsZGVyOjpSZXBsYXk6OlJlcGxheUlucHV0Pj4gUmV0dXJuVHlwZTsKKworICAgIFNl
cmlhbGl6ZUlucHV0VG9KU09ORnVuY3RvcigpCisgICAgICAgIDogbV9pbnB1dHMoVHlwZUJ1aWxk
ZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpSZXBsYXk6OlJlcGxheUlucHV0Pjo6Y3JlYXRlKCkpIHsg
fQorICAgIH5TZXJpYWxpemVJbnB1dFRvSlNPTkZ1bmN0b3IoKSB7IH0KKworICAgIHZvaWQgb3Bl
cmF0b3IoKShzaXplX3QgaW5kZXgsIGNvbnN0IE5vbmRldGVybWluaXN0aWNJbnB1dEJhc2UqIGlu
cHV0KQorICAgIHsKKyAgICAgICAgTE9HKFdlYlJlcGxheSwgIiUtMjVzIFdyaXRpbmcgJTV6dTog
JXNcbiIsICJbU2VyaWFsaXplSW5wdXRdIiwgaW5kZXgsIGlucHV0LT50eXBlKCkuc3RyaW5nKCku
YXNjaWkoKS5kYXRhKCkpOworCisgICAgICAgIGlmIChSZWZQdHI8VHlwZUJ1aWxkZXI6OlJlcGxh
eTo6UmVwbGF5SW5wdXQ+IHNlcmlhbGl6ZWRJbnB1dCA9IGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9y
SW5wdXQoKmlucHV0LCBpbmRleCkpCisgICAgICAgICAgICBtX2lucHV0cy0+YWRkSXRlbShzZXJp
YWxpemVkSW5wdXQucmVsZWFzZSgpKTsKKyAgICB9CisKKyAgICBSZXR1cm5UeXBlIHJldHVyblZh
bHVlKCkgeyByZXR1cm4gbV9pbnB1dHMucmVsZWFzZSgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0
cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OlJlcGxheTo6UmVwbGF5SW5wdXQ+ID4g
bV9pbnB1dHM7Cit9OworCitzdGF0aWMgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UmVwbGF5OjpT
ZXNzaW9uU2VnbWVudD4gYnVpbGRJbnNwZWN0b3JPYmplY3RGb3JTZWdtZW50KFBhc3NSZWZQdHI8
UmVwbGF5U2Vzc2lvblNlZ21lbnQ+IHBycFNlZ21lbnQpCit7CisgICAgUmVmUHRyPFJlcGxheVNl
c3Npb25TZWdtZW50PiBzZWdtZW50ID0gcHJwU2VnbWVudDsKKyAgICBSZWZQdHI8VHlwZUJ1aWxk
ZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpSZXBsYXk6OlJlcGxheUlucHV0UXVldWU+PiBxdWV1ZXNP
YmplY3QgPSBUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OlJlcGxheTo6UmVwbGF5SW5w
dXRRdWV1ZT46OmNyZWF0ZSgpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGF0aWNf
Y2FzdDxzaXplX3Q+KElucHV0UXVldWU6OkNvdW50KTsgaSsrKSB7CisgICAgICAgIFNlcmlhbGl6
ZUlucHV0VG9KU09ORnVuY3RvciBjb2xsZWN0b3I7CisgICAgICAgIElucHV0UXVldWUgcXVldWUg
PSBzdGF0aWNfY2FzdDxJbnB1dFF1ZXVlPihpKTsKKyAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVy
OjpBcnJheTxUeXBlQnVpbGRlcjo6UmVwbGF5OjpSZXBsYXlJbnB1dD4+IHF1ZXVlSW5wdXRzID0g
c2VnbWVudC0+Y3JlYXRlRnVuY3RvckN1cnNvcigpLT5mb3JFYWNoSW5wdXRJblF1ZXVlKHF1ZXVl
LCBjb2xsZWN0b3IpOworCisgICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6UmVwbGF5OjpSZXBs
YXlJbnB1dFF1ZXVlPiBxdWV1ZU9iamVjdCA9IFR5cGVCdWlsZGVyOjpSZXBsYXk6OlJlcGxheUlu
cHV0UXVldWU6OmNyZWF0ZSgpCisgICAgICAgICAgICAuc2V0VHlwZShFbmNvZGluZ1RyYWl0czxJ
bnB1dFF1ZXVlPjo6ZW5jb2RlVmFsdWUocXVldWUpLmNvbnZlcnRUbzxTdHJpbmc+KCkpCisgICAg
ICAgICAgICAuc2V0SW5wdXRzKHF1ZXVlSW5wdXRzKTsKKworICAgICAgICBxdWV1ZXNPYmplY3Qt
PmFkZEl0ZW0ocXVldWVPYmplY3QucmVsZWFzZSgpKTsKKyAgICB9CisKKyAgICBSZWZQdHI8VHlw
ZUJ1aWxkZXI6OlJlcGxheTo6U2Vzc2lvblNlZ21lbnQ+IHNlZ21lbnRPYmplY3QgPSBUeXBlQnVp
bGRlcjo6UmVwbGF5OjpTZXNzaW9uU2VnbWVudDo6Y3JlYXRlKCkKKyAgICAgICAgLnNldElkKHNl
Z21lbnQtPmlkZW50aWZpZXIoKSkKKyAgICAgICAgLnNldFRpbWVzdGFtcChzZWdtZW50LT50aW1l
c3RhbXAoKSkKKyAgICAgICAgLnNldFF1ZXVlcyhxdWV1ZXNPYmplY3QucmVsZWFzZSgpKTsKKwor
ICAgIHJldHVybiBzZWdtZW50T2JqZWN0LnJlbGVhc2UoKTsKK30KKworSW5zcGVjdG9yUmVwbGF5
QWdlbnQ6Okluc3BlY3RvclJlcGxheUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1l
bnRpbmdBZ2VudHMsIEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50KQorICAgIDogSW5zcGVj
dG9yQWdlbnRCYXNlKEFTQ0lJTGl0ZXJhbCgiUmVwbGF5IiksIGluc3RydW1lbnRpbmdBZ2VudHMp
CisgICAgLCBtX2Zyb250ZW5kRGlzcGF0Y2hlcihudWxscHRyKQorICAgICwgbV9iYWNrZW5kRGlz
cGF0Y2hlcihudWxscHRyKQorICAgICwgbV9wYWdlQWdlbnQocGFnZUFnZW50KQorICAgICwgbV9w
YWdlKG51bGxwdHIpCisgICAgLCBtX3Nlc3Npb25zTWFwKFNlc3Npb25zTWFwKCkpCisgICAgLCBt
X3NlZ21lbnRzTWFwKFNlZ21lbnRzTWFwKCkpCit7Cit9CisKK0luc3BlY3RvclJlcGxheUFnZW50
Ojp+SW5zcGVjdG9yUmVwbGF5QWdlbnQoKQoreworICAgIEFTU0VSVCghbV9zZXNzaW9uc01hcC5z
aXplKCkpOworICAgIEFTU0VSVCghbV9zZWdtZW50c01hcC5zaXplKCkpOworfQorCitTZXNzaW9u
U3RhdGUgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnNlc3Npb25TdGF0ZSgpIGNvbnN0Cit7CisgICAg
QVNTRVJUKG1fcGFnZSk7CisgICAgcmV0dXJuIG1fcGFnZS0+cmVwbGF5Q29udHJvbGxlcigpLnNl
c3Npb25TdGF0ZSgpOworfQorCit2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpkaWRDcmVhdGVG
cm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBmcm9udGVuZENoYW5u
ZWwsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcikKK3sKKyAg
ICBtX2Zyb250ZW5kRGlzcGF0Y2hlciA9IHN0ZDo6bWFrZV91bmlxdWU8SW5zcGVjdG9yUmVwbGF5
RnJvbnRlbmREaXNwYXRjaGVyPihmcm9udGVuZENoYW5uZWwpOworICAgIG1fYmFja2VuZERpc3Bh
dGNoZXIgPSBJbnNwZWN0b3JSZXBsYXlCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKGJhY2tlbmRE
aXNwYXRjaGVyLCB0aGlzKTsKKworICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0SW5zcGVj
dG9yUmVwbGF5QWdlbnQodGhpcyk7CisgICAgbV9wYWdlID0gbV9wYWdlQWdlbnQtPnBhZ2UoKTsK
KyAgICBBU1NFUlQoc2Vzc2lvblN0YXRlKCkgPT0gU2Vzc2lvblN0YXRlOjpJbmFjdGl2ZSk7CisK
KyAgICAvLyBLZWVwIHRyYWNrIG9mIHRoZSAoZGVmYXVsdCkgc2Vzc2lvbiBjdXJyZW50bHkgbG9h
ZGVkIGJ5IFJlcGxheUNvbnRyb2xsZXIsCisgICAgLy8gYW5kIGFueSBzZWdtZW50cyB3aXRoaW4g
dGhlIHNlc3Npb24uCisgICAgUmVmUHRyPFJlcGxheVNlc3Npb24+IHNlc3Npb24gPSBtX3BhZ2Ut
PnJlcGxheUNvbnRyb2xsZXIoKS5sb2FkZWRTZXNzaW9uKCk7CisgICAgbV9zZXNzaW9uc01hcC5h
ZGQoc2Vzc2lvbi0+aWRlbnRpZmllcigpLCBzZXNzaW9uKTsKKworICAgIGZvciAoYXV0byBpdCA9
IHNlc3Npb24tPmJlZ2luKCk7IGl0ICE9IHNlc3Npb24tPmVuZCgpOyArK2l0KQorICAgICAgICBt
X3NlZ21lbnRzTWFwLmFkZCgoKml0KS0+aWRlbnRpZmllcigpLCAqaXQpOworfQorCit2b2lkIElu
c3BlY3RvclJlcGxheUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0
b3JEaXNjb25uZWN0UmVhc29uKQoreworICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyID0gbnVsbHB0
cjsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLmNsZWFyKCk7CisKKyAgICBtX2luc3RydW1lbnRp
bmdBZ2VudHMtPnNldEluc3BlY3RvclJlcGxheUFnZW50KG51bGxwdHIpOworICAgIG1fcGFnZSA9
IG51bGxwdHI7CisKKyAgICAvLyBEcm9wIHJlZmVyZW5jZXMgdG8gYWxsIHNlc3Npb25zIGFuZCBz
ZWdtZW50cy4KKyAgICBtX3Nlc3Npb25zTWFwLmNsZWFyKCk7CisgICAgbV9zZWdtZW50c01hcC5j
bGVhcigpOworfQorCit2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpmcmFtZU5hdmlnYXRlZChE
b2N1bWVudExvYWRlciogbG9hZGVyKQoreworICAgIGlmIChzZXNzaW9uU3RhdGUoKSAhPSBTZXNz
aW9uU3RhdGU6OkluYWN0aXZlKQorICAgICAgICBtX3BhZ2UtPnJlcGxheUNvbnRyb2xsZXIoKS5m
cmFtZU5hdmlnYXRlZChsb2FkZXIpOworfQorCit2b2lkIEluc3BlY3RvclJlcGxheUFnZW50Ojpm
cmFtZURldGFjaGVkKEZyYW1lKiBmcmFtZSkKK3sKKyAgICBpZiAoc2Vzc2lvblN0YXRlKCkgIT0g
U2Vzc2lvblN0YXRlOjpJbmFjdGl2ZSkKKyAgICAgICAgbV9wYWdlLT5yZXBsYXlDb250cm9sbGVy
KCkuZnJhbWVEZXRhY2hlZChmcmFtZSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6
OnNlc3Npb25DcmVhdGVkKFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvbj4gcHJwU2Vzc2lvbikKK3sK
KyAgICBSZWZQdHI8UmVwbGF5U2Vzc2lvbj4gc2Vzc2lvbiA9IHBycFNlc3Npb247CisKKyAgICBT
ZXNzaW9uc01hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fc2Vzc2lvbnNNYXAuYWRkKHNlc3Npb24t
PmlkZW50aWZpZXIoKSwgc2Vzc2lvbik7CisgICAgLy8gQ2FuJ3QgaGF2ZSB0d28gc2Vzc2lvbnMg
d2l0aCBzYW1lIGlkZW50aWZpZXIuCisgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5p
c05ld0VudHJ5KTsKKworICAgIGlmIChtX2Zyb250ZW5kRGlzcGF0Y2hlcikKKyAgICAgICAgbV9m
cm9udGVuZERpc3BhdGNoZXItPnNlc3Npb25DcmVhdGVkKHNlc3Npb24tPmlkZW50aWZpZXIoKSk7
Cit9CisKK3ZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnNlc3Npb25Nb2RpZmllZChQYXNzUmVm
UHRyPFJlcGxheVNlc3Npb24+IHNlc3Npb24pCit7CisgICAgaWYgKG1fZnJvbnRlbmREaXNwYXRj
aGVyKQorICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+c2Vzc2lvbk1vZGlmaWVkKHNlc3Np
b24tPmlkZW50aWZpZXIoKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnNlc3Np
b25Mb2FkZWQoUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uPiBwcnBTZXNzaW9uKQoreworICAgIFJl
ZlB0cjxSZXBsYXlTZXNzaW9uPiBzZXNzaW9uID0gcHJwU2Vzc2lvbjsKKworICAgIC8vIEluIGNh
c2Ugd2UgZGlkbid0IGtub3cgYWJvdXQgdGhlIGxvYWRlZCBzZXNzaW9uLCBhZGQgaGVyZS4KKyAg
ICBtX3Nlc3Npb25zTWFwLmFkZChzZXNzaW9uLT5pZGVudGlmaWVyKCksIHNlc3Npb24pOworCisg
ICAgaWYgKG1fZnJvbnRlbmREaXNwYXRjaGVyKQorICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hl
ci0+c2Vzc2lvbkxvYWRlZChzZXNzaW9uLT5pZGVudGlmaWVyKCkpOworfQorCit2b2lkIEluc3Bl
Y3RvclJlcGxheUFnZW50OjpzZWdtZW50Q3JlYXRlZChQYXNzUmVmUHRyPFJlcGxheVNlc3Npb25T
ZWdtZW50PiBwcnBTZWdtZW50KQoreworICAgIFJlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4g
c2VnbWVudCA9IHBycFNlZ21lbnQ7CisKKyAgICBTZWdtZW50c01hcDo6QWRkUmVzdWx0IHJlc3Vs
dCA9IG1fc2VnbWVudHNNYXAuYWRkKHNlZ21lbnQtPmlkZW50aWZpZXIoKSwgc2VnbWVudCk7Cisg
ICAgLy8gQ2FuJ3QgaGF2ZSB0d28gc2VnbWVudHMgd2l0aCB0aGUgc2FtZSBpZGVudGlmaWVyLgor
ICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CisKKyAgICBpZiAo
bV9mcm9udGVuZERpc3BhdGNoZXIpCisgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5zZWdt
ZW50Q3JlYXRlZChzZWdtZW50LT5pZGVudGlmaWVyKCkpOworfQorCit2b2lkIEluc3BlY3RvclJl
cGxheUFnZW50OjpzZWdtZW50Q29tcGxldGVkKFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21l
bnQ+IHNlZ21lbnQpCit7CisgICAgaWYgKG1fZnJvbnRlbmREaXNwYXRjaGVyKQorICAgICAgICBt
X2Zyb250ZW5kRGlzcGF0Y2hlci0+c2VnbWVudENvbXBsZXRlZChzZWdtZW50LT5pZGVudGlmaWVy
KCkpOworfQorCit2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpzZWdtZW50TG9hZGVkKFBhc3NS
ZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+IHBycFNlZ21lbnQpCit7CisgICAgUmVmUHRyPFJl
cGxheVNlc3Npb25TZWdtZW50PiBzZWdtZW50ID0gcHJwU2VnbWVudDsKKworICAgIC8vIEluIGNh
c2Ugd2UgZGlkbid0IGtub3cgYWJvdXQgdGhlIGxvYWRlZCBzZWdtZW50LCBhZGQgaGVyZS4KKyAg
ICBtX3NlZ21lbnRzTWFwLmFkZChzZWdtZW50LT5pZGVudGlmaWVyKCksIHNlZ21lbnQpOworCisg
ICAgaWYgKG1fZnJvbnRlbmREaXNwYXRjaGVyKQorICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hl
ci0+c2VnbWVudExvYWRlZChzZWdtZW50LT5pZGVudGlmaWVyKCkpOworfQorCit2b2lkIEluc3Bl
Y3RvclJlcGxheUFnZW50OjpzZWdtZW50VW5sb2FkZWQoKQoreworICAgIGlmIChtX2Zyb250ZW5k
RGlzcGF0Y2hlcikKKyAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnNlZ21lbnRVbmxvYWRl
ZCgpOworfQorCit2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpjYXB0dXJlU3RhcnRlZCgpCit7
CisgICAgTE9HKFdlYlJlcGxheSwgIi0tLS0tQ0FQVFVSRSBTVEFSVC0tLS0tIik7CisKKyAgICBp
ZiAobV9mcm9udGVuZERpc3BhdGNoZXIpCisgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5j
YXB0dXJlU3RhcnRlZCgpOworfQorCit2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpjYXB0dXJl
U3RvcHBlZCgpCit7CisgICAgTE9HKFdlYlJlcGxheSwgIi0tLS0tQ0FQVFVSRSBTVE9QLS0tLS0i
KTsKKworICAgIGlmIChtX2Zyb250ZW5kRGlzcGF0Y2hlcikKKyAgICAgICAgbV9mcm9udGVuZERp
c3BhdGNoZXItPmNhcHR1cmVTdG9wcGVkKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yUmVwbGF5QWdl
bnQ6OnBsYXliYWNrU3RhcnRlZCgpCit7CisgICAgTE9HKFdlYlJlcGxheSwgIi0tLS0tUkVQTEFZ
IFNUQVJULS0tLS0iKTsKKworICAgIGlmIChtX2Zyb250ZW5kRGlzcGF0Y2hlcikKKyAgICAgICAg
bV9mcm9udGVuZERpc3BhdGNoZXItPnBsYXliYWNrU3RhcnRlZCgpOworfQorCit2b2lkIEluc3Bl
Y3RvclJlcGxheUFnZW50OjpwbGF5YmFja1BhdXNlZChjb25zdCBSZXBsYXlQb3NpdGlvbiYgcG9z
aXRpb24pCit7CisgICAgTE9HKFdlYlJlcGxheSwgIi0tLS0tUkVQTEFZIFBBVVNFRC0tLS0tIik7
CisKKyAgICBpZiAobV9mcm9udGVuZERpc3BhdGNoZXIpCisgICAgICAgIG1fZnJvbnRlbmREaXNw
YXRjaGVyLT5wbGF5YmFja1BhdXNlZChidWlsZEluc3BlY3Rvck9iamVjdEZvclBvc2l0aW9uKHBv
c2l0aW9uKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnBsYXliYWNrSGl0UG9z
aXRpb24oY29uc3QgUmVwbGF5UG9zaXRpb24mIHBvc2l0aW9uKQoreworICAgIGlmIChtX2Zyb250
ZW5kRGlzcGF0Y2hlcikKKyAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnBsYXliYWNrSGl0
UG9zaXRpb24oYnVpbGRJbnNwZWN0b3JPYmplY3RGb3JQb3NpdGlvbihwb3NpdGlvbiksIG1vbm90
b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpKTsKK30KKwordm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2Vu
dDo6c3RhcnRDYXB0dXJpbmcoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nKQoreworICAgIGlmIChz
ZXNzaW9uU3RhdGUoKSAhPSBTZXNzaW9uU3RhdGU6OkluYWN0aXZlKSB7CisgICAgICAgICplcnJv
clN0cmluZyA9ICJDYW4ndCBzdGFydCBjYXB0dXJpbmcgaWYgdGhlIHNlc3Npb24gaXMgYWxyZWFk
eSBjYXB0dXJpbmcgb3IgcmVwbGF5aW5nLiI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBtX3BhZ2UtPnJlcGxheUNvbnRyb2xsZXIoKS5zdGFydENhcHR1cmluZygpOworfQorCit2b2lk
IEluc3BlY3RvclJlcGxheUFnZW50OjpzdG9wQ2FwdHVyaW5nKEVycm9yU3RyaW5nKiBlcnJvclN0
cmluZykKK3sKKyAgICBpZiAoc2Vzc2lvblN0YXRlKCkgIT0gU2Vzc2lvblN0YXRlOjpDYXB0dXJp
bmcpIHsKKyAgICAgICAgKmVycm9yU3RyaW5nID0gIkNhbid0IHN0b3AgY2FwdHVyaW5nIGlmIGNh
cHR1cmUgaXMgbm90IGluIHByb2dyZXNzLiI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBtX3BhZ2UtPnJlcGxheUNvbnRyb2xsZXIoKS5zdG9wQ2FwdHVyaW5nKCk7Cit9CisKK3ZvaWQg
SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnJlcGxheVRvUG9zaXRpb24oRXJyb3JTdHJpbmcqIGVycm9y
U3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgcG9zaXRpb25PYmplY3QsIGJv
b2wgZmFzdFJlcGxheSkKK3sKKyAgICBSZXBsYXlQb3NpdGlvbiBwb3NpdGlvbjsKKyAgICBpZiAo
IXBvc2l0aW9uT2JqZWN0LT5nZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJzZWdtZW50T2Zmc2V0Iiks
ICZwb3NpdGlvbi5zZWdtZW50T2Zmc2V0KSkgeworICAgICAgICAqZXJyb3JTdHJpbmcgPSAiQ291
bGRuJ3QgZGVjb2RlIFJlcGxheVBvc2l0aW9uIHNlZ21lbnQgb2Zmc2V0IHByb3ZpZGVkIHRvIFJl
cGxheUFnZW50LnJlcGxheVRvUG9zaXRpb24uIjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmICghcG9zaXRpb25PYmplY3QtPmdldE51bWJlcihBU0NJSUxpdGVyYWwoImlucHV0T2Zm
c2V0IiksICZwb3NpdGlvbi5pbnB1dE9mZnNldCkpIHsKKyAgICAgICAgKmVycm9yU3RyaW5nID0g
IkNvdWxkbid0IGRlY29kZSBSZXBsYXlQb3NpdGlvbiBpbnB1dCBvZmZzZXQgcHJvdmlkZWQgdG8g
UmVwbGF5QWdlbnQucmVwbGF5VG9Qb3NpdGlvbi4iOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKHNlc3Npb25TdGF0ZSgpICE9IFNlc3Npb25TdGF0ZTo6SW5hY3RpdmUpIHsKKyAg
ICAgICAgKmVycm9yU3RyaW5nID0gIkNhbid0IHN0YXJ0IHJlcGxheSB3aGlsZSBjYXB0dXJlIG9y
IHBsYXliYWNrIGlzIGluIHByb2dyZXNzLiI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBtX3BhZ2UtPnJlcGxheUNvbnRyb2xsZXIoKS5yZXBsYXlUb1Bvc2l0aW9uKHBvc2l0aW9uLCAo
ZmFzdFJlcGxheSkgPyBEaXNwYXRjaFNwZWVkOjpGYXN0Rm9yd2FyZCA6IERpc3BhdGNoU3BlZWQ6
OlJlYWx0aW1lKTsKK30KKwordm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6cmVwbGF5VG9Db21w
bGV0aW9uKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgYm9vbCBmYXN0UmVwbGF5KQoreworICAg
IGlmIChzZXNzaW9uU3RhdGUoKSAhPSBTZXNzaW9uU3RhdGU6OkluYWN0aXZlKSB7CisgICAgICAg
ICplcnJvclN0cmluZyA9ICJDYW4ndCBzdGFydCByZXBsYXkgd2hpbGUgY2FwdHVyZSBvciBwbGF5
YmFjayBpcyBpbiBwcm9ncmVzcy4iOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9w
YWdlLT5yZXBsYXlDb250cm9sbGVyKCkucmVwbGF5VG9Db21wbGV0aW9uKChmYXN0UmVwbGF5KSA/
IERpc3BhdGNoU3BlZWQ6OkZhc3RGb3J3YXJkIDogRGlzcGF0Y2hTcGVlZDo6UmVhbHRpbWUpOwor
fQorCit2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpwYXVzZVBsYXliYWNrKEVycm9yU3RyaW5n
KiBlcnJvclN0cmluZykKK3sKKyAgICBpZiAoc2Vzc2lvblN0YXRlKCkgIT0gU2Vzc2lvblN0YXRl
OjpSZXBsYXlpbmcpIHsKKyAgICAgICAgKmVycm9yU3RyaW5nID0gIkNhbid0IHBhdXNlIHBsYXli
YWNrIGlmIHBsYXliYWNrIGlzIG5vdCBpbiBwcm9ncmVzcy4iOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgbV9wYWdlLT5yZXBsYXlDb250cm9sbGVyKCkucGF1c2VQbGF5YmFjaygpOwor
fQorCit2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpjYW5jZWxQbGF5YmFjayhFcnJvclN0cmlu
ZyogZXJyb3JTdHJpbmcpCit7CisgICAgaWYgKHNlc3Npb25TdGF0ZSgpID09IFNlc3Npb25TdGF0
ZTo6Q2FwdHVyaW5nKSB7CisgICAgICAgICplcnJvclN0cmluZyA9ICJDYW4ndCBjYW5jZWwgcGxh
eWJhY2sgaWYgY2FwdHVyZSBpcyBpbiBwcm9ncmVzcy4iOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgbV9wYWdlLT5yZXBsYXlDb250cm9sbGVyKCkuY2FuY2VsUGxheWJhY2soKTsKK30K
Kwordm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6c3dpdGNoU2Vzc2lvbihFcnJvclN0cmluZyog
ZXJyb3JTdHJpbmcsIFNlc3Npb25JZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgQVNTRVJU
KGlkZW50aWZpZXIgPiAwKTsKKworICAgIGlmIChzZXNzaW9uU3RhdGUoKSAhPSBTZXNzaW9uU3Rh
dGU6OkluYWN0aXZlKSB7CisgICAgICAgICplcnJvclN0cmluZyA9ICJDYW4ndCBzd2l0Y2ggc2Vz
c2lvbnMgdW5sZXNzIHRoZSBzZXNzaW9uIGlzIG5laXRoZXIgY2FwdHVyaW5nIG9yIHJlcGxheWlu
Zy4iOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPFJlcGxheVNlc3Npb24+
IHNlc3Npb24gPSBmaW5kU2Vzc2lvbihlcnJvclN0cmluZywgaWRlbnRpZmllcik7CisgICAgaWYg
KCFzZXNzaW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3BhZ2UtPnJlcGxheUNvbnRyb2xs
ZXIoKS5zd2l0Y2hTZXNzaW9uKHNlc3Npb24pOworfQorCit2b2lkIEluc3BlY3RvclJlcGxheUFn
ZW50OjppbnNlcnRTZXNzaW9uU2VnbWVudChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIFNlc3Np
b25JZGVudGlmaWVyIHNlc3Npb25JZGVudGlmaWVyLCBTZWdtZW50SWRlbnRpZmllciBzZWdtZW50
SWRlbnRpZmllciwgaW50IHNlZ21lbnRJbmRleCkKK3sKKyAgICBBU1NFUlQoc2Vzc2lvbklkZW50
aWZpZXIgPiAwKTsKKyAgICBBU1NFUlQoc2VnbWVudElkZW50aWZpZXIgPiAwKTsKKyAgICBBU1NF
UlQoc2VnbWVudEluZGV4ID49IDApOworCisgICAgUmVmUHRyPFJlcGxheVNlc3Npb24+IHNlc3Np
b24gPSBmaW5kU2Vzc2lvbihlcnJvclN0cmluZywgc2Vzc2lvbklkZW50aWZpZXIpOworICAgIFJl
ZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4gc2VnbWVudCA9IGZpbmRTZWdtZW50KGVycm9yU3Ry
aW5nLCBzZWdtZW50SWRlbnRpZmllcik7CisKKyAgICBpZiAoIXNlc3Npb24gfHwgIXNlZ21lbnQp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KHNlZ21lbnRJ
bmRleCkgPiBzZXNzaW9uLT5zaXplKCkpIHsKKyAgICAgICAgKmVycm9yU3RyaW5nID0gIkludmFs
aWQgc2VnbWVudCBpbmRleC4iOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHNl
c3Npb24gPT0gbV9wYWdlLT5yZXBsYXlDb250cm9sbGVyKCkubG9hZGVkU2Vzc2lvbigpICYmIHNl
c3Npb25TdGF0ZSgpICE9IFNlc3Npb25TdGF0ZTo6SW5hY3RpdmUpIHsKKyAgICAgICAgKmVycm9y
U3RyaW5nID0gIkNhbid0IG1vZGlmeSBhIGxvYWRlZCBzZXNzaW9uIHVubGVzcyB0aGUgc2Vzc2lv
biBpcyBpbmFjdGl2ZS4iOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc2Vzc2lvbi0+
aW5zZXJ0U2VnbWVudChzZWdtZW50SW5kZXgsIHNlZ21lbnQpOworICAgIHNlc3Npb25Nb2RpZmll
ZChzZXNzaW9uKTsKK30KKwordm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6cmVtb3ZlU2Vzc2lv
blNlZ21lbnQoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBTZXNzaW9uSWRlbnRpZmllciBpZGVu
dGlmaWVyLCBpbnQgc2VnbWVudEluZGV4KQoreworICAgIEFTU0VSVChpZGVudGlmaWVyID4gMCk7
CisgICAgQVNTRVJUKHNlZ21lbnRJbmRleCA+PSAwKTsKKworICAgIFJlZlB0cjxSZXBsYXlTZXNz
aW9uPiBzZXNzaW9uID0gZmluZFNlc3Npb24oZXJyb3JTdHJpbmcsIGlkZW50aWZpZXIpOworCisg
ICAgaWYgKCFzZXNzaW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoc3RhdGljX2Nhc3Q8
c2l6ZV90PihzZWdtZW50SW5kZXgpID49IHNlc3Npb24tPnNpemUoKSkgeworICAgICAgICAqZXJy
b3JTdHJpbmcgPSAiSW52YWxpZCBzZWdtZW50IGluZGV4LiI7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoc2Vzc2lvbiA9PSBtX3BhZ2UtPnJlcGxheUNvbnRyb2xsZXIoKS5sb2Fk
ZWRTZXNzaW9uKCkgJiYgc2Vzc2lvblN0YXRlKCkgIT0gU2Vzc2lvblN0YXRlOjpJbmFjdGl2ZSkg
eworICAgICAgICAqZXJyb3JTdHJpbmcgPSAiQ2FuJ3QgbW9kaWZ5IGEgbG9hZGVkIHNlc3Npb24g
dW5sZXNzIHRoZSBzZXNzaW9uIGlzIGluYWN0aXZlLiI7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBzZXNzaW9uLT5yZW1vdmVTZWdtZW50KHNlZ21lbnRJbmRleCk7CisgICAgc2Vzc2lv
bk1vZGlmaWVkKHNlc3Npb24pOworfQorCitQYXNzUmVmUHRyPFJlcGxheVNlc3Npb24+IEluc3Bl
Y3RvclJlcGxheUFnZW50OjpmaW5kU2Vzc2lvbihFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIFNl
c3Npb25JZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKGlkZW50aWZpZXIgPiAw
KTsKKworICAgIFNlc3Npb25zTWFwOjppdGVyYXRvciBpdCA9IG1fc2Vzc2lvbnNNYXAuZmluZChp
ZGVudGlmaWVyKTsKKyAgICBpZiAoaXQgPT0gbV9zZXNzaW9uc01hcC5lbmQoKSkgeworICAgICAg
ICAqZXJyb3JTdHJpbmcgPSAiQ291bGRuJ3QgZmluZCBzZXNzaW9uIHdpdGggc3BlY2lmaWVkIGlk
ZW50aWZpZXIiOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4g
aXQtPnZhbHVlOworfQorCitQYXNzUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiBJbnNwZWN0
b3JSZXBsYXlBZ2VudDo6ZmluZFNlZ21lbnQoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBTZWdt
ZW50SWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIEFTU0VSVChpZGVudGlmaWVyID4gMCk7
CisKKyAgICBTZWdtZW50c01hcDo6aXRlcmF0b3IgaXQgPSBtX3NlZ21lbnRzTWFwLmZpbmQoaWRl
bnRpZmllcik7CisgICAgaWYgKGl0ID09IG1fc2VnbWVudHNNYXAuZW5kKCkpIHsKKyAgICAgICAg
KmVycm9yU3RyaW5nID0gIkNvdWxkbid0IGZpbmQgc2VnbWVudCB3aXRoIHNwZWNpZmllZCBpZGVu
dGlmaWVyIjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIGl0
LT52YWx1ZTsKK30KKwordm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6Z2V0QXZhaWxhYmxlU2Vz
c2lvbnMoRXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8
U2Vzc2lvbklkZW50aWZpZXI+PiYgc2Vzc2lvbnNMaXN0KQoreworICAgIHNlc3Npb25zTGlzdCA9
IFR5cGVCdWlsZGVyOjpBcnJheTxTZXNzaW9uSWRlbnRpZmllcj46OmNyZWF0ZSgpOworICAgIGZv
ciAoYXV0byBpdCA9IG1fc2Vzc2lvbnNNYXAuYmVnaW4oKTsgaXQgIT0gbV9zZXNzaW9uc01hcC5l
bmQoKTsgKytpdCkKKyAgICAgICAgc2Vzc2lvbnNMaXN0LT5hZGRJdGVtKGl0LT5rZXkpOworfQor
Cit2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpnZXRTZXJpYWxpemVkU2Vzc2lvbihFcnJvclN0
cmluZyogZXJyb3JTdHJpbmcsIFNlc3Npb25JZGVudGlmaWVyIGlkZW50aWZpZXIsIFJlZlB0cjxJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSZXBsYXk6OlJlcGxheVNlc3Npb24+JiBzZXJpYWxpemVk
T2JqZWN0KQoreworICAgIFJlZlB0cjxSZXBsYXlTZXNzaW9uPiBzZXNzaW9uID0gZmluZFNlc3Np
b24oZXJyb3JTdHJpbmcsIGlkZW50aWZpZXIpOworICAgIGlmICghc2Vzc2lvbikgeworICAgICAg
ICAqZXJyb3JTdHJpbmcgPSAiQ291bGRuJ3QgZmluZCB0aGUgc3BlY2lmaWVkIHNlc3Npb24uIjsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNlcmlhbGl6ZWRPYmplY3QgPSBidWlsZElu
c3BlY3Rvck9iamVjdEZvclNlc3Npb24oc2Vzc2lvbik7Cit9CisKK3ZvaWQgSW5zcGVjdG9yUmVw
bGF5QWdlbnQ6OmdldFNlcmlhbGl6ZWRTZWdtZW50KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywg
U2VnbWVudElkZW50aWZpZXIgaWRlbnRpZmllciwgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OlJlcGxheTo6U2Vzc2lvblNlZ21lbnQ+JiBzZXJpYWxpemVkT2JqZWN0KQoreworICAgIFJl
ZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4gc2VnbWVudCA9IGZpbmRTZWdtZW50KGVycm9yU3Ry
aW5nLCBpZGVudGlmaWVyKTsKKyAgICBpZiAoIXNlZ21lbnQpIHsKKyAgICAgICAgKmVycm9yU3Ry
aW5nID0gIkNvdWxkbid0IGZpbmQgdGhlIHNwZWNpZmllZCBzZWdtZW50LiI7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBzZXJpYWxpemVkT2JqZWN0ID0gYnVpbGRJbnNwZWN0b3JPYmpl
Y3RGb3JTZWdtZW50KHNlZ21lbnQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKSAmJiBFTkFCTEUoV0VCX1JFUExBWSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXBsYXlBZ2VudC5oIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlcGxheUFnZW50LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZDliMGJjNDViNzEyMTY1MDM2NDM5ZjhkMTI1NzI5OWFhMjU0MTQwZQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXBsYXlBZ2VudC5oCkBAIC0w
LDAgKzEsMTI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTICJBUworICogSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEKKyAqIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIEluc3BlY3RvclJlcGxheUFnZW50X2gKKyNkZWZpbmUgSW5zcGVjdG9y
UmVwbGF5QWdlbnRfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikgJiYgRU5BQkxFKFdFQl9SRVBM
QVkpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JXZWJBZ2VudEJhc2UuaCIKKyNpbmNsdWRlICJJbnNw
ZWN0b3JXZWJCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JXZWJGcm9u
dGVuZERpc3BhdGNoZXJzLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIERvY3VtZW50TG9hZGVyOworY2xhc3MgRnJhbWU7CitjbGFzcyBJ
bnNwZWN0b3JQYWdlQWdlbnQ7CitjbGFzcyBJbnN0cnVtZW50aW5nQWdlbnRzOworY2xhc3MgUGFn
ZTsKK2NsYXNzIFJlcGxheVNlc3Npb247CitjbGFzcyBSZXBsYXlTZXNzaW9uU2VnbWVudDsKKwor
ZW51bSBjbGFzcyBTZXNzaW9uU3RhdGU7CisKK3N0cnVjdCBSZXBsYXlQb3NpdGlvbjsKKwordHlw
ZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Cit0eXBlZGVmIGludCBTZXNzaW9uSWRlbnRpZmllcjsK
K3R5cGVkZWYgaW50IFNlZ21lbnRJZGVudGlmaWVyOworCitjbGFzcyBJbnNwZWN0b3JSZXBsYXlB
Z2VudCBmaW5hbAorICAgIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZQorICAgICwgcHVibGlj
IEluc3BlY3Rvcjo6SW5zcGVjdG9yUmVwbGF5QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JSZXBsYXlBZ2VudCk7CitwdWJsaWM6Cisg
ICAgSW5zcGVjdG9yUmVwbGF5QWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3RvclBh
Z2VBZ2VudCopOworICAgIH5JbnNwZWN0b3JSZXBsYXlBZ2VudCgpOworCisgICAgdmlydHVhbCB2
b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6Okluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCosIEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5z
cGVjdG9yOjpJbnNwZWN0b3JEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsKKworICAgIC8vIENh
bGxiYWNrcyBmcm9tIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi4KKyAgICB2b2lkIGZyYW1lTmF2
aWdhdGVkKERvY3VtZW50TG9hZGVyKik7CisgICAgdm9pZCBmcmFtZURldGFjaGVkKEZyYW1lKik7
CisKKyAgICAvLyBOb3RpZmljYXRpb25zIGZyb20gUmVwbGF5Q29udHJvbGxlci4KKyAgICB2b2lk
IHNlc3Npb25DcmVhdGVkKFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvbj4pOworICAgIC8vIFRoaXMg
aXMgY2FsbGVkIGludGVybmFsbHkgKHdoZW4gYWRkaW5nL3JlbW92aW5nKSBhbmQgYnkgUmVwbGF5
Q29udHJvbGxlciBkdXJpbmcgY2FwdHVyZS4KKyAgICB2b2lkIHNlc3Npb25Nb2RpZmllZChQYXNz
UmVmUHRyPFJlcGxheVNlc3Npb24+KTsKKyAgICB2b2lkIHNlc3Npb25Mb2FkZWQoUGFzc1JlZlB0
cjxSZXBsYXlTZXNzaW9uPik7CisKKyAgICB2b2lkIHNlZ21lbnRDcmVhdGVkKFBhc3NSZWZQdHI8
UmVwbGF5U2Vzc2lvblNlZ21lbnQ+KTsKKyAgICB2b2lkIHNlZ21lbnRDb21wbGV0ZWQoUGFzc1Jl
ZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4pOworICAgIHZvaWQgc2VnbWVudExvYWRlZChQYXNz
UmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50Pik7CisgICAgdm9pZCBzZWdtZW50VW5sb2FkZWQo
KTsKKworICAgIHZvaWQgY2FwdHVyZVN0YXJ0ZWQoKTsKKyAgICB2b2lkIGNhcHR1cmVTdG9wcGVk
KCk7CisKKyAgICB2b2lkIHBsYXliYWNrU3RhcnRlZCgpOworICAgIHZvaWQgcGxheWJhY2tQYXVz
ZWQoY29uc3QgUmVwbGF5UG9zaXRpb24mKTsKKyAgICB2b2lkIHBsYXliYWNrSGl0UG9zaXRpb24o
Y29uc3QgUmVwbGF5UG9zaXRpb24mKTsKKworICAgIC8vIENhbGxzIGZyb20gdGhlIEluc3BlY3Rv
ciBmcm9udGVuZC4KKyAgICB2b2lkIHN0YXJ0Q2FwdHVyaW5nKEVycm9yU3RyaW5nKikgb3ZlcnJp
ZGU7CisgICAgdm9pZCBzdG9wQ2FwdHVyaW5nKEVycm9yU3RyaW5nKikgb3ZlcnJpZGU7CisKKyAg
ICB2b2lkIHJlcGxheVRvUG9zaXRpb24oRXJyb3JTdHJpbmcqLCBjb25zdCBSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3Q+JiwgYm9vbCBzaG91bGRGYXN0Rm9yd2FyZCkgb3ZlcnJpZGU7
CisgICAgdm9pZCByZXBsYXlUb0NvbXBsZXRpb24oRXJyb3JTdHJpbmcqLCBib29sIHNob3VsZEZh
c3RGb3J3YXJkKSBvdmVycmlkZTsKKyAgICB2b2lkIHBhdXNlUGxheWJhY2soRXJyb3JTdHJpbmcq
KSBvdmVycmlkZTsKKyAgICB2b2lkIGNhbmNlbFBsYXliYWNrKEVycm9yU3RyaW5nKikgb3ZlcnJp
ZGU7CisKKyAgICB2b2lkIHN3aXRjaFNlc3Npb24oRXJyb3JTdHJpbmcqLCBTZXNzaW9uSWRlbnRp
Zmllcikgb3ZlcnJpZGU7CisgICAgdm9pZCBpbnNlcnRTZXNzaW9uU2VnbWVudChFcnJvclN0cmlu
ZyosIFNlc3Npb25JZGVudGlmaWVyLCBTZWdtZW50SWRlbnRpZmllciwgaW50IHNlZ21lbnRJbmRl
eCkgb3ZlcnJpZGU7CisgICAgdm9pZCByZW1vdmVTZXNzaW9uU2VnbWVudChFcnJvclN0cmluZyos
IFNlc3Npb25JZGVudGlmaWVyLCBpbnQgc2VnbWVudEluZGV4KSBvdmVycmlkZTsKKworICAgIHZv
aWQgZ2V0QXZhaWxhYmxlU2Vzc2lvbnMoRXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6QXJyYXk8U2Vzc2lvbklkZW50aWZpZXI+PiYpIG92ZXJyaWRlOworICAgIHZv
aWQgZ2V0U2VyaWFsaXplZFNlc3Npb24oRXJyb3JTdHJpbmcqLCBTZXNzaW9uSWRlbnRpZmllciwg
UmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJlcGxheTo6UmVwbGF5U2Vzc2lvbj4mKSBv
dmVycmlkZTsKKyAgICB2b2lkIGdldFNlcmlhbGl6ZWRTZWdtZW50KEVycm9yU3RyaW5nKiwgU2Vn
bWVudElkZW50aWZpZXIsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSZXBsYXk6OlNl
c3Npb25TZWdtZW50PiYpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIFBhc3NSZWZQdHI8UmVw
bGF5U2Vzc2lvbj4gZmluZFNlc3Npb24oRXJyb3JTdHJpbmcqLCBTZXNzaW9uSWRlbnRpZmllcik7
CisgICAgUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4gZmluZFNlZ21lbnQoRXJyb3JT
dHJpbmcqLCBTZWdtZW50SWRlbnRpZmllcik7CisgICAgU2Vzc2lvblN0YXRlIHNlc3Npb25TdGF0
ZSgpIGNvbnN0OworCisgICAgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yUmVw
bGF5RnJvbnRlbmREaXNwYXRjaGVyPiBtX2Zyb250ZW5kRGlzcGF0Y2hlcjsKKyAgICBSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JSZXBsYXlCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlz
cGF0Y2hlcjsKKyAgICBJbnNwZWN0b3JQYWdlQWdlbnQqIG1fcGFnZUFnZW50OworICAgIFBhZ2Uq
IG1fcGFnZTsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFJlZlB0cjxSZXBsYXlTZXNzaW9u
PiwgV1RGOjpJbnRIYXNoPGludD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8
aW50Pj4gU2Vzc2lvbnNNYXA7CisgICAgU2Vzc2lvbnNNYXAgbV9zZXNzaW9uc01hcDsKKworICAg
IHR5cGVkZWYgSGFzaE1hcDxpbnQsIFJlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4sIFdURjo6
SW50SGFzaDxpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPGludD4+IFNl
Z21lbnRzTWFwOworICAgIFNlZ21lbnRzTWFwIG1fc2VnbWVudHNNYXA7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKSAmJiBFTkFCTEUo
V0VCX1JFUExBWSkKKworI2VuZGlmIC8vIEluc3BlY3RvclJlcGxheUFnZW50X2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnN0cnVtZW50aW5nQWdlbnRzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnN0cnVtZW50aW5nQWdlbnRzLmNwcAppbmRleCBiMjJj
N2I1NzEyZjU2MjM3MDk3MmI4Mjc3NzZhMzQyYjIxNzUyYjA5Li5mZDg4NmFkOGJkYTcxYmYwNTYw
NjMzYjA4N2EyNDJlMzRlNWI2ZWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zdHJ1bWVudGluZ0FnZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3RydW1lbnRpbmdBZ2VudHMuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTU2LDYgKzU3LDkgQEAgSW5zdHJ1bWVudGluZ0FnZW50
czo6SW5zdHJ1bWVudGluZ0FnZW50cyhJbnNwZWN0b3JFbnZpcm9ubWVudCYgZW52aXJvbm1lbnQp
CiAgICAgLCBtX3dvcmtlclJ1bnRpbWVBZ2VudChudWxscHRyKQogICAgICwgbV9pbnNwZWN0b3JU
aW1lbGluZUFnZW50KG51bGxwdHIpCiAgICAgLCBtX2luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudChu
dWxscHRyKQorI2lmIEVOQUJMRShXRUJfUkVQTEFZKQorICAgICwgbV9pbnNwZWN0b3JSZXBsYXlB
Z2VudChudWxscHRyKQorI2VuZGlmCiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKICAgICAsIG1f
aW5zcGVjdG9yRGF0YWJhc2VBZ2VudChudWxscHRyKQogI2VuZGlmCkBAIC04Miw2ICs4Niw5IEBA
IHZvaWQgSW5zdHJ1bWVudGluZ0FnZW50czo6cmVzZXQoKQogICAgIG1fd29ya2VyUnVudGltZUFn
ZW50ID0gbnVsbHB0cjsKICAgICBtX2luc3BlY3RvclRpbWVsaW5lQWdlbnQgPSBudWxscHRyOwog
ICAgIG1faW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50ID0gbnVsbHB0cjsKKyNpZiBFTkFCTEUoV0VC
X1JFUExBWSkKKyAgICBtX2luc3BlY3RvclJlcGxheUFnZW50ID0gbnVsbHB0cjsKKyNlbmRpZgog
I2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAgICAgbV9pbnNwZWN0b3JEYXRhYmFzZUFnZW50ID0g
bnVsbHB0cjsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3RydW1lbnRpbmdBZ2VudHMuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnN0cnVtZW50
aW5nQWdlbnRzLmgKaW5kZXggMzdmYWIxNTA0OWM5ZGU2Mjg0YWRiYTI1NzdhMzMxNmU1NWFmMDQy
MS4uNGY4YjA1ODE5MzgwZWFlMzI1YWY2OGY4MDQzNWE2MmI5ZWMwODY3YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3RydW1lbnRpbmdBZ2VudHMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zdHJ1bWVudGluZ0FnZW50cy5oCkBAIC0xLDUgKzEsNiBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTU2LDYgKzU3LDcgQEAg
Y2xhc3MgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JQYWdlQWdlbnQ7
CiBjbGFzcyBJbnNwZWN0b3JQcm9maWxlckFnZW50OwogY2xhc3MgSW5zcGVjdG9yUmVzb3VyY2VB
Z2VudDsKK2NsYXNzIEluc3BlY3RvclJlcGxheUFnZW50OwogY2xhc3MgSW5zcGVjdG9yVGltZWxp
bmVBZ2VudDsKIGNsYXNzIEluc3BlY3RvcldvcmtlckFnZW50OwogY2xhc3MgUGFnZTsKQEAgLTEw
OCw2ICsxMTAsMTEgQEAgcHVibGljOgogICAgIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudCogaW5z
cGVjdG9yRE9NU3RvcmFnZUFnZW50KCkgY29uc3QgeyByZXR1cm4gbV9pbnNwZWN0b3JET01TdG9y
YWdlQWdlbnQ7IH0KICAgICB2b2lkIHNldEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudChJbnNwZWN0
b3JET01TdG9yYWdlQWdlbnQqIGFnZW50KSB7IG1faW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50ID0g
YWdlbnQ7IH0KIAorI2lmIEVOQUJMRShXRUJfUkVQTEFZKQorICAgIEluc3BlY3RvclJlcGxheUFn
ZW50KiBpbnNwZWN0b3JSZXBsYXlBZ2VudCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yUmVw
bGF5QWdlbnQ7IH0KKyAgICB2b2lkIHNldEluc3BlY3RvclJlcGxheUFnZW50KEluc3BlY3RvclJl
cGxheUFnZW50KiBhZ2VudCkgeyBtX2luc3BlY3RvclJlcGxheUFnZW50ID0gYWdlbnQ7IH0KKyNl
bmRpZgorCiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKICAgICBJbnNwZWN0b3JEYXRhYmFzZUFn
ZW50KiBpbnNwZWN0b3JEYXRhYmFzZUFnZW50KCkgY29uc3QgeyByZXR1cm4gbV9pbnNwZWN0b3JE
YXRhYmFzZUFnZW50OyB9CiAgICAgdm9pZCBzZXRJbnNwZWN0b3JEYXRhYmFzZUFnZW50KEluc3Bl
Y3RvckRhdGFiYXNlQWdlbnQqIGFnZW50KSB7IG1faW5zcGVjdG9yRGF0YWJhc2VBZ2VudCA9IGFn
ZW50OyB9CkBAIC0xNTYsNiArMTYzLDkgQEAgcHJpdmF0ZToKICAgICBXb3JrZXJSdW50aW1lQWdl
bnQqIG1fd29ya2VyUnVudGltZUFnZW50OwogICAgIEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIG1f
aW5zcGVjdG9yVGltZWxpbmVBZ2VudDsKICAgICBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQqIG1f
aW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OworI2lmIEVOQUJMRShXRUJfUkVQTEFZKQorICAgIElu
c3BlY3RvclJlcGxheUFnZW50KiBtX2luc3BlY3RvclJlcGxheUFnZW50OworI2VuZGlmCiAjaWYg
RU5BQkxFKFNRTF9EQVRBQkFTRSkKICAgICBJbnNwZWN0b3JEYXRhYmFzZUFnZW50KiBtX2luc3Bl
Y3RvckRhdGFiYXNlQWdlbnQ7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9wcm90b2NvbC9SZXBsYXkuanNvbiBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9w
cm90b2NvbC9SZXBsYXkuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZWIwMTdhNTQ4OWUxYjk2MGFjYjhhYjcw
ZWQyMjRmMDhkY2E4YTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL3Byb3RvY29sL1JlcGxheS5qc29uCkBAIC0wLDAgKzEsMjQzIEBACit7CisgICAgImRvbWFp
biI6ICJSZXBsYXkiLAorICAgICJkZXNjcmlwdGlvbiI6ICJDb250cm9scyB3ZWIgcmVwbGF5LCBh
bmQgbWFuYWdlcyByZWNvcmRpbmcgc2Vzc2lvbnMgYW5kIHNlZ21lbnRzLiIsCisgICAgInR5cGVz
IjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiU2Vzc2lvbklkZW50aWZpZXIiLCAi
ZGVzY3JpcHRpb24iOiAiVW5pcXVlIHJlcGxheSBzZXNzaW9uIGlkZW50aWZpZXIuIiwKKyAgICAg
ICAgICAgICJ0eXBlIjogImludGVnZXIiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAg
ICAgICJpZCI6ICJTZWdtZW50SWRlbnRpZmllciIsICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgc2Vz
c2lvbiBzZWdtZW50IGlkZW50aWZpZXIuIiwKKyAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIi
CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZXBsYXlQb3NpdGlv
biIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgInByb3BlcnRp
ZXMiOiBbCisgICAgICAgICAgICAgICB7ICJuYW1lIjogInNlZ21lbnRPZmZzZXQiLCAidHlwZSI6
ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIk9mZnNldCBmb3IgYW4gZXZlbnQgbG9vcCBpbnB1
dCB3aXRoaW4gdGhlIHNwZWNpZmllZCBzZXNzaW9uIHNlZ21lbnQuIiB9LAorICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJpbnB1dE9mZnNldCIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRp
b24iOiAiT2Zmc2V0IGZvciBhbiBldmVudCBsb29wIGlucHV0IHdpdGhpbiB0aGUgc3BlY2lmaWVk
IHNlc3Npb24gc2VnbWVudC4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAg
eworICAgICAgICAgICAgImlkIjogIlJlcGxheUlucHV0IiwKKyAgICAgICAgICAgICJ0eXBlIjog
Im9iamVjdCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInR5cGUiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiSW5wdXQg
dHlwZS4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJvZmZzZXQiLCAidHlwZSI6ICJp
bnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIk9mZnNldCBvZiB0aGlzIGlucHV0IGluIGl0cyByZXNw
ZWN0aXZlIHF1ZXVlLiJ9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwg
InR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlRoZSB0
aW1lc3RhbXAgb2YgdGhpcyBpbnB1dC4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJk
YXRhIiwgInR5cGUiOiAib2JqZWN0IiwgImRlc2NyaXB0aW9uIjogIlBlci1pbnB1dCBwYXlsb2Fk
LiIgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAi
aWQiOiAiUmVwbGF5SW5wdXRRdWV1ZSIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAor
ICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0
eXBlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIlF1ZXVlIHR5cGUiIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpbnB1dHMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVt
cyI6IHsgIiRyZWYiOiAiUmVwbGF5SW5wdXQifSwgImRlc2NyaXB0aW9uIjogIklucHV0cyBiZWxv
bmdpbmcgdG8gdGhpcyBxdWV1ZS4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAg
ICAgeworICAgICAgICAgICAgImlkIjogIlNlc3Npb25TZWdtZW50IiwgImRlc2NyaXB0aW9uIjog
IkEgc3RhbmRhbG9uZSBzZWdtZW50IG9mIGEgcmVwbGF5IHNlc3Npb24gdGhhdCBjb3JyZXNwb25k
cyB0byBhIHNpbmdsZSBtYWluIGZyYW1lIG5hdmlnYXRpb24gYW5kIGV4ZWN1dGlvbi4iLAorICAg
ICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaWQiLCAiJHJlZiI6ICJTZWdtZW50SWRlbnRpZmll
ciIsICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgc2Vzc2lvbiBzZWdtZW50IGlkZW50aWZpZXIuIiB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVy
IiwgImRlc2NyaXB0aW9uIjogIlN0YXJ0IHRpbWUgb2YgdGhlIHNlZ21lbnQsIGluIG1pbGxpc2Vj
b25kcyBzaW5jZSB0aGUgZXBvY2guIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicXVl
dWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICIkcmVmIjogIlJlcGxheUlucHV0UXVl
dWUifSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJpZCI6ICJSZXBsYXlTZXNzaW9uIiwgImRlc2NyaXB0aW9uIjogIkFuIG9yZGVyZWQgY29sbGVj
dGlvbiBvZiByZXBsYXkgc2Vzc2lvbiBzZWdtZW50cy4iLAorICAgICAgICAgICAgInR5cGUiOiAi
b2JqZWN0IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiaWQiLCAiJHJlZiI6ICJTZXNzaW9uSWRlbnRpZmllciIsICJkZXNjcmlwdGlvbiI6
ICJVbmlxdWUgcmVwbGF5IHNlc3Npb24gaWRlbnRpZmllci4iIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAiZGVzY3JpcHRpb24iOiAi
Q3JlYXRpb24gdGltZSBvZiBzZXNzaW9uLCBpbiBtaWxsaXNlY29uZHMgc2luY2UgdGhlIGVwb2No
LiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNlZ21lbnRzIiwgInR5cGUiOiAiYXJy
YXkiLCAiaXRlbXMiOiB7ICIkcmVmIjogIlNlZ21lbnRJZGVudGlmaWVyIiB9LCAiZGVzY3JpcHRp
b24iOiAiQW4gb3JkZXJlZCBsaXN0IGlkZW50aWZpZXJzIGZvciB0aGUgc2VnbWVudHMgdGhhdCBj
b21wcmlzZSB0aGlzIHJlcGxheSBzZXNzaW9uLiIgfQorICAgICAgICAgICAgXQorICAgICAgICB9
CisgICAgXSwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1l
IjogInN0YXJ0Q2FwdHVyaW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJTdGFydHMg
Y2FwdHVyZSBvZiBhIG5ldyByZXBsYXkgc2Vzc2lvbi4iCisgICAgICAgIH0sCisgICAgICAgIHsK
KyAgICAgICAgICAgICJuYW1lIjogInN0b3BDYXB0dXJpbmciLAorICAgICAgICAgICAgImRlc2Ny
aXB0aW9uIjogIlN0b3BzIGNhcHR1cmUgb2YgdGhlIGN1cnJlbnRseSByZWNvcmRpbmcgcmVwbGF5
IHNlc3Npb24uIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJy
ZXBsYXlUb1Bvc2l0aW9uIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJTZWVrIGV4ZWN1
dGlvbiB0byBhIHNwZWNpZmljIHBvc2l0aW9uIHdpdGhpbiB0aGUgcmVwbGF5IHNlc3Npb24uIiwK
KyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
cG9zaXRpb24iLCAiJHJlZiI6ICJSZXBsYXlQb3NpdGlvbiIgfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInNob3VsZEZhc3RGb3J3YXJkIiwgInR5cGUiOiAiYm9vbGVhbiIgfQorICAgICAg
ICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJyZXBs
YXlUb0NvbXBsZXRpb24iLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlJlcGxheSBhbGwg
c2Vzc2lvbiBzZWdtZW50cyBjb21wbGV0ZWx5LiIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6
IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNob3VsZEZhc3RGb3J3YXJkIiwgInR5cGUi
OiAiYm9vbGVhbiIgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAg
ICAgICAgICAibmFtZSI6ICJwYXVzZVBsYXliYWNrIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJQYXVzZXMgcGxheWJhY2sgaW4gdGhlIGN1cnJlbnQgc2VnbWVudC4gQ2FuIGJlIHJlc3Vt
ZWQgYnkgdXNpbmcgYSByZXBsYXkgY29tbWFuZC4iCisgICAgICAgICAgICB9LAorICAgICAgICB7
CisgICAgICAgICAgICAibmFtZSI6ICJjYW5jZWxQbGF5YmFjayIsCisgICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAiQ2FuY2VscyBwbGF5YmFjayBvZiB0aGUgY3VycmVudCBzZWdtZW50LiBGdXJ0
aGVyIHJlcGxheWluZyB3aWxsIHN0YXJ0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgY3VycmVu
dCBzZWdtZW50LiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAi
c3dpdGNoU2Vzc2lvbiIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5sb2FkcyB0aGUg
Y3VycmVudCByZXBsYXkgc2Vzc2lvbiBhbmQgbG9hZHMgdGhlIHNwZWNpZmllZCBzZXNzaW9uIiwK
KyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
c2Vzc2lvbklkZW50aWZpZXIiLCAiJHJlZiI6ICJTZXNzaW9uSWRlbnRpZmllciIgfQorICAgICAg
ICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJpbnNl
cnRTZXNzaW9uU2VnbWVudCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiU3BsaWNlcyB0
aGUgc3BlY2lmaWVkIHNlc3Npb24gc2VnbWVudCBpbnRvIHRoZSBzZXNzaW9uIGF0IHRoZSBzcGVj
aWZpZWQgaW5kZXguIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAic2Vzc2lvbklkZW50aWZpZXIiLCAiJHJlZiI6ICJTZXNzaW9uSWRlbnRp
ZmllciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNlZ21lbnRJZGVudGlmaWVyIiwg
IiRyZWYiOiAiU2VnbWVudElkZW50aWZpZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJzZWdtZW50SW5kZXgiLCAidHlwZSI6ICJpbnRlZ2VyIiB9CisgICAgICAgICAgICBdCisgICAg
ICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogInJlbW92ZVNlc3Npb25TZWdt
ZW50IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJSZW1vdmVzIHRoZSBzZXNzaW9uIHNl
Z21lbnQgYXQgdGhlIHNwZWNpZmllZCBwb3NpdGlvbiBmcm9tIHRoZSBzZXNzaW9uLiIsCisgICAg
ICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNlc3Np
b25JZGVudGlmaWVyIiwgIiRyZWYiOiAiU2Vzc2lvbklkZW50aWZpZXIiIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJzZWdtZW50SW5kZXgiLCAidHlwZSI6ICJpbnRlZ2VyIiB9CisgICAg
ICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImdl
dEF2YWlsYWJsZVNlc3Npb25zIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJSZXR1cm5z
IGlkZW50aWZpZXJzIG9mIGFsbCBhdmFpbGFibGUgc2Vzc2lvbnMuIiwKKyAgICAgICAgICAgICJy
ZXR1cm5zIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaWRzIiwgInR5cGUiOiAiYXJy
YXkiLCAiaXRlbXMiOiB7ICIkcmVmIjogIlNlc3Npb25JZGVudGlmaWVyIiB9IH0KKyAgICAgICAg
ICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZ2V0U2Vy
aWFsaXplZFNlc3Npb24iLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlJldHVybnMgdGhl
IHNwZWNpZmllZCBzZXNzaW9uIHNlcmlhbGl6ZWQgdG8gYSBKU09OIG9iamVjdC4iLAorICAgICAg
ICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzZXNzaW9u
SWQiLCAiJHJlZiI6ICJTZXNzaW9uSWRlbnRpZmllciIgfQorICAgICAgICAgICAgXSwKKyAgICAg
ICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2Vzc2lvbiIs
ICIkcmVmIjogIlJlcGxheVNlc3Npb24iLCAiZGVzY3JpcHRpb24iOiAiVGhlIHJlcXVlc3RlZCBz
ZXJpYWxpemVkIHJlcGxheSBzZXNzaW9uLiIsICJvcHRpb25hbCI6IHRydWUgfQorICAgICAgICAg
ICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJnZXRTZXJp
YWxpemVkU2VnbWVudCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiUmV0dXJucyB0aGUg
c2Vzc2lvbiBzZWdtZW50IHNlcmlhbGl6ZWQgdG8gYSBKU09OIG9iamVjdC4iLAorICAgICAgICAg
ICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpZCIsICIkcmVm
IjogIlNlZ21lbnRJZGVudGlmaWVyIiB9CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgInJl
dHVybnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzZWdtZW50IiwgIiRyZWYiOiAi
U2Vzc2lvblNlZ21lbnQiLCAiZGVzY3JpcHRpb24iOiAiVGhlIHJlcXVlc3RlZCBzZXJpYWxpemVk
IHNlc3Npb24gc2VnbWVudC4iLCAib3B0aW9uYWwiOiB0cnVlIH0KKyAgICAgICAgICAgIF0KKyAg
ICAgICAgfQorICAgIF0sCisKKyAgICAiZXZlbnRzIjogWworICAgICAgICB7CisgICAgICAgICAg
ICAibmFtZSI6ICJjYXB0dXJlU3RhcnRlZCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
RmlyZWQgd2hlbiBjYXB0dXJlIGhhcyBzdGFydGVkLiIKKyAgICAgICAgfSwKKyAgICAgICAgewor
ICAgICAgICAgICAgIm5hbWUiOiAiY2FwdHVyZVN0b3BwZWQiLAorICAgICAgICAgICAgImRlc2Ny
aXB0aW9uIjogIkZpcmVkIHdoZW4gY2FwdHVyZSBoYXMgc3RvcHBlZC4iCisgICAgICAgIH0sCisg
ICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogInBsYXliYWNrSGl0UG9zaXRpb24iLAorICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogIkEgcG9zaXRpb24gd2FzIHJlYWNoZWQgZHVyaW5nIHBs
YXliYWNrIG9mIHRoZSBzZXNzaW9uLiIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInBvc2l0aW9uIiwgIiRyZWYiOiAiUmVwbGF5UG9zaXRp
b24iLCAiZGVzY3JpcHRpb24iOiAiVGhlIHBsYXliYWNrIHBvc2l0aW9uIHRoYXQgd2FzIGhpdC4i
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1i
ZXIiLCAiZGVzY3JpcHRpb24iOiAiQSB0aW1lc3RhbXAgZm9yIHRoZSBldmVudC4iIH0KKyAgICAg
ICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAicGxh
eWJhY2tTdGFydGVkIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJGaXJlZCB3aGVuIHNl
c3Npb24gcGxheWJhY2sgaGFzIHN0YXJ0ZWQuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAg
ICAgICAgICAibmFtZSI6ICJwbGF5YmFja1BhdXNlZCIsCisgICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAiRmlyZWQgd2hlbiBzZXNzaW9uIHBsYXliYWNrIGhhcyBwYXVzZWQsIGJ1dCBub3QgZmlu
aXNoZWQuIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAicG9zaXRpb24iLCAiJHJlZiI6ICJSZXBsYXlQb3NpdGlvbiIsICJkZXNjcmlwdGlv
biI6ICJUaGUgcGxheWJhY2sgcG9zaXRpb24gaW1tZWRpYXRlbHkgcHJpb3IgdG8gd2hlcmUgcGxh
eWJhY2sgaXMgcGF1c2VkLiIgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7
CisgICAgICAgICAgICAibmFtZSI6ICJwbGF5YmFja0ZpbmlzaGVkIiwKKyAgICAgICAgICAgICJk
ZXNjcmlwdGlvbiI6ICJGaXJlZCB3aGVuIHNlc3Npb24gcGxheWJhY2sgaGFzIHN0b3BwZWQuIgor
ICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJpbnB1dFN1cHByZXNz
aW9uQ2hhbmdlZCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRmlyZWQgd2hlbiB0aGUg
cmVwbGF5IGNvbnRyb2xsZXIgc3RhcnRzIG9yIHN0b3BzIHN1cHByZXNzaW5nIHVzZXIgaW5wdXRz
LiIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogIndpbGxTdXBwcmVzcyIsICJ0eXBlIjogImJvb2xlYW4iLCAiZGVzY3JpcHRpb24iOiAiV2hl
dGhlciB1c2VyIGlucHV0cyB3aWxsIGJlIHN1cHByZXNzZWQgZHVyaW5nIHBsYXliYWNrLiIgfQor
ICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6
ICJzZXNzaW9uQ3JlYXRlZCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRmlyZWQgd2hl
biBhIG5ldyByZXBsYXkgc2Vzc2lvbiBpcyBjcmVhdGVkIiwKKyAgICAgICAgICAgICJwYXJhbWV0
ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaWQiLCAiJHJlZiI6ICJTZXNzaW9u
SWRlbnRpZmllciIsICJkZXNjcmlwdGlvbiI6ICJJZGVudGlmaWVyIGZvciB0aGUgY3JlYXRlZCBz
ZXNzaW9uLiIgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAg
ICAgICAibmFtZSI6ICJzZXNzaW9uTW9kaWZpZWQiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogIkZpcmVkIHdoZW4gYSBzZXNzaW9uJ3Mgc2VnbWVudHMgaGF2ZSBjaGFuZ2VkLiIsCisgICAg
ICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImlkIiwg
IiRyZWYiOiAiU2Vzc2lvbklkZW50aWZpZXIiLCAiZGVzY3JpcHRpb24iOiAiSWRlbnRpZmllciBm
b3IgdGhlIHNlc3Npb24gdGhlIHNlZ21lbnQgd2FzIGFkZGVkIHRvLiIgfQorICAgICAgICAgICAg
XQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJzZXNzaW9uUmVt
b3ZlZCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRmlyZWQgd2hlbiBhIHJlcGxheSBz
ZXNzaW9uIGlzIHJlbW92ZWQgYW5kIGNhbiBubyBsb25nZXIgYmUgbG9hZGVkLiIsCisgICAgICAg
ICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImlkIiwgIiRy
ZWYiOiAiU2Vzc2lvbklkZW50aWZpZXIiLCAiZGVzY3JpcHRpb24iOiAiSWRlbnRpZmllciBmb3Ig
dGhlIHJlbW92ZWQgc2Vzc2lvbi4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAg
ICAgeworICAgICAgICAgICAgIm5hbWUiOiAic2Vzc2lvbkxvYWRlZCIsCisgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiRmlyZWQgd2hlbiBhIHJlcGxheSBzZXNzaW9uIGlzIGxvYWRlZC4iLAor
ICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJp
ZCIsICIkcmVmIjogIlNlc3Npb25JZGVudGlmaWVyIiwgImRlc2NyaXB0aW9uIjogIklkZW50aWZp
ZXIgZm9yIHRoZSBsb2FkZWQgc2Vzc2lvbi4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwK
KyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAic2VnbWVudENyZWF0ZWQiLAorICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogIkZpcmVkIHdoZW4gYSBuZXcgc2Vzc2lvbiBzZWdtZW50IGlz
IGNyZWF0ZWQuIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiaWQiLCAiJHJlZiI6ICJTZWdtZW50SWRlbnRpZmllciIsICJkZXNjcmlwdGlv
biI6ICJJZGVudGlmaWVyIGZvciB0aGUgY3JlYXRlZCBzZXNzaW9uIHNlZ21lbnQuIiB9CisgICAg
ICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogInNl
Z21lbnRSZW1vdmVkIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJGaXJlZCB3aGVuIGEg
c2Vzc2lvbiBzZWdtZW50IGlzIHJlbW92ZWQgYW5kIGNhbiBubyBsb25nZXIgYmUgcmVwbGF5ZWQg
YXMgcGFydCBvZiBhIHNlc3Npb24uIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiaWQiLCAiJHJlZiI6ICJTZWdtZW50SWRlbnRpZmllciIs
ICJkZXNjcmlwdGlvbiI6ICJJZGVudGlmaWVyIGZvciB0aGUgcmVtb3ZlZCBzZXNzaW9uIHNlZ21l
bnQuIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJuYW1lIjogInNlZ21lbnRDb21wbGV0ZWQiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
IkZpcmVkIHdoZW4gYSBzZXNzaW9uIHNlZ21lbnQgaXMgY29tcGxldGVkIGFuZCBjYW4gbm8gbG9u
Z2VyIGhhdmUgaW5wdXRzIGFkZGVkIHRvIGl0LiIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6
IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImlkIiwgIiRyZWYiOiAiU2VnbWVudElkZW50
aWZpZXIiLCAiZGVzY3JpcHRpb24iOiAiSWRlbnRpZmllciBmb3IgdGhlIGNvbXBsZXRlZCBzZXNz
aW9uIHNlZ21lbnQuIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJuYW1lIjogInNlZ21lbnRMb2FkZWQiLAorICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIkZpcmVkIHdoZW4gYSBzZWdtZW50IGlzIGxvYWRlZC4iLAorICAgICAgICAgICAgInBh
cmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzZWdtZW50SWQiLCAiJHJl
ZiI6ICJTZWdtZW50SWRlbnRpZmllciIsICJkZXNjcmlwdGlvbiI6ICJJZCBmb3IgdGhlIGxvYWRl
ZCBzZWdtZW50LiIgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAg
ICAgICAgICAibmFtZSI6ICJzZWdtZW50VW5sb2FkZWQiLAorICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIkZpcmVkIHdoZW4gYSBzZWdtZW50IGlzIHVubG9hZGVkLiIKKyAgICAgICAgfQorICAg
IF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IGNhNTI1Nzk1ZjYyMTdmNjgxMGFkZGI5NDBmMDc5
ZmNjYTkyNDNkYTUuLjgxYjY4ZGMxYjAxMGI4M2FlNzI5MmFhZjNiZmI0NmJjN2FmMWE3M2QgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlLmNwcApAQCAtOTIsNiArOTIsMTAgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9C
YXNlNjQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKKyNpZiBFTkFCTEUo
V0VCX1JFUExBWSkKKyNpbmNsdWRlICJSZXBsYXlDb250cm9sbGVyLmgiCisjZW5kaWYKKwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgSGFzaFNldDxQYWdlKj4qIGFsbFBhZ2VzOwpAQCAt
MTM2LDYgKzE0MCw5IEBAIFBhZ2U6OlBhZ2UoUGFnZUNsaWVudHMmIHBhZ2VDbGllbnRzKQogI2lm
IEVOQUJMRShDT05URVhUX01FTlVTKQogICAgICwgbV9jb250ZXh0TWVudUNvbnRyb2xsZXIoc3Rk
OjptYWtlX3VuaXF1ZTxDb250ZXh0TWVudUNvbnRyb2xsZXI+KCp0aGlzLCAqcGFnZUNsaWVudHMu
Y29udGV4dE1lbnVDbGllbnQpKQogI2VuZGlmCisjaWYgRU5BQkxFKFdFQl9SRVBMQVkpCisgICAg
LCBtX3JlcGxheUNvbnRyb2xsZXIoc3RkOjptYWtlX3VuaXF1ZTxSZXBsYXlDb250cm9sbGVyPigq
dGhpcykpCisjZW5kaWYKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgICwgbV9pbnNwZWN0b3JD
b250cm9sbGVyKHN0ZDo6bWFrZV91bmlxdWU8SW5zcGVjdG9yQ29udHJvbGxlcj4oKnRoaXMsIHBh
Z2VDbGllbnRzLmluc3BlY3RvckNsaWVudCkpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKaW5kZXggOTZm
MTE4ZDE3Mjk1MzQ1OWJjNmI1NzgxNDZlNDJiMmIwMzYxMjEyNi4uNjE4NWFjNzM1Y2ZjOGRmYzRl
ZTViNzQ4MmQ2ZTM1MTQ3ZTdlMzNmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKQEAgLTk4LDYgKzk4LDcgQEAg
Y2xhc3MgUHJvZ3Jlc3NUcmFja2VyQ2xpZW50OwogY2xhc3MgUmFuZ2U7CiBjbGFzcyBSZW5kZXJP
YmplY3Q7CiBjbGFzcyBSZW5kZXJUaGVtZTsKK2NsYXNzIFJlcGxheUNvbnRyb2xsZXI7CiBjbGFz
cyBWaXNpYmxlU2VsZWN0aW9uOwogY2xhc3MgU2Nyb2xsYWJsZUFyZWE7CiBjbGFzcyBTY3JvbGxp
bmdDb29yZGluYXRvcjsKQEAgLTE5Niw2ICsxOTcsOSBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKENP
TlRFWFRfTUVOVVMpCiAgICAgQ29udGV4dE1lbnVDb250cm9sbGVyJiBjb250ZXh0TWVudUNvbnRy
b2xsZXIoKSBjb25zdCB7IHJldHVybiAqbV9jb250ZXh0TWVudUNvbnRyb2xsZXI7IH0KICNlbmRp
ZgorI2lmIEVOQUJMRShXRUJfUkVQTEFZKQorICAgIFJlcGxheUNvbnRyb2xsZXImIHJlcGxheUNv
bnRyb2xsZXIoKSBjb25zdCB7IHJldHVybiAqbV9yZXBsYXlDb250cm9sbGVyOyB9CisjZW5kaWYK
ICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIEluc3BlY3RvckNvbnRyb2xsZXImIGluc3BlY3Rv
ckNvbnRyb2xsZXIoKSBjb25zdCB7IHJldHVybiAqbV9pbnNwZWN0b3JDb250cm9sbGVyOyB9CiAj
ZW5kaWYKQEAgLTQzOSw2ICs0NDMsOSBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShDT05URVhUX01F
TlVTKQogICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDb250ZXh0TWVudUNvbnRyb2xsZXI+IG1f
Y29udGV4dE1lbnVDb250cm9sbGVyOwogI2VuZGlmCisjaWYgRU5BQkxFKFdFQl9SRVBMQVkpCisg
ICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPFJlcGxheUNvbnRyb2xsZXI+IG1fcmVwbGF5Q29udHJv
bGxlcjsKKyNlbmRpZgogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgY29uc3Qgc3RkOjp1bmlx
dWVfcHRyPEluc3BlY3RvckNvbnRyb2xsZXI+IG1faW5zcGVjdG9yQ29udHJvbGxlcjsKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9nZ2luZy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vTG9nZ2luZy5oCmluZGV4IDRlZjIyZjYzMjY3NjQ2NjkwZmZkMmQ0
NWIzY2YwNTExNTg5YTYyYTcuLjkwNjI0ODIyOWY2MDM4MjhkZmE4MjljZDUzYzgxNmUxYjYyZGIz
OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xvZ2dpbmcuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Mb2dnaW5nLmgKQEAgLTcwLDYgKzcwLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIE0oVGhyZWFkaW5nKSBcCiAgICAgTShXZWJBdWRpbykgXAogICAg
IE0oV2ViR0wpIFwKKyAgICBNKFdlYlJlcGxheSkgXAogCiAjZGVmaW5lIERFQ0xBUkVfTE9HX0NI
QU5ORUwobmFtZSkgXAogICAgIGV4dGVybiBXVEZMb2dDaGFubmVsIEpPSU5fTE9HX0NIQU5ORUxf
V0lUSF9QUkVGSVgoTE9HX0NIQU5ORUxfUFJFRklYLCBuYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlcGxheS9BbGxSZXBsYXlJbnB1dHMuaCBiL1NvdXJjZS9XZWJDb3JlL3JlcGxh
eS9BbGxSZXBsYXlJbnB1dHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YTk1MWUyNzBkMmM2ODA4MWZiOTAwYmI0
NmMxM2E1NDIwZTllZTI4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVwbGF5
L0FsbFJlcGxheUlucHV0cy5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUworICogSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEKKyAqIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBUaGlzIGZpbGUgaXMgdGhlIGluY2x1ZGUgZXF1
aXZhbGVudCBmb3IgV0VCX1JFUExBWV9JTlBVVF9OQU1FU19GT1JfRUFDSC4KKy8vIE5vdGUgdGhh
dCB0aGVyZSBpcyBub3QgYW4gZXhhY3QgY29ycmVzcG9uZGVuY2UgYmV0d2VlbiB0aGUgdHdvLCBz
aW5jZQorLy8gU29tZSBpbnB1dCB0eXBlcyByZXNpZGUgaW4gdGhlIHNhbWUgZmlsZS4KKworLy8g
TWFrZSBzdXJlIHRoYXQgdGhpcyBzdGF5cyBpbiBzeW5jIHdpdGggUmVwbGF5SW5wdXRUeXBlcy5o
IGZvciBjdXN0b20gaW5wdXRzLgorCisjaWZuZGVmIEFsbFJlcGxheUlucHV0c19oCisjZGVmaW5l
IEFsbFJlcGxheUlucHV0c19oCisKKyNpZiBFTkFCTEUoV0VCX1JFUExBWSkKKworI2luY2x1ZGUg
IldlYlJlcGxheUlucHV0cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTUmVwbGF5SW5w
dXRzLmg+CisKKyNkZWZpbmUgSU1QT1JUX0ZST01fSlNDX05BTUVTUEFDRShuYW1lKSBcCit1c2lu
ZyBKU0M6Om5hbWU7IFwKKworSlNfUkVQTEFZX0lOUFVUX05BTUVTX0ZPUl9FQUNIKElNUE9SVF9G
Uk9NX0pTQ19OQU1FU1BBQ0UpCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JFUExBWSkKKworI2Vu
ZGlmIC8vIEFsbFJlcGxheUlucHV0c19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZXBs
YXkvQ2FwdHVyaW5nSW5wdXRDdXJzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVwbGF5L0NhcHR1
cmluZ0lucHV0Q3Vyc29yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yOWM2MmRmNjE5MDkxOWE0YmQ0YjI5ZDJl
Y2E0Mjk5ODllYTYxYTQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVwbGF5
L0NhcHR1cmluZ0lucHV0Q3Vyc29yLmNwcApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMKKyAqIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RAorICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBCisgKiBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkNhcHR1cmluZ0lucHV0Q3Vyc29yLmgiCisKKyNpZiBFTkFCTEUoV0VCX1JFUExBWSkK
KworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJTZWdtZW50ZWRJbnB1dFN0b3JhZ2Uu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDYXB0dXJpbmdJbnB1dEN1cnNvcjo6Q2FwdHVy
aW5nSW5wdXRDdXJzb3IoU2VnbWVudGVkSW5wdXRTdG9yYWdlKiBzdG9yYWdlKQorICAgIDogbV9z
dG9yYWdlKHN0b3JhZ2UpCit7CisgICAgQVNTRVJUKG1fc3RvcmFnZSk7CisKKyAgICBMT0coV2Vi
UmVwbGF5LCAiJS0zMHNDcmVhdGVkIGNhcHR1cmUgY3Vyc29yPSVwLlxuIiwgIltSZXBsYXlDb250
cm9sbGVyXSIsICh2b2lkKil0aGlzKTsKK30KKworQ2FwdHVyaW5nSW5wdXRDdXJzb3I6On5DYXB0
dXJpbmdJbnB1dEN1cnNvcigpCit7CisgICAgTE9HKFdlYlJlcGxheSwgIiUtMzBzRGVzdHJveWVk
IGNhcHR1cmUgY3Vyc29yPSVwLlxuIiwgIltSZXBsYXlDb250cm9sbGVyXSIsICh2b2lkKil0aGlz
KTsKK30KKworUGFzc1JlZlB0cjxDYXB0dXJpbmdJbnB1dEN1cnNvcj4gQ2FwdHVyaW5nSW5wdXRD
dXJzb3I6OmNyZWF0ZShTZWdtZW50ZWRJbnB1dFN0b3JhZ2UqIHN0b3JhZ2UpCit7CisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBDYXB0dXJpbmdJbnB1dEN1cnNvcihzdG9yYWdlKSk7Cit9CisKK3Zv
aWQgQ2FwdHVyaW5nSW5wdXRDdXJzb3I6OnN0b3JlSW5wdXQoc3RkOjp1bmlxdWVfcHRyPE5vbmRl
dGVybWluaXN0aWNJbnB1dEJhc2U+IGlucHV0KQoreworICAgIEFTU0VSVChpbnB1dCk7CisgICAg
bV9zdG9yYWdlLT5zdG9yZShzdGQ6Om1vdmUoaW5wdXQpKTsKK30KKworTm9uZGV0ZXJtaW5pc3Rp
Y0lucHV0QmFzZSogQ2FwdHVyaW5nSW5wdXRDdXJzb3I6OmxvYWRJbnB1dChJbnB1dFF1ZXVlLCBj
b25zdCBBdG9taWNTdHJpbmcmKQoreworICAgIC8vIENhbid0IGxvYWQgaW5wdXRzIGZyb20gY2Fw
dHVyaW5nIGN1cnNvci4KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKworTm9uZGV0ZXJtaW5pc3RpY0lucHV0QmFzZSogQ2FwdHVyaW5nSW5wdXRDdXJz
b3I6OnVuY2hlY2tlZExvYWRJbnB1dChJbnB1dFF1ZXVlKQoreworICAgIC8vIENhbid0IGxvYWQg
aW5wdXRzIGZyb20gY2FwdHVyaW5nIGN1cnNvci4KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworfTsgLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShUSU1FQUxQU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZXBs
YXkvQ2FwdHVyaW5nSW5wdXRDdXJzb3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9DYXB0dXJp
bmdJbnB1dEN1cnNvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4MmU5YjI1OWIxN2ZjZTgxMGJhYmRiZjBiZDYz
N2Y2MDBhOTFiNjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvQ2Fw
dHVyaW5nSW5wdXRDdXJzb3IuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMKKyAqIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICog
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBCisgKiBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDYXB0dXJpbmdJbnB1dEN1cnNvcl9o
CisjZGVmaW5lIENhcHR1cmluZ0lucHV0Q3Vyc29yX2gKKworI2lmIEVOQUJMRShXRUJfUkVQTEFZ
KQorCisjaW5jbHVkZSA8cmVwbGF5L0lucHV0Q3Vyc29yLmg+CisjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRXZlbnRMb29wSW5wdXRC
YXNlOworY2xhc3MgU2VnbWVudGVkSW5wdXRTdG9yYWdlOworCitjbGFzcyBDYXB0dXJpbmdJbnB1
dEN1cnNvciBmaW5hbCA6IHB1YmxpYyBJbnB1dEN1cnNvciB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoQ2FwdHVyaW5nSW5wdXRDdXJzb3IpOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPENhcHR1cmluZ0lucHV0Q3Vyc29yPiBjcmVhdGUoU2VnbWVudGVkSW5wdXRTdG9yYWdlKik7
CisgICAgdmlydHVhbCB+Q2FwdHVyaW5nSW5wdXRDdXJzb3IoKTsKKworICAgIHZpcnR1YWwgYm9v
bCBpc0NhcHR1cmluZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgaXNSZXBsYXlpbmcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQor
CisgICAgdmlydHVhbCBOb25kZXRlcm1pbmlzdGljSW5wdXRCYXNlKiB1bmNoZWNrZWRMb2FkSW5w
dXQoSW5wdXRRdWV1ZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHN0b3JlSW5wdXQoc3Rk
Ojp1bmlxdWVfcHRyPE5vbmRldGVybWluaXN0aWNJbnB1dEJhc2U+KSBvdmVycmlkZTsKK3Byb3Rl
Y3RlZDoKKyAgICB2aXJ0dWFsIE5vbmRldGVybWluaXN0aWNJbnB1dEJhc2UqIGxvYWRJbnB1dChJ
bnB1dFF1ZXVlLCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUpIG92ZXJyaWRlOworcHJpdmF0ZToK
KyAgICBDYXB0dXJpbmdJbnB1dEN1cnNvcihTZWdtZW50ZWRJbnB1dFN0b3JhZ2UqKTsKKworICAg
IFNlZ21lbnRlZElucHV0U3RvcmFnZSogbV9zdG9yYWdlOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SRVBMQVkpCisKKyNlbmRpZiAvLyBDYXB0
dXJpbmdJbnB1dEN1cnNvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvRXZl
bnRMb29wSW5wdXQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9FdmVudExvb3BJbnB1dC5oCmlu
ZGV4IGFiYjdkNDQyYzRiMjgzZTg2YmUyNTlmMmNkMDM1ZTZjZjlkYjE0ZWIuLmI0ZTNiNzBhMDYx
MmU1MzE2NTg0MDA1YmNjYjk4NWFmZWYzMTZhNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlcGxheS9FdmVudExvb3BJbnB1dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9FdmVu
dExvb3BJbnB1dC5oCkBAIC0zNywzOCArMzcsMjIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBSZXBsYXlDb250cm9sbGVyOwogCi1zdHJ1Y3QgUmVwbGF5UG9zaXRpb24gewotcHVibGlj
OgotICAgIFJlcGxheVBvc2l0aW9uKCkKLSAgICAgICAgOiBtX2luZGV4KDApCi0gICAgICAgICwg
bV90aW1lKDAuMCkgeyB9Ci0KLSAgICBleHBsaWNpdCBSZXBsYXlQb3NpdGlvbih1bnNpZ25lZCBp
bmRleCkKLSAgICAgICAgOiBtX2luZGV4KGluZGV4KQotICAgICAgICAsIG1fdGltZShtb25vdG9u
aWNhbGx5SW5jcmVhc2luZ1RpbWUoKSkgeyB9Ci0KLSAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0
IHsgcmV0dXJuIG1faW5kZXg7IH0KLSAgICBkb3VibGUgdGltZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dGltZTsgfQotcHJpdmF0ZToKLSAgICB1bnNpZ25lZCBtX2luZGV4OwotICAgIGRvdWJsZSBtX3Rp
bWU7Ci19OwotCiBjbGFzcyBFdmVudExvb3BJbnB1dEJhc2UgOiBwdWJsaWMgTm9uZGV0ZXJtaW5p
c3RpY0lucHV0QmFzZSB7CiBwdWJsaWM6CiAgICAgRXZlbnRMb29wSW5wdXRCYXNlKCkKLSAgICAg
ICAgOiBtX3Bvc2l0aW9uKFJlcGxheVBvc2l0aW9uKCkpIHsgfQorICAgICAgICA6IG1fdGltZXN0
YW1wKG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpKQorICAgIHsKKyAgICB9CiAKICAgICB2
aXJ0dWFsIH5FdmVudExvb3BJbnB1dEJhc2UoKSB7IH0KICAgICB2aXJ0dWFsIElucHV0UXVldWUg
cXVldWUoKSBjb25zdCBvdmVycmlkZSBmaW5hbCB7IHJldHVybiBJbnB1dFF1ZXVlOjpFdmVudExv
b3BJbnB1dDsgfQogCiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKFJlcGxheUNvbnRyb2xsZXIm
KSA9IDA7CiAKLSAgICAvLyBEdXJpbmcgY2FwdHVyZSwgdGhlIHBvc2l0aW9uIGlzIHNldCB3aGVu
IHRoZSBmb2xsb3dpbmcgZXZlbnQgbG9vcCBpbnB1dCBpcyBjYXB0dXJlZC4KLSAgICB2b2lkIHNl
dFBvc2l0aW9uKGNvbnN0IFJlcGxheVBvc2l0aW9uJiBwb3NpdGlvbikgeyBtX3Bvc2l0aW9uID0g
cG9zaXRpb247IH0KLSAgICBSZXBsYXlQb3NpdGlvbiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fcG9zaXRpb247IH0KKyAgICBkb3VibGUgdGltZXN0YW1wKCkgY29uc3QgeyByZXR1cm4gbV90
aW1lc3RhbXA7IH0KKyAgICB2b2lkIHNldFRpbWVzdGFtcChkb3VibGUgdGltZXN0YW1wKSB7IG1f
dGltZXN0YW1wID0gdGltZXN0YW1wOyB9CiBwcm90ZWN0ZWQ6Ci0gICAgUmVwbGF5UG9zaXRpb24g
bV9wb3NpdGlvbjsKKyAgICBkb3VibGUgbV90aW1lc3RhbXA7CiB9OwogCiB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgSW5wdXRUeXBlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVwbGF5L0V2ZW50
TG9vcElucHV0RGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvRXZlbnRMb29w
SW5wdXREaXNwYXRjaGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yN2JiODQxY2I1OWE4NjU1OTJkODlkNTcy
N2Q2OWZiZWU1ODdkZDA4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVwbGF5
L0V2ZW50TG9vcElucHV0RGlzcGF0Y2hlci5jcHAKQEAgLTAsMCArMSwxNzQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTCisgKiBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQKKyAqIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQQorICogUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJFdmVudExvb3BJbnB1dERpc3BhdGNoZXIuaCIKKworI2lmIEVOQUJM
RShXRUJfUkVQTEFZKQorCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlJlcGxheUlucHV0
VHlwZXMuaCIKKyNpbmNsdWRlICJSZXBsYXlpbmdJbnB1dEN1cnNvci5oIgorI2luY2x1ZGUgPHd0
Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KKworI2lmICFMT0dfRElTQUJMRUQKKyNpbmNsdWRlICJMb2dn
aW5nLmgiCisjaW5jbHVkZSAiU2VyaWFsaXphdGlvbk1ldGhvZHMuaCIKKyNpbmNsdWRlIDxyZXBs
YXkvRW5jb2RlZFZhbHVlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2VuZGlm
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRXZlbnRMb29wSW5wdXREaXNwYXRjaGVyOjpFdmVu
dExvb3BJbnB1dERpc3BhdGNoZXIoUGFnZSogcGFnZSwgUmVwbGF5aW5nSW5wdXRDdXJzb3IqIGN1
cnNvciwgRXZlbnRMb29wSW5wdXREaXNwYXRjaGVyQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX3Bh
Z2UocGFnZSkKKyAgICAsIG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fY3Vyc29yKGN1cnNvcikK
KyAgICAsIG1fdGltZXIodGhpcywgJkV2ZW50TG9vcElucHV0RGlzcGF0Y2hlcjo6dGltZXJGaXJl
ZCkKKyAgICAsIG1fcnVubmluZ0lucHV0KG51bGxwdHIpCisgICAgLCBtX2Rpc3BhdGNoaW5nKGZh
bHNlKQorICAgICwgbV9ydW5uaW5nKGZhbHNlKQorICAgICwgbV9zcGVlZChEaXNwYXRjaFNwZWVk
OjpGYXN0Rm9yd2FyZCkKKyAgICAsIG1fcHJldmlvdXNEaXNwYXRjaFN0YXJ0VGltZSgwLjApCisg
ICAgLCBtX3ByZXZpb3VzSW5wdXRUaW1lc3RhbXAoMC4wKQoreworfQorCit2b2lkIEV2ZW50TG9v
cElucHV0RGlzcGF0Y2hlcjo6cnVuKCkKK3sKKyAgICBBU1NFUlQoIW1fcnVubmluZyk7CisgICAg
bV9ydW5uaW5nID0gdHJ1ZTsKKworICAgIExPRyhXZWJSZXBsYXksICIlLTIwcyBTdGFydGluZyBk
aXNwYXRjaCBvZiBldmVudCBsb29wIGlucHV0cyBmb3IgcGFnZTogJXBcbiIsICJSZXBsYXlFdmVu
dHMiLCAodm9pZCopbV9wYWdlKTsKKyAgICBkaXNwYXRjaElucHV0U29vbigpOworfQorCit2b2lk
IEV2ZW50TG9vcElucHV0RGlzcGF0Y2hlcjo6cGF1c2UoKQoreworICAgIEFTU0VSVCghbV9kaXNw
YXRjaGluZyk7CisgICAgQVNTRVJUKG1fcnVubmluZyk7CisgICAgbV9ydW5uaW5nID0gZmFsc2U7
CisKKyAgICBMT0coV2ViUmVwbGF5LCAiJS0yMHMgUGF1c2luZyBkaXNwYXRjaCBvZiBldmVudCBs
b29wIGlucHV0cyBmb3IgcGFnZTogJXBcbiIsICJSZXBsYXlFdmVudHMiLCAodm9pZCopbV9wYWdl
KTsKKyAgICBpZiAobV90aW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX3RpbWVyLnN0b3AoKTsK
K30KKwordm9pZCBFdmVudExvb3BJbnB1dERpc3BhdGNoZXI6OnRpbWVyRmlyZWQoVGltZXI8RXZl
bnRMb29wSW5wdXREaXNwYXRjaGVyPiopCit7CisgICAgZGlzcGF0Y2hJbnB1dCgpOworfQorCit2
b2lkIEV2ZW50TG9vcElucHV0RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hJbnB1dFNvb24oKQoreworICAg
IEFTU0VSVChtX3J1bm5pbmcpOworCisgICAgLy8gV2UgbWF5IGFscmVhZHkgaGF2ZSBhbiBpbnB1
dCBpZiByZXBsYXkgd2FzIHBhdXNlZCBqdXN0IGJlZm9yZSBkaXNwYXRjaGluZy4KKyAgICBpZiAo
IW1fcnVubmluZ0lucHV0KQorICAgICAgICBtX3J1bm5pbmdJbnB1dCA9IHNhZmVDYXN0PEV2ZW50
TG9vcElucHV0QmFzZSo+KG1fY3Vyc29yLT51bmNoZWNrZWRMb2FkSW5wdXQoSW5wdXRRdWV1ZTo6
RXZlbnRMb29wSW5wdXQpKTsKKworICAgIGlmIChtX3RpbWVyLmlzQWN0aXZlKCkpCisgICAgICAg
IG1fdGltZXIuc3RvcCgpOworCisgICAgZG91YmxlIHdhaXRJbnRlcnZhbCA9IDA7CisKKyAgICBp
ZiAobV9zcGVlZCA9PSBEaXNwYXRjaFNwZWVkOjpSZWFsdGltZSkgeworICAgICAgICAvLyBUaGUg
Z29hbCBpcyB0byByZXByb2R1Y2UgdGhlIGRpc3BhdGNoIGRlbGF5IGJldHdlZW4gaW5wdXRzIGlz
IGl0IHdhcworICAgICAgICAvLyB3YXMgb2JzZXJ2ZWQgZHVyaW5nIHRoZSByZWNvcmRpbmcuIFNv
LCB3ZSBuZWVkIHRvIGNvbXB1dGUgaG93IG11Y2ggdGltZQorICAgICAgICAvLyB0byB3YWl0IHN1
Y2ggdGhhdCB0aGUgZWxhcHNlZCB0aW1lIHBsdXMgdGhlIHdhaXQgdGltZSB3aWxsIGVxdWFsIHRo
ZQorICAgICAgICAvLyBvYnNlcnZlZCBkZWxheSBiZXR3ZWVuIHRoZSBwcmV2aW91cyBhbmQgY3Vy
cmVudCBpbnB1dC4KKworICAgICAgICBpZiAoIW1fcHJldmlvdXNJbnB1dFRpbWVzdGFtcCkKKyAg
ICAgICAgICAgIG1fcHJldmlvdXNJbnB1dFRpbWVzdGFtcCA9IG1fcnVubmluZ0lucHV0LT50aW1l
c3RhbXAoKTsKKworICAgICAgICBkb3VibGUgdGFyZ2V0SW50ZXJ2YWwgPSBtX3J1bm5pbmdJbnB1
dC0+dGltZXN0YW1wKCkgLSBtX3ByZXZpb3VzSW5wdXRUaW1lc3RhbXA7CisgICAgICAgIGRvdWJs
ZSBlbGFwc2VkID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgLSBtX3ByZXZpb3VzRGlz
cGF0Y2hTdGFydFRpbWU7CisgICAgICAgIHdhaXRJbnRlcnZhbCA9IHRhcmdldEludGVydmFsIC0g
ZWxhcHNlZDsKKyAgICB9CisKKyAgICAvLyBBIG5lZ2F0aXZlIHdhaXQgdGltZSBtZWFucyB0aGF0
IGRpc3BhdGNoIHRvb2sgbG9uZ2VyIG9uIHJlcGxheSB0aGFuIG9uCisgICAgLy8gY2FwdHVyZS4g
SW4gdGhpcyBjYXNlLCBwcm9jZWVkIHdpdGhvdXQgd2FpdGluZyBhdCBhbGwuCisgICAgaWYgKHdh
aXRJbnRlcnZhbCA8IDApCisgICAgICAgIHdhaXRJbnRlcnZhbCA9IDA7CisKKyAgICBpZiAod2Fp
dEludGVydmFsID4gMTAwMC4wKSB7CisgICAgICAgIExPR19FUlJPUigiJS0yMHMgVHJpZWQgdG8g
d2FpdCBmb3Igb3ZlciAxMDAwIHNlY29uZHMgYmVmb3JlIGRpc3BhdGNoaW5nIG5leHQgZXZlbnQg
bG9vcCBpbnB1dDsgdGhpcyBpcyBwcm9iYWJseSBhIGJ1Zy4iLCAiUmVwbGF5RXZlbnRzIik7Cisg
ICAgICAgIHdhaXRJbnRlcnZhbCA9IDA7CisgICAgfQorCisgICAgTE9HKFdlYlJlcGxheSwgIiUt
MjBzIChXQUlUOiAlLjNmIG1zKSIsICJSZXBsYXlFdmVudHMiLCB3YWl0SW50ZXJ2YWwgKiAxMDAw
LjApOworICAgIG1fdGltZXIuc3RhcnRPbmVTaG90KHdhaXRJbnRlcnZhbCk7Cit9CisKK3ZvaWQg
RXZlbnRMb29wSW5wdXREaXNwYXRjaGVyOjpkaXNwYXRjaElucHV0KCkKK3sKKyAgICBBU1NFUlQo
bV9ydW5uaW5nSW5wdXQpOworICAgIEFTU0VSVCghbV9kaXNwYXRjaGluZyk7CisKKyAgICBpZiAo
bV9zcGVlZCA9PSBEaXNwYXRjaFNwZWVkOjpSZWFsdGltZSkgeworICAgICAgICBtX3ByZXZpb3Vz
RGlzcGF0Y2hTdGFydFRpbWUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKKyAgICAg
ICAgbV9wcmV2aW91c0lucHV0VGltZXN0YW1wID0gbV9ydW5uaW5nSW5wdXQtPnRpbWVzdGFtcCgp
OworICAgIH0KKworI2lmICFMT0dfRElTQUJMRUQKKyAgICBFbmNvZGVkVmFsdWUgZW5jb2RlZElu
cHV0ID0gRW5jb2RpbmdUcmFpdHM8Tm9uZGV0ZXJtaW5pc3RpY0lucHV0QmFzZT46OmVuY29kZVZh
bHVlKCptX3J1bm5pbmdJbnB1dCk7CisgICAgU3RyaW5nIGpzb25TdHJpbmcgPSBlbmNvZGVkSW5w
dXQuYXNPYmplY3QoKS0+dG9KU09OU3RyaW5nKCk7CisKKyAgICBMT0coV2ViUmVwbGF5LCAiJS0y
MHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIsICJSZXBs
YXlFdmVudHMiKTsKKyAgICBMT0coV2ViUmVwbGF5LCAiJS0yMHMgPkRJU1BBVENIOiAlcyAlc1xu
IiwgIlJlcGxheUV2ZW50cyIsIG1fcnVubmluZ0lucHV0LT50eXBlKCkuc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSwganNvblN0cmluZy51dGY4KCkuZGF0YSgpKTsKKyNlbmRpZgorCisgICAgbV9jbGll
bnQtPndpbGxEaXNwYXRjaElucHV0KCptX3J1bm5pbmdJbnB1dCk7CisgICAgLy8gQ2xpZW50IGNv
dWxkIHN0b3AgcmVwbGF5IGluIHRoZSBwcmV2aW91cyBjYWxsYmFjaywgc28gY2hlY2sgYWdhaW4u
CisgICAgaWYgKCFtX3J1bm5pbmcpCisgICAgICAgIHJldHVybjsKKworICAgIHsKKyAgICAgICAg
VGVtcG9yYXJ5Q2hhbmdlPGJvb2w+IGNoYW5nZShtX2Rpc3BhdGNoaW5nLCB0cnVlKTsKKyAgICAg
ICAgbV9ydW5uaW5nSW5wdXQtPmRpc3BhdGNoKG1fcGFnZS0+cmVwbGF5Q29udHJvbGxlcigpKTsK
KyAgICB9CisKKyAgICBFdmVudExvb3BJbnB1dEJhc2UqIGRpc3BhdGNoZWRJbnB1dCA9IG1fcnVu
bmluZ0lucHV0OworICAgIG1fcnVubmluZ0lucHV0ID0gbnVsbHB0cjsKKworICAgIC8vIE5vdGlm
eSBjbGllbnRzIHRoYXQgdGhlIGV2ZW50IHdhcyBkaXNwYXRjaGVkLgorICAgIG1fY2xpZW50LT5k
aWREaXNwYXRjaElucHV0KCpkaXNwYXRjaGVkSW5wdXQpOworICAgIGlmIChkaXNwYXRjaGVkSW5w
dXQtPnR5cGUoKSA9PSBpbnB1dFR5cGVzKCkuRW5kU2VnbWVudFNlbnRpbmVsKSB7CisgICAgICAg
IG1fY2xpZW50LT5kaWREaXNwYXRjaEZpbmFsSW5wdXQoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIC8vIENsaWVudHMgY291bGQgc3RvcCByZXBsYXkgZHVyaW5nIGV2ZW50IGRpc3Bh
dGNoLCBvciBmcm9tIGFueSBjYWxsYmFjayBhYm92ZS4KKyAgICBpZiAoIW1fcnVubmluZykKKyAg
ICAgICAgcmV0dXJuOworCisgICAgZGlzcGF0Y2hJbnB1dFNvb24oKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SRVBMQVkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvRXZlbnRMb29wSW5wdXREaXNwYXRjaGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZXBsYXkvRXZlbnRMb29wSW5wdXREaXNwYXRjaGVyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NWJkYTY3Mjk2YzgwOTEyZWY0MzU5N2M4Zjk5ZDA4NzFjZjJiYzBhNgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9FdmVudExvb3BJbnB1dERpc3BhdGNoZXIuaApAQCAt
MCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUyAiQVMKKyAqIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCisgKiBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBFdmVudExvb3BJbnB1dERpc3BhdGNoZXJfaAorI2RlZmluZSBFdmVudExvb3BJ
bnB1dERpc3BhdGNoZXJfaAorCisjaWYgRU5BQkxFKFdFQl9SRVBMQVkpCisKKyNpbmNsdWRlICJF
dmVudExvb3BJbnB1dC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBhZ2U7CitjbGFzcyBS
ZXBsYXlpbmdJbnB1dEN1cnNvcjsKKworZW51bSBjbGFzcyBEaXNwYXRjaFNwZWVkIHsKKyAgICBS
ZWFsdGltZSwKKyAgICBGYXN0Rm9yd2FyZCwKK307CisKK2NsYXNzIEV2ZW50TG9vcElucHV0RGlz
cGF0Y2hlckNsaWVudCB7CitwdWJsaWM6CisgICAgRXZlbnRMb29wSW5wdXREaXNwYXRjaGVyQ2xp
ZW50KCkgeyB9CisgICAgdmlydHVhbCB+RXZlbnRMb29wSW5wdXREaXNwYXRjaGVyQ2xpZW50KCkg
eyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbERpc3BhdGNoSW5wdXQoY29uc3QgRXZlbnRMb29w
SW5wdXRCYXNlJikgPTA7CisgICAgdmlydHVhbCB2b2lkIGRpZERpc3BhdGNoSW5wdXQoY29uc3Qg
RXZlbnRMb29wSW5wdXRCYXNlJikgPTA7CisgICAgdmlydHVhbCB2b2lkIGRpZERpc3BhdGNoRmlu
YWxJbnB1dCgpID0wOworfTsKKworY2xhc3MgRXZlbnRMb29wSW5wdXREaXNwYXRjaGVyIGZpbmFs
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShFdmVudExvb3BJbnB1dERpc3BhdGNoZXIpOwor
cHVibGljOgorICAgIEV2ZW50TG9vcElucHV0RGlzcGF0Y2hlcihQYWdlKiwgUmVwbGF5aW5nSW5w
dXRDdXJzb3IqLCBFdmVudExvb3BJbnB1dERpc3BhdGNoZXJDbGllbnQqKTsKKworICAgIHZvaWQg
cnVuKCk7CisgICAgdm9pZCBwYXVzZSgpOworCisgICAgdm9pZCBzZXREaXNwYXRjaFNwZWVkKERp
c3BhdGNoU3BlZWQgc3BlZWQpIHsgbV9zcGVlZCA9IHNwZWVkOyB9CisgICAgRGlzcGF0Y2hTcGVl
ZCBkaXNwYXRjaFNwZWVkKCkgY29uc3QgeyByZXR1cm4gbV9zcGVlZDsgfQorcHJpdmF0ZToKKyAg
ICB2b2lkIGRpc3BhdGNoSW5wdXRTb29uKCk7CisgICAgdm9pZCBkaXNwYXRjaElucHV0KCk7Cisg
ICAgdm9pZCB0aW1lckZpcmVkKFRpbWVyPEV2ZW50TG9vcElucHV0RGlzcGF0Y2hlcj4qKTsKKwor
ICAgIFBhZ2UqIG1fcGFnZTsKKyAgICBFdmVudExvb3BJbnB1dERpc3BhdGNoZXJDbGllbnQqIG1f
Y2xpZW50OworICAgIFJlcGxheWluZ0lucHV0Q3Vyc29yKiBtX2N1cnNvcjsKKyAgICBUaW1lcjxF
dmVudExvb3BJbnB1dERpc3BhdGNoZXI+IG1fdGltZXI7CisKKyAgICAvLyBUaGlzIHBvaW50ZXIg
aXMgdmFsaWQgd2hlbiBhbiBldmVudCBsb29wIGlucHV0IGlzIHByZXNlbnRseSBkaXNwYXRjaGlu
Zy4KKyAgICBFdmVudExvb3BJbnB1dEJhc2UqIG1fcnVubmluZ0lucHV0OworICAgIGJvb2wgbV9k
aXNwYXRjaGluZzsKKyAgICBib29sIG1fcnVubmluZzsKKworICAgIERpc3BhdGNoU3BlZWQgbV9z
cGVlZDsKKyAgICAvLyBUaGUgdGltZSBhdCB3aGljaCB0aGUgbGFzdCBpbnB1dCBkaXNwYXRjaCgp
IG1ldGhvZCB3YXMgY2FsbGVkLgorICAgIGRvdWJsZSBtX3ByZXZpb3VzRGlzcGF0Y2hTdGFydFRp
bWU7CisgICAgLy8gVGhlIHRpbWVzdGFtcCBzcGVjaWZpZWQgYnkgdGhlIGxhc3QgZGlzcGF0Y2hl
ZCBpbnB1dC4KKyAgICBkb3VibGUgbV9wcmV2aW91c0lucHV0VGltZXN0YW1wOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SRVBMQVkpCisKKyNl
bmRpZiAvLyBFdmVudExvb3BJbnB1dERpc3BhdGNoZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVwbGF5L0Z1bmN0b3JJbnB1dEN1cnNvci5oIGIvU291cmNlL1dlYkNvcmUvcmVwbGF5
L0Z1bmN0b3JJbnB1dEN1cnNvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFhNWM0ODRiY2E3NTRhYjBhY2FmYmFi
NTI0ZWVlYjc2Y2IxMmRiMzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZXBs
YXkvRnVuY3RvcklucHV0Q3Vyc29yLmgKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTCisgKiBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQK
KyAqIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQQorICogUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRnVuY3RvcklucHV0Q3Vyc29y
X2gKKyNkZWZpbmUgRnVuY3RvcklucHV0Q3Vyc29yX2gKKworI2lmIEVOQUJMRShXRUJfUkVQTEFZ
KQorCisjaW5jbHVkZSAiU2VnbWVudGVkSW5wdXRTdG9yYWdlLmgiCisjaW5jbHVkZSA8cmVwbGF5
L0lucHV0Q3Vyc29yLmg+CisjaW5jbHVkZSA8cmVwbGF5L05vbmRldGVybWluaXN0aWNJbnB1dC5o
PgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEZ1bmN0b3JJbnB1dEN1cnNvciA6IHB1YmxpYyBJbnB1dEN1cnNvciB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoRnVuY3RvcklucHV0Q3Vyc29yKTsKK3B1YmxpYzoKKyAgICBGdW5jdG9y
SW5wdXRDdXJzb3IoU2VnbWVudGVkSW5wdXRTdG9yYWdlKik7CisgICAgdmlydHVhbCB+RnVuY3Rv
cklucHV0Q3Vyc29yKCkgeyB9CisKKyAgICAvLyBJbnB1dEN1cnNvcgorICAgIHZpcnR1YWwgYm9v
bCBpc0NhcHR1cmluZygpIGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgdmlydHVhbCBib29sIGlzUmVwbGF5aW5nKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1
cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzdG9yZUlucHV0KHN0ZDo6dW5pcXVlX3B0
cjxOb25kZXRlcm1pbmlzdGljSW5wdXRCYXNlPikgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVh
bCBOb25kZXRlcm1pbmlzdGljSW5wdXRCYXNlKiB1bmNoZWNrZWRMb2FkSW5wdXQoSW5wdXRRdWV1
ZSkgb3ZlcnJpZGUgZmluYWw7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAg
IHR5cGVuYW1lIEZ1bmN0b3I6OlJldHVyblR5cGUgZm9yRWFjaElucHV0SW5RdWV1ZShJbnB1dFF1
ZXVlLCBGdW5jdG9yJik7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBOb25kZXRlcm1pbmlzdGlj
SW5wdXRCYXNlKiBsb2FkSW5wdXQoSW5wdXRRdWV1ZSwgY29uc3QgQXRvbWljU3RyaW5nJikgb3Zl
cnJpZGUgZmluYWw7Citwcml2YXRlOgorICAgIFNlZ21lbnRlZElucHV0U3RvcmFnZSogbV9zdG9y
YWdlOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lCit0eXBlbmFtZSBG
dW5jdG9yOjpSZXR1cm5UeXBlIEZ1bmN0b3JJbnB1dEN1cnNvcjo6Zm9yRWFjaElucHV0SW5RdWV1
ZShJbnB1dFF1ZXVlIHF1ZXVlLCBGdW5jdG9yJiBmdW5jdG9yKQoreworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9zdG9yYWdlLT5tX3F1ZXVlc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHF1ZXVl
KV0tPnNpemUoKTsgaSsrKQorICAgICAgICBmdW5jdG9yKGksIG1fc3RvcmFnZS0+bV9xdWV1ZXNb
c3RhdGljX2Nhc3Q8c2l6ZV90PihxdWV1ZSldLT5hdChpKS5nZXQoKSk7CisKKyAgICByZXR1cm4g
ZnVuY3Rvci5yZXR1cm5WYWx1ZSgpOworfQorCitpbmxpbmUgRnVuY3RvcklucHV0Q3Vyc29yOjpG
dW5jdG9ySW5wdXRDdXJzb3IoU2VnbWVudGVkSW5wdXRTdG9yYWdlKiBzdG9yYWdlKQorICAgIDog
bV9zdG9yYWdlKHN0b3JhZ2UpCit7Cit9CisKK2lubGluZSB2b2lkIEZ1bmN0b3JJbnB1dEN1cnNv
cjo6c3RvcmVJbnB1dChzdGQ6OnVuaXF1ZV9wdHI8Tm9uZGV0ZXJtaW5pc3RpY0lucHV0QmFzZT4p
Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2lubGluZSBOb25kZXRlcm1pbmlz
dGljSW5wdXRCYXNlKiBGdW5jdG9ySW5wdXRDdXJzb3I6OmxvYWRJbnB1dChJbnB1dFF1ZXVlLCBj
b25zdCBBdG9taWNTdHJpbmcmKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBudWxscHRyOworfQorCitpbmxpbmUgTm9uZGV0ZXJtaW5pc3RpY0lucHV0QmFzZSogRnVu
Y3RvcklucHV0Q3Vyc29yOjp1bmNoZWNrZWRMb2FkSW5wdXQoSW5wdXRRdWV1ZSkKK3sKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SRVBMQVkpCisKKyNlbmRpZiAv
LyBGdW5jdG9ySW5wdXRDdXJzb3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVwbGF5
L1JlcGxheUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVwbGF5L1JlcGxheUNvbnRy
b2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkwMTQxODMwYWNmNjBjZWY0YzQ4ODFhYmQwNzFhOGE3MjYw
NDdkYWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvUmVwbGF5Q29u
dHJvbGxlci5jcHAKQEAgLTAsMCArMSwzNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAxMyBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTCisgKiBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAqIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQQorICogUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJS
ZXBsYXlDb250cm9sbGVyLmgiCisKKyNpZiBFTkFCTEUoV0VCX1JFUExBWSkKKworI2luY2x1ZGUg
IkFsbFJlcGxheUlucHV0cy5oIgorI2luY2x1ZGUgIkNhcHR1cmluZ0lucHV0Q3Vyc29yLmgiCisj
aW5jbHVkZSAiRE9NV2luZG93LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNs
dWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgorI2luY2x1ZGUgIkluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbi5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJNYWlu
RnJhbWUuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUmVwbGF5U2Vzc2lvbi5oIgor
I2luY2x1ZGUgIlJlcGxheVNlc3Npb25TZWdtZW50LmgiCisjaW5jbHVkZSAiUmVwbGF5aW5nSW5w
dXRDdXJzb3IuaCIKKyNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiV2Vi
UmVwbGF5SW5wdXRzLmgiCisjaW5jbHVkZSA8cmVwbGF5L0VtcHR5SW5wdXRDdXJzb3IuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVw
bGF5Q29udHJvbGxlcjo6UmVwbGF5Q29udHJvbGxlcihQYWdlJiBwYWdlKQorICAgIDogbV9wYWdl
KHBhZ2UpCisgICAgLCBtX2xvYWRlZFNlZ21lbnQobnVsbHB0cikKKyAgICAsIG1fbG9hZGVkU2Vz
c2lvbihSZXBsYXlTZXNzaW9uOjpjcmVhdGUoKSkKKyAgICAsIG1fZW1wdHlDdXJzb3IoRW1wdHlJ
bnB1dEN1cnNvcjo6Y3JlYXRlKCkpCisgICAgLCBtX2FjdGl2ZUN1cnNvcihudWxscHRyKQorICAg
ICwgbV90YXJnZXRQb3NpdGlvbihSZXBsYXlQb3NpdGlvbigwLCAwKSkKKyAgICAsIG1fY3VycmVu
dFBvc2l0aW9uKFJlcGxheVBvc2l0aW9uKDAsIDApKQorICAgICwgbV9zZWdtZW50U3RhdGUoU2Vn
bWVudFN0YXRlOjpVbmxvYWRlZCkKKyAgICAsIG1fc2Vzc2lvblN0YXRlKFNlc3Npb25TdGF0ZTo6
SW5hY3RpdmUpCisgICAgLCBtX2Rpc3BhdGNoU3BlZWQoRGlzcGF0Y2hTcGVlZDo6RmFzdEZvcndh
cmQpCit7Cit9CisKK3ZvaWQgUmVwbGF5Q29udHJvbGxlcjo6c3dpdGNoU2Vzc2lvbihQYXNzUmVm
UHRyPFJlcGxheVNlc3Npb24+IHNlc3Npb24pCit7CisgICAgQVNTRVJUKG1fc2VnbWVudFN0YXRl
ID09IFNlZ21lbnRTdGF0ZTo6VW5sb2FkZWQpOworICAgIEFTU0VSVChtX3Nlc3Npb25TdGF0ZSA9
PSBTZXNzaW9uU3RhdGU6OkluYWN0aXZlKTsKKworICAgIG1fbG9hZGVkU2Vzc2lvbiA9IHNlc3Np
b247CisgICAgbV9jdXJyZW50UG9zaXRpb24gPSBSZXBsYXlQb3NpdGlvbigwLCAwKTsKKworICAg
IExPRyhXZWJSZXBsYXksICIlLTIwc1N3aXRjaGluZyBzZXNzaW9ucyBmcm9tICVwIHRvICVwLlxu
IiwgIlJlcGxheUNvbnRyb2xsZXIiLCAodm9pZCopbV9sb2FkZWRTZXNzaW9uLmdldCgpLCAodm9p
ZCopc2Vzc2lvbi5nZXQoKSk7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZXNzaW9u
TG9hZGVkKCZtX3BhZ2UsIG1fbG9hZGVkU2Vzc2lvbik7Cit9CisKK3ZvaWQgUmVwbGF5Q29udHJv
bGxlcjo6Y3JlYXRlU2VnbWVudCgpCit7CisgICAgQVNTRVJUKG1fc2Vzc2lvblN0YXRlID09IFNl
c3Npb25TdGF0ZTo6Q2FwdHVyaW5nKTsKKyAgICBBU1NFUlQobV9zZWdtZW50U3RhdGUgPT0gU2Vn
bWVudFN0YXRlOjpVbmxvYWRlZCk7CisKKyAgICBtX3NlZ21lbnRTdGF0ZSA9IFNlZ21lbnRTdGF0
ZTo6QXBwZW5kaW5nOworCisgICAgLy8gQ3JlYXRlIGEgbmV3IHNlZ21lbnQgYnV0IGRvbid0IGFz
c29jaWF0ZSBpdCB3aXRoIHRoZSBjdXJyZW50IHNlc3Npb24KKyAgICAvLyB1bnRpbCB3ZSBzdG9w
IGFwcGVuZGluZyB0byBpdC4gVGhpcyBwcmVzZXJ2ZXMgdGhlIGludmFyaWFudCB0aGF0CisgICAg
Ly8gc2VnbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgcmVwbGF5IHNlc3Npb24gaGF2ZSBpbW11dGFi
bGUgZGF0YS4KKyAgICBtX2xvYWRlZFNlZ21lbnQgPSBSZXBsYXlTZXNzaW9uU2VnbWVudDo6Y3Jl
YXRlKCk7CisKKyAgICBMT0coV2ViUmVwbGF5LCAiJS0yMHMgQ3JlYXRlZCBzZWdtZW50OiAlcC5c
biIsICJSZXBsYXlDb250cm9sbGVyIiwgKHZvaWQqKW1fbG9hZGVkU2VnbWVudC5nZXQoKSk7Cisg
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZWdtZW50Q3JlYXRlZCgmbV9wYWdlLCBtX2xv
YWRlZFNlZ21lbnQpOworCisgICAgbV9hY3RpdmVDdXJzb3IgPSBtX2xvYWRlZFNlZ21lbnQtPmNy
ZWF0ZUNhcHR1cmluZ0N1cnNvcihtX3BhZ2UpOworICAgIG1fYWN0aXZlQ3Vyc29yLT5hcHBlbmRJ
bnB1dDxCZWdpblNlZ21lbnRTZW50aW5lbD4oKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbml0
aWFsTmF2aWdhdGlvbj4gbmF2aWdhdGlvbklucHV0ID0gSW5pdGlhbE5hdmlnYXRpb246OmNyZWF0
ZUZyb21QYWdlKG1fcGFnZSk7CisgICAgLy8gRGlzcGF0Y2hpbmcgdGhpcyBpbnB1dCBzY2hlZHVs
ZXMgbmF2aWdhdGlvbiBvZiB0aGUgbWFpbiBmcmFtZSwgY2F1c2luZyBhIHJlZnJlc2guCisgICAg
bmF2aWdhdGlvbklucHV0LT5kaXNwYXRjaCgqdGhpcyk7CisgICAgbV9hY3RpdmVDdXJzb3ItPnN0
b3JlSW5wdXQoc3RkOjptb3ZlKG5hdmlnYXRpb25JbnB1dCkpOworfQorCit2b2lkIFJlcGxheUNv
bnRyb2xsZXI6OmNvbXBsZXRlU2VnbWVudCgpCit7CisgICAgQVNTRVJUKG1fc2Vzc2lvblN0YXRl
ID09IFNlc3Npb25TdGF0ZTo6Q2FwdHVyaW5nKTsKKyAgICBBU1NFUlQobV9zZWdtZW50U3RhdGUg
PT0gU2VnbWVudFN0YXRlOjpBcHBlbmRpbmcpOworCisgICAgbV9hY3RpdmVDdXJzb3ItPmFwcGVu
ZElucHV0PEVuZFNlZ21lbnRTZW50aW5lbD4oKTsKKworICAgIC8vIEhvbGQgb24gdG8gYSByZWZl
cmVuY2Ugc28gdW5sb2FkaW5nIHRoZSBzZWdtZW50IGRvZXNuJ3QgZGVhbGxvY2F0ZSBpdC4KKyAg
ICBSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+IHNlZ21lbnQgPSBtX2xvYWRlZFNlZ21lbnQ7
CisgICAgbV9zZWdtZW50U3RhdGUgPSBTZWdtZW50U3RhdGU6OkxvYWRlZDsKKyAgICB1bmxvYWRT
ZWdtZW50KHRydWUpOworCisgICAgTE9HKFdlYlJlcGxheSwgIiUtMjBzIENvbXBsZXRlZCBzZWdt
ZW50OiAlcC5cbiIsICJSZXBsYXlDb250cm9sbGVyIiwgKHZvaWQqKXNlZ21lbnQuZ2V0KCkpOwor
ICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2VnbWVudENvbXBsZXRlZCgmbV9wYWdlLCBz
ZWdtZW50KTsKKworICAgIG1fbG9hZGVkU2Vzc2lvbi0+YXBwZW5kU2VnbWVudChzZWdtZW50KTsK
KyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlc3Npb25Nb2RpZmllZCgmbV9wYWdlLCBt
X2xvYWRlZFNlc3Npb24pOworfQorCit2b2lkIFJlcGxheUNvbnRyb2xsZXI6OmxvYWRTZWdtZW50
KFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+IHBycFNlZ21lbnQpCit7CisgICAgUmVm
UHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiBzZWdtZW50ID0gcHJwU2VnbWVudDsKKworICAgIEFT
U0VSVChtX3Nlc3Npb25TdGF0ZSA9PSBTZXNzaW9uU3RhdGU6OlJlcGxheWluZyk7CisgICAgQVNT
RVJUKG1fc2VnbWVudFN0YXRlID09IFNlZ21lbnRTdGF0ZTo6VW5sb2FkZWQpOworICAgIEFTU0VS
VChzZWdtZW50KTsKKyAgICBBU1NFUlQoIW1fbG9hZGVkU2VnbWVudCk7CisKKyAgICBtX2xvYWRl
ZFNlZ21lbnQgPSBzZWdtZW50OworICAgIG1fc2VnbWVudFN0YXRlID0gU2VnbWVudFN0YXRlOjpM
b2FkZWQ7CisKKyAgICBtX2FjdGl2ZUN1cnNvciA9IG1fbG9hZGVkU2VnbWVudC0+Y3JlYXRlUmVw
bGF5aW5nQ3Vyc29yKG1fcGFnZSwgdGhpcyk7CisgICAgZGlzcGF0Y2hlcigpLnNldERpc3BhdGNo
U3BlZWQobV9kaXNwYXRjaFNwZWVkKTsKKworICAgIExPRyhXZWJSZXBsYXksICIlLTIwc0xvYWRp
bmcgc2VnbWVudDogJXAuXG4iLCAiUmVwbGF5Q29udHJvbGxlciIsICh2b2lkKilzZWdtZW50Lmdl
dCgpKTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlZ21lbnRMb2FkZWQoJm1fcGFn
ZSwgc2VnbWVudCk7Cit9CisKK3ZvaWQgUmVwbGF5Q29udHJvbGxlcjo6dW5sb2FkU2VnbWVudChi
b29sIHN1cHByZXNzTm90aWZpY2F0aW9ucykKK3sKKyAgICBBU1NFUlQobV9zZXNzaW9uU3RhdGUg
IT0gU2Vzc2lvblN0YXRlOjpJbmFjdGl2ZSk7CisgICAgQVNTRVJUKG1fc2VnbWVudFN0YXRlID09
IFNlZ21lbnRTdGF0ZTo6TG9hZGVkKTsKKworICAgIG1fc2VnbWVudFN0YXRlID0gU2VnbWVudFN0
YXRlOjpVbmxvYWRlZDsKKworICAgIExPRyhXZWJSZXBsYXksICIlLTIwcyBDbGVhcmluZyBpbnB1
dCBjdXJzb3JzIGZvciBwYWdlOiAlcFxuIiwgIlJlcGxheUNvbnRyb2xsZXIiLCAodm9pZCopKCZt
X3BhZ2UpKTsKKworICAgIG1fYWN0aXZlQ3Vyc29yID0gbnVsbHB0cjsKKyAgICBSZWZQdHI8UmVw
bGF5U2Vzc2lvblNlZ21lbnQ+IHVubG9hZGVkU2VnbWVudCA9IG1fbG9hZGVkU2VnbWVudC5yZWxl
YXNlKCk7CisgICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV9wYWdlLm1haW5GcmFtZSgpOyBmcmFt
ZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7CisgICAgICAgIGZyYW1l
LT5zY3JpcHQoKS5nbG9iYWxPYmplY3QobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpLT5zZXRJbnB1
dEN1cnNvcihtX2VtcHR5Q3Vyc29yKTsKKyAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPnNldElu
cHV0Q3Vyc29yKG1fZW1wdHlDdXJzb3IpOworICAgIH0KKworICAgIC8vIFdoZW4gd2Ugc3RvcCBj
YXB0dXJpbmcsIGRvbid0IHNlbmQgb3V0IHNlZ21lbnQgdW5sb2FkZWQgZXZlbnRzIHNpbmNlIHdl
CisgICAgLy8gZGlkbid0IHNlbmQgb3V0IHRoZSBjb3JyZXNwb25kaW5nIHNlZ21lbnRMb2FkZWQg
ZXZlbnQgYXQgdGhlIHN0YXJ0IG9mIGNhcHR1cmUuCisgICAgaWYgKCFzdXBwcmVzc05vdGlmaWNh
dGlvbnMpIHsKKyAgICAgICAgTE9HKFdlYlJlcGxheSwgIiUtMjBzVW5sb2FkaW5nIHNlZ21lbnQ6
ICVwLlxuIiwgIlJlcGxheUNvbnRyb2xsZXIiLCAodm9pZCopdW5sb2FkZWRTZWdtZW50LmdldCgp
KTsKKyAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZWdtZW50VW5sb2FkZWQoJm1f
cGFnZSk7CisgICAgfQorfQorCit2b2lkIFJlcGxheUNvbnRyb2xsZXI6OnN0YXJ0Q2FwdHVyaW5n
KCkKK3sKKyAgICBBU1NFUlQobV9zZXNzaW9uU3RhdGUgPT0gU2Vzc2lvblN0YXRlOjpJbmFjdGl2
ZSk7CisgICAgQVNTRVJUKG1fc2VnbWVudFN0YXRlID09IFNlZ21lbnRTdGF0ZTo6VW5sb2FkZWQp
OworCisgICAgbV9zZXNzaW9uU3RhdGUgPSBTZXNzaW9uU3RhdGU6OkNhcHR1cmluZzsKKworICAg
IExPRyhXZWJSZXBsYXksICIlLTIwcyBTdGFydGluZyBjYXB0dXJlLlxuIiwgIlJlcGxheUNvbnRy
b2xsZXIiKTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNhcHR1cmVTdGFydGVkKCZt
X3BhZ2UpOworCisgICAgbV9jdXJyZW50UG9zaXRpb24gPSBSZXBsYXlQb3NpdGlvbigwLCAwKTsK
KyAgICBjcmVhdGVTZWdtZW50KCk7Cit9CisKK3ZvaWQgUmVwbGF5Q29udHJvbGxlcjo6c3RvcENh
cHR1cmluZygpCit7CisgICAgQVNTRVJUKG1fc2Vzc2lvblN0YXRlID09IFNlc3Npb25TdGF0ZTo6
Q2FwdHVyaW5nKTsKKyAgICBBU1NFUlQobV9zZWdtZW50U3RhdGUgPT0gU2VnbWVudFN0YXRlOjpB
cHBlbmRpbmcpOworCisgICAgY29tcGxldGVTZWdtZW50KCk7CisKKyAgICBtX3Nlc3Npb25TdGF0
ZSA9IFNlc3Npb25TdGF0ZTo6SW5hY3RpdmU7CisKKyAgICBMT0coV2ViUmVwbGF5LCAiJS0yMHMg
U3RvcHBpbmcgY2FwdHVyZS5cbiIsICJSZXBsYXlDb250cm9sbGVyIik7CisgICAgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpjYXB0dXJlU3RvcHBlZCgmbV9wYWdlKTsKK30KKwordm9pZCBSZXBs
YXlDb250cm9sbGVyOjpzdGFydFBsYXliYWNrKCkKK3sKKyAgICBBU1NFUlQobV9zZXNzaW9uU3Rh
dGUgPT0gU2Vzc2lvblN0YXRlOjpSZXBsYXlpbmcpOworICAgIEFTU0VSVChtX3NlZ21lbnRTdGF0
ZSA9PSBTZWdtZW50U3RhdGU6OkxvYWRlZCk7CisKKyAgICBtX3NlZ21lbnRTdGF0ZSA9IFNlZ21l
bnRTdGF0ZTo6RGlzcGF0Y2hpbmc7CisKKyAgICBMT0coV2ViUmVwbGF5LCAiJS0yMHMgU3RhcnRp
bmcgcGxheWJhY2sgdG8gcG9zaXRpb24gKHNlZ21lbnQ6ICVkLCBpbnB1dDogJWQpLlxuIiwgIlJl
cGxheUNvbnRyb2xsZXIiLCBtX3RhcmdldFBvc2l0aW9uLnNlZ21lbnRPZmZzZXQsIG1fdGFyZ2V0
UG9zaXRpb24uaW5wdXRPZmZzZXQpOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6cGxh
eWJhY2tTdGFydGVkKCZtX3BhZ2UpOworCisgICAgZGlzcGF0Y2hlcigpLnJ1bigpOworfQorCit2
b2lkIFJlcGxheUNvbnRyb2xsZXI6OnBhdXNlUGxheWJhY2soKQoreworICAgIEFTU0VSVChtX3Nl
c3Npb25TdGF0ZSA9PSBTZXNzaW9uU3RhdGU6OlJlcGxheWluZyk7CisgICAgQVNTRVJUKG1fc2Vn
bWVudFN0YXRlID09IFNlZ21lbnRTdGF0ZTo6RGlzcGF0Y2hpbmcpOworCisgICAgbV9zZWdtZW50
U3RhdGUgPSBTZWdtZW50U3RhdGU6OkxvYWRlZDsKKworICAgIGRpc3BhdGNoZXIoKS5wYXVzZSgp
OworCisgICAgTE9HKFdlYlJlcGxheSwgIiUtMjBzIFBhdXNpbmcgcGxheWJhY2sgYXQgcG9zaXRp
b24gKHNlZ21lbnQ6ICVkLCBpbnB1dDogJWQpLlxuIiwgIlJlcGxheUNvbnRyb2xsZXIiLCBtX2N1
cnJlbnRQb3NpdGlvbi5zZWdtZW50T2Zmc2V0LCBtX2N1cnJlbnRQb3NpdGlvbi5pbnB1dE9mZnNl
dCk7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpwbGF5YmFja1BhdXNlZCgmbV9wYWdl
LCBtX2N1cnJlbnRQb3NpdGlvbik7Cit9CisKK3ZvaWQgUmVwbGF5Q29udHJvbGxlcjo6Y2FuY2Vs
UGxheWJhY2soKQoreworICAgIEFTU0VSVChtX3Nlc3Npb25TdGF0ZSA9PSBTZXNzaW9uU3RhdGU6
OlJlcGxheWluZyk7CisgICAgQVNTRVJUKG1fc2VnbWVudFN0YXRlICE9IFNlZ21lbnRTdGF0ZTo6
QXBwZW5kaW5nKTsKKworICAgIGlmIChtX3NlZ21lbnRTdGF0ZSA9PSBTZWdtZW50U3RhdGU6OlVu
bG9hZGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9zZWdtZW50U3RhdGUgPT0gU2Vn
bWVudFN0YXRlOjpEaXNwYXRjaGluZykKKyAgICAgICAgcGF1c2VQbGF5YmFjaygpOworCisgICAg
QVNTRVJUKG1fc2VnbWVudFN0YXRlID09IFNlZ21lbnRTdGF0ZTo6TG9hZGVkKTsKKyAgICB1bmxv
YWRTZWdtZW50KCk7CisgICAgbV9zZXNzaW9uU3RhdGUgPSBTZXNzaW9uU3RhdGU6OkluYWN0aXZl
OworfQorCit2b2lkIFJlcGxheUNvbnRyb2xsZXI6OnJlcGxheVRvUG9zaXRpb24oY29uc3QgUmVw
bGF5UG9zaXRpb24mIHBvc2l0aW9uLCBEaXNwYXRjaFNwZWVkIHNwZWVkKQoreworICAgIEFTU0VS
VChtX3Nlc3Npb25TdGF0ZSAhPSBTZXNzaW9uU3RhdGU6OkNhcHR1cmluZyk7CisgICAgQVNTRVJU
KG1fc2VnbWVudFN0YXRlID09IFNlZ21lbnRTdGF0ZTo6TG9hZGVkIHx8IG1fc2VnbWVudFN0YXRl
ID09IFNlZ21lbnRTdGF0ZTo6VW5sb2FkZWQpOworICAgIEFTU0VSVChwb3NpdGlvbi5zZWdtZW50
T2Zmc2V0IDwgbV9sb2FkZWRTZXNzaW9uLT5zaXplKCkpOworCisgICAgbV9kaXNwYXRjaFNwZWVk
ID0gc3BlZWQ7CisKKyAgICBpZiAobV9zZXNzaW9uU3RhdGUgIT0gU2Vzc2lvblN0YXRlOjpSZXBs
YXlpbmcpCisgICAgICAgIG1fc2Vzc2lvblN0YXRlID0gU2Vzc2lvblN0YXRlOjpSZXBsYXlpbmc7
CisKKyAgICBpZiAobV9zZWdtZW50U3RhdGUgPT0gU2VnbWVudFN0YXRlOjpVbmxvYWRlZCkKKyAg
ICAgICAgbG9hZFNlZ21lbnQobV9sb2FkZWRTZXNzaW9uLT5hdChwb3NpdGlvbi5zZWdtZW50T2Zm
c2V0KSk7CisgICAgZWxzZSBpZiAocG9zaXRpb24uc2VnbWVudE9mZnNldCAhPSBtX2N1cnJlbnRQ
b3NpdGlvbi5zZWdtZW50T2Zmc2V0IHx8IG1fY3VycmVudFBvc2l0aW9uLmlucHV0T2Zmc2V0ID4g
cG9zaXRpb24uaW5wdXRPZmZzZXQpIHsKKyAgICAgICAgLy8gSWYgdGhlIGRlc2lyZWQgc2VnbWVu
dCBpcyBub3QgbG9hZGVkIG9yIHdlIGhhdmUgZ29uZSBwYXN0IHRoZSBkZXNpcmVkIGlucHV0Cisg
ICAgICAgIC8vIG9mZnNldCwgdGhlbiB1bmxvYWQgdGhlIGN1cnJlbnQgc2VnbWVudCBhbmQgbG9h
ZCB0aGUgYXBwcm9wcmlhdGUgc2VnbWVudC4KKyAgICAgICAgdW5sb2FkU2VnbWVudCgpOworICAg
ICAgICBsb2FkU2VnbWVudChtX2xvYWRlZFNlc3Npb24tPmF0KHBvc2l0aW9uLnNlZ21lbnRPZmZz
ZXQpKTsKKyAgICB9CisKKyAgICBBU1NFUlQobV9jdXJyZW50UG9zaXRpb24uc2VnbWVudE9mZnNl
dCA9PSBwb3NpdGlvbi5zZWdtZW50T2Zmc2V0KTsKKyAgICBBU1NFUlQobV9sb2FkZWRTZXNzaW9u
LT5hdChwb3NpdGlvbi5zZWdtZW50T2Zmc2V0KSA9PSBtX2xvYWRlZFNlZ21lbnQpOworCisgICAg
bV90YXJnZXRQb3NpdGlvbiA9IHBvc2l0aW9uOworICAgIHN0YXJ0UGxheWJhY2soKTsKK30KKwor
dm9pZCBSZXBsYXlDb250cm9sbGVyOjpmcmFtZURldGFjaGVkKEZyYW1lKiBmcmFtZSkKK3sKKyAg
ICBBU1NFUlQobV9zZXNzaW9uU3RhdGUgIT0gU2Vzc2lvblN0YXRlOjpJbmFjdGl2ZSk7CisgICAg
QVNTRVJUKGZyYW1lKTsKKworICAgIGlmICghZnJhbWUtPmRvY3VtZW50KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIC8vIElmIHRoZSBmcmFtZSdzIGN1cnNvciBpc24ndCBjYXB0dXJpbmcgb3Ig
cmVwbGF5aW5nLCB3ZSBzaG91bGQgZG8gbm90aGluZy4KKyAgICAvLyBUaGlzIGlzIHRoZSBjYXNl
IGZvciB0aGUgIm91dGJvdW5kIiBmcmFtZSB3aGVuIHN0YXJ0aW5nIGNhcHR1cmUsIG9yIHdoZW4K
KyAgICAvLyB3ZSBjbGVhciB0aGUgaW5wdXQgY3Vyc29yIHRvIGZpbmlzaCBvciBwcmVtYXR1cmVs
eSB1bmxvYWQgYSBzZWdtZW50LgorICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKS0+aW5wdXRDdXJz
b3IoKS5pc0NhcHR1cmluZygpKSB7CisgICAgICAgIEFTU0VSVChtX3NlZ21lbnRTdGF0ZSA9PSBT
ZWdtZW50U3RhdGU6OkFwcGVuZGluZyk7CisgICAgICAgIGNvbXBsZXRlU2VnbWVudCgpOworICAg
IH0KKworICAgIC8vIER1cmluZyBwbGF5YmFjaywgdGhlIHNlZ21lbnRzIGFyZSB1bmxvYWRlZCBh
bmQgbG9hZGVkIHdoZW4gdGhlIGZpbmFsCisgICAgLy8gaW5wdXQgaGFzIGJlZW4gZGlzcGF0Y2hl
ZC4gU28sIG5vdGhpbmcgbmVlZHMgdG8gYmUgZG9uZSBoZXJlLgorfQorCit2b2lkIFJlcGxheUNv
bnRyb2xsZXI6OmZyYW1lTmF2aWdhdGVkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCit7CisgICAg
QVNTRVJUKG1fc2Vzc2lvblN0YXRlICE9IFNlc3Npb25TdGF0ZTo6SW5hY3RpdmUpOworCisgICAg
Ly8gVGhlIGluaXRpYWwgY2FwdHVyaW5nIHNlZ21lbnQgaXMgY3JlYXRlZCBwcmlvciB0byBtYWlu
IGZyYW1lIG5hdmlnYXRpb24uCisgICAgLy8gT3RoZXJ3aXNlLCB0aGUgcHJpb3IgY2FwdHVyaW5n
IHNlZ21lbnQgd2FzIGNvbXBsZXRlZCB3aGVuIHRoZSBmcmFtZSBkZXRhY2hlZCwKKyAgICAvLyBh
bmQgaXQgaXMgbm93IHRpbWUgdG8gY3JlYXRlIGEgbmV3IHNlZ21lbnQuCisgICAgaWYgKG1fc2Vz
c2lvblN0YXRlID09IFNlc3Npb25TdGF0ZTo6Q2FwdHVyaW5nICYmIG1fc2VnbWVudFN0YXRlID09
IFNlZ21lbnRTdGF0ZTo6VW5sb2FkZWQpIHsKKyAgICAgICAgbV9jdXJyZW50UG9zaXRpb24gPSBS
ZXBsYXlQb3NpdGlvbihtX2N1cnJlbnRQb3NpdGlvbi5zZWdtZW50T2Zmc2V0ICsgMSwgMCk7Cisg
ICAgICAgIGNyZWF0ZVNlZ21lbnQoKTsKKyAgICB9CisKKyAgICAvLyBEdXJpbmcgcGxheWJhY2ss
IHRoZSBuZXh0IHNlZ21lbnQgaXMgbG9hZGVkIHdoZW4gdGhlIGZpbmFsIGlucHV0IGlzIGRpc3Bh
dGNoZWQsCisgICAgLy8gc28gbm90aGluZyBuZWVkcyB0byBiZSBkb25lIGhlcmUuCisKKyAgICAv
LyBXZSBzdG9yZSB0aGUgaW5wdXQgY3Vyc29yIGluIGJvdGggRG9jdW1lbnQgYW5kIEpTRE9NV2lu
ZG93LCBzbyB0aGF0CisgICAgLy8gcmVwbGF5IHN0YXRlIGlzIGFjY2Vzc2libGUgZnJvbSBKYXZh
U2NyaXB0Q29yZSBhbmQgc2NyaXB0LWZyZWUgbGF5b3V0IGNvZGUuCisgICAgbG9hZGVyLT5mcmFt
ZSgpLT5kb2N1bWVudCgpLT5zZXRJbnB1dEN1cnNvcihtX2FjdGl2ZUN1cnNvci5nZXQoKSk7Cisg
ICAgbG9hZGVyLT5mcmFtZSgpLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QobWFpblRocmVhZE5vcm1h
bFdvcmxkKCkpLT5zZXRJbnB1dEN1cnNvcihtX2FjdGl2ZUN1cnNvci5nZXQoKSk7Cit9CisKK1Jl
ZlB0cjxSZXBsYXlTZXNzaW9uPiBSZXBsYXlDb250cm9sbGVyOjpsb2FkZWRTZXNzaW9uKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9sb2FkZWRTZXNzaW9uOworfQorCitSZWZQdHI8UmVwbGF5U2Vz
c2lvblNlZ21lbnQ+IFJlcGxheUNvbnRyb2xsZXI6OmxvYWRlZFNlZ21lbnQoKSBjb25zdAorewor
ICAgIHJldHVybiBtX2xvYWRlZFNlZ21lbnQ7Cit9CisKK0lucHV0Q3Vyc29yJiBSZXBsYXlDb250
cm9sbGVyOjphY3RpdmVJbnB1dEN1cnNvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYWN0aXZl
Q3Vyc29yID8gKm1fYWN0aXZlQ3Vyc29yIDogKm1fZW1wdHlDdXJzb3I7Cit9CisKK0V2ZW50TG9v
cElucHV0RGlzcGF0Y2hlciYgUmVwbGF5Q29udHJvbGxlcjo6ZGlzcGF0Y2hlcigpIGNvbnN0Cit7
CisgICAgQVNTRVJUKG1fc2Vzc2lvblN0YXRlID09IFNlc3Npb25TdGF0ZTo6UmVwbGF5aW5nKTsK
KyAgICBBU1NFUlQobV9zZWdtZW50U3RhdGUgPT0gU2VnbWVudFN0YXRlOjpEaXNwYXRjaGluZyk7
CisgICAgQVNTRVJUKG1fYWN0aXZlQ3Vyc29yKTsKKyAgICBBU1NFUlQobV9hY3RpdmVDdXJzb3It
PmlzUmVwbGF5aW5nKCkpOworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlcGxheWluZ0lucHV0
Q3Vyc29yJj4oKm1fYWN0aXZlQ3Vyc29yKS5kaXNwYXRjaGVyKCk7Cit9CisKK3ZvaWQgUmVwbGF5
Q29udHJvbGxlcjo6d2lsbERpc3BhdGNoSW5wdXQoY29uc3QgRXZlbnRMb29wSW5wdXRCYXNlJikK
K3sKKyAgICBBU1NFUlQobV9zZXNzaW9uU3RhdGUgPT0gU2Vzc2lvblN0YXRlOjpSZXBsYXlpbmcp
OworICAgIEFTU0VSVChtX3NlZ21lbnRTdGF0ZSA9PSBTZWdtZW50U3RhdGU6OkRpc3BhdGNoaW5n
KTsKKworICAgIG1fY3VycmVudFBvc2l0aW9uLmlucHV0T2Zmc2V0Kys7CisgICAgaWYgKG1fY3Vy
cmVudFBvc2l0aW9uID09IG1fdGFyZ2V0UG9zaXRpb24pCisgICAgICAgIHBhdXNlUGxheWJhY2so
KTsKK30KKwordm9pZCBSZXBsYXlDb250cm9sbGVyOjpkaWREaXNwYXRjaElucHV0KGNvbnN0IEV2
ZW50TG9vcElucHV0QmFzZSYpCit7CisgICAgQVNTRVJUKG1fc2Vzc2lvblN0YXRlID09IFNlc3Np
b25TdGF0ZTo6UmVwbGF5aW5nKTsKKyAgICBBU1NFUlQobV9zZWdtZW50U3RhdGUgPT0gU2VnbWVu
dFN0YXRlOjpEaXNwYXRjaGluZyk7CisKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnBs
YXliYWNrSGl0UG9zaXRpb24oJm1fcGFnZSwgbV9jdXJyZW50UG9zaXRpb24pOworfQorCit2b2lk
IFJlcGxheUNvbnRyb2xsZXI6OmRpZERpc3BhdGNoRmluYWxJbnB1dCgpCit7CisgICAgQVNTRVJU
KG1fc2VnbWVudFN0YXRlID09IFNlZ21lbnRTdGF0ZTo6RGlzcGF0Y2hpbmcpOworCisgICAgcGF1
c2UoKTsKKyAgICB1bmxvYWRTZWdtZW50KCk7CisKKyAgICAvLyBObyBtb3JlIHNlZ21lbnRzIGxl
ZnQgdG8gcmVwbGF5OyBzdG9wLgorICAgIGlmICgrK21fY3VycmVudFBvc2l0aW9uLnNlZ21lbnRP
ZmZzZXQgPT0gbV9sb2FkZWRTZXNzaW9uLT5zaXplKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGxvYWRTZWdtZW50KG1fbG9hZGVkU2Vzc2lvbi0+YXQobV9jdXJyZW50UG9zaXRpb24uc2VnbWVu
dE9mZnNldCkpOworICAgIHN0YXJ0UGxheWJhY2soKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SRVBMQVkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZXBsYXkvUmVwbGF5Q29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvcmVwbGF5
L1JlcGxheUNvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YmQ3YTBhOTc2ZmU2YzdhNGVlNjY5NTk2
ZmNkZTgwNGMyMDE0N2FhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVwbGF5
L1JlcGxheUNvbnRyb2xsZXIuaApAQCAtMCwwICsxLDE3NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMS0yMDEzIFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMKKyAqIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RAorICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBCisgKiBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBSZXBsYXlDb250cm9sbGVy
X2gKKyNkZWZpbmUgUmVwbGF5Q29udHJvbGxlcl9oCisKKyNpZiBFTkFCTEUoV0VCX1JFUExBWSkK
KworI2luY2x1ZGUgIkV2ZW50TG9vcElucHV0RGlzcGF0Y2hlci5oIgorI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7
CitjbGFzcyBJbnB1dEN1cnNvcjsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBS
ZXBsYXlTZXNzaW9uOworY2xhc3MgUmVwbGF5U2Vzc2lvblNlZ21lbnQ7CitjbGFzcyBET01XaW5k
b3c7CitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIERvY3VtZW50TG9hZGVyOworY2xhc3MgRWxlbWVu
dDsKK2NsYXNzIEV2ZW50OworY2xhc3MgRXZlbnRMb29wSW5wdXRCYXNlOworY2xhc3MgRnJhbWU7
CitjbGFzcyBOb2RlOworY2xhc3MgUGFnZTsKKworLy8gRWFjaCBzdGF0ZSBtYXkgdHJhbnNpdGlv
biB0byB0aGUgc3RhdGUgaW1tZWRpYXRlbHkgYWJvdmUgb3IgYmVsb3cgaXQuCisvLyBTZXNzaW9u
U3RhdGUgdHJhbnNpdGlvbnMgYXJlIG9ubHkgYWxsb3dlZCB3aGVuIFNlZ21lbnRTdGF0ZSBpcyBV
bmxvYWRlZC4KK2VudW0gY2xhc3MgU2Vzc2lvblN0YXRlIHsKKyAgICBDYXB0dXJpbmcsCisgICAg
Ly8gTmVpdGhlciBjYXB0dXJpbmcgb3IgcmVwbGF5aW5nLiBtX2N1cnJlbnRQb3NpdGlvbiBpcyBu
b3QgdmFsaWQgaW4gdGhpcyBzdGF0ZS4KKyAgICBJbmFjdGl2ZSwKKyAgICBSZXBsYXlpbmcsCit9
OworCisvLyBFYWNoIHN0YXRlIG1heSB0cmFuc2l0aW9uIHRvIHRoZSBzdGF0ZSBpbW1lZGlhdGVs
eSBhYm92ZSBvciBiZWxvdyBpdC4KK2VudW0gY2xhc3MgU2VnbWVudFN0YXRlIHsKKyAgICAvLyBJ
bnB1dHMgY2FuIGJlIGFwcGVuZGVkIGludG8gYW4gdW5hc3NvY2lhdGVkIHNlc3Npb24gc2VnbWVu
dC4KKyAgICAvLyBXZSBjYW4gc3RvcCBjYXB0dXJpbmcsIHdoaWNoIHJldmVydHMgdG8gdGhlIFVu
bG9hZGVkIHN0YXRlLgorICAgIEFwcGVuZGluZywKKyAgICAvLyBObyBzZXNzaW9uIHNlZ21lbnQg
aXMgbG9hZGVkLgorICAgIC8vIFdlIGNhbiBzdGFydCBjYXB0dXJpbmcsIG9yIGxvYWQgYSBzZWdt
ZW50IChhbmQgdGhlbiByZXBsYXkgaXQpLgorICAgIFVubG9hZGVkLAorICAgIC8vIEEgc2Vzc2lv
biBzZWdtZW50IGlzIGxvYWRlZC4KKyAgICAvLyBXZSBjYW4gdW5sb2FkIHRoZSBzZWdtZW50LCBv
ciBiZWdpbiBwbGF5YmFjayBmcm9tIG1fY3VycmVudFBvc2l0aW9uLgorICAgIExvYWRlZCwKKyAg
ICAvLyBUaGUgY29udHJvbGxlciBpcyBhY3RpdmVseSBkaXNwYXRjaGluZyBldmVudCBsb29wIGlu
cHV0cy4KKyAgICAvLyBXZSBjYW4gcGF1c2Ugb3IgY2FuY2VsIHBsYXliYWNrLCB3aGljaCByZXZl
cnRzIHRvIHRoZSBMb2FkZWQgc3RhdGUuCisgICAgRGlzcGF0Y2hpbmcsCit9OworCitzdHJ1Y3Qg
UmVwbGF5UG9zaXRpb24geworICAgIFJlcGxheVBvc2l0aW9uKHVuc2lnbmVkIHNlZ21lbnRPZmZz
ZXQsIHVuc2lnbmVkIGlucHV0T2Zmc2V0KQorICAgICAgICA6IHNlZ21lbnRPZmZzZXQoc2VnbWVu
dE9mZnNldCkKKyAgICAgICAgLCBpbnB1dE9mZnNldChpbnB1dE9mZnNldCkKKyAgICB7CisgICAg
fQorCisgICAgLy8gQnkgY29udmVudGlvbiwgdGhpcyBwb3NpdGlvbiByZXByZXNlbnRzIHRoZSBl
bmQgb2YgdGhlIGxhc3Qgc2VnbWVudCBvZiB0aGUgc2Vzc2lvbi4KKyAgICBSZXBsYXlQb3NpdGlv
bigpCisgICAgICAgIDogc2VnbWVudE9mZnNldCgwKQorICAgICAgICAsIGlucHV0T2Zmc2V0KDAp
CisgICAgeworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFJlcGxheVBvc2l0aW9u
JiBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiBzZWdtZW50T2Zmc2V0IDw9IG90aGVyLnNl
Z21lbnRPZmZzZXQgJiYgaW5wdXRPZmZzZXQgPCBvdGhlci5pbnB1dE9mZnNldDsKKyAgICB9CisK
KyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVwbGF5UG9zaXRpb24mIG90aGVyKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHNlZ21lbnRPZmZzZXQgPT0gb3RoZXIuc2VnbWVudE9mZnNldCAmJiBp
bnB1dE9mZnNldCA9PSBvdGhlci5pbnB1dE9mZnNldDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBz
ZWdtZW50T2Zmc2V0OworICAgIHVuc2lnbmVkIGlucHV0T2Zmc2V0OworfTsKKworY2xhc3MgUmVw
bGF5Q29udHJvbGxlciBmaW5hbCA6IHB1YmxpYyBFdmVudExvb3BJbnB1dERpc3BhdGNoZXJDbGll
bnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlcGxheUNvbnRyb2xsZXIpOworcHVibGlj
OgorICAgIFJlcGxheUNvbnRyb2xsZXIoUGFnZSYpOworCisgICAgdm9pZCBzdGFydENhcHR1cmlu
ZygpOworICAgIHZvaWQgc3RvcENhcHR1cmluZygpOworCisgICAgLy8gU3RhcnQgb3IgcmVzdW1l
IHBsYXliYWNrIHdpdGggZGVmYXVsdCBzcGVlZCBhbmQgdGFyZ2V0IHJlcGxheSBwb3NpdGlvbi4K
KyAgICB2b2lkIHN0YXJ0UGxheWJhY2soKTsKKyAgICB2b2lkIHBhdXNlUGxheWJhY2soKTsKKyAg
ICB2b2lkIGNhbmNlbFBsYXliYWNrKCk7CisKKyAgICB2b2lkIHJlcGxheVRvUG9zaXRpb24oY29u
c3QgUmVwbGF5UG9zaXRpb24mLCBEaXNwYXRjaFNwZWVkID0gRGlzcGF0Y2hTcGVlZDo6RmFzdEZv
cndhcmQpOworICAgIHZvaWQgcmVwbGF5VG9Db21wbGV0aW9uKERpc3BhdGNoU3BlZWQgc3BlZWQg
PSBEaXNwYXRjaFNwZWVkOjpGYXN0Rm9yd2FyZCkKKyAgICB7CisgICAgICAgIHJlcGxheVRvUG9z
aXRpb24oUmVwbGF5UG9zaXRpb24oKSwgc3BlZWQpOworICAgIH0KKworICAgIHZvaWQgc3dpdGNo
U2Vzc2lvbihQYXNzUmVmUHRyPFJlcGxheVNlc3Npb24+KTsKKworICAgIC8vIEluc3BlY3RvclJl
cGxheUFnZW50IG5vdGlmaWNhdGlvbnMuCisgICAgdm9pZCBmcmFtZU5hdmlnYXRlZChEb2N1bWVu
dExvYWRlciopOworICAgIHZvaWQgZnJhbWVEZXRhY2hlZChGcmFtZSopOworCisgICAgUGFnZSYg
cGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZTsgfQorICAgIFNlc3Npb25TdGF0ZSBzZXNzaW9u
U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3Nlc3Npb25TdGF0ZTsgfQorICAgIFJlZlB0cjxSZXBs
YXlTZXNzaW9uPiBsb2FkZWRTZXNzaW9uKCkgY29uc3Q7CisgICAgUmVmUHRyPFJlcGxheVNlc3Np
b25TZWdtZW50PiBsb2FkZWRTZWdtZW50KCkgY29uc3Q7CisgICAgSlNDOjpJbnB1dEN1cnNvciYg
YWN0aXZlSW5wdXRDdXJzb3IoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICAvLyBFdmVudExvb3BJ
bnB1dERpc3BhdGNoZXJDbGllbnQgQVBJCisgICAgdmlydHVhbCB2b2lkIHdpbGxEaXNwYXRjaElu
cHV0KGNvbnN0IEV2ZW50TG9vcElucHV0QmFzZSYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9p
ZCBkaWREaXNwYXRjaElucHV0KGNvbnN0IEV2ZW50TG9vcElucHV0QmFzZSYpIG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgdm9pZCBkaWREaXNwYXRjaEZpbmFsSW5wdXQoKSBvdmVycmlkZTsKKworICAg
IHZvaWQgY3JlYXRlU2VnbWVudCgpOworICAgIHZvaWQgY29tcGxldGVTZWdtZW50KCk7CisKKyAg
ICB2b2lkIGxvYWRTZWdtZW50KFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+KTsKKyAg
ICB2b2lkIHVubG9hZFNlZ21lbnQoYm9vbCBzdXBwcmVzc05vdGlmaWNhdGlvbnMgPSBmYWxzZSk7
CisKKyAgICBFdmVudExvb3BJbnB1dERpc3BhdGNoZXImIGRpc3BhdGNoZXIoKSBjb25zdDsKKwor
ICAgIFBhZ2UmIG1fcGFnZTsKKworICAgIFJlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4gbV9s
b2FkZWRTZWdtZW50OworICAgIFJlZlB0cjxSZXBsYXlTZXNzaW9uPiBtX2xvYWRlZFNlc3Npb247
CisgICAgY29uc3QgUmVmUHRyPEpTQzo6SW5wdXRDdXJzb3I+IG1fZW1wdHlDdXJzb3I7CisgICAg
Ly8gVGhlIGFjdGl2ZSBjdXJzb3IgaXMgc2V0IHRvIG51bGxwdHIgd2hlbiBpbnZhbGlkLgorICAg
IFJlZlB0cjxKU0M6OklucHV0Q3Vyc29yPiBtX2FjdGl2ZUN1cnNvcjsKKworICAgIC8vIFRoaXMg
cG9zaXRpb24gaXMgdmFsaWQgd2hlbiBTZXNzaW9uU3RhdGUgPT0gUmVwbGF5aW5nLgorICAgIFJl
cGxheVBvc2l0aW9uIG1fdGFyZ2V0UG9zaXRpb247CisgICAgLy8gVGhpcyBwb3NpdGlvbiBpcyB2
YWxpZCB3aGVuIFNlc3Npb25TdGF0ZSAhPSBJbmFjdGl2ZS4KKyAgICBSZXBsYXlQb3NpdGlvbiBt
X2N1cnJlbnRQb3NpdGlvbjsKKyAgICBTZWdtZW50U3RhdGUgbV9zZWdtZW50U3RhdGU7CisgICAg
Ly8gVGhpcyB0cmFja3Mgc3RhdGUgYWNyb3NzIG11bHRpcGxlIHNlZ21lbnRzLiBXaGVuIG5hdmln
YXRpbmcgdGhlIG1haW4gZnJhbWUsCisgICAgLy8gdGhlcmUgaXMgYSBzbWFsbCBpbnRlcnZhbCBk
dXJpbmcgc2VnbWVudCBzd2l0Y2hpbmcgd2hlbiBubyBzZWdtZW50IGlzIGxvYWRlZC4KKyAgICBT
ZXNzaW9uU3RhdGUgbV9zZXNzaW9uU3RhdGU7CisKKyAgICBEaXNwYXRjaFNwZWVkIG1fZGlzcGF0
Y2hTcGVlZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShXRUJfUkVQTEFZKQorCisjZW5kaWYgLy8gUmVwbGF5Q29udHJvbGxlcl9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvUmVwbGF5SW5wdXRDcmVhdGlvbk1ldGhvZHMuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVwbGF5L1JlcGxheUlucHV0Q3JlYXRpb25NZXRob2RzLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4wZWQzZTIzMjNjNTZlYzUzYTk4NTI3ZjhiMjRiZjkwOThhM2U4NTk2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVwbGF5L1JlcGxheUlucHV0Q3JlYXRpb25NZXRo
b2RzLmNwcApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTMg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUwor
ICogSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVECisgKiBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEKKyAqIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX1JFUExBWSkKKworI2luY2x1ZGUgIkRvY3VtZW50
LmgiCisjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUg
IlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiU2VyaWFsaXphdGlvbk1ldGhvZHMuaCIKKyNp
bmNsdWRlICJXZWJSZXBsYXlJbnB1dHMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGQ6
OnVuaXF1ZV9wdHI8SW5pdGlhbE5hdmlnYXRpb24+IEluaXRpYWxOYXZpZ2F0aW9uOjpjcmVhdGVG
cm9tUGFnZShjb25zdCBQYWdlJiBwYWdlKQoreworICAgIGNvbnN0IE1haW5GcmFtZSYgbWFpbkZy
YW1lID0gcGFnZS5tYWluRnJhbWUoKTsKKyAgICBBU1NFUlQobWFpbkZyYW1lLmRvY3VtZW50KCkp
OworCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhpcyBpcyBpbiBzeW5jIHdpdGggUmVwbGF5Q29u
dHJvbGxlcjo6YmVnaW5DYXB0dXJpbmcoKS4KKyAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9y
aWdpbkNvcHkgPSBtYWluRnJhbWUuZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+aXNvbGF0
ZWRDb3B5KCk7CisgICAgVVJMIHVybCA9IG1haW5GcmFtZS5kb2N1bWVudCgpLT51cmwoKTsKKyAg
ICBTdHJpbmcgcmVmZXJyZXIgPSBtYWluRnJhbWUubG9hZGVyKCkucmVmZXJyZXIoKTsKKyAgICBy
ZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxJbml0aWFsTmF2aWdhdGlvbj4ob3JpZ2luQ29weSwgdXJs
LCByZWZlcnJlcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShXRUJfUkVQTEFZKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVwbGF5L1JlcGxh
eUlucHV0RGlzcGF0Y2hNZXRob2RzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9SZXBsYXlJ
bnB1dERpc3BhdGNoTWV0aG9kcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTRmNzZjZWMyMjY1ZmVmZmIyOGYz
NzI2OWIzOGQwMjFhNDc2YTM5ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
cGxheS9SZXBsYXlJbnB1dERpc3BhdGNoTWV0aG9kcy5jcHAKQEAgLTAsMCArMSw1NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMKKyAqIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCisg
KiBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9S
RVBMQVkpCisKKyNpbmNsdWRlICJBbGxSZXBsYXlJbnB1dHMuaCIKKyNpbmNsdWRlICJNYWluRnJh
bWUuaCIKKyNpbmNsdWRlICJOYXZpZ2F0aW9uU2NoZWR1bGVyLmgiCisjaW5jbHVkZSAiUGFnZS5o
IgorI2luY2x1ZGUgIlJlcGxheUNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJVUkwuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisvLyBTZW50aW5lbCBpbnB1dHMuCit2b2lkIEJlZ2luU2VnbWVu
dFNlbnRpbmVsOjpkaXNwYXRjaChSZXBsYXlDb250cm9sbGVyJikKK3sKK30KKwordm9pZCBFbmRT
ZWdtZW50U2VudGluZWw6OmRpc3BhdGNoKFJlcGxheUNvbnRyb2xsZXImKQoreworfQorCisvLyBO
YXZpZ2F0aW9uIGlucHV0cy4KK3ZvaWQgSW5pdGlhbE5hdmlnYXRpb246OmRpc3BhdGNoKFJlcGxh
eUNvbnRyb2xsZXImIGNvbnRyb2xsZXIpCit7CisgICAgY29udHJvbGxlci5wYWdlKCkubWFpbkZy
YW1lKCkubmF2aWdhdGlvblNjaGVkdWxlcigpLnNjaGVkdWxlTG9jYXRpb25DaGFuZ2UobV9zZWN1
cml0eU9yaWdpbi5nZXQoKSwgbV91cmwsIG1fcmVmZXJyZXIsIHRydWUsIHRydWUpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JFUExBWSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9SZXBsYXlJbnB1dFR5cGVzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlcGxheS9SZXBsYXlJbnB1dFR5cGVzLmNwcAppbmRleCA4ZTg5MTllNGVh
NDQxYjg2YjEyYWYzODQxOGE0NDA2ZThhYTBlZDY5Li45OGIxNGYxNjM1MWM4NjY2ZWU3YTg1MTli
NzE2YTA5YTZjN2E3MzJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvUmVwbGF5
SW5wdXRUeXBlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVwbGF5L1JlcGxheUlucHV0VHlw
ZXMuY3BwCkBAIC0zOCw2ICszOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIFJlcGxheUlucHV0
VHlwZXM6OlJlcGxheUlucHV0VHlwZXMoKQogICAgIDogZHVtbXkoMCkKIEpTX1JFUExBWV9JTlBV
VF9OQU1FU19GT1JfRUFDSChJTklUSUFMSVpFX0lOUFVUX1RZUEUpCitXRUJfUkVQTEFZX0lOUFVU
X05BTUVTX0ZPUl9FQUNIKElOSVRJQUxJWkVfSU5QVVRfVFlQRSkKIHsKICAgICBVTlVTRURfUEFS
QU0oZHVtbXkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVwbGF5L1JlcGxheUlu
cHV0VHlwZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9SZXBsYXlJbnB1dFR5cGVzLmgKaW5k
ZXggZGYxNmNhMGY2NGZjOWFkMDk0ZDk1MjM2NWZjNTI0MjIzMjEzOGZiMS4uYjE5ODQyMzJjYTky
MmJlYzUwMDg3NWNhMGRiYmIzNDA1MzQ1MDhjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVwbGF5L1JlcGxheUlucHV0VHlwZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvUmVw
bGF5SW5wdXRUeXBlcy5oCkBAIC0zMSw2ICszMSw3IEBACiAjaWYgRU5BQkxFKFdFQl9SRVBMQVkp
CiAKICNpbmNsdWRlICJUaHJlYWRHbG9iYWxEYXRhLmgiCisjaW5jbHVkZSAiV2ViUmVwbGF5SW5w
dXRzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNSZXBsYXlJbnB1dHMuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIApAQCAtNDQsNiArNDUsNyBAQCBwdWJsaWM6
CiAKICNkZWZpbmUgREVDTEFSRV9SRVBMQVlfSU5QVVRfVFlQRVMobmFtZSkgQXRvbWljU3RyaW5n
IG5hbWU7CiAgICAgSlNfUkVQTEFZX0lOUFVUX05BTUVTX0ZPUl9FQUNIKERFQ0xBUkVfUkVQTEFZ
X0lOUFVUX1RZUEVTKQorICAgIFdFQl9SRVBMQVlfSU5QVVRfTkFNRVNfRk9SX0VBQ0goREVDTEFS
RV9SRVBMQVlfSU5QVVRfVFlQRVMpCiAjdW5kZWYgREVDTEFSRV9SRVBMQVlfSU5QVVRfVFlQRVMK
IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9SZXBsYXlTZXNzaW9uLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9SZXBsYXlTZXNzaW9uLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5j
OTZhZmNkODI2ZTJiZDY0YjEzODZjNDY0N2VmZmEwNTAzNzVjZDEzCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVwbGF5L1JlcGxheVNlc3Npb24uY3BwCkBAIC0wLDAgKzEsODUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJB
UworICogSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVECisgKiBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEKKyAqIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVwbGF5U2Vzc2lvbi5oIgorCisjaWYgRU5BQkxFKFdF
Ql9SRVBMQVkpCisKKyNpbmNsdWRlICJSZXBsYXlTZXNzaW9uU2VnbWVudC5oIgorI2luY2x1ZGUg
PHd0Zi9DdXJyZW50VGltZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyB1bnNp
Z25lZCBzX25leHRJZGVudGlmaWVyID0gMTsKKworUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uPiBS
ZXBsYXlTZXNzaW9uOjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVwbGF5
U2Vzc2lvbigpKTsKK30KKworUmVwbGF5U2Vzc2lvbjo6UmVwbGF5U2Vzc2lvbigpCisgICAgOiBt
X3NlZ21lbnRzKFZlY3RvcjxSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+PigpKQorICAgICwg
bV9pZGVudGlmaWVyKHNfbmV4dElkZW50aWZpZXIrKykKKyAgICAsIG1fdGltZXN0YW1wKG1vbm90
b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpKQoreworfQorCitSZXBsYXlTZXNzaW9uOjp+UmVwbGF5
U2Vzc2lvbigpCit7Cit9CisKK3ZvaWQgUmVwbGF5U2Vzc2lvbjo6YXBwZW5kU2VnbWVudChQYXNz
UmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiBwcnBTZWdtZW50KQoreworICAgIFJlZlB0cjxS
ZXBsYXlTZXNzaW9uU2VnbWVudD4gc2VnbWVudCA9IHBycFNlZ21lbnQ7CisKKyAgICAvLyBGb3Ig
bm93LCBvbmx5IHN1cHBvcnQgb25lIHNlZ21lbnQuCisgICAgQVNTRVJUKCFtX3NlZ21lbnRzLnNp
emUoKSk7CisKKyAgICAvLyBTaW5jZSByZXBsYXkgbG9jYXRpb25zIGFyZSBzcGVjaWZpZWQgd2l0
aCBzZWdtZW50IElEcywgd2UgY2FuIG9ubHkKKyAgICAvLyBoYXZlIG9uZSBpbnN0YW5jZSBvZiBh
IHNlZ21lbnQgaW4gdGhlIHNlc3Npb24uCisgICAgc2l6ZV90IG9mZnNldCA9IG1fc2VnbWVudHMu
ZmluZChzZWdtZW50KTsKKyAgICBBU1NFUlRfVU5VU0VEKG9mZnNldCwgb2Zmc2V0ID09IG5vdEZv
dW5kKTsKKworICAgIG1fc2VnbWVudHMuYXBwZW5kKHNlZ21lbnQpOworfQorCit2b2lkIFJlcGxh
eVNlc3Npb246Omluc2VydFNlZ21lbnQoc2l6ZV90IHBvc2l0aW9uLCBQYXNzUmVmUHRyPFJlcGxh
eVNlc3Npb25TZWdtZW50PiBzZWdtZW50KQoreworICAgIEFTU0VSVChwb3NpdGlvbiA8IG1fc2Vn
bWVudHMuc2l6ZSgpKTsKKyAgICBtX3NlZ21lbnRzLmluc2VydChwb3NpdGlvbiwgc2VnbWVudCk7
Cit9CisKK3ZvaWQgUmVwbGF5U2Vzc2lvbjo6cmVtb3ZlU2VnbWVudChzaXplX3QgcG9zaXRpb24p
Cit7CisgICAgQVNTRVJUKHBvc2l0aW9uIDwgbV9zZWdtZW50cy5zaXplKCkpOworICAgIG1fc2Vn
bWVudHMucmVtb3ZlKHBvc2l0aW9uKTsKK30KKworfTsgLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShXRUJfUkVQTEFZKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVwbGF5L1JlcGxheVNlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9SZXBsYXlTZXNz
aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZGQwZjg0MzYxYzdiM2Q4MmNkZGM4MjY3Y2QwYTg2ZGVmZWI1Y2Y1
YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9SZXBsYXlTZXNzaW9u
LmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMgIkFTCisgKiBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAqIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQorICogUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgUmVwbGF5U2Vzc2lvbl9oCisjZGVmaW5lIFJlcGxheVNlc3Npb25f
aAorCisjaWYgRU5BQkxFKFdFQl9SRVBMQVkpCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZXBsYXlTZXNzaW9uU2VnbWVudDsKKwor
dHlwZWRlZiBWZWN0b3I8UmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50Pj46OmNvbnN0X2l0ZXJh
dG9yIFNlZ21lbnRJdGVyYXRvcjsKKworY2xhc3MgUmVwbGF5U2Vzc2lvbiA6IHB1YmxpYyBSZWZD
b3VudGVkPFJlcGxheVNlc3Npb24+IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZXBsYXlT
ZXNzaW9uKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uPiBj
cmVhdGUoKTsKKyAgICB+UmVwbGF5U2Vzc2lvbigpOworCisgICAgdW5zaWduZWQgaWRlbnRpZmll
cigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfTsKKyAgICBkb3VibGUgdGltZXN0YW1w
KCkgY29uc3QgeyByZXR1cm4gbV90aW1lc3RhbXA7IH0KKworICAgIHNpemVfdCBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9zZWdtZW50cy5zaXplKCk7IH0KKyAgICBQYXNzUmVmUHRyPFJlcGxheVNl
c3Npb25TZWdtZW50PiBhdChzaXplX3QgcG9zaXRpb24pIGNvbnN0IHsgcmV0dXJuIG1fc2VnbWVu
dHMuYXQocG9zaXRpb24pOyB9CisKKyAgICBTZWdtZW50SXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7
IHJldHVybiBtX3NlZ21lbnRzLmJlZ2luKCk7IH07CisgICAgU2VnbWVudEl0ZXJhdG9yIGVuZCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2VnbWVudHMuZW5kKCk7IH07CisKKyAgICB2b2lkIGFwcGVuZFNl
Z21lbnQoUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4pOworICAgIHZvaWQgaW5zZXJ0
U2VnbWVudChzaXplX3QgcG9zaXRpb24sIFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+
KTsKKyAgICB2b2lkIHJlbW92ZVNlZ21lbnQoc2l6ZV90IHBvc2l0aW9uKTsKKworcHJpdmF0ZToK
KyAgICBSZXBsYXlTZXNzaW9uKCk7CisKKyAgICBWZWN0b3I8UmVmUHRyPFJlcGxheVNlc3Npb25T
ZWdtZW50Pj4gbV9zZWdtZW50czsKKyAgICB1bnNpZ25lZCBtX2lkZW50aWZpZXI7CisgICAgZG91
YmxlIG1fdGltZXN0YW1wOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQl9SRVBMQVkpCisKKyNlbmRpZiAvLyBSZXBsYXlTZXNzaW9uX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9SZXBsYXlTZXNzaW9uU2VnbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZXBsYXkvUmVwbGF5U2Vzc2lvblNlZ21lbnQuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmVmMjE4OTZkZTgzYjE4YTI3MjJhYWM1YTg4YjQ4ZWQzMzk3NmNkMGMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvUmVwbGF5U2Vzc2lvblNlZ21lbnQuY3BwCkBAIC0w
LDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTICJBUworICogSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEKKyAqIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
SE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVwbGF5U2Vzc2lvblNlZ21lbnQuaCIK
KworI2lmIEVOQUJMRShXRUJfUkVQTEFZKQorCisjaW5jbHVkZSAiQ2FwdHVyaW5nSW5wdXRDdXJz
b3IuaCIKKyNpbmNsdWRlICJGdW5jdG9ySW5wdXRDdXJzb3IuaCIKKyNpbmNsdWRlICJSZXBsYXlp
bmdJbnB1dEN1cnNvci5oIgorI2luY2x1ZGUgIlNlZ21lbnRlZElucHV0U3RvcmFnZS5oIgorI2lu
Y2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRp
YyB1bnNpZ25lZCBzX25leHRTZWdtZW50SWRlbnRpZmllciA9IDE7CisKK1Bhc3NSZWZQdHI8UmVw
bGF5U2Vzc2lvblNlZ21lbnQ+IFJlcGxheVNlc3Npb25TZWdtZW50OjpjcmVhdGUoKQoreworICAg
IHJldHVybiBhZG9wdFJlZihuZXcgUmVwbGF5U2Vzc2lvblNlZ21lbnQoKSk7Cit9CisKK1JlcGxh
eVNlc3Npb25TZWdtZW50OjpSZXBsYXlTZXNzaW9uU2VnbWVudCgpCisgICAgOiBtX3N0b3JhZ2Uo
c3RkOjptYWtlX3VuaXF1ZTxTZWdtZW50ZWRJbnB1dFN0b3JhZ2U+KCkpCisgICAgLCBtX2lkZW50
aWZpZXIoc19uZXh0U2VnbWVudElkZW50aWZpZXIrKykKKyAgICAsIG1fY2FuQ2FwdHVyZSh0cnVl
KQorICAgICwgbV90aW1lc3RhbXAobW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkpCit7Cit9
CisKK1JlcGxheVNlc3Npb25TZWdtZW50Ojp+UmVwbGF5U2Vzc2lvblNlZ21lbnQoKQoreworfQor
CitQYXNzUmVmUHRyPENhcHR1cmluZ0lucHV0Q3Vyc29yPiBSZXBsYXlTZXNzaW9uU2VnbWVudDo6
Y3JlYXRlQ2FwdHVyaW5nQ3Vyc29yKFBhZ2UmKQoreworICAgIEFTU0VSVChtX2NhbkNhcHR1cmUp
OworICAgIG1fY2FuQ2FwdHVyZSA9IGZhbHNlOworICAgIHJldHVybiBDYXB0dXJpbmdJbnB1dEN1
cnNvcjo6Y3JlYXRlKG1fc3RvcmFnZS5nZXQoKSk7Cit9CisKK1Bhc3NSZWZQdHI8UmVwbGF5aW5n
SW5wdXRDdXJzb3I+IFJlcGxheVNlc3Npb25TZWdtZW50OjpjcmVhdGVSZXBsYXlpbmdDdXJzb3Io
UGFnZSYgcGFnZSwgRXZlbnRMb29wSW5wdXREaXNwYXRjaGVyQ2xpZW50KiBjbGllbnQpCit7Cisg
ICAgcmV0dXJuIFJlcGxheWluZ0lucHV0Q3Vyc29yOjpjcmVhdGUobV9zdG9yYWdlLmdldCgpLCAm
cGFnZSwgY2xpZW50KTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEZ1bmN0b3JJbnB1dEN1cnNvcj4g
UmVwbGF5U2Vzc2lvblNlZ21lbnQ6OmNyZWF0ZUZ1bmN0b3JDdXJzb3IoKQoreworICAgIHJldHVy
biBzdGQ6Om1ha2VfdW5pcXVlPEZ1bmN0b3JJbnB1dEN1cnNvcj4obV9zdG9yYWdlLmdldCgpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SRVBM
QVkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvUmVwbGF5U2Vzc2lvblNlZ21l
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9SZXBsYXlTZXNzaW9uU2VnbWVudC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjFiMTZhMzkwZjI0NzlhZWVmMDE1MzQ0ZDg5NmQ4YzY2MDViZjQwN2EKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvUmVwbGF5U2Vzc2lvblNlZ21lbnQuaApA
QCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUyAiQVMKKyAqIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCisgKiBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBSZXBsYXlTZXNzaW9uU2VnbWVudF9oCisjZGVmaW5lIFJlcGxheVNlc3Np
b25TZWdtZW50X2gKKworI2lmIEVOQUJMRShXRUJfUkVQTEFZKQorCisjaW5jbHVkZSA8cmVwbGF5
L05vbmRldGVybWluaXN0aWNJbnB1dC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ2FwdHVyaW5nSW5wdXRDdXJzb3I7CitjbGFz
cyBFdmVudExvb3BJbnB1dERpc3BhdGNoZXJDbGllbnQ7CitjbGFzcyBGdW5jdG9ySW5wdXRDdXJz
b3I7CitjbGFzcyBQYWdlOworY2xhc3MgUmVwbGF5aW5nSW5wdXRDdXJzb3I7CitjbGFzcyBTZWdt
ZW50ZWRJbnB1dFN0b3JhZ2U7CisKK2NsYXNzIFJlcGxheVNlc3Npb25TZWdtZW50IDogcHVibGlj
IFJlZkNvdW50ZWQ8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4gY3JlYXRlKCk7CisgICAgflJlcGxheVNl
c3Npb25TZWdtZW50KCk7CisKKyAgICB1bnNpZ25lZCBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1
cm4gbV9pZGVudGlmaWVyOyB9CisgICAgZG91YmxlIHRpbWVzdGFtcCgpIGNvbnN0IHsgcmV0dXJu
IG1fdGltZXN0YW1wOyB9CisKKyAgICBQYXNzUmVmUHRyPENhcHR1cmluZ0lucHV0Q3Vyc29yPiBj
cmVhdGVDYXB0dXJpbmdDdXJzb3IoUGFnZSYpOworICAgIFBhc3NSZWZQdHI8UmVwbGF5aW5nSW5w
dXRDdXJzb3I+IGNyZWF0ZVJlcGxheWluZ0N1cnNvcihQYWdlJiwgRXZlbnRMb29wSW5wdXREaXNw
YXRjaGVyQ2xpZW50Kik7CisgICAgc3RkOjp1bmlxdWVfcHRyPEZ1bmN0b3JJbnB1dEN1cnNvcj4g
Y3JlYXRlRnVuY3RvckN1cnNvcigpOworcHJpdmF0ZToKKyAgICBSZXBsYXlTZXNzaW9uU2VnbWVu
dCgpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFNlZ21lbnRlZElucHV0U3RvcmFnZT4gbV9zdG9y
YWdlOworICAgIHVuc2lnbmVkIG1faWRlbnRpZmllcjsKKyAgICBib29sIG1fY2FuQ2FwdHVyZTsK
KyAgICBkb3VibGUgbV90aW1lc3RhbXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JFUExBWSkKKworI2VuZGlmIC8vIFJlcGxheVNlc3Npb25T
ZWdtZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9SZXBsYXlpbmdJbnB1
dEN1cnNvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvUmVwbGF5aW5nSW5wdXRDdXJzb3Iu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjRhYTIwNzY0ZjU2OTg5YzkzYTM0NzE3MTA0MjkzYmJlZDY4M2IxODgK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvUmVwbGF5aW5nSW5wdXRD
dXJzb3IuY3BwCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUworICogSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEKKyAq
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVwbGF5aW5n
SW5wdXRDdXJzb3IuaCIKKworI2lmIEVOQUJMRShXRUJfUkVQTEFZKQorCisjaW5jbHVkZSAiRXZl
bnRMb29wSW5wdXREaXNwYXRjaGVyLmgiCisjaW5jbHVkZSAiU2VnbWVudGVkSW5wdXRTdG9yYWdl
LmgiCisjaW5jbHVkZSAiU2VyaWFsaXphdGlvbk1ldGhvZHMuaCIKKyNpbmNsdWRlICJXZWJSZXBs
YXlJbnB1dHMuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworUmVwbGF5aW5nSW5wdXRDdXJzb3I6OlJlcGxheWluZ0lucHV0Q3Vyc29yKFNl
Z21lbnRlZElucHV0U3RvcmFnZSogc3RvcmFnZSwgUGFnZSogcGFnZSwgRXZlbnRMb29wSW5wdXRE
aXNwYXRjaGVyQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX3N0b3JhZ2Uoc3RvcmFnZSkKKyAgICAs
IG1fZGlzcGF0Y2hlcihzdGQ6Om1ha2VfdW5pcXVlPEV2ZW50TG9vcElucHV0RGlzcGF0Y2hlcj4o
cGFnZSwgdGhpcywgY2xpZW50KSkKKyAgICAsIG1fcG9zaXRpb25zKFZlY3RvcjxzaXplX3Q+KCkp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KElucHV0
UXVldWU6OkNvdW50KTsgaSsrKQorICAgICAgICBtX3Bvc2l0aW9ucy5hcHBlbmQoMCk7Cit9CisK
K1JlcGxheWluZ0lucHV0Q3Vyc29yOjp+UmVwbGF5aW5nSW5wdXRDdXJzb3IoKQoreworfQorCitQ
YXNzUmVmUHRyPFJlcGxheWluZ0lucHV0Q3Vyc29yPiBSZXBsYXlpbmdJbnB1dEN1cnNvcjo6Y3Jl
YXRlKFNlZ21lbnRlZElucHV0U3RvcmFnZSogc3RvcmFnZSwgUGFnZSogcGFnZSwgRXZlbnRMb29w
SW5wdXREaXNwYXRjaGVyQ2xpZW50KiBjbGllbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBSZXBsYXlpbmdJbnB1dEN1cnNvcihzdG9yYWdlLCBwYWdlLCBjbGllbnQpKTsKK30KKwordm9p
ZCBSZXBsYXlpbmdJbnB1dEN1cnNvcjo6c3RvcmVJbnB1dChzdGQ6OnVuaXF1ZV9wdHI8Tm9uZGV0
ZXJtaW5pc3RpY0lucHV0QmFzZT4pCit7CisgICAgLy8gQ2Fubm90IHN0b3JlIGlucHV0cyBmcm9t
IGEgcmVwbGF5aW5nIGlucHV0IGN1cnNvci4KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
KworTm9uZGV0ZXJtaW5pc3RpY0lucHV0QmFzZSogUmVwbGF5aW5nSW5wdXRDdXJzb3I6OmxvYWRJ
bnB1dChJbnB1dFF1ZXVlIHF1ZXVlLCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUpCit7CisgICAg
Tm9uZGV0ZXJtaW5pc3RpY0lucHV0QmFzZSogaW5wdXQgPSB1bmNoZWNrZWRMb2FkSW5wdXQocXVl
dWUpOworCisgICAgaWYgKGlucHV0LT50eXBlKCkgIT0gdHlwZSkgeworICAgICAgICBMT0dfRVJS
T1IoIiUtMjVzIEVSUk9SOiBFeHBlY3RlZCByZXBsYXkgaW5wdXQgb2YgdHlwZSAlcywgYnV0IGdv
dCB0eXBlICVzXG4iLCAiW1JlcGxheWluZ0lucHV0Q3Vyc29yXSIsIHR5cGUuc3RyaW5nKCkuYXNj
aWkoKS5kYXRhKCksIGlucHV0LT50eXBlKCkuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4gaW5wdXQ7Cit9CisKK05v
bmRldGVybWluaXN0aWNJbnB1dEJhc2UqIFJlcGxheWluZ0lucHV0Q3Vyc29yOjp1bmNoZWNrZWRM
b2FkSW5wdXQoSW5wdXRRdWV1ZSBxdWV1ZSkKK3sKKyAgICBpZiAobV9wb3NpdGlvbnNbc3RhdGlj
X2Nhc3Q8c2l6ZV90PihxdWV1ZSldID49IG1fc3RvcmFnZS0+cXVldWVTaXplKHF1ZXVlKSkgewor
ICAgICAgICBTdHJpbmcgcXVldWVTdHJpbmcgPSBFbmNvZGluZ1RyYWl0czxJbnB1dFF1ZXVlPjo6
ZW5jb2RlVmFsdWUocXVldWUpLmNvbnZlcnRUbzxTdHJpbmc+KCk7CisgICAgICAgIExPR19FUlJP
UigiJS0zMHMgRVJST1IgTm8gbW9yZSBpbnB1dHMgcmVtYWluIGZvciBkZXRlcm1pbmlzbSBxdWV1
ZSAlcywgYnV0IG9uZSB3YXMgcmVxdWVzdGVkLiIsICJbUmVwbGF5aW5nSW5wdXRDdXJzb3JdIiwg
cXVldWVTdHJpbmcuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CisKKyAgICByZXR1cm4gbV9zdG9yYWdlLT5sb2FkKHF1ZXVlLCBtX3Bvc2l0aW9uc1tzdGF0
aWNfY2FzdDxzaXplX3Q+KHF1ZXVlKV0rKyk7Cit9CisKK307IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JFUExBWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlcGxheS9SZXBsYXlpbmdJbnB1dEN1cnNvci5oIGIvU291cmNlL1dlYkNvcmUvcmVwbGF5
L1JlcGxheWluZ0lucHV0Q3Vyc29yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTY4M2IzM2JjNjE5ZWU0ZDNmZTE1
ZTZkZjliZTIzM2RhOTZjNzM3YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
cGxheS9SZXBsYXlpbmdJbnB1dEN1cnNvci5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUworICogSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVECisgKiBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEKKyAqIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFJlcGxheWluZ0lucHV0
Q3Vyc29yX2gKKyNkZWZpbmUgUmVwbGF5aW5nSW5wdXRDdXJzb3JfaAorCisjaWYgRU5BQkxFKFdF
Ql9SRVBMQVkpCisKKyNpbmNsdWRlIDxyZXBsYXkvSW5wdXRDdXJzb3IuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRXZlbnRMb29wSW5wdXREaXNwYXRjaGVyOworY2xhc3Mg
RXZlbnRMb29wSW5wdXREaXNwYXRjaGVyQ2xpZW50OworY2xhc3MgUGFnZTsKK2NsYXNzIFNlZ21l
bnRlZElucHV0U3RvcmFnZTsKKworY2xhc3MgUmVwbGF5aW5nSW5wdXRDdXJzb3IgZmluYWwgOiBw
dWJsaWMgSW5wdXRDdXJzb3IgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlcGxheWluZ0lu
cHV0Q3Vyc29yKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZXBsYXlpbmdJbnB1
dEN1cnNvcj4gY3JlYXRlKFNlZ21lbnRlZElucHV0U3RvcmFnZSosIFBhZ2UqLCBFdmVudExvb3BJ
bnB1dERpc3BhdGNoZXJDbGllbnQqKTsKKyAgICB2aXJ0dWFsIH5SZXBsYXlpbmdJbnB1dEN1cnNv
cigpOworCisgICAgdmlydHVhbCBib29sIGlzQ2FwdHVyaW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNSZXBsYXlpbmcoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBFdmVudExvb3BJbnB1dERpc3BhdGNoZXImIGRp
c3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiAqbV9kaXNwYXRjaGVyOyB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgc3RvcmVJbnB1dChzdGQ6OnVuaXF1ZV9wdHI8Tm9uZGV0ZXJtaW5pc3RpY0lucHV0QmFz
ZT4pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgTm9uZGV0ZXJtaW5pc3RpY0lucHV0QmFzZSogdW5j
aGVja2VkTG9hZElucHV0KElucHV0UXVldWUpIG92ZXJyaWRlOworcHJvdGVjdGVkOgorICAgIHZp
cnR1YWwgTm9uZGV0ZXJtaW5pc3RpY0lucHV0QmFzZSogbG9hZElucHV0KElucHV0UXVldWUsIGNv
bnN0IEF0b21pY1N0cmluZyYgdHlwZSkgb3ZlcnJpZGU7Citwcml2YXRlOgorICAgIFJlcGxheWlu
Z0lucHV0Q3Vyc29yKFNlZ21lbnRlZElucHV0U3RvcmFnZSosIFBhZ2UqLCBFdmVudExvb3BJbnB1
dERpc3BhdGNoZXJDbGllbnQqKTsKKworICAgIFNlZ21lbnRlZElucHV0U3RvcmFnZSogbV9zdG9y
YWdlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxFdmVudExvb3BJbnB1dERpc3BhdGNoZXI+IG1fZGlz
cGF0Y2hlcjsKKyAgICBWZWN0b3I8c2l6ZV90PiBtX3Bvc2l0aW9uczsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUkVQTEFZKQorCisjZW5kaWYg
Ly8gUmVwbGF5aW5nSW5wdXRDdXJzb3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVw
bGF5L1NlZ21lbnRlZElucHV0U3RvcmFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvU2Vn
bWVudGVkSW5wdXRTdG9yYWdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNTA3MmY2ODAyMTc5MDMwOTBjZGQw
NzI1YzQzMjZkMjE3MTRkNGFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVw
bGF5L1NlZ21lbnRlZElucHV0U3RvcmFnZS5jcHAKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUworICogSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVECisgKiBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEKKyAqIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiU2VnbWVudGVkSW5wdXRTdG9yYWdlLmgiCisKKyNpZiBFTkFCTEUoV0VCX1JF
UExBWSkKKworI2lmICFMT0dfRElTQUJMRUQKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVk
ZSAiU2VyaWFsaXphdGlvbk1ldGhvZHMuaCIKKyNpbmNsdWRlIDxyZXBsYXkvRW5jb2RlZFZhbHVl
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmICFMT0dfRElT
QUJMRUQKK3N0YXRpYyBjb25zdCBjaGFyKiBxdWV1ZVR5cGVUb0xvZ1ByZWZpeChJbnB1dFF1ZXVl
IHF1ZXVlLCBib29sIGlzTG9hZCkKK3sKKyAgICBpZiAoaXNMb2FkKSB7CisgICAgICAgIHN3aXRj
aCAocXVldWUpIHsKKyAgICAgICAgY2FzZSBJbnB1dFF1ZXVlOjpFdmVudExvb3BJbnB1dDogcmV0
dXJuICIoRFNQVENILUxPQUQpIjsKKyAgICAgICAgY2FzZSBJbnB1dFF1ZXVlOjpMb2FkZXJNZW1v
aXplZERhdGE6IHJldHVybiAiPExETUVNTy1MT0FEIjsKKyAgICAgICAgY2FzZSBJbnB1dFF1ZXVl
OjpTY3JpcHRNZW1vaXplZERhdGE6IHJldHVybiAiPC0tLTwtLS08LS0tSlNNRU1PLUxPQUQiOwor
ICAgICAgICBjYXNlIElucHV0UXVldWU6OkNvdW50OiByZXR1cm4gIkVSUk9SISI7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICBzd2l0Y2ggKHF1ZXVlKSB7CisgICAgICAgIGNhc2Ug
SW5wdXRRdWV1ZTo6RXZlbnRMb29wSW5wdXQ6IHJldHVybiAiPkRTUFRDSC1TVE9SRSI7CisgICAg
ICAgIGNhc2UgSW5wdXRRdWV1ZTo6TG9hZGVyTWVtb2l6ZWREYXRhOiByZXR1cm4gIjxMRE1FTU8t
U1RPUkUiOworICAgICAgICBjYXNlIElucHV0UXVldWU6OlNjcmlwdE1lbW9pemVkRGF0YTogcmV0
dXJuICI8LS0tPC0tLTwtLS1KU01FTU8tU1RPUkUiOworICAgICAgICBjYXNlIElucHV0UXVldWU6
OkNvdW50OiByZXR1cm4gIkVSUk9SISI7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyBT
dHJpbmcganNvblN0cmluZ0ZvcklucHV0KGNvbnN0IE5vbmRldGVybWluaXN0aWNJbnB1dEJhc2Um
IGlucHV0KQoreworICAgIEVuY29kZWRWYWx1ZSBlbmNvZGVkVmFsdWUgPSBFbmNvZGluZ1RyYWl0
czxOb25kZXRlcm1pbmlzdGljSW5wdXRCYXNlPjo6ZW5jb2RlVmFsdWUoaW5wdXQpOworICAgIHJl
dHVybiBlbmNvZGVkVmFsdWUuYXNPYmplY3QoKS0+dG9KU09OU3RyaW5nKCk7Cit9CisjZW5kaWYg
Ly8gIUxPR19ESVNBQkxFRAorCitzdGF0aWMgc2l6ZV90IG9mZnNldEZvcklucHV0UXVldWUoSW5w
dXRRdWV1ZSBxdWV1ZSkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihxdWV1ZSk7
Cit9CisKK1NlZ21lbnRlZElucHV0U3RvcmFnZTo6U2VnbWVudGVkSW5wdXRTdG9yYWdlKCkKKyAg
ICA6IG1faW5wdXRDb3VudCgwKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2Zmc2V0
Rm9ySW5wdXRRdWV1ZShJbnB1dFF1ZXVlOjpDb3VudCk7IGkrKykKKyAgICAgICAgbV9xdWV1ZXMu
YXBwZW5kKG5ldyBRdWV1ZWRJbnB1dHMoKSk7Cit9CisKK1NlZ21lbnRlZElucHV0U3RvcmFnZTo6
flNlZ21lbnRlZElucHV0U3RvcmFnZSgpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBv
ZmZzZXRGb3JJbnB1dFF1ZXVlKElucHV0UXVldWU6OkNvdW50KTsgaSsrKQorICAgICAgICBkZWxl
dGUgbV9xdWV1ZXMuYXQoaSk7Cit9CisKK05vbmRldGVybWluaXN0aWNJbnB1dEJhc2UqIFNlZ21l
bnRlZElucHV0U3RvcmFnZTo6bG9hZChJbnB1dFF1ZXVlIHF1ZXVlLCBzaXplX3Qgb2Zmc2V0KQor
eworICAgIEFTU0VSVChxdWV1ZSA8IElucHV0UXVldWU6OkNvdW50KTsKKyAgICBBU1NFUlQob2Zm
c2V0IDwgbV9xdWV1ZXNbb2Zmc2V0Rm9ySW5wdXRRdWV1ZShxdWV1ZSldLT5zaXplKCkpOworCisg
ICAgTm9uZGV0ZXJtaW5pc3RpY0lucHV0QmFzZSogaW5wdXQgPSBtX3F1ZXVlcy5hdChvZmZzZXRG
b3JJbnB1dFF1ZXVlKHF1ZXVlKSktPmF0KG9mZnNldCkuZ2V0KCk7CisgICAgQVNTRVJUKGlucHV0
KTsKKworICAgIExPRyhXZWJSZXBsYXksICIlLTIwcyAlczogJXMgJXNcbiIsICJSZXBsYXlFdmVu
dHMiLCBxdWV1ZVR5cGVUb0xvZ1ByZWZpeChxdWV1ZSwgdHJ1ZSksIGlucHV0LT50eXBlKCkuc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSwganNvblN0cmluZ0ZvcklucHV0KCppbnB1dCkudXRmOCgpLmRh
dGEoKSk7CisKKyAgICByZXR1cm4gaW5wdXQ7Cit9CisKK3ZvaWQgU2VnbWVudGVkSW5wdXRTdG9y
YWdlOjpzdG9yZShzdGQ6OnVuaXF1ZV9wdHI8Tm9uZGV0ZXJtaW5pc3RpY0lucHV0QmFzZT4gaW5w
dXQpCit7CisgICAgQVNTRVJUKGlucHV0KTsKKyAgICBBU1NFUlQoaW5wdXQtPnF1ZXVlKCkgPCBJ
bnB1dFF1ZXVlOjpDb3VudCk7CisKKyAgICBMT0coV2ViUmVwbGF5LCAiJS0xNHMjJS01dSAlczog
JXMgJXNcbiIsICJSZXBsYXlFdmVudHMiLCBtX2lucHV0Q291bnQrKywgcXVldWVUeXBlVG9Mb2dQ
cmVmaXgoaW5wdXQtPnF1ZXVlKCksIGZhbHNlKSwgaW5wdXQtPnR5cGUoKS5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpLCBqc29uU3RyaW5nRm9ySW5wdXQoKmlucHV0KS51dGY4KCkuZGF0YSgpKTsKKwor
ICAgIG1fcXVldWVzLmF0KG9mZnNldEZvcklucHV0UXVldWUoaW5wdXQtPnF1ZXVlKCkpKS0+YXBw
ZW5kKHN0ZDo6bW92ZShpbnB1dCkpOworfQorCitzaXplX3QgU2VnbWVudGVkSW5wdXRTdG9yYWdl
OjpxdWV1ZVNpemUoSW5wdXRRdWV1ZSBxdWV1ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9xdWV1
ZXNbb2Zmc2V0Rm9ySW5wdXRRdWV1ZShxdWV1ZSldLT5zaXplKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUkVQTEFZKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVwbGF5L1NlZ21lbnRlZElucHV0U3RvcmFnZS5oIGIvU291cmNlL1dl
YkNvcmUvcmVwbGF5L1NlZ21lbnRlZElucHV0U3RvcmFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA0MzM1MGIx
MTM1N2JhOWQ3ZTgzMjViODU0MjFjMGRmMmQ2OThiNjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZXBsYXkvU2VnbWVudGVkSW5wdXRTdG9yYWdlLmgKQEAgLTAsMCArMSw2MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFT
CisgKiBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQKKyAqIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQorICogUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
U2VnbWVudGVkSW5wdXRTdG9yYWdlX2gKKyNkZWZpbmUgU2VnbWVudGVkSW5wdXRTdG9yYWdlX2gK
KworI2lmIEVOQUJMRShXRUJfUkVQTEFZKQorCisjaW5jbHVkZSA8cmVwbGF5L05vbmRldGVybWlu
aXN0aWNJbnB1dC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTZWdtZW50ZWRJbnB1
dFN0b3JhZ2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNlZ21lbnRlZElucHV0U3RvcmFn
ZSk7CisgICAgZnJpZW5kIGNsYXNzIEZ1bmN0b3JJbnB1dEN1cnNvcjsKK3B1YmxpYzoKKyAgICBT
ZWdtZW50ZWRJbnB1dFN0b3JhZ2UoKTsKKyAgICB+U2VnbWVudGVkSW5wdXRTdG9yYWdlKCk7CisK
KyAgICBOb25kZXRlcm1pbmlzdGljSW5wdXRCYXNlKiBsb2FkKElucHV0UXVldWUsIHNpemVfdCk7
CisgICAgdm9pZCBzdG9yZShzdGQ6OnVuaXF1ZV9wdHI8Tm9uZGV0ZXJtaW5pc3RpY0lucHV0QmFz
ZT4pOworICAgIHNpemVfdCBxdWV1ZVNpemUoSW5wdXRRdWV1ZSkgY29uc3Q7CisKK3ByaXZhdGU6
CisgICAgdHlwZWRlZiBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPE5vbmRldGVybWluaXN0aWNJbnB1
dEJhc2U+PiBRdWV1ZWRJbnB1dHM7CisKKyAgICBWZWN0b3I8UXVldWVkSW5wdXRzKj4gbV9xdWV1
ZXM7CisgICAgdW5zaWduZWQgbV9pbnB1dENvdW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SRVBMQVkpCisKKyNlbmRpZiAvLyBTZWdtZW50
ZWRJbnB1dFN0b3JhZ2VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVwbGF5L1Nlcmlh
bGl6YXRpb25NZXRob2RzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9TZXJpYWxpemF0aW9u
TWV0aG9kcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjg2MTc4YjU0ZjNjYzBjMGJlNGU2ZjlkOGMwMjI5ZGM1
MjcxMDVlOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9TZXJpYWxp
emF0aW9uTWV0aG9kcy5jcHAKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUworICogSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEKKyAqIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
U2VyaWFsaXphdGlvbk1ldGhvZHMuaCIKKworI2lmIEVOQUJMRShXRUJfUkVQTEFZKQorCisjaW5j
bHVkZSAiQWxsUmVwbGF5SW5wdXRzLmgiCisjaW5jbHVkZSAiUmVwbGF5SW5wdXRUeXBlcy5oIgor
I2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiVVJMLmgiCisKK3VzaW5nIFdl
YkNvcmU6OlNlY3VyaXR5T3JpZ2luOwordXNpbmcgV2ViQ29yZTo6VVJMOwordXNpbmcgV2ViQ29y
ZTo6aW5wdXRUeXBlczsKKworI2RlZmluZSBJTVBPUlRfRlJPTV9XRUJDT1JFX05BTUVTUEFDRShu
YW1lKSBcCit1c2luZyBXZWJDb3JlOjpuYW1lOyBcCisKK1dFQl9SRVBMQVlfSU5QVVRfTkFNRVNf
Rk9SX0VBQ0goSU1QT1JUX0ZST01fV0VCQ09SRV9OQU1FU1BBQ0UpCisjdW5kZWYgSU1QT1JUX0ZS
T01fV0VCQ09SRV9OQU1FU1BBQ0UKKworbmFtZXNwYWNlIEpTQyB7CisKK0VuY29kZWRWYWx1ZSBF
bmNvZGluZ1RyYWl0czxOb25kZXRlcm1pbmlzdGljSW5wdXRCYXNlPjo6ZW5jb2RlVmFsdWUoY29u
c3QgTm9uZGV0ZXJtaW5pc3RpY0lucHV0QmFzZSYgaW5wdXQpCit7CisgICAgRW5jb2RlZFZhbHVl
IGVuY29kZWRWYWx1ZSA9IEVuY29kZWRWYWx1ZTo6Y3JlYXRlT2JqZWN0KCk7CisgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiB0eXBlID0gaW5wdXQudHlwZSgpOworICAgIGVuY29kZWRWYWx1ZS5wdXQ8
U3RyaW5nPihBU0NJSUxpdGVyYWwoInR5cGUiKSwgdHlwZS5zdHJpbmcoKSk7CisKKyNkZWZpbmUg
RU5DT0RFX0lGX1RZUEVfVEFHX01BVENIRVMobmFtZSkgXAorICAgIGlmICh0eXBlID09IGlucHV0
VHlwZXMoKS5uYW1lKSB7IFwKKyAgICAgICAgSW5wdXRUcmFpdHM8bmFtZT46OmVuY29kZShlbmNv
ZGVkVmFsdWUsIHN0YXRpY19jYXN0PGNvbnN0IG5hbWUmPihpbnB1dCkpOyBcCisgICAgICAgIHJl
dHVybiBlbmNvZGVkVmFsdWU7IFwKKyAgICB9IFwKKworICAgIEpTX1JFUExBWV9JTlBVVF9OQU1F
U19GT1JfRUFDSChFTkNPREVfSUZfVFlQRV9UQUdfTUFUQ0hFUykKKyAgICBXRUJfUkVQTEFZX0lO
UFVUX05BTUVTX0ZPUl9FQUNIKEVOQ09ERV9JRl9UWVBFX1RBR19NQVRDSEVTKQorI3VuZGVmIEVO
Q09ERV9JRl9UWVBFX1RBR19NQVRDSEVTCisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gRW5jb2RlZFZhbHVlKCk7Cit9CisKK2Jvb2wgRW5jb2RpbmdUcmFpdHM8Tm9uZGV0
ZXJtaW5pc3RpY0lucHV0QmFzZT46OmRlY29kZVZhbHVlKEVuY29kZWRWYWx1ZSYgZW5jb2RlZFZh
bHVlLCBzdGQ6OnVuaXF1ZV9wdHI8Tm9uZGV0ZXJtaW5pc3RpY0lucHV0QmFzZT4mIGlucHV0KQor
eworICAgIFN0cmluZyB0eXBlOworICAgIGlmICghZW5jb2RlZFZhbHVlLmdldDxTdHJpbmc+KEFT
Q0lJTGl0ZXJhbCgidHlwZSIpLCB0eXBlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisjZGVm
aW5lIERFQ09ERV9JRl9UWVBFX1RBR19NQVRDSEVTKG5hbWUpIFwKKyAgICBpZiAodHlwZSA9PSBp
bnB1dFR5cGVzKCkubmFtZSkgeyBcCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxuYW1lPiBkZWNv
ZGVkSW5wdXQ7IFwKKyAgICAgICAgaWYgKCFJbnB1dFRyYWl0czxuYW1lPjo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSwgZGVjb2RlZElucHV0KSkgXAorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyBcCisg
ICAgICAgIFwKKyAgICAgICAgaW5wdXQgPSBzdGQ6Om1vdmUoZGVjb2RlZElucHV0KTsgXAorICAg
ICAgICByZXR1cm4gdHJ1ZTsgXAorICAgIH0gXAorCisgICAgSlNfUkVQTEFZX0lOUFVUX05BTUVT
X0ZPUl9FQUNIKERFQ09ERV9JRl9UWVBFX1RBR19NQVRDSEVTKQorICAgIFdFQl9SRVBMQVlfSU5Q
VVRfTkFNRVNfRk9SX0VBQ0goREVDT0RFX0lGX1RZUEVfVEFHX01BVENIRVMpCisjdW5kZWYgREVD
T0RFX0lGX1RZUEVfVEFHX01BVENIRVMKKworICAgIHJldHVybiBmYWxzZTsKK30KKworRW5jb2Rl
ZFZhbHVlIEVuY29kaW5nVHJhaXRzPFNlY3VyaXR5T3JpZ2luPjo6ZW5jb2RlVmFsdWUoUmVmUHRy
PFNlY3VyaXR5T3JpZ2luPiBpbnB1dCkKK3sKKyAgICByZXR1cm4gRW5jb2RlZFZhbHVlOjpjcmVh
dGVTdHJpbmcoaW5wdXQtPnRvU3RyaW5nKCkpOworfQorCitib29sIEVuY29kaW5nVHJhaXRzPFNl
Y3VyaXR5T3JpZ2luPjo6ZGVjb2RlVmFsdWUoRW5jb2RlZFZhbHVlJiBlbmNvZGVkVmFsdWUsIFJl
ZlB0cjxTZWN1cml0eU9yaWdpbj4mIGlucHV0KQoreworICAgIGlucHV0ID0gU2VjdXJpdHlPcmln
aW46OmNyZWF0ZUZyb21TdHJpbmcoZW5jb2RlZFZhbHVlLmNvbnZlcnRUbzxTdHJpbmc+KCkpOwor
ICAgIHJldHVybiB0cnVlOworfQorCitFbmNvZGVkVmFsdWUgRW5jb2RpbmdUcmFpdHM8VVJMPjo6
ZW5jb2RlVmFsdWUoY29uc3QgVVJMJiBpbnB1dCkKK3sKKyAgICByZXR1cm4gRW5jb2RlZFZhbHVl
OjpjcmVhdGVTdHJpbmcoaW5wdXQuc3RyaW5nKCkpOworfQorCitib29sIEVuY29kaW5nVHJhaXRz
PFVSTD46OmRlY29kZVZhbHVlKEVuY29kZWRWYWx1ZSYgZW5jb2RlZFZhbHVlLCBVUkwmIGlucHV0
KQoreworICAgIGlucHV0ID0gVVJMKFdlYkNvcmU6OlBhcnNlZFVSTFN0cmluZywgZW5jb2RlZFZh
bHVlLmNvbnZlcnRUbzxTdHJpbmc+KCkpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUkVQTEFZKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVwbGF5L1NlcmlhbGl6YXRpb25NZXRob2RzLmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZXBsYXkvU2VyaWFsaXphdGlvbk1ldGhvZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZTExMmI4MjBk
ZmJkMzZkNzZkY2VjMTUzMTRjYjc3ODg2Y2M3NDM5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVwbGF5L1NlcmlhbGl6YXRpb25NZXRob2RzLmgKQEAgLTAsMCArMSw3MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTCisg
KiBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQKKyAqIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQorICogUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Vy
aWFsaXphdGlvbk1ldGhvZHNfaAorI2RlZmluZSBTZXJpYWxpemF0aW9uTWV0aG9kc19oCisKKyNp
ZiBFTkFCTEUoV0VCX1JFUExBWSkKKworI2luY2x1ZGUgPHJlcGxheS9FbmNvZGVkVmFsdWUuaD4K
KyNpbmNsdWRlIDxyZXBsYXkvTm9uZGV0ZXJtaW5pc3RpY0lucHV0Lmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK2NsYXNzIERvY3VtZW50OworY2xhc3MgRnJhbWU7CitjbGFzcyBQYWdlOworY2xh
c3MgU2VjdXJpdHlPcmlnaW47CitjbGFzcyBVUkw7Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
Ky8vIFRlbXBsYXRlIHNwZWNpYWxpemF0aW9ucyBtdXN0IGJlIGRlZmluZWQgaW4gdGhlIHNhbWUg
bmFtZXNwYWNlIGFzIHRoZSB0ZW1wbGF0ZSBkZWNsYXJhdGlvbi4KK25hbWVzcGFjZSBKU0Mgewor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBFbmNvZGluZ1RyYWl0czxOb25kZXRlcm1pbmlzdGljSW5wdXRC
YXNlPiB7CisgICAgdHlwZWRlZiBOb25kZXRlcm1pbmlzdGljSW5wdXRCYXNlIERlY29kZWRUeXBl
OworCisgICAgc3RhdGljIEVuY29kZWRWYWx1ZSBlbmNvZGVWYWx1ZShjb25zdCBOb25kZXRlcm1p
bmlzdGljSW5wdXRCYXNlJiB2YWx1ZSk7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlVmFsdWUoRW5j
b2RlZFZhbHVlJiwgc3RkOjp1bmlxdWVfcHRyPE5vbmRldGVybWluaXN0aWNJbnB1dEJhc2U+JiB2
YWx1ZSk7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbmNvZGluZ1RyYWl0czxXZWJDb3JlOjpV
Ukw+IHsKKyAgICB0eXBlZGVmIFdlYkNvcmU6OlVSTCBEZWNvZGVkVHlwZTsKKworICAgIHN0YXRp
YyBFbmNvZGVkVmFsdWUgZW5jb2RlVmFsdWUoY29uc3QgV2ViQ29yZTo6VVJMJiB2YWx1ZSk7Cisg
ICAgc3RhdGljIGJvb2wgZGVjb2RlVmFsdWUoRW5jb2RlZFZhbHVlJiwgV2ViQ29yZTo6VVJMJiB2
YWx1ZSk7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbmNvZGluZ1RyYWl0czxXZWJDb3JlOjpT
ZWN1cml0eU9yaWdpbj4geworICAgIHR5cGVkZWYgUmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3Jp
Z2luPiBEZWNvZGVkVHlwZTsKKworICAgIHN0YXRpYyBFbmNvZGVkVmFsdWUgZW5jb2RlVmFsdWUo
UmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPiB2YWx1ZSk7CisgICAgc3RhdGljIGJvb2wg
ZGVjb2RlVmFsdWUoRW5jb2RlZFZhbHVlJiwgUmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2lu
PiYgdmFsdWUpOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCX1JFUExBWSkKKworI2VuZGlmIC8vIFNlcmlhbGl6YXRpb25NZXRob2RzX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9XZWJJbnB1dHMuanNvbiBiL1NvdXJjZS9XZWJDb3Jl
L3JlcGxheS9XZWJJbnB1dHMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZTY1MWUxNjI4OTRmYzc4OWJiZjQ5
ZWEwODVjMDE3NzA2YjFmNGVjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVw
bGF5L1dlYklucHV0cy5qc29uCkBAIC0wLDAgKzEsNjkgQEAKK3sKKyAgICAidHlwZXMiOiB7Cisg
ICAgICAgICJHbG9iYWwiOiBbCisgICAgICAgICAgICB7ICJuYW1lIjogImJvb2wiLCAibW9kZSI6
ICJTQ0FMQVIiIH0sCisgICAgICAgICAgICB7ICJuYW1lIjogImRvdWJsZSIsICJtb2RlIjogIlND
QUxBUiIgfSwKKyAgICAgICAgICAgIHsgIm5hbWUiOiAiaW50IiwgIm1vZGUiOiAiU0NBTEFSIiB9
LAorICAgICAgICAgICAgeyAibmFtZSI6ICJ1bnNpZ25lZCIsICJtb2RlIjogIlNDQUxBUiIgfSwK
KyAgICAgICAgICAgIHsgIm5hbWUiOiAidW5zaWduZWQgbG9uZyIsICJtb2RlIjogIlNDQUxBUiIg
fSwKKyAgICAgICAgICAgIHsgIm5hbWUiOiAidW5zaWduZWQgbG9uZyBsb25nIiwgIm1vZGUiOiAi
U0NBTEFSIiB9CisgICAgICAgIF0sCisKKyAgICAgICAgIldURiI6IFsKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAibmFtZSI6ICJTdHJpbmciLCAibW9kZSI6ICJIRUFWWV9TQ0FMQVIi
LAorICAgICAgICAgICAgICAgICJoZWFkZXIiOiAid3RmL3RleHQvV1RGU3RyaW5nLmgiCisgICAg
ICAgICAgICB9CisgICAgICAgIF0sCisKKyAgICAgICAgIkphdmFTY3JpcHRDb3JlIjogWworICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICJuYW1lIjogIklucHV0UXVldWUiLCAibW9kZSI6
ICJTQ0FMQVIiLCAic3RvcmFnZSI6ICJ1aW50OF90IiwKKyAgICAgICAgICAgICAgICAiZmxhZ3Mi
OiBbIkVOVU1fQ0xBU1MiXSwKKyAgICAgICAgICAgICAgICAidmFsdWVzIjogWyJFdmVudExvb3BJ
bnB1dCIsICJMb2FkZXJNZW1vaXplZERhdGEiLCAiU2NyaXB0TWVtb2l6ZWREYXRhIiwgIkNvdW50
Il0sCisgICAgICAgICAgICAgICAgImhlYWRlciI6ICJyZXBsYXkvTm9uZGV0ZXJtaW5pc3RpY0lu
cHV0LmgiCisgICAgICAgICAgICB9CisgICAgICAgIF0sCisKKyAgICAgICAgIldlYkNvcmUiOiBb
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm5hbWUiOiAiVVJMIiwgIm1vZGUiOiAi
SEVBVllfU0NBTEFSIiwKKyAgICAgICAgICAgICAgICAiaGVhZGVyIjogInBsYXRmb3JtL1VSTC5o
IgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAibmFtZSI6
ICJTZWN1cml0eU9yaWdpbiIsICJtb2RlIjogIlNIQVJFRCIsCisgICAgICAgICAgICAgICAgImhl
YWRlciI6ICJwYWdlL1NlY3VyaXR5T3JpZ2luLmgiCisgICAgICAgICAgICB9LAorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICJuYW1lIjogIlBhZ2UiLCAibW9kZSI6ICJPV05FRCIsCisg
ICAgICAgICAgICAgICAgImhlYWRlciI6ICJwYWdlL1BhZ2UuaCIKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgXQorICAgIH0sCisKKyAgICAiaW5wdXRzIjogWworICAgICAgICB7CisgICAgICAgICAg
ICAibmFtZSI6ICJCZWdpblNlZ21lbnRTZW50aW5lbCIsCisgICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAiQSBzZW50aW5lbCBpbnB1dCB0byBzaWduYWwgdGhlIHN0YXJ0IG9mIGEgc2VnbWVudC4i
LAorICAgICAgICAgICAgInF1ZXVlIjogIkVWRU5UX0xPT1AiLAorICAgICAgICAgICAgIm1lbWJl
cnMiOiBbIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiRW5k
U2VnbWVudFNlbnRpbmVsIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIHNlbnRpbmVs
IGlucHV0IHRvIHNpZ25hbCB0aGUgZW5kIG9mIGEgc2VnbWVudC4iLAorICAgICAgICAgICAgInF1
ZXVlIjogIkVWRU5UX0xPT1AiLAorICAgICAgICAgICAgIm1lbWJlcnMiOiBbIF0KKyAgICAgICAg
fSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiSW5pdGlhbE5hdmlnYXRpb24iLAor
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkluaXRpYXRlIHRoZSBpbml0aWFsIG1haW4gZnJh
bWUgbmF2aWdhdGlvbi4iLAorICAgICAgICAgICAgInF1ZXVlIjogIkVWRU5UX0xPT1AiLAorICAg
ICAgICAgICAgImZsYWdzIjogWyJISURERU4iLCAiQ1JFQVRFX0ZST01fUEFHRSJdLAorICAgICAg
ICAgICAgIm1lbWJlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzZWN1cml0eU9y
aWdpbiIsICJ0eXBlIjogIlNlY3VyaXR5T3JpZ2luIiB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAidXJsIiwgInR5cGUiOiAiVVJMIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
cmVmZXJyZXIiLCAidHlwZSI6ICJTdHJpbmciIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQor
ICAgIF0KK30K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>225336</attachid>
            <date>2014-02-26 18:24:45 -0800</date>
            <delta_ts>2014-03-03 07:32:40 -0800</delta_ts>
            <desc>revised patch</desc>
            <filename>bug-128782-20140226182444.patch</filename>
            <type>text/plain</type>
            <size>205753</size>
            <attacher name="Blaze Burg">bburg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY0NzUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
YzFlMTdkMjc1ODdjNzViNjVlZmY3MDU2ZGIyOTI5NzY3Y2UyZjM1Li5mYjM5ZDFkMmJkY2M1MWRm
ZGMwNDk3NWRkZGU5Y2YzNzJjODNjMTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMiBAQAorMjAxNC0wMi0yNiAgQnJpYW4gQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBXZWIgUmVwbGF5OiB1cHN0cmVhbSBpbnB1dCBzdG9yYWdlLCBjYXB0dXJlL3JlcGxh
eSBtYWNoaW5lcnksIGFuZCBpbnNwZWN0b3IgZG9tYWluCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjg3ODIKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBbHRlciB0aGUgcmVwbGF5IGlucHV0cyBjb2RlIGdl
bmVyYXRvciBzbyB0aGF0IGl0IGtub3dzIHdoZW4gaXQgaXMgbmVjZXNzYXJ5IHRvCisgICAgICAg
IHRvIGluY2x1ZGUgaGVhZGVycyBmb3IgSEVBVllfU0NBTEFSIHR5cGVzIHN1Y2ggYXMgV1RGOjpT
dHJpbmcgYW5kIFdlYkNvcmU6OlVSTC4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVy
YXRvclJlcGxheUlucHV0cy5weToKKyAgICAgICAgKEZyYW1ld29yay5mcm9tU3RyaW5nKToKKyAg
ICAgICAgKEZyYW1ld29ya3MpOiBBZGQgV1RGIGFzIGFuIGFsbG93ZWQgZnJhbWV3b3JrIGZvciBj
b2RlIGdlbmVyYXRpb24uCisgICAgICAgIChHZW5lcmF0b3IuZ2VuZXJhdGVfaW5jbHVkZXMpOiBJ
bmNsdWRlIGhlYWRlcnMgZm9yIEhFQVZZX1NDQUxBUiB0eXBlcyBpbiB0aGUgaGVhZGVyIGZpbGUu
CisgICAgICAgIChHZW5lcmF0b3IuZ2VuZXJhdGVfaW5jbHVkZXMuZGVjbGFyYXRpb24pOgorICAg
ICAgICAoR2VuZXJhdG9yLmdlbmVyYXRlX2luY2x1ZGVzLm9yKToKKyAgICAgICAgKEdlbmVyYXRv
ci5nZW5lcmF0ZV90eXBlX2ZvcndhcmRfZGVjbGFyYXRpb25zKTogU2tpcCBIRUFWWV9TQ0FMQVIg
dHlwZXMuCisKIDIwMTQtMDItMjYgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZW1vdmUgdW51c2VkIGFjY2VzcyB0eXBlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDRlZmI0MTU5
NDgxZjM4MDUwNTE4ZGYwZWM3MTg5MjQwYzZjOWVjNDIuLjY3YjNmZjk1OWY5NGJmYzA1MTlkZDY0
MDFiYTk2MDZiNWRmMzg4ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwyNzUgQEAKIDIwMTQtMDIt
MjYgIEJyaWFuIEJ1cmcgIDxiYnVyZ0BhcHBsZS5jb20+CiAKKyAgICAgICAgV2ViIFJlcGxheTog
dXBzdHJlYW0gaW5wdXQgc3RvcmFnZSwgY2FwdHVyZS9yZXBsYXkgbWFjaGluZXJ5LCBhbmQgaW5z
cGVjdG9yIGRvbWFpbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTI4NzgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzIHlldCwgYXMgdGhleSByZWx5IG9uIGluZnJhc3RydWN0dXJlIHRy
YWNrZWQgaW4gaHR0cHM6Ly93ZWJraXQub3JnL2IvMTI5MTkwLgorCisgICAgICAgIFJlcGxheWFi
bGUgZXhlY3V0aW9ucyBhcmUgb3JnYW5pemVkIGludG8gUmVwbGF5U2Vzc2lvbnMsIHdoaWNoIGNh
bgorICAgICAgICBjb250YWluIHNldmVyYWwgUmVwbGF5U2Vzc2lvblNlZ21lbnRzIHRoYXQgZGl2
aWRlIG92ZXJhbGwgZXhlY3V0aW9uCisgICAgICAgIGF0IG1haW4gZnJhbWUgbmF2aWdhdGlvbiBi
b3VuZGFyaWVzLiBOb25kZXRlcm1pbmlzdGljSW5wdXQgc3ViY2xhc3NlcworICAgICAgICBhcmUg
c3RvcmVkIGluIFNlZ21lbnRlZElucHV0U3RvcmFnZSBhY2NvcmRpbmcgdG8gdGhlIGlucHV0J3Mg
SW5wdXRRdWV1ZS4KKworICAgICAgICBDYXB0dXJlIGFuZCBwbGF5YmFjayBhcmUgY29udHJvbGxl
ZCBhdCB0aGUgcGFnZSBncmFudWxhcml0eSBieSB0aGUgUGFnZSdzCisgICAgICAgIFJlcGxheUNv
bnRyb2xsZXIuIFRoZSBjb250cm9sbGVyIGtub3dzIGhvdyB0byBjcmVhdGUgbmV3IHNlZ21lbnRz
LCByZXBsYXkgdG8KKyAgICAgICAgYXJiaXRyYXJ5IHBvc2l0aW9ucyBpbiB0aGUgUmVwbGF5U2Vz
c2lvbiwgYW5kIHRyYWNrIHRoZSBhY3RpdmUgSW5wdXRDdXJzb3IuCisKKyAgICAgICAgVGhlIGNh
cHR1cmluZyBhbmQgcmVwbGF5aW5nIGlucHV0IGN1cnNvciBzdWJjbGFzc2VzIGVuY2Fwc3VsYXRl
IHN0YXRlIGZvcgorICAgICAgICBzdG9yaW5nIG5ldyBpbnB1dHMgYW5kIGxvYWRpbmcvZGlzcGF0
Y2hpbmcgc2F2ZWQgaW5wdXRzLCByZXNwZWN0aXZlbHkuCisKKyAgICAgICAgVGhlIFJlcGxheUFn
ZW50IGFuZCBhc3NvY2lhdGVkIGluc3BlY3RvciBwcm90b2NvbCBkb21haW4gaXMgdGhlIGZyaWVu
ZGx5CisgICAgICAgIHB1YmxpYyBBUEkgZm9yIHByb2dyYW1tYXRpY2FsbHkgY2FwdHVyaW5nIGFu
ZCByZXBsYXlpbmcgc2Vzc2lvbnMuCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOiBB
ZGQgcmVwbGF5IGlucHV0cyBjb2RlIGdlbmVyYXRpb24gdGFyZ2V0LiBBZGQgdGhlCisgICAgICAg
IHJlcGxheSBkb21haW4gc3BlY2lmaWNhdGlvbiB0byB0aGUgbGlzdCBvZiBpbnNwZWN0b3IgZG9t
YWlucy4KKworICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3JlcGxheS9FbmNvZGVkVmFsdWUu
aDogQWRkZWQuCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBB
ZGQgbWFueSBmaWxlcywgYW5kIGV4cG9ydAorICAgICAgICBgV2ViUmVwbGF5U2NyaXB0c2AgZW52
aXJvbm1lbnQgdmFyaWFibGUgdG8gRGVyaXZlZFNvdXJjZXMubWFrZS4KKworICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDogQWRkIHRoZSByZXBsYXkgYWdlbnQuCisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVy
KToKKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwOgor
ICAgICAgICBBZGQgZXZlbnRzIGZvciBzZWdtZW50IGxpZmVjeWNsZSBldmVudHMsIGFuZCBsb2Fk
aW5nL3VubG9hZGluZyBvZiBzZXNzaW9ucworICAgICAgICBhbmQgc2VnbWVudHMsIGFuZCBjYXB0
dXJlL3JlcGxheSBwcm9ncmVzcyBldmVudHMuIFRoZSByZXBsYXkgY29udHJvbGxlcgorICAgICAg
ICBhbHNvIG5lZWRzIHRvIGtub3cgYWJvdXQgZGV0YWNoZWQgYW5kIGNvbW1pdHRlZCBmcmFtZXMu
CisKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZnJhbWVEZXRh
Y2hlZEZyb21QYXJlbnRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6ZGlkQ29tbWl0TG9hZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpzZXNzaW9uQ3JlYXRlZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZXNzaW9uTG9hZGVkSW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlc3Npb25Nb2RpZmllZEltcGwpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZWdtZW50Q3JlYXRl
ZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZWdt
ZW50Q29tcGxldGVkSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OnNlZ21lbnRMb2FkZWRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6c2VnbWVudFVubG9hZGVkSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNhcHR1cmVTdGFydGVkSW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNhcHR1cmVTdG9wcGVkSW1wbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnBsYXliYWNrU3RhcnRl
ZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpwbGF5
YmFja1BhdXNlZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpwbGF5YmFja0hpdFBvc2l0aW9uSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OnJlcGxheUFnZW50RW5hYmxlZCk6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpyZXBsYXlBZ2VudEVuYWJsZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZXNzaW9uQ3JlYXRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlc3Npb25Mb2FkZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZXNzaW9uTW9kaWZpZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZWdtZW50Q3JlYXRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlZ21lbnRD
b21wbGV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpz
ZWdtZW50TG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6c2VnbWVudFVubG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6Y2FwdHVyZVN0YXJ0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpjYXB0dXJlU3RvcHBlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OnBsYXliYWNrU3RhcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnBsYXliYWNrUGF1c2VkKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6cGxheWJhY2tIaXRQb3NpdGlvbik6CisKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OmJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yUG9zaXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6YnVpbGRJbnNwZWN0b3JPYmplY3RGb3JJbnB1dCk6CisgICAgICAgIChXZWJDb3Jl
OjpidWlsZEluc3BlY3Rvck9iamVjdEZvclNlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Vy
aWFsaXplSW5wdXRUb0pTT05GdW5jdG9yOjpTZXJpYWxpemVJbnB1dFRvSlNPTkZ1bmN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplSW5wdXRUb0pTT05GdW5jdG9yOjp+U2VyaWFsaXpl
SW5wdXRUb0pTT05GdW5jdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZUlucHV0VG9K
U09ORnVuY3Rvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVJbnB1
dFRvSlNPTkZ1bmN0b3I6OnJldHVyblZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkSW5z
cGVjdG9yT2JqZWN0Rm9yU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXBs
YXlBZ2VudDo6SW5zcGVjdG9yUmVwbGF5QWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yUmVwbGF5QWdlbnQ6On5JbnNwZWN0b3JSZXBsYXlBZ2VudCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JSZXBsYXlBZ2VudDo6c2Vzc2lvblN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvclJlcGxheUFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRB
bmRCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlcGxheUFnZW50OjpmcmFt
ZU5hdmlnYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXBsYXlBZ2VudDo6ZnJh
bWVEZXRhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXBsYXlBZ2VudDo6c2Vz
c2lvbkNyZWF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnNl
c3Npb25Nb2RpZmllZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXBsYXlBZ2VudDo6
c2Vzc2lvbkxvYWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXBsYXlBZ2VudDo6
c2VnbWVudENyZWF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6
OnNlZ21lbnRDb21wbGV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5QWdl
bnQ6OnNlZ21lbnRMb2FkZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5QWdl
bnQ6OnNlZ21lbnRVbmxvYWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXBsYXlB
Z2VudDo6Y2FwdHVyZVN0YXJ0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5
QWdlbnQ6OmNhcHR1cmVTdG9wcGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlcGxh
eUFnZW50OjpwbGF5YmFja1N0YXJ0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVw
bGF5QWdlbnQ6OnBsYXliYWNrUGF1c2VkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJl
cGxheUFnZW50OjpwbGF5YmFja0hpdFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclJlcGxheUFnZW50OjpzdGFydENhcHR1cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JSZXBsYXlBZ2VudDo6c3RvcENhcHR1cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JSZXBsYXlBZ2VudDo6cmVwbGF5VG9Qb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JSZXBsYXlBZ2VudDo6cmVwbGF5VG9Db21wbGV0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclJlcGxheUFnZW50OjpwYXVzZVBsYXliYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclJlcGxheUFnZW50OjpjYW5jZWxQbGF5YmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JSZXBsYXlBZ2VudDo6c3dpdGNoU2Vzc2lvbik6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JSZXBsYXlBZ2VudDo6aW5zZXJ0U2Vzc2lvblNlZ21lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnJlbW92ZVNlc3Npb25TZWdtZW50KToK
KyAgICAgICAgUHJvdmlkZSBhIHB1YmxpYyBBUEkgZm9yIG1vZGlmeWluZyBzZXNzaW9ucy4gVGhp
cyBpcyB0aGUgYmFja2VuZCBzdXBwb3J0CisgICAgICAgIGZvciB1c2VyIGVkaXRpbmcgb2YgcmVw
bGF5IHNlc3Npb25zIHRvIGFkZC9yZW1vdmUgc3BlY2lmaWMgc2VnbWVudHMuCisKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclJlcGxheUFnZW50OjpmaW5kU2Vzc2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JSZXBsYXlBZ2VudDo6ZmluZFNlZ21lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmdldEF2YWlsYWJsZVNlc3Npb25zKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclJlcGxheUFnZW50OjpnZXRTZXJpYWxpemVkU2Vzc2lvbik6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXBsYXlBZ2VudDo6Z2V0U2VyaWFsaXplZFNl
Z21lbnQpOgorICAgICAgICBNb3N0IG9mIHRoZSByZXBsYXkgcHJvdG9jb2wgZG9tYWluIHNwZWFr
cyBpbiB0ZXJtcyBvZiBzZXNzc2lvbiBhbmQKKyAgICAgICAgc2VnbWVudCBpZGVudGlmaWVycy4g
VGhlc2UgZnVuY3Rpb25zIHJldHVybiB0aGUgYWN0dWFsIGRhdGEgYXNzb2NpYXRlZAorICAgICAg
ICB3aXRoIHRoZXNlIGlkZW50aWZpZXJzLgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
clJlcGxheUFnZW50Lmg6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9JbnN0cnVtZW50aW5n
QWdlbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3RydW1lbnRpbmdBZ2VudHM6Okluc3Ry
dW1lbnRpbmdBZ2VudHMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zdHJ1bWVudGluZ0FnZW50czo6
cmVzZXQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnN0cnVtZW50aW5nQWdlbnRzLmg6CisgICAg
ICAgIChXZWJDb3JlOjpJbnN0cnVtZW50aW5nQWdlbnRzOjppbnNwZWN0b3JSZXBsYXlBZ2VudCk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5zdHJ1bWVudGluZ0FnZW50czo6c2V0SW5zcGVj
dG9yUmVwbGF5QWdlbnQpOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvcHJvdG9jb2wvUmVw
bGF5Lmpzb246IEFkZGVkLgorCisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlBhZ2U6OlBhZ2UpOgorICAgICAgICAqIHBhZ2UvUGFnZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZTo6cmVwbGF5Q29udHJvbGxlcik6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L0xvZ2dpbmcuaDogQWRkIFdlYlJlcGxheSBsb2dnaW5nIGNoYW5uZWwuCisgICAgICAgICogcmVw
bGF5L0FsbFJlcGxheUlucHV0cy5oOiBBZGRlZC4gU2ltcGxpZmllcyBpbXBvcnRpbmcgYWxsIGlu
cHV0IGRlZmluaXRpb25zLgorCisgICAgICAgICogcmVwbGF5L0NhcHR1cmluZ0lucHV0Q3Vyc29y
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDYXB0dXJpbmdJbnB1dEN1cnNvcjo6Q2Fw
dHVyaW5nSW5wdXRDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q2FwdHVyaW5nSW5wdXRDdXJz
b3I6On5DYXB0dXJpbmdJbnB1dEN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpDYXB0dXJpbmdJ
bnB1dEN1cnNvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhcHR1cmluZ0lucHV0Q3Vy
c29yOjpzdG9yZUlucHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhcHR1cmluZ0lucHV0Q3Vyc29y
Ojpsb2FkSW5wdXQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FwdHVyaW5nSW5wdXRDdXJzb3I6OnVu
Y2hlY2tlZExvYWRJbnB1dCk6CisgICAgICAgICogcmVwbGF5L0NhcHR1cmluZ0lucHV0Q3Vyc29y
Lmg6IEFkZGVkLgorCisgICAgICAgICogcmVwbGF5L0V2ZW50TG9vcElucHV0Lmg6CisgICAgICAg
IChXZWJDb3JlOjpFdmVudExvb3BJbnB1dEJhc2U6OkV2ZW50TG9vcElucHV0QmFzZSk6CisgICAg
ICAgIChXZWJDb3JlOjpFdmVudExvb3BJbnB1dEJhc2U6OnRpbWVzdGFtcCk6CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudExvb3BJbnB1dEJhc2U6OnNldFRpbWVzdGFtcCk6IFN1cHBvcnQgZGVzZXJp
YWxpemF0aW9uLgorCisgICAgICAgICogcmVwbGF5L0V2ZW50TG9vcElucHV0RGlzcGF0Y2hlci5j
cHA6IEFkZGVkLiBUaGlzIGNsYXNzIGVuY2Fwc3VsYXRlcyB0aGUgdGltZXJzCisgICAgICAgIGFu
ZCBtZWFzdXJlbWVudHMgdXNlZCB0byBkaXNwYXRjaCBldmVudCBsb29wIGlucHV0cyBkdXJpbmcg
cmVwbGF5LgorCisgICAgICAgIChXZWJDb3JlOjpFdmVudExvb3BJbnB1dERpc3BhdGNoZXI6OkV2
ZW50TG9vcElucHV0RGlzcGF0Y2hlcik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudExvb3BJbnB1
dERpc3BhdGNoZXI6OnJ1bik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudExvb3BJbnB1dERpc3Bh
dGNoZXI6OnBhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TG9vcElucHV0RGlzcGF0Y2hl
cjo6dGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudExvb3BJbnB1dERpc3BhdGNo
ZXI6OmRpc3BhdGNoSW5wdXRTb29uKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TG9vcElucHV0
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hJbnB1dCk6CisgICAgICAgICogcmVwbGF5L0V2ZW50TG9vcElu
cHV0RGlzcGF0Y2hlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50TG9vcElucHV0
RGlzcGF0Y2hlckNsaWVudDo6RXZlbnRMb29wSW5wdXREaXNwYXRjaGVyQ2xpZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50TG9vcElucHV0RGlzcGF0Y2hlckNsaWVudDo6fkV2ZW50TG9vcElu
cHV0RGlzcGF0Y2hlckNsaWVudCk6CisKKyAgICAgICAgKiByZXBsYXkvRnVuY3RvcklucHV0Q3Vy
c29yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RnVuY3RvcklucHV0Q3Vyc29yOjp+RnVu
Y3RvcklucHV0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkZ1bmN0b3JJbnB1dEN1cnNvcjo6
Zm9yRWFjaElucHV0SW5RdWV1ZSk6CisgICAgICAgIChXZWJDb3JlOjpGdW5jdG9ySW5wdXRDdXJz
b3I6OkZ1bmN0b3JJbnB1dEN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpGdW5jdG9ySW5wdXRD
dXJzb3I6OnN0b3JlSW5wdXQpOgorICAgICAgICAoV2ViQ29yZTo6RnVuY3RvcklucHV0Q3Vyc29y
Ojpsb2FkSW5wdXQpOgorICAgICAgICAoV2ViQ29yZTo6RnVuY3RvcklucHV0Q3Vyc29yOjp1bmNo
ZWNrZWRMb2FkSW5wdXQpOgorCisgICAgICAgICogcmVwbGF5L1JlcGxheUNvbnRyb2xsZXIuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlcGxheUNvbnRyb2xsZXI6OlJlcGxheUNvbnRy
b2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGF5Q29udHJvbGxlcjo6c3dpdGNoU2Vzc2lv
bik6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYXlDb250cm9sbGVyOjpjcmVhdGVTZWdtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlcGxheUNvbnRyb2xsZXI6OmNvbXBsZXRlU2VnbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXBsYXlDb250cm9sbGVyOjpsb2FkU2VnbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpSZXBsYXlDb250cm9sbGVyOjp1bmxvYWRTZWdtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlcGxheUNvbnRyb2xsZXI6OnN0YXJ0Q2FwdHVyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlcGxheUNvbnRyb2xsZXI6OnN0b3BDYXB0dXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
UmVwbGF5Q29udHJvbGxlcjo6c3RhcnRQbGF5YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpSZXBs
YXlDb250cm9sbGVyOjpwYXVzZVBsYXliYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxheUNv
bnRyb2xsZXI6OmNhbmNlbFBsYXliYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxheUNvbnRy
b2xsZXI6OnJlcGxheVRvUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGF5Q29udHJv
bGxlcjo6ZnJhbWVEZXRhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYXlDb250cm9sbGVy
OjpmcmFtZU5hdmlnYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYXlDb250cm9sbGVyOjps
b2FkZWRTZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxheUNvbnRyb2xsZXI6OmxvYWRl
ZFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGF5Q29udHJvbGxlcjo6YWN0aXZlSW5w
dXRDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGF5Q29udHJvbGxlcjo6ZGlzcGF0Y2hl
cik6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYXlDb250cm9sbGVyOjp3aWxsRGlzcGF0Y2hJbnB1
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYXlDb250cm9sbGVyOjpkaWREaXNwYXRjaElucHV0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxheUNvbnRyb2xsZXI6OmRpZERpc3BhdGNoRmluYWxJ
bnB1dCk6CisgICAgICAgICogcmVwbGF5L1JlcGxheUNvbnRyb2xsZXIuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZXBsYXlQb3NpdGlvbjo6UmVwbGF5UG9zaXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6UmVwbGF5UG9zaXRpb246Om9wZXJhdG9yPCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXBsYXlQb3NpdGlvbjo6b3BlcmF0b3I9PSk6CisKKyAgICAgICAgKiByZXBsYXkvUmVwbGF5SW5w
dXRDcmVhdGlvbk1ldGhvZHMuY3BwOiBBZGRlZC4KKyAgICAgICAgU3RhdGljIGZhY3RvcnkgaW1w
bGVtZW50YXRpb25zIGZvciBpbnB1dHMgYmVsb25nIGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpJ
bml0aWFsTmF2aWdhdGlvbjo6Y3JlYXRlRnJvbVBhZ2UpOgorCisgICAgICAgICogcmVwbGF5L1Jl
cGxheUlucHV0RGlzcGF0Y2hNZXRob2RzLmNwcDogQWRkZWQuCisgICAgICAgIEFsbCBkaXNwYXRj
aCgpIGltcGxlbWVudGF0aW9ucyBmb3IgZ2VuZXJhdGVkIHJlcGxheSBpbnB1dHMgYmVsb25nIGhl
cmUuCisgICAgICAgIChXZWJDb3JlOjpCZWdpblNlZ21lbnRTZW50aW5lbDo6ZGlzcGF0Y2gpOgor
ICAgICAgICAoV2ViQ29yZTo6RW5kU2VnbWVudFNlbnRpbmVsOjpkaXNwYXRjaCk6CisgICAgICAg
IChXZWJDb3JlOjpJbml0aWFsTmF2aWdhdGlvbjo6ZGlzcGF0Y2gpOgorCisgICAgICAgICogcmVw
bGF5L1JlcGxheUlucHV0VHlwZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGF5SW5wdXRU
eXBlczo6UmVwbGF5SW5wdXRUeXBlcyk6CisgICAgICAgICogcmVwbGF5L1JlcGxheUlucHV0VHlw
ZXMuaDogRGVmaW5lIHN0cmluZ3MgZm9yIFdlYkNvcmUgaW5wdXRzLgorCisgICAgICAgICogcmVw
bGF5L1JlcGxheVNlc3Npb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlcGxheVNl
c3Npb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYXlTZXNzaW9uOjpSZXBsYXlT
ZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxheVNlc3Npb246On5SZXBsYXlTZXNzaW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxheVNlc3Npb246OmFwcGVuZFNlZ21lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVwbGF5U2Vzc2lvbjo6aW5zZXJ0U2VnbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZXBsYXlTZXNzaW9uOjpyZW1vdmVTZWdtZW50KToKKyAgICAgICAgKiByZXBsYXkv
UmVwbGF5U2Vzc2lvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlcGxheVNlc3Npb246
OmlkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGF5U2Vzc2lvbjo6dGltZXN0YW1w
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxheVNlc3Npb246OnNpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVwbGF5U2Vzc2lvbjo6YXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGF5U2Vzc2lv
bjo6YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGF5U2Vzc2lvbjo6ZW5kKToKKworICAg
ICAgICAqIHJlcGxheS9SZXBsYXlTZXNzaW9uU2VnbWVudC5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVwbGF5U2Vzc2lvblNlZ21lbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZXBsYXlTZXNzaW9uU2VnbWVudDo6UmVwbGF5U2Vzc2lvblNlZ21lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVwbGF5U2Vzc2lvblNlZ21lbnQ6On5SZXBsYXlTZXNzaW9uU2VnbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXBsYXlTZXNzaW9uU2VnbWVudDo6Y3JlYXRlQ2FwdHVyaW5nQ3Vy
c29yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxheVNlc3Npb25TZWdtZW50OjpjcmVhdGVSZXBs
YXlpbmdDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGF5U2Vzc2lvblNlZ21lbnQ6OmNy
ZWF0ZUZ1bmN0b3JDdXJzb3IpOgorICAgICAgICAqIHJlcGxheS9SZXBsYXlTZXNzaW9uU2VnbWVu
dC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlcGxheVNlc3Npb25TZWdtZW50OjppZGVu
dGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxheVNlc3Npb25TZWdtZW50Ojp0aW1lc3Rh
bXApOgorCisgICAgICAgICogcmVwbGF5L1JlcGxheWluZ0lucHV0Q3Vyc29yLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZXBsYXlpbmdJbnB1dEN1cnNvcjo6UmVwbGF5aW5nSW5wdXRD
dXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGF5aW5nSW5wdXRDdXJzb3I6On5SZXBsYXlp
bmdJbnB1dEN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYXlpbmdJbnB1dEN1cnNvcjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxheWluZ0lucHV0Q3Vyc29yOjpzdG9yZUlu
cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxheWluZ0lucHV0Q3Vyc29yOjpsb2FkSW5wdXQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVwbGF5aW5nSW5wdXRDdXJzb3I6OnVuY2hlY2tlZExvYWRJ
bnB1dCk6CisgICAgICAgICogcmVwbGF5L1JlcGxheWluZ0lucHV0Q3Vyc29yLmg6IEFkZGVkLgor
CisgICAgICAgICogcmVwbGF5L1NlZ21lbnRlZElucHV0U3RvcmFnZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6cXVldWVUeXBlVG9Mb2dQcmVmaXgpOgorICAgICAgICAoV2ViQ29yZTo6
anNvblN0cmluZ0ZvcklucHV0KToKKyAgICAgICAgKFdlYkNvcmU6Om9mZnNldEZvcklucHV0UXVl
dWUpOgorICAgICAgICAoV2ViQ29yZTo6U2VnbWVudGVkSW5wdXRTdG9yYWdlOjpTZWdtZW50ZWRJ
bnB1dFN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U2VnbWVudGVkSW5wdXRTdG9yYWdlOjp+
U2VnbWVudGVkSW5wdXRTdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZElucHV0
U3RvcmFnZTo6bG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpTZWdtZW50ZWRJbnB1dFN0b3JhZ2U6
OnN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZElucHV0U3RvcmFnZTo6cXVldWVT
aXplKToKKyAgICAgICAgKiByZXBsYXkvU2VnbWVudGVkSW5wdXRTdG9yYWdlLmg6IEFkZGVkLgor
CisgICAgICAgICogcmVwbGF5L1NlcmlhbGl6YXRpb25NZXRob2RzLmNwcDogQWRkZWQuCisgICAg
ICAgIFNwZWNpYWxpemF0aW9ucyBvZiBFbmNvZGluZ1RyYWl0cyBmb3IgV2ViQ29yZSB0eXBlcyBi
ZWxvbmcgaGVyZS4KKworICAgICAgICAoSlNDOjpFbmNvZGluZ1RyYWl0czxOb25kZXRlcm1pbmlz
dGljSW5wdXRCYXNlPjo6ZW5jb2RlVmFsdWUpOgorICAgICAgICAoSlNDOjpFbmNvZGluZ1RyYWl0
czxOb25kZXRlcm1pbmlzdGljSW5wdXRCYXNlPjo6ZGVjb2RlVmFsdWUpOgorICAgICAgICAoSlND
OjpFbmNvZGluZ1RyYWl0czxTZWN1cml0eU9yaWdpbj46OmVuY29kZVZhbHVlKToKKyAgICAgICAg
KEpTQzo6RW5jb2RpbmdUcmFpdHM8U2VjdXJpdHlPcmlnaW4+OjpkZWNvZGVWYWx1ZSk6CisgICAg
ICAgIChKU0M6OkVuY29kaW5nVHJhaXRzPFVSTD46OmVuY29kZVZhbHVlKToKKyAgICAgICAgKEpT
Qzo6RW5jb2RpbmdUcmFpdHM8VVJMPjo6ZGVjb2RlVmFsdWUpOgorICAgICAgICAqIHJlcGxheS9T
ZXJpYWxpemF0aW9uTWV0aG9kcy5oOiBBZGRlZC4KKyAgICAgICAgKiByZXBsYXkvV2ViSW5wdXRz
Lmpzb246IEFkZGVkLgorICAgICAgICBJbiB0aGlzIGluaXRhbCBwYXRjaCwgd2UgZGVmaW5lIEJl
Z2luU2VnbWVudFNlbnRpbmVsLAorICAgICAgICBFbmRTZWdtZW50U2VudGluZWwsIGFuZCBJbml0
aWFsTmF2aWdhdGlvbiBpbnB1dHMuCisKKzIwMTQtMDItMjYgIEJyaWFuIEJ1cmcgIDxiYnVyZ0Bh
cHBsZS5jb20+CisKICAgICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXggZm9yICFFTkFCTEUoQ09O
VEVYVF9NRU5VUykuCiAKICAgICAgICAgSSBmb3Jnb3QgdG8gYWRkIGd1YXJkcyB0byBoYW5kbGVD
b250ZXh0TWVudUV2ZW50KCkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDI5M2Jk
MDE3N2NlNjIyNDMxNGNhZWIwOGQ4MTBlY2RjNzUyNmFkM2UuLmE5ZmMyZDE0ZDJhMmVlZjk2ODBl
NmZkOTZhYTBjYmM4ZmE3NWM0ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC05
NDcsNiArOTQ3LDggQEAKIAkJOTc4ODAxNDExNDcxQUQ5MjAwNDFCMDE2IC8qIEpTRGF0ZU1hdGgu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3ODhGQzIz
MTQ3MUFEMEMwMDY4Q0UyRCAvKiBKU0RhdGVNYXRoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTkyOEZGM0IxOEFDNEFFQzAwQjhDRjEyIC8qIEpT
UmVwbGF5SW5wdXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDk5MjhGRjM5MThBQzRBRUMwMEI4Q0YxMiAvKiBKU1JlcGxheUlucHV0cy5jcHAgKi87
IH07CiAJCTk5MjhGRjNDMThBQzRBRUMwMEI4Q0YxMiAvKiBKU1JlcGxheUlucHV0cy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTkyOEZGM0ExOEFDNEFF
QzAwQjhDRjEyIC8qIEpTUmVwbGF5SW5wdXRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJOTlDQzBCNjIxOEJFOTk0NjAwNkNFQkNDIC8qIENvZGVH
ZW5lcmF0b3JSZXBsYXlJbnB1dHNUZW1wbGF0ZXMucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OUU0NUExRTE4QTFCMUU3MDAyNkQ4OEYgLyogQ29kZUdl
bmVyYXRvclJlcGxheUlucHV0c1RlbXBsYXRlcy5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk5OUNDMEI2MzE4QkU5OTUwMDA2Q0VCQ0MgLyogQ29k
ZUdlbmVyYXRvclJlcGxheUlucHV0cy5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk5RTQ1QTFEMThBMUIxRTcwMDI2RDg4RiAvKiBDb2RlR2VuZXJhdG9y
UmVwbGF5SW5wdXRzLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTk5RTQ1QTI0MThBMUIyNTkwMDI2RDg4RiAvKiBFbXB0eUlucHV0Q3Vyc29yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OUU0NUExRjE4
QTFCMjU5MDAyNkQ4OEYgLyogRW1wdHlJbnB1dEN1cnNvci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTk5RTQ1QTI1MThBMUIyNTkwMDI2RDg4RiAv
KiBFbmNvZGVkVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTlFNDVBMjAxOEExQjI1OTAwMjZEODhGIC8qIEVuY29kZWRWYWx1ZS5jcHAgKi87
IH07CiAJCTk5RTQ1QTI2MThBMUIyNTkwMDI2RDg4RiAvKiBFbmNvZGVkVmFsdWUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5RTQ1QTIxMThBMUIyNTkw
MDI2RDg4RiAvKiBFbmNvZGVkVmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtNTQxNSw2ICs1NDE3LDcgQEAKIAkJCQk4NkVCRjMwNDE1NjBG
MDZBMDA4RTkyMjIgLyogTmFtZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5
MTEwRTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMDJFOTEzMEUxODM5REIwMDBGOTI5NyAvKiBOYXRpdmVFcnJvclByb3RvdHlw
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTlDQzBCNjMxOEJFOTk1MDAwNkNFQkNDIC8qIENvZGVH
ZW5lcmF0b3JSZXBsYXlJbnB1dHMucHkgaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIyMDE2RDAz
M0I3MDA1NUE1REIgLyogTm9kZUNvbnN0cnVjdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0VG
RjAwNjQwRUMwNUE5QTAwQUE3QzkzIC8qIE5vZGVJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzQzRjBFMTZGNUNEMDBCMzQ0NjAgLyogTm9kZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNTQy
Myw2ICs1NDI2LDcgQEAKIAkJCQlCQzE4QzQ0MjBFMTZGNUNEMDBCMzQ0NjAgLyogTnVtYmVyQ29u
c3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0MzBFMTZGNUNEMDBCMzQ0
NjAgLyogTnVtYmVyT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0NDBFMTZGNUNE
MDBCMzQ0NjAgLyogTnVtYmVyUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQk5OUNDMEI2
MjE4QkU5OTQ2MDA2Q0VCQ0MgLyogQ29kZUdlbmVyYXRvclJlcGxheUlucHV0c1RlbXBsYXRlcy5w
eSBpbiBIZWFkZXJzICovLAogCQkJCTE0MkQzOTM5MTAzRTQ1NjAwMDdEQ0I1MiAvKiBOdW1lcmlj
U3RyaW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZGM0VFQkQxNjhDREU5MzAwNzdCOTJBIC8q
IE9iakNDYWxsYmFja0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkYzRUVCRjE2OENE
RTkzMDA3N0I5MkEgLyogT2JqY1J1bnRpbWVFeHRyYXMuaCBpbiBIZWFkZXJzICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JS
ZXBsYXlJbnB1dHMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29k
ZUdlbmVyYXRvclJlcGxheUlucHV0cy5weQppbmRleCBlM2M4MTk5NmExNzYyYmQ0OGUzZTVhYTE3
NmUzZTk1YjE2ZmQxOWY4Li5jZDY1MTA4ZTE2YzJlYWI3OWVlMDljN2UyNmQ1YTMzMjE4NGNmMTNi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdl
bmVyYXRvclJlcGxheUlucHV0cy5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5
L3NjcmlwdHMvQ29kZUdlbmVyYXRvclJlcGxheUlucHV0cy5weQpAQCAtMTAzLDYgKzEwMywxMCBA
QCBGUkFNRVdPUktfQ09ORklHX01BUCA9IHsKICAgICAgICAgIm5hbWVzcGFjZSI6ICIiCiAgICAg
fSwKIAorICAgICJXVEYiOiB7CisgICAgICAgICJwcmVmaXgiOiAiV1RGIiwKKyAgICAgICAgIm5h
bWVzcGFjZSI6ICJXVEYiLAorICAgIH0sCiAgICAgIkphdmFTY3JpcHRDb3JlIjogewogICAgICAg
ICAicHJlZml4IjogIkpTIiwKICAgICAgICAgIm5hbWVzcGFjZSI6ICJKU0MiLApAQCAtMTY2LDYg
KzE3MCw5IEBAIGNsYXNzIEZyYW1ld29yazoKICAgICAgICAgaWYgZnJhbWV3b3JrU3RyaW5nID09
ICJHbG9iYWwiOgogICAgICAgICAgICAgcmV0dXJuIEZyYW1ld29ya3MuR2xvYmFsCiAKKyAgICAg
ICAgaWYgZnJhbWV3b3JrU3RyaW5nID09ICJXVEYiOgorICAgICAgICAgICAgcmV0dXJuIEZyYW1l
d29ya3MuV1RGCisKICAgICAgICAgaWYgZnJhbWV3b3JrU3RyaW5nID09ICJKYXZhU2NyaXB0Q29y
ZSI6CiAgICAgICAgICAgICByZXR1cm4gRnJhbWV3b3Jrcy5KYXZhU2NyaXB0Q29yZQogCkBAIC0x
ODAsNiArMTg3LDcgQEAgY2xhc3MgRnJhbWV3b3JrOgogCiBjbGFzcyBGcmFtZXdvcmtzOgogICAg
IEdsb2JhbCA9IEZyYW1ld29yaygiR2xvYmFsIikKKyAgICBXVEYgPSBGcmFtZXdvcmsoIldURiIp
CiAgICAgSmF2YVNjcmlwdENvcmUgPSBGcmFtZXdvcmsoIkphdmFTY3JpcHRDb3JlIikKICAgICBX
ZWJDb3JlID0gRnJhbWV3b3JrKCJXZWJDb3JlIikKICAgICBUZXN0ID0gRnJhbWV3b3JrKCJUZXN0
IikKQEAgLTYxNiwxMSArNjI0LDE0IEBAIGNsYXNzIEdlbmVyYXRvcjoKICAgICAgICAgICAgIGlm
IF90eXBlLmZyYW1ld29yayBpcyBGcmFtZXdvcmtzLkdsb2JhbDoKICAgICAgICAgICAgICAgICBj
b250aW51ZQogICAgICAgICAgICAgIyBGb3IgUmVmQ291bnRlZCB0eXBlcywgd2UgcmV2ZXJzZSB3
aGVuIHRvIGluY2x1ZGUgdGhlIGhlYWRlciBzbyB0aGF0IHRoZSBkZXN0cnVjdG9yIGNhbiBiZQot
ICAgICAgICAgICAgIyB1c2VkIGluIHRoZSBoZWFkZXIgZmlsZS4gRW51bXMgd2l0aGluIGNsYXNz
ZXMgY2Fubm90IGJlIGZvcndhcmQgZGVjbGFyZWQsIHNvIHdlIGluY2x1ZGUKLSAgICAgICAgICAg
ICMgaGVhZGVycyB3aXRoIHRoZSByZWxldmFudCBjbGFzcyBkZWNsYXJhdGlvbi4KKyAgICAgICAg
ICAgICMgdXNlZCBpbiB0aGUgaGVhZGVyIGZpbGUuCiAgICAgICAgICAgICBpbmNsdWRlX2Zvcl9k
ZXN0cnVjdG9yID0gX3R5cGUubW9kZSBpcyBUeXBlTW9kZXMuU0hBUkVECisgICAgICAgICAgICAj
IEVudW1zIHdpdGhpbiBjbGFzc2VzIGNhbm5vdCBiZSBmb3J3YXJkIGRlY2xhcmVkLCBzbyB3ZSBp
bmNsdWRlCisgICAgICAgICAgICAjIGhlYWRlcnMgd2l0aCB0aGUgcmVsZXZhbnQgY2xhc3MgZGVj
bGFyYXRpb24uCiAgICAgICAgICAgICBpbmNsdWRlX2Zvcl9lbmNsb3NpbmdfY2xhc3MgPSBfdHlw
ZS5pc19lbnVtKCkgYW5kIF90eXBlLmVuY2xvc2luZ19jbGFzcyBpcyBub3QgTm9uZQotICAgICAg
ICAgICAgaWYgKG5vdCBpbmNsdWRlc19mb3JfdHlwZXMpIF4gKGluY2x1ZGVfZm9yX2Rlc3RydWN0
b3Igb3IgaW5jbHVkZV9mb3JfZW5jbG9zaW5nX2NsYXNzKToKKyAgICAgICAgICAgICMgSW5jbHVk
ZSBoZWFkZXJzIGZvciB0eXBlcyBsaWtlIFVSTCBhbmQgU3RyaW5nIHdoaWNoIGFyZSBjb3BpZWQs
IG5vdCBvd25lZCBvciBzaGFyZWQuCisgICAgICAgICAgICBpbmNsdWRlX2Zvcl9jb3B5YWJsZV9t
ZW1iZXIgPSBfdHlwZS5tb2RlIGlzIFR5cGVNb2Rlcy5IRUFWWV9TQ0FMQVIgb3IgX3R5cGUubW9k
ZSBpcyBUeXBlTW9kZXMuU0NBTEFSCisgICAgICAgICAgICBpZiAobm90IGluY2x1ZGVzX2Zvcl90
eXBlcykgXiAoaW5jbHVkZV9mb3JfZGVzdHJ1Y3RvciBvciBpbmNsdWRlX2Zvcl9lbmNsb3Npbmdf
Y2xhc3Mgb3IgaW5jbHVkZV9mb3JfY29weWFibGVfbWVtYmVyKToKICAgICAgICAgICAgICAgICBj
b250aW51ZQogCiAgICAgICAgICAgICBpZiBzZWxmLnRhcmdldF9mcmFtZXdvcmsgIT0gX3R5cGUu
ZnJhbWV3b3JrOgpAQCAtNjU0LDYgKzY2NSw4IEBAIGNsYXNzIEdlbmVyYXRvcjoKICAgICAgICAg
ICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgaWYgX3R5cGUuZW5jbG9zaW5nX2NsYXNzIGlz
IG5vdCBOb25lOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBfdHlw
ZS5tb2RlID09IFR5cGVNb2Rlcy5TQ0FMQVIgb3IgX3R5cGUubW9kZSA9PSBUeXBlTW9kZXMuSEVB
VllfU0NBTEFSOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBpZiBfdHlw
ZS5pc19lbnVtKCk6CiAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb24gPSAiZW51bSAlcyA6ICVz
OyIgJSAoX3R5cGUudHlwZV9uYW1lKCksIF90eXBlLnVuZGVybHlpbmdfc3RvcmFnZSkKICAgICAg
ICAgICAgIGVsc2U6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5t
YWtlIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQppbmRleCA1NTVkZDUwZmU1
ZjZjZmQ0Yjg2Y2IyNjAyYjhiNTZkZTA4ZGNiNzgzLi4zZDJiOGNiN2YzZTg2NWNmYzJhZGEzODcz
YTkzNzZmZDFlMjhjMGQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNl
cy5tYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTExMDks
NiArMTEwOSw3IEBAIElOU1BFQ1RPUl9ET01BSU5TID0gXAogICAgICQoV2ViQ29yZSkvaW5zcGVj
dG9yL3Byb3RvY29sL05ldHdvcmsuanNvbiBcCiAgICAgJChXZWJDb3JlKS9pbnNwZWN0b3IvcHJv
dG9jb2wvUGFnZS5qc29uIFwKICAgICAkKFdlYkNvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9Qcm9m
aWxlci5qc29uIFwKKyAgICAkKFdlYkNvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9SZXBsYXkuanNv
biBcCiAgICAgJChXZWJDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvVGltZWxpbmUuanNvbiBcCiAg
ICAgJChXZWJDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvV29ya2VyLmpzb24gXAogIwpAQCAtMTE0
Miw2ICsxMTQzLDIyIEBAIENvbW1hbmRMaW5lQVBJTW9kdWxlU291cmNlLmggOiBDb21tYW5kTGlu
ZUFQSU1vZHVsZVNvdXJjZS5qcwogCXBlcmwgJChJbnNwZWN0b3JTY3JpcHRzKS94eGQucGwgQ29t
bWFuZExpbmVBUElNb2R1bGVTb3VyY2VfanMgLi9Db21tYW5kTGluZUFQSU1vZHVsZVNvdXJjZS5t
aW4uanMgQ29tbWFuZExpbmVBUElNb2R1bGVTb3VyY2UuaAogCXJtIC1mIC4vQ29tbWFuZExpbmVB
UElNb2R1bGVTb3VyY2UubWluLmpzCiAKKyMgV2ViIFJlcGxheSBpbnB1dHMgZ2VuZXJhdG9yCisK
K0lOUFVUX0dFTkVSQVRPUl9TQ1JJUFRTID0gXAorICAgICQoV2ViUmVwbGF5U2NyaXB0cykvQ29k
ZUdlbmVyYXRvclJlcGxheUlucHV0cy5weSBcCisgICAgJChXZWJSZXBsYXlTY3JpcHRzKS9Db2Rl
R2VuZXJhdG9yUmVwbGF5SW5wdXRzVGVtcGxhdGVzLnB5IFwKKyMKKworSU5QVVRfR0VORVJBVE9S
X1NQRUNJRklDQVRJT05TID0gXAorCSQoV2ViQ29yZSkvcmVwbGF5L1dlYklucHV0cy5qc29uIFwK
KyMKKworYWxsIDogV2ViUmVwbGF5SW5wdXRzLmgKKworV2ViUmVwbGF5SW5wdXRzLmggOiAkKElO
UFVUX0dFTkVSQVRPUl9TUEVDSUZJQ0FUSU9OUykgJChJTlBVVF9HRU5FUkFUT1JfU0NSSVBUUykK
KwlweXRob24gJChXZWJSZXBsYXlTY3JpcHRzKS9Db2RlR2VuZXJhdG9yUmVwbGF5SW5wdXRzLnB5
IC0tb3V0cHV0RGlyIC4gLS1mcmFtZXdvcmsgV2ViQ29yZSAkKElOUFVUX0dFTkVSQVRPUl9TUEVD
SUZJQ0FUSU9OUykKKwogLWluY2x1ZGUgJChKU19ET01fSEVBREVSUzouaD0uZGVwKQogCiAjIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvRm9yd2Fy
ZGluZ0hlYWRlcnMvcmVwbGF5L0VuY29kZWRWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvRm9yd2Fy
ZGluZ0hlYWRlcnMvcmVwbGF5L0VuY29kZWRWYWx1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVlN2NlNjM2Y2E5
ZmQyN2E4ZWUwOTUyMzRhMmFkNTE1YjA2ZWQxNDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9yZXBsYXkvRW5jb2RlZFZhbHVlLmgKQEAgLTAsMCAr
MSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX0VuY29kZWRWYWx1ZV9oCisjZGVmaW5lIFdlYkNv
cmVfRldEX0VuY29kZWRWYWx1ZV9oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRW5jb2RlZFZh
bHVlLmg+CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCA0YjNjYjc3NjVmOTc1NmNiOTgyZTZmZWM5MDg5NGJiYzBiNGMz
M2RlLi5jYmNmYWU1OTk5OThmZTdmMTY5YWEwMzNjYmVmNGE1NGFmNjg2MmQ5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zNDk2
LDYgKzM0OTYsMzEgQEAKIAkJOTkwQTFBMDUxOEFEQTQ4NDAwMTgzRkQxIC8qIFJlcGxheUlucHV0
VHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5
MEExOUY1MThBREE0ODQwMDE4M0ZEMSAvKiBSZXBsYXlJbnB1dFR5cGVzLmggKi87IH07CiAJCTk5
MjAzOTgyMThCOTVCQzYwMEIzOUFGOSAvKiBVc2VySW5wdXRCcmlkZ2UuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTkyMDM5ODAxOEI5NUJDNjAwQjM5
QUY5IC8qIFVzZXJJbnB1dEJyaWRnZS5jcHAgKi87IH07CiAJCTk5MjAzOTgzMThCOTVCQzYwMEIz
OUFGOSAvKiBVc2VySW5wdXRCcmlkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk5MjAzOTgxMThCOTVCQzYwMEIzOUFGOSAvKiBVc2VySW5wdXRCcmlk
Z2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk5
OUNDMEI0RDE4QkU5ODQ5MDA2Q0VCQ0MgLyogQWxsUmVwbGF5SW5wdXRzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OUNDMEIzODE4QkU5ODQ5MDA2Q0VC
Q0MgLyogQWxsUmVwbGF5SW5wdXRzLmggKi87IH07CisJCTk5Q0MwQjRFMThCRTk4NDkwMDZDRUJD
QyAvKiBDYXB0dXJpbmdJbnB1dEN1cnNvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5OUNDMEIzOTE4QkU5ODQ5MDA2Q0VCQ0MgLyogQ2FwdHVyaW5n
SW5wdXRDdXJzb3IuY3BwICovOyB9OworCQk5OUNDMEI0RjE4QkU5ODQ5MDA2Q0VCQ0MgLyogQ2Fw
dHVyaW5nSW5wdXRDdXJzb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDk5Q0MwQjNBMThCRTk4NDkwMDZDRUJDQyAvKiBDYXB0dXJpbmdJbnB1dEN1cnNv
ci5oICovOyB9OworCQk5OUNDMEI1MDE4QkU5ODQ5MDA2Q0VCQ0MgLyogRXZlbnRMb29wSW5wdXRE
aXNwYXRjaGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDk5Q0MwQjNCMThCRTk4NDkwMDZDRUJDQyAvKiBFdmVudExvb3BJbnB1dERpc3BhdGNoZXIu
Y3BwICovOyB9OworCQk5OUNDMEI1MTE4QkU5ODQ5MDA2Q0VCQ0MgLyogRXZlbnRMb29wSW5wdXRE
aXNwYXRjaGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5OUNDMEIzQzE4QkU5ODQ5MDA2Q0VCQ0MgLyogRXZlbnRMb29wSW5wdXREaXNwYXRjaGVyLmgg
Ki87IH07CisJCTk5Q0MwQjUyMThCRTk4NDkwMDZDRUJDQyAvKiBGdW5jdG9ySW5wdXRDdXJzb3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5Q0MwQjNE
MThCRTk4NDkwMDZDRUJDQyAvKiBGdW5jdG9ySW5wdXRDdXJzb3IuaCAqLzsgfTsKKwkJOTlDQzBC
NTMxOEJFOTg0OTAwNkNFQkNDIC8qIFJlcGxheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTlDQzBCM0UxOEJFOTg0OTAwNkNFQkND
IC8qIFJlcGxheUNvbnRyb2xsZXIuY3BwICovOyB9OworCQk5OUNDMEI1NDE4QkU5ODQ5MDA2Q0VC
Q0MgLyogUmVwbGF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTlDQzBCM0YxOEJFOTg0OTAwNkNFQkNDIC8qIFJlcGxheUNvbnRyb2xs
ZXIuaCAqLzsgfTsKKwkJOTlDQzBCNTUxOEJFOTg0OTAwNkNFQkNDIC8qIFJlcGxheWluZ0lucHV0
Q3Vyc29yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDk5Q0MwQjQwMThCRTk4NDkwMDZDRUJDQyAvKiBSZXBsYXlpbmdJbnB1dEN1cnNvci5jcHAgKi87
IH07CisJCTk5Q0MwQjU2MThCRTk4NEEwMDZDRUJDQyAvKiBSZXBsYXlpbmdJbnB1dEN1cnNvci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTlDQzBCNDEx
OEJFOTg0OTAwNkNFQkNDIC8qIFJlcGxheWluZ0lucHV0Q3Vyc29yLmggKi87IH07CisJCTk5Q0Mw
QjU3MThCRTk4NEEwMDZDRUJDQyAvKiBSZXBsYXlJbnB1dENyZWF0aW9uTWV0aG9kcy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OUNDMEI0MjE4QkU5
ODQ5MDA2Q0VCQ0MgLyogUmVwbGF5SW5wdXRDcmVhdGlvbk1ldGhvZHMuY3BwICovOyB9OworCQk5
OUNDMEI1ODE4QkU5ODRBMDA2Q0VCQ0MgLyogUmVwbGF5SW5wdXREaXNwYXRjaE1ldGhvZHMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTlDQzBCNDMx
OEJFOTg0OTAwNkNFQkNDIC8qIFJlcGxheUlucHV0RGlzcGF0Y2hNZXRob2RzLmNwcCAqLzsgfTsK
KwkJOTlDQzBCNTkxOEJFOTg0QTAwNkNFQkNDIC8qIFJlcGxheVNlc3Npb24uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTlDQzBCNDQxOEJFOTg0OTAw
NkNFQkNDIC8qIFJlcGxheVNlc3Npb24uY3BwICovOyB9OworCQk5OUNDMEI1QTE4QkU5ODRBMDA2
Q0VCQ0MgLyogUmVwbGF5U2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTlDQzBCNDUxOEJFOTg0OTAwNkNFQkNDIC8qIFJlcGxheVNlc3Npb24u
aCAqLzsgfTsKKwkJOTlDQzBCNUIxOEJFOTg0QTAwNkNFQkNDIC8qIFJlcGxheVNlc3Npb25TZWdt
ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5
Q0MwQjQ2MThCRTk4NDkwMDZDRUJDQyAvKiBSZXBsYXlTZXNzaW9uU2VnbWVudC5jcHAgKi87IH07
CisJCTk5Q0MwQjVDMThCRTk4NEEwMDZDRUJDQyAvKiBSZXBsYXlTZXNzaW9uU2VnbWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTlDQzBCNDcxOEJF
OTg0OTAwNkNFQkNDIC8qIFJlcGxheVNlc3Npb25TZWdtZW50LmggKi87IH07CisJCTk5Q0MwQjVE
MThCRTk4NEEwMDZDRUJDQyAvKiBTZWdtZW50ZWRJbnB1dFN0b3JhZ2UuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTlDQzBCNDgxOEJFOTg0OTAwNkNF
QkNDIC8qIFNlZ21lbnRlZElucHV0U3RvcmFnZS5jcHAgKi87IH07CisJCTk5Q0MwQjVFMThCRTk4
NEEwMDZDRUJDQyAvKiBTZWdtZW50ZWRJbnB1dFN0b3JhZ2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5Q0MwQjQ5MThCRTk4NDkwMDZDRUJDQyAvKiBT
ZWdtZW50ZWRJbnB1dFN0b3JhZ2UuaCAqLzsgfTsKKwkJOTlDQzBCNUYxOEJFOTg0QTAwNkNFQkND
IC8qIFNlcmlhbGl6YXRpb25NZXRob2RzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDk5Q0MwQjRBMThCRTk4NDkwMDZDRUJDQyAvKiBTZXJpYWxpemF0
aW9uTWV0aG9kcy5jcHAgKi87IH07CisJCTk5Q0MwQjYwMThCRTk4NEEwMDZDRUJDQyAvKiBTZXJp
YWxpemF0aW9uTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTlDQzBCNEIxOEJFOTg0OTAwNkNFQkNDIC8qIFNlcmlhbGl6YXRpb25NZXRob2Rz
LmggKi87IH07CisJCTk5Q0MwQjYxMThCRTk4NEEwMDZDRUJDQyAvKiBXZWJJbnB1dHMuanNvbiBp
biBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTlDQzBCNEMx
OEJFOTg0OTAwNkNFQkNDIC8qIFdlYklucHV0cy5qc29uICovOyB9OworCQk5OUNDMEI2NjE4QkU5
RjE1MDA2Q0VCQ0MgLyogSW5zcGVjdG9yUmVwbGF5QWdlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTlDQzBCNjQxOEJFOUYxNTAwNkNFQkNDIC8q
IEluc3BlY3RvclJlcGxheUFnZW50LmNwcCAqLzsgfTsKKwkJOTlDQzBCNjcxOEJFOUYxNTAwNkNF
QkNDIC8qIEluc3BlY3RvclJlcGxheUFnZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5OUNDMEI2NTE4QkU5RjE1MDA2Q0VCQ0MgLyogSW5zcGVjdG9y
UmVwbGF5QWdlbnQuaCAqLzsgfTsKKwkJOTlDQzBCNkExOEJFQTFGRjAwNkNFQkNDIC8qIFdlYlJl
cGxheUlucHV0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5OUNDMEI2ODE4QkVBMUZGMDA2Q0VCQ0MgLyogV2ViUmVwbGF5SW5wdXRzLmNwcCAqLzsg
fTsKKwkJOTlDQzBCNkIxOEJFQTFGRjAwNkNFQkNDIC8qIFdlYlJlcGxheUlucHV0cy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTlDQzBCNjkxOEJFQTFG
RjAwNkNFQkNDIC8qIFdlYlJlcGxheUlucHV0cy5oICovOyB9OwogCQk5OUU0NUExNzE4QTA2M0JF
MDAyNkQ4OEYgLyogRXZlbnRMb29wSW5wdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDk5RTQ1QTE2MThBMDYzQkUwMDI2RDg4RiAvKiBFdmVudExvb3BJ
bnB1dC5oICovOyB9OwogCQk5QTExNDIwNDE4MzJEMTM1MDAwQkI4QUQgLyogVmFsdWVUb1N0cmlu
Zy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUExMTQy
MDMxODMyRDEzNDAwMEJCOEFEIC8qIFZhbHVlVG9TdHJpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5QTFCNkY5NzE1ODg2OUM4MDAxMUE4QzQg
LyogSlNET01TdHJpbmdMaXN0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDlBMUI2Rjk2MTU4ODY5QzgwMDExQThDNCAvKiBKU0RPTVN0cmlu
Z0xpc3RDdXN0b20uY3BwICovOyB9OwpAQCAtMTA0NTcsNiArMTA0ODIsMzEgQEAKIAkJOTkwQTE5
RjUxOEFEQTQ4NDAwMTgzRkQxIC8qIFJlcGxheUlucHV0VHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVwbGF5SW5wdXRUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5OTIwMzk4MDE4Qjk1QkM2MDBCMzlBRjkgLyogVXNlcklucHV0QnJpZGdlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVzZXJJbnB1dEJyaWRnZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk5MjAzOTgxMThCOTVCQzYwMEIzOUFG
OSAvKiBVc2VySW5wdXRCcmlkZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VXNlcklucHV0QnJpZGdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk5Q0MwQjM4
MThCRTk4NDkwMDZDRUJDQyAvKiBBbGxSZXBsYXlJbnB1dHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQWxsUmVwbGF5SW5wdXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTk5Q0MwQjM5MThCRTk4NDkwMDZDRUJDQyAvKiBDYXB0dXJpbmdJbnB1dEN1cnNvci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYXB0dXJpbmdJbnB1dEN1
cnNvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk5Q0MwQjNBMThCRTk4NDkw
MDZDRUJDQyAvKiBDYXB0dXJpbmdJbnB1dEN1cnNvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDYXB0dXJpbmdJbnB1dEN1cnNvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk5OUNDMEIzQjE4QkU5ODQ5MDA2Q0VCQ0MgLyogRXZlbnRMb29wSW5wdXREaXNwYXRj
aGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV2ZW50TG9vcElu
cHV0RGlzcGF0Y2hlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk5Q0MwQjND
MThCRTk4NDkwMDZDRUJDQyAvKiBFdmVudExvb3BJbnB1dERpc3BhdGNoZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXZlbnRMb29wSW5wdXREaXNwYXRjaGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk5Q0MwQjNEMThCRTk4NDkwMDZDRUJDQyAvKiBGdW5j
dG9ySW5wdXRDdXJzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnVuY3Rv
cklucHV0Q3Vyc29yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk5Q0MwQjNFMThC
RTk4NDkwMDZDRUJDQyAvKiBSZXBsYXlDb250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJlcGxheUNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk5OUNDMEIzRjE4QkU5ODQ5MDA2Q0VCQ0MgLyogUmVwbGF5Q29udHJvbGxl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXBsYXlDb250cm9sbGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk5Q0MwQjQwMThCRTk4NDkwMDZDRUJDQyAv
KiBSZXBsYXlpbmdJbnB1dEN1cnNvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBSZXBsYXlpbmdJbnB1dEN1cnNvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTk5Q0MwQjQxMThCRTk4NDkwMDZDRUJDQyAvKiBSZXBsYXlpbmdJbnB1dEN1cnNvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXBsYXlpbmdJbnB1dEN1cnNvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5OUNDMEI0MjE4QkU5ODQ5MDA2Q0VCQ0Mg
LyogUmVwbGF5SW5wdXRDcmVhdGlvbk1ldGhvZHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUmVwbGF5SW5wdXRDcmVhdGlvbk1ldGhvZHMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk5OUNDMEI0MzE4QkU5ODQ5MDA2Q0VCQ0MgLyogUmVwbGF5SW5w
dXREaXNwYXRjaE1ldGhvZHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUmVwbGF5SW5wdXREaXNwYXRjaE1ldGhvZHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk5OUNDMEI0NDE4QkU5ODQ5MDA2Q0VCQ0MgLyogUmVwbGF5U2Vzc2lvbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXBsYXlTZXNzaW9uLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTlDQzBCNDUxOEJFOTg0OTAwNkNFQkNDIC8qIFJl
cGxheVNlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVwbGF5U2Vz
c2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5OUNDMEI0NjE4QkU5ODQ5MDA2
Q0VCQ0MgLyogUmVwbGF5U2Vzc2lvblNlZ21lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUmVwbGF5U2Vzc2lvblNlZ21lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk5OUNDMEI0NzE4QkU5ODQ5MDA2Q0VCQ0MgLyogUmVwbGF5U2Vzc2lvblNl
Z21lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVwbGF5U2Vzc2lvblNl
Z21lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTlDQzBCNDgxOEJFOTg0OTAw
NkNFQkNDIC8qIFNlZ21lbnRlZElucHV0U3RvcmFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTZWdtZW50ZWRJbnB1dFN0b3JhZ2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk5OUNDMEI0OTE4QkU5ODQ5MDA2Q0VCQ0MgLyogU2VnbWVudGVkSW5w
dXRTdG9yYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlZ21lbnRlZElu
cHV0U3RvcmFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5OUNDMEI0QTE4QkU5
ODQ5MDA2Q0VCQ0MgLyogU2VyaWFsaXphdGlvbk1ldGhvZHMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU2VyaWFsaXphdGlvbk1ldGhvZHMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk5OUNDMEI0QjE4QkU5ODQ5MDA2Q0VCQ0MgLyogU2VyaWFsaXph
dGlvbk1ldGhvZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VyaWFsaXph
dGlvbk1ldGhvZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTlDQzBCNEMxOEJF
OTg0OTAwNkNFQkNDIC8qIFdlYklucHV0cy5qc29uICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5qc29uOyBwYXRo
ID0gV2ViSW5wdXRzLmpzb247IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk5Q0MwQjY0
MThCRTlGMTUwMDZDRUJDQyAvKiBJbnNwZWN0b3JSZXBsYXlBZ2VudC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JSZXBsYXlBZ2VudC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk5Q0MwQjY1MThCRTlGMTUwMDZDRUJDQyAvKiBJbnNw
ZWN0b3JSZXBsYXlBZ2VudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNw
ZWN0b3JSZXBsYXlBZ2VudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5OUNDMEI2
ODE4QkVBMUZGMDA2Q0VCQ0MgLyogV2ViUmVwbGF5SW5wdXRzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlJlcGxheUlucHV0cy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTk5Q0MwQjY5MThCRUExRkYwMDZDRUJDQyAvKiBXZWJSZXBsYXlJbnB1
dHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUmVwbGF5SW5wdXRzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk5RTQ1QTE2MThBMDYzQkUwMDI2RDg4RiAv
KiBFdmVudExvb3BJbnB1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFdmVu
dExvb3BJbnB1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QTExNDIwMzE4MzJE
MTM0MDAwQkI4QUQgLyogVmFsdWVUb1N0cmluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBWYWx1ZVRvU3RyaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlB
MUI2Rjk2MTU4ODY5QzgwMDExQThDNCAvKiBKU0RPTVN0cmluZ0xpc3RDdXN0b20uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNET01TdHJpbmdMaXN0Q3VzdG9tLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0ODQ2LDYgKzE0ODk2LDggQEAKIAkJ
CQk0RjZGREQ2MzEzNDFERUREMDAxRjhFRTMgLyogSW5zcGVjdG9yUGFnZUFnZW50LmggKi8sCiAJ
CQkJOUYwRDZCMkMxMjFCRkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdlbnQuY3Bw
ICovLAogCQkJCTlGMEQ2QjJEMTIxQkZFQkEwMDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9maWxlckFn
ZW50LmggKi8sCisJCQkJOTlDQzBCNjQxOEJFOUYxNTAwNkNFQkNDIC8qIEluc3BlY3RvclJlcGxh
eUFnZW50LmNwcCAqLywKKwkJCQk5OUNDMEI2NTE4QkU5RjE1MDA2Q0VCQ0MgLyogSW5zcGVjdG9y
UmVwbGF5QWdlbnQuaCAqLywKIAkJCQk4MkFCMTc3MTEyNUM4MjY3MDBDNTA2OUQgLyogSW5zcGVj
dG9yUmVzb3VyY2VBZ2VudC5jcHAgKi8sCiAJCQkJODJBQjE3NzIxMjVDODI2NzAwQzUwNjlEIC8q
IEluc3BlY3RvclJlc291cmNlQWdlbnQuaCAqLywKIAkJCQk4MkFCMTc2RjEyNUM4MjY3MDBDNTA2
OUQgLyogSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAgKi8sCkBAIC0xNTY2NCw5ICsxNTcxNiw5IEBA
CiAJCTUxQzRBQTUxMThCMjgzNTcwMDdCRkU5QiAvKiBtYWMgKi8gPSB7CiAJCQlpc2EgPSBQQlhH
cm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTUxMDE5MkQ4MThCN0Q3QUIwMDdGQzdBMSAvKiBp
bWFnZUNvbnRyb2xzTWFjLmNzcyAqLywKIAkJCQk1MTAxOTJDRjE4QjZCOUFCMDA3RkM3QTEgLyog
SW1hZ2VDb250cm9sc1Jvb3RFbGVtZW50TWFjLmNwcCAqLywKIAkJCQk1MTAxOTJEMDE4QjZCOUFC
MDA3RkM3QTEgLyogSW1hZ2VDb250cm9sc1Jvb3RFbGVtZW50TWFjLmggKi8sCi0JCQkJNTEwMTky
RDgxOEI3RDdBQjAwN0ZDN0ExIC8qIGltYWdlQ29udHJvbHNNYWMuY3NzICovLAogCQkJKTsKIAkJ
CXBhdGggPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTU3OTYsNiArMTU4
NDgsOCBAQAogCQkJCTY1NjU4MUFGMDlEMTRFRTYwMDBFNjFENyAvKiBVc2VyQWdlbnRTdHlsZVNo
ZWV0c0RhdGEuY3BwICovLAogCQkJCTFBMTQxNEIzMTNBMEYwNTAwMDE5OTk2QyAvKiBXZWJLaXRG
b250RmFtaWx5TmFtZXMuY3BwICovLAogCQkJCTFBMTQxNEI0MTNBMEYwNTAwMDE5OTk2QyAvKiBX
ZWJLaXRGb250RmFtaWx5TmFtZXMuaCAqLywKKwkJCQk5OUNDMEI2ODE4QkVBMUZGMDA2Q0VCQ0Mg
LyogV2ViUmVwbGF5SW5wdXRzLmNwcCAqLywKKwkJCQk5OUNDMEI2OTE4QkVBMUZGMDA2Q0VCQ0Mg
LyogV2ViUmVwbGF5SW5wdXRzLmggKi8sCiAJCQkJNjU2NTgxRUEwOUQxNTA4RDAwMEU2MUQ3IC8q
IFhMaW5rTmFtZXMuY3BwICovLAogCQkJCTY1NjU4MUVCMDlEMTUwOEQwMDBFNjFENyAvKiBYTGlu
a05hbWVzLmggKi8sCiAJCQkJQTgzM0M4MEEwQTJDRjI1NjAwRDU3NjY0IC8qIFhNTE5hbWVzLmNw
cCAqLywKQEAgLTE2MDU3LDYgKzE2MTExLDggQEAKIAkJCQk5NzVDQTI4NzEzMDM2NUY4MDBFOTlB
RDkgLyogQ3J5cHRvLmNwcCAqLywKIAkJCQk5NzVDQTI4ODEzMDM2NUY4MDBFOTlBRDkgLyogQ3J5
cHRvLmggKi8sCiAJCQkJOTc1Q0EyODkxMzAzNjVGODAwRTk5QUQ5IC8qIENyeXB0by5pZGwgKi8s
CisJCQkJMUFGNENFRTcxOEJDMzUwMTAwQkMyRDM0IC8qIERlZmF1bHRWaXNpdGVkTGlua1N0b3Jl
LmNwcCAqLywKKwkJCQkxQUY0Q0VFODE4QkMzNTAxMDBCQzJEMzQgLyogRGVmYXVsdFZpc2l0ZWRM
aW5rU3RvcmUuaCAqLywKIAkJCQlDQ0MyQjUxMDE1RjYxMzA2MDA0OENERDYgLyogRGV2aWNlQ2xp
ZW50LmggKi8sCiAJCQkJQ0NDMkI1MTExNUY2MTMwNjAwNDhDREQ2IC8qIERldmljZUNvbnRyb2xs
ZXIuY3BwICovLAogCQkJCUNDQzJCNTEyMTVGNjEzMDYwMDQ4Q0RENiAvKiBEZXZpY2VDb250cm9s
bGVyLmggKi8sCkBAIC0xNjA3Niw4ICsxNjEzMiw2IEBACiAJCQkJNTE3RkJBMTgxNTFBQTcxQjAw
QjU3OTU5IC8qIERPTVdpbmRvd0V4dGVuc2lvbi5oICovLAogCQkJCTk3RDJBRDAxMTRCODIzQTYw
MDkzREYzMiAvKiBET01XaW5kb3dQcm9wZXJ0eS5jcHAgKi8sCiAJCQkJOTdEMkFEMDIxNEI4MjNB
NjAwOTNERjMyIC8qIERPTVdpbmRvd1Byb3BlcnR5LmggKi8sCi0JCQkJMUFGNENFRTcxOEJDMzUw
MTAwQkMyRDM0IC8qIERlZmF1bHRWaXNpdGVkTGlua1N0b3JlLmNwcCAqLywKLQkJCQkxQUY0Q0VF
ODE4QkMzNTAxMDBCQzJEMzQgLyogRGVmYXVsdFZpc2l0ZWRMaW5rU3RvcmUuaCAqLywKIAkJCQlB
NzE4NzYwRDBCMkExMjAxMDBBMTZFQ0UgLyogRHJhZ0FjdGlvbnMuaCAqLywKIAkJCQlBN0NBNTk2
MjBCMjdDMUYyMDBGQTAyMUQgLyogRHJhZ0NsaWVudC5oICovLAogCQkJCUE3Q0E1OTVDMEIyN0JE
OUUwMEZBMDIxRCAvKiBEcmFnQ29udHJvbGxlci5jcHAgKi8sCkBAIC0xNzg0NywxMSArMTc5MDEs
MzIgQEAKIAkJOTlFNDVBMTMxOEEwMjE3NjAwMjZEODhGIC8qIHJlcGxheSAqLyA9IHsKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJOTlDQzBCMzgxOEJFOTg0OTAwNkNF
QkNDIC8qIEFsbFJlcGxheUlucHV0cy5oICovLAorCQkJCTk5Q0MwQjM5MThCRTk4NDkwMDZDRUJD
QyAvKiBDYXB0dXJpbmdJbnB1dEN1cnNvci5jcHAgKi8sCisJCQkJOTlDQzBCM0ExOEJFOTg0OTAw
NkNFQkNDIC8qIENhcHR1cmluZ0lucHV0Q3Vyc29yLmggKi8sCiAJCQkJOTlFNDVBMTYxOEEwNjNC
RTAwMjZEODhGIC8qIEV2ZW50TG9vcElucHV0LmggKi8sCisJCQkJOTlDQzBCM0IxOEJFOTg0OTAw
NkNFQkNDIC8qIEV2ZW50TG9vcElucHV0RGlzcGF0Y2hlci5jcHAgKi8sCisJCQkJOTlDQzBCM0Mx
OEJFOTg0OTAwNkNFQkNDIC8qIEV2ZW50TG9vcElucHV0RGlzcGF0Y2hlci5oICovLAorCQkJCTk5
Q0MwQjNEMThCRTk4NDkwMDZDRUJDQyAvKiBGdW5jdG9ySW5wdXRDdXJzb3IuaCAqLywKKwkJCQk5
OUNDMEIzRTE4QkU5ODQ5MDA2Q0VCQ0MgLyogUmVwbGF5Q29udHJvbGxlci5jcHAgKi8sCisJCQkJ
OTlDQzBCM0YxOEJFOTg0OTAwNkNFQkNDIC8qIFJlcGxheUNvbnRyb2xsZXIuaCAqLywKKwkJCQk5
OUNDMEI0MDE4QkU5ODQ5MDA2Q0VCQ0MgLyogUmVwbGF5aW5nSW5wdXRDdXJzb3IuY3BwICovLAor
CQkJCTk5Q0MwQjQxMThCRTk4NDkwMDZDRUJDQyAvKiBSZXBsYXlpbmdJbnB1dEN1cnNvci5oICov
LAorCQkJCTk5Q0MwQjQyMThCRTk4NDkwMDZDRUJDQyAvKiBSZXBsYXlJbnB1dENyZWF0aW9uTWV0
aG9kcy5jcHAgKi8sCisJCQkJOTlDQzBCNDMxOEJFOTg0OTAwNkNFQkNDIC8qIFJlcGxheUlucHV0
RGlzcGF0Y2hNZXRob2RzLmNwcCAqLywKIAkJCQk5OTBBMTlGNDE4QURBNDg0MDAxODNGRDEgLyog
UmVwbGF5SW5wdXRUeXBlcy5jcHAgKi8sCiAJCQkJOTkwQTE5RjUxOEFEQTQ4NDAwMTgzRkQxIC8q
IFJlcGxheUlucHV0VHlwZXMuaCAqLywKKwkJCQk5OUNDMEI0NDE4QkU5ODQ5MDA2Q0VCQ0MgLyog
UmVwbGF5U2Vzc2lvbi5jcHAgKi8sCisJCQkJOTlDQzBCNDUxOEJFOTg0OTAwNkNFQkNDIC8qIFJl
cGxheVNlc3Npb24uaCAqLywKKwkJCQk5OUNDMEI0NjE4QkU5ODQ5MDA2Q0VCQ0MgLyogUmVwbGF5
U2Vzc2lvblNlZ21lbnQuY3BwICovLAorCQkJCTk5Q0MwQjQ3MThCRTk4NDkwMDZDRUJDQyAvKiBS
ZXBsYXlTZXNzaW9uU2VnbWVudC5oICovLAorCQkJCTk5Q0MwQjQ4MThCRTk4NDkwMDZDRUJDQyAv
KiBTZWdtZW50ZWRJbnB1dFN0b3JhZ2UuY3BwICovLAorCQkJCTk5Q0MwQjQ5MThCRTk4NDkwMDZD
RUJDQyAvKiBTZWdtZW50ZWRJbnB1dFN0b3JhZ2UuaCAqLywKKwkJCQk5OUNDMEI0QTE4QkU5ODQ5
MDA2Q0VCQ0MgLyogU2VyaWFsaXphdGlvbk1ldGhvZHMuY3BwICovLAorCQkJCTk5Q0MwQjRCMThC
RTk4NDkwMDZDRUJDQyAvKiBTZXJpYWxpemF0aW9uTWV0aG9kcy5oICovLAogCQkJCTk5MjAzOTgw
MThCOTVCQzYwMEIzOUFGOSAvKiBVc2VySW5wdXRCcmlkZ2UuY3BwICovLAogCQkJCTk5MjAzOTgx
MThCOTVCQzYwMEIzOUFGOSAvKiBVc2VySW5wdXRCcmlkZ2UuaCAqLywKKwkJCQk5OUNDMEI0QzE4
QkU5ODQ5MDA2Q0VCQ0MgLyogV2ViSW5wdXRzLmpzb24gKi8sCiAJCQkpOwogCQkJcGF0aCA9IHJl
cGxheTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0xNzk4MCw5ICsxODA1NSw5IEBA
CiAJCUE1Qzk3NENFMTE0ODVGREEwMDY2RjJBQiAvKiBjb2NvYSAqLyA9IHsKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJN0NDNTY0QjkxOEJBQzcyMDAwMUI5NjUyIC8q
IFRlbGVwaG9uZU51bWJlckRldGVjdG9yQ29jb2EuY3BwICovLAogCQkJCUE1Qzk3NENGMTE0ODVG
RjEwMDY2RjJBQiAvKiBLZXlFdmVudENvY29hLmggKi8sCiAJCQkJQTVDOTc0RDAxMTQ4NUZGMTAw
NjZGMkFCIC8qIEtleUV2ZW50Q29jb2EubW0gKi8sCisJCQkJN0NDNTY0QjkxOEJBQzcyMDAwMUI5
NjUyIC8qIFRlbGVwaG9uZU51bWJlckRldGVjdG9yQ29jb2EuY3BwICovLAogCQkJKTsKIAkJCXBh
dGggPSBjb2NvYTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yMjY2Miw2ICsyMjcz
Nyw3IEBACiAJCQkJQkNGN0U0OTExMzdDRDdDNzAwMUREQUU3IC8qIEFkanVzdFZpZXdTaXplT3JO
b3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0RDBDNDA2MTExNUYxRUEwMDE4QUEzNCAvKiBBZmZp
bmVUcmFuc2Zvcm0uaCBpbiBIZWFkZXJzICovLAogCQkJCTA3MDU4NTA4MTdGQTQ2ODkwMDVGMkJD
QiAvKiBBbGxBdWRpb0NhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTlDQzBCNEQx
OEJFOTg0OTAwNkNFQkNDIC8qIEFsbFJlcGxheUlucHV0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MDczQUI0QjMxN0Y4QkFDQTAwNkUwRDZGIC8qIEFsbFZpZGVvQ2FwYWJpbGl0aWVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDRURBMTJENzE1MkNBMUNCMDBEOUUwOEQgLyogQWx0ZXJuYXRpdmVUZXh0
Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTA4QzNEMjE1MkI1OTlBMDAyMUI4QzIgLyog
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjgzNCw2ICsy
MjkxMCw3IEBACiAJCQkJMDdDNTlCNzYxN0Y3RDBEQjAwMEZCQ0JCIC8qIENhcGFiaWxpdHlSYW5n
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc5RDA4NjgxNjJGMjBFODAwREI4NjU4IC8qIENhcHRp
b25Vc2VyUHJlZmVyZW5jZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3OUQwODZCMTYyRjIxRjkw
MERCODY1OCAvKiBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5oIGluIEhlYWRlcnMgKi8s
CisJCQkJOTlDQzBCNEYxOEJFOTg0OTAwNkNFQkNDIC8qIENhcHR1cmluZ0lucHV0Q3Vyc29yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk2NTUwQjY5RTA5OURGMDI3MDA5MEQ3ODEgLyogQ0RBVEFTZWN0
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRERENTcxNTE4QjU3QTgyMDBBOTRGQ0IgLyogQ0RN
U2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUZBOTA0Q0ExNzhFNjFGNTAwNEM4QTJEIC8q
IENlcnRpZmljYXRlSW5mby5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjg5NCw2ICsyMjk3MSw3IEBA
CiAJCQkJOTc2MjdCOEUxNEZCM0NFRTAwMkNEQ0ExIC8qIENvbnRleHREZXN0cnVjdGlvbk9ic2Vy
dmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0I2QTBFNjBCMEJDQTVDMDBGNTAyN0EgLyogQ29u
dGV4dE1lbnUuaCBpbiBIZWFkZXJzICovLAogCQkJCTA2NUFENEY1MEIwQzJFREEwMDVBMkIxRCAv
KiBDb250ZXh0TWVudUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTEwNkQ3QkUxOEJEQjc2
RjAwMEFCMTY2IC8qIENvbnRleHRNZW51Q29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDY1
QUQ0RjcwQjBDMkVEQTAwNUEyQjFEIC8qIENvbnRleHRNZW51Q29udHJvbGxlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMDYwMjdDQUQwQjFDQkZDMDAwODg0QjJEIC8qIENvbnRleHRNZW51SXRlbS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJN0FERTcyMjYxMENCQkI5QjAwNkIzQjNBIC8qIENvbnRleHRN
ZW51UHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjMwNjMsNiArMjMxNDEsNyBAQAogCQkJ
CTQxQTNENThGMTAxQzE1MkQwMDMxNkQwNyAvKiBEZWRpY2F0ZWRXb3JrZXJUaHJlYWQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUZEMDZERkE2MTM0QTRERUYwMDZGNUQ3RCAvKiBEZWZhdWx0QXVkaW9E
ZXN0aW5hdGlvbk5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxNjdFQkY2MTAyOTYyQkEwMDNE
MjUyQSAvKiBEZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMUFGNENFRUExOEJDMzUwMTAwQkMyRDM0IC8qIERlZmF1bHRWaXNpdGVkTGlua1N0b3JlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlGRDMxNjAyQzEyQjAyNjc2MDBDMUEzNTkgLyogRGVsYXlEU1BL
ZXJuZWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE2MDJFMTJCMDI2NzYwMEMxQTM1OSAvKiBE
ZWxheU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE2MDMxMTJCMDI2NzYwMEMxQTM1OSAv
KiBEZWxheVByb2Nlc3Nvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMzUxMyw2ICsyMzU5Miw3IEBA
CiAJCQkJQUQ0NDk1RjQxNDFGQzA4OTAwNTQxRURGIC8qIEV2ZW50TGlzdGVuZXJNYXAuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFDQTE5RTE2MERDMjU1Q0EwMDY1QTk5NCAvKiBFdmVudExvb3AuaCBp
biBIZWFkZXJzICovLAogCQkJCTk5RTQ1QTE3MThBMDYzQkUwMDI2RDg4RiAvKiBFdmVudExvb3BJ
bnB1dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTlDQzBCNTExOEJFOTg0OTAwNkNFQkNDIC8qIEV2
ZW50TG9vcElucHV0RGlzcGF0Y2hlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5ODg1QzQwOEI3
RTNEMTAwRTcwN0M0IC8qIEV2ZW50TmFtZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCThGNjc1NjFC
MTI4OEIxN0IwMDQ3QUNBMyAvKiBFdmVudFF1ZXVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMEZF
RjM3MkIxN0M1M0VBQzFDMUZCRUUgLyogRXZlbnRTb3VyY2UuaCBpbiBIZWFkZXJzICovLApAQCAt
MjM2MzUsNiArMjM3MTUsNyBAQAogCQkJCTk3MjA1QUIwMTIzOTI4Q0EwMEIxNzM4MCAvKiBGVFBE
aXJlY3RvcnlEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFDODFCOEEwQzQ0MjJGNzAw
MTlFQ0UzIC8qIEZUUERpcmVjdG9yeVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjZCOTk5
OTMxODAzQjlEOTAwRDAxMTIxIC8qIEZ1bmN0aW9uQ2FsbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
OTlDQzBCNTIxOEJFOTg0OTAwNkNFQkNDIC8qIEZ1bmN0b3JJbnB1dEN1cnNvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRkQzMTYwMEQxMkIwMjY3NjAwQzFBMzU5IC8qIEdhaW5Ob2RlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5MzVDNDc3NTA5QUM0RDhFMDBBNkFBQjQgLyogR2FwUmVjdHMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0MzJFODQ3MEM1MTQ5MzgwMEIxNTAwRiAvKiBHQ0NvbnRyb2xsZXIu
aCBpbiBIZWFkZXJzICovLApAQCAtMjM3MTIsNyArMjM3OTMsNiBAQAogCQkJCTk3N0IzODY3MTIy
ODgzRTkwMEI4MUZGOCAvKiBIVE1MRG9jdW1lbnRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTkzMzA5REU4MDk5RTY0OTIwMDU2RTU4MSAvKiBodG1sZWRpdGluZy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTNGMTk4RTYwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxFbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKLQkJCQk5OTIwMzk4MzE4Qjk1QkM2MDBCMzlBRjkgLyogVXNlcklucHV0QnJpZGdlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBMTdDODEyMzBGMkE1Q0Y3MDA1REFBRUIgLyogSFRNTEVsZW1l
bnRGYWN0b3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzdCMzcyNDEyMjg3MjE3MDBCODFGRjgg
LyogSFRNTEVsZW1lbnRTdGFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjU2MkRCNjAxN0QzQ0Q2
MzAwMTBBRjk2IC8qIEhUTUxFbGVtZW50VHlwZUhlbHBlcnMuaCBpbiBIZWFkZXJzICovLApAQCAt
MjM3ODQsNiArMjM4NjQsNyBAQAogCQkJCTk3OEFENjc1MTQxMzBBOEQwMEM3Q0FFMyAvKiBIVE1M
U3BhbkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4NzFEQzIzMEExNTIwNTcwMEIxMkE2
OCAvKiBIVE1MU3R5bGVFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlEM0Q0RTk3MzEzMEM3
Q0ZFMDA3QkE1NDAgLyogSFRNTFN1bW1hcnlFbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk5
OUNDMEI2QjE4QkVBMUZGMDA2Q0VCQ0MgLyogV2ViUmVwbGF5SW5wdXRzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBODcxREIyQjBBMTUwQkQ2MDBCMTJBNjggLyogSFRNTFRhYmxlQ2FwdGlvbkVsZW1l
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4NzFEQjJBMEExNTBCRDYwMEIxMkE2OCAvKiBIVE1M
VGFibGVDZWxsRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg3MURCMkYwQTE1MEJENjAw
QjEyQTY4IC8qIEhUTUxUYWJsZUNvbEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjM5Mzcs
NiArMjQwMTgsNyBAQAogCQkJCTBGMDNDMDc1MTg4NDgwNTUwMEE1RjhDQSAvKiBJbnNwZWN0b3JP
dmVybGF5LmggaW4gSGVhZGVycyAqLywKIAkJCQk0RjZGREQ2NTEzNDFERUREMDAxRjhFRTMgLyog
SW5zcGVjdG9yUGFnZUFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5RjBENkIyRjEyMUJGRUJB
MDA2QzAyODggLyogSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
OTlDQzBCNjcxOEJFOUYxNTAwNkNFQkNDIC8qIEluc3BlY3RvclJlcGxheUFnZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4MkFCMTc3NjEyNUM4MjY3MDBDNTA2OUQgLyogSW5zcGVjdG9yUmVzb3Vy
Y2VBZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODJBQjE3NzQxMjVDODI2NzAwQzUwNjlEIC8q
IEluc3BlY3RvclN0eWxlU2hlZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTgyODg5QjREMTNDNjIz
OTIwMDlBNjE1NiAvKiBJbnNwZWN0b3JTdHlsZVRleHRFZGl0b3IuaCBpbiBIZWFkZXJzICovLApA
QCAtMjM5OTksNyArMjQwODEsNiBAQAogCQkJCUZEQTE1RUJFMTJCMDNGMEIwMDNBNTgzQSAvKiBK
U0NvbnZvbHZlck5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNkZENDhFMEY2NzZFOTMwMDA5
Mjg3MyAvKiBKU0Nvb3JkaW5hdGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzA3MDVEQTA5RTBD
OUJGMDBCMTdGRTQgLyogSlNDb3VudGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkxQUY0Q0VFQTE4
QkMzNTAxMDBCQzJEMzQgLyogRGVmYXVsdFZpc2l0ZWRMaW5rU3RvcmUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTk3NUNBMkEyMTMwMzY3OUQwMEU5OUFEOSAvKiBKU0NyeXB0by5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTE1N0E4RjExODE4NTQyNTAwOUY4MjFEIC8qIEpTQ3J5cHRvQWxnb3JpdGhtQnVp
bGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFDNjU3MTMxODE1RjlERDAwMjU2Q0REIC8qIEpT
Q3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNDEwMSw3ICsy
NDE4Miw2IEBACiAJCQkJMUFFMkFBMjEwQTFDREFCNDAwQjQyQjI1IC8qIEpTSFRNTEJhc2VGb250
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFFMkFBMjMwQTFDREFCNDAwQjQyQjI1IC8q
IEpTSFRNTEJvZHlFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUUyQUEyNTBBMUNEQUI0
MDBCNDJCMjUgLyogSlNIVE1MQlJFbGVtZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQk3Q0M1NjRC
ODE4QkFCRUE2MDAxQjk2NTIgLyogVGVsZXBob25lTnVtYmVyRGV0ZWN0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE4MEU3RTlGMEExQTgzRTMwMDdGQjhDNSAvKiBKU0hUTUxCdXR0b25FbGVtZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzhFNjY2MjA5RjA5Qjg3MDA4QTQ4RUMgLyogSlNIVE1M
Q2FudmFzRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNDQkFENDEwQzE4QzE0MjAwQ0U4
OTBGIC8qIEpTSFRNTENvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovLApAQCAtMjQ1MzYsNyArMjQ2
MTYsNiBAQAogCQkJCTQ1MENFQkYxMTUwNzNCQkUwMDJCQjE0OSAvKiBMYWJlbGFibGVFbGVtZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNDU2RkEyNzExQUQ0QTgzMDAyMEI0MjAgLyogTGFiZWxz
Tm9kZUxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1RUM5QUZCMEE3MUEyQzYwMEVFRUFFRCAv
KiBMYW5ndWFnZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTEwNkQ3QkUxOEJEQjc2RjAwMEFCMTY2
IC8qIENvbnRleHRNZW51Q29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjkxN0I1NjIxNDcz
NDk2QzAwNTJDOUQwIC8qIExheWVyRmx1c2hTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTI5MTdCNTYzMTQ3MzQ5NkMwMDUyQzlEMCAvKiBMYXllckZsdXNoU2NoZWR1bGVyQ2xpZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5M0Y3MkFGMzE2NjZFREZDMDAyQTAyQkQgLyogTGF5ZXJQb29s
LmggaW4gSGVhZGVycyAqLywKQEAgLTI1MDUwLDcgKzI1MTI5LDExIEBACiAJCQkJQTg3MURGRTQw
QTE1Mzc2QjAwQjEyQTY4IC8qIFJlbmRlcldpZGdldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg5
Q0NDNTMwRjQ0RTk4MTAwQjVEQTEwIC8qIFJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5MzMwOUUwQTA5OUU2NDkyMDA1NkU1ODEgLyogUmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTk5Q0MwQjU0MThCRTk4NDkwMDZDRUJD
QyAvKiBSZXBsYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk5OUNDMEI1NjE4QkU5
ODRBMDA2Q0VCQ0MgLyogUmVwbGF5aW5nSW5wdXRDdXJzb3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTk5MEExQTA1MThBREE0ODQwMDE4M0ZEMSAvKiBSZXBsYXlJbnB1dFR5cGVzLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk5OUNDMEI1QTE4QkU5ODRBMDA2Q0VCQ0MgLyogUmVwbGF5U2Vzc2lvbi5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJOTlDQzBCNUMxOEJFOTg0QTAwNkNFQkNDIC8qIFJlcGxheVNlc3Np
b25TZWdtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk0OTk4QUVDNjEzRjlEMEVBMDA5MEIxQUEg
LyogUmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUY1
NUIzREQwMTI1MUYxMkQwMDNFRjI2OSAvKiBSZXNldElucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTE0QkM4NDMxNjFDRjA1QzAwNEQ1MkY0IC8qIFJlc291cmNlQnVmZmVyLmggaW4gSGVh
ZGVycyAqLywKQEAgLTI1MTg0LDYgKzI1MjY3LDcgQEAKIAkJCQk5NzREMkRBNTE0NkE1MzVEMDBE
NTFGOEIgLyogU2VjdXJpdHlQb2xpY3kuaCBpbiBIZWFkZXJzICovLAogCQkJCTJENUJDNDI3MTZG
ODgyRUUwMDcwNDhEMCAvKiBTZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkzNzFGNEZGQzBEMjVFN0YzMDBFQ0UwRDUgLyogU2VnbWVudGVkRm9udERhdGEu
aCBpbiBIZWFkZXJzICovLAorCQkJCTk5Q0MwQjVFMThCRTk4NEEwMDZDRUJDQyAvKiBTZWdtZW50
ZWRJbnB1dFN0b3JhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQzNEQTJGMEQwMDZDMUQwMEVG
NkYyNiAvKiBTZWdtZW50ZWRTdHJpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCUJFQTgwN0M5MEY3
MTRBMDMwMDUyNDE5OSAvKiBTZWxlY3Rpb25SZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDRC
NEJCNDE0MTY1MEQ3MDAyQjFEOEIgLyogU2VsZWN0b3JDaGVja2VyLmggaW4gSGVhZGVycyAqLywK
QEAgLTI1MTkyLDYgKzI1Mjc2LDcgQEAKIAkJCQkyNkI5OTk5NzE4MDRENTQyMDBEMDExMjEgLyog
U2VsZWN0b3JDb21waWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDE1MDcxNTgxNjg1MDY3MzAw
QzNDN0IzIC8qIFNlbGVjdG9yRmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDUzMjJBQzE0
MENFMjY3MDA1QTBGOTIgLyogU2VsZWN0b3JRdWVyeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTlD
QzBCNjAxOEJFOTg0QTAwNkNFQkNDIC8qIFNlcmlhbGl6YXRpb25NZXRob2RzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlFMThERjMzNTE4QUFGMTJDMDA3NzNFNTkgLyogU2VyaWFsaXplZENyeXB0b0tl
eVdyYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NUU0OTc2MTA3NTJBQ0IwMEM5Qjg5NiAvKiBT
ZXJpYWxpemVkU2NyaXB0VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTc1NkIyQ0UxMThCNzEw
MTYwMEZFQ0ZBQSAvKiBTZXNzaW9uSUQuaCBpbiBIZWFkZXJzICovLApAQCAtMjU2MTYsNiArMjU3
MDEsNyBAQAogCQkJCUE4Q0ZGMDUxMEExNTRGMDkwMDBBNDIzNCAvKiBUYWJsZUxheW91dC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkNFM0JFQzMwRDIyMkIxRDAwN0UwNkU0IC8qIFRhZ05vZGVMaXN0
LmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0RENjEyNTFGMTJEMDAzRUYyNjkgLyogVGVsZXBo
b25lSW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3Q0M1NjRCODE4QkFCRUE2MDAxQjk2
NTIgLyogVGVsZXBob25lTnVtYmVyRGV0ZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUM2NTA0
NkE5MTY3QkZCNTUwMENDMkE0RCAvKiBUZW1wbGF0ZUNvbnRlbnREb2N1bWVudEZyYWdtZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk2NTUwQjZBNjA5OURGMDI3MDA5MEQ3ODEgLyogVGV4dC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMTcwOTlFNjQ5MjAwNTZFNTgxIC8qIFRleHRBZmZpbml0
eS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTczOCw2ICsyNTgyNCw3IEBACiAJCQkJMDAzRjFGRUEx
MUU2QUI0MzAwODI1OEQ5IC8qIFVzZXJDb250ZW50VHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDQUNGM0JEMTA3MjkyMUEwMEMwQzhBMyAvKiBVc2VyQ29udGVudFVSTFBhdHRlcm4uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTI1NDJGNERCMTE2NkMyNUEwMEU4OUE4NiAvKiBVc2VyR2VzdHVyZUlu
ZGljYXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTkyMDM5ODMxOEI5NUJDNjAwQjM5QUY5IC8q
IFVzZXJJbnB1dEJyaWRnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc4RTA5MkUxN0QxNEQxQzAw
NDIwQUExIC8qIFVzZXJNZWRpYUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc4RTA5MkYx
N0QxNEQxQzAwNDIwQUExIC8qIFVzZXJNZWRpYUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTA3OEUwOTMwMTdEMTREMUMwMDQyMEFBMSAvKiBVc2VyTWVkaWFSZXF1ZXN0LmggaW4gSGVh
ZGVycyAqLywKQEAgLTI1NzczLDggKzI1ODYwLDggQEAKIAkJCQk5MzMwOUUyMDA5OUU2NDkyMDA1
NkU1ODEgLyogVmlzaWJsZVBvc2l0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODgzREYyODBG
M0QwNDVEMDBGMTlCRjYgLyogVmlzaWJsZVNlbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTMzMDlFMUUwOTlFNjQ5MjAwNTZFNTgxIC8qIFZpc2libGVVbml0cy5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMUFCQTgwMDAxODk3MzQxMjAwRENFOUQ2IC8qIFZpc2l0ZWRMaW5rU3RvcmUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTQxOUJDMkRGMTY4NTMyOTkwMEQ2NEQ2RCAvKiBWaXNpdGVkTGlua1N0
YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQkxQUJBODAwMDE4OTczNDEyMDBEQ0U5RDYgLyogVmlz
aXRlZExpbmtTdG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ0NjEzQjYwQ0Q2MzQ0RTAwRkFE
QTc1IC8qIFZvaWRDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkUyMDUwN0ExOEE0NTg2
QjAwODA2NDdFIC8qIFZUVEN1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE0ODMyQjAxODdGNjE4
RDAwREE2M0E2IC8qIFdBS0FwcEtpdFN0dWJzLmggaW4gSGVhZGVycyAqLywKQEAgLTI2MTUzLDYg
KzI2MjQwLDcgQEAKIAkJCQk5MzcwOTE4RDE0MTZEODZCMDA0NzczMzMgLyogdGV4dEFyZWFSZXNp
emVDb3JuZXJAMngucG5nIGluIFJlc291cmNlcyAqLywKIAkJCQk0NkQ0RjI0QjBBRjk3RTgxMDAz
NTM4NUEgLyogdmVydGljYWxUZXh0Q3Vyc29yLnBuZyBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJODUx
MzZDQTcwQUVENjY1OTAwRjkwQTNEIC8qIHdhaXRDdXJzb3IucG5nIGluIFJlc291cmNlcyAqLywK
KwkJCQk5OUNDMEI2MTE4QkU5ODRBMDA2Q0VCQ0MgLyogV2ViSW5wdXRzLmpzb24gaW4gUmVzb3Vy
Y2VzICovLAogCQkJCTg1MTM2Q0E4MEFFRDY2NTkwMEY5MEEzRCAvKiB3ZXN0UmVzaXplQ3Vyc29y
LnBuZyBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJMUFCMUFFN0EwQzA1MUZERTAwMTM5RjRGIC8qIHpv
b21JbkN1cnNvci5wbmcgaW4gUmVzb3VyY2VzICovLAogCQkJCTFBQjFBRTdCMEMwNTFGREUwMDEz
OUY0RiAvKiB6b29tT3V0Q3Vyc29yLnBuZyBpbiBSZXNvdXJjZXMgKi8sCkBAIC0yNjI2Niw3ICsy
NjM1NCw3IEBACiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CiAJCQlzaGVsbFBhdGggPSAvYmluL3NoOwotCQkJc2hlbGxTY3JpcHQgPSAibWtkaXIgLXAg
XCIke0JVSUxUX1BST0RVQ1RTX0RJUn0vRGVyaXZlZFNvdXJjZXMvV2ViQ29yZVwiXG5jZCBcIiR7
QlVJTFRfUFJPRFVDVFNfRElSfS9EZXJpdmVkU291cmNlcy9XZWJDb3JlXCJcblxuL2Jpbi9sbiAt
c2ZoIFwiJHtTUkNST09UfVwiIFdlYkNvcmVcbmV4cG9ydCBXZWJDb3JlPVwiV2ViQ29yZVwiXG5l
eHBvcnQgSW5zcGVjdG9yU2NyaXB0cz1cIiR7SkFWQVNDUklQVENPUkVfUFJJVkFURV9IRUFERVJT
X0RJUn1cIlxuXG5pZiBbICEgJENDIF07IHRoZW5cbiAgICBleHBvcnQgQ0M9XCJgeGNydW4gLWZp
bmQgY2xhbmdgXCJcbmZpXG5cbmlmIFsgISAkR1BFUkYgXTsgdGhlblxuICAgIGV4cG9ydCBHUEVS
Rj1cImB4Y3J1biAtZmluZCBncGVyZmBcIlxuZmlcblxuaWYgWyBcIiR7QUNUSU9OfVwiID0gXCJi
dWlsZFwiIC1vIFwiJHtBQ1RJT059XCIgPSBcImluc3RhbGxcIiAtbyBcIiR7QUNUSU9OfVwiID0g
XCJpbnN0YWxsaGRyc1wiIF07IHRoZW5cbiAgICBtYWtlICAtLW5vLWJ1aWx0aW4tcnVsZXMgLWYg
XCJXZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2VcIiAtaiBgL3Vzci9zYmluL3N5c2N0bCAtbiBo
dy5hY3RpdmVjcHVgIFNES1JPT1Q9XCIke1NES1JPT1R9XCJcbmZpXG4iOworCQkJc2hlbGxTY3Jp
cHQgPSAibWtkaXIgLXAgXCIke0JVSUxUX1BST0RVQ1RTX0RJUn0vRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZVwiXG5jZCBcIiR7QlVJTFRfUFJPRFVDVFNfRElSfS9EZXJpdmVkU291cmNlcy9XZWJDb3Jl
XCJcblxuL2Jpbi9sbiAtc2ZoIFwiJHtTUkNST09UfVwiIFdlYkNvcmVcbmV4cG9ydCBXZWJDb3Jl
PVwiV2ViQ29yZVwiXG5leHBvcnQgSW5zcGVjdG9yU2NyaXB0cz1cIiR7SkFWQVNDUklQVENPUkVf
UFJJVkFURV9IRUFERVJTX0RJUn1cIlxuZXhwb3J0IFdlYlJlcGxheVNjcmlwdHM9XCIke0pBVkFT
Q1JJUFRDT1JFX1BSSVZBVEVfSEVBREVSU19ESVJ9XCJcblxuaWYgWyAhICRDQyBdOyB0aGVuXG4g
ICAgZXhwb3J0IENDPVwiYHhjcnVuIC1maW5kIGNsYW5nYFwiXG5maVxuXG5pZiBbICEgJEdQRVJG
IF07IHRoZW5cbiAgICBleHBvcnQgR1BFUkY9XCJgeGNydW4gLWZpbmQgZ3BlcmZgXCJcbmZpXG5c
bmlmIFsgXCIke0FDVElPTn1cIiA9IFwiYnVpbGRcIiAtbyBcIiR7QUNUSU9OfVwiID0gXCJpbnN0
YWxsXCIgLW8gXCIke0FDVElPTn1cIiA9IFwiaW5zdGFsbGhkcnNcIiBdOyB0aGVuXG4gICAgbWFr
ZSAgLS1uby1idWlsdGluLXJ1bGVzIC1mIFwiV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlXCIg
LWogYC91c3Ivc2Jpbi9zeXNjdGwgLW4gaHcuYWN0aXZlY3B1YCBTREtST09UPVwiJHtTREtST09U
fVwiXG5maVxuIjsKIAkJfTsKIC8qIEVuZCBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2Ugc2VjdGlv
biAqLwogCkBAIC0yNjQwMiw3ICsyNjQ5MCw2IEBACiAJCQkJODUwMzFCM0MwQTQ0RUZDNzAwRjk5
MkUwIC8qIEJlZm9yZVVubG9hZEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQzNEQTIz
MEQwMDZDMUQwMEVGNkYyNiAvKiBCaWRpQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
Q0U3ODk4QjExMjBFODAyMDA2MEVDRTUgLyogQmlkaVJ1bi5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQk1MTA2RDdCRDE4QkRCNzZGMDAwQUIxNjYgLyogQ29udGV4dE1lbnVDb250ZXh0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUZEMzE2MDhDMTJCMDI2RjcwMEMxQTM1OSAvKiBCaXF1YWQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRkQzMTYwMjQxMkIwMjY3NjAwQzFBMzU5IC8qIEJpcXVhZERTUEtl
cm5lbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGREM1NEYwNDEzOTlCMERBMDA4RDkxMTcgLyog
QmlxdWFkRmlsdGVyTm9kZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI2NDUzLDYgKzI2NTQwLDcg
QEAKIAkJCQkwNzA1ODRGRjE3RjlGMDVFMDA1RjJCQ0IgLyogQ2FwYWJpbGl0eVJhbmdlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTA3MkNBODYxMTZDQjREQzMwMDhBRTEzMSAvKiBDYXB0aW9uVXNl
clByZWZlcmVuY2VzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3OUQwODZDMTYyRjIxRjkwMERC
ODY1OCAvKiBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk5OUNDMEI0RTE4QkU5ODQ5MDA2Q0VCQ0MgLyogQ2FwdHVyaW5nSW5wdXRDdXJzb3IuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNjU1MEI2OUQwOTlERjAyNzAwOTBENzgxIC8qIENEQVRBU2Vj
dGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDREE5OEUwQjE2MDNDRDYwMDBGRUEzQjEgLyog
Q0RNLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNEQ0E5OEVCMThCMkM4RUIwMEMxMkZGOSAvKiBD
RE1Qcml2YXRlTWVkaWFQbGF5ZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNjUwNiw2ICsyNjU5
NCw3IEBACiAJCQkJOTdDNDcxREIxMkY5MjVCRDAwODYzNTRCIC8qIENvbnRlbnRTZWN1cml0eVBv
bGljeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MUQwMTVDQjBGNEI1QzcxMDA0QTY2MkYgLyog
Q29udGVudFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc2MjdCOEQxNEZCM0NFRTAwMkNE
Q0ExIC8qIENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTUxMDZEN0JEMThCREI3NkYwMDBBQjE2NiAvKiBDb250ZXh0TWVudUNvbnRleHQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMDY1QUQ0RjYwQjBDMkVEQTAwNUEyQjFEIC8qIENvbnRleHRNZW51Q29u
dHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNjAyN0NCMzBCMUNDMDNEMDA4ODRCMkQg
LyogQ29udGV4dE1lbnVJdGVtTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNCNkEwRUEwQjBC
Q0E4NDAwRjUwMjdBIC8qIENvbnRleHRNZW51TWFjLm1tIGluIFNvdXJjZXMgKi8sCkBAIC0yNjY1
MSw2ICsyNjc0MCw3IEBACiAJCQkJNDFBM0Q1OEUxMDFDMTUyRDAwMzE2RDA3IC8qIERlZGljYXRl
ZFdvcmtlclRocmVhZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRDA2REZBNTEzNEE0REVGMDA2
RjVEN0QgLyogRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTQxNjdFQkY1MTAyOTYyQkEwMDNEMjUyQSAvKiBEZWZhdWx0U2hhcmVkV29ya2VyUmVwb3Np
dG9yeS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQUY0Q0VFOTE4QkMzNTAxMDBCQzJEMzQgLyog
RGVmYXVsdFZpc2l0ZWRMaW5rU3RvcmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQzMTYwMkIx
MkIwMjY3NjAwQzFBMzU5IC8qIERlbGF5RFNQS2VybmVsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUZEMzE2MDJEMTJCMDI2NzYwMEMxQTM1OSAvKiBEZWxheU5vZGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRkQzMTYwMzAxMkIwMjY3NjAwQzFBMzU5IC8qIERlbGF5UHJvY2Vzc29yLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtMjY5MjMsNiArMjcwMTMsNyBAQAogCQkJCUZFNjkzOEI2MTA0NUQ2N0Uw
MDhFQUJCNiAvKiBFdmVudEhhbmRsZXJJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQk5M0MwOUE3
RjBCMDY0RUVGMDA1QUJENEQgLyogRXZlbnRIYW5kbGVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQUQ0NDk1RjMxNDFGQzA4OTAwNTQxRURGIC8qIEV2ZW50TGlzdGVuZXJNYXAuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJOTlDQzBCNTAxOEJFOTg0OTAwNkNFQkNDIC8qIEV2ZW50TG9vcElucHV0
RGlzcGF0Y2hlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyNkY0MEQ0QTE0OTA0QTYzMDBDQTY3
QzQgLyogRXZlbnRMb29wSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUNBMTlFMDUwREMyNTU5
NTAwNjVBOTk0IC8qIEV2ZW50TG9vcE1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzOTg4NUMz
MDhCN0UzRDEwMEU3MDdDNCAvKiBFdmVudE5hbWVzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjcy
OTUsNiArMjczODYsNyBAQAogCQkJCTdDNTIyRDRCMTVCNDc3RTgwMDlCN0M5NSAvKiBJbnNwZWN0
b3JPdmVybGF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTRGNkZERDY0MTM0MURFREQwMDFGOEVF
MyAvKiBJbnNwZWN0b3JQYWdlQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOUYwRDZCMkUx
MjFCRkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJOTlDQzBCNjYxOEJFOUYxNTAwNkNFQkNDIC8qIEluc3BlY3RvclJlcGxheUFnZW50
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTgyQUIxNzc1MTI1QzgyNjcwMEM1MDY5RCAvKiBJbnNw
ZWN0b3JSZXNvdXJjZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTgyQUIxNzczMTI1Qzgy
NjcwMEM1MDY5RCAvKiBJbnNwZWN0b3JTdHlsZVNoZWV0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTgyODg5QjRDMTNDNjIzOTIwMDlBNjE1NiAvKiBJbnNwZWN0b3JTdHlsZVRleHRFZGl0b3IuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC0yNzg2Niw3ICsyNzk1OCw2IEBACiAJCQkJODU0MkE3OTYwQUU1
Qzk0MjAwREY1OERGIC8qIEpTU1ZHUG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNE
RTIwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUG9pbnRMaXN0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUIyRkEzREU1MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1BvbHlnb25FbGVtZW50LmNwcCBp
biBTb3VyY2VzICovLAotCQkJCTdDQzU2NEJBMThCQUM3MjAwMDFCOTY1MiAvKiBUZWxlcGhvbmVO
dW1iZXJEZXRlY3RvckNvY29hLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEzREU3MEFCNzVB
NkYwMDBFNUFDNCAvKiBKU1NWR1BvbHlsaW5lRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCMkZBM0RFOTBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEzREVCMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1Jh
ZGlhbEdyYWRpZW50RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI4MjU4LDcgKzI4MzQ5
LDYgQEAKIAkJCQkxQURBMTQxMDBFMUFFNUQ5MDAwMjNFRTUgLyogUGx1Z2luTWFpblRocmVhZFNj
aGVkdWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MUUyMTgzQjE3MzU5RkI4MDA2RTZFNEQg
LyogUGx1Z0luc1Jlc291cmNlc0RhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzZGRjE3RTMx
MTIzNTY3MzAwMUQ2MUI1IC8qIFBsdWdpblZpZXdOb25lLmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CTk5MjAzOTgyMThCOTVCQzYwMEIzOUFGOSAvKiBVc2VySW5wdXRCcmlkZ2UuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQjJCMUY3MTYwRDAwQ0FBODAwNEFFQTY0IC8qIFBvaW50ZXJFdmVudHNIaXRS
dWxlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMUUxMTU0NjEzMDE1QzRFMDA1NEFDOEMgLyog
UG9pbnRMaWdodFNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzA1OTk3NzEwN0Q5NzUy
MDBBNTBBN0MgLyogUG9saWN5Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yODQwMiw3
ICsyODQ5MiwxMyBAQAogCQkJCUE4NzFERkU1MEExNTM3NkIwMEIxMkE2OCAvKiBSZW5kZXJXaWRn
ZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg5Q0NDNTIwRjQ0RTk4MTAwQjVEQTEwIC8qIFJl
cGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5RTA5
MDk5RTY0OTIwMDU2RTU4MSAvKiBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk5OUNDMEI1MzE4QkU5ODQ5MDA2Q0VCQ0MgLyogUmVwbGF5Q29udHJvbGxlci5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk5OUNDMEI1NTE4QkU5ODQ5MDA2Q0VCQ0MgLyogUmVwbGF5
aW5nSW5wdXRDdXJzb3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTlDQzBCNTcxOEJFOTg0QTAw
NkNFQkNDIC8qIFJlcGxheUlucHV0Q3JlYXRpb25NZXRob2RzLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTk5Q0MwQjU4MThCRTk4NEEwMDZDRUJDQyAvKiBSZXBsYXlJbnB1dERpc3BhdGNoTWV0aG9k
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OTBBMUEwNDE4QURBNDg0MDAxODNGRDEgLyogUmVw
bGF5SW5wdXRUeXBlcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5OUNDMEI1OTE4QkU5ODRBMDA2
Q0VCQ0MgLyogUmVwbGF5U2Vzc2lvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5OUNDMEI1QjE4
QkU5ODRBMDA2Q0VCQ0MgLyogUmVwbGF5U2Vzc2lvblNlZ21lbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRjU1QjNEQ0YxMjUxRjEyRDAwM0VGMjY5IC8qIFJlc2V0SW5wdXRUeXBlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTUxNEJDODQyMTYxQ0YwNUMwMDRENTJGNCAvKiBSZXNvdXJjZUJ1ZmZl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTRCQzgzRjE2MUNGMDRBMDA0RDUyRjQgLyogUmVz
b3VyY2VCdWZmZXIubW0gaW4gU291cmNlcyAqLywKQEAgLTI4NTIyLDYgKzI4NjE4LDcgQEAKIAkJ
CQlCQ0QwRTBGQTBFOTcyQzM1MDAyNjVERUEgLyogU2VjdXJpdHlPcmlnaW4uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOTc0RDJEQTQxNDZBNTM1RDAwRDUxRjhCIC8qIFNlY3VyaXR5UG9saWN5LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTM3MUY0RkZEMEQyNUU3RjMwMEVDRTBENSAvKiBTZWdtZW50
ZWRGb250RGF0YS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5OUNDMEI1RDE4QkU5ODRBMDA2Q0VC
Q0MgLyogU2VnbWVudGVkSW5wdXRTdG9yYWdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQzNE
QTJFMEQwMDZDMUQwMEVGNkYyNiAvKiBTZWdtZW50ZWRTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkVBODA3QzgwRjcxNEEwMzAwNTI0MTk5IC8qIFNlbGVjdGlvblJlY3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRTQ0QjRCQjMxNDE2NTBENzAwMkIxRDhCIC8qIFNlbGVjdG9yQ2hlY2tl
ci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI4NTI5LDYgKzI4NjI2LDcgQEAKIAkJCQkyNkI5OTk5
NjE4MDRENTQyMDBEMDExMjEgLyogU2VsZWN0b3JDb21waWxlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk0MTUwNzE1NzE2ODUwNjczMDBDM0M3QjMgLyogU2VsZWN0b3JGaWx0ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRTQ1MzIyQUIxNDBDRTI2NzAwNUEwRjkyIC8qIFNlbGVjdG9yUXVlcnku
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTlDQzBCNUYxOEJFOTg0QTAwNkNFQkNDIC8qIFNlcmlh
bGl6YXRpb25NZXRob2RzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxOERGMzM4MThBQUYxNEQw
MDc3M0U1OSAvKiBTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcE1hYy5tbSBpbiBTb3VyY2VzICovLAog
CQkJCUE3NUU0OTc3MTA3NTJBQ0IwMEM5Qjg5NiAvKiBTZXJpYWxpemVkU2NyaXB0VmFsdWUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlFMEYwOTlFNjQ5MjAwNTZFNTgxIC8qIFNldE5vZGVB
dHRyaWJ1dGVDb21tYW5kLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjg3NjIsNiArMjg4NjAsNyBA
QAogCQkJCUIyMjI3QTIzMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGb3JlaWduT2JqZWN0RWxlbWVu
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0EyNjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZH
R0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDg3RTBBRjYxMzYwNkQwQjAwRkE0QkE4
IC8qIFNWR0dseXBoLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk5Q0MwQjZBMThCRUExRkYwMDZD
RUJDQyAvKiBXZWJSZXBsYXlJbnB1dHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJBMUYyQUQw
Q0VGMEFCRjAwNDQyRjZBIC8qIFNWR0dseXBoRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkyNEQ5MTJCRDEzQ0E5QTk3MDBEMjE5MTUgLyogU1ZHR2x5cGhSZWZFbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUIyMjI3QTI5MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdHcmFkaWVudEVs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yODgyNCw3ICsyODkyMyw2IEBACiAJCQkJQjIy
MjdBQzAwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1N5bWJvbEVsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQjIyMjdBQzQwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1Rlc3RzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUIyMjI3QUM3MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdUZXh0Q29udGVudEVs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMUFGNENFRUMxOEJDM0MxQjAwQkMyRDM0IC8q
IFZpc2l0ZWRMaW5rU3RvcmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBQ0EwRDAwQkYy
MjAwNzFCNzgyIC8qIFNWR1RleHRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3
QUNEMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdUZXh0UGF0aEVsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQjIyMjdBRDAwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1RleHRQb3NpdGlvbmluZ0Vs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yODg0MCw3ICsyODkzOCw2IEBACiAJCQkJQjIy
MjdBRUYwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1ZpZXdFbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUIyMjI3QUYyMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdWaWV3U3BlYy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk4NDg1MjI4QTExOTAxNzNDMDA2RURDN0YgLyogU1ZHVktlcm5FbGVtZW50
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTFBRjRDRUU5MThCQzM1MDEwMEJDMkQzNCAvKiBEZWZh
dWx0VmlzaXRlZExpbmtTdG9yZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0FGNTBEMDBC
RjIyMDA3MUI3ODIgLyogU1ZHWm9vbUFuZFBhbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkU0
RUM5NzBEMDBDMjJCMDA0MzI2NDMgLyogU1ZHWm9vbUV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUUxODA4MTEyMTZGQ0Y0MkYwMEI4MEQwNyAvKiBTeW5jaHJvbm91c0xvYWRlckNsaWVudC5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTI4ODUxLDYgKzI4OTQ4LDcgQEAKIAkJCQk1REE5N0VDRTE2
OEU3ODdCMDAwRTM2NzYgLyogU3lzdGVtVmVyc2lvbk1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CUJDRTNCRUMyMEQyMjJCMUQwMDdFMDZFNCAvKiBUYWdOb2RlTGlzdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlGNTVCM0RENTEyNTFGMTJEMDAzRUYyNjkgLyogVGVsZXBob25lSW5wdXRUeXBlLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTdDQzU2NEJBMThCQUM3MjAwMDFCOTY1MiAvKiBUZWxlcGhv
bmVOdW1iZXJEZXRlY3RvckNvY29hLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdBMjlCQTZBMTg3
QjdDMUQwMEYyOUNFQiAvKiBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTY1NTBCNkE1MDk5REYwMjcwMDkwRDc4MSAvKiBUZXh0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUNFN0IyREI2MTU4NkFCQUQwMDk4QjNGQSAvKiBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFu
Z2UubW0gaW4gU291cmNlcyAqLywKQEAgLTI4OTU2LDYgKzI5MDU0LDcgQEAKIAkJCQkxQUU3OUQ0
MjE4OERCNjFGMDAyMjM5QzIgLyogVXNlckNvbnRlbnRDb250cm9sbGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUJDQUNGM0JDMTA3MjkyMUEwMEMwQzhBMyAvKiBVc2VyQ29udGVudFVSTFBhdHRl
cm4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjU0MkY0REExMTY2QzI1QTAwRTg5QTg2IC8qIFVz
ZXJHZXN0dXJlSW5kaWNhdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk5MjAzOTgyMThCOTVC
QzYwMEIzOUFGOSAvKiBVc2VySW5wdXRCcmlkZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDc4
RTA5MTIxN0QxNENFRTAwNDIwQUExIC8qIFVzZXJNZWRpYUNvbnRyb2xsZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMDc4RTA5MTMxN0QxNENFRTAwNDIwQUExIC8qIFVzZXJNZWRpYVJlcXVlc3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNERjMxN0IxMUY4RDY4MzAwM0M1QkY4IC8qIFVzZXJU
eXBpbmdHZXN0dXJlSW5kaWNhdG9yLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjg5NzksNiArMjkw
NzgsNyBAQAogCQkJCUE4ODNERjI3MEYzRDA0NUQwMEYxOUJGNiAvKiBWaXNpYmxlU2VsZWN0aW9u
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5RTFEMDk5RTY0OTIwMDU2RTU4MSAvKiBWaXNp
YmxlVW5pdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDE5QkMyREUxNjg1MzI5OTAwRDY0RDZE
IC8qIFZpc2l0ZWRMaW5rU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUFGNENFRUMxOEJD
M0MxQjAwQkMyRDM0IC8qIFZpc2l0ZWRMaW5rU3RvcmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkUyMDUwNzkxOEE0NTg2ODAwODA2NDdFIC8qIFZUVEN1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBMTQ4MzJCMTE4N0Y2MUUxMDBEQTYzQTYgLyogV0FLQXBwS2l0U3R1YnMubSBpbiBTb3VyY2Vz
ICovLAogCQkJCUExNDgzMkIzMTg3RjYyOTEwMERBNjNBNiAvKiBXQUtDbGlwVmlldy5tIGluIFNv
dXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5jcHAKaW5kZXggMThmMmZhZjA0M2YxYTJlMTE1NzYxMGExMTQ2NGI4ZDQyNzE5NmI0OS4u
NTNkZDY1MWJjMDQ2NWQ0ZjdlMWM1MmExMWVjYzRjMzkwMjU0ODNlYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtMSw1ICsxLDYg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC01Miw2ICs1Myw3IEBA
CiAjaW5jbHVkZSAiSW5zcGVjdG9yT3ZlcmxheS5oIgogI2luY2x1ZGUgIkluc3BlY3RvclBhZ2VB
Z2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclByb2ZpbGVyQWdlbnQuaCIKKyNpbmNsdWRlICJJ
bnNwZWN0b3JSZXBsYXlBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclJlc291cmNlQWdlbnQu
aCIKICNpbmNsdWRlICJJbnNwZWN0b3JUaW1lbGluZUFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVj
dG9yV2ViQmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0xMjQsNiArMTI2LDEwIEBAIEluc3BlY3Rv
ckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIoUGFnZSYgcGFnZSwgSW5zcGVjdG9yQ2xp
ZW50KiBpbnNwZWN0b3JDCiAgICAgbV9hZ2VudHMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8SW5z
cGVjdG9ySW5kZXhlZERCQWdlbnQ+KG1faW5zdHJ1bWVudGluZ0FnZW50cy5nZXQoKSwgbV9pbmpl
Y3RlZFNjcmlwdE1hbmFnZXIuZ2V0KCksIHBhZ2VBZ2VudCkpOwogI2VuZGlmCiAKKyNpZiBFTkFC
TEUoV0VCX1JFUExBWSkKKyAgICBtX2FnZW50cy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxJbnNw
ZWN0b3JSZXBsYXlBZ2VudD4obV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgpLCBwYWdlQWdlbnQp
KTsKKyNlbmRpZgorCiAgICAgYXV0byBkb21TdG9yYWdlQWdlbnRQdHIgPSBzdGQ6Om1ha2VfdW5p
cXVlPEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudD4obV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgp
LCBtX3BhZ2VBZ2VudCk7CiAgICAgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50KiBkb21TdG9yYWdl
QWdlbnQgPSBkb21TdG9yYWdlQWdlbnRQdHIuZ2V0KCk7CiAgICAgbV9hZ2VudHMuYXBwZW5kKHN0
ZDo6bW92ZShkb21TdG9yYWdlQWdlbnRQdHIpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKaW5kZXggZTc0NzZlOGIzMjVj
YTg0YTY0MWQ0OTZjNzcwOWMyMDU2NTM4NWIzOC4uMGViNjNiODZjODY1Y2YyOTQ4MjM2ODhiZWI2
NWJmNmQ0MzY4MDc3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKQEAgLTc2LDYgKzc3LDExIEBACiAjaW5jbHVkZSA8d3RmL1N0ZExp
YkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAorI2lmIEVOQUJMRShX
RUJfUkVQTEFZKQorI2luY2x1ZGUgIkluc3BlY3RvclJlcGxheUFnZW50LmgiCisjaW5jbHVkZSAi
UmVwbGF5Q29udHJvbGxlci5oIiAvLyBmb3IgUmVwbGF5UG9zaXRpb24uCisjZW5kaWYKKwogdXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzQwLDYg
Kzc0NiwxMyBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZnJhbWVEZXRhY2hlZEZy
b21QYXJlbnRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqCiB7CiAgICAgaWYgKEluc3BlY3RvclBh
Z2VBZ2VudCogcGFnZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yUGFnZUFn
ZW50KCkpCiAgICAgICAgIHBhZ2VBZ2VudC0+ZnJhbWVEZXRhY2hlZChmcmFtZSk7CisKKyNpZiBF
TkFCTEUoV0VCX1JFUExBWSkKKyAgICBpZiAoZnJhbWUtPmlzTWFpbkZyYW1lKCkpIHsKKyAgICAg
ICAgaWYgKEluc3BlY3RvclJlcGxheUFnZW50KiByZXBsYXlBZ2VudCA9IGluc3RydW1lbnRpbmdB
Z2VudHMtPmluc3BlY3RvclJlcGxheUFnZW50KCkpCisgICAgICAgICAgICByZXBsYXlBZ2VudC0+
ZnJhbWVEZXRhY2hlZChmcmFtZSk7CisgICAgfQorI2VuZGlmCiB9CiAKIHZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpkaWRDb21taXRMb2FkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBp
bnN0cnVtZW50aW5nQWdlbnRzLCBQYWdlKiBwYWdlLCBEb2N1bWVudExvYWRlciogbG9hZGVyKQpA
QCAtNzcyLDYgKzc4NSwxMCBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ29t
bWl0TG9hZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudAogICAgICAgICBkb21B
Z2VudC0+ZGlkQ29tbWl0TG9hZChsb2FkZXItPmZyYW1lKCktPmRvY3VtZW50KCkpOwogICAgIGlm
IChJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmlu
c3BlY3RvclBhZ2VBZ2VudCgpKQogICAgICAgICBwYWdlQWdlbnQtPmZyYW1lTmF2aWdhdGVkKGxv
YWRlcik7CisjaWYgRU5BQkxFKFdFQl9SRVBMQVkpCisgICAgaWYgKEluc3BlY3RvclJlcGxheUFn
ZW50KiByZXBsYXlBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvclJlcGxheUFn
ZW50KCkpCisgICAgICAgIHJlcGxheUFnZW50LT5mcmFtZU5hdmlnYXRlZChsb2FkZXIpOworI2Vu
ZGlmCiB9CiAKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmcmFtZURvY3VtZW50VXBk
YXRlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgRnJhbWUq
IGZyYW1lKQpAQCAtMTA0NSw2ICsxMDYyLDgwIEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkaWRTZW5kV2ViU29ja2V0RnJhbWVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluCiB9
CiAjZW5kaWYKIAorI2lmIEVOQUJMRShXRUJfUkVQTEFZKQordm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OnNlc3Npb25DcmVhdGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVt
ZW50aW5nQWdlbnRzLCBQYXNzUmVmUHRyPFJlcGxheVNlc3Npb24+IHNlc3Npb24pCit7CisgICAg
aWYgKEluc3BlY3RvclJlcGxheUFnZW50KiByZXBsYXlBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2Vu
dHMtPmluc3BlY3RvclJlcGxheUFnZW50KCkpCisgICAgICAgIHJlcGxheUFnZW50LT5zZXNzaW9u
Q3JlYXRlZChzZXNzaW9uKTsKK30KKwordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNl
c3Npb25Mb2FkZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMs
IFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvbj4gc2Vzc2lvbikKK3sKKyAgICBpZiAoSW5zcGVjdG9y
UmVwbGF5QWdlbnQqIHJlcGxheUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9y
UmVwbGF5QWdlbnQoKSkKKyAgICAgICAgcmVwbGF5QWdlbnQtPnNlc3Npb25Mb2FkZWQoc2Vzc2lv
bik7Cit9CisKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZXNzaW9uTW9kaWZpZWRJ
bXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIFBhc3NSZWZQdHI8
UmVwbGF5U2Vzc2lvbj4gc2Vzc2lvbikKK3sKKyAgICBpZiAoSW5zcGVjdG9yUmVwbGF5QWdlbnQq
IHJlcGxheUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yUmVwbGF5QWdlbnQo
KSkKKyAgICAgICAgcmVwbGF5QWdlbnQtPnNlc3Npb25Nb2RpZmllZChzZXNzaW9uKTsKK30KKwor
dm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlZ21lbnRDcmVhdGVkSW1wbChJbnN0cnVt
ZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBQYXNzUmVmUHRyPFJlcGxheVNlc3Np
b25TZWdtZW50PiBzZWdtZW50KQoreworICAgIGlmIChJbnNwZWN0b3JSZXBsYXlBZ2VudCogcmVw
bGF5QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JSZXBsYXlBZ2VudCgpKQor
ICAgICAgICByZXBsYXlBZ2VudC0+c2VnbWVudENyZWF0ZWQoc2VnbWVudCk7Cit9CisKK3ZvaWQg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZWdtZW50Q29tcGxldGVkSW1wbChJbnN0cnVtZW50
aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBQYXNzUmVmUHRyPFJlcGxheVNlc3Npb25T
ZWdtZW50PiBzZWdtZW50KQoreworICAgIGlmIChJbnNwZWN0b3JSZXBsYXlBZ2VudCogcmVwbGF5
QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JSZXBsYXlBZ2VudCgpKQorICAg
ICAgICByZXBsYXlBZ2VudC0+c2VnbWVudENvbXBsZXRlZChzZWdtZW50KTsKK30KKwordm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlZ21lbnRMb2FkZWRJbXBsKEluc3RydW1lbnRpbmdB
Z2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21l
bnQ+IHNlZ21lbnQpCit7CisgICAgaWYgKEluc3BlY3RvclJlcGxheUFnZW50KiByZXBsYXlBZ2Vu
dCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvclJlcGxheUFnZW50KCkpCisgICAgICAg
IHJlcGxheUFnZW50LT5zZWdtZW50TG9hZGVkKHNlZ21lbnQpOworfQorCit2b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6c2VnbWVudFVubG9hZGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRz
KiBpbnN0cnVtZW50aW5nQWdlbnRzKQoreworICAgIGlmIChJbnNwZWN0b3JSZXBsYXlBZ2VudCog
cmVwbGF5QWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JSZXBsYXlBZ2VudCgp
KQorICAgICAgICByZXBsYXlBZ2VudC0+c2VnbWVudFVubG9hZGVkKCk7Cit9CisKK3ZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjYXB0dXJlU3RhcnRlZEltcGwoSW5zdHJ1bWVudGluZ0Fn
ZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cykKK3sKKyAgICBpZiAoSW5zcGVjdG9yUmVwbGF5QWdl
bnQqIHJlcGxheUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yUmVwbGF5QWdl
bnQoKSkKKyAgICAgICAgcmVwbGF5QWdlbnQtPmNhcHR1cmVTdGFydGVkKCk7Cit9CisKK3ZvaWQg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjYXB0dXJlU3RvcHBlZEltcGwoSW5zdHJ1bWVudGlu
Z0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cykKK3sKKyAgICBpZiAoSW5zcGVjdG9yUmVwbGF5
QWdlbnQqIHJlcGxheUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yUmVwbGF5
QWdlbnQoKSkKKyAgICAgICAgcmVwbGF5QWdlbnQtPmNhcHR1cmVTdG9wcGVkKCk7Cit9CisKK3Zv
aWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpwbGF5YmFja1N0YXJ0ZWRJbXBsKEluc3RydW1l
bnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMpCit7CisgICAgaWYgKEluc3BlY3RvclJl
cGxheUFnZW50KiByZXBsYXlBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvclJl
cGxheUFnZW50KCkpCisgICAgICAgIHJlcGxheUFnZW50LT5wbGF5YmFja1N0YXJ0ZWQoKTsKK30K
Kwordm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnBsYXliYWNrUGF1c2VkSW1wbChJbnN0
cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBjb25zdCBSZXBsYXlQb3NpdGlv
biYgcG9zaXRpb24pCit7CisgICAgaWYgKEluc3BlY3RvclJlcGxheUFnZW50KiByZXBsYXlBZ2Vu
dCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvclJlcGxheUFnZW50KCkpCisgICAgICAg
IHJlcGxheUFnZW50LT5wbGF5YmFja1BhdXNlZChwb3NpdGlvbik7Cit9CisKK3ZvaWQgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpwbGF5YmFja0hpdFBvc2l0aW9uSW1wbChJbnN0cnVtZW50aW5n
QWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBjb25zdCBSZXBsYXlQb3NpdGlvbiYgcG9zaXRp
b24pCit7CisgICAgaWYgKEluc3BlY3RvclJlcGxheUFnZW50KiByZXBsYXlBZ2VudCA9IGluc3Ry
dW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvclJlcGxheUFnZW50KCkpCisgICAgICAgIHJlcGxheUFn
ZW50LT5wbGF5YmFja0hpdFBvc2l0aW9uKHBvc2l0aW9uKTsKK30KKyNlbmRpZgorCiB2b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bmV0d29ya1N0YXRlQ2hhbmdlZEltcGwoSW5zdHJ1bWVu
dGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cykKIHsKICAgICBpZiAoSW5zcGVjdG9yQXBw
bGljYXRpb25DYWNoZUFnZW50KiBhcHBsaWNhdGlvbkNhY2hlQWdlbnQgPSBpbnN0cnVtZW50aW5n
QWdlbnRzLT5pbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQoKSkKQEAgLTEwNzAsNiArMTE2
MSwxNyBAQCBib29sIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6dGltZWxpbmVBZ2VudEVuYWJs
ZWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaQogICAgIHJldHVybiBpbnN0cnVtZW50aW5n
QWdlbnRzICYmIGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvclRpbWVsaW5lQWdlbnQoKTsK
IH0KIAorYm9vbCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnJlcGxheUFnZW50RW5hYmxlZChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KQoreworI2lmIEVO
QUJMRShXRUJfUkVQTEFZKQorICAgIEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdB
Z2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yQ29udGV4dChzY3JpcHRFeGVjdXRpb25Db250
ZXh0KTsKKyAgICByZXR1cm4gaW5zdHJ1bWVudGluZ0FnZW50cyAmJiBpbnN0cnVtZW50aW5nQWdl
bnRzLT5pbnNwZWN0b3JSZXBsYXlBZ2VudCgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCk7CisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKIHZv
aWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpwYXVzZU9uTmF0aXZlRXZlbnRJZk5lZWRlZChJ
bnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBib29sIGlzRE9NRXZlbnQs
IGNvbnN0IFN0cmluZyYgZXZlbnROYW1lLCBib29sIHN5bmNocm9ub3VzKQogewogICAgIGlmIChJ
bnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KiBkb21EZWJ1Z2dlckFnZW50ID0gaW5zdHJ1bWVudGlu
Z0FnZW50cy0+aW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCgpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCmluZGV4IGI1ZjYzZDFj
ZTQyZWQ2YzJkZGUxMjU5M2QwYzYyNGUzYWUxNGI2MTQuLjViM2Q4YzhiZDY1NDY3NzFkM2I1MmRm
YjNmNDIxOTcwYTk4OWFiYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgKQEAgLTEsNSArMSw2IEBACiAvKgogKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKQEAgLTQ1LDYgKzQ2LDEyIEBACiAjaW5jbHVkZSA8aW5zcGVjdG9y
L0NvbnNvbGVUeXBlcy5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAorI2lmIEVOQUJMRShX
RUJfUkVQTEFZKQorI2luY2x1ZGUgIlJlcGxheVNlc3Npb24uaCIKKyNpbmNsdWRlICJSZXBsYXlT
ZXNzaW9uU2VnbWVudC5oIgorI2VuZGlmCisKKwogbmFtZXNwYWNlIERlcHJlY2F0ZWQgewogY2xh
c3MgU2NyaXB0T2JqZWN0OwogfQpAQCAtOTMsNiArMTAwLDggQEAgY2xhc3MgV29ya2VyR2xvYmFs
U2NvcGU7CiBjbGFzcyBXb3JrZXJHbG9iYWxTY29wZVByb3h5OwogY2xhc3MgWE1MSHR0cFJlcXVl
c3Q7CiAKK3N0cnVjdCBSZXBsYXlQb3NpdGlvbjsKKwogI2RlZmluZSBGQVNUX1JFVFVSTl9JRl9O
T19GUk9OVEVORFModmFsdWUpIGlmIChMSUtFTFkoIWhhc0Zyb250ZW5kcygpKSkgcmV0dXJuIHZh
bHVlOwogCiBjbGFzcyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24gewpAQCAtMjM5LDYgKzI0OCwy
NCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgd29ya2VyR2xvYmFsU2NvcGVUZXJtaW5hdGVk
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXb3JrZXJHbG9iYWxTY29wZVByb3h5Kik7CiAgICAg
c3RhdGljIHZvaWQgd2lsbEV2YWx1YXRlV29ya2VyU2NyaXB0KFdvcmtlckdsb2JhbFNjb3BlKiwg
aW50IHdvcmtlclRocmVhZFN0YXJ0TW9kZSk7CiAKKyNpZiBFTkFCTEUoV0VCX1JFUExBWSkKKyAg
ICBzdGF0aWMgdm9pZCBzZXNzaW9uQ3JlYXRlZChQYWdlKiwgUGFzc1JlZlB0cjxSZXBsYXlTZXNz
aW9uPik7CisgICAgc3RhdGljIHZvaWQgc2Vzc2lvbkxvYWRlZChQYWdlKiwgUGFzc1JlZlB0cjxS
ZXBsYXlTZXNzaW9uPik7CisgICAgc3RhdGljIHZvaWQgc2Vzc2lvbk1vZGlmaWVkKFBhZ2UqLCBQ
YXNzUmVmUHRyPFJlcGxheVNlc3Npb24+KTsKKworICAgIHN0YXRpYyB2b2lkIHNlZ21lbnRDcmVh
dGVkKFBhZ2UqLCBQYXNzUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50Pik7CisgICAgc3RhdGlj
IHZvaWQgc2VnbWVudENvbXBsZXRlZChQYWdlKiwgUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uU2Vn
bWVudD4pOworICAgIHN0YXRpYyB2b2lkIHNlZ21lbnRMb2FkZWQoUGFnZSosIFBhc3NSZWZQdHI8
UmVwbGF5U2Vzc2lvblNlZ21lbnQ+KTsKKyAgICBzdGF0aWMgdm9pZCBzZWdtZW50VW5sb2FkZWQo
UGFnZSopOworCisgICAgc3RhdGljIHZvaWQgY2FwdHVyZVN0YXJ0ZWQoUGFnZSopOworICAgIHN0
YXRpYyB2b2lkIGNhcHR1cmVTdG9wcGVkKFBhZ2UqKTsKKworICAgIHN0YXRpYyB2b2lkIHBsYXli
YWNrU3RhcnRlZChQYWdlKik7CisgICAgc3RhdGljIHZvaWQgcGxheWJhY2tQYXVzZWQoUGFnZSos
IGNvbnN0IFJlcGxheVBvc2l0aW9uJik7CisgICAgc3RhdGljIHZvaWQgcGxheWJhY2tIaXRQb3Np
dGlvbihQYWdlKiwgY29uc3QgUmVwbGF5UG9zaXRpb24mKTsKKyNlbmRpZgorCiAjaWYgRU5BQkxF
KFdFQl9TT0NLRVRTKQogICAgIHN0YXRpYyB2b2lkIGRpZENyZWF0ZVdlYlNvY2tldChEb2N1bWVu
dCosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgVVJMJiByZXF1ZXN0VVJMLCBjb25z
dCBVUkwmIGRvY3VtZW50VVJMLCBjb25zdCBTdHJpbmcmIHByb3RvY29sKTsKICAgICBzdGF0aWMg
dm9pZCB3aWxsU2VuZFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3QoRG9jdW1lbnQqLCB1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOwpAQCAtMjYzLDExICsy
OTAsMTMgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGhhc0Zyb250ZW5kcygpIHsgcmV0dXJu
IHNfZnJvbnRlbmRDb3VudGVyOyB9CiAgICAgc3RhdGljIGJvb2wgY29uc29sZUFnZW50RW5hYmxl
ZChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAgICAgc3RhdGljIGJvb2wgdGltZWxpbmVBZ2Vu
dEVuYWJsZWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworICAgIHN0YXRpYyBib29sIHJlcGxh
eUFnZW50RW5hYmxlZChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAjZWxzZQogICAgIHN0YXRp
YyBib29sIGhhc0Zyb250ZW5kcygpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgc3RhdGljIGJvb2wg
Y29uc29sZUFnZW50RW5hYmxlZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KikgeyByZXR1cm4gZmFs
c2U7IH0KICAgICBzdGF0aWMgYm9vbCBydW50aW1lQWdlbnRFbmFibGVkKEZyYW1lKikgeyByZXR1
cm4gZmFsc2U7IH0KICAgICBzdGF0aWMgYm9vbCB0aW1lbGluZUFnZW50RW5hYmxlZChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBzdGF0aWMgYm9vbCByZXBs
YXlBZ2VudEVuYWJsZWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopIHsgcmV0dXJuIGZhbHNlOyB9
CiAjZW5kaWYKIAogICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVySW5zdHJ1bWVudGluZ0FnZW50cyhJ
bnN0cnVtZW50aW5nQWdlbnRzKik7CkBAIC00MTYsNiArNDQ1LDI0IEBAIHByaXZhdGU6CiAgICAg
c3RhdGljIHZvaWQgZGlkU3RhcnRXb3JrZXJHbG9iYWxTY29wZUltcGwoSW5zdHJ1bWVudGluZ0Fn
ZW50cyosIFdvcmtlckdsb2JhbFNjb3BlUHJveHkqLCBjb25zdCBVUkwmKTsKICAgICBzdGF0aWMg
dm9pZCB3b3JrZXJHbG9iYWxTY29wZVRlcm1pbmF0ZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMq
LCBXb3JrZXJHbG9iYWxTY29wZVByb3h5Kik7CiAKKyNpZiBFTkFCTEUoV0VCX1JFUExBWSkKKyAg
ICBzdGF0aWMgdm9pZCBzZXNzaW9uQ3JlYXRlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIFBh
c3NSZWZQdHI8UmVwbGF5U2Vzc2lvbj4pOworICAgIHN0YXRpYyB2b2lkIHNlc3Npb25Mb2FkZWRJ
bXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCBQYXNzUmVmUHRyPFJlcGxheVNlc3Npb24+KTsKKyAg
ICBzdGF0aWMgdm9pZCBzZXNzaW9uTW9kaWZpZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCBQ
YXNzUmVmUHRyPFJlcGxheVNlc3Npb24+KTsKKworICAgIHN0YXRpYyB2b2lkIHNlZ21lbnRDcmVh
dGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uU2Vn
bWVudD4pOworICAgIHN0YXRpYyB2b2lkIHNlZ21lbnRDb21wbGV0ZWRJbXBsKEluc3RydW1lbnRp
bmdBZ2VudHMqLCBQYXNzUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50Pik7CisgICAgc3RhdGlj
IHZvaWQgc2VnbWVudExvYWRlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIFBhc3NSZWZQdHI8
UmVwbGF5U2Vzc2lvblNlZ21lbnQ+KTsKKyAgICBzdGF0aWMgdm9pZCBzZWdtZW50VW5sb2FkZWRJ
bXBsKEluc3RydW1lbnRpbmdBZ2VudHMqKTsKKworICAgIHN0YXRpYyB2b2lkIGNhcHR1cmVTdGFy
dGVkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKik7CisgICAgc3RhdGljIHZvaWQgY2FwdHVyZVN0
b3BwZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqKTsKKworICAgIHN0YXRpYyB2b2lkIHBsYXli
YWNrU3RhcnRlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyopOworICAgIHN0YXRpYyB2b2lkIHBs
YXliYWNrUGF1c2VkSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgY29uc3QgUmVwbGF5UG9zaXRp
b24mKTsKKyAgICBzdGF0aWMgdm9pZCBwbGF5YmFja0hpdFBvc2l0aW9uSW1wbChJbnN0cnVtZW50
aW5nQWdlbnRzKiwgY29uc3QgUmVwbGF5UG9zaXRpb24mKTsKKyNlbmRpZgorCiAjaWYgRU5BQkxF
KFdFQl9TT0NLRVRTKQogICAgIHN0YXRpYyB2b2lkIGRpZENyZWF0ZVdlYlNvY2tldEltcGwoSW5z
dHJ1bWVudGluZ0FnZW50cyosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgVVJMJiBy
ZXF1ZXN0VVJMLCBjb25zdCBVUkwmIGRvY3VtZW50VVJMLCBjb25zdCBTdHJpbmcmIHByb3RvY29s
LCBEb2N1bWVudCopOwogICAgIHN0YXRpYyB2b2lkIHdpbGxTZW5kV2ViU29ja2V0SGFuZHNoYWtl
UmVxdWVzdEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmll
ciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgRG9jdW1lbnQqKTsKQEAgLTE3NzMsNiArMTgyMCwx
NDggQEAgaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRTZW5kV2ViU29j
a2V0RnJhbWUoRG9jdW1lbnQqIGRvY3VtZW50LAogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoV0VC
X1JFUExBWSkKK2lubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2Vzc2lvbkNy
ZWF0ZWQoUGFnZSogcGFnZSwgUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uPiBzZXNzaW9uKQorewor
I2lmIEVOQUJMRShJTlNQRUNUT1IpCisgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZv
aWQoKSk7CisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMg
PSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFnZShwYWdlKSkKKyAgICAgICAgc2Vzc2lvbkNyZWF0
ZWRJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMsIHNlc3Npb24pOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0ocGFnZSk7CisgICAgVU5VU0VEX1BBUkFNKHNlc3Npb24pOworI2VuZGlmCit9CisKK2lu
bGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2Vzc2lvbkxvYWRlZChQYWdlKiBw
YWdlLCBQYXNzUmVmUHRyPFJlcGxheVNlc3Npb24+IHNlc3Npb24pCit7CisjaWYgRU5BQkxFKElO
U1BFQ1RPUikKKyAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKKyAgICBp
ZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRp
bmdBZ2VudHNGb3JQYWdlKHBhZ2UpKQorICAgICAgICBzZXNzaW9uTG9hZGVkSW1wbChpbnN0cnVt
ZW50aW5nQWdlbnRzLCBzZXNzaW9uKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHBhZ2UpOwor
ICAgIFVOVVNFRF9QQVJBTShzZXNzaW9uKTsKKyNlbmRpZgorfQorCitpbmxpbmUgdm9pZCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OnNlc3Npb25Nb2RpZmllZChQYWdlKiBwYWdlLCBQYXNzUmVm
UHRyPFJlcGxheVNlc3Npb24+IHNlc3Npb24pCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAg
ICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKKyAgICBpZiAoSW5zdHJ1bWVu
dGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JQ
YWdlKHBhZ2UpKQorICAgICAgICBzZXNzaW9uTW9kaWZpZWRJbXBsKGluc3RydW1lbnRpbmdBZ2Vu
dHMsIHNlc3Npb24pOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocGFnZSk7CisgICAgVU5VU0VE
X1BBUkFNKHNlc3Npb24pOworI2VuZGlmCit9CisKK2lubGluZSB2b2lkIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6c2VnbWVudENyZWF0ZWQoUGFnZSogcGFnZSwgUGFzc1JlZlB0cjxSZXBsYXlT
ZXNzaW9uU2VnbWVudD4gc2VnbWVudCkKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgIEZB
U1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOworICAgIGlmIChJbnN0cnVtZW50aW5n
QWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2Uo
cGFnZSkpCisgICAgICAgIHNlZ21lbnRDcmVhdGVkSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCBz
ZWdtZW50KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHBhZ2UpOworICAgIFVOVVNFRF9QQVJB
TShzZWdtZW50KTsKKyNlbmRpZgorfQorCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OnNlZ21lbnRDb21wbGV0ZWQoUGFnZSogcGFnZSwgUGFzc1JlZlB0cjxSZXBsYXlTZXNz
aW9uU2VnbWVudD4gc2VnbWVudCkKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgIEZBU1Rf
UkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdl
bnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UocGFn
ZSkpCisgICAgICAgIHNlZ21lbnRDb21wbGV0ZWRJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMsIHNl
Z21lbnQpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocGFnZSk7CisgICAgVU5VU0VEX1BBUkFN
KHNlZ21lbnQpOworI2VuZGlmCit9CisKK2lubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6c2VnbWVudExvYWRlZChQYWdlKiBwYWdlLCBQYXNzUmVmUHRyPFJlcGxheVNlc3Npb25T
ZWdtZW50PiBzZWdtZW50KQoreworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisgICAgRkFTVF9SRVRV
Uk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7CisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMq
IGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFnZShwYWdlKSkK
KyAgICAgICAgc2VnbWVudExvYWRlZEltcGwoaW5zdHJ1bWVudGluZ0FnZW50cywgc2VnbWVudCk7
CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShwYWdlKTsKKyAgICBVTlVTRURfUEFSQU0oc2VnbWVu
dCk7CisjZW5kaWYKK30KKworaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpz
ZWdtZW50VW5sb2FkZWQoUGFnZSogcGFnZSkKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAg
IEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOworICAgIGlmIChJbnN0cnVtZW50
aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBh
Z2UocGFnZSkpCisgICAgICAgIHNlZ21lbnRVbmxvYWRlZEltcGwoaW5zdHJ1bWVudGluZ0FnZW50
cyk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShwYWdlKTsKKyNlbmRpZgorfQorCitpbmxpbmUg
dm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNhcHR1cmVTdGFydGVkKFBhZ2UqIHBhZ2Up
Cit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVO
RFModm9pZCgpKTsKKyAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0Fn
ZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JQYWdlKHBhZ2UpKQorICAgICAgICBjYXB0dXJl
U3RhcnRlZEltcGwoaW5zdHJ1bWVudGluZ0FnZW50cyk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TShwYWdlKTsKKyNlbmRpZgorfQorCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmNhcHR1cmVTdG9wcGVkKFBhZ2UqIHBhZ2UpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUikK
KyAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKKyAgICBpZiAoSW5zdHJ1
bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2VudHNG
b3JQYWdlKHBhZ2UpKQorICAgICAgICBjYXB0dXJlU3RvcHBlZEltcGwoaW5zdHJ1bWVudGluZ0Fn
ZW50cyk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShwYWdlKTsKKyNlbmRpZgorfQorCitpbmxp
bmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnBsYXliYWNrU3RhcnRlZChQYWdlKiBw
YWdlKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJP
TlRFTkRTKHZvaWQoKSk7CisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRp
bmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFnZShwYWdlKSkKKyAgICAgICAgcGxh
eWJhY2tTdGFydGVkSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzKTsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKHBhZ2UpOworI2VuZGlmCit9CisKK2lubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6cGxheWJhY2tQYXVzZWQoUGFnZSogcGFnZSwgY29uc3QgUmVwbGF5UG9zaXRpb24m
IHBvc2l0aW9uKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisgICAgRkFTVF9SRVRVUk5fSUZf
Tk9fRlJPTlRFTkRTKHZvaWQoKSk7CisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3Ry
dW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFnZShwYWdlKSkKKyAgICAg
ICAgcGxheWJhY2tQYXVzZWRJbXBsKGluc3RydW1lbnRpbmdBZ2VudHMsIHBvc2l0aW9uKTsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKHBhZ2UpOworICAgIFVOVVNFRF9QQVJBTShwb3NpdGlvbik7
CisjZW5kaWYKK30KKworaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpwbGF5
YmFja0hpdFBvc2l0aW9uKFBhZ2UqIHBhZ2UsIGNvbnN0IFJlcGxheVBvc2l0aW9uJiBwb3NpdGlv
bikKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05U
RU5EUyh2b2lkKCkpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5n
QWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UocGFnZSkpCisgICAgICAgIHBsYXli
YWNrSGl0UG9zaXRpb25JbXBsKGluc3RydW1lbnRpbmdBZ2VudHMsIHBvc2l0aW9uKTsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKHBhZ2UpOworICAgIFVOVVNFRF9QQVJBTShwb3NpdGlvbik7Cisj
ZW5kaWYKK30KKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JFUExBWSkKKwogaW5saW5lIHZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpuZXR3b3JrU3RhdGVDaGFuZ2VkKFBhZ2UqIHBhZ2UpCiB7
CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JSZXBsYXlBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yUmVwbGF5QWdlbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEzZWQ0YTYwZWIzNmEwZWY4YzQw
NjI1ZDM4OGRjNjEzYjQyNTQ5NmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQuY3BwCkBAIC0wLDAgKzEsNDg0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUwor
ICogSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVECisgKiBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEKKyAqIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yUmVwbGF5QWdlbnQuaCIKKworI2lmIEVOQUJM
RShJTlNQRUNUT1IpICYmIEVOQUJMRShXRUJfUkVQTEFZKQorCisjaW5jbHVkZSAiRG9jdW1lbnRM
b2FkZXIuaCIKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgIkV2ZW50TG9vcElucHV0Lmgi
CisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGdW5jdG9ySW5wdXRDdXJzb3IuaCIKKyNp
bmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yUGFnZUFn
ZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yV2ViVHlwZUJ1aWxkZXJzLmgiCisjaW5jbHVkZSAi
SW5zdHJ1bWVudGluZ0FnZW50cy5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJQ
YWdlLmgiCisjaW5jbHVkZSAiUmVwbGF5Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlJlcGxheVNl
c3Npb24uaCIKKyNpbmNsdWRlICJSZXBsYXlTZXNzaW9uU2VnbWVudC5oIgorI2luY2x1ZGUgIlNl
cmlhbGl6YXRpb25NZXRob2RzLmgiCisjaW5jbHVkZSAiV2ViUmVwbGF5SW5wdXRzLmgiIC8vIEZv
ciBFbmNvZGluZ1RyYWl0czxJbnB1dFF1ZXVlPi4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVj
dG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpSZXBsYXk6
OlJlcGxheVBvc2l0aW9uPiBidWlsZEluc3BlY3Rvck9iamVjdEZvclBvc2l0aW9uKGNvbnN0IFJl
cGxheVBvc2l0aW9uJiBwb3NpdGlvbikKK3sKKyAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OlJlcGxh
eTo6UmVwbGF5UG9zaXRpb24+IHBvc2l0aW9uT2JqZWN0ID0gVHlwZUJ1aWxkZXI6OlJlcGxheTo6
UmVwbGF5UG9zaXRpb246OmNyZWF0ZSgpCisgICAgICAgIC5zZXRTZWdtZW50T2Zmc2V0KHBvc2l0
aW9uLnNlZ21lbnRPZmZzZXQpCisgICAgICAgIC5zZXRJbnB1dE9mZnNldChwb3NpdGlvbi5pbnB1
dE9mZnNldCk7CisKKyAgICByZXR1cm4gcG9zaXRpb25PYmplY3QucmVsZWFzZSgpOworfQorCitz
dGF0aWMgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UmVwbGF5OjpSZXBsYXlJbnB1dD4gYnVpbGRJ
bnNwZWN0b3JPYmplY3RGb3JJbnB1dChjb25zdCBOb25kZXRlcm1pbmlzdGljSW5wdXRCYXNlJiBp
bnB1dCwgc2l6ZV90IG9mZnNldCkKK3sKKyAgICBFbmNvZGVkVmFsdWUgZW5jb2RlZElucHV0ID0g
RW5jb2RpbmdUcmFpdHM8Tm9uZGV0ZXJtaW5pc3RpY0lucHV0QmFzZT46OmVuY29kZVZhbHVlKGlu
cHV0KTsKKyAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OlJlcGxheTo6UmVwbGF5SW5wdXQ+IGlucHV0
T2JqZWN0ID0gVHlwZUJ1aWxkZXI6OlJlcGxheTo6UmVwbGF5SW5wdXQ6OmNyZWF0ZSgpCisgICAg
ICAgIC5zZXRUeXBlKGlucHV0LnR5cGUoKSkKKyAgICAgICAgLnNldE9mZnNldChvZmZzZXQpCisg
ICAgICAgIC5zZXREYXRhKGVuY29kZWRJbnB1dC5hc09iamVjdCgpKTsKKworICAgIGlmIChpbnB1
dC5xdWV1ZSgpID09IElucHV0UXVldWU6OkV2ZW50TG9vcElucHV0KQorICAgICAgICBpbnB1dE9i
amVjdC0+c2V0VGltZXN0YW1wKHN0YXRpY19jYXN0PGNvbnN0IEV2ZW50TG9vcElucHV0QmFzZSY+
KGlucHV0KS50aW1lc3RhbXAoKSk7CisKKyAgICByZXR1cm4gaW5wdXRPYmplY3QucmVsZWFzZSgp
OworfQorCitzdGF0aWMgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UmVwbGF5OjpSZXBsYXlTZXNz
aW9uPiBidWlsZEluc3BlY3Rvck9iamVjdEZvclNlc3Npb24oUGFzc1JlZlB0cjxSZXBsYXlTZXNz
aW9uPiBwcnBTZXNzaW9uKQoreworICAgIFJlZlB0cjxSZXBsYXlTZXNzaW9uPiBzZXNzaW9uID0g
cHJwU2Vzc2lvbjsKKyAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFNlZ21lbnRJZGVudGlm
aWVyPj4gc2VnbWVudHMgPSBUeXBlQnVpbGRlcjo6QXJyYXk8U2VnbWVudElkZW50aWZpZXI+Ojpj
cmVhdGUoKTsKKworICAgIGZvciAoYXV0byBpdCA9IHNlc3Npb24tPmJlZ2luKCk7IGl0ICE9IHNl
c3Npb24tPmVuZCgpOyArK2l0KQorICAgICAgICBzZWdtZW50cy0+YWRkSXRlbSgoKml0KS0+aWRl
bnRpZmllcigpKTsKKworICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6UmVwbGF5OjpSZXBsYXlTZXNz
aW9uPiBzZXNzaW9uT2JqZWN0ID0gVHlwZUJ1aWxkZXI6OlJlcGxheTo6UmVwbGF5U2Vzc2lvbjo6
Y3JlYXRlKCkKKyAgICAgICAgLnNldElkKHNlc3Npb24tPmlkZW50aWZpZXIoKSkKKyAgICAgICAg
LnNldFRpbWVzdGFtcChzZXNzaW9uLT50aW1lc3RhbXAoKSkKKyAgICAgICAgLnNldFNlZ21lbnRz
KHNlZ21lbnRzLnJlbGVhc2UoKSk7CisKKyAgICByZXR1cm4gc2Vzc2lvbk9iamVjdC5yZWxlYXNl
KCk7Cit9CisKK2NsYXNzIFNlcmlhbGl6ZUlucHV0VG9KU09ORnVuY3RvciB7CitwdWJsaWM6Cisg
ICAgdHlwZWRlZiBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6UmVw
bGF5OjpSZXBsYXlJbnB1dD4+IFJldHVyblR5cGU7CisKKyAgICBTZXJpYWxpemVJbnB1dFRvSlNP
TkZ1bmN0b3IoKQorICAgICAgICA6IG1faW5wdXRzKFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVp
bGRlcjo6UmVwbGF5OjpSZXBsYXlJbnB1dD46OmNyZWF0ZSgpKSB7IH0KKyAgICB+U2VyaWFsaXpl
SW5wdXRUb0pTT05GdW5jdG9yKCkgeyB9CisKKyAgICB2b2lkIG9wZXJhdG9yKCkoc2l6ZV90IGlu
ZGV4LCBjb25zdCBOb25kZXRlcm1pbmlzdGljSW5wdXRCYXNlKiBpbnB1dCkKKyAgICB7CisgICAg
ICAgIExPRyhXZWJSZXBsYXksICIlLTI1cyBXcml0aW5nICU1enU6ICVzXG4iLCAiW1NlcmlhbGl6
ZUlucHV0XSIsIGluZGV4LCBpbnB1dC0+dHlwZSgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsK
KworICAgICAgICBpZiAoUmVmUHRyPFR5cGVCdWlsZGVyOjpSZXBsYXk6OlJlcGxheUlucHV0PiBz
ZXJpYWxpemVkSW5wdXQgPSBidWlsZEluc3BlY3Rvck9iamVjdEZvcklucHV0KCppbnB1dCwgaW5k
ZXgpKQorICAgICAgICAgICAgbV9pbnB1dHMtPmFkZEl0ZW0oc2VyaWFsaXplZElucHV0LnJlbGVh
c2UoKSk7CisgICAgfQorCisgICAgUmV0dXJuVHlwZSByZXR1cm5WYWx1ZSgpIHsgcmV0dXJuIG1f
aW5wdXRzLnJlbGVhc2UoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFy
cmF5PFR5cGVCdWlsZGVyOjpSZXBsYXk6OlJlcGxheUlucHV0Pj4gbV9pbnB1dHM7Cit9OworCitz
dGF0aWMgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZXNzaW9uU2VnbWVudD4gYnVp
bGRJbnNwZWN0b3JPYmplY3RGb3JTZWdtZW50KFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21l
bnQ+IHBycFNlZ21lbnQpCit7CisgICAgUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiBzZWdt
ZW50ID0gcHJwU2VnbWVudDsKKyAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWls
ZGVyOjpSZXBsYXk6OlJlcGxheUlucHV0UXVldWU+PiBxdWV1ZXNPYmplY3QgPSBUeXBlQnVpbGRl
cjo6QXJyYXk8VHlwZUJ1aWxkZXI6OlJlcGxheTo6UmVwbGF5SW5wdXRRdWV1ZT46OmNyZWF0ZSgp
OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KElucHV0
UXVldWU6OkNvdW50KTsgaSsrKSB7CisgICAgICAgIFNlcmlhbGl6ZUlucHV0VG9KU09ORnVuY3Rv
ciBjb2xsZWN0b3I7CisgICAgICAgIElucHV0UXVldWUgcXVldWUgPSBzdGF0aWNfY2FzdDxJbnB1
dFF1ZXVlPihpKTsKKyAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRl
cjo6UmVwbGF5OjpSZXBsYXlJbnB1dD4+IHF1ZXVlSW5wdXRzID0gc2VnbWVudC0+Y3JlYXRlRnVu
Y3RvckN1cnNvcigpLT5mb3JFYWNoSW5wdXRJblF1ZXVlKHF1ZXVlLCBjb2xsZWN0b3IpOworCisg
ICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6UmVwbGF5OjpSZXBsYXlJbnB1dFF1ZXVlPiBxdWV1
ZU9iamVjdCA9IFR5cGVCdWlsZGVyOjpSZXBsYXk6OlJlcGxheUlucHV0UXVldWU6OmNyZWF0ZSgp
CisgICAgICAgICAgICAuc2V0VHlwZShFbmNvZGluZ1RyYWl0czxJbnB1dFF1ZXVlPjo6ZW5jb2Rl
VmFsdWUocXVldWUpLmNvbnZlcnRUbzxTdHJpbmc+KCkpCisgICAgICAgICAgICAuc2V0SW5wdXRz
KHF1ZXVlSW5wdXRzKTsKKworICAgICAgICBxdWV1ZXNPYmplY3QtPmFkZEl0ZW0ocXVldWVPYmpl
Y3QucmVsZWFzZSgpKTsKKyAgICB9CisKKyAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OlJlcGxheTo6
U2Vzc2lvblNlZ21lbnQ+IHNlZ21lbnRPYmplY3QgPSBUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZXNz
aW9uU2VnbWVudDo6Y3JlYXRlKCkKKyAgICAgICAgLnNldElkKHNlZ21lbnQtPmlkZW50aWZpZXIo
KSkKKyAgICAgICAgLnNldFRpbWVzdGFtcChzZWdtZW50LT50aW1lc3RhbXAoKSkKKyAgICAgICAg
LnNldFF1ZXVlcyhxdWV1ZXNPYmplY3QucmVsZWFzZSgpKTsKKworICAgIHJldHVybiBzZWdtZW50
T2JqZWN0LnJlbGVhc2UoKTsKK30KKworSW5zcGVjdG9yUmVwbGF5QWdlbnQ6Okluc3BlY3RvclJl
cGxheUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3Bl
Y3RvclBhZ2VBZ2VudCogcGFnZUFnZW50KQorICAgIDogSW5zcGVjdG9yQWdlbnRCYXNlKEFTQ0lJ
TGl0ZXJhbCgiUmVwbGF5IiksIGluc3RydW1lbnRpbmdBZ2VudHMpCisgICAgLCBtX3BhZ2UoKnBh
Z2VBZ2VudC0+cGFnZSgpKQoreworfQorCitJbnNwZWN0b3JSZXBsYXlBZ2VudDo6fkluc3BlY3Rv
clJlcGxheUFnZW50KCkKK3sKKyAgICBBU1NFUlQoIW1fc2Vzc2lvbnNNYXAuc2l6ZSgpKTsKKyAg
ICBBU1NFUlQoIW1fc2VnbWVudHNNYXAuc2l6ZSgpKTsKK30KKworU2Vzc2lvblN0YXRlIEluc3Bl
Y3RvclJlcGxheUFnZW50OjpzZXNzaW9uU3RhdGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3Bh
Z2UucmVwbGF5Q29udHJvbGxlcigpLnNlc3Npb25TdGF0ZSgpOworfQorCit2b2lkIEluc3BlY3Rv
clJlcGxheUFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKiBmcm9udGVuZENoYW5uZWwsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBi
YWNrZW5kRGlzcGF0Y2hlcikKK3sKKyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlciA9IHN0ZDo6bWFr
ZV91bmlxdWU8SW5zcGVjdG9yUmVwbGF5RnJvbnRlbmREaXNwYXRjaGVyPihmcm9udGVuZENoYW5u
ZWwpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXIgPSBJbnNwZWN0b3JSZXBsYXlCYWNrZW5kRGlz
cGF0Y2hlcjo6Y3JlYXRlKGJhY2tlbmREaXNwYXRjaGVyLCB0aGlzKTsKKworICAgIG1faW5zdHJ1
bWVudGluZ0FnZW50cy0+c2V0SW5zcGVjdG9yUmVwbGF5QWdlbnQodGhpcyk7CisgICAgQVNTRVJU
KHNlc3Npb25TdGF0ZSgpID09IFNlc3Npb25TdGF0ZTo6SW5hY3RpdmUpOworCisgICAgLy8gS2Vl
cCB0cmFjayBvZiB0aGUgKGRlZmF1bHQpIHNlc3Npb24gY3VycmVudGx5IGxvYWRlZCBieSBSZXBs
YXlDb250cm9sbGVyLAorICAgIC8vIGFuZCBhbnkgc2VnbWVudHMgd2l0aGluIHRoZSBzZXNzaW9u
LgorICAgIFJlZlB0cjxSZXBsYXlTZXNzaW9uPiBzZXNzaW9uID0gbV9wYWdlLnJlcGxheUNvbnRy
b2xsZXIoKS5sb2FkZWRTZXNzaW9uKCk7CisgICAgbV9zZXNzaW9uc01hcC5hZGQoc2Vzc2lvbi0+
aWRlbnRpZmllcigpLCBzZXNzaW9uLnJlbGVhc2UoKSk7CisKKyAgICBmb3IgKGF1dG8gaXQgPSBz
ZXNzaW9uLT5iZWdpbigpOyBpdCAhPSBzZXNzaW9uLT5lbmQoKTsgKytpdCkKKyAgICAgICAgbV9z
ZWdtZW50c01hcC5hZGQoKCppdCktPmlkZW50aWZpZXIoKSwgKml0KTsKK30KKwordm9pZCBJbnNw
ZWN0b3JSZXBsYXlBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9y
RGlzY29ubmVjdFJlYXNvbikKK3sKKyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlciA9IG51bGxwdHI7
CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci5jbGVhcigpOworCisgICAgbV9pbnN0cnVtZW50aW5n
QWdlbnRzLT5zZXRJbnNwZWN0b3JSZXBsYXlBZ2VudChudWxscHRyKTsKKworICAgIC8vIERyb3Ag
cmVmZXJlbmNlcyB0byBhbGwgc2Vzc2lvbnMgYW5kIHNlZ21lbnRzLgorICAgIG1fc2Vzc2lvbnNN
YXAuY2xlYXIoKTsKKyAgICBtX3NlZ21lbnRzTWFwLmNsZWFyKCk7Cit9CisKK3ZvaWQgSW5zcGVj
dG9yUmVwbGF5QWdlbnQ6OmZyYW1lTmF2aWdhdGVkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCit7
CisgICAgaWYgKHNlc3Npb25TdGF0ZSgpICE9IFNlc3Npb25TdGF0ZTo6SW5hY3RpdmUpCisgICAg
ICAgIG1fcGFnZS5yZXBsYXlDb250cm9sbGVyKCkuZnJhbWVOYXZpZ2F0ZWQobG9hZGVyKTsKK30K
Kwordm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6ZnJhbWVEZXRhY2hlZChGcmFtZSogZnJhbWUp
Cit7CisgICAgaWYgKHNlc3Npb25TdGF0ZSgpICE9IFNlc3Npb25TdGF0ZTo6SW5hY3RpdmUpCisg
ICAgICAgIG1fcGFnZS5yZXBsYXlDb250cm9sbGVyKCkuZnJhbWVEZXRhY2hlZChmcmFtZSk7Cit9
CisKK3ZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnNlc3Npb25DcmVhdGVkKFBhc3NSZWZQdHI8
UmVwbGF5U2Vzc2lvbj4gcHJwU2Vzc2lvbikKK3sKKyAgICBSZWZQdHI8UmVwbGF5U2Vzc2lvbj4g
c2Vzc2lvbiA9IHBycFNlc3Npb247CisKKyAgICBhdXRvIHJlc3VsdCA9IG1fc2Vzc2lvbnNNYXAu
YWRkKHNlc3Npb24tPmlkZW50aWZpZXIoKSwgc2Vzc2lvbik7CisgICAgLy8gQ2FuJ3QgaGF2ZSB0
d28gc2Vzc2lvbnMgd2l0aCBzYW1lIGlkZW50aWZpZXIuCisgICAgQVNTRVJUX1VOVVNFRChyZXN1
bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKKworICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5zZXNz
aW9uQ3JlYXRlZChzZXNzaW9uLT5pZGVudGlmaWVyKCkpOworfQorCit2b2lkIEluc3BlY3RvclJl
cGxheUFnZW50OjpzZXNzaW9uTW9kaWZpZWQoUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uPiBzZXNz
aW9uKQoreworICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5zZXNzaW9uTW9kaWZpZWQoc2Vzc2lv
bi0+aWRlbnRpZmllcigpKTsKK30KKwordm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6c2Vzc2lv
bkxvYWRlZChQYXNzUmVmUHRyPFJlcGxheVNlc3Npb24+IHBycFNlc3Npb24pCit7CisgICAgUmVm
UHRyPFJlcGxheVNlc3Npb24+IHNlc3Npb24gPSBwcnBTZXNzaW9uOworCisgICAgLy8gSW4gY2Fz
ZSB3ZSBkaWRuJ3Qga25vdyBhYm91dCB0aGUgbG9hZGVkIHNlc3Npb24sIGFkZCBoZXJlLgorICAg
IG1fc2Vzc2lvbnNNYXAuYWRkKHNlc3Npb24tPmlkZW50aWZpZXIoKSwgc2Vzc2lvbik7CisKKyAg
ICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+c2Vzc2lvbkxvYWRlZChzZXNzaW9uLT5pZGVudGlmaWVy
KCkpOworfQorCit2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpzZWdtZW50Q3JlYXRlZChQYXNz
UmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiBwcnBTZWdtZW50KQoreworICAgIFJlZlB0cjxS
ZXBsYXlTZXNzaW9uU2VnbWVudD4gc2VnbWVudCA9IHBycFNlZ21lbnQ7CisKKyAgICBhdXRvIHJl
c3VsdCA9IG1fc2VnbWVudHNNYXAuYWRkKHNlZ21lbnQtPmlkZW50aWZpZXIoKSwgc2VnbWVudCk7
CisgICAgLy8gQ2FuJ3QgaGF2ZSB0d28gc2VnbWVudHMgd2l0aCB0aGUgc2FtZSBpZGVudGlmaWVy
LgorICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CisKKyAgICBt
X2Zyb250ZW5kRGlzcGF0Y2hlci0+c2VnbWVudENyZWF0ZWQoc2VnbWVudC0+aWRlbnRpZmllcigp
KTsKK30KKwordm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6c2VnbWVudENvbXBsZXRlZChQYXNz
UmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiBzZWdtZW50KQoreworICAgIG1fZnJvbnRlbmRE
aXNwYXRjaGVyLT5zZWdtZW50Q29tcGxldGVkKHNlZ21lbnQtPmlkZW50aWZpZXIoKSk7Cit9CisK
K3ZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnNlZ21lbnRMb2FkZWQoUGFzc1JlZlB0cjxSZXBs
YXlTZXNzaW9uU2VnbWVudD4gcHJwU2VnbWVudCkKK3sKKyAgICBSZWZQdHI8UmVwbGF5U2Vzc2lv
blNlZ21lbnQ+IHNlZ21lbnQgPSBwcnBTZWdtZW50OworCisgICAgLy8gSW4gY2FzZSB3ZSBkaWRu
J3Qga25vdyBhYm91dCB0aGUgbG9hZGVkIHNlZ21lbnQsIGFkZCBoZXJlLgorICAgIG1fc2VnbWVu
dHNNYXAuYWRkKHNlZ21lbnQtPmlkZW50aWZpZXIoKSwgc2VnbWVudCk7CisKKyAgICBtX2Zyb250
ZW5kRGlzcGF0Y2hlci0+c2VnbWVudExvYWRlZChzZWdtZW50LT5pZGVudGlmaWVyKCkpOworfQor
Cit2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpzZWdtZW50VW5sb2FkZWQoKQoreworICAgIG1f
ZnJvbnRlbmREaXNwYXRjaGVyLT5zZWdtZW50VW5sb2FkZWQoKTsKK30KKwordm9pZCBJbnNwZWN0
b3JSZXBsYXlBZ2VudDo6Y2FwdHVyZVN0YXJ0ZWQoKQoreworICAgIExPRyhXZWJSZXBsYXksICIt
LS0tLUNBUFRVUkUgU1RBUlQtLS0tLSIpOworCisgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmNh
cHR1cmVTdGFydGVkKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmNhcHR1cmVT
dG9wcGVkKCkKK3sKKyAgICBMT0coV2ViUmVwbGF5LCAiLS0tLS1DQVBUVVJFIFNUT1AtLS0tLSIp
OworCisgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmNhcHR1cmVTdG9wcGVkKCk7Cit9CisKK3Zv
aWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnBsYXliYWNrU3RhcnRlZCgpCit7CisgICAgTE9HKFdl
YlJlcGxheSwgIi0tLS0tUkVQTEFZIFNUQVJULS0tLS0iKTsKKworICAgIG1fZnJvbnRlbmREaXNw
YXRjaGVyLT5wbGF5YmFja1N0YXJ0ZWQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2Vu
dDo6cGxheWJhY2tQYXVzZWQoY29uc3QgUmVwbGF5UG9zaXRpb24mIHBvc2l0aW9uKQoreworICAg
IExPRyhXZWJSZXBsYXksICItLS0tLVJFUExBWSBQQVVTRUQtLS0tLSIpOworCisgICAgbV9mcm9u
dGVuZERpc3BhdGNoZXItPnBsYXliYWNrUGF1c2VkKGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yUG9z
aXRpb24ocG9zaXRpb24pKTsKK30KKwordm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6cGxheWJh
Y2tIaXRQb3NpdGlvbihjb25zdCBSZXBsYXlQb3NpdGlvbiYgcG9zaXRpb24pCit7CisgICAgbV9m
cm9udGVuZERpc3BhdGNoZXItPnBsYXliYWNrSGl0UG9zaXRpb24oYnVpbGRJbnNwZWN0b3JPYmpl
Y3RGb3JQb3NpdGlvbihwb3NpdGlvbiksIG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpKTsK
K30KKwordm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6c3RhcnRDYXB0dXJpbmcoRXJyb3JTdHJp
bmcqIGVycm9yU3RyaW5nKQoreworICAgIGlmIChzZXNzaW9uU3RhdGUoKSAhPSBTZXNzaW9uU3Rh
dGU6OkluYWN0aXZlKSB7CisgICAgICAgICplcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiQ2Fu
J3Qgc3RhcnQgY2FwdHVyaW5nIGlmIHRoZSBzZXNzaW9uIGlzIGFscmVhZHkgY2FwdHVyaW5nIG9y
IHJlcGxheWluZy4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fcGFnZS5yZXBs
YXlDb250cm9sbGVyKCkuc3RhcnRDYXB0dXJpbmcoKTsKK30KKwordm9pZCBJbnNwZWN0b3JSZXBs
YXlBZ2VudDo6c3RvcENhcHR1cmluZyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcpCit7CisgICAg
aWYgKHNlc3Npb25TdGF0ZSgpICE9IFNlc3Npb25TdGF0ZTo6Q2FwdHVyaW5nKSB7CisgICAgICAg
ICplcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiQ2FuJ3Qgc3RvcCBjYXB0dXJpbmcgaWYgY2Fw
dHVyZSBpcyBub3QgaW4gcHJvZ3Jlc3MuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBtX3BhZ2UucmVwbGF5Q29udHJvbGxlcigpLnN0b3BDYXB0dXJpbmcoKTsKK30KKwordm9pZCBJ
bnNwZWN0b3JSZXBsYXlBZ2VudDo6cmVwbGF5VG9Qb3NpdGlvbihFcnJvclN0cmluZyogZXJyb3JT
dHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBwb3NpdGlvbk9iamVjdCwgYm9v
bCBmYXN0UmVwbGF5KQoreworICAgIFJlcGxheVBvc2l0aW9uIHBvc2l0aW9uOworICAgIGlmICgh
cG9zaXRpb25PYmplY3QtPmdldE51bWJlcihBU0NJSUxpdGVyYWwoInNlZ21lbnRPZmZzZXQiKSwg
JnBvc2l0aW9uLnNlZ21lbnRPZmZzZXQpKSB7CisgICAgICAgICplcnJvclN0cmluZyA9IEFTQ0lJ
TGl0ZXJhbCgiQ291bGRuJ3QgZGVjb2RlIFJlcGxheVBvc2l0aW9uIHNlZ21lbnQgb2Zmc2V0IHBy
b3ZpZGVkIHRvIFJlcGxheUFnZW50LnJlcGxheVRvUG9zaXRpb24uIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoIXBvc2l0aW9uT2JqZWN0LT5nZXROdW1iZXIoQVNDSUlMaXRl
cmFsKCJpbnB1dE9mZnNldCIpLCAmcG9zaXRpb24uaW5wdXRPZmZzZXQpKSB7CisgICAgICAgICpl
cnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiQ291bGRuJ3QgZGVjb2RlIFJlcGxheVBvc2l0aW9u
IGlucHV0IG9mZnNldCBwcm92aWRlZCB0byBSZXBsYXlBZ2VudC5yZXBsYXlUb1Bvc2l0aW9uLiIp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHNlc3Npb25TdGF0ZSgpICE9IFNl
c3Npb25TdGF0ZTo6SW5hY3RpdmUpIHsKKyAgICAgICAgKmVycm9yU3RyaW5nID0gQVNDSUlMaXRl
cmFsKCJDYW4ndCBzdGFydCByZXBsYXkgd2hpbGUgY2FwdHVyZSBvciBwbGF5YmFjayBpcyBpbiBw
cm9ncmVzcy4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fcGFnZS5yZXBsYXlD
b250cm9sbGVyKCkucmVwbGF5VG9Qb3NpdGlvbihwb3NpdGlvbiwgKGZhc3RSZXBsYXkpID8gRGlz
cGF0Y2hTcGVlZDo6RmFzdEZvcndhcmQgOiBEaXNwYXRjaFNwZWVkOjpSZWFsVGltZSk7Cit9CisK
K3ZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnJlcGxheVRvQ29tcGxldGlvbihFcnJvclN0cmlu
ZyogZXJyb3JTdHJpbmcsIGJvb2wgZmFzdFJlcGxheSkKK3sKKyAgICBpZiAoc2Vzc2lvblN0YXRl
KCkgIT0gU2Vzc2lvblN0YXRlOjpJbmFjdGl2ZSkgeworICAgICAgICAqZXJyb3JTdHJpbmcgPSBB
U0NJSUxpdGVyYWwoIkNhbid0IHN0YXJ0IHJlcGxheSB3aGlsZSBjYXB0dXJlIG9yIHBsYXliYWNr
IGlzIGluIHByb2dyZXNzLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9wYWdl
LnJlcGxheUNvbnRyb2xsZXIoKS5yZXBsYXlUb0NvbXBsZXRpb24oKGZhc3RSZXBsYXkpID8gRGlz
cGF0Y2hTcGVlZDo6RmFzdEZvcndhcmQgOiBEaXNwYXRjaFNwZWVkOjpSZWFsVGltZSk7Cit9CisK
K3ZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnBhdXNlUGxheWJhY2soRXJyb3JTdHJpbmcqIGVy
cm9yU3RyaW5nKQoreworICAgIGlmIChzZXNzaW9uU3RhdGUoKSAhPSBTZXNzaW9uU3RhdGU6OlJl
cGxheWluZykgeworICAgICAgICAqZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkNhbid0IHBh
dXNlIHBsYXliYWNrIGlmIHBsYXliYWNrIGlzIG5vdCBpbiBwcm9ncmVzcy4iKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIG1fcGFnZS5yZXBsYXlDb250cm9sbGVyKCkucGF1c2VQbGF5
YmFjaygpOworfQorCit2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpjYW5jZWxQbGF5YmFjayhF
cnJvclN0cmluZyogZXJyb3JTdHJpbmcpCit7CisgICAgaWYgKHNlc3Npb25TdGF0ZSgpID09IFNl
c3Npb25TdGF0ZTo6Q2FwdHVyaW5nKSB7CisgICAgICAgICplcnJvclN0cmluZyA9IEFTQ0lJTGl0
ZXJhbCgiQ2FuJ3QgY2FuY2VsIHBsYXliYWNrIGlmIGNhcHR1cmUgaXMgaW4gcHJvZ3Jlc3MuIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3BhZ2UucmVwbGF5Q29udHJvbGxlcigp
LmNhbmNlbFBsYXliYWNrKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnN3aXRj
aFNlc3Npb24oRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBTZXNzaW9uSWRlbnRpZmllciBpZGVu
dGlmaWVyKQoreworICAgIEFTU0VSVChpZGVudGlmaWVyID4gMCk7CisKKyAgICBpZiAoc2Vzc2lv
blN0YXRlKCkgIT0gU2Vzc2lvblN0YXRlOjpJbmFjdGl2ZSkgeworICAgICAgICAqZXJyb3JTdHJp
bmcgPSBBU0NJSUxpdGVyYWwoIkNhbid0IHN3aXRjaCBzZXNzaW9ucyB1bmxlc3MgdGhlIHNlc3Np
b24gaXMgbmVpdGhlciBjYXB0dXJpbmcgb3IgcmVwbGF5aW5nLiIpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgUmVmUHRyPFJlcGxheVNlc3Npb24+IHNlc3Npb24gPSBmaW5kU2Vzc2lv
bihlcnJvclN0cmluZywgaWRlbnRpZmllcik7CisgICAgaWYgKCFzZXNzaW9uKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX3BhZ2UucmVwbGF5Q29udHJvbGxlcigpLnN3aXRjaFNlc3Npb24oc2Vz
c2lvbik7Cit9CisKK3ZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6Omluc2VydFNlc3Npb25TZWdt
ZW50KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgU2Vzc2lvbklkZW50aWZpZXIgc2Vzc2lvbklk
ZW50aWZpZXIsIFNlZ21lbnRJZGVudGlmaWVyIHNlZ21lbnRJZGVudGlmaWVyLCBpbnQgc2VnbWVu
dEluZGV4KQoreworICAgIEFTU0VSVChzZXNzaW9uSWRlbnRpZmllciA+IDApOworICAgIEFTU0VS
VChzZWdtZW50SWRlbnRpZmllciA+IDApOworICAgIEFTU0VSVChzZWdtZW50SW5kZXggPj0gMCk7
CisKKyAgICBSZWZQdHI8UmVwbGF5U2Vzc2lvbj4gc2Vzc2lvbiA9IGZpbmRTZXNzaW9uKGVycm9y
U3RyaW5nLCBzZXNzaW9uSWRlbnRpZmllcik7CisgICAgUmVmUHRyPFJlcGxheVNlc3Npb25TZWdt
ZW50PiBzZWdtZW50ID0gZmluZFNlZ21lbnQoZXJyb3JTdHJpbmcsIHNlZ21lbnRJZGVudGlmaWVy
KTsKKworICAgIGlmICghc2Vzc2lvbiB8fCAhc2VnbWVudCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4oc2VnbWVudEluZGV4KSA+IHNlc3Npb24tPnNpemUo
KSkgeworICAgICAgICAqZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkludmFsaWQgc2VnbWVu
dCBpbmRleC4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChzZXNzaW9uID09
IG1fcGFnZS5yZXBsYXlDb250cm9sbGVyKCkubG9hZGVkU2Vzc2lvbigpICYmIHNlc3Npb25TdGF0
ZSgpICE9IFNlc3Npb25TdGF0ZTo6SW5hY3RpdmUpIHsKKyAgICAgICAgKmVycm9yU3RyaW5nID0g
QVNDSUlMaXRlcmFsKCJDYW4ndCBtb2RpZnkgYSBsb2FkZWQgc2Vzc2lvbiB1bmxlc3MgdGhlIHNl
c3Npb24gaXMgaW5hY3RpdmUuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzZXNz
aW9uLT5pbnNlcnRTZWdtZW50KHNlZ21lbnRJbmRleCwgc2VnbWVudCk7CisgICAgc2Vzc2lvbk1v
ZGlmaWVkKHNlc3Npb24pOworfQorCit2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpyZW1vdmVT
ZXNzaW9uU2VnbWVudChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIFNlc3Npb25JZGVudGlmaWVy
IGlkZW50aWZpZXIsIGludCBzZWdtZW50SW5kZXgpCit7CisgICAgQVNTRVJUKGlkZW50aWZpZXIg
PiAwKTsKKyAgICBBU1NFUlQoc2VnbWVudEluZGV4ID49IDApOworCisgICAgUmVmUHRyPFJlcGxh
eVNlc3Npb24+IHNlc3Npb24gPSBmaW5kU2Vzc2lvbihlcnJvclN0cmluZywgaWRlbnRpZmllcik7
CisKKyAgICBpZiAoIXNlc3Npb24pCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChzdGF0aWNf
Y2FzdDxzaXplX3Q+KHNlZ21lbnRJbmRleCkgPj0gc2Vzc2lvbi0+c2l6ZSgpKSB7CisgICAgICAg
ICplcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBzZWdtZW50IGluZGV4LiIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHNlc3Npb24gPT0gbV9wYWdlLnJlcGxh
eUNvbnRyb2xsZXIoKS5sb2FkZWRTZXNzaW9uKCkgJiYgc2Vzc2lvblN0YXRlKCkgIT0gU2Vzc2lv
blN0YXRlOjpJbmFjdGl2ZSkgeworICAgICAgICAqZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwo
IkNhbid0IG1vZGlmeSBhIGxvYWRlZCBzZXNzaW9uIHVubGVzcyB0aGUgc2Vzc2lvbiBpcyBpbmFj
dGl2ZS4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNlc3Npb24tPnJlbW92ZVNl
Z21lbnQoc2VnbWVudEluZGV4KTsKKyAgICBzZXNzaW9uTW9kaWZpZWQoc2Vzc2lvbik7Cit9CisK
K1Bhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvbj4gSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmZpbmRTZXNz
aW9uKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgU2Vzc2lvbklkZW50aWZpZXIgaWRlbnRpZmll
cikKK3sKKyAgICBBU1NFUlQoaWRlbnRpZmllciA+IDApOworCisgICAgYXV0byBpdCA9IG1fc2Vz
c2lvbnNNYXAuZmluZChpZGVudGlmaWVyKTsKKyAgICBpZiAoaXQgPT0gbV9zZXNzaW9uc01hcC5l
bmQoKSkgeworICAgICAgICAqZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkNvdWxkbid0IGZp
bmQgc2Vzc2lvbiB3aXRoIHNwZWNpZmllZCBpZGVudGlmaWVyIik7CisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIH0KKworICAgIHJldHVybiBpdC0+dmFsdWU7Cit9CisKK1Bhc3NSZWZQdHI8
UmVwbGF5U2Vzc2lvblNlZ21lbnQ+IEluc3BlY3RvclJlcGxheUFnZW50OjpmaW5kU2VnbWVudChF
cnJvclN0cmluZyogZXJyb3JTdHJpbmcsIFNlZ21lbnRJZGVudGlmaWVyIGlkZW50aWZpZXIpCit7
CisgICAgQVNTRVJUKGlkZW50aWZpZXIgPiAwKTsKKworICAgIGF1dG8gaXQgPSBtX3NlZ21lbnRz
TWFwLmZpbmQoaWRlbnRpZmllcik7CisgICAgaWYgKGl0ID09IG1fc2VnbWVudHNNYXAuZW5kKCkp
IHsKKyAgICAgICAgKmVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJDb3VsZG4ndCBmaW5kIHNl
Z21lbnQgd2l0aCBzcGVjaWZpZWQgaWRlbnRpZmllciIpOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisKKyAgICByZXR1cm4gaXQtPnZhbHVlOworfQorCit2b2lkIEluc3BlY3RvclJl
cGxheUFnZW50OjpnZXRBdmFpbGFibGVTZXNzaW9ucyhFcnJvclN0cmluZyosIFJlZlB0cjxJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTZXNzaW9uSWRlbnRpZmllcj4+JiBzZXNzaW9uc0xp
c3QpCit7CisgICAgc2Vzc2lvbnNMaXN0ID0gVHlwZUJ1aWxkZXI6OkFycmF5PFNlc3Npb25JZGVu
dGlmaWVyPjo6Y3JlYXRlKCk7CisgICAgZm9yIChhdXRvIGl0ID0gbV9zZXNzaW9uc01hcC5iZWdp
bigpOyBpdCAhPSBtX3Nlc3Npb25zTWFwLmVuZCgpOyArK2l0KQorICAgICAgICBzZXNzaW9uc0xp
c3QtPmFkZEl0ZW0oaXQtPmtleSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6Omdl
dFNlcmlhbGl6ZWRTZXNzaW9uKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgU2Vzc2lvbklkZW50
aWZpZXIgaWRlbnRpZmllciwgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJlcGxheTo6
UmVwbGF5U2Vzc2lvbj4mIHNlcmlhbGl6ZWRPYmplY3QpCit7CisgICAgUmVmUHRyPFJlcGxheVNl
c3Npb24+IHNlc3Npb24gPSBmaW5kU2Vzc2lvbihlcnJvclN0cmluZywgaWRlbnRpZmllcik7Cisg
ICAgaWYgKCFzZXNzaW9uKSB7CisgICAgICAgICplcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgi
Q291bGRuJ3QgZmluZCB0aGUgc3BlY2lmaWVkIHNlc3Npb24uIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBzZXJpYWxpemVkT2JqZWN0ID0gYnVpbGRJbnNwZWN0b3JPYmplY3RGb3JT
ZXNzaW9uKHNlc3Npb24pOworfQorCit2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpnZXRTZXJp
YWxpemVkU2VnbWVudChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIFNlZ21lbnRJZGVudGlmaWVy
IGlkZW50aWZpZXIsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlc3Np
b25TZWdtZW50PiYgc2VyaWFsaXplZE9iamVjdCkKK3sKKyAgICBSZWZQdHI8UmVwbGF5U2Vzc2lv
blNlZ21lbnQ+IHNlZ21lbnQgPSBmaW5kU2VnbWVudChlcnJvclN0cmluZywgaWRlbnRpZmllcik7
CisgICAgaWYgKCFzZWdtZW50KSB7CisgICAgICAgICplcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJh
bCgiQ291bGRuJ3QgZmluZCB0aGUgc3BlY2lmaWVkIHNlZ21lbnQuIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBzZXJpYWxpemVkT2JqZWN0ID0gYnVpbGRJbnNwZWN0b3JPYmplY3RG
b3JTZWdtZW50KHNlZ21lbnQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SKSAmJiBFTkFCTEUoV0VCX1JFUExBWSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXBsYXlBZ2VudC5oIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlcGxheUFnZW50LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzRm
NGNkOGM0NTNjODhkMTg0MWQ5OTVjMGVhMDgwZGIzODBlYzFlZgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXBsYXlBZ2VudC5oCkBAIC0wLDAg
KzEsMTI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTICJBUworICogSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEKKyAqIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIEluc3BlY3RvclJlcGxheUFnZW50X2gKKyNkZWZpbmUgSW5zcGVjdG9yUmVw
bGF5QWdlbnRfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikgJiYgRU5BQkxFKFdFQl9SRVBMQVkp
CisKKyNpbmNsdWRlICJJbnNwZWN0b3JXZWJBZ2VudEJhc2UuaCIKKyNpbmNsdWRlICJJbnNwZWN0
b3JXZWJCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JXZWJGcm9udGVu
ZERpc3BhdGNoZXJzLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIERvY3VtZW50TG9hZGVyOworY2xhc3MgRnJhbWU7CitjbGFzcyBJbnNw
ZWN0b3JQYWdlQWdlbnQ7CitjbGFzcyBJbnN0cnVtZW50aW5nQWdlbnRzOworY2xhc3MgUGFnZTsK
K2NsYXNzIFJlcGxheVNlc3Npb247CitjbGFzcyBSZXBsYXlTZXNzaW9uU2VnbWVudDsKKworZW51
bSBjbGFzcyBTZXNzaW9uU3RhdGU7CisKK3N0cnVjdCBSZXBsYXlQb3NpdGlvbjsKKwordHlwZWRl
ZiBTdHJpbmcgRXJyb3JTdHJpbmc7Cit0eXBlZGVmIGludCBTZXNzaW9uSWRlbnRpZmllcjsKK3R5
cGVkZWYgaW50IFNlZ21lbnRJZGVudGlmaWVyOworCitjbGFzcyBJbnNwZWN0b3JSZXBsYXlBZ2Vu
dCBmaW5hbAorICAgIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZQorICAgICwgcHVibGljIElu
c3BlY3Rvcjo6SW5zcGVjdG9yUmVwbGF5QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JSZXBsYXlBZ2VudCk7CitwdWJsaWM6CisgICAg
SW5zcGVjdG9yUmVwbGF5QWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3RvclBhZ2VB
Z2VudCopOworICAgIH5JbnNwZWN0b3JSZXBsYXlBZ2VudCgpOworCisgICAgdmlydHVhbCB2b2lk
IGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6Okluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCosIEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVj
dG9yOjpJbnNwZWN0b3JEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsKKworICAgIC8vIENhbGxi
YWNrcyBmcm9tIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi4KKyAgICB2b2lkIGZyYW1lTmF2aWdh
dGVkKERvY3VtZW50TG9hZGVyKik7CisgICAgdm9pZCBmcmFtZURldGFjaGVkKEZyYW1lKik7CisK
KyAgICAvLyBOb3RpZmljYXRpb25zIGZyb20gUmVwbGF5Q29udHJvbGxlci4KKyAgICB2b2lkIHNl
c3Npb25DcmVhdGVkKFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvbj4pOworICAgIC8vIFRoaXMgaXMg
Y2FsbGVkIGludGVybmFsbHkgKHdoZW4gYWRkaW5nL3JlbW92aW5nKSBhbmQgYnkgUmVwbGF5Q29u
dHJvbGxlciBkdXJpbmcgY2FwdHVyZS4KKyAgICB2b2lkIHNlc3Npb25Nb2RpZmllZChQYXNzUmVm
UHRyPFJlcGxheVNlc3Npb24+KTsKKyAgICB2b2lkIHNlc3Npb25Mb2FkZWQoUGFzc1JlZlB0cjxS
ZXBsYXlTZXNzaW9uPik7CisKKyAgICB2b2lkIHNlZ21lbnRDcmVhdGVkKFBhc3NSZWZQdHI8UmVw
bGF5U2Vzc2lvblNlZ21lbnQ+KTsKKyAgICB2b2lkIHNlZ21lbnRDb21wbGV0ZWQoUGFzc1JlZlB0
cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4pOworICAgIHZvaWQgc2VnbWVudExvYWRlZChQYXNzUmVm
UHRyPFJlcGxheVNlc3Npb25TZWdtZW50Pik7CisgICAgdm9pZCBzZWdtZW50VW5sb2FkZWQoKTsK
KworICAgIHZvaWQgY2FwdHVyZVN0YXJ0ZWQoKTsKKyAgICB2b2lkIGNhcHR1cmVTdG9wcGVkKCk7
CisKKyAgICB2b2lkIHBsYXliYWNrU3RhcnRlZCgpOworICAgIHZvaWQgcGxheWJhY2tQYXVzZWQo
Y29uc3QgUmVwbGF5UG9zaXRpb24mKTsKKyAgICB2b2lkIHBsYXliYWNrSGl0UG9zaXRpb24oY29u
c3QgUmVwbGF5UG9zaXRpb24mKTsKKworICAgIC8vIENhbGxzIGZyb20gdGhlIEluc3BlY3RvciBm
cm9udGVuZC4KKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRDYXB0dXJpbmcoRXJyb3JTdHJpbmcqKSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcENhcHR1cmluZyhFcnJvclN0cmluZyopIG92
ZXJyaWRlOworCisgICAgdmlydHVhbCB2b2lkIHJlcGxheVRvUG9zaXRpb24oRXJyb3JTdHJpbmcq
LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiwgYm9vbCBzaG91bGRG
YXN0Rm9yd2FyZCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHJlcGxheVRvQ29tcGxldGlv
bihFcnJvclN0cmluZyosIGJvb2wgc2hvdWxkRmFzdEZvcndhcmQpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBwYXVzZVBsYXliYWNrKEVycm9yU3RyaW5nKikgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB2b2lkIGNhbmNlbFBsYXliYWNrKEVycm9yU3RyaW5nKikgb3ZlcnJpZGU7CisKKyAgICB2
aXJ0dWFsIHZvaWQgc3dpdGNoU2Vzc2lvbihFcnJvclN0cmluZyosIFNlc3Npb25JZGVudGlmaWVy
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0U2Vzc2lvblNlZ21lbnQoRXJyb3JT
dHJpbmcqLCBTZXNzaW9uSWRlbnRpZmllciwgU2VnbWVudElkZW50aWZpZXIsIGludCBzZWdtZW50
SW5kZXgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVTZXNzaW9uU2VnbWVudChF
cnJvclN0cmluZyosIFNlc3Npb25JZGVudGlmaWVyLCBpbnQgc2VnbWVudEluZGV4KSBvdmVycmlk
ZTsKKworICAgIHZpcnR1YWwgdm9pZCBnZXRBdmFpbGFibGVTZXNzaW9ucyhFcnJvclN0cmluZyos
IFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTZXNzaW9uSWRlbnRpZmllcj4+
Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGdldFNlcmlhbGl6ZWRTZXNzaW9uKEVycm9y
U3RyaW5nKiwgU2Vzc2lvbklkZW50aWZpZXIsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpSZXBsYXk6OlJlcGxheVNlc3Npb24+Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGdl
dFNlcmlhbGl6ZWRTZWdtZW50KEVycm9yU3RyaW5nKiwgU2VnbWVudElkZW50aWZpZXIsIFJlZlB0
cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlc3Npb25TZWdtZW50PiYpIG92ZXJy
aWRlOworCitwcml2YXRlOgorICAgIFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvbj4gZmluZFNlc3Np
b24oRXJyb3JTdHJpbmcqLCBTZXNzaW9uSWRlbnRpZmllcik7CisgICAgUGFzc1JlZlB0cjxSZXBs
YXlTZXNzaW9uU2VnbWVudD4gZmluZFNlZ21lbnQoRXJyb3JTdHJpbmcqLCBTZWdtZW50SWRlbnRp
Zmllcik7CisgICAgU2Vzc2lvblN0YXRlIHNlc3Npb25TdGF0ZSgpIGNvbnN0OworCisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yUmVwbGF5RnJvbnRlbmREaXNwYXRjaGVy
PiBtX2Zyb250ZW5kRGlzcGF0Y2hlcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JS
ZXBsYXlCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKKyAgICBQYWdlJiBt
X3BhZ2U7CisKKyAgICBIYXNoTWFwPGludCwgUmVmUHRyPFJlcGxheVNlc3Npb24+LCBXVEY6Oklu
dEhhc2g8aW50PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxpbnQ+PiBtX3Nl
c3Npb25zTWFwOworICAgIEhhc2hNYXA8aW50LCBSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+
LCBXVEY6OkludEhhc2g8aW50PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxp
bnQ+PiBtX3NlZ21lbnRzTWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUikgJiYgRU5BQkxFKFdFQl9SRVBMQVkpCisKKyNlbmRpZiAv
LyBJbnNwZWN0b3JSZXBsYXlBZ2VudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zdHJ1bWVudGluZ0FnZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zdHJ1bWVudGluZ0FnZW50cy5jcHAKaW5kZXggOWNiNGNmNjU1MGZiM2JiOGYxZGVhZDNiYzEy
ZTQ0MWY0YTdmMzlmNy4uYmQwYTRlYTg4ZDI2YWZiNWExZWMxMzZmYmVhNjkxMjgzZGRlNGFmZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3RydW1lbnRpbmdBZ2VudHMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnN0cnVtZW50aW5nQWdlbnRzLmNw
cApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBA
IC01Niw2ICs1Nyw5IEBAIEluc3RydW1lbnRpbmdBZ2VudHM6Okluc3RydW1lbnRpbmdBZ2VudHMo
SW5zcGVjdG9yRW52aXJvbm1lbnQmIGVudmlyb25tZW50KQogICAgICwgbV93b3JrZXJSdW50aW1l
QWdlbnQobnVsbHB0cikKICAgICAsIG1faW5zcGVjdG9yVGltZWxpbmVBZ2VudChudWxscHRyKQog
ICAgICwgbV9pbnNwZWN0b3JET01TdG9yYWdlQWdlbnQobnVsbHB0cikKKyNpZiBFTkFCTEUoV0VC
X1JFUExBWSkKKyAgICAsIG1faW5zcGVjdG9yUmVwbGF5QWdlbnQobnVsbHB0cikKKyNlbmRpZgog
I2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAgICAgLCBtX2luc3BlY3RvckRhdGFiYXNlQWdlbnQo
bnVsbHB0cikKICNlbmRpZgpAQCAtODEsNiArODUsOSBAQCB2b2lkIEluc3RydW1lbnRpbmdBZ2Vu
dHM6OnJlc2V0KCkKICAgICBtX3dvcmtlclJ1bnRpbWVBZ2VudCA9IG51bGxwdHI7CiAgICAgbV9p
bnNwZWN0b3JUaW1lbGluZUFnZW50ID0gbnVsbHB0cjsKICAgICBtX2luc3BlY3RvckRPTVN0b3Jh
Z2VBZ2VudCA9IG51bGxwdHI7CisjaWYgRU5BQkxFKFdFQl9SRVBMQVkpCisgICAgbV9pbnNwZWN0
b3JSZXBsYXlBZ2VudCA9IG51bGxwdHI7CisjZW5kaWYKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNF
KQogICAgIG1faW5zcGVjdG9yRGF0YWJhc2VBZ2VudCA9IG51bGxwdHI7CiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnN0cnVtZW50aW5nQWdlbnRzLmggYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zdHJ1bWVudGluZ0FnZW50cy5oCmluZGV4IDgyOGNj
ZTBiYTUxMGNiMDM2NWEwOWE3ZDI2OTkzZWFhZWFmNDg3NjkuLjMzNjJlMTI3YTRjNjYwMWVjOWNk
MGQwNjQ5NjAwNmQ2MjRiN2E5Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnN0cnVtZW50aW5nQWdlbnRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3RydW1lbnRpbmdBZ2VudHMuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCkBAIC01NSw2ICs1Niw3IEBAIGNsYXNzIEluc3BlY3RvckxheWVyVHJl
ZUFnZW50OwogY2xhc3MgSW5zcGVjdG9yUGFnZUFnZW50OwogY2xhc3MgSW5zcGVjdG9yUHJvZmls
ZXJBZ2VudDsKIGNsYXNzIEluc3BlY3RvclJlc291cmNlQWdlbnQ7CitjbGFzcyBJbnNwZWN0b3JS
ZXBsYXlBZ2VudDsKIGNsYXNzIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ7CiBjbGFzcyBJbnNwZWN0
b3JXb3JrZXJBZ2VudDsKIGNsYXNzIFBhZ2U7CkBAIC0xMDcsNiArMTA5LDExIEBAIHB1YmxpYzoK
ICAgICBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQqIGluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudCgp
IGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OyB9CiAgICAgdm9pZCBz
ZXRJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQoSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50KiBhZ2Vu
dCkgeyBtX2luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudCA9IGFnZW50OyB9CiAKKyNpZiBFTkFCTEUo
V0VCX1JFUExBWSkKKyAgICBJbnNwZWN0b3JSZXBsYXlBZ2VudCogaW5zcGVjdG9yUmVwbGF5QWdl
bnQoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RvclJlcGxheUFnZW50OyB9CisgICAgdm9pZCBz
ZXRJbnNwZWN0b3JSZXBsYXlBZ2VudChJbnNwZWN0b3JSZXBsYXlBZ2VudCogYWdlbnQpIHsgbV9p
bnNwZWN0b3JSZXBsYXlBZ2VudCA9IGFnZW50OyB9CisjZW5kaWYKKwogI2lmIEVOQUJMRShTUUxf
REFUQUJBU0UpCiAgICAgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudCogaW5zcGVjdG9yRGF0YWJhc2VB
Z2VudCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yRGF0YWJhc2VBZ2VudDsgfQogICAgIHZv
aWQgc2V0SW5zcGVjdG9yRGF0YWJhc2VBZ2VudChJbnNwZWN0b3JEYXRhYmFzZUFnZW50KiBhZ2Vu
dCkgeyBtX2luc3BlY3RvckRhdGFiYXNlQWdlbnQgPSBhZ2VudDsgfQpAQCAtMTUyLDYgKzE1OSw5
IEBAIHByaXZhdGU6CiAgICAgV29ya2VyUnVudGltZUFnZW50KiBtX3dvcmtlclJ1bnRpbWVBZ2Vu
dDsKICAgICBJbnNwZWN0b3JUaW1lbGluZUFnZW50KiBtX2luc3BlY3RvclRpbWVsaW5lQWdlbnQ7
CiAgICAgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50KiBtX2luc3BlY3RvckRPTVN0b3JhZ2VBZ2Vu
dDsKKyNpZiBFTkFCTEUoV0VCX1JFUExBWSkKKyAgICBJbnNwZWN0b3JSZXBsYXlBZ2VudCogbV9p
bnNwZWN0b3JSZXBsYXlBZ2VudDsKKyNlbmRpZgogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAg
ICAgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudCogbV9pbnNwZWN0b3JEYXRhYmFzZUFnZW50OwogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUmVwbGF5
Lmpzb24gYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUmVwbGF5Lmpzb24KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNmRiNjYzN2ViNDlhODliYjgyZWJlNGJkNjM1OGI0MjNjY2U3Yjc5ZgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9SZXBsYXkuanNv
bgpAQCAtMCwwICsxLDI0MiBAQAoreworICAgICJkb21haW4iOiAiUmVwbGF5IiwKKyAgICAiZGVz
Y3JpcHRpb24iOiAiQ29udHJvbHMgd2ViIHJlcGxheSwgYW5kIG1hbmFnZXMgcmVjb3JkaW5nIHNl
c3Npb25zIGFuZCBzZWdtZW50cy4iLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAg
ICAgICAgImlkIjogIlNlc3Npb25JZGVudGlmaWVyIiwgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBy
ZXBsYXkgc2Vzc2lvbiBpZGVudGlmaWVyLiIsCisgICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2Vy
IgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiU2VnbWVudElkZW50
aWZpZXIiLCAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIHNlc3Npb24gc2VnbWVudCBpZGVudGlmaWVy
LiIsCisgICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIgorICAgICAgICB9LAorICAgICAgICB7
CisgICAgICAgICAgICAiaWQiOiAiUmVwbGF5UG9zaXRpb24iLAorICAgICAgICAgICAgInR5cGUi
OiAib2JqZWN0IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJzZWdtZW50T2Zmc2V0IiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlv
biI6ICJPZmZzZXQgZm9yIGEgc2VnbWVudCB3aXRoaW4gdGhlIGN1cnJlbnRseS1sb2FkZWQgcmVw
bGF5IHNlc3Npb24uIiB9LAorICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpbnB1dE9mZnNldCIs
ICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiT2Zmc2V0IGZvciBhbiBldmVudCBs
b29wIGlucHV0IHdpdGhpbiB0aGUgc3BlY2lmaWVkIHNlc3Npb24gc2VnbWVudC4iIH0KKyAgICAg
ICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlJlcGxh
eUlucHV0IiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAicHJv
cGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInR5cGUiLCAidHlwZSI6ICJz
dHJpbmciLCAiZGVzY3JpcHRpb24iOiAiSW5wdXQgdHlwZS4iIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJvZmZzZXQiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIk9m
ZnNldCBvZiB0aGlzIGlucHV0IGluIGl0cyByZXNwZWN0aXZlIHF1ZXVlLiJ9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFs
IjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlRoZSB0aW1lc3RhbXAgb2YgdGhpcyBpbnB1dC4iIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhIiwgInR5cGUiOiAib2JqZWN0IiwgImRl
c2NyaXB0aW9uIjogIlBlci1pbnB1dCBwYXlsb2FkLiIgfQorICAgICAgICAgICAgXQorICAgICAg
ICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUmVwbGF5SW5wdXRRdWV1ZSIsCisg
ICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBb
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0eXBlIiwgInR5cGUiOiAic3RyaW5nIiwgImRl
c2NyaXB0aW9uIjogIlF1ZXVlIHR5cGUiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJp
bnB1dHMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgIiRyZWYiOiAiUmVwbGF5SW5wdXQi
fSwgImRlc2NyaXB0aW9uIjogIklucHV0cyBiZWxvbmdpbmcgdG8gdGhpcyBxdWV1ZS4iIH0KKyAg
ICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlNl
c3Npb25TZWdtZW50IiwgImRlc2NyaXB0aW9uIjogIkEgc3RhbmRhbG9uZSBzZWdtZW50IG9mIGEg
cmVwbGF5IHNlc3Npb24gdGhhdCBjb3JyZXNwb25kcyB0byBhIHNpbmdsZSBtYWluIGZyYW1lIG5h
dmlnYXRpb24gYW5kIGV4ZWN1dGlvbi4iLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwK
KyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
aWQiLCAiJHJlZiI6ICJTZWdtZW50SWRlbnRpZmllciIsICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUg
c2Vzc2lvbiBzZWdtZW50IGlkZW50aWZpZXIuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgImRlc2NyaXB0aW9uIjogIlN0YXJ0IHRp
bWUgb2YgdGhlIHNlZ21lbnQsIGluIG1pbGxpc2Vjb25kcyBzaW5jZSB0aGUgZXBvY2guIiB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicXVldWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRl
bXMiOiB7ICIkcmVmIjogIlJlcGxheUlucHV0UXVldWUifSB9CisgICAgICAgICAgICBdCisgICAg
ICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZXBsYXlTZXNzaW9uIiwgImRl
c2NyaXB0aW9uIjogIkFuIG9yZGVyZWQgY29sbGVjdGlvbiBvZiByZXBsYXkgc2Vzc2lvbiBzZWdt
ZW50cy4iLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJwcm9w
ZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaWQiLCAiJHJlZiI6ICJTZXNz
aW9uSWRlbnRpZmllciIsICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgcmVwbGF5IHNlc3Npb24gaWRl
bnRpZmllci4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlw
ZSI6ICJudW1iZXIiLCAiZGVzY3JpcHRpb24iOiAiQ3JlYXRpb24gdGltZSBvZiBzZXNzaW9uLCBp
biBtaWxsaXNlY29uZHMgc2luY2UgdGhlIGVwb2NoLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInNlZ21lbnRzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICIkcmVmIjogIlNl
Z21lbnRJZGVudGlmaWVyIiB9LCAiZGVzY3JpcHRpb24iOiAiQW4gb3JkZXJlZCBsaXN0IGlkZW50
aWZpZXJzIGZvciB0aGUgc2VnbWVudHMgdGhhdCBjb21wcmlzZSB0aGlzIHJlcGxheSBzZXNzaW9u
LiIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tbWFuZHMiOiBb
CisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogInN0YXJ0Q2FwdHVyaW5nIiwKKyAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJTdGFydHMgY2FwdHVyZSBvZiBhIG5ldyByZXBsYXkgc2Vz
c2lvbi4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogInN0b3BD
YXB0dXJpbmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlN0b3BzIGNhcHR1cmUgb2Yg
dGhlIGN1cnJlbnRseSByZWNvcmRpbmcgcmVwbGF5IHNlc3Npb24uIgorICAgICAgICB9LAorICAg
ICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJyZXBsYXlUb1Bvc2l0aW9uIiwKKyAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJTZWVrIGV4ZWN1dGlvbiB0byBhIHNwZWNpZmljIHBvc2l0aW9u
IHdpdGhpbiB0aGUgcmVwbGF5IHNlc3Npb24uIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjog
WworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicG9zaXRpb24iLCAiJHJlZiI6ICJSZXBsYXlQ
b3NpdGlvbiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNob3VsZEZhc3RGb3J3YXJk
IiwgInR5cGUiOiAiYm9vbGVhbiIgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAg
ICB7CisgICAgICAgICAgICAibmFtZSI6ICJyZXBsYXlUb0NvbXBsZXRpb24iLAorICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogIlJlcGxheSBhbGwgc2Vzc2lvbiBzZWdtZW50cyBjb21wbGV0ZWx5
LiIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInNob3VsZEZhc3RGb3J3YXJkIiwgInR5cGUiOiAiYm9vbGVhbiIgfQorICAgICAgICAgICAg
XQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJwYXVzZVBsYXli
YWNrIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJQYXVzZXMgcGxheWJhY2sgaW4gdGhl
IGN1cnJlbnQgc2VnbWVudC4gQ2FuIGJlIHJlc3VtZWQgYnkgdXNpbmcgYSByZXBsYXkgY29tbWFu
ZC4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImNhbmNlbFBs
YXliYWNrIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJDYW5jZWxzIHBsYXliYWNrIG9m
IHRoZSBjdXJyZW50IHNlZ21lbnQuIEZ1cnRoZXIgcmVwbGF5aW5nIHdpbGwgc3RhcnQgZnJvbSB0
aGUgYmVnaW5uaW5nIG9mIHRoZSBjdXJyZW50IHNlZ21lbnQuIgorICAgICAgICB9LAorICAgICAg
ICB7CisgICAgICAgICAgICAibmFtZSI6ICJzd2l0Y2hTZXNzaW9uIiwKKyAgICAgICAgICAgICJk
ZXNjcmlwdGlvbiI6ICJVbmxvYWRzIHRoZSBjdXJyZW50IHJlcGxheSBzZXNzaW9uIGFuZCBsb2Fk
cyB0aGUgc3BlY2lmaWVkIHNlc3Npb24iLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzZXNzaW9uSWRlbnRpZmllciIsICIkcmVmIjogIlNl
c3Npb25JZGVudGlmaWVyIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsK
KyAgICAgICAgICAgICJuYW1lIjogImluc2VydFNlc3Npb25TZWdtZW50IiwKKyAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJTcGxpY2VzIHRoZSBzcGVjaWZpZWQgc2Vzc2lvbiBzZWdtZW50IGlu
dG8gdGhlIHNlc3Npb24gYXQgdGhlIHNwZWNpZmllZCBpbmRleC4iLAorICAgICAgICAgICAgInBh
cmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzZXNzaW9uSWRlbnRpZmll
ciIsICIkcmVmIjogIlNlc3Npb25JZGVudGlmaWVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAic2VnbWVudElkZW50aWZpZXIiLCAiJHJlZiI6ICJTZWdtZW50SWRlbnRpZmllciIgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNlZ21lbnRJbmRleCIsICJ0eXBlIjogImludGVn
ZXIiIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAg
Im5hbWUiOiAicmVtb3ZlU2Vzc2lvblNlZ21lbnQiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogIlJlbW92ZXMgdGhlIHNlc3Npb24gc2VnbWVudCBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW9u
IGZyb20gdGhlIHNlc3Npb24uIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAic2Vzc2lvbklkZW50aWZpZXIiLCAiJHJlZiI6ICJTZXNzaW9u
SWRlbnRpZmllciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNlZ21lbnRJbmRleCIs
ICJ0eXBlIjogImludGVnZXIiIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAg
eworICAgICAgICAgICAgIm5hbWUiOiAiZ2V0QXZhaWxhYmxlU2Vzc2lvbnMiLAorICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogIlJldHVybnMgaWRlbnRpZmllcnMgb2YgYWxsIGF2YWlsYWJsZSBz
ZXNzaW9ucy4iLAorICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJpZHMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgIiRyZWYiOiAiU2Vzc2lv
bklkZW50aWZpZXIiIH0gfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7Cisg
ICAgICAgICAgICAibmFtZSI6ICJnZXRTZXJpYWxpemVkU2Vzc2lvbiIsCisgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiUmV0dXJucyB0aGUgc3BlY2lmaWVkIHNlc3Npb24gc2VyaWFsaXplZCB0
byBhIEpTT04gb2JqZWN0LiIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInNlc3Npb25JZGVudGlmaWVyIiwgIiRyZWYiOiAiU2Vzc2lvbklk
ZW50aWZpZXIiIH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAicmV0dXJucyI6IFsKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInNlc3Npb24iLCAiJHJlZiI6ICJSZXBsYXlTZXNzaW9u
IiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlRoZSByZXF1ZXN0ZWQgc2VyaWFs
aXplZCByZXBsYXkgc2Vzc2lvbi4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAg
ICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZ2V0U2VyaWFsaXplZFNlZ21lbnQiLAorICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogIlJldHVybnMgdGhlIHNlc3Npb24gc2VnbWVudCBzZXJpYWxp
emVkIHRvIGEgSlNPTiBvYmplY3QuIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiaWQiLCAiJHJlZiI6ICJTZWdtZW50SWRlbnRpZmllciIg
fQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAic2VnbWVudCIsICIkcmVmIjogIlNlc3Npb25TZWdtZW50IiwgICJvcHRp
b25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJUaGUgcmVxdWVzdGVkIHNlcmlhbGl6ZWQgc2Vz
c2lvbiBzZWdtZW50LiIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAi
ZXZlbnRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJjYXB0dXJlU3RhcnRl
ZCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRmlyZWQgd2hlbiBjYXB0dXJlIGhhcyBz
dGFydGVkLiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiY2Fw
dHVyZVN0b3BwZWQiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkZpcmVkIHdoZW4gY2Fw
dHVyZSBoYXMgc3RvcHBlZC4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJu
YW1lIjogInBsYXliYWNrSGl0UG9zaXRpb24iLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
IkEgcG9zaXRpb24gd2FzIHJlYWNoZWQgZHVyaW5nIHBsYXliYWNrIG9mIHRoZSBzZXNzaW9uLiIs
CisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InBvc2l0aW9uIiwgIiRyZWYiOiAiUmVwbGF5UG9zaXRpb24iLCAiZGVzY3JpcHRpb24iOiAiVGhl
IHBsYXliYWNrIHBvc2l0aW9uIHRoYXQgd2FzIGhpdC4iIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAiZGVzY3JpcHRpb24iOiAiQSB0
aW1lc3RhbXAgZm9yIHRoZSBldmVudC4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAg
ICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAicGxheWJhY2tTdGFydGVkIiwKKyAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJGaXJlZCB3aGVuIHNlc3Npb24gcGxheWJhY2sgaGFzIHN0YXJ0
ZWQuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJwbGF5YmFj
a1BhdXNlZCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRmlyZWQgd2hlbiBzZXNzaW9u
IHBsYXliYWNrIGhhcyBwYXVzZWQsIGJ1dCBub3QgZmluaXNoZWQuIiwKKyAgICAgICAgICAgICJw
YXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicG9zaXRpb24iLCAiJHJl
ZiI6ICJSZXBsYXlQb3NpdGlvbiIsICJkZXNjcmlwdGlvbiI6ICJUaGUgcGxheWJhY2sgcG9zaXRp
b24gaW1tZWRpYXRlbHkgcHJpb3IgdG8gd2hlcmUgcGxheWJhY2sgaXMgcGF1c2VkLiIgfQorICAg
ICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJw
bGF5YmFja0ZpbmlzaGVkIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJGaXJlZCB3aGVu
IHNlc3Npb24gcGxheWJhY2sgaGFzIHN0b3BwZWQuIgorICAgICAgICB9LAorICAgICAgICB7Cisg
ICAgICAgICAgICAibmFtZSI6ICJpbnB1dFN1cHByZXNzaW9uQ2hhbmdlZCIsCisgICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiRmlyZWQgd2hlbiB0aGUgcmVwbGF5IGNvbnRyb2xsZXIgc3RhcnRz
IG9yIHN0b3BzIHN1cHByZXNzaW5nIHVzZXIgaW5wdXRzLiIsCisgICAgICAgICAgICAicGFyYW1l
dGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIndpbGxTdXBwcmVzcyIsICJ0eXBl
IjogImJvb2xlYW4iLCAiZGVzY3JpcHRpb24iOiAiV2hldGhlciB1c2VyIGlucHV0cyB3aWxsIGJl
IHN1cHByZXNzZWQgZHVyaW5nIHBsYXliYWNrLiIgfQorICAgICAgICAgICAgXQorICAgICAgICB9
LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJzZXNzaW9uQ3JlYXRlZCIsCisgICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAiRmlyZWQgd2hlbiBhIG5ldyByZXBsYXkgc2Vzc2lvbiBp
cyBjcmVhdGVkIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiaWQiLCAiJHJlZiI6ICJTZXNzaW9uSWRlbnRpZmllciIsICJkZXNjcmlwdGlv
biI6ICJJZGVudGlmaWVyIGZvciB0aGUgY3JlYXRlZCBzZXNzaW9uLiIgfQorICAgICAgICAgICAg
XQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJzZXNzaW9uTW9k
aWZpZWQiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkZpcmVkIHdoZW4gYSBzZXNzaW9u
J3Mgc2VnbWVudHMgaGF2ZSBjaGFuZ2VkLiIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImlkIiwgIiRyZWYiOiAiU2Vzc2lvbklkZW50aWZp
ZXIiLCAiZGVzY3JpcHRpb24iOiAiSWRlbnRpZmllciBmb3IgdGhlIHNlc3Npb24gdGhlIHNlZ21l
bnQgd2FzIGFkZGVkIHRvLiIgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7
CisgICAgICAgICAgICAibmFtZSI6ICJzZXNzaW9uUmVtb3ZlZCIsCisgICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAiRmlyZWQgd2hlbiBhIHJlcGxheSBzZXNzaW9uIGlzIHJlbW92ZWQgYW5kIGNh
biBubyBsb25nZXIgYmUgbG9hZGVkLiIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImlkIiwgIiRyZWYiOiAiU2Vzc2lvbklkZW50aWZpZXIi
LCAiZGVzY3JpcHRpb24iOiAiSWRlbnRpZmllciBmb3IgdGhlIHJlbW92ZWQgc2Vzc2lvbi4iIH0K
KyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUi
OiAic2Vzc2lvbkxvYWRlZCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRmlyZWQgd2hl
biBhIHJlcGxheSBzZXNzaW9uIGlzIGxvYWRlZC4iLAorICAgICAgICAgICAgInBhcmFtZXRlcnMi
OiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpZCIsICIkcmVmIjogIlNlc3Npb25JZGVu
dGlmaWVyIiwgImRlc2NyaXB0aW9uIjogIklkZW50aWZpZXIgZm9yIHRoZSBsb2FkZWQgc2Vzc2lv
bi4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAg
Im5hbWUiOiAic2VnbWVudENyZWF0ZWQiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkZp
cmVkIHdoZW4gYSBuZXcgc2Vzc2lvbiBzZWdtZW50IGlzIGNyZWF0ZWQuIiwKKyAgICAgICAgICAg
ICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaWQiLCAiJHJlZiI6
ICJTZWdtZW50SWRlbnRpZmllciIsICJkZXNjcmlwdGlvbiI6ICJJZGVudGlmaWVyIGZvciB0aGUg
Y3JlYXRlZCBzZXNzaW9uIHNlZ21lbnQuIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisg
ICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogInNlZ21lbnRSZW1vdmVkIiwKKyAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJGaXJlZCB3aGVuIGEgc2Vzc2lvbiBzZWdtZW50IGlzIHJlbW92
ZWQgYW5kIGNhbiBubyBsb25nZXIgYmUgcmVwbGF5ZWQgYXMgcGFydCBvZiBhIHNlc3Npb24uIiwK
KyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
aWQiLCAiJHJlZiI6ICJTZWdtZW50SWRlbnRpZmllciIsICJkZXNjcmlwdGlvbiI6ICJJZGVudGlm
aWVyIGZvciB0aGUgcmVtb3ZlZCBzZXNzaW9uIHNlZ21lbnQuIiB9CisgICAgICAgICAgICBdCisg
ICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogInNlZ21lbnRDb21wbGV0
ZWQiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkZpcmVkIHdoZW4gYSBzZXNzaW9uIHNl
Z21lbnQgaXMgY29tcGxldGVkIGFuZCBjYW4gbm8gbG9uZ2VyIGhhdmUgaW5wdXRzIGFkZGVkIHRv
IGl0LiIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImlkIiwgIiRyZWYiOiAiU2VnbWVudElkZW50aWZpZXIiLCAiZGVzY3JpcHRpb24iOiAi
SWRlbnRpZmllciBmb3IgdGhlIGNvbXBsZXRlZCBzZXNzaW9uIHNlZ21lbnQuIiB9CisgICAgICAg
ICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogInNlZ21l
bnRMb2FkZWQiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkZpcmVkIHdoZW4gYSBzZWdt
ZW50IGlzIGxvYWRlZC4iLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJzZWdtZW50SWRlbnRpZmllciIsICIkcmVmIjogIlNlZ21lbnRJZGVu
dGlmaWVyIiwgImRlc2NyaXB0aW9uIjogIklkIGZvciB0aGUgbG9hZGVkIHNlZ21lbnQuIiB9Cisg
ICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjog
InNlZ21lbnRVbmxvYWRlZCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRmlyZWQgd2hl
biBhIHNlZ21lbnQgaXMgdW5sb2FkZWQuIgorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbWFrZS1nZW5lcmF0ZWQtc291cmNlcy5zaCBiL1NvdXJjZS9XZWJD
b3JlL21ha2UtZ2VuZXJhdGVkLXNvdXJjZXMuc2gKaW5kZXggZmUyYTcyNzhhN2VmMTVhN2U2YmNh
MWJkY2YxYTIzYzNjN2FmYmIxOS4uNzkwYmVlZjU4YmE5OGNkMzQ2NGEwMmIyZDFkMjFkOTI4NjI0
ZjJlMiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvbWFrZS1nZW5lcmF0ZWQtc291cmNlcy5z
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9tYWtlLWdlbmVyYXRlZC1zb3VyY2VzLnNoCkBAIC0zLDYg
KzMsNyBAQCBleHBvcnQgU09VUkNFX1JPT1Q9JFBXRAogZXhwb3J0IFNSQ1JPT1Q9JFBXRAogZXhw
b3J0IFdlYkNvcmU9JFBXRAogZXhwb3J0IEluc3BlY3RvclNjcmlwdHM9JFBXRC8uLi9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cworZXhwb3J0IFdlYlJlcGxheVNjcmlwdHM9JFBXRC8u
Li9KYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cwogCiBta2RpciAtcCBEZXJpdmVkU291cmNl
cy9XZWJDb3JlICYmCiBtYWtlIC1DIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUgLWYgLi4vLi4vRGVy
aXZlZFNvdXJjZXMubWFrZSAkQApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKaW5kZXggOTMwODg1MmI3MzJkNDU4
M2VkOGM4NmMxMzlkYTgzZTFjODU1NDZiYi4uYzY1Mjg0ZWU5NmVjNTY3NmZjYjA4MDViOGE0NGNi
MTUwOTUyMDgyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBAIC05NCw2ICs5NCwxMCBAQAogI2luY2x1
ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4K
IAorI2lmIEVOQUJMRShXRUJfUkVQTEFZKQorI2luY2x1ZGUgIlJlcGxheUNvbnRyb2xsZXIuaCIK
KyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBIYXNoU2V0PFBhZ2UqPiog
YWxsUGFnZXM7CkBAIC0xMjksNiArMTMzLDkgQEAgUGFnZTo6UGFnZShQYWdlQ2xpZW50cyYgcGFn
ZUNsaWVudHMpCiAgICAgLCBtX2NvbnRleHRNZW51Q29udHJvbGxlcihzdGQ6Om1ha2VfdW5pcXVl
PENvbnRleHRNZW51Q29udHJvbGxlcj4oKnRoaXMsICpwYWdlQ2xpZW50cy5jb250ZXh0TWVudUNs
aWVudCkpCiAjZW5kaWYKICAgICAsIG1fdXNlcklucHV0QnJpZGdlKHN0ZDo6bWFrZV91bmlxdWU8
VXNlcklucHV0QnJpZGdlPigqdGhpcykpCisjaWYgRU5BQkxFKFdFQl9SRVBMQVkpCisgICAgLCBt
X3JlcGxheUNvbnRyb2xsZXIoc3RkOjptYWtlX3VuaXF1ZTxSZXBsYXlDb250cm9sbGVyPigqdGhp
cykpCisjZW5kaWYKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgICwgbV9pbnNwZWN0b3JDb250
cm9sbGVyKHN0ZDo6bWFrZV91bmlxdWU8SW5zcGVjdG9yQ29udHJvbGxlcj4oKnRoaXMsIHBhZ2VD
bGllbnRzLmluc3BlY3RvckNsaWVudCkpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKaW5kZXggZTQxZDEy
NDdjMDM2ZWU0ZTZiZjhiNWIwODBiMjc5Yjg0N2QzYjM4Ni4uNTM1ZjNjZmI1YWNmMTFiOTg0ZTU4
MmQ5N2M4Yjg0NDE4N2RiYTk1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKQEAgLTEwMCw2ICsxMDAsNyBAQCBj
bGFzcyBQcm9ncmVzc1RyYWNrZXJDbGllbnQ7CiBjbGFzcyBSYW5nZTsKIGNsYXNzIFJlbmRlck9i
amVjdDsKIGNsYXNzIFJlbmRlclRoZW1lOworY2xhc3MgUmVwbGF5Q29udHJvbGxlcjsKIGNsYXNz
IFZpc2libGVTZWxlY3Rpb247CiBjbGFzcyBTY3JvbGxhYmxlQXJlYTsKIGNsYXNzIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yOwpAQCAtMjAwLDYgKzIwMSw5IEBAIHB1YmxpYzoKICAgICBDb250ZXh0TWVu
dUNvbnRyb2xsZXImIGNvbnRleHRNZW51Q29udHJvbGxlcigpIGNvbnN0IHsgcmV0dXJuICptX2Nv
bnRleHRNZW51Q29udHJvbGxlcjsgfQogI2VuZGlmCiAgICAgVXNlcklucHV0QnJpZGdlJiB1c2Vy
SW5wdXRCcmlkZ2UoKSBjb25zdCB7IHJldHVybiAqbV91c2VySW5wdXRCcmlkZ2U7IH0KKyNpZiBF
TkFCTEUoV0VCX1JFUExBWSkKKyAgICBSZXBsYXlDb250cm9sbGVyJiByZXBsYXlDb250cm9sbGVy
KCkgY29uc3QgeyByZXR1cm4gKm1fcmVwbGF5Q29udHJvbGxlcjsgfQorI2VuZGlmCiAjaWYgRU5B
QkxFKElOU1BFQ1RPUikKICAgICBJbnNwZWN0b3JDb250cm9sbGVyJiBpbnNwZWN0b3JDb250cm9s
bGVyKCkgY29uc3QgeyByZXR1cm4gKm1faW5zcGVjdG9yQ29udHJvbGxlcjsgfQogI2VuZGlmCkBA
IC00NTAsNiArNDU0LDkgQEAgcHJpdmF0ZToKICAgICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8Q29u
dGV4dE1lbnVDb250cm9sbGVyPiBtX2NvbnRleHRNZW51Q29udHJvbGxlcjsKICNlbmRpZgogICAg
IGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxVc2VySW5wdXRCcmlkZ2U+IG1fdXNlcklucHV0QnJpZGdl
OworI2lmIEVOQUJMRShXRUJfUkVQTEFZKQorICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxSZXBs
YXlDb250cm9sbGVyPiBtX3JlcGxheUNvbnRyb2xsZXI7CisjZW5kaWYKICNpZiBFTkFCTEUoSU5T
UEVDVE9SKQogICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JDb250cm9sbGVyPiBt
X2luc3BlY3RvckNvbnRyb2xsZXI7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0xvZ2dpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xvZ2dpbmcuaApp
bmRleCA0ZWYyMmY2MzI2NzY0NjY5MGZmZDJkNDViM2NmMDUxMTU4OWE2MmE3Li45MDYyNDgyMjlm
NjAzODI4ZGZhODI5Y2Q1M2M4MTZlMWI2MmRiMzlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9Mb2dnaW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTG9nZ2lu
Zy5oCkBAIC03MCw2ICs3MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBNKFRocmVhZGlu
ZykgXAogICAgIE0oV2ViQXVkaW8pIFwKICAgICBNKFdlYkdMKSBcCisgICAgTShXZWJSZXBsYXkp
IFwKIAogI2RlZmluZSBERUNMQVJFX0xPR19DSEFOTkVMKG5hbWUpIFwKICAgICBleHRlcm4gV1RG
TG9nQ2hhbm5lbCBKT0lOX0xPR19DSEFOTkVMX1dJVEhfUFJFRklYKExPR19DSEFOTkVMX1BSRUZJ
WCwgbmFtZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvQWxsUmVwbGF5SW5w
dXRzLmggYi9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvQWxsUmVwbGF5SW5wdXRzLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uN2E5NTFlMjcwZDJjNjgwODFmYjkwMGJiNDZjMTNhNTQyMGU5ZWUyOAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9BbGxSZXBsYXlJbnB1dHMuaApAQCAtMCwwICsx
LDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UyAiQVMKKyAqIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCisgKiBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERF
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
VGhpcyBmaWxlIGlzIHRoZSBpbmNsdWRlIGVxdWl2YWxlbnQgZm9yIFdFQl9SRVBMQVlfSU5QVVRf
TkFNRVNfRk9SX0VBQ0guCisvLyBOb3RlIHRoYXQgdGhlcmUgaXMgbm90IGFuIGV4YWN0IGNvcnJl
c3BvbmRlbmNlIGJldHdlZW4gdGhlIHR3bywgc2luY2UKKy8vIFNvbWUgaW5wdXQgdHlwZXMgcmVz
aWRlIGluIHRoZSBzYW1lIGZpbGUuCisKKy8vIE1ha2Ugc3VyZSB0aGF0IHRoaXMgc3RheXMgaW4g
c3luYyB3aXRoIFJlcGxheUlucHV0VHlwZXMuaCBmb3IgY3VzdG9tIGlucHV0cy4KKworI2lmbmRl
ZiBBbGxSZXBsYXlJbnB1dHNfaAorI2RlZmluZSBBbGxSZXBsYXlJbnB1dHNfaAorCisjaWYgRU5B
QkxFKFdFQl9SRVBMQVkpCisKKyNpbmNsdWRlICJXZWJSZXBsYXlJbnB1dHMuaCIKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9KU1JlcGxheUlucHV0cy5oPgorCisjZGVmaW5lIElNUE9SVF9GUk9N
X0pTQ19OQU1FU1BBQ0UobmFtZSkgXAordXNpbmcgSlNDOjpuYW1lOyBcCisKK0pTX1JFUExBWV9J
TlBVVF9OQU1FU19GT1JfRUFDSChJTVBPUlRfRlJPTV9KU0NfTkFNRVNQQUNFKQorCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQl9SRVBMQVkpCisKKyNlbmRpZiAvLyBBbGxSZXBsYXlJbnB1dHNfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVwbGF5L0NhcHR1cmluZ0lucHV0Q3Vyc29yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlcGxheS9DYXB0dXJpbmdJbnB1dEN1cnNvci5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMjUzYTVkMTBlMjE3MDQ4MDMwYTNlZGU4MjZmM2FjNzc1ZGIyMTY5ZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9DYXB0dXJpbmdJbnB1dEN1cnNvci5jcHAKQEAg
LTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMgIkFTCisgKiBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAqIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQorICogUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYXB0dXJpbmdJbnB1dEN1cnNvci5o
IgorCisjaWYgRU5BQkxFKFdFQl9SRVBMQVkpCisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5j
bHVkZSAiU2VnbWVudGVkSW5wdXRTdG9yYWdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Q2FwdHVyaW5nSW5wdXRDdXJzb3I6OkNhcHR1cmluZ0lucHV0Q3Vyc29yKFNlZ21lbnRlZElucHV0
U3RvcmFnZSYgc3RvcmFnZSkKKyAgICA6IG1fc3RvcmFnZShzdG9yYWdlKQoreworICAgIExPRyhX
ZWJSZXBsYXksICIlLTMwc0NyZWF0ZWQgY2FwdHVyZSBjdXJzb3I9JXAuXG4iLCAiW1JlcGxheUNv
bnRyb2xsZXJdIiwgdGhpcyk7Cit9CisKK0NhcHR1cmluZ0lucHV0Q3Vyc29yOjp+Q2FwdHVyaW5n
SW5wdXRDdXJzb3IoKQoreworICAgIExPRyhXZWJSZXBsYXksICIlLTMwc0Rlc3Ryb3llZCBjYXB0
dXJlIGN1cnNvcj0lcC5cbiIsICJbUmVwbGF5Q29udHJvbGxlcl0iLCB0aGlzKTsKK30KKworUGFz
c1JlZlB0cjxDYXB0dXJpbmdJbnB1dEN1cnNvcj4gQ2FwdHVyaW5nSW5wdXRDdXJzb3I6OmNyZWF0
ZShTZWdtZW50ZWRJbnB1dFN0b3JhZ2UmIHN0b3JhZ2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBDYXB0dXJpbmdJbnB1dEN1cnNvcihzdG9yYWdlKSk7Cit9CisKK3ZvaWQgQ2FwdHVyaW5n
SW5wdXRDdXJzb3I6OnN0b3JlSW5wdXQoc3RkOjp1bmlxdWVfcHRyPE5vbmRldGVybWluaXN0aWNJ
bnB1dEJhc2U+IGlucHV0KQoreworICAgIEFTU0VSVChpbnB1dCk7CisgICAgbV9zdG9yYWdlLnN0
b3JlKHN0ZDo6bW92ZShpbnB1dCkpOworfQorCitOb25kZXRlcm1pbmlzdGljSW5wdXRCYXNlKiBD
YXB0dXJpbmdJbnB1dEN1cnNvcjo6bG9hZElucHV0KElucHV0UXVldWUsIGNvbnN0IEF0b21pY1N0
cmluZyYpCit7CisgICAgLy8gQ2FuJ3QgbG9hZCBpbnB1dHMgZnJvbSBjYXB0dXJpbmcgY3Vyc29y
LgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitO
b25kZXRlcm1pbmlzdGljSW5wdXRCYXNlKiBDYXB0dXJpbmdJbnB1dEN1cnNvcjo6dW5jaGVja2Vk
TG9hZElucHV0KElucHV0UXVldWUpCit7CisgICAgLy8gQ2FuJ3QgbG9hZCBpbnB1dHMgZnJvbSBj
YXB0dXJpbmcgY3Vyc29yLgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBu
dWxscHRyOworfQorCit9OyAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KFdFQl9SRVBMQVkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvQ2FwdHVyaW5n
SW5wdXRDdXJzb3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9DYXB0dXJpbmdJbnB1dEN1cnNv
ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjhmMGRmNGRhYjhjNDkxMzVlM2JlYjhiNmJiOTBhN2VlMDBiOTQ0ODEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvQ2FwdHVyaW5nSW5wdXRD
dXJzb3IuaApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUyAiQVMKKyAqIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCisgKiBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBDYXB0dXJpbmdJbnB1dEN1cnNvcl9oCisjZGVmaW5lIENh
cHR1cmluZ0lucHV0Q3Vyc29yX2gKKworI2lmIEVOQUJMRShXRUJfUkVQTEFZKQorCisjaW5jbHVk
ZSA8cmVwbGF5L0lucHV0Q3Vyc29yLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2VnbWVudGVkSW5wdXRTdG9yYWdlOworCitj
bGFzcyBDYXB0dXJpbmdJbnB1dEN1cnNvciBmaW5hbCA6IHB1YmxpYyBJbnB1dEN1cnNvciB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ2FwdHVyaW5nSW5wdXRDdXJzb3IpOworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhcHR1cmluZ0lucHV0Q3Vyc29yPiBjcmVhdGUoU2VnbWVu
dGVkSW5wdXRTdG9yYWdlJik7CisgICAgdmlydHVhbCB+Q2FwdHVyaW5nSW5wdXRDdXJzb3IoKTsK
KworICAgIHZpcnR1YWwgYm9vbCBpc0NhcHR1cmluZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNSZXBsYXlpbmcoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBmYWxzZTsgfQorCisgICAgdmlydHVhbCBOb25kZXRlcm1pbmlzdGljSW5wdXRCYXNl
KiB1bmNoZWNrZWRMb2FkSW5wdXQoSW5wdXRRdWV1ZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIHN0b3JlSW5wdXQoc3RkOjp1bmlxdWVfcHRyPE5vbmRldGVybWluaXN0aWNJbnB1dEJhc2U+
KSBvdmVycmlkZTsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIE5vbmRldGVybWluaXN0aWNJbnB1
dEJhc2UqIGxvYWRJbnB1dChJbnB1dFF1ZXVlLCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUpIG92
ZXJyaWRlOworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBDYXB0dXJpbmdJbnB1dEN1cnNvcihTZWdt
ZW50ZWRJbnB1dFN0b3JhZ2UmKTsKKworICAgIFNlZ21lbnRlZElucHV0U3RvcmFnZSYgbV9zdG9y
YWdlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdF
Ql9SRVBMQVkpCisKKyNlbmRpZiAvLyBDYXB0dXJpbmdJbnB1dEN1cnNvcl9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvRXZlbnRMb29wSW5wdXQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlcGxheS9FdmVudExvb3BJbnB1dC5oCmluZGV4IGFiYjdkNDQyYzRiMjgzZTg2YmUyNTlmMmNk
MDM1ZTZjZjlkYjE0ZWIuLmI0ZTNiNzBhMDYxMmU1MzE2NTg0MDA1YmNjYjk4NWFmZWYzMTZhNjcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9FdmVudExvb3BJbnB1dC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlcGxheS9FdmVudExvb3BJbnB1dC5oCkBAIC0zNywzOCArMzcsMjIg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBSZXBsYXlDb250cm9sbGVyOwogCi1zdHJ1
Y3QgUmVwbGF5UG9zaXRpb24gewotcHVibGljOgotICAgIFJlcGxheVBvc2l0aW9uKCkKLSAgICAg
ICAgOiBtX2luZGV4KDApCi0gICAgICAgICwgbV90aW1lKDAuMCkgeyB9Ci0KLSAgICBleHBsaWNp
dCBSZXBsYXlQb3NpdGlvbih1bnNpZ25lZCBpbmRleCkKLSAgICAgICAgOiBtX2luZGV4KGluZGV4
KQotICAgICAgICAsIG1fdGltZShtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSkgeyB9Ci0K
LSAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KLSAgICBkb3Vi
bGUgdGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGltZTsgfQotcHJpdmF0ZToKLSAgICB1bnNpZ25l
ZCBtX2luZGV4OwotICAgIGRvdWJsZSBtX3RpbWU7Ci19OwotCiBjbGFzcyBFdmVudExvb3BJbnB1
dEJhc2UgOiBwdWJsaWMgTm9uZGV0ZXJtaW5pc3RpY0lucHV0QmFzZSB7CiBwdWJsaWM6CiAgICAg
RXZlbnRMb29wSW5wdXRCYXNlKCkKLSAgICAgICAgOiBtX3Bvc2l0aW9uKFJlcGxheVBvc2l0aW9u
KCkpIHsgfQorICAgICAgICA6IG1fdGltZXN0YW1wKG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGlt
ZSgpKQorICAgIHsKKyAgICB9CiAKICAgICB2aXJ0dWFsIH5FdmVudExvb3BJbnB1dEJhc2UoKSB7
IH0KICAgICB2aXJ0dWFsIElucHV0UXVldWUgcXVldWUoKSBjb25zdCBvdmVycmlkZSBmaW5hbCB7
IHJldHVybiBJbnB1dFF1ZXVlOjpFdmVudExvb3BJbnB1dDsgfQogCiAgICAgdmlydHVhbCB2b2lk
IGRpc3BhdGNoKFJlcGxheUNvbnRyb2xsZXImKSA9IDA7CiAKLSAgICAvLyBEdXJpbmcgY2FwdHVy
ZSwgdGhlIHBvc2l0aW9uIGlzIHNldCB3aGVuIHRoZSBmb2xsb3dpbmcgZXZlbnQgbG9vcCBpbnB1
dCBpcyBjYXB0dXJlZC4KLSAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IFJlcGxheVBvc2l0aW9u
JiBwb3NpdGlvbikgeyBtX3Bvc2l0aW9uID0gcG9zaXRpb247IH0KLSAgICBSZXBsYXlQb3NpdGlv
biBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KKyAgICBkb3VibGUgdGlt
ZXN0YW1wKCkgY29uc3QgeyByZXR1cm4gbV90aW1lc3RhbXA7IH0KKyAgICB2b2lkIHNldFRpbWVz
dGFtcChkb3VibGUgdGltZXN0YW1wKSB7IG1fdGltZXN0YW1wID0gdGltZXN0YW1wOyB9CiBwcm90
ZWN0ZWQ6Ci0gICAgUmVwbGF5UG9zaXRpb24gbV9wb3NpdGlvbjsKKyAgICBkb3VibGUgbV90aW1l
c3RhbXA7CiB9OwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgSW5wdXRUeXBlPgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVwbGF5L0V2ZW50TG9vcElucHV0RGlzcGF0Y2hlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZXBsYXkvRXZlbnRMb29wSW5wdXREaXNwYXRjaGVyLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5iNTA2MjYzN2M1NmEwNTgxYmU0MmRkOWY1YTM4NjFlODEyMjQ3NDRmCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVwbGF5L0V2ZW50TG9vcElucHV0RGlzcGF0Y2hlci5jcHAK
QEAgLTAsMCArMSwxNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMgIkFTCisgKiBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAqIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQorICogUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFdmVudExvb3BJbnB1
dERpc3BhdGNoZXIuaCIKKworI2lmIEVOQUJMRShXRUJfUkVQTEFZKQorCisjaW5jbHVkZSAiUGFn
ZS5oIgorI2luY2x1ZGUgIlJlcGxheUlucHV0VHlwZXMuaCIKKyNpbmNsdWRlICJSZXBsYXlpbmdJ
bnB1dEN1cnNvci5oIgorI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KKworI2lmICFM
T0dfRElTQUJMRUQKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiU2VyaWFsaXphdGlv
bk1ldGhvZHMuaCIKKyNpbmNsdWRlIDxyZXBsYXkvRW5jb2RlZFZhbHVlLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRXZl
bnRMb29wSW5wdXREaXNwYXRjaGVyOjpFdmVudExvb3BJbnB1dERpc3BhdGNoZXIoUGFnZSYgcGFn
ZSwgUmVwbGF5aW5nSW5wdXRDdXJzb3ImIGN1cnNvciwgRXZlbnRMb29wSW5wdXREaXNwYXRjaGVy
Q2xpZW50KiBjbGllbnQpCisgICAgOiBtX3BhZ2UocGFnZSkKKyAgICAsIG1fY2xpZW50KGNsaWVu
dCkKKyAgICAsIG1fY3Vyc29yKGN1cnNvcikKKyAgICAsIG1fdGltZXIodGhpcywgJkV2ZW50TG9v
cElucHV0RGlzcGF0Y2hlcjo6dGltZXJGaXJlZCkKKyAgICAsIG1fcnVubmluZ0lucHV0KG51bGxw
dHIpCisgICAgLCBtX2Rpc3BhdGNoaW5nKGZhbHNlKQorICAgICwgbV9ydW5uaW5nKGZhbHNlKQor
ICAgICwgbV9zcGVlZChEaXNwYXRjaFNwZWVkOjpGYXN0Rm9yd2FyZCkKKyAgICAsIG1fcHJldmlv
dXNEaXNwYXRjaFN0YXJ0VGltZSgwLjApCisgICAgLCBtX3ByZXZpb3VzSW5wdXRUaW1lc3RhbXAo
MC4wKQoreworfQorCit2b2lkIEV2ZW50TG9vcElucHV0RGlzcGF0Y2hlcjo6cnVuKCkKK3sKKyAg
ICBBU1NFUlQoIW1fcnVubmluZyk7CisgICAgbV9ydW5uaW5nID0gdHJ1ZTsKKworICAgIExPRyhX
ZWJSZXBsYXksICIlLTIwcyBTdGFydGluZyBkaXNwYXRjaCBvZiBldmVudCBsb29wIGlucHV0cyBm
b3IgcGFnZTogJXBcbiIsICJSZXBsYXlFdmVudHMiLCBtX3BhZ2UpOworICAgIGRpc3BhdGNoSW5w
dXRTb29uKCk7Cit9CisKK3ZvaWQgRXZlbnRMb29wSW5wdXREaXNwYXRjaGVyOjpwYXVzZSgpCit7
CisgICAgQVNTRVJUKCFtX2Rpc3BhdGNoaW5nKTsKKyAgICBBU1NFUlQobV9ydW5uaW5nKTsKKyAg
ICBtX3J1bm5pbmcgPSBmYWxzZTsKKworICAgIExPRyhXZWJSZXBsYXksICIlLTIwcyBQYXVzaW5n
IGRpc3BhdGNoIG9mIGV2ZW50IGxvb3AgaW5wdXRzIGZvciBwYWdlOiAlcFxuIiwgIlJlcGxheUV2
ZW50cyIsIG1fcGFnZSk7CisgICAgaWYgKG1fdGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV90
aW1lci5zdG9wKCk7Cit9CisKK3ZvaWQgRXZlbnRMb29wSW5wdXREaXNwYXRjaGVyOjp0aW1lckZp
cmVkKFRpbWVyPEV2ZW50TG9vcElucHV0RGlzcGF0Y2hlcj4qKQoreworICAgIGRpc3BhdGNoSW5w
dXQoKTsKK30KKwordm9pZCBFdmVudExvb3BJbnB1dERpc3BhdGNoZXI6OmRpc3BhdGNoSW5wdXRT
b29uKCkKK3sKKyAgICBBU1NFUlQobV9ydW5uaW5nKTsKKworICAgIC8vIFdlIG1heSBhbHJlYWR5
IGhhdmUgYW4gaW5wdXQgaWYgcmVwbGF5IHdhcyBwYXVzZWQganVzdCBiZWZvcmUgZGlzcGF0Y2hp
bmcuCisgICAgaWYgKCFtX3J1bm5pbmdJbnB1dCkKKyAgICAgICAgbV9ydW5uaW5nSW5wdXQgPSBz
YWZlQ2FzdDxFdmVudExvb3BJbnB1dEJhc2UqPihtX2N1cnNvci51bmNoZWNrZWRMb2FkSW5wdXQo
SW5wdXRRdWV1ZTo6RXZlbnRMb29wSW5wdXQpKTsKKworICAgIGlmIChtX3RpbWVyLmlzQWN0aXZl
KCkpCisgICAgICAgIG1fdGltZXIuc3RvcCgpOworCisgICAgZG91YmxlIHdhaXRJbnRlcnZhbCA9
IDA7CisKKyAgICBpZiAobV9zcGVlZCA9PSBEaXNwYXRjaFNwZWVkOjpSZWFsVGltZSkgeworICAg
ICAgICAvLyBUaGUgZ29hbCBpcyB0byByZXByb2R1Y2UgdGhlIGRpc3BhdGNoIGRlbGF5IGJldHdl
ZW4gaW5wdXRzIGFzIGl0IHdhcworICAgICAgICAvLyB3YXMgb2JzZXJ2ZWQgZHVyaW5nIHRoZSBy
ZWNvcmRpbmcuIFNvLCB3ZSBuZWVkIHRvIGNvbXB1dGUgaG93IG11Y2ggdGltZQorICAgICAgICAv
LyB0byB3YWl0IHN1Y2ggdGhhdCB0aGUgZWxhcHNlZCB0aW1lIHBsdXMgdGhlIHdhaXQgdGltZSB3
aWxsIGVxdWFsIHRoZQorICAgICAgICAvLyBvYnNlcnZlZCBkZWxheSBiZXR3ZWVuIHRoZSBwcmV2
aW91cyBhbmQgY3VycmVudCBpbnB1dC4KKworICAgICAgICBpZiAoIW1fcHJldmlvdXNJbnB1dFRp
bWVzdGFtcCkKKyAgICAgICAgICAgIG1fcHJldmlvdXNJbnB1dFRpbWVzdGFtcCA9IG1fcnVubmlu
Z0lucHV0LT50aW1lc3RhbXAoKTsKKworICAgICAgICBkb3VibGUgdGFyZ2V0SW50ZXJ2YWwgPSBt
X3J1bm5pbmdJbnB1dC0+dGltZXN0YW1wKCkgLSBtX3ByZXZpb3VzSW5wdXRUaW1lc3RhbXA7Cisg
ICAgICAgIGRvdWJsZSBlbGFwc2VkID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgLSBt
X3ByZXZpb3VzRGlzcGF0Y2hTdGFydFRpbWU7CisgICAgICAgIHdhaXRJbnRlcnZhbCA9IHRhcmdl
dEludGVydmFsIC0gZWxhcHNlZDsKKyAgICB9CisKKyAgICAvLyBBIG5lZ2F0aXZlIHdhaXQgdGlt
ZSBtZWFucyB0aGF0IGRpc3BhdGNoIHRvb2sgbG9uZ2VyIG9uIHJlcGxheSB0aGFuIG9uCisgICAg
Ly8gY2FwdHVyZS4gSW4gdGhpcyBjYXNlLCBwcm9jZWVkIHdpdGhvdXQgd2FpdGluZyBhdCBhbGwu
CisgICAgaWYgKHdhaXRJbnRlcnZhbCA8IDApCisgICAgICAgIHdhaXRJbnRlcnZhbCA9IDA7CisK
KyAgICBpZiAod2FpdEludGVydmFsID4gMTAwMC4wKSB7CisgICAgICAgIExPR19FUlJPUigiJS0y
MHMgVHJpZWQgdG8gd2FpdCBmb3Igb3ZlciAxMDAwIHNlY29uZHMgYmVmb3JlIGRpc3BhdGNoaW5n
IG5leHQgZXZlbnQgbG9vcCBpbnB1dDsgdGhpcyBpcyBwcm9iYWJseSBhIGJ1Zy4iLCAiUmVwbGF5
RXZlbnRzIik7CisgICAgICAgIHdhaXRJbnRlcnZhbCA9IDA7CisgICAgfQorCisgICAgTE9HKFdl
YlJlcGxheSwgIiUtMjBzIChXQUlUOiAlLjNmIG1zKSIsICJSZXBsYXlFdmVudHMiLCB3YWl0SW50
ZXJ2YWwgKiAxMDAwLjApOworICAgIG1fdGltZXIuc3RhcnRPbmVTaG90KHdhaXRJbnRlcnZhbCk7
Cit9CisKK3ZvaWQgRXZlbnRMb29wSW5wdXREaXNwYXRjaGVyOjpkaXNwYXRjaElucHV0KCkKK3sK
KyAgICBBU1NFUlQobV9ydW5uaW5nSW5wdXQpOworICAgIEFTU0VSVCghbV9kaXNwYXRjaGluZyk7
CisKKyAgICBpZiAobV9zcGVlZCA9PSBEaXNwYXRjaFNwZWVkOjpSZWFsVGltZSkgeworICAgICAg
ICBtX3ByZXZpb3VzRGlzcGF0Y2hTdGFydFRpbWUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1Rp
bWUoKTsKKyAgICAgICAgbV9wcmV2aW91c0lucHV0VGltZXN0YW1wID0gbV9ydW5uaW5nSW5wdXQt
PnRpbWVzdGFtcCgpOworICAgIH0KKworI2lmICFMT0dfRElTQUJMRUQKKyAgICBFbmNvZGVkVmFs
dWUgZW5jb2RlZElucHV0ID0gRW5jb2RpbmdUcmFpdHM8Tm9uZGV0ZXJtaW5pc3RpY0lucHV0QmFz
ZT46OmVuY29kZVZhbHVlKCptX3J1bm5pbmdJbnB1dCk7CisgICAgU3RyaW5nIGpzb25TdHJpbmcg
PSBlbmNvZGVkSW5wdXQuYXNPYmplY3QoKS0+dG9KU09OU3RyaW5nKCk7CisKKyAgICBMT0coV2Vi
UmVwbGF5LCAiJS0yMHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSIsICJSZXBsYXlFdmVudHMiKTsKKyAgICBMT0coV2ViUmVwbGF5LCAiJS0yMHMgPkRJU1BB
VENIOiAlcyAlc1xuIiwgIlJlcGxheUV2ZW50cyIsIG1fcnVubmluZ0lucHV0LT50eXBlKCkuc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSwganNvblN0cmluZy51dGY4KCkuZGF0YSgpKTsKKyNlbmRpZgor
CisgICAgbV9jbGllbnQtPndpbGxEaXNwYXRjaElucHV0KCptX3J1bm5pbmdJbnB1dCk7CisgICAg
Ly8gQ2xpZW50IGNvdWxkIHN0b3AgcmVwbGF5IGluIHRoZSBwcmV2aW91cyBjYWxsYmFjaywgc28g
Y2hlY2sgYWdhaW4uCisgICAgaWYgKCFtX3J1bm5pbmcpCisgICAgICAgIHJldHVybjsKKworICAg
IHsKKyAgICAgICAgVGVtcG9yYXJ5Q2hhbmdlPGJvb2w+IGNoYW5nZShtX2Rpc3BhdGNoaW5nLCB0
cnVlKTsKKyAgICAgICAgbV9ydW5uaW5nSW5wdXQtPmRpc3BhdGNoKG1fcGFnZS5yZXBsYXlDb250
cm9sbGVyKCkpOworICAgIH0KKworICAgIEV2ZW50TG9vcElucHV0QmFzZSogZGlzcGF0Y2hlZElu
cHV0ID0gbV9ydW5uaW5nSW5wdXQ7CisgICAgbV9ydW5uaW5nSW5wdXQgPSBudWxscHRyOworCisg
ICAgLy8gTm90aWZ5IGNsaWVudHMgdGhhdCB0aGUgZXZlbnQgd2FzIGRpc3BhdGNoZWQuCisgICAg
bV9jbGllbnQtPmRpZERpc3BhdGNoSW5wdXQoKmRpc3BhdGNoZWRJbnB1dCk7CisgICAgaWYgKGRp
c3BhdGNoZWRJbnB1dC0+dHlwZSgpID09IGlucHV0VHlwZXMoKS5FbmRTZWdtZW50U2VudGluZWwp
IHsKKyAgICAgICAgbV9ydW5uaW5nID0gZmFsc2U7CisgICAgICAgIG1fY2xpZW50LT5kaWREaXNw
YXRjaEZpbmFsSW5wdXQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIENsaWVu
dHMgY291bGQgc3RvcCByZXBsYXkgZHVyaW5nIGV2ZW50IGRpc3BhdGNoLCBvciBmcm9tIGFueSBj
YWxsYmFjayBhYm92ZS4KKyAgICBpZiAoIW1fcnVubmluZykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgZGlzcGF0Y2hJbnB1dFNvb24oKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKFdFQl9SRVBMQVkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZXBsYXkvRXZlbnRMb29wSW5wdXREaXNwYXRjaGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkv
RXZlbnRMb29wSW5wdXREaXNwYXRjaGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDdjYWFlNDI2ZTBmNzBiYWQy
ZWNlZDEwZjIxZjFjYmMzMDQ3YmFiMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlcGxheS9FdmVudExvb3BJbnB1dERpc3BhdGNoZXIuaApAQCAtMCwwICsxLDk1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMKKyAqIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRAorICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBCisgKiBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBFdmVudExv
b3BJbnB1dERpc3BhdGNoZXJfaAorI2RlZmluZSBFdmVudExvb3BJbnB1dERpc3BhdGNoZXJfaAor
CisjaWYgRU5BQkxFKFdFQl9SRVBMQVkpCisKKyNpbmNsdWRlICJFdmVudExvb3BJbnB1dC5oIgor
I2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBhZ2U7CitjbGFzcyBSZXBsYXlpbmdJbnB1dEN1cnNv
cjsKKworZW51bSBjbGFzcyBEaXNwYXRjaFNwZWVkIHsKKyAgICBSZWFsVGltZSwKKyAgICBGYXN0
Rm9yd2FyZCwKK307CisKK2NsYXNzIEV2ZW50TG9vcElucHV0RGlzcGF0Y2hlckNsaWVudCB7Citw
dWJsaWM6CisgICAgRXZlbnRMb29wSW5wdXREaXNwYXRjaGVyQ2xpZW50KCkgeyB9CisgICAgdmly
dHVhbCB+RXZlbnRMb29wSW5wdXREaXNwYXRjaGVyQ2xpZW50KCkgeyB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgd2lsbERpc3BhdGNoSW5wdXQoY29uc3QgRXZlbnRMb29wSW5wdXRCYXNlJikgPTA7Cisg
ICAgdmlydHVhbCB2b2lkIGRpZERpc3BhdGNoSW5wdXQoY29uc3QgRXZlbnRMb29wSW5wdXRCYXNl
JikgPTA7CisgICAgdmlydHVhbCB2b2lkIGRpZERpc3BhdGNoRmluYWxJbnB1dCgpID0wOworfTsK
KworY2xhc3MgRXZlbnRMb29wSW5wdXREaXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShFdmVudExvb3BJbnB1dERpc3BhdGNoZXIpOworcHVibGljOgorICAgIEV2ZW50TG9vcElu
cHV0RGlzcGF0Y2hlcihQYWdlJiwgUmVwbGF5aW5nSW5wdXRDdXJzb3ImLCBFdmVudExvb3BJbnB1
dERpc3BhdGNoZXJDbGllbnQqKTsKKworICAgIHZvaWQgcnVuKCk7CisgICAgdm9pZCBwYXVzZSgp
OworCisgICAgdm9pZCBzZXREaXNwYXRjaFNwZWVkKERpc3BhdGNoU3BlZWQgc3BlZWQpIHsgbV9z
cGVlZCA9IHNwZWVkOyB9CisgICAgRGlzcGF0Y2hTcGVlZCBkaXNwYXRjaFNwZWVkKCkgY29uc3Qg
eyByZXR1cm4gbV9zcGVlZDsgfQorcHJpdmF0ZToKKyAgICB2b2lkIGRpc3BhdGNoSW5wdXRTb29u
KCk7CisgICAgdm9pZCBkaXNwYXRjaElucHV0KCk7CisgICAgdm9pZCB0aW1lckZpcmVkKFRpbWVy
PEV2ZW50TG9vcElucHV0RGlzcGF0Y2hlcj4qKTsKKworICAgIFBhZ2UmIG1fcGFnZTsKKyAgICBF
dmVudExvb3BJbnB1dERpc3BhdGNoZXJDbGllbnQqIG1fY2xpZW50OworICAgIFJlcGxheWluZ0lu
cHV0Q3Vyc29yJiBtX2N1cnNvcjsKKyAgICBUaW1lcjxFdmVudExvb3BJbnB1dERpc3BhdGNoZXI+
IG1fdGltZXI7CisKKyAgICAvLyBUaGlzIHBvaW50ZXIgaXMgdmFsaWQgd2hlbiBhbiBldmVudCBs
b29wIGlucHV0IGlzIHByZXNlbnRseSBkaXNwYXRjaGluZy4KKyAgICBFdmVudExvb3BJbnB1dEJh
c2UqIG1fcnVubmluZ0lucHV0OworICAgIGJvb2wgbV9kaXNwYXRjaGluZzsKKyAgICBib29sIG1f
cnVubmluZzsKKworICAgIERpc3BhdGNoU3BlZWQgbV9zcGVlZDsKKyAgICAvLyBUaGUgdGltZSBh
dCB3aGljaCB0aGUgbGFzdCBpbnB1dCBkaXNwYXRjaCgpIG1ldGhvZCB3YXMgY2FsbGVkLgorICAg
IGRvdWJsZSBtX3ByZXZpb3VzRGlzcGF0Y2hTdGFydFRpbWU7CisgICAgLy8gVGhlIHRpbWVzdGFt
cCBzcGVjaWZpZWQgYnkgdGhlIGxhc3QgZGlzcGF0Y2hlZCBpbnB1dC4KKyAgICBkb3VibGUgbV9w
cmV2aW91c0lucHV0VGltZXN0YW1wOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKFdFQl9SRVBMQVkpCisKKyNlbmRpZiAvLyBFdmVudExvb3BJbnB1dERp
c3BhdGNoZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVwbGF5L0Z1bmN0b3JJbnB1
dEN1cnNvci5oIGIvU291cmNlL1dlYkNvcmUvcmVwbGF5L0Z1bmN0b3JJbnB1dEN1cnNvci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjUzYzY5YzBhODAwMmEwMjQyZGI4NzcwYjE3YzBiODA5OTJhYzI0MmYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvRnVuY3RvcklucHV0Q3Vyc29yLmgK
QEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMgIkFTCisgKiBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAqIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQorICogUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgRnVuY3RvcklucHV0Q3Vyc29yX2gKKyNkZWZpbmUgRnVuY3RvcklucHV0
Q3Vyc29yX2gKKworI2lmIEVOQUJMRShXRUJfUkVQTEFZKQorCisjaW5jbHVkZSAiU2VnbWVudGVk
SW5wdXRTdG9yYWdlLmgiCisjaW5jbHVkZSA8cmVwbGF5L0lucHV0Q3Vyc29yLmg+CisjaW5jbHVk
ZSA8cmVwbGF5L05vbmRldGVybWluaXN0aWNJbnB1dC5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZ1bmN0b3JJbnB1dEN1cnNvciBm
aW5hbCA6IHB1YmxpYyBJbnB1dEN1cnNvciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRnVu
Y3RvcklucHV0Q3Vyc29yKTsKK3B1YmxpYzoKKyAgICBGdW5jdG9ySW5wdXRDdXJzb3IoU2VnbWVu
dGVkSW5wdXRTdG9yYWdlJik7CisgICAgdmlydHVhbCB+RnVuY3RvcklucHV0Q3Vyc29yKCkgeyB9
CisKKyAgICAvLyBJbnB1dEN1cnNvcgorICAgIHZpcnR1YWwgYm9vbCBpc0NhcHR1cmluZygpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzUmVwbGF5
aW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgdm9p
ZCBzdG9yZUlucHV0KHN0ZDo6dW5pcXVlX3B0cjxOb25kZXRlcm1pbmlzdGljSW5wdXRCYXNlPikg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCBOb25kZXRlcm1pbmlzdGljSW5wdXRCYXNlKiB1bmNoZWNr
ZWRMb2FkSW5wdXQoSW5wdXRRdWV1ZSkgb3ZlcnJpZGU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPgorICAgIHR5cGVuYW1lIEZ1bmN0b3I6OlJldHVyblR5cGUgZm9yRWFjaElucHV0
SW5RdWV1ZShJbnB1dFF1ZXVlLCBGdW5jdG9yJik7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBO
b25kZXRlcm1pbmlzdGljSW5wdXRCYXNlKiBsb2FkSW5wdXQoSW5wdXRRdWV1ZSwgY29uc3QgQXRv
bWljU3RyaW5nJikgb3ZlcnJpZGU7Citwcml2YXRlOgorICAgIFNlZ21lbnRlZElucHV0U3RvcmFn
ZSYgbV9zdG9yYWdlOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lCit0
eXBlbmFtZSBGdW5jdG9yOjpSZXR1cm5UeXBlIEZ1bmN0b3JJbnB1dEN1cnNvcjo6Zm9yRWFjaElu
cHV0SW5RdWV1ZShJbnB1dFF1ZXVlIHF1ZXVlLCBGdW5jdG9yJiBmdW5jdG9yKQoreworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zdG9yYWdlLnF1ZXVlU2l6ZShxdWV1ZSk7IGkrKykKKyAg
ICAgICAgZnVuY3RvcihpLCBtX3N0b3JhZ2UucXVldWUocXVldWUpLmF0KGkpLmdldCgpKTsKKwor
ICAgIHJldHVybiBmdW5jdG9yLnJldHVyblZhbHVlKCk7Cit9CisKK2lubGluZSBGdW5jdG9ySW5w
dXRDdXJzb3I6OkZ1bmN0b3JJbnB1dEN1cnNvcihTZWdtZW50ZWRJbnB1dFN0b3JhZ2UmIHN0b3Jh
Z2UpCisgICAgOiBtX3N0b3JhZ2Uoc3RvcmFnZSkKK3sKK30KKworaW5saW5lIHZvaWQgRnVuY3Rv
cklucHV0Q3Vyc29yOjpzdG9yZUlucHV0KHN0ZDo6dW5pcXVlX3B0cjxOb25kZXRlcm1pbmlzdGlj
SW5wdXRCYXNlPikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworaW5saW5lIE5v
bmRldGVybWluaXN0aWNJbnB1dEJhc2UqIEZ1bmN0b3JJbnB1dEN1cnNvcjo6bG9hZElucHV0KElu
cHV0UXVldWUsIGNvbnN0IEF0b21pY1N0cmluZyYpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK2lubGluZSBOb25kZXRlcm1pbmlzdGljSW5w
dXRCYXNlKiBGdW5jdG9ySW5wdXRDdXJzb3I6OnVuY2hlY2tlZExvYWRJbnB1dChJbnB1dFF1ZXVl
KQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JFUExBWSkK
KworI2VuZGlmIC8vIEZ1bmN0b3JJbnB1dEN1cnNvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZXBsYXkvUmVwbGF5Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkv
UmVwbGF5Q29udHJvbGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDI5OWYyZGYzNjAwOGMxMGQzOGI2YWFj
Y2Q1ZWJmYjBhMmI4OTM0NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlcGxh
eS9SZXBsYXlDb250cm9sbGVyLmNwcApAQCAtMCwwICsxLDM2MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMS0yMDEzIFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMKKyAqIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRAorICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBCisgKiBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlJlcGxheUNvbnRyb2xsZXIuaCIKKworI2lmIEVOQUJMRShXRUJfUkVQTEFZKQor
CisjaW5jbHVkZSAiQWxsUmVwbGF5SW5wdXRzLmgiCisjaW5jbHVkZSAiQ2FwdHVyaW5nSW5wdXRD
dXJzb3IuaCIKKyNpbmNsdWRlICJET01XaW5kb3cuaCIKKyNpbmNsdWRlICJEb2N1bWVudExvYWRl
ci5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCisjaW5jbHVk
ZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2lu
Y2x1ZGUgIk1haW5GcmFtZS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJSZXBsYXlT
ZXNzaW9uLmgiCisjaW5jbHVkZSAiUmVwbGF5U2Vzc2lvblNlZ21lbnQuaCIKKyNpbmNsdWRlICJS
ZXBsYXlpbmdJbnB1dEN1cnNvci5oIgorI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKKyNp
bmNsdWRlICJXZWJSZXBsYXlJbnB1dHMuaCIKKyNpbmNsdWRlIDxyZXBsYXkvRW1wdHlJbnB1dEN1
cnNvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitSZXBsYXlDb250cm9sbGVyOjpSZXBsYXlDb250cm9sbGVyKFBhZ2UmIHBhZ2UpCisg
ICAgOiBtX3BhZ2UocGFnZSkKKyAgICAsIG1fbG9hZGVkU2VnbWVudChudWxscHRyKQorICAgICwg
bV9sb2FkZWRTZXNzaW9uKFJlcGxheVNlc3Npb246OmNyZWF0ZSgpKQorICAgICwgbV9lbXB0eUN1
cnNvcihFbXB0eUlucHV0Q3Vyc29yOjpjcmVhdGUoKSkKKyAgICAsIG1fYWN0aXZlQ3Vyc29yKG51
bGxwdHIpCisgICAgLCBtX3RhcmdldFBvc2l0aW9uKFJlcGxheVBvc2l0aW9uKDAsIDApKQorICAg
ICwgbV9jdXJyZW50UG9zaXRpb24oUmVwbGF5UG9zaXRpb24oMCwgMCkpCisgICAgLCBtX3NlZ21l
bnRTdGF0ZShTZWdtZW50U3RhdGU6OlVubG9hZGVkKQorICAgICwgbV9zZXNzaW9uU3RhdGUoU2Vz
c2lvblN0YXRlOjpJbmFjdGl2ZSkKKyAgICAsIG1fZGlzcGF0Y2hTcGVlZChEaXNwYXRjaFNwZWVk
OjpGYXN0Rm9yd2FyZCkKK3sKK30KKwordm9pZCBSZXBsYXlDb250cm9sbGVyOjpzd2l0Y2hTZXNz
aW9uKFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvbj4gc2Vzc2lvbikKK3sKKyAgICBBU1NFUlQobV9z
ZWdtZW50U3RhdGUgPT0gU2VnbWVudFN0YXRlOjpVbmxvYWRlZCk7CisgICAgQVNTRVJUKG1fc2Vz
c2lvblN0YXRlID09IFNlc3Npb25TdGF0ZTo6SW5hY3RpdmUpOworCisgICAgbV9sb2FkZWRTZXNz
aW9uID0gc2Vzc2lvbjsKKyAgICBtX2N1cnJlbnRQb3NpdGlvbiA9IFJlcGxheVBvc2l0aW9uKDAs
IDApOworCisgICAgTE9HKFdlYlJlcGxheSwgIiUtMjBzU3dpdGNoaW5nIHNlc3Npb25zIGZyb20g
JXAgdG8gJXAuXG4iLCAiUmVwbGF5Q29udHJvbGxlciIsIG1fbG9hZGVkU2Vzc2lvbi5nZXQoKSwg
c2Vzc2lvbi5nZXQoKSk7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZXNzaW9uTG9h
ZGVkKCZtX3BhZ2UsIG1fbG9hZGVkU2Vzc2lvbik7Cit9CisKK3ZvaWQgUmVwbGF5Q29udHJvbGxl
cjo6Y3JlYXRlU2VnbWVudCgpCit7CisgICAgQVNTRVJUKG1fc2Vzc2lvblN0YXRlID09IFNlc3Np
b25TdGF0ZTo6Q2FwdHVyaW5nKTsKKyAgICBBU1NFUlQobV9zZWdtZW50U3RhdGUgPT0gU2VnbWVu
dFN0YXRlOjpVbmxvYWRlZCk7CisKKyAgICBtX3NlZ21lbnRTdGF0ZSA9IFNlZ21lbnRTdGF0ZTo6
QXBwZW5kaW5nOworCisgICAgLy8gQ3JlYXRlIGEgbmV3IHNlZ21lbnQgYnV0IGRvbid0IGFzc29j
aWF0ZSBpdCB3aXRoIHRoZSBjdXJyZW50IHNlc3Npb24KKyAgICAvLyB1bnRpbCB3ZSBzdG9wIGFw
cGVuZGluZyB0byBpdC4gVGhpcyBwcmVzZXJ2ZXMgdGhlIGludmFyaWFudCB0aGF0CisgICAgLy8g
c2VnbWVudHMgYXNzb2NpYXRlZCB3aXRoIGEgcmVwbGF5IHNlc3Npb24gaGF2ZSBpbW11dGFibGUg
ZGF0YS4KKyAgICBtX2xvYWRlZFNlZ21lbnQgPSBSZXBsYXlTZXNzaW9uU2VnbWVudDo6Y3JlYXRl
KCk7CisKKyAgICBMT0coV2ViUmVwbGF5LCAiJS0yMHMgQ3JlYXRlZCBzZWdtZW50OiAlcC5cbiIs
ICJSZXBsYXlDb250cm9sbGVyIiwgbV9sb2FkZWRTZWdtZW50LmdldCgpKTsKKyAgICBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OnNlZ21lbnRDcmVhdGVkKCZtX3BhZ2UsIG1fbG9hZGVkU2VnbWVu
dCk7CisKKyAgICBtX2FjdGl2ZUN1cnNvciA9IG1fbG9hZGVkU2VnbWVudC0+Y3JlYXRlQ2FwdHVy
aW5nQ3Vyc29yKG1fcGFnZSk7CisgICAgbV9hY3RpdmVDdXJzb3ItPmFwcGVuZElucHV0PEJlZ2lu
U2VnbWVudFNlbnRpbmVsPigpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPEluaXRpYWxOYXZpZ2F0
aW9uPiBuYXZpZ2F0aW9uSW5wdXQgPSBJbml0aWFsTmF2aWdhdGlvbjo6Y3JlYXRlRnJvbVBhZ2Uo
bV9wYWdlKTsKKyAgICAvLyBEaXNwYXRjaGluZyB0aGlzIGlucHV0IHNjaGVkdWxlcyBuYXZpZ2F0
aW9uIG9mIHRoZSBtYWluIGZyYW1lLCBjYXVzaW5nIGEgcmVmcmVzaC4KKyAgICBuYXZpZ2F0aW9u
SW5wdXQtPmRpc3BhdGNoKCp0aGlzKTsKKyAgICBtX2FjdGl2ZUN1cnNvci0+c3RvcmVJbnB1dChz
dGQ6Om1vdmUobmF2aWdhdGlvbklucHV0KSk7Cit9CisKK3ZvaWQgUmVwbGF5Q29udHJvbGxlcjo6
Y29tcGxldGVTZWdtZW50KCkKK3sKKyAgICBBU1NFUlQobV9zZXNzaW9uU3RhdGUgPT0gU2Vzc2lv
blN0YXRlOjpDYXB0dXJpbmcpOworICAgIEFTU0VSVChtX3NlZ21lbnRTdGF0ZSA9PSBTZWdtZW50
U3RhdGU6OkFwcGVuZGluZyk7CisKKyAgICBtX2FjdGl2ZUN1cnNvci0+YXBwZW5kSW5wdXQ8RW5k
U2VnbWVudFNlbnRpbmVsPigpOworCisgICAgLy8gSG9sZCBvbiB0byBhIHJlZmVyZW5jZSBzbyB1
bmxvYWRpbmcgdGhlIHNlZ21lbnQgZG9lc24ndCBkZWFsbG9jYXRlIGl0LgorICAgIFJlZlB0cjxS
ZXBsYXlTZXNzaW9uU2VnbWVudD4gc2VnbWVudCA9IG1fbG9hZGVkU2VnbWVudDsKKyAgICBtX3Nl
Z21lbnRTdGF0ZSA9IFNlZ21lbnRTdGF0ZTo6TG9hZGVkOworICAgIGJvb2wgc2hvdWxkU3VwcHJl
c3NOb3RpZmljYXRpb25zID0gdHJ1ZTsKKyAgICB1bmxvYWRTZWdtZW50KHNob3VsZFN1cHByZXNz
Tm90aWZpY2F0aW9ucyk7CisKKyAgICBMT0coV2ViUmVwbGF5LCAiJS0yMHMgQ29tcGxldGVkIHNl
Z21lbnQ6ICVwLlxuIiwgIlJlcGxheUNvbnRyb2xsZXIiLCBzZWdtZW50LmdldCgpKTsKKyAgICBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlZ21lbnRDb21wbGV0ZWQoJm1fcGFnZSwgc2VnbWVu
dCk7CisKKyAgICBtX2xvYWRlZFNlc3Npb24tPmFwcGVuZFNlZ21lbnQoc2VnbWVudCk7CisgICAg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzZXNzaW9uTW9kaWZpZWQoJm1fcGFnZSwgbV9sb2Fk
ZWRTZXNzaW9uKTsKK30KKwordm9pZCBSZXBsYXlDb250cm9sbGVyOjpsb2FkU2VnbWVudChQYXNz
UmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiBwcnBTZWdtZW50KQoreworICAgIFJlZlB0cjxS
ZXBsYXlTZXNzaW9uU2VnbWVudD4gc2VnbWVudCA9IHBycFNlZ21lbnQ7CisKKyAgICBBU1NFUlQo
bV9zZXNzaW9uU3RhdGUgPT0gU2Vzc2lvblN0YXRlOjpSZXBsYXlpbmcpOworICAgIEFTU0VSVCht
X3NlZ21lbnRTdGF0ZSA9PSBTZWdtZW50U3RhdGU6OlVubG9hZGVkKTsKKyAgICBBU1NFUlQoc2Vn
bWVudCk7CisgICAgQVNTRVJUKCFtX2xvYWRlZFNlZ21lbnQpOworCisgICAgbV9sb2FkZWRTZWdt
ZW50ID0gc2VnbWVudDsKKyAgICBtX3NlZ21lbnRTdGF0ZSA9IFNlZ21lbnRTdGF0ZTo6TG9hZGVk
OworCisgICAgbV9hY3RpdmVDdXJzb3IgPSBtX2xvYWRlZFNlZ21lbnQtPmNyZWF0ZVJlcGxheWlu
Z0N1cnNvcihtX3BhZ2UsIHRoaXMpOworICAgIGRpc3BhdGNoZXIoKS5zZXREaXNwYXRjaFNwZWVk
KG1fZGlzcGF0Y2hTcGVlZCk7CisKKyAgICBMT0coV2ViUmVwbGF5LCAiJS0yMHNMb2FkaW5nIHNl
Z21lbnQ6ICVwLlxuIiwgIlJlcGxheUNvbnRyb2xsZXIiLCBzZWdtZW50LmdldCgpKTsKKyAgICBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNlZ21lbnRMb2FkZWQoJm1fcGFnZSwgc2VnbWVudCk7
Cit9CisKK3ZvaWQgUmVwbGF5Q29udHJvbGxlcjo6dW5sb2FkU2VnbWVudChib29sIHN1cHByZXNz
Tm90aWZpY2F0aW9ucykKK3sKKyAgICBBU1NFUlQobV9zZXNzaW9uU3RhdGUgIT0gU2Vzc2lvblN0
YXRlOjpJbmFjdGl2ZSk7CisgICAgQVNTRVJUKG1fc2VnbWVudFN0YXRlID09IFNlZ21lbnRTdGF0
ZTo6TG9hZGVkKTsKKworICAgIG1fc2VnbWVudFN0YXRlID0gU2VnbWVudFN0YXRlOjpVbmxvYWRl
ZDsKKworICAgIExPRyhXZWJSZXBsYXksICIlLTIwcyBDbGVhcmluZyBpbnB1dCBjdXJzb3JzIGZv
ciBwYWdlOiAlcFxuIiwgIlJlcGxheUNvbnRyb2xsZXIiLCAmbV9wYWdlKTsKKworICAgIG1fYWN0
aXZlQ3Vyc29yID0gbnVsbHB0cjsKKyAgICBSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+IHVu
bG9hZGVkU2VnbWVudCA9IG1fbG9hZGVkU2VnbWVudC5yZWxlYXNlKCk7CisgICAgZm9yIChGcmFt
ZSogZnJhbWUgPSAmbV9wYWdlLm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJl
ZSgpLnRyYXZlcnNlTmV4dCgpKSB7CisgICAgICAgIGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmpl
Y3QobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpLT5zZXRJbnB1dEN1cnNvcihtX2VtcHR5Q3Vyc29y
KTsKKyAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPnNldElucHV0Q3Vyc29yKG1fZW1wdHlDdXJz
b3IpOworICAgIH0KKworICAgIC8vIFdoZW4gd2Ugc3RvcCBjYXB0dXJpbmcsIGRvbid0IHNlbmQg
b3V0IHNlZ21lbnQgdW5sb2FkZWQgZXZlbnRzIHNpbmNlIHdlCisgICAgLy8gZGlkbid0IHNlbmQg
b3V0IHRoZSBjb3JyZXNwb25kaW5nIHNlZ21lbnRMb2FkZWQgZXZlbnQgYXQgdGhlIHN0YXJ0IG9m
IGNhcHR1cmUuCisgICAgaWYgKCFzdXBwcmVzc05vdGlmaWNhdGlvbnMpIHsKKyAgICAgICAgTE9H
KFdlYlJlcGxheSwgIiUtMjBzVW5sb2FkaW5nIHNlZ21lbnQ6ICVwLlxuIiwgIlJlcGxheUNvbnRy
b2xsZXIiLCB1bmxvYWRlZFNlZ21lbnQuZ2V0KCkpOworICAgICAgICBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OnNlZ21lbnRVbmxvYWRlZCgmbV9wYWdlKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVw
bGF5Q29udHJvbGxlcjo6c3RhcnRDYXB0dXJpbmcoKQoreworICAgIEFTU0VSVChtX3Nlc3Npb25T
dGF0ZSA9PSBTZXNzaW9uU3RhdGU6OkluYWN0aXZlKTsKKyAgICBBU1NFUlQobV9zZWdtZW50U3Rh
dGUgPT0gU2VnbWVudFN0YXRlOjpVbmxvYWRlZCk7CisKKyAgICBtX3Nlc3Npb25TdGF0ZSA9IFNl
c3Npb25TdGF0ZTo6Q2FwdHVyaW5nOworCisgICAgTE9HKFdlYlJlcGxheSwgIiUtMjBzIFN0YXJ0
aW5nIGNhcHR1cmUuXG4iLCAiUmVwbGF5Q29udHJvbGxlciIpOworICAgIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6Y2FwdHVyZVN0YXJ0ZWQoJm1fcGFnZSk7CisKKyAgICBtX2N1cnJlbnRQb3Np
dGlvbiA9IFJlcGxheVBvc2l0aW9uKDAsIDApOworICAgIGNyZWF0ZVNlZ21lbnQoKTsKK30KKwor
dm9pZCBSZXBsYXlDb250cm9sbGVyOjpzdG9wQ2FwdHVyaW5nKCkKK3sKKyAgICBBU1NFUlQobV9z
ZXNzaW9uU3RhdGUgPT0gU2Vzc2lvblN0YXRlOjpDYXB0dXJpbmcpOworICAgIEFTU0VSVChtX3Nl
Z21lbnRTdGF0ZSA9PSBTZWdtZW50U3RhdGU6OkFwcGVuZGluZyk7CisKKyAgICBjb21wbGV0ZVNl
Z21lbnQoKTsKKworICAgIG1fc2Vzc2lvblN0YXRlID0gU2Vzc2lvblN0YXRlOjpJbmFjdGl2ZTsK
KworICAgIExPRyhXZWJSZXBsYXksICIlLTIwcyBTdG9wcGluZyBjYXB0dXJlLlxuIiwgIlJlcGxh
eUNvbnRyb2xsZXIiKTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNhcHR1cmVTdG9w
cGVkKCZtX3BhZ2UpOworfQorCit2b2lkIFJlcGxheUNvbnRyb2xsZXI6OnN0YXJ0UGxheWJhY2so
KQoreworICAgIEFTU0VSVChtX3Nlc3Npb25TdGF0ZSA9PSBTZXNzaW9uU3RhdGU6OlJlcGxheWlu
Zyk7CisgICAgQVNTRVJUKG1fc2VnbWVudFN0YXRlID09IFNlZ21lbnRTdGF0ZTo6TG9hZGVkKTsK
KworICAgIG1fc2VnbWVudFN0YXRlID0gU2VnbWVudFN0YXRlOjpEaXNwYXRjaGluZzsKKworICAg
IExPRyhXZWJSZXBsYXksICIlLTIwcyBTdGFydGluZyBwbGF5YmFjayB0byBwb3NpdGlvbiAoc2Vn
bWVudDogJWQsIGlucHV0OiAlZCkuXG4iLCAiUmVwbGF5Q29udHJvbGxlciIsIG1fdGFyZ2V0UG9z
aXRpb24uc2VnbWVudE9mZnNldCwgbV90YXJnZXRQb3NpdGlvbi5pbnB1dE9mZnNldCk7CisgICAg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpwbGF5YmFja1N0YXJ0ZWQoJm1fcGFnZSk7CisKKyAg
ICBkaXNwYXRjaGVyKCkucnVuKCk7Cit9CisKK3ZvaWQgUmVwbGF5Q29udHJvbGxlcjo6cGF1c2VQ
bGF5YmFjaygpCit7CisgICAgQVNTRVJUKG1fc2Vzc2lvblN0YXRlID09IFNlc3Npb25TdGF0ZTo6
UmVwbGF5aW5nKTsKKyAgICBBU1NFUlQobV9zZWdtZW50U3RhdGUgPT0gU2VnbWVudFN0YXRlOjpE
aXNwYXRjaGluZyk7CisKKyAgICBtX3NlZ21lbnRTdGF0ZSA9IFNlZ21lbnRTdGF0ZTo6TG9hZGVk
OworCisgICAgZGlzcGF0Y2hlcigpLnBhdXNlKCk7CisKKyAgICBMT0coV2ViUmVwbGF5LCAiJS0y
MHMgUGF1c2luZyBwbGF5YmFjayBhdCBwb3NpdGlvbiAoc2VnbWVudDogJWQsIGlucHV0OiAlZCku
XG4iLCAiUmVwbGF5Q29udHJvbGxlciIsIG1fY3VycmVudFBvc2l0aW9uLnNlZ21lbnRPZmZzZXQs
IG1fY3VycmVudFBvc2l0aW9uLmlucHV0T2Zmc2V0KTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OnBsYXliYWNrUGF1c2VkKCZtX3BhZ2UsIG1fY3VycmVudFBvc2l0aW9uKTsKK30KKwor
dm9pZCBSZXBsYXlDb250cm9sbGVyOjpjYW5jZWxQbGF5YmFjaygpCit7CisgICAgQVNTRVJUKG1f
c2Vzc2lvblN0YXRlID09IFNlc3Npb25TdGF0ZTo6UmVwbGF5aW5nKTsKKyAgICBBU1NFUlQobV9z
ZWdtZW50U3RhdGUgIT0gU2VnbWVudFN0YXRlOjpBcHBlbmRpbmcpOworCisgICAgaWYgKG1fc2Vn
bWVudFN0YXRlID09IFNlZ21lbnRTdGF0ZTo6VW5sb2FkZWQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChtX3NlZ21lbnRTdGF0ZSA9PSBTZWdtZW50U3RhdGU6OkRpc3BhdGNoaW5nKQorICAg
ICAgICBwYXVzZVBsYXliYWNrKCk7CisKKyAgICBBU1NFUlQobV9zZWdtZW50U3RhdGUgPT0gU2Vn
bWVudFN0YXRlOjpMb2FkZWQpOworICAgIHVubG9hZFNlZ21lbnQoKTsKKyAgICBtX3Nlc3Npb25T
dGF0ZSA9IFNlc3Npb25TdGF0ZTo6SW5hY3RpdmU7Cit9CisKK3ZvaWQgUmVwbGF5Q29udHJvbGxl
cjo6cmVwbGF5VG9Qb3NpdGlvbihjb25zdCBSZXBsYXlQb3NpdGlvbiYgcG9zaXRpb24sIERpc3Bh
dGNoU3BlZWQgc3BlZWQpCit7CisgICAgQVNTRVJUKG1fc2Vzc2lvblN0YXRlICE9IFNlc3Npb25T
dGF0ZTo6Q2FwdHVyaW5nKTsKKyAgICBBU1NFUlQobV9zZWdtZW50U3RhdGUgPT0gU2VnbWVudFN0
YXRlOjpMb2FkZWQgfHwgbV9zZWdtZW50U3RhdGUgPT0gU2VnbWVudFN0YXRlOjpVbmxvYWRlZCk7
CisgICAgQVNTRVJUKHBvc2l0aW9uLnNlZ21lbnRPZmZzZXQgPCBtX2xvYWRlZFNlc3Npb24tPnNp
emUoKSk7CisKKyAgICBtX2Rpc3BhdGNoU3BlZWQgPSBzcGVlZDsKKworICAgIGlmIChtX3Nlc3Np
b25TdGF0ZSAhPSBTZXNzaW9uU3RhdGU6OlJlcGxheWluZykKKyAgICAgICAgbV9zZXNzaW9uU3Rh
dGUgPSBTZXNzaW9uU3RhdGU6OlJlcGxheWluZzsKKworICAgIGlmIChtX3NlZ21lbnRTdGF0ZSA9
PSBTZWdtZW50U3RhdGU6OlVubG9hZGVkKQorICAgICAgICBsb2FkU2VnbWVudChtX2xvYWRlZFNl
c3Npb24tPmF0KHBvc2l0aW9uLnNlZ21lbnRPZmZzZXQpKTsKKyAgICBlbHNlIGlmIChwb3NpdGlv
bi5zZWdtZW50T2Zmc2V0ICE9IG1fY3VycmVudFBvc2l0aW9uLnNlZ21lbnRPZmZzZXQgfHwgbV9j
dXJyZW50UG9zaXRpb24uaW5wdXRPZmZzZXQgPiBwb3NpdGlvbi5pbnB1dE9mZnNldCkgeworICAg
ICAgICAvLyBJZiB0aGUgZGVzaXJlZCBzZWdtZW50IGlzIG5vdCBsb2FkZWQgb3Igd2UgaGF2ZSBn
b25lIHBhc3QgdGhlIGRlc2lyZWQgaW5wdXQKKyAgICAgICAgLy8gb2Zmc2V0LCB0aGVuIHVubG9h
ZCB0aGUgY3VycmVudCBzZWdtZW50IGFuZCBsb2FkIHRoZSBhcHByb3ByaWF0ZSBzZWdtZW50Lgor
ICAgICAgICB1bmxvYWRTZWdtZW50KCk7CisgICAgICAgIGxvYWRTZWdtZW50KG1fbG9hZGVkU2Vz
c2lvbi0+YXQocG9zaXRpb24uc2VnbWVudE9mZnNldCkpOworICAgIH0KKworICAgIEFTU0VSVCht
X2N1cnJlbnRQb3NpdGlvbi5zZWdtZW50T2Zmc2V0ID09IHBvc2l0aW9uLnNlZ21lbnRPZmZzZXQp
OworICAgIEFTU0VSVChtX2xvYWRlZFNlc3Npb24tPmF0KHBvc2l0aW9uLnNlZ21lbnRPZmZzZXQp
ID09IG1fbG9hZGVkU2VnbWVudCk7CisKKyAgICBtX3RhcmdldFBvc2l0aW9uID0gcG9zaXRpb247
CisgICAgc3RhcnRQbGF5YmFjaygpOworfQorCit2b2lkIFJlcGxheUNvbnRyb2xsZXI6OmZyYW1l
TmF2aWdhdGVkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCit7CisgICAgQVNTRVJUKG1fc2Vzc2lv
blN0YXRlICE9IFNlc3Npb25TdGF0ZTo6SW5hY3RpdmUpOworCisgICAgLy8gVGhlIGluaXRpYWwg
Y2FwdHVyaW5nIHNlZ21lbnQgaXMgY3JlYXRlZCBwcmlvciB0byBtYWluIGZyYW1lIG5hdmlnYXRp
b24uCisgICAgLy8gT3RoZXJ3aXNlLCB0aGUgcHJpb3IgY2FwdHVyaW5nIHNlZ21lbnQgd2FzIGNv
bXBsZXRlZCB3aGVuIHRoZSBmcmFtZSBkZXRhY2hlZCwKKyAgICAvLyBhbmQgaXQgaXMgbm93IHRp
bWUgdG8gY3JlYXRlIGEgbmV3IHNlZ21lbnQuCisgICAgaWYgKG1fc2Vzc2lvblN0YXRlID09IFNl
c3Npb25TdGF0ZTo6Q2FwdHVyaW5nICYmIG1fc2VnbWVudFN0YXRlID09IFNlZ21lbnRTdGF0ZTo6
VW5sb2FkZWQpIHsKKyAgICAgICAgbV9jdXJyZW50UG9zaXRpb24gPSBSZXBsYXlQb3NpdGlvbiht
X2N1cnJlbnRQb3NpdGlvbi5zZWdtZW50T2Zmc2V0ICsgMSwgMCk7CisgICAgICAgIGNyZWF0ZVNl
Z21lbnQoKTsKKyAgICB9CisKKyAgICAvLyBEdXJpbmcgcGxheWJhY2ssIHRoZSBuZXh0IHNlZ21l
bnQgaXMgbG9hZGVkIHdoZW4gdGhlIGZpbmFsIGlucHV0IGlzIGRpc3BhdGNoZWQsCisgICAgLy8g
c28gbm90aGluZyBuZWVkcyB0byBiZSBkb25lIGhlcmUuCisKKyAgICAvLyBXZSBzdG9yZSB0aGUg
aW5wdXQgY3Vyc29yIGluIGJvdGggRG9jdW1lbnQgYW5kIEpTRE9NV2luZG93LCBzbyB0aGF0Cisg
ICAgLy8gcmVwbGF5IHN0YXRlIGlzIGFjY2Vzc2libGUgZnJvbSBKYXZhU2NyaXB0Q29yZSBhbmQg
c2NyaXB0LWZyZWUgbGF5b3V0IGNvZGUuCisgICAgbG9hZGVyLT5mcmFtZSgpLT5kb2N1bWVudCgp
LT5zZXRJbnB1dEN1cnNvcihtX2FjdGl2ZUN1cnNvci5nZXQoKSk7CisgICAgbG9hZGVyLT5mcmFt
ZSgpLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpLT5zZXRJ
bnB1dEN1cnNvcihtX2FjdGl2ZUN1cnNvci5nZXQoKSk7Cit9CisKK3ZvaWQgUmVwbGF5Q29udHJv
bGxlcjo6ZnJhbWVEZXRhY2hlZChGcmFtZSogZnJhbWUpCit7CisgICAgQVNTRVJUKG1fc2Vzc2lv
blN0YXRlICE9IFNlc3Npb25TdGF0ZTo6SW5hY3RpdmUpOworICAgIEFTU0VSVChmcmFtZSk7CisK
KyAgICBpZiAoIWZyYW1lLT5kb2N1bWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJ
ZiB0aGUgZnJhbWUncyBjdXJzb3IgaXNuJ3QgY2FwdHVyaW5nIG9yIHJlcGxheWluZywgd2Ugc2hv
dWxkIGRvIG5vdGhpbmcuCisgICAgLy8gVGhpcyBpcyB0aGUgY2FzZSBmb3IgdGhlICJvdXRib3Vu
ZCIgZnJhbWUgd2hlbiBzdGFydGluZyBjYXB0dXJlLCBvciB3aGVuCisgICAgLy8gd2UgY2xlYXIg
dGhlIGlucHV0IGN1cnNvciB0byBmaW5pc2ggb3IgcHJlbWF0dXJlbHkgdW5sb2FkIGEgc2VnbWVu
dC4KKyAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCktPmlucHV0Q3Vyc29yKCkuaXNDYXB0dXJpbmco
KSkgeworICAgICAgICBBU1NFUlQobV9zZWdtZW50U3RhdGUgPT0gU2VnbWVudFN0YXRlOjpBcHBl
bmRpbmcpOworICAgICAgICBjb21wbGV0ZVNlZ21lbnQoKTsKKyAgICB9CisKKyAgICAvLyBEdXJp
bmcgcGxheWJhY2ssIHRoZSBzZWdtZW50cyBhcmUgdW5sb2FkZWQgYW5kIGxvYWRlZCB3aGVuIHRo
ZSBmaW5hbAorICAgIC8vIGlucHV0IGhhcyBiZWVuIGRpc3BhdGNoZWQuIFNvLCBub3RoaW5nIG5l
ZWRzIHRvIGJlIGRvbmUgaGVyZS4KK30KKworUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uPiBSZXBs
YXlDb250cm9sbGVyOjpsb2FkZWRTZXNzaW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sb2Fk
ZWRTZXNzaW9uOworfQorCitQYXNzUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiBSZXBsYXlD
b250cm9sbGVyOjpsb2FkZWRTZWdtZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sb2FkZWRT
ZWdtZW50OworfQorCitJbnB1dEN1cnNvciYgUmVwbGF5Q29udHJvbGxlcjo6YWN0aXZlSW5wdXRD
dXJzb3IoKSBjb25zdAoreworICAgIHJldHVybiBtX2FjdGl2ZUN1cnNvciA/ICptX2FjdGl2ZUN1
cnNvciA6ICptX2VtcHR5Q3Vyc29yOworfQorCitFdmVudExvb3BJbnB1dERpc3BhdGNoZXImIFJl
cGxheUNvbnRyb2xsZXI6OmRpc3BhdGNoZXIoKSBjb25zdAoreworICAgIEFTU0VSVChtX3Nlc3Np
b25TdGF0ZSA9PSBTZXNzaW9uU3RhdGU6OlJlcGxheWluZyk7CisgICAgQVNTRVJUKG1fc2VnbWVu
dFN0YXRlID09IFNlZ21lbnRTdGF0ZTo6RGlzcGF0Y2hpbmcpOworICAgIEFTU0VSVChtX2FjdGl2
ZUN1cnNvcik7CisgICAgQVNTRVJUKG1fYWN0aXZlQ3Vyc29yLT5pc1JlcGxheWluZygpKTsKKwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZXBsYXlpbmdJbnB1dEN1cnNvciY+KCptX2FjdGl2ZUN1
cnNvcikuZGlzcGF0Y2hlcigpOworfQorCit2b2lkIFJlcGxheUNvbnRyb2xsZXI6OndpbGxEaXNw
YXRjaElucHV0KGNvbnN0IEV2ZW50TG9vcElucHV0QmFzZSYpCit7CisgICAgQVNTRVJUKG1fc2Vz
c2lvblN0YXRlID09IFNlc3Npb25TdGF0ZTo6UmVwbGF5aW5nKTsKKyAgICBBU1NFUlQobV9zZWdt
ZW50U3RhdGUgPT0gU2VnbWVudFN0YXRlOjpEaXNwYXRjaGluZyk7CisKKyAgICBtX2N1cnJlbnRQ
b3NpdGlvbi5pbnB1dE9mZnNldCsrOworICAgIGlmIChtX2N1cnJlbnRQb3NpdGlvbiA9PSBtX3Rh
cmdldFBvc2l0aW9uKQorICAgICAgICBwYXVzZVBsYXliYWNrKCk7Cit9CisKK3ZvaWQgUmVwbGF5
Q29udHJvbGxlcjo6ZGlkRGlzcGF0Y2hJbnB1dChjb25zdCBFdmVudExvb3BJbnB1dEJhc2UmKQor
eworICAgIEFTU0VSVChtX3Nlc3Npb25TdGF0ZSA9PSBTZXNzaW9uU3RhdGU6OlJlcGxheWluZyk7
CisgICAgQVNTRVJUKG1fc2VnbWVudFN0YXRlID09IFNlZ21lbnRTdGF0ZTo6RGlzcGF0Y2hpbmcp
OworCisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpwbGF5YmFja0hpdFBvc2l0aW9uKCZt
X3BhZ2UsIG1fY3VycmVudFBvc2l0aW9uKTsKK30KKwordm9pZCBSZXBsYXlDb250cm9sbGVyOjpk
aWREaXNwYXRjaEZpbmFsSW5wdXQoKQoreworICAgIEFTU0VSVChtX3NlZ21lbnRTdGF0ZSA9PSBT
ZWdtZW50U3RhdGU6OkRpc3BhdGNoaW5nKTsKKworICAgIHBhdXNlKCk7CisgICAgdW5sb2FkU2Vn
bWVudCgpOworCisgICAgLy8gTm8gbW9yZSBzZWdtZW50cyBsZWZ0IHRvIHJlcGxheTsgc3RvcC4K
KyAgICBpZiAoKyttX2N1cnJlbnRQb3NpdGlvbi5zZWdtZW50T2Zmc2V0ID09IG1fbG9hZGVkU2Vz
c2lvbi0+c2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBsb2FkU2VnbWVudChtX2xvYWRl
ZFNlc3Npb24tPmF0KG1fY3VycmVudFBvc2l0aW9uLnNlZ21lbnRPZmZzZXQpKTsKKyAgICBzdGFy
dFBsYXliYWNrKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShXRUJfUkVQTEFZKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVwbGF5L1JlcGxh
eUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9SZXBsYXlDb250cm9sbGVyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNzIzNjhhYWU1MWRmNTlmYmEyMjlkODgwZGMyZGY5YmEyMzE5ZWQ2YgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9SZXBsYXlDb250cm9sbGVyLmgK
QEAgLTAsMCArMSwxNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMgIkFTCisgKiBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAqIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQorICogUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgUmVwbGF5Q29udHJvbGxlcl9oCisjZGVmaW5lIFJlcGxheUNv
bnRyb2xsZXJfaAorCisjaWYgRU5BQkxFKFdFQl9SRVBMQVkpCisKKyNpbmNsdWRlICJFdmVudExv
b3BJbnB1dERpc3BhdGNoZXIuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworY2xhc3MgSW5wdXRDdXJzb3I7
Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRE9NV2luZG93OworY2xhc3MgRG9j
dW1lbnQ7CitjbGFzcyBEb2N1bWVudExvYWRlcjsKK2NsYXNzIEVsZW1lbnQ7CitjbGFzcyBFdmVu
dDsKK2NsYXNzIEV2ZW50TG9vcElucHV0QmFzZTsKK2NsYXNzIEZyYW1lOworY2xhc3MgTm9kZTsK
K2NsYXNzIFBhZ2U7CitjbGFzcyBSZXBsYXlTZXNzaW9uOworY2xhc3MgUmVwbGF5U2Vzc2lvblNl
Z21lbnQ7CisKKy8vIEVhY2ggc3RhdGUgbWF5IHRyYW5zaXRpb24gdG8gdGhlIHN0YXRlIGltbWVk
aWF0ZWx5IGFib3ZlIG9yIGJlbG93IGl0LgorLy8gU2Vzc2lvblN0YXRlIHRyYW5zaXRpb25zIGFy
ZSBvbmx5IGFsbG93ZWQgd2hlbiBTZWdtZW50U3RhdGUgaXMgVW5sb2FkZWQuCitlbnVtIGNsYXNz
IFNlc3Npb25TdGF0ZSB7CisgICAgQ2FwdHVyaW5nLAorICAgIC8vIE5laXRoZXIgY2FwdHVyaW5n
IG9yIHJlcGxheWluZy4gbV9jdXJyZW50UG9zaXRpb24gaXMgbm90IHZhbGlkIGluIHRoaXMgc3Rh
dGUuCisgICAgSW5hY3RpdmUsCisgICAgUmVwbGF5aW5nLAorfTsKKworLy8gRWFjaCBzdGF0ZSBt
YXkgdHJhbnNpdGlvbiB0byB0aGUgc3RhdGUgaW1tZWRpYXRlbHkgYWJvdmUgb3IgYmVsb3cgaXQu
CitlbnVtIGNsYXNzIFNlZ21lbnRTdGF0ZSB7CisgICAgLy8gSW5wdXRzIGNhbiBiZSBhcHBlbmRl
ZCBpbnRvIGFuIHVuYXNzb2NpYXRlZCBzZXNzaW9uIHNlZ21lbnQuCisgICAgLy8gV2UgY2FuIHN0
b3AgY2FwdHVyaW5nLCB3aGljaCByZXZlcnRzIHRvIHRoZSBVbmxvYWRlZCBzdGF0ZS4KKyAgICBB
cHBlbmRpbmcsCisgICAgLy8gTm8gc2Vzc2lvbiBzZWdtZW50IGlzIGxvYWRlZC4KKyAgICAvLyBX
ZSBjYW4gc3RhcnQgY2FwdHVyaW5nLCBvciBsb2FkIGEgc2VnbWVudCAoYW5kIHRoZW4gcmVwbGF5
IGl0KS4KKyAgICBVbmxvYWRlZCwKKyAgICAvLyBBIHNlc3Npb24gc2VnbWVudCBpcyBsb2FkZWQu
CisgICAgLy8gV2UgY2FuIHVubG9hZCB0aGUgc2VnbWVudCwgb3IgYmVnaW4gcGxheWJhY2sgZnJv
bSBtX2N1cnJlbnRQb3NpdGlvbi4KKyAgICBMb2FkZWQsCisgICAgLy8gVGhlIGNvbnRyb2xsZXIg
aXMgYWN0aXZlbHkgZGlzcGF0Y2hpbmcgZXZlbnQgbG9vcCBpbnB1dHMuCisgICAgLy8gV2UgY2Fu
IHBhdXNlIG9yIGNhbmNlbCBwbGF5YmFjaywgd2hpY2ggcmV2ZXJ0cyB0byB0aGUgTG9hZGVkIHN0
YXRlLgorICAgIERpc3BhdGNoaW5nLAorfTsKKworc3RydWN0IFJlcGxheVBvc2l0aW9uIHsKKyAg
ICBSZXBsYXlQb3NpdGlvbih1bnNpZ25lZCBzZWdtZW50T2Zmc2V0LCB1bnNpZ25lZCBpbnB1dE9m
ZnNldCkKKyAgICAgICAgOiBzZWdtZW50T2Zmc2V0KHNlZ21lbnRPZmZzZXQpCisgICAgICAgICwg
aW5wdXRPZmZzZXQoaW5wdXRPZmZzZXQpCisgICAgeworICAgIH0KKworICAgIC8vIEJ5IGNvbnZl
bnRpb24sIHRoaXMgcG9zaXRpb24gcmVwcmVzZW50cyB0aGUgZW5kIG9mIHRoZSBsYXN0IHNlZ21l
bnQgb2YgdGhlIHNlc3Npb24uCisgICAgUmVwbGF5UG9zaXRpb24oKQorICAgICAgICA6IHNlZ21l
bnRPZmZzZXQoMCkKKyAgICAgICAgLCBpbnB1dE9mZnNldCgwKQorICAgIHsKKyAgICB9CisKKyAg
ICBib29sIG9wZXJhdG9yPChjb25zdCBSZXBsYXlQb3NpdGlvbiYgb3RoZXIpCisgICAgeworICAg
ICAgICByZXR1cm4gc2VnbWVudE9mZnNldCA8PSBvdGhlci5zZWdtZW50T2Zmc2V0ICYmIGlucHV0
T2Zmc2V0IDwgb3RoZXIuaW5wdXRPZmZzZXQ7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFJlcGxheVBvc2l0aW9uJiBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiBzZWdt
ZW50T2Zmc2V0ID09IG90aGVyLnNlZ21lbnRPZmZzZXQgJiYgaW5wdXRPZmZzZXQgPT0gb3RoZXIu
aW5wdXRPZmZzZXQ7CisgICAgfQorCisgICAgdW5zaWduZWQgc2VnbWVudE9mZnNldDsKKyAgICB1
bnNpZ25lZCBpbnB1dE9mZnNldDsKK307CisKK2NsYXNzIFJlcGxheUNvbnRyb2xsZXIgZmluYWwg
OiBwdWJsaWMgRXZlbnRMb29wSW5wdXREaXNwYXRjaGVyQ2xpZW50IHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShSZXBsYXlDb250cm9sbGVyKTsKK3B1YmxpYzoKKyAgICBSZXBsYXlDb250cm9s
bGVyKFBhZ2UmKTsKKworICAgIHZvaWQgc3RhcnRDYXB0dXJpbmcoKTsKKyAgICB2b2lkIHN0b3BD
YXB0dXJpbmcoKTsKKworICAgIC8vIFN0YXJ0IG9yIHJlc3VtZSBwbGF5YmFjayB3aXRoIGRlZmF1
bHQgc3BlZWQgYW5kIHRhcmdldCByZXBsYXkgcG9zaXRpb24uCisgICAgdm9pZCBzdGFydFBsYXli
YWNrKCk7CisgICAgdm9pZCBwYXVzZVBsYXliYWNrKCk7CisgICAgdm9pZCBjYW5jZWxQbGF5YmFj
aygpOworCisgICAgdm9pZCByZXBsYXlUb1Bvc2l0aW9uKGNvbnN0IFJlcGxheVBvc2l0aW9uJiwg
RGlzcGF0Y2hTcGVlZCA9IERpc3BhdGNoU3BlZWQ6OkZhc3RGb3J3YXJkKTsKKyAgICB2b2lkIHJl
cGxheVRvQ29tcGxldGlvbihEaXNwYXRjaFNwZWVkIHNwZWVkID0gRGlzcGF0Y2hTcGVlZDo6RmFz
dEZvcndhcmQpCisgICAgeworICAgICAgICByZXBsYXlUb1Bvc2l0aW9uKFJlcGxheVBvc2l0aW9u
KCksIHNwZWVkKTsKKyAgICB9CisKKyAgICB2b2lkIHN3aXRjaFNlc3Npb24oUGFzc1JlZlB0cjxS
ZXBsYXlTZXNzaW9uPik7CisKKyAgICAvLyBJbnNwZWN0b3JSZXBsYXlBZ2VudCBub3RpZmljYXRp
b25zLgorICAgIHZvaWQgZnJhbWVOYXZpZ2F0ZWQoRG9jdW1lbnRMb2FkZXIqKTsKKyAgICB2b2lk
IGZyYW1lRGV0YWNoZWQoRnJhbWUqKTsKKworICAgIFBhZ2UmIHBhZ2UoKSBjb25zdCB7IHJldHVy
biBtX3BhZ2U7IH0KKyAgICBTZXNzaW9uU3RhdGUgc2Vzc2lvblN0YXRlKCkgY29uc3QgeyByZXR1
cm4gbV9zZXNzaW9uU3RhdGU7IH0KKyAgICBQYXNzUmVmUHRyPFJlcGxheVNlc3Npb24+IGxvYWRl
ZFNlc3Npb24oKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiBs
b2FkZWRTZWdtZW50KCkgY29uc3Q7CisgICAgSlNDOjpJbnB1dEN1cnNvciYgYWN0aXZlSW5wdXRD
dXJzb3IoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICAvLyBFdmVudExvb3BJbnB1dERpc3BhdGNo
ZXJDbGllbnQgQVBJCisgICAgdmlydHVhbCB2b2lkIHdpbGxEaXNwYXRjaElucHV0KGNvbnN0IEV2
ZW50TG9vcElucHV0QmFzZSYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaWREaXNwYXRj
aElucHV0KGNvbnN0IEV2ZW50TG9vcElucHV0QmFzZSYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
dm9pZCBkaWREaXNwYXRjaEZpbmFsSW5wdXQoKSBvdmVycmlkZTsKKworICAgIHZvaWQgY3JlYXRl
U2VnbWVudCgpOworICAgIHZvaWQgY29tcGxldGVTZWdtZW50KCk7CisKKyAgICB2b2lkIGxvYWRT
ZWdtZW50KFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+KTsKKyAgICB2b2lkIHVubG9h
ZFNlZ21lbnQoYm9vbCBzdXBwcmVzc05vdGlmaWNhdGlvbnMgPSBmYWxzZSk7CisKKyAgICBFdmVu
dExvb3BJbnB1dERpc3BhdGNoZXImIGRpc3BhdGNoZXIoKSBjb25zdDsKKworICAgIFBhZ2UmIG1f
cGFnZTsKKworICAgIFJlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4gbV9sb2FkZWRTZWdtZW50
OworICAgIFJlZlB0cjxSZXBsYXlTZXNzaW9uPiBtX2xvYWRlZFNlc3Npb247CisgICAgY29uc3Qg
UmVmUHRyPEpTQzo6SW5wdXRDdXJzb3I+IG1fZW1wdHlDdXJzb3I7CisgICAgLy8gVGhlIGFjdGl2
ZSBjdXJzb3IgaXMgc2V0IHRvIG51bGxwdHIgd2hlbiBpbnZhbGlkLgorICAgIFJlZlB0cjxKU0M6
OklucHV0Q3Vyc29yPiBtX2FjdGl2ZUN1cnNvcjsKKworICAgIC8vIFRoaXMgcG9zaXRpb24gaXMg
dmFsaWQgd2hlbiBTZXNzaW9uU3RhdGUgPT0gUmVwbGF5aW5nLgorICAgIFJlcGxheVBvc2l0aW9u
IG1fdGFyZ2V0UG9zaXRpb247CisgICAgLy8gVGhpcyBwb3NpdGlvbiBpcyB2YWxpZCB3aGVuIFNl
c3Npb25TdGF0ZSAhPSBJbmFjdGl2ZS4KKyAgICBSZXBsYXlQb3NpdGlvbiBtX2N1cnJlbnRQb3Np
dGlvbjsKKyAgICBTZWdtZW50U3RhdGUgbV9zZWdtZW50U3RhdGU7CisgICAgLy8gVGhpcyB0cmFj
a3Mgc3RhdGUgYWNyb3NzIG11bHRpcGxlIHNlZ21lbnRzLiBXaGVuIG5hdmlnYXRpbmcgdGhlIG1h
aW4gZnJhbWUsCisgICAgLy8gdGhlcmUgaXMgYSBzbWFsbCBpbnRlcnZhbCBkdXJpbmcgc2VnbWVu
dCBzd2l0Y2hpbmcgd2hlbiBubyBzZWdtZW50IGlzIGxvYWRlZC4KKyAgICBTZXNzaW9uU3RhdGUg
bV9zZXNzaW9uU3RhdGU7CisKKyAgICBEaXNwYXRjaFNwZWVkIG1fZGlzcGF0Y2hTcGVlZDsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUkVQTEFZ
KQorCisjZW5kaWYgLy8gUmVwbGF5Q29udHJvbGxlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZXBsYXkvUmVwbGF5SW5wdXRDcmVhdGlvbk1ldGhvZHMuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVwbGF5L1JlcGxheUlucHV0Q3JlYXRpb25NZXRob2RzLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZWQz
ZTIzMjNjNTZlYzUzYTk4NTI3ZjhiMjRiZjkwOThhM2U4NTk2Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVwbGF5L1JlcGxheUlucHV0Q3JlYXRpb25NZXRob2RzLmNwcApAQCAt
MCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUworICogSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVECisgKiBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEKKyAqIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBFTkFCTEUoV0VCX1JFUExBWSkKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVk
ZSAiTWFpbkZyYW1lLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3Jp
Z2luLmgiCisjaW5jbHVkZSAiU2VyaWFsaXphdGlvbk1ldGhvZHMuaCIKKyNpbmNsdWRlICJXZWJS
ZXBsYXlJbnB1dHMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGQ6OnVuaXF1ZV9wdHI8
SW5pdGlhbE5hdmlnYXRpb24+IEluaXRpYWxOYXZpZ2F0aW9uOjpjcmVhdGVGcm9tUGFnZShjb25z
dCBQYWdlJiBwYWdlKQoreworICAgIGNvbnN0IE1haW5GcmFtZSYgbWFpbkZyYW1lID0gcGFnZS5t
YWluRnJhbWUoKTsKKyAgICBBU1NFUlQobWFpbkZyYW1lLmRvY3VtZW50KCkpOworCisgICAgLy8g
TWFrZSBzdXJlIHRoYXQgdGhpcyBpcyBpbiBzeW5jIHdpdGggUmVwbGF5Q29udHJvbGxlcjo6YmVn
aW5DYXB0dXJpbmcoKS4KKyAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpbkNvcHkgPSBt
YWluRnJhbWUuZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+aXNvbGF0ZWRDb3B5KCk7Cisg
ICAgVVJMIHVybCA9IG1haW5GcmFtZS5kb2N1bWVudCgpLT51cmwoKTsKKyAgICBTdHJpbmcgcmVm
ZXJyZXIgPSBtYWluRnJhbWUubG9hZGVyKCkucmVmZXJyZXIoKTsKKyAgICByZXR1cm4gc3RkOjpt
YWtlX3VuaXF1ZTxJbml0aWFsTmF2aWdhdGlvbj4ob3JpZ2luQ29weSwgdXJsLCByZWZlcnJlcik7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUkVQ
TEFZKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVwbGF5L1JlcGxheUlucHV0RGlzcGF0
Y2hNZXRob2RzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9SZXBsYXlJbnB1dERpc3BhdGNo
TWV0aG9kcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTRmNzZjZWMyMjY1ZmVmZmIyOGYzNzI2OWIzOGQwMjFh
NDc2YTM5ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9SZXBsYXlJ
bnB1dERpc3BhdGNoTWV0aG9kcy5jcHAKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMS0yMDEzIFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUyAiQVMKKyAqIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCisgKiBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9SRVBMQVkpCisKKyNp
bmNsdWRlICJBbGxSZXBsYXlJbnB1dHMuaCIKKyNpbmNsdWRlICJNYWluRnJhbWUuaCIKKyNpbmNs
dWRlICJOYXZpZ2F0aW9uU2NoZWR1bGVyLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUg
IlJlcGxheUNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJVUkwuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisvLyBTZW50aW5lbCBpbnB1dHMuCit2b2lkIEJlZ2luU2VnbWVudFNlbnRpbmVsOjpk
aXNwYXRjaChSZXBsYXlDb250cm9sbGVyJikKK3sKK30KKwordm9pZCBFbmRTZWdtZW50U2VudGlu
ZWw6OmRpc3BhdGNoKFJlcGxheUNvbnRyb2xsZXImKQoreworfQorCisvLyBOYXZpZ2F0aW9uIGlu
cHV0cy4KK3ZvaWQgSW5pdGlhbE5hdmlnYXRpb246OmRpc3BhdGNoKFJlcGxheUNvbnRyb2xsZXIm
IGNvbnRyb2xsZXIpCit7CisgICAgY29udHJvbGxlci5wYWdlKCkubWFpbkZyYW1lKCkubmF2aWdh
dGlvblNjaGVkdWxlcigpLnNjaGVkdWxlTG9jYXRpb25DaGFuZ2UobV9zZWN1cml0eU9yaWdpbi5n
ZXQoKSwgbV91cmwsIG1fcmVmZXJyZXIsIHRydWUsIHRydWUpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JFUExBWSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlcGxheS9SZXBsYXlJbnB1dFR5cGVzLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlcGxheS9SZXBsYXlJbnB1dFR5cGVzLmNwcAppbmRleCA4ZTg5MTllNGVhNDQxYjg2YjEyYWYz
ODQxOGE0NDA2ZThhYTBlZDY5Li45OGIxNGYxNjM1MWM4NjY2ZWU3YTg1MTliNzE2YTA5YTZjN2E3
MzJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvUmVwbGF5SW5wdXRUeXBlcy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVwbGF5L1JlcGxheUlucHV0VHlwZXMuY3BwCkBAIC0z
OCw2ICszOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIFJlcGxheUlucHV0VHlwZXM6OlJlcGxh
eUlucHV0VHlwZXMoKQogICAgIDogZHVtbXkoMCkKIEpTX1JFUExBWV9JTlBVVF9OQU1FU19GT1Jf
RUFDSChJTklUSUFMSVpFX0lOUFVUX1RZUEUpCitXRUJfUkVQTEFZX0lOUFVUX05BTUVTX0ZPUl9F
QUNIKElOSVRJQUxJWkVfSU5QVVRfVFlQRSkKIHsKICAgICBVTlVTRURfUEFSQU0oZHVtbXkpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVwbGF5L1JlcGxheUlucHV0VHlwZXMuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlcGxheS9SZXBsYXlJbnB1dFR5cGVzLmgKaW5kZXggZGYxNmNhMGY2
NGZjOWFkMDk0ZDk1MjM2NWZjNTI0MjIzMjEzOGZiMS4uYjE5ODQyMzJjYTkyMmJlYzUwMDg3NWNh
MGRiYmIzNDA1MzQ1MDhjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVwbGF5L1JlcGxh
eUlucHV0VHlwZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvUmVwbGF5SW5wdXRUeXBl
cy5oCkBAIC0zMSw2ICszMSw3IEBACiAjaWYgRU5BQkxFKFdFQl9SRVBMQVkpCiAKICNpbmNsdWRl
ICJUaHJlYWRHbG9iYWxEYXRhLmgiCisjaW5jbHVkZSAiV2ViUmVwbGF5SW5wdXRzLmgiCiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSlNSZXBsYXlJbnB1dHMuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9BdG9taWNTdHJpbmcuaD4KIApAQCAtNDQsNiArNDUsNyBAQCBwdWJsaWM6CiAKICNkZWZpbmUg
REVDTEFSRV9SRVBMQVlfSU5QVVRfVFlQRVMobmFtZSkgQXRvbWljU3RyaW5nIG5hbWU7CiAgICAg
SlNfUkVQTEFZX0lOUFVUX05BTUVTX0ZPUl9FQUNIKERFQ0xBUkVfUkVQTEFZX0lOUFVUX1RZUEVT
KQorICAgIFdFQl9SRVBMQVlfSU5QVVRfTkFNRVNfRk9SX0VBQ0goREVDTEFSRV9SRVBMQVlfSU5Q
VVRfVFlQRVMpCiAjdW5kZWYgREVDTEFSRV9SRVBMQVlfSU5QVVRfVFlQRVMKIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9SZXBsYXlTZXNzaW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlcGxheS9SZXBsYXlTZXNzaW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNDQ4YjE5YjRlMmY4
M2RkZjRkZGVkNDk2ZDY1NTI2NzZkMTYwOWVlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVwbGF5L1JlcGxheVNlc3Npb24uY3BwCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUworICogSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVECisgKiBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEKKyAqIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUmVwbGF5U2Vzc2lvbi5oIgorCisjaWYgRU5BQkxFKFdFQl9SRVBMQVkpCisK
KyNpbmNsdWRlICJSZXBsYXlTZXNzaW9uU2VnbWVudC5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50
VGltZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyB1bnNpZ25lZCBzX25leHRJ
ZGVudGlmaWVyID0gMTsKKworUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uPiBSZXBsYXlTZXNzaW9u
OjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVwbGF5U2Vzc2lvbigpKTsK
K30KKworUmVwbGF5U2Vzc2lvbjo6UmVwbGF5U2Vzc2lvbigpCisgICAgOiBtX2lkZW50aWZpZXIo
c19uZXh0SWRlbnRpZmllcisrKQorICAgICwgbV90aW1lc3RhbXAoY3VycmVudFRpbWVNUygpKQor
eworfQorCitSZXBsYXlTZXNzaW9uOjp+UmVwbGF5U2Vzc2lvbigpCit7Cit9CisKK1Bhc3NSZWZQ
dHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+IFJlcGxheVNlc3Npb246OmF0KHNpemVfdCBwb3NpdGlv
bikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zZWdtZW50cy5hdChwb3NpdGlvbik7Cit9CisKK3Zv
aWQgUmVwbGF5U2Vzc2lvbjo6YXBwZW5kU2VnbWVudChQYXNzUmVmUHRyPFJlcGxheVNlc3Npb25T
ZWdtZW50PiBwcnBTZWdtZW50KQoreworICAgIFJlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4g
c2VnbWVudCA9IHBycFNlZ21lbnQ7CisKKyAgICAvLyBGb3Igbm93LCBvbmx5IHN1cHBvcnQgb25l
IHNlZ21lbnQuCisgICAgQVNTRVJUKCFtX3NlZ21lbnRzLnNpemUoKSk7CisKKyAgICAvLyBTaW5j
ZSByZXBsYXkgbG9jYXRpb25zIGFyZSBzcGVjaWZpZWQgd2l0aCBzZWdtZW50IElEcywgd2UgY2Fu
IG9ubHkKKyAgICAvLyBoYXZlIG9uZSBpbnN0YW5jZSBvZiBhIHNlZ21lbnQgaW4gdGhlIHNlc3Np
b24uCisgICAgc2l6ZV90IG9mZnNldCA9IG1fc2VnbWVudHMuZmluZChzZWdtZW50KTsKKyAgICBB
U1NFUlRfVU5VU0VEKG9mZnNldCwgb2Zmc2V0ID09IG5vdEZvdW5kKTsKKworICAgIG1fc2VnbWVu
dHMuYXBwZW5kKHNlZ21lbnQucmVsZWFzZSgpKTsKK30KKwordm9pZCBSZXBsYXlTZXNzaW9uOjpp
bnNlcnRTZWdtZW50KHNpemVfdCBwb3NpdGlvbiwgUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uU2Vn
bWVudD4gc2VnbWVudCkKK3sKKyAgICBBU1NFUlQocG9zaXRpb24gPCBtX3NlZ21lbnRzLnNpemUo
KSk7CisgICAgbV9zZWdtZW50cy5pbnNlcnQocG9zaXRpb24sIHNlZ21lbnQpOworfQorCit2b2lk
IFJlcGxheVNlc3Npb246OnJlbW92ZVNlZ21lbnQoc2l6ZV90IHBvc2l0aW9uKQoreworICAgIEFT
U0VSVChwb3NpdGlvbiA8IG1fc2VnbWVudHMuc2l6ZSgpKTsKKyAgICBtX3NlZ21lbnRzLnJlbW92
ZShwb3NpdGlvbik7Cit9CisKK307IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCX1JFUExBWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9SZXBs
YXlTZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvUmVwbGF5U2Vzc2lvbi5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmZlYzgxYjRkODY4ZjU4YWZhNDQ5ZTQ1MmEwYzg4YWQzMjFhYzE1ZDIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvUmVwbGF5U2Vzc2lvbi5oCkBAIC0wLDAg
KzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTICJBUworICogSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEKKyAqIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9M
REVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFJlcGxheVNlc3Npb25faAorI2RlZmluZSBSZXBsYXlTZXNzaW9uX2gKKworI2lmIEVO
QUJMRShXRUJfUkVQTEFZKQorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgUmVwbGF5U2Vzc2lvblNlZ21lbnQ7CisKK3R5cGVkZWYgVmVj
dG9yPFJlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4+Ojpjb25zdF9pdGVyYXRvciBTZWdtZW50
SXRlcmF0b3I7CisKK2NsYXNzIFJlcGxheVNlc3Npb24gOiBwdWJsaWMgUmVmQ291bnRlZDxSZXBs
YXlTZXNzaW9uPiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVwbGF5U2Vzc2lvbik7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvbj4gY3JlYXRlKCk7Cisg
ICAgflJlcGxheVNlc3Npb24oKTsKKworICAgIGRvdWJsZSB0aW1lc3RhbXAoKSBjb25zdCB7IHJl
dHVybiBtX3RpbWVzdGFtcDsgfQorICAgIHVuc2lnbmVkIGlkZW50aWZpZXIoKSBjb25zdCB7IHJl
dHVybiBtX2lkZW50aWZpZXI7IH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV9zZWdtZW50cy5zaXplKCk7IH0KKyAgICBQYXNzUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50
PiBhdChzaXplX3QgcG9zaXRpb24pIGNvbnN0OworCisgICAgU2VnbWVudEl0ZXJhdG9yIGJlZ2lu
KCkgY29uc3QgeyByZXR1cm4gbV9zZWdtZW50cy5iZWdpbigpOyB9CisgICAgU2VnbWVudEl0ZXJh
dG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VnbWVudHMuZW5kKCk7IH0KKworICAgIHZvaWQg
YXBwZW5kU2VnbWVudChQYXNzUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50Pik7CisgICAgdm9p
ZCBpbnNlcnRTZWdtZW50KHNpemVfdCBwb3NpdGlvbiwgUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9u
U2VnbWVudD4pOworICAgIHZvaWQgcmVtb3ZlU2VnbWVudChzaXplX3QgcG9zaXRpb24pOworCitw
cml2YXRlOgorICAgIFJlcGxheVNlc3Npb24oKTsKKworICAgIFZlY3RvcjxSZWZQdHI8UmVwbGF5
U2Vzc2lvblNlZ21lbnQ+PiBtX3NlZ21lbnRzOworICAgIHVuc2lnbmVkIG1faWRlbnRpZmllcjsK
KyAgICBkb3VibGUgbV90aW1lc3RhbXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JFUExBWSkKKworI2VuZGlmIC8vIFJlcGxheVNlc3Npb25f
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVwbGF5L1JlcGxheVNlc3Npb25TZWdtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9SZXBsYXlTZXNzaW9uU2VnbWVudC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNWE3MmJlOGY1NTNmOGViYmYxMGQxZTAzZWQ4ZmYwODc0MTcxODIyNAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9SZXBsYXlTZXNzaW9uU2VnbWVudC5j
cHAKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMgIkFTCisgKiBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAqIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQorICogUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZXBsYXlTZXNzaW9uU2Vn
bWVudC5oIgorCisjaWYgRU5BQkxFKFdFQl9SRVBMQVkpCisKKyNpbmNsdWRlICJDYXB0dXJpbmdJ
bnB1dEN1cnNvci5oIgorI2luY2x1ZGUgIkZ1bmN0b3JJbnB1dEN1cnNvci5oIgorI2luY2x1ZGUg
IlJlcGxheWluZ0lucHV0Q3Vyc29yLmgiCisjaW5jbHVkZSAiU2VnbWVudGVkSW5wdXRTdG9yYWdl
LmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kworc3RhdGljIHVuc2lnbmVkIHNfbmV4dFNlZ21lbnRJZGVudGlmaWVyID0gMTsKKworUGFzc1Jl
ZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4gUmVwbGF5U2Vzc2lvblNlZ21lbnQ6OmNyZWF0ZSgp
Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZXBsYXlTZXNzaW9uU2VnbWVudCk7Cit9CisK
K1JlcGxheVNlc3Npb25TZWdtZW50OjpSZXBsYXlTZXNzaW9uU2VnbWVudCgpCisgICAgOiBtX3N0
b3JhZ2Uoc3RkOjptYWtlX3VuaXF1ZTxTZWdtZW50ZWRJbnB1dFN0b3JhZ2U+KCkpCisgICAgLCBt
X2lkZW50aWZpZXIoc19uZXh0U2VnbWVudElkZW50aWZpZXIrKykKKyAgICAsIG1fY2FuQ2FwdHVy
ZSh0cnVlKQorICAgICwgbV90aW1lc3RhbXAoY3VycmVudFRpbWVNUygpKQoreworfQorCitSZXBs
YXlTZXNzaW9uU2VnbWVudDo6flJlcGxheVNlc3Npb25TZWdtZW50KCkKK3sKK30KKworUGFzc1Jl
ZlB0cjxDYXB0dXJpbmdJbnB1dEN1cnNvcj4gUmVwbGF5U2Vzc2lvblNlZ21lbnQ6OmNyZWF0ZUNh
cHR1cmluZ0N1cnNvcihQYWdlJikKK3sKKyAgICBBU1NFUlQobV9jYW5DYXB0dXJlKTsKKyAgICBt
X2NhbkNhcHR1cmUgPSBmYWxzZTsKKyAgICByZXR1cm4gQ2FwdHVyaW5nSW5wdXRDdXJzb3I6OmNy
ZWF0ZSgqbV9zdG9yYWdlKTsKK30KKworUGFzc1JlZlB0cjxSZXBsYXlpbmdJbnB1dEN1cnNvcj4g
UmVwbGF5U2Vzc2lvblNlZ21lbnQ6OmNyZWF0ZVJlcGxheWluZ0N1cnNvcihQYWdlJiBwYWdlLCBF
dmVudExvb3BJbnB1dERpc3BhdGNoZXJDbGllbnQqIGNsaWVudCkKK3sKKyAgICByZXR1cm4gUmVw
bGF5aW5nSW5wdXRDdXJzb3I6OmNyZWF0ZSgqbV9zdG9yYWdlLCBwYWdlLCBjbGllbnQpOworfQor
CitzdGQ6OnVuaXF1ZV9wdHI8RnVuY3RvcklucHV0Q3Vyc29yPiBSZXBsYXlTZXNzaW9uU2VnbWVu
dDo6Y3JlYXRlRnVuY3RvckN1cnNvcigpCit7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8
RnVuY3RvcklucHV0Q3Vyc29yPigqbV9zdG9yYWdlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SRVBMQVkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZXBsYXkvUmVwbGF5U2Vzc2lvblNlZ21lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
cGxheS9SZXBsYXlTZXNzaW9uU2VnbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFiMTZhMzkwZjI0NzlhZWVm
MDE1MzQ0ZDg5NmQ4YzY2MDViZjQwN2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZXBsYXkvUmVwbGF5U2Vzc2lvblNlZ21lbnQuaApAQCAtMCwwICsxLDY5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMKKyAqIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRAorICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBCisgKiBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBSZXBsYXlTZXNz
aW9uU2VnbWVudF9oCisjZGVmaW5lIFJlcGxheVNlc3Npb25TZWdtZW50X2gKKworI2lmIEVOQUJM
RShXRUJfUkVQTEFZKQorCisjaW5jbHVkZSA8cmVwbGF5L05vbmRldGVybWluaXN0aWNJbnB1dC5o
PgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgQ2FwdHVyaW5nSW5wdXRDdXJzb3I7CitjbGFzcyBFdmVudExvb3BJbnB1dERpc3BhdGNo
ZXJDbGllbnQ7CitjbGFzcyBGdW5jdG9ySW5wdXRDdXJzb3I7CitjbGFzcyBQYWdlOworY2xhc3Mg
UmVwbGF5aW5nSW5wdXRDdXJzb3I7CitjbGFzcyBTZWdtZW50ZWRJbnB1dFN0b3JhZ2U7CisKK2Ns
YXNzIFJlcGxheVNlc3Npb25TZWdtZW50IDogcHVibGljIFJlZkNvdW50ZWQ8UmVwbGF5U2Vzc2lv
blNlZ21lbnQ+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9u
U2VnbWVudD4gY3JlYXRlKCk7CisgICAgflJlcGxheVNlc3Npb25TZWdtZW50KCk7CisKKyAgICB1
bnNpZ25lZCBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CisgICAg
ZG91YmxlIHRpbWVzdGFtcCgpIGNvbnN0IHsgcmV0dXJuIG1fdGltZXN0YW1wOyB9CisKKyAgICBQ
YXNzUmVmUHRyPENhcHR1cmluZ0lucHV0Q3Vyc29yPiBjcmVhdGVDYXB0dXJpbmdDdXJzb3IoUGFn
ZSYpOworICAgIFBhc3NSZWZQdHI8UmVwbGF5aW5nSW5wdXRDdXJzb3I+IGNyZWF0ZVJlcGxheWlu
Z0N1cnNvcihQYWdlJiwgRXZlbnRMb29wSW5wdXREaXNwYXRjaGVyQ2xpZW50Kik7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEZ1bmN0b3JJbnB1dEN1cnNvcj4gY3JlYXRlRnVuY3RvckN1cnNvcigpOwor
cHJpdmF0ZToKKyAgICBSZXBsYXlTZXNzaW9uU2VnbWVudCgpOworCisgICAgc3RkOjp1bmlxdWVf
cHRyPFNlZ21lbnRlZElucHV0U3RvcmFnZT4gbV9zdG9yYWdlOworICAgIHVuc2lnbmVkIG1faWRl
bnRpZmllcjsKKyAgICBib29sIG1fY2FuQ2FwdHVyZTsKKyAgICBkb3VibGUgbV90aW1lc3RhbXA7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JF
UExBWSkKKworI2VuZGlmIC8vIFJlcGxheVNlc3Npb25TZWdtZW50X2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlcGxheS9SZXBsYXlpbmdJbnB1dEN1cnNvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZXBsYXkvUmVwbGF5aW5nSW5wdXRDdXJzb3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE0ZjJkYjMx
N2I1M2EwZDhmMWU1YzllMTY2M2JlMDc2ODUxM2E2YWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZXBsYXkvUmVwbGF5aW5nSW5wdXRDdXJzb3IuY3BwCkBAIC0wLDAgKzEsODkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJB
UworICogSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVECisgKiBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEKKyAqIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVwbGF5aW5nSW5wdXRDdXJzb3IuaCIKKworI2lmIEVO
QUJMRShXRUJfUkVQTEFZKQorCisjaW5jbHVkZSAiRXZlbnRMb29wSW5wdXREaXNwYXRjaGVyLmgi
CisjaW5jbHVkZSAiU2VnbWVudGVkSW5wdXRTdG9yYWdlLmgiCisjaW5jbHVkZSAiU2VyaWFsaXph
dGlvbk1ldGhvZHMuaCIKKyNpbmNsdWRlICJXZWJSZXBsYXlJbnB1dHMuaCIKKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVwbGF5aW5nSW5w
dXRDdXJzb3I6OlJlcGxheWluZ0lucHV0Q3Vyc29yKFNlZ21lbnRlZElucHV0U3RvcmFnZSYgc3Rv
cmFnZSwgUGFnZSYgcGFnZSwgRXZlbnRMb29wSW5wdXREaXNwYXRjaGVyQ2xpZW50KiBjbGllbnQp
CisgICAgOiBtX3N0b3JhZ2Uoc3RvcmFnZSkKKyAgICAsIG1fZGlzcGF0Y2hlcihzdGQ6Om1ha2Vf
dW5pcXVlPEV2ZW50TG9vcElucHV0RGlzcGF0Y2hlcj4ocGFnZSwgKnRoaXMsIGNsaWVudCkpCit7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KElucHV0UXVl
dWU6OkNvdW50KTsgaSsrKQorICAgICAgICBtX3Bvc2l0aW9ucy5hcHBlbmQoMCk7Cit9CisKK1Jl
cGxheWluZ0lucHV0Q3Vyc29yOjp+UmVwbGF5aW5nSW5wdXRDdXJzb3IoKQoreworfQorCitQYXNz
UmVmUHRyPFJlcGxheWluZ0lucHV0Q3Vyc29yPiBSZXBsYXlpbmdJbnB1dEN1cnNvcjo6Y3JlYXRl
KFNlZ21lbnRlZElucHV0U3RvcmFnZSYgc3RvcmFnZSwgUGFnZSYgcGFnZSwgRXZlbnRMb29wSW5w
dXREaXNwYXRjaGVyQ2xpZW50KiBjbGllbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBS
ZXBsYXlpbmdJbnB1dEN1cnNvcihzdG9yYWdlLCBwYWdlLCBjbGllbnQpKTsKK30KKwordm9pZCBS
ZXBsYXlpbmdJbnB1dEN1cnNvcjo6c3RvcmVJbnB1dChzdGQ6OnVuaXF1ZV9wdHI8Tm9uZGV0ZXJt
aW5pc3RpY0lucHV0QmFzZT4pCit7CisgICAgLy8gQ2Fubm90IHN0b3JlIGlucHV0cyBmcm9tIGEg
cmVwbGF5aW5nIGlucHV0IGN1cnNvci4KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwor
Tm9uZGV0ZXJtaW5pc3RpY0lucHV0QmFzZSogUmVwbGF5aW5nSW5wdXRDdXJzb3I6OmxvYWRJbnB1
dChJbnB1dFF1ZXVlIHF1ZXVlLCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUpCit7CisgICAgTm9u
ZGV0ZXJtaW5pc3RpY0lucHV0QmFzZSogaW5wdXQgPSB1bmNoZWNrZWRMb2FkSW5wdXQocXVldWUp
OworCisgICAgaWYgKGlucHV0LT50eXBlKCkgIT0gdHlwZSkgeworICAgICAgICBMT0dfRVJST1Io
IiUtMjVzIEVSUk9SOiBFeHBlY3RlZCByZXBsYXkgaW5wdXQgb2YgdHlwZSAlcywgYnV0IGdvdCB0
eXBlICVzXG4iLCAiW1JlcGxheWluZ0lucHV0Q3Vyc29yXSIsIHR5cGUuc3RyaW5nKCkuYXNjaWko
KS5kYXRhKCksIGlucHV0LT50eXBlKCkuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4gaW5wdXQ7Cit9CisKK05vbmRl
dGVybWluaXN0aWNJbnB1dEJhc2UqIFJlcGxheWluZ0lucHV0Q3Vyc29yOjp1bmNoZWNrZWRMb2Fk
SW5wdXQoSW5wdXRRdWV1ZSBxdWV1ZSkKK3sKKyAgICBpZiAobV9wb3NpdGlvbnNbc3RhdGljX2Nh
c3Q8c2l6ZV90PihxdWV1ZSldID49IG1fc3RvcmFnZS5xdWV1ZVNpemUocXVldWUpKSB7CisgICAg
ICAgIFN0cmluZyBxdWV1ZVN0cmluZyA9IEVuY29kaW5nVHJhaXRzPElucHV0UXVldWU+OjplbmNv
ZGVWYWx1ZShxdWV1ZSkuY29udmVydFRvPFN0cmluZz4oKTsKKyAgICAgICAgTE9HX0VSUk9SKCIl
LTMwcyBFUlJPUiBObyBtb3JlIGlucHV0cyByZW1haW4gZm9yIGRldGVybWluaXNtIHF1ZXVlICVz
LCBidXQgb25lIHdhcyByZXF1ZXN0ZWQuIiwgIltSZXBsYXlpbmdJbnB1dEN1cnNvcl0iLCBxdWV1
ZVN0cmluZy5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0K
KworICAgIHJldHVybiBtX3N0b3JhZ2UubG9hZChxdWV1ZSwgbV9wb3NpdGlvbnNbc3RhdGljX2Nh
c3Q8c2l6ZV90PihxdWV1ZSldKyspOworfQorCit9OyAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKFdFQl9SRVBMQVkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZXBsYXkvUmVwbGF5aW5nSW5wdXRDdXJzb3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9SZXBs
YXlpbmdJbnB1dEN1cnNvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE0NzU3YmEzMTJlNDg4ZWQ3ZDY0MTYzNzA1
YjIxMzJiNTMyZTE0MDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkv
UmVwbGF5aW5nSW5wdXRDdXJzb3IuaApAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMKKyAqIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAor
ICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBCisgKiBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBSZXBsYXlpbmdJbnB1dEN1cnNv
cl9oCisjZGVmaW5lIFJlcGxheWluZ0lucHV0Q3Vyc29yX2gKKworI2lmIEVOQUJMRShXRUJfUkVQ
TEFZKQorCisjaW5jbHVkZSA8cmVwbGF5L0lucHV0Q3Vyc29yLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEV2ZW50TG9vcElucHV0RGlzcGF0Y2hlcjsKK2NsYXNzIEV2ZW50
TG9vcElucHV0RGlzcGF0Y2hlckNsaWVudDsKK2NsYXNzIFBhZ2U7CitjbGFzcyBTZWdtZW50ZWRJ
bnB1dFN0b3JhZ2U7CisKK2NsYXNzIFJlcGxheWluZ0lucHV0Q3Vyc29yIGZpbmFsIDogcHVibGlj
IElucHV0Q3Vyc29yIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZXBsYXlpbmdJbnB1dEN1
cnNvcik7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVwbGF5aW5nSW5wdXRDdXJz
b3I+IGNyZWF0ZShTZWdtZW50ZWRJbnB1dFN0b3JhZ2UmLCBQYWdlJiwgRXZlbnRMb29wSW5wdXRE
aXNwYXRjaGVyQ2xpZW50Kik7CisgICAgdmlydHVhbCB+UmVwbGF5aW5nSW5wdXRDdXJzb3IoKTsK
KworICAgIHZpcnR1YWwgYm9vbCBpc0NhcHR1cmluZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzUmVwbGF5aW5nKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gdHJ1ZTsgfQorCisgICAgRXZlbnRMb29wSW5wdXREaXNwYXRjaGVyJiBkaXNwYXRj
aGVyKCkgY29uc3QgeyByZXR1cm4gKm1fZGlzcGF0Y2hlcjsgfQorCisgICAgdmlydHVhbCB2b2lk
IHN0b3JlSW5wdXQoc3RkOjp1bmlxdWVfcHRyPE5vbmRldGVybWluaXN0aWNJbnB1dEJhc2U+KSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIE5vbmRldGVybWluaXN0aWNJbnB1dEJhc2UqIHVuY2hlY2tl
ZExvYWRJbnB1dChJbnB1dFF1ZXVlKSBvdmVycmlkZTsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFs
IE5vbmRldGVybWluaXN0aWNJbnB1dEJhc2UqIGxvYWRJbnB1dChJbnB1dFF1ZXVlLCBjb25zdCBB
dG9taWNTdHJpbmcmIHR5cGUpIG92ZXJyaWRlOworcHJpdmF0ZToKKyAgICBSZXBsYXlpbmdJbnB1
dEN1cnNvcihTZWdtZW50ZWRJbnB1dFN0b3JhZ2UmLCBQYWdlJiwgRXZlbnRMb29wSW5wdXREaXNw
YXRjaGVyQ2xpZW50Kik7CisKKyAgICBTZWdtZW50ZWRJbnB1dFN0b3JhZ2UmIG1fc3RvcmFnZTsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8RXZlbnRMb29wSW5wdXREaXNwYXRjaGVyPiBtX2Rpc3BhdGNo
ZXI7CisgICAgVmVjdG9yPHNpemVfdD4gbV9wb3NpdGlvbnM7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JFUExBWSkKKworI2VuZGlmIC8vIFJl
cGxheWluZ0lucHV0Q3Vyc29yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9T
ZWdtZW50ZWRJbnB1dFN0b3JhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVwbGF5L1NlZ21lbnRl
ZElucHV0U3RvcmFnZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTY2MTQxYThmOTYzMTE4NjRiNzgwYjk4ZmZh
MWE0NzdhNTgwOThmYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9T
ZWdtZW50ZWRJbnB1dFN0b3JhZ2UuY3BwCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMKKyAqIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RAorICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBCisgKiBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlNlZ21lbnRlZElucHV0U3RvcmFnZS5oIgorCisjaWYgRU5BQkxFKFdFQl9SRVBMQVkp
CisKKyNpZiAhTE9HX0RJU0FCTEVECisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNl
cmlhbGl6YXRpb25NZXRob2RzLmgiCisjaW5jbHVkZSA8cmVwbGF5L0VuY29kZWRWYWx1ZS5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiAhTE9HX0RJU0FCTEVE
CisvLyBUaGVzZSBhcmUgdXNlZCB0byBtYWtlIHRoZSBsb2cgc3BldyBmcm9tIExPRyhXZWJSZXBs
YXksIC4uLikgbW9yZSByZWFkYWJsZS4KK3N0YXRpYyBjb25zdCBjaGFyKiBxdWV1ZVR5cGVUb0xv
Z1ByZWZpeChJbnB1dFF1ZXVlIGlucHV0UXVldWUsIGJvb2wgaXNMb2FkKQoreworICAgIGlmIChp
c0xvYWQpIHsKKyAgICAgICAgc3dpdGNoIChpbnB1dFF1ZXVlKSB7CisgICAgICAgIGNhc2UgSW5w
dXRRdWV1ZTo6RXZlbnRMb29wSW5wdXQ6IHJldHVybiAiKERTUFRDSC1MT0FEKSI7CisgICAgICAg
IGNhc2UgSW5wdXRRdWV1ZTo6TG9hZGVyTWVtb2l6ZWREYXRhOiByZXR1cm4gIjxMRE1FTU8tTE9B
RCI7CisgICAgICAgIGNhc2UgSW5wdXRRdWV1ZTo6U2NyaXB0TWVtb2l6ZWREYXRhOiByZXR1cm4g
IjwtLS08LS0tPC0tLUpTTUVNTy1MT0FEIjsKKyAgICAgICAgY2FzZSBJbnB1dFF1ZXVlOjpDb3Vu
dDogcmV0dXJuICJFUlJPUiEiOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3dp
dGNoIChpbnB1dFF1ZXVlKSB7CisgICAgICAgIGNhc2UgSW5wdXRRdWV1ZTo6RXZlbnRMb29wSW5w
dXQ6IHJldHVybiAiPkRTUFRDSC1TVE9SRSI7CisgICAgICAgIGNhc2UgSW5wdXRRdWV1ZTo6TG9h
ZGVyTWVtb2l6ZWREYXRhOiByZXR1cm4gIjxMRE1FTU8tU1RPUkUiOworICAgICAgICBjYXNlIElu
cHV0UXVldWU6OlNjcmlwdE1lbW9pemVkRGF0YTogcmV0dXJuICI8LS0tPC0tLTwtLS1KU01FTU8t
U1RPUkUiOworICAgICAgICBjYXNlIElucHV0UXVldWU6OkNvdW50OiByZXR1cm4gIkVSUk9SISI7
CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyBTdHJpbmcganNvblN0cmluZ0ZvcklucHV0
KGNvbnN0IE5vbmRldGVybWluaXN0aWNJbnB1dEJhc2UmIGlucHV0KQoreworICAgIEVuY29kZWRW
YWx1ZSBlbmNvZGVkVmFsdWUgPSBFbmNvZGluZ1RyYWl0czxOb25kZXRlcm1pbmlzdGljSW5wdXRC
YXNlPjo6ZW5jb2RlVmFsdWUoaW5wdXQpOworICAgIHJldHVybiBlbmNvZGVkVmFsdWUuYXNPYmpl
Y3QoKS0+dG9KU09OU3RyaW5nKCk7Cit9CisjZW5kaWYgLy8gIUxPR19ESVNBQkxFRAorCitzdGF0
aWMgc2l6ZV90IG9mZnNldEZvcklucHV0UXVldWUoSW5wdXRRdWV1ZSBpbnB1dFF1ZXVlKQorewor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KGlucHV0UXVldWUpOworfQorCitTZWdtZW50
ZWRJbnB1dFN0b3JhZ2U6OlNlZ21lbnRlZElucHV0U3RvcmFnZSgpCisgICAgOiBtX2lucHV0Q291
bnQoMCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9mZnNldEZvcklucHV0UXVldWUo
SW5wdXRRdWV1ZTo6Q291bnQpOyBpKyspCisgICAgICAgIG1fcXVldWVzLmFwcGVuZChuZXcgUXVl
dWVkSW5wdXRzKTsKK30KKworU2VnbWVudGVkSW5wdXRTdG9yYWdlOjp+U2VnbWVudGVkSW5wdXRT
dG9yYWdlKCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9mZnNldEZvcklucHV0UXVl
dWUoSW5wdXRRdWV1ZTo6Q291bnQpOyBpKyspCisgICAgICAgIGRlbGV0ZSBtX3F1ZXVlcy5hdChp
KTsKK30KKworTm9uZGV0ZXJtaW5pc3RpY0lucHV0QmFzZSogU2VnbWVudGVkSW5wdXRTdG9yYWdl
Ojpsb2FkKElucHV0UXVldWUgaW5wdXRRdWV1ZSwgc2l6ZV90IG9mZnNldCkKK3sKKyAgICBBU1NF
UlQob2Zmc2V0IDwgcXVldWVTaXplKGlucHV0UXVldWUpKTsKKworICAgIE5vbmRldGVybWluaXN0
aWNJbnB1dEJhc2UqIGlucHV0ID0gcXVldWUoaW5wdXRRdWV1ZSkuYXQob2Zmc2V0KS5nZXQoKTsK
KyAgICBBU1NFUlQoaW5wdXQpOworCisgICAgTE9HKFdlYlJlcGxheSwgIiUtMjBzICVzOiAlcyAl
c1xuIiwgIlJlcGxheUV2ZW50cyIsIHF1ZXVlVHlwZVRvTG9nUHJlZml4KGlucHV0UXVldWUsIHRy
dWUpLCBpbnB1dC0+dHlwZSgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGpzb25TdHJpbmdGb3JJ
bnB1dCgqaW5wdXQpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgcmV0dXJuIGlucHV0OworfQorCit2
b2lkIFNlZ21lbnRlZElucHV0U3RvcmFnZTo6c3RvcmUoc3RkOjp1bmlxdWVfcHRyPE5vbmRldGVy
bWluaXN0aWNJbnB1dEJhc2U+IGlucHV0KQoreworICAgIEFTU0VSVChpbnB1dCk7CisgICAgQVNT
RVJUKGlucHV0LT5xdWV1ZSgpIDwgSW5wdXRRdWV1ZTo6Q291bnQpOworCisgICAgTE9HKFdlYlJl
cGxheSwgIiUtMTRzIyUtNXUgJXM6ICVzICVzXG4iLCAiUmVwbGF5RXZlbnRzIiwgbV9pbnB1dENv
dW50KyssIHF1ZXVlVHlwZVRvTG9nUHJlZml4KGlucHV0LT5xdWV1ZSgpLCBmYWxzZSksIGlucHV0
LT50eXBlKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwganNvblN0cmluZ0ZvcklucHV0KCppbnB1
dCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICBtX3F1ZXVlcy5hdChvZmZzZXRGb3JJbnB1dFF1ZXVl
KGlucHV0LT5xdWV1ZSgpKSktPmFwcGVuZChzdGQ6Om1vdmUoaW5wdXQpKTsKK30KKworc2l6ZV90
IFNlZ21lbnRlZElucHV0U3RvcmFnZTo6cXVldWVTaXplKElucHV0UXVldWUgaW5wdXRRdWV1ZSkg
Y29uc3QKK3sKKyAgICByZXR1cm4gcXVldWUoaW5wdXRRdWV1ZSkuc2l6ZSgpOworfQorCitjb25z
dCBTZWdtZW50ZWRJbnB1dFN0b3JhZ2U6OlF1ZXVlZElucHV0cyYgU2VnbWVudGVkSW5wdXRTdG9y
YWdlOjpxdWV1ZShJbnB1dFF1ZXVlIHF1ZXVlKSBjb25zdAoreworICAgIEFTU0VSVChxdWV1ZSA8
IElucHV0UXVldWU6OkNvdW50KTsKKyAgICByZXR1cm4gKm1fcXVldWVzLmF0KG9mZnNldEZvcklu
cHV0UXVldWUocXVldWUpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQl9SRVBMQVkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkv
U2VnbWVudGVkSW5wdXRTdG9yYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvU2VnbWVudGVk
SW5wdXRTdG9yYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjg3MjExYjM5ZGM2Yjk5YWVlMmM0YWI5M2FiYzFi
OTJlOTlkOTNhNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9TZWdt
ZW50ZWRJbnB1dFN0b3JhZ2UuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMKKyAqIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICog
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBCisgKiBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTZWdtZW50ZWRJbnB1dFN0b3JhZ2Vf
aAorI2RlZmluZSBTZWdtZW50ZWRJbnB1dFN0b3JhZ2VfaAorCisjaWYgRU5BQkxFKFdFQl9SRVBM
QVkpCisKKyNpbmNsdWRlIDxyZXBsYXkvTm9uZGV0ZXJtaW5pc3RpY0lucHV0Lmg+CisjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIFNlZ21lbnRlZElucHV0U3RvcmFnZSB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoU2VnbWVudGVkSW5wdXRTdG9yYWdlKTsKKyAgICBmcmllbmQgY2xhc3Mg
RnVuY3RvcklucHV0Q3Vyc29yOworcHVibGljOgorICAgIFNlZ21lbnRlZElucHV0U3RvcmFnZSgp
OworICAgIH5TZWdtZW50ZWRJbnB1dFN0b3JhZ2UoKTsKKworICAgIE5vbmRldGVybWluaXN0aWNJ
bnB1dEJhc2UqIGxvYWQoSW5wdXRRdWV1ZSwgc2l6ZV90KTsKKyAgICB2b2lkIHN0b3JlKHN0ZDo6
dW5pcXVlX3B0cjxOb25kZXRlcm1pbmlzdGljSW5wdXRCYXNlPik7CisgICAgc2l6ZV90IHF1ZXVl
U2l6ZShJbnB1dFF1ZXVlKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB0eXBlZGVmIFZlY3Rvcjxz
dGQ6OnVuaXF1ZV9wdHI8Tm9uZGV0ZXJtaW5pc3RpY0lucHV0QmFzZT4+IFF1ZXVlZElucHV0czsK
KyAgICBjb25zdCBRdWV1ZWRJbnB1dHMmIHF1ZXVlKElucHV0UXVldWUpIGNvbnN0OworCisgICAg
VmVjdG9yPFF1ZXVlZElucHV0cyosIDM+IG1fcXVldWVzOworICAgIHVuc2lnbmVkIG1faW5wdXRD
b3VudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShX
RUJfUkVQTEFZKQorCisjZW5kaWYgLy8gU2VnbWVudGVkSW5wdXRTdG9yYWdlX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9TZXJpYWxpemF0aW9uTWV0aG9kcy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZXBsYXkvU2VyaWFsaXphdGlvbk1ldGhvZHMuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI4
NjE3OGI1NGYzY2MwYzBiZTRlNmY5ZDhjMDIyOWRjNTI3MTA1ZTgKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvU2VyaWFsaXphdGlvbk1ldGhvZHMuY3BwCkBAIC0wLDAg
KzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUyAiQVMKKyAqIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCisgKiBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhP
TERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNlcmlhbGl6YXRpb25NZXRob2RzLmgiCisK
KyNpZiBFTkFCTEUoV0VCX1JFUExBWSkKKworI2luY2x1ZGUgIkFsbFJlcGxheUlucHV0cy5oIgor
I2luY2x1ZGUgIlJlcGxheUlucHV0VHlwZXMuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5o
IgorI2luY2x1ZGUgIlVSTC5oIgorCit1c2luZyBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbjsKK3Vz
aW5nIFdlYkNvcmU6OlVSTDsKK3VzaW5nIFdlYkNvcmU6OmlucHV0VHlwZXM7CisKKyNkZWZpbmUg
SU1QT1JUX0ZST01fV0VCQ09SRV9OQU1FU1BBQ0UobmFtZSkgXAordXNpbmcgV2ViQ29yZTo6bmFt
ZTsgXAorCitXRUJfUkVQTEFZX0lOUFVUX05BTUVTX0ZPUl9FQUNIKElNUE9SVF9GUk9NX1dFQkNP
UkVfTkFNRVNQQUNFKQorI3VuZGVmIElNUE9SVF9GUk9NX1dFQkNPUkVfTkFNRVNQQUNFCisKK25h
bWVzcGFjZSBKU0MgeworCitFbmNvZGVkVmFsdWUgRW5jb2RpbmdUcmFpdHM8Tm9uZGV0ZXJtaW5p
c3RpY0lucHV0QmFzZT46OmVuY29kZVZhbHVlKGNvbnN0IE5vbmRldGVybWluaXN0aWNJbnB1dEJh
c2UmIGlucHV0KQoreworICAgIEVuY29kZWRWYWx1ZSBlbmNvZGVkVmFsdWUgPSBFbmNvZGVkVmFs
dWU6OmNyZWF0ZU9iamVjdCgpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSA9IGlucHV0
LnR5cGUoKTsKKyAgICBlbmNvZGVkVmFsdWUucHV0PFN0cmluZz4oQVNDSUlMaXRlcmFsKCJ0eXBl
IiksIHR5cGUuc3RyaW5nKCkpOworCisjZGVmaW5lIEVOQ09ERV9JRl9UWVBFX1RBR19NQVRDSEVT
KG5hbWUpIFwKKyAgICBpZiAodHlwZSA9PSBpbnB1dFR5cGVzKCkubmFtZSkgeyBcCisgICAgICAg
IElucHV0VHJhaXRzPG5hbWU+OjplbmNvZGUoZW5jb2RlZFZhbHVlLCBzdGF0aWNfY2FzdDxjb25z
dCBuYW1lJj4oaW5wdXQpKTsgXAorICAgICAgICByZXR1cm4gZW5jb2RlZFZhbHVlOyBcCisgICAg
fSBcCisKKyAgICBKU19SRVBMQVlfSU5QVVRfTkFNRVNfRk9SX0VBQ0goRU5DT0RFX0lGX1RZUEVf
VEFHX01BVENIRVMpCisgICAgV0VCX1JFUExBWV9JTlBVVF9OQU1FU19GT1JfRUFDSChFTkNPREVf
SUZfVFlQRV9UQUdfTUFUQ0hFUykKKyN1bmRlZiBFTkNPREVfSUZfVFlQRV9UQUdfTUFUQ0hFUwor
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEVuY29kZWRWYWx1ZSgpOwor
fQorCitib29sIEVuY29kaW5nVHJhaXRzPE5vbmRldGVybWluaXN0aWNJbnB1dEJhc2U+OjpkZWNv
ZGVWYWx1ZShFbmNvZGVkVmFsdWUmIGVuY29kZWRWYWx1ZSwgc3RkOjp1bmlxdWVfcHRyPE5vbmRl
dGVybWluaXN0aWNJbnB1dEJhc2U+JiBpbnB1dCkKK3sKKyAgICBTdHJpbmcgdHlwZTsKKyAgICBp
ZiAoIWVuY29kZWRWYWx1ZS5nZXQ8U3RyaW5nPihBU0NJSUxpdGVyYWwoInR5cGUiKSwgdHlwZSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworI2RlZmluZSBERUNPREVfSUZfVFlQRV9UQUdfTUFU
Q0hFUyhuYW1lKSBcCisgICAgaWYgKHR5cGUgPT0gaW5wdXRUeXBlcygpLm5hbWUpIHsgXAorICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8bmFtZT4gZGVjb2RlZElucHV0OyBcCisgICAgICAgIGlmICgh
SW5wdXRUcmFpdHM8bmFtZT46OmRlY29kZShlbmNvZGVkVmFsdWUsIGRlY29kZWRJbnB1dCkpIFwK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgXAorICAgICAgICBcCisgICAgICAgIGlucHV0ID0g
c3RkOjptb3ZlKGRlY29kZWRJbnB1dCk7IFwKKyAgICAgICAgcmV0dXJuIHRydWU7IFwKKyAgICB9
IFwKKworICAgIEpTX1JFUExBWV9JTlBVVF9OQU1FU19GT1JfRUFDSChERUNPREVfSUZfVFlQRV9U
QUdfTUFUQ0hFUykKKyAgICBXRUJfUkVQTEFZX0lOUFVUX05BTUVTX0ZPUl9FQUNIKERFQ09ERV9J
Rl9UWVBFX1RBR19NQVRDSEVTKQorI3VuZGVmIERFQ09ERV9JRl9UWVBFX1RBR19NQVRDSEVTCisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0VuY29kZWRWYWx1ZSBFbmNvZGluZ1RyYWl0czxTZWN1
cml0eU9yaWdpbj46OmVuY29kZVZhbHVlKFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gaW5wdXQpCit7
CisgICAgcmV0dXJuIEVuY29kZWRWYWx1ZTo6Y3JlYXRlU3RyaW5nKGlucHV0LT50b1N0cmluZygp
KTsKK30KKworYm9vbCBFbmNvZGluZ1RyYWl0czxTZWN1cml0eU9yaWdpbj46OmRlY29kZVZhbHVl
KEVuY29kZWRWYWx1ZSYgZW5jb2RlZFZhbHVlLCBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+JiBpbnB1
dCkKK3sKKyAgICBpbnB1dCA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKGVuY29k
ZWRWYWx1ZS5jb252ZXJ0VG88U3RyaW5nPigpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworRW5j
b2RlZFZhbHVlIEVuY29kaW5nVHJhaXRzPFVSTD46OmVuY29kZVZhbHVlKGNvbnN0IFVSTCYgaW5w
dXQpCit7CisgICAgcmV0dXJuIEVuY29kZWRWYWx1ZTo6Y3JlYXRlU3RyaW5nKGlucHV0LnN0cmlu
ZygpKTsKK30KKworYm9vbCBFbmNvZGluZ1RyYWl0czxVUkw+OjpkZWNvZGVWYWx1ZShFbmNvZGVk
VmFsdWUmIGVuY29kZWRWYWx1ZSwgVVJMJiBpbnB1dCkKK3sKKyAgICBpbnB1dCA9IFVSTChXZWJD
b3JlOjpQYXJzZWRVUkxTdHJpbmcsIGVuY29kZWRWYWx1ZS5jb252ZXJ0VG88U3RyaW5nPigpKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCX1JFUExBWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9TZXJp
YWxpemF0aW9uTWV0aG9kcy5oIGIvU291cmNlL1dlYkNvcmUvcmVwbGF5L1NlcmlhbGl6YXRpb25N
ZXRob2RzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOGUxMTJiODIwZGZiZDM2ZDc2ZGNlYzE1MzE0Y2I3Nzg4NmNj
NzQzOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9TZXJpYWxpemF0
aW9uTWV0aG9kcy5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUworICogSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEK
KyAqIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNlcmlhbGl6YXRpb25NZXRob2RzX2gKKyNkZWZp
bmUgU2VyaWFsaXphdGlvbk1ldGhvZHNfaAorCisjaWYgRU5BQkxFKFdFQl9SRVBMQVkpCisKKyNp
bmNsdWRlIDxyZXBsYXkvRW5jb2RlZFZhbHVlLmg+CisjaW5jbHVkZSA8cmVwbGF5L05vbmRldGVy
bWluaXN0aWNJbnB1dC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBEb2N1bWVudDsK
K2NsYXNzIEZyYW1lOworY2xhc3MgUGFnZTsKK2NsYXNzIFNlY3VyaXR5T3JpZ2luOworY2xhc3Mg
VVJMOworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisvLyBUZW1wbGF0ZSBzcGVjaWFsaXphdGlv
bnMgbXVzdCBiZSBkZWZpbmVkIGluIHRoZSBzYW1lIG5hbWVzcGFjZSBhcyB0aGUgdGVtcGxhdGUg
ZGVjbGFyYXRpb24uCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW5jb2Rp
bmdUcmFpdHM8Tm9uZGV0ZXJtaW5pc3RpY0lucHV0QmFzZT4geworICAgIHR5cGVkZWYgTm9uZGV0
ZXJtaW5pc3RpY0lucHV0QmFzZSBEZWNvZGVkVHlwZTsKKworICAgIHN0YXRpYyBFbmNvZGVkVmFs
dWUgZW5jb2RlVmFsdWUoY29uc3QgTm9uZGV0ZXJtaW5pc3RpY0lucHV0QmFzZSYgdmFsdWUpOwor
ICAgIHN0YXRpYyBib29sIGRlY29kZVZhbHVlKEVuY29kZWRWYWx1ZSYsIHN0ZDo6dW5pcXVlX3B0
cjxOb25kZXRlcm1pbmlzdGljSW5wdXRCYXNlPiYgdmFsdWUpOworfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgRW5jb2RpbmdUcmFpdHM8V2ViQ29yZTo6VVJMPiB7CisgICAgdHlwZWRlZiBXZWJDb3Jl
OjpVUkwgRGVjb2RlZFR5cGU7CisKKyAgICBzdGF0aWMgRW5jb2RlZFZhbHVlIGVuY29kZVZhbHVl
KGNvbnN0IFdlYkNvcmU6OlVSTCYgdmFsdWUpOworICAgIHN0YXRpYyBib29sIGRlY29kZVZhbHVl
KEVuY29kZWRWYWx1ZSYsIFdlYkNvcmU6OlVSTCYgdmFsdWUpOworfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgRW5jb2RpbmdUcmFpdHM8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+IHsKKyAgICB0eXBl
ZGVmIFJlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4gRGVjb2RlZFR5cGU7CisKKyAgICBz
dGF0aWMgRW5jb2RlZFZhbHVlIGVuY29kZVZhbHVlKFJlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9y
aWdpbj4gdmFsdWUpOworICAgIHN0YXRpYyBib29sIGRlY29kZVZhbHVlKEVuY29kZWRWYWx1ZSYs
IFJlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4mIHZhbHVlKTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SRVBMQVkpCisKKyNlbmRpZiAvLyBT
ZXJpYWxpemF0aW9uTWV0aG9kc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkv
V2ViSW5wdXRzLmpzb24gYi9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvV2ViSW5wdXRzLmpzb24KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNWU2NTFlMTYyODk0ZmM3ODliYmY0OWVhMDg1YzAxNzcwNmIxZjRlYwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9XZWJJbnB1dHMuanNvbgpAQCAtMCww
ICsxLDY5IEBACit7CisgICAgInR5cGVzIjogeworICAgICAgICAiR2xvYmFsIjogWworICAgICAg
ICAgICAgeyAibmFtZSI6ICJib29sIiwgIm1vZGUiOiAiU0NBTEFSIiB9LAorICAgICAgICAgICAg
eyAibmFtZSI6ICJkb3VibGUiLCAibW9kZSI6ICJTQ0FMQVIiIH0sCisgICAgICAgICAgICB7ICJu
YW1lIjogImludCIsICJtb2RlIjogIlNDQUxBUiIgfSwKKyAgICAgICAgICAgIHsgIm5hbWUiOiAi
dW5zaWduZWQiLCAibW9kZSI6ICJTQ0FMQVIiIH0sCisgICAgICAgICAgICB7ICJuYW1lIjogInVu
c2lnbmVkIGxvbmciLCAibW9kZSI6ICJTQ0FMQVIiIH0sCisgICAgICAgICAgICB7ICJuYW1lIjog
InVuc2lnbmVkIGxvbmcgbG9uZyIsICJtb2RlIjogIlNDQUxBUiIgfQorICAgICAgICBdLAorCisg
ICAgICAgICJXVEYiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm5hbWUiOiAi
U3RyaW5nIiwgIm1vZGUiOiAiSEVBVllfU0NBTEFSIiwKKyAgICAgICAgICAgICAgICAiaGVhZGVy
IjogInd0Zi90ZXh0L1dURlN0cmluZy5oIgorICAgICAgICAgICAgfQorICAgICAgICBdLAorCisg
ICAgICAgICJKYXZhU2NyaXB0Q29yZSI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAibmFtZSI6ICJJbnB1dFF1ZXVlIiwgIm1vZGUiOiAiU0NBTEFSIiwgInN0b3JhZ2UiOiAidWlu
dDhfdCIsCisgICAgICAgICAgICAgICAgImZsYWdzIjogWyJFTlVNX0NMQVNTIl0sCisgICAgICAg
ICAgICAgICAgInZhbHVlcyI6IFsiRXZlbnRMb29wSW5wdXQiLCAiTG9hZGVyTWVtb2l6ZWREYXRh
IiwgIlNjcmlwdE1lbW9pemVkRGF0YSIsICJDb3VudCJdLAorICAgICAgICAgICAgICAgICJoZWFk
ZXIiOiAicmVwbGF5L05vbmRldGVybWluaXN0aWNJbnB1dC5oIgorICAgICAgICAgICAgfQorICAg
ICAgICBdLAorCisgICAgICAgICJXZWJDb3JlIjogWworICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICJuYW1lIjogIlVSTCIsICJtb2RlIjogIkhFQVZZX1NDQUxBUiIsCisgICAgICAgICAg
ICAgICAgImhlYWRlciI6ICJwbGF0Zm9ybS9VUkwuaCIKKyAgICAgICAgICAgIH0sCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgIm5hbWUiOiAiU2VjdXJpdHlPcmlnaW4iLCAibW9kZSI6
ICJTSEFSRUQiLAorICAgICAgICAgICAgICAgICJoZWFkZXIiOiAicGFnZS9TZWN1cml0eU9yaWdp
bi5oIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAibmFt
ZSI6ICJQYWdlIiwgIm1vZGUiOiAiT1dORUQiLAorICAgICAgICAgICAgICAgICJoZWFkZXIiOiAi
cGFnZS9QYWdlLmgiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorCisgICAgImlu
cHV0cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiQmVnaW5TZWdtZW50U2Vu
dGluZWwiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkEgc2VudGluZWwgaW5wdXQgdG8g
c2lnbmFsIHRoZSBzdGFydCBvZiBhIHNlZ21lbnQuIiwKKyAgICAgICAgICAgICJxdWV1ZSI6ICJF
VkVOVF9MT09QIiwKKyAgICAgICAgICAgICJtZW1iZXJzIjogWyBdCisgICAgICAgIH0sCisgICAg
ICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIkVuZFNlZ21lbnRTZW50aW5lbCIsCisgICAgICAg
ICAgICAiZGVzY3JpcHRpb24iOiAiQSBzZW50aW5lbCBpbnB1dCB0byBzaWduYWwgdGhlIGVuZCBv
ZiBhIHNlZ21lbnQuIiwKKyAgICAgICAgICAgICJxdWV1ZSI6ICJFVkVOVF9MT09QIiwKKyAgICAg
ICAgICAgICJtZW1iZXJzIjogWyBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJuYW1lIjogIkluaXRpYWxOYXZpZ2F0aW9uIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJJbml0aWF0ZSB0aGUgaW5pdGlhbCBtYWluIGZyYW1lIG5hdmlnYXRpb24uIiwKKyAgICAgICAg
ICAgICJxdWV1ZSI6ICJFVkVOVF9MT09QIiwKKyAgICAgICAgICAgICJmbGFncyI6IFsiSElEREVO
IiwgIkNSRUFURV9GUk9NX1BBR0UiXSwKKyAgICAgICAgICAgICJtZW1iZXJzIjogWworICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAic2VjdXJpdHlPcmlnaW4iLCAidHlwZSI6ICJTZWN1cml0eU9y
aWdpbiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInVybCIsICJ0eXBlIjogIlVSTCIg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJlZmVycmVyIiwgInR5cGUiOiAiU3RyaW5n
IiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9Cg==
</data>
<flag name="review"
          id="249462"
          type_id="1"
          status="+"
          setter="timothy"
    />
          </attachment>
      

    </bug>

</bugzilla>