<?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>68462</bug_id>
          
          <creation_ts>2011-09-20 13:13:41 -0700</creation_ts>
          <short_desc>Update PeerConnection to use WebCore platform interfaces</short_desc>
          <delta_ts>2011-10-12 14:36:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>68460</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Adam Bergkvist">adam.bergkvist</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>abarth</cc>
    
    <cc>donggwan.kim</cc>
    
    <cc>grunell</cc>
    
    <cc>harald</cc>
    
    <cc>jonathon</cc>
    
    <cc>per-erik.brodin</cc>
    
    <cc>tommyw</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>470272</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2011-09-20 13:13:41 -0700</bug_when>
    <thetext>Modify PeerConnection to use PeerHandler and add some logic from the spec that can be shared between ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471946</commentid>
    <comment_count>1</comment_count>
      <attachid>108421</attachid>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2011-09-22 16:58:28 -0700</bug_when>
    <thetext>Created attachment 108421
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478302</commentid>
    <comment_count>2</comment_count>
      <attachid>109783</attachid>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2011-10-05 06:30:10 -0700</bug_when>
    <thetext>Created attachment 109783
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480920</commentid>
    <comment_count>3</comment_count>
      <attachid>110350</attachid>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2011-10-10 05:30:07 -0700</bug_when>
    <thetext>Created attachment 110350
Patch 3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480980</commentid>
    <comment_count>4</comment_count>
      <attachid>110350</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-10 09:53:43 -0700</bug_when>
    <thetext>Comment on attachment 110350
Patch 3

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

This looks great.  There are a bunch of nit-picky details below.  I&apos;d like to see another iteration of this patch before we land it, but it&apos;s very close.

&gt; Source/WebCore/bindings/js/JSPeerConnectionCustom.cpp:41
&gt;  EncodedJSValue JSC_HOST_CALL JSPeerConnectionConstructor::constructJSPeerConnection(ExecState* exec)

You might be able do this with IDL now.  There&apos;s a ConstructWith=ScriptExecutionContext attribute.

&gt; Source/WebCore/bindings/js/JSPeerConnectionCustom.cpp:46
&gt; +    ScriptExecutionContext* context = jsConstructor-&gt;scriptExecutionContext();
&gt; +    if (!context)
&gt; +        return throwVMError(exec, createReferenceError(exec, &quot;PeerConnection constructor associated document is unavailable&quot;));

Can this ever be null?

&gt; Source/WebCore/bindings/js/JSPeerConnectionCustom.cpp:59
&gt; +    RefPtr&lt;PeerConnection&gt; peerConnection = PeerConnection::create(serverConfiguration, signalingCallback.release(), context);

context should probably be the first argument.

&gt; Source/WebCore/dom/MediaStreamList.cpp:61
&gt; +void MediaStreamList::remove(const RefPtr&lt;MediaStream&gt;&amp; stream)

Why not a raw pointer?

&gt; Source/WebCore/dom/MediaStreamList.cpp:68
&gt; +bool MediaStreamList::contains(const RefPtr&lt;MediaStream&gt;&amp; stream) const

Why not a raw pointer?

&gt; Source/WebCore/p2p/PeerConnection.cpp:116
&gt; -void PeerConnection::addStream(PassRefPtr&lt;MediaStream&gt; prpStream, ExceptionCode&amp; ec)
&gt; +void PeerConnection::addStream(const PassRefPtr&lt;MediaStream&gt; prpStream, ExceptionCode&amp; ec)

Why const ?  Using a const PassRefPtr doesn&apos;t make a whole lot of sense.  The point of a PassRefPtr is to be able to transfer the reference, which you can&apos;t do if it&apos;s const.  :)

&gt; Source/WebCore/p2p/PeerConnection.cpp:125
&gt;      RefPtr&lt;MediaStream&gt; stream = prpStream;

How does this compile with const?  It should transfer the ref out of the prpStream and into stream.  It looks like we only use |stream| once (as the argument to append).  We probably don&apos;t need to create a local RefPtr for it.  We can just pass the prpStream directly to append.

&gt; Source/WebCore/p2p/PeerConnection.cpp:250
&gt;  ScriptExecutionContext* PeerConnection::scriptExecutionContext() const
&gt;  {
&gt; -    return mediaStreamFrameController() ? mediaStreamFrameController()-&gt;scriptExecutionContext() : 0;
&gt; +    return ActiveDOMObject::scriptExecutionContext();
&gt; +}

Why do we need this function if we just call through to our superclass?

&gt; Source/WebCore/p2p/PeerConnection.cpp:283
&gt; +    if (!m_initialNegotiationTimer.isActive())
&gt; +        m_initialNegotiationTimer.startOneShot(0);

You might consider calling this function &quot;ensure&quot; XYZ because it doesn&apos;t always schedule the initial negotiation.  It jus ensures that it is scheduled.

&gt; Source/WebCore/p2p/PeerConnection.cpp:304
&gt; +    if (!m_streamChangeTimer.isActive())
&gt; +        m_streamChangeTimer.startOneShot(0);

Same comment here.

&gt; Source/WebCore/p2p/PeerConnection.cpp:307
&gt; +void PeerConnection::streamChangeTimerFired(Timer&lt;PeerConnection&gt;*)

Usually we ASSERT_UNUSED that we get the right timer parameter.

&gt; Source/WebCore/p2p/PeerConnection.cpp:332
&gt; +void PeerConnection::readyStateChangeTimerFired(Timer&lt;PeerConnection&gt;*)

Same here.

&gt; Source/WebCore/p2p/PeerConnection.cpp:358
&gt; +    default:
&gt; +        ASSERT_NOT_REACHED();

We usually leave off the default case and let the compiler complain if we&apos;ve forgotten an enum value.

&gt; Source/WebCore/p2p/PeerConnection.h:42
&gt;  namespace WebCore {

We like a blank line after this line.

&gt; Source/WebCore/p2p/PeerConnection.h:93
&gt; +    static const size_t kMaxMessageUTF8Length = 504;

This we usually put as a static global in the cpp file because not all compilers can handle this syntax.

&gt; Source/WebCore/p2p/PeerConnection.idl:33
&gt; +        ConstructorWith=ScriptExecutionContext,

Oh, you do have this.  I thought this passed the ScriptExecutionContext as the first argument.

&gt; Source/WebCore/p2p/PeerConnection.idl:34
&gt; +        JSCustomConstructor,

Why does it need a JSCustomConstructor then?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481699</commentid>
    <comment_count>5</comment_count>
      <attachid>110529</attachid>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2011-10-11 10:06:25 -0700</bug_when>
    <thetext>Created attachment 110529
Patch 4

(In reply to comment #4)
&gt; (From update of attachment 110350 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=110350&amp;action=review
&gt; 
&gt; This looks great.  There are a bunch of nit-picky details below.  I&apos;d like to see another iteration of this patch before we land it, but it&apos;s very close.

Good to hear. Thanks for reviewing this so quickly.

&gt; &gt; Source/WebCore/bindings/js/JSPeerConnectionCustom.cpp:41
&gt; &gt;  EncodedJSValue JSC_HOST_CALL JSPeerConnectionConstructor::constructJSPeerConnection(ExecState* exec)
&gt; 
&gt; You might be able do this with IDL now.  There&apos;s a ConstructWith=ScriptExecutionContext attribute.

It works for V8, but the bindings generator for JSC doesn&apos;t seem to be able to deal with the constructor arguments nor the ScriptExecutionContext argument yet.
 
&gt; &gt; Source/WebCore/bindings/js/JSPeerConnectionCustom.cpp:46
&gt; &gt; +    ScriptExecutionContext* context = jsConstructor-&gt;scriptExecutionContext();
&gt; &gt; +    if (!context)
&gt; &gt; +        return throwVMError(exec, createReferenceError(exec, &quot;PeerConnection constructor associated document is unavailable&quot;));
&gt; 
&gt; Can this ever be null?

Apparently it can since all other JSC custom constructor functions have it. I added the check to align with those.

&gt; &gt; Source/WebCore/bindings/js/JSPeerConnectionCustom.cpp:59
&gt; &gt; +    RefPtr&lt;PeerConnection&gt; peerConnection = PeerConnection::create(serverConfiguration, signalingCallback.release(), context);
&gt; 
&gt; context should probably be the first argument.

It has to come after the &quot;real&quot; constructor arguments for the generated V8 constructor function to work.
 
&gt; &gt; Source/WebCore/dom/MediaStreamList.cpp:61
&gt; &gt; +void MediaStreamList::remove(const RefPtr&lt;MediaStream&gt;&amp; stream)
&gt; 
&gt; Why not a raw pointer?

MediaStreamList is never used with raw pointers and I think the API is nicer to use like streams-&gt;contains(stream) instead of streams-&gt;contains(stream.get()). I&apos;ve seen references used for key arguments elsewhere in the project for &quot;collection-like&quot; objects. Is that OK or should I change to a raw pointer?
 
&gt; &gt; Source/WebCore/dom/MediaStreamList.cpp:68
&gt; &gt; +bool MediaStreamList::contains(const RefPtr&lt;MediaStream&gt;&amp; stream) const
&gt; 
&gt; Why not a raw pointer?

See previous comment.

&gt; &gt; Source/WebCore/p2p/PeerConnection.cpp:116
&gt; &gt; -void PeerConnection::addStream(PassRefPtr&lt;MediaStream&gt; prpStream, ExceptionCode&amp; ec)
&gt; &gt; +void PeerConnection::addStream(const PassRefPtr&lt;MediaStream&gt; prpStream, ExceptionCode&amp; ec)
&gt; 
&gt; Why const ?  Using a const PassRefPtr doesn&apos;t make a whole lot of sense.  The point of a PassRefPtr is to be able to transfer the reference, which you can&apos;t do if it&apos;s const.  :)

Fixed.

&gt; &gt; Source/WebCore/p2p/PeerConnection.cpp:125
&gt; &gt;      RefPtr&lt;MediaStream&gt; stream = prpStream;
&gt; 
&gt; How does this compile with const?  It should transfer the ref out of the prpStream and into stream.  It looks like we only use |stream| once (as the argument to append).  We probably don&apos;t need to create a local RefPtr for it.  We can just pass the prpStream directly to append.
&gt;

You&apos;re right, it shouldn&apos;t be const. It compiles because of this: http://trac.webkit.org/browser/trunk/Source/JavaScriptCore/wtf/PassRefPtr.h#L68.

|stream| is used three times in addStream() (including the FIXME) so the local RefPtr is needed.

&gt; &gt; Source/WebCore/p2p/PeerConnection.cpp:250
&gt; &gt;  ScriptExecutionContext* PeerConnection::scriptExecutionContext() const
&gt; &gt;  {
&gt; &gt; -    return mediaStreamFrameController() ? mediaStreamFrameController()-&gt;scriptExecutionContext() : 0;
&gt; &gt; +    return ActiveDOMObject::scriptExecutionContext();
&gt; &gt; +}
&gt; 
&gt; Why do we need this function if we just call through to our superclass?

It&apos;s needed because it&apos;s pure virtual in EventTarget.

&gt; &gt; Source/WebCore/p2p/PeerConnection.cpp:283
&gt; &gt; +    if (!m_initialNegotiationTimer.isActive())
&gt; &gt; +        m_initialNegotiationTimer.startOneShot(0);
&gt; 
&gt; You might consider calling this function &quot;ensure&quot; XYZ because it doesn&apos;t always schedule the initial negotiation.  It jus ensures that it is scheduled.

It&apos;s actually only called once. I&apos;ve changed the &quot;if&quot; to an ASSERT instead.

&gt; &gt; Source/WebCore/p2p/PeerConnection.cpp:304
&gt; &gt; +    if (!m_streamChangeTimer.isActive())
&gt; &gt; +        m_streamChangeTimer.startOneShot(0);
&gt; 
&gt; Same comment here.

Fixed (renamed to ensureStreamChangeScheduled()).

&gt; &gt; Source/WebCore/p2p/PeerConnection.cpp:307
&gt; &gt; +void PeerConnection::streamChangeTimerFired(Timer&lt;PeerConnection&gt;*)
&gt; 
&gt; Usually we ASSERT_UNUSED that we get the right timer parameter.

Fixed.

&gt; &gt; Source/WebCore/p2p/PeerConnection.cpp:332
&gt; &gt; +void PeerConnection::readyStateChangeTimerFired(Timer&lt;PeerConnection&gt;*)
&gt; 
&gt; Same here.

Fixed.

&gt; &gt; Source/WebCore/p2p/PeerConnection.cpp:358
&gt; &gt; +    default:
&gt; &gt; +        ASSERT_NOT_REACHED();
&gt; 
&gt; We usually leave off the default case and let the compiler complain if we&apos;ve forgotten an enum value.

The initial readyState NEW is not handled in the switch. An alternative would be to add case NEW and move the ASSERT there.

&gt; &gt; Source/WebCore/p2p/PeerConnection.h:42
&gt; &gt;  namespace WebCore {
&gt; 
&gt; We like a blank line after this line.

Fixed.

&gt; &gt; Source/WebCore/p2p/PeerConnection.h:93
&gt; &gt; +    static const size_t kMaxMessageUTF8Length = 504;
&gt; 
&gt; This we usually put as a static global in the cpp file because not all compilers can handle this syntax.

This line was actually not introduced in this patch (there&apos;s both + and - lines for it). I&apos;ve removed the constant since it&apos;s only used once in a clear context.

&gt; &gt; Source/WebCore/p2p/PeerConnection.idl:33
&gt; &gt; +        ConstructorWith=ScriptExecutionContext,
&gt; 
&gt; Oh, you do have this.  I thought this passed the ScriptExecutionContext as the first argument.
&gt; 
&gt; &gt; Source/WebCore/p2p/PeerConnection.idl:34
&gt; &gt; +        JSCustomConstructor,
&gt; 
&gt; Why does it need a JSCustomConstructor then?

We can&apos;t generate a working constructor function for JSC yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481722</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-11 10:43:03 -0700</bug_when>
    <thetext>&gt; &gt; &gt; Source/WebCore/bindings/js/JSPeerConnectionCustom.cpp:41
&gt; &gt; &gt;  EncodedJSValue JSC_HOST_CALL JSPeerConnectionConstructor::constructJSPeerConnection(ExecState* exec)
&gt; &gt; 
&gt; &gt; You might be able do this with IDL now.  There&apos;s a ConstructWith=ScriptExecutionContext attribute.
&gt; 
&gt; It works for V8, but the bindings generator for JSC doesn&apos;t seem to be able to deal with the constructor arguments nor the ScriptExecutionContext argument yet.

Yep.  I found the bug report about this issue, and it is in the process of being fixed.

&gt; &gt; &gt; Source/WebCore/bindings/js/JSPeerConnectionCustom.cpp:59
&gt; &gt; &gt; +    RefPtr&lt;PeerConnection&gt; peerConnection = PeerConnection::create(serverConfiguration, signalingCallback.release(), context);
&gt; &gt; 
&gt; &gt; context should probably be the first argument.
&gt; 
&gt; It has to come after the &quot;real&quot; constructor arguments for the generated V8 constructor function to work.

Yep.  I&apos;ve encouraged the person working on constructors to fix this.  There&apos;s a slight rights your change will conflict with that one, but we&apos;ll be able to resolve that if that happens.

&gt; &gt; &gt; Source/WebCore/dom/MediaStreamList.cpp:61
&gt; &gt; &gt; +void MediaStreamList::remove(const RefPtr&lt;MediaStream&gt;&amp; stream)
&gt; &gt; 
&gt; &gt; Why not a raw pointer?
&gt; 
&gt; MediaStreamList is never used with raw pointers and I think the API is nicer to use like streams-&gt;contains(stream) instead of streams-&gt;contains(stream.get()). I&apos;ve seen references used for key arguments elsewhere in the project for &quot;collection-like&quot; objects. Is that OK or should I change to a raw pointer?

I can understand the aesthetic issue, but we use these various types to communicate different ownership patterns.  We use this type (somewhat rarely) to mean that it&apos;s essential that the caller explicitly hold a reference to the object (e.g., on the stack) because this function could trigger a cascade of dereferences.

In the end, it&apos;s just a style thing and not a big deal, but it&apos;s slightly more consistent with the rest of WebKit to just take a raw pointer here.

&gt; |stream| is used three times in addStream() (including the FIXME) so the local RefPtr is needed.

Ok.  I must have missed the other ones.

&gt; &gt; Why do we need this function if we just call through to our superclass?
&gt; 
&gt; It&apos;s needed because it&apos;s pure virtual in EventTarget.

Ah.

&gt; &gt; &gt; Source/WebCore/p2p/PeerConnection.cpp:283
&gt; &gt; &gt; +    if (!m_initialNegotiationTimer.isActive())
&gt; &gt; &gt; +        m_initialNegotiationTimer.startOneShot(0);
&gt; &gt; 
&gt; &gt; You might consider calling this function &quot;ensure&quot; XYZ because it doesn&apos;t always schedule the initial negotiation.  It jus ensures that it is scheduled.
&gt; 
&gt; It&apos;s actually only called once. I&apos;ve changed the &quot;if&quot; to an ASSERT instead.

Even better.

&gt; &gt; &gt; Source/WebCore/p2p/PeerConnection.cpp:358
&gt; &gt; &gt; +    default:
&gt; &gt; &gt; +        ASSERT_NOT_REACHED();
&gt; &gt; 
&gt; &gt; We usually leave off the default case and let the compiler complain if we&apos;ve forgotten an enum value.
&gt; 
&gt; The initial readyState NEW is not handled in the switch. An alternative would be to add case NEW and move the ASSERT there.

Please do.  That&apos;s part of why we like that style.  :)

&gt; &gt; &gt; Source/WebCore/p2p/PeerConnection.h:93
&gt; &gt; &gt; +    static const size_t kMaxMessageUTF8Length = 504;
&gt; &gt; 
&gt; &gt; This we usually put as a static global in the cpp file because not all compilers can handle this syntax.
&gt; 
&gt; This line was actually not introduced in this patch (there&apos;s both + and - lines for it). I&apos;ve removed the constant since it&apos;s only used once in a clear context.

The folks who have those compilers must have this feature turned off.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481831</commentid>
    <comment_count>7</comment_count>
      <attachid>110529</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-11 12:39:57 -0700</bug_when>
    <thetext>Comment on attachment 110529
Patch 4

Would you be willing to make the small tweaks above?  Then I&apos;ll through the patch one more time in detail and hopefully we&apos;ll be able to land it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482024</commentid>
    <comment_count>8</comment_count>
      <attachid>110603</attachid>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2011-10-11 16:42:10 -0700</bug_when>
    <thetext>Created attachment 110603
Patch 5

(In reply to comment #6)

&gt; I can understand the aesthetic issue, but we use these various types to communicate different ownership patterns.  We use this type (somewhat rarely) to mean that it&apos;s essential that the caller explicitly hold a reference to the object (e.g., on the stack) because this function could trigger a cascade of dereferences.
&gt; 
&gt; In the end, it&apos;s just a style thing and not a big deal, but it&apos;s slightly more consistent with the rest of WebKit to just take a raw pointer here.

Let&apos;s go with raw pointers for consistency.
 
&gt; &gt; The initial readyState NEW is not handled in the switch. An alternative would be to add case NEW and move the ASSERT there.
&gt; 
&gt; Please do.  That&apos;s part of why we like that style.  :)

Fixed.

I&apos;ll upload the next patch which updates MediaStream/LocalMediaStream in http://webkit.org/b/68464</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482461</commentid>
    <comment_count>9</comment_count>
      <attachid>110603</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-12 09:42:42 -0700</bug_when>
    <thetext>Comment on attachment 110603
Patch 5

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

&gt; Source/WebCore/p2p/PeerConnection.cpp:39
&gt; -PassRefPtr&lt;PeerConnection&gt; PeerConnection::create(MediaStreamFrameController* frameController, int id, const String&amp; configuration, PassRefPtr&lt;SignalingCallback&gt; signalingCallback)
&gt; +PassRefPtr&lt;PeerConnection&gt; PeerConnection::create(const String&amp; serverConfiguration, PassRefPtr&lt;SignalingCallback&gt; signalingCallback, ScriptExecutionContext* context)

I think the patch to move this to the front has landed.  We need to check that this compiles when landing.

&gt; Source/WebCore/p2p/PeerConnection.cpp:169
&gt; +    MediaStreamDescriptor* streamDescriptor = 0;
&gt; +    size_t i = m_pendingAddStreams.find(streamDescriptor);
&gt; +    if (i != notFound) {
&gt; +        m_pendingAddStreams.remove(i);
&gt;          return;
&gt; +    }
&gt; +
&gt; +    m_pendingRemoveStreams.append(streamDescriptor);
&gt; +    if (m_iceStarted)
&gt; +        ensureStreamChangeScheduled();

This code appears duplicated.  Maybe break out into a helper function?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482587</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-12 12:02:30 -0700</bug_when>
    <thetext>Constructor change is Bug 69799.  I&apos;m going to land that bug and then land an updated version of this patch to account for any merge conflicts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482611</commentid>
    <comment_count>11</comment_count>
      <attachid>110603</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-12 12:33:51 -0700</bug_when>
    <thetext>Comment on attachment 110603
Patch 5

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

&gt;&gt; Source/WebCore/p2p/PeerConnection.cpp:169
&gt;&gt; +        ensureStreamChangeScheduled();
&gt; 
&gt; This code appears duplicated.  Maybe break out into a helper function?

Ah, i see it&apos;s different now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482614</commentid>
    <comment_count>12</comment_count>
      <attachid>110722</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-12 12:38:49 -0700</bug_when>
    <thetext>Created attachment 110722
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482684</commentid>
    <comment_count>13</comment_count>
      <attachid>110722</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-12 14:06:48 -0700</bug_when>
    <thetext>Comment on attachment 110722
Patch for landing

Rejecting attachment 110722 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
es are: WebCore::PeerConnection::PeerConnection(WebCore::ScriptExecutionContext*, const WTF::String&amp;, WTF::PassRefPtr&lt;WebCore::SignalingCallback&gt;)
Source/WebCore/p2p/PeerConnection.h:44: note:                 WebCore::PeerConnection::PeerConnection(const WebCore::PeerConnection&amp;)
  CXX(target) out/Debug/obj.target/webcore_remaining/Source/WebCore/page/Chrome.o
make: *** [out/Debug/obj.target/webcore_remaining/Source/WebCore/p2p/PeerConnection.o] Error 1
make: *** Waiting for unfinished jobs....

Full output: http://queues.webkit.org/results/9999040</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482698</commentid>
    <comment_count>14</comment_count>
      <attachid>110743</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-12 14:18:36 -0700</bug_when>
    <thetext>Created attachment 110743
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482730</commentid>
    <comment_count>15</comment_count>
      <attachid>110743</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-12 14:36:48 -0700</bug_when>
    <thetext>Comment on attachment 110743
Patch for landing

Clearing flags on attachment: 110743

Committed r97305: &lt;http://trac.webkit.org/changeset/97305&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482732</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-12 14:36:54 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108421</attachid>
            <date>2011-09-22 16:58:28 -0700</date>
            <delta_ts>2011-10-05 06:30:10 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>peerconnection_use_platform_1.patch</filename>
            <type>text/plain</type>
            <size>54730</size>
            <attacher name="Adam Bergkvist">adam.bergkvist</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmMjBlZjVlLi5mZjdmYzY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcg
QEAKKzIwMTEtMDktMjIgIEFkYW0gQmVyZ2t2aXN0ICA8YWRhbS5iZXJna3Zpc3RAZXJpY3Nzb24u
Y29tPgorCisgICAgICAgIFVwZGF0ZSBQZWVyQ29ubmVjdGlvbiB0byB1c2UgV2ViQ29yZSBwbGF0
Zm9ybSBpbnRlcmZhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02ODQ2MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEN1cnJlbnRseSBub3QgdGVzdGFibGUuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U1BlZXJDb25uZWN0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTUGVlckNvbm5l
Y3Rpb25Db25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNQZWVyQ29ubmVjdGlvbik6CisgICAgICAgICog
YmluZGluZ3MvdjgvY3VzdG9tL1Y4UGVlckNvbm5lY3Rpb25DdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VjhQZWVyQ29ubmVjdGlvbjo6Y29uc3RydWN0b3JDYWxsYmFjayk6CisgICAgICAg
ICogZG9tL01lZGlhU3RyZWFtTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVh
bUxpc3Q6Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1MaXN0OjphcHBlbmQp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1MaXN0OjpyZW1vdmUpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFTdHJlYW1MaXN0Ojpjb250YWlucyk6CisgICAgICAgICogZG9tL01lZGlh
U3RyZWFtTGlzdC5oOgorICAgICAgICAqIHAycC9QZWVyQ29ubmVjdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBl
ZXJDb25uZWN0aW9uOjpQZWVyQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjppc0NhcnJp
YWdlUmV0dXJuT3JMaW5lRmVlZCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6
cGFyc2VTZXJ2ZXJDb25maWd1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0
aW9uOjpwcm9jZXNzU2lnbmFsaW5nTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29u
bmVjdGlvbjo6cmVhZHlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6
c2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6YWRkU3RyZWFtKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uOjpyZW1vdmVTdHJlYW0pOgorICAgICAgICAo
V2ViQ29yZTo6UGVlckNvbm5lY3Rpb246OmxvY2FsU3RyZWFtcyk6CisgICAgICAgIChXZWJDb3Jl
OjpQZWVyQ29ubmVjdGlvbjo6cmVtb3RlU3RyZWFtcyk6CisgICAgICAgIChXZWJDb3JlOjpQZWVy
Q29ubmVjdGlvbjo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246Omlj
ZVByb2Nlc3NpbmdDb21wbGV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246
OnNkcEdlbmVyYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6ZGF0YVN0
cmVhbU1lc3NhZ2VSZWNlaXZlZCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6
cmVtb3RlU3RyZWFtQWRkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246OnJl
bW90ZVN0cmVhbVJlbW92ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246OnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246
OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246OnNjaGVkdWxlSW5pdGlh
bE5lZ290aWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uOjppbml0aWFs
TmVnb3RpYXRpb25UaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9u
OjpzY2hlZHVsZVN0cmVhbUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlv
bjo6c3RyZWFtQ2hhbmdlVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVj
dGlvbjo6c2NoZWR1bGVSZWFkeVN0YXRlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJD
b25uZWN0aW9uOjpyZWFkeVN0YXRlQ2hhbmdlVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpQZWVyQ29ubmVjdGlvbjo6Y2hhbmdlUmVhZHlTdGF0ZSk6CisgICAgICAgICogcDJwL1BlZXJD
b25uZWN0aW9uLmg6CisgICAgICAgICogcGFnZS9NZWRpYVN0cmVhbUNsaWVudC5oOgorICAgICAg
ICAqIHBhZ2UvTWVkaWFTdHJlYW1Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhU3RyZWFtQ29udHJvbGxlcjo6TWVkaWFTdHJlYW1Db250cm9sbGVyKToKKyAgICAgICAgKiBw
YWdlL01lZGlhU3RyZWFtQ29udHJvbGxlci5oOgorICAgICAgICAqIHBhZ2UvTWVkaWFTdHJlYW1G
cmFtZUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAqIHBhZ2UvTWVkaWFTdHJlYW1GcmFtZUNvbnRy
b2xsZXIuaDoKKwogMjAxMS0wOS0yMiAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBh
cHBsZS5jb20+CiAKICAgICAgICAgSW1wbGVtZW50IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BlZXJDb25uZWN0aW9uQ3Vz
dG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGVlckNvbm5lY3Rpb25DdXN0
b20uY3BwCmluZGV4IDcwYmIxNzIuLmUyNDM3YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTUGVlckNvbm5lY3Rpb25DdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTUGVlckNvbm5lY3Rpb25DdXN0b20uY3BwCkBAIC0xLDUgKzEsNiBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSwyMiArMzAsMjUgQEAK
ICNpbmNsdWRlICJKU1BlZXJDb25uZWN0aW9uLmgiCiAKICNpbmNsdWRlICJDYWxsYmFja0Z1bmN0
aW9uLmgiCi0jaW5jbHVkZSAiRE9NV2luZG93LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNs
dWRlICJKU0RPTVdpbmRvd0N1c3RvbS5oIgogI2luY2x1ZGUgIkpTU2lnbmFsaW5nQ2FsbGJhY2su
aCIKLSNpbmNsdWRlICJNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlBl
ZXJDb25uZWN0aW9uLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKKyNpbmNsdWRlIDxydW50aW1l
L0Vycm9yLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KwogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1BlZXJDb25uZWN0aW9uQ29uc3RydWN0
b3I6OmNvbnN0cnVjdEpTUGVlckNvbm5lY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpT
UGVlckNvbm5lY3Rpb25Db25zdHJ1Y3RvcioganNDb25zdHJ1Y3RvciA9IHN0YXRpY19jYXN0PEpT
UGVlckNvbm5lY3Rpb25Db25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0ganNDb25zdHJ1Y3Rvci0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihleGVjLCBjcmVhdGVSZWZlcmVuY2VFcnJvcihleGVjLCAiUGVlckNvbm5lY3Rpb24gY29uc3Ry
dWN0b3IgYXNzb2NpYXRlZCBkb2N1bWVudCBpcyB1bmF2YWlsYWJsZSIpKTsKKworICAgIGlmIChl
eGVjLT5hcmd1bWVudENvdW50KCkgPCAyKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4
ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiTm90IGVub3VnaCBhcmd1bWVudHMiKSk7CiAKLSAg
ICBTdHJpbmcgY29uZmlndXJhdGlvbiA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgw
KS50b1N0cmluZyhleGVjKSk7CisgICAgU3RyaW5nIHNlcnZlckNvbmZpZ3VyYXRpb24gPSB1c3Ry
aW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpOwogICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlKCkpOwogCkBAIC01MiwxNyArNTYsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IEpTUGVlckNvbm5lY3Rpb25Db25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNQZWVyQ29ubmVjdAogICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlKCkpOwogCi0gICAgRnJhbWUqIGZyYW1lID0gYXNKU0RPTVdpbmRvdyhleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5pbXBsKCktPmZyYW1lKCk7Ci0gICAgTWVkaWFTdHJlYW1G
cmFtZUNvbnRyb2xsZXIqIGZyYW1lQ29udHJvbGxlciA9IGZyYW1lID8gZnJhbWUtPm1lZGlhU3Ry
ZWFtRnJhbWVDb250cm9sbGVyKCkgOiAwOwotCi0gICAgUmVmUHRyPFBlZXJDb25uZWN0aW9uPiBw
ZWVyQ29ubmVjdGlvbjsKLSAgICBpZiAoZnJhbWVDb250cm9sbGVyKQotICAgICAgICBwZWVyQ29u
bmVjdGlvbiA9IGZyYW1lQ29udHJvbGxlci0+Y3JlYXRlUGVlckNvbm5lY3Rpb24oY29uZmlndXJh
dGlvbiwgc2lnbmFsaW5nQ2FsbGJhY2spOwotCi0gICAgaWYgKCFwZWVyQ29ubmVjdGlvbikKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwotCi0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pTKGV4ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2JhbE9i
amVjdCgpLCBwZWVyQ29ubmVjdGlvbi5nZXQoKSkpKTsKKyAgICBSZWZQdHI8UGVlckNvbm5lY3Rp
b24+IHBlZXJDb25uZWN0aW9uID0gUGVlckNvbm5lY3Rpb246OmNyZWF0ZShzZXJ2ZXJDb25maWd1
cmF0aW9uLCBzaWduYWxpbmdDYWxsYmFjay5yZWxlYXNlKCksIGNvbnRleHQpOworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoQ1JFQVRFX0RPTV9XUkFQUEVSKGV4ZWMsIGpzQ29uc3RydWN0b3It
Pmdsb2JhbE9iamVjdCgpLCBQZWVyQ29ubmVjdGlvbiwgcGVlckNvbm5lY3Rpb24uZ2V0KCkpKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4UGVlckNvbm5lY3Rpb25DdXN0b20uY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4UGVlckNvbm5lY3Rpb25DdXN0b20uY3BwCmluZGV4
IDk4MWNkYTEuLmFiYTkxNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOFBlZXJDb25uZWN0aW9uQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhQZWVyQ29ubmVjdGlvbkN1c3RvbS5jcHAKQEAgLTI4LDEwICsy
OCw2IEBACiAKICNpbmNsdWRlICJWOFBlZXJDb25uZWN0aW9uLmgiCiAKLSNpbmNsdWRlICJET01X
aW5kb3cuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIK
LSNpbmNsdWRlICJNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlBlZXJD
b25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhQcm94eS5o
IgpAQCAtNDYsMzAgKzQyLDI1IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFBlZXJDb25uZWN0
aW9uOjpjb25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmCiAgICAgaWYgKCFh
cmdzLklzQ29uc3RydWN0Q2FsbCgpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiRE9NIG9i
amVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uIiwgVjhQcm94
eTo6VHlwZUVycm9yKTsKIAotICAgIGludCBhcmdMZW5ndGggPSBhcmdzLkxlbmd0aCgpOwotICAg
IGlmIChhcmdMZW5ndGggIT0gMikKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIlRoZSBQZWVy
Q29ubmVjdGlvbiBjb25zdHJ1Y3RvciB0YWtlcyB0d28gYXJndW1lbnRzLiIsIFY4UHJveHk6OlR5
cGVFcnJvcik7CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IGdldFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKCJQZWVyQ29ubmVjdGlvbiBjb25zdHJ1Y3RvciBhc3NvY2lhdGVkIGRvY3VtZW50
IGlzIHVuYXZhaWxhYmxlIiwgVjhQcm94eTo6UmVmZXJlbmNlRXJyb3IpOworCisgICAgaWYgKGFy
Z3MuTGVuZ3RoKCkgPCAyKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiTm90IGVub3VnaCBh
cmd1bWVudHMiLCBWOFByb3h5OjpUeXBlRXJyb3IpOwogCiAgICAgdjg6OlRyeUNhdGNoIGV4Y2Vw
dGlvbkNhdGNoZXI7Ci0gICAgU3RyaW5nIGNvbmZpZ3VyYXRpb24gPSB0b1dlYkNvcmVTdHJpbmco
YXJnc1swXS0+VG9TdHJpbmcoKSk7CisgICAgU3RyaW5nIHNlcnZlckNvbmZpZ3VyYXRpb24gPSB0
b1dlYkNvcmVTdHJpbmcoYXJnc1swXS0+VG9TdHJpbmcoKSk7CiAgICAgaWYgKGV4Y2VwdGlvbkNh
dGNoZXIuSGFzQ2F1Z2h0KCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4Y2VwdGlvbkNh
dGNoZXIuRXhjZXB0aW9uKCkpOwogCiAgICAgYm9vbCBzdWNjZWVkZWQgPSBmYWxzZTsKICAgICBS
ZWZQdHI8U2lnbmFsaW5nQ2FsbGJhY2s+IHNpZ25hbGluZ0NhbGxiYWNrID0gY3JlYXRlRnVuY3Rp
b25Pbmx5Q2FsbGJhY2s8VjhTaWduYWxpbmdDYWxsYmFjaz4oYXJnc1sxXSwgc3VjY2VlZGVkKTsK
ICAgICBpZiAoIXN1Y2NlZWRlZCB8fCAhc2lnbmFsaW5nQ2FsbGJhY2spCi0gICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKCJUaGUgUGVlckNvbm5lY3Rpb24gY29uc3RydWN0b3IgbXVzdCBiZSBnaXZl
biBhIFNpZ25hbGluZ0NhbGxiYWNrIGNhbGxiYWNrLiIsIFY4UHJveHk6OlR5cGVFcnJvcik7Ci0K
LSAgICBGcmFtZSogZnJhbWUgPSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9yRW50ZXJlZENvbnRl
eHQoKTsKLSAgICBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciogZnJhbWVDb250cm9sbGVyID0g
ZnJhbWUgPyBmcmFtZS0+bWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIoKSA6IDA7Ci0KLSAgICBS
ZWZQdHI8UGVlckNvbm5lY3Rpb24+IHBlZXJDb25uZWN0aW9uOwotICAgIGlmIChmcmFtZUNvbnRy
b2xsZXIpCi0gICAgICAgIHBlZXJDb25uZWN0aW9uID0gZnJhbWVDb250cm9sbGVyLT5jcmVhdGVQ
ZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uLCBzaWduYWxpbmdDYWxsYmFjayk7Ci0KLSAgICBp
ZiAoIXBlZXJDb25uZWN0aW9uKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCisg
ICAgUmVmUHRyPFBlZXJDb25uZWN0aW9uPiBwZWVyQ29ubmVjdGlvbiA9IFBlZXJDb25uZWN0aW9u
OjpjcmVhdGUoc2VydmVyQ29uZmlndXJhdGlvbiwgc2lnbmFsaW5nQ2FsbGJhY2sucmVsZWFzZSgp
LCBjb250ZXh0KTsKKwogICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcihhcmdzLkhvbGRl
cigpLCAmaW5mbywgcGVlckNvbm5lY3Rpb24uZ2V0KCkpOwogICAgIHJldHVybiB0b1Y4KHBlZXJD
b25uZWN0aW9uLnJlbGVhc2UoKSwgYXJncy5Ib2xkZXIoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTWVkaWFTdHJlYW1MaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9N
ZWRpYVN0cmVhbUxpc3QuY3BwCmluZGV4IGQzYWQ5NDYuLmVjZDFkY2IgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9NZWRpYVN0cmVhbUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9NZWRpYVN0cmVhbUxpc3QuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDExIEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00Nyw0NyArNDgsMjggQEAgdW5zaWduZWQgTWVkaWFTdHJl
YW1MaXN0OjpsZW5ndGgoKSBjb25zdAogICAgIHJldHVybiBtX3N0cmVhbXMuc2l6ZSgpOwogfQog
Ci1QYXNzUmVmUHRyPE1lZGlhU3RyZWFtPiBNZWRpYVN0cmVhbUxpc3Q6Oml0ZW0odW5zaWduZWQg
aW5kZXgpIGNvbnN0CitNZWRpYVN0cmVhbSogTWVkaWFTdHJlYW1MaXN0OjppdGVtKHVuc2lnbmVk
IGluZGV4KSBjb25zdAogewotICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8TWVkaWFTdHJlYW0+
ID46OmNvbnN0X2l0ZXJhdG9yIGkgPSBtX3N0cmVhbXMuYmVnaW4oKTsKLSAgICBmb3IgKHVuc2ln
bmVkIGogPSAwOyBpICE9IG1fc3RyZWFtcy5lbmQoKTsgKytpLCArK2opIHsKLSAgICAgICAgaWYg
KGogPT0gaW5kZXgpCi0gICAgICAgICAgICByZXR1cm4gaS0+c2Vjb25kOwotICAgIH0KLSAgICBy
ZXR1cm4gUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4oKTsKKyAgICByZXR1cm4gbV9zdHJlYW1zW2lu
ZGV4XS5nZXQoKTsKIH0KIAotdm9pZCBNZWRpYVN0cmVhbUxpc3Q6OmFkZChQYXNzUmVmUHRyPE1l
ZGlhU3RyZWFtPiBzdHJlYW0pCit2b2lkIE1lZGlhU3RyZWFtTGlzdDo6YXBwZW5kKFBhc3NSZWZQ
dHI8TWVkaWFTdHJlYW0+IHN0cmVhbSkKIHsKLSAgICBSZWZQdHI8TWVkaWFTdHJlYW0+IHMgPSBz
dHJlYW07Ci0gICAgQVNTRVJUKCFjb250YWlucyhzKSk7Ci0gICAgbV9zdHJlYW1zLmFkZChzLT5s
YWJlbCgpLCBzKTsKKyAgICBtX3N0cmVhbXMuYXBwZW5kKHN0cmVhbSk7CiB9CiAKLXZvaWQgTWVk
aWFTdHJlYW1MaXN0OjpyZW1vdmUoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4gc3RyZWFtKQordm9p
ZCBNZWRpYVN0cmVhbUxpc3Q6OnJlbW92ZShjb25zdCBSZWZQdHI8TWVkaWFTdHJlYW0+JiBzdHJl
YW0pCiB7Ci0gICAgUmVmUHRyPE1lZGlhU3RyZWFtPiBzID0gc3RyZWFtOwotICAgIEFTU0VSVChj
b250YWlucyhzKSk7Ci0gICAgbV9zdHJlYW1zLnJlbW92ZShzLT5sYWJlbCgpKTsKKyAgICBzaXpl
X3QgaSA9IG1fc3RyZWFtcy5maW5kKHN0cmVhbSk7CisgICAgaWYgKGkgIT0gbm90Rm91bmQpCisg
ICAgICAgIHJldHVybiBtX3N0cmVhbXMucmVtb3ZlKGkpOwogfQogCi1ib29sIE1lZGlhU3RyZWFt
TGlzdDo6Y29udGFpbnMoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4gc3RyZWFtKSBjb25zdAorYm9v
bCBNZWRpYVN0cmVhbUxpc3Q6OmNvbnRhaW5zKGNvbnN0IFJlZlB0cjxNZWRpYVN0cmVhbT4mIHN0
cmVhbSkgY29uc3QKIHsKLSAgICBSZWZQdHI8TWVkaWFTdHJlYW0+IHMgPSBzdHJlYW07Ci0gICAg
cmV0dXJuIG1fc3RyZWFtcy5jb250YWlucyhzLT5sYWJlbCgpKTsKKyAgICByZXR1cm4gbV9zdHJl
YW1zLmZpbmQoc3RyZWFtKSAhPSBub3RGb3VuZDsKIH0KIAotYm9vbCBNZWRpYVN0cmVhbUxpc3Q6
OmNvbnRhaW5zKGNvbnN0IFN0cmluZyYgbGFiZWwpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc3Ry
ZWFtcy5jb250YWlucyhsYWJlbCk7Ci19Ci0KLVBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+IE1lZGlh
U3RyZWFtTGlzdDo6Z2V0KGNvbnN0IFN0cmluZyYgbGFiZWwpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fc3RyZWFtcy5nZXQobGFiZWwpOwotfQotCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vTWVkaWFTdHJlYW1MaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTWVkaWFTdHJlYW1M
aXN0LmgKaW5kZXggNzMyMGZkZC4uOTg1NTYyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL01lZGlhU3RyZWFtTGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NZWRpYVN0cmVh
bUxpc3QuaApAQCAtMjgsMTAgKzI4LDYgQEAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogCiAj
aW5jbHVkZSAiTWVkaWFTdHJlYW0uaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDIsMTkgKzM4
LDE3IEBAIHB1YmxpYzoKIAogICAgIC8vIERPTSBtZXRob2RzICYgYXR0cmlidXRlcyBmb3IgTWVk
aWFTdHJlYW1MaXN0CiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0
cjxNZWRpYVN0cmVhbT4gaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CisgICAgTWVkaWFTdHJl
YW0qIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OwogCiAgICAgLy8gTGlzdCBtYW5pcHVsYXRp
b24KLSAgICB2b2lkIGFkZChQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPik7Ci0gICAgdm9pZCByZW1v
dmUoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4pOwotICAgIGJvb2wgY29udGFpbnMoUGFzc1JlZlB0
cjxNZWRpYVN0cmVhbT4pIGNvbnN0OwotICAgIGJvb2wgY29udGFpbnMoY29uc3QgU3RyaW5nJiBs
YWJlbCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4gZ2V0KGNvbnN0IFN0cmlu
ZyYgbGFiZWwpIGNvbnN0OworICAgIHZvaWQgYXBwZW5kKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+
KTsKKyAgICB2b2lkIHJlbW92ZShjb25zdCBSZWZQdHI8TWVkaWFTdHJlYW0+Jik7CisgICAgYm9v
bCBjb250YWlucyhjb25zdCBSZWZQdHI8TWVkaWFTdHJlYW0+JikgY29uc3Q7CiAKIHByaXZhdGU6
CiAgICAgTWVkaWFTdHJlYW1MaXN0KCk7CiAKLSAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPE1l
ZGlhU3RyZWFtPiA+IG1fc3RyZWFtczsKKyAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtPiA+
IG1fc3RyZWFtczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3AycC9QZWVyQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wMnAv
UGVlckNvbm5lY3Rpb24uY3BwCmluZGV4IGJkYTNlZTMuLjA0Nzk1ODkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3AycC9QZWVyQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cDJwL1BlZXJDb25uZWN0aW9uLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNTkgKzI4LDg2IEBACiAKICNpZiBFTkFCTEUoTUVESUFf
U1RSRUFNKQogCi0jaW5jbHVkZSAiRGlzcGF0Y2hUYXNrLmgiCi0jaW5jbHVkZSAiRXJyb3JFdmVu
dC5oIgotI2luY2x1ZGUgIkV2ZW50LmgiCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1
ZGUgIk1lZGlhU3RyZWFtLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUg
Ik1lZGlhU3RyZWFtRXZlbnQuaCIKLSNpbmNsdWRlICJNZWRpYVN0cmVhbUxpc3QuaCIKICNpbmNs
dWRlICJNZXNzYWdlRXZlbnQuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0Lmgi
Ci0jaW5jbHVkZSAiU2lnbmFsaW5nQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdp
bi5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8UGVlckNvbm5lY3Rpb24+
IFBlZXJDb25uZWN0aW9uOjpjcmVhdGUoTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqIGZyYW1l
Q29udHJvbGxlciwgaW50IGlkLCBjb25zdCBTdHJpbmcmIGNvbmZpZ3VyYXRpb24sIFBhc3NSZWZQ
dHI8U2lnbmFsaW5nQ2FsbGJhY2s+IHNpZ25hbGluZ0NhbGxiYWNrKQorUGFzc1JlZlB0cjxQZWVy
Q29ubmVjdGlvbj4gUGVlckNvbm5lY3Rpb246OmNyZWF0ZShjb25zdCBTdHJpbmcmIHNlcnZlckNv
bmZpZ3VyYXRpb24sIFBhc3NSZWZQdHI8U2lnbmFsaW5nQ2FsbGJhY2s+IHNpZ25hbGluZ0NhbGxi
YWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogewotICAgIC8vIEZJWE1FOiBW
ZXJpZnkgdGhhdCBjb25maWd1cmF0aW9uIGZvbGxvd3MgdGhlIHNwZWNpZmllZCBmb3JtYXQsIGlm
IG5vdCByZXR1cm4gbnVsbC4KKyAgICBSZWZQdHI8UGVlckNvbm5lY3Rpb24+IGNvbm5lY3Rpb24g
PSBhZG9wdFJlZihuZXcgUGVlckNvbm5lY3Rpb24oc2VydmVyQ29uZmlndXJhdGlvbiwgc2lnbmFs
aW5nQ2FsbGJhY2ssIGNvbnRleHQpKTsKKyAgICBjb25uZWN0aW9uLT5zZXRQZW5kaW5nQWN0aXZp
dHkoY29ubmVjdGlvbi5nZXQoKSk7CisgICAgY29ubmVjdGlvbi0+c2NoZWR1bGVJbml0aWFsTmVn
b3RpYXRpb24oKTsKIAotICAgIFJlZlB0cjxQZWVyQ29ubmVjdGlvbj4gcGVlckNvbm5lY3Rpb24g
PSBhZG9wdFJlZihuZXcgUGVlckNvbm5lY3Rpb24oZnJhbWVDb250cm9sbGVyLCBpZCwgY29uZmln
dXJhdGlvbiwgc2lnbmFsaW5nQ2FsbGJhY2spKTsKLSAgICBwZWVyQ29ubmVjdGlvbi0+aW5pdCgp
OwotICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5yZWxlYXNlKCk7CisgICAgcmV0dXJuIGNvbm5l
Y3Rpb24ucmVsZWFzZSgpOwogfQogCi1QZWVyQ29ubmVjdGlvbjo6UGVlckNvbm5lY3Rpb24oTWVk
aWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqIGZyYW1lQ29udHJvbGxlciwgaW50IGlkLCBjb25zdCBT
dHJpbmcmIGNvbmZpZ3VyYXRpb24sIFBhc3NSZWZQdHI8U2lnbmFsaW5nQ2FsbGJhY2s+IHNpZ25h
bGluZ0NhbGxiYWNrKQotICAgIDogUGVlckNvbm5lY3Rpb25DbGllbnQoZnJhbWVDb250cm9sbGVy
LCBpZCkKLSAgICAsIG1fY29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKQotICAgICwgbV9yZWFk
eVN0YXRlKE5FVykKK1BlZXJDb25uZWN0aW9uOjpQZWVyQ29ubmVjdGlvbihjb25zdCBTdHJpbmcm
IHNlcnZlckNvbmZpZ3VyYXRpb24sIFBhc3NSZWZQdHI8U2lnbmFsaW5nQ2FsbGJhY2s+IHNpZ25h
bGluZ0NhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorICAgIDogQWN0
aXZlRE9NT2JqZWN0KGNvbnRleHQsIHRoaXMpCiAgICAgLCBtX3NpZ25hbGluZ0NhbGxiYWNrKHNp
Z25hbGluZ0NhbGxiYWNrKQorICAgICwgbV9yZWFkeVN0YXRlKE5FVykKKyAgICAsIG1faWNlU3Rh
cnRlZChmYWxzZSkKKyAgICAsIG1fbG9jYWxTdHJlYW1zKE1lZGlhU3RyZWFtTGlzdDo6Y3JlYXRl
KCkpCisgICAgLCBtX3JlbW90ZVN0cmVhbXMoTWVkaWFTdHJlYW1MaXN0OjpjcmVhdGUoKSkKKyAg
ICAsIG1faW5pdGlhbE5lZ290aWF0aW9uVGltZXIodGhpcywgJlBlZXJDb25uZWN0aW9uOjppbml0
aWFsTmVnb3RpYXRpb25UaW1lckZpcmVkKQorICAgICwgbV9zdHJlYW1DaGFuZ2VUaW1lcih0aGlz
LCAmUGVlckNvbm5lY3Rpb246OnN0cmVhbUNoYW5nZVRpbWVyRmlyZWQpCisgICAgLCBtX3JlYWR5
U3RhdGVDaGFuZ2VUaW1lcih0aGlzLCAmUGVlckNvbm5lY3Rpb246OnJlYWR5U3RhdGVDaGFuZ2VU
aW1lckZpcmVkKQorICAgICwgbV9wZWVySGFuZGxlcihQZWVySGFuZGxlcjo6Y3JlYXRlKHRoaXMs
IHBhcnNlU2VydmVyQ29uZmlndXJhdGlvbihzZXJ2ZXJDb25maWd1cmF0aW9uKSkpCiB7Ci0gICAg
QVNTRVJUKGZyYW1lQ29udHJvbGxlcik7Ci0gICAgbV9sb2NhbFN0cmVhbUxpc3QgPSBNZWRpYVN0
cmVhbUxpc3Q6OmNyZWF0ZSgpOwotICAgIG1fcmVtb3RlU3RyZWFtTGlzdCA9IE1lZGlhU3RyZWFt
TGlzdDo6Y3JlYXRlKCk7Ci19Ci0KLXZvaWQgUGVlckNvbm5lY3Rpb246OmluaXQoKQotewotICAg
IGlmIChNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciogZnJhbWVDb250cm9sbGVyID0gbWVkaWFT
dHJlYW1GcmFtZUNvbnRyb2xsZXIoKSkKLSAgICAgICAgZnJhbWVDb250cm9sbGVyLT5uZXdQZWVy
Q29ubmVjdGlvbihtX2NsaWVudElkLCBtX2NvbmZpZ3VyYXRpb24pOwotCi0gICAgcG9zdFN0YXJ0
TmVnb3RpYXRpb25UYXNrKCk7CiB9CiAKIFBlZXJDb25uZWN0aW9uOjp+UGVlckNvbm5lY3Rpb24o
KQogewogfQogCi1NZWRpYVN0cmVhbUxpc3QqIFBlZXJDb25uZWN0aW9uOjpsb2NhbFN0cmVhbXMo
KQorc3RhdGljIGJvb2wgaXNDYXJyaWFnZVJldHVybk9yTGluZUZlZWQoVUNoYXIgYykKIHsKLSAg
ICByZXR1cm4gbV9sb2NhbFN0cmVhbUxpc3QuZ2V0KCk7CisgICAgcmV0dXJuIGMgPT0gJ1xyJyB8
fCBjID09ICdcbic7CiB9CiAKLU1lZGlhU3RyZWFtTGlzdCogUGVlckNvbm5lY3Rpb246OnJlbW90
ZVN0cmVhbXMoKQorUGFzc1JlZlB0cjxQZWVySGFuZGxlckNvbmZpZ3VyYXRpb24+IFBlZXJDb25u
ZWN0aW9uOjpwYXJzZVNlcnZlckNvbmZpZ3VyYXRpb24oY29uc3QgU3RyaW5nJiBzZXJ2ZXJDb25m
aWd1cmF0aW9uKQogewotICAgIHJldHVybiBtX3JlbW90ZVN0cmVhbUxpc3QuZ2V0KCk7CisgICAg
c2l6ZV90IGVuZE9mTGluZSA9IHNlcnZlckNvbmZpZ3VyYXRpb24uZmluZChXZWJDb3JlOjppc0Nh
cnJpYWdlUmV0dXJuT3JMaW5lRmVlZCk7CisgICAgU3RyaW5nIHNlcnZlckNvbmZpZyA9IGVuZE9m
TGluZSA9PSBub3RGb3VuZCA/IHNlcnZlckNvbmZpZ3VyYXRpb24gOiBzZXJ2ZXJDb25maWd1cmF0
aW9uLmxlZnQoZW5kT2ZMaW5lKTsKKworICAgIFZlY3RvcjxTdHJpbmc+IGNvbmZpZ3VyYXRpb25D
b21wb25lbnRzOworICAgIHNlcnZlckNvbmZpZy5zcGxpdCgnICcsIGNvbmZpZ3VyYXRpb25Db21w
b25lbnRzKTsKKworICAgIFJlZlB0cjxQZWVySGFuZGxlckNvbmZpZ3VyYXRpb24+IGNvbmZpZ3Vy
YXRpb24gPSBQZWVySGFuZGxlckNvbmZpZ3VyYXRpb246OmNyZWF0ZSgpOworCisgICAgaWYgKGNv
bmZpZ3VyYXRpb25Db21wb25lbnRzLnNpemUoKSA8IDIpCisgICAgICAgIHJldHVybiBjb25maWd1
cmF0aW9uOworCisgICAgU3RyaW5nJiB0eXBlID0gY29uZmlndXJhdGlvbkNvbXBvbmVudHNbMF07
CisgICAgaWYgKHR5cGUgPT0gIlNUVU4iIHx8IHR5cGUgPT0gIlNUVU5TIikKKyAgICAgICAgY29u
ZmlndXJhdGlvbi0+dHlwZSA9IFBlZXJIYW5kbGVyQ29uZmlndXJhdGlvbjo6VHlwZVNUVU47Cisg
ICAgZWxzZSBpZiAodHlwZSA9PSAiVFVSTiIgfHwgdHlwZSA9PSAiVFVSTlMiKQorICAgICAgICBj
b25maWd1cmF0aW9uLT50eXBlID0gUGVlckhhbmRsZXJDb25maWd1cmF0aW9uOjpUeXBlVFVSTjsK
KyAgICBlbHNlCisgICAgICAgIHJldHVybiBjb25maWd1cmF0aW9uOworCisgICAgY29uZmlndXJh
dGlvbi0+c2VjdXJlID0gdHlwZSA9PSAiU1RVTlMiIHx8IHR5cGUgPT0gIlRVUk5TIjsKKworICAg
IFN0cmluZyYgaG9zdEFuZFBvcnQgPSBjb25maWd1cmF0aW9uQ29tcG9uZW50c1sxXTsKKyAgICBz
aXplX3QgZmlyc3RDb2xvbiA9IGhvc3RBbmRQb3J0LmZpbmQoJzonKTsKKyAgICBpZiAoZmlyc3RD
b2xvbiAhPSBub3RGb3VuZCkgeworICAgICAgICBib29sIHBvcnRPazsKKyAgICAgICAgaW50IHBv
cnQgPSBob3N0QW5kUG9ydC5zdWJzdHJpbmcoZmlyc3RDb2xvbiArIDEpLnRvSW50KCZwb3J0T2sp
OworICAgICAgICBwb3J0T2sgJj0gMCA8PSBwb3J0ICYmIHBvcnQgPCA2NTUzNjsKKyAgICAgICAg
aWYgKCFwb3J0T2spCisgICAgICAgICAgICByZXR1cm4gUGVlckhhbmRsZXJDb25maWd1cmF0aW9u
OjpjcmVhdGUoKTsKKworICAgICAgICBjb25maWd1cmF0aW9uLT5ob3N0ID0gaG9zdEFuZFBvcnQu
bGVmdChmaXJzdENvbG9uKTsKKyAgICAgICAgY29uZmlndXJhdGlvbi0+cG9ydCA9IHBvcnQ7Cisg
ICAgfSBlbHNlCisgICAgICAgIGNvbmZpZ3VyYXRpb24tPmhvc3QgPSBob3N0QW5kUG9ydDsKKwor
ICAgIGNvbmZpZ3VyYXRpb24tPnVzZXJuYW1lID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5z
ZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpOworCisgICAgcmV0dXJuIGNvbmZpZ3VyYXRpb247
CiB9CiAKIHZvaWQgUGVlckNvbm5lY3Rpb246OnByb2Nlc3NTaWduYWxpbmdNZXNzYWdlKGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC04OSw4ICsxMTcsMjggQEAg
dm9pZCBQZWVyQ29ubmVjdGlvbjo6cHJvY2Vzc1NpZ25hbGluZ01lc3NhZ2UoY29uc3QgU3RyaW5n
JiBtZXNzYWdlLCBFeGNlcHRpb25Db2QKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlm
IChtZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcigpKQotICAgICAgICBtZWRpYVN0cmVhbUZyYW1l
Q29udHJvbGxlcigpLT5wcm9jZXNzU2lnbmFsaW5nTWVzc2FnZShtX2NsaWVudElkLCBtZXNzYWdl
KTsKKyAgICBpZiAoIW1lc3NhZ2Uuc3RhcnRzV2l0aCgiU0RQXG4iKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgU3RyaW5nIHNkcCA9IG1lc3NhZ2Uuc3Vic3RyaW5nKDQpOworCisgICAgaWYgKG1f
aWNlU3RhcnRlZCkgeworICAgICAgICBpZiAobV9wZWVySGFuZGxlcikKKyAgICAgICAgICAgIG1f
cGVlckhhbmRsZXItPnByb2Nlc3NTRFAoc2RwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChtX3BlZXJIYW5kbGVyKQorICAgICAgICBtX3BlZXJIYW5kbGVyLT5oYW5kbGVJbml0
aWFsT2ZmZXIoc2RwKTsKKworICAgIHNjaGVkdWxlU3RyZWFtQ2hhbmdlKCk7CisgICAgbV9pY2VT
dGFydGVkID0gdHJ1ZTsKKyAgICBzY2hlZHVsZVJlYWR5U3RhdGVDaGFuZ2UoTkVHT1RJQVRJTkcp
OworfQorCitQZWVyQ29ubmVjdGlvbjo6UmVhZHlTdGF0ZSBQZWVyQ29ubmVjdGlvbjo6cmVhZHlT
dGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVhZHlTdGF0ZTsKIH0KIAogdm9pZCBQZWVy
Q29ubmVjdGlvbjo6c2VuZChjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQpA
QCAtMTAwLDU0ICsxNDgsODIgQEAgdm9pZCBQZWVyQ29ubmVjdGlvbjo6c2VuZChjb25zdCBTdHJp
bmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgQ1N0cmluZyB1dGY4ID0gdGV4dC51dGY4KCk7Ci0gICAgaWYgKHV0ZjgubGVuZ3RoKCkgPiBr
TWF4TWVzc2FnZVVURjhMZW5ndGgpIHsKKyAgICBDU3RyaW5nIGRhdGEgPSB0ZXh0LnV0ZjgoKTsK
KyAgICB1bnNpZ25lZCBsZW5ndGggPSBkYXRhLmxlbmd0aCgpOworCisgICAgaWYgKGxlbmd0aCA+
IGtNYXhNZXNzYWdlVVRGOExlbmd0aCkgewogICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VS
UjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtZWRpYVN0cmVhbUZyYW1lQ29u
dHJvbGxlcigpKQotICAgICAgICBtZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcigpLT5tZXNzYWdl
KG1fY2xpZW50SWQsIHRleHQpOworICAgIGlmIChtX3BlZXJIYW5kbGVyKQorICAgICAgICBtX3Bl
ZXJIYW5kbGVyLT5zZW5kRGF0YVN0cmVhbU1lc3NhZ2UoZGF0YS5kYXRhKCksIGxlbmd0aCk7CiB9
CiAKLXZvaWQgUGVlckNvbm5lY3Rpb246OmFkZFN0cmVhbShQYXNzUmVmUHRyPE1lZGlhU3RyZWFt
PiBwcnBTdHJlYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBQZWVyQ29ubmVjdGlvbjo6YWRk
U3RyZWFtKGNvbnN0IFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+IHBycFN0cmVhbSwgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7CiAgICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBDTE9TRUQpIHsKICAgICAgICAg
ZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8v
IFRoZSBTdHJlYW0gb2JqZWN0IGlzIGd1YXJhbnRlZWQgdG8gZXhpc3Qgc2luY2UgU3RyaWN0VHlw
ZUNoZWNraW5nIGlzIHNldCBpbiB0aGUgaWRsLgorICAgIC8vIFRoZSBNZWRpYVN0cmVhbSBvYmpl
Y3QgaXMgZ3VhcmFudGVlZCB0byBleGlzdCBzaW5jZSBTdHJpY3RUeXBlQ2hlY2tpbmcgaXMgc2V0
IGluIHRoZSBpZGwuCiAKICAgICBSZWZQdHI8TWVkaWFTdHJlYW0+IHN0cmVhbSA9IHBycFN0cmVh
bTsKIAotICAgIGlmIChtX2xvY2FsU3RyZWFtTGlzdC0+Y29udGFpbnMoc3RyZWFtKSkKKyAgICBp
ZiAobV9sb2NhbFN0cmVhbXMtPmNvbnRhaW5zKHN0cmVhbSkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIG1fbG9jYWxTdHJlYW1MaXN0LT5hZGQoc3RyZWFtKTsKKyAgICBtX2xvY2FsU3RyZWFtcy0+
YXBwZW5kKHN0cmVhbSk7CiAKLSAgICBpZiAobWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIoKSkK
LSAgICAgICAgbWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIoKS0+YWRkU3RyZWFtKG1fY2xpZW50
SWQsIHN0cmVhbSk7CisgICAgLy8gRklYTUU6IGdldCBmcm9tIHN0cmVhbS0+ZGVzY3JpcHRvcigp
IHdoZW4gaXQncyBhdmFpbGFibGUsIHNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzY4NDY0CisgICAg
TWVkaWFTdHJlYW1EZXNjcmlwdG9yKiBzdHJlYW1EZXNjcmlwdG9yID0gMDsKKyAgICBzaXplX3Qg
aSA9IG1fcGVuZGluZ1JlbW92ZVN0cmVhbXMuZmluZChzdHJlYW1EZXNjcmlwdG9yKTsKKyAgICBp
ZiAoaSAhPSBub3RGb3VuZCkgeworICAgICAgICBtX3BlbmRpbmdSZW1vdmVTdHJlYW1zLnJlbW92
ZShpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fcGVuZGluZ0FkZFN0cmVhbXMu
YXBwZW5kKHN0cmVhbURlc2NyaXB0b3IpOworICAgIGlmIChtX2ljZVN0YXJ0ZWQpCisgICAgICAg
IHNjaGVkdWxlU3RyZWFtQ2hhbmdlKCk7CiB9CiAKLXZvaWQgUGVlckNvbm5lY3Rpb246OnJlbW92
ZVN0cmVhbShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPiBwcnBTdHJlYW0sIEV4Y2VwdGlvbkNvZGUm
IGVjKQordm9pZCBQZWVyQ29ubmVjdGlvbjo6cmVtb3ZlU3RyZWFtKE1lZGlhU3RyZWFtKiBzdHJl
YW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gQ0xPU0VE
KSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICAvLyBUaGUgU3RyZWFtIG9iamVjdCBpcyBndWFyYW50ZWVkIHRvIGV4aXN0IHNp
bmNlIFN0cmljdFR5cGVDaGVja2luZyBpcyBzZXQgaW4gdGhlIGlkbC4KKyAgICAvLyBUaGUgTWVk
aWFTdHJlYW0gb2JqZWN0IGlzIGd1YXJhbnRlZWQgdG8gZXhpc3Qgc2luY2UgU3RyaWN0VHlwZUNo
ZWNraW5nIGlzIHNldCBpbiB0aGUgaWRsLgogCi0gICAgUmVmUHRyPE1lZGlhU3RyZWFtPiBzdHJl
YW0gPSBwcnBTdHJlYW07CisgICAgaWYgKCFtX2xvY2FsU3RyZWFtcy0+Y29udGFpbnMoc3RyZWFt
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9sb2NhbFN0cmVhbXMtPnJlbW92ZShzdHJlYW0p
OwogCi0gICAgaWYgKCFtX2xvY2FsU3RyZWFtTGlzdC0+Y29udGFpbnMoc3RyZWFtKSkKKyAgICAv
LyBGSVhNRTogZ2V0IGZyb20gc3RyZWFtLT5kZXNjcmlwdG9yKCkgd2hlbiBpdCdzIGF2YWlsYWJs
ZSwgc2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvNjg0NjQKKyAgICBNZWRpYVN0cmVhbURlc2NyaXB0
b3IqIHN0cmVhbURlc2NyaXB0b3IgPSAwOworICAgIHNpemVfdCBpID0gbV9wZW5kaW5nQWRkU3Ry
ZWFtcy5maW5kKHN0cmVhbURlc2NyaXB0b3IpOworICAgIGlmIChpICE9IG5vdEZvdW5kKSB7Cisg
ICAgICAgIG1fcGVuZGluZ0FkZFN0cmVhbXMucmVtb3ZlKGkpOwogICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgbV9wZW5kaW5nUmVtb3ZlU3RyZWFtcy5hcHBlbmQoc3RyZWFtRGVzY3JpcHRv
cik7CisgICAgaWYgKG1faWNlU3RhcnRlZCkKKyAgICAgICAgc2NoZWR1bGVTdHJlYW1DaGFuZ2Uo
KTsKK30KIAotICAgIG1fbG9jYWxTdHJlYW1MaXN0LT5yZW1vdmUoc3RyZWFtKTsKK01lZGlhU3Ry
ZWFtTGlzdCogUGVlckNvbm5lY3Rpb246OmxvY2FsU3RyZWFtcygpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fbG9jYWxTdHJlYW1zLmdldCgpOworfQogCi0gICAgaWYgKG1lZGlhU3RyZWFtRnJhbWVD
b250cm9sbGVyKCkpCi0gICAgICAgIG1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKCktPnJlbW92
ZVN0cmVhbShtX2NsaWVudElkLCBzdHJlYW0pOworTWVkaWFTdHJlYW1MaXN0KiBQZWVyQ29ubmVj
dGlvbjo6cmVtb3RlU3RyZWFtcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVtb3RlU3RyZWFt
cy5nZXQoKTsKIH0KIAogdm9pZCBQZWVyQ29ubmVjdGlvbjo6Y2xvc2UoRXhjZXB0aW9uQ29kZSYg
ZWMpCkBAIC0xNTcsNTAgKzIzMyw1NiBAQCB2b2lkIFBlZXJDb25uZWN0aW9uOjpjbG9zZShFeGNl
cHRpb25Db2RlJiBlYykKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtZWRpYVN0
cmVhbUZyYW1lQ29udHJvbGxlcigpKQotICAgICAgICBtZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxl
cigpLT5jbG9zZVBlZXJDb25uZWN0aW9uKG1fY2xpZW50SWQpOwotCi0gICAgbV9yZWFkeVN0YXRl
ID0gQ0xPU0VEOworICAgIHN0b3AoKTsKIH0KIAotdm9pZCBQZWVyQ29ubmVjdGlvbjo6b25OZWdv
dGlhdGlvblN0YXJ0ZWQoKQordm9pZCBQZWVyQ29ubmVjdGlvbjo6aWNlUHJvY2Vzc2luZ0NvbXBs
ZXRlZCgpCiB7Ci0gICAgbV9yZWFkeVN0YXRlID0gTkVHT1RJQVRJTkc7Ci0KLSAgICBwb3N0U2lt
cGxlRXZlbnQoZXZlbnROYW1lcygpLmNvbm5lY3RpbmdFdmVudCk7CisgICAgQVNTRVJUKHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIGNoYW5nZVJlYWR5
U3RhdGUoQUNUSVZFKTsKIH0KIAotdm9pZCBQZWVyQ29ubmVjdGlvbjo6b25OZWdvdGlhdGlvbkRv
bmUoKQordm9pZCBQZWVyQ29ubmVjdGlvbjo6c2RwR2VuZXJhdGVkKGNvbnN0IFN0cmluZyYgc2Rw
KQogewotICAgIG1fcmVhZHlTdGF0ZSA9IEFDVElWRTsKLQotICAgIHBvc3RTaW1wbGVFdmVudChl
dmVudE5hbWVzKCkub3BlbkV2ZW50KTsKKyAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgbV9zaWduYWxpbmdDYWxsYmFjay0+aGFuZGxl
RXZlbnQoIlNEUFxuIiArIHNkcCwgdGhpcyk7CiB9CiAKLXZvaWQgUGVlckNvbm5lY3Rpb246OnN0
cmVhbUFkZGVkKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+IHBycFN0cmVhbSkKK3ZvaWQgUGVlckNv
bm5lY3Rpb246OmRhdGFTdHJlYW1NZXNzYWdlUmVjZWl2ZWQoY29uc3QgY2hhciogZGF0YSwgdW5z
aWduZWQgbGVuZ3RoKQogewotICAgIFJlZlB0cjxNZWRpYVN0cmVhbT4gc3RyZWFtID0gcHJwU3Ry
ZWFtOwotICAgIG1fcmVtb3RlU3RyZWFtTGlzdC0+YWRkKHN0cmVhbSk7Ci0gICAgcG9zdFN0cmVh
bUFkZGVkRXZlbnQoc3RyZWFtKTsKKyAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgY29uc3QgU3RyaW5nJiBtZXNzYWdlID0gU3RyaW5n
Ojpmcm9tVVRGOChkYXRhLCBsZW5ndGgpOworICAgIGRpc3BhdGNoRXZlbnQoTWVzc2FnZUV2ZW50
OjpjcmVhdGUoUGFzc093blB0cjxNZXNzYWdlUG9ydEFycmF5PigpLCBTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OmNyZWF0ZShtZXNzYWdlKSkpOwogfQogCi12b2lkIFBlZXJDb25uZWN0aW9uOjpzdHJl
YW1SZW1vdmVkKGNvbnN0IFN0cmluZyYgc3RyZWFtTGFiZWwpCit2b2lkIFBlZXJDb25uZWN0aW9u
OjpyZW1vdGVTdHJlYW1BZGRlZChQYXNzUmVmUHRyPE1lZGlhU3RyZWFtRGVzY3JpcHRvcj4gc3Ry
ZWFtRGVzY3JpcHRvcikKIHsKLSAgICBBU1NFUlQobV9yZW1vdGVTdHJlYW1MaXN0LT5jb250YWlu
cyhzdHJlYW1MYWJlbCkpOworICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlz
Q29udGV4dFRocmVhZCgpKTsKIAotICAgIFJlZlB0cjxNZWRpYVN0cmVhbT4gc3RyZWFtID0gbV9y
ZW1vdGVTdHJlYW1MaXN0LT5nZXQoc3RyZWFtTGFiZWwpOwotICAgIG1fcmVtb3RlU3RyZWFtTGlz
dC0+cmVtb3ZlKHN0cmVhbSk7Ci0gICAgcG9zdFN0cmVhbVJlbW92ZWRFdmVudChzdHJlYW0pOwot
fQorICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gQ0xPU0VEKQorICAgICAgICByZXR1cm47CiAKLXZv
aWQgUGVlckNvbm5lY3Rpb246Om9uTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0g
ICAgcG9zdE1lc3NhZ2VFdmVudChtZXNzYWdlKTsKKyAgICAvLyBGSVhNRTogY3JlYXRlIGEgbmV3
IE1lZGlhU3RyZWFtIGZyb20gdGhlIHN0cmVhbURlc2NyaXB0b3Igb25jZSBpdCdzIHBvc3NpYmxl
LCBzZWUgaHR0cDovL3dlYmtpdC5vcmcvYi82ODQ2NAorICAgIFJlZlB0cjxNZWRpYVN0cmVhbT4g
c3RyZWFtID0gMDsKKyAgICBtX3JlbW90ZVN0cmVhbXMtPmFwcGVuZChzdHJlYW0pOworCisgICAg
ZGlzcGF0Y2hFdmVudChNZWRpYVN0cmVhbUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmFkZHN0
cmVhbUV2ZW50LCBmYWxzZSwgZmFsc2UsIHN0cmVhbSkpOwogfQogCi12b2lkIFBlZXJDb25uZWN0
aW9uOjpvblNpZ25hbGluZ01lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQordm9pZCBQZWVy
Q29ubmVjdGlvbjo6cmVtb3RlU3RyZWFtUmVtb3ZlZChNZWRpYVN0cmVhbURlc2NyaXB0b3IqIHN0
cmVhbURlc2NyaXB0b3IpCiB7Ci0gICAgcG9zdFNpZ25hbGluZ0V2ZW50KG1lc3NhZ2UpOworICAg
IEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKKyAg
ICBBU1NFUlQoc3RyZWFtRGVzY3JpcHRvci0+b3duZXIgJiYgbV9yZW1vdGVTdHJlYW1zLT5jb250
YWlucyhzdHJlYW1EZXNjcmlwdG9yLT5vd25lcikpOworCisgICAgc3RyZWFtRGVzY3JpcHRvci0+
b3duZXItPnN0cmVhbUVuZGVkKCk7CisKKyAgICBpZiAobV9yZWFkeVN0YXRlID09IENMT1NFRCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPE1lZGlhU3RyZWFtPiBzdHJlYW0gPSBzdHJl
YW1EZXNjcmlwdG9yLT5vd25lcjsKKyAgICBtX3JlbW90ZVN0cmVhbXMtPnJlbW92ZShzdHJlYW0p
OworCisgICAgZGlzcGF0Y2hFdmVudChNZWRpYVN0cmVhbUV2ZW50OjpjcmVhdGUoZXZlbnROYW1l
cygpLnJlbW92ZXN0cmVhbUV2ZW50LCBmYWxzZSwgZmFsc2UsIHN0cmVhbSkpOwogfQogCiBQZWVy
Q29ubmVjdGlvbiogUGVlckNvbm5lY3Rpb246OnRvUGVlckNvbm5lY3Rpb24oKQpAQCAtMjEwLDcg
KzI5MiwyNSBAQCBQZWVyQ29ubmVjdGlvbiogUGVlckNvbm5lY3Rpb246OnRvUGVlckNvbm5lY3Rp
b24oKQogCiBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBQZWVyQ29ubmVjdGlvbjo6c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1lZGlhU3RyZWFtRnJhbWVDb250
cm9sbGVyKCkgPyBtZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcigpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkgOiAwOworICAgIHJldHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKK30KKwordm9pZCBQZWVyQ29ubmVjdGlvbjo6c3RvcCgpCit7CisgICAgaWYg
KG1fcmVhZHlTdGF0ZSA9PSBDTE9TRUQpCisgICAgICAgIHJldHVybjsKKworICAgIG1faW5pdGlh
bE5lZ290aWF0aW9uVGltZXIuc3RvcCgpOworICAgIG1fc3RyZWFtQ2hhbmdlVGltZXIuc3RvcCgp
OworICAgIG1fcmVhZHlTdGF0ZUNoYW5nZVRpbWVyLnN0b3AoKTsKKworICAgIGlmIChtX3BlZXJI
YW5kbGVyKQorICAgICAgICBtX3BlZXJIYW5kbGVyLT5zdG9wKCk7CisKKyAgICB1bnNldFBlbmRp
bmdBY3Rpdml0eSh0aGlzKTsKKyAgICBtX3BlZXJIYW5kbGVyLmNsZWFyKCk7CisKKyAgICBjaGFu
Z2VSZWFkeVN0YXRlKENMT1NFRCk7CiB9CiAKIEV2ZW50VGFyZ2V0RGF0YSogUGVlckNvbm5lY3Rp
b246OmV2ZW50VGFyZ2V0RGF0YSgpCkBAIC0yMjMsODggKzMyMyw4NiBAQCBFdmVudFRhcmdldERh
dGEqIFBlZXJDb25uZWN0aW9uOjplbnN1cmVFdmVudFRhcmdldERhdGEoKQogICAgIHJldHVybiAm
bV9ldmVudFRhcmdldERhdGE7CiB9CiAKLXZvaWQgUGVlckNvbm5lY3Rpb246OnBvc3RNZXNzYWdl
RXZlbnQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQordm9pZCBQZWVyQ29ubmVjdGlvbjo6c2NoZWR1
bGVJbml0aWFsTmVnb3RpYXRpb24oKQogewotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IGRhdGEgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShtZXNzYWdlKTsKLQotICAg
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKGNvbnRl
eHQtPmlzQ29udGV4dFRocmVhZCgpKTsKLSAgICBjb250ZXh0LT5wb3N0VGFzayhEaXNwYXRjaFRh
c2s8UGVlckNvbm5lY3Rpb24sIGludCwgU2VyaWFsaXplZFNjcmlwdFZhbHVlPjo6Y3JlYXRlKHRo
aXMsICZQZWVyQ29ubmVjdGlvbjo6ZGlzcGF0Y2hNZXNzYWdlRXZlbnQsIDAsIGRhdGEucmVsZWFz
ZSgpKSk7CisgICAgaWYgKCFtX2luaXRpYWxOZWdvdGlhdGlvblRpbWVyLmlzQWN0aXZlKCkpCisg
ICAgICAgIG1faW5pdGlhbE5lZ290aWF0aW9uVGltZXIuc3RhcnRPbmVTaG90KDApOwogfQogCi12
b2lkIFBlZXJDb25uZWN0aW9uOjpwb3N0U2lnbmFsaW5nRXZlbnQoY29uc3QgU3RyaW5nJiBtZXNz
YWdlKQordm9pZCBQZWVyQ29ubmVjdGlvbjo6aW5pdGlhbE5lZ290aWF0aW9uVGltZXJGaXJlZChU
aW1lcjxQZWVyQ29ubmVjdGlvbj4qKQogewotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgaWYgKCFjb250ZXh0KQorICAg
IGlmIChtX2ljZVN0YXJ0ZWQpCiAgICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQoY29udGV4dC0+
aXNDb250ZXh0VGhyZWFkKCkpOwotICAgIGNvbnRleHQtPnBvc3RUYXNrKFNpbXBsZURpc3BhdGNo
VGFzazxQZWVyQ29ubmVjdGlvbiwgU3RyaW5nPjo6Y3JlYXRlKHRoaXMsICZQZWVyQ29ubmVjdGlv
bjo6ZGlzcGF0Y2hTaWduYWxpbmdFdmVudCwgbWVzc2FnZSkpOwotfQogCi12b2lkIFBlZXJDb25u
ZWN0aW9uOjpwb3N0U3RyZWFtQWRkZWRFdmVudChQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPiBwcnBT
dHJlYW0pCi17Ci0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybjsKLSAg
ICBBU1NFUlQoY29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwotICAgIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+cG9zdFRhc2soRGlzcGF0Y2hUYXNrPFBlZXJDb25uZWN0aW9uLCBTdHJpbmcs
IE1lZGlhU3RyZWFtPjo6Y3JlYXRlKHRoaXMsICZQZWVyQ29ubmVjdGlvbjo6ZGlzcGF0Y2hTdHJl
YW1FdmVudCwgZXZlbnROYW1lcygpLmFkZHN0cmVhbUV2ZW50LCBwcnBTdHJlYW0pKTsKLX0KKyAg
ICBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3IgcGVuZGluZ1N0cmVhbXM7CisgICAgbV9wZW5k
aW5nQWRkU3RyZWFtcy5zd2FwKHBlbmRpbmdTdHJlYW1zKTsKKyAgICBpZiAobV9wZWVySGFuZGxl
cikKKyAgICAgICAgbV9wZWVySGFuZGxlci0+cHJvZHVjZUluaXRpYWxPZmZlcihwZW5kaW5nU3Ry
ZWFtcyk7CiAKLXZvaWQgUGVlckNvbm5lY3Rpb246OnBvc3RTdHJlYW1SZW1vdmVkRXZlbnQoUGFz
c1JlZlB0cjxNZWRpYVN0cmVhbT4gcHJwU3RyZWFtKQotewotICAgIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgaWYgKCFjb250
ZXh0KQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKGNvbnRleHQtPmlzQ29udGV4dFRocmVh
ZCgpKTsKLSAgICBjb250ZXh0LT5wb3N0VGFzayhEaXNwYXRjaFRhc2s8UGVlckNvbm5lY3Rpb24s
IFN0cmluZywgTWVkaWFTdHJlYW0+OjpjcmVhdGUodGhpcywgJlBlZXJDb25uZWN0aW9uOjpkaXNw
YXRjaFN0cmVhbUV2ZW50LCBldmVudE5hbWVzKCkucmVtb3Zlc3RyZWFtRXZlbnQsIHBycFN0cmVh
bSkpOwotfQorICAgIG1faWNlU3RhcnRlZCA9IHRydWU7CiAKLXZvaWQgUGVlckNvbm5lY3Rpb246
OnBvc3RTaW1wbGVFdmVudChjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSkKLXsKLSAgICBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAg
IGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChjb250ZXh0LT5pc0Nv
bnRleHRUaHJlYWQoKSk7Ci0gICAgY29udGV4dC0+cG9zdFRhc2soU2ltcGxlRGlzcGF0Y2hUYXNr
PFBlZXJDb25uZWN0aW9uLCBTdHJpbmc+OjpjcmVhdGUodGhpcywgJlBlZXJDb25uZWN0aW9uOjpk
aXNwYXRjaFNpbXBsZUV2ZW50LCBldmVudE5hbWUpKTsKKyAgICBjaGFuZ2VSZWFkeVN0YXRlKE5F
R09USUFUSU5HKTsKIH0KIAotdm9pZCBQZWVyQ29ubmVjdGlvbjo6cG9zdFN0YXJ0TmVnb3RpYXRp
b25UYXNrKCkKK3ZvaWQgUGVlckNvbm5lY3Rpb246OnNjaGVkdWxlU3RyZWFtQ2hhbmdlKCkKIHsK
LSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChj
b250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7Ci0gICAgY29udGV4dC0+cG9zdFRhc2soU2ltcGxl
RGlzcGF0Y2hUYXNrPFBlZXJDb25uZWN0aW9uLCBpbnQ+OjpjcmVhdGUodGhpcywgJlBlZXJDb25u
ZWN0aW9uOjpkaXNwYXRjaFN0YXJ0TmVnb3RpYXRpb25UYXNrLCAwKSk7CisgICAgaWYgKCFtX3N0
cmVhbUNoYW5nZVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fc3RyZWFtQ2hhbmdlVGltZXIu
c3RhcnRPbmVTaG90KDApOwogfQogCi12b2lkIFBlZXJDb25uZWN0aW9uOjpkaXNwYXRjaE1lc3Nh
Z2VFdmVudChjb25zdCBpbnQmLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0
YSkKK3ZvaWQgUGVlckNvbm5lY3Rpb246OnN0cmVhbUNoYW5nZVRpbWVyRmlyZWQoVGltZXI8UGVl
ckNvbm5lY3Rpb24+KikKIHsKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkID0g
ZGF0YTsKLSAgICBkaXNwYXRjaEV2ZW50KE1lc3NhZ2VFdmVudDo6Y3JlYXRlKFBhc3NPd25QdHI8
TWVzc2FnZVBvcnRBcnJheT4oKSwgZCkpOwotfQorICAgIGlmICghbV9wZW5kaW5nQWRkU3RyZWFt
cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yIHBlbmRp
bmdTdHJlYW1zOworICAgICAgICBtX3BlbmRpbmdBZGRTdHJlYW1zLnN3YXAocGVuZGluZ1N0cmVh
bXMpOworICAgICAgICBpZiAobV9wZWVySGFuZGxlcikKKyAgICAgICAgICAgIG1fcGVlckhhbmRs
ZXItPmFkZFBlbmRpbmdTdHJlYW1zKHBlbmRpbmdTdHJlYW1zKTsKIAotdm9pZCBQZWVyQ29ubmVj
dGlvbjo6ZGlzcGF0Y2hTaWduYWxpbmdFdmVudChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0g
ICAgbV9zaWduYWxpbmdDYWxsYmFjay0+aGFuZGxlRXZlbnQobWVzc2FnZSwgdGhpcyk7CisgICAg
ICAgIGNoYW5nZVJlYWR5U3RhdGUoTkVHT1RJQVRJTkcpOworICAgIH0KKyAgICBpZiAoIW1fcGVu
ZGluZ1JlbW92ZVN0cmVhbXMuaXNFbXB0eSgpKSB7CisgICAgICAgIE1lZGlhU3RyZWFtRGVzY3Jp
cHRvclZlY3RvciBwZW5kaW5nU3RyZWFtczsKKyAgICAgICAgbV9wZW5kaW5nUmVtb3ZlU3RyZWFt
cy5zd2FwKHBlbmRpbmdTdHJlYW1zKTsKKyAgICAgICAgaWYgKG1fcGVlckhhbmRsZXIpCisgICAg
ICAgICAgICBtX3BlZXJIYW5kbGVyLT5yZW1vdmVQZW5kaW5nU3RyZWFtcyhwZW5kaW5nU3RyZWFt
cyk7CisgICAgfQogfQogCi12b2lkIFBlZXJDb25uZWN0aW9uOjpkaXNwYXRjaFN0cmVhbUV2ZW50
KGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4gc3RyZWFtKQordm9p
ZCBQZWVyQ29ubmVjdGlvbjo6c2NoZWR1bGVSZWFkeVN0YXRlQ2hhbmdlKFJlYWR5U3RhdGUgcmVh
ZHlTdGF0ZSkKIHsKLSAgICBSZWZQdHI8TWVkaWFTdHJlYW0+IHMgPSBzdHJlYW07Ci0gICAgZGlz
cGF0Y2hFdmVudChNZWRpYVN0cmVhbUV2ZW50OjpjcmVhdGUobmFtZSwgZmFsc2UsIGZhbHNlLCBz
KSk7CisgICAgbV9wZW5kaW5nUmVhZHlTdGF0ZXMuYXBwZW5kKHJlYWR5U3RhdGUpOworICAgIGlm
ICghbV9yZWFkeVN0YXRlQ2hhbmdlVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9yZWFkeVN0
YXRlQ2hhbmdlVGltZXIuc3RhcnRPbmVTaG90KDApOwogfQogCi12b2lkIFBlZXJDb25uZWN0aW9u
OjpkaXNwYXRjaFNpbXBsZUV2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKQordm9pZCBQZWVy
Q29ubmVjdGlvbjo6cmVhZHlTdGF0ZUNoYW5nZVRpbWVyRmlyZWQoVGltZXI8UGVlckNvbm5lY3Rp
b24+KikKIHsKLSAgICBkaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lLCBmYWxz
ZSwgZmFsc2UpKTsKKyAgICBWZWN0b3I8UmVhZHlTdGF0ZT4gcGVuZGluZ1JlYWR5U3RhdGVzOwor
ICAgIG1fcGVuZGluZ1JlYWR5U3RhdGVzLnN3YXAocGVuZGluZ1JlYWR5U3RhdGVzKTsKKworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGVuZGluZ1JlYWR5U3RhdGVzLnNpemUoKTsgaSsrKQor
ICAgICAgICBjaGFuZ2VSZWFkeVN0YXRlKHBlbmRpbmdSZWFkeVN0YXRlc1tpXSk7CiB9CiAKLXZv
aWQgUGVlckNvbm5lY3Rpb246OmRpc3BhdGNoU3RhcnROZWdvdGlhdGlvblRhc2soY29uc3QgaW50
JikKK3ZvaWQgUGVlckNvbm5lY3Rpb246OmNoYW5nZVJlYWR5U3RhdGUoUmVhZHlTdGF0ZSByZWFk
eVN0YXRlKQogewotICAgIGlmIChtZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcigpKQotICAgICAg
ICBtZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcigpLT5zdGFydE5lZ290aWF0aW9uKG1fY2xpZW50
SWQpOworICAgIGlmIChyZWFkeVN0YXRlID09IG1fcmVhZHlTdGF0ZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9yZWFkeVN0YXRlID0gcmVhZHlTdGF0ZTsKKworICAgIHN3aXRjaCAobV9yZWFk
eVN0YXRlKSB7CisgICAgY2FzZSBORUdPVElBVElORzoKKyAgICAgICAgZGlzcGF0Y2hFdmVudChF
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jb25uZWN0aW5nRXZlbnQsIGZhbHNlLCBmYWxzZSkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFDVElWRToKKyAgICAgICAgZGlzcGF0Y2hFdmVu
dChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5vcGVuRXZlbnQsIGZhbHNlLCBmYWxzZSkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIENMT1NFRDoKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wMnAvUGVlckNvbm5l
Y3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3AycC9QZWVyQ29ubmVjdGlvbi5oCmluZGV4IDE4ZDE2
NWIuLjZiNmUxOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3AycC9QZWVyQ29ubmVjdGlv
bi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3AycC9QZWVyQ29ubmVjdGlvbi5oCkBAIC0xLDUgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw0MSArMjgsNDAg
QEAKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAKKyNpbmNsdWRlICJBY3RpdmVET01PYmpl
Y3QuaCIKICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgotI2luY2x1ZGUgIk1lZGlhU3RyZWFtRnJh
bWVDb250cm9sbGVyLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlICJF
eGNlcHRpb25CYXNlLmgiCisjaW5jbHVkZSAiTWVkaWFTdHJlYW0uaCIKKyNpbmNsdWRlICJNZWRp
YVN0cmVhbUxpc3QuaCIKKyNpbmNsdWRlICJQZWVySGFuZGxlci5oIgorI2luY2x1ZGUgIlNpZ25h
bGluZ0NhbGxiYWNrLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewor
Y2xhc3MgUGVlckNvbm5lY3Rpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxQZWVyQ29ubmVjdGlvbj4s
IHB1YmxpYyBQZWVySGFuZGxlckNsaWVudCwgcHVibGljIEV2ZW50VGFyZ2V0LCBwdWJsaWMgQWN0
aXZlRE9NT2JqZWN0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxQZWVyQ29ubmVj
dGlvbj4gY3JlYXRlKGNvbnN0IFN0cmluZyYgc2VydmVyQ29uZmlndXJhdGlvbiwgUGFzc1JlZlB0
cjxTaWduYWxpbmdDYWxsYmFjaz4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKyAgICB+UGVl
ckNvbm5lY3Rpb24oKTsKIAotY2xhc3MgTWVkaWFTdHJlYW07Ci1jbGFzcyBNZWRpYVN0cmVhbUxp
c3Q7Ci1jbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwotY2xhc3MgU2VyaWFsaXplZFNjcmlw
dFZhbHVlOwotY2xhc3MgU2lnbmFsaW5nQ2FsbGJhY2s7CisgICAgdm9pZCBwcm9jZXNzU2lnbmFs
aW5nTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEV4Y2VwdGlvbkNvZGUmKTsKIAotY2xh
c3MgUGVlckNvbm5lY3Rpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxQZWVyQ29ubmVjdGlvbj4sIHB1
YmxpYyBFdmVudFRhcmdldCwgcHVibGljIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjpQZWVy
Q29ubmVjdGlvbkNsaWVudCB7Ci1wdWJsaWM6CiAgICAgLy8gTmFtZSBhbmQgdmFsdWVzIG9mIHRo
ZSBlbnVtIG11c3QgbWF0Y2ggdGhlIGNvcnJlc3Nwb25kaW5nIGNvbnN0YW50cyBpbiB0aGUgLmlk
bCBmaWxlLgotICAgIGVudW0geworICAgIGVudW0gUmVhZHlTdGF0ZSB7CiAgICAgICAgIE5FVyA9
IDAsCiAgICAgICAgIE5FR09USUFUSU5HID0gMSwKICAgICAgICAgQUNUSVZFID0gMiwKICAgICAg
ICAgQ0xPU0VEID0gMwogICAgIH07CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxQZWVyQ29ubmVj
dGlvbj4gY3JlYXRlKE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKiwgaW50IGlkLCBjb25zdCBT
dHJpbmcmIGNvbmZpZ3VyYXRpb24sIFBhc3NSZWZQdHI8U2lnbmFsaW5nQ2FsbGJhY2s+KTsKLSAg
ICB2aXJ0dWFsIH5QZWVyQ29ubmVjdGlvbigpOworICAgIFJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgp
IGNvbnN0OwogCi0gICAgTWVkaWFTdHJlYW1MaXN0KiBsb2NhbFN0cmVhbXMoKTsKLSAgICBNZWRp
YVN0cmVhbUxpc3QqIHJlbW90ZVN0cmVhbXMoKTsKLQotICAgIHVuc2lnbmVkIHNob3J0IHJlYWR5
U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3JlYWR5U3RhdGU7IH0KLQotICAgIHZvaWQgcHJvY2Vz
c1NpZ25hbGluZ01lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBFeGNlcHRpb25Db2RlJik7
CiAgICAgdm9pZCBzZW5kKGNvbnN0IFN0cmluZyYgdGV4dCwgRXhjZXB0aW9uQ29kZSYpOwotICAg
IHZvaWQgYWRkU3RyZWFtKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+LCBFeGNlcHRpb25Db2RlJik7
Ci0gICAgdm9pZCByZW1vdmVTdHJlYW0oUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4sIEV4Y2VwdGlv
bkNvZGUmKTsKKyAgICB2b2lkIGFkZFN0cmVhbShjb25zdCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFt
PiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgcmVtb3ZlU3RyZWFtKE1lZGlhU3RyZWFtKiwg
RXhjZXB0aW9uQ29kZSYpOworICAgIE1lZGlhU3RyZWFtTGlzdCogbG9jYWxTdHJlYW1zKCkgY29u
c3Q7CisgICAgTWVkaWFTdHJlYW1MaXN0KiByZW1vdGVTdHJlYW1zKCkgY29uc3Q7CiAgICAgdm9p
ZCBjbG9zZShFeGNlcHRpb25Db2RlJik7CiAKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJ
U1RFTkVSKGNvbm5lY3RpbmcpOwpAQCAtNzAsNTggKzcwLDY3IEBAIHB1YmxpYzoKICAgICBERUZJ
TkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGFkZHN0cmVhbSk7CiAgICAgREVGSU5FX0FUVFJJ
QlVURV9FVkVOVF9MSVNURU5FUihyZW1vdmVzdHJlYW0pOwogCisgICAgLy8gUGVlckhhbmRsZXJD
bGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgaWNlUHJvY2Vzc2luZ0NvbXBsZXRlZCgpOworICAgIHZp
cnR1YWwgdm9pZCBzZHBHZW5lcmF0ZWQoY29uc3QgU3RyaW5nJiBzZHApOworICAgIHZpcnR1YWwg
dm9pZCBkYXRhU3RyZWFtTWVzc2FnZVJlY2VpdmVkKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVk
IGxlbmd0aCk7CisgICAgdmlydHVhbCB2b2lkIHJlbW90ZVN0cmVhbUFkZGVkKFBhc3NSZWZQdHI8
TWVkaWFTdHJlYW1EZXNjcmlwdG9yPik7CisgICAgdmlydHVhbCB2b2lkIHJlbW90ZVN0cmVhbVJl
bW92ZWQoTWVkaWFTdHJlYW1EZXNjcmlwdG9yKik7CisKICAgICAvLyBFdmVudFRhcmdldAogICAg
IHZpcnR1YWwgUGVlckNvbm5lY3Rpb24qIHRvUGVlckNvbm5lY3Rpb24oKTsKIAogICAgIC8vIEV2
ZW50VGFyZ2V0IGltcGxlbWVudGF0aW9uLgogICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OwogCi0gICAgLy8gQ2FsbGJhY2tz
Ci0gICAgdm9pZCBvbk1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLSAgICB2b2lkIG9u
U2lnbmFsaW5nTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwotICAgIHZvaWQgb25OZWdv
dGlhdGlvblN0YXJ0ZWQoKTsKLSAgICB2b2lkIG9uTmVnb3RpYXRpb25Eb25lKCk7Ci0gICAgdm9p
ZCBzdHJlYW1BZGRlZChQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPik7Ci0gICAgdm9pZCBzdHJlYW1S
ZW1vdmVkKGNvbnN0IFN0cmluZyYgc3RyZWFtTGFiZWwpOworICAgIC8vIEFjdGl2ZURPTU9iamVj
dAorICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7CiAKICAgICB1c2luZyBSZWZDb3VudGVkPFBlZXJD
b25uZWN0aW9uPjo6cmVmOwogICAgIHVzaW5nIFJlZkNvdW50ZWQ8UGVlckNvbm5lY3Rpb24+Ojpk
ZXJlZjsKIAotcHJvdGVjdGVkOgotICAgIC8vIEV2ZW50VGFyZ2V0IGltcGxlbWVudGF0aW9uLgot
ICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBldmVudFRhcmdldERhdGEoKTsKLSAgICB2aXJ0
dWFsIEV2ZW50VGFyZ2V0RGF0YSogZW5zdXJlRXZlbnRUYXJnZXREYXRhKCk7Ci0KIHByaXZhdGU6
CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBrTWF4TWVzc2FnZVVURjhMZW5ndGggPSA1MDQ7CiAK
LSAgICBQZWVyQ29ubmVjdGlvbihNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciosIGludCBpZCwg
Y29uc3QgU3RyaW5nJiBjb25maWd1cmF0aW9uLCBQYXNzUmVmUHRyPFNpZ25hbGluZ0NhbGxiYWNr
Pik7Ci0gICAgdm9pZCBpbml0KCk7Ci0KLSAgICB2b2lkIHBvc3RTaW1wbGVFdmVudChjb25zdCBT
dHJpbmcmIGV2ZW50TmFtZSk7Ci0gICAgdm9pZCBwb3N0TWVzc2FnZUV2ZW50KGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSk7Ci0gICAgdm9pZCBwb3N0U2lnbmFsaW5nRXZlbnQoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKTsKLSAgICB2b2lkIHBvc3RTdHJlYW1BZGRlZEV2ZW50KFBhc3NSZWZQdHI8TWVkaWFT
dHJlYW0+KTsKLSAgICB2b2lkIHBvc3RTdHJlYW1SZW1vdmVkRXZlbnQoUGFzc1JlZlB0cjxNZWRp
YVN0cmVhbT4pOwotICAgIHZvaWQgcG9zdFN0YXJ0TmVnb3RpYXRpb25UYXNrKCk7CisgICAgUGVl
ckNvbm5lY3Rpb24oY29uc3QgU3RyaW5nJiBzZXJ2ZXJDb25maWd1cmF0aW9uLCBQYXNzUmVmUHRy
PFNpZ25hbGluZ0NhbGxiYWNrPiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogCi0gICAgdm9p
ZCBkaXNwYXRjaFNpbXBsZUV2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKTsKLSAgICB2b2lk
IGRpc3BhdGNoTWVzc2FnZUV2ZW50KGNvbnN0IGludCYsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiBkYXRhKTsKLSAgICB2b2lkIGRpc3BhdGNoU2lnbmFsaW5nRXZlbnQoY29uc3Qg
U3RyaW5nJiBldmVudE5hbWUpOwotICAgIHZvaWQgZGlzcGF0Y2hTdHJlYW1FdmVudChjb25zdCBT
dHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+KTsKLSAgICB2b2lkIGRpc3BhdGNo
U3RhcnROZWdvdGlhdGlvblRhc2soY29uc3QgaW50Jik7CisgICAgUGFzc1JlZlB0cjxQZWVySGFu
ZGxlckNvbmZpZ3VyYXRpb24+IHBhcnNlU2VydmVyQ29uZmlndXJhdGlvbihjb25zdCBTdHJpbmcm
IHNlcnZlckNvbmZpZ3VyYXRpb24pOwogCiAgICAgLy8gRXZlbnRUYXJnZXQgaW1wbGVtZW50YXRp
b24uCisgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpOworICAg
IHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBlbnN1cmVFdmVudFRhcmdldERhdGEoKTsKICAgICB2
aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9CiAgICAgdmlydHVhbCB2b2lk
IGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0KIAotICAgIEV2ZW50VGFyZ2V0RGF0YSBt
X2V2ZW50VGFyZ2V0RGF0YTsKKyAgICB2b2lkIHNjaGVkdWxlSW5pdGlhbE5lZ290aWF0aW9uKCk7
CisgICAgdm9pZCBpbml0aWFsTmVnb3RpYXRpb25UaW1lckZpcmVkKFRpbWVyPFBlZXJDb25uZWN0
aW9uPiopOworICAgIHZvaWQgc2NoZWR1bGVTdHJlYW1DaGFuZ2UoKTsKKyAgICB2b2lkIHN0cmVh
bUNoYW5nZVRpbWVyRmlyZWQoVGltZXI8UGVlckNvbm5lY3Rpb24+Kik7CisgICAgdm9pZCBzY2hl
ZHVsZVJlYWR5U3RhdGVDaGFuZ2UoUmVhZHlTdGF0ZSk7CisgICAgdm9pZCByZWFkeVN0YXRlQ2hh
bmdlVGltZXJGaXJlZChUaW1lcjxQZWVyQ29ubmVjdGlvbj4qKTsKKworICAgIHZvaWQgY2hhbmdl
UmVhZHlTdGF0ZShSZWFkeVN0YXRlKTsKIAotICAgIFN0cmluZyBtX2NvbmZpZ3VyYXRpb247Ci0g
ICAgdW5zaWduZWQgc2hvcnQgbV9yZWFkeVN0YXRlOwogICAgIFJlZlB0cjxTaWduYWxpbmdDYWxs
YmFjaz4gbV9zaWduYWxpbmdDYWxsYmFjazsKLSAgICBSZWZQdHI8TWVkaWFTdHJlYW1MaXN0PiBt
X2xvY2FsU3RyZWFtTGlzdDsKLSAgICBSZWZQdHI8TWVkaWFTdHJlYW1MaXN0PiBtX3JlbW90ZVN0
cmVhbUxpc3Q7CisKKyAgICBSZWFkeVN0YXRlIG1fcmVhZHlTdGF0ZTsKKyAgICBib29sIG1faWNl
U3RhcnRlZDsKKworICAgIFJlZlB0cjxNZWRpYVN0cmVhbUxpc3Q+IG1fbG9jYWxTdHJlYW1zOwor
ICAgIFJlZlB0cjxNZWRpYVN0cmVhbUxpc3Q+IG1fcmVtb3RlU3RyZWFtczsKKworICAgIC8vIEV2
ZW50VGFyZ2V0IGltcGxlbWVudGF0aW9uLgorICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2ZW50VGFy
Z2V0RGF0YTsKKworICAgIFRpbWVyPFBlZXJDb25uZWN0aW9uPiBtX2luaXRpYWxOZWdvdGlhdGlv
blRpbWVyOworICAgIFRpbWVyPFBlZXJDb25uZWN0aW9uPiBtX3N0cmVhbUNoYW5nZVRpbWVyOwor
ICAgIFRpbWVyPFBlZXJDb25uZWN0aW9uPiBtX3JlYWR5U3RhdGVDaGFuZ2VUaW1lcjsKKworICAg
IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciBtX3BlbmRpbmdBZGRTdHJlYW1zOworICAgIE1l
ZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciBtX3BlbmRpbmdSZW1vdmVTdHJlYW1zOworICAgIFZl
Y3RvcjxSZWFkeVN0YXRlPiBtX3BlbmRpbmdSZWFkeVN0YXRlczsKKworICAgIE93blB0cjxQZWVy
SGFuZGxlcj4gbV9wZWVySGFuZGxlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1DbGllbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1DbGllbnQuaAppbmRleCA3YWMyZjA3Li4wZmM2ZTVm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtQ2xpZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUNsaWVudC5oCkBAIC00OSwxNSArNDks
NiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHN0b3BHZW5lcmF0ZWRTdHJlYW0oY29uc3Qg
U3RyaW5nJiBzdHJlYW1MYWJlbCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRNZWRpYVN0cmVh
bVRyYWNrRW5hYmxlZChjb25zdCBTdHJpbmcmIHRyYWNrSWQsIGJvb2wgZW5hYmxlZCkgPSAwOwog
Ci0gICAgLy8gUGVlckNvbm5lY3Rpb24gZnVuY3Rpb25zLgotICAgIHZpcnR1YWwgdm9pZCBuZXdQ
ZWVyQ29ubmVjdGlvbihpbnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBjb25maWd1
cmF0aW9uKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN0YXJ0TmVnb3RpYXRpb24oaW50IHBlZXJD
b25uZWN0aW9uSWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc1NpZ25hbGluZ01lc3Nh
Z2UoaW50IHBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBtZXNzYWdlKGludCBwZWVyQ29ubmVjdGlvbklkLCBjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkU3RyZWFtKGludCBwZWVyQ29ubmVj
dGlvbklkLCBjb25zdCBTdHJpbmcmIHN0cmVhbUxhYmVsKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IHJlbW92ZVN0cmVhbShpbnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBzdHJlYW1M
YWJlbCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZVBlZXJDb25uZWN0aW9uKGludCBwZWVy
Q29ubmVjdGlvbklkKSA9IDA7Ci0KIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5NZWRpYVN0cmVh
bUNsaWVudCgpIHsgfQogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFT
dHJlYW1Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1Db250
cm9sbGVyLmNwcAppbmRleCA1ZjYwNGVjLi5jODg1NTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL01lZGlhU3RyZWFtQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9NZWRpYVN0cmVhbUNvbnRyb2xsZXIuY3BwCkBAIC0zNCw4ICszNCw2IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotLy8gRklYTUU6IFRoaXMgaXMgdXNlZCBmb3IgaG9sZGluZyBsaXN0
IG9mIFBlZXJDb25uZWN0aW9uIGFzIHdlbGwsCi0vLyBzbyByZW5hbWUgY2xhc3MgaXMgaW4gb3Jk
ZXIuCiBjbGFzcyBNZWRpYVN0cmVhbUNvbnRyb2xsZXI6OlJlcXVlc3QgewogcHVibGljOgogICAg
IFJlcXVlc3QoKQpAQCAtNTcsNyArNTUsNiBAQCBwcml2YXRlOgogTWVkaWFTdHJlYW1Db250cm9s
bGVyOjpNZWRpYVN0cmVhbUNvbnRyb2xsZXIoTWVkaWFTdHJlYW1DbGllbnQqIGNsaWVudCkKICAg
ICA6IG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fbmV4dEdsb2JhbFJlcXVlc3RJZCgxKQotICAg
ICwgbV9uZXh0R2xvYmFsUGVlckNvbm5lY3Rpb25JZCgxKQogewogfQogCkBAIC0xNTcsMTMwICsx
NTQsNiBAQCB2b2lkIE1lZGlhU3RyZWFtQ29udHJvbGxlcjo6c3RyZWFtRmFpbGVkKGNvbnN0IFN0
cmluZyYgc3RyZWFtTGFiZWwpCiAgICAgICAgIG1fc3RyZWFtcy5nZXQoc3RyZWFtTGFiZWwpLT5z
dHJlYW1GYWlsZWQoc3RyZWFtTGFiZWwpOwogfQogCi12b2lkIE1lZGlhU3RyZWFtQ29udHJvbGxl
cjo6b25TaWduYWxpbmdNZXNzYWdlKGludCBjb250cm9sbGVyUGVlckNvbm5lY3Rpb25JZCwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIC8vIERvbid0IGFzc2VydCBzaW5jZSB0aGUgZnJh
bWUgY29udHJvbGxlciBjYW4gaGF2ZSBiZWVuIGRlc3Ryb3llZC4KLSAgICBpZiAobV9wZWVyQ29u
bmVjdGlvbnMuY29udGFpbnMoY29udHJvbGxlclBlZXJDb25uZWN0aW9uSWQpKSB7Ci0gICAgICAg
IGNvbnN0IFJlcXVlc3QmIHBlZXJDb25uZWN0aW9uID0gbV9wZWVyQ29ubmVjdGlvbnMuZ2V0KGNv
bnRyb2xsZXJQZWVyQ29ubmVjdGlvbklkKTsKLSAgICAgICAgQVNTRVJUKHBlZXJDb25uZWN0aW9u
LmZyYW1lQ29udHJvbGxlcigpKTsKLSAgICAgICAgcGVlckNvbm5lY3Rpb24uZnJhbWVDb250cm9s
bGVyKCktPm9uU2lnbmFsaW5nTWVzc2FnZShwZWVyQ29ubmVjdGlvbi5sb2NhbElkKCksIG1lc3Nh
Z2UpOwotICAgIH0KLX0KLQotYm9vbCBNZWRpYVN0cmVhbUNvbnRyb2xsZXI6OmZyYW1lVG9QYWdl
UGVlckNvbm5lY3Rpb25JZChNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciogZnJhbWVDb250cm9s
bGVyLCBpbnQgZnJhbWVQZWVyQ29ubmVjdGlvbklkLCBpbnQmIHBhZ2VQZWVyQ29ubmVjdGlvbklk
KQotewotICAgIHBhZ2VQZWVyQ29ubmVjdGlvbklkID0gLTE7Ci0gICAgLy8gRklYTUU6IElzIHRo
ZXJlIGEgYmV0dGVyIHdheSB0byBmaW5kIHRoZSBnbG9iYWwgSUQgaW4gdGhlIG1hcD8KLSAgICBm
b3IgKFJlcXVlc3RNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wZWVyQ29ubmVjdGlvbnMuYmVnaW4oKTsg
aXQgIT0gbV9wZWVyQ29ubmVjdGlvbnMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5z
ZWNvbmQuZnJhbWVDb250cm9sbGVyKCkgPT0gZnJhbWVDb250cm9sbGVyICYmIGl0LT5zZWNvbmQu
bG9jYWxJZCgpID09IGZyYW1lUGVlckNvbm5lY3Rpb25JZCkgewotICAgICAgICAgICAgcGFnZVBl
ZXJDb25uZWN0aW9uSWQgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1D
b250cm9sbGVyOjpwcm9jZXNzU2lnbmFsaW5nTWVzc2FnZShNZWRpYVN0cmVhbUZyYW1lQ29udHJv
bGxlciogZnJhbWVDb250cm9sbGVyLCBpbnQgZnJhbWVQZWVyQ29ubmVjdGlvbklkLCBjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgaW50IHBhZ2VQZWVyQ29ubmVjdGlvbklkOwotICAgIGlm
IChmcmFtZVRvUGFnZVBlZXJDb25uZWN0aW9uSWQoZnJhbWVDb250cm9sbGVyLCBmcmFtZVBlZXJD
b25uZWN0aW9uSWQsIHBhZ2VQZWVyQ29ubmVjdGlvbklkKSkKLSAgICAgICAgbV9jbGllbnQtPnBy
b2Nlc3NTaWduYWxpbmdNZXNzYWdlKHBhZ2VQZWVyQ29ubmVjdGlvbklkLCBtZXNzYWdlKTsKLX0K
LQotdm9pZCBNZWRpYVN0cmVhbUNvbnRyb2xsZXI6Om1lc3NhZ2UoTWVkaWFTdHJlYW1GcmFtZUNv
bnRyb2xsZXIqIGZyYW1lQ29udHJvbGxlciwgaW50IGZyYW1lUGVlckNvbm5lY3Rpb25JZCwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGludCBwYWdlUGVlckNvbm5lY3Rpb25JZDsKLSAg
ICBpZiAoZnJhbWVUb1BhZ2VQZWVyQ29ubmVjdGlvbklkKGZyYW1lQ29udHJvbGxlciwgZnJhbWVQ
ZWVyQ29ubmVjdGlvbklkLCBwYWdlUGVlckNvbm5lY3Rpb25JZCkpCi0gICAgICAgIG1fY2xpZW50
LT5tZXNzYWdlKHBhZ2VQZWVyQ29ubmVjdGlvbklkLCBtZXNzYWdlKTsKLX0KLQotdm9pZCBNZWRp
YVN0cmVhbUNvbnRyb2xsZXI6Om9uTWVzc2FnZShpbnQgY29udHJvbGxlclBlZXJDb25uZWN0aW9u
SWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICAvLyBEb24ndCBhc3NlcnQgc2luY2Ug
dGhlIGZyYW1lIGNvbnRyb2xsZXIgY2FuIGhhdmUgYmVlbiBkZXN0cm95ZWQKLSAgICBpZiAobV9w
ZWVyQ29ubmVjdGlvbnMuY29udGFpbnMoY29udHJvbGxlclBlZXJDb25uZWN0aW9uSWQpKSB7Ci0g
ICAgICAgIGNvbnN0IFJlcXVlc3QmIHBlZXJDb25uZWN0aW9uID0gbV9wZWVyQ29ubmVjdGlvbnMu
Z2V0KGNvbnRyb2xsZXJQZWVyQ29ubmVjdGlvbklkKTsKLSAgICAgICAgQVNTRVJUKHBlZXJDb25u
ZWN0aW9uLmZyYW1lQ29udHJvbGxlcigpKTsKLSAgICAgICAgcGVlckNvbm5lY3Rpb24uZnJhbWVD
b250cm9sbGVyKCktPm9uTWVzc2FnZShwZWVyQ29ubmVjdGlvbi5sb2NhbElkKCksIG1lc3NhZ2Up
OwotICAgIH0KLX0KLQotdm9pZCBNZWRpYVN0cmVhbUNvbnRyb2xsZXI6OmFkZFN0cmVhbShNZWRp
YVN0cmVhbUZyYW1lQ29udHJvbGxlciogZnJhbWVDb250cm9sbGVyLCBpbnQgZnJhbWVQZWVyQ29u
bmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIHN0cmVhbUxhYmVsKQotewotICAgIGludCBwYWdlUGVl
ckNvbm5lY3Rpb25JZDsKLSAgICBpZiAoZnJhbWVUb1BhZ2VQZWVyQ29ubmVjdGlvbklkKGZyYW1l
Q29udHJvbGxlciwgZnJhbWVQZWVyQ29ubmVjdGlvbklkLCBwYWdlUGVlckNvbm5lY3Rpb25JZCkp
Ci0gICAgICAgIG1fY2xpZW50LT5hZGRTdHJlYW0ocGFnZVBlZXJDb25uZWN0aW9uSWQsIHN0cmVh
bUxhYmVsKTsKLX0KLQotdm9pZCBNZWRpYVN0cmVhbUNvbnRyb2xsZXI6Om9uQWRkU3RyZWFtKGlu
dCBjb250cm9sbGVyUGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCwg
UGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrTGlzdD4gdHJhY2tzKQotewotICAgIC8vIERvbid0
IGFzc2VydCBzaW5jZSB0aGUgZnJhbWUgY29udHJvbGxlciBjYW4gaGF2ZSBiZWVuIGRlc3Ryb3ll
ZAotICAgIGlmIChtX3BlZXJDb25uZWN0aW9ucy5jb250YWlucyhjb250cm9sbGVyUGVlckNvbm5l
Y3Rpb25JZCkpIHsKLSAgICAgICAgY29uc3QgUmVxdWVzdCYgcGVlckNvbm5lY3Rpb24gPSBtX3Bl
ZXJDb25uZWN0aW9ucy5nZXQoY29udHJvbGxlclBlZXJDb25uZWN0aW9uSWQpOwotICAgICAgICBB
U1NFUlQocGVlckNvbm5lY3Rpb24uZnJhbWVDb250cm9sbGVyKCkpOwotICAgICAgICBwZWVyQ29u
bmVjdGlvbi5mcmFtZUNvbnRyb2xsZXIoKS0+b25BZGRTdHJlYW0ocGVlckNvbm5lY3Rpb24ubG9j
YWxJZCgpLCBzdHJlYW1MYWJlbCwgdHJhY2tzKTsKLSAgICB9Ci19Ci0KLXZvaWQgTWVkaWFTdHJl
YW1Db250cm9sbGVyOjpyZW1vdmVTdHJlYW0oTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqIGZy
YW1lQ29udHJvbGxlciwgaW50IGZyYW1lUGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBz
dHJlYW1MYWJlbCkKLXsKLSAgICBpbnQgcGFnZVBlZXJDb25uZWN0aW9uSWQ7Ci0gICAgaWYgKGZy
YW1lVG9QYWdlUGVlckNvbm5lY3Rpb25JZChmcmFtZUNvbnRyb2xsZXIsIGZyYW1lUGVlckNvbm5l
Y3Rpb25JZCwgcGFnZVBlZXJDb25uZWN0aW9uSWQpKQotICAgICAgICBtX2NsaWVudC0+cmVtb3Zl
U3RyZWFtKHBhZ2VQZWVyQ29ubmVjdGlvbklkLCBzdHJlYW1MYWJlbCk7Ci19Ci0KLXZvaWQgTWVk
aWFTdHJlYW1Db250cm9sbGVyOjpvblJlbW92ZVN0cmVhbShpbnQgY29udHJvbGxlclBlZXJDb25u
ZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgc3RyZWFtTGFiZWwpCi17Ci0gICAgLy8gRG9uJ3QgYXNz
ZXJ0IHNpbmNlIHRoZSBmcmFtZSBjb250cm9sbGVyIGNhbiBoYXZlIGJlZW4gZGVzdHJveWVkCi0g
ICAgaWYgKG1fcGVlckNvbm5lY3Rpb25zLmNvbnRhaW5zKGNvbnRyb2xsZXJQZWVyQ29ubmVjdGlv
bklkKSkgewotICAgICAgICAvLyBUT0RPOiBCZXR0ZXIgbmFtZSBvZiBwZWVyQ29ubmVjdGlvbiB2
YXJpYWJsZT8KLSAgICAgICAgY29uc3QgUmVxdWVzdCYgcGVlckNvbm5lY3Rpb24gPSBtX3BlZXJD
b25uZWN0aW9ucy5nZXQoY29udHJvbGxlclBlZXJDb25uZWN0aW9uSWQpOwotICAgICAgICBBU1NF
UlQocGVlckNvbm5lY3Rpb24uZnJhbWVDb250cm9sbGVyKCkpOwotICAgICAgICBwZWVyQ29ubmVj
dGlvbi5mcmFtZUNvbnRyb2xsZXIoKS0+b25SZW1vdmVTdHJlYW0ocGVlckNvbm5lY3Rpb24ubG9j
YWxJZCgpLCBzdHJlYW1MYWJlbCk7Ci0gICAgfQotfQotCi12b2lkIE1lZGlhU3RyZWFtQ29udHJv
bGxlcjo6bmV3UGVlckNvbm5lY3Rpb24oTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqIGZyYW1l
Q29udHJvbGxlciwgaW50IGZyYW1lUGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBjb25m
aWd1cmF0aW9uKQotewotICAgIGludCBwYWdlUGVlckNvbm5lY3Rpb25JZCA9IG1fbmV4dEdsb2Jh
bFBlZXJDb25uZWN0aW9uSWQrKzsKLSAgICBtX3BlZXJDb25uZWN0aW9ucy5hZGQocGFnZVBlZXJD
b25uZWN0aW9uSWQsIFJlcXVlc3QoZnJhbWVQZWVyQ29ubmVjdGlvbklkLCBmcmFtZUNvbnRyb2xs
ZXIpKTsKLQotICAgIG1fY2xpZW50LT5uZXdQZWVyQ29ubmVjdGlvbihwYWdlUGVlckNvbm5lY3Rp
b25JZCwgY29uZmlndXJhdGlvbik7Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1Db250cm9sbGVyOjpj
bG9zZVBlZXJDb25uZWN0aW9uKE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKiBmcmFtZUNvbnRy
b2xsZXIsIGludCBmcmFtZVBlZXJDb25uZWN0aW9uSWQpCi17Ci0gICAgaW50IHBhZ2VQZWVyQ29u
bmVjdGlvbklkOwotICAgIGlmIChmcmFtZVRvUGFnZVBlZXJDb25uZWN0aW9uSWQoZnJhbWVDb250
cm9sbGVyLCBmcmFtZVBlZXJDb25uZWN0aW9uSWQsIHBhZ2VQZWVyQ29ubmVjdGlvbklkKSkKLSAg
ICAgICAgbV9jbGllbnQtPmNsb3NlUGVlckNvbm5lY3Rpb24ocGFnZVBlZXJDb25uZWN0aW9uSWQp
OwotfQotCi12b2lkIE1lZGlhU3RyZWFtQ29udHJvbGxlcjo6c3RhcnROZWdvdGlhdGlvbihNZWRp
YVN0cmVhbUZyYW1lQ29udHJvbGxlciogZnJhbWVDb250cm9sbGVyLCBpbnQgZnJhbWVQZWVyQ29u
bmVjdGlvbklkKQotewotICAgIGludCBwYWdlUGVlckNvbm5lY3Rpb25JZDsKLSAgICBpZiAoZnJh
bWVUb1BhZ2VQZWVyQ29ubmVjdGlvbklkKGZyYW1lQ29udHJvbGxlciwgZnJhbWVQZWVyQ29ubmVj
dGlvbklkLCBwYWdlUGVlckNvbm5lY3Rpb25JZCkpCi0gICAgICAgIG1fY2xpZW50LT5zdGFydE5l
Z290aWF0aW9uKHBhZ2VQZWVyQ29ubmVjdGlvbklkKTsKLX0KLQotdm9pZCBNZWRpYVN0cmVhbUNv
bnRyb2xsZXI6Om9uTmVnb3RpYXRpb25TdGFydGVkKGludCBjb250cm9sbGVyUGVlckNvbm5lY3Rp
b25JZCkKLXsKLSAgICAvLyBEb24ndCBhc3NlcnQgc2luY2UgdGhlIGZyYW1lIGNvbnRyb2xsZXIg
Y2FuIGhhdmUgYmVlbiBkZXN0cm95ZWQKLSAgICBpZiAobV9wZWVyQ29ubmVjdGlvbnMuY29udGFp
bnMoY29udHJvbGxlclBlZXJDb25uZWN0aW9uSWQpKSB7Ci0gICAgICAgIGNvbnN0IFJlcXVlc3Qm
IHBlZXJDb25uZWN0aW9uID0gbV9wZWVyQ29ubmVjdGlvbnMuZ2V0KGNvbnRyb2xsZXJQZWVyQ29u
bmVjdGlvbklkKTsKLSAgICAgICAgQVNTRVJUKHBlZXJDb25uZWN0aW9uLmZyYW1lQ29udHJvbGxl
cigpKTsKLSAgICAgICAgcGVlckNvbm5lY3Rpb24uZnJhbWVDb250cm9sbGVyKCktPm9uTmVnb3Rp
YXRpb25TdGFydGVkKHBlZXJDb25uZWN0aW9uLmxvY2FsSWQoKSk7Ci0gICAgfQotfQotCi12b2lk
IE1lZGlhU3RyZWFtQ29udHJvbGxlcjo6b25OZWdvdGlhdGlvbkRvbmUoaW50IGNvbnRyb2xsZXJQ
ZWVyQ29ubmVjdGlvbklkKQotewotICAgIC8vIERvbid0IGFzc2VydCBzaW5jZSB0aGUgZnJhbWUg
Y29udHJvbGxlciBjYW4gaGF2ZSBiZWVuIGRlc3Ryb3llZAotICAgIGlmIChtX3BlZXJDb25uZWN0
aW9ucy5jb250YWlucyhjb250cm9sbGVyUGVlckNvbm5lY3Rpb25JZCkpIHsKLSAgICAgICAgY29u
c3QgUmVxdWVzdCYgcGVlckNvbm5lY3Rpb24gPSBtX3BlZXJDb25uZWN0aW9ucy5nZXQoY29udHJv
bGxlclBlZXJDb25uZWN0aW9uSWQpOwotICAgICAgICBBU1NFUlQocGVlckNvbm5lY3Rpb24uZnJh
bWVDb250cm9sbGVyKCkpOwotICAgICAgICBwZWVyQ29ubmVjdGlvbi5mcmFtZUNvbnRyb2xsZXIo
KS0+b25OZWdvdGlhdGlvbkRvbmUocGVlckNvbm5lY3Rpb24ubG9jYWxJZCgpKTsKLSAgICB9Ci19
Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJF
QU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtQ29udHJvbGxl
ci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUNvbnRyb2xsZXIuaAppbmRleCA1
NTUzNTg3ZS4uMTBhYzRjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0
cmVhbUNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtQ29u
dHJvbGxlci5oCkBAIC02MCw0MCArNjAsMTkgQEAgcHVibGljOgogICAgIHZvaWQgc3RyZWFtR2Vu
ZXJhdGlvbkZhaWxlZChpbnQgcmVxdWVzdElkLCBOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvcjo6RXJy
b3JDb2RlKTsKICAgICB2b2lkIHN0cmVhbUZhaWxlZChjb25zdCBTdHJpbmcmIHN0cmVhbUxhYmVs
KTsKIAotICAgIC8qIEpTIC0+IFVBICovCi0gICAgdm9pZCBuZXdQZWVyQ29ubmVjdGlvbihNZWRp
YVN0cmVhbUZyYW1lQ29udHJvbGxlciosIGludCBmcmFtZVBlZXJDb25uZWN0aW9uSWQsIGNvbnN0
IFN0cmluZyYgY29uZmlndXJhdGlvbik7Ci0gICAgdm9pZCBzdGFydE5lZ290aWF0aW9uKE1lZGlh
U3RyZWFtRnJhbWVDb250cm9sbGVyKiwgaW50IGZyYW1lUGVlckNvbm5lY3Rpb25JZCk7Ci0gICAg
dm9pZCBwcm9jZXNzU2lnbmFsaW5nTWVzc2FnZShNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcios
IGludCBmcmFtZVBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0gICAg
dm9pZCBtZXNzYWdlKE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKiwgaW50IGZyYW1lUGVlckNv
bm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLSAgICB2b2lkIGFkZFN0cmVhbShN
ZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciosIGludCBmcmFtZVBlZXJDb25uZWN0aW9uSWQsIGNv
bnN0IFN0cmluZyYgc3RyZWFtTGFiZWwpOwotICAgIHZvaWQgcmVtb3ZlU3RyZWFtKE1lZGlhU3Ry
ZWFtRnJhbWVDb250cm9sbGVyKiwgaW50IGZyYW1lUGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3Ry
aW5nJiBzdHJlYW1MYWJlbCk7Ci0gICAgdm9pZCBjbG9zZVBlZXJDb25uZWN0aW9uKE1lZGlhU3Ry
ZWFtRnJhbWVDb250cm9sbGVyKiwgaW50IGZyYW1lUGVlckNvbm5lY3Rpb25JZCk7Ci0KLSAgICAv
KiBVQSAtPiBKUyAqLwotICAgIHZvaWQgb25TaWduYWxpbmdNZXNzYWdlKGludCBjb250cm9sbGVy
UGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLSAgICB2b2lkIG9uTWVz
c2FnZShpbnQgY29udHJvbGxlclBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSk7Ci0gICAgdm9pZCBvbkFkZFN0cmVhbShpbnQgY29udHJvbGxlclBlZXJDb25uZWN0aW9uSWQs
IGNvbnN0IFN0cmluZyYgc3RyZWFtTGFiZWwsIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja0xp
c3Q+IHRyYWNrcyk7Ci0gICAgdm9pZCBvblJlbW92ZVN0cmVhbShpbnQgY29udHJvbGxlclBlZXJD
b25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgc3RyZWFtTGFiZWwpOwotICAgIHZvaWQgb25OZWdv
dGlhdGlvblN0YXJ0ZWQoaW50IGNvbnRyb2xsZXJQZWVyQ29ubmVjdGlvbklkKTsKLSAgICB2b2lk
IG9uTmVnb3RpYXRpb25Eb25lKGludCBjb250cm9sbGVyUGVlckNvbm5lY3Rpb25JZCk7Ci0KIHBy
aXZhdGU6CiAgICAgaW50IHJlZ2lzdGVyUmVxdWVzdChpbnQgbG9jYWxSZXF1ZXN0SWQsIE1lZGlh
U3RyZWFtRnJhbWVDb250cm9sbGVyKik7CiAgICAgdm9pZCByZWdpc3RlclN0cmVhbShjb25zdCBT
dHJpbmcmIHN0cmVhbUxhYmVsLCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciopOwogCi0gICAg
Ym9vbCBmcmFtZVRvUGFnZVBlZXJDb25uZWN0aW9uSWQoTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xs
ZXIqLCBpbnQgZnJhbWVQZWVyQ29ubmVjdGlvbklkLCBpbnQmIHBhZ2VQZWVyQ29ubmVjdGlvbklk
KTsKLQogICAgIGNsYXNzIFJlcXVlc3Q7CiAgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgUmVxdWVz
dD4gUmVxdWVzdE1hcDsKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBNZWRpYVN0cmVhbUZy
YW1lQ29udHJvbGxlcio+IFN0cmVhbU1hcDsKIAogICAgIFJlcXVlc3RNYXAgbV9yZXF1ZXN0czsK
ICAgICBTdHJlYW1NYXAgbV9zdHJlYW1zOwotICAgIFJlcXVlc3RNYXAgbV9wZWVyQ29ubmVjdGlv
bnM7CiAKICAgICBNZWRpYVN0cmVhbUNsaWVudCogbV9jbGllbnQ7CiAgICAgaW50IG1fbmV4dEds
b2JhbFJlcXVlc3RJZDsKLSAgICBpbnQgbV9uZXh0R2xvYmFsUGVlckNvbm5lY3Rpb25JZDsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9N
ZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlci5jcHAKaW5kZXggOWI2NzkyYS4uNmY2ZWNlNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlci5j
cHAKQEAgLTM2LDkgKzM2LDcgQEAKICNpbmNsdWRlICJOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvckNh
bGxiYWNrLmgiCiAjaW5jbHVkZSAiTmF2aWdhdG9yVXNlck1lZGlhU3VjY2Vzc0NhbGxiYWNrLmgi
CiAjaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBlZXJDb25uZWN0aW9uLmgiCiAjaW5jbHVk
ZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlICJTaWduYWxpbmdDYWxsYmFjay5oIgogI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM2Mywx
MjYgKzM2MSw2IEBAIHZvaWQgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6OnN0cmVhbUZhaWxl
ZChjb25zdCBTdHJpbmcmIGxhYmVsKQogICAgIGdldFN0cmVhbUZyb21MYWJlbChsYWJlbCktPnN0
cmVhbUVuZGVkKCk7CiB9CiAKLVBhc3NSZWZQdHI8UGVlckNvbm5lY3Rpb24+IE1lZGlhU3RyZWFt
RnJhbWVDb250cm9sbGVyOjpjcmVhdGVQZWVyQ29ubmVjdGlvbihjb25zdCBTdHJpbmcmIGNvbmZp
Z3VyYXRpb24sIFBhc3NSZWZQdHI8U2lnbmFsaW5nQ2FsbGJhY2s+IHNpZ25hbGluZ0NhbGxiYWNr
KQotewotICAgIGludCBjbGllbnRJZCA9IG1fY2xpZW50cy5nZXROZXh0SWQoKTsKLSAgICBSZWZQ
dHI8UGVlckNvbm5lY3Rpb24+IHBlZXJDb25uZWN0aW9uID0gUGVlckNvbm5lY3Rpb246OmNyZWF0
ZSh0aGlzLCBjbGllbnRJZCwgY29uZmlndXJhdGlvbiwgc2lnbmFsaW5nQ2FsbGJhY2spOwotICAg
IGlmIChwZWVyQ29ubmVjdGlvbikKLSAgICAgICAgbV9jbGllbnRzLmFkZChjbGllbnRJZCwgcGVl
ckNvbm5lY3Rpb24uZ2V0KCkpOwotICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5yZWxlYXNlKCk7
Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6Om5ld1BlZXJDb25uZWN0aW9u
KGludCBwZWVyQ29ubmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIGNvbmZpZ3VyYXRpb24pCi17Ci0g
ICAgaWYgKHBhZ2VDb250cm9sbGVyKCkpCi0gICAgICAgIHBhZ2VDb250cm9sbGVyKCktPm5ld1Bl
ZXJDb25uZWN0aW9uKHRoaXMsIHBlZXJDb25uZWN0aW9uSWQsIGNvbmZpZ3VyYXRpb24pOwotfQot
Ci12b2lkIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjpjbG9zZVBlZXJDb25uZWN0aW9uKGlu
dCBwZWVyQ29ubmVjdGlvbklkKQotewotICAgIGlmIChwYWdlQ29udHJvbGxlcigpKQotICAgICAg
ICBwYWdlQ29udHJvbGxlcigpLT5jbG9zZVBlZXJDb25uZWN0aW9uKHRoaXMsIHBlZXJDb25uZWN0
aW9uSWQpOwotfQotCi12b2lkIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjpzdGFydE5lZ290
aWF0aW9uKGludCBwZWVyQ29ubmVjdGlvbklkKQotewotICAgIGlmIChwYWdlQ29udHJvbGxlcigp
KQotICAgICAgICBwYWdlQ29udHJvbGxlcigpLT5zdGFydE5lZ290aWF0aW9uKHRoaXMsIHBlZXJD
b25uZWN0aW9uSWQpOwotfQotCi12b2lkIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjpwcm9j
ZXNzU2lnbmFsaW5nTWVzc2FnZShpbnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKQotewotICAgIGlmIChwYWdlQ29udHJvbGxlcigpKQotICAgICAgICBwYWdlQ29udHJv
bGxlcigpLT5wcm9jZXNzU2lnbmFsaW5nTWVzc2FnZSh0aGlzLCBwZWVyQ29ubmVjdGlvbklkLCBt
ZXNzYWdlKTsKLX0KLQotdm9pZCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcjo6bWVzc2FnZShp
bnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGlmIChw
YWdlQ29udHJvbGxlcigpKQotICAgICAgICBwYWdlQ29udHJvbGxlcigpLT5tZXNzYWdlKHRoaXMs
IHBlZXJDb25uZWN0aW9uSWQsIG1lc3NhZ2UpOwotfQotCi12b2lkIE1lZGlhU3RyZWFtRnJhbWVD
b250cm9sbGVyOjphZGRTdHJlYW0oaW50IHBlZXJDb25uZWN0aW9uSWQsIFBhc3NSZWZQdHI8TWVk
aWFTdHJlYW0+IHBycFN0cmVhbSkKLXsKLSAgICBSZWZQdHI8TWVkaWFTdHJlYW0+IHN0cmVhbSA9
IHBycFN0cmVhbTsKLSAgICBBU1NFUlQobV9zdHJlYW1zLmNvbnRhaW5zKHN0cmVhbS0+bGFiZWwo
KSkpOwotCi0gICAgaWYgKHBhZ2VDb250cm9sbGVyKCkpCi0gICAgICAgIHBhZ2VDb250cm9sbGVy
KCktPmFkZFN0cmVhbSh0aGlzLCBwZWVyQ29ubmVjdGlvbklkLCBzdHJlYW0tPmxhYmVsKCkpOwot
fQotCi12b2lkIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjpyZW1vdmVTdHJlYW0oaW50IHBl
ZXJDb25uZWN0aW9uSWQsIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+IHBycFN0cmVhbSkKLXsKLSAg
ICBSZWZQdHI8TWVkaWFTdHJlYW0+IHN0cmVhbSA9IHBycFN0cmVhbTsKLSAgICBBU1NFUlQobV9z
dHJlYW1zLmNvbnRhaW5zKHN0cmVhbS0+bGFiZWwoKSkpOwotCi0gICAgaWYgKHBhZ2VDb250cm9s
bGVyKCkpCi0gICAgICAgIHBhZ2VDb250cm9sbGVyKCktPnJlbW92ZVN0cmVhbSh0aGlzLCBwZWVy
Q29ubmVjdGlvbklkLCBzdHJlYW0tPmxhYmVsKCkpOwotfQotCi12b2lkIE1lZGlhU3RyZWFtRnJh
bWVDb250cm9sbGVyOjpvbk1lc3NhZ2UoaW50IHBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSkKLXsKLSAgICBBU1NFUlQobV9jbGllbnRzLmNvbnRhaW5zKHBlZXJDb25uZWN0
aW9uSWQpKTsKLSAgICBBU1NFUlQobV9jbGllbnRzLmdldChwZWVyQ29ubmVjdGlvbklkKS0+aXNQ
ZWVyQ29ubmVjdGlvbigpKTsKLQotICAgIFJlZlB0cjxQZWVyQ29ubmVjdGlvbj4gcGVlckNvbm5l
Y3Rpb24gPSBzdGF0aWNfY2FzdDxQZWVyQ29ubmVjdGlvbio+KG1fY2xpZW50cy5nZXQocGVlckNv
bm5lY3Rpb25JZCkpOwotCi0gICAgcGVlckNvbm5lY3Rpb24tPm9uTWVzc2FnZShtZXNzYWdlKTsK
LX0KLQotdm9pZCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcjo6b25BZGRTdHJlYW0oaW50IHBl
ZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgc3RyZWFtTGFiZWwsIFBhc3NSZWZQdHI8TWVk
aWFTdHJlYW1UcmFja0xpc3Q+IHRyYWNrcykKLXsKLSAgICBBU1NFUlQoIXN0cmVhbUxhYmVsLmlz
RW1wdHkoKSk7Ci0gICAgQVNTRVJUKG1fY2xpZW50cy5jb250YWlucyhwZWVyQ29ubmVjdGlvbklk
KSk7Ci0gICAgQVNTRVJUKG1fY2xpZW50cy5nZXQocGVlckNvbm5lY3Rpb25JZCktPmlzUGVlckNv
bm5lY3Rpb24oKSk7Ci0KLSAgICBSZWZQdHI8TWVkaWFTdHJlYW0+IHN0cmVhbSA9IE1lZGlhU3Ry
ZWFtOjpjcmVhdGUodGhpcywgc3RyZWFtTGFiZWwsIHRyYWNrcyk7Ci0KLSAgICBSZWZQdHI8UGVl
ckNvbm5lY3Rpb24+IHBlZXJDb25uZWN0aW9uID0gc3RhdGljX2Nhc3Q8UGVlckNvbm5lY3Rpb24q
PihtX2NsaWVudHMuZ2V0KHBlZXJDb25uZWN0aW9uSWQpKTsKLSAgICBwZWVyQ29ubmVjdGlvbi0+
c3RyZWFtQWRkZWQoc3RyZWFtLnJlbGVhc2UoKSk7Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1GcmFt
ZUNvbnRyb2xsZXI6Om9uUmVtb3ZlU3RyZWFtKGludCBwZWVyQ29ubmVjdGlvbklkLCBjb25zdCBT
dHJpbmcmIHN0cmVhbUxhYmVsKQotewotICAgIEFTU0VSVCghc3RyZWFtTGFiZWwuaXNFbXB0eSgp
KTsKLSAgICBBU1NFUlQobV9jbGllbnRzLmNvbnRhaW5zKHBlZXJDb25uZWN0aW9uSWQpKTsKLSAg
ICBBU1NFUlQobV9jbGllbnRzLmdldChwZWVyQ29ubmVjdGlvbklkKS0+aXNQZWVyQ29ubmVjdGlv
bigpKTsKLQotICAgIFJlZlB0cjxQZWVyQ29ubmVjdGlvbj4gcGVlckNvbm5lY3Rpb24gPSBzdGF0
aWNfY2FzdDxQZWVyQ29ubmVjdGlvbio+KG1fY2xpZW50cy5nZXQocGVlckNvbm5lY3Rpb25JZCkp
OwotICAgIHBlZXJDb25uZWN0aW9uLT5zdHJlYW1SZW1vdmVkKHN0cmVhbUxhYmVsKTsKLX0KLQot
dm9pZCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcjo6b25TaWduYWxpbmdNZXNzYWdlKGludCBw
ZWVyQ29ubmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgQVNTRVJUKG1f
Y2xpZW50cy5jb250YWlucyhwZWVyQ29ubmVjdGlvbklkKSk7Ci0gICAgQVNTRVJUKG1fY2xpZW50
cy5nZXQocGVlckNvbm5lY3Rpb25JZCktPmlzUGVlckNvbm5lY3Rpb24oKSk7Ci0KLSAgICBSZWZQ
dHI8UGVlckNvbm5lY3Rpb24+IHBlZXJDb25uZWN0aW9uID0gc3RhdGljX2Nhc3Q8UGVlckNvbm5l
Y3Rpb24qPihtX2NsaWVudHMuZ2V0KHBlZXJDb25uZWN0aW9uSWQpKTsKLSAgICBwZWVyQ29ubmVj
dGlvbi0+b25TaWduYWxpbmdNZXNzYWdlKG1lc3NhZ2UpOwotfQotCi12b2lkIE1lZGlhU3RyZWFt
RnJhbWVDb250cm9sbGVyOjpvbk5lZ290aWF0aW9uU3RhcnRlZChpbnQgcGVlckNvbm5lY3Rpb25J
ZCkKLXsKLSAgICAvLyBGSVhNRTogQXNzZXJ0IG9yIG5vdD8KLSAgICBBU1NFUlQobV9jbGllbnRz
LmNvbnRhaW5zKHBlZXJDb25uZWN0aW9uSWQpKTsKLSAgICBBU1NFUlQobV9jbGllbnRzLmdldChw
ZWVyQ29ubmVjdGlvbklkKS0+aXNQZWVyQ29ubmVjdGlvbigpKTsKLQotICAgIFJlZlB0cjxQZWVy
Q29ubmVjdGlvbj4gcGVlckNvbm5lY3Rpb24gPSBzdGF0aWNfY2FzdDxQZWVyQ29ubmVjdGlvbio+
KG1fY2xpZW50cy5nZXQocGVlckNvbm5lY3Rpb25JZCkpOwotCi0gICAgcGVlckNvbm5lY3Rpb24t
Pm9uTmVnb3RpYXRpb25TdGFydGVkKCk7Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1GcmFtZUNvbnRy
b2xsZXI6Om9uTmVnb3RpYXRpb25Eb25lKGludCBwZWVyQ29ubmVjdGlvbklkKQotewotICAgIC8v
IEZJWE1FOiBBc3NlcnQgb3Igbm90PwotICAgIEFTU0VSVChtX2NsaWVudHMuY29udGFpbnMocGVl
ckNvbm5lY3Rpb25JZCkpOwotICAgIEFTU0VSVChtX2NsaWVudHMuZ2V0KHBlZXJDb25uZWN0aW9u
SWQpLT5pc1BlZXJDb25uZWN0aW9uKCkpOwotCi0gICAgUmVmUHRyPFBlZXJDb25uZWN0aW9uPiBw
ZWVyQ29ubmVjdGlvbiA9IHN0YXRpY19jYXN0PFBlZXJDb25uZWN0aW9uKj4obV9jbGllbnRzLmdl
dChwZWVyQ29ubmVjdGlvbklkKSk7Ci0KLSAgICBwZWVyQ29ubmVjdGlvbi0+b25OZWdvdGlhdGlv
bkRvbmUoKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxF
KE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJl
YW1GcmFtZUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1GcmFt
ZUNvbnRyb2xsZXIuaAppbmRleCBlNTE0NzI1Li42YTM5YWZlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9NZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlci5oCkBAIC00NSw3ICs0NSw2IEBA
IGNsYXNzIE1lZGlhU3RyZWFtVHJhY2tMaXN0OwogY2xhc3MgTmF2aWdhdG9yVXNlck1lZGlhRXJy
b3JDYWxsYmFjazsKIGNsYXNzIE5hdmlnYXRvclVzZXJNZWRpYVN1Y2Nlc3NDYWxsYmFjazsKIGNs
YXNzIFBhZ2U7Ci1jbGFzcyBQZWVyQ29ubmVjdGlvbjsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ7CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKIGNsYXNzIFNpZ25hbGluZ0NhbGxiYWNrOwpA
QCAtNzEsNyArNzAsNiBAQCBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc01lZGlhU3Ry
ZWFtKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzTG9j
YWxNZWRpYVN0cmVhbSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBpc0dlbmVyaWNDbGllbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgICAgICB2
aXJ0dWFsIGJvb2wgaXNQZWVyQ29ubmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAK
ICAgICAgICAgLy8gQ2FsbGVkIHdoZW4gdGhlIGZyYW1lIGNvbnRyb2xsZXIgaXMgYmVpbmcgZGlz
Y29ubmVjdGVkIHRvIHRoZSBNZWRpYVN0cmVhbUNsaWVudCBlbWJlZGRlci4KICAgICAgICAgLy8g
Q2xpZW50cyBzaG91bGQgb3ZlcnJpZGUgdGhpcyB0byBzZW5kIGFueSByZXF1aXJlZCBzaHV0ZG93
biBtZXNzYWdlcy4KQEAgLTE0MCwxMyArMTM4LDYgQEAgcHVibGljOgogICAgICAgICB2aXJ0dWFs
IHZvaWQgdW5yZWdpc3RlcigpIHsgdW5yZWdpc3RlckNsaWVudCh0aGlzKTsgfQogICAgIH07CiAK
LSAgICBjbGFzcyBQZWVyQ29ubmVjdGlvbkNsaWVudCA6IHB1YmxpYyBHZW5lcmljQ2xpZW50IHsK
LSAgICBwdWJsaWM6Ci0gICAgICAgIFBlZXJDb25uZWN0aW9uQ2xpZW50KE1lZGlhU3RyZWFtRnJh
bWVDb250cm9sbGVyKiBmcmFtZUNvbnRyb2xsZXIsIGludCBpZCkgOiBHZW5lcmljQ2xpZW50KGZy
YW1lQ29udHJvbGxlciwgaWQpIHsgfQotICAgICAgICB2aXJ0dWFsIH5QZWVyQ29ubmVjdGlvbkNs
aWVudCgpIHsgfQotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNQZWVyQ29ubmVjdGlvbigpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KLSAgICB9OwotCiAgICAgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xs
ZXIoRnJhbWUqKTsKICAgICB2aXJ0dWFsIH5NZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcigpOwog
CkBAIC0xNjMsMjggKzE1NCwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdG9wR2VuZXJhdGVkU3Ry
ZWFtKGNvbnN0IFN0cmluZyYgc3RyZWFtTGFiZWwpOwogICAgIHZvaWQgc2V0TWVkaWFTdHJlYW1U
cmFja0VuYWJsZWQoY29uc3QgU3RyaW5nJiB0cmFja0lkLCBib29sIGVuYWJsZWQpOwogCi0gICAg
UGFzc1JlZlB0cjxQZWVyQ29ubmVjdGlvbj4gY3JlYXRlUGVlckNvbm5lY3Rpb24oY29uc3QgU3Ry
aW5nJiBjb25maWd1cmF0aW9uLCBQYXNzUmVmUHRyPFNpZ25hbGluZ0NhbGxiYWNrPik7Ci0gICAg
dm9pZCBuZXdQZWVyQ29ubmVjdGlvbihpbnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5n
JiBjb25maWd1cmF0aW9uKTsKLSAgICB2b2lkIHN0YXJ0TmVnb3RpYXRpb24oaW50IHBlZXJDb25u
ZWN0aW9uSWQpOwotICAgIHZvaWQgcHJvY2Vzc1NpZ25hbGluZ01lc3NhZ2UoaW50IHBlZXJDb25u
ZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0gICAgdm9pZCBtZXNzYWdlKGludCBw
ZWVyQ29ubmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwotICAgIHZvaWQgYWRkU3Ry
ZWFtKGludCBwZWVyQ29ubmVjdGlvbklkLCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPik7Ci0gICAg
dm9pZCByZW1vdmVTdHJlYW0oaW50IHBlZXJDb25uZWN0aW9uSWQsIFBhc3NSZWZQdHI8TWVkaWFT
dHJlYW0+KTsKLSAgICB2b2lkIGNsb3NlUGVlckNvbm5lY3Rpb24oaW50IHBlZXJDb25uZWN0aW9u
SWQpOwotCiAgICAgLy8gLS0tIENhbGxzIGNvbWluZyBiYWNrIGZyb20gdGhlIGNvbnRyb2xsZXIu
IC0tLSAvLwogCiAgICAgdm9pZCBzdHJlYW1HZW5lcmF0ZWQoaW50IHJlcXVlc3RJZCwgY29uc3Qg
U3RyaW5nJiBzdHJlYW1MYWJlbCwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrTGlzdD4gdHJh
Y2tzKTsKICAgICB2b2lkIHN0cmVhbUdlbmVyYXRpb25GYWlsZWQoaW50IHJlcXVlc3RJZCwgTmF2
aWdhdG9yVXNlck1lZGlhRXJyb3I6OkVycm9yQ29kZSk7CiAgICAgdm9pZCBzdHJlYW1GYWlsZWQo
Y29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCk7CiAKLSAgICB2b2lkIG9uU2lnbmFsaW5nTWVzc2Fn
ZShpbnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLSAgICB2b2lk
IG9uTWVzc2FnZShpbnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsK
LSAgICB2b2lkIG9uQWRkU3RyZWFtKGludCBwZWVyQ29ubmVjdGlvbklkLCBjb25zdCBTdHJpbmcm
IHN0cmVhbUxhYmVsLCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tMaXN0Pik7Ci0gICAgdm9p
ZCBvblJlbW92ZVN0cmVhbShpbnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBzdHJl
YW1MYWJlbCk7Ci0gICAgdm9pZCBvbk5lZ290aWF0aW9uU3RhcnRlZChpbnQgcGVlckNvbm5lY3Rp
b25JZCk7Ci0gICAgdm9pZCBvbk5lZ290aWF0aW9uRG9uZShpbnQgcGVlckNvbm5lY3Rpb25JZCk7
Ci0KIHByaXZhdGU6CiAgICAgY2xhc3MgUmVxdWVzdDsKICAgICBjbGFzcyBHZW5lcmF0ZVN0cmVh
bVJlcXVlc3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109783</attachid>
            <date>2011-10-05 06:30:10 -0700</date>
            <delta_ts>2011-10-10 05:30:07 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>peerconnection_use_platform_2.patch</filename>
            <type>text/plain</type>
            <size>53021</size>
            <attacher name="Adam Bergkvist">adam.bergkvist</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1OWU4YzYzLi5jZGExZGM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcg
QEAKKzIwMTEtMTAtMDUgIEFkYW0gQmVyZ2t2aXN0ICA8YWRhbS5iZXJna3Zpc3RAZXJpY3Nzb24u
Y29tPgorCisgICAgICAgIFVwZGF0ZSBQZWVyQ29ubmVjdGlvbiB0byB1c2UgV2ViQ29yZSBwbGF0
Zm9ybSBpbnRlcmZhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02ODQ2MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEN1cnJlbnRseSBub3QgdGVzdGFibGUuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U1BlZXJDb25uZWN0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTUGVlckNvbm5l
Y3Rpb25Db25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNQZWVyQ29ubmVjdGlvbik6CisgICAgICAgICog
YmluZGluZ3MvdjgvY3VzdG9tL1Y4UGVlckNvbm5lY3Rpb25DdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VjhQZWVyQ29ubmVjdGlvbjo6Y29uc3RydWN0b3JDYWxsYmFjayk6CisgICAgICAg
ICogZG9tL01lZGlhU3RyZWFtTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVh
bUxpc3Q6Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1MaXN0OjphcHBlbmQp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1MaXN0OjpyZW1vdmUpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFTdHJlYW1MaXN0Ojpjb250YWlucyk6CisgICAgICAgICogZG9tL01lZGlh
U3RyZWFtTGlzdC5oOgorICAgICAgICAqIHAycC9QZWVyQ29ubmVjdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBl
ZXJDb25uZWN0aW9uOjpQZWVyQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29u
bmVjdGlvbjo6cHJvY2Vzc1NpZ25hbGluZ01lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGVl
ckNvbm5lY3Rpb246OnJlYWR5U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rp
b246OnNlbmQpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246OmFkZFN0cmVhbSk6
CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6cmVtb3ZlU3RyZWFtKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uOjpsb2NhbFN0cmVhbXMpOgorICAgICAgICAoV2Vi
Q29yZTo6UGVlckNvbm5lY3Rpb246OnJlbW90ZVN0cmVhbXMpOgorICAgICAgICAoV2ViQ29yZTo6
UGVlckNvbm5lY3Rpb246OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9u
OjppY2VQcm9jZXNzaW5nQ29tcGxldGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0
aW9uOjpzZHBHZW5lcmF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246OmRh
dGFTdHJlYW1NZXNzYWdlUmVjZWl2ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rp
b246OnJlbW90ZVN0cmVhbUFkZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9u
OjpyZW1vdGVTdHJlYW1SZW1vdmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9u
OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0
aW9uOjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uOjpzY2hlZHVsZUlu
aXRpYWxOZWdvdGlhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6aW5p
dGlhbE5lZ290aWF0aW9uVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVj
dGlvbjo6c2NoZWR1bGVTdHJlYW1DaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5l
Y3Rpb246OnN0cmVhbUNoYW5nZVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNv
bm5lY3Rpb246OnNjaGVkdWxlUmVhZHlTdGF0ZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpQ
ZWVyQ29ubmVjdGlvbjo6cmVhZHlTdGF0ZUNoYW5nZVRpbWVyRmlyZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6UGVlckNvbm5lY3Rpb246OmNoYW5nZVJlYWR5U3RhdGUpOgorICAgICAgICAqIHAycC9Q
ZWVyQ29ubmVjdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246OnJlZkV2
ZW50VGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uOjpkZXJlZkV2ZW50
VGFyZ2V0KToKKyAgICAgICAgKiBwYWdlL01lZGlhU3RyZWFtQ2xpZW50Lmg6CisgICAgICAgICog
cGFnZS9NZWRpYVN0cmVhbUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFT
dHJlYW1Db250cm9sbGVyOjpNZWRpYVN0cmVhbUNvbnRyb2xsZXIpOgorICAgICAgICAqIHBhZ2Uv
TWVkaWFTdHJlYW1Db250cm9sbGVyLmg6CisgICAgICAgICogcGFnZS9NZWRpYVN0cmVhbUZyYW1l
Q29udHJvbGxlci5jcHA6CisgICAgICAgICogcGFnZS9NZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxl
ci5oOgorCiAyMDExLTEwLTA1ICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBVbnJldmlld2VkIGJ1aWxkIGZpeCBmb3Igd2luZG93cyBib3RzIGFmdGVy
IHI5NjY3OS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGVlckNv
bm5lY3Rpb25DdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQZWVyQ29u
bmVjdGlvbkN1c3RvbS5jcHAKaW5kZXggNzBiYjE3Mi4uZTI0MzdjOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQZWVyQ29ubmVjdGlvbkN1c3RvbS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQZWVyQ29ubmVjdGlvbkN1c3RvbS5jcHAKQEAg
LTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgRXJpY3Nzb24gQUIuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDIy
ICszMCwyNSBAQAogI2luY2x1ZGUgIkpTUGVlckNvbm5lY3Rpb24uaCIKIAogI2luY2x1ZGUgIkNh
bGxiYWNrRnVuY3Rpb24uaCIKLSNpbmNsdWRlICJET01XaW5kb3cuaCIKLSNpbmNsdWRlICJGcmFt
ZS5oIgotI2luY2x1ZGUgIkpTRE9NV2luZG93Q3VzdG9tLmgiCiAjaW5jbHVkZSAiSlNTaWduYWxp
bmdDYWxsYmFjay5oIgotI2luY2x1ZGUgIk1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyLmgiCiAj
aW5jbHVkZSAiUGVlckNvbm5lY3Rpb24uaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgeworI2luY2x1
ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAorbmFtZXNwYWNl
IFdlYkNvcmUgeworCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTUGVlckNvbm5lY3Rp
b25Db25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNQZWVyQ29ubmVjdGlvbihFeGVjU3RhdGUqIGV4ZWMp
CiB7CiAgICAgSlNQZWVyQ29ubmVjdGlvbkNvbnN0cnVjdG9yKiBqc0NvbnN0cnVjdG9yID0gc3Rh
dGljX2Nhc3Q8SlNQZWVyQ29ubmVjdGlvbkNvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpOwor
ICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBqc0NvbnN0cnVjdG9yLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKGV4ZWMsICJQZWVyQ29ubmVj
dGlvbiBjb25zdHJ1Y3RvciBhc3NvY2lhdGVkIGRvY3VtZW50IGlzIHVuYXZhaWxhYmxlIikpOwor
CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDIpCisgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJOb3QgZW5vdWdoIGFyZ3VtZW50
cyIpKTsKIAotICAgIFN0cmluZyBjb25maWd1cmF0aW9uID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMt
PmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBTdHJpbmcgc2VydmVyQ29uZmlndXJh
dGlvbiA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSk7
CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSk7CiAKQEAgLTUyLDE3ICs1Niw4IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgSlNQZWVyQ29ubmVjdGlvbkNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1BlZXJD
b25uZWN0CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAKLSAgICBGcmFtZSogZnJhbWUgPSBhc0pTRE9NV2lu
ZG93KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPmltcGwoKS0+ZnJhbWUoKTsKLSAgICBN
ZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciogZnJhbWVDb250cm9sbGVyID0gZnJhbWUgPyBmcmFt
ZS0+bWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIoKSA6IDA7Ci0KLSAgICBSZWZQdHI8UGVlckNv
bm5lY3Rpb24+IHBlZXJDb25uZWN0aW9uOwotICAgIGlmIChmcmFtZUNvbnRyb2xsZXIpCi0gICAg
ICAgIHBlZXJDb25uZWN0aW9uID0gZnJhbWVDb250cm9sbGVyLT5jcmVhdGVQZWVyQ29ubmVjdGlv
bihjb25maWd1cmF0aW9uLCBzaWduYWxpbmdDYWxsYmFjayk7Ci0KLSAgICBpZiAoIXBlZXJDb25u
ZWN0aW9uKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7Ci0KLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzT2JqZWN0KHRvSlMoZXhlYywganNDb25zdHJ1Y3Rv
ci0+Z2xvYmFsT2JqZWN0KCksIHBlZXJDb25uZWN0aW9uLmdldCgpKSkpOworICAgIFJlZlB0cjxQ
ZWVyQ29ubmVjdGlvbj4gcGVlckNvbm5lY3Rpb24gPSBQZWVyQ29ubmVjdGlvbjo6Y3JlYXRlKHNl
cnZlckNvbmZpZ3VyYXRpb24sIHNpZ25hbGluZ0NhbGxiYWNrLnJlbGVhc2UoKSwgY29udGV4dCk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShDUkVBVEVfRE9NX1dSQVBQRVIoZXhlYywganND
b25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCksIFBlZXJDb25uZWN0aW9uLCBwZWVyQ29ubmVjdGlv
bi5nZXQoKSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhQZWVyQ29ubmVjdGlvbkN1c3RvbS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhQZWVyQ29ubmVjdGlvbkN1c3Rv
bS5jcHAKaW5kZXggOTgxY2RhMS4uYWJhOTE3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4UGVlckNvbm5lY3Rpb25DdXN0b20uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFBlZXJDb25uZWN0aW9uQ3VzdG9tLmNwcApA
QCAtMjgsMTAgKzI4LDYgQEAKIAogI2luY2x1ZGUgIlY4UGVlckNvbm5lY3Rpb24uaCIKIAotI2lu
Y2x1ZGUgIkRPTVdpbmRvdy5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRl
ICJGcmFtZS5oIgotI2luY2x1ZGUgIk1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiUGVlckNvbm5lY3Rpb24uaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRl
ICJWOFByb3h5LmgiCkBAIC00NiwzMCArNDIsMjUgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4
UGVlckNvbm5lY3Rpb246OmNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYK
ICAgICBpZiAoIWFyZ3MuSXNDb25zdHJ1Y3RDYWxsKCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKCJET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlv
bi4iLCBWOFByb3h5OjpUeXBlRXJyb3IpOwogCi0gICAgaW50IGFyZ0xlbmd0aCA9IGFyZ3MuTGVu
Z3RoKCk7Ci0gICAgaWYgKGFyZ0xlbmd0aCAhPSAyKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cigiVGhlIFBlZXJDb25uZWN0aW9uIGNvbnN0cnVjdG9yIHRha2VzIHR3byBhcmd1bWVudHMuIiwg
VjhQcm94eTo6VHlwZUVycm9yKTsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
ID0gZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGlmICghY29udGV4dCkKKyAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoIlBlZXJDb25uZWN0aW9uIGNvbnN0cnVjdG9yIGFzc29jaWF0
ZWQgZG9jdW1lbnQgaXMgdW5hdmFpbGFibGUiLCBWOFByb3h5OjpSZWZlcmVuY2VFcnJvcik7CisK
KyAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDIpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJO
b3QgZW5vdWdoIGFyZ3VtZW50cyIsIFY4UHJveHk6OlR5cGVFcnJvcik7CiAKICAgICB2ODo6VHJ5
Q2F0Y2ggZXhjZXB0aW9uQ2F0Y2hlcjsKLSAgICBTdHJpbmcgY29uZmlndXJhdGlvbiA9IHRvV2Vi
Q29yZVN0cmluZyhhcmdzWzBdLT5Ub1N0cmluZygpKTsKKyAgICBTdHJpbmcgc2VydmVyQ29uZmln
dXJhdGlvbiA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdLT5Ub1N0cmluZygpKTsKICAgICBpZiAo
ZXhjZXB0aW9uQ2F0Y2hlci5IYXNDYXVnaHQoKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3Io
ZXhjZXB0aW9uQ2F0Y2hlci5FeGNlcHRpb24oKSk7CiAKICAgICBib29sIHN1Y2NlZWRlZCA9IGZh
bHNlOwogICAgIFJlZlB0cjxTaWduYWxpbmdDYWxsYmFjaz4gc2lnbmFsaW5nQ2FsbGJhY2sgPSBj
cmVhdGVGdW5jdGlvbk9ubHlDYWxsYmFjazxWOFNpZ25hbGluZ0NhbGxiYWNrPihhcmdzWzFdLCBz
dWNjZWVkZWQpOwogICAgIGlmICghc3VjY2VlZGVkIHx8ICFzaWduYWxpbmdDYWxsYmFjaykKLSAg
ICAgICAgcmV0dXJuIHRocm93RXJyb3IoIlRoZSBQZWVyQ29ubmVjdGlvbiBjb25zdHJ1Y3RvciBt
dXN0IGJlIGdpdmVuIGEgU2lnbmFsaW5nQ2FsbGJhY2sgY2FsbGJhY2suIiwgVjhQcm94eTo6VHlw
ZUVycm9yKTsKLQotICAgIEZyYW1lKiBmcmFtZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JF
bnRlcmVkQ29udGV4dCgpOwotICAgIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKiBmcmFtZUNv
bnRyb2xsZXIgPSBmcmFtZSA/IGZyYW1lLT5tZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcigpIDog
MDsKLQotICAgIFJlZlB0cjxQZWVyQ29ubmVjdGlvbj4gcGVlckNvbm5lY3Rpb247Ci0gICAgaWYg
KGZyYW1lQ29udHJvbGxlcikKLSAgICAgICAgcGVlckNvbm5lY3Rpb24gPSBmcmFtZUNvbnRyb2xs
ZXItPmNyZWF0ZVBlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24sIHNpZ25hbGluZ0NhbGxiYWNr
KTsKLQotICAgIGlmICghcGVlckNvbm5lY3Rpb24pCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZp
bmVkKCk7CiAKKyAgICBSZWZQdHI8UGVlckNvbm5lY3Rpb24+IHBlZXJDb25uZWN0aW9uID0gUGVl
ckNvbm5lY3Rpb246OmNyZWF0ZShzZXJ2ZXJDb25maWd1cmF0aW9uLCBzaWduYWxpbmdDYWxsYmFj
ay5yZWxlYXNlKCksIGNvbnRleHQpOworCiAgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVy
KGFyZ3MuSG9sZGVyKCksICZpbmZvLCBwZWVyQ29ubmVjdGlvbi5nZXQoKSk7CiAgICAgcmV0dXJu
IHRvVjgocGVlckNvbm5lY3Rpb24ucmVsZWFzZSgpLCBhcmdzLkhvbGRlcigpKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NZWRpYVN0cmVhbUxpc3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL01lZGlhU3RyZWFtTGlzdC5jcHAKaW5kZXggZDNhZDk0Ni4uZWNkMWRjYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL01lZGlhU3RyZWFtTGlzdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL01lZGlhU3RyZWFtTGlzdC5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ3LDQ3ICs0OCwyOCBAQCB1bnNpZ25l
ZCBNZWRpYVN0cmVhbUxpc3Q6Omxlbmd0aCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fc3RyZWFtcy5z
aXplKCk7CiB9CiAKLVBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+IE1lZGlhU3RyZWFtTGlzdDo6aXRl
bSh1bnNpZ25lZCBpbmRleCkgY29uc3QKK01lZGlhU3RyZWFtKiBNZWRpYVN0cmVhbUxpc3Q6Oml0
ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0CiB7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxN
ZWRpYVN0cmVhbT4gPjo6Y29uc3RfaXRlcmF0b3IgaSA9IG1fc3RyZWFtcy5iZWdpbigpOwotICAg
IGZvciAodW5zaWduZWQgaiA9IDA7IGkgIT0gbV9zdHJlYW1zLmVuZCgpOyArK2ksICsraikgewot
ICAgICAgICBpZiAoaiA9PSBpbmRleCkKLSAgICAgICAgICAgIHJldHVybiBpLT5zZWNvbmQ7Ci0g
ICAgfQotICAgIHJldHVybiBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPigpOworICAgIHJldHVybiBt
X3N0cmVhbXNbaW5kZXhdLmdldCgpOwogfQogCi12b2lkIE1lZGlhU3RyZWFtTGlzdDo6YWRkKFBh
c3NSZWZQdHI8TWVkaWFTdHJlYW0+IHN0cmVhbSkKK3ZvaWQgTWVkaWFTdHJlYW1MaXN0OjphcHBl
bmQoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4gc3RyZWFtKQogewotICAgIFJlZlB0cjxNZWRpYVN0
cmVhbT4gcyA9IHN0cmVhbTsKLSAgICBBU1NFUlQoIWNvbnRhaW5zKHMpKTsKLSAgICBtX3N0cmVh
bXMuYWRkKHMtPmxhYmVsKCksIHMpOworICAgIG1fc3RyZWFtcy5hcHBlbmQoc3RyZWFtKTsKIH0K
IAotdm9pZCBNZWRpYVN0cmVhbUxpc3Q6OnJlbW92ZShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPiBz
dHJlYW0pCit2b2lkIE1lZGlhU3RyZWFtTGlzdDo6cmVtb3ZlKGNvbnN0IFJlZlB0cjxNZWRpYVN0
cmVhbT4mIHN0cmVhbSkKIHsKLSAgICBSZWZQdHI8TWVkaWFTdHJlYW0+IHMgPSBzdHJlYW07Ci0g
ICAgQVNTRVJUKGNvbnRhaW5zKHMpKTsKLSAgICBtX3N0cmVhbXMucmVtb3ZlKHMtPmxhYmVsKCkp
OworICAgIHNpemVfdCBpID0gbV9zdHJlYW1zLmZpbmQoc3RyZWFtKTsKKyAgICBpZiAoaSAhPSBu
b3RGb3VuZCkKKyAgICAgICAgcmV0dXJuIG1fc3RyZWFtcy5yZW1vdmUoaSk7CiB9CiAKLWJvb2wg
TWVkaWFTdHJlYW1MaXN0Ojpjb250YWlucyhQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPiBzdHJlYW0p
IGNvbnN0Citib29sIE1lZGlhU3RyZWFtTGlzdDo6Y29udGFpbnMoY29uc3QgUmVmUHRyPE1lZGlh
U3RyZWFtPiYgc3RyZWFtKSBjb25zdAogewotICAgIFJlZlB0cjxNZWRpYVN0cmVhbT4gcyA9IHN0
cmVhbTsKLSAgICByZXR1cm4gbV9zdHJlYW1zLmNvbnRhaW5zKHMtPmxhYmVsKCkpOworICAgIHJl
dHVybiBtX3N0cmVhbXMuZmluZChzdHJlYW0pICE9IG5vdEZvdW5kOwogfQogCi1ib29sIE1lZGlh
U3RyZWFtTGlzdDo6Y29udGFpbnMoY29uc3QgU3RyaW5nJiBsYWJlbCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9zdHJlYW1zLmNvbnRhaW5zKGxhYmVsKTsKLX0KLQotUGFzc1JlZlB0cjxNZWRpYVN0
cmVhbT4gTWVkaWFTdHJlYW1MaXN0OjpnZXQoY29uc3QgU3RyaW5nJiBsYWJlbCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9zdHJlYW1zLmdldChsYWJlbCk7Ci19Ci0KLQogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9NZWRpYVN0cmVhbUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9N
ZWRpYVN0cmVhbUxpc3QuaAppbmRleCA3MzIwZmRkLi45ODU1NjJjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTWVkaWFTdHJlYW1MaXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L01lZGlhU3RyZWFtTGlzdC5oCkBAIC0yOCwxMCArMjgsNiBAQAogI2lmIEVOQUJMRShNRURJQV9T
VFJFQU0pCiAKICNpbmNsdWRlICJNZWRpYVN0cmVhbS5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC00MiwxOSArMzgsMTcgQEAgcHVibGljOgogCiAgICAgLy8gRE9NIG1ldGhvZHMgJiBhdHRyaWJ1
dGVzIGZvciBNZWRpYVN0cmVhbUxpc3QKICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKLSAg
ICBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPiBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKyAg
ICBNZWRpYVN0cmVhbSogaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CiAKICAgICAvLyBMaXN0
IG1hbmlwdWxhdGlvbgotICAgIHZvaWQgYWRkKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+KTsKLSAg
ICB2b2lkIHJlbW92ZShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPik7Ci0gICAgYm9vbCBjb250YWlu
cyhQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPikgY29uc3Q7Ci0gICAgYm9vbCBjb250YWlucyhjb25z
dCBTdHJpbmcmIGxhYmVsKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPiBnZXQo
Y29uc3QgU3RyaW5nJiBsYWJlbCkgY29uc3Q7CisgICAgdm9pZCBhcHBlbmQoUGFzc1JlZlB0cjxN
ZWRpYVN0cmVhbT4pOworICAgIHZvaWQgcmVtb3ZlKGNvbnN0IFJlZlB0cjxNZWRpYVN0cmVhbT4m
KTsKKyAgICBib29sIGNvbnRhaW5zKGNvbnN0IFJlZlB0cjxNZWRpYVN0cmVhbT4mKSBjb25zdDsK
IAogcHJpdmF0ZToKICAgICBNZWRpYVN0cmVhbUxpc3QoKTsKIAotICAgIEhhc2hNYXA8U3RyaW5n
LCBSZWZQdHI8TWVkaWFTdHJlYW0+ID4gbV9zdHJlYW1zOworICAgIFZlY3RvcjxSZWZQdHI8TWVk
aWFTdHJlYW0+ID4gbV9zdHJlYW1zOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcDJwL1BlZXJDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3AycC9QZWVyQ29ubmVjdGlvbi5jcHAKaW5kZXggYmRhM2VlMy4uNWQ4MDY1YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcDJwL1BlZXJDb25uZWN0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wMnAvUGVlckNvbm5lY3Rpb24uY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw2MSArMjgsNDEgQEAKIAogI2lmIEVO
QUJMRShNRURJQV9TVFJFQU0pCiAKLSNpbmNsdWRlICJEaXNwYXRjaFRhc2suaCIKLSNpbmNsdWRl
ICJFcnJvckV2ZW50LmgiCi0jaW5jbHVkZSAiRXZlbnQuaCIKLSNpbmNsdWRlICJFdmVudE5hbWVz
LmgiCi0jaW5jbHVkZSAiTWVkaWFTdHJlYW0uaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgi
CiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1FdmVudC5oIgotI2luY2x1ZGUgIk1lZGlhU3RyZWFtTGlz
dC5oIgogI2luY2x1ZGUgIk1lc3NhZ2VFdmVudC5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuaCIKLSNpbmNsdWRlICJTaWduYWxpbmdDYWxsYmFjay5oIgorI2luY2x1ZGUgIlNl
Y3VyaXR5T3JpZ2luLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxQZWVy
Q29ubmVjdGlvbj4gUGVlckNvbm5lY3Rpb246OmNyZWF0ZShNZWRpYVN0cmVhbUZyYW1lQ29udHJv
bGxlciogZnJhbWVDb250cm9sbGVyLCBpbnQgaWQsIGNvbnN0IFN0cmluZyYgY29uZmlndXJhdGlv
biwgUGFzc1JlZlB0cjxTaWduYWxpbmdDYWxsYmFjaz4gc2lnbmFsaW5nQ2FsbGJhY2spCitQYXNz
UmVmUHRyPFBlZXJDb25uZWN0aW9uPiBQZWVyQ29ubmVjdGlvbjo6Y3JlYXRlKGNvbnN0IFN0cmlu
ZyYgc2VydmVyQ29uZmlndXJhdGlvbiwgUGFzc1JlZlB0cjxTaWduYWxpbmdDYWxsYmFjaz4gc2ln
bmFsaW5nQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAg
Ly8gRklYTUU6IFZlcmlmeSB0aGF0IGNvbmZpZ3VyYXRpb24gZm9sbG93cyB0aGUgc3BlY2lmaWVk
IGZvcm1hdCwgaWYgbm90IHJldHVybiBudWxsLgorICAgIFJlZlB0cjxQZWVyQ29ubmVjdGlvbj4g
Y29ubmVjdGlvbiA9IGFkb3B0UmVmKG5ldyBQZWVyQ29ubmVjdGlvbihzZXJ2ZXJDb25maWd1cmF0
aW9uLCBzaWduYWxpbmdDYWxsYmFjaywgY29udGV4dCkpOworICAgIGNvbm5lY3Rpb24tPnNldFBl
bmRpbmdBY3Rpdml0eShjb25uZWN0aW9uLmdldCgpKTsKKyAgICBjb25uZWN0aW9uLT5zY2hlZHVs
ZUluaXRpYWxOZWdvdGlhdGlvbigpOwogCi0gICAgUmVmUHRyPFBlZXJDb25uZWN0aW9uPiBwZWVy
Q29ubmVjdGlvbiA9IGFkb3B0UmVmKG5ldyBQZWVyQ29ubmVjdGlvbihmcmFtZUNvbnRyb2xsZXIs
IGlkLCBjb25maWd1cmF0aW9uLCBzaWduYWxpbmdDYWxsYmFjaykpOwotICAgIHBlZXJDb25uZWN0
aW9uLT5pbml0KCk7Ci0gICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnJlbGVhc2UoKTsKKyAgICBy
ZXR1cm4gY29ubmVjdGlvbi5yZWxlYXNlKCk7CiB9CiAKLVBlZXJDb25uZWN0aW9uOjpQZWVyQ29u
bmVjdGlvbihNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciogZnJhbWVDb250cm9sbGVyLCBpbnQg
aWQsIGNvbnN0IFN0cmluZyYgY29uZmlndXJhdGlvbiwgUGFzc1JlZlB0cjxTaWduYWxpbmdDYWxs
YmFjaz4gc2lnbmFsaW5nQ2FsbGJhY2spCi0gICAgOiBQZWVyQ29ubmVjdGlvbkNsaWVudChmcmFt
ZUNvbnRyb2xsZXIsIGlkKQotICAgICwgbV9jb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24pCi0g
ICAgLCBtX3JlYWR5U3RhdGUoTkVXKQorUGVlckNvbm5lY3Rpb246OlBlZXJDb25uZWN0aW9uKGNv
bnN0IFN0cmluZyYgc2VydmVyQ29uZmlndXJhdGlvbiwgUGFzc1JlZlB0cjxTaWduYWxpbmdDYWxs
YmFjaz4gc2lnbmFsaW5nQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQp
CisgICAgOiBBY3RpdmVET01PYmplY3QoY29udGV4dCwgdGhpcykKICAgICAsIG1fc2lnbmFsaW5n
Q2FsbGJhY2soc2lnbmFsaW5nQ2FsbGJhY2spCisgICAgLCBtX3JlYWR5U3RhdGUoTkVXKQorICAg
ICwgbV9pY2VTdGFydGVkKGZhbHNlKQorICAgICwgbV9sb2NhbFN0cmVhbXMoTWVkaWFTdHJlYW1M
aXN0OjpjcmVhdGUoKSkKKyAgICAsIG1fcmVtb3RlU3RyZWFtcyhNZWRpYVN0cmVhbUxpc3Q6OmNy
ZWF0ZSgpKQorICAgICwgbV9pbml0aWFsTmVnb3RpYXRpb25UaW1lcih0aGlzLCAmUGVlckNvbm5l
Y3Rpb246OmluaXRpYWxOZWdvdGlhdGlvblRpbWVyRmlyZWQpCisgICAgLCBtX3N0cmVhbUNoYW5n
ZVRpbWVyKHRoaXMsICZQZWVyQ29ubmVjdGlvbjo6c3RyZWFtQ2hhbmdlVGltZXJGaXJlZCkKKyAg
ICAsIG1fcmVhZHlTdGF0ZUNoYW5nZVRpbWVyKHRoaXMsICZQZWVyQ29ubmVjdGlvbjo6cmVhZHlT
dGF0ZUNoYW5nZVRpbWVyRmlyZWQpCisgICAgLCBtX3BlZXJIYW5kbGVyKFBlZXJIYW5kbGVyOjpj
cmVhdGUodGhpcywgc2VydmVyQ29uZmlndXJhdGlvbiwgY29udGV4dC0+c2VjdXJpdHlPcmlnaW4o
KS0+dG9TdHJpbmcoKSkpCiB7Ci0gICAgQVNTRVJUKGZyYW1lQ29udHJvbGxlcik7Ci0gICAgbV9s
b2NhbFN0cmVhbUxpc3QgPSBNZWRpYVN0cmVhbUxpc3Q6OmNyZWF0ZSgpOwotICAgIG1fcmVtb3Rl
U3RyZWFtTGlzdCA9IE1lZGlhU3RyZWFtTGlzdDo6Y3JlYXRlKCk7Ci19Ci0KLXZvaWQgUGVlckNv
bm5lY3Rpb246OmluaXQoKQotewotICAgIGlmIChNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciog
ZnJhbWVDb250cm9sbGVyID0gbWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIoKSkKLSAgICAgICAg
ZnJhbWVDb250cm9sbGVyLT5uZXdQZWVyQ29ubmVjdGlvbihtX2NsaWVudElkLCBtX2NvbmZpZ3Vy
YXRpb24pOwotCi0gICAgcG9zdFN0YXJ0TmVnb3RpYXRpb25UYXNrKCk7CiB9CiAKIFBlZXJDb25u
ZWN0aW9uOjp+UGVlckNvbm5lY3Rpb24oKQogewogfQogCi1NZWRpYVN0cmVhbUxpc3QqIFBlZXJD
b25uZWN0aW9uOjpsb2NhbFN0cmVhbXMoKQotewotICAgIHJldHVybiBtX2xvY2FsU3RyZWFtTGlz
dC5nZXQoKTsKLX0KLQotTWVkaWFTdHJlYW1MaXN0KiBQZWVyQ29ubmVjdGlvbjo6cmVtb3RlU3Ry
ZWFtcygpCi17Ci0gICAgcmV0dXJuIG1fcmVtb3RlU3RyZWFtTGlzdC5nZXQoKTsKLX0KLQogdm9p
ZCBQZWVyQ29ubmVjdGlvbjo6cHJvY2Vzc1NpZ25hbGluZ01lc3NhZ2UoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAobV9yZWFkeVN0YXRlID09IENM
T1NFRCkgewpAQCAtODksOCArNzAsMjggQEAgdm9pZCBQZWVyQ29ubmVjdGlvbjo6cHJvY2Vzc1Np
Z25hbGluZ01lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBFeGNlcHRpb25Db2QKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcigp
KQotICAgICAgICBtZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcigpLT5wcm9jZXNzU2lnbmFsaW5n
TWVzc2FnZShtX2NsaWVudElkLCBtZXNzYWdlKTsKKyAgICBpZiAoIW1lc3NhZ2Uuc3RhcnRzV2l0
aCgiU0RQXG4iKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RyaW5nIHNkcCA9IG1lc3NhZ2Uu
c3Vic3RyaW5nKDQpOworCisgICAgaWYgKG1faWNlU3RhcnRlZCkgeworICAgICAgICBpZiAobV9w
ZWVySGFuZGxlcikKKyAgICAgICAgICAgIG1fcGVlckhhbmRsZXItPnByb2Nlc3NTRFAoc2RwKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3BlZXJIYW5kbGVyKQorICAgICAg
ICBtX3BlZXJIYW5kbGVyLT5oYW5kbGVJbml0aWFsT2ZmZXIoc2RwKTsKKworICAgIHNjaGVkdWxl
U3RyZWFtQ2hhbmdlKCk7CisgICAgbV9pY2VTdGFydGVkID0gdHJ1ZTsKKyAgICBzY2hlZHVsZVJl
YWR5U3RhdGVDaGFuZ2UoTkVHT1RJQVRJTkcpOworfQorCitQZWVyQ29ubmVjdGlvbjo6UmVhZHlT
dGF0ZSBQZWVyQ29ubmVjdGlvbjo6cmVhZHlTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
cmVhZHlTdGF0ZTsKIH0KIAogdm9pZCBQZWVyQ29ubmVjdGlvbjo6c2VuZChjb25zdCBTdHJpbmcm
IHRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTAwLDU0ICsxMDEsODIgQEAgdm9pZCBQZWVy
Q29ubmVjdGlvbjo6c2VuZChjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgQ1N0cmluZyB1dGY4ID0gdGV4dC51dGY4KCk7
Ci0gICAgaWYgKHV0ZjgubGVuZ3RoKCkgPiBrTWF4TWVzc2FnZVVURjhMZW5ndGgpIHsKKyAgICBD
U3RyaW5nIGRhdGEgPSB0ZXh0LnV0ZjgoKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBkYXRhLmxl
bmd0aCgpOworCisgICAgaWYgKGxlbmd0aCA+IGtNYXhNZXNzYWdlVVRGOExlbmd0aCkgewogICAg
ICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGlmIChtZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcigpKQotICAgICAgICBtZWRpYVN0cmVh
bUZyYW1lQ29udHJvbGxlcigpLT5tZXNzYWdlKG1fY2xpZW50SWQsIHRleHQpOworICAgIGlmICht
X3BlZXJIYW5kbGVyKQorICAgICAgICBtX3BlZXJIYW5kbGVyLT5zZW5kRGF0YVN0cmVhbU1lc3Nh
Z2UoZGF0YS5kYXRhKCksIGxlbmd0aCk7CiB9CiAKLXZvaWQgUGVlckNvbm5lY3Rpb246OmFkZFN0
cmVhbShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPiBwcnBTdHJlYW0sIEV4Y2VwdGlvbkNvZGUmIGVj
KQordm9pZCBQZWVyQ29ubmVjdGlvbjo6YWRkU3RyZWFtKGNvbnN0IFBhc3NSZWZQdHI8TWVkaWFT
dHJlYW0+IHBycFN0cmVhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKG1fcmVhZHlT
dGF0ZSA9PSBDTE9TRUQpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIFRoZSBTdHJlYW0gb2JqZWN0IGlzIGd1YXJhbnRl
ZWQgdG8gZXhpc3Qgc2luY2UgU3RyaWN0VHlwZUNoZWNraW5nIGlzIHNldCBpbiB0aGUgaWRsLgor
ICAgIC8vIFRoZSBNZWRpYVN0cmVhbSBvYmplY3QgaXMgZ3VhcmFudGVlZCB0byBleGlzdCBzaW5j
ZSBTdHJpY3RUeXBlQ2hlY2tpbmcgaXMgc2V0IGluIHRoZSBpZGwuCiAKICAgICBSZWZQdHI8TWVk
aWFTdHJlYW0+IHN0cmVhbSA9IHBycFN0cmVhbTsKIAotICAgIGlmIChtX2xvY2FsU3RyZWFtTGlz
dC0+Y29udGFpbnMoc3RyZWFtKSkKKyAgICBpZiAobV9sb2NhbFN0cmVhbXMtPmNvbnRhaW5zKHN0
cmVhbSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fbG9jYWxTdHJlYW1MaXN0LT5hZGQoc3Ry
ZWFtKTsKKyAgICBtX2xvY2FsU3RyZWFtcy0+YXBwZW5kKHN0cmVhbSk7CisKKyAgICAvLyBGSVhN
RTogZ2V0IGZyb20gc3RyZWFtLT5kZXNjcmlwdG9yKCkgd2hlbiBpdCdzIGF2YWlsYWJsZSwgc2Vl
IGh0dHA6Ly93ZWJraXQub3JnL2IvNjg0NjQKKyAgICBNZWRpYVN0cmVhbURlc2NyaXB0b3IqIHN0
cmVhbURlc2NyaXB0b3IgPSAwOworICAgIHNpemVfdCBpID0gbV9wZW5kaW5nUmVtb3ZlU3RyZWFt
cy5maW5kKHN0cmVhbURlc2NyaXB0b3IpOworICAgIGlmIChpICE9IG5vdEZvdW5kKSB7CisgICAg
ICAgIG1fcGVuZGluZ1JlbW92ZVN0cmVhbXMucmVtb3ZlKGkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQogCi0gICAgaWYgKG1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKCkpCi0gICAgICAgIG1l
ZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKCktPmFkZFN0cmVhbShtX2NsaWVudElkLCBzdHJlYW0p
OworICAgIG1fcGVuZGluZ0FkZFN0cmVhbXMuYXBwZW5kKHN0cmVhbURlc2NyaXB0b3IpOworICAg
IGlmIChtX2ljZVN0YXJ0ZWQpCisgICAgICAgIHNjaGVkdWxlU3RyZWFtQ2hhbmdlKCk7CiB9CiAK
LXZvaWQgUGVlckNvbm5lY3Rpb246OnJlbW92ZVN0cmVhbShQYXNzUmVmUHRyPE1lZGlhU3RyZWFt
PiBwcnBTdHJlYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBQZWVyQ29ubmVjdGlvbjo6cmVt
b3ZlU3RyZWFtKE1lZGlhU3RyZWFtKiBzdHJlYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAg
IGlmIChtX3JlYWR5U3RhdGUgPT0gQ0xPU0VEKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFU
RV9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyBUaGUgU3RyZWFtIG9iamVj
dCBpcyBndWFyYW50ZWVkIHRvIGV4aXN0IHNpbmNlIFN0cmljdFR5cGVDaGVja2luZyBpcyBzZXQg
aW4gdGhlIGlkbC4KKyAgICAvLyBUaGUgTWVkaWFTdHJlYW0gb2JqZWN0IGlzIGd1YXJhbnRlZWQg
dG8gZXhpc3Qgc2luY2UgU3RyaWN0VHlwZUNoZWNraW5nIGlzIHNldCBpbiB0aGUgaWRsLgogCi0g
ICAgUmVmUHRyPE1lZGlhU3RyZWFtPiBzdHJlYW0gPSBwcnBTdHJlYW07CisgICAgaWYgKCFtX2xv
Y2FsU3RyZWFtcy0+Y29udGFpbnMoc3RyZWFtKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9s
b2NhbFN0cmVhbXMtPnJlbW92ZShzdHJlYW0pOwogCi0gICAgaWYgKCFtX2xvY2FsU3RyZWFtTGlz
dC0+Y29udGFpbnMoc3RyZWFtKSkKKyAgICAvLyBGSVhNRTogZ2V0IGZyb20gc3RyZWFtLT5kZXNj
cmlwdG9yKCkgd2hlbiBpdCdzIGF2YWlsYWJsZSwgc2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvNjg0
NjQKKyAgICBNZWRpYVN0cmVhbURlc2NyaXB0b3IqIHN0cmVhbURlc2NyaXB0b3IgPSAwOworICAg
IHNpemVfdCBpID0gbV9wZW5kaW5nQWRkU3RyZWFtcy5maW5kKHN0cmVhbURlc2NyaXB0b3IpOwor
ICAgIGlmIChpICE9IG5vdEZvdW5kKSB7CisgICAgICAgIG1fcGVuZGluZ0FkZFN0cmVhbXMucmVt
b3ZlKGkpOwogICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgbV9sb2NhbFN0cmVhbUxpc3Qt
PnJlbW92ZShzdHJlYW0pOworICAgIG1fcGVuZGluZ1JlbW92ZVN0cmVhbXMuYXBwZW5kKHN0cmVh
bURlc2NyaXB0b3IpOworICAgIGlmIChtX2ljZVN0YXJ0ZWQpCisgICAgICAgIHNjaGVkdWxlU3Ry
ZWFtQ2hhbmdlKCk7Cit9CiAKLSAgICBpZiAobWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIoKSkK
LSAgICAgICAgbWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIoKS0+cmVtb3ZlU3RyZWFtKG1fY2xp
ZW50SWQsIHN0cmVhbSk7CitNZWRpYVN0cmVhbUxpc3QqIFBlZXJDb25uZWN0aW9uOjpsb2NhbFN0
cmVhbXMoKSBjb25zdAoreworICAgIHJldHVybiBtX2xvY2FsU3RyZWFtcy5nZXQoKTsKK30KKwor
TWVkaWFTdHJlYW1MaXN0KiBQZWVyQ29ubmVjdGlvbjo6cmVtb3RlU3RyZWFtcygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fcmVtb3RlU3RyZWFtcy5nZXQoKTsKIH0KIAogdm9pZCBQZWVyQ29ubmVj
dGlvbjo6Y2xvc2UoRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0xNTcsNTAgKzE4Niw1NiBAQCB2b2lk
IFBlZXJDb25uZWN0aW9uOjpjbG9zZShFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGlmIChtZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcigpKQotICAgICAg
ICBtZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcigpLT5jbG9zZVBlZXJDb25uZWN0aW9uKG1fY2xp
ZW50SWQpOwotCi0gICAgbV9yZWFkeVN0YXRlID0gQ0xPU0VEOworICAgIHN0b3AoKTsKIH0KIAot
dm9pZCBQZWVyQ29ubmVjdGlvbjo6b25OZWdvdGlhdGlvblN0YXJ0ZWQoKQordm9pZCBQZWVyQ29u
bmVjdGlvbjo6aWNlUHJvY2Vzc2luZ0NvbXBsZXRlZCgpCiB7Ci0gICAgbV9yZWFkeVN0YXRlID0g
TkVHT1RJQVRJTkc7Ci0KLSAgICBwb3N0U2ltcGxlRXZlbnQoZXZlbnROYW1lcygpLmNvbm5lY3Rp
bmdFdmVudCk7CisgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0
VGhyZWFkKCkpOworICAgIGNoYW5nZVJlYWR5U3RhdGUoQUNUSVZFKTsKIH0KIAotdm9pZCBQZWVy
Q29ubmVjdGlvbjo6b25OZWdvdGlhdGlvbkRvbmUoKQordm9pZCBQZWVyQ29ubmVjdGlvbjo6c2Rw
R2VuZXJhdGVkKGNvbnN0IFN0cmluZyYgc2RwKQogewotICAgIG1fcmVhZHlTdGF0ZSA9IEFDVElW
RTsKLQotICAgIHBvc3RTaW1wbGVFdmVudChldmVudE5hbWVzKCkub3BlbkV2ZW50KTsKKyAgICBB
U1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAg
bV9zaWduYWxpbmdDYWxsYmFjay0+aGFuZGxlRXZlbnQoIlNEUFxuIiArIHNkcCwgdGhpcyk7CiB9
CiAKLXZvaWQgUGVlckNvbm5lY3Rpb246OnN0cmVhbUFkZGVkKFBhc3NSZWZQdHI8TWVkaWFTdHJl
YW0+IHBycFN0cmVhbSkKK3ZvaWQgUGVlckNvbm5lY3Rpb246OmRhdGFTdHJlYW1NZXNzYWdlUmVj
ZWl2ZWQoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIFJlZlB0cjxN
ZWRpYVN0cmVhbT4gc3RyZWFtID0gcHJwU3RyZWFtOwotICAgIG1fcmVtb3RlU3RyZWFtTGlzdC0+
YWRkKHN0cmVhbSk7Ci0gICAgcG9zdFN0cmVhbUFkZGVkRXZlbnQoc3RyZWFtKTsKKyAgICBBU1NF
UlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgY29u
c3QgU3RyaW5nJiBtZXNzYWdlID0gU3RyaW5nOjpmcm9tVVRGOChkYXRhLCBsZW5ndGgpOworICAg
IGRpc3BhdGNoRXZlbnQoTWVzc2FnZUV2ZW50OjpjcmVhdGUoUGFzc093blB0cjxNZXNzYWdlUG9y
dEFycmF5PigpLCBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShtZXNzYWdlKSkpOwogfQog
Ci12b2lkIFBlZXJDb25uZWN0aW9uOjpzdHJlYW1SZW1vdmVkKGNvbnN0IFN0cmluZyYgc3RyZWFt
TGFiZWwpCit2b2lkIFBlZXJDb25uZWN0aW9uOjpyZW1vdGVTdHJlYW1BZGRlZChQYXNzUmVmUHRy
PE1lZGlhU3RyZWFtRGVzY3JpcHRvcj4gc3RyZWFtRGVzY3JpcHRvcikKIHsKLSAgICBBU1NFUlQo
bV9yZW1vdGVTdHJlYW1MaXN0LT5jb250YWlucyhzdHJlYW1MYWJlbCkpOworICAgIEFTU0VSVChz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKIAotICAgIFJlZlB0
cjxNZWRpYVN0cmVhbT4gc3RyZWFtID0gbV9yZW1vdGVTdHJlYW1MaXN0LT5nZXQoc3RyZWFtTGFi
ZWwpOwotICAgIG1fcmVtb3RlU3RyZWFtTGlzdC0+cmVtb3ZlKHN0cmVhbSk7Ci0gICAgcG9zdFN0
cmVhbVJlbW92ZWRFdmVudChzdHJlYW0pOwotfQorICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gQ0xP
U0VEKQorICAgICAgICByZXR1cm47CiAKLXZvaWQgUGVlckNvbm5lY3Rpb246Om9uTWVzc2FnZShj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgcG9zdE1lc3NhZ2VFdmVudChtZXNzYWdlKTsK
KyAgICAvLyBGSVhNRTogY3JlYXRlIGEgbmV3IE1lZGlhU3RyZWFtIGZyb20gdGhlIHN0cmVhbURl
c2NyaXB0b3Igb25jZSBpdCdzIHBvc3NpYmxlLCBzZWUgaHR0cDovL3dlYmtpdC5vcmcvYi82ODQ2
NAorICAgIFJlZlB0cjxNZWRpYVN0cmVhbT4gc3RyZWFtID0gMDsKKyAgICBtX3JlbW90ZVN0cmVh
bXMtPmFwcGVuZChzdHJlYW0pOworCisgICAgZGlzcGF0Y2hFdmVudChNZWRpYVN0cmVhbUV2ZW50
OjpjcmVhdGUoZXZlbnROYW1lcygpLmFkZHN0cmVhbUV2ZW50LCBmYWxzZSwgZmFsc2UsIHN0cmVh
bSkpOwogfQogCi12b2lkIFBlZXJDb25uZWN0aW9uOjpvblNpZ25hbGluZ01lc3NhZ2UoY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKQordm9pZCBQZWVyQ29ubmVjdGlvbjo6cmVtb3RlU3RyZWFtUmVtb3Zl
ZChNZWRpYVN0cmVhbURlc2NyaXB0b3IqIHN0cmVhbURlc2NyaXB0b3IpCiB7Ci0gICAgcG9zdFNp
Z25hbGluZ0V2ZW50KG1lc3NhZ2UpOworICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCktPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBBU1NFUlQoc3RyZWFtRGVzY3JpcHRvci0+b3du
ZXIgJiYgbV9yZW1vdGVTdHJlYW1zLT5jb250YWlucyhzdHJlYW1EZXNjcmlwdG9yLT5vd25lcikp
OworCisgICAgc3RyZWFtRGVzY3JpcHRvci0+b3duZXItPnN0cmVhbUVuZGVkKCk7CisKKyAgICBp
ZiAobV9yZWFkeVN0YXRlID09IENMT1NFRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRy
PE1lZGlhU3RyZWFtPiBzdHJlYW0gPSBzdHJlYW1EZXNjcmlwdG9yLT5vd25lcjsKKyAgICBtX3Jl
bW90ZVN0cmVhbXMtPnJlbW92ZShzdHJlYW0pOworCisgICAgZGlzcGF0Y2hFdmVudChNZWRpYVN0
cmVhbUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnJlbW92ZXN0cmVhbUV2ZW50LCBmYWxzZSwg
ZmFsc2UsIHN0cmVhbSkpOwogfQogCiBQZWVyQ29ubmVjdGlvbiogUGVlckNvbm5lY3Rpb246OnRv
UGVlckNvbm5lY3Rpb24oKQpAQCAtMjEwLDcgKzI0NSwyNSBAQCBQZWVyQ29ubmVjdGlvbiogUGVl
ckNvbm5lY3Rpb246OnRvUGVlckNvbm5lY3Rpb24oKQogCiBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBQZWVyQ29ubmVjdGlvbjo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKCkgPyBtZWRpYVN0cmVhbUZyYW1lQ29u
dHJvbGxlcigpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgOiAwOworICAgIHJldHVybiBBY3Rp
dmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKK30KKwordm9pZCBQZWVyQ29u
bmVjdGlvbjo6c3RvcCgpCit7CisgICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBDTE9TRUQpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1faW5pdGlhbE5lZ290aWF0aW9uVGltZXIuc3RvcCgpOworICAg
IG1fc3RyZWFtQ2hhbmdlVGltZXIuc3RvcCgpOworICAgIG1fcmVhZHlTdGF0ZUNoYW5nZVRpbWVy
LnN0b3AoKTsKKworICAgIGlmIChtX3BlZXJIYW5kbGVyKQorICAgICAgICBtX3BlZXJIYW5kbGVy
LT5zdG9wKCk7CisKKyAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKyAgICBtX3BlZXJI
YW5kbGVyLmNsZWFyKCk7CisKKyAgICBjaGFuZ2VSZWFkeVN0YXRlKENMT1NFRCk7CiB9CiAKIEV2
ZW50VGFyZ2V0RGF0YSogUGVlckNvbm5lY3Rpb246OmV2ZW50VGFyZ2V0RGF0YSgpCkBAIC0yMjMs
ODggKzI3Niw4NiBAQCBFdmVudFRhcmdldERhdGEqIFBlZXJDb25uZWN0aW9uOjplbnN1cmVFdmVu
dFRhcmdldERhdGEoKQogICAgIHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7CiB9CiAKLXZvaWQg
UGVlckNvbm5lY3Rpb246OnBvc3RNZXNzYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQor
dm9pZCBQZWVyQ29ubmVjdGlvbjo6c2NoZWR1bGVJbml0aWFsTmVnb3RpYXRpb24oKQogewotICAg
IFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEgPSBTZXJpYWxpemVkU2NyaXB0VmFs
dWU6OmNyZWF0ZShtZXNzYWdlKTsKLQotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAg
ICByZXR1cm47Ci0gICAgQVNTRVJUKGNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKLSAgICBj
b250ZXh0LT5wb3N0VGFzayhEaXNwYXRjaFRhc2s8UGVlckNvbm5lY3Rpb24sIGludCwgU2VyaWFs
aXplZFNjcmlwdFZhbHVlPjo6Y3JlYXRlKHRoaXMsICZQZWVyQ29ubmVjdGlvbjo6ZGlzcGF0Y2hN
ZXNzYWdlRXZlbnQsIDAsIGRhdGEucmVsZWFzZSgpKSk7CisgICAgaWYgKCFtX2luaXRpYWxOZWdv
dGlhdGlvblRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1faW5pdGlhbE5lZ290aWF0aW9uVGlt
ZXIuc3RhcnRPbmVTaG90KDApOwogfQogCi12b2lkIFBlZXJDb25uZWN0aW9uOjpwb3N0U2lnbmFs
aW5nRXZlbnQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQordm9pZCBQZWVyQ29ubmVjdGlvbjo6aW5p
dGlhbE5lZ290aWF0aW9uVGltZXJGaXJlZChUaW1lcjxQZWVyQ29ubmVjdGlvbj4qKQogewotICAg
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7Ci0gICAgaWYgKCFjb250ZXh0KQorICAgIGlmIChtX2ljZVN0YXJ0ZWQpCiAgICAgICAgIHJl
dHVybjsKLSAgICBBU1NFUlQoY29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwotICAgIGNvbnRl
eHQtPnBvc3RUYXNrKFNpbXBsZURpc3BhdGNoVGFzazxQZWVyQ29ubmVjdGlvbiwgU3RyaW5nPjo6
Y3JlYXRlKHRoaXMsICZQZWVyQ29ubmVjdGlvbjo6ZGlzcGF0Y2hTaWduYWxpbmdFdmVudCwgbWVz
c2FnZSkpOwotfQogCi12b2lkIFBlZXJDb25uZWN0aW9uOjpwb3N0U3RyZWFtQWRkZWRFdmVudChQ
YXNzUmVmUHRyPE1lZGlhU3RyZWFtPiBwcnBTdHJlYW0pCi17Ci0gICAgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBpZiAoIWNv
bnRleHQpCi0gICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQoY29udGV4dC0+aXNDb250ZXh0VGhy
ZWFkKCkpOwotICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+cG9zdFRhc2soRGlzcGF0Y2hU
YXNrPFBlZXJDb25uZWN0aW9uLCBTdHJpbmcsIE1lZGlhU3RyZWFtPjo6Y3JlYXRlKHRoaXMsICZQ
ZWVyQ29ubmVjdGlvbjo6ZGlzcGF0Y2hTdHJlYW1FdmVudCwgZXZlbnROYW1lcygpLmFkZHN0cmVh
bUV2ZW50LCBwcnBTdHJlYW0pKTsKLX0KKyAgICBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3Ig
cGVuZGluZ0FkZFN0cmVhbXM7CisgICAgbV9wZW5kaW5nQWRkU3RyZWFtcy5zd2FwKHBlbmRpbmdB
ZGRTdHJlYW1zKTsKKyAgICBpZiAobV9wZWVySGFuZGxlcikKKyAgICAgICAgbV9wZWVySGFuZGxl
ci0+cHJvZHVjZUluaXRpYWxPZmZlcihwZW5kaW5nQWRkU3RyZWFtcyk7CiAKLXZvaWQgUGVlckNv
bm5lY3Rpb246OnBvc3RTdHJlYW1SZW1vdmVkRXZlbnQoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4g
cHJwU3RyZWFtKQotewotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm47
Ci0gICAgQVNTRVJUKGNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKLSAgICBjb250ZXh0LT5w
b3N0VGFzayhEaXNwYXRjaFRhc2s8UGVlckNvbm5lY3Rpb24sIFN0cmluZywgTWVkaWFTdHJlYW0+
OjpjcmVhdGUodGhpcywgJlBlZXJDb25uZWN0aW9uOjpkaXNwYXRjaFN0cmVhbUV2ZW50LCBldmVu
dE5hbWVzKCkucmVtb3Zlc3RyZWFtRXZlbnQsIHBycFN0cmVhbSkpOworICAgIG1faWNlU3RhcnRl
ZCA9IHRydWU7CisKKyAgICBjaGFuZ2VSZWFkeVN0YXRlKE5FR09USUFUSU5HKTsKIH0KIAotdm9p
ZCBQZWVyQ29ubmVjdGlvbjo6cG9zdFNpbXBsZUV2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1l
KQordm9pZCBQZWVyQ29ubmVjdGlvbjo6c2NoZWR1bGVTdHJlYW1DaGFuZ2UoKQogewotICAgIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKGNvbnRleHQt
PmlzQ29udGV4dFRocmVhZCgpKTsKLSAgICBjb250ZXh0LT5wb3N0VGFzayhTaW1wbGVEaXNwYXRj
aFRhc2s8UGVlckNvbm5lY3Rpb24sIFN0cmluZz46OmNyZWF0ZSh0aGlzLCAmUGVlckNvbm5lY3Rp
b246OmRpc3BhdGNoU2ltcGxlRXZlbnQsIGV2ZW50TmFtZSkpOworICAgIGlmICghbV9zdHJlYW1D
aGFuZ2VUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX3N0cmVhbUNoYW5nZVRpbWVyLnN0YXJ0
T25lU2hvdCgwKTsKIH0KIAotdm9pZCBQZWVyQ29ubmVjdGlvbjo6cG9zdFN0YXJ0TmVnb3RpYXRp
b25UYXNrKCkKK3ZvaWQgUGVlckNvbm5lY3Rpb246OnN0cmVhbUNoYW5nZVRpbWVyRmlyZWQoVGlt
ZXI8UGVlckNvbm5lY3Rpb24+KikKIHsKLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIGlmICghY29udGV4dCkKKyAgICBp
ZiAoIW1fcGVuZGluZ0FkZFN0cmVhbXMuaXNFbXB0eSgpICYmICFtX3BlbmRpbmdSZW1vdmVTdHJl
YW1zLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChjb250ZXh0LT5pc0Nv
bnRleHRUaHJlYWQoKSk7Ci0gICAgY29udGV4dC0+cG9zdFRhc2soU2ltcGxlRGlzcGF0Y2hUYXNr
PFBlZXJDb25uZWN0aW9uLCBpbnQ+OjpjcmVhdGUodGhpcywgJlBlZXJDb25uZWN0aW9uOjpkaXNw
YXRjaFN0YXJ0TmVnb3RpYXRpb25UYXNrLCAwKSk7Ci19CiAKLXZvaWQgUGVlckNvbm5lY3Rpb246
OmRpc3BhdGNoTWVzc2FnZUV2ZW50KGNvbnN0IGludCYsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiBkYXRhKQotewotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGQg
PSBkYXRhOwotICAgIGRpc3BhdGNoRXZlbnQoTWVzc2FnZUV2ZW50OjpjcmVhdGUoUGFzc093blB0
cjxNZXNzYWdlUG9ydEFycmF5PigpLCBkKSk7Ci19CisgICAgTWVkaWFTdHJlYW1EZXNjcmlwdG9y
VmVjdG9yIHBlbmRpbmdBZGRTdHJlYW1zOworICAgIE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3Rv
ciBwZW5kaW5nUmVtb3ZlU3RyZWFtczsKIAotdm9pZCBQZWVyQ29ubmVjdGlvbjo6ZGlzcGF0Y2hT
aWduYWxpbmdFdmVudChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgbV9zaWduYWxpbmdD
YWxsYmFjay0+aGFuZGxlRXZlbnQobWVzc2FnZSwgdGhpcyk7CisgICAgbV9wZW5kaW5nQWRkU3Ry
ZWFtcy5zd2FwKHBlbmRpbmdBZGRTdHJlYW1zKTsKKyAgICBtX3BlbmRpbmdSZW1vdmVTdHJlYW1z
LnN3YXAocGVuZGluZ1JlbW92ZVN0cmVhbXMpOworCisgICAgaWYgKG1fcGVlckhhbmRsZXIpCisg
ICAgICAgIG1fcGVlckhhbmRsZXItPnByb2Nlc3NQZW5kaW5nU3RyZWFtcyhwZW5kaW5nQWRkU3Ry
ZWFtcywgcGVuZGluZ1JlbW92ZVN0cmVhbXMpOworCisgICAgaWYgKCFwZW5kaW5nQWRkU3RyZWFt
cy5pc0VtcHR5KCkpCisgICAgICAgIGNoYW5nZVJlYWR5U3RhdGUoTkVHT1RJQVRJTkcpOwogfQog
Ci12b2lkIFBlZXJDb25uZWN0aW9uOjpkaXNwYXRjaFN0cmVhbUV2ZW50KGNvbnN0IFN0cmluZyYg
bmFtZSwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4gc3RyZWFtKQordm9pZCBQZWVyQ29ubmVjdGlv
bjo6c2NoZWR1bGVSZWFkeVN0YXRlQ2hhbmdlKFJlYWR5U3RhdGUgcmVhZHlTdGF0ZSkKIHsKLSAg
ICBSZWZQdHI8TWVkaWFTdHJlYW0+IHMgPSBzdHJlYW07Ci0gICAgZGlzcGF0Y2hFdmVudChNZWRp
YVN0cmVhbUV2ZW50OjpjcmVhdGUobmFtZSwgZmFsc2UsIGZhbHNlLCBzKSk7CisgICAgbV9wZW5k
aW5nUmVhZHlTdGF0ZXMuYXBwZW5kKHJlYWR5U3RhdGUpOworICAgIGlmICghbV9yZWFkeVN0YXRl
Q2hhbmdlVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9yZWFkeVN0YXRlQ2hhbmdlVGltZXIu
c3RhcnRPbmVTaG90KDApOwogfQogCi12b2lkIFBlZXJDb25uZWN0aW9uOjpkaXNwYXRjaFNpbXBs
ZUV2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKQordm9pZCBQZWVyQ29ubmVjdGlvbjo6cmVh
ZHlTdGF0ZUNoYW5nZVRpbWVyRmlyZWQoVGltZXI8UGVlckNvbm5lY3Rpb24+KikKIHsKLSAgICBk
aXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lLCBmYWxzZSwgZmFsc2UpKTsKKyAg
ICBWZWN0b3I8UmVhZHlTdGF0ZT4gcGVuZGluZ1JlYWR5U3RhdGVzOworICAgIG1fcGVuZGluZ1Jl
YWR5U3RhdGVzLnN3YXAocGVuZGluZ1JlYWR5U3RhdGVzKTsKKworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcGVuZGluZ1JlYWR5U3RhdGVzLnNpemUoKTsgaSsrKQorICAgICAgICBjaGFuZ2VS
ZWFkeVN0YXRlKHBlbmRpbmdSZWFkeVN0YXRlc1tpXSk7CiB9CiAKLXZvaWQgUGVlckNvbm5lY3Rp
b246OmRpc3BhdGNoU3RhcnROZWdvdGlhdGlvblRhc2soY29uc3QgaW50JikKK3ZvaWQgUGVlckNv
bm5lY3Rpb246OmNoYW5nZVJlYWR5U3RhdGUoUmVhZHlTdGF0ZSByZWFkeVN0YXRlKQogewotICAg
IGlmIChtZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcigpKQotICAgICAgICBtZWRpYVN0cmVhbUZy
YW1lQ29udHJvbGxlcigpLT5zdGFydE5lZ290aWF0aW9uKG1fY2xpZW50SWQpOworICAgIGlmIChy
ZWFkeVN0YXRlID09IG1fcmVhZHlTdGF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9yZWFk
eVN0YXRlID0gcmVhZHlTdGF0ZTsKKworICAgIHN3aXRjaCAobV9yZWFkeVN0YXRlKSB7CisgICAg
Y2FzZSBORUdPVElBVElORzoKKyAgICAgICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2
ZW50TmFtZXMoKS5jb25uZWN0aW5nRXZlbnQsIGZhbHNlLCBmYWxzZSkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFDVElWRToKKyAgICAgICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRl
KGV2ZW50TmFtZXMoKS5vcGVuRXZlbnQsIGZhbHNlLCBmYWxzZSkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIENMT1NFRDoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wMnAvUGVlckNvbm5lY3Rpb24uaCBiL1NvdXJj
ZS9XZWJDb3JlL3AycC9QZWVyQ29ubmVjdGlvbi5oCmluZGV4IDE4ZDE2NWIuLmQ2MTdiNmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3AycC9QZWVyQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3AycC9QZWVyQ29ubmVjdGlvbi5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw0MSArMjgsNDAgQEAKIAogI2lmIEVOQUJM
RShNRURJQV9TVFJFQU0pCiAKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKICNpbmNsdWRl
ICJFdmVudFRhcmdldC5oIgotI2luY2x1ZGUgIk1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyLmgi
Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlICJFeGNlcHRpb25CYXNlLmgi
CisjaW5jbHVkZSAiTWVkaWFTdHJlYW0uaCIKKyNpbmNsdWRlICJNZWRpYVN0cmVhbUxpc3QuaCIK
KyNpbmNsdWRlICJQZWVySGFuZGxlci5oIgorI2luY2x1ZGUgIlNpZ25hbGluZ0NhbGxiYWNrLmgi
CisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgUGVlckNvbm5l
Y3Rpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxQZWVyQ29ubmVjdGlvbj4sIHB1YmxpYyBQZWVySGFu
ZGxlckNsaWVudCwgcHVibGljIEV2ZW50VGFyZ2V0LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxQZWVyQ29ubmVjdGlvbj4gY3JlYXRlKGNv
bnN0IFN0cmluZyYgc2VydmVyQ29uZmlndXJhdGlvbiwgUGFzc1JlZlB0cjxTaWduYWxpbmdDYWxs
YmFjaz4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKyAgICB+UGVlckNvbm5lY3Rpb24oKTsK
IAotY2xhc3MgTWVkaWFTdHJlYW07Ci1jbGFzcyBNZWRpYVN0cmVhbUxpc3Q7Ci1jbGFzcyBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OwotY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlOwotY2xhc3Mg
U2lnbmFsaW5nQ2FsbGJhY2s7CisgICAgdm9pZCBwcm9jZXNzU2lnbmFsaW5nTWVzc2FnZShjb25z
dCBTdHJpbmcmIG1lc3NhZ2UsIEV4Y2VwdGlvbkNvZGUmKTsKIAotY2xhc3MgUGVlckNvbm5lY3Rp
b24gOiBwdWJsaWMgUmVmQ291bnRlZDxQZWVyQ29ubmVjdGlvbj4sIHB1YmxpYyBFdmVudFRhcmdl
dCwgcHVibGljIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjpQZWVyQ29ubmVjdGlvbkNsaWVu
dCB7Ci1wdWJsaWM6CiAgICAgLy8gTmFtZSBhbmQgdmFsdWVzIG9mIHRoZSBlbnVtIG11c3QgbWF0
Y2ggdGhlIGNvcnJlc3Nwb25kaW5nIGNvbnN0YW50cyBpbiB0aGUgLmlkbCBmaWxlLgotICAgIGVu
dW0geworICAgIGVudW0gUmVhZHlTdGF0ZSB7CiAgICAgICAgIE5FVyA9IDAsCiAgICAgICAgIE5F
R09USUFUSU5HID0gMSwKICAgICAgICAgQUNUSVZFID0gMiwKICAgICAgICAgQ0xPU0VEID0gMwog
ICAgIH07CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxQZWVyQ29ubmVjdGlvbj4gY3JlYXRlKE1l
ZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKiwgaW50IGlkLCBjb25zdCBTdHJpbmcmIGNvbmZpZ3Vy
YXRpb24sIFBhc3NSZWZQdHI8U2lnbmFsaW5nQ2FsbGJhY2s+KTsKLSAgICB2aXJ0dWFsIH5QZWVy
Q29ubmVjdGlvbigpOworICAgIFJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0OwogCi0gICAg
TWVkaWFTdHJlYW1MaXN0KiBsb2NhbFN0cmVhbXMoKTsKLSAgICBNZWRpYVN0cmVhbUxpc3QqIHJl
bW90ZVN0cmVhbXMoKTsKLQotICAgIHVuc2lnbmVkIHNob3J0IHJlYWR5U3RhdGUoKSBjb25zdCB7
IHJldHVybiBtX3JlYWR5U3RhdGU7IH0KLQotICAgIHZvaWQgcHJvY2Vzc1NpZ25hbGluZ01lc3Nh
Z2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBzZW5k
KGNvbnN0IFN0cmluZyYgdGV4dCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgYWRkU3RyZWFt
KFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCByZW1v
dmVTdHJlYW0oUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2
b2lkIGFkZFN0cmVhbShjb25zdCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPiwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIHZvaWQgcmVtb3ZlU3RyZWFtKE1lZGlhU3RyZWFtKiwgRXhjZXB0aW9uQ29kZSYp
OworICAgIE1lZGlhU3RyZWFtTGlzdCogbG9jYWxTdHJlYW1zKCkgY29uc3Q7CisgICAgTWVkaWFT
dHJlYW1MaXN0KiByZW1vdGVTdHJlYW1zKCkgY29uc3Q7CiAgICAgdm9pZCBjbG9zZShFeGNlcHRp
b25Db2RlJik7CiAKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGNvbm5lY3Rp
bmcpOwpAQCAtNzAsNTggKzcwLDY1IEBAIHB1YmxpYzoKICAgICBERUZJTkVfQVRUUklCVVRFX0VW
RU5UX0xJU1RFTkVSKGFkZHN0cmVhbSk7CiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNU
RU5FUihyZW1vdmVzdHJlYW0pOwogCisgICAgLy8gUGVlckhhbmRsZXJDbGllbnQKKyAgICB2aXJ0
dWFsIHZvaWQgaWNlUHJvY2Vzc2luZ0NvbXBsZXRlZCgpOworICAgIHZpcnR1YWwgdm9pZCBzZHBH
ZW5lcmF0ZWQoY29uc3QgU3RyaW5nJiBzZHApOworICAgIHZpcnR1YWwgdm9pZCBkYXRhU3RyZWFt
TWVzc2FnZVJlY2VpdmVkKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAg
dmlydHVhbCB2b2lkIHJlbW90ZVN0cmVhbUFkZGVkKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNj
cmlwdG9yPik7CisgICAgdmlydHVhbCB2b2lkIHJlbW90ZVN0cmVhbVJlbW92ZWQoTWVkaWFTdHJl
YW1EZXNjcmlwdG9yKik7CisKICAgICAvLyBFdmVudFRhcmdldAogICAgIHZpcnR1YWwgUGVlckNv
bm5lY3Rpb24qIHRvUGVlckNvbm5lY3Rpb24oKTsKIAogICAgIC8vIEV2ZW50VGFyZ2V0IGltcGxl
bWVudGF0aW9uLgogICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpIGNvbnN0OwogCi0gICAgLy8gQ2FsbGJhY2tzCi0gICAgdm9pZCBvbk1l
c3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLSAgICB2b2lkIG9uU2lnbmFsaW5nTWVzc2Fn
ZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwotICAgIHZvaWQgb25OZWdvdGlhdGlvblN0YXJ0ZWQo
KTsKLSAgICB2b2lkIG9uTmVnb3RpYXRpb25Eb25lKCk7Ci0gICAgdm9pZCBzdHJlYW1BZGRlZChQ
YXNzUmVmUHRyPE1lZGlhU3RyZWFtPik7Ci0gICAgdm9pZCBzdHJlYW1SZW1vdmVkKGNvbnN0IFN0
cmluZyYgc3RyZWFtTGFiZWwpOworICAgIC8vIEFjdGl2ZURPTU9iamVjdAorICAgIHZpcnR1YWwg
dm9pZCBzdG9wKCk7CiAKICAgICB1c2luZyBSZWZDb3VudGVkPFBlZXJDb25uZWN0aW9uPjo6cmVm
OwogICAgIHVzaW5nIFJlZkNvdW50ZWQ8UGVlckNvbm5lY3Rpb24+OjpkZXJlZjsKIAotcHJvdGVj
dGVkOgorcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGtNYXhNZXNzYWdlVVRGOExl
bmd0aCA9IDUwNDsKKworICAgIFBlZXJDb25uZWN0aW9uKGNvbnN0IFN0cmluZyYgc2VydmVyQ29u
ZmlndXJhdGlvbiwgUGFzc1JlZlB0cjxTaWduYWxpbmdDYWxsYmFjaz4sIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqKTsKKwogICAgIC8vIEV2ZW50VGFyZ2V0IGltcGxlbWVudGF0aW9uLgogICAgIHZp
cnR1YWwgRXZlbnRUYXJnZXREYXRhKiBldmVudFRhcmdldERhdGEoKTsKICAgICB2aXJ0dWFsIEV2
ZW50VGFyZ2V0RGF0YSogZW5zdXJlRXZlbnRUYXJnZXREYXRhKCk7CisgICAgdmlydHVhbCB2b2lk
IHJlZkV2ZW50VGFyZ2V0KCkgeyByZWYoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50
VGFyZ2V0KCkgeyBkZXJlZigpOyB9CiAKLXByaXZhdGU6Ci0gICAgc3RhdGljIGNvbnN0IHNpemVf
dCBrTWF4TWVzc2FnZVVURjhMZW5ndGggPSA1MDQ7CisgICAgdm9pZCBzY2hlZHVsZUluaXRpYWxO
ZWdvdGlhdGlvbigpOworICAgIHZvaWQgaW5pdGlhbE5lZ290aWF0aW9uVGltZXJGaXJlZChUaW1l
cjxQZWVyQ29ubmVjdGlvbj4qKTsKKyAgICB2b2lkIHNjaGVkdWxlU3RyZWFtQ2hhbmdlKCk7Cisg
ICAgdm9pZCBzdHJlYW1DaGFuZ2VUaW1lckZpcmVkKFRpbWVyPFBlZXJDb25uZWN0aW9uPiopOwor
ICAgIHZvaWQgc2NoZWR1bGVSZWFkeVN0YXRlQ2hhbmdlKFJlYWR5U3RhdGUpOworICAgIHZvaWQg
cmVhZHlTdGF0ZUNoYW5nZVRpbWVyRmlyZWQoVGltZXI8UGVlckNvbm5lY3Rpb24+Kik7CiAKLSAg
ICBQZWVyQ29ubmVjdGlvbihNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciosIGludCBpZCwgY29u
c3QgU3RyaW5nJiBjb25maWd1cmF0aW9uLCBQYXNzUmVmUHRyPFNpZ25hbGluZ0NhbGxiYWNrPik7
Ci0gICAgdm9pZCBpbml0KCk7CisgICAgdm9pZCBjaGFuZ2VSZWFkeVN0YXRlKFJlYWR5U3RhdGUp
OwogCi0gICAgdm9pZCBwb3N0U2ltcGxlRXZlbnQoY29uc3QgU3RyaW5nJiBldmVudE5hbWUpOwot
ICAgIHZvaWQgcG9zdE1lc3NhZ2VFdmVudChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwotICAgIHZv
aWQgcG9zdFNpZ25hbGluZ0V2ZW50KGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0gICAgdm9pZCBw
b3N0U3RyZWFtQWRkZWRFdmVudChQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPik7Ci0gICAgdm9pZCBw
b3N0U3RyZWFtUmVtb3ZlZEV2ZW50KFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+KTsKLSAgICB2b2lk
IHBvc3RTdGFydE5lZ290aWF0aW9uVGFzaygpOworICAgIFJlZlB0cjxTaWduYWxpbmdDYWxsYmFj
az4gbV9zaWduYWxpbmdDYWxsYmFjazsKIAotICAgIHZvaWQgZGlzcGF0Y2hTaW1wbGVFdmVudChj
b25zdCBTdHJpbmcmIGV2ZW50TmFtZSk7Ci0gICAgdm9pZCBkaXNwYXRjaE1lc3NhZ2VFdmVudChj
b25zdCBpbnQmLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSk7Ci0gICAg
dm9pZCBkaXNwYXRjaFNpZ25hbGluZ0V2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKTsKLSAg
ICB2b2lkIGRpc3BhdGNoU3RyZWFtRXZlbnQoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRy
PE1lZGlhU3RyZWFtPik7Ci0gICAgdm9pZCBkaXNwYXRjaFN0YXJ0TmVnb3RpYXRpb25UYXNrKGNv
bnN0IGludCYpOworICAgIFJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOworICAgIGJvb2wgbV9pY2VT
dGFydGVkOwogCi0gICAgLy8gRXZlbnRUYXJnZXQgaW1wbGVtZW50YXRpb24uCi0gICAgdmlydHVh
bCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgeyByZWYoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBkZXJl
ZkV2ZW50VGFyZ2V0KCkgeyBkZXJlZigpOyB9CisgICAgUmVmUHRyPE1lZGlhU3RyZWFtTGlzdD4g
bV9sb2NhbFN0cmVhbXM7CisgICAgUmVmUHRyPE1lZGlhU3RyZWFtTGlzdD4gbV9yZW1vdGVTdHJl
YW1zOwogCisgICAgLy8gRXZlbnRUYXJnZXQgaW1wbGVtZW50YXRpb24uCiAgICAgRXZlbnRUYXJn
ZXREYXRhIG1fZXZlbnRUYXJnZXREYXRhOwogCi0gICAgU3RyaW5nIG1fY29uZmlndXJhdGlvbjsK
LSAgICB1bnNpZ25lZCBzaG9ydCBtX3JlYWR5U3RhdGU7Ci0gICAgUmVmUHRyPFNpZ25hbGluZ0Nh
bGxiYWNrPiBtX3NpZ25hbGluZ0NhbGxiYWNrOwotICAgIFJlZlB0cjxNZWRpYVN0cmVhbUxpc3Q+
IG1fbG9jYWxTdHJlYW1MaXN0OwotICAgIFJlZlB0cjxNZWRpYVN0cmVhbUxpc3Q+IG1fcmVtb3Rl
U3RyZWFtTGlzdDsKKyAgICBUaW1lcjxQZWVyQ29ubmVjdGlvbj4gbV9pbml0aWFsTmVnb3RpYXRp
b25UaW1lcjsKKyAgICBUaW1lcjxQZWVyQ29ubmVjdGlvbj4gbV9zdHJlYW1DaGFuZ2VUaW1lcjsK
KyAgICBUaW1lcjxQZWVyQ29ubmVjdGlvbj4gbV9yZWFkeVN0YXRlQ2hhbmdlVGltZXI7CisKKyAg
ICBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3IgbV9wZW5kaW5nQWRkU3RyZWFtczsKKyAgICBN
ZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3IgbV9wZW5kaW5nUmVtb3ZlU3RyZWFtczsKKyAgICBW
ZWN0b3I8UmVhZHlTdGF0ZT4gbV9wZW5kaW5nUmVhZHlTdGF0ZXM7CisKKyAgICBPd25QdHI8UGVl
ckhhbmRsZXI+IG1fcGVlckhhbmRsZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtQ2xpZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtQ2xpZW50LmgKaW5kZXggN2FjMmYwNy4uMGZjNmU1
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUNsaWVudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1DbGllbnQuaApAQCAtNDksMTUgKzQ5
LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzdG9wR2VuZXJhdGVkU3RyZWFtKGNvbnN0
IFN0cmluZyYgc3RyZWFtTGFiZWwpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TWVkaWFTdHJl
YW1UcmFja0VuYWJsZWQoY29uc3QgU3RyaW5nJiB0cmFja0lkLCBib29sIGVuYWJsZWQpID0gMDsK
IAotICAgIC8vIFBlZXJDb25uZWN0aW9uIGZ1bmN0aW9ucy4KLSAgICB2aXJ0dWFsIHZvaWQgbmV3
UGVlckNvbm5lY3Rpb24oaW50IHBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgY29uZmln
dXJhdGlvbikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdGFydE5lZ290aWF0aW9uKGludCBwZWVy
Q29ubmVjdGlvbklkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHByb2Nlc3NTaWduYWxpbmdNZXNz
YWdlKGludCBwZWVyQ29ubmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgbWVzc2FnZShpbnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5n
JiBtZXNzYWdlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGFkZFN0cmVhbShpbnQgcGVlckNvbm5l
Y3Rpb25JZCwgY29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCByZW1vdmVTdHJlYW0oaW50IHBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgc3RyZWFt
TGFiZWwpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2VQZWVyQ29ubmVjdGlvbihpbnQgcGVl
ckNvbm5lY3Rpb25JZCkgPSAwOwotCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+TWVkaWFTdHJl
YW1DbGllbnQoKSB7IH0KIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlh
U3RyZWFtQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtQ29u
dHJvbGxlci5jcHAKaW5kZXggNWY2MDRlYy4uYzg4NTUyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9NZWRpYVN0cmVhbUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvTWVkaWFTdHJlYW1Db250cm9sbGVyLmNwcApAQCAtMzQsOCArMzQsNiBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLS8vIEZJWE1FOiBUaGlzIGlzIHVzZWQgZm9yIGhvbGRpbmcgbGlz
dCBvZiBQZWVyQ29ubmVjdGlvbiBhcyB3ZWxsLAotLy8gc28gcmVuYW1lIGNsYXNzIGlzIGluIG9y
ZGVyLgogY2xhc3MgTWVkaWFTdHJlYW1Db250cm9sbGVyOjpSZXF1ZXN0IHsKIHB1YmxpYzoKICAg
ICBSZXF1ZXN0KCkKQEAgLTU3LDcgKzU1LDYgQEAgcHJpdmF0ZToKIE1lZGlhU3RyZWFtQ29udHJv
bGxlcjo6TWVkaWFTdHJlYW1Db250cm9sbGVyKE1lZGlhU3RyZWFtQ2xpZW50KiBjbGllbnQpCiAg
ICAgOiBtX2NsaWVudChjbGllbnQpCiAgICAgLCBtX25leHRHbG9iYWxSZXF1ZXN0SWQoMSkKLSAg
ICAsIG1fbmV4dEdsb2JhbFBlZXJDb25uZWN0aW9uSWQoMSkKIHsKIH0KIApAQCAtMTU3LDEzMCAr
MTU0LDYgQEAgdm9pZCBNZWRpYVN0cmVhbUNvbnRyb2xsZXI6OnN0cmVhbUZhaWxlZChjb25zdCBT
dHJpbmcmIHN0cmVhbUxhYmVsKQogICAgICAgICBtX3N0cmVhbXMuZ2V0KHN0cmVhbUxhYmVsKS0+
c3RyZWFtRmFpbGVkKHN0cmVhbUxhYmVsKTsKIH0KIAotdm9pZCBNZWRpYVN0cmVhbUNvbnRyb2xs
ZXI6Om9uU2lnbmFsaW5nTWVzc2FnZShpbnQgY29udHJvbGxlclBlZXJDb25uZWN0aW9uSWQsIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICAvLyBEb24ndCBhc3NlcnQgc2luY2UgdGhlIGZy
YW1lIGNvbnRyb2xsZXIgY2FuIGhhdmUgYmVlbiBkZXN0cm95ZWQuCi0gICAgaWYgKG1fcGVlckNv
bm5lY3Rpb25zLmNvbnRhaW5zKGNvbnRyb2xsZXJQZWVyQ29ubmVjdGlvbklkKSkgewotICAgICAg
ICBjb25zdCBSZXF1ZXN0JiBwZWVyQ29ubmVjdGlvbiA9IG1fcGVlckNvbm5lY3Rpb25zLmdldChj
b250cm9sbGVyUGVlckNvbm5lY3Rpb25JZCk7Ci0gICAgICAgIEFTU0VSVChwZWVyQ29ubmVjdGlv
bi5mcmFtZUNvbnRyb2xsZXIoKSk7Ci0gICAgICAgIHBlZXJDb25uZWN0aW9uLmZyYW1lQ29udHJv
bGxlcigpLT5vblNpZ25hbGluZ01lc3NhZ2UocGVlckNvbm5lY3Rpb24ubG9jYWxJZCgpLCBtZXNz
YWdlKTsKLSAgICB9Ci19Ci0KLWJvb2wgTWVkaWFTdHJlYW1Db250cm9sbGVyOjpmcmFtZVRvUGFn
ZVBlZXJDb25uZWN0aW9uSWQoTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqIGZyYW1lQ29udHJv
bGxlciwgaW50IGZyYW1lUGVlckNvbm5lY3Rpb25JZCwgaW50JiBwYWdlUGVlckNvbm5lY3Rpb25J
ZCkKLXsKLSAgICBwYWdlUGVlckNvbm5lY3Rpb25JZCA9IC0xOwotICAgIC8vIEZJWE1FOiBJcyB0
aGVyZSBhIGJldHRlciB3YXkgdG8gZmluZCB0aGUgZ2xvYmFsIElEIGluIHRoZSBtYXA/Ci0gICAg
Zm9yIChSZXF1ZXN0TWFwOjppdGVyYXRvciBpdCA9IG1fcGVlckNvbm5lY3Rpb25zLmJlZ2luKCk7
IGl0ICE9IG1fcGVlckNvbm5lY3Rpb25zLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+
c2Vjb25kLmZyYW1lQ29udHJvbGxlcigpID09IGZyYW1lQ29udHJvbGxlciAmJiBpdC0+c2Vjb25k
LmxvY2FsSWQoKSA9PSBmcmFtZVBlZXJDb25uZWN0aW9uSWQpIHsKLSAgICAgICAgICAgIHBhZ2VQ
ZWVyQ29ubmVjdGlvbklkID0gaXQtPmZpcnN0OwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIE1lZGlhU3RyZWFt
Q29udHJvbGxlcjo6cHJvY2Vzc1NpZ25hbGluZ01lc3NhZ2UoTWVkaWFTdHJlYW1GcmFtZUNvbnRy
b2xsZXIqIGZyYW1lQ29udHJvbGxlciwgaW50IGZyYW1lUGVlckNvbm5lY3Rpb25JZCwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKQotewotICAgIGludCBwYWdlUGVlckNvbm5lY3Rpb25JZDsKLSAgICBp
ZiAoZnJhbWVUb1BhZ2VQZWVyQ29ubmVjdGlvbklkKGZyYW1lQ29udHJvbGxlciwgZnJhbWVQZWVy
Q29ubmVjdGlvbklkLCBwYWdlUGVlckNvbm5lY3Rpb25JZCkpCi0gICAgICAgIG1fY2xpZW50LT5w
cm9jZXNzU2lnbmFsaW5nTWVzc2FnZShwYWdlUGVlckNvbm5lY3Rpb25JZCwgbWVzc2FnZSk7Ci19
Ci0KLXZvaWQgTWVkaWFTdHJlYW1Db250cm9sbGVyOjptZXNzYWdlKE1lZGlhU3RyZWFtRnJhbWVD
b250cm9sbGVyKiBmcmFtZUNvbnRyb2xsZXIsIGludCBmcmFtZVBlZXJDb25uZWN0aW9uSWQsIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBpbnQgcGFnZVBlZXJDb25uZWN0aW9uSWQ7Ci0g
ICAgaWYgKGZyYW1lVG9QYWdlUGVlckNvbm5lY3Rpb25JZChmcmFtZUNvbnRyb2xsZXIsIGZyYW1l
UGVlckNvbm5lY3Rpb25JZCwgcGFnZVBlZXJDb25uZWN0aW9uSWQpKQotICAgICAgICBtX2NsaWVu
dC0+bWVzc2FnZShwYWdlUGVlckNvbm5lY3Rpb25JZCwgbWVzc2FnZSk7Ci19Ci0KLXZvaWQgTWVk
aWFTdHJlYW1Db250cm9sbGVyOjpvbk1lc3NhZ2UoaW50IGNvbnRyb2xsZXJQZWVyQ29ubmVjdGlv
bklkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgLy8gRG9uJ3QgYXNzZXJ0IHNpbmNl
IHRoZSBmcmFtZSBjb250cm9sbGVyIGNhbiBoYXZlIGJlZW4gZGVzdHJveWVkCi0gICAgaWYgKG1f
cGVlckNvbm5lY3Rpb25zLmNvbnRhaW5zKGNvbnRyb2xsZXJQZWVyQ29ubmVjdGlvbklkKSkgewot
ICAgICAgICBjb25zdCBSZXF1ZXN0JiBwZWVyQ29ubmVjdGlvbiA9IG1fcGVlckNvbm5lY3Rpb25z
LmdldChjb250cm9sbGVyUGVlckNvbm5lY3Rpb25JZCk7Ci0gICAgICAgIEFTU0VSVChwZWVyQ29u
bmVjdGlvbi5mcmFtZUNvbnRyb2xsZXIoKSk7Ci0gICAgICAgIHBlZXJDb25uZWN0aW9uLmZyYW1l
Q29udHJvbGxlcigpLT5vbk1lc3NhZ2UocGVlckNvbm5lY3Rpb24ubG9jYWxJZCgpLCBtZXNzYWdl
KTsKLSAgICB9Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1Db250cm9sbGVyOjphZGRTdHJlYW0oTWVk
aWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqIGZyYW1lQ29udHJvbGxlciwgaW50IGZyYW1lUGVlckNv
bm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCkKLXsKLSAgICBpbnQgcGFnZVBl
ZXJDb25uZWN0aW9uSWQ7Ci0gICAgaWYgKGZyYW1lVG9QYWdlUGVlckNvbm5lY3Rpb25JZChmcmFt
ZUNvbnRyb2xsZXIsIGZyYW1lUGVlckNvbm5lY3Rpb25JZCwgcGFnZVBlZXJDb25uZWN0aW9uSWQp
KQotICAgICAgICBtX2NsaWVudC0+YWRkU3RyZWFtKHBhZ2VQZWVyQ29ubmVjdGlvbklkLCBzdHJl
YW1MYWJlbCk7Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1Db250cm9sbGVyOjpvbkFkZFN0cmVhbShp
bnQgY29udHJvbGxlclBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgc3RyZWFtTGFiZWws
IFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja0xpc3Q+IHRyYWNrcykKLXsKLSAgICAvLyBEb24n
dCBhc3NlcnQgc2luY2UgdGhlIGZyYW1lIGNvbnRyb2xsZXIgY2FuIGhhdmUgYmVlbiBkZXN0cm95
ZWQKLSAgICBpZiAobV9wZWVyQ29ubmVjdGlvbnMuY29udGFpbnMoY29udHJvbGxlclBlZXJDb25u
ZWN0aW9uSWQpKSB7Ci0gICAgICAgIGNvbnN0IFJlcXVlc3QmIHBlZXJDb25uZWN0aW9uID0gbV9w
ZWVyQ29ubmVjdGlvbnMuZ2V0KGNvbnRyb2xsZXJQZWVyQ29ubmVjdGlvbklkKTsKLSAgICAgICAg
QVNTRVJUKHBlZXJDb25uZWN0aW9uLmZyYW1lQ29udHJvbGxlcigpKTsKLSAgICAgICAgcGVlckNv
bm5lY3Rpb24uZnJhbWVDb250cm9sbGVyKCktPm9uQWRkU3RyZWFtKHBlZXJDb25uZWN0aW9uLmxv
Y2FsSWQoKSwgc3RyZWFtTGFiZWwsIHRyYWNrcyk7Ci0gICAgfQotfQotCi12b2lkIE1lZGlhU3Ry
ZWFtQ29udHJvbGxlcjo6cmVtb3ZlU3RyZWFtKE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKiBm
cmFtZUNvbnRyb2xsZXIsIGludCBmcmFtZVBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYg
c3RyZWFtTGFiZWwpCi17Ci0gICAgaW50IHBhZ2VQZWVyQ29ubmVjdGlvbklkOwotICAgIGlmIChm
cmFtZVRvUGFnZVBlZXJDb25uZWN0aW9uSWQoZnJhbWVDb250cm9sbGVyLCBmcmFtZVBlZXJDb25u
ZWN0aW9uSWQsIHBhZ2VQZWVyQ29ubmVjdGlvbklkKSkKLSAgICAgICAgbV9jbGllbnQtPnJlbW92
ZVN0cmVhbShwYWdlUGVlckNvbm5lY3Rpb25JZCwgc3RyZWFtTGFiZWwpOwotfQotCi12b2lkIE1l
ZGlhU3RyZWFtQ29udHJvbGxlcjo6b25SZW1vdmVTdHJlYW0oaW50IGNvbnRyb2xsZXJQZWVyQ29u
bmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIHN0cmVhbUxhYmVsKQotewotICAgIC8vIERvbid0IGFz
c2VydCBzaW5jZSB0aGUgZnJhbWUgY29udHJvbGxlciBjYW4gaGF2ZSBiZWVuIGRlc3Ryb3llZAot
ICAgIGlmIChtX3BlZXJDb25uZWN0aW9ucy5jb250YWlucyhjb250cm9sbGVyUGVlckNvbm5lY3Rp
b25JZCkpIHsKLSAgICAgICAgLy8gVE9ETzogQmV0dGVyIG5hbWUgb2YgcGVlckNvbm5lY3Rpb24g
dmFyaWFibGU/Ci0gICAgICAgIGNvbnN0IFJlcXVlc3QmIHBlZXJDb25uZWN0aW9uID0gbV9wZWVy
Q29ubmVjdGlvbnMuZ2V0KGNvbnRyb2xsZXJQZWVyQ29ubmVjdGlvbklkKTsKLSAgICAgICAgQVNT
RVJUKHBlZXJDb25uZWN0aW9uLmZyYW1lQ29udHJvbGxlcigpKTsKLSAgICAgICAgcGVlckNvbm5l
Y3Rpb24uZnJhbWVDb250cm9sbGVyKCktPm9uUmVtb3ZlU3RyZWFtKHBlZXJDb25uZWN0aW9uLmxv
Y2FsSWQoKSwgc3RyZWFtTGFiZWwpOwotICAgIH0KLX0KLQotdm9pZCBNZWRpYVN0cmVhbUNvbnRy
b2xsZXI6Om5ld1BlZXJDb25uZWN0aW9uKE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKiBmcmFt
ZUNvbnRyb2xsZXIsIGludCBmcmFtZVBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgY29u
ZmlndXJhdGlvbikKLXsKLSAgICBpbnQgcGFnZVBlZXJDb25uZWN0aW9uSWQgPSBtX25leHRHbG9i
YWxQZWVyQ29ubmVjdGlvbklkKys7Ci0gICAgbV9wZWVyQ29ubmVjdGlvbnMuYWRkKHBhZ2VQZWVy
Q29ubmVjdGlvbklkLCBSZXF1ZXN0KGZyYW1lUGVlckNvbm5lY3Rpb25JZCwgZnJhbWVDb250cm9s
bGVyKSk7Ci0KLSAgICBtX2NsaWVudC0+bmV3UGVlckNvbm5lY3Rpb24ocGFnZVBlZXJDb25uZWN0
aW9uSWQsIGNvbmZpZ3VyYXRpb24pOwotfQotCi12b2lkIE1lZGlhU3RyZWFtQ29udHJvbGxlcjo6
Y2xvc2VQZWVyQ29ubmVjdGlvbihNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciogZnJhbWVDb250
cm9sbGVyLCBpbnQgZnJhbWVQZWVyQ29ubmVjdGlvbklkKQotewotICAgIGludCBwYWdlUGVlckNv
bm5lY3Rpb25JZDsKLSAgICBpZiAoZnJhbWVUb1BhZ2VQZWVyQ29ubmVjdGlvbklkKGZyYW1lQ29u
dHJvbGxlciwgZnJhbWVQZWVyQ29ubmVjdGlvbklkLCBwYWdlUGVlckNvbm5lY3Rpb25JZCkpCi0g
ICAgICAgIG1fY2xpZW50LT5jbG9zZVBlZXJDb25uZWN0aW9uKHBhZ2VQZWVyQ29ubmVjdGlvbklk
KTsKLX0KLQotdm9pZCBNZWRpYVN0cmVhbUNvbnRyb2xsZXI6OnN0YXJ0TmVnb3RpYXRpb24oTWVk
aWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqIGZyYW1lQ29udHJvbGxlciwgaW50IGZyYW1lUGVlckNv
bm5lY3Rpb25JZCkKLXsKLSAgICBpbnQgcGFnZVBlZXJDb25uZWN0aW9uSWQ7Ci0gICAgaWYgKGZy
YW1lVG9QYWdlUGVlckNvbm5lY3Rpb25JZChmcmFtZUNvbnRyb2xsZXIsIGZyYW1lUGVlckNvbm5l
Y3Rpb25JZCwgcGFnZVBlZXJDb25uZWN0aW9uSWQpKQotICAgICAgICBtX2NsaWVudC0+c3RhcnRO
ZWdvdGlhdGlvbihwYWdlUGVlckNvbm5lY3Rpb25JZCk7Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1D
b250cm9sbGVyOjpvbk5lZ290aWF0aW9uU3RhcnRlZChpbnQgY29udHJvbGxlclBlZXJDb25uZWN0
aW9uSWQpCi17Ci0gICAgLy8gRG9uJ3QgYXNzZXJ0IHNpbmNlIHRoZSBmcmFtZSBjb250cm9sbGVy
IGNhbiBoYXZlIGJlZW4gZGVzdHJveWVkCi0gICAgaWYgKG1fcGVlckNvbm5lY3Rpb25zLmNvbnRh
aW5zKGNvbnRyb2xsZXJQZWVyQ29ubmVjdGlvbklkKSkgewotICAgICAgICBjb25zdCBSZXF1ZXN0
JiBwZWVyQ29ubmVjdGlvbiA9IG1fcGVlckNvbm5lY3Rpb25zLmdldChjb250cm9sbGVyUGVlckNv
bm5lY3Rpb25JZCk7Ci0gICAgICAgIEFTU0VSVChwZWVyQ29ubmVjdGlvbi5mcmFtZUNvbnRyb2xs
ZXIoKSk7Ci0gICAgICAgIHBlZXJDb25uZWN0aW9uLmZyYW1lQ29udHJvbGxlcigpLT5vbk5lZ290
aWF0aW9uU3RhcnRlZChwZWVyQ29ubmVjdGlvbi5sb2NhbElkKCkpOwotICAgIH0KLX0KLQotdm9p
ZCBNZWRpYVN0cmVhbUNvbnRyb2xsZXI6Om9uTmVnb3RpYXRpb25Eb25lKGludCBjb250cm9sbGVy
UGVlckNvbm5lY3Rpb25JZCkKLXsKLSAgICAvLyBEb24ndCBhc3NlcnQgc2luY2UgdGhlIGZyYW1l
IGNvbnRyb2xsZXIgY2FuIGhhdmUgYmVlbiBkZXN0cm95ZWQKLSAgICBpZiAobV9wZWVyQ29ubmVj
dGlvbnMuY29udGFpbnMoY29udHJvbGxlclBlZXJDb25uZWN0aW9uSWQpKSB7Ci0gICAgICAgIGNv
bnN0IFJlcXVlc3QmIHBlZXJDb25uZWN0aW9uID0gbV9wZWVyQ29ubmVjdGlvbnMuZ2V0KGNvbnRy
b2xsZXJQZWVyQ29ubmVjdGlvbklkKTsKLSAgICAgICAgQVNTRVJUKHBlZXJDb25uZWN0aW9uLmZy
YW1lQ29udHJvbGxlcigpKTsKLSAgICAgICAgcGVlckNvbm5lY3Rpb24uZnJhbWVDb250cm9sbGVy
KCktPm9uTmVnb3RpYXRpb25Eb25lKHBlZXJDb25uZWN0aW9uLmxvY2FsSWQoKSk7Ci0gICAgfQot
fQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RS
RUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUNvbnRyb2xs
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1Db250cm9sbGVyLmgKaW5kZXgg
NTU1MzU4N2UuLjEwYWM0Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFT
dHJlYW1Db250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUNv
bnRyb2xsZXIuaApAQCAtNjAsNDAgKzYwLDE5IEBAIHB1YmxpYzoKICAgICB2b2lkIHN0cmVhbUdl
bmVyYXRpb25GYWlsZWQoaW50IHJlcXVlc3RJZCwgTmF2aWdhdG9yVXNlck1lZGlhRXJyb3I6OkVy
cm9yQ29kZSk7CiAgICAgdm9pZCBzdHJlYW1GYWlsZWQoY29uc3QgU3RyaW5nJiBzdHJlYW1MYWJl
bCk7CiAKLSAgICAvKiBKUyAtPiBVQSAqLwotICAgIHZvaWQgbmV3UGVlckNvbm5lY3Rpb24oTWVk
aWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqLCBpbnQgZnJhbWVQZWVyQ29ubmVjdGlvbklkLCBjb25z
dCBTdHJpbmcmIGNvbmZpZ3VyYXRpb24pOwotICAgIHZvaWQgc3RhcnROZWdvdGlhdGlvbihNZWRp
YVN0cmVhbUZyYW1lQ29udHJvbGxlciosIGludCBmcmFtZVBlZXJDb25uZWN0aW9uSWQpOwotICAg
IHZvaWQgcHJvY2Vzc1NpZ25hbGluZ01lc3NhZ2UoTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIq
LCBpbnQgZnJhbWVQZWVyQ29ubmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwotICAg
IHZvaWQgbWVzc2FnZShNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciosIGludCBmcmFtZVBlZXJD
b25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0gICAgdm9pZCBhZGRTdHJlYW0o
TWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqLCBpbnQgZnJhbWVQZWVyQ29ubmVjdGlvbklkLCBj
b25zdCBTdHJpbmcmIHN0cmVhbUxhYmVsKTsKLSAgICB2b2lkIHJlbW92ZVN0cmVhbShNZWRpYVN0
cmVhbUZyYW1lQ29udHJvbGxlciosIGludCBmcmFtZVBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0
cmluZyYgc3RyZWFtTGFiZWwpOwotICAgIHZvaWQgY2xvc2VQZWVyQ29ubmVjdGlvbihNZWRpYVN0
cmVhbUZyYW1lQ29udHJvbGxlciosIGludCBmcmFtZVBlZXJDb25uZWN0aW9uSWQpOwotCi0gICAg
LyogVUEgLT4gSlMgKi8KLSAgICB2b2lkIG9uU2lnbmFsaW5nTWVzc2FnZShpbnQgY29udHJvbGxl
clBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0gICAgdm9pZCBvbk1l
c3NhZ2UoaW50IGNvbnRyb2xsZXJQZWVyQ29ubmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpOwotICAgIHZvaWQgb25BZGRTdHJlYW0oaW50IGNvbnRyb2xsZXJQZWVyQ29ubmVjdGlvbklk
LCBjb25zdCBTdHJpbmcmIHN0cmVhbUxhYmVsLCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tM
aXN0PiB0cmFja3MpOwotICAgIHZvaWQgb25SZW1vdmVTdHJlYW0oaW50IGNvbnRyb2xsZXJQZWVy
Q29ubmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIHN0cmVhbUxhYmVsKTsKLSAgICB2b2lkIG9uTmVn
b3RpYXRpb25TdGFydGVkKGludCBjb250cm9sbGVyUGVlckNvbm5lY3Rpb25JZCk7Ci0gICAgdm9p
ZCBvbk5lZ290aWF0aW9uRG9uZShpbnQgY29udHJvbGxlclBlZXJDb25uZWN0aW9uSWQpOwotCiBw
cml2YXRlOgogICAgIGludCByZWdpc3RlclJlcXVlc3QoaW50IGxvY2FsUmVxdWVzdElkLCBNZWRp
YVN0cmVhbUZyYW1lQ29udHJvbGxlciopOwogICAgIHZvaWQgcmVnaXN0ZXJTdHJlYW0oY29uc3Qg
U3RyaW5nJiBzdHJlYW1MYWJlbCwgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqKTsKIAotICAg
IGJvb2wgZnJhbWVUb1BhZ2VQZWVyQ29ubmVjdGlvbklkKE1lZGlhU3RyZWFtRnJhbWVDb250cm9s
bGVyKiwgaW50IGZyYW1lUGVlckNvbm5lY3Rpb25JZCwgaW50JiBwYWdlUGVlckNvbm5lY3Rpb25J
ZCk7Ci0KICAgICBjbGFzcyBSZXF1ZXN0OwogICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFJlcXVl
c3Q+IFJlcXVlc3RNYXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgTWVkaWFTdHJlYW1G
cmFtZUNvbnRyb2xsZXIqPiBTdHJlYW1NYXA7CiAKICAgICBSZXF1ZXN0TWFwIG1fcmVxdWVzdHM7
CiAgICAgU3RyZWFtTWFwIG1fc3RyZWFtczsKLSAgICBSZXF1ZXN0TWFwIG1fcGVlckNvbm5lY3Rp
b25zOwogCiAgICAgTWVkaWFTdHJlYW1DbGllbnQqIG1fY2xpZW50OwogICAgIGludCBtX25leHRH
bG9iYWxSZXF1ZXN0SWQ7Ci0gICAgaW50IG1fbmV4dEdsb2JhbFBlZXJDb25uZWN0aW9uSWQ7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL01lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
TWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIuY3BwCmluZGV4IDliNjc5MmEuLjZmNmVjZTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIu
Y3BwCkBAIC0zNiw5ICszNiw3IEBACiAjaW5jbHVkZSAiTmF2aWdhdG9yVXNlck1lZGlhRXJyb3JD
YWxsYmFjay5oIgogI2luY2x1ZGUgIk5hdmlnYXRvclVzZXJNZWRpYVN1Y2Nlc3NDYWxsYmFjay5o
IgogI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQZWVyQ29ubmVjdGlvbi5oIgogI2luY2x1
ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVkZSAiU2lnbmFsaW5nQ2FsbGJhY2suaCIKICNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNjMs
MTI2ICszNjEsNiBAQCB2b2lkIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjpzdHJlYW1GYWls
ZWQoY29uc3QgU3RyaW5nJiBsYWJlbCkKICAgICBnZXRTdHJlYW1Gcm9tTGFiZWwobGFiZWwpLT5z
dHJlYW1FbmRlZCgpOwogfQogCi1QYXNzUmVmUHRyPFBlZXJDb25uZWN0aW9uPiBNZWRpYVN0cmVh
bUZyYW1lQ29udHJvbGxlcjo6Y3JlYXRlUGVlckNvbm5lY3Rpb24oY29uc3QgU3RyaW5nJiBjb25m
aWd1cmF0aW9uLCBQYXNzUmVmUHRyPFNpZ25hbGluZ0NhbGxiYWNrPiBzaWduYWxpbmdDYWxsYmFj
aykKLXsKLSAgICBpbnQgY2xpZW50SWQgPSBtX2NsaWVudHMuZ2V0TmV4dElkKCk7Ci0gICAgUmVm
UHRyPFBlZXJDb25uZWN0aW9uPiBwZWVyQ29ubmVjdGlvbiA9IFBlZXJDb25uZWN0aW9uOjpjcmVh
dGUodGhpcywgY2xpZW50SWQsIGNvbmZpZ3VyYXRpb24sIHNpZ25hbGluZ0NhbGxiYWNrKTsKLSAg
ICBpZiAocGVlckNvbm5lY3Rpb24pCi0gICAgICAgIG1fY2xpZW50cy5hZGQoY2xpZW50SWQsIHBl
ZXJDb25uZWN0aW9uLmdldCgpKTsKLSAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24ucmVsZWFzZSgp
OwotfQotCi12b2lkIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjpuZXdQZWVyQ29ubmVjdGlv
bihpbnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBjb25maWd1cmF0aW9uKQotewot
ICAgIGlmIChwYWdlQ29udHJvbGxlcigpKQotICAgICAgICBwYWdlQ29udHJvbGxlcigpLT5uZXdQ
ZWVyQ29ubmVjdGlvbih0aGlzLCBwZWVyQ29ubmVjdGlvbklkLCBjb25maWd1cmF0aW9uKTsKLX0K
LQotdm9pZCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcjo6Y2xvc2VQZWVyQ29ubmVjdGlvbihp
bnQgcGVlckNvbm5lY3Rpb25JZCkKLXsKLSAgICBpZiAocGFnZUNvbnRyb2xsZXIoKSkKLSAgICAg
ICAgcGFnZUNvbnRyb2xsZXIoKS0+Y2xvc2VQZWVyQ29ubmVjdGlvbih0aGlzLCBwZWVyQ29ubmVj
dGlvbklkKTsKLX0KLQotdm9pZCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcjo6c3RhcnROZWdv
dGlhdGlvbihpbnQgcGVlckNvbm5lY3Rpb25JZCkKLXsKLSAgICBpZiAocGFnZUNvbnRyb2xsZXIo
KSkKLSAgICAgICAgcGFnZUNvbnRyb2xsZXIoKS0+c3RhcnROZWdvdGlhdGlvbih0aGlzLCBwZWVy
Q29ubmVjdGlvbklkKTsKLX0KLQotdm9pZCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcjo6cHJv
Y2Vzc1NpZ25hbGluZ01lc3NhZ2UoaW50IHBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkKLXsKLSAgICBpZiAocGFnZUNvbnRyb2xsZXIoKSkKLSAgICAgICAgcGFnZUNvbnRy
b2xsZXIoKS0+cHJvY2Vzc1NpZ25hbGluZ01lc3NhZ2UodGhpcywgcGVlckNvbm5lY3Rpb25JZCwg
bWVzc2FnZSk7Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6Om1lc3NhZ2Uo
aW50IHBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBpZiAo
cGFnZUNvbnRyb2xsZXIoKSkKLSAgICAgICAgcGFnZUNvbnRyb2xsZXIoKS0+bWVzc2FnZSh0aGlz
LCBwZWVyQ29ubmVjdGlvbklkLCBtZXNzYWdlKTsKLX0KLQotdm9pZCBNZWRpYVN0cmVhbUZyYW1l
Q29udHJvbGxlcjo6YWRkU3RyZWFtKGludCBwZWVyQ29ubmVjdGlvbklkLCBQYXNzUmVmUHRyPE1l
ZGlhU3RyZWFtPiBwcnBTdHJlYW0pCi17Ci0gICAgUmVmUHRyPE1lZGlhU3RyZWFtPiBzdHJlYW0g
PSBwcnBTdHJlYW07Ci0gICAgQVNTRVJUKG1fc3RyZWFtcy5jb250YWlucyhzdHJlYW0tPmxhYmVs
KCkpKTsKLQotICAgIGlmIChwYWdlQ29udHJvbGxlcigpKQotICAgICAgICBwYWdlQ29udHJvbGxl
cigpLT5hZGRTdHJlYW0odGhpcywgcGVlckNvbm5lY3Rpb25JZCwgc3RyZWFtLT5sYWJlbCgpKTsK
LX0KLQotdm9pZCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcjo6cmVtb3ZlU3RyZWFtKGludCBw
ZWVyQ29ubmVjdGlvbklkLCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPiBwcnBTdHJlYW0pCi17Ci0g
ICAgUmVmUHRyPE1lZGlhU3RyZWFtPiBzdHJlYW0gPSBwcnBTdHJlYW07Ci0gICAgQVNTRVJUKG1f
c3RyZWFtcy5jb250YWlucyhzdHJlYW0tPmxhYmVsKCkpKTsKLQotICAgIGlmIChwYWdlQ29udHJv
bGxlcigpKQotICAgICAgICBwYWdlQ29udHJvbGxlcigpLT5yZW1vdmVTdHJlYW0odGhpcywgcGVl
ckNvbm5lY3Rpb25JZCwgc3RyZWFtLT5sYWJlbCgpKTsKLX0KLQotdm9pZCBNZWRpYVN0cmVhbUZy
YW1lQ29udHJvbGxlcjo6b25NZXNzYWdlKGludCBwZWVyQ29ubmVjdGlvbklkLCBjb25zdCBTdHJp
bmcmIG1lc3NhZ2UpCi17Ci0gICAgQVNTRVJUKG1fY2xpZW50cy5jb250YWlucyhwZWVyQ29ubmVj
dGlvbklkKSk7Ci0gICAgQVNTRVJUKG1fY2xpZW50cy5nZXQocGVlckNvbm5lY3Rpb25JZCktPmlz
UGVlckNvbm5lY3Rpb24oKSk7Ci0KLSAgICBSZWZQdHI8UGVlckNvbm5lY3Rpb24+IHBlZXJDb25u
ZWN0aW9uID0gc3RhdGljX2Nhc3Q8UGVlckNvbm5lY3Rpb24qPihtX2NsaWVudHMuZ2V0KHBlZXJD
b25uZWN0aW9uSWQpKTsKLQotICAgIHBlZXJDb25uZWN0aW9uLT5vbk1lc3NhZ2UobWVzc2FnZSk7
Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6Om9uQWRkU3RyZWFtKGludCBw
ZWVyQ29ubmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIHN0cmVhbUxhYmVsLCBQYXNzUmVmUHRyPE1l
ZGlhU3RyZWFtVHJhY2tMaXN0PiB0cmFja3MpCi17Ci0gICAgQVNTRVJUKCFzdHJlYW1MYWJlbC5p
c0VtcHR5KCkpOwotICAgIEFTU0VSVChtX2NsaWVudHMuY29udGFpbnMocGVlckNvbm5lY3Rpb25J
ZCkpOwotICAgIEFTU0VSVChtX2NsaWVudHMuZ2V0KHBlZXJDb25uZWN0aW9uSWQpLT5pc1BlZXJD
b25uZWN0aW9uKCkpOwotCi0gICAgUmVmUHRyPE1lZGlhU3RyZWFtPiBzdHJlYW0gPSBNZWRpYVN0
cmVhbTo6Y3JlYXRlKHRoaXMsIHN0cmVhbUxhYmVsLCB0cmFja3MpOwotCi0gICAgUmVmUHRyPFBl
ZXJDb25uZWN0aW9uPiBwZWVyQ29ubmVjdGlvbiA9IHN0YXRpY19jYXN0PFBlZXJDb25uZWN0aW9u
Kj4obV9jbGllbnRzLmdldChwZWVyQ29ubmVjdGlvbklkKSk7Ci0gICAgcGVlckNvbm5lY3Rpb24t
PnN0cmVhbUFkZGVkKHN0cmVhbS5yZWxlYXNlKCkpOwotfQotCi12b2lkIE1lZGlhU3RyZWFtRnJh
bWVDb250cm9sbGVyOjpvblJlbW92ZVN0cmVhbShpbnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3Qg
U3RyaW5nJiBzdHJlYW1MYWJlbCkKLXsKLSAgICBBU1NFUlQoIXN0cmVhbUxhYmVsLmlzRW1wdHko
KSk7Ci0gICAgQVNTRVJUKG1fY2xpZW50cy5jb250YWlucyhwZWVyQ29ubmVjdGlvbklkKSk7Ci0g
ICAgQVNTRVJUKG1fY2xpZW50cy5nZXQocGVlckNvbm5lY3Rpb25JZCktPmlzUGVlckNvbm5lY3Rp
b24oKSk7Ci0KLSAgICBSZWZQdHI8UGVlckNvbm5lY3Rpb24+IHBlZXJDb25uZWN0aW9uID0gc3Rh
dGljX2Nhc3Q8UGVlckNvbm5lY3Rpb24qPihtX2NsaWVudHMuZ2V0KHBlZXJDb25uZWN0aW9uSWQp
KTsKLSAgICBwZWVyQ29ubmVjdGlvbi0+c3RyZWFtUmVtb3ZlZChzdHJlYW1MYWJlbCk7Ci19Ci0K
LXZvaWQgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6Om9uU2lnbmFsaW5nTWVzc2FnZShpbnQg
cGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIEFTU0VSVCht
X2NsaWVudHMuY29udGFpbnMocGVlckNvbm5lY3Rpb25JZCkpOwotICAgIEFTU0VSVChtX2NsaWVu
dHMuZ2V0KHBlZXJDb25uZWN0aW9uSWQpLT5pc1BlZXJDb25uZWN0aW9uKCkpOwotCi0gICAgUmVm
UHRyPFBlZXJDb25uZWN0aW9uPiBwZWVyQ29ubmVjdGlvbiA9IHN0YXRpY19jYXN0PFBlZXJDb25u
ZWN0aW9uKj4obV9jbGllbnRzLmdldChwZWVyQ29ubmVjdGlvbklkKSk7Ci0gICAgcGVlckNvbm5l
Y3Rpb24tPm9uU2lnbmFsaW5nTWVzc2FnZShtZXNzYWdlKTsKLX0KLQotdm9pZCBNZWRpYVN0cmVh
bUZyYW1lQ29udHJvbGxlcjo6b25OZWdvdGlhdGlvblN0YXJ0ZWQoaW50IHBlZXJDb25uZWN0aW9u
SWQpCi17Ci0gICAgLy8gRklYTUU6IEFzc2VydCBvciBub3Q/Ci0gICAgQVNTRVJUKG1fY2xpZW50
cy5jb250YWlucyhwZWVyQ29ubmVjdGlvbklkKSk7Ci0gICAgQVNTRVJUKG1fY2xpZW50cy5nZXQo
cGVlckNvbm5lY3Rpb25JZCktPmlzUGVlckNvbm5lY3Rpb24oKSk7Ci0KLSAgICBSZWZQdHI8UGVl
ckNvbm5lY3Rpb24+IHBlZXJDb25uZWN0aW9uID0gc3RhdGljX2Nhc3Q8UGVlckNvbm5lY3Rpb24q
PihtX2NsaWVudHMuZ2V0KHBlZXJDb25uZWN0aW9uSWQpKTsKLQotICAgIHBlZXJDb25uZWN0aW9u
LT5vbk5lZ290aWF0aW9uU3RhcnRlZCgpOwotfQotCi12b2lkIE1lZGlhU3RyZWFtRnJhbWVDb250
cm9sbGVyOjpvbk5lZ290aWF0aW9uRG9uZShpbnQgcGVlckNvbm5lY3Rpb25JZCkKLXsKLSAgICAv
LyBGSVhNRTogQXNzZXJ0IG9yIG5vdD8KLSAgICBBU1NFUlQobV9jbGllbnRzLmNvbnRhaW5zKHBl
ZXJDb25uZWN0aW9uSWQpKTsKLSAgICBBU1NFUlQobV9jbGllbnRzLmdldChwZWVyQ29ubmVjdGlv
bklkKS0+aXNQZWVyQ29ubmVjdGlvbigpKTsKLQotICAgIFJlZlB0cjxQZWVyQ29ubmVjdGlvbj4g
cGVlckNvbm5lY3Rpb24gPSBzdGF0aWNfY2FzdDxQZWVyQ29ubmVjdGlvbio+KG1fY2xpZW50cy5n
ZXQocGVlckNvbm5lY3Rpb25JZCkpOwotCi0gICAgcGVlckNvbm5lY3Rpb24tPm9uTmVnb3RpYXRp
b25Eb25lKCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJM
RShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3Ry
ZWFtRnJhbWVDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtRnJh
bWVDb250cm9sbGVyLmgKaW5kZXggZTUxNDcyNS4uNmEzOWFmZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIuaApAQCAtNDUsNyArNDUsNiBA
QCBjbGFzcyBNZWRpYVN0cmVhbVRyYWNrTGlzdDsKIGNsYXNzIE5hdmlnYXRvclVzZXJNZWRpYUVy
cm9yQ2FsbGJhY2s7CiBjbGFzcyBOYXZpZ2F0b3JVc2VyTWVkaWFTdWNjZXNzQ2FsbGJhY2s7CiBj
bGFzcyBQYWdlOwotY2xhc3MgUGVlckNvbm5lY3Rpb247CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25D
b250ZXh0OwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CiBjbGFzcyBTaWduYWxpbmdDYWxsYmFjazsK
QEAgLTcxLDcgKzcwLDYgQEAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNNZWRpYVN0
cmVhbSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0xv
Y2FsTWVkaWFTdHJlYW0oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFs
IGJvb2wgaXNHZW5lcmljQ2xpZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAg
dmlydHVhbCBib29sIGlzUGVlckNvbm5lY3Rpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
CiAgICAgICAgIC8vIENhbGxlZCB3aGVuIHRoZSBmcmFtZSBjb250cm9sbGVyIGlzIGJlaW5nIGRp
c2Nvbm5lY3RlZCB0byB0aGUgTWVkaWFTdHJlYW1DbGllbnQgZW1iZWRkZXIuCiAgICAgICAgIC8v
IENsaWVudHMgc2hvdWxkIG92ZXJyaWRlIHRoaXMgdG8gc2VuZCBhbnkgcmVxdWlyZWQgc2h1dGRv
d24gbWVzc2FnZXMuCkBAIC0xNDAsMTMgKzEzOCw2IEBAIHB1YmxpYzoKICAgICAgICAgdmlydHVh
bCB2b2lkIHVucmVnaXN0ZXIoKSB7IHVucmVnaXN0ZXJDbGllbnQodGhpcyk7IH0KICAgICB9Owog
Ci0gICAgY2xhc3MgUGVlckNvbm5lY3Rpb25DbGllbnQgOiBwdWJsaWMgR2VuZXJpY0NsaWVudCB7
Ci0gICAgcHVibGljOgotICAgICAgICBQZWVyQ29ubmVjdGlvbkNsaWVudChNZWRpYVN0cmVhbUZy
YW1lQ29udHJvbGxlciogZnJhbWVDb250cm9sbGVyLCBpbnQgaWQpIDogR2VuZXJpY0NsaWVudChm
cmFtZUNvbnRyb2xsZXIsIGlkKSB7IH0KLSAgICAgICAgdmlydHVhbCB+UGVlckNvbm5lY3Rpb25D
bGllbnQoKSB7IH0KLSAgICAgICAgdmlydHVhbCBib29sIGlzUGVlckNvbm5lY3Rpb24oKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9Ci0gICAgfTsKLQogICAgIE1lZGlhU3RyZWFtRnJhbWVDb250cm9s
bGVyKEZyYW1lKik7CiAgICAgdmlydHVhbCB+TWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIoKTsK
IApAQCAtMTYzLDI4ICsxNTQsMTIgQEAgcHVibGljOgogICAgIHZvaWQgc3RvcEdlbmVyYXRlZFN0
cmVhbShjb25zdCBTdHJpbmcmIHN0cmVhbUxhYmVsKTsKICAgICB2b2lkIHNldE1lZGlhU3RyZWFt
VHJhY2tFbmFibGVkKGNvbnN0IFN0cmluZyYgdHJhY2tJZCwgYm9vbCBlbmFibGVkKTsKIAotICAg
IFBhc3NSZWZQdHI8UGVlckNvbm5lY3Rpb24+IGNyZWF0ZVBlZXJDb25uZWN0aW9uKGNvbnN0IFN0
cmluZyYgY29uZmlndXJhdGlvbiwgUGFzc1JlZlB0cjxTaWduYWxpbmdDYWxsYmFjaz4pOwotICAg
IHZvaWQgbmV3UGVlckNvbm5lY3Rpb24oaW50IHBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmlu
ZyYgY29uZmlndXJhdGlvbik7Ci0gICAgdm9pZCBzdGFydE5lZ290aWF0aW9uKGludCBwZWVyQ29u
bmVjdGlvbklkKTsKLSAgICB2b2lkIHByb2Nlc3NTaWduYWxpbmdNZXNzYWdlKGludCBwZWVyQ29u
bmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwotICAgIHZvaWQgbWVzc2FnZShpbnQg
cGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLSAgICB2b2lkIGFkZFN0
cmVhbShpbnQgcGVlckNvbm5lY3Rpb25JZCwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4pOwotICAg
IHZvaWQgcmVtb3ZlU3RyZWFtKGludCBwZWVyQ29ubmVjdGlvbklkLCBQYXNzUmVmUHRyPE1lZGlh
U3RyZWFtPik7Ci0gICAgdm9pZCBjbG9zZVBlZXJDb25uZWN0aW9uKGludCBwZWVyQ29ubmVjdGlv
bklkKTsKLQogICAgIC8vIC0tLSBDYWxscyBjb21pbmcgYmFjayBmcm9tIHRoZSBjb250cm9sbGVy
LiAtLS0gLy8KIAogICAgIHZvaWQgc3RyZWFtR2VuZXJhdGVkKGludCByZXF1ZXN0SWQsIGNvbnN0
IFN0cmluZyYgc3RyZWFtTGFiZWwsIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja0xpc3Q+IHRy
YWNrcyk7CiAgICAgdm9pZCBzdHJlYW1HZW5lcmF0aW9uRmFpbGVkKGludCByZXF1ZXN0SWQsIE5h
dmlnYXRvclVzZXJNZWRpYUVycm9yOjpFcnJvckNvZGUpOwogICAgIHZvaWQgc3RyZWFtRmFpbGVk
KGNvbnN0IFN0cmluZyYgc3RyZWFtTGFiZWwpOwogCi0gICAgdm9pZCBvblNpZ25hbGluZ01lc3Nh
Z2UoaW50IHBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0gICAgdm9p
ZCBvbk1lc3NhZ2UoaW50IHBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7
Ci0gICAgdm9pZCBvbkFkZFN0cmVhbShpbnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5n
JiBzdHJlYW1MYWJlbCwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrTGlzdD4pOwotICAgIHZv
aWQgb25SZW1vdmVTdHJlYW0oaW50IHBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgc3Ry
ZWFtTGFiZWwpOwotICAgIHZvaWQgb25OZWdvdGlhdGlvblN0YXJ0ZWQoaW50IHBlZXJDb25uZWN0
aW9uSWQpOwotICAgIHZvaWQgb25OZWdvdGlhdGlvbkRvbmUoaW50IHBlZXJDb25uZWN0aW9uSWQp
OwotCiBwcml2YXRlOgogICAgIGNsYXNzIFJlcXVlc3Q7CiAgICAgY2xhc3MgR2VuZXJhdGVTdHJl
YW1SZXF1ZXN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110350</attachid>
            <date>2011-10-10 05:30:07 -0700</date>
            <delta_ts>2011-10-11 10:06:25 -0700</delta_ts>
            <desc>Patch 3</desc>
            <filename>peerconnection_use_platform_3.patch</filename>
            <type>text/plain</type>
            <size>55947</size>
            <attacher name="Adam Bergkvist">adam.bergkvist</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhNTBmZTYwLi5hNjZlNGM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTkg
QEAKKzIwMTEtMTAtMTAgIEFkYW0gQmVyZ2t2aXN0ICA8YWRhbS5iZXJna3Zpc3RAZXJpY3Nzb24u
Y29tPgorCisgICAgICAgIFVwZGF0ZSBQZWVyQ29ubmVjdGlvbiB0byB1c2UgV2ViQ29yZSBwbGF0
Zm9ybSBpbnRlcmZhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02ODQ2MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEN1cnJlbnRseSBub3QgdGVzdGFibGUuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6
CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogYmluZGluZ3MvanMvSlNQZWVyQ29u
bmVjdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1BlZXJDb25uZWN0aW9uQ29u
c3RydWN0b3I6OmNvbnN0cnVjdEpTUGVlckNvbm5lY3Rpb24pOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L2N1c3RvbS9WOFBlZXJDb25uZWN0aW9uQ3VzdG9tLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBkb20vTWVkaWFTdHJlYW1MaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFt
TGlzdDo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUxpc3Q6OmFwcGVuZCk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUxpc3Q6OnJlbW92ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVN0cmVhbUxpc3Q6OmNvbnRhaW5zKToKKyAgICAgICAgKiBkb20vTWVkaWFT
dHJlYW1MaXN0Lmg6CisgICAgICAgICogcDJwL1BlZXJDb25uZWN0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGVl
ckNvbm5lY3Rpb246OlBlZXJDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25u
ZWN0aW9uOjpwcm9jZXNzU2lnbmFsaW5nTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpQZWVy
Q29ubmVjdGlvbjo6cmVhZHlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlv
bjo6c2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6YWRkU3RyZWFtKToK
KyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uOjpyZW1vdmVTdHJlYW0pOgorICAgICAg
ICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246OmxvY2FsU3RyZWFtcyk6CisgICAgICAgIChXZWJD
b3JlOjpQZWVyQ29ubmVjdGlvbjo6cmVtb3RlU3RyZWFtcyk6CisgICAgICAgIChXZWJDb3JlOjpQ
ZWVyQ29ubmVjdGlvbjo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246
OmljZVByb2Nlc3NpbmdDb21wbGV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rp
b246OnNkcEdlbmVyYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6ZGF0
YVN0cmVhbU1lc3NhZ2VSZWNlaXZlZCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlv
bjo6cmVtb3RlU3RyZWFtQWRkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246
OnJlbW90ZVN0cmVhbVJlbW92ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246
OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rp
b246OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246OnNjaGVkdWxlSW5p
dGlhbE5lZ290aWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uOjppbml0
aWFsTmVnb3RpYXRpb25UaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0
aW9uOjpzY2hlZHVsZVN0cmVhbUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVj
dGlvbjo6c3RyZWFtQ2hhbmdlVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29u
bmVjdGlvbjo6c2NoZWR1bGVSZWFkeVN0YXRlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlBl
ZXJDb25uZWN0aW9uOjpyZWFkeVN0YXRlQ2hhbmdlVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJD
b3JlOjpQZWVyQ29ubmVjdGlvbjo6Y2hhbmdlUmVhZHlTdGF0ZSk6CisgICAgICAgICogcDJwL1Bl
ZXJDb25uZWN0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6cmVmRXZl
bnRUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246OmRlcmVmRXZlbnRU
YXJnZXQpOgorICAgICAgICAqIHAycC9QZWVyQ29ubmVjdGlvbi5pZGw6CisgICAgICAgICogcGFn
ZS9NZWRpYVN0cmVhbUNsaWVudC5oOgorICAgICAgICAqIHBhZ2UvTWVkaWFTdHJlYW1Db250cm9s
bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtQ29udHJvbGxlcjo6TWVkaWFT
dHJlYW1Db250cm9sbGVyKToKKyAgICAgICAgKiBwYWdlL01lZGlhU3RyZWFtQ29udHJvbGxlci5o
OgorICAgICAgICAqIHBhZ2UvTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAqIHBhZ2UvTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIuaDoKKwogMjAxMS0xMC0wNiAgQW5k
cmVhcyBLbGluZyAgPGtsaW5nQHdlYmtpdC5vcmc+CiAKICAgICAgICAgU2hyaW5rIEJvcmRlclZh
bHVlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDBlZDdkNjcuLmNiYjJlZGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKQEAgLTIyMTIsNyArMjIxMiw2IEBACiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Tm9kZUN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5v
ZGVMaXN0Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm90
aWZpY2F0aW9uQ2VudGVyQ3VzdG9tLmNwcCcsCi0gICAgICAgICAgICAnYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4UGVlckNvbm5lY3Rpb25DdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92
OC9jdXN0b20vVjhQZXJmb3JtYW5jZUN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOFBvcFN0YXRlRXZlbnRDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5k
aW5ncy92OC9jdXN0b20vVjhTUUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcCcsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
cHJvCmluZGV4IDA2NGRjOTguLjI2NDQ2MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUucHJvCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0zMzE3LDggKzMz
MTcsNyBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfTUVESUFfU1RSRUFNPTEpIHsKIAogICAg
IHY4IHsKICAgICAgICAgU09VUkNFUyArPSBcCi0gICAgICAgICAgICBiaW5kaW5ncy92OC9jdXN0
b20vVjhOYXZpZ2F0b3JDdXN0b20uY3BwIFwKLSAgICAgICAgICAgIGJpbmRpbmdzL3Y4L2N1c3Rv
bS9WOFBlZXJDb25uZWN0aW9uQ3VzdG9tLmNwcAorICAgICAgICAgICAgYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4TmF2aWdhdG9yQ3VzdG9tLmNwcAogICAgIH0gZWxzZSB7CiAgICAgICAgIFNPVVJDRVMg
Kz0gXAogICAgICAgICAgICAgYmluZGluZ3MvanMvSlNOYXZpZ2F0b3JDdXN0b20uY3BwIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGVlckNvbm5lY3Rpb25DdXN0
b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQZWVyQ29ubmVjdGlvbkN1c3Rv
bS5jcHAKaW5kZXggNzBiYjE3Mi4uZTI0MzdjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNQZWVyQ29ubmVjdGlvbkN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNQZWVyQ29ubmVjdGlvbkN1c3RvbS5jcHAKQEAgLTEsNSArMSw2IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDIyICszMCwyNSBAQAog
I2luY2x1ZGUgIkpTUGVlckNvbm5lY3Rpb24uaCIKIAogI2luY2x1ZGUgIkNhbGxiYWNrRnVuY3Rp
b24uaCIKLSNpbmNsdWRlICJET01XaW5kb3cuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1
ZGUgIkpTRE9NV2luZG93Q3VzdG9tLmgiCiAjaW5jbHVkZSAiSlNTaWduYWxpbmdDYWxsYmFjay5o
IgotI2luY2x1ZGUgIk1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiUGVl
ckNvbm5lY3Rpb24uaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgeworI2luY2x1ZGUgPHJ1bnRpbWUv
RXJyb3IuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAorbmFtZXNwYWNlIFdlYkNvcmUgewor
CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTUGVlckNvbm5lY3Rpb25Db25zdHJ1Y3Rv
cjo6Y29uc3RydWN0SlNQZWVyQ29ubmVjdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNQ
ZWVyQ29ubmVjdGlvbkNvbnN0cnVjdG9yKiBqc0NvbnN0cnVjdG9yID0gc3RhdGljX2Nhc3Q8SlNQ
ZWVyQ29ubmVjdGlvbkNvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpOworICAgIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBqc0NvbnN0cnVjdG9yLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGV4ZWMsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKGV4ZWMsICJQZWVyQ29ubmVjdGlvbiBjb25zdHJ1
Y3RvciBhc3NvY2lhdGVkIGRvY3VtZW50IGlzIHVuYXZhaWxhYmxlIikpOworCisgICAgaWYgKGV4
ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDIpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhl
YywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpKTsKIAotICAg
IFN0cmluZyBjb25maWd1cmF0aW9uID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDAp
LnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBTdHJpbmcgc2VydmVyQ29uZmlndXJhdGlvbiA9IHVzdHJp
bmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSk7CiAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSk7CiAKQEAgLTUyLDE3ICs1Niw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
SlNQZWVyQ29ubmVjdGlvbkNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1BlZXJDb25uZWN0CiAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoKSk7CiAKLSAgICBGcmFtZSogZnJhbWUgPSBhc0pTRE9NV2luZG93KGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSktPmltcGwoKS0+ZnJhbWUoKTsKLSAgICBNZWRpYVN0cmVhbUZy
YW1lQ29udHJvbGxlciogZnJhbWVDb250cm9sbGVyID0gZnJhbWUgPyBmcmFtZS0+bWVkaWFTdHJl
YW1GcmFtZUNvbnRyb2xsZXIoKSA6IDA7Ci0KLSAgICBSZWZQdHI8UGVlckNvbm5lY3Rpb24+IHBl
ZXJDb25uZWN0aW9uOwotICAgIGlmIChmcmFtZUNvbnRyb2xsZXIpCi0gICAgICAgIHBlZXJDb25u
ZWN0aW9uID0gZnJhbWVDb250cm9sbGVyLT5jcmVhdGVQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0
aW9uLCBzaWduYWxpbmdDYWxsYmFjayk7Ci0KLSAgICBpZiAoIXBlZXJDb25uZWN0aW9uKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7Ci0KLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGFzT2JqZWN0KHRvSlMoZXhlYywganNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2Jq
ZWN0KCksIHBlZXJDb25uZWN0aW9uLmdldCgpKSkpOworICAgIFJlZlB0cjxQZWVyQ29ubmVjdGlv
bj4gcGVlckNvbm5lY3Rpb24gPSBQZWVyQ29ubmVjdGlvbjo6Y3JlYXRlKHNlcnZlckNvbmZpZ3Vy
YXRpb24sIHNpZ25hbGluZ0NhbGxiYWNrLnJlbGVhc2UoKSwgY29udGV4dCk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShDUkVBVEVfRE9NX1dSQVBQRVIoZXhlYywganNDb25zdHJ1Y3Rvci0+
Z2xvYmFsT2JqZWN0KCksIFBlZXJDb25uZWN0aW9uLCBwZWVyQ29ubmVjdGlvbi5nZXQoKSkpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhQZWVyQ29ubmVjdGlvbkN1c3RvbS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhQZWVyQ29ubmVjdGlvbkN1c3RvbS5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4MWNkYTEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4UGVlckNvbm5lY3Rpb25DdXN0b20uY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLQotI2luY2x1ZGUgIlY4UGVlckNvbm5l
Y3Rpb24uaCIKLQotI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGUuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIk1lZGlhU3RyZWFtRnJhbWVDb250
cm9sbGVyLmgiCi0jaW5jbHVkZSAiUGVlckNvbm5lY3Rpb24uaCIKLSNpbmNsdWRlICJWOEJpbmRp
bmcuaCIKLSNpbmNsdWRlICJWOFByb3h5LmgiCi0jaW5jbHVkZSAiVjhTaWduYWxpbmdDYWxsYmFj
ay5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFBl
ZXJDb25uZWN0aW9uOjpjb25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFy
Z3MpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uUGVlckNvbm5lY3Rpb24uQ29uc3RydWN0b3IiKTsK
LQotICAgIGlmICghYXJncy5Jc0NvbnN0cnVjdENhbGwoKSkKLSAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoIkRPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0
aW9uLiIsIFY4UHJveHk6OlR5cGVFcnJvcik7Ci0KLSAgICBpbnQgYXJnTGVuZ3RoID0gYXJncy5M
ZW5ndGgoKTsKLSAgICBpZiAoYXJnTGVuZ3RoICE9IDIpCi0gICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKCJUaGUgUGVlckNvbm5lY3Rpb24gY29uc3RydWN0b3IgdGFrZXMgdHdvIGFyZ3VtZW50cy4i
LCBWOFByb3h5OjpUeXBlRXJyb3IpOwotCi0gICAgdjg6OlRyeUNhdGNoIGV4Y2VwdGlvbkNhdGNo
ZXI7Ci0gICAgU3RyaW5nIGNvbmZpZ3VyYXRpb24gPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXS0+
VG9TdHJpbmcoKSk7Ci0gICAgaWYgKGV4Y2VwdGlvbkNhdGNoZXIuSGFzQ2F1Z2h0KCkpCi0gICAg
ICAgIHJldHVybiB0aHJvd0Vycm9yKGV4Y2VwdGlvbkNhdGNoZXIuRXhjZXB0aW9uKCkpOwotCi0g
ICAgYm9vbCBzdWNjZWVkZWQgPSBmYWxzZTsKLSAgICBSZWZQdHI8U2lnbmFsaW5nQ2FsbGJhY2s+
IHNpZ25hbGluZ0NhbGxiYWNrID0gY3JlYXRlRnVuY3Rpb25Pbmx5Q2FsbGJhY2s8VjhTaWduYWxp
bmdDYWxsYmFjaz4oYXJnc1sxXSwgc3VjY2VlZGVkKTsKLSAgICBpZiAoIXN1Y2NlZWRlZCB8fCAh
c2lnbmFsaW5nQ2FsbGJhY2spCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJUaGUgUGVlckNv
bm5lY3Rpb24gY29uc3RydWN0b3IgbXVzdCBiZSBnaXZlbiBhIFNpZ25hbGluZ0NhbGxiYWNrIGNh
bGxiYWNrLiIsIFY4UHJveHk6OlR5cGVFcnJvcik7Ci0KLSAgICBGcmFtZSogZnJhbWUgPSBWOFBy
b3h5OjpyZXRyaWV2ZUZyYW1lRm9yRW50ZXJlZENvbnRleHQoKTsKLSAgICBNZWRpYVN0cmVhbUZy
YW1lQ29udHJvbGxlciogZnJhbWVDb250cm9sbGVyID0gZnJhbWUgPyBmcmFtZS0+bWVkaWFTdHJl
YW1GcmFtZUNvbnRyb2xsZXIoKSA6IDA7Ci0KLSAgICBSZWZQdHI8UGVlckNvbm5lY3Rpb24+IHBl
ZXJDb25uZWN0aW9uOwotICAgIGlmIChmcmFtZUNvbnRyb2xsZXIpCi0gICAgICAgIHBlZXJDb25u
ZWN0aW9uID0gZnJhbWVDb250cm9sbGVyLT5jcmVhdGVQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0
aW9uLCBzaWduYWxpbmdDYWxsYmFjayk7Ci0KLSAgICBpZiAoIXBlZXJDb25uZWN0aW9uKQotICAg
ICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotCi0gICAgVjhET01XcmFwcGVyOjpzZXRET01X
cmFwcGVyKGFyZ3MuSG9sZGVyKCksICZpbmZvLCBwZWVyQ29ubmVjdGlvbi5nZXQoKSk7Ci0gICAg
cmV0dXJuIHRvVjgocGVlckNvbm5lY3Rpb24ucmVsZWFzZSgpLCBhcmdzLkhvbGRlcigpKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVB
TSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NZWRpYVN0cmVhbUxpc3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL01lZGlhU3RyZWFtTGlzdC5jcHAKaW5kZXggZDNhZDk0Ni4uNjUx
ODU2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL01lZGlhU3RyZWFtTGlzdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL01lZGlhU3RyZWFtTGlzdC5jcHAKQEAgLTEsNSArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ3LDQ3ICs0OCwyOCBA
QCB1bnNpZ25lZCBNZWRpYVN0cmVhbUxpc3Q6Omxlbmd0aCgpIGNvbnN0CiAgICAgcmV0dXJuIG1f
c3RyZWFtcy5zaXplKCk7CiB9CiAKLVBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+IE1lZGlhU3RyZWFt
TGlzdDo6aXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QKK01lZGlhU3RyZWFtKiBNZWRpYVN0cmVh
bUxpc3Q6Oml0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0CiB7Ci0gICAgSGFzaE1hcDxTdHJpbmcs
IFJlZlB0cjxNZWRpYVN0cmVhbT4gPjo6Y29uc3RfaXRlcmF0b3IgaSA9IG1fc3RyZWFtcy5iZWdp
bigpOwotICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGkgIT0gbV9zdHJlYW1zLmVuZCgpOyArK2ks
ICsraikgewotICAgICAgICBpZiAoaiA9PSBpbmRleCkKLSAgICAgICAgICAgIHJldHVybiBpLT5z
ZWNvbmQ7Ci0gICAgfQotICAgIHJldHVybiBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPigpOworICAg
IHJldHVybiBtX3N0cmVhbXNbaW5kZXhdLmdldCgpOwogfQogCi12b2lkIE1lZGlhU3RyZWFtTGlz
dDo6YWRkKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+IHN0cmVhbSkKK3ZvaWQgTWVkaWFTdHJlYW1M
aXN0OjphcHBlbmQoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4gc3RyZWFtKQogewotICAgIFJlZlB0
cjxNZWRpYVN0cmVhbT4gcyA9IHN0cmVhbTsKLSAgICBBU1NFUlQoIWNvbnRhaW5zKHMpKTsKLSAg
ICBtX3N0cmVhbXMuYWRkKHMtPmxhYmVsKCksIHMpOworICAgIG1fc3RyZWFtcy5hcHBlbmQoc3Ry
ZWFtKTsKIH0KIAotdm9pZCBNZWRpYVN0cmVhbUxpc3Q6OnJlbW92ZShQYXNzUmVmUHRyPE1lZGlh
U3RyZWFtPiBzdHJlYW0pCit2b2lkIE1lZGlhU3RyZWFtTGlzdDo6cmVtb3ZlKGNvbnN0IFJlZlB0
cjxNZWRpYVN0cmVhbT4mIHN0cmVhbSkKIHsKLSAgICBSZWZQdHI8TWVkaWFTdHJlYW0+IHMgPSBz
dHJlYW07Ci0gICAgQVNTRVJUKGNvbnRhaW5zKHMpKTsKLSAgICBtX3N0cmVhbXMucmVtb3ZlKHMt
PmxhYmVsKCkpOworICAgIHNpemVfdCBpID0gbV9zdHJlYW1zLmZpbmQoc3RyZWFtKTsKKyAgICBp
ZiAoaSAhPSBub3RGb3VuZCkKKyAgICAgICAgcmV0dXJuIG1fc3RyZWFtcy5yZW1vdmUoaSk7CiB9
CiAKLWJvb2wgTWVkaWFTdHJlYW1MaXN0Ojpjb250YWlucyhQYXNzUmVmUHRyPE1lZGlhU3RyZWFt
PiBzdHJlYW0pIGNvbnN0Citib29sIE1lZGlhU3RyZWFtTGlzdDo6Y29udGFpbnMoY29uc3QgUmVm
UHRyPE1lZGlhU3RyZWFtPiYgc3RyZWFtKSBjb25zdAogewotICAgIFJlZlB0cjxNZWRpYVN0cmVh
bT4gcyA9IHN0cmVhbTsKLSAgICByZXR1cm4gbV9zdHJlYW1zLmNvbnRhaW5zKHMtPmxhYmVsKCkp
OworICAgIHJldHVybiBtX3N0cmVhbXMuY29udGFpbnMoc3RyZWFtKTsKIH0KIAotYm9vbCBNZWRp
YVN0cmVhbUxpc3Q6OmNvbnRhaW5zKGNvbnN0IFN0cmluZyYgbGFiZWwpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fc3RyZWFtcy5jb250YWlucyhsYWJlbCk7Ci19Ci0KLVBhc3NSZWZQdHI8TWVkaWFT
dHJlYW0+IE1lZGlhU3RyZWFtTGlzdDo6Z2V0KGNvbnN0IFN0cmluZyYgbGFiZWwpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fc3RyZWFtcy5nZXQobGFiZWwpOwotfQotCi0KIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vTWVkaWFTdHJlYW1MaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20v
TWVkaWFTdHJlYW1MaXN0LmgKaW5kZXggNzMyMGZkZC4uOTg1NTYyYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL01lZGlhU3RyZWFtTGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9NZWRpYVN0cmVhbUxpc3QuaApAQCAtMjgsMTAgKzI4LDYgQEAKICNpZiBFTkFCTEUoTUVESUFf
U1RSRUFNKQogCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW0uaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtNDIsMTkgKzM4LDE3IEBAIHB1YmxpYzoKIAogICAgIC8vIERPTSBtZXRob2RzICYgYXR0cmli
dXRlcyBmb3IgTWVkaWFTdHJlYW1MaXN0CiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7Ci0g
ICAgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4gaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7Cisg
ICAgTWVkaWFTdHJlYW0qIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OwogCiAgICAgLy8gTGlz
dCBtYW5pcHVsYXRpb24KLSAgICB2b2lkIGFkZChQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPik7Ci0g
ICAgdm9pZCByZW1vdmUoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4pOwotICAgIGJvb2wgY29udGFp
bnMoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4pIGNvbnN0OwotICAgIGJvb2wgY29udGFpbnMoY29u
c3QgU3RyaW5nJiBsYWJlbCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4gZ2V0
KGNvbnN0IFN0cmluZyYgbGFiZWwpIGNvbnN0OworICAgIHZvaWQgYXBwZW5kKFBhc3NSZWZQdHI8
TWVkaWFTdHJlYW0+KTsKKyAgICB2b2lkIHJlbW92ZShjb25zdCBSZWZQdHI8TWVkaWFTdHJlYW0+
Jik7CisgICAgYm9vbCBjb250YWlucyhjb25zdCBSZWZQdHI8TWVkaWFTdHJlYW0+JikgY29uc3Q7
CiAKIHByaXZhdGU6CiAgICAgTWVkaWFTdHJlYW1MaXN0KCk7CiAKLSAgICBIYXNoTWFwPFN0cmlu
ZywgUmVmUHRyPE1lZGlhU3RyZWFtPiA+IG1fc3RyZWFtczsKKyAgICBWZWN0b3I8UmVmUHRyPE1l
ZGlhU3RyZWFtPiA+IG1fc3RyZWFtczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3AycC9QZWVyQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wMnAvUGVlckNvbm5lY3Rpb24uY3BwCmluZGV4IGJkYTNlZTMuLjVhZGE2NTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3AycC9QZWVyQ29ubmVjdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcDJwL1BlZXJDb25uZWN0aW9uLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNjEgKzI4LDQxIEBACiAKICNpZiBF
TkFCTEUoTUVESUFfU1RSRUFNKQogCi0jaW5jbHVkZSAiRGlzcGF0Y2hUYXNrLmgiCi0jaW5jbHVk
ZSAiRXJyb3JFdmVudC5oIgotI2luY2x1ZGUgIkV2ZW50LmgiCi0jaW5jbHVkZSAiRXZlbnROYW1l
cy5oIgotI2luY2x1ZGUgIk1lZGlhU3RyZWFtLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5o
IgogI2luY2x1ZGUgIk1lZGlhU3RyZWFtRXZlbnQuaCIKLSNpbmNsdWRlICJNZWRpYVN0cmVhbUxp
c3QuaCIKICNpbmNsdWRlICJNZXNzYWdlRXZlbnQuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRp
b25Db250ZXh0LmgiCi0jaW5jbHVkZSAiU2lnbmFsaW5nQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJT
ZWN1cml0eU9yaWdpbi5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8UGVl
ckNvbm5lY3Rpb24+IFBlZXJDb25uZWN0aW9uOjpjcmVhdGUoTWVkaWFTdHJlYW1GcmFtZUNvbnRy
b2xsZXIqIGZyYW1lQ29udHJvbGxlciwgaW50IGlkLCBjb25zdCBTdHJpbmcmIGNvbmZpZ3VyYXRp
b24sIFBhc3NSZWZQdHI8U2lnbmFsaW5nQ2FsbGJhY2s+IHNpZ25hbGluZ0NhbGxiYWNrKQorUGFz
c1JlZlB0cjxQZWVyQ29ubmVjdGlvbj4gUGVlckNvbm5lY3Rpb246OmNyZWF0ZShjb25zdCBTdHJp
bmcmIHNlcnZlckNvbmZpZ3VyYXRpb24sIFBhc3NSZWZQdHI8U2lnbmFsaW5nQ2FsbGJhY2s+IHNp
Z25hbGluZ0NhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogewotICAg
IC8vIEZJWE1FOiBWZXJpZnkgdGhhdCBjb25maWd1cmF0aW9uIGZvbGxvd3MgdGhlIHNwZWNpZmll
ZCBmb3JtYXQsIGlmIG5vdCByZXR1cm4gbnVsbC4KKyAgICBSZWZQdHI8UGVlckNvbm5lY3Rpb24+
IGNvbm5lY3Rpb24gPSBhZG9wdFJlZihuZXcgUGVlckNvbm5lY3Rpb24oc2VydmVyQ29uZmlndXJh
dGlvbiwgc2lnbmFsaW5nQ2FsbGJhY2ssIGNvbnRleHQpKTsKKyAgICBjb25uZWN0aW9uLT5zZXRQ
ZW5kaW5nQWN0aXZpdHkoY29ubmVjdGlvbi5nZXQoKSk7CisgICAgY29ubmVjdGlvbi0+c2NoZWR1
bGVJbml0aWFsTmVnb3RpYXRpb24oKTsKIAotICAgIFJlZlB0cjxQZWVyQ29ubmVjdGlvbj4gcGVl
ckNvbm5lY3Rpb24gPSBhZG9wdFJlZihuZXcgUGVlckNvbm5lY3Rpb24oZnJhbWVDb250cm9sbGVy
LCBpZCwgY29uZmlndXJhdGlvbiwgc2lnbmFsaW5nQ2FsbGJhY2spKTsKLSAgICBwZWVyQ29ubmVj
dGlvbi0+aW5pdCgpOwotICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5yZWxlYXNlKCk7CisgICAg
cmV0dXJuIGNvbm5lY3Rpb24ucmVsZWFzZSgpOwogfQogCi1QZWVyQ29ubmVjdGlvbjo6UGVlckNv
bm5lY3Rpb24oTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqIGZyYW1lQ29udHJvbGxlciwgaW50
IGlkLCBjb25zdCBTdHJpbmcmIGNvbmZpZ3VyYXRpb24sIFBhc3NSZWZQdHI8U2lnbmFsaW5nQ2Fs
bGJhY2s+IHNpZ25hbGluZ0NhbGxiYWNrKQotICAgIDogUGVlckNvbm5lY3Rpb25DbGllbnQoZnJh
bWVDb250cm9sbGVyLCBpZCkKLSAgICAsIG1fY29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKQot
ICAgICwgbV9yZWFkeVN0YXRlKE5FVykKK1BlZXJDb25uZWN0aW9uOjpQZWVyQ29ubmVjdGlvbihj
b25zdCBTdHJpbmcmIHNlcnZlckNvbmZpZ3VyYXRpb24sIFBhc3NSZWZQdHI8U2lnbmFsaW5nQ2Fs
bGJhY2s+IHNpZ25hbGluZ0NhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
KQorICAgIDogQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQsIHRoaXMpCiAgICAgLCBtX3NpZ25hbGlu
Z0NhbGxiYWNrKHNpZ25hbGluZ0NhbGxiYWNrKQorICAgICwgbV9yZWFkeVN0YXRlKE5FVykKKyAg
ICAsIG1faWNlU3RhcnRlZChmYWxzZSkKKyAgICAsIG1fbG9jYWxTdHJlYW1zKE1lZGlhU3RyZWFt
TGlzdDo6Y3JlYXRlKCkpCisgICAgLCBtX3JlbW90ZVN0cmVhbXMoTWVkaWFTdHJlYW1MaXN0Ojpj
cmVhdGUoKSkKKyAgICAsIG1faW5pdGlhbE5lZ290aWF0aW9uVGltZXIodGhpcywgJlBlZXJDb25u
ZWN0aW9uOjppbml0aWFsTmVnb3RpYXRpb25UaW1lckZpcmVkKQorICAgICwgbV9zdHJlYW1DaGFu
Z2VUaW1lcih0aGlzLCAmUGVlckNvbm5lY3Rpb246OnN0cmVhbUNoYW5nZVRpbWVyRmlyZWQpCisg
ICAgLCBtX3JlYWR5U3RhdGVDaGFuZ2VUaW1lcih0aGlzLCAmUGVlckNvbm5lY3Rpb246OnJlYWR5
U3RhdGVDaGFuZ2VUaW1lckZpcmVkKQorICAgICwgbV9wZWVySGFuZGxlcihQZWVySGFuZGxlcjo6
Y3JlYXRlKHRoaXMsIHNlcnZlckNvbmZpZ3VyYXRpb24sIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2lu
KCktPnRvU3RyaW5nKCkpKQogewotICAgIEFTU0VSVChmcmFtZUNvbnRyb2xsZXIpOwotICAgIG1f
bG9jYWxTdHJlYW1MaXN0ID0gTWVkaWFTdHJlYW1MaXN0OjpjcmVhdGUoKTsKLSAgICBtX3JlbW90
ZVN0cmVhbUxpc3QgPSBNZWRpYVN0cmVhbUxpc3Q6OmNyZWF0ZSgpOwotfQotCi12b2lkIFBlZXJD
b25uZWN0aW9uOjppbml0KCkKLXsKLSAgICBpZiAoTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIq
IGZyYW1lQ29udHJvbGxlciA9IG1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKCkpCi0gICAgICAg
IGZyYW1lQ29udHJvbGxlci0+bmV3UGVlckNvbm5lY3Rpb24obV9jbGllbnRJZCwgbV9jb25maWd1
cmF0aW9uKTsKLQotICAgIHBvc3RTdGFydE5lZ290aWF0aW9uVGFzaygpOwogfQogCiBQZWVyQ29u
bmVjdGlvbjo6flBlZXJDb25uZWN0aW9uKCkKIHsKIH0KIAotTWVkaWFTdHJlYW1MaXN0KiBQZWVy
Q29ubmVjdGlvbjo6bG9jYWxTdHJlYW1zKCkKLXsKLSAgICByZXR1cm4gbV9sb2NhbFN0cmVhbUxp
c3QuZ2V0KCk7Ci19Ci0KLU1lZGlhU3RyZWFtTGlzdCogUGVlckNvbm5lY3Rpb246OnJlbW90ZVN0
cmVhbXMoKQotewotICAgIHJldHVybiBtX3JlbW90ZVN0cmVhbUxpc3QuZ2V0KCk7Ci19Ci0KIHZv
aWQgUGVlckNvbm5lY3Rpb246OnByb2Nlc3NTaWduYWxpbmdNZXNzYWdlKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBD
TE9TRUQpIHsKQEAgLTg5LDggKzcwLDI4IEBAIHZvaWQgUGVlckNvbm5lY3Rpb246OnByb2Nlc3NT
aWduYWxpbmdNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgRXhjZXB0aW9uQ29kCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIo
KSkKLSAgICAgICAgbWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIoKS0+cHJvY2Vzc1NpZ25hbGlu
Z01lc3NhZ2UobV9jbGllbnRJZCwgbWVzc2FnZSk7CisgICAgaWYgKCFtZXNzYWdlLnN0YXJ0c1dp
dGgoIlNEUFxuIikpCisgICAgICAgIHJldHVybjsKKworICAgIFN0cmluZyBzZHAgPSBtZXNzYWdl
LnN1YnN0cmluZyg0KTsKKworICAgIGlmIChtX2ljZVN0YXJ0ZWQpIHsKKyAgICAgICAgaWYgKG1f
cGVlckhhbmRsZXIpCisgICAgICAgICAgICBtX3BlZXJIYW5kbGVyLT5wcm9jZXNzU0RQKHNkcCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9wZWVySGFuZGxlcikKKyAgICAg
ICAgbV9wZWVySGFuZGxlci0+aGFuZGxlSW5pdGlhbE9mZmVyKHNkcCk7CisKKyAgICBzY2hlZHVs
ZVN0cmVhbUNoYW5nZSgpOworICAgIG1faWNlU3RhcnRlZCA9IHRydWU7CisgICAgc2NoZWR1bGVS
ZWFkeVN0YXRlQ2hhbmdlKE5FR09USUFUSU5HKTsKK30KKworUGVlckNvbm5lY3Rpb246OlJlYWR5
U3RhdGUgUGVlckNvbm5lY3Rpb246OnJlYWR5U3RhdGUoKSBjb25zdAoreworICAgIHJldHVybiBt
X3JlYWR5U3RhdGU7CiB9CiAKIHZvaWQgUGVlckNvbm5lY3Rpb246OnNlbmQoY29uc3QgU3RyaW5n
JiB0ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTEwMCw1NCArMTAxLDgyIEBAIHZvaWQgUGVl
ckNvbm5lY3Rpb246OnNlbmQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIENTdHJpbmcgdXRmOCA9IHRleHQudXRmOCgp
OwotICAgIGlmICh1dGY4Lmxlbmd0aCgpID4ga01heE1lc3NhZ2VVVEY4TGVuZ3RoKSB7CisgICAg
Q1N0cmluZyBkYXRhID0gdGV4dC51dGY4KCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gZGF0YS5s
ZW5ndGgoKTsKKworICAgIGlmIChsZW5ndGggPiBrTWF4TWVzc2FnZVVURjhMZW5ndGgpIHsKICAg
ICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBpZiAobWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIoKSkKLSAgICAgICAgbWVkaWFTdHJl
YW1GcmFtZUNvbnRyb2xsZXIoKS0+bWVzc2FnZShtX2NsaWVudElkLCB0ZXh0KTsKKyAgICBpZiAo
bV9wZWVySGFuZGxlcikKKyAgICAgICAgbV9wZWVySGFuZGxlci0+c2VuZERhdGFTdHJlYW1NZXNz
YWdlKGRhdGEuZGF0YSgpLCBsZW5ndGgpOwogfQogCi12b2lkIFBlZXJDb25uZWN0aW9uOjphZGRT
dHJlYW0oUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4gcHJwU3RyZWFtLCBFeGNlcHRpb25Db2RlJiBl
YykKK3ZvaWQgUGVlckNvbm5lY3Rpb246OmFkZFN0cmVhbShjb25zdCBQYXNzUmVmUHRyPE1lZGlh
U3RyZWFtPiBwcnBTdHJlYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmIChtX3JlYWR5
U3RhdGUgPT0gQ0xPU0VEKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyBUaGUgU3RyZWFtIG9iamVjdCBpcyBndWFyYW50
ZWVkIHRvIGV4aXN0IHNpbmNlIFN0cmljdFR5cGVDaGVja2luZyBpcyBzZXQgaW4gdGhlIGlkbC4K
KyAgICAvLyBUaGUgTWVkaWFTdHJlYW0gb2JqZWN0IGlzIGd1YXJhbnRlZWQgdG8gZXhpc3Qgc2lu
Y2UgU3RyaWN0VHlwZUNoZWNraW5nIGlzIHNldCBpbiB0aGUgaWRsLgogCiAgICAgUmVmUHRyPE1l
ZGlhU3RyZWFtPiBzdHJlYW0gPSBwcnBTdHJlYW07CiAKLSAgICBpZiAobV9sb2NhbFN0cmVhbUxp
c3QtPmNvbnRhaW5zKHN0cmVhbSkpCisgICAgaWYgKG1fbG9jYWxTdHJlYW1zLT5jb250YWlucyhz
dHJlYW0pKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2xvY2FsU3RyZWFtTGlzdC0+YWRkKHN0
cmVhbSk7CisgICAgbV9sb2NhbFN0cmVhbXMtPmFwcGVuZChzdHJlYW0pOworCisgICAgLy8gRklY
TUU6IGdldCBmcm9tIHN0cmVhbS0+ZGVzY3JpcHRvcigpIHdoZW4gaXQncyBhdmFpbGFibGUsIHNl
ZSBodHRwOi8vd2Via2l0Lm9yZy9iLzY4NDY0CisgICAgTWVkaWFTdHJlYW1EZXNjcmlwdG9yKiBz
dHJlYW1EZXNjcmlwdG9yID0gMDsKKyAgICBzaXplX3QgaSA9IG1fcGVuZGluZ1JlbW92ZVN0cmVh
bXMuZmluZChzdHJlYW1EZXNjcmlwdG9yKTsKKyAgICBpZiAoaSAhPSBub3RGb3VuZCkgeworICAg
ICAgICBtX3BlbmRpbmdSZW1vdmVTdHJlYW1zLnJlbW92ZShpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KIAotICAgIGlmIChtZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcigpKQotICAgICAgICBt
ZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcigpLT5hZGRTdHJlYW0obV9jbGllbnRJZCwgc3RyZWFt
KTsKKyAgICBtX3BlbmRpbmdBZGRTdHJlYW1zLmFwcGVuZChzdHJlYW1EZXNjcmlwdG9yKTsKKyAg
ICBpZiAobV9pY2VTdGFydGVkKQorICAgICAgICBzY2hlZHVsZVN0cmVhbUNoYW5nZSgpOwogfQog
Ci12b2lkIFBlZXJDb25uZWN0aW9uOjpyZW1vdmVTdHJlYW0oUGFzc1JlZlB0cjxNZWRpYVN0cmVh
bT4gcHJwU3RyZWFtLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgUGVlckNvbm5lY3Rpb246OnJl
bW92ZVN0cmVhbShNZWRpYVN0cmVhbSogc3RyZWFtLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAg
ICBpZiAobV9yZWFkeVN0YXRlID09IENMT1NFRCkgewogICAgICAgICBlYyA9IElOVkFMSURfU1RB
VEVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gVGhlIFN0cmVhbSBvYmpl
Y3QgaXMgZ3VhcmFudGVlZCB0byBleGlzdCBzaW5jZSBTdHJpY3RUeXBlQ2hlY2tpbmcgaXMgc2V0
IGluIHRoZSBpZGwuCisgICAgLy8gVGhlIE1lZGlhU3RyZWFtIG9iamVjdCBpcyBndWFyYW50ZWVk
IHRvIGV4aXN0IHNpbmNlIFN0cmljdFR5cGVDaGVja2luZyBpcyBzZXQgaW4gdGhlIGlkbC4KIAot
ICAgIFJlZlB0cjxNZWRpYVN0cmVhbT4gc3RyZWFtID0gcHJwU3RyZWFtOworICAgIGlmICghbV9s
b2NhbFN0cmVhbXMtPmNvbnRhaW5zKHN0cmVhbSkpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
bG9jYWxTdHJlYW1zLT5yZW1vdmUoc3RyZWFtKTsKIAotICAgIGlmICghbV9sb2NhbFN0cmVhbUxp
c3QtPmNvbnRhaW5zKHN0cmVhbSkpCisgICAgLy8gRklYTUU6IGdldCBmcm9tIHN0cmVhbS0+ZGVz
Y3JpcHRvcigpIHdoZW4gaXQncyBhdmFpbGFibGUsIHNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzY4
NDY0CisgICAgTWVkaWFTdHJlYW1EZXNjcmlwdG9yKiBzdHJlYW1EZXNjcmlwdG9yID0gMDsKKyAg
ICBzaXplX3QgaSA9IG1fcGVuZGluZ0FkZFN0cmVhbXMuZmluZChzdHJlYW1EZXNjcmlwdG9yKTsK
KyAgICBpZiAoaSAhPSBub3RGb3VuZCkgeworICAgICAgICBtX3BlbmRpbmdBZGRTdHJlYW1zLnJl
bW92ZShpKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIG1fbG9jYWxTdHJlYW1MaXN0
LT5yZW1vdmUoc3RyZWFtKTsKKyAgICBtX3BlbmRpbmdSZW1vdmVTdHJlYW1zLmFwcGVuZChzdHJl
YW1EZXNjcmlwdG9yKTsKKyAgICBpZiAobV9pY2VTdGFydGVkKQorICAgICAgICBzY2hlZHVsZVN0
cmVhbUNoYW5nZSgpOworfQogCi0gICAgaWYgKG1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKCkp
Ci0gICAgICAgIG1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKCktPnJlbW92ZVN0cmVhbShtX2Ns
aWVudElkLCBzdHJlYW0pOworTWVkaWFTdHJlYW1MaXN0KiBQZWVyQ29ubmVjdGlvbjo6bG9jYWxT
dHJlYW1zKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sb2NhbFN0cmVhbXMuZ2V0KCk7Cit9CisK
K01lZGlhU3RyZWFtTGlzdCogUGVlckNvbm5lY3Rpb246OnJlbW90ZVN0cmVhbXMoKSBjb25zdAor
eworICAgIHJldHVybiBtX3JlbW90ZVN0cmVhbXMuZ2V0KCk7CiB9CiAKIHZvaWQgUGVlckNvbm5l
Y3Rpb246OmNsb3NlKEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTU3LDUwICsxODYsNTcgQEAgdm9p
ZCBQZWVyQ29ubmVjdGlvbjo6Y2xvc2UoRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBpZiAobWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIoKSkKLSAgICAg
ICAgbWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIoKS0+Y2xvc2VQZWVyQ29ubmVjdGlvbihtX2Ns
aWVudElkKTsKLQotICAgIG1fcmVhZHlTdGF0ZSA9IENMT1NFRDsKKyAgICBzdG9wKCk7CiB9CiAK
LXZvaWQgUGVlckNvbm5lY3Rpb246Om9uTmVnb3RpYXRpb25TdGFydGVkKCkKK3ZvaWQgUGVlckNv
bm5lY3Rpb246OmljZVByb2Nlc3NpbmdDb21wbGV0ZWQoKQogewotICAgIG1fcmVhZHlTdGF0ZSA9
IE5FR09USUFUSU5HOwotCi0gICAgcG9zdFNpbXBsZUV2ZW50KGV2ZW50TmFtZXMoKS5jb25uZWN0
aW5nRXZlbnQpOworICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4
dFRocmVhZCgpKTsKKyAgICBjaGFuZ2VSZWFkeVN0YXRlKEFDVElWRSk7CiB9CiAKLXZvaWQgUGVl
ckNvbm5lY3Rpb246Om9uTmVnb3RpYXRpb25Eb25lKCkKK3ZvaWQgUGVlckNvbm5lY3Rpb246OnNk
cEdlbmVyYXRlZChjb25zdCBTdHJpbmcmIHNkcCkKIHsKLSAgICBtX3JlYWR5U3RhdGUgPSBBQ1RJ
VkU7Ci0KLSAgICBwb3N0U2ltcGxlRXZlbnQoZXZlbnROYW1lcygpLm9wZW5FdmVudCk7CisgICAg
QVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOworICAg
IG1fc2lnbmFsaW5nQ2FsbGJhY2stPmhhbmRsZUV2ZW50KCJTRFBcbiIgKyBzZHAsIHRoaXMpOwog
fQogCi12b2lkIFBlZXJDb25uZWN0aW9uOjpzdHJlYW1BZGRlZChQYXNzUmVmUHRyPE1lZGlhU3Ry
ZWFtPiBwcnBTdHJlYW0pCit2b2lkIFBlZXJDb25uZWN0aW9uOjpkYXRhU3RyZWFtTWVzc2FnZVJl
Y2VpdmVkKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBSZWZQdHI8
TWVkaWFTdHJlYW0+IHN0cmVhbSA9IHBycFN0cmVhbTsKLSAgICBtX3JlbW90ZVN0cmVhbUxpc3Qt
PmFkZChzdHJlYW0pOwotICAgIHBvc3RTdHJlYW1BZGRlZEV2ZW50KHN0cmVhbSk7CisgICAgQVNT
RVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSA9IFN0cmluZzo6ZnJvbVVURjgoZGF0YSwgbGVuZ3RoKTsKKyAg
ICBkaXNwYXRjaEV2ZW50KE1lc3NhZ2VFdmVudDo6Y3JlYXRlKFBhc3NPd25QdHI8TWVzc2FnZVBv
cnRBcnJheT4oKSwgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUobWVzc2FnZSkpKTsKIH0K
IAotdm9pZCBQZWVyQ29ubmVjdGlvbjo6c3RyZWFtUmVtb3ZlZChjb25zdCBTdHJpbmcmIHN0cmVh
bUxhYmVsKQordm9pZCBQZWVyQ29ubmVjdGlvbjo6cmVtb3RlU3RyZWFtQWRkZWQoUGFzc1JlZlB0
cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+IHN0cmVhbURlc2NyaXB0b3IpCiB7Ci0gICAgQVNTRVJU
KG1fcmVtb3RlU3RyZWFtTGlzdC0+Y29udGFpbnMoc3RyZWFtTGFiZWwpKTsKKyAgICBBU1NFUlQo
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7CiAKLSAgICBSZWZQ
dHI8TWVkaWFTdHJlYW0+IHN0cmVhbSA9IG1fcmVtb3RlU3RyZWFtTGlzdC0+Z2V0KHN0cmVhbUxh
YmVsKTsKLSAgICBtX3JlbW90ZVN0cmVhbUxpc3QtPnJlbW92ZShzdHJlYW0pOwotICAgIHBvc3RT
dHJlYW1SZW1vdmVkRXZlbnQoc3RyZWFtKTsKLX0KKyAgICBpZiAobV9yZWFkeVN0YXRlID09IENM
T1NFRCkKKyAgICAgICAgcmV0dXJuOwogCi12b2lkIFBlZXJDb25uZWN0aW9uOjpvbk1lc3NhZ2Uo
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIHBvc3RNZXNzYWdlRXZlbnQobWVzc2FnZSk7
CisgICAgLy8gRklYTUU6IGNyZWF0ZSBhIG5ldyBNZWRpYVN0cmVhbSBmcm9tIHRoZSBzdHJlYW1E
ZXNjcmlwdG9yIG9uY2UgaXQncyBwb3NzaWJsZSwgc2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvNjg0
NjQKKyAgICBSZWZQdHI8TWVkaWFTdHJlYW0+IHN0cmVhbSA9IDA7CisgICAgbV9yZW1vdGVTdHJl
YW1zLT5hcHBlbmQoc3RyZWFtKTsKKworICAgIGRpc3BhdGNoRXZlbnQoTWVkaWFTdHJlYW1FdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5hZGRzdHJlYW1FdmVudCwgZmFsc2UsIGZhbHNlLCBzdHJl
YW0ucmVsZWFzZSgpKSk7CiB9CiAKLXZvaWQgUGVlckNvbm5lY3Rpb246Om9uU2lnbmFsaW5nTWVz
c2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit2b2lkIFBlZXJDb25uZWN0aW9uOjpyZW1vdGVT
dHJlYW1SZW1vdmVkKE1lZGlhU3RyZWFtRGVzY3JpcHRvciogc3RyZWFtRGVzY3JpcHRvcikKIHsK
LSAgICBwb3N0U2lnbmFsaW5nRXZlbnQobWVzc2FnZSk7CisgICAgQVNTRVJUKHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIEFTU0VSVChzdHJlYW1EZXNj
cmlwdG9yLT5vd25lcigpKTsKKworICAgIFJlZlB0cjxNZWRpYVN0cmVhbT4gc3RyZWFtID0gc3Ry
ZWFtRGVzY3JpcHRvci0+b3duZXIoKTsKKyAgICBzdHJlYW0tPnN0cmVhbUVuZGVkKCk7CisKKyAg
ICBpZiAobV9yZWFkeVN0YXRlID09IENMT1NFRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNT
RVJUKG1fcmVtb3RlU3RyZWFtcy0+Y29udGFpbnMoc3RyZWFtKSk7CisgICAgbV9yZW1vdGVTdHJl
YW1zLT5yZW1vdmUoc3RyZWFtKTsKKworICAgIGRpc3BhdGNoRXZlbnQoTWVkaWFTdHJlYW1FdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5yZW1vdmVzdHJlYW1FdmVudCwgZmFsc2UsIGZhbHNlLCBz
dHJlYW0ucmVsZWFzZSgpKSk7CiB9CiAKIFBlZXJDb25uZWN0aW9uKiBQZWVyQ29ubmVjdGlvbjo6
dG9QZWVyQ29ubmVjdGlvbigpCkBAIC0yMTAsNyArMjQ2LDI1IEBAIFBlZXJDb25uZWN0aW9uKiBQ
ZWVyQ29ubmVjdGlvbjo6dG9QZWVyQ29ubmVjdGlvbigpCiAKIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIFBlZXJDb25uZWN0aW9uOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gbWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIoKSA/IG1lZGlhU3RyZWFtRnJhbWVD
b250cm9sbGVyKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA6IDA7CisgICAgcmV0dXJuIEFj
dGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworfQorCit2b2lkIFBlZXJD
b25uZWN0aW9uOjpzdG9wKCkKK3sKKyAgICBpZiAobV9yZWFkeVN0YXRlID09IENMT1NFRCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9pbml0aWFsTmVnb3RpYXRpb25UaW1lci5zdG9wKCk7Cisg
ICAgbV9zdHJlYW1DaGFuZ2VUaW1lci5zdG9wKCk7CisgICAgbV9yZWFkeVN0YXRlQ2hhbmdlVGlt
ZXIuc3RvcCgpOworCisgICAgaWYgKG1fcGVlckhhbmRsZXIpCisgICAgICAgIG1fcGVlckhhbmRs
ZXItPnN0b3AoKTsKKworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIG1fcGVl
ckhhbmRsZXIuY2xlYXIoKTsKKworICAgIGNoYW5nZVJlYWR5U3RhdGUoQ0xPU0VEKTsKIH0KIAog
RXZlbnRUYXJnZXREYXRhKiBQZWVyQ29ubmVjdGlvbjo6ZXZlbnRUYXJnZXREYXRhKCkKQEAgLTIy
Myw4OCArMjc3LDg2IEBAIEV2ZW50VGFyZ2V0RGF0YSogUGVlckNvbm5lY3Rpb246OmVuc3VyZUV2
ZW50VGFyZ2V0RGF0YSgpCiAgICAgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsKIH0KIAotdm9p
ZCBQZWVyQ29ubmVjdGlvbjo6cG9zdE1lc3NhZ2VFdmVudChjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
Cit2b2lkIFBlZXJDb25uZWN0aW9uOjpzY2hlZHVsZUluaXRpYWxOZWdvdGlhdGlvbigpCiB7Ci0g
ICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSA9IFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6Y3JlYXRlKG1lc3NhZ2UpOwotCi0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAg
ICAgIHJldHVybjsKLSAgICBBU1NFUlQoY29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwotICAg
IGNvbnRleHQtPnBvc3RUYXNrKERpc3BhdGNoVGFzazxQZWVyQ29ubmVjdGlvbiwgaW50LCBTZXJp
YWxpemVkU2NyaXB0VmFsdWU+OjpjcmVhdGUodGhpcywgJlBlZXJDb25uZWN0aW9uOjpkaXNwYXRj
aE1lc3NhZ2VFdmVudCwgMCwgZGF0YS5yZWxlYXNlKCkpKTsKKyAgICBpZiAoIW1faW5pdGlhbE5l
Z290aWF0aW9uVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9pbml0aWFsTmVnb3RpYXRpb25U
aW1lci5zdGFydE9uZVNob3QoMCk7CiB9CiAKLXZvaWQgUGVlckNvbm5lY3Rpb246OnBvc3RTaWdu
YWxpbmdFdmVudChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit2b2lkIFBlZXJDb25uZWN0aW9uOjpp
bml0aWFsTmVnb3RpYXRpb25UaW1lckZpcmVkKFRpbWVyPFBlZXJDb25uZWN0aW9uPiopCiB7Ci0g
ICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKLSAgICBpZiAoIWNvbnRleHQpCisgICAgaWYgKG1faWNlU3RhcnRlZCkKICAgICAgICAg
cmV0dXJuOwotICAgIEFTU0VSVChjb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7Ci0gICAgY29u
dGV4dC0+cG9zdFRhc2soU2ltcGxlRGlzcGF0Y2hUYXNrPFBlZXJDb25uZWN0aW9uLCBTdHJpbmc+
OjpjcmVhdGUodGhpcywgJlBlZXJDb25uZWN0aW9uOjpkaXNwYXRjaFNpZ25hbGluZ0V2ZW50LCBt
ZXNzYWdlKSk7Ci19CiAKLXZvaWQgUGVlckNvbm5lY3Rpb246OnBvc3RTdHJlYW1BZGRlZEV2ZW50
KFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+IHBycFN0cmVhbSkKLXsKLSAgICBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIGlmICgh
Y29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChjb250ZXh0LT5pc0NvbnRleHRU
aHJlYWQoKSk7Ci0gICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5wb3N0VGFzayhEaXNwYXRj
aFRhc2s8UGVlckNvbm5lY3Rpb24sIFN0cmluZywgTWVkaWFTdHJlYW0+OjpjcmVhdGUodGhpcywg
JlBlZXJDb25uZWN0aW9uOjpkaXNwYXRjaFN0cmVhbUV2ZW50LCBldmVudE5hbWVzKCkuYWRkc3Ry
ZWFtRXZlbnQsIHBycFN0cmVhbSkpOwotfQorICAgIE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3Rv
ciBwZW5kaW5nQWRkU3RyZWFtczsKKyAgICBtX3BlbmRpbmdBZGRTdHJlYW1zLnN3YXAocGVuZGlu
Z0FkZFN0cmVhbXMpOworICAgIGlmIChtX3BlZXJIYW5kbGVyKQorICAgICAgICBtX3BlZXJIYW5k
bGVyLT5wcm9kdWNlSW5pdGlhbE9mZmVyKHBlbmRpbmdBZGRTdHJlYW1zKTsKIAotdm9pZCBQZWVy
Q29ubmVjdGlvbjo6cG9zdFN0cmVhbVJlbW92ZWRFdmVudChQYXNzUmVmUHRyPE1lZGlhU3RyZWFt
PiBwcnBTdHJlYW0pCi17Ci0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVy
bjsKLSAgICBBU1NFUlQoY29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwotICAgIGNvbnRleHQt
PnBvc3RUYXNrKERpc3BhdGNoVGFzazxQZWVyQ29ubmVjdGlvbiwgU3RyaW5nLCBNZWRpYVN0cmVh
bT46OmNyZWF0ZSh0aGlzLCAmUGVlckNvbm5lY3Rpb246OmRpc3BhdGNoU3RyZWFtRXZlbnQsIGV2
ZW50TmFtZXMoKS5yZW1vdmVzdHJlYW1FdmVudCwgcHJwU3RyZWFtKSk7CisgICAgbV9pY2VTdGFy
dGVkID0gdHJ1ZTsKKworICAgIGNoYW5nZVJlYWR5U3RhdGUoTkVHT1RJQVRJTkcpOwogfQogCi12
b2lkIFBlZXJDb25uZWN0aW9uOjpwb3N0U2ltcGxlRXZlbnQoY29uc3QgU3RyaW5nJiBldmVudE5h
bWUpCit2b2lkIFBlZXJDb25uZWN0aW9uOjpzY2hlZHVsZVN0cmVhbUNoYW5nZSgpCiB7Ci0gICAg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQoY29udGV4
dC0+aXNDb250ZXh0VGhyZWFkKCkpOwotICAgIGNvbnRleHQtPnBvc3RUYXNrKFNpbXBsZURpc3Bh
dGNoVGFzazxQZWVyQ29ubmVjdGlvbiwgU3RyaW5nPjo6Y3JlYXRlKHRoaXMsICZQZWVyQ29ubmVj
dGlvbjo6ZGlzcGF0Y2hTaW1wbGVFdmVudCwgZXZlbnROYW1lKSk7CisgICAgaWYgKCFtX3N0cmVh
bUNoYW5nZVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fc3RyZWFtQ2hhbmdlVGltZXIuc3Rh
cnRPbmVTaG90KDApOwogfQogCi12b2lkIFBlZXJDb25uZWN0aW9uOjpwb3N0U3RhcnROZWdvdGlh
dGlvblRhc2soKQordm9pZCBQZWVyQ29ubmVjdGlvbjo6c3RyZWFtQ2hhbmdlVGltZXJGaXJlZChU
aW1lcjxQZWVyQ29ubmVjdGlvbj4qKQogewotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgaWYgKCFjb250ZXh0KQorICAg
IGlmICghbV9wZW5kaW5nQWRkU3RyZWFtcy5pc0VtcHR5KCkgJiYgIW1fcGVuZGluZ1JlbW92ZVN0
cmVhbXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKGNvbnRleHQtPmlz
Q29udGV4dFRocmVhZCgpKTsKLSAgICBjb250ZXh0LT5wb3N0VGFzayhTaW1wbGVEaXNwYXRjaFRh
c2s8UGVlckNvbm5lY3Rpb24sIGludD46OmNyZWF0ZSh0aGlzLCAmUGVlckNvbm5lY3Rpb246OmRp
c3BhdGNoU3RhcnROZWdvdGlhdGlvblRhc2ssIDApKTsKLX0KIAotdm9pZCBQZWVyQ29ubmVjdGlv
bjo6ZGlzcGF0Y2hNZXNzYWdlRXZlbnQoY29uc3QgaW50JiwgUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IGRhdGEpCi17Ci0gICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
ZCA9IGRhdGE7Ci0gICAgZGlzcGF0Y2hFdmVudChNZXNzYWdlRXZlbnQ6OmNyZWF0ZShQYXNzT3du
UHRyPE1lc3NhZ2VQb3J0QXJyYXk+KCksIGQpKTsKLX0KKyAgICBNZWRpYVN0cmVhbURlc2NyaXB0
b3JWZWN0b3IgcGVuZGluZ0FkZFN0cmVhbXM7CisgICAgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVj
dG9yIHBlbmRpbmdSZW1vdmVTdHJlYW1zOwogCi12b2lkIFBlZXJDb25uZWN0aW9uOjpkaXNwYXRj
aFNpZ25hbGluZ0V2ZW50KGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBtX3NpZ25hbGlu
Z0NhbGxiYWNrLT5oYW5kbGVFdmVudChtZXNzYWdlLCB0aGlzKTsKKyAgICBtX3BlbmRpbmdBZGRT
dHJlYW1zLnN3YXAocGVuZGluZ0FkZFN0cmVhbXMpOworICAgIG1fcGVuZGluZ1JlbW92ZVN0cmVh
bXMuc3dhcChwZW5kaW5nUmVtb3ZlU3RyZWFtcyk7CisKKyAgICBpZiAobV9wZWVySGFuZGxlcikK
KyAgICAgICAgbV9wZWVySGFuZGxlci0+cHJvY2Vzc1BlbmRpbmdTdHJlYW1zKHBlbmRpbmdBZGRT
dHJlYW1zLCBwZW5kaW5nUmVtb3ZlU3RyZWFtcyk7CisKKyAgICBpZiAoIXBlbmRpbmdBZGRTdHJl
YW1zLmlzRW1wdHkoKSkKKyAgICAgICAgY2hhbmdlUmVhZHlTdGF0ZShORUdPVElBVElORyk7CiB9
CiAKLXZvaWQgUGVlckNvbm5lY3Rpb246OmRpc3BhdGNoU3RyZWFtRXZlbnQoY29uc3QgU3RyaW5n
JiBuYW1lLCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPiBzdHJlYW0pCit2b2lkIFBlZXJDb25uZWN0
aW9uOjpzY2hlZHVsZVJlYWR5U3RhdGVDaGFuZ2UoUmVhZHlTdGF0ZSByZWFkeVN0YXRlKQogewot
ICAgIFJlZlB0cjxNZWRpYVN0cmVhbT4gcyA9IHN0cmVhbTsKLSAgICBkaXNwYXRjaEV2ZW50KE1l
ZGlhU3RyZWFtRXZlbnQ6OmNyZWF0ZShuYW1lLCBmYWxzZSwgZmFsc2UsIHMpKTsKKyAgICBtX3Bl
bmRpbmdSZWFkeVN0YXRlcy5hcHBlbmQocmVhZHlTdGF0ZSk7CisgICAgaWYgKCFtX3JlYWR5U3Rh
dGVDaGFuZ2VUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX3JlYWR5U3RhdGVDaGFuZ2VUaW1l
ci5zdGFydE9uZVNob3QoMCk7CiB9CiAKLXZvaWQgUGVlckNvbm5lY3Rpb246OmRpc3BhdGNoU2lt
cGxlRXZlbnQoY29uc3QgU3RyaW5nJiBldmVudE5hbWUpCit2b2lkIFBlZXJDb25uZWN0aW9uOjpy
ZWFkeVN0YXRlQ2hhbmdlVGltZXJGaXJlZChUaW1lcjxQZWVyQ29ubmVjdGlvbj4qKQogewotICAg
IGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWUsIGZhbHNlLCBmYWxzZSkpOwor
ICAgIFZlY3RvcjxSZWFkeVN0YXRlPiBwZW5kaW5nUmVhZHlTdGF0ZXM7CisgICAgbV9wZW5kaW5n
UmVhZHlTdGF0ZXMuc3dhcChwZW5kaW5nUmVhZHlTdGF0ZXMpOworCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBwZW5kaW5nUmVhZHlTdGF0ZXMuc2l6ZSgpOyBpKyspCisgICAgICAgIGNoYW5n
ZVJlYWR5U3RhdGUocGVuZGluZ1JlYWR5U3RhdGVzW2ldKTsKIH0KIAotdm9pZCBQZWVyQ29ubmVj
dGlvbjo6ZGlzcGF0Y2hTdGFydE5lZ290aWF0aW9uVGFzayhjb25zdCBpbnQmKQordm9pZCBQZWVy
Q29ubmVjdGlvbjo6Y2hhbmdlUmVhZHlTdGF0ZShSZWFkeVN0YXRlIHJlYWR5U3RhdGUpCiB7Ci0g
ICAgaWYgKG1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKCkpCi0gICAgICAgIG1lZGlhU3RyZWFt
RnJhbWVDb250cm9sbGVyKCktPnN0YXJ0TmVnb3RpYXRpb24obV9jbGllbnRJZCk7CisgICAgaWYg
KHJlYWR5U3RhdGUgPT0gbV9yZWFkeVN0YXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Jl
YWR5U3RhdGUgPSByZWFkeVN0YXRlOworCisgICAgc3dpdGNoIChtX3JlYWR5U3RhdGUpIHsKKyAg
ICBjYXNlIE5FR09USUFUSU5HOgorICAgICAgICBkaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUo
ZXZlbnROYW1lcygpLmNvbm5lY3RpbmdFdmVudCwgZmFsc2UsIGZhbHNlKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQUNUSVZFOgorICAgICAgICBkaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVh
dGUoZXZlbnROYW1lcygpLm9wZW5FdmVudCwgZmFsc2UsIGZhbHNlKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQ0xPU0VEOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3AycC9QZWVyQ29ubmVjdGlvbi5oIGIvU291
cmNlL1dlYkNvcmUvcDJwL1BlZXJDb25uZWN0aW9uLmgKaW5kZXggMThkMTY1Yi4uZDYxN2I2ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcDJwL1BlZXJDb25uZWN0aW9uLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcDJwL1BlZXJDb25uZWN0aW9uLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDQxICsyOCw0MCBAQAogCiAjaWYgRU5B
QkxFKE1FRElBX1NUUkVBTSkKIAorI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1
ZGUgIkV2ZW50VGFyZ2V0LmgiCi0jaW5jbHVkZSAiTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIu
aCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgIkV4Y2VwdGlvbkJhc2Uu
aCIKKyNpbmNsdWRlICJNZWRpYVN0cmVhbS5oIgorI2luY2x1ZGUgIk1lZGlhU3RyZWFtTGlzdC5o
IgorI2luY2x1ZGUgIlBlZXJIYW5kbGVyLmgiCisjaW5jbHVkZSAiU2lnbmFsaW5nQ2FsbGJhY2su
aCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBQZWVyQ29u
bmVjdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPFBlZXJDb25uZWN0aW9uPiwgcHVibGljIFBlZXJI
YW5kbGVyQ2xpZW50LCBwdWJsaWMgRXZlbnRUYXJnZXQsIHB1YmxpYyBBY3RpdmVET01PYmplY3Qg
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBlZXJDb25uZWN0aW9uPiBjcmVhdGUo
Y29uc3QgU3RyaW5nJiBzZXJ2ZXJDb25maWd1cmF0aW9uLCBQYXNzUmVmUHRyPFNpZ25hbGluZ0Nh
bGxiYWNrPiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworICAgIH5QZWVyQ29ubmVjdGlvbigp
OwogCi1jbGFzcyBNZWRpYVN0cmVhbTsKLWNsYXNzIE1lZGlhU3RyZWFtTGlzdDsKLWNsYXNzIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ7Ci1jbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7Ci1jbGFz
cyBTaWduYWxpbmdDYWxsYmFjazsKKyAgICB2b2lkIHByb2Nlc3NTaWduYWxpbmdNZXNzYWdlKGNv
bnN0IFN0cmluZyYgbWVzc2FnZSwgRXhjZXB0aW9uQ29kZSYpOwogCi1jbGFzcyBQZWVyQ29ubmVj
dGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPFBlZXJDb25uZWN0aW9uPiwgcHVibGljIEV2ZW50VGFy
Z2V0LCBwdWJsaWMgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6OlBlZXJDb25uZWN0aW9uQ2xp
ZW50IHsKLXB1YmxpYzoKICAgICAvLyBOYW1lIGFuZCB2YWx1ZXMgb2YgdGhlIGVudW0gbXVzdCBt
YXRjaCB0aGUgY29ycmVzc3BvbmRpbmcgY29uc3RhbnRzIGluIHRoZSAuaWRsIGZpbGUuCi0gICAg
ZW51bSB7CisgICAgZW51bSBSZWFkeVN0YXRlIHsKICAgICAgICAgTkVXID0gMCwKICAgICAgICAg
TkVHT1RJQVRJTkcgPSAxLAogICAgICAgICBBQ1RJVkUgPSAyLAogICAgICAgICBDTE9TRUQgPSAz
CiAgICAgfTsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBlZXJDb25uZWN0aW9uPiBjcmVhdGUo
TWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqLCBpbnQgaWQsIGNvbnN0IFN0cmluZyYgY29uZmln
dXJhdGlvbiwgUGFzc1JlZlB0cjxTaWduYWxpbmdDYWxsYmFjaz4pOwotICAgIHZpcnR1YWwgflBl
ZXJDb25uZWN0aW9uKCk7CisgICAgUmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkgY29uc3Q7CiAKLSAg
ICBNZWRpYVN0cmVhbUxpc3QqIGxvY2FsU3RyZWFtcygpOwotICAgIE1lZGlhU3RyZWFtTGlzdCog
cmVtb3RlU3RyZWFtcygpOwotCi0gICAgdW5zaWduZWQgc2hvcnQgcmVhZHlTdGF0ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVhZHlTdGF0ZTsgfQotCi0gICAgdm9pZCBwcm9jZXNzU2lnbmFsaW5nTWVz
c2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHNl
bmQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBhZGRTdHJl
YW0oUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHJl
bW92ZVN0cmVhbShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPiwgRXhjZXB0aW9uQ29kZSYpOworICAg
IHZvaWQgYWRkU3RyZWFtKGNvbnN0IFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+LCBFeGNlcHRpb25D
b2RlJik7CisgICAgdm9pZCByZW1vdmVTdHJlYW0oTWVkaWFTdHJlYW0qLCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgTWVkaWFTdHJlYW1MaXN0KiBsb2NhbFN0cmVhbXMoKSBjb25zdDsKKyAgICBNZWRp
YVN0cmVhbUxpc3QqIHJlbW90ZVN0cmVhbXMoKSBjb25zdDsKICAgICB2b2lkIGNsb3NlKEV4Y2Vw
dGlvbkNvZGUmKTsKIAogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoY29ubmVj
dGluZyk7CkBAIC03MCw1OCArNzAsNjUgQEAgcHVibGljOgogICAgIERFRklORV9BVFRSSUJVVEVf
RVZFTlRfTElTVEVORVIoYWRkc3RyZWFtKTsKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJ
U1RFTkVSKHJlbW92ZXN0cmVhbSk7CiAKKyAgICAvLyBQZWVySGFuZGxlckNsaWVudAorICAgIHZp
cnR1YWwgdm9pZCBpY2VQcm9jZXNzaW5nQ29tcGxldGVkKCk7CisgICAgdmlydHVhbCB2b2lkIHNk
cEdlbmVyYXRlZChjb25zdCBTdHJpbmcmIHNkcCk7CisgICAgdmlydHVhbCB2b2lkIGRhdGFTdHJl
YW1NZXNzYWdlUmVjZWl2ZWQoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVtb3RlU3RyZWFtQWRkZWQoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURl
c2NyaXB0b3I+KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3RlU3RyZWFtUmVtb3ZlZChNZWRpYVN0
cmVhbURlc2NyaXB0b3IqKTsKKwogICAgIC8vIEV2ZW50VGFyZ2V0CiAgICAgdmlydHVhbCBQZWVy
Q29ubmVjdGlvbiogdG9QZWVyQ29ubmVjdGlvbigpOwogCiAgICAgLy8gRXZlbnRUYXJnZXQgaW1w
bGVtZW50YXRpb24uCiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CiAKLSAgICAvLyBDYWxsYmFja3MKLSAgICB2b2lkIG9u
TWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwotICAgIHZvaWQgb25TaWduYWxpbmdNZXNz
YWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0gICAgdm9pZCBvbk5lZ290aWF0aW9uU3RhcnRl
ZCgpOwotICAgIHZvaWQgb25OZWdvdGlhdGlvbkRvbmUoKTsKLSAgICB2b2lkIHN0cmVhbUFkZGVk
KFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+KTsKLSAgICB2b2lkIHN0cmVhbVJlbW92ZWQoY29uc3Qg
U3RyaW5nJiBzdHJlYW1MYWJlbCk7CisgICAgLy8gQWN0aXZlRE9NT2JqZWN0CisgICAgdmlydHVh
bCB2b2lkIHN0b3AoKTsKIAogICAgIHVzaW5nIFJlZkNvdW50ZWQ8UGVlckNvbm5lY3Rpb24+Ojpy
ZWY7CiAgICAgdXNpbmcgUmVmQ291bnRlZDxQZWVyQ29ubmVjdGlvbj46OmRlcmVmOwogCi1wcm90
ZWN0ZWQ6Citwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdCBzaXplX3Qga01heE1lc3NhZ2VVVEY4
TGVuZ3RoID0gNTA0OworCisgICAgUGVlckNvbm5lY3Rpb24oY29uc3QgU3RyaW5nJiBzZXJ2ZXJD
b25maWd1cmF0aW9uLCBQYXNzUmVmUHRyPFNpZ25hbGluZ0NhbGxiYWNrPiwgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCopOworCiAgICAgLy8gRXZlbnRUYXJnZXQgaW1wbGVtZW50YXRpb24uCiAgICAg
dmlydHVhbCBFdmVudFRhcmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpOwogICAgIHZpcnR1YWwg
RXZlbnRUYXJnZXREYXRhKiBlbnN1cmVFdmVudFRhcmdldERhdGEoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9CisgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZl
bnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0KIAotcHJpdmF0ZToKLSAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90IGtNYXhNZXNzYWdlVVRGOExlbmd0aCA9IDUwNDsKKyAgICB2b2lkIHNjaGVkdWxlSW5pdGlh
bE5lZ290aWF0aW9uKCk7CisgICAgdm9pZCBpbml0aWFsTmVnb3RpYXRpb25UaW1lckZpcmVkKFRp
bWVyPFBlZXJDb25uZWN0aW9uPiopOworICAgIHZvaWQgc2NoZWR1bGVTdHJlYW1DaGFuZ2UoKTsK
KyAgICB2b2lkIHN0cmVhbUNoYW5nZVRpbWVyRmlyZWQoVGltZXI8UGVlckNvbm5lY3Rpb24+Kik7
CisgICAgdm9pZCBzY2hlZHVsZVJlYWR5U3RhdGVDaGFuZ2UoUmVhZHlTdGF0ZSk7CisgICAgdm9p
ZCByZWFkeVN0YXRlQ2hhbmdlVGltZXJGaXJlZChUaW1lcjxQZWVyQ29ubmVjdGlvbj4qKTsKIAot
ICAgIFBlZXJDb25uZWN0aW9uKE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKiwgaW50IGlkLCBj
b25zdCBTdHJpbmcmIGNvbmZpZ3VyYXRpb24sIFBhc3NSZWZQdHI8U2lnbmFsaW5nQ2FsbGJhY2s+
KTsKLSAgICB2b2lkIGluaXQoKTsKKyAgICB2b2lkIGNoYW5nZVJlYWR5U3RhdGUoUmVhZHlTdGF0
ZSk7CiAKLSAgICB2b2lkIHBvc3RTaW1wbGVFdmVudChjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSk7
Ci0gICAgdm9pZCBwb3N0TWVzc2FnZUV2ZW50KGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0gICAg
dm9pZCBwb3N0U2lnbmFsaW5nRXZlbnQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLSAgICB2b2lk
IHBvc3RTdHJlYW1BZGRlZEV2ZW50KFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+KTsKLSAgICB2b2lk
IHBvc3RTdHJlYW1SZW1vdmVkRXZlbnQoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4pOwotICAgIHZv
aWQgcG9zdFN0YXJ0TmVnb3RpYXRpb25UYXNrKCk7CisgICAgUmVmUHRyPFNpZ25hbGluZ0NhbGxi
YWNrPiBtX3NpZ25hbGluZ0NhbGxiYWNrOwogCi0gICAgdm9pZCBkaXNwYXRjaFNpbXBsZUV2ZW50
KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKTsKLSAgICB2b2lkIGRpc3BhdGNoTWVzc2FnZUV2ZW50
KGNvbnN0IGludCYsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhKTsKLSAg
ICB2b2lkIGRpc3BhdGNoU2lnbmFsaW5nRXZlbnQoY29uc3QgU3RyaW5nJiBldmVudE5hbWUpOwot
ICAgIHZvaWQgZGlzcGF0Y2hTdHJlYW1FdmVudChjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQ
dHI8TWVkaWFTdHJlYW0+KTsKLSAgICB2b2lkIGRpc3BhdGNoU3RhcnROZWdvdGlhdGlvblRhc2so
Y29uc3QgaW50Jik7CisgICAgUmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGU7CisgICAgYm9vbCBtX2lj
ZVN0YXJ0ZWQ7CiAKLSAgICAvLyBFdmVudFRhcmdldCBpbXBsZW1lbnRhdGlvbi4KLSAgICB2aXJ0
dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRl
cmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0KKyAgICBSZWZQdHI8TWVkaWFTdHJlYW1MaXN0
PiBtX2xvY2FsU3RyZWFtczsKKyAgICBSZWZQdHI8TWVkaWFTdHJlYW1MaXN0PiBtX3JlbW90ZVN0
cmVhbXM7CiAKKyAgICAvLyBFdmVudFRhcmdldCBpbXBsZW1lbnRhdGlvbi4KICAgICBFdmVudFRh
cmdldERhdGEgbV9ldmVudFRhcmdldERhdGE7CiAKLSAgICBTdHJpbmcgbV9jb25maWd1cmF0aW9u
OwotICAgIHVuc2lnbmVkIHNob3J0IG1fcmVhZHlTdGF0ZTsKLSAgICBSZWZQdHI8U2lnbmFsaW5n
Q2FsbGJhY2s+IG1fc2lnbmFsaW5nQ2FsbGJhY2s7Ci0gICAgUmVmUHRyPE1lZGlhU3RyZWFtTGlz
dD4gbV9sb2NhbFN0cmVhbUxpc3Q7Ci0gICAgUmVmUHRyPE1lZGlhU3RyZWFtTGlzdD4gbV9yZW1v
dGVTdHJlYW1MaXN0OworICAgIFRpbWVyPFBlZXJDb25uZWN0aW9uPiBtX2luaXRpYWxOZWdvdGlh
dGlvblRpbWVyOworICAgIFRpbWVyPFBlZXJDb25uZWN0aW9uPiBtX3N0cmVhbUNoYW5nZVRpbWVy
OworICAgIFRpbWVyPFBlZXJDb25uZWN0aW9uPiBtX3JlYWR5U3RhdGVDaGFuZ2VUaW1lcjsKKwor
ICAgIE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciBtX3BlbmRpbmdBZGRTdHJlYW1zOworICAg
IE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciBtX3BlbmRpbmdSZW1vdmVTdHJlYW1zOworICAg
IFZlY3RvcjxSZWFkeVN0YXRlPiBtX3BlbmRpbmdSZWFkeVN0YXRlczsKKworICAgIE93blB0cjxQ
ZWVySGFuZGxlcj4gbV9wZWVySGFuZGxlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3AycC9QZWVyQ29ubmVjdGlvbi5pZGwgYi9Tb3Vy
Y2UvV2ViQ29yZS9wMnAvUGVlckNvbm5lY3Rpb24uaWRsCmluZGV4IDNjZDcyOWYuLjczODgyNGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3AycC9QZWVyQ29ubmVjdGlvbi5pZGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcDJwL1BlZXJDb25uZWN0aW9uLmlkbApAQCAtMjYsOSArMjYsMTMgQEAg
bW9kdWxlIHAycCB7CiAKICAgICBpbnRlcmZhY2UgWwogICAgICAgICBDb25kaXRpb25hbD1NRURJ
QV9TVFJFQU0sCisgICAgICAgIEFjdGl2ZURPTU9iamVjdCwKICAgICAgICAgQ2FuQmVDb25zdHJ1
Y3RlZCwKLSAgICAgICAgQ3VzdG9tQ29uc3RydWN0b3IsCiAgICAgICAgIENvbnN0cnVjdG9yUGFy
YW1ldGVycz0yLAorICAgICAgICBDb25zdHJ1Y3RvcihpbiBET01TdHJpbmcgc2VydmVyQ29uZmln
dXJhdGlvbiwgaW4gW0NhbGxiYWNrPUZ1bmN0aW9uT25seV0gU2lnbmFsaW5nQ2FsbGJhY2sgc2ln
bmFsaW5nQ2FsbGJhY2spLAorICAgICAgICBDb25zdHJ1Y3RvcldpdGg9U2NyaXB0RXhlY3V0aW9u
Q29udGV4dCwKKyAgICAgICAgSlNDdXN0b21Db25zdHJ1Y3RvciwKKyAgICAgICAgVjhDb25zdHJ1
Y3RvclNldHNBY3RpdmVET01XcmFwcGVyLAogICAgICAgICBFdmVudFRhcmdldAogICAgIF0gUGVl
ckNvbm5lY3Rpb24gewogICAgICAgICB2b2lkIHByb2Nlc3NTaWduYWxpbmdNZXNzYWdlKGluIERP
TVN0cmluZyBtZXNzYWdlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0
cmVhbUNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUNsaWVudC5oCmlu
ZGV4IDdhYzJmMDcuLjBmYzZlNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVk
aWFTdHJlYW1DbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtQ2xp
ZW50LmgKQEAgLTQ5LDE1ICs0OSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc3RvcEdl
bmVyYXRlZFN0cmVhbShjb25zdCBTdHJpbmcmIHN0cmVhbUxhYmVsKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIHNldE1lZGlhU3RyZWFtVHJhY2tFbmFibGVkKGNvbnN0IFN0cmluZyYgdHJhY2tJZCwg
Ym9vbCBlbmFibGVkKSA9IDA7CiAKLSAgICAvLyBQZWVyQ29ubmVjdGlvbiBmdW5jdGlvbnMuCi0g
ICAgdmlydHVhbCB2b2lkIG5ld1BlZXJDb25uZWN0aW9uKGludCBwZWVyQ29ubmVjdGlvbklkLCBj
b25zdCBTdHJpbmcmIGNvbmZpZ3VyYXRpb24pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnRO
ZWdvdGlhdGlvbihpbnQgcGVlckNvbm5lY3Rpb25JZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBw
cm9jZXNzU2lnbmFsaW5nTWVzc2FnZShpbnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5n
JiBtZXNzYWdlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG1lc3NhZ2UoaW50IHBlZXJDb25uZWN0
aW9uSWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhZGRT
dHJlYW0oaW50IHBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgc3RyZWFtTGFiZWwpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlU3RyZWFtKGludCBwZWVyQ29ubmVjdGlvbklkLCBj
b25zdCBTdHJpbmcmIHN0cmVhbUxhYmVsKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsb3NlUGVl
ckNvbm5lY3Rpb24oaW50IHBlZXJDb25uZWN0aW9uSWQpID0gMDsKLQogcHJvdGVjdGVkOgogICAg
IHZpcnR1YWwgfk1lZGlhU3RyZWFtQ2xpZW50KCkgeyB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9NZWRpYVN0cmVhbUNvbnRyb2xsZXIuY3BwCmluZGV4IDVmNjA0ZWMuLmM4ODU1MmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1Db250cm9sbGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtQ29udHJvbGxlci5jcHAKQEAgLTM0
LDggKzM0LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBGSVhNRTogVGhpcyBpcyB1
c2VkIGZvciBob2xkaW5nIGxpc3Qgb2YgUGVlckNvbm5lY3Rpb24gYXMgd2VsbCwKLS8vIHNvIHJl
bmFtZSBjbGFzcyBpcyBpbiBvcmRlci4KIGNsYXNzIE1lZGlhU3RyZWFtQ29udHJvbGxlcjo6UmVx
dWVzdCB7CiBwdWJsaWM6CiAgICAgUmVxdWVzdCgpCkBAIC01Nyw3ICs1NSw2IEBAIHByaXZhdGU6
CiBNZWRpYVN0cmVhbUNvbnRyb2xsZXI6Ok1lZGlhU3RyZWFtQ29udHJvbGxlcihNZWRpYVN0cmVh
bUNsaWVudCogY2xpZW50KQogICAgIDogbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9uZXh0R2xv
YmFsUmVxdWVzdElkKDEpCi0gICAgLCBtX25leHRHbG9iYWxQZWVyQ29ubmVjdGlvbklkKDEpCiB7
CiB9CiAKQEAgLTE1NywxMzAgKzE1NCw2IEBAIHZvaWQgTWVkaWFTdHJlYW1Db250cm9sbGVyOjpz
dHJlYW1GYWlsZWQoY29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCkKICAgICAgICAgbV9zdHJlYW1z
LmdldChzdHJlYW1MYWJlbCktPnN0cmVhbUZhaWxlZChzdHJlYW1MYWJlbCk7CiB9CiAKLXZvaWQg
TWVkaWFTdHJlYW1Db250cm9sbGVyOjpvblNpZ25hbGluZ01lc3NhZ2UoaW50IGNvbnRyb2xsZXJQ
ZWVyQ29ubmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgLy8gRG9uJ3Qg
YXNzZXJ0IHNpbmNlIHRoZSBmcmFtZSBjb250cm9sbGVyIGNhbiBoYXZlIGJlZW4gZGVzdHJveWVk
LgotICAgIGlmIChtX3BlZXJDb25uZWN0aW9ucy5jb250YWlucyhjb250cm9sbGVyUGVlckNvbm5l
Y3Rpb25JZCkpIHsKLSAgICAgICAgY29uc3QgUmVxdWVzdCYgcGVlckNvbm5lY3Rpb24gPSBtX3Bl
ZXJDb25uZWN0aW9ucy5nZXQoY29udHJvbGxlclBlZXJDb25uZWN0aW9uSWQpOwotICAgICAgICBB
U1NFUlQocGVlckNvbm5lY3Rpb24uZnJhbWVDb250cm9sbGVyKCkpOwotICAgICAgICBwZWVyQ29u
bmVjdGlvbi5mcmFtZUNvbnRyb2xsZXIoKS0+b25TaWduYWxpbmdNZXNzYWdlKHBlZXJDb25uZWN0
aW9uLmxvY2FsSWQoKSwgbWVzc2FnZSk7Ci0gICAgfQotfQotCi1ib29sIE1lZGlhU3RyZWFtQ29u
dHJvbGxlcjo6ZnJhbWVUb1BhZ2VQZWVyQ29ubmVjdGlvbklkKE1lZGlhU3RyZWFtRnJhbWVDb250
cm9sbGVyKiBmcmFtZUNvbnRyb2xsZXIsIGludCBmcmFtZVBlZXJDb25uZWN0aW9uSWQsIGludCYg
cGFnZVBlZXJDb25uZWN0aW9uSWQpCi17Ci0gICAgcGFnZVBlZXJDb25uZWN0aW9uSWQgPSAtMTsK
LSAgICAvLyBGSVhNRTogSXMgdGhlcmUgYSBiZXR0ZXIgd2F5IHRvIGZpbmQgdGhlIGdsb2JhbCBJ
RCBpbiB0aGUgbWFwPwotICAgIGZvciAoUmVxdWVzdE1hcDo6aXRlcmF0b3IgaXQgPSBtX3BlZXJD
b25uZWN0aW9ucy5iZWdpbigpOyBpdCAhPSBtX3BlZXJDb25uZWN0aW9ucy5lbmQoKTsgKytpdCkg
ewotICAgICAgICBpZiAoaXQtPnNlY29uZC5mcmFtZUNvbnRyb2xsZXIoKSA9PSBmcmFtZUNvbnRy
b2xsZXIgJiYgaXQtPnNlY29uZC5sb2NhbElkKCkgPT0gZnJhbWVQZWVyQ29ubmVjdGlvbklkKSB7
Ci0gICAgICAgICAgICBwYWdlUGVlckNvbm5lY3Rpb25JZCA9IGl0LT5maXJzdDsKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotdm9pZCBNZWRpYVN0cmVhbUNvbnRyb2xsZXI6OnByb2Nlc3NTaWduYWxpbmdNZXNzYWdlKE1l
ZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKiBmcmFtZUNvbnRyb2xsZXIsIGludCBmcmFtZVBlZXJD
b25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBpbnQgcGFnZVBlZXJD
b25uZWN0aW9uSWQ7Ci0gICAgaWYgKGZyYW1lVG9QYWdlUGVlckNvbm5lY3Rpb25JZChmcmFtZUNv
bnRyb2xsZXIsIGZyYW1lUGVlckNvbm5lY3Rpb25JZCwgcGFnZVBlZXJDb25uZWN0aW9uSWQpKQot
ICAgICAgICBtX2NsaWVudC0+cHJvY2Vzc1NpZ25hbGluZ01lc3NhZ2UocGFnZVBlZXJDb25uZWN0
aW9uSWQsIG1lc3NhZ2UpOwotfQotCi12b2lkIE1lZGlhU3RyZWFtQ29udHJvbGxlcjo6bWVzc2Fn
ZShNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciogZnJhbWVDb250cm9sbGVyLCBpbnQgZnJhbWVQ
ZWVyQ29ubmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgaW50IHBhZ2VQ
ZWVyQ29ubmVjdGlvbklkOwotICAgIGlmIChmcmFtZVRvUGFnZVBlZXJDb25uZWN0aW9uSWQoZnJh
bWVDb250cm9sbGVyLCBmcmFtZVBlZXJDb25uZWN0aW9uSWQsIHBhZ2VQZWVyQ29ubmVjdGlvbklk
KSkKLSAgICAgICAgbV9jbGllbnQtPm1lc3NhZ2UocGFnZVBlZXJDb25uZWN0aW9uSWQsIG1lc3Nh
Z2UpOwotfQotCi12b2lkIE1lZGlhU3RyZWFtQ29udHJvbGxlcjo6b25NZXNzYWdlKGludCBjb250
cm9sbGVyUGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIC8v
IERvbid0IGFzc2VydCBzaW5jZSB0aGUgZnJhbWUgY29udHJvbGxlciBjYW4gaGF2ZSBiZWVuIGRl
c3Ryb3llZAotICAgIGlmIChtX3BlZXJDb25uZWN0aW9ucy5jb250YWlucyhjb250cm9sbGVyUGVl
ckNvbm5lY3Rpb25JZCkpIHsKLSAgICAgICAgY29uc3QgUmVxdWVzdCYgcGVlckNvbm5lY3Rpb24g
PSBtX3BlZXJDb25uZWN0aW9ucy5nZXQoY29udHJvbGxlclBlZXJDb25uZWN0aW9uSWQpOwotICAg
ICAgICBBU1NFUlQocGVlckNvbm5lY3Rpb24uZnJhbWVDb250cm9sbGVyKCkpOwotICAgICAgICBw
ZWVyQ29ubmVjdGlvbi5mcmFtZUNvbnRyb2xsZXIoKS0+b25NZXNzYWdlKHBlZXJDb25uZWN0aW9u
LmxvY2FsSWQoKSwgbWVzc2FnZSk7Ci0gICAgfQotfQotCi12b2lkIE1lZGlhU3RyZWFtQ29udHJv
bGxlcjo6YWRkU3RyZWFtKE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKiBmcmFtZUNvbnRyb2xs
ZXIsIGludCBmcmFtZVBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgc3RyZWFtTGFiZWwp
Ci17Ci0gICAgaW50IHBhZ2VQZWVyQ29ubmVjdGlvbklkOwotICAgIGlmIChmcmFtZVRvUGFnZVBl
ZXJDb25uZWN0aW9uSWQoZnJhbWVDb250cm9sbGVyLCBmcmFtZVBlZXJDb25uZWN0aW9uSWQsIHBh
Z2VQZWVyQ29ubmVjdGlvbklkKSkKLSAgICAgICAgbV9jbGllbnQtPmFkZFN0cmVhbShwYWdlUGVl
ckNvbm5lY3Rpb25JZCwgc3RyZWFtTGFiZWwpOwotfQotCi12b2lkIE1lZGlhU3RyZWFtQ29udHJv
bGxlcjo6b25BZGRTdHJlYW0oaW50IGNvbnRyb2xsZXJQZWVyQ29ubmVjdGlvbklkLCBjb25zdCBT
dHJpbmcmIHN0cmVhbUxhYmVsLCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tMaXN0PiB0cmFj
a3MpCi17Ci0gICAgLy8gRG9uJ3QgYXNzZXJ0IHNpbmNlIHRoZSBmcmFtZSBjb250cm9sbGVyIGNh
biBoYXZlIGJlZW4gZGVzdHJveWVkCi0gICAgaWYgKG1fcGVlckNvbm5lY3Rpb25zLmNvbnRhaW5z
KGNvbnRyb2xsZXJQZWVyQ29ubmVjdGlvbklkKSkgewotICAgICAgICBjb25zdCBSZXF1ZXN0JiBw
ZWVyQ29ubmVjdGlvbiA9IG1fcGVlckNvbm5lY3Rpb25zLmdldChjb250cm9sbGVyUGVlckNvbm5l
Y3Rpb25JZCk7Ci0gICAgICAgIEFTU0VSVChwZWVyQ29ubmVjdGlvbi5mcmFtZUNvbnRyb2xsZXIo
KSk7Ci0gICAgICAgIHBlZXJDb25uZWN0aW9uLmZyYW1lQ29udHJvbGxlcigpLT5vbkFkZFN0cmVh
bShwZWVyQ29ubmVjdGlvbi5sb2NhbElkKCksIHN0cmVhbUxhYmVsLCB0cmFja3MpOwotICAgIH0K
LX0KLQotdm9pZCBNZWRpYVN0cmVhbUNvbnRyb2xsZXI6OnJlbW92ZVN0cmVhbShNZWRpYVN0cmVh
bUZyYW1lQ29udHJvbGxlciogZnJhbWVDb250cm9sbGVyLCBpbnQgZnJhbWVQZWVyQ29ubmVjdGlv
bklkLCBjb25zdCBTdHJpbmcmIHN0cmVhbUxhYmVsKQotewotICAgIGludCBwYWdlUGVlckNvbm5l
Y3Rpb25JZDsKLSAgICBpZiAoZnJhbWVUb1BhZ2VQZWVyQ29ubmVjdGlvbklkKGZyYW1lQ29udHJv
bGxlciwgZnJhbWVQZWVyQ29ubmVjdGlvbklkLCBwYWdlUGVlckNvbm5lY3Rpb25JZCkpCi0gICAg
ICAgIG1fY2xpZW50LT5yZW1vdmVTdHJlYW0ocGFnZVBlZXJDb25uZWN0aW9uSWQsIHN0cmVhbUxh
YmVsKTsKLX0KLQotdm9pZCBNZWRpYVN0cmVhbUNvbnRyb2xsZXI6Om9uUmVtb3ZlU3RyZWFtKGlu
dCBjb250cm9sbGVyUGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCkK
LXsKLSAgICAvLyBEb24ndCBhc3NlcnQgc2luY2UgdGhlIGZyYW1lIGNvbnRyb2xsZXIgY2FuIGhh
dmUgYmVlbiBkZXN0cm95ZWQKLSAgICBpZiAobV9wZWVyQ29ubmVjdGlvbnMuY29udGFpbnMoY29u
dHJvbGxlclBlZXJDb25uZWN0aW9uSWQpKSB7Ci0gICAgICAgIC8vIFRPRE86IEJldHRlciBuYW1l
IG9mIHBlZXJDb25uZWN0aW9uIHZhcmlhYmxlPwotICAgICAgICBjb25zdCBSZXF1ZXN0JiBwZWVy
Q29ubmVjdGlvbiA9IG1fcGVlckNvbm5lY3Rpb25zLmdldChjb250cm9sbGVyUGVlckNvbm5lY3Rp
b25JZCk7Ci0gICAgICAgIEFTU0VSVChwZWVyQ29ubmVjdGlvbi5mcmFtZUNvbnRyb2xsZXIoKSk7
Ci0gICAgICAgIHBlZXJDb25uZWN0aW9uLmZyYW1lQ29udHJvbGxlcigpLT5vblJlbW92ZVN0cmVh
bShwZWVyQ29ubmVjdGlvbi5sb2NhbElkKCksIHN0cmVhbUxhYmVsKTsKLSAgICB9Ci19Ci0KLXZv
aWQgTWVkaWFTdHJlYW1Db250cm9sbGVyOjpuZXdQZWVyQ29ubmVjdGlvbihNZWRpYVN0cmVhbUZy
YW1lQ29udHJvbGxlciogZnJhbWVDb250cm9sbGVyLCBpbnQgZnJhbWVQZWVyQ29ubmVjdGlvbklk
LCBjb25zdCBTdHJpbmcmIGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgaW50IHBhZ2VQZWVyQ29ubmVj
dGlvbklkID0gbV9uZXh0R2xvYmFsUGVlckNvbm5lY3Rpb25JZCsrOwotICAgIG1fcGVlckNvbm5l
Y3Rpb25zLmFkZChwYWdlUGVlckNvbm5lY3Rpb25JZCwgUmVxdWVzdChmcmFtZVBlZXJDb25uZWN0
aW9uSWQsIGZyYW1lQ29udHJvbGxlcikpOwotCi0gICAgbV9jbGllbnQtPm5ld1BlZXJDb25uZWN0
aW9uKHBhZ2VQZWVyQ29ubmVjdGlvbklkLCBjb25maWd1cmF0aW9uKTsKLX0KLQotdm9pZCBNZWRp
YVN0cmVhbUNvbnRyb2xsZXI6OmNsb3NlUGVlckNvbm5lY3Rpb24oTWVkaWFTdHJlYW1GcmFtZUNv
bnRyb2xsZXIqIGZyYW1lQ29udHJvbGxlciwgaW50IGZyYW1lUGVlckNvbm5lY3Rpb25JZCkKLXsK
LSAgICBpbnQgcGFnZVBlZXJDb25uZWN0aW9uSWQ7Ci0gICAgaWYgKGZyYW1lVG9QYWdlUGVlckNv
bm5lY3Rpb25JZChmcmFtZUNvbnRyb2xsZXIsIGZyYW1lUGVlckNvbm5lY3Rpb25JZCwgcGFnZVBl
ZXJDb25uZWN0aW9uSWQpKQotICAgICAgICBtX2NsaWVudC0+Y2xvc2VQZWVyQ29ubmVjdGlvbihw
YWdlUGVlckNvbm5lY3Rpb25JZCk7Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1Db250cm9sbGVyOjpz
dGFydE5lZ290aWF0aW9uKE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKiBmcmFtZUNvbnRyb2xs
ZXIsIGludCBmcmFtZVBlZXJDb25uZWN0aW9uSWQpCi17Ci0gICAgaW50IHBhZ2VQZWVyQ29ubmVj
dGlvbklkOwotICAgIGlmIChmcmFtZVRvUGFnZVBlZXJDb25uZWN0aW9uSWQoZnJhbWVDb250cm9s
bGVyLCBmcmFtZVBlZXJDb25uZWN0aW9uSWQsIHBhZ2VQZWVyQ29ubmVjdGlvbklkKSkKLSAgICAg
ICAgbV9jbGllbnQtPnN0YXJ0TmVnb3RpYXRpb24ocGFnZVBlZXJDb25uZWN0aW9uSWQpOwotfQot
Ci12b2lkIE1lZGlhU3RyZWFtQ29udHJvbGxlcjo6b25OZWdvdGlhdGlvblN0YXJ0ZWQoaW50IGNv
bnRyb2xsZXJQZWVyQ29ubmVjdGlvbklkKQotewotICAgIC8vIERvbid0IGFzc2VydCBzaW5jZSB0
aGUgZnJhbWUgY29udHJvbGxlciBjYW4gaGF2ZSBiZWVuIGRlc3Ryb3llZAotICAgIGlmIChtX3Bl
ZXJDb25uZWN0aW9ucy5jb250YWlucyhjb250cm9sbGVyUGVlckNvbm5lY3Rpb25JZCkpIHsKLSAg
ICAgICAgY29uc3QgUmVxdWVzdCYgcGVlckNvbm5lY3Rpb24gPSBtX3BlZXJDb25uZWN0aW9ucy5n
ZXQoY29udHJvbGxlclBlZXJDb25uZWN0aW9uSWQpOwotICAgICAgICBBU1NFUlQocGVlckNvbm5l
Y3Rpb24uZnJhbWVDb250cm9sbGVyKCkpOwotICAgICAgICBwZWVyQ29ubmVjdGlvbi5mcmFtZUNv
bnRyb2xsZXIoKS0+b25OZWdvdGlhdGlvblN0YXJ0ZWQocGVlckNvbm5lY3Rpb24ubG9jYWxJZCgp
KTsKLSAgICB9Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1Db250cm9sbGVyOjpvbk5lZ290aWF0aW9u
RG9uZShpbnQgY29udHJvbGxlclBlZXJDb25uZWN0aW9uSWQpCi17Ci0gICAgLy8gRG9uJ3QgYXNz
ZXJ0IHNpbmNlIHRoZSBmcmFtZSBjb250cm9sbGVyIGNhbiBoYXZlIGJlZW4gZGVzdHJveWVkCi0g
ICAgaWYgKG1fcGVlckNvbm5lY3Rpb25zLmNvbnRhaW5zKGNvbnRyb2xsZXJQZWVyQ29ubmVjdGlv
bklkKSkgewotICAgICAgICBjb25zdCBSZXF1ZXN0JiBwZWVyQ29ubmVjdGlvbiA9IG1fcGVlckNv
bm5lY3Rpb25zLmdldChjb250cm9sbGVyUGVlckNvbm5lY3Rpb25JZCk7Ci0gICAgICAgIEFTU0VS
VChwZWVyQ29ubmVjdGlvbi5mcmFtZUNvbnRyb2xsZXIoKSk7Ci0gICAgICAgIHBlZXJDb25uZWN0
aW9uLmZyYW1lQ29udHJvbGxlcigpLT5vbk5lZ290aWF0aW9uRG9uZShwZWVyQ29ubmVjdGlvbi5s
b2NhbElkKCkpOwotICAgIH0KLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYg
Ly8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
TWVkaWFTdHJlYW1Db250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFt
Q29udHJvbGxlci5oCmluZGV4IDU1NTM1ODdlLi4xMGFjNGNlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvTWVkaWFTdHJlYW1Db250cm9sbGVyLmgKQEAgLTYwLDQwICs2MCwxOSBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzdHJlYW1HZW5lcmF0aW9uRmFpbGVkKGludCByZXF1ZXN0SWQsIE5hdmlnYXRv
clVzZXJNZWRpYUVycm9yOjpFcnJvckNvZGUpOwogICAgIHZvaWQgc3RyZWFtRmFpbGVkKGNvbnN0
IFN0cmluZyYgc3RyZWFtTGFiZWwpOwogCi0gICAgLyogSlMgLT4gVUEgKi8KLSAgICB2b2lkIG5l
d1BlZXJDb25uZWN0aW9uKE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKiwgaW50IGZyYW1lUGVl
ckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBjb25maWd1cmF0aW9uKTsKLSAgICB2b2lkIHN0
YXJ0TmVnb3RpYXRpb24oTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqLCBpbnQgZnJhbWVQZWVy
Q29ubmVjdGlvbklkKTsKLSAgICB2b2lkIHByb2Nlc3NTaWduYWxpbmdNZXNzYWdlKE1lZGlhU3Ry
ZWFtRnJhbWVDb250cm9sbGVyKiwgaW50IGZyYW1lUGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKTsKLSAgICB2b2lkIG1lc3NhZ2UoTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xs
ZXIqLCBpbnQgZnJhbWVQZWVyQ29ubmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwot
ICAgIHZvaWQgYWRkU3RyZWFtKE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKiwgaW50IGZyYW1l
UGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCk7Ci0gICAgdm9pZCBy
ZW1vdmVTdHJlYW0oTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqLCBpbnQgZnJhbWVQZWVyQ29u
bmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIHN0cmVhbUxhYmVsKTsKLSAgICB2b2lkIGNsb3NlUGVl
ckNvbm5lY3Rpb24oTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqLCBpbnQgZnJhbWVQZWVyQ29u
bmVjdGlvbklkKTsKLQotICAgIC8qIFVBIC0+IEpTICovCi0gICAgdm9pZCBvblNpZ25hbGluZ01l
c3NhZ2UoaW50IGNvbnRyb2xsZXJQZWVyQ29ubmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpOwotICAgIHZvaWQgb25NZXNzYWdlKGludCBjb250cm9sbGVyUGVlckNvbm5lY3Rpb25JZCwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLSAgICB2b2lkIG9uQWRkU3RyZWFtKGludCBjb250cm9s
bGVyUGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCwgUGFzc1JlZlB0
cjxNZWRpYVN0cmVhbVRyYWNrTGlzdD4gdHJhY2tzKTsKLSAgICB2b2lkIG9uUmVtb3ZlU3RyZWFt
KGludCBjb250cm9sbGVyUGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBzdHJlYW1MYWJl
bCk7Ci0gICAgdm9pZCBvbk5lZ290aWF0aW9uU3RhcnRlZChpbnQgY29udHJvbGxlclBlZXJDb25u
ZWN0aW9uSWQpOwotICAgIHZvaWQgb25OZWdvdGlhdGlvbkRvbmUoaW50IGNvbnRyb2xsZXJQZWVy
Q29ubmVjdGlvbklkKTsKLQogcHJpdmF0ZToKICAgICBpbnQgcmVnaXN0ZXJSZXF1ZXN0KGludCBs
b2NhbFJlcXVlc3RJZCwgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqKTsKICAgICB2b2lkIHJl
Z2lzdGVyU3RyZWFtKGNvbnN0IFN0cmluZyYgc3RyZWFtTGFiZWwsIE1lZGlhU3RyZWFtRnJhbWVD
b250cm9sbGVyKik7CiAKLSAgICBib29sIGZyYW1lVG9QYWdlUGVlckNvbm5lY3Rpb25JZChNZWRp
YVN0cmVhbUZyYW1lQ29udHJvbGxlciosIGludCBmcmFtZVBlZXJDb25uZWN0aW9uSWQsIGludCYg
cGFnZVBlZXJDb25uZWN0aW9uSWQpOwotCiAgICAgY2xhc3MgUmVxdWVzdDsKICAgICB0eXBlZGVm
IEhhc2hNYXA8aW50LCBSZXF1ZXN0PiBSZXF1ZXN0TWFwOwogICAgIHR5cGVkZWYgSGFzaE1hcDxT
dHJpbmcsIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKj4gU3RyZWFtTWFwOwogCiAgICAgUmVx
dWVzdE1hcCBtX3JlcXVlc3RzOwogICAgIFN0cmVhbU1hcCBtX3N0cmVhbXM7Ci0gICAgUmVxdWVz
dE1hcCBtX3BlZXJDb25uZWN0aW9uczsKIAogICAgIE1lZGlhU3RyZWFtQ2xpZW50KiBtX2NsaWVu
dDsKICAgICBpbnQgbV9uZXh0R2xvYmFsUmVxdWVzdElkOwotICAgIGludCBtX25leHRHbG9iYWxQ
ZWVyQ29ubmVjdGlvbklkOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyLmNwcAppbmRleCA5
YjY3OTJhLi42ZjZlY2U3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3Ry
ZWFtRnJhbWVDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3Ry
ZWFtRnJhbWVDb250cm9sbGVyLmNwcApAQCAtMzYsOSArMzYsNyBAQAogI2luY2x1ZGUgIk5hdmln
YXRvclVzZXJNZWRpYUVycm9yQ2FsbGJhY2suaCIKICNpbmNsdWRlICJOYXZpZ2F0b3JVc2VyTWVk
aWFTdWNjZXNzQ2FsbGJhY2suaCIKICNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGVlckNv
bm5lY3Rpb24uaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2luY2x1ZGUgIlNpZ25h
bGluZ0NhbGxiYWNrLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtMzYzLDEyNiArMzYxLDYgQEAgdm9pZCBNZWRpYVN0cmVhbUZyYW1lQ29u
dHJvbGxlcjo6c3RyZWFtRmFpbGVkKGNvbnN0IFN0cmluZyYgbGFiZWwpCiAgICAgZ2V0U3RyZWFt
RnJvbUxhYmVsKGxhYmVsKS0+c3RyZWFtRW5kZWQoKTsKIH0KIAotUGFzc1JlZlB0cjxQZWVyQ29u
bmVjdGlvbj4gTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6OmNyZWF0ZVBlZXJDb25uZWN0aW9u
KGNvbnN0IFN0cmluZyYgY29uZmlndXJhdGlvbiwgUGFzc1JlZlB0cjxTaWduYWxpbmdDYWxsYmFj
az4gc2lnbmFsaW5nQ2FsbGJhY2spCi17Ci0gICAgaW50IGNsaWVudElkID0gbV9jbGllbnRzLmdl
dE5leHRJZCgpOwotICAgIFJlZlB0cjxQZWVyQ29ubmVjdGlvbj4gcGVlckNvbm5lY3Rpb24gPSBQ
ZWVyQ29ubmVjdGlvbjo6Y3JlYXRlKHRoaXMsIGNsaWVudElkLCBjb25maWd1cmF0aW9uLCBzaWdu
YWxpbmdDYWxsYmFjayk7Ci0gICAgaWYgKHBlZXJDb25uZWN0aW9uKQotICAgICAgICBtX2NsaWVu
dHMuYWRkKGNsaWVudElkLCBwZWVyQ29ubmVjdGlvbi5nZXQoKSk7Ci0gICAgcmV0dXJuIHBlZXJD
b25uZWN0aW9uLnJlbGVhc2UoKTsKLX0KLQotdm9pZCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxl
cjo6bmV3UGVlckNvbm5lY3Rpb24oaW50IHBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYg
Y29uZmlndXJhdGlvbikKLXsKLSAgICBpZiAocGFnZUNvbnRyb2xsZXIoKSkKLSAgICAgICAgcGFn
ZUNvbnRyb2xsZXIoKS0+bmV3UGVlckNvbm5lY3Rpb24odGhpcywgcGVlckNvbm5lY3Rpb25JZCwg
Y29uZmlndXJhdGlvbik7Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6OmNs
b3NlUGVlckNvbm5lY3Rpb24oaW50IHBlZXJDb25uZWN0aW9uSWQpCi17Ci0gICAgaWYgKHBhZ2VD
b250cm9sbGVyKCkpCi0gICAgICAgIHBhZ2VDb250cm9sbGVyKCktPmNsb3NlUGVlckNvbm5lY3Rp
b24odGhpcywgcGVlckNvbm5lY3Rpb25JZCk7Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1GcmFtZUNv
bnRyb2xsZXI6OnN0YXJ0TmVnb3RpYXRpb24oaW50IHBlZXJDb25uZWN0aW9uSWQpCi17Ci0gICAg
aWYgKHBhZ2VDb250cm9sbGVyKCkpCi0gICAgICAgIHBhZ2VDb250cm9sbGVyKCktPnN0YXJ0TmVn
b3RpYXRpb24odGhpcywgcGVlckNvbm5lY3Rpb25JZCk7Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1G
cmFtZUNvbnRyb2xsZXI6OnByb2Nlc3NTaWduYWxpbmdNZXNzYWdlKGludCBwZWVyQ29ubmVjdGlv
bklkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKHBhZ2VDb250cm9sbGVyKCkp
Ci0gICAgICAgIHBhZ2VDb250cm9sbGVyKCktPnByb2Nlc3NTaWduYWxpbmdNZXNzYWdlKHRoaXMs
IHBlZXJDb25uZWN0aW9uSWQsIG1lc3NhZ2UpOwotfQotCi12b2lkIE1lZGlhU3RyZWFtRnJhbWVD
b250cm9sbGVyOjptZXNzYWdlKGludCBwZWVyQ29ubmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpCi17Ci0gICAgaWYgKHBhZ2VDb250cm9sbGVyKCkpCi0gICAgICAgIHBhZ2VDb250cm9s
bGVyKCktPm1lc3NhZ2UodGhpcywgcGVlckNvbm5lY3Rpb25JZCwgbWVzc2FnZSk7Ci19Ci0KLXZv
aWQgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6OmFkZFN0cmVhbShpbnQgcGVlckNvbm5lY3Rp
b25JZCwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4gcHJwU3RyZWFtKQotewotICAgIFJlZlB0cjxN
ZWRpYVN0cmVhbT4gc3RyZWFtID0gcHJwU3RyZWFtOwotICAgIEFTU0VSVChtX3N0cmVhbXMuY29u
dGFpbnMoc3RyZWFtLT5sYWJlbCgpKSk7Ci0KLSAgICBpZiAocGFnZUNvbnRyb2xsZXIoKSkKLSAg
ICAgICAgcGFnZUNvbnRyb2xsZXIoKS0+YWRkU3RyZWFtKHRoaXMsIHBlZXJDb25uZWN0aW9uSWQs
IHN0cmVhbS0+bGFiZWwoKSk7Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6
OnJlbW92ZVN0cmVhbShpbnQgcGVlckNvbm5lY3Rpb25JZCwgUGFzc1JlZlB0cjxNZWRpYVN0cmVh
bT4gcHJwU3RyZWFtKQotewotICAgIFJlZlB0cjxNZWRpYVN0cmVhbT4gc3RyZWFtID0gcHJwU3Ry
ZWFtOwotICAgIEFTU0VSVChtX3N0cmVhbXMuY29udGFpbnMoc3RyZWFtLT5sYWJlbCgpKSk7Ci0K
LSAgICBpZiAocGFnZUNvbnRyb2xsZXIoKSkKLSAgICAgICAgcGFnZUNvbnRyb2xsZXIoKS0+cmVt
b3ZlU3RyZWFtKHRoaXMsIHBlZXJDb25uZWN0aW9uSWQsIHN0cmVhbS0+bGFiZWwoKSk7Ci19Ci0K
LXZvaWQgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6Om9uTWVzc2FnZShpbnQgcGVlckNvbm5l
Y3Rpb25JZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIEFTU0VSVChtX2NsaWVudHMu
Y29udGFpbnMocGVlckNvbm5lY3Rpb25JZCkpOwotICAgIEFTU0VSVChtX2NsaWVudHMuZ2V0KHBl
ZXJDb25uZWN0aW9uSWQpLT5pc1BlZXJDb25uZWN0aW9uKCkpOwotCi0gICAgUmVmUHRyPFBlZXJD
b25uZWN0aW9uPiBwZWVyQ29ubmVjdGlvbiA9IHN0YXRpY19jYXN0PFBlZXJDb25uZWN0aW9uKj4o
bV9jbGllbnRzLmdldChwZWVyQ29ubmVjdGlvbklkKSk7Ci0KLSAgICBwZWVyQ29ubmVjdGlvbi0+
b25NZXNzYWdlKG1lc3NhZ2UpOwotfQotCi12b2lkIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVy
OjpvbkFkZFN0cmVhbShpbnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBzdHJlYW1M
YWJlbCwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrTGlzdD4gdHJhY2tzKQotewotICAgIEFT
U0VSVCghc3RyZWFtTGFiZWwuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQobV9jbGllbnRzLmNvbnRh
aW5zKHBlZXJDb25uZWN0aW9uSWQpKTsKLSAgICBBU1NFUlQobV9jbGllbnRzLmdldChwZWVyQ29u
bmVjdGlvbklkKS0+aXNQZWVyQ29ubmVjdGlvbigpKTsKLQotICAgIFJlZlB0cjxNZWRpYVN0cmVh
bT4gc3RyZWFtID0gTWVkaWFTdHJlYW06OmNyZWF0ZSh0aGlzLCBzdHJlYW1MYWJlbCwgdHJhY2tz
KTsKLQotICAgIFJlZlB0cjxQZWVyQ29ubmVjdGlvbj4gcGVlckNvbm5lY3Rpb24gPSBzdGF0aWNf
Y2FzdDxQZWVyQ29ubmVjdGlvbio+KG1fY2xpZW50cy5nZXQocGVlckNvbm5lY3Rpb25JZCkpOwot
ICAgIHBlZXJDb25uZWN0aW9uLT5zdHJlYW1BZGRlZChzdHJlYW0ucmVsZWFzZSgpKTsKLX0KLQot
dm9pZCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcjo6b25SZW1vdmVTdHJlYW0oaW50IHBlZXJD
b25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgc3RyZWFtTGFiZWwpCi17Ci0gICAgQVNTRVJUKCFz
dHJlYW1MYWJlbC5pc0VtcHR5KCkpOwotICAgIEFTU0VSVChtX2NsaWVudHMuY29udGFpbnMocGVl
ckNvbm5lY3Rpb25JZCkpOwotICAgIEFTU0VSVChtX2NsaWVudHMuZ2V0KHBlZXJDb25uZWN0aW9u
SWQpLT5pc1BlZXJDb25uZWN0aW9uKCkpOwotCi0gICAgUmVmUHRyPFBlZXJDb25uZWN0aW9uPiBw
ZWVyQ29ubmVjdGlvbiA9IHN0YXRpY19jYXN0PFBlZXJDb25uZWN0aW9uKj4obV9jbGllbnRzLmdl
dChwZWVyQ29ubmVjdGlvbklkKSk7Ci0gICAgcGVlckNvbm5lY3Rpb24tPnN0cmVhbVJlbW92ZWQo
c3RyZWFtTGFiZWwpOwotfQotCi12b2lkIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjpvblNp
Z25hbGluZ01lc3NhZ2UoaW50IHBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSkKLXsKLSAgICBBU1NFUlQobV9jbGllbnRzLmNvbnRhaW5zKHBlZXJDb25uZWN0aW9uSWQpKTsK
LSAgICBBU1NFUlQobV9jbGllbnRzLmdldChwZWVyQ29ubmVjdGlvbklkKS0+aXNQZWVyQ29ubmVj
dGlvbigpKTsKLQotICAgIFJlZlB0cjxQZWVyQ29ubmVjdGlvbj4gcGVlckNvbm5lY3Rpb24gPSBz
dGF0aWNfY2FzdDxQZWVyQ29ubmVjdGlvbio+KG1fY2xpZW50cy5nZXQocGVlckNvbm5lY3Rpb25J
ZCkpOwotICAgIHBlZXJDb25uZWN0aW9uLT5vblNpZ25hbGluZ01lc3NhZ2UobWVzc2FnZSk7Ci19
Ci0KLXZvaWQgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6Om9uTmVnb3RpYXRpb25TdGFydGVk
KGludCBwZWVyQ29ubmVjdGlvbklkKQotewotICAgIC8vIEZJWE1FOiBBc3NlcnQgb3Igbm90Pwot
ICAgIEFTU0VSVChtX2NsaWVudHMuY29udGFpbnMocGVlckNvbm5lY3Rpb25JZCkpOwotICAgIEFT
U0VSVChtX2NsaWVudHMuZ2V0KHBlZXJDb25uZWN0aW9uSWQpLT5pc1BlZXJDb25uZWN0aW9uKCkp
OwotCi0gICAgUmVmUHRyPFBlZXJDb25uZWN0aW9uPiBwZWVyQ29ubmVjdGlvbiA9IHN0YXRpY19j
YXN0PFBlZXJDb25uZWN0aW9uKj4obV9jbGllbnRzLmdldChwZWVyQ29ubmVjdGlvbklkKSk7Ci0K
LSAgICBwZWVyQ29ubmVjdGlvbi0+b25OZWdvdGlhdGlvblN0YXJ0ZWQoKTsKLX0KLQotdm9pZCBN
ZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcjo6b25OZWdvdGlhdGlvbkRvbmUoaW50IHBlZXJDb25u
ZWN0aW9uSWQpCi17Ci0gICAgLy8gRklYTUU6IEFzc2VydCBvciBub3Q/Ci0gICAgQVNTRVJUKG1f
Y2xpZW50cy5jb250YWlucyhwZWVyQ29ubmVjdGlvbklkKSk7Ci0gICAgQVNTRVJUKG1fY2xpZW50
cy5nZXQocGVlckNvbm5lY3Rpb25JZCktPmlzUGVlckNvbm5lY3Rpb24oKSk7Ci0KLSAgICBSZWZQ
dHI8UGVlckNvbm5lY3Rpb24+IHBlZXJDb25uZWN0aW9uID0gc3RhdGljX2Nhc3Q8UGVlckNvbm5l
Y3Rpb24qPihtX2NsaWVudHMuZ2V0KHBlZXJDb25uZWN0aW9uSWQpKTsKLQotICAgIHBlZXJDb25u
ZWN0aW9uLT5vbk5lZ290aWF0aW9uRG9uZSgpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9NZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9NZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlci5oCmluZGV4IGU1MTQ3MjUuLjZhMzlhZmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xs
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVy
LmgKQEAgLTQ1LDcgKzQ1LDYgQEAgY2xhc3MgTWVkaWFTdHJlYW1UcmFja0xpc3Q7CiBjbGFzcyBO
YXZpZ2F0b3JVc2VyTWVkaWFFcnJvckNhbGxiYWNrOwogY2xhc3MgTmF2aWdhdG9yVXNlck1lZGlh
U3VjY2Vzc0NhbGxiYWNrOwogY2xhc3MgUGFnZTsKLWNsYXNzIFBlZXJDb25uZWN0aW9uOwogY2xh
c3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogY2xhc3Mg
U2lnbmFsaW5nQ2FsbGJhY2s7CkBAIC03MSw3ICs3MCw2IEBAIHB1YmxpYzoKICAgICAgICAgdmly
dHVhbCBib29sIGlzTWVkaWFTdHJlYW0oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgICAg
ICB2aXJ0dWFsIGJvb2wgaXNMb2NhbE1lZGlhU3RyZWFtKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzR2VuZXJpY0NsaWVudCgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1BlZXJDb25uZWN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KIAogICAgICAgICAvLyBDYWxsZWQgd2hlbiB0aGUgZnJhbWUgY29u
dHJvbGxlciBpcyBiZWluZyBkaXNjb25uZWN0ZWQgdG8gdGhlIE1lZGlhU3RyZWFtQ2xpZW50IGVt
YmVkZGVyLgogICAgICAgICAvLyBDbGllbnRzIHNob3VsZCBvdmVycmlkZSB0aGlzIHRvIHNlbmQg
YW55IHJlcXVpcmVkIHNodXRkb3duIG1lc3NhZ2VzLgpAQCAtMTQwLDEzICsxMzgsNiBAQCBwdWJs
aWM6CiAgICAgICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVyKCkgeyB1bnJlZ2lzdGVyQ2xpZW50
KHRoaXMpOyB9CiAgICAgfTsKIAotICAgIGNsYXNzIFBlZXJDb25uZWN0aW9uQ2xpZW50IDogcHVi
bGljIEdlbmVyaWNDbGllbnQgewotICAgIHB1YmxpYzoKLSAgICAgICAgUGVlckNvbm5lY3Rpb25D
bGllbnQoTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqIGZyYW1lQ29udHJvbGxlciwgaW50IGlk
KSA6IEdlbmVyaWNDbGllbnQoZnJhbWVDb250cm9sbGVyLCBpZCkgeyB9Ci0gICAgICAgIHZpcnR1
YWwgflBlZXJDb25uZWN0aW9uQ2xpZW50KCkgeyB9Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1Bl
ZXJDb25uZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIH07Ci0KICAgICBNZWRp
YVN0cmVhbUZyYW1lQ29udHJvbGxlcihGcmFtZSopOwogICAgIHZpcnR1YWwgfk1lZGlhU3RyZWFt
RnJhbWVDb250cm9sbGVyKCk7CiAKQEAgLTE2MywyOCArMTU0LDEyIEBAIHB1YmxpYzoKICAgICB2
b2lkIHN0b3BHZW5lcmF0ZWRTdHJlYW0oY29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCk7CiAgICAg
dm9pZCBzZXRNZWRpYVN0cmVhbVRyYWNrRW5hYmxlZChjb25zdCBTdHJpbmcmIHRyYWNrSWQsIGJv
b2wgZW5hYmxlZCk7CiAKLSAgICBQYXNzUmVmUHRyPFBlZXJDb25uZWN0aW9uPiBjcmVhdGVQZWVy
Q29ubmVjdGlvbihjb25zdCBTdHJpbmcmIGNvbmZpZ3VyYXRpb24sIFBhc3NSZWZQdHI8U2lnbmFs
aW5nQ2FsbGJhY2s+KTsKLSAgICB2b2lkIG5ld1BlZXJDb25uZWN0aW9uKGludCBwZWVyQ29ubmVj
dGlvbklkLCBjb25zdCBTdHJpbmcmIGNvbmZpZ3VyYXRpb24pOwotICAgIHZvaWQgc3RhcnROZWdv
dGlhdGlvbihpbnQgcGVlckNvbm5lY3Rpb25JZCk7Ci0gICAgdm9pZCBwcm9jZXNzU2lnbmFsaW5n
TWVzc2FnZShpbnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLSAg
ICB2b2lkIG1lc3NhZ2UoaW50IHBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSk7Ci0gICAgdm9pZCBhZGRTdHJlYW0oaW50IHBlZXJDb25uZWN0aW9uSWQsIFBhc3NSZWZQdHI8
TWVkaWFTdHJlYW0+KTsKLSAgICB2b2lkIHJlbW92ZVN0cmVhbShpbnQgcGVlckNvbm5lY3Rpb25J
ZCwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4pOwotICAgIHZvaWQgY2xvc2VQZWVyQ29ubmVjdGlv
bihpbnQgcGVlckNvbm5lY3Rpb25JZCk7Ci0KICAgICAvLyAtLS0gQ2FsbHMgY29taW5nIGJhY2sg
ZnJvbSB0aGUgY29udHJvbGxlci4gLS0tIC8vCiAKICAgICB2b2lkIHN0cmVhbUdlbmVyYXRlZChp
bnQgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIHN0cmVhbUxhYmVsLCBQYXNzUmVmUHRyPE1lZGlh
U3RyZWFtVHJhY2tMaXN0PiB0cmFja3MpOwogICAgIHZvaWQgc3RyZWFtR2VuZXJhdGlvbkZhaWxl
ZChpbnQgcmVxdWVzdElkLCBOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvcjo6RXJyb3JDb2RlKTsKICAg
ICB2b2lkIHN0cmVhbUZhaWxlZChjb25zdCBTdHJpbmcmIHN0cmVhbUxhYmVsKTsKIAotICAgIHZv
aWQgb25TaWduYWxpbmdNZXNzYWdlKGludCBwZWVyQ29ubmVjdGlvbklkLCBjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpOwotICAgIHZvaWQgb25NZXNzYWdlKGludCBwZWVyQ29ubmVjdGlvbklkLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpOwotICAgIHZvaWQgb25BZGRTdHJlYW0oaW50IHBlZXJDb25uZWN0
aW9uSWQsIGNvbnN0IFN0cmluZyYgc3RyZWFtTGFiZWwsIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1U
cmFja0xpc3Q+KTsKLSAgICB2b2lkIG9uUmVtb3ZlU3RyZWFtKGludCBwZWVyQ29ubmVjdGlvbklk
LCBjb25zdCBTdHJpbmcmIHN0cmVhbUxhYmVsKTsKLSAgICB2b2lkIG9uTmVnb3RpYXRpb25TdGFy
dGVkKGludCBwZWVyQ29ubmVjdGlvbklkKTsKLSAgICB2b2lkIG9uTmVnb3RpYXRpb25Eb25lKGlu
dCBwZWVyQ29ubmVjdGlvbklkKTsKLQogcHJpdmF0ZToKICAgICBjbGFzcyBSZXF1ZXN0OwogICAg
IGNsYXNzIEdlbmVyYXRlU3RyZWFtUmVxdWVzdDsK
</data>
<flag name="review"
          id="107845"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110529</attachid>
            <date>2011-10-11 10:06:25 -0700</date>
            <delta_ts>2011-10-11 16:42:10 -0700</delta_ts>
            <desc>Patch 4</desc>
            <filename>peerconnection_use_platform_4.patch</filename>
            <type>text/plain</type>
            <size>55972</size>
            <attacher name="Adam Bergkvist">adam.bergkvist</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkNmRkMmQxLi5lMmNmZDc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTkg
QEAKKzIwMTEtMTAtMTEgIEFkYW0gQmVyZ2t2aXN0ICA8YWRhbS5iZXJna3Zpc3RAZXJpY3Nzb24u
Y29tPgorCisgICAgICAgIFVwZGF0ZSBQZWVyQ29ubmVjdGlvbiB0byB1c2UgV2ViQ29yZSBwbGF0
Zm9ybSBpbnRlcmZhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02ODQ2MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEN1cnJlbnRseSBub3QgdGVzdGFibGUuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6
CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogYmluZGluZ3MvanMvSlNQZWVyQ29u
bmVjdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1BlZXJDb25uZWN0aW9uQ29u
c3RydWN0b3I6OmNvbnN0cnVjdEpTUGVlckNvbm5lY3Rpb24pOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L2N1c3RvbS9WOFBlZXJDb25uZWN0aW9uQ3VzdG9tLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBkb20vTWVkaWFTdHJlYW1MaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFt
TGlzdDo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUxpc3Q6OmFwcGVuZCk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUxpc3Q6OnJlbW92ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVN0cmVhbUxpc3Q6OmNvbnRhaW5zKToKKyAgICAgICAgKiBkb20vTWVkaWFT
dHJlYW1MaXN0Lmg6CisgICAgICAgICogcDJwL1BlZXJDb25uZWN0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGVl
ckNvbm5lY3Rpb246OlBlZXJDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25u
ZWN0aW9uOjpwcm9jZXNzU2lnbmFsaW5nTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpQZWVy
Q29ubmVjdGlvbjo6cmVhZHlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlv
bjo6c2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6YWRkU3RyZWFtKToK
KyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uOjpyZW1vdmVTdHJlYW0pOgorICAgICAg
ICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246OmxvY2FsU3RyZWFtcyk6CisgICAgICAgIChXZWJD
b3JlOjpQZWVyQ29ubmVjdGlvbjo6cmVtb3RlU3RyZWFtcyk6CisgICAgICAgIChXZWJDb3JlOjpQ
ZWVyQ29ubmVjdGlvbjo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246
OmljZVByb2Nlc3NpbmdDb21wbGV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rp
b246OnNkcEdlbmVyYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6ZGF0
YVN0cmVhbU1lc3NhZ2VSZWNlaXZlZCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlv
bjo6cmVtb3RlU3RyZWFtQWRkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246
OnJlbW90ZVN0cmVhbVJlbW92ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246
OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rp
b246OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246OnNjaGVkdWxlSW5p
dGlhbE5lZ290aWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uOjppbml0
aWFsTmVnb3RpYXRpb25UaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0
aW9uOjplbnN1cmVTdHJlYW1DaGFuZ2VTY2hlZHVsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGVl
ckNvbm5lY3Rpb246OnN0cmVhbUNoYW5nZVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6
UGVlckNvbm5lY3Rpb246OnNjaGVkdWxlUmVhZHlTdGF0ZUNoYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpQZWVyQ29ubmVjdGlvbjo6cmVhZHlTdGF0ZUNoYW5nZVRpbWVyRmlyZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246OmNoYW5nZVJlYWR5U3RhdGUpOgorICAgICAgICAq
IHAycC9QZWVyQ29ubmVjdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246
OnJlZkV2ZW50VGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uOjpkZXJl
ZkV2ZW50VGFyZ2V0KToKKyAgICAgICAgKiBwMnAvUGVlckNvbm5lY3Rpb24uaWRsOgorICAgICAg
ICAqIHBhZ2UvTWVkaWFTdHJlYW1DbGllbnQuaDoKKyAgICAgICAgKiBwYWdlL01lZGlhU3RyZWFt
Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUNvbnRyb2xsZXI6
Ok1lZGlhU3RyZWFtQ29udHJvbGxlcik6CisgICAgICAgICogcGFnZS9NZWRpYVN0cmVhbUNvbnRy
b2xsZXIuaDoKKyAgICAgICAgKiBwYWdlL01lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKiBwYWdlL01lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyLmg6CisKIDIwMTEtMTAt
MTAgIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQub3JnPgogCiAgICAgICAgIFNocmluayBX
ZWJDb3JlOjpOb2RlIG9uIDY0LWJpdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA5ZjgxYzIzLi45YWQz
ZThmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0yMjEzLDcgKzIyMTMsNiBAQAogICAgICAgICAgICAg
J2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5k
aW5ncy92OC9jdXN0b20vVjhOb2RlTGlzdEN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOE5vdGlmaWNhdGlvbkNlbnRlckN1c3RvbS5jcHAnLAotICAgICAgICAg
ICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFBlZXJDb25uZWN0aW9uQ3VzdG9tLmNwcCcsCiAgICAg
ICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4UGVyZm9ybWFuY2VDdXN0b20uY3BwJywKICAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhQb3BTdGF0ZUV2ZW50Q3VzdG9tLmNwcCcs
CiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1FMUmVzdWx0U2V0Um93TGlzdEN1
c3RvbS5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCAwNjRkYzk4Li4yNjQ0NjI5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnBybwpAQCAtMzMxNyw4ICszMzE3LDcgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX01FRElB
X1NUUkVBTT0xKSB7CiAKICAgICB2OCB7CiAgICAgICAgIFNPVVJDRVMgKz0gXAotICAgICAgICAg
ICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4TmF2aWdhdG9yQ3VzdG9tLmNwcCBcCi0gICAgICAgICAg
ICBiaW5kaW5ncy92OC9jdXN0b20vVjhQZWVyQ29ubmVjdGlvbkN1c3RvbS5jcHAKKyAgICAgICAg
ICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOE5hdmlnYXRvckN1c3RvbS5jcHAKICAgICB9IGVsc2Ug
ewogICAgICAgICBTT1VSQ0VTICs9IFwKICAgICAgICAgICAgIGJpbmRpbmdzL2pzL0pTTmF2aWdh
dG9yQ3VzdG9tLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1BlZXJDb25uZWN0aW9uQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
UGVlckNvbm5lY3Rpb25DdXN0b20uY3BwCmluZGV4IDcwYmIxNzIuLmUyNDM3YzkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGVlckNvbm5lY3Rpb25DdXN0b20uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGVlckNvbm5lY3Rpb25DdXN0b20u
Y3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFC
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yOSwyMiArMzAsMjUgQEAKICNpbmNsdWRlICJKU1BlZXJDb25uZWN0aW9uLmgiCiAKICNpbmNs
dWRlICJDYWxsYmFja0Z1bmN0aW9uLmgiCi0jaW5jbHVkZSAiRE9NV2luZG93LmgiCi0jaW5jbHVk
ZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJKU0RPTVdpbmRvd0N1c3RvbS5oIgogI2luY2x1ZGUgIkpT
U2lnbmFsaW5nQ2FsbGJhY2suaCIKLSNpbmNsdWRlICJNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxl
ci5oIgogI2luY2x1ZGUgIlBlZXJDb25uZWN0aW9uLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
KyNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1BlZXJD
b25uZWN0aW9uQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTUGVlckNvbm5lY3Rpb24oRXhlY1N0YXRl
KiBleGVjKQogewogICAgIEpTUGVlckNvbm5lY3Rpb25Db25zdHJ1Y3RvcioganNDb25zdHJ1Y3Rv
ciA9IHN0YXRpY19jYXN0PEpTUGVlckNvbm5lY3Rpb25Db25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxl
ZSgpKTsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0ganNDb25zdHJ1Y3Rv
ci0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVSZWZlcmVuY2VFcnJvcihleGVjLCAiUGVl
ckNvbm5lY3Rpb24gY29uc3RydWN0b3IgYXNzb2NpYXRlZCBkb2N1bWVudCBpcyB1bmF2YWlsYWJs
ZSIpKTsKIAotICAgIFN0cmluZyBjb25maWd1cmF0aW9uID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMt
PmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3Vu
dCgpIDwgMikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJy
b3IoZXhlYywgIk5vdCBlbm91Z2ggYXJndW1lbnRzIikpOworCisgICAgU3RyaW5nIHNlcnZlckNv
bmZpZ3VyYXRpb24gPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmco
ZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogCkBAIC01MiwxNyArNTYsOCBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIEpTUGVlckNvbm5lY3Rpb25Db25zdHJ1Y3Rvcjo6Y29uc3RydWN0
SlNQZWVyQ29ubmVjdAogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogCi0gICAgRnJhbWUqIGZyYW1lID0gYXNK
U0RPTVdpbmRvdyhleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5pbXBsKCktPmZyYW1lKCk7
Ci0gICAgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqIGZyYW1lQ29udHJvbGxlciA9IGZyYW1l
ID8gZnJhbWUtPm1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKCkgOiAwOwotCi0gICAgUmVmUHRy
PFBlZXJDb25uZWN0aW9uPiBwZWVyQ29ubmVjdGlvbjsKLSAgICBpZiAoZnJhbWVDb250cm9sbGVy
KQotICAgICAgICBwZWVyQ29ubmVjdGlvbiA9IGZyYW1lQ29udHJvbGxlci0+Y3JlYXRlUGVlckNv
bm5lY3Rpb24oY29uZmlndXJhdGlvbiwgc2lnbmFsaW5nQ2FsbGJhY2spOwotCi0gICAgaWYgKCFw
ZWVyQ29ubmVjdGlvbikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkp
OwotCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pTKGV4ZWMsIGpzQ29u
c3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCBwZWVyQ29ubmVjdGlvbi5nZXQoKSkpKTsKKyAgICBS
ZWZQdHI8UGVlckNvbm5lY3Rpb24+IHBlZXJDb25uZWN0aW9uID0gUGVlckNvbm5lY3Rpb246OmNy
ZWF0ZShzZXJ2ZXJDb25maWd1cmF0aW9uLCBzaWduYWxpbmdDYWxsYmFjay5yZWxlYXNlKCksIGNv
bnRleHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoQ1JFQVRFX0RPTV9XUkFQUEVSKGV4
ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCBQZWVyQ29ubmVjdGlvbiwgcGVlckNv
bm5lY3Rpb24uZ2V0KCkpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4UGVlckNvbm5lY3Rpb25DdXN0
b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4UGVlckNvbm5lY3Rp
b25DdXN0b20uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ODFjZGExLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFBlZXJDb25uZWN0
aW9uQ3VzdG9tLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
Ci0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0KLSNp
bmNsdWRlICJWOFBlZXJDb25uZWN0aW9uLmgiCi0KLSNpbmNsdWRlICJET01XaW5kb3cuaCIKLSNp
bmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJN
ZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIlBlZXJDb25uZWN0aW9uLmgi
Ci0jaW5jbHVkZSAiVjhCaW5kaW5nLmgiCi0jaW5jbHVkZSAiVjhQcm94eS5oIgotI2luY2x1ZGUg
IlY4U2lnbmFsaW5nQ2FsbGJhY2suaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gVjhQZWVyQ29ubmVjdGlvbjo6Y29uc3RydWN0b3JDYWxsYmFjayhjb25z
dCB2ODo6QXJndW1lbnRzJiBhcmdzKQotewotICAgIElOQ19TVEFUUygiRE9NLlBlZXJDb25uZWN0
aW9uLkNvbnN0cnVjdG9yIik7Ci0KLSAgICBpZiAoIWFyZ3MuSXNDb25zdHJ1Y3RDYWxsKCkpCi0g
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBi
ZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4iLCBWOFByb3h5OjpUeXBlRXJyb3IpOwotCi0gICAgaW50
IGFyZ0xlbmd0aCA9IGFyZ3MuTGVuZ3RoKCk7Ci0gICAgaWYgKGFyZ0xlbmd0aCAhPSAyKQotICAg
ICAgICByZXR1cm4gdGhyb3dFcnJvcigiVGhlIFBlZXJDb25uZWN0aW9uIGNvbnN0cnVjdG9yIHRh
a2VzIHR3byBhcmd1bWVudHMuIiwgVjhQcm94eTo6VHlwZUVycm9yKTsKLQotICAgIHY4OjpUcnlD
YXRjaCBleGNlcHRpb25DYXRjaGVyOwotICAgIFN0cmluZyBjb25maWd1cmF0aW9uID0gdG9XZWJD
b3JlU3RyaW5nKGFyZ3NbMF0tPlRvU3RyaW5nKCkpOwotICAgIGlmIChleGNlcHRpb25DYXRjaGVy
Lkhhc0NhdWdodCgpKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGNlcHRpb25DYXRjaGVy
LkV4Y2VwdGlvbigpKTsKLQotICAgIGJvb2wgc3VjY2VlZGVkID0gZmFsc2U7Ci0gICAgUmVmUHRy
PFNpZ25hbGluZ0NhbGxiYWNrPiBzaWduYWxpbmdDYWxsYmFjayA9IGNyZWF0ZUZ1bmN0aW9uT25s
eUNhbGxiYWNrPFY4U2lnbmFsaW5nQ2FsbGJhY2s+KGFyZ3NbMV0sIHN1Y2NlZWRlZCk7Ci0gICAg
aWYgKCFzdWNjZWVkZWQgfHwgIXNpZ25hbGluZ0NhbGxiYWNrKQotICAgICAgICByZXR1cm4gdGhy
b3dFcnJvcigiVGhlIFBlZXJDb25uZWN0aW9uIGNvbnN0cnVjdG9yIG11c3QgYmUgZ2l2ZW4gYSBT
aWduYWxpbmdDYWxsYmFjayBjYWxsYmFjay4iLCBWOFByb3h5OjpUeXBlRXJyb3IpOwotCi0gICAg
RnJhbWUqIGZyYW1lID0gVjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckVudGVyZWRDb250ZXh0KCk7
Ci0gICAgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqIGZyYW1lQ29udHJvbGxlciA9IGZyYW1l
ID8gZnJhbWUtPm1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKCkgOiAwOwotCi0gICAgUmVmUHRy
PFBlZXJDb25uZWN0aW9uPiBwZWVyQ29ubmVjdGlvbjsKLSAgICBpZiAoZnJhbWVDb250cm9sbGVy
KQotICAgICAgICBwZWVyQ29ubmVjdGlvbiA9IGZyYW1lQ29udHJvbGxlci0+Y3JlYXRlUGVlckNv
bm5lY3Rpb24oY29uZmlndXJhdGlvbiwgc2lnbmFsaW5nQ2FsbGJhY2spOwotCi0gICAgaWYgKCFw
ZWVyQ29ubmVjdGlvbikKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLQotICAgIFY4
RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcihhcmdzLkhvbGRlcigpLCAmaW5mbywgcGVlckNvbm5l
Y3Rpb24uZ2V0KCkpOwotICAgIHJldHVybiB0b1Y4KHBlZXJDb25uZWN0aW9uLnJlbGVhc2UoKSwg
YXJncy5Ib2xkZXIoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVk
aWFTdHJlYW1MaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NZWRpYVN0cmVhbUxpc3QuY3Bw
CmluZGV4IGQzYWQ5NDYuLjY1MTg1NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9N
ZWRpYVN0cmVhbUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NZWRpYVN0cmVhbUxp
c3QuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29u
IEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC00Nyw0NyArNDgsMjggQEAgdW5zaWduZWQgTWVkaWFTdHJlYW1MaXN0OjpsZW5ndGgoKSBj
b25zdAogICAgIHJldHVybiBtX3N0cmVhbXMuc2l6ZSgpOwogfQogCi1QYXNzUmVmUHRyPE1lZGlh
U3RyZWFtPiBNZWRpYVN0cmVhbUxpc3Q6Oml0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0CitNZWRp
YVN0cmVhbSogTWVkaWFTdHJlYW1MaXN0OjppdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdAogewot
ICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8TWVkaWFTdHJlYW0+ID46OmNvbnN0X2l0ZXJhdG9y
IGkgPSBtX3N0cmVhbXMuYmVnaW4oKTsKLSAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBpICE9IG1f
c3RyZWFtcy5lbmQoKTsgKytpLCArK2opIHsKLSAgICAgICAgaWYgKGogPT0gaW5kZXgpCi0gICAg
ICAgICAgICByZXR1cm4gaS0+c2Vjb25kOwotICAgIH0KLSAgICByZXR1cm4gUGFzc1JlZlB0cjxN
ZWRpYVN0cmVhbT4oKTsKKyAgICByZXR1cm4gbV9zdHJlYW1zW2luZGV4XS5nZXQoKTsKIH0KIAot
dm9pZCBNZWRpYVN0cmVhbUxpc3Q6OmFkZChQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPiBzdHJlYW0p
Cit2b2lkIE1lZGlhU3RyZWFtTGlzdDo6YXBwZW5kKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+IHN0
cmVhbSkKIHsKLSAgICBSZWZQdHI8TWVkaWFTdHJlYW0+IHMgPSBzdHJlYW07Ci0gICAgQVNTRVJU
KCFjb250YWlucyhzKSk7Ci0gICAgbV9zdHJlYW1zLmFkZChzLT5sYWJlbCgpLCBzKTsKKyAgICBt
X3N0cmVhbXMuYXBwZW5kKHN0cmVhbSk7CiB9CiAKLXZvaWQgTWVkaWFTdHJlYW1MaXN0OjpyZW1v
dmUoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4gc3RyZWFtKQordm9pZCBNZWRpYVN0cmVhbUxpc3Q6
OnJlbW92ZShjb25zdCBSZWZQdHI8TWVkaWFTdHJlYW0+JiBzdHJlYW0pCiB7Ci0gICAgUmVmUHRy
PE1lZGlhU3RyZWFtPiBzID0gc3RyZWFtOwotICAgIEFTU0VSVChjb250YWlucyhzKSk7Ci0gICAg
bV9zdHJlYW1zLnJlbW92ZShzLT5sYWJlbCgpKTsKKyAgICBzaXplX3QgaSA9IG1fc3RyZWFtcy5m
aW5kKHN0cmVhbSk7CisgICAgaWYgKGkgIT0gbm90Rm91bmQpCisgICAgICAgIHJldHVybiBtX3N0
cmVhbXMucmVtb3ZlKGkpOwogfQogCi1ib29sIE1lZGlhU3RyZWFtTGlzdDo6Y29udGFpbnMoUGFz
c1JlZlB0cjxNZWRpYVN0cmVhbT4gc3RyZWFtKSBjb25zdAorYm9vbCBNZWRpYVN0cmVhbUxpc3Q6
OmNvbnRhaW5zKGNvbnN0IFJlZlB0cjxNZWRpYVN0cmVhbT4mIHN0cmVhbSkgY29uc3QKIHsKLSAg
ICBSZWZQdHI8TWVkaWFTdHJlYW0+IHMgPSBzdHJlYW07Ci0gICAgcmV0dXJuIG1fc3RyZWFtcy5j
b250YWlucyhzLT5sYWJlbCgpKTsKKyAgICByZXR1cm4gbV9zdHJlYW1zLmNvbnRhaW5zKHN0cmVh
bSk7CiB9CiAKLWJvb2wgTWVkaWFTdHJlYW1MaXN0Ojpjb250YWlucyhjb25zdCBTdHJpbmcmIGxh
YmVsKSBjb25zdAotewotICAgIHJldHVybiBtX3N0cmVhbXMuY29udGFpbnMobGFiZWwpOwotfQot
Ci1QYXNzUmVmUHRyPE1lZGlhU3RyZWFtPiBNZWRpYVN0cmVhbUxpc3Q6OmdldChjb25zdCBTdHJp
bmcmIGxhYmVsKSBjb25zdAotewotICAgIHJldHVybiBtX3N0cmVhbXMuZ2V0KGxhYmVsKTsKLX0K
LQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RS
RUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL01lZGlhU3RyZWFtTGlzdC5oIGIv
U291cmNlL1dlYkNvcmUvZG9tL01lZGlhU3RyZWFtTGlzdC5oCmluZGV4IDczMjBmZGQuLjk4NTU2
MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NZWRpYVN0cmVhbUxpc3QuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vTWVkaWFTdHJlYW1MaXN0LmgKQEAgLTI4LDEwICsyOCw2IEBA
CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKIAogI2luY2x1ZGUgIk1lZGlhU3RyZWFtLmgiCi0j
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQyLDE5ICszOCwxNyBAQCBwdWJsaWM6CiAKICAgICAvLyBE
T00gbWV0aG9kcyAmIGF0dHJpYnV0ZXMgZm9yIE1lZGlhU3RyZWFtTGlzdAogICAgIHVuc2lnbmVk
IGxlbmd0aCgpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+IGl0ZW0odW5zaWdu
ZWQgaW5kZXgpIGNvbnN0OworICAgIE1lZGlhU3RyZWFtKiBpdGVtKHVuc2lnbmVkIGluZGV4KSBj
b25zdDsKIAogICAgIC8vIExpc3QgbWFuaXB1bGF0aW9uCi0gICAgdm9pZCBhZGQoUGFzc1JlZlB0
cjxNZWRpYVN0cmVhbT4pOwotICAgIHZvaWQgcmVtb3ZlKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+
KTsKLSAgICBib29sIGNvbnRhaW5zKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+KSBjb25zdDsKLSAg
ICBib29sIGNvbnRhaW5zKGNvbnN0IFN0cmluZyYgbGFiZWwpIGNvbnN0OwotICAgIFBhc3NSZWZQ
dHI8TWVkaWFTdHJlYW0+IGdldChjb25zdCBTdHJpbmcmIGxhYmVsKSBjb25zdDsKKyAgICB2b2lk
IGFwcGVuZChQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPik7CisgICAgdm9pZCByZW1vdmUoY29uc3Qg
UmVmUHRyPE1lZGlhU3RyZWFtPiYpOworICAgIGJvb2wgY29udGFpbnMoY29uc3QgUmVmUHRyPE1l
ZGlhU3RyZWFtPiYpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIE1lZGlhU3RyZWFtTGlzdCgpOwog
Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxNZWRpYVN0cmVhbT4gPiBtX3N0cmVhbXM7Cisg
ICAgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbT4gPiBtX3N0cmVhbXM7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wMnAvUGVlckNvbm5l
Y3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcDJwL1BlZXJDb25uZWN0aW9uLmNwcAppbmRleCBi
ZGEzZWUzLi5lNDdlMzMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wMnAvUGVlckNvbm5l
Y3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3AycC9QZWVyQ29ubmVjdGlvbi5jcHAKQEAg
LTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgRXJpY3Nzb24gQUIuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDYx
ICsyOCw0MSBAQAogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKIAotI2luY2x1ZGUgIkRpc3Bh
dGNoVGFzay5oIgotI2luY2x1ZGUgIkVycm9yRXZlbnQuaCIKLSNpbmNsdWRlICJFdmVudC5oIgot
I2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJNZWRpYVN0cmVhbS5oIgorI2luY2x1
ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJNZWRpYVN0cmVhbUV2ZW50LmgiCi0jaW5j
bHVkZSAiTWVkaWFTdHJlYW1MaXN0LmgiCiAjaW5jbHVkZSAiTWVzc2FnZUV2ZW50LmgiCiAjaW5j
bHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotI2luY2x1ZGUgIlNpZ25hbGluZ0NhbGxi
YWNrLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1QYXNzUmVmUHRyPFBlZXJDb25uZWN0aW9uPiBQZWVyQ29ubmVjdGlvbjo6Y3JlYXRlKE1l
ZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKiBmcmFtZUNvbnRyb2xsZXIsIGludCBpZCwgY29uc3Qg
U3RyaW5nJiBjb25maWd1cmF0aW9uLCBQYXNzUmVmUHRyPFNpZ25hbGluZ0NhbGxiYWNrPiBzaWdu
YWxpbmdDYWxsYmFjaykKK1Bhc3NSZWZQdHI8UGVlckNvbm5lY3Rpb24+IFBlZXJDb25uZWN0aW9u
OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBzZXJ2ZXJDb25maWd1cmF0aW9uLCBQYXNzUmVmUHRyPFNp
Z25hbGluZ0NhbGxiYWNrPiBzaWduYWxpbmdDYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCkKIHsKLSAgICAvLyBGSVhNRTogVmVyaWZ5IHRoYXQgY29uZmlndXJhdGlvbiBm
b2xsb3dzIHRoZSBzcGVjaWZpZWQgZm9ybWF0LCBpZiBub3QgcmV0dXJuIG51bGwuCisgICAgUmVm
UHRyPFBlZXJDb25uZWN0aW9uPiBjb25uZWN0aW9uID0gYWRvcHRSZWYobmV3IFBlZXJDb25uZWN0
aW9uKHNlcnZlckNvbmZpZ3VyYXRpb24sIHNpZ25hbGluZ0NhbGxiYWNrLCBjb250ZXh0KSk7Cisg
ICAgY29ubmVjdGlvbi0+c2V0UGVuZGluZ0FjdGl2aXR5KGNvbm5lY3Rpb24uZ2V0KCkpOworICAg
IGNvbm5lY3Rpb24tPnNjaGVkdWxlSW5pdGlhbE5lZ290aWF0aW9uKCk7CiAKLSAgICBSZWZQdHI8
UGVlckNvbm5lY3Rpb24+IHBlZXJDb25uZWN0aW9uID0gYWRvcHRSZWYobmV3IFBlZXJDb25uZWN0
aW9uKGZyYW1lQ29udHJvbGxlciwgaWQsIGNvbmZpZ3VyYXRpb24sIHNpZ25hbGluZ0NhbGxiYWNr
KSk7Ci0gICAgcGVlckNvbm5lY3Rpb24tPmluaXQoKTsKLSAgICByZXR1cm4gcGVlckNvbm5lY3Rp
b24ucmVsZWFzZSgpOworICAgIHJldHVybiBjb25uZWN0aW9uLnJlbGVhc2UoKTsKIH0KIAotUGVl
ckNvbm5lY3Rpb246OlBlZXJDb25uZWN0aW9uKE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKiBm
cmFtZUNvbnRyb2xsZXIsIGludCBpZCwgY29uc3QgU3RyaW5nJiBjb25maWd1cmF0aW9uLCBQYXNz
UmVmUHRyPFNpZ25hbGluZ0NhbGxiYWNrPiBzaWduYWxpbmdDYWxsYmFjaykKLSAgICA6IFBlZXJD
b25uZWN0aW9uQ2xpZW50KGZyYW1lQ29udHJvbGxlciwgaWQpCi0gICAgLCBtX2NvbmZpZ3VyYXRp
b24oY29uZmlndXJhdGlvbikKLSAgICAsIG1fcmVhZHlTdGF0ZShORVcpCitQZWVyQ29ubmVjdGlv
bjo6UGVlckNvbm5lY3Rpb24oY29uc3QgU3RyaW5nJiBzZXJ2ZXJDb25maWd1cmF0aW9uLCBQYXNz
UmVmUHRyPFNpZ25hbGluZ0NhbGxiYWNrPiBzaWduYWxpbmdDYWxsYmFjaywgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCkKKyAgICA6IEFjdGl2ZURPTU9iamVjdChjb250ZXh0LCB0aGlz
KQogICAgICwgbV9zaWduYWxpbmdDYWxsYmFjayhzaWduYWxpbmdDYWxsYmFjaykKKyAgICAsIG1f
cmVhZHlTdGF0ZShORVcpCisgICAgLCBtX2ljZVN0YXJ0ZWQoZmFsc2UpCisgICAgLCBtX2xvY2Fs
U3RyZWFtcyhNZWRpYVN0cmVhbUxpc3Q6OmNyZWF0ZSgpKQorICAgICwgbV9yZW1vdGVTdHJlYW1z
KE1lZGlhU3RyZWFtTGlzdDo6Y3JlYXRlKCkpCisgICAgLCBtX2luaXRpYWxOZWdvdGlhdGlvblRp
bWVyKHRoaXMsICZQZWVyQ29ubmVjdGlvbjo6aW5pdGlhbE5lZ290aWF0aW9uVGltZXJGaXJlZCkK
KyAgICAsIG1fc3RyZWFtQ2hhbmdlVGltZXIodGhpcywgJlBlZXJDb25uZWN0aW9uOjpzdHJlYW1D
aGFuZ2VUaW1lckZpcmVkKQorICAgICwgbV9yZWFkeVN0YXRlQ2hhbmdlVGltZXIodGhpcywgJlBl
ZXJDb25uZWN0aW9uOjpyZWFkeVN0YXRlQ2hhbmdlVGltZXJGaXJlZCkKKyAgICAsIG1fcGVlckhh
bmRsZXIoUGVlckhhbmRsZXI6OmNyZWF0ZSh0aGlzLCBzZXJ2ZXJDb25maWd1cmF0aW9uLCBjb250
ZXh0LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpKSkKIHsKLSAgICBBU1NFUlQoZnJhbWVD
b250cm9sbGVyKTsKLSAgICBtX2xvY2FsU3RyZWFtTGlzdCA9IE1lZGlhU3RyZWFtTGlzdDo6Y3Jl
YXRlKCk7Ci0gICAgbV9yZW1vdGVTdHJlYW1MaXN0ID0gTWVkaWFTdHJlYW1MaXN0OjpjcmVhdGUo
KTsKLX0KLQotdm9pZCBQZWVyQ29ubmVjdGlvbjo6aW5pdCgpCi17Ci0gICAgaWYgKE1lZGlhU3Ry
ZWFtRnJhbWVDb250cm9sbGVyKiBmcmFtZUNvbnRyb2xsZXIgPSBtZWRpYVN0cmVhbUZyYW1lQ29u
dHJvbGxlcigpKQotICAgICAgICBmcmFtZUNvbnRyb2xsZXItPm5ld1BlZXJDb25uZWN0aW9uKG1f
Y2xpZW50SWQsIG1fY29uZmlndXJhdGlvbik7Ci0KLSAgICBwb3N0U3RhcnROZWdvdGlhdGlvblRh
c2soKTsKIH0KIAogUGVlckNvbm5lY3Rpb246On5QZWVyQ29ubmVjdGlvbigpCiB7CiB9CiAKLU1l
ZGlhU3RyZWFtTGlzdCogUGVlckNvbm5lY3Rpb246OmxvY2FsU3RyZWFtcygpCi17Ci0gICAgcmV0
dXJuIG1fbG9jYWxTdHJlYW1MaXN0LmdldCgpOwotfQotCi1NZWRpYVN0cmVhbUxpc3QqIFBlZXJD
b25uZWN0aW9uOjpyZW1vdGVTdHJlYW1zKCkKLXsKLSAgICByZXR1cm4gbV9yZW1vdGVTdHJlYW1M
aXN0LmdldCgpOwotfQotCiB2b2lkIFBlZXJDb25uZWN0aW9uOjpwcm9jZXNzU2lnbmFsaW5nTWVz
c2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlm
IChtX3JlYWR5U3RhdGUgPT0gQ0xPU0VEKSB7CkBAIC04OSw4ICs3MCwyOCBAQCB2b2lkIFBlZXJD
b25uZWN0aW9uOjpwcm9jZXNzU2lnbmFsaW5nTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2Us
IEV4Y2VwdGlvbkNvZAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1lZGlhU3Ry
ZWFtRnJhbWVDb250cm9sbGVyKCkpCi0gICAgICAgIG1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVy
KCktPnByb2Nlc3NTaWduYWxpbmdNZXNzYWdlKG1fY2xpZW50SWQsIG1lc3NhZ2UpOworICAgIGlm
ICghbWVzc2FnZS5zdGFydHNXaXRoKCJTRFBcbiIpKQorICAgICAgICByZXR1cm47CisKKyAgICBT
dHJpbmcgc2RwID0gbWVzc2FnZS5zdWJzdHJpbmcoNCk7CisKKyAgICBpZiAobV9pY2VTdGFydGVk
KSB7CisgICAgICAgIGlmIChtX3BlZXJIYW5kbGVyKQorICAgICAgICAgICAgbV9wZWVySGFuZGxl
ci0+cHJvY2Vzc1NEUChzZHApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1f
cGVlckhhbmRsZXIpCisgICAgICAgIG1fcGVlckhhbmRsZXItPmhhbmRsZUluaXRpYWxPZmZlcihz
ZHApOworCisgICAgZW5zdXJlU3RyZWFtQ2hhbmdlU2NoZWR1bGVkKCk7CisgICAgbV9pY2VTdGFy
dGVkID0gdHJ1ZTsKKyAgICBzY2hlZHVsZVJlYWR5U3RhdGVDaGFuZ2UoTkVHT1RJQVRJTkcpOwor
fQorCitQZWVyQ29ubmVjdGlvbjo6UmVhZHlTdGF0ZSBQZWVyQ29ubmVjdGlvbjo6cmVhZHlTdGF0
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVhZHlTdGF0ZTsKIH0KIAogdm9pZCBQZWVyQ29u
bmVjdGlvbjo6c2VuZChjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAt
MTAwLDE0ICsxMDEsMTYgQEAgdm9pZCBQZWVyQ29ubmVjdGlvbjo6c2VuZChjb25zdCBTdHJpbmcm
IHRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
Q1N0cmluZyB1dGY4ID0gdGV4dC51dGY4KCk7Ci0gICAgaWYgKHV0ZjgubGVuZ3RoKCkgPiBrTWF4
TWVzc2FnZVVURjhMZW5ndGgpIHsKKyAgICBDU3RyaW5nIGRhdGEgPSB0ZXh0LnV0ZjgoKTsKKyAg
ICB1bnNpZ25lZCBsZW5ndGggPSBkYXRhLmxlbmd0aCgpOworCisgICAgaWYgKGxlbmd0aCA+IDUw
NCkgewogICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGlmIChtZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcigpKQotICAgICAgICBt
ZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcigpLT5tZXNzYWdlKG1fY2xpZW50SWQsIHRleHQpOwor
ICAgIGlmIChtX3BlZXJIYW5kbGVyKQorICAgICAgICBtX3BlZXJIYW5kbGVyLT5zZW5kRGF0YVN0
cmVhbU1lc3NhZ2UoZGF0YS5kYXRhKCksIGxlbmd0aCk7CiB9CiAKIHZvaWQgUGVlckNvbm5lY3Rp
b246OmFkZFN0cmVhbShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPiBwcnBTdHJlYW0sIEV4Y2VwdGlv
bkNvZGUmIGVjKQpAQCAtMTE3LDM3ICsxMjAsNjMgQEAgdm9pZCBQZWVyQ29ubmVjdGlvbjo6YWRk
U3RyZWFtKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+IHBycFN0cmVhbSwgRXhjZXB0aW9uQ29kZSYK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIFRoZSBTdHJlYW0gb2JqZWN0IGlzIGd1
YXJhbnRlZWQgdG8gZXhpc3Qgc2luY2UgU3RyaWN0VHlwZUNoZWNraW5nIGlzIHNldCBpbiB0aGUg
aWRsLgorICAgIC8vIFRoZSBNZWRpYVN0cmVhbSBvYmplY3QgaXMgZ3VhcmFudGVlZCB0byBleGlz
dCBzaW5jZSBTdHJpY3RUeXBlQ2hlY2tpbmcgaXMgc2V0IGluIHRoZSBpZGwuCiAKICAgICBSZWZQ
dHI8TWVkaWFTdHJlYW0+IHN0cmVhbSA9IHBycFN0cmVhbTsKIAotICAgIGlmIChtX2xvY2FsU3Ry
ZWFtTGlzdC0+Y29udGFpbnMoc3RyZWFtKSkKKyAgICBpZiAobV9sb2NhbFN0cmVhbXMtPmNvbnRh
aW5zKHN0cmVhbSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fbG9jYWxTdHJlYW1MaXN0LT5h
ZGQoc3RyZWFtKTsKKyAgICBtX2xvY2FsU3RyZWFtcy0+YXBwZW5kKHN0cmVhbSk7CiAKLSAgICBp
ZiAobWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIoKSkKLSAgICAgICAgbWVkaWFTdHJlYW1GcmFt
ZUNvbnRyb2xsZXIoKS0+YWRkU3RyZWFtKG1fY2xpZW50SWQsIHN0cmVhbSk7CisgICAgLy8gRklY
TUU6IGdldCBmcm9tIHN0cmVhbS0+ZGVzY3JpcHRvcigpIHdoZW4gaXQncyBhdmFpbGFibGUsIHNl
ZSBodHRwOi8vd2Via2l0Lm9yZy9iLzY4NDY0CisgICAgTWVkaWFTdHJlYW1EZXNjcmlwdG9yKiBz
dHJlYW1EZXNjcmlwdG9yID0gMDsKKyAgICBzaXplX3QgaSA9IG1fcGVuZGluZ1JlbW92ZVN0cmVh
bXMuZmluZChzdHJlYW1EZXNjcmlwdG9yKTsKKyAgICBpZiAoaSAhPSBub3RGb3VuZCkgeworICAg
ICAgICBtX3BlbmRpbmdSZW1vdmVTdHJlYW1zLnJlbW92ZShpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIG1fcGVuZGluZ0FkZFN0cmVhbXMuYXBwZW5kKHN0cmVhbURlc2NyaXB0b3Ip
OworICAgIGlmIChtX2ljZVN0YXJ0ZWQpCisgICAgICAgIGVuc3VyZVN0cmVhbUNoYW5nZVNjaGVk
dWxlZCgpOwogfQogCi12b2lkIFBlZXJDb25uZWN0aW9uOjpyZW1vdmVTdHJlYW0oUGFzc1JlZlB0
cjxNZWRpYVN0cmVhbT4gcHJwU3RyZWFtLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgUGVlckNv
bm5lY3Rpb246OnJlbW92ZVN0cmVhbShNZWRpYVN0cmVhbSogc3RyZWFtLCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICBpZiAobV9yZWFkeVN0YXRlID09IENMT1NFRCkgewogICAgICAgICBlYyA9
IElOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gVGhl
IFN0cmVhbSBvYmplY3QgaXMgZ3VhcmFudGVlZCB0byBleGlzdCBzaW5jZSBTdHJpY3RUeXBlQ2hl
Y2tpbmcgaXMgc2V0IGluIHRoZSBpZGwuCisgICAgLy8gVGhlIE1lZGlhU3RyZWFtIG9iamVjdCBp
cyBndWFyYW50ZWVkIHRvIGV4aXN0IHNpbmNlIFN0cmljdFR5cGVDaGVja2luZyBpcyBzZXQgaW4g
dGhlIGlkbC4KIAotICAgIFJlZlB0cjxNZWRpYVN0cmVhbT4gc3RyZWFtID0gcHJwU3RyZWFtOwor
ICAgIGlmICghbV9sb2NhbFN0cmVhbXMtPmNvbnRhaW5zKHN0cmVhbSkpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fbG9jYWxTdHJlYW1zLT5yZW1vdmUoc3RyZWFtKTsKIAotICAgIGlmICghbV9s
b2NhbFN0cmVhbUxpc3QtPmNvbnRhaW5zKHN0cmVhbSkpCisgICAgLy8gRklYTUU6IGdldCBmcm9t
IHN0cmVhbS0+ZGVzY3JpcHRvcigpIHdoZW4gaXQncyBhdmFpbGFibGUsIHNlZSBodHRwOi8vd2Vi
a2l0Lm9yZy9iLzY4NDY0CisgICAgTWVkaWFTdHJlYW1EZXNjcmlwdG9yKiBzdHJlYW1EZXNjcmlw
dG9yID0gMDsKKyAgICBzaXplX3QgaSA9IG1fcGVuZGluZ0FkZFN0cmVhbXMuZmluZChzdHJlYW1E
ZXNjcmlwdG9yKTsKKyAgICBpZiAoaSAhPSBub3RGb3VuZCkgeworICAgICAgICBtX3BlbmRpbmdB
ZGRTdHJlYW1zLnJlbW92ZShpKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fcGVu
ZGluZ1JlbW92ZVN0cmVhbXMuYXBwZW5kKHN0cmVhbURlc2NyaXB0b3IpOworICAgIGlmIChtX2lj
ZVN0YXJ0ZWQpCisgICAgICAgIGVuc3VyZVN0cmVhbUNoYW5nZVNjaGVkdWxlZCgpOworfQogCi0g
ICAgbV9sb2NhbFN0cmVhbUxpc3QtPnJlbW92ZShzdHJlYW0pOworTWVkaWFTdHJlYW1MaXN0KiBQ
ZWVyQ29ubmVjdGlvbjo6bG9jYWxTdHJlYW1zKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sb2Nh
bFN0cmVhbXMuZ2V0KCk7Cit9CiAKLSAgICBpZiAobWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIo
KSkKLSAgICAgICAgbWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIoKS0+cmVtb3ZlU3RyZWFtKG1f
Y2xpZW50SWQsIHN0cmVhbSk7CitNZWRpYVN0cmVhbUxpc3QqIFBlZXJDb25uZWN0aW9uOjpyZW1v
dGVTdHJlYW1zKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZW1vdGVTdHJlYW1zLmdldCgpOwog
fQogCiB2b2lkIFBlZXJDb25uZWN0aW9uOjpjbG9zZShFeGNlcHRpb25Db2RlJiBlYykKQEAgLTE1
Nyw1MCArMTg2LDU3IEBAIHZvaWQgUGVlckNvbm5lY3Rpb246OmNsb3NlKEV4Y2VwdGlvbkNvZGUm
IGVjKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1lZGlhU3RyZWFtRnJhbWVD
b250cm9sbGVyKCkpCi0gICAgICAgIG1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKCktPmNsb3Nl
UGVlckNvbm5lY3Rpb24obV9jbGllbnRJZCk7Ci0KLSAgICBtX3JlYWR5U3RhdGUgPSBDTE9TRUQ7
CisgICAgc3RvcCgpOwogfQogCi12b2lkIFBlZXJDb25uZWN0aW9uOjpvbk5lZ290aWF0aW9uU3Rh
cnRlZCgpCit2b2lkIFBlZXJDb25uZWN0aW9uOjppY2VQcm9jZXNzaW5nQ29tcGxldGVkKCkKIHsK
LSAgICBtX3JlYWR5U3RhdGUgPSBORUdPVElBVElORzsKLQotICAgIHBvc3RTaW1wbGVFdmVudChl
dmVudE5hbWVzKCkuY29ubmVjdGluZ0V2ZW50KTsKKyAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgY2hhbmdlUmVhZHlTdGF0ZShBQ1RJ
VkUpOwogfQogCi12b2lkIFBlZXJDb25uZWN0aW9uOjpvbk5lZ290aWF0aW9uRG9uZSgpCit2b2lk
IFBlZXJDb25uZWN0aW9uOjpzZHBHZW5lcmF0ZWQoY29uc3QgU3RyaW5nJiBzZHApCiB7Ci0gICAg
bV9yZWFkeVN0YXRlID0gQUNUSVZFOwotCi0gICAgcG9zdFNpbXBsZUV2ZW50KGV2ZW50TmFtZXMo
KS5vcGVuRXZlbnQpOworICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29u
dGV4dFRocmVhZCgpKTsKKyAgICBtX3NpZ25hbGluZ0NhbGxiYWNrLT5oYW5kbGVFdmVudCgiU0RQ
XG4iICsgc2RwLCB0aGlzKTsKIH0KIAotdm9pZCBQZWVyQ29ubmVjdGlvbjo6c3RyZWFtQWRkZWQo
UGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4gcHJwU3RyZWFtKQordm9pZCBQZWVyQ29ubmVjdGlvbjo6
ZGF0YVN0cmVhbU1lc3NhZ2VSZWNlaXZlZChjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5n
dGgpCiB7Ci0gICAgUmVmUHRyPE1lZGlhU3RyZWFtPiBzdHJlYW0gPSBwcnBTdHJlYW07Ci0gICAg
bV9yZW1vdGVTdHJlYW1MaXN0LT5hZGQoc3RyZWFtKTsKLSAgICBwb3N0U3RyZWFtQWRkZWRFdmVu
dChzdHJlYW0pOworICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4
dFRocmVhZCgpKTsKKyAgICBjb25zdCBTdHJpbmcmIG1lc3NhZ2UgPSBTdHJpbmc6OmZyb21VVEY4
KGRhdGEsIGxlbmd0aCk7CisgICAgZGlzcGF0Y2hFdmVudChNZXNzYWdlRXZlbnQ6OmNyZWF0ZShQ
YXNzT3duUHRyPE1lc3NhZ2VQb3J0QXJyYXk+KCksIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3Jl
YXRlKG1lc3NhZ2UpKSk7CiB9CiAKLXZvaWQgUGVlckNvbm5lY3Rpb246OnN0cmVhbVJlbW92ZWQo
Y29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCkKK3ZvaWQgUGVlckNvbm5lY3Rpb246OnJlbW90ZVN0
cmVhbUFkZGVkKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiBzdHJlYW1EZXNjcmlw
dG9yKQogewotICAgIEFTU0VSVChtX3JlbW90ZVN0cmVhbUxpc3QtPmNvbnRhaW5zKHN0cmVhbUxh
YmVsKSk7CisgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhy
ZWFkKCkpOwogCi0gICAgUmVmUHRyPE1lZGlhU3RyZWFtPiBzdHJlYW0gPSBtX3JlbW90ZVN0cmVh
bUxpc3QtPmdldChzdHJlYW1MYWJlbCk7Ci0gICAgbV9yZW1vdGVTdHJlYW1MaXN0LT5yZW1vdmUo
c3RyZWFtKTsKLSAgICBwb3N0U3RyZWFtUmVtb3ZlZEV2ZW50KHN0cmVhbSk7Ci19CisgICAgaWYg
KG1fcmVhZHlTdGF0ZSA9PSBDTE9TRUQpCisgICAgICAgIHJldHVybjsKIAotdm9pZCBQZWVyQ29u
bmVjdGlvbjo6b25NZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBwb3N0TWVz
c2FnZUV2ZW50KG1lc3NhZ2UpOworICAgIC8vIEZJWE1FOiBjcmVhdGUgYSBuZXcgTWVkaWFTdHJl
YW0gZnJvbSB0aGUgc3RyZWFtRGVzY3JpcHRvciBvbmNlIGl0J3MgcG9zc2libGUsIHNlZSBodHRw
Oi8vd2Via2l0Lm9yZy9iLzY4NDY0CisgICAgUmVmUHRyPE1lZGlhU3RyZWFtPiBzdHJlYW0gPSAw
OworICAgIG1fcmVtb3RlU3RyZWFtcy0+YXBwZW5kKHN0cmVhbSk7CisKKyAgICBkaXNwYXRjaEV2
ZW50KE1lZGlhU3RyZWFtRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuYWRkc3RyZWFtRXZlbnQs
IGZhbHNlLCBmYWxzZSwgc3RyZWFtLnJlbGVhc2UoKSkpOwogfQogCi12b2lkIFBlZXJDb25uZWN0
aW9uOjpvblNpZ25hbGluZ01lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQordm9pZCBQZWVy
Q29ubmVjdGlvbjo6cmVtb3RlU3RyZWFtUmVtb3ZlZChNZWRpYVN0cmVhbURlc2NyaXB0b3IqIHN0
cmVhbURlc2NyaXB0b3IpCiB7Ci0gICAgcG9zdFNpZ25hbGluZ0V2ZW50KG1lc3NhZ2UpOworICAg
IEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKKyAg
ICBBU1NFUlQoc3RyZWFtRGVzY3JpcHRvci0+b3duZXIoKSk7CisKKyAgICBSZWZQdHI8TWVkaWFT
dHJlYW0+IHN0cmVhbSA9IHN0cmVhbURlc2NyaXB0b3ItPm93bmVyKCk7CisgICAgc3RyZWFtLT5z
dHJlYW1FbmRlZCgpOworCisgICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBDTE9TRUQpCisgICAgICAg
IHJldHVybjsKKworICAgIEFTU0VSVChtX3JlbW90ZVN0cmVhbXMtPmNvbnRhaW5zKHN0cmVhbSkp
OworICAgIG1fcmVtb3RlU3RyZWFtcy0+cmVtb3ZlKHN0cmVhbSk7CisKKyAgICBkaXNwYXRjaEV2
ZW50KE1lZGlhU3RyZWFtRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkucmVtb3Zlc3RyZWFtRXZl
bnQsIGZhbHNlLCBmYWxzZSwgc3RyZWFtLnJlbGVhc2UoKSkpOwogfQogCiBQZWVyQ29ubmVjdGlv
biogUGVlckNvbm5lY3Rpb246OnRvUGVlckNvbm5lY3Rpb24oKQpAQCAtMjEwLDcgKzI0NiwyNSBA
QCBQZWVyQ29ubmVjdGlvbiogUGVlckNvbm5lY3Rpb246OnRvUGVlckNvbm5lY3Rpb24oKQogCiBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBQZWVyQ29ubmVjdGlvbjo6c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKCkg
PyBtZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcigpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkg
OiAwOworICAgIHJldHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsKK30KKwordm9pZCBQZWVyQ29ubmVjdGlvbjo6c3RvcCgpCit7CisgICAgaWYgKG1fcmVhZHlT
dGF0ZSA9PSBDTE9TRUQpCisgICAgICAgIHJldHVybjsKKworICAgIG1faW5pdGlhbE5lZ290aWF0
aW9uVGltZXIuc3RvcCgpOworICAgIG1fc3RyZWFtQ2hhbmdlVGltZXIuc3RvcCgpOworICAgIG1f
cmVhZHlTdGF0ZUNoYW5nZVRpbWVyLnN0b3AoKTsKKworICAgIGlmIChtX3BlZXJIYW5kbGVyKQor
ICAgICAgICBtX3BlZXJIYW5kbGVyLT5zdG9wKCk7CisKKyAgICB1bnNldFBlbmRpbmdBY3Rpdml0
eSh0aGlzKTsKKyAgICBtX3BlZXJIYW5kbGVyLmNsZWFyKCk7CisKKyAgICBjaGFuZ2VSZWFkeVN0
YXRlKENMT1NFRCk7CiB9CiAKIEV2ZW50VGFyZ2V0RGF0YSogUGVlckNvbm5lY3Rpb246OmV2ZW50
VGFyZ2V0RGF0YSgpCkBAIC0yMjMsODggKzI3Nyw5MyBAQCBFdmVudFRhcmdldERhdGEqIFBlZXJD
b25uZWN0aW9uOjplbnN1cmVFdmVudFRhcmdldERhdGEoKQogICAgIHJldHVybiAmbV9ldmVudFRh
cmdldERhdGE7CiB9CiAKLXZvaWQgUGVlckNvbm5lY3Rpb246OnBvc3RNZXNzYWdlRXZlbnQoY29u
c3QgU3RyaW5nJiBtZXNzYWdlKQordm9pZCBQZWVyQ29ubmVjdGlvbjo6c2NoZWR1bGVJbml0aWFs
TmVnb3RpYXRpb24oKQogewotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEg
PSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShtZXNzYWdlKTsKKyAgICBBU1NFUlQoIW1f
aW5pdGlhbE5lZ290aWF0aW9uVGltZXIuaXNBY3RpdmUoKSk7CiAKLSAgICBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIGlmICgh
Y29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChjb250ZXh0LT5pc0NvbnRleHRU
aHJlYWQoKSk7Ci0gICAgY29udGV4dC0+cG9zdFRhc2soRGlzcGF0Y2hUYXNrPFBlZXJDb25uZWN0
aW9uLCBpbnQsIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT46OmNyZWF0ZSh0aGlzLCAmUGVlckNvbm5l
Y3Rpb246OmRpc3BhdGNoTWVzc2FnZUV2ZW50LCAwLCBkYXRhLnJlbGVhc2UoKSkpOworICAgIG1f
aW5pdGlhbE5lZ290aWF0aW9uVGltZXIuc3RhcnRPbmVTaG90KDApOwogfQogCi12b2lkIFBlZXJD
b25uZWN0aW9uOjpwb3N0U2lnbmFsaW5nRXZlbnQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQordm9p
ZCBQZWVyQ29ubmVjdGlvbjo6aW5pdGlhbE5lZ290aWF0aW9uVGltZXJGaXJlZChUaW1lcjxQZWVy
Q29ubmVjdGlvbj4qIHRpbWVyKQogewotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAg
ICByZXR1cm47Ci0gICAgQVNTRVJUKGNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKLSAgICBj
b250ZXh0LT5wb3N0VGFzayhTaW1wbGVEaXNwYXRjaFRhc2s8UGVlckNvbm5lY3Rpb24sIFN0cmlu
Zz46OmNyZWF0ZSh0aGlzLCAmUGVlckNvbm5lY3Rpb246OmRpc3BhdGNoU2lnbmFsaW5nRXZlbnQs
IG1lc3NhZ2UpKTsKLX0KKyAgICBBU1NFUlRfVU5VU0VEKHRpbWVyLCB0aW1lciA9PSAmbV9pbml0
aWFsTmVnb3RpYXRpb25UaW1lcik7CiAKLXZvaWQgUGVlckNvbm5lY3Rpb246OnBvc3RTdHJlYW1B
ZGRlZEV2ZW50KFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+IHBycFN0cmVhbSkKLXsKLSAgICBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwot
ICAgIGlmICghY29udGV4dCkKKyAgICBpZiAobV9pY2VTdGFydGVkKQogICAgICAgICByZXR1cm47
Ci0gICAgQVNTRVJUKGNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKLSAgICBzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCktPnBvc3RUYXNrKERpc3BhdGNoVGFzazxQZWVyQ29ubmVjdGlvbiwgU3Ry
aW5nLCBNZWRpYVN0cmVhbT46OmNyZWF0ZSh0aGlzLCAmUGVlckNvbm5lY3Rpb246OmRpc3BhdGNo
U3RyZWFtRXZlbnQsIGV2ZW50TmFtZXMoKS5hZGRzdHJlYW1FdmVudCwgcHJwU3RyZWFtKSk7Ci19
CiAKLXZvaWQgUGVlckNvbm5lY3Rpb246OnBvc3RTdHJlYW1SZW1vdmVkRXZlbnQoUGFzc1JlZlB0
cjxNZWRpYVN0cmVhbT4gcHJwU3RyZWFtKQotewotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgaWYgKCFjb250ZXh0KQot
ICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKGNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsK
LSAgICBjb250ZXh0LT5wb3N0VGFzayhEaXNwYXRjaFRhc2s8UGVlckNvbm5lY3Rpb24sIFN0cmlu
ZywgTWVkaWFTdHJlYW0+OjpjcmVhdGUodGhpcywgJlBlZXJDb25uZWN0aW9uOjpkaXNwYXRjaFN0
cmVhbUV2ZW50LCBldmVudE5hbWVzKCkucmVtb3Zlc3RyZWFtRXZlbnQsIHBycFN0cmVhbSkpOwor
ICAgIE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciBwZW5kaW5nQWRkU3RyZWFtczsKKyAgICBt
X3BlbmRpbmdBZGRTdHJlYW1zLnN3YXAocGVuZGluZ0FkZFN0cmVhbXMpOworICAgIGlmIChtX3Bl
ZXJIYW5kbGVyKQorICAgICAgICBtX3BlZXJIYW5kbGVyLT5wcm9kdWNlSW5pdGlhbE9mZmVyKHBl
bmRpbmdBZGRTdHJlYW1zKTsKKworICAgIG1faWNlU3RhcnRlZCA9IHRydWU7CisKKyAgICBjaGFu
Z2VSZWFkeVN0YXRlKE5FR09USUFUSU5HKTsKIH0KIAotdm9pZCBQZWVyQ29ubmVjdGlvbjo6cG9z
dFNpbXBsZUV2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKQordm9pZCBQZWVyQ29ubmVjdGlv
bjo6ZW5zdXJlU3RyZWFtQ2hhbmdlU2NoZWR1bGVkKCkKIHsKLSAgICBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIGlmICghY29u
dGV4dCkKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChjb250ZXh0LT5pc0NvbnRleHRUaHJl
YWQoKSk7Ci0gICAgY29udGV4dC0+cG9zdFRhc2soU2ltcGxlRGlzcGF0Y2hUYXNrPFBlZXJDb25u
ZWN0aW9uLCBTdHJpbmc+OjpjcmVhdGUodGhpcywgJlBlZXJDb25uZWN0aW9uOjpkaXNwYXRjaFNp
bXBsZUV2ZW50LCBldmVudE5hbWUpKTsKKyAgICBpZiAoIW1fc3RyZWFtQ2hhbmdlVGltZXIuaXNB
Y3RpdmUoKSkKKyAgICAgICAgbV9zdHJlYW1DaGFuZ2VUaW1lci5zdGFydE9uZVNob3QoMCk7CiB9
CiAKLXZvaWQgUGVlckNvbm5lY3Rpb246OnBvc3RTdGFydE5lZ290aWF0aW9uVGFzaygpCit2b2lk
IFBlZXJDb25uZWN0aW9uOjpzdHJlYW1DaGFuZ2VUaW1lckZpcmVkKFRpbWVyPFBlZXJDb25uZWN0
aW9uPiogdGltZXIpCiB7Ci0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHQpCisgICAgQVNTRVJUX1VO
VVNFRCh0aW1lciwgdGltZXIgPT0gJm1fc3RyZWFtQ2hhbmdlVGltZXIpOworCisgICAgaWYgKCFt
X3BlbmRpbmdBZGRTdHJlYW1zLmlzRW1wdHkoKSAmJiAhbV9wZW5kaW5nUmVtb3ZlU3RyZWFtcy5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQoY29udGV4dC0+aXNDb250ZXh0
VGhyZWFkKCkpOwotICAgIGNvbnRleHQtPnBvc3RUYXNrKFNpbXBsZURpc3BhdGNoVGFzazxQZWVy
Q29ubmVjdGlvbiwgaW50Pjo6Y3JlYXRlKHRoaXMsICZQZWVyQ29ubmVjdGlvbjo6ZGlzcGF0Y2hT
dGFydE5lZ290aWF0aW9uVGFzaywgMCkpOwotfQogCi12b2lkIFBlZXJDb25uZWN0aW9uOjpkaXNw
YXRjaE1lc3NhZ2VFdmVudChjb25zdCBpbnQmLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gZGF0YSkKLXsKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkID0gZGF0
YTsKLSAgICBkaXNwYXRjaEV2ZW50KE1lc3NhZ2VFdmVudDo6Y3JlYXRlKFBhc3NPd25QdHI8TWVz
c2FnZVBvcnRBcnJheT4oKSwgZCkpOwotfQorICAgIE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3Rv
ciBwZW5kaW5nQWRkU3RyZWFtczsKKyAgICBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3IgcGVu
ZGluZ1JlbW92ZVN0cmVhbXM7CiAKLXZvaWQgUGVlckNvbm5lY3Rpb246OmRpc3BhdGNoU2lnbmFs
aW5nRXZlbnQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIG1fc2lnbmFsaW5nQ2FsbGJh
Y2stPmhhbmRsZUV2ZW50KG1lc3NhZ2UsIHRoaXMpOworICAgIG1fcGVuZGluZ0FkZFN0cmVhbXMu
c3dhcChwZW5kaW5nQWRkU3RyZWFtcyk7CisgICAgbV9wZW5kaW5nUmVtb3ZlU3RyZWFtcy5zd2Fw
KHBlbmRpbmdSZW1vdmVTdHJlYW1zKTsKKworICAgIGlmIChtX3BlZXJIYW5kbGVyKQorICAgICAg
ICBtX3BlZXJIYW5kbGVyLT5wcm9jZXNzUGVuZGluZ1N0cmVhbXMocGVuZGluZ0FkZFN0cmVhbXMs
IHBlbmRpbmdSZW1vdmVTdHJlYW1zKTsKKworICAgIGlmICghcGVuZGluZ0FkZFN0cmVhbXMuaXNF
bXB0eSgpKQorICAgICAgICBjaGFuZ2VSZWFkeVN0YXRlKE5FR09USUFUSU5HKTsKIH0KIAotdm9p
ZCBQZWVyQ29ubmVjdGlvbjo6ZGlzcGF0Y2hTdHJlYW1FdmVudChjb25zdCBTdHJpbmcmIG5hbWUs
IFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+IHN0cmVhbSkKK3ZvaWQgUGVlckNvbm5lY3Rpb246OnNj
aGVkdWxlUmVhZHlTdGF0ZUNoYW5nZShSZWFkeVN0YXRlIHJlYWR5U3RhdGUpCiB7Ci0gICAgUmVm
UHRyPE1lZGlhU3RyZWFtPiBzID0gc3RyZWFtOwotICAgIGRpc3BhdGNoRXZlbnQoTWVkaWFTdHJl
YW1FdmVudDo6Y3JlYXRlKG5hbWUsIGZhbHNlLCBmYWxzZSwgcykpOworICAgIG1fcGVuZGluZ1Jl
YWR5U3RhdGVzLmFwcGVuZChyZWFkeVN0YXRlKTsKKyAgICBpZiAoIW1fcmVhZHlTdGF0ZUNoYW5n
ZVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fcmVhZHlTdGF0ZUNoYW5nZVRpbWVyLnN0YXJ0
T25lU2hvdCgwKTsKIH0KIAotdm9pZCBQZWVyQ29ubmVjdGlvbjo6ZGlzcGF0Y2hTaW1wbGVFdmVu
dChjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSkKK3ZvaWQgUGVlckNvbm5lY3Rpb246OnJlYWR5U3Rh
dGVDaGFuZ2VUaW1lckZpcmVkKFRpbWVyPFBlZXJDb25uZWN0aW9uPiogdGltZXIpCiB7Ci0gICAg
ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZSwgZmFsc2UsIGZhbHNlKSk7Cisg
ICAgQVNTRVJUX1VOVVNFRCh0aW1lciwgdGltZXIgPT0gJm1fcmVhZHlTdGF0ZUNoYW5nZVRpbWVy
KTsKKworICAgIFZlY3RvcjxSZWFkeVN0YXRlPiBwZW5kaW5nUmVhZHlTdGF0ZXM7CisgICAgbV9w
ZW5kaW5nUmVhZHlTdGF0ZXMuc3dhcChwZW5kaW5nUmVhZHlTdGF0ZXMpOworCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBwZW5kaW5nUmVhZHlTdGF0ZXMuc2l6ZSgpOyBpKyspCisgICAgICAg
IGNoYW5nZVJlYWR5U3RhdGUocGVuZGluZ1JlYWR5U3RhdGVzW2ldKTsKIH0KIAotdm9pZCBQZWVy
Q29ubmVjdGlvbjo6ZGlzcGF0Y2hTdGFydE5lZ290aWF0aW9uVGFzayhjb25zdCBpbnQmKQordm9p
ZCBQZWVyQ29ubmVjdGlvbjo6Y2hhbmdlUmVhZHlTdGF0ZShSZWFkeVN0YXRlIHJlYWR5U3RhdGUp
CiB7Ci0gICAgaWYgKG1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKCkpCi0gICAgICAgIG1lZGlh
U3RyZWFtRnJhbWVDb250cm9sbGVyKCktPnN0YXJ0TmVnb3RpYXRpb24obV9jbGllbnRJZCk7Cisg
ICAgaWYgKHJlYWR5U3RhdGUgPT0gbV9yZWFkeVN0YXRlKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX3JlYWR5U3RhdGUgPSByZWFkeVN0YXRlOworCisgICAgc3dpdGNoIChtX3JlYWR5U3RhdGUp
IHsKKyAgICBjYXNlIE5FR09USUFUSU5HOgorICAgICAgICBkaXNwYXRjaEV2ZW50KEV2ZW50Ojpj
cmVhdGUoZXZlbnROYW1lcygpLmNvbm5lY3RpbmdFdmVudCwgZmFsc2UsIGZhbHNlKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQUNUSVZFOgorICAgICAgICBkaXNwYXRjaEV2ZW50KEV2ZW50
OjpjcmVhdGUoZXZlbnROYW1lcygpLm9wZW5FdmVudCwgZmFsc2UsIGZhbHNlKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQ0xPU0VEOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3AycC9QZWVyQ29ubmVjdGlvbi5o
IGIvU291cmNlL1dlYkNvcmUvcDJwL1BlZXJDb25uZWN0aW9uLmgKaW5kZXggMThkMTY1Yi4uYWY4
OWJlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcDJwL1BlZXJDb25uZWN0aW9uLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcDJwL1BlZXJDb25uZWN0aW9uLmgKQEAgLTEsNSArMSw2IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDQxICsyOCw0MSBAQAogCiAj
aWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKIAorI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgog
I2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCi0jaW5jbHVkZSAiTWVkaWFTdHJlYW1GcmFtZUNvbnRy
b2xsZXIuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgIkV4Y2VwdGlv
bkJhc2UuaCIKKyNpbmNsdWRlICJNZWRpYVN0cmVhbS5oIgorI2luY2x1ZGUgIk1lZGlhU3RyZWFt
TGlzdC5oIgorI2luY2x1ZGUgIlBlZXJIYW5kbGVyLmgiCisjaW5jbHVkZSAiU2lnbmFsaW5nQ2Fs
bGJhY2suaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNz
IE1lZGlhU3RyZWFtOwotY2xhc3MgTWVkaWFTdHJlYW1MaXN0OwotY2xhc3MgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dDsKLWNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKLWNsYXNzIFNpZ25hbGlu
Z0NhbGxiYWNrOwotCi1jbGFzcyBQZWVyQ29ubmVjdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPFBl
ZXJDb25uZWN0aW9uPiwgcHVibGljIEV2ZW50VGFyZ2V0LCBwdWJsaWMgTWVkaWFTdHJlYW1GcmFt
ZUNvbnRyb2xsZXI6OlBlZXJDb25uZWN0aW9uQ2xpZW50IHsKK2NsYXNzIFBlZXJDb25uZWN0aW9u
IDogcHVibGljIFJlZkNvdW50ZWQ8UGVlckNvbm5lY3Rpb24+LCBwdWJsaWMgUGVlckhhbmRsZXJD
bGllbnQsIHB1YmxpYyBFdmVudFRhcmdldCwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7CiBwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UGVlckNvbm5lY3Rpb24+IGNyZWF0ZShjb25zdCBT
dHJpbmcmIHNlcnZlckNvbmZpZ3VyYXRpb24sIFBhc3NSZWZQdHI8U2lnbmFsaW5nQ2FsbGJhY2s+
LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisgICAgflBlZXJDb25uZWN0aW9uKCk7CisKKyAg
ICB2b2lkIHByb2Nlc3NTaWduYWxpbmdNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgRXhj
ZXB0aW9uQ29kZSYpOworCiAgICAgLy8gTmFtZSBhbmQgdmFsdWVzIG9mIHRoZSBlbnVtIG11c3Qg
bWF0Y2ggdGhlIGNvcnJlc3Nwb25kaW5nIGNvbnN0YW50cyBpbiB0aGUgLmlkbCBmaWxlLgotICAg
IGVudW0geworICAgIGVudW0gUmVhZHlTdGF0ZSB7CiAgICAgICAgIE5FVyA9IDAsCiAgICAgICAg
IE5FR09USUFUSU5HID0gMSwKICAgICAgICAgQUNUSVZFID0gMiwKICAgICAgICAgQ0xPU0VEID0g
MwogICAgIH07CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxQZWVyQ29ubmVjdGlvbj4gY3JlYXRl
KE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKiwgaW50IGlkLCBjb25zdCBTdHJpbmcmIGNvbmZp
Z3VyYXRpb24sIFBhc3NSZWZQdHI8U2lnbmFsaW5nQ2FsbGJhY2s+KTsKLSAgICB2aXJ0dWFsIH5Q
ZWVyQ29ubmVjdGlvbigpOworICAgIFJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0OwogCi0g
ICAgTWVkaWFTdHJlYW1MaXN0KiBsb2NhbFN0cmVhbXMoKTsKLSAgICBNZWRpYVN0cmVhbUxpc3Qq
IHJlbW90ZVN0cmVhbXMoKTsKLQotICAgIHVuc2lnbmVkIHNob3J0IHJlYWR5U3RhdGUoKSBjb25z
dCB7IHJldHVybiBtX3JlYWR5U3RhdGU7IH0KLQotICAgIHZvaWQgcHJvY2Vzc1NpZ25hbGluZ01l
c3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBz
ZW5kKGNvbnN0IFN0cmluZyYgdGV4dCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgYWRkU3Ry
ZWFtKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBy
ZW1vdmVTdHJlYW0oUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICB2b2lkIGFkZFN0cmVhbShjb25zdCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPiwgRXhjZXB0aW9u
Q29kZSYpOworICAgIHZvaWQgcmVtb3ZlU3RyZWFtKE1lZGlhU3RyZWFtKiwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIE1lZGlhU3RyZWFtTGlzdCogbG9jYWxTdHJlYW1zKCkgY29uc3Q7CisgICAgTWVk
aWFTdHJlYW1MaXN0KiByZW1vdGVTdHJlYW1zKCkgY29uc3Q7CiAgICAgdm9pZCBjbG9zZShFeGNl
cHRpb25Db2RlJik7CiAKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGNvbm5l
Y3RpbmcpOwpAQCAtNzAsNTggKzcxLDYzIEBAIHB1YmxpYzoKICAgICBERUZJTkVfQVRUUklCVVRF
X0VWRU5UX0xJU1RFTkVSKGFkZHN0cmVhbSk7CiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9M
SVNURU5FUihyZW1vdmVzdHJlYW0pOwogCisgICAgLy8gUGVlckhhbmRsZXJDbGllbnQKKyAgICB2
aXJ0dWFsIHZvaWQgaWNlUHJvY2Vzc2luZ0NvbXBsZXRlZCgpOworICAgIHZpcnR1YWwgdm9pZCBz
ZHBHZW5lcmF0ZWQoY29uc3QgU3RyaW5nJiBzZHApOworICAgIHZpcnR1YWwgdm9pZCBkYXRhU3Ry
ZWFtTWVzc2FnZVJlY2VpdmVkKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCk7Cisg
ICAgdmlydHVhbCB2b2lkIHJlbW90ZVN0cmVhbUFkZGVkKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1E
ZXNjcmlwdG9yPik7CisgICAgdmlydHVhbCB2b2lkIHJlbW90ZVN0cmVhbVJlbW92ZWQoTWVkaWFT
dHJlYW1EZXNjcmlwdG9yKik7CisKICAgICAvLyBFdmVudFRhcmdldAogICAgIHZpcnR1YWwgUGVl
ckNvbm5lY3Rpb24qIHRvUGVlckNvbm5lY3Rpb24oKTsKIAogICAgIC8vIEV2ZW50VGFyZ2V0IGlt
cGxlbWVudGF0aW9uLgogICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OwogCi0gICAgLy8gQ2FsbGJhY2tzCi0gICAgdm9pZCBv
bk1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLSAgICB2b2lkIG9uU2lnbmFsaW5nTWVz
c2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwotICAgIHZvaWQgb25OZWdvdGlhdGlvblN0YXJ0
ZWQoKTsKLSAgICB2b2lkIG9uTmVnb3RpYXRpb25Eb25lKCk7Ci0gICAgdm9pZCBzdHJlYW1BZGRl
ZChQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPik7Ci0gICAgdm9pZCBzdHJlYW1SZW1vdmVkKGNvbnN0
IFN0cmluZyYgc3RyZWFtTGFiZWwpOworICAgIC8vIEFjdGl2ZURPTU9iamVjdAorICAgIHZpcnR1
YWwgdm9pZCBzdG9wKCk7CiAKICAgICB1c2luZyBSZWZDb3VudGVkPFBlZXJDb25uZWN0aW9uPjo6
cmVmOwogICAgIHVzaW5nIFJlZkNvdW50ZWQ8UGVlckNvbm5lY3Rpb24+OjpkZXJlZjsKIAotcHJv
dGVjdGVkOgorcHJpdmF0ZToKKyAgICBQZWVyQ29ubmVjdGlvbihjb25zdCBTdHJpbmcmIHNlcnZl
ckNvbmZpZ3VyYXRpb24sIFBhc3NSZWZQdHI8U2lnbmFsaW5nQ2FsbGJhY2s+LCBTY3JpcHRFeGVj
dXRpb25Db250ZXh0Kik7CisKICAgICAvLyBFdmVudFRhcmdldCBpbXBsZW1lbnRhdGlvbi4KICAg
ICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXREYXRhKCk7CiAgICAgdmlydHVh
bCBFdmVudFRhcmdldERhdGEqIGVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpOwotCi1wcml2YXRlOgot
ICAgIHN0YXRpYyBjb25zdCBzaXplX3Qga01heE1lc3NhZ2VVVEY4TGVuZ3RoID0gNTA0OwotCi0g
ICAgUGVlckNvbm5lY3Rpb24oTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqLCBpbnQgaWQsIGNv
bnN0IFN0cmluZyYgY29uZmlndXJhdGlvbiwgUGFzc1JlZlB0cjxTaWduYWxpbmdDYWxsYmFjaz4p
OwotICAgIHZvaWQgaW5pdCgpOwotCi0gICAgdm9pZCBwb3N0U2ltcGxlRXZlbnQoY29uc3QgU3Ry
aW5nJiBldmVudE5hbWUpOwotICAgIHZvaWQgcG9zdE1lc3NhZ2VFdmVudChjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpOwotICAgIHZvaWQgcG9zdFNpZ25hbGluZ0V2ZW50KGNvbnN0IFN0cmluZyYgbWVz
c2FnZSk7Ci0gICAgdm9pZCBwb3N0U3RyZWFtQWRkZWRFdmVudChQYXNzUmVmUHRyPE1lZGlhU3Ry
ZWFtPik7Ci0gICAgdm9pZCBwb3N0U3RyZWFtUmVtb3ZlZEV2ZW50KFBhc3NSZWZQdHI8TWVkaWFT
dHJlYW0+KTsKLSAgICB2b2lkIHBvc3RTdGFydE5lZ290aWF0aW9uVGFzaygpOwotCi0gICAgdm9p
ZCBkaXNwYXRjaFNpbXBsZUV2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKTsKLSAgICB2b2lk
IGRpc3BhdGNoTWVzc2FnZUV2ZW50KGNvbnN0IGludCYsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiBkYXRhKTsKLSAgICB2b2lkIGRpc3BhdGNoU2lnbmFsaW5nRXZlbnQoY29uc3Qg
U3RyaW5nJiBldmVudE5hbWUpOwotICAgIHZvaWQgZGlzcGF0Y2hTdHJlYW1FdmVudChjb25zdCBT
dHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+KTsKLSAgICB2b2lkIGRpc3BhdGNo
U3RhcnROZWdvdGlhdGlvblRhc2soY29uc3QgaW50Jik7Ci0KLSAgICAvLyBFdmVudFRhcmdldCBp
bXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigp
OyB9CiAgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0KIAot
ICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2ZW50VGFyZ2V0RGF0YTsKKyAgICB2b2lkIHNjaGVkdWxl
SW5pdGlhbE5lZ290aWF0aW9uKCk7CisgICAgdm9pZCBpbml0aWFsTmVnb3RpYXRpb25UaW1lckZp
cmVkKFRpbWVyPFBlZXJDb25uZWN0aW9uPiopOworICAgIHZvaWQgZW5zdXJlU3RyZWFtQ2hhbmdl
U2NoZWR1bGVkKCk7CisgICAgdm9pZCBzdHJlYW1DaGFuZ2VUaW1lckZpcmVkKFRpbWVyPFBlZXJD
b25uZWN0aW9uPiopOworICAgIHZvaWQgc2NoZWR1bGVSZWFkeVN0YXRlQ2hhbmdlKFJlYWR5U3Rh
dGUpOworICAgIHZvaWQgcmVhZHlTdGF0ZUNoYW5nZVRpbWVyRmlyZWQoVGltZXI8UGVlckNvbm5l
Y3Rpb24+Kik7CisKKyAgICB2b2lkIGNoYW5nZVJlYWR5U3RhdGUoUmVhZHlTdGF0ZSk7CiAKLSAg
ICBTdHJpbmcgbV9jb25maWd1cmF0aW9uOwotICAgIHVuc2lnbmVkIHNob3J0IG1fcmVhZHlTdGF0
ZTsKICAgICBSZWZQdHI8U2lnbmFsaW5nQ2FsbGJhY2s+IG1fc2lnbmFsaW5nQ2FsbGJhY2s7Ci0g
ICAgUmVmUHRyPE1lZGlhU3RyZWFtTGlzdD4gbV9sb2NhbFN0cmVhbUxpc3Q7Ci0gICAgUmVmUHRy
PE1lZGlhU3RyZWFtTGlzdD4gbV9yZW1vdGVTdHJlYW1MaXN0OworCisgICAgUmVhZHlTdGF0ZSBt
X3JlYWR5U3RhdGU7CisgICAgYm9vbCBtX2ljZVN0YXJ0ZWQ7CisKKyAgICBSZWZQdHI8TWVkaWFT
dHJlYW1MaXN0PiBtX2xvY2FsU3RyZWFtczsKKyAgICBSZWZQdHI8TWVkaWFTdHJlYW1MaXN0PiBt
X3JlbW90ZVN0cmVhbXM7CisKKyAgICAvLyBFdmVudFRhcmdldCBpbXBsZW1lbnRhdGlvbi4KKyAg
ICBFdmVudFRhcmdldERhdGEgbV9ldmVudFRhcmdldERhdGE7CisKKyAgICBUaW1lcjxQZWVyQ29u
bmVjdGlvbj4gbV9pbml0aWFsTmVnb3RpYXRpb25UaW1lcjsKKyAgICBUaW1lcjxQZWVyQ29ubmVj
dGlvbj4gbV9zdHJlYW1DaGFuZ2VUaW1lcjsKKyAgICBUaW1lcjxQZWVyQ29ubmVjdGlvbj4gbV9y
ZWFkeVN0YXRlQ2hhbmdlVGltZXI7CisKKyAgICBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3Ig
bV9wZW5kaW5nQWRkU3RyZWFtczsKKyAgICBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3IgbV9w
ZW5kaW5nUmVtb3ZlU3RyZWFtczsKKyAgICBWZWN0b3I8UmVhZHlTdGF0ZT4gbV9wZW5kaW5nUmVh
ZHlTdGF0ZXM7CisKKyAgICBPd25QdHI8UGVlckhhbmRsZXI+IG1fcGVlckhhbmRsZXI7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wMnAv
UGVlckNvbm5lY3Rpb24uaWRsIGIvU291cmNlL1dlYkNvcmUvcDJwL1BlZXJDb25uZWN0aW9uLmlk
bAppbmRleCAzY2Q3MjlmLi43Mzg4MjRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wMnAv
UGVlckNvbm5lY3Rpb24uaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3AycC9QZWVyQ29ubmVjdGlv
bi5pZGwKQEAgLTI2LDkgKzI2LDEzIEBAIG1vZHVsZSBwMnAgewogCiAgICAgaW50ZXJmYWNlIFsK
ICAgICAgICAgQ29uZGl0aW9uYWw9TUVESUFfU1RSRUFNLAorICAgICAgICBBY3RpdmVET01PYmpl
Y3QsCiAgICAgICAgIENhbkJlQ29uc3RydWN0ZWQsCi0gICAgICAgIEN1c3RvbUNvbnN0cnVjdG9y
LAogICAgICAgICBDb25zdHJ1Y3RvclBhcmFtZXRlcnM9MiwKKyAgICAgICAgQ29uc3RydWN0b3Io
aW4gRE9NU3RyaW5nIHNlcnZlckNvbmZpZ3VyYXRpb24sIGluIFtDYWxsYmFjaz1GdW5jdGlvbk9u
bHldIFNpZ25hbGluZ0NhbGxiYWNrIHNpZ25hbGluZ0NhbGxiYWNrKSwKKyAgICAgICAgQ29uc3Ry
dWN0b3JXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsCisgICAgICAgIEpTQ3VzdG9tQ29uc3Ry
dWN0b3IsCisgICAgICAgIFY4Q29uc3RydWN0b3JTZXRzQWN0aXZlRE9NV3JhcHBlciwKICAgICAg
ICAgRXZlbnRUYXJnZXQKICAgICBdIFBlZXJDb25uZWN0aW9uIHsKICAgICAgICAgdm9pZCBwcm9j
ZXNzU2lnbmFsaW5nTWVzc2FnZShpbiBET01TdHJpbmcgbWVzc2FnZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1DbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvTWVkaWFTdHJlYW1DbGllbnQuaAppbmRleCA3YWMyZjA3Li4wZmM2ZTVmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtQ2xpZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9NZWRpYVN0cmVhbUNsaWVudC5oCkBAIC00OSwxNSArNDksNiBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIHN0b3BHZW5lcmF0ZWRTdHJlYW0oY29uc3QgU3RyaW5nJiBzdHJl
YW1MYWJlbCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRNZWRpYVN0cmVhbVRyYWNrRW5hYmxl
ZChjb25zdCBTdHJpbmcmIHRyYWNrSWQsIGJvb2wgZW5hYmxlZCkgPSAwOwogCi0gICAgLy8gUGVl
ckNvbm5lY3Rpb24gZnVuY3Rpb25zLgotICAgIHZpcnR1YWwgdm9pZCBuZXdQZWVyQ29ubmVjdGlv
bihpbnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBjb25maWd1cmF0aW9uKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIHN0YXJ0TmVnb3RpYXRpb24oaW50IHBlZXJDb25uZWN0aW9uSWQp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc1NpZ25hbGluZ01lc3NhZ2UoaW50IHBlZXJD
b25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBtZXNzYWdlKGludCBwZWVyQ29ubmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkU3RyZWFtKGludCBwZWVyQ29ubmVjdGlvbklkLCBjb25z
dCBTdHJpbmcmIHN0cmVhbUxhYmVsKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZVN0cmVh
bShpbnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBjbG9zZVBlZXJDb25uZWN0aW9uKGludCBwZWVyQ29ubmVjdGlvbklk
KSA9IDA7Ci0KIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5NZWRpYVN0cmVhbUNsaWVudCgpIHsg
fQogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1Db250cm9s
bGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1Db250cm9sbGVyLmNwcApp
bmRleCA1ZjYwNGVjLi5jODg1NTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL01l
ZGlhU3RyZWFtQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0
cmVhbUNvbnRyb2xsZXIuY3BwCkBAIC0zNCw4ICszNCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotLy8gRklYTUU6IFRoaXMgaXMgdXNlZCBmb3IgaG9sZGluZyBsaXN0IG9mIFBlZXJDb25u
ZWN0aW9uIGFzIHdlbGwsCi0vLyBzbyByZW5hbWUgY2xhc3MgaXMgaW4gb3JkZXIuCiBjbGFzcyBN
ZWRpYVN0cmVhbUNvbnRyb2xsZXI6OlJlcXVlc3QgewogcHVibGljOgogICAgIFJlcXVlc3QoKQpA
QCAtNTcsNyArNTUsNiBAQCBwcml2YXRlOgogTWVkaWFTdHJlYW1Db250cm9sbGVyOjpNZWRpYVN0
cmVhbUNvbnRyb2xsZXIoTWVkaWFTdHJlYW1DbGllbnQqIGNsaWVudCkKICAgICA6IG1fY2xpZW50
KGNsaWVudCkKICAgICAsIG1fbmV4dEdsb2JhbFJlcXVlc3RJZCgxKQotICAgICwgbV9uZXh0R2xv
YmFsUGVlckNvbm5lY3Rpb25JZCgxKQogewogfQogCkBAIC0xNTcsMTMwICsxNTQsNiBAQCB2b2lk
IE1lZGlhU3RyZWFtQ29udHJvbGxlcjo6c3RyZWFtRmFpbGVkKGNvbnN0IFN0cmluZyYgc3RyZWFt
TGFiZWwpCiAgICAgICAgIG1fc3RyZWFtcy5nZXQoc3RyZWFtTGFiZWwpLT5zdHJlYW1GYWlsZWQo
c3RyZWFtTGFiZWwpOwogfQogCi12b2lkIE1lZGlhU3RyZWFtQ29udHJvbGxlcjo6b25TaWduYWxp
bmdNZXNzYWdlKGludCBjb250cm9sbGVyUGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKQotewotICAgIC8vIERvbid0IGFzc2VydCBzaW5jZSB0aGUgZnJhbWUgY29udHJvbGxl
ciBjYW4gaGF2ZSBiZWVuIGRlc3Ryb3llZC4KLSAgICBpZiAobV9wZWVyQ29ubmVjdGlvbnMuY29u
dGFpbnMoY29udHJvbGxlclBlZXJDb25uZWN0aW9uSWQpKSB7Ci0gICAgICAgIGNvbnN0IFJlcXVl
c3QmIHBlZXJDb25uZWN0aW9uID0gbV9wZWVyQ29ubmVjdGlvbnMuZ2V0KGNvbnRyb2xsZXJQZWVy
Q29ubmVjdGlvbklkKTsKLSAgICAgICAgQVNTRVJUKHBlZXJDb25uZWN0aW9uLmZyYW1lQ29udHJv
bGxlcigpKTsKLSAgICAgICAgcGVlckNvbm5lY3Rpb24uZnJhbWVDb250cm9sbGVyKCktPm9uU2ln
bmFsaW5nTWVzc2FnZShwZWVyQ29ubmVjdGlvbi5sb2NhbElkKCksIG1lc3NhZ2UpOwotICAgIH0K
LX0KLQotYm9vbCBNZWRpYVN0cmVhbUNvbnRyb2xsZXI6OmZyYW1lVG9QYWdlUGVlckNvbm5lY3Rp
b25JZChNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciogZnJhbWVDb250cm9sbGVyLCBpbnQgZnJh
bWVQZWVyQ29ubmVjdGlvbklkLCBpbnQmIHBhZ2VQZWVyQ29ubmVjdGlvbklkKQotewotICAgIHBh
Z2VQZWVyQ29ubmVjdGlvbklkID0gLTE7Ci0gICAgLy8gRklYTUU6IElzIHRoZXJlIGEgYmV0dGVy
IHdheSB0byBmaW5kIHRoZSBnbG9iYWwgSUQgaW4gdGhlIG1hcD8KLSAgICBmb3IgKFJlcXVlc3RN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9wZWVyQ29ubmVjdGlvbnMuYmVnaW4oKTsgaXQgIT0gbV9wZWVy
Q29ubmVjdGlvbnMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQuZnJhbWVD
b250cm9sbGVyKCkgPT0gZnJhbWVDb250cm9sbGVyICYmIGl0LT5zZWNvbmQubG9jYWxJZCgpID09
IGZyYW1lUGVlckNvbm5lY3Rpb25JZCkgewotICAgICAgICAgICAgcGFnZVBlZXJDb25uZWN0aW9u
SWQgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAg
IH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1Db250cm9sbGVyOjpw
cm9jZXNzU2lnbmFsaW5nTWVzc2FnZShNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciogZnJhbWVD
b250cm9sbGVyLCBpbnQgZnJhbWVQZWVyQ29ubmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpCi17Ci0gICAgaW50IHBhZ2VQZWVyQ29ubmVjdGlvbklkOwotICAgIGlmIChmcmFtZVRvUGFn
ZVBlZXJDb25uZWN0aW9uSWQoZnJhbWVDb250cm9sbGVyLCBmcmFtZVBlZXJDb25uZWN0aW9uSWQs
IHBhZ2VQZWVyQ29ubmVjdGlvbklkKSkKLSAgICAgICAgbV9jbGllbnQtPnByb2Nlc3NTaWduYWxp
bmdNZXNzYWdlKHBhZ2VQZWVyQ29ubmVjdGlvbklkLCBtZXNzYWdlKTsKLX0KLQotdm9pZCBNZWRp
YVN0cmVhbUNvbnRyb2xsZXI6Om1lc3NhZ2UoTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqIGZy
YW1lQ29udHJvbGxlciwgaW50IGZyYW1lUGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKQotewotICAgIGludCBwYWdlUGVlckNvbm5lY3Rpb25JZDsKLSAgICBpZiAoZnJhbWVU
b1BhZ2VQZWVyQ29ubmVjdGlvbklkKGZyYW1lQ29udHJvbGxlciwgZnJhbWVQZWVyQ29ubmVjdGlv
bklkLCBwYWdlUGVlckNvbm5lY3Rpb25JZCkpCi0gICAgICAgIG1fY2xpZW50LT5tZXNzYWdlKHBh
Z2VQZWVyQ29ubmVjdGlvbklkLCBtZXNzYWdlKTsKLX0KLQotdm9pZCBNZWRpYVN0cmVhbUNvbnRy
b2xsZXI6Om9uTWVzc2FnZShpbnQgY29udHJvbGxlclBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0
cmluZyYgbWVzc2FnZSkKLXsKLSAgICAvLyBEb24ndCBhc3NlcnQgc2luY2UgdGhlIGZyYW1lIGNv
bnRyb2xsZXIgY2FuIGhhdmUgYmVlbiBkZXN0cm95ZWQKLSAgICBpZiAobV9wZWVyQ29ubmVjdGlv
bnMuY29udGFpbnMoY29udHJvbGxlclBlZXJDb25uZWN0aW9uSWQpKSB7Ci0gICAgICAgIGNvbnN0
IFJlcXVlc3QmIHBlZXJDb25uZWN0aW9uID0gbV9wZWVyQ29ubmVjdGlvbnMuZ2V0KGNvbnRyb2xs
ZXJQZWVyQ29ubmVjdGlvbklkKTsKLSAgICAgICAgQVNTRVJUKHBlZXJDb25uZWN0aW9uLmZyYW1l
Q29udHJvbGxlcigpKTsKLSAgICAgICAgcGVlckNvbm5lY3Rpb24uZnJhbWVDb250cm9sbGVyKCkt
Pm9uTWVzc2FnZShwZWVyQ29ubmVjdGlvbi5sb2NhbElkKCksIG1lc3NhZ2UpOwotICAgIH0KLX0K
LQotdm9pZCBNZWRpYVN0cmVhbUNvbnRyb2xsZXI6OmFkZFN0cmVhbShNZWRpYVN0cmVhbUZyYW1l
Q29udHJvbGxlciogZnJhbWVDb250cm9sbGVyLCBpbnQgZnJhbWVQZWVyQ29ubmVjdGlvbklkLCBj
b25zdCBTdHJpbmcmIHN0cmVhbUxhYmVsKQotewotICAgIGludCBwYWdlUGVlckNvbm5lY3Rpb25J
ZDsKLSAgICBpZiAoZnJhbWVUb1BhZ2VQZWVyQ29ubmVjdGlvbklkKGZyYW1lQ29udHJvbGxlciwg
ZnJhbWVQZWVyQ29ubmVjdGlvbklkLCBwYWdlUGVlckNvbm5lY3Rpb25JZCkpCi0gICAgICAgIG1f
Y2xpZW50LT5hZGRTdHJlYW0ocGFnZVBlZXJDb25uZWN0aW9uSWQsIHN0cmVhbUxhYmVsKTsKLX0K
LQotdm9pZCBNZWRpYVN0cmVhbUNvbnRyb2xsZXI6Om9uQWRkU3RyZWFtKGludCBjb250cm9sbGVy
UGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCwgUGFzc1JlZlB0cjxN
ZWRpYVN0cmVhbVRyYWNrTGlzdD4gdHJhY2tzKQotewotICAgIC8vIERvbid0IGFzc2VydCBzaW5j
ZSB0aGUgZnJhbWUgY29udHJvbGxlciBjYW4gaGF2ZSBiZWVuIGRlc3Ryb3llZAotICAgIGlmICht
X3BlZXJDb25uZWN0aW9ucy5jb250YWlucyhjb250cm9sbGVyUGVlckNvbm5lY3Rpb25JZCkpIHsK
LSAgICAgICAgY29uc3QgUmVxdWVzdCYgcGVlckNvbm5lY3Rpb24gPSBtX3BlZXJDb25uZWN0aW9u
cy5nZXQoY29udHJvbGxlclBlZXJDb25uZWN0aW9uSWQpOwotICAgICAgICBBU1NFUlQocGVlckNv
bm5lY3Rpb24uZnJhbWVDb250cm9sbGVyKCkpOwotICAgICAgICBwZWVyQ29ubmVjdGlvbi5mcmFt
ZUNvbnRyb2xsZXIoKS0+b25BZGRTdHJlYW0ocGVlckNvbm5lY3Rpb24ubG9jYWxJZCgpLCBzdHJl
YW1MYWJlbCwgdHJhY2tzKTsKLSAgICB9Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1Db250cm9sbGVy
OjpyZW1vdmVTdHJlYW0oTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqIGZyYW1lQ29udHJvbGxl
ciwgaW50IGZyYW1lUGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCkK
LXsKLSAgICBpbnQgcGFnZVBlZXJDb25uZWN0aW9uSWQ7Ci0gICAgaWYgKGZyYW1lVG9QYWdlUGVl
ckNvbm5lY3Rpb25JZChmcmFtZUNvbnRyb2xsZXIsIGZyYW1lUGVlckNvbm5lY3Rpb25JZCwgcGFn
ZVBlZXJDb25uZWN0aW9uSWQpKQotICAgICAgICBtX2NsaWVudC0+cmVtb3ZlU3RyZWFtKHBhZ2VQ
ZWVyQ29ubmVjdGlvbklkLCBzdHJlYW1MYWJlbCk7Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1Db250
cm9sbGVyOjpvblJlbW92ZVN0cmVhbShpbnQgY29udHJvbGxlclBlZXJDb25uZWN0aW9uSWQsIGNv
bnN0IFN0cmluZyYgc3RyZWFtTGFiZWwpCi17Ci0gICAgLy8gRG9uJ3QgYXNzZXJ0IHNpbmNlIHRo
ZSBmcmFtZSBjb250cm9sbGVyIGNhbiBoYXZlIGJlZW4gZGVzdHJveWVkCi0gICAgaWYgKG1fcGVl
ckNvbm5lY3Rpb25zLmNvbnRhaW5zKGNvbnRyb2xsZXJQZWVyQ29ubmVjdGlvbklkKSkgewotICAg
ICAgICAvLyBUT0RPOiBCZXR0ZXIgbmFtZSBvZiBwZWVyQ29ubmVjdGlvbiB2YXJpYWJsZT8KLSAg
ICAgICAgY29uc3QgUmVxdWVzdCYgcGVlckNvbm5lY3Rpb24gPSBtX3BlZXJDb25uZWN0aW9ucy5n
ZXQoY29udHJvbGxlclBlZXJDb25uZWN0aW9uSWQpOwotICAgICAgICBBU1NFUlQocGVlckNvbm5l
Y3Rpb24uZnJhbWVDb250cm9sbGVyKCkpOwotICAgICAgICBwZWVyQ29ubmVjdGlvbi5mcmFtZUNv
bnRyb2xsZXIoKS0+b25SZW1vdmVTdHJlYW0ocGVlckNvbm5lY3Rpb24ubG9jYWxJZCgpLCBzdHJl
YW1MYWJlbCk7Ci0gICAgfQotfQotCi12b2lkIE1lZGlhU3RyZWFtQ29udHJvbGxlcjo6bmV3UGVl
ckNvbm5lY3Rpb24oTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqIGZyYW1lQ29udHJvbGxlciwg
aW50IGZyYW1lUGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBjb25maWd1cmF0aW9uKQot
ewotICAgIGludCBwYWdlUGVlckNvbm5lY3Rpb25JZCA9IG1fbmV4dEdsb2JhbFBlZXJDb25uZWN0
aW9uSWQrKzsKLSAgICBtX3BlZXJDb25uZWN0aW9ucy5hZGQocGFnZVBlZXJDb25uZWN0aW9uSWQs
IFJlcXVlc3QoZnJhbWVQZWVyQ29ubmVjdGlvbklkLCBmcmFtZUNvbnRyb2xsZXIpKTsKLQotICAg
IG1fY2xpZW50LT5uZXdQZWVyQ29ubmVjdGlvbihwYWdlUGVlckNvbm5lY3Rpb25JZCwgY29uZmln
dXJhdGlvbik7Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1Db250cm9sbGVyOjpjbG9zZVBlZXJDb25u
ZWN0aW9uKE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKiBmcmFtZUNvbnRyb2xsZXIsIGludCBm
cmFtZVBlZXJDb25uZWN0aW9uSWQpCi17Ci0gICAgaW50IHBhZ2VQZWVyQ29ubmVjdGlvbklkOwot
ICAgIGlmIChmcmFtZVRvUGFnZVBlZXJDb25uZWN0aW9uSWQoZnJhbWVDb250cm9sbGVyLCBmcmFt
ZVBlZXJDb25uZWN0aW9uSWQsIHBhZ2VQZWVyQ29ubmVjdGlvbklkKSkKLSAgICAgICAgbV9jbGll
bnQtPmNsb3NlUGVlckNvbm5lY3Rpb24ocGFnZVBlZXJDb25uZWN0aW9uSWQpOwotfQotCi12b2lk
IE1lZGlhU3RyZWFtQ29udHJvbGxlcjo6c3RhcnROZWdvdGlhdGlvbihNZWRpYVN0cmVhbUZyYW1l
Q29udHJvbGxlciogZnJhbWVDb250cm9sbGVyLCBpbnQgZnJhbWVQZWVyQ29ubmVjdGlvbklkKQot
ewotICAgIGludCBwYWdlUGVlckNvbm5lY3Rpb25JZDsKLSAgICBpZiAoZnJhbWVUb1BhZ2VQZWVy
Q29ubmVjdGlvbklkKGZyYW1lQ29udHJvbGxlciwgZnJhbWVQZWVyQ29ubmVjdGlvbklkLCBwYWdl
UGVlckNvbm5lY3Rpb25JZCkpCi0gICAgICAgIG1fY2xpZW50LT5zdGFydE5lZ290aWF0aW9uKHBh
Z2VQZWVyQ29ubmVjdGlvbklkKTsKLX0KLQotdm9pZCBNZWRpYVN0cmVhbUNvbnRyb2xsZXI6Om9u
TmVnb3RpYXRpb25TdGFydGVkKGludCBjb250cm9sbGVyUGVlckNvbm5lY3Rpb25JZCkKLXsKLSAg
ICAvLyBEb24ndCBhc3NlcnQgc2luY2UgdGhlIGZyYW1lIGNvbnRyb2xsZXIgY2FuIGhhdmUgYmVl
biBkZXN0cm95ZWQKLSAgICBpZiAobV9wZWVyQ29ubmVjdGlvbnMuY29udGFpbnMoY29udHJvbGxl
clBlZXJDb25uZWN0aW9uSWQpKSB7Ci0gICAgICAgIGNvbnN0IFJlcXVlc3QmIHBlZXJDb25uZWN0
aW9uID0gbV9wZWVyQ29ubmVjdGlvbnMuZ2V0KGNvbnRyb2xsZXJQZWVyQ29ubmVjdGlvbklkKTsK
LSAgICAgICAgQVNTRVJUKHBlZXJDb25uZWN0aW9uLmZyYW1lQ29udHJvbGxlcigpKTsKLSAgICAg
ICAgcGVlckNvbm5lY3Rpb24uZnJhbWVDb250cm9sbGVyKCktPm9uTmVnb3RpYXRpb25TdGFydGVk
KHBlZXJDb25uZWN0aW9uLmxvY2FsSWQoKSk7Ci0gICAgfQotfQotCi12b2lkIE1lZGlhU3RyZWFt
Q29udHJvbGxlcjo6b25OZWdvdGlhdGlvbkRvbmUoaW50IGNvbnRyb2xsZXJQZWVyQ29ubmVjdGlv
bklkKQotewotICAgIC8vIERvbid0IGFzc2VydCBzaW5jZSB0aGUgZnJhbWUgY29udHJvbGxlciBj
YW4gaGF2ZSBiZWVuIGRlc3Ryb3llZAotICAgIGlmIChtX3BlZXJDb25uZWN0aW9ucy5jb250YWlu
cyhjb250cm9sbGVyUGVlckNvbm5lY3Rpb25JZCkpIHsKLSAgICAgICAgY29uc3QgUmVxdWVzdCYg
cGVlckNvbm5lY3Rpb24gPSBtX3BlZXJDb25uZWN0aW9ucy5nZXQoY29udHJvbGxlclBlZXJDb25u
ZWN0aW9uSWQpOwotICAgICAgICBBU1NFUlQocGVlckNvbm5lY3Rpb24uZnJhbWVDb250cm9sbGVy
KCkpOwotICAgICAgICBwZWVyQ29ubmVjdGlvbi5mcmFtZUNvbnRyb2xsZXIoKS0+b25OZWdvdGlh
dGlvbkRvbmUocGVlckNvbm5lY3Rpb24ubG9jYWxJZCgpKTsKLSAgICB9Ci19Ci0KIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtQ29udHJvbGxlci5oIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUNvbnRyb2xsZXIuaAppbmRleCA1NTUzNTg3ZS4uMTBh
YzRjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUNvbnRyb2xs
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtQ29udHJvbGxlci5oCkBA
IC02MCw0MCArNjAsMTkgQEAgcHVibGljOgogICAgIHZvaWQgc3RyZWFtR2VuZXJhdGlvbkZhaWxl
ZChpbnQgcmVxdWVzdElkLCBOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvcjo6RXJyb3JDb2RlKTsKICAg
ICB2b2lkIHN0cmVhbUZhaWxlZChjb25zdCBTdHJpbmcmIHN0cmVhbUxhYmVsKTsKIAotICAgIC8q
IEpTIC0+IFVBICovCi0gICAgdm9pZCBuZXdQZWVyQ29ubmVjdGlvbihNZWRpYVN0cmVhbUZyYW1l
Q29udHJvbGxlciosIGludCBmcmFtZVBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgY29u
ZmlndXJhdGlvbik7Ci0gICAgdm9pZCBzdGFydE5lZ290aWF0aW9uKE1lZGlhU3RyZWFtRnJhbWVD
b250cm9sbGVyKiwgaW50IGZyYW1lUGVlckNvbm5lY3Rpb25JZCk7Ci0gICAgdm9pZCBwcm9jZXNz
U2lnbmFsaW5nTWVzc2FnZShNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciosIGludCBmcmFtZVBl
ZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0gICAgdm9pZCBtZXNzYWdl
KE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKiwgaW50IGZyYW1lUGVlckNvbm5lY3Rpb25JZCwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLSAgICB2b2lkIGFkZFN0cmVhbShNZWRpYVN0cmVhbUZy
YW1lQ29udHJvbGxlciosIGludCBmcmFtZVBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYg
c3RyZWFtTGFiZWwpOwotICAgIHZvaWQgcmVtb3ZlU3RyZWFtKE1lZGlhU3RyZWFtRnJhbWVDb250
cm9sbGVyKiwgaW50IGZyYW1lUGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBzdHJlYW1M
YWJlbCk7Ci0gICAgdm9pZCBjbG9zZVBlZXJDb25uZWN0aW9uKE1lZGlhU3RyZWFtRnJhbWVDb250
cm9sbGVyKiwgaW50IGZyYW1lUGVlckNvbm5lY3Rpb25JZCk7Ci0KLSAgICAvKiBVQSAtPiBKUyAq
LwotICAgIHZvaWQgb25TaWduYWxpbmdNZXNzYWdlKGludCBjb250cm9sbGVyUGVlckNvbm5lY3Rp
b25JZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLSAgICB2b2lkIG9uTWVzc2FnZShpbnQgY29u
dHJvbGxlclBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0gICAgdm9p
ZCBvbkFkZFN0cmVhbShpbnQgY29udHJvbGxlclBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmlu
ZyYgc3RyZWFtTGFiZWwsIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja0xpc3Q+IHRyYWNrcyk7
Ci0gICAgdm9pZCBvblJlbW92ZVN0cmVhbShpbnQgY29udHJvbGxlclBlZXJDb25uZWN0aW9uSWQs
IGNvbnN0IFN0cmluZyYgc3RyZWFtTGFiZWwpOwotICAgIHZvaWQgb25OZWdvdGlhdGlvblN0YXJ0
ZWQoaW50IGNvbnRyb2xsZXJQZWVyQ29ubmVjdGlvbklkKTsKLSAgICB2b2lkIG9uTmVnb3RpYXRp
b25Eb25lKGludCBjb250cm9sbGVyUGVlckNvbm5lY3Rpb25JZCk7Ci0KIHByaXZhdGU6CiAgICAg
aW50IHJlZ2lzdGVyUmVxdWVzdChpbnQgbG9jYWxSZXF1ZXN0SWQsIE1lZGlhU3RyZWFtRnJhbWVD
b250cm9sbGVyKik7CiAgICAgdm9pZCByZWdpc3RlclN0cmVhbShjb25zdCBTdHJpbmcmIHN0cmVh
bUxhYmVsLCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciopOwogCi0gICAgYm9vbCBmcmFtZVRv
UGFnZVBlZXJDb25uZWN0aW9uSWQoTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqLCBpbnQgZnJh
bWVQZWVyQ29ubmVjdGlvbklkLCBpbnQmIHBhZ2VQZWVyQ29ubmVjdGlvbklkKTsKLQogICAgIGNs
YXNzIFJlcXVlc3Q7CiAgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgUmVxdWVzdD4gUmVxdWVzdE1h
cDsKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxl
cio+IFN0cmVhbU1hcDsKIAogICAgIFJlcXVlc3RNYXAgbV9yZXF1ZXN0czsKICAgICBTdHJlYW1N
YXAgbV9zdHJlYW1zOwotICAgIFJlcXVlc3RNYXAgbV9wZWVyQ29ubmVjdGlvbnM7CiAKICAgICBN
ZWRpYVN0cmVhbUNsaWVudCogbV9jbGllbnQ7CiAgICAgaW50IG1fbmV4dEdsb2JhbFJlcXVlc3RJ
ZDsKLSAgICBpbnQgbV9uZXh0R2xvYmFsUGVlckNvbm5lY3Rpb25JZDsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJl
YW1GcmFtZUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUZy
YW1lQ29udHJvbGxlci5jcHAKaW5kZXggOWI2NzkyYS4uNmY2ZWNlNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlci5jcHAKQEAgLTM2LDkg
KzM2LDcgQEAKICNpbmNsdWRlICJOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvckNhbGxiYWNrLmgiCiAj
aW5jbHVkZSAiTmF2aWdhdG9yVXNlck1lZGlhU3VjY2Vzc0NhbGxiYWNrLmgiCiAjaW5jbHVkZSAi
UGFnZS5oIgotI2luY2x1ZGUgIlBlZXJDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlP
cmlnaW4uaCIKLSNpbmNsdWRlICJTaWduYWxpbmdDYWxsYmFjay5oIgogI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM2MywxMjYgKzM2MSw2IEBA
IHZvaWQgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6OnN0cmVhbUZhaWxlZChjb25zdCBTdHJp
bmcmIGxhYmVsKQogICAgIGdldFN0cmVhbUZyb21MYWJlbChsYWJlbCktPnN0cmVhbUVuZGVkKCk7
CiB9CiAKLVBhc3NSZWZQdHI8UGVlckNvbm5lY3Rpb24+IE1lZGlhU3RyZWFtRnJhbWVDb250cm9s
bGVyOjpjcmVhdGVQZWVyQ29ubmVjdGlvbihjb25zdCBTdHJpbmcmIGNvbmZpZ3VyYXRpb24sIFBh
c3NSZWZQdHI8U2lnbmFsaW5nQ2FsbGJhY2s+IHNpZ25hbGluZ0NhbGxiYWNrKQotewotICAgIGlu
dCBjbGllbnRJZCA9IG1fY2xpZW50cy5nZXROZXh0SWQoKTsKLSAgICBSZWZQdHI8UGVlckNvbm5l
Y3Rpb24+IHBlZXJDb25uZWN0aW9uID0gUGVlckNvbm5lY3Rpb246OmNyZWF0ZSh0aGlzLCBjbGll
bnRJZCwgY29uZmlndXJhdGlvbiwgc2lnbmFsaW5nQ2FsbGJhY2spOwotICAgIGlmIChwZWVyQ29u
bmVjdGlvbikKLSAgICAgICAgbV9jbGllbnRzLmFkZChjbGllbnRJZCwgcGVlckNvbm5lY3Rpb24u
Z2V0KCkpOwotICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5yZWxlYXNlKCk7Ci19Ci0KLXZvaWQg
TWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6Om5ld1BlZXJDb25uZWN0aW9uKGludCBwZWVyQ29u
bmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgaWYgKHBhZ2VD
b250cm9sbGVyKCkpCi0gICAgICAgIHBhZ2VDb250cm9sbGVyKCktPm5ld1BlZXJDb25uZWN0aW9u
KHRoaXMsIHBlZXJDb25uZWN0aW9uSWQsIGNvbmZpZ3VyYXRpb24pOwotfQotCi12b2lkIE1lZGlh
U3RyZWFtRnJhbWVDb250cm9sbGVyOjpjbG9zZVBlZXJDb25uZWN0aW9uKGludCBwZWVyQ29ubmVj
dGlvbklkKQotewotICAgIGlmIChwYWdlQ29udHJvbGxlcigpKQotICAgICAgICBwYWdlQ29udHJv
bGxlcigpLT5jbG9zZVBlZXJDb25uZWN0aW9uKHRoaXMsIHBlZXJDb25uZWN0aW9uSWQpOwotfQot
Ci12b2lkIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjpzdGFydE5lZ290aWF0aW9uKGludCBw
ZWVyQ29ubmVjdGlvbklkKQotewotICAgIGlmIChwYWdlQ29udHJvbGxlcigpKQotICAgICAgICBw
YWdlQ29udHJvbGxlcigpLT5zdGFydE5lZ290aWF0aW9uKHRoaXMsIHBlZXJDb25uZWN0aW9uSWQp
OwotfQotCi12b2lkIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjpwcm9jZXNzU2lnbmFsaW5n
TWVzc2FnZShpbnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewot
ICAgIGlmIChwYWdlQ29udHJvbGxlcigpKQotICAgICAgICBwYWdlQ29udHJvbGxlcigpLT5wcm9j
ZXNzU2lnbmFsaW5nTWVzc2FnZSh0aGlzLCBwZWVyQ29ubmVjdGlvbklkLCBtZXNzYWdlKTsKLX0K
LQotdm9pZCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcjo6bWVzc2FnZShpbnQgcGVlckNvbm5l
Y3Rpb25JZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGlmIChwYWdlQ29udHJvbGxl
cigpKQotICAgICAgICBwYWdlQ29udHJvbGxlcigpLT5tZXNzYWdlKHRoaXMsIHBlZXJDb25uZWN0
aW9uSWQsIG1lc3NhZ2UpOwotfQotCi12b2lkIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjph
ZGRTdHJlYW0oaW50IHBlZXJDb25uZWN0aW9uSWQsIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+IHBy
cFN0cmVhbSkKLXsKLSAgICBSZWZQdHI8TWVkaWFTdHJlYW0+IHN0cmVhbSA9IHBycFN0cmVhbTsK
LSAgICBBU1NFUlQobV9zdHJlYW1zLmNvbnRhaW5zKHN0cmVhbS0+bGFiZWwoKSkpOwotCi0gICAg
aWYgKHBhZ2VDb250cm9sbGVyKCkpCi0gICAgICAgIHBhZ2VDb250cm9sbGVyKCktPmFkZFN0cmVh
bSh0aGlzLCBwZWVyQ29ubmVjdGlvbklkLCBzdHJlYW0tPmxhYmVsKCkpOwotfQotCi12b2lkIE1l
ZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjpyZW1vdmVTdHJlYW0oaW50IHBlZXJDb25uZWN0aW9u
SWQsIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+IHBycFN0cmVhbSkKLXsKLSAgICBSZWZQdHI8TWVk
aWFTdHJlYW0+IHN0cmVhbSA9IHBycFN0cmVhbTsKLSAgICBBU1NFUlQobV9zdHJlYW1zLmNvbnRh
aW5zKHN0cmVhbS0+bGFiZWwoKSkpOwotCi0gICAgaWYgKHBhZ2VDb250cm9sbGVyKCkpCi0gICAg
ICAgIHBhZ2VDb250cm9sbGVyKCktPnJlbW92ZVN0cmVhbSh0aGlzLCBwZWVyQ29ubmVjdGlvbklk
LCBzdHJlYW0tPmxhYmVsKCkpOwotfQotCi12b2lkIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVy
Ojpvbk1lc3NhZ2UoaW50IHBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
LXsKLSAgICBBU1NFUlQobV9jbGllbnRzLmNvbnRhaW5zKHBlZXJDb25uZWN0aW9uSWQpKTsKLSAg
ICBBU1NFUlQobV9jbGllbnRzLmdldChwZWVyQ29ubmVjdGlvbklkKS0+aXNQZWVyQ29ubmVjdGlv
bigpKTsKLQotICAgIFJlZlB0cjxQZWVyQ29ubmVjdGlvbj4gcGVlckNvbm5lY3Rpb24gPSBzdGF0
aWNfY2FzdDxQZWVyQ29ubmVjdGlvbio+KG1fY2xpZW50cy5nZXQocGVlckNvbm5lY3Rpb25JZCkp
OwotCi0gICAgcGVlckNvbm5lY3Rpb24tPm9uTWVzc2FnZShtZXNzYWdlKTsKLX0KLQotdm9pZCBN
ZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcjo6b25BZGRTdHJlYW0oaW50IHBlZXJDb25uZWN0aW9u
SWQsIGNvbnN0IFN0cmluZyYgc3RyZWFtTGFiZWwsIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFj
a0xpc3Q+IHRyYWNrcykKLXsKLSAgICBBU1NFUlQoIXN0cmVhbUxhYmVsLmlzRW1wdHkoKSk7Ci0g
ICAgQVNTRVJUKG1fY2xpZW50cy5jb250YWlucyhwZWVyQ29ubmVjdGlvbklkKSk7Ci0gICAgQVNT
RVJUKG1fY2xpZW50cy5nZXQocGVlckNvbm5lY3Rpb25JZCktPmlzUGVlckNvbm5lY3Rpb24oKSk7
Ci0KLSAgICBSZWZQdHI8TWVkaWFTdHJlYW0+IHN0cmVhbSA9IE1lZGlhU3RyZWFtOjpjcmVhdGUo
dGhpcywgc3RyZWFtTGFiZWwsIHRyYWNrcyk7Ci0KLSAgICBSZWZQdHI8UGVlckNvbm5lY3Rpb24+
IHBlZXJDb25uZWN0aW9uID0gc3RhdGljX2Nhc3Q8UGVlckNvbm5lY3Rpb24qPihtX2NsaWVudHMu
Z2V0KHBlZXJDb25uZWN0aW9uSWQpKTsKLSAgICBwZWVyQ29ubmVjdGlvbi0+c3RyZWFtQWRkZWQo
c3RyZWFtLnJlbGVhc2UoKSk7Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6
Om9uUmVtb3ZlU3RyZWFtKGludCBwZWVyQ29ubmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIHN0cmVh
bUxhYmVsKQotewotICAgIEFTU0VSVCghc3RyZWFtTGFiZWwuaXNFbXB0eSgpKTsKLSAgICBBU1NF
UlQobV9jbGllbnRzLmNvbnRhaW5zKHBlZXJDb25uZWN0aW9uSWQpKTsKLSAgICBBU1NFUlQobV9j
bGllbnRzLmdldChwZWVyQ29ubmVjdGlvbklkKS0+aXNQZWVyQ29ubmVjdGlvbigpKTsKLQotICAg
IFJlZlB0cjxQZWVyQ29ubmVjdGlvbj4gcGVlckNvbm5lY3Rpb24gPSBzdGF0aWNfY2FzdDxQZWVy
Q29ubmVjdGlvbio+KG1fY2xpZW50cy5nZXQocGVlckNvbm5lY3Rpb25JZCkpOwotICAgIHBlZXJD
b25uZWN0aW9uLT5zdHJlYW1SZW1vdmVkKHN0cmVhbUxhYmVsKTsKLX0KLQotdm9pZCBNZWRpYVN0
cmVhbUZyYW1lQ29udHJvbGxlcjo6b25TaWduYWxpbmdNZXNzYWdlKGludCBwZWVyQ29ubmVjdGlv
bklkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgQVNTRVJUKG1fY2xpZW50cy5jb250
YWlucyhwZWVyQ29ubmVjdGlvbklkKSk7Ci0gICAgQVNTRVJUKG1fY2xpZW50cy5nZXQocGVlckNv
bm5lY3Rpb25JZCktPmlzUGVlckNvbm5lY3Rpb24oKSk7Ci0KLSAgICBSZWZQdHI8UGVlckNvbm5l
Y3Rpb24+IHBlZXJDb25uZWN0aW9uID0gc3RhdGljX2Nhc3Q8UGVlckNvbm5lY3Rpb24qPihtX2Ns
aWVudHMuZ2V0KHBlZXJDb25uZWN0aW9uSWQpKTsKLSAgICBwZWVyQ29ubmVjdGlvbi0+b25TaWdu
YWxpbmdNZXNzYWdlKG1lc3NhZ2UpOwotfQotCi12b2lkIE1lZGlhU3RyZWFtRnJhbWVDb250cm9s
bGVyOjpvbk5lZ290aWF0aW9uU3RhcnRlZChpbnQgcGVlckNvbm5lY3Rpb25JZCkKLXsKLSAgICAv
LyBGSVhNRTogQXNzZXJ0IG9yIG5vdD8KLSAgICBBU1NFUlQobV9jbGllbnRzLmNvbnRhaW5zKHBl
ZXJDb25uZWN0aW9uSWQpKTsKLSAgICBBU1NFUlQobV9jbGllbnRzLmdldChwZWVyQ29ubmVjdGlv
bklkKS0+aXNQZWVyQ29ubmVjdGlvbigpKTsKLQotICAgIFJlZlB0cjxQZWVyQ29ubmVjdGlvbj4g
cGVlckNvbm5lY3Rpb24gPSBzdGF0aWNfY2FzdDxQZWVyQ29ubmVjdGlvbio+KG1fY2xpZW50cy5n
ZXQocGVlckNvbm5lY3Rpb25JZCkpOwotCi0gICAgcGVlckNvbm5lY3Rpb24tPm9uTmVnb3RpYXRp
b25TdGFydGVkKCk7Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6Om9uTmVn
b3RpYXRpb25Eb25lKGludCBwZWVyQ29ubmVjdGlvbklkKQotewotICAgIC8vIEZJWE1FOiBBc3Nl
cnQgb3Igbm90PwotICAgIEFTU0VSVChtX2NsaWVudHMuY29udGFpbnMocGVlckNvbm5lY3Rpb25J
ZCkpOwotICAgIEFTU0VSVChtX2NsaWVudHMuZ2V0KHBlZXJDb25uZWN0aW9uSWQpLT5pc1BlZXJD
b25uZWN0aW9uKCkpOwotCi0gICAgUmVmUHRyPFBlZXJDb25uZWN0aW9uPiBwZWVyQ29ubmVjdGlv
biA9IHN0YXRpY19jYXN0PFBlZXJDb25uZWN0aW9uKj4obV9jbGllbnRzLmdldChwZWVyQ29ubmVj
dGlvbklkKSk7Ci0KLSAgICBwZWVyQ29ubmVjdGlvbi0+b25OZWdvdGlhdGlvbkRvbmUoKTsKLX0K
LQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVB
TSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1GcmFtZUNvbnRy
b2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIu
aAppbmRleCBlNTE0NzI1Li42YTM5YWZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L01lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9N
ZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlci5oCkBAIC00NSw3ICs0NSw2IEBAIGNsYXNzIE1lZGlh
U3RyZWFtVHJhY2tMaXN0OwogY2xhc3MgTmF2aWdhdG9yVXNlck1lZGlhRXJyb3JDYWxsYmFjazsK
IGNsYXNzIE5hdmlnYXRvclVzZXJNZWRpYVN1Y2Nlc3NDYWxsYmFjazsKIGNsYXNzIFBhZ2U7Ci1j
bGFzcyBQZWVyQ29ubmVjdGlvbjsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiBjbGFz
cyBTZWN1cml0eU9yaWdpbjsKIGNsYXNzIFNpZ25hbGluZ0NhbGxiYWNrOwpAQCAtNzEsNyArNzAs
NiBAQCBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc01lZGlhU3RyZWFtKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzTG9jYWxNZWRpYVN0cmVh
bSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0dlbmVy
aWNDbGllbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgICAgICB2aXJ0dWFsIGJvb2wg
aXNQZWVyQ29ubmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICAgICAgLy8g
Q2FsbGVkIHdoZW4gdGhlIGZyYW1lIGNvbnRyb2xsZXIgaXMgYmVpbmcgZGlzY29ubmVjdGVkIHRv
IHRoZSBNZWRpYVN0cmVhbUNsaWVudCBlbWJlZGRlci4KICAgICAgICAgLy8gQ2xpZW50cyBzaG91
bGQgb3ZlcnJpZGUgdGhpcyB0byBzZW5kIGFueSByZXF1aXJlZCBzaHV0ZG93biBtZXNzYWdlcy4K
QEAgLTE0MCwxMyArMTM4LDYgQEAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIHZvaWQgdW5yZWdp
c3RlcigpIHsgdW5yZWdpc3RlckNsaWVudCh0aGlzKTsgfQogICAgIH07CiAKLSAgICBjbGFzcyBQ
ZWVyQ29ubmVjdGlvbkNsaWVudCA6IHB1YmxpYyBHZW5lcmljQ2xpZW50IHsKLSAgICBwdWJsaWM6
Ci0gICAgICAgIFBlZXJDb25uZWN0aW9uQ2xpZW50KE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVy
KiBmcmFtZUNvbnRyb2xsZXIsIGludCBpZCkgOiBHZW5lcmljQ2xpZW50KGZyYW1lQ29udHJvbGxl
ciwgaWQpIHsgfQotICAgICAgICB2aXJ0dWFsIH5QZWVyQ29ubmVjdGlvbkNsaWVudCgpIHsgfQot
ICAgICAgICB2aXJ0dWFsIGJvb2wgaXNQZWVyQ29ubmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KLSAgICB9OwotCiAgICAgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIoRnJhbWUqKTsK
ICAgICB2aXJ0dWFsIH5NZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcigpOwogCkBAIC0xNjMsMjgg
KzE1NCwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdG9wR2VuZXJhdGVkU3RyZWFtKGNvbnN0IFN0
cmluZyYgc3RyZWFtTGFiZWwpOwogICAgIHZvaWQgc2V0TWVkaWFTdHJlYW1UcmFja0VuYWJsZWQo
Y29uc3QgU3RyaW5nJiB0cmFja0lkLCBib29sIGVuYWJsZWQpOwogCi0gICAgUGFzc1JlZlB0cjxQ
ZWVyQ29ubmVjdGlvbj4gY3JlYXRlUGVlckNvbm5lY3Rpb24oY29uc3QgU3RyaW5nJiBjb25maWd1
cmF0aW9uLCBQYXNzUmVmUHRyPFNpZ25hbGluZ0NhbGxiYWNrPik7Ci0gICAgdm9pZCBuZXdQZWVy
Q29ubmVjdGlvbihpbnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBjb25maWd1cmF0
aW9uKTsKLSAgICB2b2lkIHN0YXJ0TmVnb3RpYXRpb24oaW50IHBlZXJDb25uZWN0aW9uSWQpOwot
ICAgIHZvaWQgcHJvY2Vzc1NpZ25hbGluZ01lc3NhZ2UoaW50IHBlZXJDb25uZWN0aW9uSWQsIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0gICAgdm9pZCBtZXNzYWdlKGludCBwZWVyQ29ubmVjdGlv
bklkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwotICAgIHZvaWQgYWRkU3RyZWFtKGludCBwZWVy
Q29ubmVjdGlvbklkLCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPik7Ci0gICAgdm9pZCByZW1vdmVT
dHJlYW0oaW50IHBlZXJDb25uZWN0aW9uSWQsIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+KTsKLSAg
ICB2b2lkIGNsb3NlUGVlckNvbm5lY3Rpb24oaW50IHBlZXJDb25uZWN0aW9uSWQpOwotCiAgICAg
Ly8gLS0tIENhbGxzIGNvbWluZyBiYWNrIGZyb20gdGhlIGNvbnRyb2xsZXIuIC0tLSAvLwogCiAg
ICAgdm9pZCBzdHJlYW1HZW5lcmF0ZWQoaW50IHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBzdHJl
YW1MYWJlbCwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrTGlzdD4gdHJhY2tzKTsKICAgICB2
b2lkIHN0cmVhbUdlbmVyYXRpb25GYWlsZWQoaW50IHJlcXVlc3RJZCwgTmF2aWdhdG9yVXNlck1l
ZGlhRXJyb3I6OkVycm9yQ29kZSk7CiAgICAgdm9pZCBzdHJlYW1GYWlsZWQoY29uc3QgU3RyaW5n
JiBzdHJlYW1MYWJlbCk7CiAKLSAgICB2b2lkIG9uU2lnbmFsaW5nTWVzc2FnZShpbnQgcGVlckNv
bm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLSAgICB2b2lkIG9uTWVzc2FnZShp
bnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLSAgICB2b2lkIG9u
QWRkU3RyZWFtKGludCBwZWVyQ29ubmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIHN0cmVhbUxhYmVs
LCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tMaXN0Pik7Ci0gICAgdm9pZCBvblJlbW92ZVN0
cmVhbShpbnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCk7Ci0g
ICAgdm9pZCBvbk5lZ290aWF0aW9uU3RhcnRlZChpbnQgcGVlckNvbm5lY3Rpb25JZCk7Ci0gICAg
dm9pZCBvbk5lZ290aWF0aW9uRG9uZShpbnQgcGVlckNvbm5lY3Rpb25JZCk7Ci0KIHByaXZhdGU6
CiAgICAgY2xhc3MgUmVxdWVzdDsKICAgICBjbGFzcyBHZW5lcmF0ZVN0cmVhbVJlcXVlc3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110603</attachid>
            <date>2011-10-11 16:42:10 -0700</date>
            <delta_ts>2011-10-12 12:38:44 -0700</delta_ts>
            <desc>Patch 5</desc>
            <filename>peerconnection_use_platform_5.patch</filename>
            <type>text/plain</type>
            <size>55987</size>
            <attacher name="Adam Bergkvist">adam.bergkvist</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0MGRjZjViLi5jZWUxZTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTkg
QEAKKzIwMTEtMTAtMTEgIEFkYW0gQmVyZ2t2aXN0ICA8YWRhbS5iZXJna3Zpc3RAZXJpY3Nzb24u
Y29tPgorCisgICAgICAgIFVwZGF0ZSBQZWVyQ29ubmVjdGlvbiB0byB1c2UgV2ViQ29yZSBwbGF0
Zm9ybSBpbnRlcmZhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02ODQ2MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEN1cnJlbnRseSBub3QgdGVzdGFibGUuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6
CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogYmluZGluZ3MvanMvSlNQZWVyQ29u
bmVjdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1BlZXJDb25uZWN0aW9uQ29u
c3RydWN0b3I6OmNvbnN0cnVjdEpTUGVlckNvbm5lY3Rpb24pOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L2N1c3RvbS9WOFBlZXJDb25uZWN0aW9uQ3VzdG9tLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBkb20vTWVkaWFTdHJlYW1MaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFt
TGlzdDo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUxpc3Q6OmFwcGVuZCk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUxpc3Q6OnJlbW92ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVN0cmVhbUxpc3Q6OmNvbnRhaW5zKToKKyAgICAgICAgKiBkb20vTWVkaWFT
dHJlYW1MaXN0Lmg6CisgICAgICAgICogcDJwL1BlZXJDb25uZWN0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGVl
ckNvbm5lY3Rpb246OlBlZXJDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25u
ZWN0aW9uOjpwcm9jZXNzU2lnbmFsaW5nTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpQZWVy
Q29ubmVjdGlvbjo6cmVhZHlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlv
bjo6c2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6YWRkU3RyZWFtKToK
KyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uOjpyZW1vdmVTdHJlYW0pOgorICAgICAg
ICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246OmxvY2FsU3RyZWFtcyk6CisgICAgICAgIChXZWJD
b3JlOjpQZWVyQ29ubmVjdGlvbjo6cmVtb3RlU3RyZWFtcyk6CisgICAgICAgIChXZWJDb3JlOjpQ
ZWVyQ29ubmVjdGlvbjo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246
OmljZVByb2Nlc3NpbmdDb21wbGV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rp
b246OnNkcEdlbmVyYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6ZGF0
YVN0cmVhbU1lc3NhZ2VSZWNlaXZlZCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlv
bjo6cmVtb3RlU3RyZWFtQWRkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246
OnJlbW90ZVN0cmVhbVJlbW92ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246
OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rp
b246OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246OnNjaGVkdWxlSW5p
dGlhbE5lZ290aWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uOjppbml0
aWFsTmVnb3RpYXRpb25UaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0
aW9uOjplbnN1cmVTdHJlYW1DaGFuZ2VTY2hlZHVsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGVl
ckNvbm5lY3Rpb246OnN0cmVhbUNoYW5nZVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6
UGVlckNvbm5lY3Rpb246OnNjaGVkdWxlUmVhZHlTdGF0ZUNoYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpQZWVyQ29ubmVjdGlvbjo6cmVhZHlTdGF0ZUNoYW5nZVRpbWVyRmlyZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246OmNoYW5nZVJlYWR5U3RhdGUpOgorICAgICAgICAq
IHAycC9QZWVyQ29ubmVjdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246
OnJlZkV2ZW50VGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uOjpkZXJl
ZkV2ZW50VGFyZ2V0KToKKyAgICAgICAgKiBwMnAvUGVlckNvbm5lY3Rpb24uaWRsOgorICAgICAg
ICAqIHBhZ2UvTWVkaWFTdHJlYW1DbGllbnQuaDoKKyAgICAgICAgKiBwYWdlL01lZGlhU3RyZWFt
Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUNvbnRyb2xsZXI6
Ok1lZGlhU3RyZWFtQ29udHJvbGxlcik6CisgICAgICAgICogcGFnZS9NZWRpYVN0cmVhbUNvbnRy
b2xsZXIuaDoKKyAgICAgICAgKiBwYWdlL01lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKiBwYWdlL01lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyLmg6CisKIDIwMTEtMTAt
MTEgIEpvc2h1YSBCZWxsICA8anNiZWxsQGNocm9taXVtLm9yZz4KIAogICAgICAgICBJbmRleGVk
REI6IGltcGxlbWVudCBJREJGYWN0b3J5LmNtcCBtZXRob2QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAw
OWEyZDNlLi42OGMwNjI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0yMjE4LDcgKzIyMTgsNiBAQAog
ICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVDdXN0b20uY3BwJywKICAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlTGlzdEN1c3RvbS5jcHAnLAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vdGlmaWNhdGlvbkNlbnRlckN1c3RvbS5jcHAn
LAotICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFBlZXJDb25uZWN0aW9uQ3VzdG9t
LmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4UGVyZm9ybWFuY2VDdXN0
b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhQb3BTdGF0ZUV2ZW50
Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1FMUmVzdWx0
U2V0Um93TGlzdEN1c3RvbS5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5wcm8gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCBmY2QwYTNhLi40OGFmYzc4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnBybwpAQCAtMzMyNSw4ICszMzI1LDcgQEAgY29udGFpbnMoREVGSU5FUywg
RU5BQkxFX01FRElBX1NUUkVBTT0xKSB7CiAKICAgICB2OCB7CiAgICAgICAgIFNPVVJDRVMgKz0g
XAotICAgICAgICAgICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4TmF2aWdhdG9yQ3VzdG9tLmNwcCBc
Ci0gICAgICAgICAgICBiaW5kaW5ncy92OC9jdXN0b20vVjhQZWVyQ29ubmVjdGlvbkN1c3RvbS5j
cHAKKyAgICAgICAgICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOE5hdmlnYXRvckN1c3RvbS5jcHAK
ICAgICB9IGVsc2UgewogICAgICAgICBTT1VSQ0VTICs9IFwKICAgICAgICAgICAgIGJpbmRpbmdz
L2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1BlZXJDb25uZWN0aW9uQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTUGVlckNvbm5lY3Rpb25DdXN0b20uY3BwCmluZGV4IDcwYmIxNzIuLmUyNDM3
YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGVlckNvbm5lY3Rp
b25DdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGVlckNvbm5l
Y3Rpb25DdXN0b20uY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yOSwyMiArMzAsMjUgQEAKICNpbmNsdWRlICJKU1BlZXJDb25uZWN0aW9u
LmgiCiAKICNpbmNsdWRlICJDYWxsYmFja0Z1bmN0aW9uLmgiCi0jaW5jbHVkZSAiRE9NV2luZG93
LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJKU0RPTVdpbmRvd0N1c3RvbS5oIgog
I2luY2x1ZGUgIkpTU2lnbmFsaW5nQ2FsbGJhY2suaCIKLSNpbmNsdWRlICJNZWRpYVN0cmVhbUZy
YW1lQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlBlZXJDb25uZWN0aW9uLmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKKyNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAKIHVzaW5nIG5hbWVzcGFj
ZSBKU0M7CiAKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBKU1BlZXJDb25uZWN0aW9uQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTUGVlckNvbm5lY3Rp
b24oRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTUGVlckNvbm5lY3Rpb25Db25zdHJ1Y3Rvciog
anNDb25zdHJ1Y3RvciA9IHN0YXRpY19jYXN0PEpTUGVlckNvbm5lY3Rpb25Db25zdHJ1Y3Rvcio+
KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0g
anNDb25zdHJ1Y3Rvci0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGlmICghY29udGV4
dCkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVSZWZlcmVuY2VFcnJv
cihleGVjLCAiUGVlckNvbm5lY3Rpb24gY29uc3RydWN0b3IgYXNzb2NpYXRlZCBkb2N1bWVudCBp
cyB1bmF2YWlsYWJsZSIpKTsKIAotICAgIFN0cmluZyBjb25maWd1cmF0aW9uID0gdXN0cmluZ1Rv
U3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBpZiAoZXhlYy0+
YXJndW1lbnRDb3VudCgpIDwgMikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBj
cmVhdGVUeXBlRXJyb3IoZXhlYywgIk5vdCBlbm91Z2ggYXJndW1lbnRzIikpOworCisgICAgU3Ry
aW5nIHNlcnZlckNvbmZpZ3VyYXRpb24gPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQo
MCkudG9TdHJpbmcoZXhlYykpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogCkBAIC01MiwxNyArNTYsOCBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTUGVlckNvbm5lY3Rpb25Db25zdHJ1Y3Rv
cjo6Y29uc3RydWN0SlNQZWVyQ29ubmVjdAogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogCi0gICAgRnJhbWUq
IGZyYW1lID0gYXNKU0RPTVdpbmRvdyhleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5pbXBs
KCktPmZyYW1lKCk7Ci0gICAgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqIGZyYW1lQ29udHJv
bGxlciA9IGZyYW1lID8gZnJhbWUtPm1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKCkgOiAwOwot
Ci0gICAgUmVmUHRyPFBlZXJDb25uZWN0aW9uPiBwZWVyQ29ubmVjdGlvbjsKLSAgICBpZiAoZnJh
bWVDb250cm9sbGVyKQotICAgICAgICBwZWVyQ29ubmVjdGlvbiA9IGZyYW1lQ29udHJvbGxlci0+
Y3JlYXRlUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbiwgc2lnbmFsaW5nQ2FsbGJhY2spOwot
Ci0gICAgaWYgKCFwZWVyQ29ubmVjdGlvbikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlKCkpOwotCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pT
KGV4ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCBwZWVyQ29ubmVjdGlvbi5nZXQo
KSkpKTsKKyAgICBSZWZQdHI8UGVlckNvbm5lY3Rpb24+IHBlZXJDb25uZWN0aW9uID0gUGVlckNv
bm5lY3Rpb246OmNyZWF0ZShzZXJ2ZXJDb25maWd1cmF0aW9uLCBzaWduYWxpbmdDYWxsYmFjay5y
ZWxlYXNlKCksIGNvbnRleHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoQ1JFQVRFX0RP
TV9XUkFQUEVSKGV4ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCBQZWVyQ29ubmVj
dGlvbiwgcGVlckNvbm5lY3Rpb24uZ2V0KCkpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4UGVlckNv
bm5lY3Rpb25DdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
UGVlckNvbm5lY3Rpb25DdXN0b20uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5
ODFjZGExLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OFBlZXJDb25uZWN0aW9uQ3VzdG9tLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
LSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShNRURJQV9T
VFJFQU0pCi0KLSNpbmNsdWRlICJWOFBlZXJDb25uZWN0aW9uLmgiCi0KLSNpbmNsdWRlICJET01X
aW5kb3cuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIK
LSNpbmNsdWRlICJNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIlBlZXJD
b25uZWN0aW9uLmgiCi0jaW5jbHVkZSAiVjhCaW5kaW5nLmgiCi0jaW5jbHVkZSAiVjhQcm94eS5o
IgotI2luY2x1ZGUgIlY4U2lnbmFsaW5nQ2FsbGJhY2suaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhQZWVyQ29ubmVjdGlvbjo6Y29uc3RydWN0b3JD
YWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQotewotICAgIElOQ19TVEFUUygiRE9N
LlBlZXJDb25uZWN0aW9uLkNvbnN0cnVjdG9yIik7Ci0KLSAgICBpZiAoIWFyZ3MuSXNDb25zdHJ1
Y3RDYWxsKCkpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJET00gb2JqZWN0IGNvbnN0cnVj
dG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4iLCBWOFByb3h5OjpUeXBlRXJyb3Ip
OwotCi0gICAgaW50IGFyZ0xlbmd0aCA9IGFyZ3MuTGVuZ3RoKCk7Ci0gICAgaWYgKGFyZ0xlbmd0
aCAhPSAyKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiVGhlIFBlZXJDb25uZWN0aW9uIGNv
bnN0cnVjdG9yIHRha2VzIHR3byBhcmd1bWVudHMuIiwgVjhQcm94eTo6VHlwZUVycm9yKTsKLQot
ICAgIHY4OjpUcnlDYXRjaCBleGNlcHRpb25DYXRjaGVyOwotICAgIFN0cmluZyBjb25maWd1cmF0
aW9uID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0tPlRvU3RyaW5nKCkpOwotICAgIGlmIChleGNl
cHRpb25DYXRjaGVyLkhhc0NhdWdodCgpKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGNl
cHRpb25DYXRjaGVyLkV4Y2VwdGlvbigpKTsKLQotICAgIGJvb2wgc3VjY2VlZGVkID0gZmFsc2U7
Ci0gICAgUmVmUHRyPFNpZ25hbGluZ0NhbGxiYWNrPiBzaWduYWxpbmdDYWxsYmFjayA9IGNyZWF0
ZUZ1bmN0aW9uT25seUNhbGxiYWNrPFY4U2lnbmFsaW5nQ2FsbGJhY2s+KGFyZ3NbMV0sIHN1Y2Nl
ZWRlZCk7Ci0gICAgaWYgKCFzdWNjZWVkZWQgfHwgIXNpZ25hbGluZ0NhbGxiYWNrKQotICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcigiVGhlIFBlZXJDb25uZWN0aW9uIGNvbnN0cnVjdG9yIG11c3Qg
YmUgZ2l2ZW4gYSBTaWduYWxpbmdDYWxsYmFjayBjYWxsYmFjay4iLCBWOFByb3h5OjpUeXBlRXJy
b3IpOwotCi0gICAgRnJhbWUqIGZyYW1lID0gVjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckVudGVy
ZWRDb250ZXh0KCk7Ci0gICAgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqIGZyYW1lQ29udHJv
bGxlciA9IGZyYW1lID8gZnJhbWUtPm1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKCkgOiAwOwot
Ci0gICAgUmVmUHRyPFBlZXJDb25uZWN0aW9uPiBwZWVyQ29ubmVjdGlvbjsKLSAgICBpZiAoZnJh
bWVDb250cm9sbGVyKQotICAgICAgICBwZWVyQ29ubmVjdGlvbiA9IGZyYW1lQ29udHJvbGxlci0+
Y3JlYXRlUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbiwgc2lnbmFsaW5nQ2FsbGJhY2spOwot
Ci0gICAgaWYgKCFwZWVyQ29ubmVjdGlvbikKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQo
KTsKLQotICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcihhcmdzLkhvbGRlcigpLCAmaW5m
bywgcGVlckNvbm5lY3Rpb24uZ2V0KCkpOwotICAgIHJldHVybiB0b1Y4KHBlZXJDb25uZWN0aW9u
LnJlbGVhc2UoKSwgYXJncy5Ib2xkZXIoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTWVkaWFTdHJlYW1MaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NZWRpYVN0
cmVhbUxpc3QuY3BwCmluZGV4IGQzYWQ5NDYuLjUwOTIxMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9NZWRpYVN0cmVhbUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9N
ZWRpYVN0cmVhbUxpc3QuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDExIEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00Nyw0NyArNDgsMjggQEAgdW5zaWduZWQgTWVkaWFTdHJlYW1MaXN0
OjpsZW5ndGgoKSBjb25zdAogICAgIHJldHVybiBtX3N0cmVhbXMuc2l6ZSgpOwogfQogCi1QYXNz
UmVmUHRyPE1lZGlhU3RyZWFtPiBNZWRpYVN0cmVhbUxpc3Q6Oml0ZW0odW5zaWduZWQgaW5kZXgp
IGNvbnN0CitNZWRpYVN0cmVhbSogTWVkaWFTdHJlYW1MaXN0OjppdGVtKHVuc2lnbmVkIGluZGV4
KSBjb25zdAogewotICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8TWVkaWFTdHJlYW0+ID46OmNv
bnN0X2l0ZXJhdG9yIGkgPSBtX3N0cmVhbXMuYmVnaW4oKTsKLSAgICBmb3IgKHVuc2lnbmVkIGog
PSAwOyBpICE9IG1fc3RyZWFtcy5lbmQoKTsgKytpLCArK2opIHsKLSAgICAgICAgaWYgKGogPT0g
aW5kZXgpCi0gICAgICAgICAgICByZXR1cm4gaS0+c2Vjb25kOwotICAgIH0KLSAgICByZXR1cm4g
UGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4oKTsKKyAgICByZXR1cm4gbV9zdHJlYW1zW2luZGV4XS5n
ZXQoKTsKIH0KIAotdm9pZCBNZWRpYVN0cmVhbUxpc3Q6OmFkZChQYXNzUmVmUHRyPE1lZGlhU3Ry
ZWFtPiBzdHJlYW0pCit2b2lkIE1lZGlhU3RyZWFtTGlzdDo6YXBwZW5kKFBhc3NSZWZQdHI8TWVk
aWFTdHJlYW0+IHN0cmVhbSkKIHsKLSAgICBSZWZQdHI8TWVkaWFTdHJlYW0+IHMgPSBzdHJlYW07
Ci0gICAgQVNTRVJUKCFjb250YWlucyhzKSk7Ci0gICAgbV9zdHJlYW1zLmFkZChzLT5sYWJlbCgp
LCBzKTsKKyAgICBtX3N0cmVhbXMuYXBwZW5kKHN0cmVhbSk7CiB9CiAKLXZvaWQgTWVkaWFTdHJl
YW1MaXN0OjpyZW1vdmUoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4gc3RyZWFtKQordm9pZCBNZWRp
YVN0cmVhbUxpc3Q6OnJlbW92ZShjb25zdCBNZWRpYVN0cmVhbSogc3RyZWFtKQogewotICAgIFJl
ZlB0cjxNZWRpYVN0cmVhbT4gcyA9IHN0cmVhbTsKLSAgICBBU1NFUlQoY29udGFpbnMocykpOwot
ICAgIG1fc3RyZWFtcy5yZW1vdmUocy0+bGFiZWwoKSk7CisgICAgc2l6ZV90IGkgPSBtX3N0cmVh
bXMuZmluZChzdHJlYW0pOworICAgIGlmIChpICE9IG5vdEZvdW5kKQorICAgICAgICByZXR1cm4g
bV9zdHJlYW1zLnJlbW92ZShpKTsKIH0KIAotYm9vbCBNZWRpYVN0cmVhbUxpc3Q6OmNvbnRhaW5z
KFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+IHN0cmVhbSkgY29uc3QKK2Jvb2wgTWVkaWFTdHJlYW1M
aXN0Ojpjb250YWlucyhjb25zdCBNZWRpYVN0cmVhbSogc3RyZWFtKSBjb25zdAogewotICAgIFJl
ZlB0cjxNZWRpYVN0cmVhbT4gcyA9IHN0cmVhbTsKLSAgICByZXR1cm4gbV9zdHJlYW1zLmNvbnRh
aW5zKHMtPmxhYmVsKCkpOworICAgIHJldHVybiBtX3N0cmVhbXMuY29udGFpbnMoc3RyZWFtKTsK
IH0KIAotYm9vbCBNZWRpYVN0cmVhbUxpc3Q6OmNvbnRhaW5zKGNvbnN0IFN0cmluZyYgbGFiZWwp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc3RyZWFtcy5jb250YWlucyhsYWJlbCk7Ci19Ci0KLVBh
c3NSZWZQdHI8TWVkaWFTdHJlYW0+IE1lZGlhU3RyZWFtTGlzdDo6Z2V0KGNvbnN0IFN0cmluZyYg
bGFiZWwpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc3RyZWFtcy5nZXQobGFiZWwpOwotfQotCi0K
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVkaWFTdHJlYW1MaXN0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTWVkaWFTdHJlYW1MaXN0LmgKaW5kZXggNzMyMGZkZC4uYTA1NmFkZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL01lZGlhU3RyZWFtTGlzdC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9NZWRpYVN0cmVhbUxpc3QuaApAQCAtMjgsMTAgKzI4LDYgQEAKICNp
ZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW0uaCIKLSNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtNDIsMTkgKzM4LDE3IEBAIHB1YmxpYzoKIAogICAgIC8vIERPTSBt
ZXRob2RzICYgYXR0cmlidXRlcyBmb3IgTWVkaWFTdHJlYW1MaXN0CiAgICAgdW5zaWduZWQgbGVu
Z3RoKCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4gaXRlbSh1bnNpZ25lZCBp
bmRleCkgY29uc3Q7CisgICAgTWVkaWFTdHJlYW0qIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0
OwogCiAgICAgLy8gTGlzdCBtYW5pcHVsYXRpb24KLSAgICB2b2lkIGFkZChQYXNzUmVmUHRyPE1l
ZGlhU3RyZWFtPik7Ci0gICAgdm9pZCByZW1vdmUoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4pOwot
ICAgIGJvb2wgY29udGFpbnMoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4pIGNvbnN0OwotICAgIGJv
b2wgY29udGFpbnMoY29uc3QgU3RyaW5nJiBsYWJlbCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxN
ZWRpYVN0cmVhbT4gZ2V0KGNvbnN0IFN0cmluZyYgbGFiZWwpIGNvbnN0OworICAgIHZvaWQgYXBw
ZW5kKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+KTsKKyAgICB2b2lkIHJlbW92ZShjb25zdCBNZWRp
YVN0cmVhbSopOworICAgIGJvb2wgY29udGFpbnMoY29uc3QgTWVkaWFTdHJlYW0qKSBjb25zdDsK
IAogcHJpdmF0ZToKICAgICBNZWRpYVN0cmVhbUxpc3QoKTsKIAotICAgIEhhc2hNYXA8U3RyaW5n
LCBSZWZQdHI8TWVkaWFTdHJlYW0+ID4gbV9zdHJlYW1zOworICAgIFZlY3RvcjxSZWZQdHI8TWVk
aWFTdHJlYW0+ID4gbV9zdHJlYW1zOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcDJwL1BlZXJDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3AycC9QZWVyQ29ubmVjdGlvbi5jcHAKaW5kZXggYmRhM2VlMy4uYjQ1NGY5ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcDJwL1BlZXJDb25uZWN0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wMnAvUGVlckNvbm5lY3Rpb24uY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw2MSArMjgsNDEgQEAKIAogI2lmIEVO
QUJMRShNRURJQV9TVFJFQU0pCiAKLSNpbmNsdWRlICJEaXNwYXRjaFRhc2suaCIKLSNpbmNsdWRl
ICJFcnJvckV2ZW50LmgiCi0jaW5jbHVkZSAiRXZlbnQuaCIKLSNpbmNsdWRlICJFdmVudE5hbWVz
LmgiCi0jaW5jbHVkZSAiTWVkaWFTdHJlYW0uaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgi
CiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1FdmVudC5oIgotI2luY2x1ZGUgIk1lZGlhU3RyZWFtTGlz
dC5oIgogI2luY2x1ZGUgIk1lc3NhZ2VFdmVudC5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuaCIKLSNpbmNsdWRlICJTaWduYWxpbmdDYWxsYmFjay5oIgorI2luY2x1ZGUgIlNl
Y3VyaXR5T3JpZ2luLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxQZWVy
Q29ubmVjdGlvbj4gUGVlckNvbm5lY3Rpb246OmNyZWF0ZShNZWRpYVN0cmVhbUZyYW1lQ29udHJv
bGxlciogZnJhbWVDb250cm9sbGVyLCBpbnQgaWQsIGNvbnN0IFN0cmluZyYgY29uZmlndXJhdGlv
biwgUGFzc1JlZlB0cjxTaWduYWxpbmdDYWxsYmFjaz4gc2lnbmFsaW5nQ2FsbGJhY2spCitQYXNz
UmVmUHRyPFBlZXJDb25uZWN0aW9uPiBQZWVyQ29ubmVjdGlvbjo6Y3JlYXRlKGNvbnN0IFN0cmlu
ZyYgc2VydmVyQ29uZmlndXJhdGlvbiwgUGFzc1JlZlB0cjxTaWduYWxpbmdDYWxsYmFjaz4gc2ln
bmFsaW5nQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAg
Ly8gRklYTUU6IFZlcmlmeSB0aGF0IGNvbmZpZ3VyYXRpb24gZm9sbG93cyB0aGUgc3BlY2lmaWVk
IGZvcm1hdCwgaWYgbm90IHJldHVybiBudWxsLgorICAgIFJlZlB0cjxQZWVyQ29ubmVjdGlvbj4g
Y29ubmVjdGlvbiA9IGFkb3B0UmVmKG5ldyBQZWVyQ29ubmVjdGlvbihzZXJ2ZXJDb25maWd1cmF0
aW9uLCBzaWduYWxpbmdDYWxsYmFjaywgY29udGV4dCkpOworICAgIGNvbm5lY3Rpb24tPnNldFBl
bmRpbmdBY3Rpdml0eShjb25uZWN0aW9uLmdldCgpKTsKKyAgICBjb25uZWN0aW9uLT5zY2hlZHVs
ZUluaXRpYWxOZWdvdGlhdGlvbigpOwogCi0gICAgUmVmUHRyPFBlZXJDb25uZWN0aW9uPiBwZWVy
Q29ubmVjdGlvbiA9IGFkb3B0UmVmKG5ldyBQZWVyQ29ubmVjdGlvbihmcmFtZUNvbnRyb2xsZXIs
IGlkLCBjb25maWd1cmF0aW9uLCBzaWduYWxpbmdDYWxsYmFjaykpOwotICAgIHBlZXJDb25uZWN0
aW9uLT5pbml0KCk7Ci0gICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnJlbGVhc2UoKTsKKyAgICBy
ZXR1cm4gY29ubmVjdGlvbi5yZWxlYXNlKCk7CiB9CiAKLVBlZXJDb25uZWN0aW9uOjpQZWVyQ29u
bmVjdGlvbihNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciogZnJhbWVDb250cm9sbGVyLCBpbnQg
aWQsIGNvbnN0IFN0cmluZyYgY29uZmlndXJhdGlvbiwgUGFzc1JlZlB0cjxTaWduYWxpbmdDYWxs
YmFjaz4gc2lnbmFsaW5nQ2FsbGJhY2spCi0gICAgOiBQZWVyQ29ubmVjdGlvbkNsaWVudChmcmFt
ZUNvbnRyb2xsZXIsIGlkKQotICAgICwgbV9jb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24pCi0g
ICAgLCBtX3JlYWR5U3RhdGUoTkVXKQorUGVlckNvbm5lY3Rpb246OlBlZXJDb25uZWN0aW9uKGNv
bnN0IFN0cmluZyYgc2VydmVyQ29uZmlndXJhdGlvbiwgUGFzc1JlZlB0cjxTaWduYWxpbmdDYWxs
YmFjaz4gc2lnbmFsaW5nQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQp
CisgICAgOiBBY3RpdmVET01PYmplY3QoY29udGV4dCwgdGhpcykKICAgICAsIG1fc2lnbmFsaW5n
Q2FsbGJhY2soc2lnbmFsaW5nQ2FsbGJhY2spCisgICAgLCBtX3JlYWR5U3RhdGUoTkVXKQorICAg
ICwgbV9pY2VTdGFydGVkKGZhbHNlKQorICAgICwgbV9sb2NhbFN0cmVhbXMoTWVkaWFTdHJlYW1M
aXN0OjpjcmVhdGUoKSkKKyAgICAsIG1fcmVtb3RlU3RyZWFtcyhNZWRpYVN0cmVhbUxpc3Q6OmNy
ZWF0ZSgpKQorICAgICwgbV9pbml0aWFsTmVnb3RpYXRpb25UaW1lcih0aGlzLCAmUGVlckNvbm5l
Y3Rpb246OmluaXRpYWxOZWdvdGlhdGlvblRpbWVyRmlyZWQpCisgICAgLCBtX3N0cmVhbUNoYW5n
ZVRpbWVyKHRoaXMsICZQZWVyQ29ubmVjdGlvbjo6c3RyZWFtQ2hhbmdlVGltZXJGaXJlZCkKKyAg
ICAsIG1fcmVhZHlTdGF0ZUNoYW5nZVRpbWVyKHRoaXMsICZQZWVyQ29ubmVjdGlvbjo6cmVhZHlT
dGF0ZUNoYW5nZVRpbWVyRmlyZWQpCisgICAgLCBtX3BlZXJIYW5kbGVyKFBlZXJIYW5kbGVyOjpj
cmVhdGUodGhpcywgc2VydmVyQ29uZmlndXJhdGlvbiwgY29udGV4dC0+c2VjdXJpdHlPcmlnaW4o
KS0+dG9TdHJpbmcoKSkpCiB7Ci0gICAgQVNTRVJUKGZyYW1lQ29udHJvbGxlcik7Ci0gICAgbV9s
b2NhbFN0cmVhbUxpc3QgPSBNZWRpYVN0cmVhbUxpc3Q6OmNyZWF0ZSgpOwotICAgIG1fcmVtb3Rl
U3RyZWFtTGlzdCA9IE1lZGlhU3RyZWFtTGlzdDo6Y3JlYXRlKCk7Ci19Ci0KLXZvaWQgUGVlckNv
bm5lY3Rpb246OmluaXQoKQotewotICAgIGlmIChNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciog
ZnJhbWVDb250cm9sbGVyID0gbWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIoKSkKLSAgICAgICAg
ZnJhbWVDb250cm9sbGVyLT5uZXdQZWVyQ29ubmVjdGlvbihtX2NsaWVudElkLCBtX2NvbmZpZ3Vy
YXRpb24pOwotCi0gICAgcG9zdFN0YXJ0TmVnb3RpYXRpb25UYXNrKCk7CiB9CiAKIFBlZXJDb25u
ZWN0aW9uOjp+UGVlckNvbm5lY3Rpb24oKQogewogfQogCi1NZWRpYVN0cmVhbUxpc3QqIFBlZXJD
b25uZWN0aW9uOjpsb2NhbFN0cmVhbXMoKQotewotICAgIHJldHVybiBtX2xvY2FsU3RyZWFtTGlz
dC5nZXQoKTsKLX0KLQotTWVkaWFTdHJlYW1MaXN0KiBQZWVyQ29ubmVjdGlvbjo6cmVtb3RlU3Ry
ZWFtcygpCi17Ci0gICAgcmV0dXJuIG1fcmVtb3RlU3RyZWFtTGlzdC5nZXQoKTsKLX0KLQogdm9p
ZCBQZWVyQ29ubmVjdGlvbjo6cHJvY2Vzc1NpZ25hbGluZ01lc3NhZ2UoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAobV9yZWFkeVN0YXRlID09IENM
T1NFRCkgewpAQCAtODksOCArNzAsMjggQEAgdm9pZCBQZWVyQ29ubmVjdGlvbjo6cHJvY2Vzc1Np
Z25hbGluZ01lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBFeGNlcHRpb25Db2QKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcigp
KQotICAgICAgICBtZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcigpLT5wcm9jZXNzU2lnbmFsaW5n
TWVzc2FnZShtX2NsaWVudElkLCBtZXNzYWdlKTsKKyAgICBpZiAoIW1lc3NhZ2Uuc3RhcnRzV2l0
aCgiU0RQXG4iKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RyaW5nIHNkcCA9IG1lc3NhZ2Uu
c3Vic3RyaW5nKDQpOworCisgICAgaWYgKG1faWNlU3RhcnRlZCkgeworICAgICAgICBpZiAobV9w
ZWVySGFuZGxlcikKKyAgICAgICAgICAgIG1fcGVlckhhbmRsZXItPnByb2Nlc3NTRFAoc2RwKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3BlZXJIYW5kbGVyKQorICAgICAg
ICBtX3BlZXJIYW5kbGVyLT5oYW5kbGVJbml0aWFsT2ZmZXIoc2RwKTsKKworICAgIGVuc3VyZVN0
cmVhbUNoYW5nZVNjaGVkdWxlZCgpOworICAgIG1faWNlU3RhcnRlZCA9IHRydWU7CisgICAgc2No
ZWR1bGVSZWFkeVN0YXRlQ2hhbmdlKE5FR09USUFUSU5HKTsKK30KKworUGVlckNvbm5lY3Rpb246
OlJlYWR5U3RhdGUgUGVlckNvbm5lY3Rpb246OnJlYWR5U3RhdGUoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3JlYWR5U3RhdGU7CiB9CiAKIHZvaWQgUGVlckNvbm5lY3Rpb246OnNlbmQoY29uc3Qg
U3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTEwMCwxNCArMTAxLDE2IEBAIHZv
aWQgUGVlckNvbm5lY3Rpb246OnNlbmQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2Rl
JiBlYykKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIENTdHJpbmcgdXRmOCA9IHRleHQu
dXRmOCgpOwotICAgIGlmICh1dGY4Lmxlbmd0aCgpID4ga01heE1lc3NhZ2VVVEY4TGVuZ3RoKSB7
CisgICAgQ1N0cmluZyBkYXRhID0gdGV4dC51dGY4KCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0g
ZGF0YS5sZW5ndGgoKTsKKworICAgIGlmIChsZW5ndGggPiA1MDQpIHsKICAgICAgICAgZWMgPSBJ
TlZBTElEX0FDQ0VTU19FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobWVk
aWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIoKSkKLSAgICAgICAgbWVkaWFTdHJlYW1GcmFtZUNvbnRy
b2xsZXIoKS0+bWVzc2FnZShtX2NsaWVudElkLCB0ZXh0KTsKKyAgICBpZiAobV9wZWVySGFuZGxl
cikKKyAgICAgICAgbV9wZWVySGFuZGxlci0+c2VuZERhdGFTdHJlYW1NZXNzYWdlKGRhdGEuZGF0
YSgpLCBsZW5ndGgpOwogfQogCiB2b2lkIFBlZXJDb25uZWN0aW9uOjphZGRTdHJlYW0oUGFzc1Jl
ZlB0cjxNZWRpYVN0cmVhbT4gcHJwU3RyZWFtLCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTExNywz
NyArMTIwLDYzIEBAIHZvaWQgUGVlckNvbm5lY3Rpb246OmFkZFN0cmVhbShQYXNzUmVmUHRyPE1l
ZGlhU3RyZWFtPiBwcnBTdHJlYW0sIEV4Y2VwdGlvbkNvZGUmCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICAvLyBUaGUgU3RyZWFtIG9iamVjdCBpcyBndWFyYW50ZWVkIHRvIGV4aXN0IHNp
bmNlIFN0cmljdFR5cGVDaGVja2luZyBpcyBzZXQgaW4gdGhlIGlkbC4KKyAgICAvLyBUaGUgTWVk
aWFTdHJlYW0gb2JqZWN0IGlzIGd1YXJhbnRlZWQgdG8gZXhpc3Qgc2luY2UgU3RyaWN0VHlwZUNo
ZWNraW5nIGlzIHNldCBpbiB0aGUgaWRsLgogCiAgICAgUmVmUHRyPE1lZGlhU3RyZWFtPiBzdHJl
YW0gPSBwcnBTdHJlYW07CiAKLSAgICBpZiAobV9sb2NhbFN0cmVhbUxpc3QtPmNvbnRhaW5zKHN0
cmVhbSkpCisgICAgaWYgKG1fbG9jYWxTdHJlYW1zLT5jb250YWlucyhzdHJlYW0uZ2V0KCkpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBtX2xvY2FsU3RyZWFtTGlzdC0+YWRkKHN0cmVhbSk7Cisg
ICAgbV9sb2NhbFN0cmVhbXMtPmFwcGVuZChzdHJlYW0pOwogCi0gICAgaWYgKG1lZGlhU3RyZWFt
RnJhbWVDb250cm9sbGVyKCkpCi0gICAgICAgIG1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKCkt
PmFkZFN0cmVhbShtX2NsaWVudElkLCBzdHJlYW0pOworICAgIC8vIEZJWE1FOiBnZXQgZnJvbSBz
dHJlYW0tPmRlc2NyaXB0b3IoKSB3aGVuIGl0J3MgYXZhaWxhYmxlLCBzZWUgaHR0cDovL3dlYmtp
dC5vcmcvYi82ODQ2NAorICAgIE1lZGlhU3RyZWFtRGVzY3JpcHRvciogc3RyZWFtRGVzY3JpcHRv
ciA9IDA7CisgICAgc2l6ZV90IGkgPSBtX3BlbmRpbmdSZW1vdmVTdHJlYW1zLmZpbmQoc3RyZWFt
RGVzY3JpcHRvcik7CisgICAgaWYgKGkgIT0gbm90Rm91bmQpIHsKKyAgICAgICAgbV9wZW5kaW5n
UmVtb3ZlU3RyZWFtcy5yZW1vdmUoaSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBt
X3BlbmRpbmdBZGRTdHJlYW1zLmFwcGVuZChzdHJlYW1EZXNjcmlwdG9yKTsKKyAgICBpZiAobV9p
Y2VTdGFydGVkKQorICAgICAgICBlbnN1cmVTdHJlYW1DaGFuZ2VTY2hlZHVsZWQoKTsKIH0KIAot
dm9pZCBQZWVyQ29ubmVjdGlvbjo6cmVtb3ZlU3RyZWFtKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+
IHBycFN0cmVhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFBlZXJDb25uZWN0aW9uOjpyZW1v
dmVTdHJlYW0oTWVkaWFTdHJlYW0qIHN0cmVhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAg
aWYgKG1fcmVhZHlTdGF0ZSA9PSBDTE9TRUQpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRF
X0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIFRoZSBTdHJlYW0gb2JqZWN0
IGlzIGd1YXJhbnRlZWQgdG8gZXhpc3Qgc2luY2UgU3RyaWN0VHlwZUNoZWNraW5nIGlzIHNldCBp
biB0aGUgaWRsLgorICAgIC8vIFRoZSBNZWRpYVN0cmVhbSBvYmplY3QgaXMgZ3VhcmFudGVlZCB0
byBleGlzdCBzaW5jZSBTdHJpY3RUeXBlQ2hlY2tpbmcgaXMgc2V0IGluIHRoZSBpZGwuCiAKLSAg
ICBSZWZQdHI8TWVkaWFTdHJlYW0+IHN0cmVhbSA9IHBycFN0cmVhbTsKKyAgICBpZiAoIW1fbG9j
YWxTdHJlYW1zLT5jb250YWlucyhzdHJlYW0pKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2xv
Y2FsU3RyZWFtcy0+cmVtb3ZlKHN0cmVhbSk7CiAKLSAgICBpZiAoIW1fbG9jYWxTdHJlYW1MaXN0
LT5jb250YWlucyhzdHJlYW0pKQorICAgIC8vIEZJWE1FOiBnZXQgZnJvbSBzdHJlYW0tPmRlc2Ny
aXB0b3IoKSB3aGVuIGl0J3MgYXZhaWxhYmxlLCBzZWUgaHR0cDovL3dlYmtpdC5vcmcvYi82ODQ2
NAorICAgIE1lZGlhU3RyZWFtRGVzY3JpcHRvciogc3RyZWFtRGVzY3JpcHRvciA9IDA7CisgICAg
c2l6ZV90IGkgPSBtX3BlbmRpbmdBZGRTdHJlYW1zLmZpbmQoc3RyZWFtRGVzY3JpcHRvcik7Cisg
ICAgaWYgKGkgIT0gbm90Rm91bmQpIHsKKyAgICAgICAgbV9wZW5kaW5nQWRkU3RyZWFtcy5yZW1v
dmUoaSk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3BlbmRpbmdSZW1vdmVTdHJl
YW1zLmFwcGVuZChzdHJlYW1EZXNjcmlwdG9yKTsKKyAgICBpZiAobV9pY2VTdGFydGVkKQorICAg
ICAgICBlbnN1cmVTdHJlYW1DaGFuZ2VTY2hlZHVsZWQoKTsKK30KIAotICAgIG1fbG9jYWxTdHJl
YW1MaXN0LT5yZW1vdmUoc3RyZWFtKTsKK01lZGlhU3RyZWFtTGlzdCogUGVlckNvbm5lY3Rpb246
OmxvY2FsU3RyZWFtcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbG9jYWxTdHJlYW1zLmdldCgp
OworfQogCi0gICAgaWYgKG1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKCkpCi0gICAgICAgIG1l
ZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKCktPnJlbW92ZVN0cmVhbShtX2NsaWVudElkLCBzdHJl
YW0pOworTWVkaWFTdHJlYW1MaXN0KiBQZWVyQ29ubmVjdGlvbjo6cmVtb3RlU3RyZWFtcygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fcmVtb3RlU3RyZWFtcy5nZXQoKTsKIH0KIAogdm9pZCBQZWVy
Q29ubmVjdGlvbjo6Y2xvc2UoRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0xNTcsNTAgKzE4Niw1NyBA
QCB2b2lkIFBlZXJDb25uZWN0aW9uOjpjbG9zZShFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcigpKQot
ICAgICAgICBtZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcigpLT5jbG9zZVBlZXJDb25uZWN0aW9u
KG1fY2xpZW50SWQpOwotCi0gICAgbV9yZWFkeVN0YXRlID0gQ0xPU0VEOworICAgIHN0b3AoKTsK
IH0KIAotdm9pZCBQZWVyQ29ubmVjdGlvbjo6b25OZWdvdGlhdGlvblN0YXJ0ZWQoKQordm9pZCBQ
ZWVyQ29ubmVjdGlvbjo6aWNlUHJvY2Vzc2luZ0NvbXBsZXRlZCgpCiB7Ci0gICAgbV9yZWFkeVN0
YXRlID0gTkVHT1RJQVRJTkc7Ci0KLSAgICBwb3N0U2ltcGxlRXZlbnQoZXZlbnROYW1lcygpLmNv
bm5lY3RpbmdFdmVudCk7CisgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXND
b250ZXh0VGhyZWFkKCkpOworICAgIGNoYW5nZVJlYWR5U3RhdGUoQUNUSVZFKTsKIH0KIAotdm9p
ZCBQZWVyQ29ubmVjdGlvbjo6b25OZWdvdGlhdGlvbkRvbmUoKQordm9pZCBQZWVyQ29ubmVjdGlv
bjo6c2RwR2VuZXJhdGVkKGNvbnN0IFN0cmluZyYgc2RwKQogewotICAgIG1fcmVhZHlTdGF0ZSA9
IEFDVElWRTsKLQotICAgIHBvc3RTaW1wbGVFdmVudChldmVudE5hbWVzKCkub3BlbkV2ZW50KTsK
KyAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7
CisgICAgbV9zaWduYWxpbmdDYWxsYmFjay0+aGFuZGxlRXZlbnQoIlNEUFxuIiArIHNkcCwgdGhp
cyk7CiB9CiAKLXZvaWQgUGVlckNvbm5lY3Rpb246OnN0cmVhbUFkZGVkKFBhc3NSZWZQdHI8TWVk
aWFTdHJlYW0+IHBycFN0cmVhbSkKK3ZvaWQgUGVlckNvbm5lY3Rpb246OmRhdGFTdHJlYW1NZXNz
YWdlUmVjZWl2ZWQoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIFJl
ZlB0cjxNZWRpYVN0cmVhbT4gc3RyZWFtID0gcHJwU3RyZWFtOwotICAgIG1fcmVtb3RlU3RyZWFt
TGlzdC0+YWRkKHN0cmVhbSk7Ci0gICAgcG9zdFN0cmVhbUFkZGVkRXZlbnQoc3RyZWFtKTsKKyAg
ICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7Cisg
ICAgY29uc3QgU3RyaW5nJiBtZXNzYWdlID0gU3RyaW5nOjpmcm9tVVRGOChkYXRhLCBsZW5ndGgp
OworICAgIGRpc3BhdGNoRXZlbnQoTWVzc2FnZUV2ZW50OjpjcmVhdGUoUGFzc093blB0cjxNZXNz
YWdlUG9ydEFycmF5PigpLCBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShtZXNzYWdlKSkp
OwogfQogCi12b2lkIFBlZXJDb25uZWN0aW9uOjpzdHJlYW1SZW1vdmVkKGNvbnN0IFN0cmluZyYg
c3RyZWFtTGFiZWwpCit2b2lkIFBlZXJDb25uZWN0aW9uOjpyZW1vdGVTdHJlYW1BZGRlZChQYXNz
UmVmUHRyPE1lZGlhU3RyZWFtRGVzY3JpcHRvcj4gc3RyZWFtRGVzY3JpcHRvcikKIHsKLSAgICBB
U1NFUlQobV9yZW1vdGVTdHJlYW1MaXN0LT5jb250YWlucyhzdHJlYW1MYWJlbCkpOworICAgIEFT
U0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKIAotICAg
IFJlZlB0cjxNZWRpYVN0cmVhbT4gc3RyZWFtID0gbV9yZW1vdGVTdHJlYW1MaXN0LT5nZXQoc3Ry
ZWFtTGFiZWwpOwotICAgIG1fcmVtb3RlU3RyZWFtTGlzdC0+cmVtb3ZlKHN0cmVhbSk7Ci0gICAg
cG9zdFN0cmVhbVJlbW92ZWRFdmVudChzdHJlYW0pOwotfQorICAgIGlmIChtX3JlYWR5U3RhdGUg
PT0gQ0xPU0VEKQorICAgICAgICByZXR1cm47CiAKLXZvaWQgUGVlckNvbm5lY3Rpb246Om9uTWVz
c2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgcG9zdE1lc3NhZ2VFdmVudChtZXNz
YWdlKTsKKyAgICAvLyBGSVhNRTogY3JlYXRlIGEgbmV3IE1lZGlhU3RyZWFtIGZyb20gdGhlIHN0
cmVhbURlc2NyaXB0b3Igb25jZSBpdCdzIHBvc3NpYmxlLCBzZWUgaHR0cDovL3dlYmtpdC5vcmcv
Yi82ODQ2NAorICAgIFJlZlB0cjxNZWRpYVN0cmVhbT4gc3RyZWFtID0gMDsKKyAgICBtX3JlbW90
ZVN0cmVhbXMtPmFwcGVuZChzdHJlYW0pOworCisgICAgZGlzcGF0Y2hFdmVudChNZWRpYVN0cmVh
bUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmFkZHN0cmVhbUV2ZW50LCBmYWxzZSwgZmFsc2Us
IHN0cmVhbS5yZWxlYXNlKCkpKTsKIH0KIAotdm9pZCBQZWVyQ29ubmVjdGlvbjo6b25TaWduYWxp
bmdNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3ZvaWQgUGVlckNvbm5lY3Rpb246OnJl
bW90ZVN0cmVhbVJlbW92ZWQoTWVkaWFTdHJlYW1EZXNjcmlwdG9yKiBzdHJlYW1EZXNjcmlwdG9y
KQogewotICAgIHBvc3RTaWduYWxpbmdFdmVudChtZXNzYWdlKTsKKyAgICBBU1NFUlQoc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgQVNTRVJUKHN0cmVh
bURlc2NyaXB0b3ItPm93bmVyKCkpOworCisgICAgUmVmUHRyPE1lZGlhU3RyZWFtPiBzdHJlYW0g
PSBzdHJlYW1EZXNjcmlwdG9yLT5vd25lcigpOworICAgIHN0cmVhbS0+c3RyZWFtRW5kZWQoKTsK
KworICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gQ0xPU0VEKQorICAgICAgICByZXR1cm47CisKKyAg
ICBBU1NFUlQobV9yZW1vdGVTdHJlYW1zLT5jb250YWlucyhzdHJlYW0uZ2V0KCkpKTsKKyAgICBt
X3JlbW90ZVN0cmVhbXMtPnJlbW92ZShzdHJlYW0uZ2V0KCkpOworCisgICAgZGlzcGF0Y2hFdmVu
dChNZWRpYVN0cmVhbUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnJlbW92ZXN0cmVhbUV2ZW50
LCBmYWxzZSwgZmFsc2UsIHN0cmVhbS5yZWxlYXNlKCkpKTsKIH0KIAogUGVlckNvbm5lY3Rpb24q
IFBlZXJDb25uZWN0aW9uOjp0b1BlZXJDb25uZWN0aW9uKCkKQEAgLTIxMCw3ICsyNDYsMjUgQEAg
UGVlckNvbm5lY3Rpb24qIFBlZXJDb25uZWN0aW9uOjp0b1BlZXJDb25uZWN0aW9uKCkKIAogU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogUGVlckNvbm5lY3Rpb246OnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSBjb25zdAogewotICAgIHJldHVybiBtZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcigpID8g
bWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIDog
MDsKKyAgICByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
Cit9CisKK3ZvaWQgUGVlckNvbm5lY3Rpb246OnN0b3AoKQoreworICAgIGlmIChtX3JlYWR5U3Rh
dGUgPT0gQ0xPU0VEKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2luaXRpYWxOZWdvdGlhdGlv
blRpbWVyLnN0b3AoKTsKKyAgICBtX3N0cmVhbUNoYW5nZVRpbWVyLnN0b3AoKTsKKyAgICBtX3Jl
YWR5U3RhdGVDaGFuZ2VUaW1lci5zdG9wKCk7CisKKyAgICBpZiAobV9wZWVySGFuZGxlcikKKyAg
ICAgICAgbV9wZWVySGFuZGxlci0+c3RvcCgpOworCisgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHko
dGhpcyk7CisgICAgbV9wZWVySGFuZGxlci5jbGVhcigpOworCisgICAgY2hhbmdlUmVhZHlTdGF0
ZShDTE9TRUQpOwogfQogCiBFdmVudFRhcmdldERhdGEqIFBlZXJDb25uZWN0aW9uOjpldmVudFRh
cmdldERhdGEoKQpAQCAtMjIzLDg4ICsyNzcsOTQgQEAgRXZlbnRUYXJnZXREYXRhKiBQZWVyQ29u
bmVjdGlvbjo6ZW5zdXJlRXZlbnRUYXJnZXREYXRhKCkKICAgICByZXR1cm4gJm1fZXZlbnRUYXJn
ZXREYXRhOwogfQogCi12b2lkIFBlZXJDb25uZWN0aW9uOjpwb3N0TWVzc2FnZUV2ZW50KGNvbnN0
IFN0cmluZyYgbWVzc2FnZSkKK3ZvaWQgUGVlckNvbm5lY3Rpb246OnNjaGVkdWxlSW5pdGlhbE5l
Z290aWF0aW9uKCkKIHsKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhID0g
U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUobWVzc2FnZSk7CisgICAgQVNTRVJUKCFtX2lu
aXRpYWxOZWdvdGlhdGlvblRpbWVyLmlzQWN0aXZlKCkpOwogCi0gICAgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBpZiAoIWNv
bnRleHQpCi0gICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQoY29udGV4dC0+aXNDb250ZXh0VGhy
ZWFkKCkpOwotICAgIGNvbnRleHQtPnBvc3RUYXNrKERpc3BhdGNoVGFzazxQZWVyQ29ubmVjdGlv
biwgaW50LCBTZXJpYWxpemVkU2NyaXB0VmFsdWU+OjpjcmVhdGUodGhpcywgJlBlZXJDb25uZWN0
aW9uOjpkaXNwYXRjaE1lc3NhZ2VFdmVudCwgMCwgZGF0YS5yZWxlYXNlKCkpKTsKKyAgICBtX2lu
aXRpYWxOZWdvdGlhdGlvblRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKIH0KIAotdm9pZCBQZWVyQ29u
bmVjdGlvbjo6cG9zdFNpZ25hbGluZ0V2ZW50KGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3ZvaWQg
UGVlckNvbm5lY3Rpb246OmluaXRpYWxOZWdvdGlhdGlvblRpbWVyRmlyZWQoVGltZXI8UGVlckNv
bm5lY3Rpb24+KiB0aW1lcikKIHsKLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAg
cmV0dXJuOwotICAgIEFTU0VSVChjb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7Ci0gICAgY29u
dGV4dC0+cG9zdFRhc2soU2ltcGxlRGlzcGF0Y2hUYXNrPFBlZXJDb25uZWN0aW9uLCBTdHJpbmc+
OjpjcmVhdGUodGhpcywgJlBlZXJDb25uZWN0aW9uOjpkaXNwYXRjaFNpZ25hbGluZ0V2ZW50LCBt
ZXNzYWdlKSk7Ci19CisgICAgQVNTRVJUX1VOVVNFRCh0aW1lciwgdGltZXIgPT0gJm1faW5pdGlh
bE5lZ290aWF0aW9uVGltZXIpOwogCi12b2lkIFBlZXJDb25uZWN0aW9uOjpwb3N0U3RyZWFtQWRk
ZWRFdmVudChQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPiBwcnBTdHJlYW0pCi17Ci0gICAgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAg
ICBpZiAoIWNvbnRleHQpCisgICAgaWYgKG1faWNlU3RhcnRlZCkKICAgICAgICAgcmV0dXJuOwot
ICAgIEFTU0VSVChjb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7Ci0gICAgc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLT5wb3N0VGFzayhEaXNwYXRjaFRhc2s8UGVlckNvbm5lY3Rpb24sIFN0cmlu
ZywgTWVkaWFTdHJlYW0+OjpjcmVhdGUodGhpcywgJlBlZXJDb25uZWN0aW9uOjpkaXNwYXRjaFN0
cmVhbUV2ZW50LCBldmVudE5hbWVzKCkuYWRkc3RyZWFtRXZlbnQsIHBycFN0cmVhbSkpOwotfQog
Ci12b2lkIFBlZXJDb25uZWN0aW9uOjpwb3N0U3RyZWFtUmVtb3ZlZEV2ZW50KFBhc3NSZWZQdHI8
TWVkaWFTdHJlYW0+IHBycFN0cmVhbSkKLXsKLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIGlmICghY29udGV4dCkKLSAg
ICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChjb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7Ci0g
ICAgY29udGV4dC0+cG9zdFRhc2soRGlzcGF0Y2hUYXNrPFBlZXJDb25uZWN0aW9uLCBTdHJpbmcs
IE1lZGlhU3RyZWFtPjo6Y3JlYXRlKHRoaXMsICZQZWVyQ29ubmVjdGlvbjo6ZGlzcGF0Y2hTdHJl
YW1FdmVudCwgZXZlbnROYW1lcygpLnJlbW92ZXN0cmVhbUV2ZW50LCBwcnBTdHJlYW0pKTsKKyAg
ICBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3IgcGVuZGluZ0FkZFN0cmVhbXM7CisgICAgbV9w
ZW5kaW5nQWRkU3RyZWFtcy5zd2FwKHBlbmRpbmdBZGRTdHJlYW1zKTsKKyAgICBpZiAobV9wZWVy
SGFuZGxlcikKKyAgICAgICAgbV9wZWVySGFuZGxlci0+cHJvZHVjZUluaXRpYWxPZmZlcihwZW5k
aW5nQWRkU3RyZWFtcyk7CisKKyAgICBtX2ljZVN0YXJ0ZWQgPSB0cnVlOworCisgICAgY2hhbmdl
UmVhZHlTdGF0ZShORUdPVElBVElORyk7CiB9CiAKLXZvaWQgUGVlckNvbm5lY3Rpb246OnBvc3RT
aW1wbGVFdmVudChjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSkKK3ZvaWQgUGVlckNvbm5lY3Rpb246
OmVuc3VyZVN0cmVhbUNoYW5nZVNjaGVkdWxlZCgpCiB7Ci0gICAgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRl
eHQpCi0gICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQoY29udGV4dC0+aXNDb250ZXh0VGhyZWFk
KCkpOwotICAgIGNvbnRleHQtPnBvc3RUYXNrKFNpbXBsZURpc3BhdGNoVGFzazxQZWVyQ29ubmVj
dGlvbiwgU3RyaW5nPjo6Y3JlYXRlKHRoaXMsICZQZWVyQ29ubmVjdGlvbjo6ZGlzcGF0Y2hTaW1w
bGVFdmVudCwgZXZlbnROYW1lKSk7CisgICAgaWYgKCFtX3N0cmVhbUNoYW5nZVRpbWVyLmlzQWN0
aXZlKCkpCisgICAgICAgIG1fc3RyZWFtQ2hhbmdlVGltZXIuc3RhcnRPbmVTaG90KDApOwogfQog
Ci12b2lkIFBlZXJDb25uZWN0aW9uOjpwb3N0U3RhcnROZWdvdGlhdGlvblRhc2soKQordm9pZCBQ
ZWVyQ29ubmVjdGlvbjo6c3RyZWFtQ2hhbmdlVGltZXJGaXJlZChUaW1lcjxQZWVyQ29ubmVjdGlv
bj4qIHRpbWVyKQogewotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgaWYgKCFjb250ZXh0KQorICAgIEFTU0VSVF9VTlVT
RUQodGltZXIsIHRpbWVyID09ICZtX3N0cmVhbUNoYW5nZVRpbWVyKTsKKworICAgIGlmICghbV9w
ZW5kaW5nQWRkU3RyZWFtcy5pc0VtcHR5KCkgJiYgIW1fcGVuZGluZ1JlbW92ZVN0cmVhbXMuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKGNvbnRleHQtPmlzQ29udGV4dFRo
cmVhZCgpKTsKLSAgICBjb250ZXh0LT5wb3N0VGFzayhTaW1wbGVEaXNwYXRjaFRhc2s8UGVlckNv
bm5lY3Rpb24sIGludD46OmNyZWF0ZSh0aGlzLCAmUGVlckNvbm5lY3Rpb246OmRpc3BhdGNoU3Rh
cnROZWdvdGlhdGlvblRhc2ssIDApKTsKLX0KIAotdm9pZCBQZWVyQ29ubmVjdGlvbjo6ZGlzcGF0
Y2hNZXNzYWdlRXZlbnQoY29uc3QgaW50JiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IGRhdGEpCi17Ci0gICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZCA9IGRhdGE7
Ci0gICAgZGlzcGF0Y2hFdmVudChNZXNzYWdlRXZlbnQ6OmNyZWF0ZShQYXNzT3duUHRyPE1lc3Nh
Z2VQb3J0QXJyYXk+KCksIGQpKTsKLX0KKyAgICBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3Ig
cGVuZGluZ0FkZFN0cmVhbXM7CisgICAgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yIHBlbmRp
bmdSZW1vdmVTdHJlYW1zOwogCi12b2lkIFBlZXJDb25uZWN0aW9uOjpkaXNwYXRjaFNpZ25hbGlu
Z0V2ZW50KGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBtX3NpZ25hbGluZ0NhbGxiYWNr
LT5oYW5kbGVFdmVudChtZXNzYWdlLCB0aGlzKTsKKyAgICBtX3BlbmRpbmdBZGRTdHJlYW1zLnN3
YXAocGVuZGluZ0FkZFN0cmVhbXMpOworICAgIG1fcGVuZGluZ1JlbW92ZVN0cmVhbXMuc3dhcChw
ZW5kaW5nUmVtb3ZlU3RyZWFtcyk7CisKKyAgICBpZiAobV9wZWVySGFuZGxlcikKKyAgICAgICAg
bV9wZWVySGFuZGxlci0+cHJvY2Vzc1BlbmRpbmdTdHJlYW1zKHBlbmRpbmdBZGRTdHJlYW1zLCBw
ZW5kaW5nUmVtb3ZlU3RyZWFtcyk7CisKKyAgICBpZiAoIXBlbmRpbmdBZGRTdHJlYW1zLmlzRW1w
dHkoKSkKKyAgICAgICAgY2hhbmdlUmVhZHlTdGF0ZShORUdPVElBVElORyk7CiB9CiAKLXZvaWQg
UGVlckNvbm5lY3Rpb246OmRpc3BhdGNoU3RyZWFtRXZlbnQoY29uc3QgU3RyaW5nJiBuYW1lLCBQ
YXNzUmVmUHRyPE1lZGlhU3RyZWFtPiBzdHJlYW0pCit2b2lkIFBlZXJDb25uZWN0aW9uOjpzY2hl
ZHVsZVJlYWR5U3RhdGVDaGFuZ2UoUmVhZHlTdGF0ZSByZWFkeVN0YXRlKQogewotICAgIFJlZlB0
cjxNZWRpYVN0cmVhbT4gcyA9IHN0cmVhbTsKLSAgICBkaXNwYXRjaEV2ZW50KE1lZGlhU3RyZWFt
RXZlbnQ6OmNyZWF0ZShuYW1lLCBmYWxzZSwgZmFsc2UsIHMpKTsKKyAgICBtX3BlbmRpbmdSZWFk
eVN0YXRlcy5hcHBlbmQocmVhZHlTdGF0ZSk7CisgICAgaWYgKCFtX3JlYWR5U3RhdGVDaGFuZ2VU
aW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX3JlYWR5U3RhdGVDaGFuZ2VUaW1lci5zdGFydE9u
ZVNob3QoMCk7CiB9CiAKLXZvaWQgUGVlckNvbm5lY3Rpb246OmRpc3BhdGNoU2ltcGxlRXZlbnQo
Y29uc3QgU3RyaW5nJiBldmVudE5hbWUpCit2b2lkIFBlZXJDb25uZWN0aW9uOjpyZWFkeVN0YXRl
Q2hhbmdlVGltZXJGaXJlZChUaW1lcjxQZWVyQ29ubmVjdGlvbj4qIHRpbWVyKQogewotICAgIGRp
c3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWUsIGZhbHNlLCBmYWxzZSkpOworICAg
IEFTU0VSVF9VTlVTRUQodGltZXIsIHRpbWVyID09ICZtX3JlYWR5U3RhdGVDaGFuZ2VUaW1lcik7
CisKKyAgICBWZWN0b3I8UmVhZHlTdGF0ZT4gcGVuZGluZ1JlYWR5U3RhdGVzOworICAgIG1fcGVu
ZGluZ1JlYWR5U3RhdGVzLnN3YXAocGVuZGluZ1JlYWR5U3RhdGVzKTsKKworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgcGVuZGluZ1JlYWR5U3RhdGVzLnNpemUoKTsgaSsrKQorICAgICAgICBj
aGFuZ2VSZWFkeVN0YXRlKHBlbmRpbmdSZWFkeVN0YXRlc1tpXSk7CiB9CiAKLXZvaWQgUGVlckNv
bm5lY3Rpb246OmRpc3BhdGNoU3RhcnROZWdvdGlhdGlvblRhc2soY29uc3QgaW50JikKK3ZvaWQg
UGVlckNvbm5lY3Rpb246OmNoYW5nZVJlYWR5U3RhdGUoUmVhZHlTdGF0ZSByZWFkeVN0YXRlKQog
ewotICAgIGlmIChtZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcigpKQotICAgICAgICBtZWRpYVN0
cmVhbUZyYW1lQ29udHJvbGxlcigpLT5zdGFydE5lZ290aWF0aW9uKG1fY2xpZW50SWQpOworICAg
IGlmIChyZWFkeVN0YXRlID09IG1fcmVhZHlTdGF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9yZWFkeVN0YXRlID0gcmVhZHlTdGF0ZTsKKworICAgIHN3aXRjaCAobV9yZWFkeVN0YXRlKSB7
CisgICAgY2FzZSBORVc6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIE5FR09USUFUSU5HOgorICAgICAgICBkaXNwYXRjaEV2ZW50KEV2ZW50
OjpjcmVhdGUoZXZlbnROYW1lcygpLmNvbm5lY3RpbmdFdmVudCwgZmFsc2UsIGZhbHNlKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQUNUSVZFOgorICAgICAgICBkaXNwYXRjaEV2ZW50KEV2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLm9wZW5FdmVudCwgZmFsc2UsIGZhbHNlKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQ0xPU0VEOgorICAgICAgICBicmVhazsKKyAgICB9CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3AycC9Q
ZWVyQ29ubmVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcDJwL1BlZXJDb25uZWN0aW9uLmgKaW5k
ZXggMThkMTY1Yi4uYWY4OWJlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcDJwL1BlZXJD
b25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcDJwL1BlZXJDb25uZWN0aW9uLmgKQEAg
LTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgRXJpY3Nzb24gQUIuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDQx
ICsyOCw0MSBAQAogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKIAorI2luY2x1ZGUgIkFjdGl2
ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCi0jaW5jbHVkZSAiTWVkaWFT
dHJlYW1GcmFtZUNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkJhc2UuaCIKKyNpbmNsdWRlICJNZWRpYVN0cmVhbS5oIgorI2luY2x1
ZGUgIk1lZGlhU3RyZWFtTGlzdC5oIgorI2luY2x1ZGUgIlBlZXJIYW5kbGVyLmgiCisjaW5jbHVk
ZSAiU2lnbmFsaW5nQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWNsYXNzIE1lZGlhU3RyZWFtOwotY2xhc3MgTWVkaWFTdHJlYW1MaXN0OwotY2xh
c3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKLWNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsK
LWNsYXNzIFNpZ25hbGluZ0NhbGxiYWNrOwotCi1jbGFzcyBQZWVyQ29ubmVjdGlvbiA6IHB1Ymxp
YyBSZWZDb3VudGVkPFBlZXJDb25uZWN0aW9uPiwgcHVibGljIEV2ZW50VGFyZ2V0LCBwdWJsaWMg
TWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6OlBlZXJDb25uZWN0aW9uQ2xpZW50IHsKK2NsYXNz
IFBlZXJDb25uZWN0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8UGVlckNvbm5lY3Rpb24+LCBwdWJs
aWMgUGVlckhhbmRsZXJDbGllbnQsIHB1YmxpYyBFdmVudFRhcmdldCwgcHVibGljIEFjdGl2ZURP
TU9iamVjdCB7CiBwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UGVlckNvbm5lY3Rpb24+
IGNyZWF0ZShjb25zdCBTdHJpbmcmIHNlcnZlckNvbmZpZ3VyYXRpb24sIFBhc3NSZWZQdHI8U2ln
bmFsaW5nQ2FsbGJhY2s+LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisgICAgflBlZXJDb25u
ZWN0aW9uKCk7CisKKyAgICB2b2lkIHByb2Nlc3NTaWduYWxpbmdNZXNzYWdlKGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSwgRXhjZXB0aW9uQ29kZSYpOworCiAgICAgLy8gTmFtZSBhbmQgdmFsdWVzIG9m
IHRoZSBlbnVtIG11c3QgbWF0Y2ggdGhlIGNvcnJlc3Nwb25kaW5nIGNvbnN0YW50cyBpbiB0aGUg
LmlkbCBmaWxlLgotICAgIGVudW0geworICAgIGVudW0gUmVhZHlTdGF0ZSB7CiAgICAgICAgIE5F
VyA9IDAsCiAgICAgICAgIE5FR09USUFUSU5HID0gMSwKICAgICAgICAgQUNUSVZFID0gMiwKICAg
ICAgICAgQ0xPU0VEID0gMwogICAgIH07CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxQZWVyQ29u
bmVjdGlvbj4gY3JlYXRlKE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKiwgaW50IGlkLCBjb25z
dCBTdHJpbmcmIGNvbmZpZ3VyYXRpb24sIFBhc3NSZWZQdHI8U2lnbmFsaW5nQ2FsbGJhY2s+KTsK
LSAgICB2aXJ0dWFsIH5QZWVyQ29ubmVjdGlvbigpOworICAgIFJlYWR5U3RhdGUgcmVhZHlTdGF0
ZSgpIGNvbnN0OwogCi0gICAgTWVkaWFTdHJlYW1MaXN0KiBsb2NhbFN0cmVhbXMoKTsKLSAgICBN
ZWRpYVN0cmVhbUxpc3QqIHJlbW90ZVN0cmVhbXMoKTsKLQotICAgIHVuc2lnbmVkIHNob3J0IHJl
YWR5U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3JlYWR5U3RhdGU7IH0KLQotICAgIHZvaWQgcHJv
Y2Vzc1NpZ25hbGluZ01lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBFeGNlcHRpb25Db2Rl
Jik7CiAgICAgdm9pZCBzZW5kKGNvbnN0IFN0cmluZyYgdGV4dCwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIHZvaWQgYWRkU3RyZWFtKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+LCBFeGNlcHRpb25Db2Rl
Jik7Ci0gICAgdm9pZCByZW1vdmVTdHJlYW0oUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4sIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICB2b2lkIGFkZFN0cmVhbShjb25zdCBQYXNzUmVmUHRyPE1lZGlhU3Ry
ZWFtPiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgcmVtb3ZlU3RyZWFtKE1lZGlhU3RyZWFt
KiwgRXhjZXB0aW9uQ29kZSYpOworICAgIE1lZGlhU3RyZWFtTGlzdCogbG9jYWxTdHJlYW1zKCkg
Y29uc3Q7CisgICAgTWVkaWFTdHJlYW1MaXN0KiByZW1vdGVTdHJlYW1zKCkgY29uc3Q7CiAgICAg
dm9pZCBjbG9zZShFeGNlcHRpb25Db2RlJik7CiAKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5U
X0xJU1RFTkVSKGNvbm5lY3RpbmcpOwpAQCAtNzAsNTggKzcxLDYzIEBAIHB1YmxpYzoKICAgICBE
RUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGFkZHN0cmVhbSk7CiAgICAgREVGSU5FX0FU
VFJJQlVURV9FVkVOVF9MSVNURU5FUihyZW1vdmVzdHJlYW0pOwogCisgICAgLy8gUGVlckhhbmRs
ZXJDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgaWNlUHJvY2Vzc2luZ0NvbXBsZXRlZCgpOworICAg
IHZpcnR1YWwgdm9pZCBzZHBHZW5lcmF0ZWQoY29uc3QgU3RyaW5nJiBzZHApOworICAgIHZpcnR1
YWwgdm9pZCBkYXRhU3RyZWFtTWVzc2FnZVJlY2VpdmVkKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2ln
bmVkIGxlbmd0aCk7CisgICAgdmlydHVhbCB2b2lkIHJlbW90ZVN0cmVhbUFkZGVkKFBhc3NSZWZQ
dHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPik7CisgICAgdmlydHVhbCB2b2lkIHJlbW90ZVN0cmVh
bVJlbW92ZWQoTWVkaWFTdHJlYW1EZXNjcmlwdG9yKik7CisKICAgICAvLyBFdmVudFRhcmdldAog
ICAgIHZpcnR1YWwgUGVlckNvbm5lY3Rpb24qIHRvUGVlckNvbm5lY3Rpb24oKTsKIAogICAgIC8v
IEV2ZW50VGFyZ2V0IGltcGxlbWVudGF0aW9uLgogICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OwogCi0gICAgLy8gQ2FsbGJh
Y2tzCi0gICAgdm9pZCBvbk1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLSAgICB2b2lk
IG9uU2lnbmFsaW5nTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwotICAgIHZvaWQgb25O
ZWdvdGlhdGlvblN0YXJ0ZWQoKTsKLSAgICB2b2lkIG9uTmVnb3RpYXRpb25Eb25lKCk7Ci0gICAg
dm9pZCBzdHJlYW1BZGRlZChQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPik7Ci0gICAgdm9pZCBzdHJl
YW1SZW1vdmVkKGNvbnN0IFN0cmluZyYgc3RyZWFtTGFiZWwpOworICAgIC8vIEFjdGl2ZURPTU9i
amVjdAorICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7CiAKICAgICB1c2luZyBSZWZDb3VudGVkPFBl
ZXJDb25uZWN0aW9uPjo6cmVmOwogICAgIHVzaW5nIFJlZkNvdW50ZWQ8UGVlckNvbm5lY3Rpb24+
OjpkZXJlZjsKIAotcHJvdGVjdGVkOgorcHJpdmF0ZToKKyAgICBQZWVyQ29ubmVjdGlvbihjb25z
dCBTdHJpbmcmIHNlcnZlckNvbmZpZ3VyYXRpb24sIFBhc3NSZWZQdHI8U2lnbmFsaW5nQ2FsbGJh
Y2s+LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisKICAgICAvLyBFdmVudFRhcmdldCBpbXBs
ZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXREYXRh
KCk7CiAgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgp
OwotCi1wcml2YXRlOgotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qga01heE1lc3NhZ2VVVEY4TGVu
Z3RoID0gNTA0OwotCi0gICAgUGVlckNvbm5lY3Rpb24oTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xs
ZXIqLCBpbnQgaWQsIGNvbnN0IFN0cmluZyYgY29uZmlndXJhdGlvbiwgUGFzc1JlZlB0cjxTaWdu
YWxpbmdDYWxsYmFjaz4pOwotICAgIHZvaWQgaW5pdCgpOwotCi0gICAgdm9pZCBwb3N0U2ltcGxl
RXZlbnQoY29uc3QgU3RyaW5nJiBldmVudE5hbWUpOwotICAgIHZvaWQgcG9zdE1lc3NhZ2VFdmVu
dChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwotICAgIHZvaWQgcG9zdFNpZ25hbGluZ0V2ZW50KGNv
bnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0gICAgdm9pZCBwb3N0U3RyZWFtQWRkZWRFdmVudChQYXNz
UmVmUHRyPE1lZGlhU3RyZWFtPik7Ci0gICAgdm9pZCBwb3N0U3RyZWFtUmVtb3ZlZEV2ZW50KFBh
c3NSZWZQdHI8TWVkaWFTdHJlYW0+KTsKLSAgICB2b2lkIHBvc3RTdGFydE5lZ290aWF0aW9uVGFz
aygpOwotCi0gICAgdm9pZCBkaXNwYXRjaFNpbXBsZUV2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnRO
YW1lKTsKLSAgICB2b2lkIGRpc3BhdGNoTWVzc2FnZUV2ZW50KGNvbnN0IGludCYsIFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhKTsKLSAgICB2b2lkIGRpc3BhdGNoU2lnbmFs
aW5nRXZlbnQoY29uc3QgU3RyaW5nJiBldmVudE5hbWUpOwotICAgIHZvaWQgZGlzcGF0Y2hTdHJl
YW1FdmVudChjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+KTsKLSAg
ICB2b2lkIGRpc3BhdGNoU3RhcnROZWdvdGlhdGlvblRhc2soY29uc3QgaW50Jik7Ci0KLSAgICAv
LyBFdmVudFRhcmdldCBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRU
YXJnZXQoKSB7IHJlZigpOyB9CiAgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7
IGRlcmVmKCk7IH0KIAotICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2ZW50VGFyZ2V0RGF0YTsKKyAg
ICB2b2lkIHNjaGVkdWxlSW5pdGlhbE5lZ290aWF0aW9uKCk7CisgICAgdm9pZCBpbml0aWFsTmVn
b3RpYXRpb25UaW1lckZpcmVkKFRpbWVyPFBlZXJDb25uZWN0aW9uPiopOworICAgIHZvaWQgZW5z
dXJlU3RyZWFtQ2hhbmdlU2NoZWR1bGVkKCk7CisgICAgdm9pZCBzdHJlYW1DaGFuZ2VUaW1lckZp
cmVkKFRpbWVyPFBlZXJDb25uZWN0aW9uPiopOworICAgIHZvaWQgc2NoZWR1bGVSZWFkeVN0YXRl
Q2hhbmdlKFJlYWR5U3RhdGUpOworICAgIHZvaWQgcmVhZHlTdGF0ZUNoYW5nZVRpbWVyRmlyZWQo
VGltZXI8UGVlckNvbm5lY3Rpb24+Kik7CisKKyAgICB2b2lkIGNoYW5nZVJlYWR5U3RhdGUoUmVh
ZHlTdGF0ZSk7CiAKLSAgICBTdHJpbmcgbV9jb25maWd1cmF0aW9uOwotICAgIHVuc2lnbmVkIHNo
b3J0IG1fcmVhZHlTdGF0ZTsKICAgICBSZWZQdHI8U2lnbmFsaW5nQ2FsbGJhY2s+IG1fc2lnbmFs
aW5nQ2FsbGJhY2s7Ci0gICAgUmVmUHRyPE1lZGlhU3RyZWFtTGlzdD4gbV9sb2NhbFN0cmVhbUxp
c3Q7Ci0gICAgUmVmUHRyPE1lZGlhU3RyZWFtTGlzdD4gbV9yZW1vdGVTdHJlYW1MaXN0OworCisg
ICAgUmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGU7CisgICAgYm9vbCBtX2ljZVN0YXJ0ZWQ7CisKKyAg
ICBSZWZQdHI8TWVkaWFTdHJlYW1MaXN0PiBtX2xvY2FsU3RyZWFtczsKKyAgICBSZWZQdHI8TWVk
aWFTdHJlYW1MaXN0PiBtX3JlbW90ZVN0cmVhbXM7CisKKyAgICAvLyBFdmVudFRhcmdldCBpbXBs
ZW1lbnRhdGlvbi4KKyAgICBFdmVudFRhcmdldERhdGEgbV9ldmVudFRhcmdldERhdGE7CisKKyAg
ICBUaW1lcjxQZWVyQ29ubmVjdGlvbj4gbV9pbml0aWFsTmVnb3RpYXRpb25UaW1lcjsKKyAgICBU
aW1lcjxQZWVyQ29ubmVjdGlvbj4gbV9zdHJlYW1DaGFuZ2VUaW1lcjsKKyAgICBUaW1lcjxQZWVy
Q29ubmVjdGlvbj4gbV9yZWFkeVN0YXRlQ2hhbmdlVGltZXI7CisKKyAgICBNZWRpYVN0cmVhbURl
c2NyaXB0b3JWZWN0b3IgbV9wZW5kaW5nQWRkU3RyZWFtczsKKyAgICBNZWRpYVN0cmVhbURlc2Ny
aXB0b3JWZWN0b3IgbV9wZW5kaW5nUmVtb3ZlU3RyZWFtczsKKyAgICBWZWN0b3I8UmVhZHlTdGF0
ZT4gbV9wZW5kaW5nUmVhZHlTdGF0ZXM7CisKKyAgICBPd25QdHI8UGVlckhhbmRsZXI+IG1fcGVl
ckhhbmRsZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wMnAvUGVlckNvbm5lY3Rpb24uaWRsIGIvU291cmNlL1dlYkNvcmUvcDJwL1Bl
ZXJDb25uZWN0aW9uLmlkbAppbmRleCAzY2Q3MjlmLi43Mzg4MjRhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wMnAvUGVlckNvbm5lY3Rpb24uaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Ay
cC9QZWVyQ29ubmVjdGlvbi5pZGwKQEAgLTI2LDkgKzI2LDEzIEBAIG1vZHVsZSBwMnAgewogCiAg
ICAgaW50ZXJmYWNlIFsKICAgICAgICAgQ29uZGl0aW9uYWw9TUVESUFfU1RSRUFNLAorICAgICAg
ICBBY3RpdmVET01PYmplY3QsCiAgICAgICAgIENhbkJlQ29uc3RydWN0ZWQsCi0gICAgICAgIEN1
c3RvbUNvbnN0cnVjdG9yLAogICAgICAgICBDb25zdHJ1Y3RvclBhcmFtZXRlcnM9MiwKKyAgICAg
ICAgQ29uc3RydWN0b3IoaW4gRE9NU3RyaW5nIHNlcnZlckNvbmZpZ3VyYXRpb24sIGluIFtDYWxs
YmFjaz1GdW5jdGlvbk9ubHldIFNpZ25hbGluZ0NhbGxiYWNrIHNpZ25hbGluZ0NhbGxiYWNrKSwK
KyAgICAgICAgQ29uc3RydWN0b3JXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsCisgICAgICAg
IEpTQ3VzdG9tQ29uc3RydWN0b3IsCisgICAgICAgIFY4Q29uc3RydWN0b3JTZXRzQWN0aXZlRE9N
V3JhcHBlciwKICAgICAgICAgRXZlbnRUYXJnZXQKICAgICBdIFBlZXJDb25uZWN0aW9uIHsKICAg
ICAgICAgdm9pZCBwcm9jZXNzU2lnbmFsaW5nTWVzc2FnZShpbiBET01TdHJpbmcgbWVzc2FnZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1DbGllbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1DbGllbnQuaAppbmRleCA3YWMyZjA3Li4wZmM2
ZTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtQ2xpZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUNsaWVudC5oCkBAIC00OSwxNSAr
NDksNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHN0b3BHZW5lcmF0ZWRTdHJlYW0oY29u
c3QgU3RyaW5nJiBzdHJlYW1MYWJlbCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRNZWRpYVN0
cmVhbVRyYWNrRW5hYmxlZChjb25zdCBTdHJpbmcmIHRyYWNrSWQsIGJvb2wgZW5hYmxlZCkgPSAw
OwogCi0gICAgLy8gUGVlckNvbm5lY3Rpb24gZnVuY3Rpb25zLgotICAgIHZpcnR1YWwgdm9pZCBu
ZXdQZWVyQ29ubmVjdGlvbihpbnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBjb25m
aWd1cmF0aW9uKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN0YXJ0TmVnb3RpYXRpb24oaW50IHBl
ZXJDb25uZWN0aW9uSWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc1NpZ25hbGluZ01l
c3NhZ2UoaW50IHBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBtZXNzYWdlKGludCBwZWVyQ29ubmVjdGlvbklkLCBjb25zdCBTdHJp
bmcmIG1lc3NhZ2UpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkU3RyZWFtKGludCBwZWVyQ29u
bmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIHN0cmVhbUxhYmVsKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHJlbW92ZVN0cmVhbShpbnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBzdHJl
YW1MYWJlbCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZVBlZXJDb25uZWN0aW9uKGludCBw
ZWVyQ29ubmVjdGlvbklkKSA9IDA7Ci0KIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5NZWRpYVN0
cmVhbUNsaWVudCgpIHsgfQogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVk
aWFTdHJlYW1Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1D
b250cm9sbGVyLmNwcAppbmRleCA1ZjYwNGVjLi5jODg1NTJmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9NZWRpYVN0cmVhbUNvbnRyb2xsZXIuY3BwCkBAIC0zNCw4ICszNCw2IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gRklYTUU6IFRoaXMgaXMgdXNlZCBmb3IgaG9sZGluZyBs
aXN0IG9mIFBlZXJDb25uZWN0aW9uIGFzIHdlbGwsCi0vLyBzbyByZW5hbWUgY2xhc3MgaXMgaW4g
b3JkZXIuCiBjbGFzcyBNZWRpYVN0cmVhbUNvbnRyb2xsZXI6OlJlcXVlc3QgewogcHVibGljOgog
ICAgIFJlcXVlc3QoKQpAQCAtNTcsNyArNTUsNiBAQCBwcml2YXRlOgogTWVkaWFTdHJlYW1Db250
cm9sbGVyOjpNZWRpYVN0cmVhbUNvbnRyb2xsZXIoTWVkaWFTdHJlYW1DbGllbnQqIGNsaWVudCkK
ICAgICA6IG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fbmV4dEdsb2JhbFJlcXVlc3RJZCgxKQot
ICAgICwgbV9uZXh0R2xvYmFsUGVlckNvbm5lY3Rpb25JZCgxKQogewogfQogCkBAIC0xNTcsMTMw
ICsxNTQsNiBAQCB2b2lkIE1lZGlhU3RyZWFtQ29udHJvbGxlcjo6c3RyZWFtRmFpbGVkKGNvbnN0
IFN0cmluZyYgc3RyZWFtTGFiZWwpCiAgICAgICAgIG1fc3RyZWFtcy5nZXQoc3RyZWFtTGFiZWwp
LT5zdHJlYW1GYWlsZWQoc3RyZWFtTGFiZWwpOwogfQogCi12b2lkIE1lZGlhU3RyZWFtQ29udHJv
bGxlcjo6b25TaWduYWxpbmdNZXNzYWdlKGludCBjb250cm9sbGVyUGVlckNvbm5lY3Rpb25JZCwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIC8vIERvbid0IGFzc2VydCBzaW5jZSB0aGUg
ZnJhbWUgY29udHJvbGxlciBjYW4gaGF2ZSBiZWVuIGRlc3Ryb3llZC4KLSAgICBpZiAobV9wZWVy
Q29ubmVjdGlvbnMuY29udGFpbnMoY29udHJvbGxlclBlZXJDb25uZWN0aW9uSWQpKSB7Ci0gICAg
ICAgIGNvbnN0IFJlcXVlc3QmIHBlZXJDb25uZWN0aW9uID0gbV9wZWVyQ29ubmVjdGlvbnMuZ2V0
KGNvbnRyb2xsZXJQZWVyQ29ubmVjdGlvbklkKTsKLSAgICAgICAgQVNTRVJUKHBlZXJDb25uZWN0
aW9uLmZyYW1lQ29udHJvbGxlcigpKTsKLSAgICAgICAgcGVlckNvbm5lY3Rpb24uZnJhbWVDb250
cm9sbGVyKCktPm9uU2lnbmFsaW5nTWVzc2FnZShwZWVyQ29ubmVjdGlvbi5sb2NhbElkKCksIG1l
c3NhZ2UpOwotICAgIH0KLX0KLQotYm9vbCBNZWRpYVN0cmVhbUNvbnRyb2xsZXI6OmZyYW1lVG9Q
YWdlUGVlckNvbm5lY3Rpb25JZChNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciogZnJhbWVDb250
cm9sbGVyLCBpbnQgZnJhbWVQZWVyQ29ubmVjdGlvbklkLCBpbnQmIHBhZ2VQZWVyQ29ubmVjdGlv
bklkKQotewotICAgIHBhZ2VQZWVyQ29ubmVjdGlvbklkID0gLTE7Ci0gICAgLy8gRklYTUU6IElz
IHRoZXJlIGEgYmV0dGVyIHdheSB0byBmaW5kIHRoZSBnbG9iYWwgSUQgaW4gdGhlIG1hcD8KLSAg
ICBmb3IgKFJlcXVlc3RNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wZWVyQ29ubmVjdGlvbnMuYmVnaW4o
KTsgaXQgIT0gbV9wZWVyQ29ubmVjdGlvbnMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0
LT5zZWNvbmQuZnJhbWVDb250cm9sbGVyKCkgPT0gZnJhbWVDb250cm9sbGVyICYmIGl0LT5zZWNv
bmQubG9jYWxJZCgpID09IGZyYW1lUGVlckNvbm5lY3Rpb25JZCkgewotICAgICAgICAgICAgcGFn
ZVBlZXJDb25uZWN0aW9uSWQgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgTWVkaWFTdHJl
YW1Db250cm9sbGVyOjpwcm9jZXNzU2lnbmFsaW5nTWVzc2FnZShNZWRpYVN0cmVhbUZyYW1lQ29u
dHJvbGxlciogZnJhbWVDb250cm9sbGVyLCBpbnQgZnJhbWVQZWVyQ29ubmVjdGlvbklkLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgaW50IHBhZ2VQZWVyQ29ubmVjdGlvbklkOwotICAg
IGlmIChmcmFtZVRvUGFnZVBlZXJDb25uZWN0aW9uSWQoZnJhbWVDb250cm9sbGVyLCBmcmFtZVBl
ZXJDb25uZWN0aW9uSWQsIHBhZ2VQZWVyQ29ubmVjdGlvbklkKSkKLSAgICAgICAgbV9jbGllbnQt
PnByb2Nlc3NTaWduYWxpbmdNZXNzYWdlKHBhZ2VQZWVyQ29ubmVjdGlvbklkLCBtZXNzYWdlKTsK
LX0KLQotdm9pZCBNZWRpYVN0cmVhbUNvbnRyb2xsZXI6Om1lc3NhZ2UoTWVkaWFTdHJlYW1GcmFt
ZUNvbnRyb2xsZXIqIGZyYW1lQ29udHJvbGxlciwgaW50IGZyYW1lUGVlckNvbm5lY3Rpb25JZCwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGludCBwYWdlUGVlckNvbm5lY3Rpb25JZDsK
LSAgICBpZiAoZnJhbWVUb1BhZ2VQZWVyQ29ubmVjdGlvbklkKGZyYW1lQ29udHJvbGxlciwgZnJh
bWVQZWVyQ29ubmVjdGlvbklkLCBwYWdlUGVlckNvbm5lY3Rpb25JZCkpCi0gICAgICAgIG1fY2xp
ZW50LT5tZXNzYWdlKHBhZ2VQZWVyQ29ubmVjdGlvbklkLCBtZXNzYWdlKTsKLX0KLQotdm9pZCBN
ZWRpYVN0cmVhbUNvbnRyb2xsZXI6Om9uTWVzc2FnZShpbnQgY29udHJvbGxlclBlZXJDb25uZWN0
aW9uSWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICAvLyBEb24ndCBhc3NlcnQgc2lu
Y2UgdGhlIGZyYW1lIGNvbnRyb2xsZXIgY2FuIGhhdmUgYmVlbiBkZXN0cm95ZWQKLSAgICBpZiAo
bV9wZWVyQ29ubmVjdGlvbnMuY29udGFpbnMoY29udHJvbGxlclBlZXJDb25uZWN0aW9uSWQpKSB7
Ci0gICAgICAgIGNvbnN0IFJlcXVlc3QmIHBlZXJDb25uZWN0aW9uID0gbV9wZWVyQ29ubmVjdGlv
bnMuZ2V0KGNvbnRyb2xsZXJQZWVyQ29ubmVjdGlvbklkKTsKLSAgICAgICAgQVNTRVJUKHBlZXJD
b25uZWN0aW9uLmZyYW1lQ29udHJvbGxlcigpKTsKLSAgICAgICAgcGVlckNvbm5lY3Rpb24uZnJh
bWVDb250cm9sbGVyKCktPm9uTWVzc2FnZShwZWVyQ29ubmVjdGlvbi5sb2NhbElkKCksIG1lc3Nh
Z2UpOwotICAgIH0KLX0KLQotdm9pZCBNZWRpYVN0cmVhbUNvbnRyb2xsZXI6OmFkZFN0cmVhbShN
ZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciogZnJhbWVDb250cm9sbGVyLCBpbnQgZnJhbWVQZWVy
Q29ubmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIHN0cmVhbUxhYmVsKQotewotICAgIGludCBwYWdl
UGVlckNvbm5lY3Rpb25JZDsKLSAgICBpZiAoZnJhbWVUb1BhZ2VQZWVyQ29ubmVjdGlvbklkKGZy
YW1lQ29udHJvbGxlciwgZnJhbWVQZWVyQ29ubmVjdGlvbklkLCBwYWdlUGVlckNvbm5lY3Rpb25J
ZCkpCi0gICAgICAgIG1fY2xpZW50LT5hZGRTdHJlYW0ocGFnZVBlZXJDb25uZWN0aW9uSWQsIHN0
cmVhbUxhYmVsKTsKLX0KLQotdm9pZCBNZWRpYVN0cmVhbUNvbnRyb2xsZXI6Om9uQWRkU3RyZWFt
KGludCBjb250cm9sbGVyUGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBzdHJlYW1MYWJl
bCwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrTGlzdD4gdHJhY2tzKQotewotICAgIC8vIERv
bid0IGFzc2VydCBzaW5jZSB0aGUgZnJhbWUgY29udHJvbGxlciBjYW4gaGF2ZSBiZWVuIGRlc3Ry
b3llZAotICAgIGlmIChtX3BlZXJDb25uZWN0aW9ucy5jb250YWlucyhjb250cm9sbGVyUGVlckNv
bm5lY3Rpb25JZCkpIHsKLSAgICAgICAgY29uc3QgUmVxdWVzdCYgcGVlckNvbm5lY3Rpb24gPSBt
X3BlZXJDb25uZWN0aW9ucy5nZXQoY29udHJvbGxlclBlZXJDb25uZWN0aW9uSWQpOwotICAgICAg
ICBBU1NFUlQocGVlckNvbm5lY3Rpb24uZnJhbWVDb250cm9sbGVyKCkpOwotICAgICAgICBwZWVy
Q29ubmVjdGlvbi5mcmFtZUNvbnRyb2xsZXIoKS0+b25BZGRTdHJlYW0ocGVlckNvbm5lY3Rpb24u
bG9jYWxJZCgpLCBzdHJlYW1MYWJlbCwgdHJhY2tzKTsKLSAgICB9Ci19Ci0KLXZvaWQgTWVkaWFT
dHJlYW1Db250cm9sbGVyOjpyZW1vdmVTdHJlYW0oTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIq
IGZyYW1lQ29udHJvbGxlciwgaW50IGZyYW1lUGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5n
JiBzdHJlYW1MYWJlbCkKLXsKLSAgICBpbnQgcGFnZVBlZXJDb25uZWN0aW9uSWQ7Ci0gICAgaWYg
KGZyYW1lVG9QYWdlUGVlckNvbm5lY3Rpb25JZChmcmFtZUNvbnRyb2xsZXIsIGZyYW1lUGVlckNv
bm5lY3Rpb25JZCwgcGFnZVBlZXJDb25uZWN0aW9uSWQpKQotICAgICAgICBtX2NsaWVudC0+cmVt
b3ZlU3RyZWFtKHBhZ2VQZWVyQ29ubmVjdGlvbklkLCBzdHJlYW1MYWJlbCk7Ci19Ci0KLXZvaWQg
TWVkaWFTdHJlYW1Db250cm9sbGVyOjpvblJlbW92ZVN0cmVhbShpbnQgY29udHJvbGxlclBlZXJD
b25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgc3RyZWFtTGFiZWwpCi17Ci0gICAgLy8gRG9uJ3Qg
YXNzZXJ0IHNpbmNlIHRoZSBmcmFtZSBjb250cm9sbGVyIGNhbiBoYXZlIGJlZW4gZGVzdHJveWVk
Ci0gICAgaWYgKG1fcGVlckNvbm5lY3Rpb25zLmNvbnRhaW5zKGNvbnRyb2xsZXJQZWVyQ29ubmVj
dGlvbklkKSkgewotICAgICAgICAvLyBUT0RPOiBCZXR0ZXIgbmFtZSBvZiBwZWVyQ29ubmVjdGlv
biB2YXJpYWJsZT8KLSAgICAgICAgY29uc3QgUmVxdWVzdCYgcGVlckNvbm5lY3Rpb24gPSBtX3Bl
ZXJDb25uZWN0aW9ucy5nZXQoY29udHJvbGxlclBlZXJDb25uZWN0aW9uSWQpOwotICAgICAgICBB
U1NFUlQocGVlckNvbm5lY3Rpb24uZnJhbWVDb250cm9sbGVyKCkpOwotICAgICAgICBwZWVyQ29u
bmVjdGlvbi5mcmFtZUNvbnRyb2xsZXIoKS0+b25SZW1vdmVTdHJlYW0ocGVlckNvbm5lY3Rpb24u
bG9jYWxJZCgpLCBzdHJlYW1MYWJlbCk7Ci0gICAgfQotfQotCi12b2lkIE1lZGlhU3RyZWFtQ29u
dHJvbGxlcjo6bmV3UGVlckNvbm5lY3Rpb24oTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqIGZy
YW1lQ29udHJvbGxlciwgaW50IGZyYW1lUGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBj
b25maWd1cmF0aW9uKQotewotICAgIGludCBwYWdlUGVlckNvbm5lY3Rpb25JZCA9IG1fbmV4dEds
b2JhbFBlZXJDb25uZWN0aW9uSWQrKzsKLSAgICBtX3BlZXJDb25uZWN0aW9ucy5hZGQocGFnZVBl
ZXJDb25uZWN0aW9uSWQsIFJlcXVlc3QoZnJhbWVQZWVyQ29ubmVjdGlvbklkLCBmcmFtZUNvbnRy
b2xsZXIpKTsKLQotICAgIG1fY2xpZW50LT5uZXdQZWVyQ29ubmVjdGlvbihwYWdlUGVlckNvbm5l
Y3Rpb25JZCwgY29uZmlndXJhdGlvbik7Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1Db250cm9sbGVy
OjpjbG9zZVBlZXJDb25uZWN0aW9uKE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKiBmcmFtZUNv
bnRyb2xsZXIsIGludCBmcmFtZVBlZXJDb25uZWN0aW9uSWQpCi17Ci0gICAgaW50IHBhZ2VQZWVy
Q29ubmVjdGlvbklkOwotICAgIGlmIChmcmFtZVRvUGFnZVBlZXJDb25uZWN0aW9uSWQoZnJhbWVD
b250cm9sbGVyLCBmcmFtZVBlZXJDb25uZWN0aW9uSWQsIHBhZ2VQZWVyQ29ubmVjdGlvbklkKSkK
LSAgICAgICAgbV9jbGllbnQtPmNsb3NlUGVlckNvbm5lY3Rpb24ocGFnZVBlZXJDb25uZWN0aW9u
SWQpOwotfQotCi12b2lkIE1lZGlhU3RyZWFtQ29udHJvbGxlcjo6c3RhcnROZWdvdGlhdGlvbihN
ZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciogZnJhbWVDb250cm9sbGVyLCBpbnQgZnJhbWVQZWVy
Q29ubmVjdGlvbklkKQotewotICAgIGludCBwYWdlUGVlckNvbm5lY3Rpb25JZDsKLSAgICBpZiAo
ZnJhbWVUb1BhZ2VQZWVyQ29ubmVjdGlvbklkKGZyYW1lQ29udHJvbGxlciwgZnJhbWVQZWVyQ29u
bmVjdGlvbklkLCBwYWdlUGVlckNvbm5lY3Rpb25JZCkpCi0gICAgICAgIG1fY2xpZW50LT5zdGFy
dE5lZ290aWF0aW9uKHBhZ2VQZWVyQ29ubmVjdGlvbklkKTsKLX0KLQotdm9pZCBNZWRpYVN0cmVh
bUNvbnRyb2xsZXI6Om9uTmVnb3RpYXRpb25TdGFydGVkKGludCBjb250cm9sbGVyUGVlckNvbm5l
Y3Rpb25JZCkKLXsKLSAgICAvLyBEb24ndCBhc3NlcnQgc2luY2UgdGhlIGZyYW1lIGNvbnRyb2xs
ZXIgY2FuIGhhdmUgYmVlbiBkZXN0cm95ZWQKLSAgICBpZiAobV9wZWVyQ29ubmVjdGlvbnMuY29u
dGFpbnMoY29udHJvbGxlclBlZXJDb25uZWN0aW9uSWQpKSB7Ci0gICAgICAgIGNvbnN0IFJlcXVl
c3QmIHBlZXJDb25uZWN0aW9uID0gbV9wZWVyQ29ubmVjdGlvbnMuZ2V0KGNvbnRyb2xsZXJQZWVy
Q29ubmVjdGlvbklkKTsKLSAgICAgICAgQVNTRVJUKHBlZXJDb25uZWN0aW9uLmZyYW1lQ29udHJv
bGxlcigpKTsKLSAgICAgICAgcGVlckNvbm5lY3Rpb24uZnJhbWVDb250cm9sbGVyKCktPm9uTmVn
b3RpYXRpb25TdGFydGVkKHBlZXJDb25uZWN0aW9uLmxvY2FsSWQoKSk7Ci0gICAgfQotfQotCi12
b2lkIE1lZGlhU3RyZWFtQ29udHJvbGxlcjo6b25OZWdvdGlhdGlvbkRvbmUoaW50IGNvbnRyb2xs
ZXJQZWVyQ29ubmVjdGlvbklkKQotewotICAgIC8vIERvbid0IGFzc2VydCBzaW5jZSB0aGUgZnJh
bWUgY29udHJvbGxlciBjYW4gaGF2ZSBiZWVuIGRlc3Ryb3llZAotICAgIGlmIChtX3BlZXJDb25u
ZWN0aW9ucy5jb250YWlucyhjb250cm9sbGVyUGVlckNvbm5lY3Rpb25JZCkpIHsKLSAgICAgICAg
Y29uc3QgUmVxdWVzdCYgcGVlckNvbm5lY3Rpb24gPSBtX3BlZXJDb25uZWN0aW9ucy5nZXQoY29u
dHJvbGxlclBlZXJDb25uZWN0aW9uSWQpOwotICAgICAgICBBU1NFUlQocGVlckNvbm5lY3Rpb24u
ZnJhbWVDb250cm9sbGVyKCkpOwotICAgICAgICBwZWVyQ29ubmVjdGlvbi5mcmFtZUNvbnRyb2xs
ZXIoKS0+b25OZWdvdGlhdGlvbkRvbmUocGVlckNvbm5lY3Rpb24ubG9jYWxJZCgpKTsKLSAgICB9
Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShNRURJQV9T
VFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtQ29udHJv
bGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUNvbnRyb2xsZXIuaAppbmRl
eCA1NTUzNTg3ZS4uMTBhYzRjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9NZWRp
YVN0cmVhbUNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFt
Q29udHJvbGxlci5oCkBAIC02MCw0MCArNjAsMTkgQEAgcHVibGljOgogICAgIHZvaWQgc3RyZWFt
R2VuZXJhdGlvbkZhaWxlZChpbnQgcmVxdWVzdElkLCBOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvcjo6
RXJyb3JDb2RlKTsKICAgICB2b2lkIHN0cmVhbUZhaWxlZChjb25zdCBTdHJpbmcmIHN0cmVhbUxh
YmVsKTsKIAotICAgIC8qIEpTIC0+IFVBICovCi0gICAgdm9pZCBuZXdQZWVyQ29ubmVjdGlvbihN
ZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciosIGludCBmcmFtZVBlZXJDb25uZWN0aW9uSWQsIGNv
bnN0IFN0cmluZyYgY29uZmlndXJhdGlvbik7Ci0gICAgdm9pZCBzdGFydE5lZ290aWF0aW9uKE1l
ZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKiwgaW50IGZyYW1lUGVlckNvbm5lY3Rpb25JZCk7Ci0g
ICAgdm9pZCBwcm9jZXNzU2lnbmFsaW5nTWVzc2FnZShNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxl
ciosIGludCBmcmFtZVBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0g
ICAgdm9pZCBtZXNzYWdlKE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKiwgaW50IGZyYW1lUGVl
ckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLSAgICB2b2lkIGFkZFN0cmVh
bShNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciosIGludCBmcmFtZVBlZXJDb25uZWN0aW9uSWQs
IGNvbnN0IFN0cmluZyYgc3RyZWFtTGFiZWwpOwotICAgIHZvaWQgcmVtb3ZlU3RyZWFtKE1lZGlh
U3RyZWFtRnJhbWVDb250cm9sbGVyKiwgaW50IGZyYW1lUGVlckNvbm5lY3Rpb25JZCwgY29uc3Qg
U3RyaW5nJiBzdHJlYW1MYWJlbCk7Ci0gICAgdm9pZCBjbG9zZVBlZXJDb25uZWN0aW9uKE1lZGlh
U3RyZWFtRnJhbWVDb250cm9sbGVyKiwgaW50IGZyYW1lUGVlckNvbm5lY3Rpb25JZCk7Ci0KLSAg
ICAvKiBVQSAtPiBKUyAqLwotICAgIHZvaWQgb25TaWduYWxpbmdNZXNzYWdlKGludCBjb250cm9s
bGVyUGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLSAgICB2b2lkIG9u
TWVzc2FnZShpbnQgY29udHJvbGxlclBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgbWVz
c2FnZSk7Ci0gICAgdm9pZCBvbkFkZFN0cmVhbShpbnQgY29udHJvbGxlclBlZXJDb25uZWN0aW9u
SWQsIGNvbnN0IFN0cmluZyYgc3RyZWFtTGFiZWwsIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFj
a0xpc3Q+IHRyYWNrcyk7Ci0gICAgdm9pZCBvblJlbW92ZVN0cmVhbShpbnQgY29udHJvbGxlclBl
ZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgc3RyZWFtTGFiZWwpOwotICAgIHZvaWQgb25O
ZWdvdGlhdGlvblN0YXJ0ZWQoaW50IGNvbnRyb2xsZXJQZWVyQ29ubmVjdGlvbklkKTsKLSAgICB2
b2lkIG9uTmVnb3RpYXRpb25Eb25lKGludCBjb250cm9sbGVyUGVlckNvbm5lY3Rpb25JZCk7Ci0K
IHByaXZhdGU6CiAgICAgaW50IHJlZ2lzdGVyUmVxdWVzdChpbnQgbG9jYWxSZXF1ZXN0SWQsIE1l
ZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKik7CiAgICAgdm9pZCByZWdpc3RlclN0cmVhbShjb25z
dCBTdHJpbmcmIHN0cmVhbUxhYmVsLCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciopOwogCi0g
ICAgYm9vbCBmcmFtZVRvUGFnZVBlZXJDb25uZWN0aW9uSWQoTWVkaWFTdHJlYW1GcmFtZUNvbnRy
b2xsZXIqLCBpbnQgZnJhbWVQZWVyQ29ubmVjdGlvbklkLCBpbnQmIHBhZ2VQZWVyQ29ubmVjdGlv
bklkKTsKLQogICAgIGNsYXNzIFJlcXVlc3Q7CiAgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgUmVx
dWVzdD4gUmVxdWVzdE1hcDsKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBNZWRpYVN0cmVh
bUZyYW1lQ29udHJvbGxlcio+IFN0cmVhbU1hcDsKIAogICAgIFJlcXVlc3RNYXAgbV9yZXF1ZXN0
czsKICAgICBTdHJlYW1NYXAgbV9zdHJlYW1zOwotICAgIFJlcXVlc3RNYXAgbV9wZWVyQ29ubmVj
dGlvbnM7CiAKICAgICBNZWRpYVN0cmVhbUNsaWVudCogbV9jbGllbnQ7CiAgICAgaW50IG1fbmV4
dEdsb2JhbFJlcXVlc3RJZDsKLSAgICBpbnQgbV9uZXh0R2xvYmFsUGVlckNvbm5lY3Rpb25JZDsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9NZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlci5jcHAKaW5kZXggOWI2NzkyYS4uNmY2ZWNlNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxl
ci5jcHAKQEAgLTM2LDkgKzM2LDcgQEAKICNpbmNsdWRlICJOYXZpZ2F0b3JVc2VyTWVkaWFFcnJv
ckNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiTmF2aWdhdG9yVXNlck1lZGlhU3VjY2Vzc0NhbGxiYWNr
LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBlZXJDb25uZWN0aW9uLmgiCiAjaW5j
bHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlICJTaWduYWxpbmdDYWxsYmFjay5oIgog
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM2
MywxMjYgKzM2MSw2IEBAIHZvaWQgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6OnN0cmVhbUZh
aWxlZChjb25zdCBTdHJpbmcmIGxhYmVsKQogICAgIGdldFN0cmVhbUZyb21MYWJlbChsYWJlbCkt
PnN0cmVhbUVuZGVkKCk7CiB9CiAKLVBhc3NSZWZQdHI8UGVlckNvbm5lY3Rpb24+IE1lZGlhU3Ry
ZWFtRnJhbWVDb250cm9sbGVyOjpjcmVhdGVQZWVyQ29ubmVjdGlvbihjb25zdCBTdHJpbmcmIGNv
bmZpZ3VyYXRpb24sIFBhc3NSZWZQdHI8U2lnbmFsaW5nQ2FsbGJhY2s+IHNpZ25hbGluZ0NhbGxi
YWNrKQotewotICAgIGludCBjbGllbnRJZCA9IG1fY2xpZW50cy5nZXROZXh0SWQoKTsKLSAgICBS
ZWZQdHI8UGVlckNvbm5lY3Rpb24+IHBlZXJDb25uZWN0aW9uID0gUGVlckNvbm5lY3Rpb246OmNy
ZWF0ZSh0aGlzLCBjbGllbnRJZCwgY29uZmlndXJhdGlvbiwgc2lnbmFsaW5nQ2FsbGJhY2spOwot
ICAgIGlmIChwZWVyQ29ubmVjdGlvbikKLSAgICAgICAgbV9jbGllbnRzLmFkZChjbGllbnRJZCwg
cGVlckNvbm5lY3Rpb24uZ2V0KCkpOwotICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5yZWxlYXNl
KCk7Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6Om5ld1BlZXJDb25uZWN0
aW9uKGludCBwZWVyQ29ubmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIGNvbmZpZ3VyYXRpb24pCi17
Ci0gICAgaWYgKHBhZ2VDb250cm9sbGVyKCkpCi0gICAgICAgIHBhZ2VDb250cm9sbGVyKCktPm5l
d1BlZXJDb25uZWN0aW9uKHRoaXMsIHBlZXJDb25uZWN0aW9uSWQsIGNvbmZpZ3VyYXRpb24pOwot
fQotCi12b2lkIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjpjbG9zZVBlZXJDb25uZWN0aW9u
KGludCBwZWVyQ29ubmVjdGlvbklkKQotewotICAgIGlmIChwYWdlQ29udHJvbGxlcigpKQotICAg
ICAgICBwYWdlQ29udHJvbGxlcigpLT5jbG9zZVBlZXJDb25uZWN0aW9uKHRoaXMsIHBlZXJDb25u
ZWN0aW9uSWQpOwotfQotCi12b2lkIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjpzdGFydE5l
Z290aWF0aW9uKGludCBwZWVyQ29ubmVjdGlvbklkKQotewotICAgIGlmIChwYWdlQ29udHJvbGxl
cigpKQotICAgICAgICBwYWdlQ29udHJvbGxlcigpLT5zdGFydE5lZ290aWF0aW9uKHRoaXMsIHBl
ZXJDb25uZWN0aW9uSWQpOwotfQotCi12b2lkIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjpw
cm9jZXNzU2lnbmFsaW5nTWVzc2FnZShpbnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5n
JiBtZXNzYWdlKQotewotICAgIGlmIChwYWdlQ29udHJvbGxlcigpKQotICAgICAgICBwYWdlQ29u
dHJvbGxlcigpLT5wcm9jZXNzU2lnbmFsaW5nTWVzc2FnZSh0aGlzLCBwZWVyQ29ubmVjdGlvbklk
LCBtZXNzYWdlKTsKLX0KLQotdm9pZCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcjo6bWVzc2Fn
ZShpbnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGlm
IChwYWdlQ29udHJvbGxlcigpKQotICAgICAgICBwYWdlQ29udHJvbGxlcigpLT5tZXNzYWdlKHRo
aXMsIHBlZXJDb25uZWN0aW9uSWQsIG1lc3NhZ2UpOwotfQotCi12b2lkIE1lZGlhU3RyZWFtRnJh
bWVDb250cm9sbGVyOjphZGRTdHJlYW0oaW50IHBlZXJDb25uZWN0aW9uSWQsIFBhc3NSZWZQdHI8
TWVkaWFTdHJlYW0+IHBycFN0cmVhbSkKLXsKLSAgICBSZWZQdHI8TWVkaWFTdHJlYW0+IHN0cmVh
bSA9IHBycFN0cmVhbTsKLSAgICBBU1NFUlQobV9zdHJlYW1zLmNvbnRhaW5zKHN0cmVhbS0+bGFi
ZWwoKSkpOwotCi0gICAgaWYgKHBhZ2VDb250cm9sbGVyKCkpCi0gICAgICAgIHBhZ2VDb250cm9s
bGVyKCktPmFkZFN0cmVhbSh0aGlzLCBwZWVyQ29ubmVjdGlvbklkLCBzdHJlYW0tPmxhYmVsKCkp
OwotfQotCi12b2lkIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjpyZW1vdmVTdHJlYW0oaW50
IHBlZXJDb25uZWN0aW9uSWQsIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+IHBycFN0cmVhbSkKLXsK
LSAgICBSZWZQdHI8TWVkaWFTdHJlYW0+IHN0cmVhbSA9IHBycFN0cmVhbTsKLSAgICBBU1NFUlQo
bV9zdHJlYW1zLmNvbnRhaW5zKHN0cmVhbS0+bGFiZWwoKSkpOwotCi0gICAgaWYgKHBhZ2VDb250
cm9sbGVyKCkpCi0gICAgICAgIHBhZ2VDb250cm9sbGVyKCktPnJlbW92ZVN0cmVhbSh0aGlzLCBw
ZWVyQ29ubmVjdGlvbklkLCBzdHJlYW0tPmxhYmVsKCkpOwotfQotCi12b2lkIE1lZGlhU3RyZWFt
RnJhbWVDb250cm9sbGVyOjpvbk1lc3NhZ2UoaW50IHBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0
cmluZyYgbWVzc2FnZSkKLXsKLSAgICBBU1NFUlQobV9jbGllbnRzLmNvbnRhaW5zKHBlZXJDb25u
ZWN0aW9uSWQpKTsKLSAgICBBU1NFUlQobV9jbGllbnRzLmdldChwZWVyQ29ubmVjdGlvbklkKS0+
aXNQZWVyQ29ubmVjdGlvbigpKTsKLQotICAgIFJlZlB0cjxQZWVyQ29ubmVjdGlvbj4gcGVlckNv
bm5lY3Rpb24gPSBzdGF0aWNfY2FzdDxQZWVyQ29ubmVjdGlvbio+KG1fY2xpZW50cy5nZXQocGVl
ckNvbm5lY3Rpb25JZCkpOwotCi0gICAgcGVlckNvbm5lY3Rpb24tPm9uTWVzc2FnZShtZXNzYWdl
KTsKLX0KLQotdm9pZCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcjo6b25BZGRTdHJlYW0oaW50
IHBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgc3RyZWFtTGFiZWwsIFBhc3NSZWZQdHI8
TWVkaWFTdHJlYW1UcmFja0xpc3Q+IHRyYWNrcykKLXsKLSAgICBBU1NFUlQoIXN0cmVhbUxhYmVs
LmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKG1fY2xpZW50cy5jb250YWlucyhwZWVyQ29ubmVjdGlv
bklkKSk7Ci0gICAgQVNTRVJUKG1fY2xpZW50cy5nZXQocGVlckNvbm5lY3Rpb25JZCktPmlzUGVl
ckNvbm5lY3Rpb24oKSk7Ci0KLSAgICBSZWZQdHI8TWVkaWFTdHJlYW0+IHN0cmVhbSA9IE1lZGlh
U3RyZWFtOjpjcmVhdGUodGhpcywgc3RyZWFtTGFiZWwsIHRyYWNrcyk7Ci0KLSAgICBSZWZQdHI8
UGVlckNvbm5lY3Rpb24+IHBlZXJDb25uZWN0aW9uID0gc3RhdGljX2Nhc3Q8UGVlckNvbm5lY3Rp
b24qPihtX2NsaWVudHMuZ2V0KHBlZXJDb25uZWN0aW9uSWQpKTsKLSAgICBwZWVyQ29ubmVjdGlv
bi0+c3RyZWFtQWRkZWQoc3RyZWFtLnJlbGVhc2UoKSk7Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1G
cmFtZUNvbnRyb2xsZXI6Om9uUmVtb3ZlU3RyZWFtKGludCBwZWVyQ29ubmVjdGlvbklkLCBjb25z
dCBTdHJpbmcmIHN0cmVhbUxhYmVsKQotewotICAgIEFTU0VSVCghc3RyZWFtTGFiZWwuaXNFbXB0
eSgpKTsKLSAgICBBU1NFUlQobV9jbGllbnRzLmNvbnRhaW5zKHBlZXJDb25uZWN0aW9uSWQpKTsK
LSAgICBBU1NFUlQobV9jbGllbnRzLmdldChwZWVyQ29ubmVjdGlvbklkKS0+aXNQZWVyQ29ubmVj
dGlvbigpKTsKLQotICAgIFJlZlB0cjxQZWVyQ29ubmVjdGlvbj4gcGVlckNvbm5lY3Rpb24gPSBz
dGF0aWNfY2FzdDxQZWVyQ29ubmVjdGlvbio+KG1fY2xpZW50cy5nZXQocGVlckNvbm5lY3Rpb25J
ZCkpOwotICAgIHBlZXJDb25uZWN0aW9uLT5zdHJlYW1SZW1vdmVkKHN0cmVhbUxhYmVsKTsKLX0K
LQotdm9pZCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcjo6b25TaWduYWxpbmdNZXNzYWdlKGlu
dCBwZWVyQ29ubmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgQVNTRVJU
KG1fY2xpZW50cy5jb250YWlucyhwZWVyQ29ubmVjdGlvbklkKSk7Ci0gICAgQVNTRVJUKG1fY2xp
ZW50cy5nZXQocGVlckNvbm5lY3Rpb25JZCktPmlzUGVlckNvbm5lY3Rpb24oKSk7Ci0KLSAgICBS
ZWZQdHI8UGVlckNvbm5lY3Rpb24+IHBlZXJDb25uZWN0aW9uID0gc3RhdGljX2Nhc3Q8UGVlckNv
bm5lY3Rpb24qPihtX2NsaWVudHMuZ2V0KHBlZXJDb25uZWN0aW9uSWQpKTsKLSAgICBwZWVyQ29u
bmVjdGlvbi0+b25TaWduYWxpbmdNZXNzYWdlKG1lc3NhZ2UpOwotfQotCi12b2lkIE1lZGlhU3Ry
ZWFtRnJhbWVDb250cm9sbGVyOjpvbk5lZ290aWF0aW9uU3RhcnRlZChpbnQgcGVlckNvbm5lY3Rp
b25JZCkKLXsKLSAgICAvLyBGSVhNRTogQXNzZXJ0IG9yIG5vdD8KLSAgICBBU1NFUlQobV9jbGll
bnRzLmNvbnRhaW5zKHBlZXJDb25uZWN0aW9uSWQpKTsKLSAgICBBU1NFUlQobV9jbGllbnRzLmdl
dChwZWVyQ29ubmVjdGlvbklkKS0+aXNQZWVyQ29ubmVjdGlvbigpKTsKLQotICAgIFJlZlB0cjxQ
ZWVyQ29ubmVjdGlvbj4gcGVlckNvbm5lY3Rpb24gPSBzdGF0aWNfY2FzdDxQZWVyQ29ubmVjdGlv
bio+KG1fY2xpZW50cy5nZXQocGVlckNvbm5lY3Rpb25JZCkpOwotCi0gICAgcGVlckNvbm5lY3Rp
b24tPm9uTmVnb3RpYXRpb25TdGFydGVkKCk7Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1GcmFtZUNv
bnRyb2xsZXI6Om9uTmVnb3RpYXRpb25Eb25lKGludCBwZWVyQ29ubmVjdGlvbklkKQotewotICAg
IC8vIEZJWE1FOiBBc3NlcnQgb3Igbm90PwotICAgIEFTU0VSVChtX2NsaWVudHMuY29udGFpbnMo
cGVlckNvbm5lY3Rpb25JZCkpOwotICAgIEFTU0VSVChtX2NsaWVudHMuZ2V0KHBlZXJDb25uZWN0
aW9uSWQpLT5pc1BlZXJDb25uZWN0aW9uKCkpOwotCi0gICAgUmVmUHRyPFBlZXJDb25uZWN0aW9u
PiBwZWVyQ29ubmVjdGlvbiA9IHN0YXRpY19jYXN0PFBlZXJDb25uZWN0aW9uKj4obV9jbGllbnRz
LmdldChwZWVyQ29ubmVjdGlvbklkKSk7Ci0KLSAgICBwZWVyQ29ubmVjdGlvbi0+b25OZWdvdGlh
dGlvbkRvbmUoKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5B
QkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFT
dHJlYW1GcmFtZUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1G
cmFtZUNvbnRyb2xsZXIuaAppbmRleCBlNTE0NzI1Li42YTM5YWZlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlci5oCkBAIC00NSw3ICs0NSw2
IEBAIGNsYXNzIE1lZGlhU3RyZWFtVHJhY2tMaXN0OwogY2xhc3MgTmF2aWdhdG9yVXNlck1lZGlh
RXJyb3JDYWxsYmFjazsKIGNsYXNzIE5hdmlnYXRvclVzZXJNZWRpYVN1Y2Nlc3NDYWxsYmFjazsK
IGNsYXNzIFBhZ2U7Ci1jbGFzcyBQZWVyQ29ubmVjdGlvbjsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ7CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKIGNsYXNzIFNpZ25hbGluZ0NhbGxiYWNr
OwpAQCAtNzEsNyArNzAsNiBAQCBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc01lZGlh
U3RyZWFtKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlz
TG9jYWxNZWRpYVN0cmVhbSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1
YWwgYm9vbCBpc0dlbmVyaWNDbGllbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgICAg
ICB2aXJ0dWFsIGJvb2wgaXNQZWVyQ29ubmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CiAKICAgICAgICAgLy8gQ2FsbGVkIHdoZW4gdGhlIGZyYW1lIGNvbnRyb2xsZXIgaXMgYmVpbmcg
ZGlzY29ubmVjdGVkIHRvIHRoZSBNZWRpYVN0cmVhbUNsaWVudCBlbWJlZGRlci4KICAgICAgICAg
Ly8gQ2xpZW50cyBzaG91bGQgb3ZlcnJpZGUgdGhpcyB0byBzZW5kIGFueSByZXF1aXJlZCBzaHV0
ZG93biBtZXNzYWdlcy4KQEAgLTE0MCwxMyArMTM4LDYgQEAgcHVibGljOgogICAgICAgICB2aXJ0
dWFsIHZvaWQgdW5yZWdpc3RlcigpIHsgdW5yZWdpc3RlckNsaWVudCh0aGlzKTsgfQogICAgIH07
CiAKLSAgICBjbGFzcyBQZWVyQ29ubmVjdGlvbkNsaWVudCA6IHB1YmxpYyBHZW5lcmljQ2xpZW50
IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFBlZXJDb25uZWN0aW9uQ2xpZW50KE1lZGlhU3RyZWFt
RnJhbWVDb250cm9sbGVyKiBmcmFtZUNvbnRyb2xsZXIsIGludCBpZCkgOiBHZW5lcmljQ2xpZW50
KGZyYW1lQ29udHJvbGxlciwgaWQpIHsgfQotICAgICAgICB2aXJ0dWFsIH5QZWVyQ29ubmVjdGlv
bkNsaWVudCgpIHsgfQotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNQZWVyQ29ubmVjdGlvbigpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB9OwotCiAgICAgTWVkaWFTdHJlYW1GcmFtZUNvbnRy
b2xsZXIoRnJhbWUqKTsKICAgICB2aXJ0dWFsIH5NZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcigp
OwogCkBAIC0xNjMsMjggKzE1NCwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdG9wR2VuZXJhdGVk
U3RyZWFtKGNvbnN0IFN0cmluZyYgc3RyZWFtTGFiZWwpOwogICAgIHZvaWQgc2V0TWVkaWFTdHJl
YW1UcmFja0VuYWJsZWQoY29uc3QgU3RyaW5nJiB0cmFja0lkLCBib29sIGVuYWJsZWQpOwogCi0g
ICAgUGFzc1JlZlB0cjxQZWVyQ29ubmVjdGlvbj4gY3JlYXRlUGVlckNvbm5lY3Rpb24oY29uc3Qg
U3RyaW5nJiBjb25maWd1cmF0aW9uLCBQYXNzUmVmUHRyPFNpZ25hbGluZ0NhbGxiYWNrPik7Ci0g
ICAgdm9pZCBuZXdQZWVyQ29ubmVjdGlvbihpbnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3Ry
aW5nJiBjb25maWd1cmF0aW9uKTsKLSAgICB2b2lkIHN0YXJ0TmVnb3RpYXRpb24oaW50IHBlZXJD
b25uZWN0aW9uSWQpOwotICAgIHZvaWQgcHJvY2Vzc1NpZ25hbGluZ01lc3NhZ2UoaW50IHBlZXJD
b25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0gICAgdm9pZCBtZXNzYWdlKGlu
dCBwZWVyQ29ubmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwotICAgIHZvaWQgYWRk
U3RyZWFtKGludCBwZWVyQ29ubmVjdGlvbklkLCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPik7Ci0g
ICAgdm9pZCByZW1vdmVTdHJlYW0oaW50IHBlZXJDb25uZWN0aW9uSWQsIFBhc3NSZWZQdHI8TWVk
aWFTdHJlYW0+KTsKLSAgICB2b2lkIGNsb3NlUGVlckNvbm5lY3Rpb24oaW50IHBlZXJDb25uZWN0
aW9uSWQpOwotCiAgICAgLy8gLS0tIENhbGxzIGNvbWluZyBiYWNrIGZyb20gdGhlIGNvbnRyb2xs
ZXIuIC0tLSAvLwogCiAgICAgdm9pZCBzdHJlYW1HZW5lcmF0ZWQoaW50IHJlcXVlc3RJZCwgY29u
c3QgU3RyaW5nJiBzdHJlYW1MYWJlbCwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrTGlzdD4g
dHJhY2tzKTsKICAgICB2b2lkIHN0cmVhbUdlbmVyYXRpb25GYWlsZWQoaW50IHJlcXVlc3RJZCwg
TmF2aWdhdG9yVXNlck1lZGlhRXJyb3I6OkVycm9yQ29kZSk7CiAgICAgdm9pZCBzdHJlYW1GYWls
ZWQoY29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCk7CiAKLSAgICB2b2lkIG9uU2lnbmFsaW5nTWVz
c2FnZShpbnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLSAgICB2
b2lkIG9uTWVzc2FnZShpbnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdl
KTsKLSAgICB2b2lkIG9uQWRkU3RyZWFtKGludCBwZWVyQ29ubmVjdGlvbklkLCBjb25zdCBTdHJp
bmcmIHN0cmVhbUxhYmVsLCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tMaXN0Pik7Ci0gICAg
dm9pZCBvblJlbW92ZVN0cmVhbShpbnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBz
dHJlYW1MYWJlbCk7Ci0gICAgdm9pZCBvbk5lZ290aWF0aW9uU3RhcnRlZChpbnQgcGVlckNvbm5l
Y3Rpb25JZCk7Ci0gICAgdm9pZCBvbk5lZ290aWF0aW9uRG9uZShpbnQgcGVlckNvbm5lY3Rpb25J
ZCk7Ci0KIHByaXZhdGU6CiAgICAgY2xhc3MgUmVxdWVzdDsKICAgICBjbGFzcyBHZW5lcmF0ZVN0
cmVhbVJlcXVlc3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110722</attachid>
            <date>2011-10-12 12:38:49 -0700</date>
            <delta_ts>2011-10-12 14:18:32 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-68462-20111012123847.patch</filename>
            <type>text/plain</type>
            <size>56171</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3Mjg3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTkgQEAKKzIwMTEtMTAtMTIgIEFkYW0gQmVy
Z2t2aXN0ICA8YWRhbS5iZXJna3Zpc3RAZXJpY3Nzb24uY29tPgorCisgICAgICAgIFVwZGF0ZSBQ
ZWVyQ29ubmVjdGlvbiB0byB1c2UgV2ViQ29yZSBwbGF0Zm9ybSBpbnRlcmZhY2VzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODQ2MgorCisgICAgICAg
IFJldmlld2VkIGJ5IEFkYW0gQmFydGguCisKKyAgICAgICAgQ3VycmVudGx5IG5vdCB0ZXN0YWJs
ZS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU1BlZXJDb25uZWN0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTUGVlckNvbm5lY3Rpb25Db25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNQZWVyQ29u
bmVjdGlvbik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4UGVlckNvbm5lY3Rpb25D
dXN0b20uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGRvbS9NZWRpYVN0cmVhbUxpc3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1MaXN0OjppdGVtKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhU3RyZWFtTGlzdDo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3Ry
ZWFtTGlzdDo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtTGlzdDo6Y29u
dGFpbnMpOgorICAgICAgICAqIGRvbS9NZWRpYVN0cmVhbUxpc3QuaDoKKyAgICAgICAgKiBwMnAv
UGVlckNvbm5lY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6UGVlckNvbm5lY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246OnByb2Nlc3NTaWduYWxpbmdNZXNz
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uOjpyZWFkeVN0YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uOjpzZW5kKToKKyAgICAgICAgKFdlYkNvcmU6
OlBlZXJDb25uZWN0aW9uOjphZGRTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5l
Y3Rpb246OnJlbW92ZVN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6
bG9jYWxTdHJlYW1zKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uOjpyZW1vdGVT
dHJlYW1zKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uOjpjbG9zZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6aWNlUHJvY2Vzc2luZ0NvbXBsZXRlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6c2RwR2VuZXJhdGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uOjpkYXRhU3RyZWFtTWVzc2FnZVJlY2VpdmVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uOjpyZW1vdGVTdHJlYW1BZGRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6cmVtb3RlU3RyZWFtUmVtb3ZlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6c3RvcCk6CisgICAgICAgIChXZWJDb3Jl
OjpQZWVyQ29ubmVjdGlvbjo6c2NoZWR1bGVJbml0aWFsTmVnb3RpYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6UGVlckNvbm5lY3Rpb246OmluaXRpYWxOZWdvdGlhdGlvblRpbWVyRmlyZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246OmVuc3VyZVN0cmVhbUNoYW5nZVNjaGVk
dWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6c3RyZWFtQ2hhbmdlVGlt
ZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6c2NoZWR1bGVSZWFk
eVN0YXRlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uOjpyZWFkeVN0
YXRlQ2hhbmdlVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6
Y2hhbmdlUmVhZHlTdGF0ZSk6CisgICAgICAgICogcDJwL1BlZXJDb25uZWN0aW9uLmg6CisgICAg
ICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6cmVmRXZlbnRUYXJnZXQpOgorICAgICAgICAo
V2ViQ29yZTo6UGVlckNvbm5lY3Rpb246OmRlcmVmRXZlbnRUYXJnZXQpOgorICAgICAgICAqIHAy
cC9QZWVyQ29ubmVjdGlvbi5pZGw6CisgICAgICAgICogcGFnZS9NZWRpYVN0cmVhbUNsaWVudC5o
OgorICAgICAgICAqIHBhZ2UvTWVkaWFTdHJlYW1Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhU3RyZWFtQ29udHJvbGxlcjo6TWVkaWFTdHJlYW1Db250cm9sbGVyKToKKyAg
ICAgICAgKiBwYWdlL01lZGlhU3RyZWFtQ29udHJvbGxlci5oOgorICAgICAgICAqIHBhZ2UvTWVk
aWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAqIHBhZ2UvTWVkaWFTdHJlYW1G
cmFtZUNvbnRyb2xsZXIuaDoKKwogMjAxMS0xMC0xMiAgQW5uYSBDYXZlbmRlciAgPGFubmFjY0Bj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgTW92aW5nIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgdG8g
dGhlIGZyb250IG9mIHRoZSBhcmd1bWVudCBsaXN0IGZvcgpJbmRleDogU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQko
cmV2aXNpb24gOTcyODcpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcg
Y29weSkKQEAgLTIyMTgsNyArMjIxOCw2IEBACiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4Tm9kZUN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OE5vZGVMaXN0Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Tm90aWZpY2F0aW9uQ2VudGVyQ3VzdG9tLmNwcCcsCi0gICAgICAgICAgICAnYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4UGVlckNvbm5lY3Rpb25DdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5n
cy92OC9jdXN0b20vVjhQZXJmb3JtYW5jZUN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOFBvcFN0YXRlRXZlbnRDdXN0b20uY3BwJywKICAgICAgICAgICAgICdi
aW5kaW5ncy92OC9jdXN0b20vVjhTUUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcCcsCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnBybwkocmV2aXNpb24gOTcyODcpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnBybwkod29ya2luZyBjb3B5KQpAQCAtMzMyMyw4ICszMzIzLDcgQEAgY29udGFpbnMoREVGSU5F
UywgRU5BQkxFX01FRElBX1NUUkVBTT0xKQogCiAgICAgdjggewogICAgICAgICBTT1VSQ0VTICs9
IFwKLSAgICAgICAgICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOE5hdmlnYXRvckN1c3RvbS5jcHAg
XAotICAgICAgICAgICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4UGVlckNvbm5lY3Rpb25DdXN0b20u
Y3BwCisgICAgICAgICAgICBiaW5kaW5ncy92OC9jdXN0b20vVjhOYXZpZ2F0b3JDdXN0b20uY3Bw
CiAgICAgfSBlbHNlIHsKICAgICAgICAgU09VUkNFUyArPSBcCiAgICAgICAgICAgICBiaW5kaW5n
cy9qcy9KU05hdmlnYXRvckN1c3RvbS5jcHAgXApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNQZWVyQ29ubmVjdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNQZWVyQ29ubmVjdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDk3
Mjg3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQZWVyQ29ubmVjdGlvbkN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDIyICszMCwyNSBAQAogI2luY2x1ZGUgIkpTUGVlckNvbm5l
Y3Rpb24uaCIKIAogI2luY2x1ZGUgIkNhbGxiYWNrRnVuY3Rpb24uaCIKLSNpbmNsdWRlICJET01X
aW5kb3cuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkpTRE9NV2luZG93Q3VzdG9t
LmgiCiAjaW5jbHVkZSAiSlNTaWduYWxpbmdDYWxsYmFjay5oIgotI2luY2x1ZGUgIk1lZGlhU3Ry
ZWFtRnJhbWVDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiUGVlckNvbm5lY3Rpb24uaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgeworI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KIAogdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKIAorbmFtZXNwYWNlIFdlYkNvcmUgeworCiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIEpTUGVlckNvbm5lY3Rpb25Db25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNQZWVyQ29u
bmVjdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNQZWVyQ29ubmVjdGlvbkNvbnN0cnVj
dG9yKiBqc0NvbnN0cnVjdG9yID0gc3RhdGljX2Nhc3Q8SlNQZWVyQ29ubmVjdGlvbkNvbnN0cnVj
dG9yKj4oZXhlYy0+Y2FsbGVlKCkpOworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQgPSBqc0NvbnN0cnVjdG9yLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgaWYgKCFj
b250ZXh0KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJlZmVyZW5j
ZUVycm9yKGV4ZWMsICJQZWVyQ29ubmVjdGlvbiBjb25zdHJ1Y3RvciBhc3NvY2lhdGVkIGRvY3Vt
ZW50IGlzIHVuYXZhaWxhYmxlIikpOworCisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8
IDIpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4
ZWMsICJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpKTsKIAotICAgIFN0cmluZyBjb25maWd1cmF0aW9u
ID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKTsKKyAg
ICBTdHJpbmcgc2VydmVyQ29uZmlndXJhdGlvbiA9IHVzdHJpbmdUb1N0cmluZyhleGVjLT5hcmd1
bWVudCgwKS50b1N0cmluZyhleGVjKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAKQEAgLTUyLDE3ICs1
Niw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNQZWVyQ29ubmUKICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNW
YWx1ZSgpKTsKIAotICAgIEZyYW1lKiBmcmFtZSA9IGFzSlNET01XaW5kb3coZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpKS0+aW1wbCgpLT5mcmFtZSgpOwotICAgIE1lZGlhU3RyZWFtRnJhbWVD
b250cm9sbGVyKiBmcmFtZUNvbnRyb2xsZXIgPSBmcmFtZSA/IGZyYW1lLT5tZWRpYVN0cmVhbUZy
YW1lQ29udHJvbGxlcigpIDogMDsKLQotICAgIFJlZlB0cjxQZWVyQ29ubmVjdGlvbj4gcGVlckNv
bm5lY3Rpb247Ci0gICAgaWYgKGZyYW1lQ29udHJvbGxlcikKLSAgICAgICAgcGVlckNvbm5lY3Rp
b24gPSBmcmFtZUNvbnRyb2xsZXItPmNyZWF0ZVBlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24s
IHNpZ25hbGluZ0NhbGxiYWNrKTsKLQotICAgIGlmICghcGVlckNvbm5lY3Rpb24pCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKLQotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoYXNPYmplY3QodG9KUyhleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3Qo
KSwgcGVlckNvbm5lY3Rpb24uZ2V0KCkpKSk7CisgICAgUmVmUHRyPFBlZXJDb25uZWN0aW9uPiBw
ZWVyQ29ubmVjdGlvbiA9IFBlZXJDb25uZWN0aW9uOjpjcmVhdGUoY29udGV4dCwgc2VydmVyQ29u
ZmlndXJhdGlvbiwgc2lnbmFsaW5nQ2FsbGJhY2sucmVsZWFzZSgpKTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKENSRUFURV9ET01fV1JBUFBFUihleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9i
YWxPYmplY3QoKSwgUGVlckNvbm5lY3Rpb24sIHBlZXJDb25uZWN0aW9uLmdldCgpKSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOFBlZXJDb25uZWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhQZWVyQ29ubmVjdGlvbkN1c3RvbS5jcHAJKHJl
dmlzaW9uIDk3Mjg3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4UGVl
ckNvbm5lY3Rpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc5ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAq
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShNRURJQV9TVFJF
QU0pCi0KLSNpbmNsdWRlICJWOFBlZXJDb25uZWN0aW9uLmgiCi0KLSNpbmNsdWRlICJET01XaW5k
b3cuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNp
bmNsdWRlICJNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIlBlZXJDb25u
ZWN0aW9uLmgiCi0jaW5jbHVkZSAiVjhCaW5kaW5nLmgiCi0jaW5jbHVkZSAiVjhQcm94eS5oIgot
I2luY2x1ZGUgIlY4U2lnbmFsaW5nQ2FsbGJhY2suaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhQZWVyQ29ubmVjdGlvbjo6Y29uc3RydWN0b3JDYWxs
YmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQotewotICAgIElOQ19TVEFUUygiRE9NLlBl
ZXJDb25uZWN0aW9uLkNvbnN0cnVjdG9yIik7Ci0KLSAgICBpZiAoIWFyZ3MuSXNDb25zdHJ1Y3RD
YWxsKCkpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJET00gb2JqZWN0IGNvbnN0cnVjdG9y
IGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4iLCBWOFByb3h5OjpUeXBlRXJyb3IpOwot
Ci0gICAgaW50IGFyZ0xlbmd0aCA9IGFyZ3MuTGVuZ3RoKCk7Ci0gICAgaWYgKGFyZ0xlbmd0aCAh
PSAyKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiVGhlIFBlZXJDb25uZWN0aW9uIGNvbnN0
cnVjdG9yIHRha2VzIHR3byBhcmd1bWVudHMuIiwgVjhQcm94eTo6VHlwZUVycm9yKTsKLQotICAg
IHY4OjpUcnlDYXRjaCBleGNlcHRpb25DYXRjaGVyOwotICAgIFN0cmluZyBjb25maWd1cmF0aW9u
ID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0tPlRvU3RyaW5nKCkpOwotICAgIGlmIChleGNlcHRp
b25DYXRjaGVyLkhhc0NhdWdodCgpKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGNlcHRp
b25DYXRjaGVyLkV4Y2VwdGlvbigpKTsKLQotICAgIGJvb2wgc3VjY2VlZGVkID0gZmFsc2U7Ci0g
ICAgUmVmUHRyPFNpZ25hbGluZ0NhbGxiYWNrPiBzaWduYWxpbmdDYWxsYmFjayA9IGNyZWF0ZUZ1
bmN0aW9uT25seUNhbGxiYWNrPFY4U2lnbmFsaW5nQ2FsbGJhY2s+KGFyZ3NbMV0sIHN1Y2NlZWRl
ZCk7Ci0gICAgaWYgKCFzdWNjZWVkZWQgfHwgIXNpZ25hbGluZ0NhbGxiYWNrKQotICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcigiVGhlIFBlZXJDb25uZWN0aW9uIGNvbnN0cnVjdG9yIG11c3QgYmUg
Z2l2ZW4gYSBTaWduYWxpbmdDYWxsYmFjayBjYWxsYmFjay4iLCBWOFByb3h5OjpUeXBlRXJyb3Ip
OwotCi0gICAgRnJhbWUqIGZyYW1lID0gVjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckVudGVyZWRD
b250ZXh0KCk7Ci0gICAgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqIGZyYW1lQ29udHJvbGxl
ciA9IGZyYW1lID8gZnJhbWUtPm1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKCkgOiAwOwotCi0g
ICAgUmVmUHRyPFBlZXJDb25uZWN0aW9uPiBwZWVyQ29ubmVjdGlvbjsKLSAgICBpZiAoZnJhbWVD
b250cm9sbGVyKQotICAgICAgICBwZWVyQ29ubmVjdGlvbiA9IGZyYW1lQ29udHJvbGxlci0+Y3Jl
YXRlUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbiwgc2lnbmFsaW5nQ2FsbGJhY2spOwotCi0g
ICAgaWYgKCFwZWVyQ29ubmVjdGlvbikKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsK
LQotICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcihhcmdzLkhvbGRlcigpLCAmaW5mbywg
cGVlckNvbm5lY3Rpb24uZ2V0KCkpOwotICAgIHJldHVybiB0b1Y4KHBlZXJDb25uZWN0aW9uLnJl
bGVhc2UoKSwgYXJncy5Ib2xkZXIoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
TWVkaWFTdHJlYW1MaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTWVk
aWFTdHJlYW1MaXN0LmNwcAkocmV2aXNpb24gOTcyODcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
TWVkaWFTdHJlYW1MaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDcsNDcgKzQ4LDI4IEBAIHVuc2lnbmVk
IE1lZGlhU3RyZWFtTGlzdDo6bGVuZ3RoKCkgY29uc3QKICAgICByZXR1cm4gbV9zdHJlYW1zLnNp
emUoKTsKIH0KIAotUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4gTWVkaWFTdHJlYW1MaXN0OjppdGVt
KHVuc2lnbmVkIGluZGV4KSBjb25zdAorTWVkaWFTdHJlYW0qIE1lZGlhU3RyZWFtTGlzdDo6aXRl
bSh1bnNpZ25lZCBpbmRleCkgY29uc3QKIHsKLSAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPE1l
ZGlhU3RyZWFtPiA+Ojpjb25zdF9pdGVyYXRvciBpID0gbV9zdHJlYW1zLmJlZ2luKCk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBqID0gMDsgaSAhPSBtX3N0cmVhbXMuZW5kKCk7ICsraSwgKytqKSB7Ci0g
ICAgICAgIGlmIChqID09IGluZGV4KQotICAgICAgICAgICAgcmV0dXJuIGktPnNlY29uZDsKLSAg
ICB9Ci0gICAgcmV0dXJuIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+KCk7CisgICAgcmV0dXJuIG1f
c3RyZWFtc1tpbmRleF0uZ2V0KCk7CiB9CiAKLXZvaWQgTWVkaWFTdHJlYW1MaXN0OjphZGQoUGFz
c1JlZlB0cjxNZWRpYVN0cmVhbT4gc3RyZWFtKQordm9pZCBNZWRpYVN0cmVhbUxpc3Q6OmFwcGVu
ZChQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPiBzdHJlYW0pCiB7Ci0gICAgUmVmUHRyPE1lZGlhU3Ry
ZWFtPiBzID0gc3RyZWFtOwotICAgIEFTU0VSVCghY29udGFpbnMocykpOwotICAgIG1fc3RyZWFt
cy5hZGQocy0+bGFiZWwoKSwgcyk7CisgICAgbV9zdHJlYW1zLmFwcGVuZChzdHJlYW0pOwogfQog
Ci12b2lkIE1lZGlhU3RyZWFtTGlzdDo6cmVtb3ZlKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+IHN0
cmVhbSkKK3ZvaWQgTWVkaWFTdHJlYW1MaXN0OjpyZW1vdmUoY29uc3QgTWVkaWFTdHJlYW0qIHN0
cmVhbSkKIHsKLSAgICBSZWZQdHI8TWVkaWFTdHJlYW0+IHMgPSBzdHJlYW07Ci0gICAgQVNTRVJU
KGNvbnRhaW5zKHMpKTsKLSAgICBtX3N0cmVhbXMucmVtb3ZlKHMtPmxhYmVsKCkpOworICAgIHNp
emVfdCBpID0gbV9zdHJlYW1zLmZpbmQoc3RyZWFtKTsKKyAgICBpZiAoaSAhPSBub3RGb3VuZCkK
KyAgICAgICAgcmV0dXJuIG1fc3RyZWFtcy5yZW1vdmUoaSk7CiB9CiAKLWJvb2wgTWVkaWFTdHJl
YW1MaXN0Ojpjb250YWlucyhQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPiBzdHJlYW0pIGNvbnN0Citi
b29sIE1lZGlhU3RyZWFtTGlzdDo6Y29udGFpbnMoY29uc3QgTWVkaWFTdHJlYW0qIHN0cmVhbSkg
Y29uc3QKIHsKLSAgICBSZWZQdHI8TWVkaWFTdHJlYW0+IHMgPSBzdHJlYW07Ci0gICAgcmV0dXJu
IG1fc3RyZWFtcy5jb250YWlucyhzLT5sYWJlbCgpKTsKKyAgICByZXR1cm4gbV9zdHJlYW1zLmNv
bnRhaW5zKHN0cmVhbSk7CiB9CiAKLWJvb2wgTWVkaWFTdHJlYW1MaXN0Ojpjb250YWlucyhjb25z
dCBTdHJpbmcmIGxhYmVsKSBjb25zdAotewotICAgIHJldHVybiBtX3N0cmVhbXMuY29udGFpbnMo
bGFiZWwpOwotfQotCi1QYXNzUmVmUHRyPE1lZGlhU3RyZWFtPiBNZWRpYVN0cmVhbUxpc3Q6Omdl
dChjb25zdCBTdHJpbmcmIGxhYmVsKSBjb25zdAotewotICAgIHJldHVybiBtX3N0cmVhbXMuZ2V0
KGxhYmVsKTsKLX0KLQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFC
TEUoTUVESUFfU1RSRUFNKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL01lZGlhU3RyZWFtTGlz
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9NZWRpYVN0cmVhbUxpc3QuaAko
cmV2aXNpb24gOTcyODcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTWVkaWFTdHJlYW1MaXN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDEwICsyOCw2IEBACiAjaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkKIAogI2luY2x1ZGUgIk1lZGlhU3RyZWFtLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
LSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQy
LDE5ICszOCwxNyBAQCBwdWJsaWM6CiAKICAgICAvLyBET00gbWV0aG9kcyAmIGF0dHJpYnV0ZXMg
Zm9yIE1lZGlhU3RyZWFtTGlzdAogICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwotICAgIFBh
c3NSZWZQdHI8TWVkaWFTdHJlYW0+IGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OworICAgIE1l
ZGlhU3RyZWFtKiBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKIAogICAgIC8vIExpc3QgbWFu
aXB1bGF0aW9uCi0gICAgdm9pZCBhZGQoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4pOwotICAgIHZv
aWQgcmVtb3ZlKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+KTsKLSAgICBib29sIGNvbnRhaW5zKFBh
c3NSZWZQdHI8TWVkaWFTdHJlYW0+KSBjb25zdDsKLSAgICBib29sIGNvbnRhaW5zKGNvbnN0IFN0
cmluZyYgbGFiZWwpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+IGdldChjb25z
dCBTdHJpbmcmIGxhYmVsKSBjb25zdDsKKyAgICB2b2lkIGFwcGVuZChQYXNzUmVmUHRyPE1lZGlh
U3RyZWFtPik7CisgICAgdm9pZCByZW1vdmUoY29uc3QgTWVkaWFTdHJlYW0qKTsKKyAgICBib29s
IGNvbnRhaW5zKGNvbnN0IE1lZGlhU3RyZWFtKikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgTWVk
aWFTdHJlYW1MaXN0KCk7CiAKLSAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPE1lZGlhU3RyZWFt
PiA+IG1fc3RyZWFtczsKKyAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtPiA+IG1fc3RyZWFt
czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Ay
cC9QZWVyQ29ubmVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcDJwL1Bl
ZXJDb25uZWN0aW9uLmNwcAkocmV2aXNpb24gOTcyODcpCisrKyBTb3VyY2UvV2ViQ29yZS9wMnAv
UGVlckNvbm5lY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw2MSArMjgsNDEgQEAKIAogI2lmIEVO
QUJMRShNRURJQV9TVFJFQU0pCiAKLSNpbmNsdWRlICJEaXNwYXRjaFRhc2suaCIKLSNpbmNsdWRl
ICJFcnJvckV2ZW50LmgiCi0jaW5jbHVkZSAiRXZlbnQuaCIKLSNpbmNsdWRlICJFdmVudE5hbWVz
LmgiCi0jaW5jbHVkZSAiTWVkaWFTdHJlYW0uaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgi
CiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1FdmVudC5oIgotI2luY2x1ZGUgIk1lZGlhU3RyZWFtTGlz
dC5oIgogI2luY2x1ZGUgIk1lc3NhZ2VFdmVudC5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuaCIKLSNpbmNsdWRlICJTaWduYWxpbmdDYWxsYmFjay5oIgorI2luY2x1ZGUgIlNl
Y3VyaXR5T3JpZ2luLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxQZWVy
Q29ubmVjdGlvbj4gUGVlckNvbm5lY3Rpb246OmNyZWF0ZShNZWRpYVN0cmVhbUZyYW1lQ29udHJv
bGxlciogZnJhbWVDb250cm9sbGVyLCBpbnQgaWQsIGNvbnN0IFN0cmluZyYgY29uZmlndXJhdGlv
biwgUGFzc1JlZlB0cjxTaWduYWxpbmdDYWxsYmFjaz4gc2lnbmFsaW5nQ2FsbGJhY2spCitQYXNz
UmVmUHRyPFBlZXJDb25uZWN0aW9uPiBQZWVyQ29ubmVjdGlvbjo6Y3JlYXRlKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgc2VydmVyQ29uZmlndXJhdGlvbiwg
UGFzc1JlZlB0cjxTaWduYWxpbmdDYWxsYmFjaz4gc2lnbmFsaW5nQ2FsbGJhY2spCiB7Ci0gICAg
Ly8gRklYTUU6IFZlcmlmeSB0aGF0IGNvbmZpZ3VyYXRpb24gZm9sbG93cyB0aGUgc3BlY2lmaWVk
IGZvcm1hdCwgaWYgbm90IHJldHVybiBudWxsLgorICAgIFJlZlB0cjxQZWVyQ29ubmVjdGlvbj4g
Y29ubmVjdGlvbiA9IGFkb3B0UmVmKG5ldyBQZWVyQ29ubmVjdGlvbihzZXJ2ZXJDb25maWd1cmF0
aW9uLCBzaWduYWxpbmdDYWxsYmFjaywgY29udGV4dCkpOworICAgIGNvbm5lY3Rpb24tPnNldFBl
bmRpbmdBY3Rpdml0eShjb25uZWN0aW9uLmdldCgpKTsKKyAgICBjb25uZWN0aW9uLT5zY2hlZHVs
ZUluaXRpYWxOZWdvdGlhdGlvbigpOwogCi0gICAgUmVmUHRyPFBlZXJDb25uZWN0aW9uPiBwZWVy
Q29ubmVjdGlvbiA9IGFkb3B0UmVmKG5ldyBQZWVyQ29ubmVjdGlvbihmcmFtZUNvbnRyb2xsZXIs
IGlkLCBjb25maWd1cmF0aW9uLCBzaWduYWxpbmdDYWxsYmFjaykpOwotICAgIHBlZXJDb25uZWN0
aW9uLT5pbml0KCk7Ci0gICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnJlbGVhc2UoKTsKKyAgICBy
ZXR1cm4gY29ubmVjdGlvbi5yZWxlYXNlKCk7CiB9CiAKLVBlZXJDb25uZWN0aW9uOjpQZWVyQ29u
bmVjdGlvbihNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciogZnJhbWVDb250cm9sbGVyLCBpbnQg
aWQsIGNvbnN0IFN0cmluZyYgY29uZmlndXJhdGlvbiwgUGFzc1JlZlB0cjxTaWduYWxpbmdDYWxs
YmFjaz4gc2lnbmFsaW5nQ2FsbGJhY2spCi0gICAgOiBQZWVyQ29ubmVjdGlvbkNsaWVudChmcmFt
ZUNvbnRyb2xsZXIsIGlkKQotICAgICwgbV9jb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24pCi0g
ICAgLCBtX3JlYWR5U3RhdGUoTkVXKQorUGVlckNvbm5lY3Rpb246OlBlZXJDb25uZWN0aW9uKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgc2VydmVyQ29uZmln
dXJhdGlvbiwgUGFzc1JlZlB0cjxTaWduYWxpbmdDYWxsYmFjaz4gc2lnbmFsaW5nQ2FsbGJhY2sp
CisgICAgOiBBY3RpdmVET01PYmplY3QoY29udGV4dCwgdGhpcykKICAgICAsIG1fc2lnbmFsaW5n
Q2FsbGJhY2soc2lnbmFsaW5nQ2FsbGJhY2spCisgICAgLCBtX3JlYWR5U3RhdGUoTkVXKQorICAg
ICwgbV9pY2VTdGFydGVkKGZhbHNlKQorICAgICwgbV9sb2NhbFN0cmVhbXMoTWVkaWFTdHJlYW1M
aXN0OjpjcmVhdGUoKSkKKyAgICAsIG1fcmVtb3RlU3RyZWFtcyhNZWRpYVN0cmVhbUxpc3Q6OmNy
ZWF0ZSgpKQorICAgICwgbV9pbml0aWFsTmVnb3RpYXRpb25UaW1lcih0aGlzLCAmUGVlckNvbm5l
Y3Rpb246OmluaXRpYWxOZWdvdGlhdGlvblRpbWVyRmlyZWQpCisgICAgLCBtX3N0cmVhbUNoYW5n
ZVRpbWVyKHRoaXMsICZQZWVyQ29ubmVjdGlvbjo6c3RyZWFtQ2hhbmdlVGltZXJGaXJlZCkKKyAg
ICAsIG1fcmVhZHlTdGF0ZUNoYW5nZVRpbWVyKHRoaXMsICZQZWVyQ29ubmVjdGlvbjo6cmVhZHlT
dGF0ZUNoYW5nZVRpbWVyRmlyZWQpCisgICAgLCBtX3BlZXJIYW5kbGVyKFBlZXJIYW5kbGVyOjpj
cmVhdGUodGhpcywgc2VydmVyQ29uZmlndXJhdGlvbiwgY29udGV4dC0+c2VjdXJpdHlPcmlnaW4o
KS0+dG9TdHJpbmcoKSkpCiB7Ci0gICAgQVNTRVJUKGZyYW1lQ29udHJvbGxlcik7Ci0gICAgbV9s
b2NhbFN0cmVhbUxpc3QgPSBNZWRpYVN0cmVhbUxpc3Q6OmNyZWF0ZSgpOwotICAgIG1fcmVtb3Rl
U3RyZWFtTGlzdCA9IE1lZGlhU3RyZWFtTGlzdDo6Y3JlYXRlKCk7Ci19Ci0KLXZvaWQgUGVlckNv
bm5lY3Rpb246OmluaXQoKQotewotICAgIGlmIChNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciog
ZnJhbWVDb250cm9sbGVyID0gbWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIoKSkKLSAgICAgICAg
ZnJhbWVDb250cm9sbGVyLT5uZXdQZWVyQ29ubmVjdGlvbihtX2NsaWVudElkLCBtX2NvbmZpZ3Vy
YXRpb24pOwotCi0gICAgcG9zdFN0YXJ0TmVnb3RpYXRpb25UYXNrKCk7CiB9CiAKIFBlZXJDb25u
ZWN0aW9uOjp+UGVlckNvbm5lY3Rpb24oKQogewogfQogCi1NZWRpYVN0cmVhbUxpc3QqIFBlZXJD
b25uZWN0aW9uOjpsb2NhbFN0cmVhbXMoKQotewotICAgIHJldHVybiBtX2xvY2FsU3RyZWFtTGlz
dC5nZXQoKTsKLX0KLQotTWVkaWFTdHJlYW1MaXN0KiBQZWVyQ29ubmVjdGlvbjo6cmVtb3RlU3Ry
ZWFtcygpCi17Ci0gICAgcmV0dXJuIG1fcmVtb3RlU3RyZWFtTGlzdC5nZXQoKTsKLX0KLQogdm9p
ZCBQZWVyQ29ubmVjdGlvbjo6cHJvY2Vzc1NpZ25hbGluZ01lc3NhZ2UoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAobV9yZWFkeVN0YXRlID09IENM
T1NFRCkgewpAQCAtODksOCArNzAsMjggQEAgdm9pZCBQZWVyQ29ubmVjdGlvbjo6cHJvY2Vzc1Np
Z25hbGluZ01lcwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1lZGlhU3RyZWFt
RnJhbWVDb250cm9sbGVyKCkpCi0gICAgICAgIG1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKCkt
PnByb2Nlc3NTaWduYWxpbmdNZXNzYWdlKG1fY2xpZW50SWQsIG1lc3NhZ2UpOworICAgIGlmICgh
bWVzc2FnZS5zdGFydHNXaXRoKCJTRFBcbiIpKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJp
bmcgc2RwID0gbWVzc2FnZS5zdWJzdHJpbmcoNCk7CisKKyAgICBpZiAobV9pY2VTdGFydGVkKSB7
CisgICAgICAgIGlmIChtX3BlZXJIYW5kbGVyKQorICAgICAgICAgICAgbV9wZWVySGFuZGxlci0+
cHJvY2Vzc1NEUChzZHApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fcGVl
ckhhbmRsZXIpCisgICAgICAgIG1fcGVlckhhbmRsZXItPmhhbmRsZUluaXRpYWxPZmZlcihzZHAp
OworCisgICAgZW5zdXJlU3RyZWFtQ2hhbmdlU2NoZWR1bGVkKCk7CisgICAgbV9pY2VTdGFydGVk
ID0gdHJ1ZTsKKyAgICBzY2hlZHVsZVJlYWR5U3RhdGVDaGFuZ2UoTkVHT1RJQVRJTkcpOworfQor
CitQZWVyQ29ubmVjdGlvbjo6UmVhZHlTdGF0ZSBQZWVyQ29ubmVjdGlvbjo6cmVhZHlTdGF0ZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVhZHlTdGF0ZTsKIH0KIAogdm9pZCBQZWVyQ29ubmVj
dGlvbjo6c2VuZChjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTAw
LDE0ICsxMDEsMTYgQEAgdm9pZCBQZWVyQ29ubmVjdGlvbjo6c2VuZChjb25zdCBTdHJpbmcmIAog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgQ1N0cmluZyB1dGY4ID0gdGV4dC51dGY4KCk7
Ci0gICAgaWYgKHV0ZjgubGVuZ3RoKCkgPiBrTWF4TWVzc2FnZVVURjhMZW5ndGgpIHsKKyAgICBD
U3RyaW5nIGRhdGEgPSB0ZXh0LnV0ZjgoKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBkYXRhLmxl
bmd0aCgpOworCisgICAgaWYgKGxlbmd0aCA+IDUwNCkgewogICAgICAgICBlYyA9IElOVkFMSURf
QUNDRVNTX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtZWRpYVN0cmVh
bUZyYW1lQ29udHJvbGxlcigpKQotICAgICAgICBtZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcigp
LT5tZXNzYWdlKG1fY2xpZW50SWQsIHRleHQpOworICAgIGlmIChtX3BlZXJIYW5kbGVyKQorICAg
ICAgICBtX3BlZXJIYW5kbGVyLT5zZW5kRGF0YVN0cmVhbU1lc3NhZ2UoZGF0YS5kYXRhKCksIGxl
bmd0aCk7CiB9CiAKIHZvaWQgUGVlckNvbm5lY3Rpb246OmFkZFN0cmVhbShQYXNzUmVmUHRyPE1l
ZGlhU3RyZWFtPiBwcnBTdHJlYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTE3LDM3ICsxMjAs
NjMgQEAgdm9pZCBQZWVyQ29ubmVjdGlvbjo6YWRkU3RyZWFtKFBhc3NSZWZQdAogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgLy8gVGhlIFN0cmVhbSBvYmplY3QgaXMgZ3VhcmFudGVlZCB0
byBleGlzdCBzaW5jZSBTdHJpY3RUeXBlQ2hlY2tpbmcgaXMgc2V0IGluIHRoZSBpZGwuCisgICAg
Ly8gVGhlIE1lZGlhU3RyZWFtIG9iamVjdCBpcyBndWFyYW50ZWVkIHRvIGV4aXN0IHNpbmNlIFN0
cmljdFR5cGVDaGVja2luZyBpcyBzZXQgaW4gdGhlIGlkbC4KIAogICAgIFJlZlB0cjxNZWRpYVN0
cmVhbT4gc3RyZWFtID0gcHJwU3RyZWFtOwogCi0gICAgaWYgKG1fbG9jYWxTdHJlYW1MaXN0LT5j
b250YWlucyhzdHJlYW0pKQorICAgIGlmIChtX2xvY2FsU3RyZWFtcy0+Y29udGFpbnMoc3RyZWFt
LmdldCgpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9sb2NhbFN0cmVhbUxpc3QtPmFkZChz
dHJlYW0pOworICAgIG1fbG9jYWxTdHJlYW1zLT5hcHBlbmQoc3RyZWFtKTsKKworICAgIC8vIEZJ
WE1FOiBnZXQgZnJvbSBzdHJlYW0tPmRlc2NyaXB0b3IoKSB3aGVuIGl0J3MgYXZhaWxhYmxlLCBz
ZWUgaHR0cDovL3dlYmtpdC5vcmcvYi82ODQ2NAorICAgIE1lZGlhU3RyZWFtRGVzY3JpcHRvciog
c3RyZWFtRGVzY3JpcHRvciA9IDA7CisgICAgc2l6ZV90IGkgPSBtX3BlbmRpbmdSZW1vdmVTdHJl
YW1zLmZpbmQoc3RyZWFtRGVzY3JpcHRvcik7CisgICAgaWYgKGkgIT0gbm90Rm91bmQpIHsKKyAg
ICAgICAgbV9wZW5kaW5nUmVtb3ZlU3RyZWFtcy5yZW1vdmUoaSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CiAKLSAgICBpZiAobWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIoKSkKLSAgICAgICAg
bWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIoKS0+YWRkU3RyZWFtKG1fY2xpZW50SWQsIHN0cmVh
bSk7CisgICAgbV9wZW5kaW5nQWRkU3RyZWFtcy5hcHBlbmQoc3RyZWFtRGVzY3JpcHRvcik7Cisg
ICAgaWYgKG1faWNlU3RhcnRlZCkKKyAgICAgICAgZW5zdXJlU3RyZWFtQ2hhbmdlU2NoZWR1bGVk
KCk7CiB9CiAKLXZvaWQgUGVlckNvbm5lY3Rpb246OnJlbW92ZVN0cmVhbShQYXNzUmVmUHRyPE1l
ZGlhU3RyZWFtPiBwcnBTdHJlYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBQZWVyQ29ubmVj
dGlvbjo6cmVtb3ZlU3RyZWFtKE1lZGlhU3RyZWFtKiBzdHJlYW0sIEV4Y2VwdGlvbkNvZGUmIGVj
KQogewogICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gQ0xPU0VEKSB7CiAgICAgICAgIGVjID0gSU5W
QUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyBUaGUgU3Ry
ZWFtIG9iamVjdCBpcyBndWFyYW50ZWVkIHRvIGV4aXN0IHNpbmNlIFN0cmljdFR5cGVDaGVja2lu
ZyBpcyBzZXQgaW4gdGhlIGlkbC4KKyAgICAvLyBUaGUgTWVkaWFTdHJlYW0gb2JqZWN0IGlzIGd1
YXJhbnRlZWQgdG8gZXhpc3Qgc2luY2UgU3RyaWN0VHlwZUNoZWNraW5nIGlzIHNldCBpbiB0aGUg
aWRsLgogCi0gICAgUmVmUHRyPE1lZGlhU3RyZWFtPiBzdHJlYW0gPSBwcnBTdHJlYW07CisgICAg
aWYgKCFtX2xvY2FsU3RyZWFtcy0+Y29udGFpbnMoc3RyZWFtKSkKKyAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKCFtX2xvY2FsU3RyZWFtTGlzdC0+Y29udGFpbnMoc3RyZWFtKSkKKyAgICBtX2xv
Y2FsU3RyZWFtcy0+cmVtb3ZlKHN0cmVhbSk7CisKKyAgICAvLyBGSVhNRTogZ2V0IGZyb20gc3Ry
ZWFtLT5kZXNjcmlwdG9yKCkgd2hlbiBpdCdzIGF2YWlsYWJsZSwgc2VlIGh0dHA6Ly93ZWJraXQu
b3JnL2IvNjg0NjQKKyAgICBNZWRpYVN0cmVhbURlc2NyaXB0b3IqIHN0cmVhbURlc2NyaXB0b3Ig
PSAwOworICAgIHNpemVfdCBpID0gbV9wZW5kaW5nQWRkU3RyZWFtcy5maW5kKHN0cmVhbURlc2Ny
aXB0b3IpOworICAgIGlmIChpICE9IG5vdEZvdW5kKSB7CisgICAgICAgIG1fcGVuZGluZ0FkZFN0
cmVhbXMucmVtb3ZlKGkpOwogICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgbV9sb2NhbFN0
cmVhbUxpc3QtPnJlbW92ZShzdHJlYW0pOworICAgIG1fcGVuZGluZ1JlbW92ZVN0cmVhbXMuYXBw
ZW5kKHN0cmVhbURlc2NyaXB0b3IpOworICAgIGlmIChtX2ljZVN0YXJ0ZWQpCisgICAgICAgIGVu
c3VyZVN0cmVhbUNoYW5nZVNjaGVkdWxlZCgpOworfQogCi0gICAgaWYgKG1lZGlhU3RyZWFtRnJh
bWVDb250cm9sbGVyKCkpCi0gICAgICAgIG1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKCktPnJl
bW92ZVN0cmVhbShtX2NsaWVudElkLCBzdHJlYW0pOworTWVkaWFTdHJlYW1MaXN0KiBQZWVyQ29u
bmVjdGlvbjo6bG9jYWxTdHJlYW1zKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sb2NhbFN0cmVh
bXMuZ2V0KCk7Cit9CisKK01lZGlhU3RyZWFtTGlzdCogUGVlckNvbm5lY3Rpb246OnJlbW90ZVN0
cmVhbXMoKSBjb25zdAoreworICAgIHJldHVybiBtX3JlbW90ZVN0cmVhbXMuZ2V0KCk7CiB9CiAK
IHZvaWQgUGVlckNvbm5lY3Rpb246OmNsb3NlKEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTU3LDUw
ICsxODYsNTcgQEAgdm9pZCBQZWVyQ29ubmVjdGlvbjo6Y2xvc2UoRXhjZXB0aW9uQ29kZQogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVy
KCkpCi0gICAgICAgIG1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKCktPmNsb3NlUGVlckNvbm5l
Y3Rpb24obV9jbGllbnRJZCk7Ci0KLSAgICBtX3JlYWR5U3RhdGUgPSBDTE9TRUQ7CisgICAgc3Rv
cCgpOwogfQogCi12b2lkIFBlZXJDb25uZWN0aW9uOjpvbk5lZ290aWF0aW9uU3RhcnRlZCgpCit2
b2lkIFBlZXJDb25uZWN0aW9uOjppY2VQcm9jZXNzaW5nQ29tcGxldGVkKCkKIHsKLSAgICBtX3Jl
YWR5U3RhdGUgPSBORUdPVElBVElORzsKLQotICAgIHBvc3RTaW1wbGVFdmVudChldmVudE5hbWVz
KCkuY29ubmVjdGluZ0V2ZW50KTsKKyAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgY2hhbmdlUmVhZHlTdGF0ZShBQ1RJVkUpOwogfQog
Ci12b2lkIFBlZXJDb25uZWN0aW9uOjpvbk5lZ290aWF0aW9uRG9uZSgpCit2b2lkIFBlZXJDb25u
ZWN0aW9uOjpzZHBHZW5lcmF0ZWQoY29uc3QgU3RyaW5nJiBzZHApCiB7Ci0gICAgbV9yZWFkeVN0
YXRlID0gQUNUSVZFOwotCi0gICAgcG9zdFNpbXBsZUV2ZW50KGV2ZW50TmFtZXMoKS5vcGVuRXZl
bnQpOworICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVh
ZCgpKTsKKyAgICBtX3NpZ25hbGluZ0NhbGxiYWNrLT5oYW5kbGVFdmVudCgiU0RQXG4iICsgc2Rw
LCB0aGlzKTsKIH0KIAotdm9pZCBQZWVyQ29ubmVjdGlvbjo6c3RyZWFtQWRkZWQoUGFzc1JlZlB0
cjxNZWRpYVN0cmVhbT4gcHJwU3RyZWFtKQordm9pZCBQZWVyQ29ubmVjdGlvbjo6ZGF0YVN0cmVh
bU1lc3NhZ2VSZWNlaXZlZChjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0g
ICAgUmVmUHRyPE1lZGlhU3RyZWFtPiBzdHJlYW0gPSBwcnBTdHJlYW07Ci0gICAgbV9yZW1vdGVT
dHJlYW1MaXN0LT5hZGQoc3RyZWFtKTsKLSAgICBwb3N0U3RyZWFtQWRkZWRFdmVudChzdHJlYW0p
OworICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgp
KTsKKyAgICBjb25zdCBTdHJpbmcmIG1lc3NhZ2UgPSBTdHJpbmc6OmZyb21VVEY4KGRhdGEsIGxl
bmd0aCk7CisgICAgZGlzcGF0Y2hFdmVudChNZXNzYWdlRXZlbnQ6OmNyZWF0ZShQYXNzT3duUHRy
PE1lc3NhZ2VQb3J0QXJyYXk+KCksIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKG1lc3Nh
Z2UpKSk7CiB9CiAKLXZvaWQgUGVlckNvbm5lY3Rpb246OnN0cmVhbVJlbW92ZWQoY29uc3QgU3Ry
aW5nJiBzdHJlYW1MYWJlbCkKK3ZvaWQgUGVlckNvbm5lY3Rpb246OnJlbW90ZVN0cmVhbUFkZGVk
KFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiBzdHJlYW1EZXNjcmlwdG9yKQogewot
ICAgIEFTU0VSVChtX3JlbW90ZVN0cmVhbUxpc3QtPmNvbnRhaW5zKHN0cmVhbUxhYmVsKSk7Cisg
ICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOwog
Ci0gICAgUmVmUHRyPE1lZGlhU3RyZWFtPiBzdHJlYW0gPSBtX3JlbW90ZVN0cmVhbUxpc3QtPmdl
dChzdHJlYW1MYWJlbCk7Ci0gICAgbV9yZW1vdGVTdHJlYW1MaXN0LT5yZW1vdmUoc3RyZWFtKTsK
LSAgICBwb3N0U3RyZWFtUmVtb3ZlZEV2ZW50KHN0cmVhbSk7Ci19CisgICAgaWYgKG1fcmVhZHlT
dGF0ZSA9PSBDTE9TRUQpCisgICAgICAgIHJldHVybjsKIAotdm9pZCBQZWVyQ29ubmVjdGlvbjo6
b25NZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBwb3N0TWVzc2FnZUV2ZW50
KG1lc3NhZ2UpOworICAgIC8vIEZJWE1FOiBjcmVhdGUgYSBuZXcgTWVkaWFTdHJlYW0gZnJvbSB0
aGUgc3RyZWFtRGVzY3JpcHRvciBvbmNlIGl0J3MgcG9zc2libGUsIHNlZSBodHRwOi8vd2Via2l0
Lm9yZy9iLzY4NDY0CisgICAgUmVmUHRyPE1lZGlhU3RyZWFtPiBzdHJlYW0gPSAwOworICAgIG1f
cmVtb3RlU3RyZWFtcy0+YXBwZW5kKHN0cmVhbSk7CisKKyAgICBkaXNwYXRjaEV2ZW50KE1lZGlh
U3RyZWFtRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuYWRkc3RyZWFtRXZlbnQsIGZhbHNlLCBm
YWxzZSwgc3RyZWFtLnJlbGVhc2UoKSkpOwogfQogCi12b2lkIFBlZXJDb25uZWN0aW9uOjpvblNp
Z25hbGluZ01lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQordm9pZCBQZWVyQ29ubmVjdGlv
bjo6cmVtb3RlU3RyZWFtUmVtb3ZlZChNZWRpYVN0cmVhbURlc2NyaXB0b3IqIHN0cmVhbURlc2Ny
aXB0b3IpCiB7Ci0gICAgcG9zdFNpZ25hbGluZ0V2ZW50KG1lc3NhZ2UpOworICAgIEFTU0VSVChz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBBU1NFUlQo
c3RyZWFtRGVzY3JpcHRvci0+b3duZXIoKSk7CisKKyAgICBSZWZQdHI8TWVkaWFTdHJlYW0+IHN0
cmVhbSA9IHN0cmVhbURlc2NyaXB0b3ItPm93bmVyKCk7CisgICAgc3RyZWFtLT5zdHJlYW1FbmRl
ZCgpOworCisgICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBDTE9TRUQpCisgICAgICAgIHJldHVybjsK
KworICAgIEFTU0VSVChtX3JlbW90ZVN0cmVhbXMtPmNvbnRhaW5zKHN0cmVhbS5nZXQoKSkpOwor
ICAgIG1fcmVtb3RlU3RyZWFtcy0+cmVtb3ZlKHN0cmVhbS5nZXQoKSk7CisKKyAgICBkaXNwYXRj
aEV2ZW50KE1lZGlhU3RyZWFtRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkucmVtb3Zlc3RyZWFt
RXZlbnQsIGZhbHNlLCBmYWxzZSwgc3RyZWFtLnJlbGVhc2UoKSkpOwogfQogCiBQZWVyQ29ubmVj
dGlvbiogUGVlckNvbm5lY3Rpb246OnRvUGVlckNvbm5lY3Rpb24oKQpAQCAtMjEwLDcgKzI0Niwy
NSBAQCBQZWVyQ29ubmVjdGlvbiogUGVlckNvbm5lY3Rpb246OnRvUGVlckNvCiAKIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIFBlZXJDb25uZWN0aW9uOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIoKSA/IG1lZGlh
U3RyZWFtRnJhbWVDb250cm9sbGVyKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSA6IDA7Cisg
ICAgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworfQor
Cit2b2lkIFBlZXJDb25uZWN0aW9uOjpzdG9wKCkKK3sKKyAgICBpZiAobV9yZWFkeVN0YXRlID09
IENMT1NFRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbml0aWFsTmVnb3RpYXRpb25UaW1l
ci5zdG9wKCk7CisgICAgbV9zdHJlYW1DaGFuZ2VUaW1lci5zdG9wKCk7CisgICAgbV9yZWFkeVN0
YXRlQ2hhbmdlVGltZXIuc3RvcCgpOworCisgICAgaWYgKG1fcGVlckhhbmRsZXIpCisgICAgICAg
IG1fcGVlckhhbmRsZXItPnN0b3AoKTsKKworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMp
OworICAgIG1fcGVlckhhbmRsZXIuY2xlYXIoKTsKKworICAgIGNoYW5nZVJlYWR5U3RhdGUoQ0xP
U0VEKTsKIH0KIAogRXZlbnRUYXJnZXREYXRhKiBQZWVyQ29ubmVjdGlvbjo6ZXZlbnRUYXJnZXRE
YXRhKCkKQEAgLTIyMyw4OCArMjc3LDk0IEBAIEV2ZW50VGFyZ2V0RGF0YSogUGVlckNvbm5lY3Rp
b246OmVuc3VyZUUKICAgICByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOwogfQogCi12b2lkIFBl
ZXJDb25uZWN0aW9uOjpwb3N0TWVzc2FnZUV2ZW50KGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3Zv
aWQgUGVlckNvbm5lY3Rpb246OnNjaGVkdWxlSW5pdGlhbE5lZ290aWF0aW9uKCkKIHsKLSAgICBS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhID0gU2VyaWFsaXplZFNjcmlwdFZhbHVl
OjpjcmVhdGUobWVzc2FnZSk7CisgICAgQVNTRVJUKCFtX2luaXRpYWxOZWdvdGlhdGlvblRpbWVy
LmlzQWN0aXZlKCkpOwogCi0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVy
bjsKLSAgICBBU1NFUlQoY29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwotICAgIGNvbnRleHQt
PnBvc3RUYXNrKERpc3BhdGNoVGFzazxQZWVyQ29ubmVjdGlvbiwgaW50LCBTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+OjpjcmVhdGUodGhpcywgJlBlZXJDb25uZWN0aW9uOjpkaXNwYXRjaE1lc3NhZ2VF
dmVudCwgMCwgZGF0YS5yZWxlYXNlKCkpKTsKKyAgICBtX2luaXRpYWxOZWdvdGlhdGlvblRpbWVy
LnN0YXJ0T25lU2hvdCgwKTsKIH0KIAotdm9pZCBQZWVyQ29ubmVjdGlvbjo6cG9zdFNpZ25hbGlu
Z0V2ZW50KGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3ZvaWQgUGVlckNvbm5lY3Rpb246OmluaXRp
YWxOZWdvdGlhdGlvblRpbWVyRmlyZWQoVGltZXI8UGVlckNvbm5lY3Rpb24+KiB0aW1lcikKIHsK
LSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChj
b250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7Ci0gICAgY29udGV4dC0+cG9zdFRhc2soU2ltcGxl
RGlzcGF0Y2hUYXNrPFBlZXJDb25uZWN0aW9uLCBTdHJpbmc+OjpjcmVhdGUodGhpcywgJlBlZXJD
b25uZWN0aW9uOjpkaXNwYXRjaFNpZ25hbGluZ0V2ZW50LCBtZXNzYWdlKSk7Ci19CisgICAgQVNT
RVJUX1VOVVNFRCh0aW1lciwgdGltZXIgPT0gJm1faW5pdGlhbE5lZ290aWF0aW9uVGltZXIpOwog
Ci12b2lkIFBlZXJDb25uZWN0aW9uOjpwb3N0U3RyZWFtQWRkZWRFdmVudChQYXNzUmVmUHRyPE1l
ZGlhU3RyZWFtPiBwcnBTdHJlYW0pCi17Ci0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHQpCisgICAg
aWYgKG1faWNlU3RhcnRlZCkKICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChjb250ZXh0LT5p
c0NvbnRleHRUaHJlYWQoKSk7Ci0gICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5wb3N0VGFz
ayhEaXNwYXRjaFRhc2s8UGVlckNvbm5lY3Rpb24sIFN0cmluZywgTWVkaWFTdHJlYW0+OjpjcmVh
dGUodGhpcywgJlBlZXJDb25uZWN0aW9uOjpkaXNwYXRjaFN0cmVhbUV2ZW50LCBldmVudE5hbWVz
KCkuYWRkc3RyZWFtRXZlbnQsIHBycFN0cmVhbSkpOwotfQogCi12b2lkIFBlZXJDb25uZWN0aW9u
Ojpwb3N0U3RyZWFtUmVtb3ZlZEV2ZW50KFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+IHBycFN0cmVh
bSkKLXsKLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotICAgIEFT
U0VSVChjb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7Ci0gICAgY29udGV4dC0+cG9zdFRhc2so
RGlzcGF0Y2hUYXNrPFBlZXJDb25uZWN0aW9uLCBTdHJpbmcsIE1lZGlhU3RyZWFtPjo6Y3JlYXRl
KHRoaXMsICZQZWVyQ29ubmVjdGlvbjo6ZGlzcGF0Y2hTdHJlYW1FdmVudCwgZXZlbnROYW1lcygp
LnJlbW92ZXN0cmVhbUV2ZW50LCBwcnBTdHJlYW0pKTsKKyAgICBNZWRpYVN0cmVhbURlc2NyaXB0
b3JWZWN0b3IgcGVuZGluZ0FkZFN0cmVhbXM7CisgICAgbV9wZW5kaW5nQWRkU3RyZWFtcy5zd2Fw
KHBlbmRpbmdBZGRTdHJlYW1zKTsKKyAgICBpZiAobV9wZWVySGFuZGxlcikKKyAgICAgICAgbV9w
ZWVySGFuZGxlci0+cHJvZHVjZUluaXRpYWxPZmZlcihwZW5kaW5nQWRkU3RyZWFtcyk7CisKKyAg
ICBtX2ljZVN0YXJ0ZWQgPSB0cnVlOworCisgICAgY2hhbmdlUmVhZHlTdGF0ZShORUdPVElBVElO
Ryk7CiB9CiAKLXZvaWQgUGVlckNvbm5lY3Rpb246OnBvc3RTaW1wbGVFdmVudChjb25zdCBTdHJp
bmcmIGV2ZW50TmFtZSkKK3ZvaWQgUGVlckNvbm5lY3Rpb246OmVuc3VyZVN0cmVhbUNoYW5nZVNj
aGVkdWxlZCgpCiB7Ci0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybjsK
LSAgICBBU1NFUlQoY29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwotICAgIGNvbnRleHQtPnBv
c3RUYXNrKFNpbXBsZURpc3BhdGNoVGFzazxQZWVyQ29ubmVjdGlvbiwgU3RyaW5nPjo6Y3JlYXRl
KHRoaXMsICZQZWVyQ29ubmVjdGlvbjo6ZGlzcGF0Y2hTaW1wbGVFdmVudCwgZXZlbnROYW1lKSk7
CisgICAgaWYgKCFtX3N0cmVhbUNoYW5nZVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fc3Ry
ZWFtQ2hhbmdlVGltZXIuc3RhcnRPbmVTaG90KDApOwogfQogCi12b2lkIFBlZXJDb25uZWN0aW9u
Ojpwb3N0U3RhcnROZWdvdGlhdGlvblRhc2soKQordm9pZCBQZWVyQ29ubmVjdGlvbjo6c3RyZWFt
Q2hhbmdlVGltZXJGaXJlZChUaW1lcjxQZWVyQ29ubmVjdGlvbj4qIHRpbWVyKQogewotICAgIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
Ci0gICAgaWYgKCFjb250ZXh0KQorICAgIEFTU0VSVF9VTlVTRUQodGltZXIsIHRpbWVyID09ICZt
X3N0cmVhbUNoYW5nZVRpbWVyKTsKKworICAgIGlmICghbV9wZW5kaW5nQWRkU3RyZWFtcy5pc0Vt
cHR5KCkgJiYgIW1fcGVuZGluZ1JlbW92ZVN0cmVhbXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm47Ci0gICAgQVNTRVJUKGNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKLSAgICBjb250ZXh0
LT5wb3N0VGFzayhTaW1wbGVEaXNwYXRjaFRhc2s8UGVlckNvbm5lY3Rpb24sIGludD46OmNyZWF0
ZSh0aGlzLCAmUGVlckNvbm5lY3Rpb246OmRpc3BhdGNoU3RhcnROZWdvdGlhdGlvblRhc2ssIDAp
KTsKLX0KIAotdm9pZCBQZWVyQ29ubmVjdGlvbjo6ZGlzcGF0Y2hNZXNzYWdlRXZlbnQoY29uc3Qg
aW50JiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEpCi17Ci0gICAgUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZCA9IGRhdGE7Ci0gICAgZGlzcGF0Y2hFdmVudChN
ZXNzYWdlRXZlbnQ6OmNyZWF0ZShQYXNzT3duUHRyPE1lc3NhZ2VQb3J0QXJyYXk+KCksIGQpKTsK
LX0KKyAgICBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0b3IgcGVuZGluZ0FkZFN0cmVhbXM7Cisg
ICAgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yIHBlbmRpbmdSZW1vdmVTdHJlYW1zOwogCi12
b2lkIFBlZXJDb25uZWN0aW9uOjpkaXNwYXRjaFNpZ25hbGluZ0V2ZW50KGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkKLXsKLSAgICBtX3NpZ25hbGluZ0NhbGxiYWNrLT5oYW5kbGVFdmVudChtZXNzYWdl
LCB0aGlzKTsKKyAgICBtX3BlbmRpbmdBZGRTdHJlYW1zLnN3YXAocGVuZGluZ0FkZFN0cmVhbXMp
OworICAgIG1fcGVuZGluZ1JlbW92ZVN0cmVhbXMuc3dhcChwZW5kaW5nUmVtb3ZlU3RyZWFtcyk7
CisKKyAgICBpZiAobV9wZWVySGFuZGxlcikKKyAgICAgICAgbV9wZWVySGFuZGxlci0+cHJvY2Vz
c1BlbmRpbmdTdHJlYW1zKHBlbmRpbmdBZGRTdHJlYW1zLCBwZW5kaW5nUmVtb3ZlU3RyZWFtcyk7
CisKKyAgICBpZiAoIXBlbmRpbmdBZGRTdHJlYW1zLmlzRW1wdHkoKSkKKyAgICAgICAgY2hhbmdl
UmVhZHlTdGF0ZShORUdPVElBVElORyk7CiB9CiAKLXZvaWQgUGVlckNvbm5lY3Rpb246OmRpc3Bh
dGNoU3RyZWFtRXZlbnQoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFt
PiBzdHJlYW0pCit2b2lkIFBlZXJDb25uZWN0aW9uOjpzY2hlZHVsZVJlYWR5U3RhdGVDaGFuZ2Uo
UmVhZHlTdGF0ZSByZWFkeVN0YXRlKQogewotICAgIFJlZlB0cjxNZWRpYVN0cmVhbT4gcyA9IHN0
cmVhbTsKLSAgICBkaXNwYXRjaEV2ZW50KE1lZGlhU3RyZWFtRXZlbnQ6OmNyZWF0ZShuYW1lLCBm
YWxzZSwgZmFsc2UsIHMpKTsKKyAgICBtX3BlbmRpbmdSZWFkeVN0YXRlcy5hcHBlbmQocmVhZHlT
dGF0ZSk7CisgICAgaWYgKCFtX3JlYWR5U3RhdGVDaGFuZ2VUaW1lci5pc0FjdGl2ZSgpKQorICAg
ICAgICBtX3JlYWR5U3RhdGVDaGFuZ2VUaW1lci5zdGFydE9uZVNob3QoMCk7CiB9CiAKLXZvaWQg
UGVlckNvbm5lY3Rpb246OmRpc3BhdGNoU2ltcGxlRXZlbnQoY29uc3QgU3RyaW5nJiBldmVudE5h
bWUpCit2b2lkIFBlZXJDb25uZWN0aW9uOjpyZWFkeVN0YXRlQ2hhbmdlVGltZXJGaXJlZChUaW1l
cjxQZWVyQ29ubmVjdGlvbj4qIHRpbWVyKQogewotICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNy
ZWF0ZShldmVudE5hbWUsIGZhbHNlLCBmYWxzZSkpOworICAgIEFTU0VSVF9VTlVTRUQodGltZXIs
IHRpbWVyID09ICZtX3JlYWR5U3RhdGVDaGFuZ2VUaW1lcik7CisKKyAgICBWZWN0b3I8UmVhZHlT
dGF0ZT4gcGVuZGluZ1JlYWR5U3RhdGVzOworICAgIG1fcGVuZGluZ1JlYWR5U3RhdGVzLnN3YXAo
cGVuZGluZ1JlYWR5U3RhdGVzKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGVuZGlu
Z1JlYWR5U3RhdGVzLnNpemUoKTsgaSsrKQorICAgICAgICBjaGFuZ2VSZWFkeVN0YXRlKHBlbmRp
bmdSZWFkeVN0YXRlc1tpXSk7CiB9CiAKLXZvaWQgUGVlckNvbm5lY3Rpb246OmRpc3BhdGNoU3Rh
cnROZWdvdGlhdGlvblRhc2soY29uc3QgaW50JikKK3ZvaWQgUGVlckNvbm5lY3Rpb246OmNoYW5n
ZVJlYWR5U3RhdGUoUmVhZHlTdGF0ZSByZWFkeVN0YXRlKQogewotICAgIGlmIChtZWRpYVN0cmVh
bUZyYW1lQ29udHJvbGxlcigpKQotICAgICAgICBtZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcigp
LT5zdGFydE5lZ290aWF0aW9uKG1fY2xpZW50SWQpOworICAgIGlmIChyZWFkeVN0YXRlID09IG1f
cmVhZHlTdGF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9yZWFkeVN0YXRlID0gcmVhZHlT
dGF0ZTsKKworICAgIHN3aXRjaCAobV9yZWFkeVN0YXRlKSB7CisgICAgY2FzZSBORVc6CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5FR09U
SUFUSU5HOgorICAgICAgICBkaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygp
LmNvbm5lY3RpbmdFdmVudCwgZmFsc2UsIGZhbHNlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQUNUSVZFOgorICAgICAgICBkaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1l
cygpLm9wZW5FdmVudCwgZmFsc2UsIGZhbHNlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Q0xPU0VEOgorICAgICAgICBicmVhazsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3AycC9QZWVyQ29ubmVjdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3AycC9QZWVyQ29ubmVjdGlvbi5oCShyZXZpc2lvbiA5NzI4NykK
KysrIFNvdXJjZS9XZWJDb3JlL3AycC9QZWVyQ29ubmVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29uIEFCLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw0
MSArMjgsNDEgQEAKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAKKyNpbmNsdWRlICJBY3Rp
dmVET01PYmplY3QuaCIKICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgotI2luY2x1ZGUgIk1lZGlh
U3RyZWFtRnJhbWVDb250cm9sbGVyLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNp
bmNsdWRlICJFeGNlcHRpb25CYXNlLmgiCisjaW5jbHVkZSAiTWVkaWFTdHJlYW0uaCIKKyNpbmNs
dWRlICJNZWRpYVN0cmVhbUxpc3QuaCIKKyNpbmNsdWRlICJQZWVySGFuZGxlci5oIgorI2luY2x1
ZGUgIlNpZ25hbGluZ0NhbGxiYWNrLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBNZWRpYVN0cmVhbTsKLWNsYXNzIE1lZGlhU3RyZWFtTGlzdDsKLWNs
YXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7Ci1jbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7
Ci1jbGFzcyBTaWduYWxpbmdDYWxsYmFjazsKLQotY2xhc3MgUGVlckNvbm5lY3Rpb24gOiBwdWJs
aWMgUmVmQ291bnRlZDxQZWVyQ29ubmVjdGlvbj4sIHB1YmxpYyBFdmVudFRhcmdldCwgcHVibGlj
IE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjpQZWVyQ29ubmVjdGlvbkNsaWVudCB7CitjbGFz
cyBQZWVyQ29ubmVjdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPFBlZXJDb25uZWN0aW9uPiwgcHVi
bGljIFBlZXJIYW5kbGVyQ2xpZW50LCBwdWJsaWMgRXZlbnRUYXJnZXQsIHB1YmxpYyBBY3RpdmVE
T01PYmplY3QgewogcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBlZXJDb25uZWN0aW9u
PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgc2VydmVyQ29u
ZmlndXJhdGlvbiwgUGFzc1JlZlB0cjxTaWduYWxpbmdDYWxsYmFjaz4pOworICAgIH5QZWVyQ29u
bmVjdGlvbigpOworCisgICAgdm9pZCBwcm9jZXNzU2lnbmFsaW5nTWVzc2FnZShjb25zdCBTdHJp
bmcmIG1lc3NhZ2UsIEV4Y2VwdGlvbkNvZGUmKTsKKwogICAgIC8vIE5hbWUgYW5kIHZhbHVlcyBv
ZiB0aGUgZW51bSBtdXN0IG1hdGNoIHRoZSBjb3JyZXNzcG9uZGluZyBjb25zdGFudHMgaW4gdGhl
IC5pZGwgZmlsZS4KLSAgICBlbnVtIHsKKyAgICBlbnVtIFJlYWR5U3RhdGUgewogICAgICAgICBO
RVcgPSAwLAogICAgICAgICBORUdPVElBVElORyA9IDEsCiAgICAgICAgIEFDVElWRSA9IDIsCiAg
ICAgICAgIENMT1NFRCA9IDMKICAgICB9OwogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8UGVlckNv
bm5lY3Rpb24+IGNyZWF0ZShNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciosIGludCBpZCwgY29u
c3QgU3RyaW5nJiBjb25maWd1cmF0aW9uLCBQYXNzUmVmUHRyPFNpZ25hbGluZ0NhbGxiYWNrPik7
Ci0gICAgdmlydHVhbCB+UGVlckNvbm5lY3Rpb24oKTsKLQotICAgIE1lZGlhU3RyZWFtTGlzdCog
bG9jYWxTdHJlYW1zKCk7Ci0gICAgTWVkaWFTdHJlYW1MaXN0KiByZW1vdGVTdHJlYW1zKCk7Ci0K
LSAgICB1bnNpZ25lZCBzaG9ydCByZWFkeVN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9yZWFkeVN0
YXRlOyB9CisgICAgUmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkgY29uc3Q7CiAKLSAgICB2b2lkIHBy
b2Nlc3NTaWduYWxpbmdNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgRXhjZXB0aW9uQ29k
ZSYpOwogICAgIHZvaWQgc2VuZChjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICB2b2lkIGFkZFN0cmVhbShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPiwgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIHZvaWQgcmVtb3ZlU3RyZWFtKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+LCBFeGNl
cHRpb25Db2RlJik7CisgICAgdm9pZCBhZGRTdHJlYW0oY29uc3QgUGFzc1JlZlB0cjxNZWRpYVN0
cmVhbT4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHJlbW92ZVN0cmVhbShNZWRpYVN0cmVh
bSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBNZWRpYVN0cmVhbUxpc3QqIGxvY2FsU3RyZWFtcygp
IGNvbnN0OworICAgIE1lZGlhU3RyZWFtTGlzdCogcmVtb3RlU3RyZWFtcygpIGNvbnN0OwogICAg
IHZvaWQgY2xvc2UoRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVO
VF9MSVNURU5FUihjb25uZWN0aW5nKTsKQEAgLTcwLDU4ICs3MSw2MyBAQCBwdWJsaWM6CiAgICAg
REVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihhZGRzdHJlYW0pOwogICAgIERFRklORV9B
VFRSSUJVVEVfRVZFTlRfTElTVEVORVIocmVtb3Zlc3RyZWFtKTsKIAorICAgIC8vIFBlZXJIYW5k
bGVyQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIGljZVByb2Nlc3NpbmdDb21wbGV0ZWQoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2RwR2VuZXJhdGVkKGNvbnN0IFN0cmluZyYgc2RwKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZGF0YVN0cmVhbU1lc3NhZ2VSZWNlaXZlZChjb25zdCBjaGFyKiBkYXRhLCB1bnNp
Z25lZCBsZW5ndGgpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdGVTdHJlYW1BZGRlZChQYXNzUmVm
UHRyPE1lZGlhU3RyZWFtRGVzY3JpcHRvcj4pOworICAgIHZpcnR1YWwgdm9pZCByZW1vdGVTdHJl
YW1SZW1vdmVkKE1lZGlhU3RyZWFtRGVzY3JpcHRvciopOworCiAgICAgLy8gRXZlbnRUYXJnZXQK
ICAgICB2aXJ0dWFsIFBlZXJDb25uZWN0aW9uKiB0b1BlZXJDb25uZWN0aW9uKCk7CiAKICAgICAv
LyBFdmVudFRhcmdldCBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKIAotICAgIC8vIENhbGxi
YWNrcwotICAgIHZvaWQgb25NZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0gICAgdm9p
ZCBvblNpZ25hbGluZ01lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLSAgICB2b2lkIG9u
TmVnb3RpYXRpb25TdGFydGVkKCk7Ci0gICAgdm9pZCBvbk5lZ290aWF0aW9uRG9uZSgpOwotICAg
IHZvaWQgc3RyZWFtQWRkZWQoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4pOwotICAgIHZvaWQgc3Ry
ZWFtUmVtb3ZlZChjb25zdCBTdHJpbmcmIHN0cmVhbUxhYmVsKTsKKyAgICAvLyBBY3RpdmVET01P
YmplY3QKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpOwogCiAgICAgdXNpbmcgUmVmQ291bnRlZDxQ
ZWVyQ29ubmVjdGlvbj46OnJlZjsKICAgICB1c2luZyBSZWZDb3VudGVkPFBlZXJDb25uZWN0aW9u
Pjo6ZGVyZWY7CiAKLXByb3RlY3RlZDoKK3ByaXZhdGU6CisgICAgUGVlckNvbm5lY3Rpb24oU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgc2VydmVyQ29uZmlndXJhdGlvbiwg
UGFzc1JlZlB0cjxTaWduYWxpbmdDYWxsYmFjaz4pOworCiAgICAgLy8gRXZlbnRUYXJnZXQgaW1w
bGVtZW50YXRpb24uCiAgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0
YSgpOwogICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBlbnN1cmVFdmVudFRhcmdldERhdGEo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9CisgICAgdmly
dHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0KIAotcHJpdmF0ZToKLSAg
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IGtNYXhNZXNzYWdlVVRGOExlbmd0aCA9IDUwNDsKKyAgICB2
b2lkIHNjaGVkdWxlSW5pdGlhbE5lZ290aWF0aW9uKCk7CisgICAgdm9pZCBpbml0aWFsTmVnb3Rp
YXRpb25UaW1lckZpcmVkKFRpbWVyPFBlZXJDb25uZWN0aW9uPiopOworICAgIHZvaWQgZW5zdXJl
U3RyZWFtQ2hhbmdlU2NoZWR1bGVkKCk7CisgICAgdm9pZCBzdHJlYW1DaGFuZ2VUaW1lckZpcmVk
KFRpbWVyPFBlZXJDb25uZWN0aW9uPiopOworICAgIHZvaWQgc2NoZWR1bGVSZWFkeVN0YXRlQ2hh
bmdlKFJlYWR5U3RhdGUpOworICAgIHZvaWQgcmVhZHlTdGF0ZUNoYW5nZVRpbWVyRmlyZWQoVGlt
ZXI8UGVlckNvbm5lY3Rpb24+Kik7CiAKLSAgICBQZWVyQ29ubmVjdGlvbihNZWRpYVN0cmVhbUZy
YW1lQ29udHJvbGxlciosIGludCBpZCwgY29uc3QgU3RyaW5nJiBjb25maWd1cmF0aW9uLCBQYXNz
UmVmUHRyPFNpZ25hbGluZ0NhbGxiYWNrPik7Ci0gICAgdm9pZCBpbml0KCk7CisgICAgdm9pZCBj
aGFuZ2VSZWFkeVN0YXRlKFJlYWR5U3RhdGUpOwogCi0gICAgdm9pZCBwb3N0U2ltcGxlRXZlbnQo
Y29uc3QgU3RyaW5nJiBldmVudE5hbWUpOwotICAgIHZvaWQgcG9zdE1lc3NhZ2VFdmVudChjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpOwotICAgIHZvaWQgcG9zdFNpZ25hbGluZ0V2ZW50KGNvbnN0IFN0
cmluZyYgbWVzc2FnZSk7Ci0gICAgdm9pZCBwb3N0U3RyZWFtQWRkZWRFdmVudChQYXNzUmVmUHRy
PE1lZGlhU3RyZWFtPik7Ci0gICAgdm9pZCBwb3N0U3RyZWFtUmVtb3ZlZEV2ZW50KFBhc3NSZWZQ
dHI8TWVkaWFTdHJlYW0+KTsKLSAgICB2b2lkIHBvc3RTdGFydE5lZ290aWF0aW9uVGFzaygpOwot
Ci0gICAgdm9pZCBkaXNwYXRjaFNpbXBsZUV2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKTsK
LSAgICB2b2lkIGRpc3BhdGNoTWVzc2FnZUV2ZW50KGNvbnN0IGludCYsIFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhKTsKLSAgICB2b2lkIGRpc3BhdGNoU2lnbmFsaW5nRXZl
bnQoY29uc3QgU3RyaW5nJiBldmVudE5hbWUpOwotICAgIHZvaWQgZGlzcGF0Y2hTdHJlYW1FdmVu
dChjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+KTsKLSAgICB2b2lk
IGRpc3BhdGNoU3RhcnROZWdvdGlhdGlvblRhc2soY29uc3QgaW50Jik7CisgICAgUmVmUHRyPFNp
Z25hbGluZ0NhbGxiYWNrPiBtX3NpZ25hbGluZ0NhbGxiYWNrOwogCi0gICAgLy8gRXZlbnRUYXJn
ZXQgaW1wbGVtZW50YXRpb24uCi0gICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgeyBy
ZWYoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgeyBkZXJlZigpOyB9
CisgICAgUmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGU7CisgICAgYm9vbCBtX2ljZVN0YXJ0ZWQ7CisK
KyAgICBSZWZQdHI8TWVkaWFTdHJlYW1MaXN0PiBtX2xvY2FsU3RyZWFtczsKKyAgICBSZWZQdHI8
TWVkaWFTdHJlYW1MaXN0PiBtX3JlbW90ZVN0cmVhbXM7CiAKKyAgICAvLyBFdmVudFRhcmdldCBp
bXBsZW1lbnRhdGlvbi4KICAgICBFdmVudFRhcmdldERhdGEgbV9ldmVudFRhcmdldERhdGE7CiAK
LSAgICBTdHJpbmcgbV9jb25maWd1cmF0aW9uOwotICAgIHVuc2lnbmVkIHNob3J0IG1fcmVhZHlT
dGF0ZTsKLSAgICBSZWZQdHI8U2lnbmFsaW5nQ2FsbGJhY2s+IG1fc2lnbmFsaW5nQ2FsbGJhY2s7
Ci0gICAgUmVmUHRyPE1lZGlhU3RyZWFtTGlzdD4gbV9sb2NhbFN0cmVhbUxpc3Q7Ci0gICAgUmVm
UHRyPE1lZGlhU3RyZWFtTGlzdD4gbV9yZW1vdGVTdHJlYW1MaXN0OworICAgIFRpbWVyPFBlZXJD
b25uZWN0aW9uPiBtX2luaXRpYWxOZWdvdGlhdGlvblRpbWVyOworICAgIFRpbWVyPFBlZXJDb25u
ZWN0aW9uPiBtX3N0cmVhbUNoYW5nZVRpbWVyOworICAgIFRpbWVyPFBlZXJDb25uZWN0aW9uPiBt
X3JlYWR5U3RhdGVDaGFuZ2VUaW1lcjsKKworICAgIE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3Rv
ciBtX3BlbmRpbmdBZGRTdHJlYW1zOworICAgIE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciBt
X3BlbmRpbmdSZW1vdmVTdHJlYW1zOworICAgIFZlY3RvcjxSZWFkeVN0YXRlPiBtX3BlbmRpbmdS
ZWFkeVN0YXRlczsKKworICAgIE93blB0cjxQZWVySGFuZGxlcj4gbV9wZWVySGFuZGxlcjsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3AycC9QZWVy
Q29ubmVjdGlvbi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcDJwL1BlZXJDb25u
ZWN0aW9uLmlkbAkocmV2aXNpb24gOTcyODcpCisrKyBTb3VyY2UvV2ViQ29yZS9wMnAvUGVlckNv
bm5lY3Rpb24uaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw5ICsyNiwxMyBAQCBtb2R1bGUgcDJw
IHsKIAogICAgIGludGVyZmFjZSBbCiAgICAgICAgIENvbmRpdGlvbmFsPU1FRElBX1NUUkVBTSwK
KyAgICAgICAgQWN0aXZlRE9NT2JqZWN0LAogICAgICAgICBDYW5CZUNvbnN0cnVjdGVkLAotICAg
ICAgICBDdXN0b21Db25zdHJ1Y3RvciwKICAgICAgICAgQ29uc3RydWN0b3JQYXJhbWV0ZXJzPTIs
CisgICAgICAgIENvbnN0cnVjdG9yKGluIERPTVN0cmluZyBzZXJ2ZXJDb25maWd1cmF0aW9uLCBp
biBbQ2FsbGJhY2s9RnVuY3Rpb25Pbmx5XSBTaWduYWxpbmdDYWxsYmFjayBzaWduYWxpbmdDYWxs
YmFjayksCisgICAgICAgIENvbnN0cnVjdG9yV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0LAor
ICAgICAgICBKU0N1c3RvbUNvbnN0cnVjdG9yLAorICAgICAgICBWOENvbnN0cnVjdG9yU2V0c0Fj
dGl2ZURPTVdyYXBwZXIsCiAgICAgICAgIEV2ZW50VGFyZ2V0CiAgICAgXSBQZWVyQ29ubmVjdGlv
biB7CiAgICAgICAgIHZvaWQgcHJvY2Vzc1NpZ25hbGluZ01lc3NhZ2UoaW4gRE9NU3RyaW5nIG1l
c3NhZ2UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtQ2xpZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUNsaWVudC5oCShyZXZp
c2lvbiA5NzI4NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1DbGllbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtNDksMTUgKzQ5LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBzdG9wR2VuZXJhdGVkU3RyZWFtKGNvbnN0IFN0cmluZyYgc3RyZWFtTGFiZWwpID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0TWVkaWFTdHJlYW1UcmFja0VuYWJsZWQoY29uc3QgU3RyaW5nJiB0
cmFja0lkLCBib29sIGVuYWJsZWQpID0gMDsKIAotICAgIC8vIFBlZXJDb25uZWN0aW9uIGZ1bmN0
aW9ucy4KLSAgICB2aXJ0dWFsIHZvaWQgbmV3UGVlckNvbm5lY3Rpb24oaW50IHBlZXJDb25uZWN0
aW9uSWQsIGNvbnN0IFN0cmluZyYgY29uZmlndXJhdGlvbikgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBzdGFydE5lZ290aWF0aW9uKGludCBwZWVyQ29ubmVjdGlvbklkKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHByb2Nlc3NTaWduYWxpbmdNZXNzYWdlKGludCBwZWVyQ29ubmVjdGlvbklkLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbWVzc2FnZShpbnQgcGVl
ckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIGFkZFN0cmVhbShpbnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBzdHJlYW1M
YWJlbCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVTdHJlYW0oaW50IHBlZXJDb25uZWN0
aW9uSWQsIGNvbnN0IFN0cmluZyYgc3RyZWFtTGFiZWwpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
Y2xvc2VQZWVyQ29ubmVjdGlvbihpbnQgcGVlckNvbm5lY3Rpb25JZCkgPSAwOwotCiBwcm90ZWN0
ZWQ6CiAgICAgdmlydHVhbCB+TWVkaWFTdHJlYW1DbGllbnQoKSB7IH0KIH07CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA5
NzI4NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1Db250cm9sbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzQsOCArMzQsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LS8vIEZJWE1FOiBUaGlzIGlzIHVzZWQgZm9yIGhvbGRpbmcgbGlzdCBvZiBQZWVyQ29ubmVjdGlv
biBhcyB3ZWxsLAotLy8gc28gcmVuYW1lIGNsYXNzIGlzIGluIG9yZGVyLgogY2xhc3MgTWVkaWFT
dHJlYW1Db250cm9sbGVyOjpSZXF1ZXN0IHsKIHB1YmxpYzoKICAgICBSZXF1ZXN0KCkKQEAgLTU3
LDcgKzU1LDYgQEAgcHJpdmF0ZToKIE1lZGlhU3RyZWFtQ29udHJvbGxlcjo6TWVkaWFTdHJlYW1D
b250cm9sbGVyKE1lZGlhU3RyZWFtQ2xpZW50KiBjbGllbnQpCiAgICAgOiBtX2NsaWVudChjbGll
bnQpCiAgICAgLCBtX25leHRHbG9iYWxSZXF1ZXN0SWQoMSkKLSAgICAsIG1fbmV4dEdsb2JhbFBl
ZXJDb25uZWN0aW9uSWQoMSkKIHsKIH0KIApAQCAtMTU3LDEzMCArMTU0LDYgQEAgdm9pZCBNZWRp
YVN0cmVhbUNvbnRyb2xsZXI6OnN0cmVhbUZhaWxlZAogICAgICAgICBtX3N0cmVhbXMuZ2V0KHN0
cmVhbUxhYmVsKS0+c3RyZWFtRmFpbGVkKHN0cmVhbUxhYmVsKTsKIH0KIAotdm9pZCBNZWRpYVN0
cmVhbUNvbnRyb2xsZXI6Om9uU2lnbmFsaW5nTWVzc2FnZShpbnQgY29udHJvbGxlclBlZXJDb25u
ZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICAvLyBEb24ndCBhc3NlcnQg
c2luY2UgdGhlIGZyYW1lIGNvbnRyb2xsZXIgY2FuIGhhdmUgYmVlbiBkZXN0cm95ZWQuCi0gICAg
aWYgKG1fcGVlckNvbm5lY3Rpb25zLmNvbnRhaW5zKGNvbnRyb2xsZXJQZWVyQ29ubmVjdGlvbklk
KSkgewotICAgICAgICBjb25zdCBSZXF1ZXN0JiBwZWVyQ29ubmVjdGlvbiA9IG1fcGVlckNvbm5l
Y3Rpb25zLmdldChjb250cm9sbGVyUGVlckNvbm5lY3Rpb25JZCk7Ci0gICAgICAgIEFTU0VSVChw
ZWVyQ29ubmVjdGlvbi5mcmFtZUNvbnRyb2xsZXIoKSk7Ci0gICAgICAgIHBlZXJDb25uZWN0aW9u
LmZyYW1lQ29udHJvbGxlcigpLT5vblNpZ25hbGluZ01lc3NhZ2UocGVlckNvbm5lY3Rpb24ubG9j
YWxJZCgpLCBtZXNzYWdlKTsKLSAgICB9Ci19Ci0KLWJvb2wgTWVkaWFTdHJlYW1Db250cm9sbGVy
OjpmcmFtZVRvUGFnZVBlZXJDb25uZWN0aW9uSWQoTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIq
IGZyYW1lQ29udHJvbGxlciwgaW50IGZyYW1lUGVlckNvbm5lY3Rpb25JZCwgaW50JiBwYWdlUGVl
ckNvbm5lY3Rpb25JZCkKLXsKLSAgICBwYWdlUGVlckNvbm5lY3Rpb25JZCA9IC0xOwotICAgIC8v
IEZJWE1FOiBJcyB0aGVyZSBhIGJldHRlciB3YXkgdG8gZmluZCB0aGUgZ2xvYmFsIElEIGluIHRo
ZSBtYXA/Ci0gICAgZm9yIChSZXF1ZXN0TWFwOjppdGVyYXRvciBpdCA9IG1fcGVlckNvbm5lY3Rp
b25zLmJlZ2luKCk7IGl0ICE9IG1fcGVlckNvbm5lY3Rpb25zLmVuZCgpOyArK2l0KSB7Ci0gICAg
ICAgIGlmIChpdC0+c2Vjb25kLmZyYW1lQ29udHJvbGxlcigpID09IGZyYW1lQ29udHJvbGxlciAm
JiBpdC0+c2Vjb25kLmxvY2FsSWQoKSA9PSBmcmFtZVBlZXJDb25uZWN0aW9uSWQpIHsKLSAgICAg
ICAgICAgIHBhZ2VQZWVyQ29ubmVjdGlvbklkID0gaXQtPmZpcnN0OwotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lk
IE1lZGlhU3RyZWFtQ29udHJvbGxlcjo6cHJvY2Vzc1NpZ25hbGluZ01lc3NhZ2UoTWVkaWFTdHJl
YW1GcmFtZUNvbnRyb2xsZXIqIGZyYW1lQ29udHJvbGxlciwgaW50IGZyYW1lUGVlckNvbm5lY3Rp
b25JZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGludCBwYWdlUGVlckNvbm5lY3Rp
b25JZDsKLSAgICBpZiAoZnJhbWVUb1BhZ2VQZWVyQ29ubmVjdGlvbklkKGZyYW1lQ29udHJvbGxl
ciwgZnJhbWVQZWVyQ29ubmVjdGlvbklkLCBwYWdlUGVlckNvbm5lY3Rpb25JZCkpCi0gICAgICAg
IG1fY2xpZW50LT5wcm9jZXNzU2lnbmFsaW5nTWVzc2FnZShwYWdlUGVlckNvbm5lY3Rpb25JZCwg
bWVzc2FnZSk7Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1Db250cm9sbGVyOjptZXNzYWdlKE1lZGlh
U3RyZWFtRnJhbWVDb250cm9sbGVyKiBmcmFtZUNvbnRyb2xsZXIsIGludCBmcmFtZVBlZXJDb25u
ZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBpbnQgcGFnZVBlZXJDb25u
ZWN0aW9uSWQ7Ci0gICAgaWYgKGZyYW1lVG9QYWdlUGVlckNvbm5lY3Rpb25JZChmcmFtZUNvbnRy
b2xsZXIsIGZyYW1lUGVlckNvbm5lY3Rpb25JZCwgcGFnZVBlZXJDb25uZWN0aW9uSWQpKQotICAg
ICAgICBtX2NsaWVudC0+bWVzc2FnZShwYWdlUGVlckNvbm5lY3Rpb25JZCwgbWVzc2FnZSk7Ci19
Ci0KLXZvaWQgTWVkaWFTdHJlYW1Db250cm9sbGVyOjpvbk1lc3NhZ2UoaW50IGNvbnRyb2xsZXJQ
ZWVyQ29ubmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgLy8gRG9uJ3Qg
YXNzZXJ0IHNpbmNlIHRoZSBmcmFtZSBjb250cm9sbGVyIGNhbiBoYXZlIGJlZW4gZGVzdHJveWVk
Ci0gICAgaWYgKG1fcGVlckNvbm5lY3Rpb25zLmNvbnRhaW5zKGNvbnRyb2xsZXJQZWVyQ29ubmVj
dGlvbklkKSkgewotICAgICAgICBjb25zdCBSZXF1ZXN0JiBwZWVyQ29ubmVjdGlvbiA9IG1fcGVl
ckNvbm5lY3Rpb25zLmdldChjb250cm9sbGVyUGVlckNvbm5lY3Rpb25JZCk7Ci0gICAgICAgIEFT
U0VSVChwZWVyQ29ubmVjdGlvbi5mcmFtZUNvbnRyb2xsZXIoKSk7Ci0gICAgICAgIHBlZXJDb25u
ZWN0aW9uLmZyYW1lQ29udHJvbGxlcigpLT5vbk1lc3NhZ2UocGVlckNvbm5lY3Rpb24ubG9jYWxJ
ZCgpLCBtZXNzYWdlKTsKLSAgICB9Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1Db250cm9sbGVyOjph
ZGRTdHJlYW0oTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqIGZyYW1lQ29udHJvbGxlciwgaW50
IGZyYW1lUGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCkKLXsKLSAg
ICBpbnQgcGFnZVBlZXJDb25uZWN0aW9uSWQ7Ci0gICAgaWYgKGZyYW1lVG9QYWdlUGVlckNvbm5l
Y3Rpb25JZChmcmFtZUNvbnRyb2xsZXIsIGZyYW1lUGVlckNvbm5lY3Rpb25JZCwgcGFnZVBlZXJD
b25uZWN0aW9uSWQpKQotICAgICAgICBtX2NsaWVudC0+YWRkU3RyZWFtKHBhZ2VQZWVyQ29ubmVj
dGlvbklkLCBzdHJlYW1MYWJlbCk7Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1Db250cm9sbGVyOjpv
bkFkZFN0cmVhbShpbnQgY29udHJvbGxlclBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYg
c3RyZWFtTGFiZWwsIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja0xpc3Q+IHRyYWNrcykKLXsK
LSAgICAvLyBEb24ndCBhc3NlcnQgc2luY2UgdGhlIGZyYW1lIGNvbnRyb2xsZXIgY2FuIGhhdmUg
YmVlbiBkZXN0cm95ZWQKLSAgICBpZiAobV9wZWVyQ29ubmVjdGlvbnMuY29udGFpbnMoY29udHJv
bGxlclBlZXJDb25uZWN0aW9uSWQpKSB7Ci0gICAgICAgIGNvbnN0IFJlcXVlc3QmIHBlZXJDb25u
ZWN0aW9uID0gbV9wZWVyQ29ubmVjdGlvbnMuZ2V0KGNvbnRyb2xsZXJQZWVyQ29ubmVjdGlvbklk
KTsKLSAgICAgICAgQVNTRVJUKHBlZXJDb25uZWN0aW9uLmZyYW1lQ29udHJvbGxlcigpKTsKLSAg
ICAgICAgcGVlckNvbm5lY3Rpb24uZnJhbWVDb250cm9sbGVyKCktPm9uQWRkU3RyZWFtKHBlZXJD
b25uZWN0aW9uLmxvY2FsSWQoKSwgc3RyZWFtTGFiZWwsIHRyYWNrcyk7Ci0gICAgfQotfQotCi12
b2lkIE1lZGlhU3RyZWFtQ29udHJvbGxlcjo6cmVtb3ZlU3RyZWFtKE1lZGlhU3RyZWFtRnJhbWVD
b250cm9sbGVyKiBmcmFtZUNvbnRyb2xsZXIsIGludCBmcmFtZVBlZXJDb25uZWN0aW9uSWQsIGNv
bnN0IFN0cmluZyYgc3RyZWFtTGFiZWwpCi17Ci0gICAgaW50IHBhZ2VQZWVyQ29ubmVjdGlvbklk
OwotICAgIGlmIChmcmFtZVRvUGFnZVBlZXJDb25uZWN0aW9uSWQoZnJhbWVDb250cm9sbGVyLCBm
cmFtZVBlZXJDb25uZWN0aW9uSWQsIHBhZ2VQZWVyQ29ubmVjdGlvbklkKSkKLSAgICAgICAgbV9j
bGllbnQtPnJlbW92ZVN0cmVhbShwYWdlUGVlckNvbm5lY3Rpb25JZCwgc3RyZWFtTGFiZWwpOwot
fQotCi12b2lkIE1lZGlhU3RyZWFtQ29udHJvbGxlcjo6b25SZW1vdmVTdHJlYW0oaW50IGNvbnRy
b2xsZXJQZWVyQ29ubmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIHN0cmVhbUxhYmVsKQotewotICAg
IC8vIERvbid0IGFzc2VydCBzaW5jZSB0aGUgZnJhbWUgY29udHJvbGxlciBjYW4gaGF2ZSBiZWVu
IGRlc3Ryb3llZAotICAgIGlmIChtX3BlZXJDb25uZWN0aW9ucy5jb250YWlucyhjb250cm9sbGVy
UGVlckNvbm5lY3Rpb25JZCkpIHsKLSAgICAgICAgLy8gVE9ETzogQmV0dGVyIG5hbWUgb2YgcGVl
ckNvbm5lY3Rpb24gdmFyaWFibGU/Ci0gICAgICAgIGNvbnN0IFJlcXVlc3QmIHBlZXJDb25uZWN0
aW9uID0gbV9wZWVyQ29ubmVjdGlvbnMuZ2V0KGNvbnRyb2xsZXJQZWVyQ29ubmVjdGlvbklkKTsK
LSAgICAgICAgQVNTRVJUKHBlZXJDb25uZWN0aW9uLmZyYW1lQ29udHJvbGxlcigpKTsKLSAgICAg
ICAgcGVlckNvbm5lY3Rpb24uZnJhbWVDb250cm9sbGVyKCktPm9uUmVtb3ZlU3RyZWFtKHBlZXJD
b25uZWN0aW9uLmxvY2FsSWQoKSwgc3RyZWFtTGFiZWwpOwotICAgIH0KLX0KLQotdm9pZCBNZWRp
YVN0cmVhbUNvbnRyb2xsZXI6Om5ld1BlZXJDb25uZWN0aW9uKE1lZGlhU3RyZWFtRnJhbWVDb250
cm9sbGVyKiBmcmFtZUNvbnRyb2xsZXIsIGludCBmcmFtZVBlZXJDb25uZWN0aW9uSWQsIGNvbnN0
IFN0cmluZyYgY29uZmlndXJhdGlvbikKLXsKLSAgICBpbnQgcGFnZVBlZXJDb25uZWN0aW9uSWQg
PSBtX25leHRHbG9iYWxQZWVyQ29ubmVjdGlvbklkKys7Ci0gICAgbV9wZWVyQ29ubmVjdGlvbnMu
YWRkKHBhZ2VQZWVyQ29ubmVjdGlvbklkLCBSZXF1ZXN0KGZyYW1lUGVlckNvbm5lY3Rpb25JZCwg
ZnJhbWVDb250cm9sbGVyKSk7Ci0KLSAgICBtX2NsaWVudC0+bmV3UGVlckNvbm5lY3Rpb24ocGFn
ZVBlZXJDb25uZWN0aW9uSWQsIGNvbmZpZ3VyYXRpb24pOwotfQotCi12b2lkIE1lZGlhU3RyZWFt
Q29udHJvbGxlcjo6Y2xvc2VQZWVyQ29ubmVjdGlvbihNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxl
ciogZnJhbWVDb250cm9sbGVyLCBpbnQgZnJhbWVQZWVyQ29ubmVjdGlvbklkKQotewotICAgIGlu
dCBwYWdlUGVlckNvbm5lY3Rpb25JZDsKLSAgICBpZiAoZnJhbWVUb1BhZ2VQZWVyQ29ubmVjdGlv
bklkKGZyYW1lQ29udHJvbGxlciwgZnJhbWVQZWVyQ29ubmVjdGlvbklkLCBwYWdlUGVlckNvbm5l
Y3Rpb25JZCkpCi0gICAgICAgIG1fY2xpZW50LT5jbG9zZVBlZXJDb25uZWN0aW9uKHBhZ2VQZWVy
Q29ubmVjdGlvbklkKTsKLX0KLQotdm9pZCBNZWRpYVN0cmVhbUNvbnRyb2xsZXI6OnN0YXJ0TmVn
b3RpYXRpb24oTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqIGZyYW1lQ29udHJvbGxlciwgaW50
IGZyYW1lUGVlckNvbm5lY3Rpb25JZCkKLXsKLSAgICBpbnQgcGFnZVBlZXJDb25uZWN0aW9uSWQ7
Ci0gICAgaWYgKGZyYW1lVG9QYWdlUGVlckNvbm5lY3Rpb25JZChmcmFtZUNvbnRyb2xsZXIsIGZy
YW1lUGVlckNvbm5lY3Rpb25JZCwgcGFnZVBlZXJDb25uZWN0aW9uSWQpKQotICAgICAgICBtX2Ns
aWVudC0+c3RhcnROZWdvdGlhdGlvbihwYWdlUGVlckNvbm5lY3Rpb25JZCk7Ci19Ci0KLXZvaWQg
TWVkaWFTdHJlYW1Db250cm9sbGVyOjpvbk5lZ290aWF0aW9uU3RhcnRlZChpbnQgY29udHJvbGxl
clBlZXJDb25uZWN0aW9uSWQpCi17Ci0gICAgLy8gRG9uJ3QgYXNzZXJ0IHNpbmNlIHRoZSBmcmFt
ZSBjb250cm9sbGVyIGNhbiBoYXZlIGJlZW4gZGVzdHJveWVkCi0gICAgaWYgKG1fcGVlckNvbm5l
Y3Rpb25zLmNvbnRhaW5zKGNvbnRyb2xsZXJQZWVyQ29ubmVjdGlvbklkKSkgewotICAgICAgICBj
b25zdCBSZXF1ZXN0JiBwZWVyQ29ubmVjdGlvbiA9IG1fcGVlckNvbm5lY3Rpb25zLmdldChjb250
cm9sbGVyUGVlckNvbm5lY3Rpb25JZCk7Ci0gICAgICAgIEFTU0VSVChwZWVyQ29ubmVjdGlvbi5m
cmFtZUNvbnRyb2xsZXIoKSk7Ci0gICAgICAgIHBlZXJDb25uZWN0aW9uLmZyYW1lQ29udHJvbGxl
cigpLT5vbk5lZ290aWF0aW9uU3RhcnRlZChwZWVyQ29ubmVjdGlvbi5sb2NhbElkKCkpOwotICAg
IH0KLX0KLQotdm9pZCBNZWRpYVN0cmVhbUNvbnRyb2xsZXI6Om9uTmVnb3RpYXRpb25Eb25lKGlu
dCBjb250cm9sbGVyUGVlckNvbm5lY3Rpb25JZCkKLXsKLSAgICAvLyBEb24ndCBhc3NlcnQgc2lu
Y2UgdGhlIGZyYW1lIGNvbnRyb2xsZXIgY2FuIGhhdmUgYmVlbiBkZXN0cm95ZWQKLSAgICBpZiAo
bV9wZWVyQ29ubmVjdGlvbnMuY29udGFpbnMoY29udHJvbGxlclBlZXJDb25uZWN0aW9uSWQpKSB7
Ci0gICAgICAgIGNvbnN0IFJlcXVlc3QmIHBlZXJDb25uZWN0aW9uID0gbV9wZWVyQ29ubmVjdGlv
bnMuZ2V0KGNvbnRyb2xsZXJQZWVyQ29ubmVjdGlvbklkKTsKLSAgICAgICAgQVNTRVJUKHBlZXJD
b25uZWN0aW9uLmZyYW1lQ29udHJvbGxlcigpKTsKLSAgICAgICAgcGVlckNvbm5lY3Rpb24uZnJh
bWVDb250cm9sbGVyKCktPm9uTmVnb3RpYXRpb25Eb25lKHBlZXJDb25uZWN0aW9uLmxvY2FsSWQo
KSk7Ci0gICAgfQotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFC
TEUoTUVESUFfU1RSRUFNKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUNv
bnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFt
Q29udHJvbGxlci5oCShyZXZpc2lvbiA5NzI4NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvTWVk
aWFTdHJlYW1Db250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDQwICs2MCwxOSBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzdHJlYW1HZW5lcmF0aW9uRmFpbGVkKGludCByZXF1ZXN0SWQsIE5h
dmlnYXRvclVzZXJNZWRpYUVycm9yOjpFcnJvckNvZGUpOwogICAgIHZvaWQgc3RyZWFtRmFpbGVk
KGNvbnN0IFN0cmluZyYgc3RyZWFtTGFiZWwpOwogCi0gICAgLyogSlMgLT4gVUEgKi8KLSAgICB2
b2lkIG5ld1BlZXJDb25uZWN0aW9uKE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKiwgaW50IGZy
YW1lUGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBjb25maWd1cmF0aW9uKTsKLSAgICB2
b2lkIHN0YXJ0TmVnb3RpYXRpb24oTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqLCBpbnQgZnJh
bWVQZWVyQ29ubmVjdGlvbklkKTsKLSAgICB2b2lkIHByb2Nlc3NTaWduYWxpbmdNZXNzYWdlKE1l
ZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKiwgaW50IGZyYW1lUGVlckNvbm5lY3Rpb25JZCwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlKTsKLSAgICB2b2lkIG1lc3NhZ2UoTWVkaWFTdHJlYW1GcmFtZUNv
bnRyb2xsZXIqLCBpbnQgZnJhbWVQZWVyQ29ubmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpOwotICAgIHZvaWQgYWRkU3RyZWFtKE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKiwgaW50
IGZyYW1lUGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCk7Ci0gICAg
dm9pZCByZW1vdmVTdHJlYW0oTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqLCBpbnQgZnJhbWVQ
ZWVyQ29ubmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIHN0cmVhbUxhYmVsKTsKLSAgICB2b2lkIGNs
b3NlUGVlckNvbm5lY3Rpb24oTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqLCBpbnQgZnJhbWVQ
ZWVyQ29ubmVjdGlvbklkKTsKLQotICAgIC8qIFVBIC0+IEpTICovCi0gICAgdm9pZCBvblNpZ25h
bGluZ01lc3NhZ2UoaW50IGNvbnRyb2xsZXJQZWVyQ29ubmVjdGlvbklkLCBjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpOwotICAgIHZvaWQgb25NZXNzYWdlKGludCBjb250cm9sbGVyUGVlckNvbm5lY3Rp
b25JZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLSAgICB2b2lkIG9uQWRkU3RyZWFtKGludCBj
b250cm9sbGVyUGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCwgUGFz
c1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrTGlzdD4gdHJhY2tzKTsKLSAgICB2b2lkIG9uUmVtb3Zl
U3RyZWFtKGludCBjb250cm9sbGVyUGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBzdHJl
YW1MYWJlbCk7Ci0gICAgdm9pZCBvbk5lZ290aWF0aW9uU3RhcnRlZChpbnQgY29udHJvbGxlclBl
ZXJDb25uZWN0aW9uSWQpOwotICAgIHZvaWQgb25OZWdvdGlhdGlvbkRvbmUoaW50IGNvbnRyb2xs
ZXJQZWVyQ29ubmVjdGlvbklkKTsKLQogcHJpdmF0ZToKICAgICBpbnQgcmVnaXN0ZXJSZXF1ZXN0
KGludCBsb2NhbFJlcXVlc3RJZCwgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqKTsKICAgICB2
b2lkIHJlZ2lzdGVyU3RyZWFtKGNvbnN0IFN0cmluZyYgc3RyZWFtTGFiZWwsIE1lZGlhU3RyZWFt
RnJhbWVDb250cm9sbGVyKik7CiAKLSAgICBib29sIGZyYW1lVG9QYWdlUGVlckNvbm5lY3Rpb25J
ZChNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciosIGludCBmcmFtZVBlZXJDb25uZWN0aW9uSWQs
IGludCYgcGFnZVBlZXJDb25uZWN0aW9uSWQpOwotCiAgICAgY2xhc3MgUmVxdWVzdDsKICAgICB0
eXBlZGVmIEhhc2hNYXA8aW50LCBSZXF1ZXN0PiBSZXF1ZXN0TWFwOwogICAgIHR5cGVkZWYgSGFz
aE1hcDxTdHJpbmcsIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKj4gU3RyZWFtTWFwOwogCiAg
ICAgUmVxdWVzdE1hcCBtX3JlcXVlc3RzOwogICAgIFN0cmVhbU1hcCBtX3N0cmVhbXM7Ci0gICAg
UmVxdWVzdE1hcCBtX3BlZXJDb25uZWN0aW9uczsKIAogICAgIE1lZGlhU3RyZWFtQ2xpZW50KiBt
X2NsaWVudDsKICAgICBpbnQgbV9uZXh0R2xvYmFsUmVxdWVzdElkOwotICAgIGludCBtX25leHRH
bG9iYWxQZWVyQ29ubmVjdGlvbklkOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxl
ci5jcHAJKHJldmlzaW9uIDk3Mjg3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVh
bUZyYW1lQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDkgKzM2LDcgQEAKICNp
bmNsdWRlICJOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvckNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiTmF2
aWdhdG9yVXNlck1lZGlhU3VjY2Vzc0NhbGxiYWNrLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgotI2lu
Y2x1ZGUgIlBlZXJDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNp
bmNsdWRlICJTaWduYWxpbmdDYWxsYmFjay5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM2MywxMjYgKzM2MSw2IEBAIHZvaWQgTWVkaWFT
dHJlYW1GcmFtZUNvbnRyb2xsZXI6OnN0cmVhbUYKICAgICBnZXRTdHJlYW1Gcm9tTGFiZWwobGFi
ZWwpLT5zdHJlYW1FbmRlZCgpOwogfQogCi1QYXNzUmVmUHRyPFBlZXJDb25uZWN0aW9uPiBNZWRp
YVN0cmVhbUZyYW1lQ29udHJvbGxlcjo6Y3JlYXRlUGVlckNvbm5lY3Rpb24oY29uc3QgU3RyaW5n
JiBjb25maWd1cmF0aW9uLCBQYXNzUmVmUHRyPFNpZ25hbGluZ0NhbGxiYWNrPiBzaWduYWxpbmdD
YWxsYmFjaykKLXsKLSAgICBpbnQgY2xpZW50SWQgPSBtX2NsaWVudHMuZ2V0TmV4dElkKCk7Ci0g
ICAgUmVmUHRyPFBlZXJDb25uZWN0aW9uPiBwZWVyQ29ubmVjdGlvbiA9IFBlZXJDb25uZWN0aW9u
OjpjcmVhdGUodGhpcywgY2xpZW50SWQsIGNvbmZpZ3VyYXRpb24sIHNpZ25hbGluZ0NhbGxiYWNr
KTsKLSAgICBpZiAocGVlckNvbm5lY3Rpb24pCi0gICAgICAgIG1fY2xpZW50cy5hZGQoY2xpZW50
SWQsIHBlZXJDb25uZWN0aW9uLmdldCgpKTsKLSAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24ucmVs
ZWFzZSgpOwotfQotCi12b2lkIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjpuZXdQZWVyQ29u
bmVjdGlvbihpbnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBjb25maWd1cmF0aW9u
KQotewotICAgIGlmIChwYWdlQ29udHJvbGxlcigpKQotICAgICAgICBwYWdlQ29udHJvbGxlcigp
LT5uZXdQZWVyQ29ubmVjdGlvbih0aGlzLCBwZWVyQ29ubmVjdGlvbklkLCBjb25maWd1cmF0aW9u
KTsKLX0KLQotdm9pZCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcjo6Y2xvc2VQZWVyQ29ubmVj
dGlvbihpbnQgcGVlckNvbm5lY3Rpb25JZCkKLXsKLSAgICBpZiAocGFnZUNvbnRyb2xsZXIoKSkK
LSAgICAgICAgcGFnZUNvbnRyb2xsZXIoKS0+Y2xvc2VQZWVyQ29ubmVjdGlvbih0aGlzLCBwZWVy
Q29ubmVjdGlvbklkKTsKLX0KLQotdm9pZCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcjo6c3Rh
cnROZWdvdGlhdGlvbihpbnQgcGVlckNvbm5lY3Rpb25JZCkKLXsKLSAgICBpZiAocGFnZUNvbnRy
b2xsZXIoKSkKLSAgICAgICAgcGFnZUNvbnRyb2xsZXIoKS0+c3RhcnROZWdvdGlhdGlvbih0aGlz
LCBwZWVyQ29ubmVjdGlvbklkKTsKLX0KLQotdm9pZCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxl
cjo6cHJvY2Vzc1NpZ25hbGluZ01lc3NhZ2UoaW50IHBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0
cmluZyYgbWVzc2FnZSkKLXsKLSAgICBpZiAocGFnZUNvbnRyb2xsZXIoKSkKLSAgICAgICAgcGFn
ZUNvbnRyb2xsZXIoKS0+cHJvY2Vzc1NpZ25hbGluZ01lc3NhZ2UodGhpcywgcGVlckNvbm5lY3Rp
b25JZCwgbWVzc2FnZSk7Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6Om1l
c3NhZ2UoaW50IHBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAg
ICBpZiAocGFnZUNvbnRyb2xsZXIoKSkKLSAgICAgICAgcGFnZUNvbnRyb2xsZXIoKS0+bWVzc2Fn
ZSh0aGlzLCBwZWVyQ29ubmVjdGlvbklkLCBtZXNzYWdlKTsKLX0KLQotdm9pZCBNZWRpYVN0cmVh
bUZyYW1lQ29udHJvbGxlcjo6YWRkU3RyZWFtKGludCBwZWVyQ29ubmVjdGlvbklkLCBQYXNzUmVm
UHRyPE1lZGlhU3RyZWFtPiBwcnBTdHJlYW0pCi17Ci0gICAgUmVmUHRyPE1lZGlhU3RyZWFtPiBz
dHJlYW0gPSBwcnBTdHJlYW07Ci0gICAgQVNTRVJUKG1fc3RyZWFtcy5jb250YWlucyhzdHJlYW0t
PmxhYmVsKCkpKTsKLQotICAgIGlmIChwYWdlQ29udHJvbGxlcigpKQotICAgICAgICBwYWdlQ29u
dHJvbGxlcigpLT5hZGRTdHJlYW0odGhpcywgcGVlckNvbm5lY3Rpb25JZCwgc3RyZWFtLT5sYWJl
bCgpKTsKLX0KLQotdm9pZCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcjo6cmVtb3ZlU3RyZWFt
KGludCBwZWVyQ29ubmVjdGlvbklkLCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPiBwcnBTdHJlYW0p
Ci17Ci0gICAgUmVmUHRyPE1lZGlhU3RyZWFtPiBzdHJlYW0gPSBwcnBTdHJlYW07Ci0gICAgQVNT
RVJUKG1fc3RyZWFtcy5jb250YWlucyhzdHJlYW0tPmxhYmVsKCkpKTsKLQotICAgIGlmIChwYWdl
Q29udHJvbGxlcigpKQotICAgICAgICBwYWdlQ29udHJvbGxlcigpLT5yZW1vdmVTdHJlYW0odGhp
cywgcGVlckNvbm5lY3Rpb25JZCwgc3RyZWFtLT5sYWJlbCgpKTsKLX0KLQotdm9pZCBNZWRpYVN0
cmVhbUZyYW1lQ29udHJvbGxlcjo6b25NZXNzYWdlKGludCBwZWVyQ29ubmVjdGlvbklkLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgQVNTRVJUKG1fY2xpZW50cy5jb250YWlucyhwZWVy
Q29ubmVjdGlvbklkKSk7Ci0gICAgQVNTRVJUKG1fY2xpZW50cy5nZXQocGVlckNvbm5lY3Rpb25J
ZCktPmlzUGVlckNvbm5lY3Rpb24oKSk7Ci0KLSAgICBSZWZQdHI8UGVlckNvbm5lY3Rpb24+IHBl
ZXJDb25uZWN0aW9uID0gc3RhdGljX2Nhc3Q8UGVlckNvbm5lY3Rpb24qPihtX2NsaWVudHMuZ2V0
KHBlZXJDb25uZWN0aW9uSWQpKTsKLQotICAgIHBlZXJDb25uZWN0aW9uLT5vbk1lc3NhZ2UobWVz
c2FnZSk7Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6Om9uQWRkU3RyZWFt
KGludCBwZWVyQ29ubmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIHN0cmVhbUxhYmVsLCBQYXNzUmVm
UHRyPE1lZGlhU3RyZWFtVHJhY2tMaXN0PiB0cmFja3MpCi17Ci0gICAgQVNTRVJUKCFzdHJlYW1M
YWJlbC5pc0VtcHR5KCkpOwotICAgIEFTU0VSVChtX2NsaWVudHMuY29udGFpbnMocGVlckNvbm5l
Y3Rpb25JZCkpOwotICAgIEFTU0VSVChtX2NsaWVudHMuZ2V0KHBlZXJDb25uZWN0aW9uSWQpLT5p
c1BlZXJDb25uZWN0aW9uKCkpOwotCi0gICAgUmVmUHRyPE1lZGlhU3RyZWFtPiBzdHJlYW0gPSBN
ZWRpYVN0cmVhbTo6Y3JlYXRlKHRoaXMsIHN0cmVhbUxhYmVsLCB0cmFja3MpOwotCi0gICAgUmVm
UHRyPFBlZXJDb25uZWN0aW9uPiBwZWVyQ29ubmVjdGlvbiA9IHN0YXRpY19jYXN0PFBlZXJDb25u
ZWN0aW9uKj4obV9jbGllbnRzLmdldChwZWVyQ29ubmVjdGlvbklkKSk7Ci0gICAgcGVlckNvbm5l
Y3Rpb24tPnN0cmVhbUFkZGVkKHN0cmVhbS5yZWxlYXNlKCkpOwotfQotCi12b2lkIE1lZGlhU3Ry
ZWFtRnJhbWVDb250cm9sbGVyOjpvblJlbW92ZVN0cmVhbShpbnQgcGVlckNvbm5lY3Rpb25JZCwg
Y29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCkKLXsKLSAgICBBU1NFUlQoIXN0cmVhbUxhYmVsLmlz
RW1wdHkoKSk7Ci0gICAgQVNTRVJUKG1fY2xpZW50cy5jb250YWlucyhwZWVyQ29ubmVjdGlvbklk
KSk7Ci0gICAgQVNTRVJUKG1fY2xpZW50cy5nZXQocGVlckNvbm5lY3Rpb25JZCktPmlzUGVlckNv
bm5lY3Rpb24oKSk7Ci0KLSAgICBSZWZQdHI8UGVlckNvbm5lY3Rpb24+IHBlZXJDb25uZWN0aW9u
ID0gc3RhdGljX2Nhc3Q8UGVlckNvbm5lY3Rpb24qPihtX2NsaWVudHMuZ2V0KHBlZXJDb25uZWN0
aW9uSWQpKTsKLSAgICBwZWVyQ29ubmVjdGlvbi0+c3RyZWFtUmVtb3ZlZChzdHJlYW1MYWJlbCk7
Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6Om9uU2lnbmFsaW5nTWVzc2Fn
ZShpbnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIEFT
U0VSVChtX2NsaWVudHMuY29udGFpbnMocGVlckNvbm5lY3Rpb25JZCkpOwotICAgIEFTU0VSVCht
X2NsaWVudHMuZ2V0KHBlZXJDb25uZWN0aW9uSWQpLT5pc1BlZXJDb25uZWN0aW9uKCkpOwotCi0g
ICAgUmVmUHRyPFBlZXJDb25uZWN0aW9uPiBwZWVyQ29ubmVjdGlvbiA9IHN0YXRpY19jYXN0PFBl
ZXJDb25uZWN0aW9uKj4obV9jbGllbnRzLmdldChwZWVyQ29ubmVjdGlvbklkKSk7Ci0gICAgcGVl
ckNvbm5lY3Rpb24tPm9uU2lnbmFsaW5nTWVzc2FnZShtZXNzYWdlKTsKLX0KLQotdm9pZCBNZWRp
YVN0cmVhbUZyYW1lQ29udHJvbGxlcjo6b25OZWdvdGlhdGlvblN0YXJ0ZWQoaW50IHBlZXJDb25u
ZWN0aW9uSWQpCi17Ci0gICAgLy8gRklYTUU6IEFzc2VydCBvciBub3Q/Ci0gICAgQVNTRVJUKG1f
Y2xpZW50cy5jb250YWlucyhwZWVyQ29ubmVjdGlvbklkKSk7Ci0gICAgQVNTRVJUKG1fY2xpZW50
cy5nZXQocGVlckNvbm5lY3Rpb25JZCktPmlzUGVlckNvbm5lY3Rpb24oKSk7Ci0KLSAgICBSZWZQ
dHI8UGVlckNvbm5lY3Rpb24+IHBlZXJDb25uZWN0aW9uID0gc3RhdGljX2Nhc3Q8UGVlckNvbm5l
Y3Rpb24qPihtX2NsaWVudHMuZ2V0KHBlZXJDb25uZWN0aW9uSWQpKTsKLQotICAgIHBlZXJDb25u
ZWN0aW9uLT5vbk5lZ290aWF0aW9uU3RhcnRlZCgpOwotfQotCi12b2lkIE1lZGlhU3RyZWFtRnJh
bWVDb250cm9sbGVyOjpvbk5lZ290aWF0aW9uRG9uZShpbnQgcGVlckNvbm5lY3Rpb25JZCkKLXsK
LSAgICAvLyBGSVhNRTogQXNzZXJ0IG9yIG5vdD8KLSAgICBBU1NFUlQobV9jbGllbnRzLmNvbnRh
aW5zKHBlZXJDb25uZWN0aW9uSWQpKTsKLSAgICBBU1NFUlQobV9jbGllbnRzLmdldChwZWVyQ29u
bmVjdGlvbklkKS0+aXNQZWVyQ29ubmVjdGlvbigpKTsKLQotICAgIFJlZlB0cjxQZWVyQ29ubmVj
dGlvbj4gcGVlckNvbm5lY3Rpb24gPSBzdGF0aWNfY2FzdDxQZWVyQ29ubmVjdGlvbio+KG1fY2xp
ZW50cy5nZXQocGVlckNvbm5lY3Rpb25JZCkpOwotCi0gICAgcGVlckNvbm5lY3Rpb24tPm9uTmVn
b3RpYXRpb25Eb25lKCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8v
IEVOQUJMRShNRURJQV9TVFJFQU0pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3Ry
ZWFtRnJhbWVDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9N
ZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlci5oCShyZXZpc2lvbiA5NzI4NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNDUsNyArNDUsNiBAQCBjbGFzcyBNZWRpYVN0cmVhbVRyYWNrTGlzdDsKIGNsYXNzIE5hdmln
YXRvclVzZXJNZWRpYUVycm9yQ2FsbGJhY2s7CiBjbGFzcyBOYXZpZ2F0b3JVc2VyTWVkaWFTdWNj
ZXNzQ2FsbGJhY2s7CiBjbGFzcyBQYWdlOwotY2xhc3MgUGVlckNvbm5lY3Rpb247CiBjbGFzcyBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CiBjbGFzcyBTaWdu
YWxpbmdDYWxsYmFjazsKQEAgLTcxLDcgKzcwLDYgQEAgcHVibGljOgogICAgICAgICB2aXJ0dWFs
IGJvb2wgaXNNZWRpYVN0cmVhbSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZp
cnR1YWwgYm9vbCBpc0xvY2FsTWVkaWFTdHJlYW0oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
ICAgICAgICB2aXJ0dWFsIGJvb2wgaXNHZW5lcmljQ2xpZW50KCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KLSAgICAgICAgdmlydHVhbCBib29sIGlzUGVlckNvbm5lY3Rpb24oKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogCiAgICAgICAgIC8vIENhbGxlZCB3aGVuIHRoZSBmcmFtZSBjb250cm9s
bGVyIGlzIGJlaW5nIGRpc2Nvbm5lY3RlZCB0byB0aGUgTWVkaWFTdHJlYW1DbGllbnQgZW1iZWRk
ZXIuCiAgICAgICAgIC8vIENsaWVudHMgc2hvdWxkIG92ZXJyaWRlIHRoaXMgdG8gc2VuZCBhbnkg
cmVxdWlyZWQgc2h1dGRvd24gbWVzc2FnZXMuCkBAIC0xNDAsMTMgKzEzOCw2IEBAIHB1YmxpYzoK
ICAgICAgICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXIoKSB7IHVucmVnaXN0ZXJDbGllbnQodGhp
cyk7IH0KICAgICB9OwogCi0gICAgY2xhc3MgUGVlckNvbm5lY3Rpb25DbGllbnQgOiBwdWJsaWMg
R2VuZXJpY0NsaWVudCB7Ci0gICAgcHVibGljOgotICAgICAgICBQZWVyQ29ubmVjdGlvbkNsaWVu
dChNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciogZnJhbWVDb250cm9sbGVyLCBpbnQgaWQpIDog
R2VuZXJpY0NsaWVudChmcmFtZUNvbnRyb2xsZXIsIGlkKSB7IH0KLSAgICAgICAgdmlydHVhbCB+
UGVlckNvbm5lY3Rpb25DbGllbnQoKSB7IH0KLSAgICAgICAgdmlydHVhbCBib29sIGlzUGVlckNv
bm5lY3Rpb24oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgfTsKLQogICAgIE1lZGlhU3Ry
ZWFtRnJhbWVDb250cm9sbGVyKEZyYW1lKik7CiAgICAgdmlydHVhbCB+TWVkaWFTdHJlYW1GcmFt
ZUNvbnRyb2xsZXIoKTsKIApAQCAtMTYzLDI4ICsxNTQsMTIgQEAgcHVibGljOgogICAgIHZvaWQg
c3RvcEdlbmVyYXRlZFN0cmVhbShjb25zdCBTdHJpbmcmIHN0cmVhbUxhYmVsKTsKICAgICB2b2lk
IHNldE1lZGlhU3RyZWFtVHJhY2tFbmFibGVkKGNvbnN0IFN0cmluZyYgdHJhY2tJZCwgYm9vbCBl
bmFibGVkKTsKIAotICAgIFBhc3NSZWZQdHI8UGVlckNvbm5lY3Rpb24+IGNyZWF0ZVBlZXJDb25u
ZWN0aW9uKGNvbnN0IFN0cmluZyYgY29uZmlndXJhdGlvbiwgUGFzc1JlZlB0cjxTaWduYWxpbmdD
YWxsYmFjaz4pOwotICAgIHZvaWQgbmV3UGVlckNvbm5lY3Rpb24oaW50IHBlZXJDb25uZWN0aW9u
SWQsIGNvbnN0IFN0cmluZyYgY29uZmlndXJhdGlvbik7Ci0gICAgdm9pZCBzdGFydE5lZ290aWF0
aW9uKGludCBwZWVyQ29ubmVjdGlvbklkKTsKLSAgICB2b2lkIHByb2Nlc3NTaWduYWxpbmdNZXNz
YWdlKGludCBwZWVyQ29ubmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwotICAgIHZv
aWQgbWVzc2FnZShpbnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsK
LSAgICB2b2lkIGFkZFN0cmVhbShpbnQgcGVlckNvbm5lY3Rpb25JZCwgUGFzc1JlZlB0cjxNZWRp
YVN0cmVhbT4pOwotICAgIHZvaWQgcmVtb3ZlU3RyZWFtKGludCBwZWVyQ29ubmVjdGlvbklkLCBQ
YXNzUmVmUHRyPE1lZGlhU3RyZWFtPik7Ci0gICAgdm9pZCBjbG9zZVBlZXJDb25uZWN0aW9uKGlu
dCBwZWVyQ29ubmVjdGlvbklkKTsKLQogICAgIC8vIC0tLSBDYWxscyBjb21pbmcgYmFjayBmcm9t
IHRoZSBjb250cm9sbGVyLiAtLS0gLy8KIAogICAgIHZvaWQgc3RyZWFtR2VuZXJhdGVkKGludCBy
ZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgc3RyZWFtTGFiZWwsIFBhc3NSZWZQdHI8TWVkaWFTdHJl
YW1UcmFja0xpc3Q+IHRyYWNrcyk7CiAgICAgdm9pZCBzdHJlYW1HZW5lcmF0aW9uRmFpbGVkKGlu
dCByZXF1ZXN0SWQsIE5hdmlnYXRvclVzZXJNZWRpYUVycm9yOjpFcnJvckNvZGUpOwogICAgIHZv
aWQgc3RyZWFtRmFpbGVkKGNvbnN0IFN0cmluZyYgc3RyZWFtTGFiZWwpOwogCi0gICAgdm9pZCBv
blNpZ25hbGluZ01lc3NhZ2UoaW50IHBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgbWVz
c2FnZSk7Ci0gICAgdm9pZCBvbk1lc3NhZ2UoaW50IHBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0
cmluZyYgbWVzc2FnZSk7Ci0gICAgdm9pZCBvbkFkZFN0cmVhbShpbnQgcGVlckNvbm5lY3Rpb25J
ZCwgY29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNr
TGlzdD4pOwotICAgIHZvaWQgb25SZW1vdmVTdHJlYW0oaW50IHBlZXJDb25uZWN0aW9uSWQsIGNv
bnN0IFN0cmluZyYgc3RyZWFtTGFiZWwpOwotICAgIHZvaWQgb25OZWdvdGlhdGlvblN0YXJ0ZWQo
aW50IHBlZXJDb25uZWN0aW9uSWQpOwotICAgIHZvaWQgb25OZWdvdGlhdGlvbkRvbmUoaW50IHBl
ZXJDb25uZWN0aW9uSWQpOwotCiBwcml2YXRlOgogICAgIGNsYXNzIFJlcXVlc3Q7CiAgICAgY2xh
c3MgR2VuZXJhdGVTdHJlYW1SZXF1ZXN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110743</attachid>
            <date>2011-10-12 14:18:36 -0700</date>
            <delta_ts>2011-10-12 14:36:48 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-68462-20111012141835.patch</filename>
            <type>text/plain</type>
            <size>56143</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3MzAxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTkgQEAKKzIwMTEtMTAtMTIgIEFkYW0gQmVy
Z2t2aXN0ICA8YWRhbS5iZXJna3Zpc3RAZXJpY3Nzb24uY29tPgorCisgICAgICAgIFVwZGF0ZSBQ
ZWVyQ29ubmVjdGlvbiB0byB1c2UgV2ViQ29yZSBwbGF0Zm9ybSBpbnRlcmZhY2VzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODQ2MgorCisgICAgICAg
IFJldmlld2VkIGJ5IEFkYW0gQmFydGguCisKKyAgICAgICAgQ3VycmVudGx5IG5vdCB0ZXN0YWJs
ZS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU1BlZXJDb25uZWN0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTUGVlckNvbm5lY3Rpb25Db25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNQZWVyQ29u
bmVjdGlvbik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4UGVlckNvbm5lY3Rpb25D
dXN0b20uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGRvbS9NZWRpYVN0cmVhbUxpc3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1MaXN0OjppdGVtKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhU3RyZWFtTGlzdDo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3Ry
ZWFtTGlzdDo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtTGlzdDo6Y29u
dGFpbnMpOgorICAgICAgICAqIGRvbS9NZWRpYVN0cmVhbUxpc3QuaDoKKyAgICAgICAgKiBwMnAv
UGVlckNvbm5lY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6UGVlckNvbm5lY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246OnByb2Nlc3NTaWduYWxpbmdNZXNz
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uOjpyZWFkeVN0YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uOjpzZW5kKToKKyAgICAgICAgKFdlYkNvcmU6
OlBlZXJDb25uZWN0aW9uOjphZGRTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5l
Y3Rpb246OnJlbW92ZVN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6
bG9jYWxTdHJlYW1zKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uOjpyZW1vdGVT
dHJlYW1zKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uOjpjbG9zZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6aWNlUHJvY2Vzc2luZ0NvbXBsZXRlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6c2RwR2VuZXJhdGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uOjpkYXRhU3RyZWFtTWVzc2FnZVJlY2VpdmVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uOjpyZW1vdGVTdHJlYW1BZGRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6cmVtb3RlU3RyZWFtUmVtb3ZlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6c3RvcCk6CisgICAgICAgIChXZWJDb3Jl
OjpQZWVyQ29ubmVjdGlvbjo6c2NoZWR1bGVJbml0aWFsTmVnb3RpYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6UGVlckNvbm5lY3Rpb246OmluaXRpYWxOZWdvdGlhdGlvblRpbWVyRmlyZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb246OmVuc3VyZVN0cmVhbUNoYW5nZVNjaGVk
dWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6c3RyZWFtQ2hhbmdlVGlt
ZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6c2NoZWR1bGVSZWFk
eVN0YXRlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uOjpyZWFkeVN0
YXRlQ2hhbmdlVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6
Y2hhbmdlUmVhZHlTdGF0ZSk6CisgICAgICAgICogcDJwL1BlZXJDb25uZWN0aW9uLmg6CisgICAg
ICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbjo6cmVmRXZlbnRUYXJnZXQpOgorICAgICAgICAo
V2ViQ29yZTo6UGVlckNvbm5lY3Rpb246OmRlcmVmRXZlbnRUYXJnZXQpOgorICAgICAgICAqIHAy
cC9QZWVyQ29ubmVjdGlvbi5pZGw6CisgICAgICAgICogcGFnZS9NZWRpYVN0cmVhbUNsaWVudC5o
OgorICAgICAgICAqIHBhZ2UvTWVkaWFTdHJlYW1Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhU3RyZWFtQ29udHJvbGxlcjo6TWVkaWFTdHJlYW1Db250cm9sbGVyKToKKyAg
ICAgICAgKiBwYWdlL01lZGlhU3RyZWFtQ29udHJvbGxlci5oOgorICAgICAgICAqIHBhZ2UvTWVk
aWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAqIHBhZ2UvTWVkaWFTdHJlYW1G
cmFtZUNvbnRyb2xsZXIuaDoKKwogMjAxMS0xMC0xMiAgRGF2aWQgSHlhdHQgIDxoeWF0dEBhcHBs
ZS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTY5OTUwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA5NzMwMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMjIxOCw3ICsyMjE4LDYgQEAK
ICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlQ3VzdG9tLmNwcCcsCiAgICAg
ICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUxpc3RDdXN0b20uY3BwJywKICAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhOb3RpZmljYXRpb25DZW50ZXJDdXN0b20uY3Bw
JywKLSAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhQZWVyQ29ubmVjdGlvbkN1c3Rv
bS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFBlcmZvcm1hbmNlQ3Vz
dG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4UG9wU3RhdGVFdmVu
dEN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNRTFJlc3Vs
dFNldFJvd0xpc3RDdXN0b20uY3BwJywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJv
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiA5NzMw
MSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0zMzIz
LDggKzMzMjMsNyBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfTUVESUFfU1RSRUFNPTEpCiAK
ICAgICB2OCB7CiAgICAgICAgIFNPVVJDRVMgKz0gXAotICAgICAgICAgICAgYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4TmF2aWdhdG9yQ3VzdG9tLmNwcCBcCi0gICAgICAgICAgICBiaW5kaW5ncy92OC9j
dXN0b20vVjhQZWVyQ29ubmVjdGlvbkN1c3RvbS5jcHAKKyAgICAgICAgICAgIGJpbmRpbmdzL3Y4
L2N1c3RvbS9WOE5hdmlnYXRvckN1c3RvbS5jcHAKICAgICB9IGVsc2UgewogICAgICAgICBTT1VS
Q0VTICs9IFwKICAgICAgICAgICAgIGJpbmRpbmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNwcCBc
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BlZXJDb25uZWN0aW9uQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BlZXJDb25u
ZWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gOTczMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1BlZXJDb25uZWN0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksMjIgKzMw
LDI1IEBACiAjaW5jbHVkZSAiSlNQZWVyQ29ubmVjdGlvbi5oIgogCiAjaW5jbHVkZSAiQ2FsbGJh
Y2tGdW5jdGlvbi5oIgotI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgotI2luY2x1ZGUgIkZyYW1lLmgi
Ci0jaW5jbHVkZSAiSlNET01XaW5kb3dDdXN0b20uaCIKICNpbmNsdWRlICJKU1NpZ25hbGluZ0Nh
bGxiYWNrLmgiCi0jaW5jbHVkZSAiTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIuaCIKICNpbmNs
dWRlICJQZWVyQ29ubmVjdGlvbi5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7CisjaW5jbHVkZSA8
cnVudGltZS9FcnJvci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNQZWVyQ29ubmVjdGlvbkNv
bnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1BlZXJDb25uZWN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBKU1BlZXJDb25uZWN0aW9uQ29uc3RydWN0b3IqIGpzQ29uc3RydWN0b3IgPSBzdGF0aWNf
Y2FzdDxKU1BlZXJDb25uZWN0aW9uQ29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUoKSk7CisgICAg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IGpzQ29uc3RydWN0b3ItPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IoZXhlYywgY3JlYXRlUmVmZXJlbmNlRXJyb3IoZXhlYywgIlBlZXJDb25uZWN0aW9u
IGNvbnN0cnVjdG9yIGFzc29jaWF0ZWQgZG9jdW1lbnQgaXMgdW5hdmFpbGFibGUiKSk7CisKKyAg
ICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIk5vdCBlbm91Z2ggYXJndW1lbnRzIikp
OwogCi0gICAgU3RyaW5nIGNvbmZpZ3VyYXRpb24gPSB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJn
dW1lbnQoMCkudG9TdHJpbmcoZXhlYykpOworICAgIFN0cmluZyBzZXJ2ZXJDb25maWd1cmF0aW9u
ID0gdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKTsKICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKTsKIApAQCAtNTIsMTcgKzU2LDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBKU1BlZXJDb25uZQogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogCi0gICAgRnJhbWUqIGZyYW1l
ID0gYXNKU0RPTVdpbmRvdyhleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5pbXBsKCktPmZy
YW1lKCk7Ci0gICAgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqIGZyYW1lQ29udHJvbGxlciA9
IGZyYW1lID8gZnJhbWUtPm1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKCkgOiAwOwotCi0gICAg
UmVmUHRyPFBlZXJDb25uZWN0aW9uPiBwZWVyQ29ubmVjdGlvbjsKLSAgICBpZiAoZnJhbWVDb250
cm9sbGVyKQotICAgICAgICBwZWVyQ29ubmVjdGlvbiA9IGZyYW1lQ29udHJvbGxlci0+Y3JlYXRl
UGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbiwgc2lnbmFsaW5nQ2FsbGJhY2spOwotCi0gICAg
aWYgKCFwZWVyQ29ubmVjdGlvbikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlKCkpOwotCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pTKGV4ZWMs
IGpzQ29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCBwZWVyQ29ubmVjdGlvbi5nZXQoKSkpKTsK
KyAgICBSZWZQdHI8UGVlckNvbm5lY3Rpb24+IHBlZXJDb25uZWN0aW9uID0gUGVlckNvbm5lY3Rp
b246OmNyZWF0ZShjb250ZXh0LCBzZXJ2ZXJDb25maWd1cmF0aW9uLCBzaWduYWxpbmdDYWxsYmFj
ay5yZWxlYXNlKCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoQ1JFQVRFX0RPTV9XUkFQ
UEVSKGV4ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCBQZWVyQ29ubmVjdGlvbiwg
cGVlckNvbm5lY3Rpb24uZ2V0KCkpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4UGVlckNvbm5lY3Rpb25DdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OFBlZXJDb25uZWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gOTczMDEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhQZWVyQ29ubmVjdGlvbkN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLQotI2luY2x1ZGUgIlY4UGVlckNvbm5l
Y3Rpb24uaCIKLQotI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGUuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIk1lZGlhU3RyZWFtRnJhbWVDb250
cm9sbGVyLmgiCi0jaW5jbHVkZSAiUGVlckNvbm5lY3Rpb24uaCIKLSNpbmNsdWRlICJWOEJpbmRp
bmcuaCIKLSNpbmNsdWRlICJWOFByb3h5LmgiCi0jaW5jbHVkZSAiVjhTaWduYWxpbmdDYWxsYmFj
ay5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFBl
ZXJDb25uZWN0aW9uOjpjb25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFy
Z3MpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uUGVlckNvbm5lY3Rpb24uQ29uc3RydWN0b3IiKTsK
LQotICAgIGlmICghYXJncy5Jc0NvbnN0cnVjdENhbGwoKSkKLSAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoIkRPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0
aW9uLiIsIFY4UHJveHk6OlR5cGVFcnJvcik7Ci0KLSAgICBpbnQgYXJnTGVuZ3RoID0gYXJncy5M
ZW5ndGgoKTsKLSAgICBpZiAoYXJnTGVuZ3RoICE9IDIpCi0gICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKCJUaGUgUGVlckNvbm5lY3Rpb24gY29uc3RydWN0b3IgdGFrZXMgdHdvIGFyZ3VtZW50cy4i
LCBWOFByb3h5OjpUeXBlRXJyb3IpOwotCi0gICAgdjg6OlRyeUNhdGNoIGV4Y2VwdGlvbkNhdGNo
ZXI7Ci0gICAgU3RyaW5nIGNvbmZpZ3VyYXRpb24gPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXS0+
VG9TdHJpbmcoKSk7Ci0gICAgaWYgKGV4Y2VwdGlvbkNhdGNoZXIuSGFzQ2F1Z2h0KCkpCi0gICAg
ICAgIHJldHVybiB0aHJvd0Vycm9yKGV4Y2VwdGlvbkNhdGNoZXIuRXhjZXB0aW9uKCkpOwotCi0g
ICAgYm9vbCBzdWNjZWVkZWQgPSBmYWxzZTsKLSAgICBSZWZQdHI8U2lnbmFsaW5nQ2FsbGJhY2s+
IHNpZ25hbGluZ0NhbGxiYWNrID0gY3JlYXRlRnVuY3Rpb25Pbmx5Q2FsbGJhY2s8VjhTaWduYWxp
bmdDYWxsYmFjaz4oYXJnc1sxXSwgc3VjY2VlZGVkKTsKLSAgICBpZiAoIXN1Y2NlZWRlZCB8fCAh
c2lnbmFsaW5nQ2FsbGJhY2spCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJUaGUgUGVlckNv
bm5lY3Rpb24gY29uc3RydWN0b3IgbXVzdCBiZSBnaXZlbiBhIFNpZ25hbGluZ0NhbGxiYWNrIGNh
bGxiYWNrLiIsIFY4UHJveHk6OlR5cGVFcnJvcik7Ci0KLSAgICBGcmFtZSogZnJhbWUgPSBWOFBy
b3h5OjpyZXRyaWV2ZUZyYW1lRm9yRW50ZXJlZENvbnRleHQoKTsKLSAgICBNZWRpYVN0cmVhbUZy
YW1lQ29udHJvbGxlciogZnJhbWVDb250cm9sbGVyID0gZnJhbWUgPyBmcmFtZS0+bWVkaWFTdHJl
YW1GcmFtZUNvbnRyb2xsZXIoKSA6IDA7Ci0KLSAgICBSZWZQdHI8UGVlckNvbm5lY3Rpb24+IHBl
ZXJDb25uZWN0aW9uOwotICAgIGlmIChmcmFtZUNvbnRyb2xsZXIpCi0gICAgICAgIHBlZXJDb25u
ZWN0aW9uID0gZnJhbWVDb250cm9sbGVyLT5jcmVhdGVQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0
aW9uLCBzaWduYWxpbmdDYWxsYmFjayk7Ci0KLSAgICBpZiAoIXBlZXJDb25uZWN0aW9uKQotICAg
ICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotCi0gICAgVjhET01XcmFwcGVyOjpzZXRET01X
cmFwcGVyKGFyZ3MuSG9sZGVyKCksICZpbmZvLCBwZWVyQ29ubmVjdGlvbi5nZXQoKSk7Ci0gICAg
cmV0dXJuIHRvVjgocGVlckNvbm5lY3Rpb24ucmVsZWFzZSgpLCBhcmdzLkhvbGRlcigpKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVB
TSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9NZWRpYVN0cmVhbUxpc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9NZWRpYVN0cmVhbUxpc3QuY3BwCShyZXZpc2lvbiA5
NzMwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9NZWRpYVN0cmVhbUxpc3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWNzc29u
IEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC00Nyw0NyArNDgsMjggQEAgdW5zaWduZWQgTWVkaWFTdHJlYW1MaXN0OjpsZW5ndGgoKSBj
b25zdAogICAgIHJldHVybiBtX3N0cmVhbXMuc2l6ZSgpOwogfQogCi1QYXNzUmVmUHRyPE1lZGlh
U3RyZWFtPiBNZWRpYVN0cmVhbUxpc3Q6Oml0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0CitNZWRp
YVN0cmVhbSogTWVkaWFTdHJlYW1MaXN0OjppdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdAogewot
ICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8TWVkaWFTdHJlYW0+ID46OmNvbnN0X2l0ZXJhdG9y
IGkgPSBtX3N0cmVhbXMuYmVnaW4oKTsKLSAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBpICE9IG1f
c3RyZWFtcy5lbmQoKTsgKytpLCArK2opIHsKLSAgICAgICAgaWYgKGogPT0gaW5kZXgpCi0gICAg
ICAgICAgICByZXR1cm4gaS0+c2Vjb25kOwotICAgIH0KLSAgICByZXR1cm4gUGFzc1JlZlB0cjxN
ZWRpYVN0cmVhbT4oKTsKKyAgICByZXR1cm4gbV9zdHJlYW1zW2luZGV4XS5nZXQoKTsKIH0KIAot
dm9pZCBNZWRpYVN0cmVhbUxpc3Q6OmFkZChQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPiBzdHJlYW0p
Cit2b2lkIE1lZGlhU3RyZWFtTGlzdDo6YXBwZW5kKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+IHN0
cmVhbSkKIHsKLSAgICBSZWZQdHI8TWVkaWFTdHJlYW0+IHMgPSBzdHJlYW07Ci0gICAgQVNTRVJU
KCFjb250YWlucyhzKSk7Ci0gICAgbV9zdHJlYW1zLmFkZChzLT5sYWJlbCgpLCBzKTsKKyAgICBt
X3N0cmVhbXMuYXBwZW5kKHN0cmVhbSk7CiB9CiAKLXZvaWQgTWVkaWFTdHJlYW1MaXN0OjpyZW1v
dmUoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4gc3RyZWFtKQordm9pZCBNZWRpYVN0cmVhbUxpc3Q6
OnJlbW92ZShjb25zdCBNZWRpYVN0cmVhbSogc3RyZWFtKQogewotICAgIFJlZlB0cjxNZWRpYVN0
cmVhbT4gcyA9IHN0cmVhbTsKLSAgICBBU1NFUlQoY29udGFpbnMocykpOwotICAgIG1fc3RyZWFt
cy5yZW1vdmUocy0+bGFiZWwoKSk7CisgICAgc2l6ZV90IGkgPSBtX3N0cmVhbXMuZmluZChzdHJl
YW0pOworICAgIGlmIChpICE9IG5vdEZvdW5kKQorICAgICAgICByZXR1cm4gbV9zdHJlYW1zLnJl
bW92ZShpKTsKIH0KIAotYm9vbCBNZWRpYVN0cmVhbUxpc3Q6OmNvbnRhaW5zKFBhc3NSZWZQdHI8
TWVkaWFTdHJlYW0+IHN0cmVhbSkgY29uc3QKK2Jvb2wgTWVkaWFTdHJlYW1MaXN0Ojpjb250YWlu
cyhjb25zdCBNZWRpYVN0cmVhbSogc3RyZWFtKSBjb25zdAogewotICAgIFJlZlB0cjxNZWRpYVN0
cmVhbT4gcyA9IHN0cmVhbTsKLSAgICByZXR1cm4gbV9zdHJlYW1zLmNvbnRhaW5zKHMtPmxhYmVs
KCkpOworICAgIHJldHVybiBtX3N0cmVhbXMuY29udGFpbnMoc3RyZWFtKTsKIH0KIAotYm9vbCBN
ZWRpYVN0cmVhbUxpc3Q6OmNvbnRhaW5zKGNvbnN0IFN0cmluZyYgbGFiZWwpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fc3RyZWFtcy5jb250YWlucyhsYWJlbCk7Ci19Ci0KLVBhc3NSZWZQdHI8TWVk
aWFTdHJlYW0+IE1lZGlhU3RyZWFtTGlzdDo6Z2V0KGNvbnN0IFN0cmluZyYgbGFiZWwpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fc3RyZWFtcy5nZXQobGFiZWwpOwotfQotCi0KIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vTWVkaWFTdHJlYW1MaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL01lZGlhU3RyZWFtTGlzdC5oCShyZXZpc2lvbiA5NzMwMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9NZWRpYVN0cmVhbUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4
LDYgQEAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW0u
aCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDIsMTkgKzM4LDE3IEBAIHB1YmxpYzoKIAogICAg
IC8vIERPTSBtZXRob2RzICYgYXR0cmlidXRlcyBmb3IgTWVkaWFTdHJlYW1MaXN0CiAgICAgdW5z
aWduZWQgbGVuZ3RoKCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4gaXRlbSh1
bnNpZ25lZCBpbmRleCkgY29uc3Q7CisgICAgTWVkaWFTdHJlYW0qIGl0ZW0odW5zaWduZWQgaW5k
ZXgpIGNvbnN0OwogCiAgICAgLy8gTGlzdCBtYW5pcHVsYXRpb24KLSAgICB2b2lkIGFkZChQYXNz
UmVmUHRyPE1lZGlhU3RyZWFtPik7Ci0gICAgdm9pZCByZW1vdmUoUGFzc1JlZlB0cjxNZWRpYVN0
cmVhbT4pOwotICAgIGJvb2wgY29udGFpbnMoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4pIGNvbnN0
OwotICAgIGJvb2wgY29udGFpbnMoY29uc3QgU3RyaW5nJiBsYWJlbCkgY29uc3Q7Ci0gICAgUGFz
c1JlZlB0cjxNZWRpYVN0cmVhbT4gZ2V0KGNvbnN0IFN0cmluZyYgbGFiZWwpIGNvbnN0OworICAg
IHZvaWQgYXBwZW5kKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+KTsKKyAgICB2b2lkIHJlbW92ZShj
b25zdCBNZWRpYVN0cmVhbSopOworICAgIGJvb2wgY29udGFpbnMoY29uc3QgTWVkaWFTdHJlYW0q
KSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBNZWRpYVN0cmVhbUxpc3QoKTsKIAotICAgIEhhc2hN
YXA8U3RyaW5nLCBSZWZQdHI8TWVkaWFTdHJlYW0+ID4gbV9zdHJlYW1zOworICAgIFZlY3RvcjxS
ZWZQdHI8TWVkaWFTdHJlYW0+ID4gbV9zdHJlYW1zOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcDJwL1BlZXJDb25uZWN0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wMnAvUGVlckNvbm5lY3Rpb24uY3BwCShyZXZpc2lvbiA5
NzMwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3AycC9QZWVyQ29ubmVjdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgRXJpY3Nzb24g
QUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI3LDYxICsyOCw0MSBAQAogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKIAotI2luY2x1
ZGUgIkRpc3BhdGNoVGFzay5oIgotI2luY2x1ZGUgIkVycm9yRXZlbnQuaCIKLSNpbmNsdWRlICJF
dmVudC5oIgotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJNZWRpYVN0cmVhbS5o
IgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJNZWRpYVN0cmVhbUV2ZW50
LmgiCi0jaW5jbHVkZSAiTWVkaWFTdHJlYW1MaXN0LmgiCiAjaW5jbHVkZSAiTWVzc2FnZUV2ZW50
LmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotI2luY2x1ZGUgIlNpZ25h
bGluZ0NhbGxiYWNrLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPFBlZXJDb25uZWN0aW9uPiBQZWVyQ29ubmVjdGlvbjo6
Y3JlYXRlKE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKiBmcmFtZUNvbnRyb2xsZXIsIGludCBp
ZCwgY29uc3QgU3RyaW5nJiBjb25maWd1cmF0aW9uLCBQYXNzUmVmUHRyPFNpZ25hbGluZ0NhbGxi
YWNrPiBzaWduYWxpbmdDYWxsYmFjaykKK1Bhc3NSZWZQdHI8UGVlckNvbm5lY3Rpb24+IFBlZXJD
b25uZWN0aW9uOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3Qg
U3RyaW5nJiBzZXJ2ZXJDb25maWd1cmF0aW9uLCBQYXNzUmVmUHRyPFNpZ25hbGluZ0NhbGxiYWNr
PiBzaWduYWxpbmdDYWxsYmFjaykKIHsKLSAgICAvLyBGSVhNRTogVmVyaWZ5IHRoYXQgY29uZmln
dXJhdGlvbiBmb2xsb3dzIHRoZSBzcGVjaWZpZWQgZm9ybWF0LCBpZiBub3QgcmV0dXJuIG51bGwu
CisgICAgUmVmUHRyPFBlZXJDb25uZWN0aW9uPiBjb25uZWN0aW9uID0gYWRvcHRSZWYobmV3IFBl
ZXJDb25uZWN0aW9uKGNvbnRleHQsIHNlcnZlckNvbmZpZ3VyYXRpb24sIHNpZ25hbGluZ0NhbGxi
YWNrKSk7CisgICAgY29ubmVjdGlvbi0+c2V0UGVuZGluZ0FjdGl2aXR5KGNvbm5lY3Rpb24uZ2V0
KCkpOworICAgIGNvbm5lY3Rpb24tPnNjaGVkdWxlSW5pdGlhbE5lZ290aWF0aW9uKCk7CiAKLSAg
ICBSZWZQdHI8UGVlckNvbm5lY3Rpb24+IHBlZXJDb25uZWN0aW9uID0gYWRvcHRSZWYobmV3IFBl
ZXJDb25uZWN0aW9uKGZyYW1lQ29udHJvbGxlciwgaWQsIGNvbmZpZ3VyYXRpb24sIHNpZ25hbGlu
Z0NhbGxiYWNrKSk7Ci0gICAgcGVlckNvbm5lY3Rpb24tPmluaXQoKTsKLSAgICByZXR1cm4gcGVl
ckNvbm5lY3Rpb24ucmVsZWFzZSgpOworICAgIHJldHVybiBjb25uZWN0aW9uLnJlbGVhc2UoKTsK
IH0KIAotUGVlckNvbm5lY3Rpb246OlBlZXJDb25uZWN0aW9uKE1lZGlhU3RyZWFtRnJhbWVDb250
cm9sbGVyKiBmcmFtZUNvbnRyb2xsZXIsIGludCBpZCwgY29uc3QgU3RyaW5nJiBjb25maWd1cmF0
aW9uLCBQYXNzUmVmUHRyPFNpZ25hbGluZ0NhbGxiYWNrPiBzaWduYWxpbmdDYWxsYmFjaykKLSAg
ICA6IFBlZXJDb25uZWN0aW9uQ2xpZW50KGZyYW1lQ29udHJvbGxlciwgaWQpCi0gICAgLCBtX2Nv
bmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbikKLSAgICAsIG1fcmVhZHlTdGF0ZShORVcpCitQZWVy
Q29ubmVjdGlvbjo6UGVlckNvbm5lY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgY29uc3QgU3RyaW5nJiBzZXJ2ZXJDb25maWd1cmF0aW9uLCBQYXNzUmVmUHRyPFNpZ25hbGlu
Z0NhbGxiYWNrPiBzaWduYWxpbmdDYWxsYmFjaykKKyAgICA6IEFjdGl2ZURPTU9iamVjdChjb250
ZXh0LCB0aGlzKQogICAgICwgbV9zaWduYWxpbmdDYWxsYmFjayhzaWduYWxpbmdDYWxsYmFjaykK
KyAgICAsIG1fcmVhZHlTdGF0ZShORVcpCisgICAgLCBtX2ljZVN0YXJ0ZWQoZmFsc2UpCisgICAg
LCBtX2xvY2FsU3RyZWFtcyhNZWRpYVN0cmVhbUxpc3Q6OmNyZWF0ZSgpKQorICAgICwgbV9yZW1v
dGVTdHJlYW1zKE1lZGlhU3RyZWFtTGlzdDo6Y3JlYXRlKCkpCisgICAgLCBtX2luaXRpYWxOZWdv
dGlhdGlvblRpbWVyKHRoaXMsICZQZWVyQ29ubmVjdGlvbjo6aW5pdGlhbE5lZ290aWF0aW9uVGlt
ZXJGaXJlZCkKKyAgICAsIG1fc3RyZWFtQ2hhbmdlVGltZXIodGhpcywgJlBlZXJDb25uZWN0aW9u
OjpzdHJlYW1DaGFuZ2VUaW1lckZpcmVkKQorICAgICwgbV9yZWFkeVN0YXRlQ2hhbmdlVGltZXIo
dGhpcywgJlBlZXJDb25uZWN0aW9uOjpyZWFkeVN0YXRlQ2hhbmdlVGltZXJGaXJlZCkKKyAgICAs
IG1fcGVlckhhbmRsZXIoUGVlckhhbmRsZXI6OmNyZWF0ZSh0aGlzLCBzZXJ2ZXJDb25maWd1cmF0
aW9uLCBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpKSkKIHsKLSAgICBBU1NF
UlQoZnJhbWVDb250cm9sbGVyKTsKLSAgICBtX2xvY2FsU3RyZWFtTGlzdCA9IE1lZGlhU3RyZWFt
TGlzdDo6Y3JlYXRlKCk7Ci0gICAgbV9yZW1vdGVTdHJlYW1MaXN0ID0gTWVkaWFTdHJlYW1MaXN0
OjpjcmVhdGUoKTsKLX0KLQotdm9pZCBQZWVyQ29ubmVjdGlvbjo6aW5pdCgpCi17Ci0gICAgaWYg
KE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKiBmcmFtZUNvbnRyb2xsZXIgPSBtZWRpYVN0cmVh
bUZyYW1lQ29udHJvbGxlcigpKQotICAgICAgICBmcmFtZUNvbnRyb2xsZXItPm5ld1BlZXJDb25u
ZWN0aW9uKG1fY2xpZW50SWQsIG1fY29uZmlndXJhdGlvbik7Ci0KLSAgICBwb3N0U3RhcnROZWdv
dGlhdGlvblRhc2soKTsKIH0KIAogUGVlckNvbm5lY3Rpb246On5QZWVyQ29ubmVjdGlvbigpCiB7
CiB9CiAKLU1lZGlhU3RyZWFtTGlzdCogUGVlckNvbm5lY3Rpb246OmxvY2FsU3RyZWFtcygpCi17
Ci0gICAgcmV0dXJuIG1fbG9jYWxTdHJlYW1MaXN0LmdldCgpOwotfQotCi1NZWRpYVN0cmVhbUxp
c3QqIFBlZXJDb25uZWN0aW9uOjpyZW1vdGVTdHJlYW1zKCkKLXsKLSAgICByZXR1cm4gbV9yZW1v
dGVTdHJlYW1MaXN0LmdldCgpOwotfQotCiB2b2lkIFBlZXJDb25uZWN0aW9uOjpwcm9jZXNzU2ln
bmFsaW5nTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewogICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gQ0xPU0VEKSB7CkBAIC04OSw4ICs3MCwyOCBAQCB2
b2lkIFBlZXJDb25uZWN0aW9uOjpwcm9jZXNzU2lnbmFsaW5nTWVzCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBpZiAobWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIoKSkKLSAgICAgICAg
bWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIoKS0+cHJvY2Vzc1NpZ25hbGluZ01lc3NhZ2UobV9j
bGllbnRJZCwgbWVzc2FnZSk7CisgICAgaWYgKCFtZXNzYWdlLnN0YXJ0c1dpdGgoIlNEUFxuIikp
CisgICAgICAgIHJldHVybjsKKworICAgIFN0cmluZyBzZHAgPSBtZXNzYWdlLnN1YnN0cmluZyg0
KTsKKworICAgIGlmIChtX2ljZVN0YXJ0ZWQpIHsKKyAgICAgICAgaWYgKG1fcGVlckhhbmRsZXIp
CisgICAgICAgICAgICBtX3BlZXJIYW5kbGVyLT5wcm9jZXNzU0RQKHNkcCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAobV9wZWVySGFuZGxlcikKKyAgICAgICAgbV9wZWVySGFu
ZGxlci0+aGFuZGxlSW5pdGlhbE9mZmVyKHNkcCk7CisKKyAgICBlbnN1cmVTdHJlYW1DaGFuZ2VT
Y2hlZHVsZWQoKTsKKyAgICBtX2ljZVN0YXJ0ZWQgPSB0cnVlOworICAgIHNjaGVkdWxlUmVhZHlT
dGF0ZUNoYW5nZShORUdPVElBVElORyk7Cit9CisKK1BlZXJDb25uZWN0aW9uOjpSZWFkeVN0YXRl
IFBlZXJDb25uZWN0aW9uOjpyZWFkeVN0YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZWFk
eVN0YXRlOwogfQogCiB2b2lkIFBlZXJDb25uZWN0aW9uOjpzZW5kKGNvbnN0IFN0cmluZyYgdGV4
dCwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0xMDAsMTQgKzEwMSwxNiBAQCB2b2lkIFBlZXJDb25u
ZWN0aW9uOjpzZW5kKGNvbnN0IFN0cmluZyYgCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBDU3RyaW5nIHV0ZjggPSB0ZXh0LnV0ZjgoKTsKLSAgICBpZiAodXRmOC5sZW5ndGgoKSA+IGtN
YXhNZXNzYWdlVVRGOExlbmd0aCkgeworICAgIENTdHJpbmcgZGF0YSA9IHRleHQudXRmOCgpOwor
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IGRhdGEubGVuZ3RoKCk7CisKKyAgICBpZiAobGVuZ3RoID4g
NTA0KSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgaWYgKG1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKCkpCi0gICAgICAg
IG1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKCktPm1lc3NhZ2UobV9jbGllbnRJZCwgdGV4dCk7
CisgICAgaWYgKG1fcGVlckhhbmRsZXIpCisgICAgICAgIG1fcGVlckhhbmRsZXItPnNlbmREYXRh
U3RyZWFtTWVzc2FnZShkYXRhLmRhdGEoKSwgbGVuZ3RoKTsKIH0KIAogdm9pZCBQZWVyQ29ubmVj
dGlvbjo6YWRkU3RyZWFtKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+IHBycFN0cmVhbSwgRXhjZXB0
aW9uQ29kZSYgZWMpCkBAIC0xMTcsMzcgKzEyMCw2MyBAQCB2b2lkIFBlZXJDb25uZWN0aW9uOjph
ZGRTdHJlYW0oUGFzc1JlZlB0CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyBUaGUg
U3RyZWFtIG9iamVjdCBpcyBndWFyYW50ZWVkIHRvIGV4aXN0IHNpbmNlIFN0cmljdFR5cGVDaGVj
a2luZyBpcyBzZXQgaW4gdGhlIGlkbC4KKyAgICAvLyBUaGUgTWVkaWFTdHJlYW0gb2JqZWN0IGlz
IGd1YXJhbnRlZWQgdG8gZXhpc3Qgc2luY2UgU3RyaWN0VHlwZUNoZWNraW5nIGlzIHNldCBpbiB0
aGUgaWRsLgogCiAgICAgUmVmUHRyPE1lZGlhU3RyZWFtPiBzdHJlYW0gPSBwcnBTdHJlYW07CiAK
LSAgICBpZiAobV9sb2NhbFN0cmVhbUxpc3QtPmNvbnRhaW5zKHN0cmVhbSkpCisgICAgaWYgKG1f
bG9jYWxTdHJlYW1zLT5jb250YWlucyhzdHJlYW0uZ2V0KCkpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBtX2xvY2FsU3RyZWFtTGlzdC0+YWRkKHN0cmVhbSk7CisgICAgbV9sb2NhbFN0cmVhbXMt
PmFwcGVuZChzdHJlYW0pOworCisgICAgLy8gRklYTUU6IGdldCBmcm9tIHN0cmVhbS0+ZGVzY3Jp
cHRvcigpIHdoZW4gaXQncyBhdmFpbGFibGUsIHNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzY4NDY0
CisgICAgTWVkaWFTdHJlYW1EZXNjcmlwdG9yKiBzdHJlYW1EZXNjcmlwdG9yID0gMDsKKyAgICBz
aXplX3QgaSA9IG1fcGVuZGluZ1JlbW92ZVN0cmVhbXMuZmluZChzdHJlYW1EZXNjcmlwdG9yKTsK
KyAgICBpZiAoaSAhPSBub3RGb3VuZCkgeworICAgICAgICBtX3BlbmRpbmdSZW1vdmVTdHJlYW1z
LnJlbW92ZShpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmIChtZWRpYVN0cmVh
bUZyYW1lQ29udHJvbGxlcigpKQotICAgICAgICBtZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcigp
LT5hZGRTdHJlYW0obV9jbGllbnRJZCwgc3RyZWFtKTsKKyAgICBtX3BlbmRpbmdBZGRTdHJlYW1z
LmFwcGVuZChzdHJlYW1EZXNjcmlwdG9yKTsKKyAgICBpZiAobV9pY2VTdGFydGVkKQorICAgICAg
ICBlbnN1cmVTdHJlYW1DaGFuZ2VTY2hlZHVsZWQoKTsKIH0KIAotdm9pZCBQZWVyQ29ubmVjdGlv
bjo6cmVtb3ZlU3RyZWFtKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+IHBycFN0cmVhbSwgRXhjZXB0
aW9uQ29kZSYgZWMpCit2b2lkIFBlZXJDb25uZWN0aW9uOjpyZW1vdmVTdHJlYW0oTWVkaWFTdHJl
YW0qIHN0cmVhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKG1fcmVhZHlTdGF0ZSA9
PSBDTE9TRUQpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIC8vIFRoZSBTdHJlYW0gb2JqZWN0IGlzIGd1YXJhbnRlZWQgdG8g
ZXhpc3Qgc2luY2UgU3RyaWN0VHlwZUNoZWNraW5nIGlzIHNldCBpbiB0aGUgaWRsLgorICAgIC8v
IFRoZSBNZWRpYVN0cmVhbSBvYmplY3QgaXMgZ3VhcmFudGVlZCB0byBleGlzdCBzaW5jZSBTdHJp
Y3RUeXBlQ2hlY2tpbmcgaXMgc2V0IGluIHRoZSBpZGwuCiAKLSAgICBSZWZQdHI8TWVkaWFTdHJl
YW0+IHN0cmVhbSA9IHBycFN0cmVhbTsKKyAgICBpZiAoIW1fbG9jYWxTdHJlYW1zLT5jb250YWlu
cyhzdHJlYW0pKQorICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIW1fbG9jYWxTdHJlYW1MaXN0
LT5jb250YWlucyhzdHJlYW0pKQorICAgIG1fbG9jYWxTdHJlYW1zLT5yZW1vdmUoc3RyZWFtKTsK
KworICAgIC8vIEZJWE1FOiBnZXQgZnJvbSBzdHJlYW0tPmRlc2NyaXB0b3IoKSB3aGVuIGl0J3Mg
YXZhaWxhYmxlLCBzZWUgaHR0cDovL3dlYmtpdC5vcmcvYi82ODQ2NAorICAgIE1lZGlhU3RyZWFt
RGVzY3JpcHRvciogc3RyZWFtRGVzY3JpcHRvciA9IDA7CisgICAgc2l6ZV90IGkgPSBtX3BlbmRp
bmdBZGRTdHJlYW1zLmZpbmQoc3RyZWFtRGVzY3JpcHRvcik7CisgICAgaWYgKGkgIT0gbm90Rm91
bmQpIHsKKyAgICAgICAgbV9wZW5kaW5nQWRkU3RyZWFtcy5yZW1vdmUoaSk7CiAgICAgICAgIHJl
dHVybjsKKyAgICB9CiAKLSAgICBtX2xvY2FsU3RyZWFtTGlzdC0+cmVtb3ZlKHN0cmVhbSk7Cisg
ICAgbV9wZW5kaW5nUmVtb3ZlU3RyZWFtcy5hcHBlbmQoc3RyZWFtRGVzY3JpcHRvcik7CisgICAg
aWYgKG1faWNlU3RhcnRlZCkKKyAgICAgICAgZW5zdXJlU3RyZWFtQ2hhbmdlU2NoZWR1bGVkKCk7
Cit9CiAKLSAgICBpZiAobWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIoKSkKLSAgICAgICAgbWVk
aWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIoKS0+cmVtb3ZlU3RyZWFtKG1fY2xpZW50SWQsIHN0cmVh
bSk7CitNZWRpYVN0cmVhbUxpc3QqIFBlZXJDb25uZWN0aW9uOjpsb2NhbFN0cmVhbXMoKSBjb25z
dAoreworICAgIHJldHVybiBtX2xvY2FsU3RyZWFtcy5nZXQoKTsKK30KKworTWVkaWFTdHJlYW1M
aXN0KiBQZWVyQ29ubmVjdGlvbjo6cmVtb3RlU3RyZWFtcygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fcmVtb3RlU3RyZWFtcy5nZXQoKTsKIH0KIAogdm9pZCBQZWVyQ29ubmVjdGlvbjo6Y2xvc2Uo
RXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0xNTcsNTAgKzE4Niw1NyBAQCB2b2lkIFBlZXJDb25uZWN0
aW9uOjpjbG9zZShFeGNlcHRpb25Db2RlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBp
ZiAobWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIoKSkKLSAgICAgICAgbWVkaWFTdHJlYW1GcmFt
ZUNvbnRyb2xsZXIoKS0+Y2xvc2VQZWVyQ29ubmVjdGlvbihtX2NsaWVudElkKTsKLQotICAgIG1f
cmVhZHlTdGF0ZSA9IENMT1NFRDsKKyAgICBzdG9wKCk7CiB9CiAKLXZvaWQgUGVlckNvbm5lY3Rp
b246Om9uTmVnb3RpYXRpb25TdGFydGVkKCkKK3ZvaWQgUGVlckNvbm5lY3Rpb246OmljZVByb2Nl
c3NpbmdDb21wbGV0ZWQoKQogewotICAgIG1fcmVhZHlTdGF0ZSA9IE5FR09USUFUSU5HOwotCi0g
ICAgcG9zdFNpbXBsZUV2ZW50KGV2ZW50TmFtZXMoKS5jb25uZWN0aW5nRXZlbnQpOworICAgIEFT
U0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBj
aGFuZ2VSZWFkeVN0YXRlKEFDVElWRSk7CiB9CiAKLXZvaWQgUGVlckNvbm5lY3Rpb246Om9uTmVn
b3RpYXRpb25Eb25lKCkKK3ZvaWQgUGVlckNvbm5lY3Rpb246OnNkcEdlbmVyYXRlZChjb25zdCBT
dHJpbmcmIHNkcCkKIHsKLSAgICBtX3JlYWR5U3RhdGUgPSBBQ1RJVkU7Ci0KLSAgICBwb3N0U2lt
cGxlRXZlbnQoZXZlbnROYW1lcygpLm9wZW5FdmVudCk7CisgICAgQVNTRVJUKHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIG1fc2lnbmFsaW5nQ2FsbGJh
Y2stPmhhbmRsZUV2ZW50KCJTRFBcbiIgKyBzZHAsIHRoaXMpOwogfQogCi12b2lkIFBlZXJDb25u
ZWN0aW9uOjpzdHJlYW1BZGRlZChQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPiBwcnBTdHJlYW0pCit2
b2lkIFBlZXJDb25uZWN0aW9uOjpkYXRhU3RyZWFtTWVzc2FnZVJlY2VpdmVkKGNvbnN0IGNoYXIq
IGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBSZWZQdHI8TWVkaWFTdHJlYW0+IHN0cmVh
bSA9IHBycFN0cmVhbTsKLSAgICBtX3JlbW90ZVN0cmVhbUxpc3QtPmFkZChzdHJlYW0pOwotICAg
IHBvc3RTdHJlYW1BZGRlZEV2ZW50KHN0cmVhbSk7CisgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSA9IFN0cmluZzo6ZnJvbVVURjgoZGF0YSwgbGVuZ3RoKTsKKyAgICBkaXNwYXRjaEV2ZW50KE1l
c3NhZ2VFdmVudDo6Y3JlYXRlKFBhc3NPd25QdHI8TWVzc2FnZVBvcnRBcnJheT4oKSwgU2VyaWFs
aXplZFNjcmlwdFZhbHVlOjpjcmVhdGUobWVzc2FnZSkpKTsKIH0KIAotdm9pZCBQZWVyQ29ubmVj
dGlvbjo6c3RyZWFtUmVtb3ZlZChjb25zdCBTdHJpbmcmIHN0cmVhbUxhYmVsKQordm9pZCBQZWVy
Q29ubmVjdGlvbjo6cmVtb3RlU3RyZWFtQWRkZWQoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2Ny
aXB0b3I+IHN0cmVhbURlc2NyaXB0b3IpCiB7Ci0gICAgQVNTRVJUKG1fcmVtb3RlU3RyZWFtTGlz
dC0+Y29udGFpbnMoc3RyZWFtTGFiZWwpKTsKKyAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7CiAKLSAgICBSZWZQdHI8TWVkaWFTdHJlYW0+IHN0
cmVhbSA9IG1fcmVtb3RlU3RyZWFtTGlzdC0+Z2V0KHN0cmVhbUxhYmVsKTsKLSAgICBtX3JlbW90
ZVN0cmVhbUxpc3QtPnJlbW92ZShzdHJlYW0pOwotICAgIHBvc3RTdHJlYW1SZW1vdmVkRXZlbnQo
c3RyZWFtKTsKLX0KKyAgICBpZiAobV9yZWFkeVN0YXRlID09IENMT1NFRCkKKyAgICAgICAgcmV0
dXJuOwogCi12b2lkIFBlZXJDb25uZWN0aW9uOjpvbk1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNz
YWdlKQotewotICAgIHBvc3RNZXNzYWdlRXZlbnQobWVzc2FnZSk7CisgICAgLy8gRklYTUU6IGNy
ZWF0ZSBhIG5ldyBNZWRpYVN0cmVhbSBmcm9tIHRoZSBzdHJlYW1EZXNjcmlwdG9yIG9uY2UgaXQn
cyBwb3NzaWJsZSwgc2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvNjg0NjQKKyAgICBSZWZQdHI8TWVk
aWFTdHJlYW0+IHN0cmVhbSA9IDA7CisgICAgbV9yZW1vdGVTdHJlYW1zLT5hcHBlbmQoc3RyZWFt
KTsKKworICAgIGRpc3BhdGNoRXZlbnQoTWVkaWFTdHJlYW1FdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS5hZGRzdHJlYW1FdmVudCwgZmFsc2UsIGZhbHNlLCBzdHJlYW0ucmVsZWFzZSgpKSk7CiB9
CiAKLXZvaWQgUGVlckNvbm5lY3Rpb246Om9uU2lnbmFsaW5nTWVzc2FnZShjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpCit2b2lkIFBlZXJDb25uZWN0aW9uOjpyZW1vdGVTdHJlYW1SZW1vdmVkKE1lZGlh
U3RyZWFtRGVzY3JpcHRvciogc3RyZWFtRGVzY3JpcHRvcikKIHsKLSAgICBwb3N0U2lnbmFsaW5n
RXZlbnQobWVzc2FnZSk7CisgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXND
b250ZXh0VGhyZWFkKCkpOworICAgIEFTU0VSVChzdHJlYW1EZXNjcmlwdG9yLT5vd25lcigpKTsK
KworICAgIFJlZlB0cjxNZWRpYVN0cmVhbT4gc3RyZWFtID0gc3RyZWFtRGVzY3JpcHRvci0+b3du
ZXIoKTsKKyAgICBzdHJlYW0tPnN0cmVhbUVuZGVkKCk7CisKKyAgICBpZiAobV9yZWFkeVN0YXRl
ID09IENMT1NFRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fcmVtb3RlU3RyZWFt
cy0+Y29udGFpbnMoc3RyZWFtLmdldCgpKSk7CisgICAgbV9yZW1vdGVTdHJlYW1zLT5yZW1vdmUo
c3RyZWFtLmdldCgpKTsKKworICAgIGRpc3BhdGNoRXZlbnQoTWVkaWFTdHJlYW1FdmVudDo6Y3Jl
YXRlKGV2ZW50TmFtZXMoKS5yZW1vdmVzdHJlYW1FdmVudCwgZmFsc2UsIGZhbHNlLCBzdHJlYW0u
cmVsZWFzZSgpKSk7CiB9CiAKIFBlZXJDb25uZWN0aW9uKiBQZWVyQ29ubmVjdGlvbjo6dG9QZWVy
Q29ubmVjdGlvbigpCkBAIC0yMTAsNyArMjQ2LDI1IEBAIFBlZXJDb25uZWN0aW9uKiBQZWVyQ29u
bmVjdGlvbjo6dG9QZWVyQ28KIAogU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogUGVlckNvbm5lY3Rp
b246OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdAogewotICAgIHJldHVybiBtZWRpYVN0
cmVhbUZyYW1lQ29udHJvbGxlcigpID8gbWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIoKS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpIDogMDsKKyAgICByZXR1cm4gQWN0aXZlRE9NT2JqZWN0Ojpz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Cit9CisKK3ZvaWQgUGVlckNvbm5lY3Rpb246OnN0b3Ao
KQoreworICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gQ0xPU0VEKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX2luaXRpYWxOZWdvdGlhdGlvblRpbWVyLnN0b3AoKTsKKyAgICBtX3N0cmVhbUNoYW5n
ZVRpbWVyLnN0b3AoKTsKKyAgICBtX3JlYWR5U3RhdGVDaGFuZ2VUaW1lci5zdG9wKCk7CisKKyAg
ICBpZiAobV9wZWVySGFuZGxlcikKKyAgICAgICAgbV9wZWVySGFuZGxlci0+c3RvcCgpOworCisg
ICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgbV9wZWVySGFuZGxlci5jbGVhcigp
OworCisgICAgY2hhbmdlUmVhZHlTdGF0ZShDTE9TRUQpOwogfQogCiBFdmVudFRhcmdldERhdGEq
IFBlZXJDb25uZWN0aW9uOjpldmVudFRhcmdldERhdGEoKQpAQCAtMjIzLDg4ICsyNzcsOTQgQEAg
RXZlbnRUYXJnZXREYXRhKiBQZWVyQ29ubmVjdGlvbjo6ZW5zdXJlRQogICAgIHJldHVybiAmbV9l
dmVudFRhcmdldERhdGE7CiB9CiAKLXZvaWQgUGVlckNvbm5lY3Rpb246OnBvc3RNZXNzYWdlRXZl
bnQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQordm9pZCBQZWVyQ29ubmVjdGlvbjo6c2NoZWR1bGVJ
bml0aWFsTmVnb3RpYXRpb24oKQogewotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IGRhdGEgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShtZXNzYWdlKTsKKyAgICBBU1NF
UlQoIW1faW5pdGlhbE5lZ290aWF0aW9uVGltZXIuaXNBY3RpdmUoKSk7CiAKLSAgICBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAg
IGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChjb250ZXh0LT5pc0Nv
bnRleHRUaHJlYWQoKSk7Ci0gICAgY29udGV4dC0+cG9zdFRhc2soRGlzcGF0Y2hUYXNrPFBlZXJD
b25uZWN0aW9uLCBpbnQsIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT46OmNyZWF0ZSh0aGlzLCAmUGVl
ckNvbm5lY3Rpb246OmRpc3BhdGNoTWVzc2FnZUV2ZW50LCAwLCBkYXRhLnJlbGVhc2UoKSkpOwor
ICAgIG1faW5pdGlhbE5lZ290aWF0aW9uVGltZXIuc3RhcnRPbmVTaG90KDApOwogfQogCi12b2lk
IFBlZXJDb25uZWN0aW9uOjpwb3N0U2lnbmFsaW5nRXZlbnQoY29uc3QgU3RyaW5nJiBtZXNzYWdl
KQordm9pZCBQZWVyQ29ubmVjdGlvbjo6aW5pdGlhbE5lZ290aWF0aW9uVGltZXJGaXJlZChUaW1l
cjxQZWVyQ29ubmVjdGlvbj4qIHRpbWVyKQogewotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgaWYgKCFjb250ZXh0KQot
ICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKGNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsK
LSAgICBjb250ZXh0LT5wb3N0VGFzayhTaW1wbGVEaXNwYXRjaFRhc2s8UGVlckNvbm5lY3Rpb24s
IFN0cmluZz46OmNyZWF0ZSh0aGlzLCAmUGVlckNvbm5lY3Rpb246OmRpc3BhdGNoU2lnbmFsaW5n
RXZlbnQsIG1lc3NhZ2UpKTsKLX0KKyAgICBBU1NFUlRfVU5VU0VEKHRpbWVyLCB0aW1lciA9PSAm
bV9pbml0aWFsTmVnb3RpYXRpb25UaW1lcik7CiAKLXZvaWQgUGVlckNvbm5lY3Rpb246OnBvc3RT
dHJlYW1BZGRlZEV2ZW50KFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+IHBycFN0cmVhbSkKLXsKLSAg
ICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpOwotICAgIGlmICghY29udGV4dCkKKyAgICBpZiAobV9pY2VTdGFydGVkKQogICAgICAgICBy
ZXR1cm47Ci0gICAgQVNTRVJUKGNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKLSAgICBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCktPnBvc3RUYXNrKERpc3BhdGNoVGFzazxQZWVyQ29ubmVjdGlv
biwgU3RyaW5nLCBNZWRpYVN0cmVhbT46OmNyZWF0ZSh0aGlzLCAmUGVlckNvbm5lY3Rpb246OmRp
c3BhdGNoU3RyZWFtRXZlbnQsIGV2ZW50TmFtZXMoKS5hZGRzdHJlYW1FdmVudCwgcHJwU3RyZWFt
KSk7Ci19CiAKLXZvaWQgUGVlckNvbm5lY3Rpb246OnBvc3RTdHJlYW1SZW1vdmVkRXZlbnQoUGFz
c1JlZlB0cjxNZWRpYVN0cmVhbT4gcHJwU3RyZWFtKQotewotICAgIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgaWYgKCFjb250
ZXh0KQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKGNvbnRleHQtPmlzQ29udGV4dFRocmVh
ZCgpKTsKLSAgICBjb250ZXh0LT5wb3N0VGFzayhEaXNwYXRjaFRhc2s8UGVlckNvbm5lY3Rpb24s
IFN0cmluZywgTWVkaWFTdHJlYW0+OjpjcmVhdGUodGhpcywgJlBlZXJDb25uZWN0aW9uOjpkaXNw
YXRjaFN0cmVhbUV2ZW50LCBldmVudE5hbWVzKCkucmVtb3Zlc3RyZWFtRXZlbnQsIHBycFN0cmVh
bSkpOworICAgIE1lZGlhU3RyZWFtRGVzY3JpcHRvclZlY3RvciBwZW5kaW5nQWRkU3RyZWFtczsK
KyAgICBtX3BlbmRpbmdBZGRTdHJlYW1zLnN3YXAocGVuZGluZ0FkZFN0cmVhbXMpOworICAgIGlm
IChtX3BlZXJIYW5kbGVyKQorICAgICAgICBtX3BlZXJIYW5kbGVyLT5wcm9kdWNlSW5pdGlhbE9m
ZmVyKHBlbmRpbmdBZGRTdHJlYW1zKTsKKworICAgIG1faWNlU3RhcnRlZCA9IHRydWU7CisKKyAg
ICBjaGFuZ2VSZWFkeVN0YXRlKE5FR09USUFUSU5HKTsKIH0KIAotdm9pZCBQZWVyQ29ubmVjdGlv
bjo6cG9zdFNpbXBsZUV2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKQordm9pZCBQZWVyQ29u
bmVjdGlvbjo6ZW5zdXJlU3RyZWFtQ2hhbmdlU2NoZWR1bGVkKCkKIHsKLSAgICBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIGlm
ICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChjb250ZXh0LT5pc0NvbnRl
eHRUaHJlYWQoKSk7Ci0gICAgY29udGV4dC0+cG9zdFRhc2soU2ltcGxlRGlzcGF0Y2hUYXNrPFBl
ZXJDb25uZWN0aW9uLCBTdHJpbmc+OjpjcmVhdGUodGhpcywgJlBlZXJDb25uZWN0aW9uOjpkaXNw
YXRjaFNpbXBsZUV2ZW50LCBldmVudE5hbWUpKTsKKyAgICBpZiAoIW1fc3RyZWFtQ2hhbmdlVGlt
ZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9zdHJlYW1DaGFuZ2VUaW1lci5zdGFydE9uZVNob3Qo
MCk7CiB9CiAKLXZvaWQgUGVlckNvbm5lY3Rpb246OnBvc3RTdGFydE5lZ290aWF0aW9uVGFzaygp
Cit2b2lkIFBlZXJDb25uZWN0aW9uOjpzdHJlYW1DaGFuZ2VUaW1lckZpcmVkKFRpbWVyPFBlZXJD
b25uZWN0aW9uPiogdGltZXIpCiB7Ci0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHQpCisgICAgQVNT
RVJUX1VOVVNFRCh0aW1lciwgdGltZXIgPT0gJm1fc3RyZWFtQ2hhbmdlVGltZXIpOworCisgICAg
aWYgKCFtX3BlbmRpbmdBZGRTdHJlYW1zLmlzRW1wdHkoKSAmJiAhbV9wZW5kaW5nUmVtb3ZlU3Ry
ZWFtcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQoY29udGV4dC0+aXND
b250ZXh0VGhyZWFkKCkpOwotICAgIGNvbnRleHQtPnBvc3RUYXNrKFNpbXBsZURpc3BhdGNoVGFz
azxQZWVyQ29ubmVjdGlvbiwgaW50Pjo6Y3JlYXRlKHRoaXMsICZQZWVyQ29ubmVjdGlvbjo6ZGlz
cGF0Y2hTdGFydE5lZ290aWF0aW9uVGFzaywgMCkpOwotfQogCi12b2lkIFBlZXJDb25uZWN0aW9u
OjpkaXNwYXRjaE1lc3NhZ2VFdmVudChjb25zdCBpbnQmLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gZGF0YSkKLXsKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBk
ID0gZGF0YTsKLSAgICBkaXNwYXRjaEV2ZW50KE1lc3NhZ2VFdmVudDo6Y3JlYXRlKFBhc3NPd25Q
dHI8TWVzc2FnZVBvcnRBcnJheT4oKSwgZCkpOwotfQorICAgIE1lZGlhU3RyZWFtRGVzY3JpcHRv
clZlY3RvciBwZW5kaW5nQWRkU3RyZWFtczsKKyAgICBNZWRpYVN0cmVhbURlc2NyaXB0b3JWZWN0
b3IgcGVuZGluZ1JlbW92ZVN0cmVhbXM7CiAKLXZvaWQgUGVlckNvbm5lY3Rpb246OmRpc3BhdGNo
U2lnbmFsaW5nRXZlbnQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIG1fc2lnbmFsaW5n
Q2FsbGJhY2stPmhhbmRsZUV2ZW50KG1lc3NhZ2UsIHRoaXMpOworICAgIG1fcGVuZGluZ0FkZFN0
cmVhbXMuc3dhcChwZW5kaW5nQWRkU3RyZWFtcyk7CisgICAgbV9wZW5kaW5nUmVtb3ZlU3RyZWFt
cy5zd2FwKHBlbmRpbmdSZW1vdmVTdHJlYW1zKTsKKworICAgIGlmIChtX3BlZXJIYW5kbGVyKQor
ICAgICAgICBtX3BlZXJIYW5kbGVyLT5wcm9jZXNzUGVuZGluZ1N0cmVhbXMocGVuZGluZ0FkZFN0
cmVhbXMsIHBlbmRpbmdSZW1vdmVTdHJlYW1zKTsKKworICAgIGlmICghcGVuZGluZ0FkZFN0cmVh
bXMuaXNFbXB0eSgpKQorICAgICAgICBjaGFuZ2VSZWFkeVN0YXRlKE5FR09USUFUSU5HKTsKIH0K
IAotdm9pZCBQZWVyQ29ubmVjdGlvbjo6ZGlzcGF0Y2hTdHJlYW1FdmVudChjb25zdCBTdHJpbmcm
IG5hbWUsIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+IHN0cmVhbSkKK3ZvaWQgUGVlckNvbm5lY3Rp
b246OnNjaGVkdWxlUmVhZHlTdGF0ZUNoYW5nZShSZWFkeVN0YXRlIHJlYWR5U3RhdGUpCiB7Ci0g
ICAgUmVmUHRyPE1lZGlhU3RyZWFtPiBzID0gc3RyZWFtOwotICAgIGRpc3BhdGNoRXZlbnQoTWVk
aWFTdHJlYW1FdmVudDo6Y3JlYXRlKG5hbWUsIGZhbHNlLCBmYWxzZSwgcykpOworICAgIG1fcGVu
ZGluZ1JlYWR5U3RhdGVzLmFwcGVuZChyZWFkeVN0YXRlKTsKKyAgICBpZiAoIW1fcmVhZHlTdGF0
ZUNoYW5nZVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fcmVhZHlTdGF0ZUNoYW5nZVRpbWVy
LnN0YXJ0T25lU2hvdCgwKTsKIH0KIAotdm9pZCBQZWVyQ29ubmVjdGlvbjo6ZGlzcGF0Y2hTaW1w
bGVFdmVudChjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSkKK3ZvaWQgUGVlckNvbm5lY3Rpb246OnJl
YWR5U3RhdGVDaGFuZ2VUaW1lckZpcmVkKFRpbWVyPFBlZXJDb25uZWN0aW9uPiogdGltZXIpCiB7
Ci0gICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZSwgZmFsc2UsIGZhbHNl
KSk7CisgICAgQVNTRVJUX1VOVVNFRCh0aW1lciwgdGltZXIgPT0gJm1fcmVhZHlTdGF0ZUNoYW5n
ZVRpbWVyKTsKKworICAgIFZlY3RvcjxSZWFkeVN0YXRlPiBwZW5kaW5nUmVhZHlTdGF0ZXM7Cisg
ICAgbV9wZW5kaW5nUmVhZHlTdGF0ZXMuc3dhcChwZW5kaW5nUmVhZHlTdGF0ZXMpOworCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBwZW5kaW5nUmVhZHlTdGF0ZXMuc2l6ZSgpOyBpKyspCisg
ICAgICAgIGNoYW5nZVJlYWR5U3RhdGUocGVuZGluZ1JlYWR5U3RhdGVzW2ldKTsKIH0KIAotdm9p
ZCBQZWVyQ29ubmVjdGlvbjo6ZGlzcGF0Y2hTdGFydE5lZ290aWF0aW9uVGFzayhjb25zdCBpbnQm
KQordm9pZCBQZWVyQ29ubmVjdGlvbjo6Y2hhbmdlUmVhZHlTdGF0ZShSZWFkeVN0YXRlIHJlYWR5
U3RhdGUpCiB7Ci0gICAgaWYgKG1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKCkpCi0gICAgICAg
IG1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKCktPnN0YXJ0TmVnb3RpYXRpb24obV9jbGllbnRJ
ZCk7CisgICAgaWYgKHJlYWR5U3RhdGUgPT0gbV9yZWFkeVN0YXRlKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX3JlYWR5U3RhdGUgPSByZWFkeVN0YXRlOworCisgICAgc3dpdGNoIChtX3JlYWR5
U3RhdGUpIHsKKyAgICBjYXNlIE5FVzoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgTkVHT1RJQVRJTkc6CisgICAgICAgIGRpc3BhdGNoRXZl
bnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuY29ubmVjdGluZ0V2ZW50LCBmYWxzZSwgZmFs
c2UpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBQ1RJVkU6CisgICAgICAgIGRpc3BhdGNo
RXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkub3BlbkV2ZW50LCBmYWxzZSwgZmFsc2Up
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDTE9TRUQ6CisgICAgICAgIGJyZWFrOworICAg
IH0KIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcDJw
L1BlZXJDb25uZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcDJwL1BlZXJD
b25uZWN0aW9uLmgJKHJldmlzaW9uIDk3MzAxKQorKysgU291cmNlL1dlYkNvcmUvcDJwL1BlZXJD
b25uZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDQxICsyOCw0MSBAQAogCiAjaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkKIAorI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgIkV2
ZW50VGFyZ2V0LmgiCi0jaW5jbHVkZSAiTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIuaCIKLSNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgIkV4Y2VwdGlvbkJhc2UuaCIKKyNp
bmNsdWRlICJNZWRpYVN0cmVhbS5oIgorI2luY2x1ZGUgIk1lZGlhU3RyZWFtTGlzdC5oIgorI2lu
Y2x1ZGUgIlBlZXJIYW5kbGVyLmgiCisjaW5jbHVkZSAiU2lnbmFsaW5nQ2FsbGJhY2suaCIKKyNp
bmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIE1lZGlhU3RyZWFt
OwotY2xhc3MgTWVkaWFTdHJlYW1MaXN0OwotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsK
LWNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKLWNsYXNzIFNpZ25hbGluZ0NhbGxiYWNrOwot
Ci1jbGFzcyBQZWVyQ29ubmVjdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPFBlZXJDb25uZWN0aW9u
PiwgcHVibGljIEV2ZW50VGFyZ2V0LCBwdWJsaWMgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6
OlBlZXJDb25uZWN0aW9uQ2xpZW50IHsKK2NsYXNzIFBlZXJDb25uZWN0aW9uIDogcHVibGljIFJl
ZkNvdW50ZWQ8UGVlckNvbm5lY3Rpb24+LCBwdWJsaWMgUGVlckhhbmRsZXJDbGllbnQsIHB1Ymxp
YyBFdmVudFRhcmdldCwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7CiBwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8UGVlckNvbm5lY3Rpb24+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgY29uc3QgU3RyaW5nJiBzZXJ2ZXJDb25maWd1cmF0aW9uLCBQYXNzUmVmUHRyPFNpZ25h
bGluZ0NhbGxiYWNrPik7CisgICAgflBlZXJDb25uZWN0aW9uKCk7CisKKyAgICB2b2lkIHByb2Nl
c3NTaWduYWxpbmdNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgRXhjZXB0aW9uQ29kZSYp
OworCiAgICAgLy8gTmFtZSBhbmQgdmFsdWVzIG9mIHRoZSBlbnVtIG11c3QgbWF0Y2ggdGhlIGNv
cnJlc3Nwb25kaW5nIGNvbnN0YW50cyBpbiB0aGUgLmlkbCBmaWxlLgotICAgIGVudW0geworICAg
IGVudW0gUmVhZHlTdGF0ZSB7CiAgICAgICAgIE5FVyA9IDAsCiAgICAgICAgIE5FR09USUFUSU5H
ID0gMSwKICAgICAgICAgQUNUSVZFID0gMiwKICAgICAgICAgQ0xPU0VEID0gMwogICAgIH07CiAK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxQZWVyQ29ubmVjdGlvbj4gY3JlYXRlKE1lZGlhU3RyZWFt
RnJhbWVDb250cm9sbGVyKiwgaW50IGlkLCBjb25zdCBTdHJpbmcmIGNvbmZpZ3VyYXRpb24sIFBh
c3NSZWZQdHI8U2lnbmFsaW5nQ2FsbGJhY2s+KTsKLSAgICB2aXJ0dWFsIH5QZWVyQ29ubmVjdGlv
bigpOwotCi0gICAgTWVkaWFTdHJlYW1MaXN0KiBsb2NhbFN0cmVhbXMoKTsKLSAgICBNZWRpYVN0
cmVhbUxpc3QqIHJlbW90ZVN0cmVhbXMoKTsKLQotICAgIHVuc2lnbmVkIHNob3J0IHJlYWR5U3Rh
dGUoKSBjb25zdCB7IHJldHVybiBtX3JlYWR5U3RhdGU7IH0KKyAgICBSZWFkeVN0YXRlIHJlYWR5
U3RhdGUoKSBjb25zdDsKIAotICAgIHZvaWQgcHJvY2Vzc1NpZ25hbGluZ01lc3NhZ2UoY29uc3Qg
U3RyaW5nJiBtZXNzYWdlLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBzZW5kKGNvbnN0IFN0
cmluZyYgdGV4dCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgYWRkU3RyZWFtKFBhc3NSZWZQ
dHI8TWVkaWFTdHJlYW0+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCByZW1vdmVTdHJlYW0o
UGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGFkZFN0
cmVhbShjb25zdCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPiwgRXhjZXB0aW9uQ29kZSYpOworICAg
IHZvaWQgcmVtb3ZlU3RyZWFtKE1lZGlhU3RyZWFtKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIE1l
ZGlhU3RyZWFtTGlzdCogbG9jYWxTdHJlYW1zKCkgY29uc3Q7CisgICAgTWVkaWFTdHJlYW1MaXN0
KiByZW1vdGVTdHJlYW1zKCkgY29uc3Q7CiAgICAgdm9pZCBjbG9zZShFeGNlcHRpb25Db2RlJik7
CiAKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGNvbm5lY3RpbmcpOwpAQCAt
NzAsNTggKzcxLDYzIEBAIHB1YmxpYzoKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RF
TkVSKGFkZHN0cmVhbSk7CiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihyZW1v
dmVzdHJlYW0pOwogCisgICAgLy8gUGVlckhhbmRsZXJDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQg
aWNlUHJvY2Vzc2luZ0NvbXBsZXRlZCgpOworICAgIHZpcnR1YWwgdm9pZCBzZHBHZW5lcmF0ZWQo
Y29uc3QgU3RyaW5nJiBzZHApOworICAgIHZpcnR1YWwgdm9pZCBkYXRhU3RyZWFtTWVzc2FnZVJl
Y2VpdmVkKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdmlydHVhbCB2
b2lkIHJlbW90ZVN0cmVhbUFkZGVkKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPik7
CisgICAgdmlydHVhbCB2b2lkIHJlbW90ZVN0cmVhbVJlbW92ZWQoTWVkaWFTdHJlYW1EZXNjcmlw
dG9yKik7CisKICAgICAvLyBFdmVudFRhcmdldAogICAgIHZpcnR1YWwgUGVlckNvbm5lY3Rpb24q
IHRvUGVlckNvbm5lY3Rpb24oKTsKIAogICAgIC8vIEV2ZW50VGFyZ2V0IGltcGxlbWVudGF0aW9u
LgogICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpIGNvbnN0OwogCi0gICAgLy8gQ2FsbGJhY2tzCi0gICAgdm9pZCBvbk1lc3NhZ2UoY29u
c3QgU3RyaW5nJiBtZXNzYWdlKTsKLSAgICB2b2lkIG9uU2lnbmFsaW5nTWVzc2FnZShjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpOwotICAgIHZvaWQgb25OZWdvdGlhdGlvblN0YXJ0ZWQoKTsKLSAgICB2
b2lkIG9uTmVnb3RpYXRpb25Eb25lKCk7Ci0gICAgdm9pZCBzdHJlYW1BZGRlZChQYXNzUmVmUHRy
PE1lZGlhU3RyZWFtPik7Ci0gICAgdm9pZCBzdHJlYW1SZW1vdmVkKGNvbnN0IFN0cmluZyYgc3Ry
ZWFtTGFiZWwpOworICAgIC8vIEFjdGl2ZURPTU9iamVjdAorICAgIHZpcnR1YWwgdm9pZCBzdG9w
KCk7CiAKICAgICB1c2luZyBSZWZDb3VudGVkPFBlZXJDb25uZWN0aW9uPjo6cmVmOwogICAgIHVz
aW5nIFJlZkNvdW50ZWQ8UGVlckNvbm5lY3Rpb24+OjpkZXJlZjsKIAotcHJvdGVjdGVkOgorcHJp
dmF0ZToKKyAgICBQZWVyQ29ubmVjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3Qg
U3RyaW5nJiBzZXJ2ZXJDb25maWd1cmF0aW9uLCBQYXNzUmVmUHRyPFNpZ25hbGluZ0NhbGxiYWNr
Pik7CisKICAgICAvLyBFdmVudFRhcmdldCBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFsIEV2
ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXREYXRhKCk7CiAgICAgdmlydHVhbCBFdmVudFRhcmdl
dERhdGEqIGVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpOworICAgIHZpcnR1YWwgdm9pZCByZWZFdmVu
dFRhcmdldCgpIHsgcmVmKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgp
IHsgZGVyZWYoKTsgfQogCi1wcml2YXRlOgotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qga01heE1l
c3NhZ2VVVEY4TGVuZ3RoID0gNTA0OworICAgIHZvaWQgc2NoZWR1bGVJbml0aWFsTmVnb3RpYXRp
b24oKTsKKyAgICB2b2lkIGluaXRpYWxOZWdvdGlhdGlvblRpbWVyRmlyZWQoVGltZXI8UGVlckNv
bm5lY3Rpb24+Kik7CisgICAgdm9pZCBlbnN1cmVTdHJlYW1DaGFuZ2VTY2hlZHVsZWQoKTsKKyAg
ICB2b2lkIHN0cmVhbUNoYW5nZVRpbWVyRmlyZWQoVGltZXI8UGVlckNvbm5lY3Rpb24+Kik7Cisg
ICAgdm9pZCBzY2hlZHVsZVJlYWR5U3RhdGVDaGFuZ2UoUmVhZHlTdGF0ZSk7CisgICAgdm9pZCBy
ZWFkeVN0YXRlQ2hhbmdlVGltZXJGaXJlZChUaW1lcjxQZWVyQ29ubmVjdGlvbj4qKTsKIAotICAg
IFBlZXJDb25uZWN0aW9uKE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKiwgaW50IGlkLCBjb25z
dCBTdHJpbmcmIGNvbmZpZ3VyYXRpb24sIFBhc3NSZWZQdHI8U2lnbmFsaW5nQ2FsbGJhY2s+KTsK
LSAgICB2b2lkIGluaXQoKTsKKyAgICB2b2lkIGNoYW5nZVJlYWR5U3RhdGUoUmVhZHlTdGF0ZSk7
CiAKLSAgICB2b2lkIHBvc3RTaW1wbGVFdmVudChjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSk7Ci0g
ICAgdm9pZCBwb3N0TWVzc2FnZUV2ZW50KGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0gICAgdm9p
ZCBwb3N0U2lnbmFsaW5nRXZlbnQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLSAgICB2b2lkIHBv
c3RTdHJlYW1BZGRlZEV2ZW50KFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+KTsKLSAgICB2b2lkIHBv
c3RTdHJlYW1SZW1vdmVkRXZlbnQoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4pOwotICAgIHZvaWQg
cG9zdFN0YXJ0TmVnb3RpYXRpb25UYXNrKCk7Ci0KLSAgICB2b2lkIGRpc3BhdGNoU2ltcGxlRXZl
bnQoY29uc3QgU3RyaW5nJiBldmVudE5hbWUpOwotICAgIHZvaWQgZGlzcGF0Y2hNZXNzYWdlRXZl
bnQoY29uc3QgaW50JiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEpOwot
ICAgIHZvaWQgZGlzcGF0Y2hTaWduYWxpbmdFdmVudChjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSk7
Ci0gICAgdm9pZCBkaXNwYXRjaFN0cmVhbUV2ZW50KGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1Jl
ZlB0cjxNZWRpYVN0cmVhbT4pOwotICAgIHZvaWQgZGlzcGF0Y2hTdGFydE5lZ290aWF0aW9uVGFz
ayhjb25zdCBpbnQmKTsKKyAgICBSZWZQdHI8U2lnbmFsaW5nQ2FsbGJhY2s+IG1fc2lnbmFsaW5n
Q2FsbGJhY2s7CiAKLSAgICAvLyBFdmVudFRhcmdldCBpbXBsZW1lbnRhdGlvbi4KLSAgICB2aXJ0
dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRl
cmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0KKyAgICBSZWFkeVN0YXRlIG1fcmVhZHlTdGF0
ZTsKKyAgICBib29sIG1faWNlU3RhcnRlZDsKKworICAgIFJlZlB0cjxNZWRpYVN0cmVhbUxpc3Q+
IG1fbG9jYWxTdHJlYW1zOworICAgIFJlZlB0cjxNZWRpYVN0cmVhbUxpc3Q+IG1fcmVtb3RlU3Ry
ZWFtczsKIAorICAgIC8vIEV2ZW50VGFyZ2V0IGltcGxlbWVudGF0aW9uLgogICAgIEV2ZW50VGFy
Z2V0RGF0YSBtX2V2ZW50VGFyZ2V0RGF0YTsKIAotICAgIFN0cmluZyBtX2NvbmZpZ3VyYXRpb247
Ci0gICAgdW5zaWduZWQgc2hvcnQgbV9yZWFkeVN0YXRlOwotICAgIFJlZlB0cjxTaWduYWxpbmdD
YWxsYmFjaz4gbV9zaWduYWxpbmdDYWxsYmFjazsKLSAgICBSZWZQdHI8TWVkaWFTdHJlYW1MaXN0
PiBtX2xvY2FsU3RyZWFtTGlzdDsKLSAgICBSZWZQdHI8TWVkaWFTdHJlYW1MaXN0PiBtX3JlbW90
ZVN0cmVhbUxpc3Q7CisgICAgVGltZXI8UGVlckNvbm5lY3Rpb24+IG1faW5pdGlhbE5lZ290aWF0
aW9uVGltZXI7CisgICAgVGltZXI8UGVlckNvbm5lY3Rpb24+IG1fc3RyZWFtQ2hhbmdlVGltZXI7
CisgICAgVGltZXI8UGVlckNvbm5lY3Rpb24+IG1fcmVhZHlTdGF0ZUNoYW5nZVRpbWVyOworCisg
ICAgTWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yIG1fcGVuZGluZ0FkZFN0cmVhbXM7CisgICAg
TWVkaWFTdHJlYW1EZXNjcmlwdG9yVmVjdG9yIG1fcGVuZGluZ1JlbW92ZVN0cmVhbXM7CisgICAg
VmVjdG9yPFJlYWR5U3RhdGU+IG1fcGVuZGluZ1JlYWR5U3RhdGVzOworCisgICAgT3duUHRyPFBl
ZXJIYW5kbGVyPiBtX3BlZXJIYW5kbGVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcDJwL1BlZXJDb25uZWN0aW9uLmlkbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wMnAvUGVlckNvbm5lY3Rpb24uaWRsCShyZXZpc2lvbiA5NzMwMSkK
KysrIFNvdXJjZS9XZWJDb3JlL3AycC9QZWVyQ29ubmVjdGlvbi5pZGwJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDkgKzI2LDEzIEBAIG1vZHVsZSBwMnAgewogCiAgICAgaW50ZXJmYWNlIFsKICAgICAg
ICAgQ29uZGl0aW9uYWw9TUVESUFfU1RSRUFNLAorICAgICAgICBBY3RpdmVET01PYmplY3QsCiAg
ICAgICAgIENhbkJlQ29uc3RydWN0ZWQsCi0gICAgICAgIEN1c3RvbUNvbnN0cnVjdG9yLAogICAg
ICAgICBDb25zdHJ1Y3RvclBhcmFtZXRlcnM9MiwKKyAgICAgICAgQ29uc3RydWN0b3IoaW4gRE9N
U3RyaW5nIHNlcnZlckNvbmZpZ3VyYXRpb24sIGluIFtDYWxsYmFjaz1GdW5jdGlvbk9ubHldIFNp
Z25hbGluZ0NhbGxiYWNrIHNpZ25hbGluZ0NhbGxiYWNrKSwKKyAgICAgICAgQ29uc3RydWN0b3JX
aXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsCisgICAgICAgIEpTQ3VzdG9tQ29uc3RydWN0b3Is
CisgICAgICAgIFY4Q29uc3RydWN0b3JTZXRzQWN0aXZlRE9NV3JhcHBlciwKICAgICAgICAgRXZl
bnRUYXJnZXQKICAgICBdIFBlZXJDb25uZWN0aW9uIHsKICAgICAgICAgdm9pZCBwcm9jZXNzU2ln
bmFsaW5nTWVzc2FnZShpbiBET01TdHJpbmcgbWVzc2FnZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvTWVkaWFTdHJlYW1DbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL01lZGlhU3RyZWFtQ2xpZW50LmgJKHJldmlzaW9uIDk3MzAxKQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9NZWRpYVN0cmVhbUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxNSArNDks
NiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHN0b3BHZW5lcmF0ZWRTdHJlYW0oY29uc3Qg
U3RyaW5nJiBzdHJlYW1MYWJlbCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRNZWRpYVN0cmVh
bVRyYWNrRW5hYmxlZChjb25zdCBTdHJpbmcmIHRyYWNrSWQsIGJvb2wgZW5hYmxlZCkgPSAwOwog
Ci0gICAgLy8gUGVlckNvbm5lY3Rpb24gZnVuY3Rpb25zLgotICAgIHZpcnR1YWwgdm9pZCBuZXdQ
ZWVyQ29ubmVjdGlvbihpbnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBjb25maWd1
cmF0aW9uKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN0YXJ0TmVnb3RpYXRpb24oaW50IHBlZXJD
b25uZWN0aW9uSWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc1NpZ25hbGluZ01lc3Nh
Z2UoaW50IHBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBtZXNzYWdlKGludCBwZWVyQ29ubmVjdGlvbklkLCBjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkU3RyZWFtKGludCBwZWVyQ29ubmVj
dGlvbklkLCBjb25zdCBTdHJpbmcmIHN0cmVhbUxhYmVsKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IHJlbW92ZVN0cmVhbShpbnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBzdHJlYW1M
YWJlbCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZVBlZXJDb25uZWN0aW9uKGludCBwZWVy
Q29ubmVjdGlvbklkKSA9IDA7Ci0KIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5NZWRpYVN0cmVh
bUNsaWVudCgpIHsgfQogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1D
b250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3Ry
ZWFtQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDk3MzAxKQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9NZWRpYVN0cmVhbUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCw2
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gRklYTUU6IFRoaXMgaXMgdXNlZCBmb3Ig
aG9sZGluZyBsaXN0IG9mIFBlZXJDb25uZWN0aW9uIGFzIHdlbGwsCi0vLyBzbyByZW5hbWUgY2xh
c3MgaXMgaW4gb3JkZXIuCiBjbGFzcyBNZWRpYVN0cmVhbUNvbnRyb2xsZXI6OlJlcXVlc3Qgewog
cHVibGljOgogICAgIFJlcXVlc3QoKQpAQCAtNTcsNyArNTUsNiBAQCBwcml2YXRlOgogTWVkaWFT
dHJlYW1Db250cm9sbGVyOjpNZWRpYVN0cmVhbUNvbnRyb2xsZXIoTWVkaWFTdHJlYW1DbGllbnQq
IGNsaWVudCkKICAgICA6IG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fbmV4dEdsb2JhbFJlcXVl
c3RJZCgxKQotICAgICwgbV9uZXh0R2xvYmFsUGVlckNvbm5lY3Rpb25JZCgxKQogewogfQogCkBA
IC0xNTcsMTMwICsxNTQsNiBAQCB2b2lkIE1lZGlhU3RyZWFtQ29udHJvbGxlcjo6c3RyZWFtRmFp
bGVkCiAgICAgICAgIG1fc3RyZWFtcy5nZXQoc3RyZWFtTGFiZWwpLT5zdHJlYW1GYWlsZWQoc3Ry
ZWFtTGFiZWwpOwogfQogCi12b2lkIE1lZGlhU3RyZWFtQ29udHJvbGxlcjo6b25TaWduYWxpbmdN
ZXNzYWdlKGludCBjb250cm9sbGVyUGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBtZXNz
YWdlKQotewotICAgIC8vIERvbid0IGFzc2VydCBzaW5jZSB0aGUgZnJhbWUgY29udHJvbGxlciBj
YW4gaGF2ZSBiZWVuIGRlc3Ryb3llZC4KLSAgICBpZiAobV9wZWVyQ29ubmVjdGlvbnMuY29udGFp
bnMoY29udHJvbGxlclBlZXJDb25uZWN0aW9uSWQpKSB7Ci0gICAgICAgIGNvbnN0IFJlcXVlc3Qm
IHBlZXJDb25uZWN0aW9uID0gbV9wZWVyQ29ubmVjdGlvbnMuZ2V0KGNvbnRyb2xsZXJQZWVyQ29u
bmVjdGlvbklkKTsKLSAgICAgICAgQVNTRVJUKHBlZXJDb25uZWN0aW9uLmZyYW1lQ29udHJvbGxl
cigpKTsKLSAgICAgICAgcGVlckNvbm5lY3Rpb24uZnJhbWVDb250cm9sbGVyKCktPm9uU2lnbmFs
aW5nTWVzc2FnZShwZWVyQ29ubmVjdGlvbi5sb2NhbElkKCksIG1lc3NhZ2UpOwotICAgIH0KLX0K
LQotYm9vbCBNZWRpYVN0cmVhbUNvbnRyb2xsZXI6OmZyYW1lVG9QYWdlUGVlckNvbm5lY3Rpb25J
ZChNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciogZnJhbWVDb250cm9sbGVyLCBpbnQgZnJhbWVQ
ZWVyQ29ubmVjdGlvbklkLCBpbnQmIHBhZ2VQZWVyQ29ubmVjdGlvbklkKQotewotICAgIHBhZ2VQ
ZWVyQ29ubmVjdGlvbklkID0gLTE7Ci0gICAgLy8gRklYTUU6IElzIHRoZXJlIGEgYmV0dGVyIHdh
eSB0byBmaW5kIHRoZSBnbG9iYWwgSUQgaW4gdGhlIG1hcD8KLSAgICBmb3IgKFJlcXVlc3RNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9wZWVyQ29ubmVjdGlvbnMuYmVnaW4oKTsgaXQgIT0gbV9wZWVyQ29u
bmVjdGlvbnMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQuZnJhbWVDb250
cm9sbGVyKCkgPT0gZnJhbWVDb250cm9sbGVyICYmIGl0LT5zZWNvbmQubG9jYWxJZCgpID09IGZy
YW1lUGVlckNvbm5lY3Rpb25JZCkgewotICAgICAgICAgICAgcGFnZVBlZXJDb25uZWN0aW9uSWQg
PSBpdC0+Zmlyc3Q7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1Db250cm9sbGVyOjpwcm9j
ZXNzU2lnbmFsaW5nTWVzc2FnZShNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciogZnJhbWVDb250
cm9sbGVyLCBpbnQgZnJhbWVQZWVyQ29ubmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
Ci17Ci0gICAgaW50IHBhZ2VQZWVyQ29ubmVjdGlvbklkOwotICAgIGlmIChmcmFtZVRvUGFnZVBl
ZXJDb25uZWN0aW9uSWQoZnJhbWVDb250cm9sbGVyLCBmcmFtZVBlZXJDb25uZWN0aW9uSWQsIHBh
Z2VQZWVyQ29ubmVjdGlvbklkKSkKLSAgICAgICAgbV9jbGllbnQtPnByb2Nlc3NTaWduYWxpbmdN
ZXNzYWdlKHBhZ2VQZWVyQ29ubmVjdGlvbklkLCBtZXNzYWdlKTsKLX0KLQotdm9pZCBNZWRpYVN0
cmVhbUNvbnRyb2xsZXI6Om1lc3NhZ2UoTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqIGZyYW1l
Q29udHJvbGxlciwgaW50IGZyYW1lUGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBtZXNz
YWdlKQotewotICAgIGludCBwYWdlUGVlckNvbm5lY3Rpb25JZDsKLSAgICBpZiAoZnJhbWVUb1Bh
Z2VQZWVyQ29ubmVjdGlvbklkKGZyYW1lQ29udHJvbGxlciwgZnJhbWVQZWVyQ29ubmVjdGlvbklk
LCBwYWdlUGVlckNvbm5lY3Rpb25JZCkpCi0gICAgICAgIG1fY2xpZW50LT5tZXNzYWdlKHBhZ2VQ
ZWVyQ29ubmVjdGlvbklkLCBtZXNzYWdlKTsKLX0KLQotdm9pZCBNZWRpYVN0cmVhbUNvbnRyb2xs
ZXI6Om9uTWVzc2FnZShpbnQgY29udHJvbGxlclBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSkKLXsKLSAgICAvLyBEb24ndCBhc3NlcnQgc2luY2UgdGhlIGZyYW1lIGNvbnRy
b2xsZXIgY2FuIGhhdmUgYmVlbiBkZXN0cm95ZWQKLSAgICBpZiAobV9wZWVyQ29ubmVjdGlvbnMu
Y29udGFpbnMoY29udHJvbGxlclBlZXJDb25uZWN0aW9uSWQpKSB7Ci0gICAgICAgIGNvbnN0IFJl
cXVlc3QmIHBlZXJDb25uZWN0aW9uID0gbV9wZWVyQ29ubmVjdGlvbnMuZ2V0KGNvbnRyb2xsZXJQ
ZWVyQ29ubmVjdGlvbklkKTsKLSAgICAgICAgQVNTRVJUKHBlZXJDb25uZWN0aW9uLmZyYW1lQ29u
dHJvbGxlcigpKTsKLSAgICAgICAgcGVlckNvbm5lY3Rpb24uZnJhbWVDb250cm9sbGVyKCktPm9u
TWVzc2FnZShwZWVyQ29ubmVjdGlvbi5sb2NhbElkKCksIG1lc3NhZ2UpOwotICAgIH0KLX0KLQot
dm9pZCBNZWRpYVN0cmVhbUNvbnRyb2xsZXI6OmFkZFN0cmVhbShNZWRpYVN0cmVhbUZyYW1lQ29u
dHJvbGxlciogZnJhbWVDb250cm9sbGVyLCBpbnQgZnJhbWVQZWVyQ29ubmVjdGlvbklkLCBjb25z
dCBTdHJpbmcmIHN0cmVhbUxhYmVsKQotewotICAgIGludCBwYWdlUGVlckNvbm5lY3Rpb25JZDsK
LSAgICBpZiAoZnJhbWVUb1BhZ2VQZWVyQ29ubmVjdGlvbklkKGZyYW1lQ29udHJvbGxlciwgZnJh
bWVQZWVyQ29ubmVjdGlvbklkLCBwYWdlUGVlckNvbm5lY3Rpb25JZCkpCi0gICAgICAgIG1fY2xp
ZW50LT5hZGRTdHJlYW0ocGFnZVBlZXJDb25uZWN0aW9uSWQsIHN0cmVhbUxhYmVsKTsKLX0KLQot
dm9pZCBNZWRpYVN0cmVhbUNvbnRyb2xsZXI6Om9uQWRkU3RyZWFtKGludCBjb250cm9sbGVyUGVl
ckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCwgUGFzc1JlZlB0cjxNZWRp
YVN0cmVhbVRyYWNrTGlzdD4gdHJhY2tzKQotewotICAgIC8vIERvbid0IGFzc2VydCBzaW5jZSB0
aGUgZnJhbWUgY29udHJvbGxlciBjYW4gaGF2ZSBiZWVuIGRlc3Ryb3llZAotICAgIGlmIChtX3Bl
ZXJDb25uZWN0aW9ucy5jb250YWlucyhjb250cm9sbGVyUGVlckNvbm5lY3Rpb25JZCkpIHsKLSAg
ICAgICAgY29uc3QgUmVxdWVzdCYgcGVlckNvbm5lY3Rpb24gPSBtX3BlZXJDb25uZWN0aW9ucy5n
ZXQoY29udHJvbGxlclBlZXJDb25uZWN0aW9uSWQpOwotICAgICAgICBBU1NFUlQocGVlckNvbm5l
Y3Rpb24uZnJhbWVDb250cm9sbGVyKCkpOwotICAgICAgICBwZWVyQ29ubmVjdGlvbi5mcmFtZUNv
bnRyb2xsZXIoKS0+b25BZGRTdHJlYW0ocGVlckNvbm5lY3Rpb24ubG9jYWxJZCgpLCBzdHJlYW1M
YWJlbCwgdHJhY2tzKTsKLSAgICB9Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1Db250cm9sbGVyOjpy
ZW1vdmVTdHJlYW0oTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqIGZyYW1lQ29udHJvbGxlciwg
aW50IGZyYW1lUGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCkKLXsK
LSAgICBpbnQgcGFnZVBlZXJDb25uZWN0aW9uSWQ7Ci0gICAgaWYgKGZyYW1lVG9QYWdlUGVlckNv
bm5lY3Rpb25JZChmcmFtZUNvbnRyb2xsZXIsIGZyYW1lUGVlckNvbm5lY3Rpb25JZCwgcGFnZVBl
ZXJDb25uZWN0aW9uSWQpKQotICAgICAgICBtX2NsaWVudC0+cmVtb3ZlU3RyZWFtKHBhZ2VQZWVy
Q29ubmVjdGlvbklkLCBzdHJlYW1MYWJlbCk7Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1Db250cm9s
bGVyOjpvblJlbW92ZVN0cmVhbShpbnQgY29udHJvbGxlclBlZXJDb25uZWN0aW9uSWQsIGNvbnN0
IFN0cmluZyYgc3RyZWFtTGFiZWwpCi17Ci0gICAgLy8gRG9uJ3QgYXNzZXJ0IHNpbmNlIHRoZSBm
cmFtZSBjb250cm9sbGVyIGNhbiBoYXZlIGJlZW4gZGVzdHJveWVkCi0gICAgaWYgKG1fcGVlckNv
bm5lY3Rpb25zLmNvbnRhaW5zKGNvbnRyb2xsZXJQZWVyQ29ubmVjdGlvbklkKSkgewotICAgICAg
ICAvLyBUT0RPOiBCZXR0ZXIgbmFtZSBvZiBwZWVyQ29ubmVjdGlvbiB2YXJpYWJsZT8KLSAgICAg
ICAgY29uc3QgUmVxdWVzdCYgcGVlckNvbm5lY3Rpb24gPSBtX3BlZXJDb25uZWN0aW9ucy5nZXQo
Y29udHJvbGxlclBlZXJDb25uZWN0aW9uSWQpOwotICAgICAgICBBU1NFUlQocGVlckNvbm5lY3Rp
b24uZnJhbWVDb250cm9sbGVyKCkpOwotICAgICAgICBwZWVyQ29ubmVjdGlvbi5mcmFtZUNvbnRy
b2xsZXIoKS0+b25SZW1vdmVTdHJlYW0ocGVlckNvbm5lY3Rpb24ubG9jYWxJZCgpLCBzdHJlYW1M
YWJlbCk7Ci0gICAgfQotfQotCi12b2lkIE1lZGlhU3RyZWFtQ29udHJvbGxlcjo6bmV3UGVlckNv
bm5lY3Rpb24oTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqIGZyYW1lQ29udHJvbGxlciwgaW50
IGZyYW1lUGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBjb25maWd1cmF0aW9uKQotewot
ICAgIGludCBwYWdlUGVlckNvbm5lY3Rpb25JZCA9IG1fbmV4dEdsb2JhbFBlZXJDb25uZWN0aW9u
SWQrKzsKLSAgICBtX3BlZXJDb25uZWN0aW9ucy5hZGQocGFnZVBlZXJDb25uZWN0aW9uSWQsIFJl
cXVlc3QoZnJhbWVQZWVyQ29ubmVjdGlvbklkLCBmcmFtZUNvbnRyb2xsZXIpKTsKLQotICAgIG1f
Y2xpZW50LT5uZXdQZWVyQ29ubmVjdGlvbihwYWdlUGVlckNvbm5lY3Rpb25JZCwgY29uZmlndXJh
dGlvbik7Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1Db250cm9sbGVyOjpjbG9zZVBlZXJDb25uZWN0
aW9uKE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyKiBmcmFtZUNvbnRyb2xsZXIsIGludCBmcmFt
ZVBlZXJDb25uZWN0aW9uSWQpCi17Ci0gICAgaW50IHBhZ2VQZWVyQ29ubmVjdGlvbklkOwotICAg
IGlmIChmcmFtZVRvUGFnZVBlZXJDb25uZWN0aW9uSWQoZnJhbWVDb250cm9sbGVyLCBmcmFtZVBl
ZXJDb25uZWN0aW9uSWQsIHBhZ2VQZWVyQ29ubmVjdGlvbklkKSkKLSAgICAgICAgbV9jbGllbnQt
PmNsb3NlUGVlckNvbm5lY3Rpb24ocGFnZVBlZXJDb25uZWN0aW9uSWQpOwotfQotCi12b2lkIE1l
ZGlhU3RyZWFtQ29udHJvbGxlcjo6c3RhcnROZWdvdGlhdGlvbihNZWRpYVN0cmVhbUZyYW1lQ29u
dHJvbGxlciogZnJhbWVDb250cm9sbGVyLCBpbnQgZnJhbWVQZWVyQ29ubmVjdGlvbklkKQotewot
ICAgIGludCBwYWdlUGVlckNvbm5lY3Rpb25JZDsKLSAgICBpZiAoZnJhbWVUb1BhZ2VQZWVyQ29u
bmVjdGlvbklkKGZyYW1lQ29udHJvbGxlciwgZnJhbWVQZWVyQ29ubmVjdGlvbklkLCBwYWdlUGVl
ckNvbm5lY3Rpb25JZCkpCi0gICAgICAgIG1fY2xpZW50LT5zdGFydE5lZ290aWF0aW9uKHBhZ2VQ
ZWVyQ29ubmVjdGlvbklkKTsKLX0KLQotdm9pZCBNZWRpYVN0cmVhbUNvbnRyb2xsZXI6Om9uTmVn
b3RpYXRpb25TdGFydGVkKGludCBjb250cm9sbGVyUGVlckNvbm5lY3Rpb25JZCkKLXsKLSAgICAv
LyBEb24ndCBhc3NlcnQgc2luY2UgdGhlIGZyYW1lIGNvbnRyb2xsZXIgY2FuIGhhdmUgYmVlbiBk
ZXN0cm95ZWQKLSAgICBpZiAobV9wZWVyQ29ubmVjdGlvbnMuY29udGFpbnMoY29udHJvbGxlclBl
ZXJDb25uZWN0aW9uSWQpKSB7Ci0gICAgICAgIGNvbnN0IFJlcXVlc3QmIHBlZXJDb25uZWN0aW9u
ID0gbV9wZWVyQ29ubmVjdGlvbnMuZ2V0KGNvbnRyb2xsZXJQZWVyQ29ubmVjdGlvbklkKTsKLSAg
ICAgICAgQVNTRVJUKHBlZXJDb25uZWN0aW9uLmZyYW1lQ29udHJvbGxlcigpKTsKLSAgICAgICAg
cGVlckNvbm5lY3Rpb24uZnJhbWVDb250cm9sbGVyKCktPm9uTmVnb3RpYXRpb25TdGFydGVkKHBl
ZXJDb25uZWN0aW9uLmxvY2FsSWQoKSk7Ci0gICAgfQotfQotCi12b2lkIE1lZGlhU3RyZWFtQ29u
dHJvbGxlcjo6b25OZWdvdGlhdGlvbkRvbmUoaW50IGNvbnRyb2xsZXJQZWVyQ29ubmVjdGlvbklk
KQotewotICAgIC8vIERvbid0IGFzc2VydCBzaW5jZSB0aGUgZnJhbWUgY29udHJvbGxlciBjYW4g
aGF2ZSBiZWVuIGRlc3Ryb3llZAotICAgIGlmIChtX3BlZXJDb25uZWN0aW9ucy5jb250YWlucyhj
b250cm9sbGVyUGVlckNvbm5lY3Rpb25JZCkpIHsKLSAgICAgICAgY29uc3QgUmVxdWVzdCYgcGVl
ckNvbm5lY3Rpb24gPSBtX3BlZXJDb25uZWN0aW9ucy5nZXQoY29udHJvbGxlclBlZXJDb25uZWN0
aW9uSWQpOwotICAgICAgICBBU1NFUlQocGVlckNvbm5lY3Rpb24uZnJhbWVDb250cm9sbGVyKCkp
OwotICAgICAgICBwZWVyQ29ubmVjdGlvbi5mcmFtZUNvbnRyb2xsZXIoKS0+b25OZWdvdGlhdGlv
bkRvbmUocGVlckNvbm5lY3Rpb24ubG9jYWxJZCgpKTsKLSAgICB9Ci19Ci0KIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1Db250cm9sbGVyLmgJKHJldmlzaW9uIDk3MzAx
KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUNvbnRyb2xsZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjAsNDAgKzYwLDE5IEBAIHB1YmxpYzoKICAgICB2b2lkIHN0cmVhbUdlbmVy
YXRpb25GYWlsZWQoaW50IHJlcXVlc3RJZCwgTmF2aWdhdG9yVXNlck1lZGlhRXJyb3I6OkVycm9y
Q29kZSk7CiAgICAgdm9pZCBzdHJlYW1GYWlsZWQoY29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCk7
CiAKLSAgICAvKiBKUyAtPiBVQSAqLwotICAgIHZvaWQgbmV3UGVlckNvbm5lY3Rpb24oTWVkaWFT
dHJlYW1GcmFtZUNvbnRyb2xsZXIqLCBpbnQgZnJhbWVQZWVyQ29ubmVjdGlvbklkLCBjb25zdCBT
dHJpbmcmIGNvbmZpZ3VyYXRpb24pOwotICAgIHZvaWQgc3RhcnROZWdvdGlhdGlvbihNZWRpYVN0
cmVhbUZyYW1lQ29udHJvbGxlciosIGludCBmcmFtZVBlZXJDb25uZWN0aW9uSWQpOwotICAgIHZv
aWQgcHJvY2Vzc1NpZ25hbGluZ01lc3NhZ2UoTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqLCBp
bnQgZnJhbWVQZWVyQ29ubmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwotICAgIHZv
aWQgbWVzc2FnZShNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlciosIGludCBmcmFtZVBlZXJDb25u
ZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0gICAgdm9pZCBhZGRTdHJlYW0oTWVk
aWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqLCBpbnQgZnJhbWVQZWVyQ29ubmVjdGlvbklkLCBjb25z
dCBTdHJpbmcmIHN0cmVhbUxhYmVsKTsKLSAgICB2b2lkIHJlbW92ZVN0cmVhbShNZWRpYVN0cmVh
bUZyYW1lQ29udHJvbGxlciosIGludCBmcmFtZVBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmlu
ZyYgc3RyZWFtTGFiZWwpOwotICAgIHZvaWQgY2xvc2VQZWVyQ29ubmVjdGlvbihNZWRpYVN0cmVh
bUZyYW1lQ29udHJvbGxlciosIGludCBmcmFtZVBlZXJDb25uZWN0aW9uSWQpOwotCi0gICAgLyog
VUEgLT4gSlMgKi8KLSAgICB2b2lkIG9uU2lnbmFsaW5nTWVzc2FnZShpbnQgY29udHJvbGxlclBl
ZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0gICAgdm9pZCBvbk1lc3Nh
Z2UoaW50IGNvbnRyb2xsZXJQZWVyQ29ubmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
OwotICAgIHZvaWQgb25BZGRTdHJlYW0oaW50IGNvbnRyb2xsZXJQZWVyQ29ubmVjdGlvbklkLCBj
b25zdCBTdHJpbmcmIHN0cmVhbUxhYmVsLCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tMaXN0
PiB0cmFja3MpOwotICAgIHZvaWQgb25SZW1vdmVTdHJlYW0oaW50IGNvbnRyb2xsZXJQZWVyQ29u
bmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIHN0cmVhbUxhYmVsKTsKLSAgICB2b2lkIG9uTmVnb3Rp
YXRpb25TdGFydGVkKGludCBjb250cm9sbGVyUGVlckNvbm5lY3Rpb25JZCk7Ci0gICAgdm9pZCBv
bk5lZ290aWF0aW9uRG9uZShpbnQgY29udHJvbGxlclBlZXJDb25uZWN0aW9uSWQpOwotCiBwcml2
YXRlOgogICAgIGludCByZWdpc3RlclJlcXVlc3QoaW50IGxvY2FsUmVxdWVzdElkLCBNZWRpYVN0
cmVhbUZyYW1lQ29udHJvbGxlciopOwogICAgIHZvaWQgcmVnaXN0ZXJTdHJlYW0oY29uc3QgU3Ry
aW5nJiBzdHJlYW1MYWJlbCwgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIqKTsKIAotICAgIGJv
b2wgZnJhbWVUb1BhZ2VQZWVyQ29ubmVjdGlvbklkKE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVy
KiwgaW50IGZyYW1lUGVlckNvbm5lY3Rpb25JZCwgaW50JiBwYWdlUGVlckNvbm5lY3Rpb25JZCk7
Ci0KICAgICBjbGFzcyBSZXF1ZXN0OwogICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFJlcXVlc3Q+
IFJlcXVlc3RNYXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgTWVkaWFTdHJlYW1GcmFt
ZUNvbnRyb2xsZXIqPiBTdHJlYW1NYXA7CiAKICAgICBSZXF1ZXN0TWFwIG1fcmVxdWVzdHM7CiAg
ICAgU3RyZWFtTWFwIG1fc3RyZWFtczsKLSAgICBSZXF1ZXN0TWFwIG1fcGVlckNvbm5lY3Rpb25z
OwogCiAgICAgTWVkaWFTdHJlYW1DbGllbnQqIG1fY2xpZW50OwogICAgIGludCBtX25leHRHbG9i
YWxSZXF1ZXN0SWQ7Ci0gICAgaW50IG1fbmV4dEdsb2JhbFBlZXJDb25uZWN0aW9uSWQ7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlh
U3RyZWFtRnJhbWVDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL01lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyLmNwcAkocmV2aXNpb24gOTczMDEpCisrKyBT
b3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsOSArMzYsNyBAQAogI2luY2x1ZGUgIk5hdmlnYXRvclVzZXJNZWRpYUVy
cm9yQ2FsbGJhY2suaCIKICNpbmNsdWRlICJOYXZpZ2F0b3JVc2VyTWVkaWFTdWNjZXNzQ2FsbGJh
Y2suaCIKICNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGVlckNvbm5lY3Rpb24uaCIKICNp
bmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2luY2x1ZGUgIlNpZ25hbGluZ0NhbGxiYWNrLmgi
CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
MzYzLDEyNiArMzYxLDYgQEAgdm9pZCBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcjo6c3RyZWFt
RgogICAgIGdldFN0cmVhbUZyb21MYWJlbChsYWJlbCktPnN0cmVhbUVuZGVkKCk7CiB9CiAKLVBh
c3NSZWZQdHI8UGVlckNvbm5lY3Rpb24+IE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjpjcmVh
dGVQZWVyQ29ubmVjdGlvbihjb25zdCBTdHJpbmcmIGNvbmZpZ3VyYXRpb24sIFBhc3NSZWZQdHI8
U2lnbmFsaW5nQ2FsbGJhY2s+IHNpZ25hbGluZ0NhbGxiYWNrKQotewotICAgIGludCBjbGllbnRJ
ZCA9IG1fY2xpZW50cy5nZXROZXh0SWQoKTsKLSAgICBSZWZQdHI8UGVlckNvbm5lY3Rpb24+IHBl
ZXJDb25uZWN0aW9uID0gUGVlckNvbm5lY3Rpb246OmNyZWF0ZSh0aGlzLCBjbGllbnRJZCwgY29u
ZmlndXJhdGlvbiwgc2lnbmFsaW5nQ2FsbGJhY2spOwotICAgIGlmIChwZWVyQ29ubmVjdGlvbikK
LSAgICAgICAgbV9jbGllbnRzLmFkZChjbGllbnRJZCwgcGVlckNvbm5lY3Rpb24uZ2V0KCkpOwot
ICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5yZWxlYXNlKCk7Ci19Ci0KLXZvaWQgTWVkaWFTdHJl
YW1GcmFtZUNvbnRyb2xsZXI6Om5ld1BlZXJDb25uZWN0aW9uKGludCBwZWVyQ29ubmVjdGlvbklk
LCBjb25zdCBTdHJpbmcmIGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgaWYgKHBhZ2VDb250cm9sbGVy
KCkpCi0gICAgICAgIHBhZ2VDb250cm9sbGVyKCktPm5ld1BlZXJDb25uZWN0aW9uKHRoaXMsIHBl
ZXJDb25uZWN0aW9uSWQsIGNvbmZpZ3VyYXRpb24pOwotfQotCi12b2lkIE1lZGlhU3RyZWFtRnJh
bWVDb250cm9sbGVyOjpjbG9zZVBlZXJDb25uZWN0aW9uKGludCBwZWVyQ29ubmVjdGlvbklkKQot
ewotICAgIGlmIChwYWdlQ29udHJvbGxlcigpKQotICAgICAgICBwYWdlQ29udHJvbGxlcigpLT5j
bG9zZVBlZXJDb25uZWN0aW9uKHRoaXMsIHBlZXJDb25uZWN0aW9uSWQpOwotfQotCi12b2lkIE1l
ZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjpzdGFydE5lZ290aWF0aW9uKGludCBwZWVyQ29ubmVj
dGlvbklkKQotewotICAgIGlmIChwYWdlQ29udHJvbGxlcigpKQotICAgICAgICBwYWdlQ29udHJv
bGxlcigpLT5zdGFydE5lZ290aWF0aW9uKHRoaXMsIHBlZXJDb25uZWN0aW9uSWQpOwotfQotCi12
b2lkIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjpwcm9jZXNzU2lnbmFsaW5nTWVzc2FnZShp
bnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGlmIChw
YWdlQ29udHJvbGxlcigpKQotICAgICAgICBwYWdlQ29udHJvbGxlcigpLT5wcm9jZXNzU2lnbmFs
aW5nTWVzc2FnZSh0aGlzLCBwZWVyQ29ubmVjdGlvbklkLCBtZXNzYWdlKTsKLX0KLQotdm9pZCBN
ZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcjo6bWVzc2FnZShpbnQgcGVlckNvbm5lY3Rpb25JZCwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGlmIChwYWdlQ29udHJvbGxlcigpKQotICAg
ICAgICBwYWdlQ29udHJvbGxlcigpLT5tZXNzYWdlKHRoaXMsIHBlZXJDb25uZWN0aW9uSWQsIG1l
c3NhZ2UpOwotfQotCi12b2lkIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjphZGRTdHJlYW0o
aW50IHBlZXJDb25uZWN0aW9uSWQsIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+IHBycFN0cmVhbSkK
LXsKLSAgICBSZWZQdHI8TWVkaWFTdHJlYW0+IHN0cmVhbSA9IHBycFN0cmVhbTsKLSAgICBBU1NF
UlQobV9zdHJlYW1zLmNvbnRhaW5zKHN0cmVhbS0+bGFiZWwoKSkpOwotCi0gICAgaWYgKHBhZ2VD
b250cm9sbGVyKCkpCi0gICAgICAgIHBhZ2VDb250cm9sbGVyKCktPmFkZFN0cmVhbSh0aGlzLCBw
ZWVyQ29ubmVjdGlvbklkLCBzdHJlYW0tPmxhYmVsKCkpOwotfQotCi12b2lkIE1lZGlhU3RyZWFt
RnJhbWVDb250cm9sbGVyOjpyZW1vdmVTdHJlYW0oaW50IHBlZXJDb25uZWN0aW9uSWQsIFBhc3NS
ZWZQdHI8TWVkaWFTdHJlYW0+IHBycFN0cmVhbSkKLXsKLSAgICBSZWZQdHI8TWVkaWFTdHJlYW0+
IHN0cmVhbSA9IHBycFN0cmVhbTsKLSAgICBBU1NFUlQobV9zdHJlYW1zLmNvbnRhaW5zKHN0cmVh
bS0+bGFiZWwoKSkpOwotCi0gICAgaWYgKHBhZ2VDb250cm9sbGVyKCkpCi0gICAgICAgIHBhZ2VD
b250cm9sbGVyKCktPnJlbW92ZVN0cmVhbSh0aGlzLCBwZWVyQ29ubmVjdGlvbklkLCBzdHJlYW0t
PmxhYmVsKCkpOwotfQotCi12b2lkIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjpvbk1lc3Nh
Z2UoaW50IHBlZXJDb25uZWN0aW9uSWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBB
U1NFUlQobV9jbGllbnRzLmNvbnRhaW5zKHBlZXJDb25uZWN0aW9uSWQpKTsKLSAgICBBU1NFUlQo
bV9jbGllbnRzLmdldChwZWVyQ29ubmVjdGlvbklkKS0+aXNQZWVyQ29ubmVjdGlvbigpKTsKLQot
ICAgIFJlZlB0cjxQZWVyQ29ubmVjdGlvbj4gcGVlckNvbm5lY3Rpb24gPSBzdGF0aWNfY2FzdDxQ
ZWVyQ29ubmVjdGlvbio+KG1fY2xpZW50cy5nZXQocGVlckNvbm5lY3Rpb25JZCkpOwotCi0gICAg
cGVlckNvbm5lY3Rpb24tPm9uTWVzc2FnZShtZXNzYWdlKTsKLX0KLQotdm9pZCBNZWRpYVN0cmVh
bUZyYW1lQ29udHJvbGxlcjo6b25BZGRTdHJlYW0oaW50IHBlZXJDb25uZWN0aW9uSWQsIGNvbnN0
IFN0cmluZyYgc3RyZWFtTGFiZWwsIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja0xpc3Q+IHRy
YWNrcykKLXsKLSAgICBBU1NFUlQoIXN0cmVhbUxhYmVsLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJU
KG1fY2xpZW50cy5jb250YWlucyhwZWVyQ29ubmVjdGlvbklkKSk7Ci0gICAgQVNTRVJUKG1fY2xp
ZW50cy5nZXQocGVlckNvbm5lY3Rpb25JZCktPmlzUGVlckNvbm5lY3Rpb24oKSk7Ci0KLSAgICBS
ZWZQdHI8TWVkaWFTdHJlYW0+IHN0cmVhbSA9IE1lZGlhU3RyZWFtOjpjcmVhdGUodGhpcywgc3Ry
ZWFtTGFiZWwsIHRyYWNrcyk7Ci0KLSAgICBSZWZQdHI8UGVlckNvbm5lY3Rpb24+IHBlZXJDb25u
ZWN0aW9uID0gc3RhdGljX2Nhc3Q8UGVlckNvbm5lY3Rpb24qPihtX2NsaWVudHMuZ2V0KHBlZXJD
b25uZWN0aW9uSWQpKTsKLSAgICBwZWVyQ29ubmVjdGlvbi0+c3RyZWFtQWRkZWQoc3RyZWFtLnJl
bGVhc2UoKSk7Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6Om9uUmVtb3Zl
U3RyZWFtKGludCBwZWVyQ29ubmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIHN0cmVhbUxhYmVsKQot
ewotICAgIEFTU0VSVCghc3RyZWFtTGFiZWwuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQobV9jbGll
bnRzLmNvbnRhaW5zKHBlZXJDb25uZWN0aW9uSWQpKTsKLSAgICBBU1NFUlQobV9jbGllbnRzLmdl
dChwZWVyQ29ubmVjdGlvbklkKS0+aXNQZWVyQ29ubmVjdGlvbigpKTsKLQotICAgIFJlZlB0cjxQ
ZWVyQ29ubmVjdGlvbj4gcGVlckNvbm5lY3Rpb24gPSBzdGF0aWNfY2FzdDxQZWVyQ29ubmVjdGlv
bio+KG1fY2xpZW50cy5nZXQocGVlckNvbm5lY3Rpb25JZCkpOwotICAgIHBlZXJDb25uZWN0aW9u
LT5zdHJlYW1SZW1vdmVkKHN0cmVhbUxhYmVsKTsKLX0KLQotdm9pZCBNZWRpYVN0cmVhbUZyYW1l
Q29udHJvbGxlcjo6b25TaWduYWxpbmdNZXNzYWdlKGludCBwZWVyQ29ubmVjdGlvbklkLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgQVNTRVJUKG1fY2xpZW50cy5jb250YWlucyhwZWVy
Q29ubmVjdGlvbklkKSk7Ci0gICAgQVNTRVJUKG1fY2xpZW50cy5nZXQocGVlckNvbm5lY3Rpb25J
ZCktPmlzUGVlckNvbm5lY3Rpb24oKSk7Ci0KLSAgICBSZWZQdHI8UGVlckNvbm5lY3Rpb24+IHBl
ZXJDb25uZWN0aW9uID0gc3RhdGljX2Nhc3Q8UGVlckNvbm5lY3Rpb24qPihtX2NsaWVudHMuZ2V0
KHBlZXJDb25uZWN0aW9uSWQpKTsKLSAgICBwZWVyQ29ubmVjdGlvbi0+b25TaWduYWxpbmdNZXNz
YWdlKG1lc3NhZ2UpOwotfQotCi12b2lkIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyOjpvbk5l
Z290aWF0aW9uU3RhcnRlZChpbnQgcGVlckNvbm5lY3Rpb25JZCkKLXsKLSAgICAvLyBGSVhNRTog
QXNzZXJ0IG9yIG5vdD8KLSAgICBBU1NFUlQobV9jbGllbnRzLmNvbnRhaW5zKHBlZXJDb25uZWN0
aW9uSWQpKTsKLSAgICBBU1NFUlQobV9jbGllbnRzLmdldChwZWVyQ29ubmVjdGlvbklkKS0+aXNQ
ZWVyQ29ubmVjdGlvbigpKTsKLQotICAgIFJlZlB0cjxQZWVyQ29ubmVjdGlvbj4gcGVlckNvbm5l
Y3Rpb24gPSBzdGF0aWNfY2FzdDxQZWVyQ29ubmVjdGlvbio+KG1fY2xpZW50cy5nZXQocGVlckNv
bm5lY3Rpb25JZCkpOwotCi0gICAgcGVlckNvbm5lY3Rpb24tPm9uTmVnb3RpYXRpb25TdGFydGVk
KCk7Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXI6Om9uTmVnb3RpYXRpb25E
b25lKGludCBwZWVyQ29ubmVjdGlvbklkKQotewotICAgIC8vIEZJWE1FOiBBc3NlcnQgb3Igbm90
PwotICAgIEFTU0VSVChtX2NsaWVudHMuY29udGFpbnMocGVlckNvbm5lY3Rpb25JZCkpOwotICAg
IEFTU0VSVChtX2NsaWVudHMuZ2V0KHBlZXJDb25uZWN0aW9uSWQpLT5pc1BlZXJDb25uZWN0aW9u
KCkpOwotCi0gICAgUmVmUHRyPFBlZXJDb25uZWN0aW9uPiBwZWVyQ29ubmVjdGlvbiA9IHN0YXRp
Y19jYXN0PFBlZXJDb25uZWN0aW9uKj4obV9jbGllbnRzLmdldChwZWVyQ29ubmVjdGlvbklkKSk7
Ci0KLSAgICBwZWVyQ29ubmVjdGlvbi0+b25OZWdvdGlhdGlvbkRvbmUoKTsKLX0KLQogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL01lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyLmgJ
KHJldmlzaW9uIDk3MzAxKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9NZWRpYVN0cmVhbUZyYW1l
Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw2IEBAIGNsYXNzIE1lZGlh
U3RyZWFtVHJhY2tMaXN0OwogY2xhc3MgTmF2aWdhdG9yVXNlck1lZGlhRXJyb3JDYWxsYmFjazsK
IGNsYXNzIE5hdmlnYXRvclVzZXJNZWRpYVN1Y2Nlc3NDYWxsYmFjazsKIGNsYXNzIFBhZ2U7Ci1j
bGFzcyBQZWVyQ29ubmVjdGlvbjsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiBjbGFz
cyBTZWN1cml0eU9yaWdpbjsKIGNsYXNzIFNpZ25hbGluZ0NhbGxiYWNrOwpAQCAtNzEsNyArNzAs
NiBAQCBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc01lZGlhU3RyZWFtKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzTG9jYWxNZWRpYVN0cmVh
bSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0dlbmVy
aWNDbGllbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgICAgICB2aXJ0dWFsIGJvb2wg
aXNQZWVyQ29ubmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICAgICAgLy8g
Q2FsbGVkIHdoZW4gdGhlIGZyYW1lIGNvbnRyb2xsZXIgaXMgYmVpbmcgZGlzY29ubmVjdGVkIHRv
IHRoZSBNZWRpYVN0cmVhbUNsaWVudCBlbWJlZGRlci4KICAgICAgICAgLy8gQ2xpZW50cyBzaG91
bGQgb3ZlcnJpZGUgdGhpcyB0byBzZW5kIGFueSByZXF1aXJlZCBzaHV0ZG93biBtZXNzYWdlcy4K
QEAgLTE0MCwxMyArMTM4LDYgQEAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIHZvaWQgdW5yZWdp
c3RlcigpIHsgdW5yZWdpc3RlckNsaWVudCh0aGlzKTsgfQogICAgIH07CiAKLSAgICBjbGFzcyBQ
ZWVyQ29ubmVjdGlvbkNsaWVudCA6IHB1YmxpYyBHZW5lcmljQ2xpZW50IHsKLSAgICBwdWJsaWM6
Ci0gICAgICAgIFBlZXJDb25uZWN0aW9uQ2xpZW50KE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVy
KiBmcmFtZUNvbnRyb2xsZXIsIGludCBpZCkgOiBHZW5lcmljQ2xpZW50KGZyYW1lQ29udHJvbGxl
ciwgaWQpIHsgfQotICAgICAgICB2aXJ0dWFsIH5QZWVyQ29ubmVjdGlvbkNsaWVudCgpIHsgfQot
ICAgICAgICB2aXJ0dWFsIGJvb2wgaXNQZWVyQ29ubmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KLSAgICB9OwotCiAgICAgTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIoRnJhbWUqKTsK
ICAgICB2aXJ0dWFsIH5NZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlcigpOwogCkBAIC0xNjMsMjgg
KzE1NCwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdG9wR2VuZXJhdGVkU3RyZWFtKGNvbnN0IFN0
cmluZyYgc3RyZWFtTGFiZWwpOwogICAgIHZvaWQgc2V0TWVkaWFTdHJlYW1UcmFja0VuYWJsZWQo
Y29uc3QgU3RyaW5nJiB0cmFja0lkLCBib29sIGVuYWJsZWQpOwogCi0gICAgUGFzc1JlZlB0cjxQ
ZWVyQ29ubmVjdGlvbj4gY3JlYXRlUGVlckNvbm5lY3Rpb24oY29uc3QgU3RyaW5nJiBjb25maWd1
cmF0aW9uLCBQYXNzUmVmUHRyPFNpZ25hbGluZ0NhbGxiYWNrPik7Ci0gICAgdm9pZCBuZXdQZWVy
Q29ubmVjdGlvbihpbnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBjb25maWd1cmF0
aW9uKTsKLSAgICB2b2lkIHN0YXJ0TmVnb3RpYXRpb24oaW50IHBlZXJDb25uZWN0aW9uSWQpOwot
ICAgIHZvaWQgcHJvY2Vzc1NpZ25hbGluZ01lc3NhZ2UoaW50IHBlZXJDb25uZWN0aW9uSWQsIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0gICAgdm9pZCBtZXNzYWdlKGludCBwZWVyQ29ubmVjdGlv
bklkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwotICAgIHZvaWQgYWRkU3RyZWFtKGludCBwZWVy
Q29ubmVjdGlvbklkLCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPik7Ci0gICAgdm9pZCByZW1vdmVT
dHJlYW0oaW50IHBlZXJDb25uZWN0aW9uSWQsIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+KTsKLSAg
ICB2b2lkIGNsb3NlUGVlckNvbm5lY3Rpb24oaW50IHBlZXJDb25uZWN0aW9uSWQpOwotCiAgICAg
Ly8gLS0tIENhbGxzIGNvbWluZyBiYWNrIGZyb20gdGhlIGNvbnRyb2xsZXIuIC0tLSAvLwogCiAg
ICAgdm9pZCBzdHJlYW1HZW5lcmF0ZWQoaW50IHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBzdHJl
YW1MYWJlbCwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrTGlzdD4gdHJhY2tzKTsKICAgICB2
b2lkIHN0cmVhbUdlbmVyYXRpb25GYWlsZWQoaW50IHJlcXVlc3RJZCwgTmF2aWdhdG9yVXNlck1l
ZGlhRXJyb3I6OkVycm9yQ29kZSk7CiAgICAgdm9pZCBzdHJlYW1GYWlsZWQoY29uc3QgU3RyaW5n
JiBzdHJlYW1MYWJlbCk7CiAKLSAgICB2b2lkIG9uU2lnbmFsaW5nTWVzc2FnZShpbnQgcGVlckNv
bm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLSAgICB2b2lkIG9uTWVzc2FnZShp
bnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLSAgICB2b2lkIG9u
QWRkU3RyZWFtKGludCBwZWVyQ29ubmVjdGlvbklkLCBjb25zdCBTdHJpbmcmIHN0cmVhbUxhYmVs
LCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tMaXN0Pik7Ci0gICAgdm9pZCBvblJlbW92ZVN0
cmVhbShpbnQgcGVlckNvbm5lY3Rpb25JZCwgY29uc3QgU3RyaW5nJiBzdHJlYW1MYWJlbCk7Ci0g
ICAgdm9pZCBvbk5lZ290aWF0aW9uU3RhcnRlZChpbnQgcGVlckNvbm5lY3Rpb25JZCk7Ci0gICAg
dm9pZCBvbk5lZ290aWF0aW9uRG9uZShpbnQgcGVlckNvbm5lY3Rpb25JZCk7Ci0KIHByaXZhdGU6
CiAgICAgY2xhc3MgUmVxdWVzdDsKICAgICBjbGFzcyBHZW5lcmF0ZVN0cmVhbVJlcXVlc3Q7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>