<?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>95057</bug_id>
          
          <creation_ts>2012-08-27 01:20:05 -0700</creation_ts>
          <short_desc>[chromium] Allow impl-thread deletion of only some resources</short_desc>
          <delta_ts>2012-09-14 15:24:09 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>96463</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Christopher Cameron">ccameron</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>danakj</cc>
    
    <cc>epenner</cc>
    
    <cc>jamesr</cc>
    
    <cc>levin+threading</cc>
    
    <cc>nduca</cc>
    
    <cc>piman</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>705031</commentid>
    <comment_count>0</comment_count>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-08-27 01:20:05 -0700</bug_when>
    <thetext>[chromium] Allow impl-thread deletion of only some resources</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705052</commentid>
    <comment_count>1</comment_count>
      <attachid>160669</attachid>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-08-27 01:39:44 -0700</bug_when>
    <thetext>Created attachment 160669
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705055</commentid>
    <comment_count>2</comment_count>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-08-27 01:41:42 -0700</bug_when>
    <thetext>Towards allowing the impl thread to delete just some resources (as opposed to deleting all resources).

Do impl-thread deletion through CCPrioritizedTextureManager instead of CCResourceProvider. In subsequent changes the impl thread will be able to set a threshold for what to delete). Add a mutex to protect the state shared between the two threads. Add a set of textures that have been deleted by the impl thread, but have not had their related structures clear by the main thread yet.

Allow multiple in-flight texture purges. In CCThreadProxy, make the acknowledgement of texture deletion be an integer counter instead of a bool, because we may have multiple in-flight purges. Remove many instances where texture purges were avoided when there was already an outstanding purge.

Add the ability to clear only the references to deleted textures from the texture upload queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705332</commentid>
    <comment_count>3</comment_count>
      <attachid>160669</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-08-27 09:45:36 -0700</bug_when>
    <thetext>Comment on attachment 160669
Patch

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

&gt; Source/WebKit/chromium/ChangeLog:13
&gt; +        Remove the test releaseContentsTextureShouldTriggerCommit because it
&gt; +        is no longer valid -- a releaseContentsTexture will only trigger a
&gt; +        commit if some resources are deleted.

I do wonder about testing for this. What about testing these two things? Commit happens on delete, doesn&apos;t happen on no delete.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705353</commentid>
    <comment_count>4</comment_count>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-08-27 10:07:35 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 160669 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=160669&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/chromium/ChangeLog:13
&gt; &gt; +        Remove the test releaseContentsTextureShouldTriggerCommit because it
&gt; &gt; +        is no longer valid -- a releaseContentsTexture will only trigger a
&gt; &gt; +        commit if some resources are deleted.
&gt; 
&gt; I do wonder about testing for this. What about testing these two things? Commit happens on delete, doesn&apos;t happen on no delete.

The commit logic has moved out of CCLayerTreeHostImpl and moved into CCProxy.  There does exist a test, CCLayerTreeHostTestEvictTextures, which checks the commits that come in and pairs them with evictions.

Now that you mention it though, I did not include the update in CCSingleThreadProxy (so I wonder how that passed).  I&apos;ll look into making a test that fails if the commit doesn&apos;t happen (or updating the CCLayerTreeHostTestEvictTextures test to fail appropriately when the commit doesn&apos;t happen).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705444</commentid>
    <comment_count>5</comment_count>
      <attachid>160669</attachid>
    <who name="Antoine Labour">piman</who>
    <bug_when>2012-08-27 11:34:44 -0700</bug_when>
    <thetext>Comment on attachment 160669
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTexture.cpp:120
&gt; +        return m_backing-&gt;resourceDeleted();

Isn&apos;t this racy if the m_backingsMutex in the manager isn&apos;t held?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:230
&gt; +            resourceProvider-&gt;deleteResource((*it)-&gt;id());

What if resourceProvider is NULL? Or, if the semantics have changed to not allow NULL anymore, mind adding an assert to make that clear?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:271
&gt; +                resourcesToDelete.append((*it)-&gt;id());

It would be good to reset the resource ID here, making it harder to accidentally use a stale resource id.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:352
&gt; +    ASSERT(backing-&gt;resourceDeleted() || !backing-&gt;owner() || !backing-&gt;owner()-&gt;isAbovePriorityCutoff());

since backing-&gt;resourceDeleted() has to be true (since you&apos;re asserting below), !backing-&gt;owner() || !backing-&gt;owner()-&gt;isAbovePriorityCutoff() is never tested. Should it be tested separately? Is it not true anymore?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.h:143
&gt; +    BackingSet m_backingsFreedByImplThread;

TBH a vector is just as good, and cheaper memory and time complexity-wise. You&apos;ll never add the same backing to this set twice, correct?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.h:151
&gt; +    Mutex m_backingsMutex;

I think we should be clear what is protected by this mutex and what is not. It looks to me that what is actually protected by the mutex is:
- m_backings
- m_backingsFreedByImplThread
- the contents of each Backing in m_backings (in particular the m_resourceDeleted flag and the resource ID).
(basically anything that is accessed by deleteBackingsResourcesOnImplThread while the mutex is held).

Among others, what is not protected by this is:
- m_textures
- texture-&gt;backing() for each texture in m_texture.
It&apos;s important to note, so that we don&apos;t try to take the mutex in various operations and expect to be safe - we need the higher level notion of blocked main thread to ensure safety.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCTextureUpdateQueue.cpp:69
&gt; +        if (!upload.texture-&gt;backingWasAsynchronouslyDeleted())

Isn&apos;t this racy if the m_backingsMutex isn&apos;t held?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705522</commentid>
    <comment_count>6</comment_count>
      <attachid>160669</attachid>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-08-27 12:33:08 -0700</bug_when>
    <thetext>Comment on attachment 160669
Patch

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

Thanks!  I&apos;m going to try some ways to make the logic if &quot;where is the mutex necessary&quot; less ambiguous and I&apos;ll re-upload when I think I have a decent scheme.  LMK if you have any thoughts on the ideas I put out.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTexture.cpp:120
&gt;&gt; +        return m_backing-&gt;resourceDeleted();
&gt; 
&gt; Isn&apos;t this racy if the m_backingsMutex in the manager isn&apos;t held?

This can only be called on the impl thread while the main thread is inactive.  I need to add an assertion of this.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:230
&gt;&gt; +            resourceProvider-&gt;deleteResource((*it)-&gt;id());
&gt; 
&gt; What if resourceProvider is NULL? Or, if the semantics have changed to not allow NULL anymore, mind adding an assert to make that clear?

The semantics have changed to disallow NULL.  I&apos;ll add an assert (and in the other places that it comes in as an argument).

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:271
&gt;&gt; +                resourcesToDelete.append((*it)-&gt;id());
&gt; 
&gt; It would be good to reset the resource ID here, making it harder to accidentally use a stale resource id.

Good idea.  I moved the deletion tracking to the CCTexture structure.  As a (not absolutely necessary) consequence of this change, I delete the resource via the resourceProvider while the m_backingsMutex is held (we already call into the resourceProvider while the mutex is held while creating resources, so no further harm is done).

I will also need to add an assert to the id() accessor to make sure that it isn&apos;t called on the main thread.  Because of all of this instrumentation, it may be best to use composition of a CCTexture instead of inheritance.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:352
&gt;&gt; +    ASSERT(backing-&gt;resourceDeleted() || !backing-&gt;owner() || !backing-&gt;owner()-&gt;isAbovePriorityCutoff());
&gt; 
&gt; since backing-&gt;resourceDeleted() has to be true (since you&apos;re asserting below), !backing-&gt;owner() || !backing-&gt;owner()-&gt;isAbovePriorityCutoff() is never tested. Should it be tested separately? Is it not true anymore?

Good point.  It is true only when destroyBacking() is called through reduceMemory.  I&apos;ve re-added resourceProvider as an argument and made the logic more clear.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.h:143
&gt;&gt; +    BackingSet m_backingsFreedByImplThread;
&gt; 
&gt; TBH a vector is just as good, and cheaper memory and time complexity-wise. You&apos;ll never add the same backing to this set twice, correct?

I used a set because of the following sequence of calls
1. deleteBackingsResourcesOnImplThread (adds a Backing* to the set)
2. reduceMemory (deletes that Backing*)
3. destroyBackingsFreedByImplThread (needs to be sure that it doesn&apos;t still have a pointer to that Backing*)
I need to be able to clear out some entries from the set in step 2.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.h:151
&gt;&gt; +    Mutex m_backingsMutex;
&gt; 
&gt; I think we should be clear what is protected by this mutex and what is not. It looks to me that what is actually protected by the mutex is:
&gt; - m_backings
&gt; - m_backingsFreedByImplThread
&gt; - the contents of each Backing in m_backings (in particular the m_resourceDeleted flag and the resource ID).
&gt; (basically anything that is accessed by deleteBackingsResourcesOnImplThread while the mutex is held).
&gt; 
&gt; Among others, what is not protected by this is:
&gt; - m_textures
&gt; - texture-&gt;backing() for each texture in m_texture.
&gt; It&apos;s important to note, so that we don&apos;t try to take the mutex in various operations and expect to be safe - we need the higher level notion of blocked main thread to ensure safety.

I&apos;ve added the m_resourceDeleted flag and the resource ID to the comment, and clarified the comment.  I&apos;ll add a way to assert that the main thread is known to be blocked during an operation.

It may be that I should add a separate member class for the state that needs to be accessed through the mutex -- I&apos;ll see if that ends up feeling more reasonable.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCTextureUpdateQueue.cpp:69
&gt;&gt; +        if (!upload.texture-&gt;backingWasAsynchronouslyDeleted())
&gt; 
&gt; Isn&apos;t this racy if the m_backingsMutex isn&apos;t held?

This can only be called on the impl thread while the main thread is inactive.  I need to add an assertion of this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705524</commentid>
    <comment_count>7</comment_count>
      <attachid>160669</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-08-27 12:35:30 -0700</bug_when>
    <thetext>Comment on attachment 160669
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:271
&gt;&gt;&gt; +                resourcesToDelete.append((*it)-&gt;id());
&gt;&gt; 
&gt;&gt; It would be good to reset the resource ID here, making it harder to accidentally use a stale resource id.
&gt; 
&gt; Good idea.  I moved the deletion tracking to the CCTexture structure.  As a (not absolutely necessary) consequence of this change, I delete the resource via the resourceProvider while the m_backingsMutex is held (we already call into the resourceProvider while the mutex is held while creating resources, so no further harm is done).
&gt; 
&gt; I will also need to add an assert to the id() accessor to make sure that it isn&apos;t called on the main thread.  Because of all of this instrumentation, it may be best to use composition of a CCTexture instead of inheritance.

I&apos;m not sure about moving things into CCTexture. The CCTexture structure should be agnostic about where it is used, and not tied to the texture manager. It&apos;s meant to be used in all use cases of textures, not just contents.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705548</commentid>
    <comment_count>8</comment_count>
      <attachid>160669</attachid>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-08-27 12:54:52 -0700</bug_when>
    <thetext>Comment on attachment 160669
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:271
&gt;&gt;&gt;&gt; +                resourcesToDelete.append((*it)-&gt;id());
&gt;&gt;&gt; 
&gt;&gt;&gt; It would be good to reset the resource ID here, making it harder to accidentally use a stale resource id.
&gt;&gt; 
&gt;&gt; Good idea.  I moved the deletion tracking to the CCTexture structure.  As a (not absolutely necessary) consequence of this change, I delete the resource via the resourceProvider while the m_backingsMutex is held (we already call into the resourceProvider while the mutex is held while creating resources, so no further harm is done).
&gt;&gt; 
&gt;&gt; I will also need to add an assert to the id() accessor to make sure that it isn&apos;t called on the main thread.  Because of all of this instrumentation, it may be best to use composition of a CCTexture instead of inheritance.
&gt; 
&gt; I&apos;m not sure about moving things into CCTexture. The CCTexture structure should be agnostic about where it is used, and not tied to the texture manager. It&apos;s meant to be used in all use cases of textures, not just contents.

Yeah, it doesn&apos;t feel right.  I&apos;ll change it to composition to control access to the interface.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>706811</commentid>
    <comment_count>9</comment_count>
      <attachid>161077</attachid>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-08-28 15:55:07 -0700</bug_when>
    <thetext>Created attachment 161077
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>706817</commentid>
    <comment_count>10</comment_count>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-08-28 15:59:47 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Created an attachment (id=161077) [details]
&gt; Patch

I&apos;ve updated the patch.  The big change is that I moved all PTM state that can be accessed by multiple threads concurrently into a smaller sub-class.  I&apos;m much happier with this scheme.

This sub-class will get a bit bigger when I give the main thread a way to inform it of the backings&apos; priorities (or at least orderings) so that the impl thread can make informed asynchronous eviction decisions.

I also added roughly twelve thousand asserts of what-thread-can-call-what in the PTM, and then created big diffs in some tests to obey these requirements.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>707742</commentid>
    <comment_count>11</comment_count>
      <attachid>161077</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-08-29 12:33:46 -0700</bug_when>
    <thetext>Comment on attachment 161077
Patch

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

I like this patch way better than the other approach in bug 94751.  Thanks for taking the time to add all the asserts.  It makes reading the code and understanding where functions can be called a lot easier.  I&apos;ve got a bunch of small comments, but the patch on the whole looks good to me.

Can you add some new unit tests for the update queue purging logic? I think that&apos;s probably the biggest untested piece of this patch.

&gt; Source/WebCore/ChangeLog:17
&gt; +        structures clear by the main thread yet. Add helper functions to delete

clear =&gt; cleared

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:206
&gt; +        return m_contentsTextureManager-&gt;reduceMemoryOnImplThreadAsync(resourceProvider);
&gt; +    return false;

Looks like you didn&apos;t mean to have this here.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTexture.cpp:153
&gt; +    ASSERT(CCProxy::isImplThread());

Also assert not deleted?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:328
&gt; +    m_sharedState.addBackingOnImplThread(backing);

I find it a little strange that createBacking manages the shared state list, but destroyBacking doesn&apos;t and assumes you&apos;ve called it beforehand.  Is it possible to make them more symmetrical, possibly by moving the m_sharedState stuff into destroyBacking?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:-314
&gt; -    if (resourceProvider)
&gt; -        resourceProvider-&gt;deleteResource(backing-&gt;id());

Can you assert on m_deleted here?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.h:150
&gt; +    // This state that can be concurrently accessed by the main and impl thread,
&gt; +    // and needs protection by a mutex.
&gt; +    class SharedState {

Thanks for this.  It makes the shared access pattern so much clearer.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:604
&gt; +        // doesn&apos;t know of. Rquest a recommit, which will inform the main thread

typo

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:663
&gt; +        // The tree now references no purged textures. Allow it to draw again.
&gt;          m_layerTreeHostImpl-&gt;resetContentsTexturesPurged();

I hope we can make this less restrictive in the future.  When we&apos;re clearing all the textures like we do in this patch, it makes sense to disallow drawing.  In the future, maybe we can be more smart and check if any purged / unavailable resources are needed to put up a frame.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.h:196
&gt; +    // Counter incremented every time the impl thread deletes textures, sent to the
&gt; +    // main thread with each commit.
&gt; +    int m_contentsTexturesPurgeCount;
&gt; +
&gt; +    // Value that the main thread sends as an acknowledgement to the impl thread.
&gt; +    // If this does not equal m_contentsTexturesPurgeCount then the impl layer tree
&gt; +    // may reference textures that have been purged.
&gt; +    int m_contentsTexturesPurgeAck;

This is elegant.

&gt; Source/WebKit/chromium/tests/TiledLayerChromiumTest.cpp:174
&gt; +class TiledLayerChromiumTestOnImplThread : public TiledLayerChromiumTest {
&gt; +public:
&gt; +    TiledLayerChromiumTestOnImplThread() { }
&gt; +    virtual ~TiledLayerChromiumTestOnImplThread() { }
&gt; +
&gt; +private:
&gt; +     DebugScopedSetImplThreadAndMainThreadBlocked m_implThreadAndMainThreadBlocked;
&gt; +};

This is a little weird to my eyes, mostly just because I think of TiledLayerChromium as a &quot;main thread&quot; class that only gets used on the compositor thread during tree sync/pushPropertiesTo.  I think only the updateAndPush part of these tests (that calls updateTextures and pushPropertiesTo) should need DebugScopedSetImplThreadAndMainThreadBlocked and not the whole test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708092</commentid>
    <comment_count>12</comment_count>
      <attachid>161077</attachid>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-08-29 17:25:55 -0700</bug_when>
    <thetext>Comment on attachment 161077
Patch

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

The best test against race conditions (like the existing one that I found) is to insert a synchronous-impl-thread-evict-textures call between every line of CCThreadProxy::beginFrame (say, on frame 10 trigger the one after line 1, on frame 20 trigger the one after line 2, etc).  I&apos;d like to add a test to this effect in a follow-on CL (it will be necessarily messy in order to be effective, I suspect).

&gt;&gt; Source/WebCore/ChangeLog:17
&gt;&gt; +        structures clear by the main thread yet. Add helper functions to delete
&gt; 
&gt; clear =&gt; cleared

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:206
&gt;&gt; +    return false;
&gt; 
&gt; Looks like you didn&apos;t mean to have this here.

Ah, I meant to have a &quot;if (m_rendererInitialized)&quot; before that.  Fixed.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTexture.cpp:153
&gt;&gt; +    ASSERT(CCProxy::isImplThread());
&gt; 
&gt; Also assert not deleted?

This isn&apos;t true with this change -- the impl thread&apos;s tree can have invalid resource IDs in it, so its canDraw() returns false until it knows its most recent commit has only-valid textures in it.

I plan to change this in a follow-up change in which I allow the frame to be drawn immediately after some of its textures are discarded (only if we can be sure that the textures discarded are sufficiently offscreen).

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:328
&gt;&gt; +    m_sharedState.addBackingOnImplThread(backing);
&gt; 
&gt; I find it a little strange that createBacking manages the shared state list, but destroyBacking doesn&apos;t and assumes you&apos;ve called it beforehand.  Is it possible to make them more symmetrical, possibly by moving the m_sharedState stuff into destroyBacking?

So the messy part of this is that backings can be destroyed in two ways -- either &quot;resource and backing at the same time&quot; or &quot;just the backing because the resource was destroyed earlier&quot;.

I&apos;ve made this symmetrical, but by moving the m_sharedState call out of createBacking and to the caller (like destroy).

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:-314
&gt;&gt; -        resourceProvider-&gt;deleteResource(backing-&gt;id());
&gt; 
&gt; Can you assert on m_deleted here?

Done.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.h:150
&gt;&gt; +    class SharedState {
&gt; 
&gt; Thanks for this.  It makes the shared access pattern so much clearer.

Thanks!  The structure will probably get a bit bigger in subsequent changes, as I add priority information to the impl thread.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:357
&gt; +        m_contentsTexturesPurgeCount += 1;

I found a latent bug that needed a fix here.

If we had already created m_currentTextureUpdateControllerOnImplThread, it may contain references to now-invalid textures.  We need to clear its references to invalid textures here.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:604
&gt;&gt; +        // doesn&apos;t know of. Rquest a recommit, which will inform the main thread
&gt; 
&gt; typo

Fixed.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:663
&gt;          m_layerTreeHostImpl-&gt;resetContentsTexturesPurged();

Yup, that&apos;s the plan!

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.h:196
&gt;&gt; +    int m_contentsTexturesPurgeAck;
&gt; 
&gt; This is elegant.

Thank you!

&gt;&gt; Source/WebKit/chromium/tests/TiledLayerChromiumTest.cpp:174
&gt;&gt; +};
&gt; 
&gt; This is a little weird to my eyes, mostly just because I think of TiledLayerChromium as a &quot;main thread&quot; class that only gets used on the compositor thread during tree sync/pushPropertiesTo.  I think only the updateAndPush part of these tests (that calls updateTextures and pushPropertiesTo) should need DebugScopedSetImplThreadAndMainThreadBlocked and not the whole test.

You&apos;re right -- treating them as an impl-thread test was getting to be a mess.

I created wrappers for the the impl class and impl functions and then did a lot of replace-alls on the file.  The result is simpler than the original.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708108</commentid>
    <comment_count>13</comment_count>
      <attachid>161370</attachid>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-08-29 17:36:38 -0700</bug_when>
    <thetext>Created attachment 161370
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708112</commentid>
    <comment_count>14</comment_count>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-08-29 17:40:36 -0700</bug_when>
    <thetext>Sorry, I didn&apos;t add the texture queue unit test -- ignore that patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708145</commentid>
    <comment_count>15</comment_count>
      <attachid>161379</attachid>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-08-29 18:12:07 -0700</bug_when>
    <thetext>Created attachment 161379
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708147</commentid>
    <comment_count>16</comment_count>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-08-29 18:12:39 -0700</bug_when>
    <thetext>New patch uploaded which includes new unit test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709230</commentid>
    <comment_count>17</comment_count>
      <attachid>161601</attachid>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-08-30 18:44:28 -0700</bug_when>
    <thetext>Created attachment 161601
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709308</commentid>
    <comment_count>18</comment_count>
      <attachid>161601</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-08-30 21:58:58 -0700</bug_when>
    <thetext>Comment on attachment 161601
Patch

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

I&apos;m a little unclear about the shared state and ack count stuff.  Is the idea that we want the main thread to observe the side effects of purges that happen after we generate the beginFrame message, or that we want to avoid copying the list of deleted resource IDs?

&gt; Source/WebCore/ChangeLog:20
&gt; +        Allow multiple in-flight texture purges. In CCThreadProxy, make the

What does &quot;in-flight&quot; mean?

&gt; Source/WebCore/ChangeLog:36
&gt; +        Fix a dozen places where CCThreadProxy and CCSingleThreadProxy hold
&gt; +        the main thread blocked, but don&apos;t notify the debug structures of
&gt; +        this.

This is great, I&apos;m really glad you are doing this.  Please break these changes out into a separate standalone patch.  This will be a lot easier to review + land quickly on its own and make this patch smaller+simpler to boot.  As is, this patch is a little too large.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:413
&gt; +    MutexLocker lock(m_mutex);
&gt; +    for (BackingSet::iterator it = m_unevictedBackings.begin(); it != m_unevictedBackings.end(); ++it) {

Any time you have a mutex guarding some shared data and you need to access it, your goal should always be to get the lock, do whatever accesses/mutations you need to do to the shared data, then release the lock as quickly as possible.  In particular, you wanna do as little as possible under the lock that doesn&apos;t need to be protected by the lock.  This minimizes the chance that you&apos;ll get unnecessary lock contention and makes it much easier to reason about potential deadlocks.

In this case, it appears that SharedState::m_mutex protects only m_evictedBackings.  Could you iterate through m_unevictedBackings and do the deleteResource() calls outside the lock, then take the lock and append m_unevictedBackings to m_evictedBackings, then release the lock and clear m_unevictedBackings and return?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:415
&gt; +        (*it)-&gt;deleteResource(resourceProvider);

I&apos;m particularly worried about making this call with the mutex held - this makes a GL call, right? That could end up blocking on the GPU process for a potentially long time.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.h:85
&gt; +    bool reduceMemoryOnImplThreadAsync(CCResourceProvider*);

What does the &quot;async&quot; part of this mean? does it perform some of its work in a non-blocking fashion? after this function returns, is the memory reduced or not?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.h:91
&gt; +    // Delete all textures and frm the impl thread (at thread exit and

typo &quot;frm&quot;

whatcha mean by &quot;thread exit&quot; ? the thread outlives all compositor data structures

&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.h:106
&gt; +

spurious newline

&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.h:174
&gt; +        BackingSet m_unevictedBackings;

I can&apos;t find any evidence of this being protected from concurrent access by the mutex - is it really shared state?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:368
&gt; +        m_contentsTexturesPurgeCount += 1;

++

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:566
&gt; +    m_layerTreeHost-&gt;destroyContentsTexturesEvictedByImplThread();

this destroys all textures that have been evicted at the time this call is made....

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:595
&gt; +        CCProxy::implThread()-&gt;postTask(createCCThreadTask(this, &amp;CCThreadProxy::beginFrameCompleteOnImplThread, &amp;completion, queue.release(), request-&gt;contentsTexturesPurgeAck));

...but this acks the # on the request. there might have been any number of textures evicted after the request was posted to the main thread but before we hit the destroyContents...() call.  What does having the ack # tell us that we don&apos;t already know - i.e. that we know the main thread&apos;s beginFrame ran after we sent the beginFrame message to the main thread?  We never have more than 1 pending beginFrame so that is unambiguous

&gt; Source/WebKit/chromium/tests/CCTextureUpdateControllerTest.cpp:703
&gt; +// ASYNC DELETION TESTS

This comment doesn&apos;t add much - the next line says that it&apos;s a texture deletion test just as well

&gt; Source/WebKit/chromium/tests/TiledLayerChromiumTest.cpp:84
&gt; +        {

no need for this extra scope</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709333</commentid>
    <comment_count>19</comment_count>
      <attachid>161601</attachid>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-08-30 23:45:57 -0700</bug_when>
    <thetext>Comment on attachment 161601
Patch

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

Thanks for taking a look at this!  

Yes, the SharedState is not the best name for the state -- it should denote StateThatCanBeMutatedByTheImplThreadWhileTheMainThreadIsNotBlocked (in fewer characters).

The ack # is a mechanism for making sure that the impl thread&apos;s layer tree doesn&apos;t contain any references to deleted textures.  The use of an ack # is, as you said, to avoid passing a list of the deleted resources between the two threads (and dealing with the lifetime management issues that arise there (resource IDs can be recycled, etc).  In a future (farther-future) patch, I hope to create a mechanism fir the impl thread&apos;s tree to prune out evicted textures so that it can be drawn without requiring a re-commit (but that&apos;s a substantial change, and it, too, will need an ack to be able to say &quot;visible stuff was evicted from this tree, don&apos;t draw until a commit brings it back&quot;).

&gt;&gt; Source/WebCore/ChangeLog:20
&gt;&gt; +        Allow multiple in-flight texture purges. In CCThreadProxy, make the
&gt; 
&gt; What does &quot;in-flight&quot; mean?

A texture purge is &quot;in-flight&quot; if the main thread has not acknowledged the texture purge at a commit yet (so the impl thread&apos;s tree may still have references to evicted textures).

One of the features is that you can have the impl thread delete some textures, then delete some more, before a commit happens.  Before this change, the impl thread could only delete textures once per commit call (which makes sense if you&apos;re only able to delete all textures).

&gt;&gt; Source/WebCore/ChangeLog:36
&gt;&gt; +        this.
&gt; 
&gt; This is great, I&apos;m really glad you are doing this.  Please break these changes out into a separate standalone patch.  This will be a lot easier to review + land quickly on its own and make this patch smaller+simpler to boot.  As is, this patch is a little too large.

Yes, this is got unreasonably big (it came in from earlier feedback) -- I&apos;ll split out the asserts (and related tests) into a separate patch.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:413
&gt;&gt; +    for (BackingSet::iterator it = m_unevictedBackings.begin(); it != m_unevictedBackings.end(); ++it) {
&gt; 
&gt; Any time you have a mutex guarding some shared data and you need to access it, your goal should always be to get the lock, do whatever accesses/mutations you need to do to the shared data, then release the lock as quickly as possible.  In particular, you wanna do as little as possible under the lock that doesn&apos;t need to be protected by the lock.  This minimizes the chance that you&apos;ll get unnecessary lock contention and makes it much easier to reason about potential deadlocks.
&gt; 
&gt; In this case, it appears that SharedState::m_mutex protects only m_evictedBackings.  Could you iterate through m_unevictedBackings and do the deleteResource() calls outside the lock, then take the lock and append m_unevictedBackings to m_evictedBackings, then release the lock and clear m_unevictedBackings and return?

Good point -- I&apos;d vascillated a bit on whether or not to create a temporary vector of things to evict (and, in fact, in my next patch, which sets a priority cutoff, I did exactly that).  I&apos;ll update this to reduce the scope of the mutex held.

Yes, m_unevictedBackings is not protected by the mutex.  More accurately (than my comment), SharedState is &quot;stuff that can be mutated by the impl thread while the main thread is not blocked&quot; (I also used Async as a shorthand for this in other locations).  I&apos;d like to keep this stuff in a separate structure, but SharedState may not be the right name.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:415
&gt;&gt; +        (*it)-&gt;deleteResource(resourceProvider);
&gt; 
&gt; I&apos;m particularly worried about making this call with the mutex held - this makes a GL call, right? That could end up blocking on the GPU process for a potentially long time.

Good point.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.h:85
&gt;&gt; +    bool reduceMemoryOnImplThreadAsync(CCResourceProvider*);
&gt; 
&gt; What does the &quot;async&quot; part of this mean? does it perform some of its work in a non-blocking fashion? after this function returns, is the memory reduced or not?

This was another shorthand for &quot;can be called by the impl thread while the main thread is not blocked&quot;.  I&apos;d like to denote this property in the function name -- do we have a standard shorthand for this?

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.h:91
&gt;&gt; +    // Delete all textures and frm the impl thread (at thread exit and
&gt; 
&gt; typo &quot;frm&quot;
&gt; 
&gt; whatcha mean by &quot;thread exit&quot; ? the thread outlives all compositor data structures

Oops, &quot;thread exit&quot; is a mentalmangling of layerTreeHostClosedOnImplThread.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.h:106
&gt;&gt; +
&gt; 
&gt; spurious newline

Axed.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.h:174
&gt;&gt; +        BackingSet m_unevictedBackings;
&gt; 
&gt; I can&apos;t find any evidence of this being protected from concurrent access by the mutex - is it really shared state?

True, it&apos;s not -- it&apos;s state that can be messed with by the impl thread while the main thread is running.  I should have a clearer definition (and a better word than &quot;shared&quot;).

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:368
&gt;&gt; +        m_contentsTexturesPurgeCount += 1;
&gt; 
&gt; ++

Will do.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:595
&gt;&gt; +        CCProxy::implThread()-&gt;postTask(createCCThreadTask(this, &amp;CCThreadProxy::beginFrameCompleteOnImplThread, &amp;completion, queue.release(), request-&gt;contentsTexturesPurgeAck));
&gt; 
&gt; ...but this acks the # on the request. there might have been any number of textures evicted after the request was posted to the main thread but before we hit the destroyContents...() call.  What does having the ack # tell us that we don&apos;t already know - i.e. that we know the main thread&apos;s beginFrame ran after we sent the beginFrame message to the main thread?  We never have more than 1 pending beginFrame so that is unambiguous

This is being unnecessarily conservative about what it acknowledges -- it can get a tighter result by getting the purge count to ack from the texture manager in the destroyContentsTexturesEvictedByImplThread call (this is just following vestigial structure).

That said, the ack # is necessary to handle cases where the impl thread purged some textures multiple times.  Consider the case where one purge happens just before the beginFrame, and a second purge happens just after the main thread called destroyContentsTexturesEvictedByImplThread.  We don&apos;t want to let the acknowledgement that our render tree is clear of references to the textures purged in the first purge to obscure the fact that our render tree still has references to textures that were purged in the second purge.

&gt;&gt; Source/WebKit/chromium/tests/CCTextureUpdateControllerTest.cpp:703
&gt;&gt; +// ASYNC DELETION TESTS
&gt; 
&gt; This comment doesn&apos;t add much - the next line says that it&apos;s a texture deletion test just as well

Torched.

&gt;&gt; Source/WebKit/chromium/tests/TiledLayerChromiumTest.cpp:84
&gt;&gt; +        {
&gt; 
&gt; no need for this extra scope

Elimidated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710124</commentid>
    <comment_count>20</comment_count>
      <attachid>161808</attachid>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-08-31 18:51:08 -0700</bug_when>
    <thetext>Created attachment 161808
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710127</commentid>
    <comment_count>21</comment_count>
      <attachid>161809</attachid>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-08-31 19:15:53 -0700</bug_when>
    <thetext>Created attachment 161809
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710128</commentid>
    <comment_count>22</comment_count>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-08-31 19:16:29 -0700</bug_when>
    <thetext>Patch updated, resolved against bug 95596 (which was split off from this bug).

There was some offline discussion about separating CCPrioritizedTextureManager::EvictionState into a stand-alone class.  I&apos;d prefer to keep the classes coupled until we have a clearer picture of the final state of the code (with the associated priority changes and impl-tree pruning).  It may be that we will be able to fold this back into CCPrioritizedTextureManager, or it may be that we&apos;ll separate it into its own proper class -- I think this is the best step to avoid churn.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>711477</commentid>
    <comment_count>23</comment_count>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-09-04 15:06:31 -0700</bug_when>
    <thetext>ptal</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>711532</commentid>
    <comment_count>24</comment_count>
      <attachid>161809</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-09-04 16:09:49 -0700</bug_when>
    <thetext>Comment on attachment 161809
Patch

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

I&apos;m just back from vacation. The other comments seems to address any races/dead-locks
I can think of but I&apos;ll take another pass to see if I can think of anything else.
I&apos;ve added some other general comments for now.

When moved entirely to the the impl-thread, do you anticipate this will
still have value, or is this mainly a hold-over? There might be other threading
issues, but I don&apos;t see this in particular being a problem.

On that note, while I kind of like all the isImplThread() ASSERTs etc., previously
passing the ResourceProvider* was the means of indicating that resources could
allocated/destroyed. This implicitly indicated isImplThread() &amp;&amp; isMainThreadBlocked()
but didn&apos;t enforce it explicitly (so that this class could be used on any thread, and be kept
as a single-threaded data-structure rather than being so coupled to other classes).

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:62
&gt;      virtual void postAnimationEventsToMainThreadOnImplThread(PassOwnPtr&lt;CCAnimationEventsVector&gt;, double wallClockTime) = 0;

I&apos;m really curious as to why we can post an event for animations above but not similarly do so for texture management below. Why can we not post tasks to achieve the end result here rather than resorting to adding a mutex?

I doubt this is the only case where this type of communication will be needed, and I&apos;m hoping that adding a mutex will not become the norm for solving such problems. So I just want to be sure we have considered all other options here.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.h:80
&gt;      void reduceMemory(CCResourceProvider*);

I find the naming confusing here given:
- reduceMemory above must be called on the impl thread (with main thread blocked) since it takes CCResourceProvider*.
- reduceMemoryOnImplThread below doesn&apos;t reduce memory to the limit, but rather clears all memory.

I would recommend:
- renaming to clearAllMemoryOnImplThread
- reserve &quot;onImplThread&quot; only for functions that could occur when the main thread is not blocked (if the main thread is blocked it is more like &quot;onBothThreads&quot; or &quot;duringCommit&quot;).

&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.h:160
&gt; +        void addBackingOnImplThread(CCPrioritizedTexture::Backing*);

See my above comment about &quot;onImplThread&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>711625</commentid>
    <comment_count>25</comment_count>
      <attachid>161809</attachid>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-09-04 18:14:09 -0700</bug_when>
    <thetext>Comment on attachment 161809
Patch

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

Thanks!

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:62
&gt;      virtual void postAnimationEventsToMainThreadOnImplThread(PassOwnPtr&lt;CCAnimationEventsVector&gt;, double wallClockTime) = 0;

Yes -- we could communicate the list of destroyed backings to the main thread at commit time -- we would call getAndClearEvictedBackings on the impl thread and communicate them via scheduledActionBeginFrame.  I had originally started with this scheme, and then abandoned it because the implementation was getting complicated -- copying the set of backings to and from the main thread was involved.

In the intervening iteration, it looks like it&apos;s not terribly complicated.  That said, there was some discussion of wanting the PTM to have a mutex for moving towards impl-side painting.  I&apos;m very open to changing back to the scheme of passing the set of evicted textures to the main thread, but I&apos;m getting a bit worried about vascilating too much before checking anything in.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.h:80
&gt;      void reduceMemory(CCResourceProvider*);

I wanted to name this as reduceMemoryOnImplThread because that&apos;s what the function will do in a subsequent change (I renamed a few things from &quot;clear all&quot; to &quot;reduce&quot;).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>711652</commentid>
    <comment_count>26</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-09-04 18:42:26 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:62
&gt; &gt;      virtual void postAnimationEventsToMainThreadOnImplThread(PassOwnPtr&lt;CCAnimationEventsVector&gt;, double wallClockTime) = 0;
&gt; 
&gt; Yes -- we could communicate the list of destroyed backings to the main thread at commit time -- we would call getAndClearEvictedBackings on the impl thread and communicate them via scheduledActionBeginFrame.  I had originally started with this scheme, and then abandoned it because the implementation was getting complicated -- copying the set of backings to and from the main thread was involved.

I was thinking more along the lines of notifying the main thread so it could do the memory reduction and then push the updates across like it already does. Currently this would require a full commit though, and AFAIU there is a problem with that for invisible tabs? If we created custom impl-side objects for each texture we could also just push the ids across in a custom &apos;mini-commit&apos;.

&gt; In the intervening iteration, it looks like it&apos;s not terribly complicated.  That said, there was some discussion of wanting the PTM to have a mutex for moving towards impl-side painting.  I&apos;m very open to changing back to the scheme of passing the set of evicted textures to the main thread, but I&apos;m getting a bit worried about vascilating too much before checking anything in.

Looks like you have buy-in from all the feedback. All I&apos;d say is that the impl-side painting threading issues are quite different than the issues this is solving, so the stuff behind the mutex would be very different I think. Anyway, I&apos;m a bit late to the party to request huge changes, so as long as reviewers are okay with it then that&apos;s fine with me.

&gt; I wanted to name this as reduceMemoryOnImplThread because that&apos;s what the function will do in a subsequent change (I renamed a few things from &quot;clear all&quot; to &quot;reduce&quot;).

Ah okay, if follow up CLs will fix then np, and consider removing &quot;OnImplThread&quot; for main-thread-blocked functions as well (if you agree with that bit - I&apos;m not sure of the convention for that elsewhere).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>711662</commentid>
    <comment_count>27</comment_count>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-09-04 18:50:02 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; I was thinking more along the lines of notifying the main thread so it could do the memory reduction and then push the updates across like it already does. Currently this would require a full commit though, and AFAIU there is a problem with that for invisible tabs? If we created custom impl-side objects for each texture we could also just push the ids across in a custom &apos;mini-commit&apos;.

Ah, one of the goals is to be able to adjust memory without going back to the main thread (so we can very quickly adjust memory without getting blocked on JS, etc).  There are some things that are preventing this from always being the case ATM (visibility messages being synchronous, etc).

&gt; &gt; In the intervening iteration, it looks like it&apos;s not terribly complicated.  That said, there was some discussion of wanting the PTM to have a mutex for moving towards impl-side painting.  I&apos;m very open to changing back to the scheme of passing the set of evicted textures to the main thread, but I&apos;m getting a bit worried about vascilating too much before checking anything in.
&gt; 
&gt; Looks like you have buy-in from all the feedback. All I&apos;d say is that the impl-side painting threading issues are quite different than the issues this is solving, so the stuff behind the mutex would be very different I think. Anyway, I&apos;m a bit late to the party to request huge changes, so as long as reviewers are okay with it then that&apos;s fine with me.

Yes, you&apos;re right about the different mutex structure for the different purposes.  I&apos;m strongly considering re-examining the &quot;send the set to the main thread&quot; scheme (to avoid the lock), but I&apos;ll land this first and then tweak it.

&gt; &gt; I wanted to name this as reduceMemoryOnImplThread because that&apos;s what the function will do in a subsequent change (I renamed a few things from &quot;clear all&quot; to &quot;reduce&quot;).
&gt; 
&gt; Ah okay, if follow up CLs will fix then np, and consider removing &quot;OnImplThread&quot; for main-thread-blocked functions as well (if you agree with that bit - I&apos;m not sure of the convention for that elsewhere).

Oh -- I like the convention (and I think this CL follows it -- reduceMemoryOnImplThread doesn&apos;t block main thread but reduceMemory does).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>711680</commentid>
    <comment_count>28</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-09-04 20:12:34 -0700</bug_when>
    <thetext>&gt; &gt; I was thinking more along the lines of notifying the main thread so it could do the memory reduction and then push the updates across like it already does. Currently this would require a full commit though, and AFAIU there is a problem with that for invisible tabs? If we created custom impl-side objects for each texture we could also just push the ids across in a custom &apos;mini-commit&apos;.
&gt; 
&gt; Ah, one of the goals is to be able to adjust memory without going back to the main thread (so we can very quickly adjust memory without getting blocked on JS, etc).  There are some things that are preventing this from always being the case ATM (visibility messages being synchronous, etc).
&gt; 

I see, okay that rules out the commit then.

&gt; &gt; &gt; In the intervening iteration, it looks like it&apos;s not terribly complicated.  That said, there was some discussion of wanting the PTM to have a mutex for moving towards impl-side painting.  I&apos;m very open to changing back to the scheme of passing the set of evicted textures to the main thread, but I&apos;m getting a bit worried about vascilating too much before checking anything in.
&gt; &gt; 
&gt; &gt; Looks like you have buy-in from all the feedback. All I&apos;d say is that the impl-side painting threading issues are quite different than the issues this is solving, so the stuff behind the mutex would be very different I think. Anyway, I&apos;m a bit late to the party to request huge changes, so as long as reviewers are okay with it then that&apos;s fine with me.
&gt; 
&gt; Yes, you&apos;re right about the different mutex structure for the different purposes.  I&apos;m strongly considering re-examining the &quot;send the set to the main thread&quot; scheme (to avoid the lock), but I&apos;ll land this first and then tweak it.

I&apos;m wonder if it could even just send the deleted-priority-threshold in the task? Anyway, that would require strict timing which might end up getting complicated, but I would like it a lot if it could be done.

&gt; 
&gt; &gt; &gt; I wanted to name this as reduceMemoryOnImplThread because that&apos;s what the function will do in a subsequent change (I renamed a few things from &quot;clear all&quot; to &quot;reduce&quot;).
&gt; &gt; 
&gt; &gt; Ah okay, if follow up CLs will fix then np, and consider removing &quot;OnImplThread&quot; for main-thread-blocked functions as well (if you agree with that bit - I&apos;m not sure of the convention for that elsewhere).
&gt; 
&gt; Oh -- I like the convention (and I think this CL follows it -- reduceMemoryOnImplThread doesn&apos;t block main thread but reduceMemory does).

See: addBackingOnImplThread / removeBackingOnImplThread, but whatev&apos; for that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>711779</commentid>
    <comment_count>29</comment_count>
      <attachid>162173</attachid>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-09-05 00:11:25 -0700</bug_when>
    <thetext>Created attachment 162173
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>711781</commentid>
    <comment_count>30</comment_count>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-09-05 00:12:51 -0700</bug_when>
    <thetext>After thinking more about Eric&apos;s remarks, I&apos;ve removed the mutex and shared state from the PTM and am instead passing the evicted texture list to the main thread.  This has a smaller diff and feels more natural.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712382</commentid>
    <comment_count>31</comment_count>
      <attachid>162173</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-09-05 11:48:09 -0700</bug_when>
    <thetext>Comment on attachment 162173
Patch

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

I&apos;m a big fan of this approach, which I hadn&apos;t thought of.

The big assumption if I understand correctly is that backing life-time is managed exclusively during commits? Possibly it&apos;s worth adding a comment to that effect on the various backing lists, and make it as difficult as possible to break that assumption throughout the code.

It seems like this could almost evolve into an impl-side PTM, where that impl-PTM gets a full list of textures to work with, and then passes back the eviction list. And the PTM itself is otherwise unaffected. No need for that now, but I certainly like that direction.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:61
&gt; +    ASSERT(m_backings.isEmpty());

I figured this second ASSERT would be trouble for unit tests, but great if this is now always empty. The TiledLayerChromiumTests share a PTM now, so if it&apos;s an issue for those tests we can purge before destroying the PTM in the test destructor.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:208
&gt;          backing = createBacking(texture-&gt;size(), texture-&gt;format(), resourceProvider);

Could go into the createBacking function?

I&apos;m wondering if this could instead be a complete copy that occurs at some point, rather than being managed incrementally. In that case could it be a simple vector instead of a set?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:-222
&gt; -        destroyBacking((*it), resourceProvider);

Could we possibly put below logic into destroyBacking itself? And add back the CCResourceProvider* parameter? Having the CCResourceProvider* enforces that backing object life-time is managed entire during the commit, and makes create/destroy symmetric.

I&apos;m also wondering if there should be a special step that deals with all evicted backings first, since all of those are definitely gone?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.h:160
&gt; +    BackingSet m_unevictedBackings;

Could you add a set of ASSERTs in ::assertInvariants() that verifies there is no errors in these lists?  eg. there shouldn&apos;t be duplicates between evicted/unevicted, and there shouldn&apos;t be any backing in either of these that isn&apos;t also in m_backings and vice versa.  Ideally also make sure we evict some textures in one ore more PrioritizedTextureTests.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:503
&gt;      m_mainThreadProxy-&gt;postTask(createCCThreadTask(this, &amp;CCThreadProxy::beginFrame));

The only thing I&apos;m worried about here is whether backing objects could be destroyed/created by other means while this task is in flight. If so these pointers don&apos;t uniquely identify backing objects any more.

We only create/recycle/destroy backings during commits, so it seems safe at first glance. The ASSERT(!m_pendingBeginFrameRequest); at the beginning says there shouldn&apos;t ever be two of these in flight... Any other scenario you can think of where these backings could be out of date?

Do we still need an eviction counter with this approach? It seems like when the main thread processes the eviction list during the commit, it is guaranteed to be the one-and-only up-to-date eviction list?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712392</commentid>
    <comment_count>32</comment_count>
      <attachid>162173</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-09-05 12:01:53 -0700</bug_when>
    <thetext>Comment on attachment 162173
Patch

As a last thought, I wonder if we could avoid having two backing sets, and instead copy a custom vector of structs like:
struct ImplBacking
{ 
   Backing* backing,
   int priority;
   bool evicted;
};
Then we could just process that list before doing any other backing management in the commit (which all happens during updating textures). Thought for food.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712424</commentid>
    <comment_count>33</comment_count>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-09-05 12:40:47 -0700</bug_when>
    <thetext>(In reply to comment #32)

&gt; The only thing I&apos;m worried about here is whether backing objects could be destroyed/created by other means while this task is in flight. If so these pointers don&apos;t uniquely identify backing objects any more.

So there does exist a bug here -- a reduceMemory() call can destroy a backing that has been handed to the main thread, but the main thread hasn&apos;t deleted yet.  I don&apos;t see a way around that without basically going back to the scheme of having a list of evicted textures in the PTM which is protected by a mutex (so, going back to the old scheme).

&gt; (From update of attachment 162173 [details])
&gt; As a last thought, I wonder if we could avoid having two backing sets, and instead copy a custom vector of structs like:
&gt; struct ImplBacking
&gt; { 
&gt;    Backing* backing,
&gt;    int priority;
&gt;    bool evicted;
&gt; };
&gt; Then we could just process that list before doing any other backing management in the commit (which all happens during updating textures). Thought for food.

From this it sounds like we&apos;re converging to a place where the m_backings vector is controlled entirely by the impl thread.  This makes sense to me -- that way we wouldn&apos;t have to have the extra BackingSet for the impl thread.  The change to do this would be fairly simple;
- have prioritizeTextures() not touch the backings array because it&apos;s called on the main thread
- add a prioritizeBackings() function to be called during commit, which pushes the texture priorities to their backings, and sorts the backings array
- add a &quot;int m_priority&quot; to CCPrioritizedTexture::Backing

The mutex-protected list of evicted textures would still be needed, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712464</commentid>
    <comment_count>34</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-09-05 13:17:26 -0700</bug_when>
    <thetext>(In reply to comment #33)
&gt; (In reply to comment #32)
&gt; 
&gt; &gt; The only thing I&apos;m worried about here is whether backing objects could be destroyed/created by other means while this task is in flight. If so these pointers don&apos;t uniquely identify backing objects any more.
&gt; 
&gt; So there does exist a bug here -- a reduceMemory() call can destroy a backing that has been handed to the main thread, but the main thread hasn&apos;t deleted yet.  I don&apos;t see a way around that without basically going back to the scheme of having a list of evicted textures in the PTM which is protected by a mutex (so, going back to the old scheme).

Can this actually happen though? reduceMemory() can only occur during a commit when the main thread is blocked, and it appears as though there can not be any other list of evicted backings in flight from when the task is posted through to when the commit is finished. So it seem to me we just need to process that list during the commit and we should be fine.

&gt; 
&gt; &gt; (From update of attachment 162173 [details] [details])
&gt; &gt; As a last thought, I wonder if we could avoid having two backing sets, and instead copy a custom vector of structs like:
&gt; &gt; struct ImplBacking
&gt; &gt; { 
&gt; &gt;    Backing* backing,
&gt; &gt;    int priority;
&gt; &gt;    bool evicted;
&gt; &gt; };
&gt; &gt; Then we could just process that list before doing any other backing management in the commit (which all happens during updating textures). Thought for food.
&gt; 
&gt; From this it sounds like we&apos;re converging to a place where the m_backings vector is controlled entirely by the impl thread.  This makes sense to me -- that way we wouldn&apos;t have to have the extra BackingSet for the impl thread.  The change to do this would be fairly simple;
&gt; - have prioritizeTextures() not touch the backings array because it&apos;s called on the main thread
&gt; - add a prioritizeBackings() function to be called during commit, which pushes the texture priorities to their backings, and sorts the backings array
&gt; - add a &quot;int m_priority&quot; to CCPrioritizedTexture::Backing
&gt; 
&gt; The mutex-protected list of evicted textures would still be needed, though.

I might be wrong, but could mutex be avoided like this?

During Commit:
   - Process eviction list and delete those backings
   - Manage lifetime of other backings via updating textures
   - Create a new eviction list for impl thread to use until next commit.
Main Thread:
   - Prioritize textures and backings but never manage backing life-times.
   - It should be impossible to manage backing life-times anyway since this
     requires the CCResourceProvider (commit only)
Impl Thread:
   - Mark it&apos;s own list of backings as being evicted.

Do we even need an event? Or maybe I&apos;m missing something.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712541</commentid>
    <comment_count>35</comment_count>
      <attachid>162335</attachid>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-09-05 14:35:15 -0700</bug_when>
    <thetext>Created attachment 162335
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712565</commentid>
    <comment_count>36</comment_count>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-09-05 14:55:42 -0700</bug_when>
    <thetext>(In reply to comment #34)
&gt; (In reply to comment #33)
&gt; &gt; So there does exist a bug here -- a reduceMemory() call can destroy a backing that has been handed to the main thread, but the main thread hasn&apos;t deleted yet.  I don&apos;t see a way around that without basically going back to the scheme of having a list of evicted textures in the PTM which is protected by a mutex (so, going back to the old scheme).
&gt; 
&gt; Can this actually happen though? reduceMemory() can only occur during a commit when the main thread is blocked, and it appears as though there can not be any other list of evicted backings in flight from when the task is posted through to when the commit is finished. So it seem to me we just need to process that list during the commit and we should be fine.
&gt;
&gt; &gt; The mutex-protected list of evicted textures would still be needed, though.
&gt; 
&gt; I might be wrong, but could mutex be avoided like this?
&gt; &lt;snip&gt;

I think that you are right, but it&apos;s not very clear.  I feel very confident about correctness and performance of the mutex scheme, and I&apos;d prefer to check that in first.

I&apos;ve cleaned up the CL to have a smaller surface area (removing the separated shared state).  Is it okay in its current form?

[Btw, I&apos;m having trouble with the patch not applying to TOT... I may upload a new version in a bit -- it won&apos;t differ substantially from the most current patch]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712569</commentid>
    <comment_count>37</comment_count>
      <attachid>162345</attachid>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-09-05 15:02:30 -0700</bug_when>
    <thetext>Created attachment 162345
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712627</commentid>
    <comment_count>38</comment_count>
      <attachid>162358</attachid>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-09-05 16:05:10 -0700</bug_when>
    <thetext>Created attachment 162358
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712711</commentid>
    <comment_count>39</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-09-05 17:47:24 -0700</bug_when>
    <thetext>&gt; &gt; I might be wrong, but could mutex be avoided like this?
&gt; &gt; &lt;snip&gt;
&gt; 
&gt; I think that you are right, but it&apos;s not very clear.  I feel very confident about correctness and performance of the mutex scheme, and I&apos;d prefer to check that in first.
&gt; 
&gt; I&apos;ve cleaned up the CL to have a smaller surface area (removing the separated shared state).  Is it okay in its current form?
&gt; 
&gt; [Btw, I&apos;m having trouble with the patch not applying to TOT... I may upload a new version in a bit -- it won&apos;t differ substantially from the most current patch]

I think the above approach is more similar to other places where the impl side holds the canonical information and needs to get it back to the main thread (eg. scroll deltas or animation events).

But yeah, since this has been put together and reviewed, I don&apos;t want to hold it from landing if there is a need for it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712823</commentid>
    <comment_count>40</comment_count>
      <attachid>162358</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-09-05 20:32:19 -0700</bug_when>
    <thetext>Comment on attachment 162358
Patch

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

Overall this seems nice.  I think there are a few things that need more attention - I really want to make sure that the threading stuff is solid and robust for future changes.

The ack passing seems needlessly complicated and error prone.  It seems like what you are trying to determine in CCThreadProxy is the answer to the following question: &quot;Have I evicted any textures from the impl thread since the last time I sent a beginFrame message to the main thread?&quot;  If that&apos;s the case then we know when we get a beginFrameComplete on the impl thread it&apos;s out of date.  That seems like it&apos;s much easier to track directly in CCThreadProxy with a bool rather than passing an int back+forth across threads.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:425
&gt; +

extra newline here

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:430
&gt; +    m_contentsTextureManager-&gt;destroyEvictedBackings(purgeCounterAck);

So this is the change that requires the mutex?  This call can&apos;t actually issue any GL calls, so what is it touching?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTexture.h:110
&gt; +            : m_texture(id, size, format), m_resourceDeleted(false), m_owner(0) { }

initialize one thing per line. I think you should define the c&apos;tor and d&apos;tor in the .cpp, not the header

&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:228
&gt; +        if ((*it)-&gt;resourceDeleted()) {

so much (*it). Can we put that in a temporary with the proper type and a good name so we know what the heck it is?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:273
&gt; +    bool result = false;

what does &quot;result&quot; mean? could you give this a more descriptive name - it seems to be indicating if we&apos;ve evicted anything

&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:277
&gt; +    if (!backingsToEvict.isEmpty()) {
&gt; +        result = true;
&gt; +        for (BackingVector::iterator it = backingsToEvict.begin(); it != backingsToEvict.end(); ++it) {

instead of the loop, why not just m_evictedBackings.append(m_unevictedBackings); m_unevictedBackings.clear(); ?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:297
&gt; +        destroyBacking((*it));

this call does a GL call if i understand it correctly - can you not do it inside the mutex? a fairly efficient way to do that would be to make a new vector, .swap() m_evictedBackings into the new vector under the lock, then outside the lock iterate through and actually destroy the backings

&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.h:167
&gt; +
&gt; +

spurious newlines

&gt; Source/WebKit/chromium/tests/CCTextureUpdateControllerTest.cpp:90
&gt; +    TextureForUploadTest() : LayerTextureUpdater::Texture(adoptPtr&lt;CCPrioritizedTexture&gt;(0)), m_deleted(false) { }

One initialization entry per line.  The WebKit style way to line this up would be:

TextureForUploadTest()
    : LayerTextureUpd..())
    , m_deleted(false)
{
}

You can also use &apos;nullptr&apos; instead of adoptPtr&lt;T&gt;(0)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712871</commentid>
    <comment_count>41</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-09-05 22:02:33 -0700</bug_when>
    <thetext>I know this isn&apos;t intended to be complete yet, but the big missing piece in my mind is how you intend to delete &apos;only some resources&apos;, as the name of this CL implies.

Currently we only push raw texture ids over to the impl thread. How do you intend to delete some of those raw IDs in all layers that contain them?

Would it make sense to start a parallel CL for that, or possibly even do that part first? I&apos;d be a lot more happy if this CL actually enabled some new functionality, after all the other bits were in place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712895</commentid>
    <comment_count>42</comment_count>
      <attachid>162358</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-09-05 22:41:38 -0700</bug_when>
    <thetext>Comment on attachment 162358
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:297
&gt;&gt; +        destroyBacking((*it));
&gt; 
&gt; this call does a GL call if i understand it correctly - can you not do it inside the mutex? a fairly efficient way to do that would be to make a new vector, .swap() m_evictedBackings into the new vector under the lock, then outside the lock iterate through and actually destroy the backings

Wait sorry, this can&apos;t be right - we must have already issued the GL delete before we hit here.  What&apos;s this supposed to be doing on the main thread?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712898</commentid>
    <comment_count>43</comment_count>
      <attachid>162358</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-09-05 22:46:32 -0700</bug_when>
    <thetext>Comment on attachment 162358
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:297
&gt;&gt;&gt; +        destroyBacking((*it));
&gt;&gt; 
&gt;&gt; this call does a GL call if i understand it correctly - can you not do it inside the mutex? a fairly efficient way to do that would be to make a new vector, .swap() m_evictedBackings into the new vector under the lock, then outside the lock iterate through and actually destroy the backings
&gt; 
&gt; Wait sorry, this can&apos;t be right - we must have already issued the GL delete before we hit here.  What&apos;s this supposed to be doing on the main thread?

OK sorry, I think I see now - this is just supposed to remove it from this texture manager&apos;s set of live backings and unlink the CCPrioritizedTexture

So now I&apos;m backing to wondering why this has a lock at all.  Why not just pass a vector of deleted backings to the main thread in the beginFrame message and have the main thread unlink these on the main thread prioritized texture manager on its own time?  There&apos;s no reason to keep track of this set on the impl thread after the GL textures have been deleted and we&apos;ve passed the set to the main thread.  Passing a vector can be really efficient if you just .swap() the storage instead of copying element by element.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712901</commentid>
    <comment_count>44</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-09-05 22:50:29 -0700</bug_when>
    <thetext>(In reply to comment #36)
&gt; (In reply to comment #34)
&gt; &gt; (In reply to comment #33)
&gt; &gt; &gt; So there does exist a bug here -- a reduceMemory() call can destroy a backing that has been handed to the main thread, but the main thread hasn&apos;t deleted yet.  I don&apos;t see a way around that without basically going back to the scheme of having a list of evicted textures in the PTM which is protected by a mutex (so, going back to the old scheme).
&gt; &gt; 
&gt; &gt; Can this actually happen though? reduceMemory() can only occur during a commit when the main thread is blocked, and it appears as though there can not be any other list of evicted backings in flight from when the task is posted through to when the commit is finished. So it seem to me we just need to process that list during the commit and we should be fine.
&gt; &gt;
&gt; &gt; &gt; The mutex-protected list of evicted textures would still be needed, though.
&gt; &gt; 
&gt; &gt; I might be wrong, but could mutex be avoided like this?
&gt; &gt; &lt;snip&gt;
&gt; 
&gt; I think that you are right, but it&apos;s not very clear.  I feel very confident about correctness and performance of the mutex scheme, and I&apos;d prefer to check that in first.

Ah yes, I see Eric&apos;s suggested pretty much the exact same thing earlier on.  Serves me right for skimming the thread.

The message passing method is how we handle nearly all shared state in the compositor (and for that matter in most of chromium) and is IMO a lot easier to reason about.  The thing that makes the mutex based version really hard to reason about is you can know that can get an internally consistent picture from any thread, but it&apos;s really hard to reason about *which* picture you got.  Hence the awkward ack passing scheme in your patch.  If you instead embrace message passing then it gets easier to think about things in terms of what each thread has told the other thread about.  Once thread A passes the data into a message to thread B, thread A never has to worry about it any more - it&apos;s gone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713485</commentid>
    <comment_count>45</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-09-06 11:12:43 -0700</bug_when>
    <thetext>&gt; So now I&apos;m backing to wondering why this has a lock at all.  Why not just pass a vector of deleted backings to the main thread in the beginFrame message and have the main thread unlink these on the main thread prioritized texture manager on its own time?  There&apos;s no reason to keep track of this set on the impl thread after the GL textures have been deleted and we&apos;ve passed the set to the main thread.  Passing a vector can be really efficient if you just .swap() the storage instead of copying element by element.

James, can you confirm that there can *never* be two beginFrame messages at once?  I grokked that to be the case but it&apos;s very important for using a task here. If the main thread has a chance to delete/create backings while another list of pointers is pending in the message queue, those pointers may no longer be unique by the time they are processed. Backings are only created/destroyed during commits, so the only important bit is that there isn&apos;t another pending beginFrame task waiting (that contains a list of these pointers) while the commit is taking place.

As another possibility, we could actually even avoid posting a task at all, by having all synchronization occur during the commit. The commit could process the impl thread&apos;s deletion list at the beginning, and then create a fresh deletion list for the impl thread to use at the end.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713491</commentid>
    <comment_count>46</comment_count>
      <attachid>162358</attachid>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-09-06 11:15:33 -0700</bug_when>
    <thetext>Comment on attachment 162358
Patch

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

Thanks!

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:425
&gt;&gt; +
&gt; 
&gt; extra newline here

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:430
&gt;&gt; +    m_contentsTextureManager-&gt;destroyEvictedBackings(purgeCounterAck);
&gt; 
&gt; So this is the change that requires the mutex?  This call can&apos;t actually issue any GL calls, so what is it touching?

This line is un-linking CCPrioritizedTextures from their Backings.

The Backings had their resources deleted by the impl thread, but the structures are still hanging around in the m_backings array and are pointed to by CCPrioritizedTextures.

This needs to be done before calling updateLayers because updateLayers will use the existence of a Backing to determine if the layer needs to be re-drawn.

As you noticed, the &quot;ack&quot; is actually not needed for this scheme (and I&apos;ve removed it).

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTexture.h:110
&gt;&gt; +            : m_texture(id, size, format), m_resourceDeleted(false), m_owner(0) { }
&gt; 
&gt; initialize one thing per line. I think you should define the c&apos;tor and d&apos;tor in the .cpp, not the header

Fixed and moved to the .cpp file.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:228
&gt;&gt; +        if ((*it)-&gt;resourceDeleted()) {
&gt; 
&gt; so much (*it). Can we put that in a temporary with the proper type and a good name so we know what the heck it is?

Put it in a backing pointer (I&apos;d been vacillating  on this because of the surrounding (*it)).

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:273
&gt;&gt; +    bool result = false;
&gt; 
&gt; what does &quot;result&quot; mean? could you give this a more descriptive name - it seems to be indicating if we&apos;ve evicted anything

Changed to didEvictBackings.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:277
&gt;&gt; +        for (BackingVector::iterator it = backingsToEvict.begin(); it != backingsToEvict.end(); ++it) {
&gt; 
&gt; instead of the loop, why not just m_evictedBackings.append(m_unevictedBackings); m_unevictedBackings.clear(); ?

This will have to be a loop when we become more discriminating about what we delete (we won&apos;t always just be adding all of m_unevictedBackings to m_evictedBackings.

&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:297
&gt;&gt;&gt;&gt; +        destroyBacking((*it));
&gt;&gt;&gt; 
&gt;&gt;&gt; this call does a GL call if i understand it correctly - can you not do it inside the mutex? a fairly efficient way to do that would be to make a new vector, .swap() m_evictedBackings into the new vector under the lock, then outside the lock iterate through and actually destroy the backings
&gt;&gt; 
&gt;&gt; Wait sorry, this can&apos;t be right - we must have already issued the GL delete before we hit here.  What&apos;s this supposed to be doing on the main thread?
&gt; 
&gt; OK sorry, I think I see now - this is just supposed to remove it from this texture manager&apos;s set of live backings and unlink the CCPrioritizedTexture
&gt; 
&gt; So now I&apos;m backing to wondering why this has a lock at all.  Why not just pass a vector of deleted backings to the main thread in the beginFrame message and have the main thread unlink these on the main thread prioritized texture manager on its own time?  There&apos;s no reason to keep track of this set on the impl thread after the GL textures have been deleted and we&apos;ve passed the set to the main thread.  Passing a vector can be really efficient if you just .swap() the storage instead of copying element by element.

I tried out that scheme (with the swap, et al) in the patch at
https://bugs.webkit.org/attachment.cgi?id=162173&amp;action=review

I felt really uncomfortable with that patch because there were Backing*s that were in this external list, and that were still in m_backings, and the external list was destroyed by clearEvictedBackings() but could also be destroyed by reduceMemory().  Eric pointed this out in that diff (see the &quot;I&apos;m worried about ... whether backing objects could be destroyed/created by other means while this task is in flight&quot; remark in that diff).

Eric and I convinced ourselves that this couldn&apos;t happen (because the list is fetched in scheduledActionBeginFrame, clearEvictedBackings is called in beginFrame, and reduceMemory is called in scheduledActionCommit, and we&apos;re pretty sure that you can&apos;t have the sequence scheduledActionBeginFrame,scheduledActionCommit,beginFrame -- the beginFrame has to fit in the middle).  But it was a bit scary (and it was harder to add asserts all over that one set was the disjoint union of the other two, etc).

Eric had mentioned cutting the PTM into main/impl parts, and I think that when we do that, the eviction-vector-passing scheme will fall out much more nicely.  I&apos;d like to land this current scheme (because its correctness is solid and it has all sorts of asserts to verify this), and then work on the PTM main/impl split (to get that scheme the same level of clearly-correct-ness) in parallel with the other memory work which is blocked on this functionality.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.h:167
&gt;&gt; +
&gt; 
&gt; spurious newlines

Fixed.

&gt;&gt; Source/WebKit/chromium/tests/CCTextureUpdateControllerTest.cpp:90
&gt;&gt; +    TextureForUploadTest() : LayerTextureUpdater::Texture(adoptPtr&lt;CCPrioritizedTexture&gt;(0)), m_deleted(false) { }
&gt; 
&gt; One initialization entry per line.  The WebKit style way to line this up would be:
&gt; 
&gt; TextureForUploadTest()
&gt;     : LayerTextureUpd..())
&gt;     , m_deleted(false)
&gt; {
&gt; }
&gt; 
&gt; You can also use &apos;nullptr&apos; instead of adoptPtr&lt;T&gt;(0)

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713492</commentid>
    <comment_count>47</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-09-06 11:16:17 -0700</bug_when>
    <thetext>(In reply to comment #45)
&gt; &gt; So now I&apos;m backing to wondering why this has a lock at all.  Why not just pass a vector of deleted backings to the main thread in the beginFrame message and have the main thread unlink these on the main thread prioritized texture manager on its own time?  There&apos;s no reason to keep track of this set on the impl thread after the GL textures have been deleted and we&apos;ve passed the set to the main thread.  Passing a vector can be really efficient if you just .swap() the storage instead of copying element by element.
&gt; 
&gt; James, can you confirm that there can *never* be two beginFrame messages at once?

Yes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713495</commentid>
    <comment_count>48</comment_count>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-09-06 11:18:50 -0700</bug_when>
    <thetext>(In reply to comment #41)
&gt; I know this isn&apos;t intended to be complete yet, but the big missing piece in my mind is how you intend to delete &apos;only some resources&apos;, as the name of this CL implies.

That would fit in at CCPrioritizedTextureManager::reduceMemoryOnImplThread, where we&apos;d put only some Backing*s into backingsToEvict.  The reduceMemoryOnImplThread will take a priority cutoff (and maybe a hard limit too).  Before adding that, I&apos;ll need to push priorities over to the Backing*s themselves.

&gt; Currently we only push raw texture ids over to the impl thread. How do you intend to delete some of those raw IDs in all layers that contain them?

We just let the now-invalid raw IDs languish in the impl tree.  We disable drawing from the tree until we get a commit that was done when the main thread knew about all of the evictions (which guarantees that the impl tree no longer has invalid IDs).

I&apos;d like to not require a commit, and have the impl tree be able to prune out the invalid part (and be able to determine &quot;can I draw with the resources that are left?&quot;), but that is a more long-term project.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713504</commentid>
    <comment_count>49</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-09-06 11:25:12 -0700</bug_when>
    <thetext>(In reply to comment #48)
&gt; (In reply to comment #41)
&gt; &gt; I know this isn&apos;t intended to be complete yet, but the big missing piece in my mind is how you intend to delete &apos;only some resources&apos;, as the name of this CL implies.
&gt; 
&gt; That would fit in at CCPrioritizedTextureManager::reduceMemoryOnImplThread, where we&apos;d put only some Backing*s into backingsToEvict.  The reduceMemoryOnImplThread will take a priority cutoff (and maybe a hard limit too).  Before adding that, I&apos;ll need to push priorities over to the Backing*s themselves.
&gt; 
&gt; &gt; Currently we only push raw texture ids over to the impl thread. How do you intend to delete some of those raw IDs in all layers that contain them?
&gt; 
&gt; We just let the now-invalid raw IDs languish in the impl tree.  We disable drawing from the tree until we get a commit that was done when the main thread knew about all of the evictions (which guarantees that the impl tree no longer has invalid IDs).
&gt; 
&gt; I&apos;d like to not require a commit, and have the impl tree be able to prune out the invalid part (and be able to determine &quot;can I draw with the resources that are left?&quot;), but that is a more long-term project.

I see. This all sounds good. I was worried we would need the long term project before this would be beneficial. The intermediate sounds good! (waiting for a commit to be able to draw).  Thanks for the clarification.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721184</commentid>
    <comment_count>50</comment_count>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-09-14 15:24:09 -0700</bug_when>
    <thetext>This has been cut into a bunch of separate sub-bugs

Bug 95596 - [chromium] Add main versus impl thread asserts
Bug 96018 - [chromium] Do not delete CCPrioritizedTexture::Backing structures on the main thread 
Bug 96114 - [chromium] Make prioritized texture manager not touch backings array on the main thread
Bug 96463 - [chromium] Evict textures through the texture manager instead of the resource provider
Bug 96555 - [chromium] Add clearing of evicted textures from texture upload queues (not landed yet)

Closing this one as a duplicate of bug 96463.

*** This bug has been marked as a duplicate of bug 96463 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160669</attachid>
            <date>2012-08-27 01:39:44 -0700</date>
            <delta_ts>2012-08-28 15:55:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95057-20120827013937.patch</filename>
            <type>text/plain</type>
            <size>46829</size>
            <attacher name="Christopher Cameron">ccameron</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2NjE1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjU5MTBjZGQ0NGUzODBh
YjgwZTAyODAxYzExZTFlNDE4NGFkZTI4NC4uY2NhMjFiZjFlZmNkODhkMjA3OWY1ODA0MWRhNjYw
NWYwZjgwMTg5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwOSBAQAorMjAxMi0wOC0yNyAgQ2hy
aXN0b3BoZXIgQ2FtZXJvbiAgPGNjYW1lcm9uQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hy
b21pdW1dIEFsbG93IGltcGwtdGhyZWFkIGRlbGV0aW9uIG9mIG9ubHkgc29tZSByZXNvdXJjZXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1MDU3CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVG93YXJkcyBh
bGxvd2luZyB0aGUgaW1wbCB0aHJlYWQgdG8gZGVsZXRlIGp1c3Qgc29tZSByZXNvdXJjZXMgKGFz
CisgICAgICAgIG9wcG9zZWQgdG8gZGVsZXRpbmcgYWxsIHJlc291cmNlcykuCisKKyAgICAgICAg
RG8gaW1wbC10aHJlYWQgZGVsZXRpb24gdGhyb3VnaCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFn
ZXIgaW5zdGVhZCBvZgorICAgICAgICBDQ1Jlc291cmNlUHJvdmlkZXIuIEluIHN1YnNlcXVlbnQg
Y2hhbmdlcyB0aGUgaW1wbCB0aHJlYWQgd2lsbCBiZSBhYmxlCisgICAgICAgIHRvIHNldCBhIHRo
cmVzaG9sZCBmb3Igd2hhdCB0byBkZWxldGUpLiBBZGQgYSBtdXRleCB0byBwcm90ZWN0IHRoZSBz
dGF0ZQorICAgICAgICBzaGFyZWQgYmV0d2VlbiB0aGUgdHdvIHRocmVhZHMuIEFkZCBhIHNldCBv
ZiB0ZXh0dXJlcyB0aGF0IGhhdmUgYmVlbgorICAgICAgICBkZWxldGVkIGJ5IHRoZSBpbXBsIHRo
cmVhZCwgYnV0IGhhdmUgbm90IGhhZCB0aGVpciByZWxhdGVkIHN0cnVjdHVyZXMKKyAgICAgICAg
Y2xlYXIgYnkgdGhlIG1haW4gdGhyZWFkIHlldC4KKworICAgICAgICBBbGxvdyBtdWx0aXBsZSBp
bi1mbGlnaHQgdGV4dHVyZSBwdXJnZXMuIEluIENDVGhyZWFkUHJveHksIG1ha2UgdGhlCisgICAg
ICAgIGFja25vd2xlZGdlbWVudCBvZiB0ZXh0dXJlIGRlbGV0aW9uIGJlIGFuIGludGVnZXIgY291
bnRlciBpbnN0ZWFkIG9mIGEKKyAgICAgICAgYm9vbCwgYmVjYXVzZSB3ZSBtYXkgaGF2ZSBtdWx0
aXBsZSBpbi1mbGlnaHQgcHVyZ2VzLiBSZW1vdmUgbWFueQorICAgICAgICBpbnN0YW5jZXMgd2hl
cmUgdGV4dHVyZSBwdXJnZXMgd2VyZSBhdm9pZGVkIHdoZW4gdGhlcmUgd2FzIGFuCisgICAgICAg
IG91dHN0YW5kaW5nIHRleHQuCisKKyAgICAgICAgQWRkIHRoZSBhYmlsaXR5IHRvIGNsZWFyIG9u
bHkgdGhlIHJlZmVyZW5jZXMgdG8gZGVsZXRlZCB0ZXh0dXJlcyBmcm9tCisgICAgICAgIHRoZSB0
ZXh0dXJlIHVwbG9hZCBxdWV1ZS4KKworICAgICAgICBBZGQgYXNzZXJ0aW9ucyB0aGF0IHJlc291
cmNlcyBiZSBmcmVlZCB0byBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuCisgICAgICAgIFVw
ZGF0ZSBUaWxlZExheWVyQ2hyb21pdW1UZXN0IHRvIGFkaGVyZSB0byB0aGVzZSBuZXcgcmVxdWly
ZW1lbnRzLgorCisgICAgICAgIFJlbW92ZSB0aGUgdGVzdCByZWxlYXNlQ29udGVudHNUZXh0dXJl
U2hvdWxkVHJpZ2dlckNvbW1pdCBiZWNhdXNlIGl0CisgICAgICAgIGlzIG5vIGxvbmdlciB2YWxp
ZCAtLSBhIHJlbGVhc2VDb250ZW50c1RleHR1cmUgd2lsbCBvbmx5IHRyaWdnZXIgYQorICAgICAg
ICBjb21taXQgaWYgdGhlIHJlbGVhc2VDb250ZW50c1RleHR1cmUgYWN0dWFsbHkgZGVsZXRlcyBh
bnkgdGV4dHVyZXMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlOjpiYWNraW5nV2FzQXN5
bmNocm9ub3VzbHlEZWxldGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0OjpkZWxldGVDb250ZW50c1RleHR1cmVzUmVzb3VyY2VzT25JbXBsVGhyZWFkKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpkZXN0cm95
VGV4dHVyZXNEZWxldGVkQnlJbXBsVGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9z
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpyZWxl
YXNlQ29udGVudHNUZXh0dXJlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorICAgICAgICAoQ0NMYXllclRyZWVIb3N0SW1w
bENsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRDb250
ZW50c1RleHR1cmVzUHVyZ2VkKToKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdEltcGwpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlOjp1cGxvYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmU6OmJhY2tpbmdXYXNBc3luY2hy
b25vdXNseURlbGV0ZWQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmUuaDoKKyAgICAgICAgKEND
UHJpb3JpdGl6ZWRUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0
dXJlOjpCYWNraW5nOjpCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRU
ZXh0dXJlOjpCYWNraW5nOjp+QmFja2luZyk6CisgICAgICAgIChCYWNraW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nOjpvd25lcik6CisgICAgICAg
IChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZzo6cmVzb3VyY2VEZWxldGVk
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1
cmVNYW5hZ2VyOjp+Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cHJpb3JpdGl6ZVRleHR1cmVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmVxdWVzdExhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjphY3F1aXJl
QmFja2luZ1RleHR1cmVJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXI6OnJlZHVjZU1lbW9yeSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9y
aXRpemVkVGV4dHVyZU1hbmFnZXI6OmRlbGV0ZUJhY2tpbmdzUmVzb3VyY2VzT25JbXBsVGhyZWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6ZGVzdHJv
eUJhY2tpbmdzRnJlZWRCeUltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNsZWFyQWxsTWVtb3J5KToK
KyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmVnaXN0ZXJU
ZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6
cmV0dXJuQmFja2luZ1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0aXplZFRl
eHR1cmVNYW5hZ2VyOjpjcmVhdGVCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3Jp
dGl6ZWRUZXh0dXJlTWFuYWdlcjo6ZGVzdHJveUJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjphc3NlcnRJbnZhcmlhbnRzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFn
ZXIuaDoKKyAgICAgICAgKENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY2hlZHVsZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q0NTY2hlZHVsZXI6OmJlZ2luRnJhbWVBYm9ydGVkKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OnJlY3JlYXRlQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5OjpzdG9wKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OmRlbGV0ZUNvbnRlbnRzVGV4dHVyZXNPbkltcGxUaHJl
YWQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVh
ZFByb3h5Ojpjb21taXRBbmRDb21wb3NpdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVRdWV1ZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1RleHR1cmVVcGRhdGVRdWV1ZTo6Y2xlYXJVcGxvYWRzVG9EZWxldGVkUmVzb3Vy
Y2VzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZVF1ZXVlLmg6CisgICAgICAgIChDQ1RleHR1cmVVcGRh
dGVRdWV1ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJl
YWRQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpDQ1RocmVhZFBy
b3h5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmRlbGV0ZUNvbnRlbnRzVGV4
dHVyZXNPbkltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1RocmVhZFByb3h5OjpzY2hlZHVsZWRBY3Rpb25CZWdpbkZyYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NU
aHJlYWRQcm94eTo6YmVnaW5GcmFtZUNvbXBsZXRlT25JbXBsVGhyZWFkKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDVGhyZWFkUHJveHk6OnNjaGVkdWxlZEFjdGlvbkNvbW1pdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25JbXBsVGhyZWFkKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OnJlY3JlYXRlQ29udGV4dE9uSW1wbFRo
cmVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQ
cm94eS5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6QmVnaW5GcmFtZUFuZENv
bW1pdFN0YXRlOjpCZWdpbkZyYW1lQW5kQ29tbWl0U3RhdGUpOgorICAgICAgICAoQmVnaW5GcmFt
ZUFuZENvbW1pdFN0YXRlKToKKyAgICAgICAgKENDVGhyZWFkUHJveHkpOgorCiAyMDEyLTA4LTI0
ICBSb2JlcnQgS3JvZWdlciAgPHJqa3JvZWdlQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hy
b21pdW1dIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNjcm9sbEJ5IGFsd2F5cyBhc3N1bWVzIHNjcmVl
biBzcGFjZSBkZWx0YXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNDRkMTg3ZDczYWRk
NzIwMzgwZmE4YjY2OTM2Yjk4NTQ0YzQ5YzI5OS4uMmYwYzk1ZDkyZjQ0OWZhMTAzMWUzYzFhMTE1
NjQzMzBhODEyNGZlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBA
QAorMjAxMi0wOC0yNyAgQ2hyaXN0b3BoZXIgQ2FtZXJvbiAgPGNjYW1lcm9uQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBbY2hyb21pdW1dIEFsbG93IGltcGwtdGhyZWFkIGRlbGV0aW9uIG9mIG9u
bHkgc29tZSByZXNvdXJjZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTk1MDU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVXBkYXRlIFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QgdG8gZGVsZXRlIGl0cyB0ZXh0
dXJlIHJlc291cmNlcyBiZWZvcmUKKyAgICAgICAgZGVsZXRpbmcgaXRzIHRleHR1cmUgbWFuYWdl
ci4KKworICAgICAgICBSZW1vdmUgdGhlIHRlc3QgcmVsZWFzZUNvbnRlbnRzVGV4dHVyZVNob3Vs
ZFRyaWdnZXJDb21taXQgYmVjYXVzZSBpdAorICAgICAgICBpcyBubyBsb25nZXIgdmFsaWQgLS0g
YSByZWxlYXNlQ29udGVudHNUZXh0dXJlIHdpbGwgb25seSB0cmlnZ2VyIGEKKyAgICAgICAgY29t
bWl0IGlmIHNvbWUgcmVzb3VyY2VzIGFyZSBkZWxldGVkLgorCisgICAgICAgICogdGVzdHMvQ0NM
YXllclRyZWVIb3N0SW1wbFRlc3QuY3BwOgorICAgICAgICAqIHRlc3RzL1RpbGVkTGF5ZXJDaHJv
bWl1bVRlc3QuY3BwOgorCiAyMDEyLTA4LTI0ICBDcmlzIE5lY2thciAgPGNkbkBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgUGx1bWIgY29uc3VtZVVzZXJHZXN0dXJlKCkgdG8gdGhlIGNocm9taXVt
IHBsYXRmb3JtIGxheWVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oCmluZGV4IDFhZDYx
YzhkOGNhNDY1M2MxZjIwYjhjZWU0MjYyYzc3MWU0YmUyMWMuLjZjNGIwMGM5OWRlZTY1NzI0NDdj
Y2E4YmQxNTk3ZDI3OTkxZDlhYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgKQEAg
LTQ5LDYgKzQ5LDcgQEAgcHVibGljOgogCiAgICAgICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlKiB0
ZXh0dXJlKCkgeyByZXR1cm4gbV90ZXh0dXJlLmdldCgpOyB9CiAgICAgICAgIHZvaWQgc3dhcFRl
eHR1cmVXaXRoKE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZT4mIHRleHR1cmUpIHsgbV90ZXh0
dXJlLnN3YXAodGV4dHVyZSk7IH0KKyAgICAgICAgYm9vbCBiYWNraW5nV2FzQXN5bmNocm9ub3Vz
bHlEZWxldGVkKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlLT5iYWNraW5nV2FzQXN5bmNocm9u
b3VzbHlEZWxldGVkKCk7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVSZWN0KGNvbnN0
IEludFJlY3QmIC8qIHNvdXJjZVJlY3QgKi8sIENDUmVuZGVyaW5nU3RhdHMmKSB7IH0KICAgICAg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZVJlY3QoQ0NSZXNvdXJjZVByb3ZpZGVyKiwgY29uc3QgSW50
UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50U2l6ZSYgZGVzdE9mZnNldCkgPSAwOwogICAgIHBy
b3RlY3RlZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IDVlZTFiZjZlOTVj
NGIyZjY4ZTMyMmYzZGUwNzIxMzAxODE2N2Y5Y2YuLmQ4ZDZkMjE0ZjdiM2IwYzE0YTdlNTM4MjYy
ZmUxNzE0MjFlOWY5OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtMTky
LDExICsxOTIsMTIgQEAgQ0NMYXllclRyZWVIb3N0OjpSZWNyZWF0ZVJlc3VsdCBDQ0xheWVyVHJl
ZUhvc3Q6OnJlY3JlYXRlQ29udGV4dCgpCiAgICAgcmV0dXJuIFJlY3JlYXRlRmFpbGVkQW5kR2F2
ZVVwOwogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZGVsZXRlQ29udGVudHNUZXh0dXJlc09u
SW1wbFRocmVhZChDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIpCitib29sIEND
TGF5ZXJUcmVlSG9zdDo6ZGVsZXRlQ29udGVudHNUZXh0dXJlc1Jlc291cmNlc09uSW1wbFRocmVh
ZChDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIpCiB7CiAgICAgQVNTRVJUKEND
UHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBpZiAobV9yZW5kZXJlckluaXRpYWxpemVkKQot
ICAgICAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPmNsZWFyQWxsTWVtb3J5KHJlc291cmNl
UHJvdmlkZXIpOworICAgICAgICByZXR1cm4gbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5kZWxl
dGVCYWNraW5nc1Jlc291cmNlc09uSW1wbFRocmVhZChyZXNvdXJjZVByb3ZpZGVyKTsKKyAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjphY3F1aXJlTGF5ZXJUZXh0
dXJlcygpCkBAIC00MTEsMTEgKzQxMiwxMiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0Vmlz
aWJsZShib29sIHZpc2libGUpCiAgICAgbV9wcm94eS0+c2V0VmlzaWJsZSh2aXNpYmxlKTsKIH0K
IAotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmV2aWN0QWxsQ29udGVudFRleHR1cmVzKCkKKwordm9p
ZCBDQ0xheWVyVHJlZUhvc3Q6OmRlc3Ryb3lUZXh0dXJlc0RlbGV0ZWRCeUltcGxUaHJlYWQoKQog
ewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKG1fY29u
dGVudHNUZXh0dXJlTWFuYWdlci5nZXQoKSk7Ci0gICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2Vy
LT5hbGxCYWNraW5nVGV4dHVyZXNXZXJlRGVsZXRlZCgpOworICAgIG1fY29udGVudHNUZXh0dXJl
TWFuYWdlci0+ZGVzdHJveUJhY2tpbmdzRnJlZWRCeUltcGxUaHJlYWQoKTsKIH0KIAogdm9pZCBD
Q0xheWVyVHJlZUhvc3Q6OnN0YXJ0UGFnZVNjYWxlQW5pbWF0aW9uKGNvbnN0IEludFNpemUmIHRh
cmdldFBvc2l0aW9uLCBib29sIHVzZUFuY2hvciwgZmxvYXQgc2NhbGUsIGRvdWJsZSBkdXJhdGlv
blNlYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggY2MwYjQ1ZDNkN2ZjN2IxNWE0
N2MxNTJlNTI3M2Y5YmM2ZWY1M2M3MC4uYzA4NzdkOWRkZjM3ZGUxOGZjMjNlZDhkMDRjYjk0MjI1
ZjgyZTg5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTE3NSw3ICsxNzUsNiBA
QCBwdWJsaWM6CiAgICAgUmVjcmVhdGVSZXN1bHQgcmVjcmVhdGVDb250ZXh0KCk7CiAgICAgdm9p
ZCBkaWRDb21taXRBbmREcmF3RnJhbWUoKSB7IG1fY2xpZW50LT5kaWRDb21taXRBbmREcmF3RnJh
bWUoKTsgfQogICAgIHZvaWQgZGlkQ29tcGxldGVTd2FwQnVmZmVycygpIHsgbV9jbGllbnQtPmRp
ZENvbXBsZXRlU3dhcEJ1ZmZlcnMoKTsgfQotICAgIHZvaWQgZGVsZXRlQ29udGVudHNUZXh0dXJl
c09uSW1wbFRocmVhZChDQ1Jlc291cmNlUHJvdmlkZXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgYWNx
dWlyZUxheWVyVGV4dHVyZXMoKTsKICAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIHdlIHNob3VsZCBh
Ym9ydCB0aGlzIGZyYW1lIGR1ZSB0byBpbml0aWFsaXphdGlvbiBmYWlsdXJlLgogICAgIGJvb2wg
aW5pdGlhbGl6ZVJlbmRlcmVySWZOZWVkZWQoKTsKQEAgLTIzMywxMSArMjMyLDEyIEBAIHB1Ymxp
YzoKIAogICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlciogY29udGVudHNUZXh0dXJlTWFu
YWdlcigpIGNvbnN0OwogCi0gICAgLy8gVGhpcyB3aWxsIGNhdXNlIGNvbnRlbnRzIHRleHR1cmUg
bWFuYWdlciB0byBldmljdCBhbGwgdGV4dHVyZXMsIGJ1dAotICAgIC8vIHdpdGhvdXQgZGVsZXRp
bmcgdGhlbS4gVGhpcyBoYXBwZW5zIGFmdGVyIGFsbCBjb250ZW50IHRleHR1cmVzIGhhdmUKLSAg
ICAvLyBhbHJlYWR5IGJlZW4gZGVsZXRlZCBvbiBpbXBsLCBhZnRlciBnZXR0aW5nIGEgMCBhbGxv
Y2F0aW9uIGxpbWl0LgotICAgIC8vIFNldCBkdXJpbmcgYSBjb21taXQsIGJ1dCBiZWZvcmUgdXBk
YXRlTGF5ZXJzLgotICAgIHZvaWQgZXZpY3RBbGxDb250ZW50VGV4dHVyZXMoKTsKKyAgICAvLyBU
aGlzIHdpbGwgY2F1c2UgY29udGVudHMgdGV4dHVyZSBtYW5hZ2VyIHRvIGZyZWUgYWxsIHJlc291
cmNlcyB1c2VkCisgICAgLy8gYnkgdGV4dHVyZXMsIGJ1dCB3aWxsIG5vdCBkZWxldGUgdGhlIHRl
eHR1cmUgYmFja2luZ3Mgb2JqZWN0cy4KKyAgICBib29sIGRlbGV0ZUNvbnRlbnRzVGV4dHVyZXNS
ZXNvdXJjZXNPbkltcGxUaHJlYWQoQ0NSZXNvdXJjZVByb3ZpZGVyKik7CisgICAgLy8gVGhpcyB3
aWxsIGRlc3Ryb3kgdGhlIGJhY2tpbmdzIHRoYXQgaGFkIHRoZWlyIEdQVSByZXNvdXJjZXMgZnJl
ZWQKKyAgICAvLyBieSBkZWxldGVDb250ZW50c1RleHR1cmVzUmVzb3VyY2VzT25JbXBsVGhyZWFk
LgorICAgIHZvaWQgZGVzdHJveVRleHR1cmVzRGVsZXRlZEJ5SW1wbFRocmVhZCgpOwogCiAgICAg
Ym9vbCB2aXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV92aXNpYmxlOyB9CiAgICAgdm9pZCBzZXRW
aXNpYmxlKGJvb2wpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRl
eCA3MDEwNTUwYjMyZjhlZTg2NzI2ZDAwYzRmYWUzMGI5OGUzZjJkNzc1Li5mOWJkMTA5NGM4NWYz
ZGVlOWIzM2ZhYTM2MmMxZWM1NDdjY2FkYzIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmNwcApAQCAtNTI1LDExICs1MjUsNyBAQCBib29sIENDTGF5ZXJUcmVlSG9zdElt
cGw6OnByZXBhcmVUb0RyYXcoRnJhbWVEYXRhJiBmcmFtZSkKIAogdm9pZCBDQ0xheWVyVHJlZUhv
c3RJbXBsOjpyZWxlYXNlQ29udGVudHNUZXh0dXJlcygpCiB7Ci0gICAgaWYgKG1fY29udGVudHNU
ZXh0dXJlc1B1cmdlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fcmVzb3VyY2VQcm92aWRlci0+
ZGVsZXRlT3duZWRSZXNvdXJjZXMoQ0NSZW5kZXJlcjo6Q29udGVudFBvb2wpOwotICAgIG1fY29u
dGVudHNUZXh0dXJlc1B1cmdlZCA9IHRydWU7Ci0gICAgbV9jbGllbnQtPnNldE5lZWRzQ29tbWl0
T25JbXBsVGhyZWFkKCk7CisgICAgbV9jbGllbnQtPmRlbGV0ZUNvbnRlbnRzVGV4dHVyZXNPbklt
cGxUaHJlYWQoKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRNZW1vcnlBbGxv
Y2F0aW9uTGltaXRCeXRlcyhzaXplX3QgYnl0ZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmgKaW5kZXggYmZkYTJiMTI5MjRkZmQyNjRmN2I1ZTRiYmQ1MmQxMWU0NjMyYjEyZi4u
M2E2ODM2MDE4MTYzYWMxMTQ4NGFhNTdmNzU1NzgxZGEyMDA1MzRmZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuaApAQCAtNTksNiArNTksNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCkgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCBzZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
cG9zdEFuaW1hdGlvbkV2ZW50c1RvTWFpblRocmVhZE9uSW1wbFRocmVhZChQYXNzT3duUHRyPEND
QW5pbWF0aW9uRXZlbnRzVmVjdG9yPiwgZG91YmxlIHdhbGxDbG9ja1RpbWUpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZGVsZXRlQ29udGVudHNUZXh0dXJlc09uSW1wbFRocmVhZCgpID0gMDsKIH07
CiAKIC8vIENDTGF5ZXJUcmVlSG9zdEltcGwgb3ducyB0aGUgQ0NMYXllckltcGwgdHJlZSBhcyB3
ZWxsIGFzIGFzc29jaWF0ZWQgcmVuZGVyaW5nIHN0YXRlCkBAIC0xNTUsNyArMTU2LDcgQEAgcHVi
bGljOgogICAgIGludCBzb3VyY2VGcmFtZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNl
RnJhbWVOdW1iZXI7IH0KICAgICB2b2lkIHNldFNvdXJjZUZyYW1lTnVtYmVyKGludCBmcmFtZU51
bWJlcikgeyBtX3NvdXJjZUZyYW1lTnVtYmVyID0gZnJhbWVOdW1iZXI7IH0KIAotICAgIGJvb2wg
Y29udGVudHNUZXh0dXJlc1B1cmdlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNUZXh0dXJl
c1B1cmdlZDsgfQorICAgIHZvaWQgc2V0Q29udGVudHNUZXh0dXJlc1B1cmdlZCgpIHsgbV9jb250
ZW50c1RleHR1cmVzUHVyZ2VkID0gdHJ1ZTsgfQogICAgIHZvaWQgcmVzZXRDb250ZW50c1RleHR1
cmVzUHVyZ2VkKCkgeyBtX2NvbnRlbnRzVGV4dHVyZXNQdXJnZWQgPSBmYWxzZTsgfQogICAgIHNp
emVfdCBtZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fbWVtb3J5
QWxsb2NhdGlvbkxpbWl0Qnl0ZXM7IH0KIApAQCAtMjc4LDYgKzI3OSwxMCBAQCBwcml2YXRlOgog
ICAgIEludFNpemUgbV9kZXZpY2VWaWV3cG9ydFNpemU7CiAgICAgZmxvYXQgbV9kZXZpY2VTY2Fs
ZUZhY3RvcjsKICAgICBib29sIG1fdmlzaWJsZTsKKworICAgIC8vIFNldCB3aGVuIHRoZSBpbXBs
IHRocmVhZCBkZWxldGVzIHRleHR1cmVzLCB1bi1zZXQgd2hlbiB0aGUgaW1wbCdzIGxheWVyIHRy
ZWUKKyAgICAvLyBpcyBrbm93biB0byBub3QgcmVmZXJlbmNlIGFueSBkZWxldGVkIHJlc291cmNl
cy4gVXNlZCB0byBwcmV2ZW50IGRyYXdpbmcKKyAgICAvLyB3aXRoIGRlbGV0ZWQgcmVzb3VyY2Vz
LgogICAgIGJvb2wgbV9jb250ZW50c1RleHR1cmVzUHVyZ2VkOwogICAgIHNpemVfdCBtX21lbW9y
eUFsbG9jYXRpb25MaW1pdEJ5dGVzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4
dHVyZS5jcHAKaW5kZXggZDlmNjhhZjBhZTBiOTkyODEzM2EyMzJkNzQxNjkyNDc2MTIwNmRkYi4u
NjllNDNlOTY4YzI3M2I2ODY3ZWZlMjc0N2RjZmQ3ZmI3OWFkZTAxMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRl
eHR1cmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlLmNwcApAQCAtMTA2LDYgKzEwNiw3IEBAIHZvaWQgQ0NQ
cmlvcml0aXplZFRleHR1cmU6OnVwbG9hZChDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJv
dmlkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCog
aW1hZ2UsIGNvbnN0IEludFJlY3QmIGltYWdlUmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRTaXplJiBkZXN0
T2Zmc2V0KQogeworICAgIEFTU0VSVCghYmFja2luZ1dhc0FzeW5jaHJvbm91c2x5RGVsZXRlZCgp
KTsKICAgICBBU1NFUlQobV9pc0Fib3ZlUHJpb3JpdHlDdXRvZmYpOwogICAgIGlmIChtX2lzQWJv
dmVQcmlvcml0eUN1dG9mZikKICAgICAgICAgYWNxdWlyZUJhY2tpbmdUZXh0dXJlKHJlc291cmNl
UHJvdmlkZXIpOwpAQCAtMTEzLDYgKzExNCwxMyBAQCB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJl
Ojp1cGxvYWQoQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyLAogICAgIHJlc291
cmNlUHJvdmlkZXItPnVwbG9hZChyZXNvdXJjZUlkKCksIGltYWdlLCBpbWFnZVJlY3QsIHNvdXJj
ZVJlY3QsIGRlc3RPZmZzZXQpOwogfQogCitib29sIENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpiYWNr
aW5nV2FzQXN5bmNocm9ub3VzbHlEZWxldGVkKCkgY29uc3QKK3sKKyAgICBpZiAobV9iYWNraW5n
KQorICAgICAgICByZXR1cm4gbV9iYWNraW5nLT5yZXNvdXJjZURlbGV0ZWQoKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmU6OmxpbmsoQmFja2luZyog
YmFja2luZykKIHsKICAgICBBU1NFUlQoYmFja2luZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0
aXplZFRleHR1cmUuaAppbmRleCAzNzg5ZDdmMjY5YTNkN2U1MTk1YTg5MmRkZDM3NmRhZTYxOGQy
YjBlLi4xM2JhOTY2MjZmOGY1YWMyNzYwYWI1MDQwMjkzMGE4MGY2OGFjMDQxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRp
emVkVGV4dHVyZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlLmgKQEAgLTg4LDYgKzg4LDggQEAgcHVibGljOgog
ICAgIC8vIFVwbG9hZHMgcGl4ZWxzIGludG8gdGhlIGJhY2tpbmcgcmVzb3VyY2UuIFRoaXMgZnVu
Y3Rpb25zIHdpbGwgYXF1aXJlIHRoZSBiYWNraW5nIGlmIG5lZWRlZC4KICAgICB2b2lkIHVwbG9h
ZChDQ1Jlc291cmNlUHJvdmlkZXIqLCBjb25zdCB1aW50OF90KiBpbWFnZSwgY29uc3QgSW50UmVj
dCYgaW1hZ2VSZWN0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRTaXplJiBk
ZXN0T2Zmc2V0KTsKIAorICAgIGJvb2wgYmFja2luZ1dhc0FzeW5jaHJvbm91c2x5RGVsZXRlZCgp
IGNvbnN0OworCiAgICAgQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJjZUlkIHJlc291cmNlSWQo
KSBjb25zdDsKIAogICAgIC8vIFNlbGYtbWFuYWdlZCB0ZXh0dXJlcyBhcmUgYWNjb3VudGVkIGZv
ciB3aGVuIHByaW9yaXRpemluZyBvdGhlciB0ZXh0dXJlcywKQEAgLTEwNSwxMyArMTA3LDE3IEBA
IHByaXZhdGU6CiAgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJhY2tpbmcpOwogICAgIHB1
YmxpYzoKICAgICAgICAgQmFja2luZyh1bnNpZ25lZCBpZCwgSW50U2l6ZSBzaXplLCBHQzNEZW51
bSBmb3JtYXQpCi0gICAgICAgICAgICA6IENDVGV4dHVyZShpZCwgc2l6ZSwgZm9ybWF0KSwgbV9v
d25lcigwKSB7IH0KLSAgICAgICAgfkJhY2tpbmcoKSB7IEFTU0VSVCghbV9vd25lcik7IH0KKyAg
ICAgICAgICAgIDogQ0NUZXh0dXJlKGlkLCBzaXplLCBmb3JtYXQpLCBtX293bmVyKDApLCBtX3Jl
c291cmNlRGVsZXRlZChmYWxzZSkgeyB9CisgICAgICAgIH5CYWNraW5nKCkgeyBBU1NFUlQoIW1f
b3duZXIgJiYgbV9yZXNvdXJjZURlbGV0ZWQpOyB9CisKKyAgICAgICAgQ0NQcmlvcml0aXplZFRl
eHR1cmUqIG93bmVyKCkgY29uc3QgeyByZXR1cm4gbV9vd25lcjsgfQorICAgICAgICBib29sIHJl
c291cmNlRGVsZXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VEZWxldGVkOyB9CiAKLSAg
ICAgICAgQ0NQcmlvcml0aXplZFRleHR1cmUqIG93bmVyKCkgeyByZXR1cm4gbV9vd25lcjsgfQog
ICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBDQ1ByaW9yaXRpemVkVGV4dHVyZTsK
KyAgICAgICAgZnJpZW5kIGNsYXNzIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjsKICAgICAg
ICAgQ0NQcmlvcml0aXplZFRleHR1cmUqIG1fb3duZXI7CisgICAgICAgIGJvb2wgbV9yZXNvdXJj
ZURlbGV0ZWQ7CiAgICAgfTsKIAogICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlKENDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlciosIEludFNpemUsIEdDM0RlbnVtIGZvcm1hdCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRp
emVkVGV4dHVyZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmNwcAppbmRleCA5NmZiMDVk
OTQ1MmIxMTc2ZTI5YjQ3N2VhN2Y1ODM1ZTJjMzEwODVmLi40YmU0ZDdiM2FlMjJmZjRlMjRhNjY2
YThlZDUwNmJjYTRhYTZhM2JkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlci5jcHAKQEAgLTUxLDggKzUxLDkgQEAgQ0NQcmlvcml0aXplZFRleHR1
cmVNYW5hZ2VyOjp+Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyKCkKIAogICAgIC8vIEVhY2gg
cmVtYWluaW5nIGJhY2tpbmcgaXMgYSBsZWFrZWQgb3BlbmdsIHRleHR1cmUuIFdlIGRvbid0IGhh
dmUgdGhlIHJlc291cmNlUHJvdmlkZXIKICAgICAvLyB0byBkZWxldGUgdGhlIHRleHR1cmVzIGF0
IHRoaXMgdGltZSBzbyBjbGVhck1lbW9yeSgpIG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmUgdGhp
cy4KKyAgICBtX2JhY2tpbmdzRnJlZWRCeUltcGxUaHJlYWQuY2xlYXIoKTsKICAgICB3aGlsZSAo
bV9iYWNraW5ncy5zaXplKCkgPiAwKQotICAgICAgICBkZXN0cm95QmFja2luZygqbV9iYWNraW5n
cy5iZWdpbigpLCAwKTsKKyAgICAgICAgZGVzdHJveUJhY2tpbmcoKm1fYmFja2luZ3MuYmVnaW4o
KSk7CiB9CiAKIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpwcmlvcml0aXplVGV4
dHVyZXMoKQpAQCAtMTE3LDEzICsxMTgsMTYgQEAgdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI6OnByaW9yaXRpemVUZXh0dXJlcygpCiAgICAgQVNTRVJUKG1fbWVtb3J5QWJvdmVDdXRv
ZmZCeXRlcyA8PSBtX21lbW9yeUF2YWlsYWJsZUJ5dGVzKTsKIAogICAgIC8vIFB1dCBiYWNraW5n
cyBpbiBldmljdGlvbi9yZWN5Y2xpbmcgb3JkZXIuCi0gICAgZm9yIChCYWNraW5nU2V0OjppdGVy
YXRvciBpdCA9IG1fYmFja2luZ3MuYmVnaW4oKTsgaXQgIT0gbV9iYWNraW5ncy5lbmQoKTsgKytp
dCkKLSAgICAgICAgc29ydGVkQmFja2luZ3MuYXBwZW5kKCppdCk7Ci0gICAgc3RkOjpzb3J0KHNv
cnRlZEJhY2tpbmdzLmJlZ2luKCksIHNvcnRlZEJhY2tpbmdzLmVuZCgpLCBjb21wYXJlQmFja2lu
Z3MpOwotCi0gICAgZm9yIChCYWNraW5nVmVjdG9yOjppdGVyYXRvciBpdCA9IHNvcnRlZEJhY2tp
bmdzLmJlZ2luKCk7IGl0ICE9IHNvcnRlZEJhY2tpbmdzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAg
IG1fYmFja2luZ3MucmVtb3ZlKCppdCk7Ci0gICAgICAgIG1fYmFja2luZ3MuYWRkKCppdCk7Cisg
ICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrKG1fYmFja2luZ3NNdXRleCk7CisgICAgICAg
IGZvciAoQmFja2luZ1NldDo6aXRlcmF0b3IgaXQgPSBtX2JhY2tpbmdzLmJlZ2luKCk7IGl0ICE9
IG1fYmFja2luZ3MuZW5kKCk7ICsraXQpCisgICAgICAgICAgICBzb3J0ZWRCYWNraW5ncy5hcHBl
bmQoKml0KTsKKyAgICAgICAgc3RkOjpzb3J0KHNvcnRlZEJhY2tpbmdzLmJlZ2luKCksIHNvcnRl
ZEJhY2tpbmdzLmVuZCgpLCBjb21wYXJlQmFja2luZ3MpOworCisgICAgICAgIGZvciAoQmFja2lu
Z1ZlY3Rvcjo6aXRlcmF0b3IgaXQgPSBzb3J0ZWRCYWNraW5ncy5iZWdpbigpOyBpdCAhPSBzb3J0
ZWRCYWNraW5ncy5lbmQoKTsgKytpdCkgeworICAgICAgICAgICAgbV9iYWNraW5ncy5yZW1vdmUo
Kml0KTsKKyAgICAgICAgICAgIG1fYmFja2luZ3MuYWRkKCppdCk7CisgICAgICAgIH0KICAgICB9
CiAKICAgICBzb3J0ZWRUZXh0dXJlcy5jbGVhcigpOwpAQCAtMTYyLDYgKzE2Niw3IEBAIGJvb2wg
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpyZXF1ZXN0TGF0ZShDQ1ByaW9yaXRpemVkVGV4
dHVyZSogdGV4dHVyZSkKICAgICBtX21lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMgPSBuZXdNZW1vcnlC
eXRlczsKICAgICB0ZXh0dXJlLT5zZXRBYm92ZVByaW9yaXR5Q3V0b2ZmKHRydWUpOwogICAgIGlm
ICh0ZXh0dXJlLT5iYWNraW5nKCkpIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX2JhY2tp
bmdzTXV0ZXgpOwogICAgICAgICBtX2JhY2tpbmdzLnJlbW92ZSh0ZXh0dXJlLT5iYWNraW5nKCkp
OwogICAgICAgICBtX2JhY2tpbmdzLmFkZCh0ZXh0dXJlLT5iYWNraW5nKCkpOwogICAgIH0KQEAg
LTE3NSw2ICsxODAsMTAgQEAgdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmFjcXVp
cmVCYWNraW5nVGV4dHVyZUlmTmVlZGVkKENDUHJpb3JpdGl6ZWRUZXgKICAgICBpZiAodGV4dHVy
ZS0+YmFja2luZygpIHx8ICF0ZXh0dXJlLT5pc0Fib3ZlUHJpb3JpdHlDdXRvZmYoKSkKICAgICAg
ICAgcmV0dXJuOwogCisgICAgLy8gVGhpcyBsb2NrIGlzIG5vdCBzdHJpY3RseSBuZWNlc3Nhcnkg
YmVjYXVzZSB0aGlzIGNhbGwgaXMgbWFkZSBieSB0aGUgaW1wbCB0aHJlYWQKKyAgICAvLyB3aGls
ZSB0aGUgbWFpbiB0aHJlYWQgaXMgd2FpdGluZyBmb3IgdGhlIGltcGwgdGhyZWFkLgorICAgIE11
dGV4TG9ja2VyIGxvY2sobV9iYWNraW5nc011dGV4KTsKKwogICAgIC8vIEZpbmQgYSBiYWNraW5n
IGJlbG93LCBieSBlaXRoZXIgcmVjeWNsaW5nIG9yIGFsbG9jYXRpbmcuCiAgICAgQ0NQcmlvcml0
aXplZFRleHR1cmU6OkJhY2tpbmcqIGJhY2tpbmcgPSAwOwogCkBAIC0yMDQsNiArMjEzLDggQEAg
dm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmFjcXVpcmVCYWNraW5nVGV4dHVyZUlm
TmVlZGVkKENDUHJpb3JpdGl6ZWRUZXgKIAogdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFn
ZXI6OnJlZHVjZU1lbW9yeShzaXplX3QgbGltaXRCeXRlcywgQ0NSZXNvdXJjZVByb3ZpZGVyKiBy
ZXNvdXJjZVByb3ZpZGVyKQogeworICAgIC8vIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IG1f
YmFja2luZ3NNdXRleCBpcyBoZWxkIQorCiAgICAgaWYgKG1lbW9yeVVzZUJ5dGVzKCkgPD0gbGlt
aXRCeXRlcykKICAgICAgICAgcmV0dXJuOwogICAgIC8vIERlc3Ryb3kgYmFja2luZ3MgdW50aWwg
d2UgYXJlIGJlbG93IHRoZSBsaW1pdCwKQEAgLTIxMiwxMiArMjIzLDIzIEBAIHZvaWQgQ0NQcmlv
cml0aXplZFRleHR1cmVNYW5hZ2VyOjpyZWR1Y2VNZW1vcnkoc2l6ZV90IGxpbWl0Qnl0ZXMsIEND
UmVzb3VyY2VQcm92CiAgICAgICAgIEJhY2tpbmdTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9iYWNraW5n
cy5iZWdpbigpOwogICAgICAgICBpZiAoKCppdCktPm93bmVyKCkgJiYgKCppdCktPm93bmVyKCkt
PmlzQWJvdmVQcmlvcml0eUN1dG9mZigpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRl
c3Ryb3lCYWNraW5nKCgqaXQpLCByZXNvdXJjZVByb3ZpZGVyKTsKKyAgICAgICAgaWYgKCgqaXQp
LT5tX3Jlc291cmNlRGVsZXRlZCkgeworICAgICAgICAgICAgQVNTRVJUKG1fYmFja2luZ3NGcmVl
ZEJ5SW1wbFRocmVhZC5maW5kKCgqaXQpKSAhPSBtX2JhY2tpbmdzRnJlZWRCeUltcGxUaHJlYWQu
ZW5kKCkpOworICAgICAgICAgICAgbV9iYWNraW5nc0ZyZWVkQnlJbXBsVGhyZWFkLnJlbW92ZSgo
Kml0KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXNvdXJjZVByb3ZpZGVyLT5k
ZWxldGVSZXNvdXJjZSgoKml0KS0+aWQoKSk7CisgICAgICAgICAgICAoKml0KS0+bV9yZXNvdXJj
ZURlbGV0ZWQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGRlc3Ryb3lCYWNraW5nKCgqaXQp
KTsKICAgICB9CiB9CiAKIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpyZWR1Y2VN
ZW1vcnkoQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyKQogeworICAgIC8vIFRo
aXMgbG9jayBpcyBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IGJlY2F1c2UgdGhpcyBjYWxsIGlzIG1h
ZGUgYnkgdGhlIGltcGwgdGhyZWFkCisgICAgLy8gd2hpbGUgdGhlIG1haW4gdGhyZWFkIGlzIHdh
aXRpbmcgZm9yIHRoZSBpbXBsIHRocmVhZC4KKyAgICBNdXRleExvY2tlciBsb2NrKG1fYmFja2lu
Z3NNdXRleCk7CisKICAgICByZWR1Y2VNZW1vcnkobV9tZW1vcnlBdmFpbGFibGVCeXRlcywgcmVz
b3VyY2VQcm92aWRlcik7CiAgICAgQVNTRVJUKG1lbW9yeVVzZUJ5dGVzKCkgPD0gbWF4TWVtb3J5
TGltaXRCeXRlcygpKTsKIApAQCAtMjM4LDI1ICsyNjAsNDIgQEAgdm9pZCBDQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXI6OnJlZHVjZU1lbW9yeShDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNl
UHJvdmkKICAgICByZWR1Y2VNZW1vcnkobWVtb3J5VXNlQnl0ZXMoKSAtICh3YXN0ZWRNZW1vcnkg
LSB0ZW5QZXJjZW50T2ZNZW1vcnkpLCByZXNvdXJjZVByb3ZpZGVyKTsKIH0KIAotdm9pZCBDQ1By
aW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNsZWFyQWxsTWVtb3J5KENDUmVzb3VyY2VQcm92aWRl
ciogcmVzb3VyY2VQcm92aWRlcikKK2Jvb2wgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpk
ZWxldGVCYWNraW5nc1Jlc291cmNlc09uSW1wbFRocmVhZChDQ1Jlc291cmNlUHJvdmlkZXIqIHJl
c291cmNlUHJvdmlkZXIpCiB7Ci0gICAgLy8gVW5saW5rIGFuZCBkZXN0cm95IGFsbCBiYWNraW5n
IHRleHR1cmVzLgotICAgIHdoaWxlIChtX2JhY2tpbmdzLnNpemUoKSA+IDApIHsKLSAgICAgICAg
QmFja2luZ1NldDo6aXRlcmF0b3IgaXQgPSBtX2JhY2tpbmdzLmJlZ2luKCk7Ci0gICAgICAgIGlm
ICgoKml0KS0+b3duZXIoKSkKLSAgICAgICAgICAgICgqaXQpLT5vd25lcigpLT51bmxpbmsoKTsK
LSAgICAgICAgZGVzdHJveUJhY2tpbmcoKCppdCksIHJlc291cmNlUHJvdmlkZXIpOworICAgIEND
UmVzb3VyY2VQcm92aWRlcjo6UmVzb3VyY2VJZEFycmF5IHJlc291cmNlc1RvRGVsZXRlOworICAg
IHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX2JhY2tpbmdzTXV0ZXgpOworICAgICAgICBm
b3IgKEJhY2tpbmdTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9iYWNraW5ncy5iZWdpbigpOyBpdCAhPSBt
X2JhY2tpbmdzLmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICBpZiAoISgqaXQpLT5yZXNvdXJj
ZURlbGV0ZWQoKSkgeworICAgICAgICAgICAgICAgICgqaXQpLT5tX3Jlc291cmNlRGVsZXRlZCA9
IHRydWU7CisgICAgICAgICAgICAgICAgcmVzb3VyY2VzVG9EZWxldGUuYXBwZW5kKCgqaXQpLT5p
ZCgpKTsKKyAgICAgICAgICAgICAgICBtX2JhY2tpbmdzRnJlZWRCeUltcGxUaHJlYWQuYWRkKCgq
aXQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KKyAgICBmb3IgKENDUmVzb3Vy
Y2VQcm92aWRlcjo6UmVzb3VyY2VJZEFycmF5OjppdGVyYXRvciBpdCA9IHJlc291cmNlc1RvRGVs
ZXRlLmJlZ2luKCk7IGl0ICE9IHJlc291cmNlc1RvRGVsZXRlLmVuZCgpOyArK2l0KQorICAgICAg
ICByZXNvdXJjZVByb3ZpZGVyLT5kZWxldGVSZXNvdXJjZSgoKml0KSk7CisgICAgcmV0dXJuICFy
ZXNvdXJjZXNUb0RlbGV0ZS5pc0VtcHR5KCk7CiB9CiAKLXZvaWQgQ0NQcmlvcml0aXplZFRleHR1
cmVNYW5hZ2VyOjphbGxCYWNraW5nVGV4dHVyZXNXZXJlRGVsZXRlZCgpCit2b2lkIENDUHJpb3Jp
dGl6ZWRUZXh0dXJlTWFuYWdlcjo6ZGVzdHJveUJhY2tpbmdzRnJlZWRCeUltcGxUaHJlYWQoKQog
ewotICAgIC8vIFNhbWUgYXMgY2xlYXJBbGxNZW1vcnksIGV4Y2VwdCBhbGwgb3VyIHRleHR1cmVz
IHdlcmUgYWxyZWFkeQotICAgIC8vIGRlbGV0ZWQgZXh0ZXJuYWxseSwgc28gd2UgZG9uJ3QgZGVs
ZXRlIHRoZW0uIFBhc3Npbmcgbm8KLSAgICAvLyByZXNvdXJjZVByb3ZpZGVyIHJlc3VsdHMgaW4g
bGVha2luZyB0aGUgKG5vdyBpbnZhbGlkKSB0ZXh0dXJlIGlkcy4KLSAgICBjbGVhckFsbE1lbW9y
eSgwKTsKKyAgICBNdXRleExvY2tlciBsb2NrKG1fYmFja2luZ3NNdXRleCk7CisgICAgd2hpbGUg
KCFtX2JhY2tpbmdzRnJlZWRCeUltcGxUaHJlYWQuaXNFbXB0eSgpKSB7CisgICAgICAgIEJhY2tp
bmdTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9iYWNraW5nc0ZyZWVkQnlJbXBsVGhyZWFkLmJlZ2luKCk7
CisgICAgICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nKiBiYWNraW5nID0gKCppdCk7
CisgICAgICAgIG1fYmFja2luZ3NGcmVlZEJ5SW1wbFRocmVhZC5yZW1vdmUoaXQpOworICAgICAg
ICBkZXN0cm95QmFja2luZyhiYWNraW5nKTsKKyAgICB9Cit9CisKK3ZvaWQgQ0NQcmlvcml0aXpl
ZFRleHR1cmVNYW5hZ2VyOjpjbGVhckFsbE1lbW9yeShDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291
cmNlUHJvdmlkZXIpCit7CisgICAgZGVsZXRlQmFja2luZ3NSZXNvdXJjZXNPbkltcGxUaHJlYWQo
cmVzb3VyY2VQcm92aWRlcik7CisgICAgZGVzdHJveUJhY2tpbmdzRnJlZWRCeUltcGxUaHJlYWQo
KTsKIH0KIAorCiB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmVnaXN0ZXJUZXh0
dXJlKENDUHJpb3JpdGl6ZWRUZXh0dXJlKiB0ZXh0dXJlKQogewogICAgIEFTU0VSVCh0ZXh0dXJl
KTsKQEAgLTI2Niw3ICszMDUsNiBAQCB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6
cmVnaXN0ZXJUZXh0dXJlKENDUHJpb3JpdGl6ZWRUZXh0dXJlKiB0ZXh0dXJlKQogCiAgICAgdGV4
dHVyZS0+c2V0TWFuYWdlckludGVybmFsKHRoaXMpOwogICAgIG1fdGV4dHVyZXMuYWRkKHRleHR1
cmUpOwotCiB9CiAKIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjp1bnJlZ2lzdGVy
VGV4dHVyZShDQ1ByaW9yaXRpemVkVGV4dHVyZSogdGV4dHVyZSkKQEAgLTI4NSw2ICszMjMsNyBA
QCB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmV0dXJuQmFja2luZ1RleHR1cmUo
Q0NQcmlvcml0aXplZFRleHR1cmUqIHRleAogewogICAgIGlmICh0ZXh0dXJlLT5iYWNraW5nKCkp
IHsKICAgICAgICAgLy8gTW92ZSB0aGUgYmFja2luZyB0ZXh0dXJlIHRvIHRoZSBmcm9udCBmb3Ig
ZXZpY3Rpb24vcmVjeWNsaW5nIGFuZCB1bmxpbmsgaXQuCisgICAgICAgIE11dGV4TG9ja2VyIGxv
Y2sobV9iYWNraW5nc011dGV4KTsKICAgICAgICAgbV9iYWNraW5ncy5yZW1vdmUodGV4dHVyZS0+
YmFja2luZygpKTsKICAgICAgICAgbV9iYWNraW5ncy5pbnNlcnRCZWZvcmUobV9iYWNraW5ncy5i
ZWdpbigpLCB0ZXh0dXJlLT5iYWNraW5nKCkpOwogICAgICAgICB0ZXh0dXJlLT51bmxpbmsoKTsK
QEAgLTI5Myw2ICszMzIsOCBAQCB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmV0
dXJuQmFja2luZ1RleHR1cmUoQ0NQcmlvcml0aXplZFRleHR1cmUqIHRleAogCiBDQ1ByaW9yaXRp
emVkVGV4dHVyZTo6QmFja2luZyogQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGVC
YWNraW5nKEludFNpemUgc2l6ZSwgR0MzRGVudW0gZm9ybWF0LCBDQ1Jlc291cmNlUHJvdmlkZXIq
IHJlc291cmNlUHJvdmlkZXIpCiB7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQg
bV9iYWNraW5nc011dGV4IGlzIGhlbGQhCisKICAgICBBU1NFUlQocmVzb3VyY2VQcm92aWRlcik7
CiAKICAgICBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNlSWQgcmVzb3VyY2VJZCA9IHJlc291
cmNlUHJvdmlkZXItPmNyZWF0ZVJlc291cmNlKG1fcG9vbCwgc2l6ZSwgZm9ybWF0LCBDQ1Jlc291
cmNlUHJvdmlkZXI6OlRleHR1cmVVc2FnZUFueSk7CkBAIC0zMDMsMTUgKzM0NCwxNyBAQCBDQ1By
aW9yaXRpemVkVGV4dHVyZTo6QmFja2luZyogQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpj
cmVhdGVCYWNraW5nKEludFNpegogICAgIHJldHVybiBiYWNraW5nOwogfQogCi12b2lkIENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6ZGVzdHJveUJhY2tpbmcoQ0NQcmlvcml0aXplZFRleHR1
cmU6OkJhY2tpbmcqIGJhY2tpbmcsIENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRl
cikKK3ZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpkZXN0cm95QmFja2luZyhDQ1By
aW9yaXRpemVkVGV4dHVyZTo6QmFja2luZyogYmFja2luZykKIHsKKyAgICAvLyBUaGlzIGZ1bmN0
aW9uIGFzc3VtZXMgdGhhdCBtX2JhY2tpbmdzTXV0ZXggaXMgaGVsZCEKKwogICAgIEFTU0VSVChi
YWNraW5nKTsKLSAgICBBU1NFUlQoIWJhY2tpbmctPm93bmVyKCkgfHwgIWJhY2tpbmctPm93bmVy
KCktPmlzQWJvdmVQcmlvcml0eUN1dG9mZigpKTsKKyAgICBBU1NFUlQoYmFja2luZy0+cmVzb3Vy
Y2VEZWxldGVkKCkgfHwgIWJhY2tpbmctPm93bmVyKCkgfHwgIWJhY2tpbmctPm93bmVyKCktPmlz
QWJvdmVQcmlvcml0eUN1dG9mZigpKTsKICAgICBBU1NFUlQoIWJhY2tpbmctPm93bmVyKCkgfHwg
IWJhY2tpbmctPm93bmVyKCktPmlzU2VsZk1hbmFnZWQoKSk7CiAgICAgQVNTRVJUKG1fYmFja2lu
Z3MuZmluZChiYWNraW5nKSAhPSBtX2JhY2tpbmdzLmVuZCgpKTsKKyAgICBBU1NFUlQoYmFja2lu
Zy0+cmVzb3VyY2VEZWxldGVkKCkpOworICAgIEFTU0VSVChtX2JhY2tpbmdzRnJlZWRCeUltcGxU
aHJlYWQuZmluZChiYWNraW5nKSA9PSBtX2JhY2tpbmdzRnJlZWRCeUltcGxUaHJlYWQuZW5kKCkp
OwogCi0gICAgaWYgKHJlc291cmNlUHJvdmlkZXIpCi0gICAgICAgIHJlc291cmNlUHJvdmlkZXIt
PmRlbGV0ZVJlc291cmNlKGJhY2tpbmctPmlkKCkpOwogICAgIGlmIChiYWNraW5nLT5vd25lcigp
KQogICAgICAgICBiYWNraW5nLT5vd25lcigpLT51bmxpbmsoKTsKICAgICBtX21lbW9yeVVzZUJ5
dGVzIC09IGJhY2tpbmctPmJ5dGVzKCk7CkBAIC0zMjAsMTAgKzM2MywxMSBAQCB2b2lkIENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6ZGVzdHJveUJhY2tpbmcoQ0NQcmlvcml0aXplZFRleHR1
cmU6OkJhY2tpbmcqCiAgICAgZGVsZXRlIGJhY2tpbmc7CiB9CiAKLQogI2lmICFBU1NFUlRfRElT
QUJMRUQKIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjphc3NlcnRJbnZhcmlhbnRz
KCkKIHsKKyAgICBNdXRleExvY2tlciBsb2NrKG1fYmFja2luZ3NNdXRleCk7CisKICAgICAvLyBJ
ZiB3ZSBoaXQgYW55IG9mIHRoZXNlIGFzc2VydHMsIHRoZXJlIGlzIGEgYnVnIGluIHRoaXMgY2xh
c3MuIFRvIHNlZQogICAgIC8vIHdoZXJlIHRoZSBidWcgaXMsIGNhbGwgdGhpcyBmdW5jdGlvbiBh
dCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YKICAgICAvLyBldmVyeSBwdWJsaWMgZnVuY3Rpb24u
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5oCmluZGV4
IDEzZGJjNTE3NmJjZDc4ZWUyOTcwOTBhNjc2NTEyNDVmOWJkNzY0Y2EuLjk5YzNhZWJhZmQ2YmRi
ZTY0OGU2ODExYWI5YWU4NzUxODRiODJmYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5oCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiSW50
U2l6ZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNo
U2V0Lmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTc3LDggKzc4LDE1IEBAIHB1
YmxpYzoKICAgICBib29sIHJlcXVlc3RMYXRlKENDUHJpb3JpdGl6ZWRUZXh0dXJlKik7CiAKICAg
ICB2b2lkIHJlZHVjZU1lbW9yeShDQ1Jlc291cmNlUHJvdmlkZXIqKTsKKworICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiByZXNvdXJjZXMgYXJlIGRlbGV0ZWQgYXMgYSByZXN1bHQgb2YgdGhpcyBjYWxs
LgorICAgIC8vIE5vdGUgdGhlIG11bHRpdGhyZWFkaW5nIHByb3BlcnRpZXMgb2YgdGhpcyBjYWxs
IGRvY3VtZW50ZWQgYXQKKyAgICAvLyBtX2JhY2tpbmdzTXV0ZXgncyBkZWZpbml0aW9uLgorICAg
IGJvb2wgZGVsZXRlQmFja2luZ3NSZXNvdXJjZXNPbkltcGxUaHJlYWQoQ0NSZXNvdXJjZVByb3Zp
ZGVyKik7CisKKyAgICB2b2lkIGRlc3Ryb3lCYWNraW5nc0ZyZWVkQnlJbXBsVGhyZWFkKCk7CisK
ICAgICB2b2lkIGNsZWFyQWxsTWVtb3J5KENDUmVzb3VyY2VQcm92aWRlciopOwotICAgIHZvaWQg
YWxsQmFja2luZ1RleHR1cmVzV2VyZURlbGV0ZWQoKTsKIAogICAgIHZvaWQgYWNxdWlyZUJhY2tp
bmdUZXh0dXJlSWZOZWVkZWQoQ0NQcmlvcml0aXplZFRleHR1cmUqLCBDQ1Jlc291cmNlUHJvdmlk
ZXIqKTsKIApAQCAtMTEzLDcgKzEyMSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWR1Y2VNZW1v
cnkoc2l6ZV90IGxpbWl0LCBDQ1Jlc291cmNlUHJvdmlkZXIqKTsKIAogICAgIENDUHJpb3JpdGl6
ZWRUZXh0dXJlOjpCYWNraW5nKiBjcmVhdGVCYWNraW5nKEludFNpemUsIEdDM0RlbnVtIGZvcm1h
dCwgQ0NSZXNvdXJjZVByb3ZpZGVyKik7Ci0gICAgdm9pZCBkZXN0cm95QmFja2luZyhDQ1ByaW9y
aXRpemVkVGV4dHVyZTo6QmFja2luZyosIENDUmVzb3VyY2VQcm92aWRlciopOworICAgIHZvaWQg
ZGVzdHJveUJhY2tpbmcoQ0NQcmlvcml0aXplZFRleHR1cmU6OkJhY2tpbmcqKTsKIAogICAgIHNp
emVfdCBtX21heE1lbW9yeUxpbWl0Qnl0ZXM7CiAgICAgdW5zaWduZWQgbV9wcmlvcml0eUN1dG9m
ZjsKQEAgLTEzMiw2ICsxNDAsMTUgQEAgcHJpdmF0ZToKIAogICAgIFRleHR1cmVWZWN0b3IgbV90
ZW1wVGV4dHVyZVZlY3RvcjsKICAgICBCYWNraW5nVmVjdG9yIG1fdGVtcEJhY2tpbmdWZWN0b3I7
CisgICAgQmFja2luZ1NldCBtX2JhY2tpbmdzRnJlZWRCeUltcGxUaHJlYWQ7CisKKyAgICAvLyBU
aGlzIG11dGV4IG11c3QgYmUgaGVsZCB3aGVuIGFjY2Vzc2luZyB0aGUgbV9iYWNraW5ncyBhbmQg
bV9iYWNraW5nc0ZyZWVkQnlJbXBsVGhyZWFkIHZlY3RvcnMuCisgICAgLy8gVGhpcyBjbGFzcyBp
cyB0aHJlYWQtc2FmZSBpbiB0aGUgc2Vuc2UgdGhhdCBvbmx5IHRoZSBmb2xsb3dpbmcgdmVyeSBy
ZXN0cmljdGVkIG11bHRpLXRocmVhZGVkIAorICAgIC8vIGFjY2VzcyBwYXR0ZXJuIGlzIGFsbG93
ZWQ6CisgICAgLy8gLSBhbGwgY2FsbHMgdG8gYWxsIGZ1bmN0aW9ucyBleGNlcHQgZGVsZXRlQmFj
a2luZ3NSZXNvdXJjZXNPbkltcGxUaHJlYWQgbXVzdCBiZSBtYWRlIHNlcXVlbnRpYWxseQorICAg
IC8vIC0gY2FsbHMgdG8gZGVsZXRlQmFja2luZ3NSZXNvdXJjZXNPbkltcGxUaHJlYWQgZnJvbSBh
bm90aGVyIHRocmVhZCBtYXkgaGFwcGVuIGF0IGFueSB0aW1lLCBleGNlcHQKKyAgICAvLyAgIGR1
cmluZyB0aGUgZnVuY3Rpb25zIGFjcXVpcmVCYWNraW5nVGV4dHVyZUlmTmVlZGVkIGFuZCByZWR1
Y2VNZW1vcnkKKyAgICBNdXRleCBtX2JhY2tpbmdzTXV0ZXg7CiB9OwogCiB9IC8vIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDU2NoZWR1bGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDU2NoZWR1bGVyLmNwcAppbmRleCA5OTlhMDhlYzlkMDUxNDgxNzRkMTNjMGZhNTI4
OGJlZjFiMmRiZjYzLi5lNDFkOTU1YWI5NWIxZDYwMjI1NzBmMDUzYjIxOGJjMTdiMTdkNjdkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1NjaGVkdWxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NTY2hlZHVsZXIuY3BwCkBAIC05OSw2ICs5OSw3IEBAIHZvaWQgQ0NTY2hlZHVs
ZXI6OmJlZ2luRnJhbWVBYm9ydGVkKCkKICAgICBUUkFDRV9FVkVOVDAoImNjIiwgIkNDU2NoZWR1
bGVyOjpiZWdpbkZyYW1lQWJvcnRlZCIpOwogICAgIG1fc3RhdGVNYWNoaW5lLmJlZ2luRnJhbWVB
Ym9ydGVkKCk7CiAgICAgcHJvY2Vzc1NjaGVkdWxlZEFjdGlvbnMoKTsKKyAgICBzZXROZWVkc0Nv
bW1pdCgpOwogfQogCiB2b2lkIENDU2NoZWR1bGVyOjpzZXRNYXhGcmFtZXNQZW5kaW5nKGludCBt
YXhGcmFtZXNQZW5kaW5nKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcApp
bmRleCA2ODc2ZWEyMTg4YmFmNjY2OGEyOWFjMzdjMWNkMzhjOGNiNDQxY2U5Li5jODk1YzczNmNi
ZTM1Mjc5ZWQxNzU5NDcyZTZlODNhY2U5YjA3YWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Npbmds
ZVRocmVhZFByb3h5LmNwcApAQCAtMTU2LDggKzE1Niw3IEBAIGJvb2wgQ0NTaW5nbGVUaHJlYWRQ
cm94eTo6cmVjcmVhdGVDb250ZXh0KCkKICAgICBib29sIGluaXRpYWxpemVkOwogICAgIHsKICAg
ICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7Ci0gICAgICAgIGlmICghbV9sYXll
clRyZWVIb3N0SW1wbC0+Y29udGVudHNUZXh0dXJlc1B1cmdlZCgpKQotICAgICAgICAgICAgbV9s
YXllclRyZWVIb3N0LT5kZWxldGVDb250ZW50c1RleHR1cmVzT25JbXBsVGhyZWFkKG1fbGF5ZXJU
cmVlSG9zdEltcGwtPnJlc291cmNlUHJvdmlkZXIoKSk7CisgICAgICAgIGRlbGV0ZUNvbnRlbnRz
VGV4dHVyZXNPbkltcGxUaHJlYWQoKTsKICAgICAgICAgaW5pdGlhbGl6ZWQgPSBtX2xheWVyVHJl
ZUhvc3RJbXBsLT5pbml0aWFsaXplUmVuZGVyZXIoY29udGV4dC5yZWxlYXNlKCksIFVudGhyb3R0
bGVkVXBsb2FkZXIpOwogICAgICAgICBpZiAoaW5pdGlhbGl6ZWQpIHsKICAgICAgICAgICAgIG1f
UmVuZGVyZXJDYXBhYmlsaXRpZXNGb3JNYWluVGhyZWFkID0gbV9sYXllclRyZWVIb3N0SW1wbC0+
cmVuZGVyZXJDYXBhYmlsaXRpZXMoKTsKQEAgLTI2MCw5ICsyNTksNyBAQCB2b2lkIENDU2luZ2xl
VGhyZWFkUHJveHk6OnN0b3AoKQogICAgIHsKICAgICAgICAgRGVidWdTY29wZWRTZXRNYWluVGhy
ZWFkQmxvY2tlZCBtYWluVGhyZWFkQmxvY2tlZDsKICAgICAgICAgRGVidWdTY29wZWRTZXRJbXBs
VGhyZWFkIGltcGw7Ci0KLSAgICAgICAgaWYgKCFtX2xheWVyVHJlZUhvc3RJbXBsLT5jb250ZW50
c1RleHR1cmVzUHVyZ2VkKCkpCi0gICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmRlbGV0ZUNv
bnRlbnRzVGV4dHVyZXNPbkltcGxUaHJlYWQobV9sYXllclRyZWVIb3N0SW1wbC0+cmVzb3VyY2VQ
cm92aWRlcigpKTsKKyAgICAgICAgZGVsZXRlQ29udGVudHNUZXh0dXJlc09uSW1wbFRocmVhZCgp
OwogICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLmNsZWFyKCk7CiAgICAgfQogICAgIG1fbGF5
ZXJUcmVlSG9zdCA9IDA7CkBAIC0yNzUsNiArMjcyLDEzIEBAIHZvaWQgQ0NTaW5nbGVUaHJlYWRQ
cm94eTo6cG9zdEFuaW1hdGlvbkV2ZW50c1RvTWFpblRocmVhZE9uSW1wbFRocmVhZChQYXNzT3du
UHRyCiAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRBbmltYXRpb25FdmVudHMoZXZlbnRzLCB3YWxs
Q2xvY2tUaW1lKTsKIH0KIAordm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5OjpkZWxldGVDb250ZW50
c1RleHR1cmVzT25JbXBsVGhyZWFkKCkKK3sKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhy
ZWFkKCkpOworICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPnNldENvbnRlbnRzVGV4dHVyZXNQdXJn
ZWQoKTsKKyAgICBtX2xheWVyVHJlZUhvc3QtPmRlbGV0ZUNvbnRlbnRzVGV4dHVyZXNSZXNvdXJj
ZXNPbkltcGxUaHJlYWQobV9sYXllclRyZWVIb3N0SW1wbC0+cmVzb3VyY2VQcm92aWRlcigpKTsK
K30KKwogLy8gQ2FsbGVkIGJ5IHRoZSBsZWdhY3kgc2NoZWR1bGluZyBwYXRoIChlLmcuIHdoZXJl
IHJlbmRlcl93aWRnZXQgZG9lcyB0aGUgc2NoZWR1bGluZykKIHZvaWQgQ0NTaW5nbGVUaHJlYWRQ
cm94eTo6Y29tcG9zaXRlSW1tZWRpYXRlbHkoKQogewpAQCAtMzAxLDggKzMwNSw3IEBAIGJvb2wg
Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tbWl0QW5kQ29tcG9zaXRlKCkKICAgICBpZiAoIW1fbGF5
ZXJUcmVlSG9zdC0+aW5pdGlhbGl6ZVJlbmRlcmVySWZOZWVkZWQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgaWYgKG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRlbnRzVGV4dHVyZXNQ
dXJnZWQoKSkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5ldmljdEFsbENvbnRlbnRUZXh0dXJl
cygpOworICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGVzdHJveVRleHR1cmVzRGVsZXRlZEJ5SW1wbFRo
cmVhZCgpOwogCiAgICAgQ0NUZXh0dXJlVXBkYXRlUXVldWUgcXVldWU7CiAgICAgbV9sYXllclRy
ZWVIb3N0LT51cGRhdGVMYXllcnMocXVldWUsIG1fbGF5ZXJUcmVlSG9zdEltcGwtPm1lbW9yeUFs
bG9jYXRpb25MaW1pdEJ5dGVzKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5o
CmluZGV4IGE3M2E2YWExNzAzYzNkNGUzZGNmNzM4MzZlZGI0ZWJhMTg3YTgwOWUuLmZmMzU4MzZh
OTkzYjNiMmNiOWFjZjE5ODkxZWI0Yjg0NjE3ZDhhZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Npbmds
ZVRocmVhZFByb3h5LmgKQEAgLTcyLDYgKzcyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBzZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpIE9WRVJSSURFIHsgbV9sYXllclRyZWVIb3N0
LT5zY2hlZHVsZUNvbXBvc2l0ZSgpOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0
T25JbXBsVGhyZWFkKCkgT1ZFUlJJREUgeyBtX2xheWVyVHJlZUhvc3QtPnNjaGVkdWxlQ29tcG9z
aXRlKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgcG9zdEFuaW1hdGlvbkV2ZW50c1RvTWFpblRocmVh
ZE9uSW1wbFRocmVhZChQYXNzT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiwgZG91Ymxl
IHdhbGxDbG9ja1RpbWUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVDb250ZW50
c1RleHR1cmVzT25JbXBsVGhyZWFkKCkgT1ZFUlJJREU7CiAKICAgICAvLyBDYWxsZWQgYnkgdGhl
IGxlZ2FjeSBwYXRoIHdoZXJlIFJlbmRlcldpZGdldCBkb2VzIHRoZSBzY2hlZHVsaW5nLgogICAg
IHZvaWQgY29tcG9zaXRlSW1tZWRpYXRlbHkoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZVF1ZXVlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVw
ZGF0ZVF1ZXVlLmNwcAppbmRleCA4ZjU4ZmNiY2I0Y2JhMjRmMzRhNWFhZDQ3ZWQ3Yzk0NjA3NDNj
MWE4Li43MTlmY2QzMTQ0NTdmNzQ2MzdiYTU4NDUwYThjYjNkNDcwYmFkOWQ5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVV
cGRhdGVRdWV1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlUXVldWUuY3BwCkBAIC01NCwxMCArNTQsMjEgQEAgdm9p
ZCBDQ1RleHR1cmVVcGRhdGVRdWV1ZTo6YXBwZW5kQ29weShUZXh0dXJlQ29waWVyOjpQYXJhbWV0
ZXJzIGNvcHkpCiAgICAgbV9jb3B5RW50cmllcy5hcHBlbmQoY29weSk7CiB9CiAKLXZvaWQgQ0NU
ZXh0dXJlVXBkYXRlUXVldWU6OmNsZWFyVXBsb2FkcygpCit2b2lkIENDVGV4dHVyZVVwZGF0ZVF1
ZXVlOjpjbGVhclVwbG9hZHNUb0RlbGV0ZWRSZXNvdXJjZXMoKQogewotICAgIG1fZnVsbEVudHJp
ZXMuY2xlYXIoKTsKLSAgICBtX3BhcnRpYWxFbnRyaWVzLmNsZWFyKCk7CisgICAgY2xlYXJVcGxv
YWRzVG9EZWxldGVkUmVzb3VyY2VzKG1fZnVsbEVudHJpZXMpOworICAgIGNsZWFyVXBsb2Fkc1Rv
RGVsZXRlZFJlc291cmNlcyhtX3BhcnRpYWxFbnRyaWVzKTsKK30KKwordm9pZCBDQ1RleHR1cmVV
cGRhdGVRdWV1ZTo6Y2xlYXJVcGxvYWRzVG9EZWxldGVkUmVzb3VyY2VzKERlcXVlPFRleHR1cmVV
cGxvYWRlcjo6UGFyYW1ldGVycz4mIGVudHJ5UXVldWUpCit7CisgICAgRGVxdWU8VGV4dHVyZVVw
bG9hZGVyOjpQYXJhbWV0ZXJzPiB0ZW1wOworICAgIGVudHJ5UXVldWUuc3dhcCh0ZW1wKTsKKyAg
ICB3aGlsZSAodGVtcC5zaXplKCkpIHsKKyAgICAgICAgVGV4dHVyZVVwbG9hZGVyOjpQYXJhbWV0
ZXJzIHVwbG9hZCA9IHRlbXAudGFrZUZpcnN0KCk7CisgICAgICAgIGlmICghdXBsb2FkLnRleHR1
cmUtPmJhY2tpbmdXYXNBc3luY2hyb25vdXNseURlbGV0ZWQoKSkKKyAgICAgICAgICAgIGVudHJ5
UXVldWUuYXBwZW5kKHVwbG9hZCk7CisgICAgfQogfQogCiBUZXh0dXJlVXBsb2FkZXI6OlBhcmFt
ZXRlcnMgQ0NUZXh0dXJlVXBkYXRlUXVldWU6OnRha2VGaXJzdEZ1bGxVcGxvYWQoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0
dXJlVXBkYXRlUXVldWUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGV4dHVyZVVwZGF0ZVF1ZXVlLmgKaW5kZXggZGU2MzczODIxZjA4YTg0NTRhZTY0
ODViNmFmMzc0ODNjNzgwNWVlNi4uYzhkY2IxNmUwMjNiYmExNzZiNTA4ZTFjZDk0YjY4ZjYyN2Q5
NzBlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NUZXh0dXJlVXBkYXRlUXVldWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVRdWV1ZS5oCkBAIC00Myw3ICs0
Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFwcGVuZFBhcnRpYWxVcGxvYWQoVGV4dHVyZVVwbG9h
ZGVyOjpQYXJhbWV0ZXJzKTsKICAgICB2b2lkIGFwcGVuZENvcHkoVGV4dHVyZUNvcGllcjo6UGFy
YW1ldGVycyk7CiAKLSAgICB2b2lkIGNsZWFyVXBsb2FkcygpOworICAgIHZvaWQgY2xlYXJVcGxv
YWRzVG9EZWxldGVkUmVzb3VyY2VzKCk7CiAKICAgICBUZXh0dXJlVXBsb2FkZXI6OlBhcmFtZXRl
cnMgdGFrZUZpcnN0RnVsbFVwbG9hZCgpOwogICAgIFRleHR1cmVVcGxvYWRlcjo6UGFyYW1ldGVy
cyB0YWtlRmlyc3RQYXJ0aWFsVXBsb2FkKCk7CkBAIC01Niw2ICs1Niw3IEBAIHB1YmxpYzoKICAg
ICBib29sIGhhc01vcmVVcGRhdGVzKCkgY29uc3Q7CiAKIHByaXZhdGU6CisgICAgdm9pZCBjbGVh
clVwbG9hZHNUb0RlbGV0ZWRSZXNvdXJjZXMoRGVxdWU8VGV4dHVyZVVwbG9hZGVyOjpQYXJhbWV0
ZXJzPiYgZW50cnlRdWV1ZSk7CiAgICAgRGVxdWU8VGV4dHVyZVVwbG9hZGVyOjpQYXJhbWV0ZXJz
PiBtX2Z1bGxFbnRyaWVzOwogICAgIERlcXVlPFRleHR1cmVVcGxvYWRlcjo6UGFyYW1ldGVycz4g
bV9wYXJ0aWFsRW50cmllczsKICAgICBEZXF1ZTxUZXh0dXJlQ29waWVyOjpQYXJhbWV0ZXJzPiBt
X2NvcHlFbnRyaWVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcAppbmRleCA1ODNjNzBjNjA0
MzZmNTM3ZWU4NzhiMmQ3NDBkYWYyNmM5Mjk3NDUxLi4xY2U2OTMyZGM4Zjk0ZDZjMDRmOTUxNmYx
OTdjNzRkNmU1MTliMGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcApAQCAtODAsNyAr
ODAsOCBAQCBDQ1RocmVhZFByb3h5OjpDQ1RocmVhZFByb3h5KENDTGF5ZXJUcmVlSG9zdCogbGF5
ZXJUcmVlSG9zdCkKICAgICAsIG1fcmVhZGJhY2tSZXF1ZXN0T25JbXBsVGhyZWFkKDApCiAgICAg
LCBtX2NvbW1pdENvbXBsZXRpb25FdmVudE9uSW1wbFRocmVhZCgwKQogICAgICwgbV90ZXh0dXJl
QWNxdWlzaXRpb25Db21wbGV0aW9uRXZlbnRPbkltcGxUaHJlYWQoMCkKLSAgICAsIG1fcmVzZXRD
b250ZW50c1RleHR1cmVzUHVyZ2VkQWZ0ZXJDb21taXRPbkltcGxUaHJlYWQoZmFsc2UpCisgICAg
LCBtX2NvbnRlbnRzVGV4dHVyZXNQdXJnZUNvdW50KDApCisgICAgLCBtX2NvbnRlbnRzVGV4dHVy
ZXNQdXJnZUFjaygwKQogICAgICwgbV9uZXh0RnJhbWVJc05ld2x5Q29tbWl0dGVkRnJhbWVPbklt
cGxUaHJlYWQoZmFsc2UpCiAgICAgLCBtX3JlbmRlclZTeW5jRW5hYmxlZChsYXllclRyZWVIb3N0
LT5zZXR0aW5ncygpLnJlbmRlclZTeW5jRW5hYmxlZCkKIHsKQEAgLTMzMiw2ICszMzMsMTggQEAg
dm9pZCBDQ1RocmVhZFByb3h5OjpvblZTeW5jUGFyYW1ldGVyc0NoYW5nZWQoZG91YmxlIG1vbm90
b25pY1RpbWViYXNlLCBkb3VibGUgaW4KICAgICBtX3NjaGVkdWxlck9uSW1wbFRocmVhZC0+c2V0
VGltZWJhc2VBbmRJbnRlcnZhbChtb25vdG9uaWNUaW1lYmFzZSwgaW50ZXJ2YWxJblNlY29uZHMp
OwogfQogCit2b2lkIENDVGhyZWFkUHJveHk6OmRlbGV0ZUNvbnRlbnRzVGV4dHVyZXNPbkltcGxU
aHJlYWQoKQoreworICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7CisgICAgVFJBQ0VfRVZFTlQw
KCJjYyIsICJDQ1RocmVhZFByb3h5OjpkZWxldGVDb250ZW50c1RleHR1cmVzT25JbXBsVGhyZWFk
Iik7CisKKyAgICBpZiAobV9sYXllclRyZWVIb3N0LT5kZWxldGVDb250ZW50c1RleHR1cmVzUmVz
b3VyY2VzT25JbXBsVGhyZWFkKG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJlc291cmNlUHJvdmlkZXIo
KSkpIHsKKyAgICAgICAgbV9jb250ZW50c1RleHR1cmVzUHVyZ2VDb3VudCArPSAxOworICAgICAg
ICBtX2xheWVyVHJlZUhvc3RJbXBsLT5zZXRDb250ZW50c1RleHR1cmVzUHVyZ2VkKCk7CisgICAg
ICAgIHNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCk7CisgICAgfQorfQorCiB2b2lkIENDVGhy
ZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCkKIHsKICAgICBBU1NFUlQoaXNJ
bXBsVGhyZWFkKCkpOwpAQCAtNDUzLDcgKzQ2Niw3IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6c2No
ZWR1bGVkQWN0aW9uQmVnaW5GcmFtZSgpCiAgICAgbV9wZW5kaW5nQmVnaW5GcmFtZVJlcXVlc3Qg
PSBhZG9wdFB0cihuZXcgQmVnaW5GcmFtZUFuZENvbW1pdFN0YXRlKCkpOwogICAgIG1fcGVuZGlu
Z0JlZ2luRnJhbWVSZXF1ZXN0LT5tb25vdG9uaWNGcmFtZUJlZ2luVGltZSA9IG1vbm90b25pY2Fs
bHlJbmNyZWFzaW5nVGltZSgpOwogICAgIG1fcGVuZGluZ0JlZ2luRnJhbWVSZXF1ZXN0LT5zY3Jv
bGxJbmZvID0gbV9sYXllclRyZWVIb3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOwotICAg
IG1fcGVuZGluZ0JlZ2luRnJhbWVSZXF1ZXN0LT5jb250ZW50c1RleHR1cmVzV2VyZURlbGV0ZWQg
PSBtX2xheWVyVHJlZUhvc3RJbXBsLT5jb250ZW50c1RleHR1cmVzUHVyZ2VkKCk7CisgICAgbV9w
ZW5kaW5nQmVnaW5GcmFtZVJlcXVlc3QtPmNvbnRlbnRzVGV4dHVyZXNQdXJnZUFjayA9IG1fY29u
dGVudHNUZXh0dXJlc1B1cmdlQ291bnQ7CiAgICAgbV9wZW5kaW5nQmVnaW5GcmFtZVJlcXVlc3Qt
Pm1lbW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzID0gbV9sYXllclRyZWVIb3N0SW1wbC0+bWVtb3J5
QWxsb2NhdGlvbkxpbWl0Qnl0ZXMoKTsKIAogICAgIG1fbWFpblRocmVhZFByb3h5LT5wb3N0VGFz
ayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWUpKTsK
QEAgLTUyMCw4ICs1MzMsNyBAQCB2b2lkIENDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWUoKQogICAg
IGlmICghbV9sYXllclRyZWVIb3N0LT5pbml0aWFsaXplUmVuZGVyZXJJZk5lZWRlZCgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpZiAocmVxdWVzdC0+Y29udGVudHNUZXh0dXJlc1dlcmVEZWxl
dGVkKQotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmV2aWN0QWxsQ29udGVudFRleHR1cmVzKCk7
CisgICAgbV9sYXllclRyZWVIb3N0LT5kZXN0cm95VGV4dHVyZXNEZWxldGVkQnlJbXBsVGhyZWFk
KCk7CiAKICAgICBPd25QdHI8Q0NUZXh0dXJlVXBkYXRlUXVldWU+IHF1ZXVlID0gYWRvcHRQdHIo
bmV3IENDVGV4dHVyZVVwZGF0ZVF1ZXVlKTsKICAgICBtX2xheWVyVHJlZUhvc3QtPnVwZGF0ZUxh
eWVycygqKHF1ZXVlLmdldCgpKSwgcmVxdWVzdC0+bWVtb3J5QWxsb2NhdGlvbkxpbWl0Qnl0ZXMp
OwpAQCAtNTQ2LDcgKzU1OCw3IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZSgpCiAg
ICAgICAgIERlYnVnU2NvcGVkU2V0TWFpblRocmVhZEJsb2NrZWQgbWFpblRocmVhZEJsb2NrZWQ7
CiAKICAgICAgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKLSAgICAgICAgQ0NQcm94
eTo6aW1wbFRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhy
ZWFkUHJveHk6OmJlZ2luRnJhbWVDb21wbGV0ZU9uSW1wbFRocmVhZCwgJmNvbXBsZXRpb24sIHF1
ZXVlLnJlbGVhc2UoKSwgcmVxdWVzdC0+Y29udGVudHNUZXh0dXJlc1dlcmVEZWxldGVkKSk7Cisg
ICAgICAgIENDUHJveHk6OmltcGxUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNr
KHRoaXMsICZDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQ29tcGxldGVPbkltcGxUaHJlYWQsICZj
b21wbGV0aW9uLCBxdWV1ZS5yZWxlYXNlKCksIHJlcXVlc3QtPmNvbnRlbnRzVGV4dHVyZXNQdXJn
ZUFjaykpOwogICAgICAgICBjb21wbGV0aW9uLndhaXQoKTsKICAgICB9CiAKQEAgLTU1NCw3ICs1
NjYsNyBAQCB2b2lkIENDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWUoKQogICAgIG1fbGF5ZXJUcmVl
SG9zdC0+ZGlkQmVnaW5GcmFtZSgpOwogfQogCi12b2lkIENDVGhyZWFkUHJveHk6OmJlZ2luRnJh
bWVDb21wbGV0ZU9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbiwgUGFz
c093blB0cjxDQ1RleHR1cmVVcGRhdGVRdWV1ZT4gcXVldWUsIGJvb2wgY29udGVudHNUZXh0dXJl
c1dlcmVEZWxldGVkKQordm9pZCBDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQ29tcGxldGVPbklt
cGxUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24sIFBhc3NPd25QdHI8Q0NUZXh0
dXJlVXBkYXRlUXVldWU+IHF1ZXVlLCBpbnQgY29udGVudHNUZXh0dXJlc1B1cmdlQWNrKQogewog
ICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUNvbXBsZXRl
T25JbXBsVGhyZWFkIik7CiAgICAgQVNTRVJUKCFtX2NvbW1pdENvbXBsZXRpb25FdmVudE9uSW1w
bFRocmVhZCk7CkBAIC01NjcsMTkgKzU3OSwyMCBAQCB2b2lkIENDVGhyZWFkUHJveHk6OmJlZ2lu
RnJhbWVDb21wbGV0ZU9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbgog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFjb250ZW50c1RleHR1cmVzV2VyZURl
bGV0ZWQgJiYgbV9sYXllclRyZWVIb3N0SW1wbC0+Y29udGVudHNUZXh0dXJlc1B1cmdlZCgpKSB7
Ci0gICAgICAgIC8vIFdlIHB1cmdlZCB0aGUgY29udGVudCB0ZXh0dXJlcyBvbiB0aGUgaW1wbCB0
aHJlYWQgYmV0d2VlbiB0aGUgdGltZSB3ZQotICAgICAgICAvLyBwb3N0ZWQgdGhlIGJlZ2luRnJh
bWUgdGFzayBhbmQgbm93LCBtZWFuaW5nIHdlIGhhdmUgYSBidW5jaCBvZgotICAgICAgICAvLyB1
cGxvYWRzIHRoYXQgYXJlIG5vdyBpbnZhbGlkLiBDbGVhciB0aGUgdXBsb2FkcyAodGhleSBhbGwg
Z28gdG8KLSAgICAgICAgLy8gY29udGVudCB0ZXh0dXJlcyksIGFuZCBraWNrIGFub3RoZXIgY29t
bWl0IHRvIGZpbGwgdGhlbSBhZ2Fpbi4KLSAgICAgICAgcXVldWUtPmNsZWFyVXBsb2FkcygpOwor
ICAgIG1fY29udGVudHNUZXh0dXJlc1B1cmdlQWNrID0gY29udGVudHNUZXh0dXJlc1B1cmdlQWNr
OworICAgIGlmIChtX2NvbnRlbnRzVGV4dHVyZXNQdXJnZUFjayAhPSBtX2NvbnRlbnRzVGV4dHVy
ZXNQdXJnZUNvdW50KSB7CisgICAgICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NUaHJlYWRQcm94
eTo6YmVnaW5GcmFtZUNvbXBsZXRlT25JbXBsVGhyZWFkX3B1cmdlX3NpbmNlX2NvbW1pdCIpOwor
ICAgICAgICAvLyBUaGUgdXBsb2FkIHF1ZXVlIG1heSBjb250YWluIHJlZmVyZW5jZXMgdG8gdGV4
dHVyZXMgdGhhdCB3ZXJlIGFzeW5jaHJvbm91c2x5CisgICAgICAgIC8vIGRlbGV0ZWQuIFJlbW92
ZSB0aGVtLgorICAgICAgICBxdWV1ZS0+Y2xlYXJVcGxvYWRzVG9EZWxldGVkUmVzb3VyY2VzKCk7
CisgICAgICAgIC8vIFRoZXJlIGV4aXN0IHRleHR1cmVzIHB1cmdlZCBieSB0aGUgaW1wbCB0aHJl
YWQgdGhhdCB0aGUgbWFpbiB0aHJlYWQKKyAgICAgICAgLy8gZG9lc24ndCBrbm93IG9mLiBScXVl
c3QgYSByZWNvbW1pdCwgd2hpY2ggd2lsbCBpbmZvcm0gdGhlIG1haW4gdGhyZWFkCisgICAgICAg
IC8vIG9mIHRoZSBwdXJnZWQgcmVzb3VyY2VzLgogICAgICAgICBzZXROZWVkc0NvbW1pdE9uSW1w
bFRocmVhZCgpOwotICAgIH0gZWxzZQotICAgICAgICBtX3Jlc2V0Q29udGVudHNUZXh0dXJlc1B1
cmdlZEFmdGVyQ29tbWl0T25JbXBsVGhyZWFkID0gdHJ1ZTsKKyAgICB9CiAKICAgICBtX2N1cnJl
bnRUZXh0dXJlVXBkYXRlQ29udHJvbGxlck9uSW1wbFRocmVhZCA9IENDVGV4dHVyZVVwZGF0ZUNv
bnRyb2xsZXI6OmNyZWF0ZShDQ1Byb3h5OjppbXBsVGhyZWFkKCksIHF1ZXVlLCBtX2xheWVyVHJl
ZUhvc3RJbXBsLT5yZXNvdXJjZVByb3ZpZGVyKCksIG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJlbmRl
cmVyKCktPnRleHR1cmVDb3BpZXIoKSwgbV9sYXllclRyZWVIb3N0SW1wbC0+cmVuZGVyZXIoKS0+
dGV4dHVyZVVwbG9hZGVyKCkpOwogICAgIG1fY29tbWl0Q29tcGxldGlvbkV2ZW50T25JbXBsVGhy
ZWFkID0gY29tcGxldGlvbjsKLQogICAgIG1fc2NoZWR1bGVyT25JbXBsVGhyZWFkLT5iZWdpbkZy
YW1lQ29tcGxldGUoKTsKIH0KIApAQCAtNjMwLDggKzY0Myw4IEBAIHZvaWQgQ0NUaHJlYWRQcm94
eTo6c2NoZWR1bGVkQWN0aW9uQ29tbWl0KCkKICAgICBtX2xheWVyVHJlZUhvc3QtPmJlZ2luQ29t
bWl0T25JbXBsVGhyZWFkKG1fbGF5ZXJUcmVlSG9zdEltcGwuZ2V0KCkpOwogICAgIG1fbGF5ZXJU
cmVlSG9zdC0+ZmluaXNoQ29tbWl0T25JbXBsVGhyZWFkKG1fbGF5ZXJUcmVlSG9zdEltcGwuZ2V0
KCkpOwogCi0gICAgaWYgKG1fcmVzZXRDb250ZW50c1RleHR1cmVzUHVyZ2VkQWZ0ZXJDb21taXRP
bkltcGxUaHJlYWQpIHsKLSAgICAgICAgbV9yZXNldENvbnRlbnRzVGV4dHVyZXNQdXJnZWRBZnRl
ckNvbW1pdE9uSW1wbFRocmVhZCA9IGZhbHNlOworICAgIGlmIChtX2NvbnRlbnRzVGV4dHVyZXNQ
dXJnZUFjayA9PSBtX2NvbnRlbnRzVGV4dHVyZXNQdXJnZUNvdW50KSB7CisgICAgICAgIC8vIFRo
ZSB0cmVlIG5vdyByZWZlcmVuY2VzIG5vIHB1cmdlZCB0ZXh0dXJlcy4gQWxsb3cgaXQgdG8gZHJh
dyBhZ2Fpbi4KICAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+cmVzZXRDb250ZW50c1RleHR1
cmVzUHVyZ2VkKCk7CiAgICAgfQogCkBAIC04NjksOCArODgyLDcgQEAgdm9pZCBDQ1RocmVhZFBy
b3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25JbXBsVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBj
b21wbGV0aW8KIHsKICAgICBUUkFDRV9FVkVOVDAoImNjIiwgIkNDVGhyZWFkUHJveHk6OmxheWVy
VHJlZUhvc3RDbG9zZWRPbkltcGxUaHJlYWQiKTsKICAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkp
OwotICAgIGlmICghbV9sYXllclRyZWVIb3N0SW1wbC0+Y29udGVudHNUZXh0dXJlc1B1cmdlZCgp
KQotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmRlbGV0ZUNvbnRlbnRzVGV4dHVyZXNPbkltcGxU
aHJlYWQobV9sYXllclRyZWVIb3N0SW1wbC0+cmVzb3VyY2VQcm92aWRlcigpKTsKKyAgICBkZWxl
dGVDb250ZW50c1RleHR1cmVzT25JbXBsVGhyZWFkKCk7CiAgICAgbV9pbnB1dEhhbmRsZXJPbklt
cGxUaHJlYWQuY2xlYXIoKTsKICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLmNsZWFyKCk7CiAgICAg
bV9zY2hlZHVsZXJPbkltcGxUaHJlYWQuY2xlYXIoKTsKQEAgLTg5Miw4ICs5MDQsNyBAQCB2b2lk
IENDVGhyZWFkUHJveHk6OnJlY3JlYXRlQ29udGV4dE9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25F
dmVudCogY29tcGxldGlvbiwgQwogewogICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NUaHJlYWRQ
cm94eTo6cmVjcmVhdGVDb250ZXh0T25JbXBsVGhyZWFkIik7CiAgICAgQVNTRVJUKGlzSW1wbFRo
cmVhZCgpKTsKLSAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRlbnRzVGV4dHVyZXNQ
dXJnZWQoKSkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5kZWxldGVDb250ZW50c1RleHR1cmVz
T25JbXBsVGhyZWFkKG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJlc291cmNlUHJvdmlkZXIoKSk7Cisg
ICAgZGVsZXRlQ29udGVudHNUZXh0dXJlc09uSW1wbFRocmVhZCgpOwogICAgICpyZWNyZWF0ZVN1
Y2NlZWRlZCA9IG1fbGF5ZXJUcmVlSG9zdEltcGwtPmluaXRpYWxpemVSZW5kZXJlcihhZG9wdFB0
cihjb250ZXh0UHRyKSwgdGV4dHVyZVVwbG9hZGVyKTsKICAgICBpZiAoKnJlY3JlYXRlU3VjY2Vl
ZGVkKSB7CiAgICAgICAgICpjYXBhYmlsaXRpZXMgPSBtX2xheWVyVHJlZUhvc3RJbXBsLT5yZW5k
ZXJlckNhcGFiaWxpdGllcygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oCmluZGV4IGEyNDAyODFj
NTU2MDVjMDU2NWZkZDgzOWM5OTY4Y2Y1MmFhNzYzMGYuLmMzOGU4NTJjNzUyNDc1M2YyOGM4YTYy
YWUyMDZmNzBjNDc3OWJkNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKQEAgLTgxLDYgKzgx
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1JlZHJhd09uSW1wbFRocmVh
ZCgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0NvbW1pdE9uSW1wbFRocmVh
ZCgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBwb3N0QW5pbWF0aW9uRXZlbnRzVG9NYWlu
VGhyZWFkT25JbXBsVGhyZWFkKFBhc3NPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+LCBk
b3VibGUgd2FsbENsb2NrVGltZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUNv
bnRlbnRzVGV4dHVyZXNPbkltcGxUaHJlYWQoKSBPVkVSUklERTsKIAogICAgIC8vIENDU2NoZWR1
bGVyQ2xpZW50IGltcGxlbWVudGF0aW9uCiAgICAgdmlydHVhbCBib29sIGNhbkRyYXcoKSBPVkVS
UklERTsKQEAgLTEwMCwxMyArMTAxLDEzIEBAIHByaXZhdGU6CiAgICAgLy8gU2V0IG9uIGltcGwg
dGhyZWFkLCByZWFkIG9uIG1haW4gdGhyZWFkLgogICAgIHN0cnVjdCBCZWdpbkZyYW1lQW5kQ29t
bWl0U3RhdGUgewogICAgICAgICBCZWdpbkZyYW1lQW5kQ29tbWl0U3RhdGUoKQotICAgICAgICAg
ICAgOiBtb25vdG9uaWNGcmFtZUJlZ2luVGltZSgwKQorICAgICAgICAgICAgOiBtb25vdG9uaWNG
cmFtZUJlZ2luVGltZSgwKSwgY29udGVudHNUZXh0dXJlc1B1cmdlQWNrKDApCiAgICAgICAgIHsK
ICAgICAgICAgfQogCiAgICAgICAgIGRvdWJsZSBtb25vdG9uaWNGcmFtZUJlZ2luVGltZTsKICAg
ICAgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm87Ci0gICAgICAgIGJv
b2wgY29udGVudHNUZXh0dXJlc1dlcmVEZWxldGVkOworICAgICAgICBpbnQgY29udGVudHNUZXh0
dXJlc1B1cmdlQWNrOwogICAgICAgICBzaXplX3QgbWVtb3J5QWxsb2NhdGlvbkxpbWl0Qnl0ZXM7
CiAgICAgfTsKICAgICBPd25QdHI8QmVnaW5GcmFtZUFuZENvbW1pdFN0YXRlPiBtX3BlbmRpbmdC
ZWdpbkZyYW1lUmVxdWVzdDsKQEAgLTEyNyw3ICsxMjgsNyBAQCBwcml2YXRlOgogICAgICAgICBJ
bnRSZWN0IHJlY3Q7CiAgICAgfTsKICAgICB2b2lkIGZvcmNlQmVnaW5GcmFtZU9uSW1wbFRocmVh
ZChDQ0NvbXBsZXRpb25FdmVudCopOwotICAgIHZvaWQgYmVnaW5GcmFtZUNvbXBsZXRlT25JbXBs
VGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiwgUGFzc093blB0cjxDQ1RleHR1cmVVcGRhdGVRdWV1
ZT4sIGJvb2wgY29udGVudHNUZXh0dXJlc1dlcmVEZWxldGVkKTsKKyAgICB2b2lkIGJlZ2luRnJh
bWVDb21wbGV0ZU9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVudCosIFBhc3NPd25QdHI8Q0NU
ZXh0dXJlVXBkYXRlUXVldWU+LCBpbnQgY29udGVudHNUZXh0dXJlc1B1cmdlQWNrKTsKICAgICB2
b2lkIGJlZ2luRnJhbWVBYm9ydGVkT25JbXBsVGhyZWFkKCk7CiAgICAgdm9pZCByZXF1ZXN0UmVh
ZGJhY2tPbkltcGxUaHJlYWQoUmVhZGJhY2tSZXF1ZXN0Kik7CiAgICAgdm9pZCByZXF1ZXN0U3Rh
cnRQYWdlU2NhbGVBbmltYXRpb25PbkltcGxUaHJlYWQoSW50U2l6ZSB0YXJnZXRQb3NpdGlvbiwg
Ym9vbCB1c2VBbmNob3IsIGZsb2F0IHNjYWxlLCBkb3VibGUgZHVyYXRpb25TZWMpOwpAQCAtMTg1
LDkgKzE4NiwxNCBAQCBwcml2YXRlOgogCiAgICAgT3duUHRyPENDVGV4dHVyZVVwZGF0ZUNvbnRy
b2xsZXI+IG1fY3VycmVudFRleHR1cmVVcGRhdGVDb250cm9sbGVyT25JbXBsVGhyZWFkOwogCi0g
ICAgLy8gU2V0IHdoZW4gd2UgbmVlZCB0byByZXNldCB0aGUgY29udGVudHNUZXh0dXJlc1B1cmdl
ZCBmbGFnIGFmdGVyIHRoZQotICAgIC8vIGNvbW1pdC4KLSAgICBib29sIG1fcmVzZXRDb250ZW50
c1RleHR1cmVzUHVyZ2VkQWZ0ZXJDb21taXRPbkltcGxUaHJlYWQ7CisgICAgLy8gQ291bnRlciBp
bmNyZW1lbnRlZCBldmVyeSB0aW1lIHRoZSBpbXBsIHRocmVhZCBkZWxldGVzIHRleHR1cmVzLCBz
ZW50IHRvIHRoZQorICAgIC8vIG1haW4gdGhyZWFkIHdpdGggZWFjaCBjb21taXQuCisgICAgaW50
IG1fY29udGVudHNUZXh0dXJlc1B1cmdlQ291bnQ7CisKKyAgICAvLyBWYWx1ZSB0aGF0IHRoZSBt
YWluIHRocmVhZCBzZW5kcyBhcyBhbiBhY2tub3dsZWRnZW1lbnQgdG8gdGhlIGltcGwgdGhyZWFk
LgorICAgIC8vIElmIHRoaXMgZG9lcyBub3QgZXF1YWwgbV9jb250ZW50c1RleHR1cmVzUHVyZ2VD
b3VudCB0aGVuIHRoZSBpbXBsIGxheWVyIHRyZWUKKyAgICAvLyBtYXkgcmVmZXJlbmNlIHRleHR1
cmVzIHRoYXQgaGF2ZSBiZWVuIHB1cmdlZC4KKyAgICBpbnQgbV9jb250ZW50c1RleHR1cmVzUHVy
Z2VBY2s7CiAKICAgICAvLyBTZXQgd2hlbiB0aGUgbmV4dCBkcmF3IHNob3VsZCBwb3N0IGRpZENv
bW1pdEFuZERyYXdGcmFtZSB0byB0aGUgbWFpbiB0aHJlYWQuCiAgICAgYm9vbCBtX25leHRGcmFt
ZUlzTmV3bHlDb21taXR0ZWRGcmFtZU9uSW1wbFRocmVhZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKaW5kZXgg
YTcxNWY1YjlhNDk5OWEzNzRiYmE5YWRkNDI0NzAwMDY2ZmRlYWNhNy4uNjJjZjZjNjEzYzRlMTk4
OTkzYzgzZDgyZjQ4YTkzYzdlOTFkOWRlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKQEAgLTg2LDYgKzg2
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1JlZHJhd09uSW1wbFRocmVh
ZCgpIE9WRVJSSURFIHsgbV9kaWRSZXF1ZXN0UmVkcmF3ID0gdHJ1ZTsgfQogICAgIHZpcnR1YWwg
dm9pZCBzZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpIE9WRVJSSURFIHsgbV9kaWRSZXF1ZXN0
Q29tbWl0ID0gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBwb3N0QW5pbWF0aW9uRXZlbnRzVG9N
YWluVGhyZWFkT25JbXBsVGhyZWFkKFBhc3NPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+
LCBkb3VibGUgd2FsbENsb2NrVGltZSkgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCB2b2lkIGRl
bGV0ZUNvbnRlbnRzVGV4dHVyZXNPbkltcGxUaHJlYWQoKSBPVkVSUklERSB7IH0KIAogICAgIFBh
c3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gY3JlYXRlTGF5ZXJUcmVlSG9zdChib29sIHBh
cnRpYWxTd2FwLCBQYXNzT3duUHRyPENDR3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQs
IFBhc3NPd25QdHI8Q0NMYXllckltcGw+IHJvb3RQdHIpCiAgICAgewpAQCAtMzc3MiwxMiArMzc3
Myw2IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc3VyZmFjZVRleHR1cmVDYWNo
aW5nTm9QYXJ0aWFsU3dhcCkKICAgICB9CiB9CiAKLVRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBs
VGVzdCwgcmVsZWFzZUNvbnRlbnRzVGV4dHVyZVNob3VsZFRyaWdnZXJDb21taXQpCi17Ci0gICAg
bV9ob3N0SW1wbC0+cmVsZWFzZUNvbnRlbnRzVGV4dHVyZXMoKTsKLSAgICBFWFBFQ1RfVFJVRSht
X2RpZFJlcXVlc3RDb21taXQpOwotfQotCiBzdHJ1Y3QgUmVuZGVyUGFzc0NhY2hlRW50cnkgewog
ICAgIG11dGFibGUgT3duUHRyPENDUmVuZGVyUGFzcz4gcmVuZGVyUGFzc1B0cjsKICAgICBDQ1Jl
bmRlclBhc3MqIHJlbmRlclBhc3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcAppbmRleCAwMGVlMjhhNjg4ZWE2ZDI4
NTU2N2EzN2EwMDcwZDM1YWExMWJmNzA1Li5mNGJlMzkxN2EwYWIwMjczODU2NWQ5NmZkODY2NTQ5
NDliYzdjM2M5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVk
TGF5ZXJDaHJvbWl1bVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
VGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAKQEAgLTg3LDYgKzg3LDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgflRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QoKQogICAgIHsKICAgICAgICAgRGVidWdT
Y29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CisgICAgICAgIG1fdGV4dHVyZU1hbmFnZXIt
PmNsZWFyQWxsTWVtb3J5KG1fcmVzb3VyY2VQcm92aWRlci5nZXQoKSk7CiAgICAgICAgIG1fcmVz
b3VyY2VQcm92aWRlci5jbGVhcigpOwogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161077</attachid>
            <date>2012-08-28 15:55:07 -0700</date>
            <delta_ts>2012-08-29 17:36:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95057-20120828155457.patch</filename>
            <type>text/plain</type>
            <size>138464</size>
            <attacher name="Christopher Cameron">ccameron</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2NjE1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjU5MTBjZGQ0NGUzODBh
YjgwZTAyODAxYzExZTFlNDE4NGFkZTI4NC4uODJhMzA2NjNkZWU4NjFkZGI3NzgwYzg5M2U0MjI3
NGU0YmNlYTk0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMyBAQAorMjAxMi0wOC0yNyAgQ2hy
aXN0b3BoZXIgQ2FtZXJvbiAgPGNjYW1lcm9uQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hy
b21pdW1dIEFsbG93IGltcGwtdGhyZWFkIGRlbGV0aW9uIG9mIG9ubHkgc29tZSByZXNvdXJjZXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1MDU3CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVG93YXJkcyBh
bGxvd2luZyB0aGUgaW1wbCB0aHJlYWQgdG8gZGVsZXRlIGp1c3Qgc29tZSByZXNvdXJjZXMgKGFz
CisgICAgICAgIG9wcG9zZWQgdG8gZGVsZXRpbmcgYWxsIHJlc291cmNlcykuCisKKyAgICAgICAg
RG8gaW1wbC10aHJlYWQgZGVsZXRpb24gdGhyb3VnaCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFn
ZXIgaW5zdGVhZCBvZgorICAgICAgICBDQ1Jlc291cmNlUHJvdmlkZXIuIEluIHN1YnNlcXVlbnQg
Y2hhbmdlcyB0aGUgaW1wbCB0aHJlYWQgd2lsbCBiZSBhYmxlCisgICAgICAgIHRvIHNldCBhIHRo
cmVzaG9sZCBmb3Igd2hhdCB0byBkZWxldGUpLiBQdXQgYWxsIHN0YXRlIHRoYXQgY2FuCisgICAg
ICAgIGJlIGNvbmN1cnJlbnRseSBhY2Nlc3NlZCBieSB0aGUgbWFpbiBhbmQgaW1wbCB0aHJlYWRz
IGludG8gYSBzZXBhcmF0ZQorICAgICAgICBTaGFyZWRTdGF0ZSBzdWItY2xhc3Mgd2hpY2ggaGFz
IGEgbXV0ZXguIEFkZCBhIHNldCBvZiB0ZXh0dXJlcyB0aGF0CisgICAgICAgIGhhdmUgYmVlbiBk
ZWxldGVkIGJ5IHRoZSBpbXBsIHRocmVhZCwgYnV0IGhhdmUgbm90IGhhZCB0aGVpciByZWxhdGVk
CisgICAgICAgIHN0cnVjdHVyZXMgY2xlYXIgYnkgdGhlIG1haW4gdGhyZWFkIHlldC4gQWRkIGhl
bHBlciBmdW5jdGlvbnMgdG8gZGVsZXRlCisgICAgICAgIGEgYmFja2luZydzIHJlc291cmNlLgor
CisgICAgICAgIEFsbG93IG11bHRpcGxlIGluLWZsaWdodCB0ZXh0dXJlIHB1cmdlcy4gSW4gQ0NU
aHJlYWRQcm94eSwgbWFrZSB0aGUKKyAgICAgICAgYWNrbm93bGVkZ2VtZW50IG9mIHRleHR1cmUg
ZGVsZXRpb24gYmUgYW4gaW50ZWdlciBjb3VudGVyIGluc3RlYWQgb2YgYQorICAgICAgICBib29s
LCBiZWNhdXNlIHdlIG1heSBoYXZlIG11bHRpcGxlIGluLWZsaWdodCBwdXJnZXMuIFJlbW92ZSBt
YW55CisgICAgICAgIGluc3RhbmNlcyB3aGVyZSB0ZXh0dXJlIHB1cmdlcyB3ZXJlIGF2b2lkZWQg
d2hlbiB0aGVyZSB3YXMgYW4KKyAgICAgICAgb3V0c3RhbmRpbmcgdGV4dC4KKworICAgICAgICBB
ZGQgdGhlIGFiaWxpdHkgdG8gY2xlYXIgb25seSB0aGUgcmVmZXJlbmNlcyB0byBkZWxldGVkIHRl
eHR1cmVzIGZyb20KKyAgICAgICAgdGhlIHRleHR1cmUgdXBsb2FkIHF1ZXVlLgorCisgICAgICAg
IEFkZCBhc3NlcnRpb25zIHRoYXQgcmVzb3VyY2VzIGJlIGZyZWVkIHRvIENDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlci4KKworICAgICAgICBBZGQgbG90cyBvZiBhc3NlcnRzIHRvIENDUHJpb3Jp
dGl6ZWRUZXh0dXJlTWFuYWdlciB0byBlbnN1cmUgYW5kCisgICAgICAgIGlsbHVtaW5hdGUgc3Vw
cG9ydGVkIG11bHRpdGhyZWFkZWQgYWNjZXNzLgorICAgICAgICAKKyAgICAgICAgRml4IGEgZG96
ZW4gcGxhY2VzIHdoZXJlIENDVGhyZWFkUHJveHkgYW5kIENDU2luZ2xlVGhyZWFkUHJveHkgaG9s
ZAorICAgICAgICB0aGUgbWFpbiB0aHJlYWQgYmxvY2tlZCwgYnV0IGRvbid0IG5vdGlmeSB0aGUg
ZGVidWcgc3RydWN0dXJlcyBvZgorICAgICAgICB0aGlzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0
cyAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJU
ZXh0dXJlVXBkYXRlci5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlcjo6
VGV4dHVyZTo6YmFja2luZ1dhc0FzeW5jaHJvbm91c2x5RGVsZXRlZCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6ZGVsZXRlQ29udGVudHNUZXh0dXJlc1Jlc291cmNl
c09uSW1wbFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdDo6ZGVzdHJveVRleHR1cmVzRGVsZXRlZEJ5SW1wbFRocmVhZCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmg6Cisg
ICAgICAgIChDQ0xheWVyVHJlZUhvc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6cmVsZWFzZUNvbnRlbnRzVGV4dHVyZXMpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaDoKKyAgICAg
ICAgKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0SW1wbDo6c2V0Q29udGVudHNUZXh0dXJlc1B1cmdlZCk6CisgICAgICAgIChDQ0xh
eWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1ByaW9yaXRpemVkVGV4dHVyZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRp
emVkVGV4dHVyZTo6dXBsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0
dXJlOjpiYWNraW5nV2FzQXN5bmNocm9ub3VzbHlEZWxldGVkKToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRU
ZXh0dXJlLmg6CisgICAgICAgIChDQ1ByaW9yaXRpemVkVGV4dHVyZSk6CisgICAgICAgIChXZWJD
b3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZzo6QmFja2luZyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZzo6fkJhY2tpbmcpOgorICAgICAg
ICAoQmFja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFj
a2luZzo6b3duZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmU6OkJh
Y2tpbmc6OnJlc291cmNlRGVsZXRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6fkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnBy
aW9yaXRpemVUZXh0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVy
ZU1hbmFnZXI6OnJlcXVlc3RMYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlcjo6YWNxdWlyZUJhY2tpbmdUZXh0dXJlSWZOZWVkZWQpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpyZWR1Y2VNZW1vcnkpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpkZWxldGVCYWNraW5n
c1Jlc291cmNlc09uSW1wbFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXI6OmRlc3Ryb3lCYWNraW5nc0ZyZWVkQnlJbXBsVGhyZWFkKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmVNYW5h
Z2VyOjpjbGVhckFsbE1lbW9yeSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI6OnJlZ2lzdGVyVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9y
aXRpemVkVGV4dHVyZU1hbmFnZXI6OnJldHVybkJhY2tpbmdUZXh0dXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlQmFja2luZyk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmRlc3Ryb3lCYWNraW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6YXNzZXJ0
SW52YXJpYW50cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmg6CisgICAgICAgIChDQ1ByaW9yaXRpemVkVGV4dHVy
ZU1hbmFnZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2No
ZWR1bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDU2NoZWR1bGVyOjpiZWdpbkZyYW1lQWJv
cnRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVU
aHJlYWRQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5Ojpy
ZWNyZWF0ZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6
c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5OjpkZWxldGVDb250
ZW50c1RleHR1cmVzT25JbXBsVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tbWl0QW5kQ29tcG9zaXRlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5Lmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRl
UXVldWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NUZXh0dXJlVXBkYXRlUXVldWU6OmNsZWFy
VXBsb2Fkc1RvRGVsZXRlZFJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVRdWV1ZS5oOgor
ICAgICAgICAoQ0NUZXh0dXJlVXBkYXRlUXVldWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NU
aHJlYWRQcm94eTo6Q0NUaHJlYWRQcm94eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFBy
b3h5OjpkZWxldGVDb250ZW50c1RleHR1cmVzT25JbXBsVGhyZWFkKToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c2NoZWR1bGVkQWN0aW9uQmVn
aW5GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVDb21wbGV0ZU9uSW1w
bFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpzY2hlZHVsZWRBY3Rp
b25Db21taXQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6bGF5ZXJUcmVlSG9z
dENsb3NlZE9uSW1wbFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5Ojpy
ZWNyZWF0ZUNvbnRleHRPbkltcGxUaHJlYWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFk
UHJveHk6OkJlZ2luRnJhbWVBbmRDb21taXRTdGF0ZTo6QmVnaW5GcmFtZUFuZENvbW1pdFN0YXRl
KToKKyAgICAgICAgKEJlZ2luRnJhbWVBbmRDb21taXRTdGF0ZSk6CisgICAgICAgIChDQ1RocmVh
ZFByb3h5KToKKwogMjAxMi0wOC0yNCAgUm9iZXJ0IEtyb2VnZXIgIDxyamtyb2VnZUBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxC
eSBhbHdheXMgYXNzdW1lcyBzY3JlZW4gc3BhY2UgZGVsdGFzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCmluZGV4IDQ0ZDE4N2Q3M2FkZDcyMDM4MGZhOGI2NjkzNmI5ODU0NGM0OWMyOTkuLmMyYWU2
MGNiZDg0MTE4NWYxNDkxYWQ5MzM1MjBjYTQ2MTIyOTU2YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTItMDgtMjcgIENocmlzdG9waGVyIENhbWVyb24g
IDxjY2FtZXJvbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBBbGxvdyBpbXBs
LXRocmVhZCBkZWxldGlvbiBvZiBvbmx5IHNvbWUgcmVzb3VyY2VzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTA1NworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0
LCByZW1vdmUgdGhlIHRlc3QKKyAgICAgICAgcmVsZWFzZUNvbnRlbnRzVGV4dHVyZVNob3VsZFRy
aWdnZXJDb21taXQgYmVjYXVzZSBpdCBpcyBubyBsb25nZXIgdmFsaWQKKyAgICAgICAgYW5kIGlz
IHJlZHVuZGFudC4gIEEgcmVsZWFzZUNvbnRlbnRzVGV4dHVyZSB3aWxsIG9ubHkgdHJpZ2dlciBh
IGNvbW1pdAorICAgICAgICBpZiB0aGUgcmVsZWFzZUNvbnRlbnRzVGV4dHVyZSBhY3R1YWxseSBk
ZWxldGVzIGFueSB0ZXh0dXJlcywgYW5kCisgICAgICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RFdmlj
dFRleHR1cmVzIGFscmVhZHkgdGVzdHMgdGhhdCB0aGUgY29tbWl0IGlzCisgICAgICAgIGlzc3Vl
ZCB1cG9uIGV2aWN0aW9uLgorCisgICAgICAgIFVwZGF0ZSBUaWxlZExheWVyQ2hyb21pdW1UZXN0
IHRvIGFkaGVyZSB0byB0aHJlYWRpbmcgcmVxdWlyZW1lbnRzIGFuZAorICAgICAgICBub3QgbGVh
ayByZXNvdXJjZXMuCisKKyAgICAgICAgVXBkYXRlIENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCB0
byBhZGhlcmUgdG8gdGhyZWFkaW5nIHJlcXVpcm1lbnRzLgorCisgICAgICAgICogdGVzdHMvQ0NM
YXllclRyZWVIb3N0SW1wbFRlc3QuY3BwOgorICAgICAgICAqIHRlc3RzL1RpbGVkTGF5ZXJDaHJv
bWl1bVRlc3QuY3BwOgorCiAyMDEyLTA4LTI0ICBDcmlzIE5lY2thciAgPGNkbkBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgUGx1bWIgY29uc3VtZVVzZXJHZXN0dXJlKCkgdG8gdGhlIGNocm9taXVt
IHBsYXRmb3JtIGxheWVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oCmluZGV4IDFhZDYx
YzhkOGNhNDY1M2MxZjIwYjhjZWU0MjYyYzc3MWU0YmUyMWMuLjZjNGIwMGM5OWRlZTY1NzI0NDdj
Y2E4YmQxNTk3ZDI3OTkxZDlhYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgKQEAg
LTQ5LDYgKzQ5LDcgQEAgcHVibGljOgogCiAgICAgICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlKiB0
ZXh0dXJlKCkgeyByZXR1cm4gbV90ZXh0dXJlLmdldCgpOyB9CiAgICAgICAgIHZvaWQgc3dhcFRl
eHR1cmVXaXRoKE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZT4mIHRleHR1cmUpIHsgbV90ZXh0
dXJlLnN3YXAodGV4dHVyZSk7IH0KKyAgICAgICAgYm9vbCBiYWNraW5nV2FzQXN5bmNocm9ub3Vz
bHlEZWxldGVkKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlLT5iYWNraW5nV2FzQXN5bmNocm9u
b3VzbHlEZWxldGVkKCk7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVSZWN0KGNvbnN0
IEludFJlY3QmIC8qIHNvdXJjZVJlY3QgKi8sIENDUmVuZGVyaW5nU3RhdHMmKSB7IH0KICAgICAg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZVJlY3QoQ0NSZXNvdXJjZVByb3ZpZGVyKiwgY29uc3QgSW50
UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50U2l6ZSYgZGVzdE9mZnNldCkgPSAwOwogICAgIHBy
b3RlY3RlZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IDVlZTFiZjZlOTVj
NGIyZjY4ZTMyMmYzZGUwNzIxMzAxODE2N2Y5Y2YuLjUyZWQ2ZjNmZjNkNTUzMjcxZjM3MzQxZTNi
YTI5OThmZDBiYTU5NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtMTky
LDEzICsxOTIsMjAgQEAgQ0NMYXllclRyZWVIb3N0OjpSZWNyZWF0ZVJlc3VsdCBDQ0xheWVyVHJl
ZUhvc3Q6OnJlY3JlYXRlQ29udGV4dCgpCiAgICAgcmV0dXJuIFJlY3JlYXRlRmFpbGVkQW5kR2F2
ZVVwOwogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZGVsZXRlQ29udGVudHNUZXh0dXJlc09u
SW1wbFRocmVhZChDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIpCit2b2lkIEND
TGF5ZXJUcmVlSG9zdDo6ZGVsZXRlQWxsQ29udGVudHNUZXh0dXJlc09uSW1wbFRocmVhZChDQ1Jl
c291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6
OmlzSW1wbFRocmVhZCgpKTsKICAgICBpZiAobV9yZW5kZXJlckluaXRpYWxpemVkKQogICAgICAg
ICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPmNsZWFyQWxsTWVtb3J5KHJlc291cmNlUHJvdmlk
ZXIpOwogfQogCitib29sIENDTGF5ZXJUcmVlSG9zdDo6cmVkdWNlQ29udGVudHNUZXh0dXJlc01l
bW9yeU9uSW1wbFRocmVhZChDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIpCit7
CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKyAgICAgICAgcmV0dXJuIG1f
Y29udGVudHNUZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5T25JbXBsVGhyZWFkQXN5bmMocmVz
b3VyY2VQcm92aWRlcik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIENDTGF5ZXJUcmVl
SG9zdDo6YWNxdWlyZUxheWVyVGV4dHVyZXMoKQogewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc01h
aW5UaHJlYWQoKSk7CkBAIC00MTEsMTEgKzQxOCwxMiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6
c2V0VmlzaWJsZShib29sIHZpc2libGUpCiAgICAgbV9wcm94eS0+c2V0VmlzaWJsZSh2aXNpYmxl
KTsKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmV2aWN0QWxsQ29udGVudFRleHR1cmVzKCkK
Kwordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmRlc3Ryb3lDb250ZW50c1RleHR1cmVzRXZpY3RlZEJ5
SW1wbFRocmVhZCgpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKICAg
ICBBU1NFUlQobV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLmdldCgpKTsKLSAgICBtX2NvbnRlbnRz
VGV4dHVyZU1hbmFnZXItPmFsbEJhY2tpbmdUZXh0dXJlc1dlcmVEZWxldGVkKCk7CisgICAgbV9j
b250ZW50c1RleHR1cmVNYW5hZ2VyLT5kZXN0cm95QmFja2luZ3NBc3luY2hyb25vdXNseUV2aWN0
ZWQoKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnN0YXJ0UGFnZVNjYWxlQW5pbWF0aW9u
KGNvbnN0IEludFNpemUmIHRhcmdldFBvc2l0aW9uLCBib29sIHVzZUFuY2hvciwgZmxvYXQgc2Nh
bGUsIGRvdWJsZSBkdXJhdGlvblNlYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXgg
Y2MwYjQ1ZDNkN2ZjN2IxNWE0N2MxNTJlNTI3M2Y5YmM2ZWY1M2M3MC4uMDVjNThhNjA2ZjJhNjYw
MmY0ZTcyNWE2N2FkODE5ZTQwM2I2NzJhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgK
QEAgLTE3NSw3ICsxNzUsNiBAQCBwdWJsaWM6CiAgICAgUmVjcmVhdGVSZXN1bHQgcmVjcmVhdGVD
b250ZXh0KCk7CiAgICAgdm9pZCBkaWRDb21taXRBbmREcmF3RnJhbWUoKSB7IG1fY2xpZW50LT5k
aWRDb21taXRBbmREcmF3RnJhbWUoKTsgfQogICAgIHZvaWQgZGlkQ29tcGxldGVTd2FwQnVmZmVy
cygpIHsgbV9jbGllbnQtPmRpZENvbXBsZXRlU3dhcEJ1ZmZlcnMoKTsgfQotICAgIHZvaWQgZGVs
ZXRlQ29udGVudHNUZXh0dXJlc09uSW1wbFRocmVhZChDQ1Jlc291cmNlUHJvdmlkZXIqKTsKICAg
ICB2aXJ0dWFsIHZvaWQgYWNxdWlyZUxheWVyVGV4dHVyZXMoKTsKICAgICAvLyBSZXR1cm5zIGZh
bHNlIGlmIHdlIHNob3VsZCBhYm9ydCB0aGlzIGZyYW1lIGR1ZSB0byBpbml0aWFsaXphdGlvbiBm
YWlsdXJlLgogICAgIGJvb2wgaW5pdGlhbGl6ZVJlbmRlcmVySWZOZWVkZWQoKTsKQEAgLTIzMywx
MSArMjMyLDE2IEBAIHB1YmxpYzoKIAogICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlciog
Y29udGVudHNUZXh0dXJlTWFuYWdlcigpIGNvbnN0OwogCi0gICAgLy8gVGhpcyB3aWxsIGNhdXNl
IGNvbnRlbnRzIHRleHR1cmUgbWFuYWdlciB0byBldmljdCBhbGwgdGV4dHVyZXMsIGJ1dAotICAg
IC8vIHdpdGhvdXQgZGVsZXRpbmcgdGhlbS4gVGhpcyBoYXBwZW5zIGFmdGVyIGFsbCBjb250ZW50
IHRleHR1cmVzIGhhdmUKLSAgICAvLyBhbHJlYWR5IGJlZW4gZGVsZXRlZCBvbiBpbXBsLCBhZnRl
ciBnZXR0aW5nIGEgMCBhbGxvY2F0aW9uIGxpbWl0LgotICAgIC8vIFNldCBkdXJpbmcgYSBjb21t
aXQsIGJ1dCBiZWZvcmUgdXBkYXRlTGF5ZXJzLgotICAgIHZvaWQgZXZpY3RBbGxDb250ZW50VGV4
dHVyZXMoKTsKKyAgICB2b2lkIGRlbGV0ZUFsbENvbnRlbnRzVGV4dHVyZXNPbkltcGxUaHJlYWQo
Q0NSZXNvdXJjZVByb3ZpZGVyKik7CisKKyAgICAvLyBUaGlzIHdpbGwgY2F1c2UgY29udGVudHMg
dGV4dHVyZSBtYW5hZ2VyIHRvIGZyZWUgc29tZSByZXNvdXJjZXMgdXNlZAorICAgIC8vIGJ5IHRl
eHR1cmVzLCBidXQgd2lsbCBub3QgZGVsZXRlIHRoZSB0ZXh0dXJlIGJhY2tpbmdzIG9iamVjdHMu
IFRoZQorICAgIC8vIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiBzb21lIHJlc291cmNlcyB3ZXJl
IGluZGVlZCBkZXN0cm95ZWQuCisgICAgYm9vbCByZWR1Y2VDb250ZW50c1RleHR1cmVzTWVtb3J5
T25JbXBsVGhyZWFkKENDUmVzb3VyY2VQcm92aWRlciopOworCisgICAgLy8gVGhpcyB3aWxsIGRl
c3Ryb3kgdGhlIGJhY2tpbmdzIHRoYXQgaGFkIHRoZWlyIEdQVSByZXNvdXJjZXMgZnJlZWQKKyAg
ICAvLyBieSBkZWxldGVDb250ZW50c1RleHR1cmVzUmVzb3VyY2VzT25JbXBsVGhyZWFkLgorICAg
IHZvaWQgZGVzdHJveUNvbnRlbnRzVGV4dHVyZXNFdmljdGVkQnlJbXBsVGhyZWFkKCk7CiAKICAg
ICBib29sIHZpc2libGUoKSBjb25zdCB7IHJldHVybiBtX3Zpc2libGU7IH0KICAgICB2b2lkIHNl
dFZpc2libGUoYm9vbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmlu
ZGV4IDcwMTA1NTBiMzJmOGVlODY3MjZkMDBjNGZhZTMwYjk4ZTNmMmQ3NzUuLmVlMDgwOGQ5NDI5
MTkzMWNjMTY1MzZkZjA0YTI1MWE3MTlmY2IwMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdEltcGwuY3BwCkBAIC01MjUsMTEgKzUyNSw3IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0
SW1wbDo6cHJlcGFyZVRvRHJhdyhGcmFtZURhdGEmIGZyYW1lKQogCiB2b2lkIENDTGF5ZXJUcmVl
SG9zdEltcGw6OnJlbGVhc2VDb250ZW50c1RleHR1cmVzKCkKIHsKLSAgICBpZiAobV9jb250ZW50
c1RleHR1cmVzUHVyZ2VkKQotICAgICAgICByZXR1cm47Ci0gICAgbV9yZXNvdXJjZVByb3ZpZGVy
LT5kZWxldGVPd25lZFJlc291cmNlcyhDQ1JlbmRlcmVyOjpDb250ZW50UG9vbCk7Ci0gICAgbV9j
b250ZW50c1RleHR1cmVzUHVyZ2VkID0gdHJ1ZTsKLSAgICBtX2NsaWVudC0+c2V0TmVlZHNDb21t
aXRPbkltcGxUaHJlYWQoKTsKKyAgICBtX2NsaWVudC0+cmVkdWNlQ29udGVudHNUZXh0dXJlc01l
bW9yeU9uSW1wbFRocmVhZCgpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldE1l
bW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzKHNpemVfdCBieXRlcykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuaAppbmRleCBiZmRhMmIxMjkyNGRmZDI2NGY3YjVlNGJiZDUyZDExZTQ2
MzJiMTJmLi4zZDYxZWUyMmM2NzVmNzJmMjIzNjM0MTk0YmI5YWZjNmQ3OTY1YmYzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCkBAIC01OSw2ICs1OSw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCkgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBwb3N0QW5pbWF0aW9uRXZlbnRzVG9NYWluVGhyZWFkT25JbXBsVGhyZWFkKFBhc3NP
d25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+LCBkb3VibGUgd2FsbENsb2NrVGltZSkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCByZWR1Y2VDb250ZW50c1RleHR1cmVzTWVtb3J5T25JbXBsVGhy
ZWFkKCkgPSAwOwogfTsKIAogLy8gQ0NMYXllclRyZWVIb3N0SW1wbCBvd25zIHRoZSBDQ0xheWVy
SW1wbCB0cmVlIGFzIHdlbGwgYXMgYXNzb2NpYXRlZCByZW5kZXJpbmcgc3RhdGUKQEAgLTE1NSw3
ICsxNTYsNyBAQCBwdWJsaWM6CiAgICAgaW50IHNvdXJjZUZyYW1lTnVtYmVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9zb3VyY2VGcmFtZU51bWJlcjsgfQogICAgIHZvaWQgc2V0U291cmNlRnJhbWVOdW1i
ZXIoaW50IGZyYW1lTnVtYmVyKSB7IG1fc291cmNlRnJhbWVOdW1iZXIgPSBmcmFtZU51bWJlcjsg
fQogCi0gICAgYm9vbCBjb250ZW50c1RleHR1cmVzUHVyZ2VkKCkgY29uc3QgeyByZXR1cm4gbV9j
b250ZW50c1RleHR1cmVzUHVyZ2VkOyB9CisgICAgdm9pZCBzZXRDb250ZW50c1RleHR1cmVzUHVy
Z2VkKCkgeyBtX2NvbnRlbnRzVGV4dHVyZXNQdXJnZWQgPSB0cnVlOyB9CiAgICAgdm9pZCByZXNl
dENvbnRlbnRzVGV4dHVyZXNQdXJnZWQoKSB7IG1fY29udGVudHNUZXh0dXJlc1B1cmdlZCA9IGZh
bHNlOyB9CiAgICAgc2l6ZV90IG1lbW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9tZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlczsgfQogCkBAIC0yNzgsNiArMjc5LDEw
IEBAIHByaXZhdGU6CiAgICAgSW50U2l6ZSBtX2RldmljZVZpZXdwb3J0U2l6ZTsKICAgICBmbG9h
dCBtX2RldmljZVNjYWxlRmFjdG9yOwogICAgIGJvb2wgbV92aXNpYmxlOworCisgICAgLy8gU2V0
IHdoZW4gdGhlIGltcGwgdGhyZWFkIGRlbGV0ZXMgdGV4dHVyZXMsIHVuLXNldCB3aGVuIHRoZSBp
bXBsJ3MgbGF5ZXIgdHJlZQorICAgIC8vIGlzIGtub3duIHRvIG5vdCByZWZlcmVuY2UgYW55IGRl
bGV0ZWQgcmVzb3VyY2VzLiBVc2VkIHRvIHByZXZlbnQgZHJhd2luZworICAgIC8vIHdpdGggZGVs
ZXRlZCByZXNvdXJjZXMuCiAgICAgYm9vbCBtX2NvbnRlbnRzVGV4dHVyZXNQdXJnZWQ7CiAgICAg
c2l6ZV90IG1fbWVtb3J5QWxsb2NhdGlvbkxpbWl0Qnl0ZXM7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0
dXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UHJpb3JpdGl6ZWRUZXh0dXJlLmNwcAppbmRleCBkOWY2OGFmMGFlMGI5OTI4MTMzYTIzMmQ3NDE2
OTI0NzYxMjA2ZGRiLi44NmY5OTFkOGY2NzgyMmE4YWRmOGU3NzAyZTE5NTMyZmQ3M2VlMzFkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1ByaW9yaXRpemVkVGV4dHVyZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmUuY3BwCkBAIC0yOCw2ICsyOCw3
IEBACiAKICNpbmNsdWRlICJDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuaCIKICNpbmNsdWRl
ICJDQ1ByaW9yaXR5Q2FsY3VsYXRvci5oIgorI2luY2x1ZGUgIkNDUHJveHkuaCIKICNpbmNsdWRl
IDxhbGdvcml0aG0+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkBAIC0xMDYsNiArMTA3LDcgQEAg
dm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZTo6dXBsb2FkKENDUmVzb3VyY2VQcm92aWRlciogcmVz
b3VyY2VQcm92aWRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1
aW50OF90KiBpbWFnZSwgY29uc3QgSW50UmVjdCYgaW1hZ2VSZWN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFNp
emUmIGRlc3RPZmZzZXQpCiB7CisgICAgQVNTRVJUKCFiYWNraW5nV2FzQXN5bmNocm9ub3VzbHlE
ZWxldGVkKCkpOwogICAgIEFTU0VSVChtX2lzQWJvdmVQcmlvcml0eUN1dG9mZik7CiAgICAgaWYg
KG1faXNBYm92ZVByaW9yaXR5Q3V0b2ZmKQogICAgICAgICBhY3F1aXJlQmFja2luZ1RleHR1cmUo
cmVzb3VyY2VQcm92aWRlcik7CkBAIC0xMTMsNiArMTE1LDEzIEBAIHZvaWQgQ0NQcmlvcml0aXpl
ZFRleHR1cmU6OnVwbG9hZChDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIsCiAg
ICAgcmVzb3VyY2VQcm92aWRlci0+dXBsb2FkKHJlc291cmNlSWQoKSwgaW1hZ2UsIGltYWdlUmVj
dCwgc291cmNlUmVjdCwgZGVzdE9mZnNldCk7CiB9CiAKK2Jvb2wgQ0NQcmlvcml0aXplZFRleHR1
cmU6OmJhY2tpbmdXYXNBc3luY2hyb25vdXNseURlbGV0ZWQoKSBjb25zdAoreworICAgIGlmICht
X2JhY2tpbmcpCisgICAgICAgIHJldHVybiBtX2JhY2tpbmctPnJlc291cmNlRGVsZXRlZCgpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZTo6bGluayhC
YWNraW5nKiBiYWNraW5nKQogewogICAgIEFTU0VSVChiYWNraW5nKTsKQEAgLTEzOSw0ICsxNDgs
MjUgQEAgdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZTo6c2V0VG9TZWxmTWFuYWdlZE1lbW9yeVBs
YWNlaG9sZGVyKHNpemVfdCBieXRlcykKICAgICBtX2J5dGVzID0gYnl0ZXM7CiB9CiAKK0NDUmVz
b3VyY2VQcm92aWRlcjo6UmVzb3VyY2VJZCBDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZzo6
aWQoKQoreworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgcmV0dXJu
IG1fdGV4dHVyZS5pZCgpOworfQorCitib29sIENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5n
OjpyZXNvdXJjZURlbGV0ZWQoKSBjb25zdAoreworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxU
aHJlYWQoKSk7CisgICAgcmV0dXJuIG1fcmVzb3VyY2VEZWxldGVkOworfQorCit2b2lkIENDUHJp
b3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nOjpkZWxldGVSZXNvdXJjZShDQ1Jlc291cmNlUHJvdmlk
ZXIqIHJlc291cmNlUHJvdmlkZXIpCit7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVh
ZCgpKTsKKyAgICBBU1NFUlQocmVzb3VyY2VQcm92aWRlcik7CisgICAgQVNTRVJUKCFtX3Jlc291
cmNlRGVsZXRlZCk7CisgICAgcmVzb3VyY2VQcm92aWRlci0+ZGVsZXRlUmVzb3VyY2UobV90ZXh0
dXJlLmlkKCkpOworICAgIG1fcmVzb3VyY2VEZWxldGVkID0gdHJ1ZTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmUuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlLmgKaW5kZXgg
Mzc4OWQ3ZjI2OWEzZDdlNTE5NWE4OTJkZGQzNzZkYWU2MThkMmIwZS4uNzJmMjZmZTk4MmZmYzkx
MzhhN2ZiNjJkY2MwZmMxNTkxZTFmMTliNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVk
VGV4dHVyZS5oCkBAIC04OCw2ICs4OCw4IEBAIHB1YmxpYzoKICAgICAvLyBVcGxvYWRzIHBpeGVs
cyBpbnRvIHRoZSBiYWNraW5nIHJlc291cmNlLiBUaGlzIGZ1bmN0aW9ucyB3aWxsIGFxdWlyZSB0
aGUgYmFja2luZyBpZiBuZWVkZWQuCiAgICAgdm9pZCB1cGxvYWQoQ0NSZXNvdXJjZVByb3ZpZGVy
KiwgY29uc3QgdWludDhfdCogaW1hZ2UsIGNvbnN0IEludFJlY3QmIGltYWdlUmVjdCwgY29uc3Qg
SW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50U2l6ZSYgZGVzdE9mZnNldCk7CiAKKyAgICBi
b29sIGJhY2tpbmdXYXNBc3luY2hyb25vdXNseURlbGV0ZWQoKSBjb25zdDsKKwogICAgIENDUmVz
b3VyY2VQcm92aWRlcjo6UmVzb3VyY2VJZCByZXNvdXJjZUlkKCkgY29uc3Q7CiAKICAgICAvLyBT
ZWxmLW1hbmFnZWQgdGV4dHVyZXMgYXJlIGFjY291bnRlZCBmb3Igd2hlbiBwcmlvcml0aXppbmcg
b3RoZXIgdGV4dHVyZXMsCkBAIC0xMDEsMTYgKzEwMywyNyBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIGZyaWVuZCBjbGFzcyBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI7CiAKLSAgICBjbGFz
cyBCYWNraW5nIDogcHVibGljIENDVGV4dHVyZSB7CisgICAgY2xhc3MgQmFja2luZyB7CiAgICAg
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJhY2tpbmcpOwogICAgIHB1YmxpYzoKICAgICAgICAg
QmFja2luZyh1bnNpZ25lZCBpZCwgSW50U2l6ZSBzaXplLCBHQzNEZW51bSBmb3JtYXQpCi0gICAg
ICAgICAgICA6IENDVGV4dHVyZShpZCwgc2l6ZSwgZm9ybWF0KSwgbV9vd25lcigwKSB7IH0KLSAg
ICAgICAgfkJhY2tpbmcoKSB7IEFTU0VSVCghbV9vd25lcik7IH0KKyAgICAgICAgICAgIDogbV90
ZXh0dXJlKGlkLCBzaXplLCBmb3JtYXQpLCBtX3Jlc291cmNlRGVsZXRlZChmYWxzZSksIG1fb3du
ZXIoMCkgeyB9CisgICAgICAgIH5CYWNraW5nKCkgeyBBU1NFUlQoIW1fb3duZXIgJiYgbV9yZXNv
dXJjZURlbGV0ZWQpOyB9CisKKyAgICAgICAgQ0NQcmlvcml0aXplZFRleHR1cmUqIG93bmVyKCkg
Y29uc3QgeyByZXR1cm4gbV9vd25lcjsgfQorCisgICAgICAgIENDUmVzb3VyY2VQcm92aWRlcjo6
UmVzb3VyY2VJZCBpZCgpOworICAgICAgICB2b2lkIGRlbGV0ZVJlc291cmNlKENDUmVzb3VyY2VQ
cm92aWRlciopOworICAgICAgICBib29sIHJlc291cmNlRGVsZXRlZCgpIGNvbnN0OworICAgICAg
ICBjb25zdCBJbnRTaXplJiBzaXplKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlLnNpemUoKTsg
fQorICAgICAgICBHQzNEZW51bSBmb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmUuZm9y
bWF0KCk7IH0KKyAgICAgICAgc2l6ZV90IGJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJl
LmJ5dGVzKCk7IH0KIAotICAgICAgICBDQ1ByaW9yaXRpemVkVGV4dHVyZSogb3duZXIoKSB7IHJl
dHVybiBtX293bmVyOyB9CiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIENDUHJp
b3JpdGl6ZWRUZXh0dXJlOworICAgICAgICBmcmllbmQgY2xhc3MgQ0NQcmlvcml0aXplZFRleHR1
cmVNYW5hZ2VyOworICAgICAgICBDQ1RleHR1cmUgbV90ZXh0dXJlOworICAgICAgICBib29sIG1f
cmVzb3VyY2VEZWxldGVkOwogICAgICAgICBDQ1ByaW9yaXRpemVkVGV4dHVyZSogbV9vd25lcjsK
ICAgICB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5h
Z2VyLmNwcAppbmRleCA5NmZiMDVkOTQ1MmIxMTc2ZTI5YjQ3N2VhN2Y1ODM1ZTJjMzEwODVmLi45
MGIyN2IxMmJlMDc2ODYxYTQwNzM0ZDRiMDI1NDdhYTE3NTA0MTUyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5jcHAKQEAgLTI4LDYgKzI4LDcg
QEAKIAogI2luY2x1ZGUgIkNDUHJpb3JpdGl6ZWRUZXh0dXJlLmgiCiAjaW5jbHVkZSAiQ0NQcmlv
cml0eUNhbGN1bGF0b3IuaCIKKyNpbmNsdWRlICJDQ1Byb3h5LmgiCiAjaW5jbHVkZSAiVHJhY2VF
dmVudC5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KIApAQCAtNDksMTUgKzUwLDE3IEBAIENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6fkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcigpCiAg
ICAgd2hpbGUgKG1fdGV4dHVyZXMuc2l6ZSgpID4gMCkKICAgICAgICAgdW5yZWdpc3RlclRleHR1
cmUoKm1fdGV4dHVyZXMuYmVnaW4oKSk7CiAKLSAgICAvLyBFYWNoIHJlbWFpbmluZyBiYWNraW5n
IGlzIGEgbGVha2VkIG9wZW5nbCB0ZXh0dXJlLiBXZSBkb24ndCBoYXZlIHRoZSByZXNvdXJjZVBy
b3ZpZGVyCi0gICAgLy8gdG8gZGVsZXRlIHRoZSB0ZXh0dXJlcyBhdCB0aGlzIHRpbWUgc28gY2xl
YXJNZW1vcnkoKSBuZWVkcyB0byBiZSBjYWxsZWQgYmVmb3JlIHRoaXMuCi0gICAgd2hpbGUgKG1f
YmFja2luZ3Muc2l6ZSgpID4gMCkKLSAgICAgICAgZGVzdHJveUJhY2tpbmcoKm1fYmFja2luZ3Mu
YmVnaW4oKSwgMCk7CisgICAgLy8gUmVtb3ZlIGFueSBiYWNraW5ncyB0aGF0IHdlcmUgZXZpY3Rl
ZC4KKyAgICBjbGVhckV2aWN0ZWRCYWNraW5ncygpOworCisgICAgLy8gRWFjaCByZW1haW5pbmcg
YmFja2luZyBpcyByZWFsIG1lbW9yeSBsZWFrLiBUaGlzIHNob3VsZG4ndCBoYXBwZW4uCisgICAg
QVNTRVJUKG1fYmFja2luZ3MuaXNFbXB0eSgpKTsKIH0KIAogdm9pZCBDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI6OnByaW9yaXRpemVUZXh0dXJlcygpCiB7CiAgICAgVFJBQ0VfRVZFTlQwKCJj
YyIsICJDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnByaW9yaXRpemVUZXh0dXJlcyIpOwor
ICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQoKSk7CiAKICNpZiAhQVNTRVJUX0RJU0FC
TEVECiAgICAgYXNzZXJ0SW52YXJpYW50cygpOwpAQCAtMTM3LDYgKzE0MCw3IEBAIHZvaWQgQ0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpwcmlvcml0aXplVGV4dHVyZXMoKQogCiB2b2lkIEND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y2xlYXJQcmlvcml0aWVzKCkKIHsKKyAgICBBU1NF
UlQoQ0NQcm94eTo6aXNNYWluVGhyZWFkKCkpOwogICAgIGZvciAoVGV4dHVyZVNldDo6aXRlcmF0
b3IgaXQgPSBtX3RleHR1cmVzLmJlZ2luKCk7IGl0ICE9IG1fdGV4dHVyZXMuZW5kKCk7ICsraXQp
IHsKICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZW1vdmUgdGhpcyBhbmQganVzdCBzZXQg
YWxsIHByaW9yaXRpZXMgdG8KICAgICAgICAgLy8gICAgICAgIENDUHJpb3JpdHlDYWxjdWxhdG9y
Ojpsb3dlc3RQcmlvcml0eSgpIG9uY2Ugd2UgaGF2ZSBwcmlvcml0aWVzCkBAIC0xNDgsNiArMTUy
LDggQEAgdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNsZWFyUHJpb3JpdGllcygp
CiAKIGJvb2wgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpyZXF1ZXN0TGF0ZShDQ1ByaW9y
aXRpemVkVGV4dHVyZSogdGV4dHVyZSkKIHsKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNNYWluVGhy
ZWFkKCkpOworCiAgICAgLy8gVGhpcyBpcyBhbHJlYWR5IGFib3ZlIGN1dG9mZiwgc28gZG9uJ3Qg
ZG91YmxlIGNvdW50IGl0J3MgbWVtb3J5IGJlbG93LgogICAgIGlmICh0ZXh0dXJlLT5pc0Fib3Zl
UHJpb3JpdHlDdXRvZmYoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNzAsNiArMTc2LDgg
QEAgYm9vbCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnJlcXVlc3RMYXRlKENDUHJpb3Jp
dGl6ZWRUZXh0dXJlKiB0ZXh0dXJlKQogCiB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdl
cjo6YWNxdWlyZUJhY2tpbmdUZXh0dXJlSWZOZWVkZWQoQ0NQcmlvcml0aXplZFRleHR1cmUqIHRl
eHR1cmUsIENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlcikKIHsKKyAgICBBU1NF
UlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkgJiYgQ0NQcm94eTo6aXNNYWluVGhyZWFkQmxvY2tl
ZCgpKTsKKyAgICBBU1NFUlQocmVzb3VyY2VQcm92aWRlcik7CiAgICAgQVNTRVJUKCF0ZXh0dXJl
LT5pc1NlbGZNYW5hZ2VkKCkpOwogICAgIEFTU0VSVCh0ZXh0dXJlLT5pc0Fib3ZlUHJpb3JpdHlD
dXRvZmYoKSk7CiAgICAgaWYgKHRleHR1cmUtPmJhY2tpbmcoKSB8fCAhdGV4dHVyZS0+aXNBYm92
ZVByaW9yaXR5Q3V0b2ZmKCkpCkBAIC0yMDQsMjAgKzIxMiwyNiBAQCB2b2lkIENDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlcjo6YWNxdWlyZUJhY2tpbmdUZXh0dXJlSWZOZWVkZWQoQ0NQcmlvcml0
aXplZFRleAogCiB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmVkdWNlTWVtb3J5
KHNpemVfdCBsaW1pdEJ5dGVzLCBDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIp
CiB7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpICYmIENDUHJveHk6OmlzTWFp
blRocmVhZEJsb2NrZWQoKSk7CisgICAgQVNTRVJUKHJlc291cmNlUHJvdmlkZXIpOwogICAgIGlm
IChtZW1vcnlVc2VCeXRlcygpIDw9IGxpbWl0Qnl0ZXMpCiAgICAgICAgIHJldHVybjsKICAgICAv
LyBEZXN0cm95IGJhY2tpbmdzIHVudGlsIHdlIGFyZSBiZWxvdyB0aGUgbGltaXQsCiAgICAgLy8g
b3IgdW50aWwgYWxsIGJhY2tpbmdzIHJlbWFpbmluZyBhcmUgYWJvdmUgdGhlIGN1dG9mZi4KICAg
ICB3aGlsZSAobWVtb3J5VXNlQnl0ZXMoKSA+IGxpbWl0Qnl0ZXMgJiYgbV9iYWNraW5ncy5zaXpl
KCkgPiAwKSB7Ci0gICAgICAgIEJhY2tpbmdTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9iYWNraW5ncy5i
ZWdpbigpOwotICAgICAgICBpZiAoKCppdCktPm93bmVyKCkgJiYgKCppdCktPm93bmVyKCktPmlz
QWJvdmVQcmlvcml0eUN1dG9mZigpKQorICAgICAgICBDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFj
a2luZyogYmFja2luZyA9ICptX2JhY2tpbmdzLmJlZ2luKCk7CisgICAgICAgIGlmIChiYWNraW5n
LT5vd25lcigpICYmIGJhY2tpbmctPm93bmVyKCktPmlzQWJvdmVQcmlvcml0eUN1dG9mZigpKQog
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlc3Ryb3lCYWNraW5nKCgqaXQpLCByZXNvdXJj
ZVByb3ZpZGVyKTsKKyAgICAgICAgbV9zaGFyZWRTdGF0ZS5yZW1vdmVCYWNraW5nT25JbXBsVGhy
ZWFkKGJhY2tpbmcpOworICAgICAgICBpZiAoIWJhY2tpbmctPnJlc291cmNlRGVsZXRlZCgpKQor
ICAgICAgICAgICAgYmFja2luZy0+ZGVsZXRlUmVzb3VyY2UocmVzb3VyY2VQcm92aWRlcik7Cisg
ICAgICAgIGRlc3Ryb3lCYWNraW5nKGJhY2tpbmcpOwogICAgIH0KIH0KIAogdm9pZCBDQ1ByaW9y
aXRpemVkVGV4dHVyZU1hbmFnZXI6OnJlZHVjZU1lbW9yeShDQ1Jlc291cmNlUHJvdmlkZXIqIHJl
c291cmNlUHJvdmlkZXIpCiB7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpICYm
IENDUHJveHk6OmlzTWFpblRocmVhZEJsb2NrZWQoKSk7CiAgICAgcmVkdWNlTWVtb3J5KG1fbWVt
b3J5QXZhaWxhYmxlQnl0ZXMsIHJlc291cmNlUHJvdmlkZXIpOwogICAgIEFTU0VSVChtZW1vcnlV
c2VCeXRlcygpIDw9IG1heE1lbW9yeUxpbWl0Qnl0ZXMoKSk7CiAKQEAgLTIzOCwyNyArMjUyLDM4
IEBAIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpyZWR1Y2VNZW1vcnkoQ0NSZXNv
dXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpCiAgICAgcmVkdWNlTWVtb3J5KG1lbW9yeVVzZUJ5
dGVzKCkgLSAod2FzdGVkTWVtb3J5IC0gdGVuUGVyY2VudE9mTWVtb3J5KSwgcmVzb3VyY2VQcm92
aWRlcik7CiB9CiAKLXZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjbGVhckFsbE1l
bW9yeShDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIpCitib29sIENDUHJpb3Jp
dGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmVkdWNlTWVtb3J5T25JbXBsVGhyZWFkQXN5bmMoQ0NSZXNv
dXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyKQogewotICAgIC8vIFVubGluayBhbmQgZGVz
dHJveSBhbGwgYmFja2luZyB0ZXh0dXJlcy4KLSAgICB3aGlsZSAobV9iYWNraW5ncy5zaXplKCkg
PiAwKSB7Ci0gICAgICAgIEJhY2tpbmdTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9iYWNraW5ncy5iZWdp
bigpOwotICAgICAgICBpZiAoKCppdCktPm93bmVyKCkpCi0gICAgICAgICAgICAoKml0KS0+b3du
ZXIoKS0+dW5saW5rKCk7Ci0gICAgICAgIGRlc3Ryb3lCYWNraW5nKCgqaXQpLCByZXNvdXJjZVBy
b3ZpZGVyKTsKLSAgICB9CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKyAg
ICBBU1NFUlQocmVzb3VyY2VQcm92aWRlcik7CisgICAgcmV0dXJuIG1fc2hhcmVkU3RhdGUuZXZp
Y3RCYWNraW5nc1Jlc291cmNlc09uSW1wbFRocmVhZEFzeW5jKHJlc291cmNlUHJvdmlkZXIpOwog
fQogCi12b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6YWxsQmFja2luZ1RleHR1cmVz
V2VyZURlbGV0ZWQoKQordm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmRlc3Ryb3lC
YWNraW5nc0FzeW5jaHJvbm91c2x5RXZpY3RlZCgpCiB7Ci0gICAgLy8gU2FtZSBhcyBjbGVhckFs
bE1lbW9yeSwgZXhjZXB0IGFsbCBvdXIgdGV4dHVyZXMgd2VyZSBhbHJlYWR5Ci0gICAgLy8gZGVs
ZXRlZCBleHRlcm5hbGx5LCBzbyB3ZSBkb24ndCBkZWxldGUgdGhlbS4gUGFzc2luZyBubwotICAg
IC8vIHJlc291cmNlUHJvdmlkZXIgcmVzdWx0cyBpbiBsZWFraW5nIHRoZSAobm93IGludmFsaWQp
IHRleHR1cmUgaWRzLgotICAgIGNsZWFyQWxsTWVtb3J5KDApOworICAgIEFTU0VSVChDQ1Byb3h5
Ojppc01haW5UaHJlYWQoKSk7CisgICAgY2xlYXJFdmljdGVkQmFja2luZ3MoKTsKK30KKwordm9p
ZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNsZWFyRXZpY3RlZEJhY2tpbmdzKCkKK3sK
KyAgICBCYWNraW5nU2V0IGV2aWN0ZWRCYWNraW5nczsKKyAgICBtX3NoYXJlZFN0YXRlLmdldEFu
ZENsZWFyRXZpY3RlZEJhY2tpbmdzKGV2aWN0ZWRCYWNraW5ncyk7CisgICAgZm9yIChCYWNraW5n
U2V0OjppdGVyYXRvciBpdCA9IGV2aWN0ZWRCYWNraW5ncy5iZWdpbigpOyBpdCAhPSBldmljdGVk
QmFja2luZ3MuZW5kKCk7ICsraXQpCisgICAgICAgIGRlc3Ryb3lCYWNraW5nKCgqaXQpKTsKK30K
Kwordm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNsZWFyQWxsTWVtb3J5KENDUmVz
b3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlcikKK3sKKyAgICBBU1NFUlQoQ0NQcm94eTo6
aXNJbXBsVGhyZWFkKCkgJiYgQ0NQcm94eTo6aXNNYWluVGhyZWFkQmxvY2tlZCgpKTsKKyAgICBB
U1NFUlQocmVzb3VyY2VQcm92aWRlcik7CisgICAgcmVkdWNlTWVtb3J5T25JbXBsVGhyZWFkQXN5
bmMocmVzb3VyY2VQcm92aWRlcik7CisgICAgY2xlYXJFdmljdGVkQmFja2luZ3MoKTsKIH0KIAog
dm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnJlZ2lzdGVyVGV4dHVyZShDQ1ByaW9y
aXRpemVkVGV4dHVyZSogdGV4dHVyZSkKIHsKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNNYWluVGhy
ZWFkKCkpOwogICAgIEFTU0VSVCh0ZXh0dXJlKTsKICAgICBBU1NFUlQoIXRleHR1cmUtPnRleHR1
cmVNYW5hZ2VyKCkpOwogICAgIEFTU0VSVCghdGV4dHVyZS0+YmFja2luZygpKTsKQEAgLTI2Niwx
MSArMjkxLDExIEBAIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpyZWdpc3RlclRl
eHR1cmUoQ0NQcmlvcml0aXplZFRleHR1cmUqIHRleHR1cmUpCiAKICAgICB0ZXh0dXJlLT5zZXRN
YW5hZ2VySW50ZXJuYWwodGhpcyk7CiAgICAgbV90ZXh0dXJlcy5hZGQodGV4dHVyZSk7Ci0KIH0K
IAogdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnVucmVnaXN0ZXJUZXh0dXJlKEND
UHJpb3JpdGl6ZWRUZXh0dXJlKiB0ZXh0dXJlKQogeworICAgIEFTU0VSVChDQ1Byb3h5Ojppc01h
aW5UaHJlYWQoKSB8fCAoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkgJiYgQ0NQcm94eTo6aXNNYWlu
VGhyZWFkQmxvY2tlZCgpKSk7CiAgICAgQVNTRVJUKHRleHR1cmUpOwogICAgIEFTU0VSVChtX3Rl
eHR1cmVzLmZpbmQodGV4dHVyZSkgIT0gbV90ZXh0dXJlcy5lbmQoKSk7CiAKQEAgLTI4MCw5ICsz
MDUsOSBAQCB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6dW5yZWdpc3RlclRleHR1
cmUoQ0NQcmlvcml0aXplZFRleHR1cmUqIHRleHR1cgogICAgIHRleHR1cmUtPnNldEFib3ZlUHJp
b3JpdHlDdXRvZmYoZmFsc2UpOwogfQogCi0KIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5h
Z2VyOjpyZXR1cm5CYWNraW5nVGV4dHVyZShDQ1ByaW9yaXRpemVkVGV4dHVyZSogdGV4dHVyZSkK
IHsKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNNYWluVGhyZWFkKCkgfHwgKENDUHJveHk6OmlzSW1w
bFRocmVhZCgpICYmIENDUHJveHk6OmlzTWFpblRocmVhZEJsb2NrZWQoKSkpOwogICAgIGlmICh0
ZXh0dXJlLT5iYWNraW5nKCkpIHsKICAgICAgICAgLy8gTW92ZSB0aGUgYmFja2luZyB0ZXh0dXJl
IHRvIHRoZSBmcm9udCBmb3IgZXZpY3Rpb24vcmVjeWNsaW5nIGFuZCB1bmxpbmsgaXQuCiAgICAg
ICAgIG1fYmFja2luZ3MucmVtb3ZlKHRleHR1cmUtPmJhY2tpbmcoKSk7CkBAIC0yOTMsMjUgKzMx
OCwyMyBAQCB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmV0dXJuQmFja2luZ1Rl
eHR1cmUoQ0NQcmlvcml0aXplZFRleHR1cmUqIHRleAogCiBDQ1ByaW9yaXRpemVkVGV4dHVyZTo6
QmFja2luZyogQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGVCYWNraW5nKEludFNp
emUgc2l6ZSwgR0MzRGVudW0gZm9ybWF0LCBDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJv
dmlkZXIpCiB7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpICYmIENDUHJveHk6
OmlzTWFpblRocmVhZEJsb2NrZWQoKSk7CiAgICAgQVNTRVJUKHJlc291cmNlUHJvdmlkZXIpOwot
CiAgICAgQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJjZUlkIHJlc291cmNlSWQgPSByZXNvdXJj
ZVByb3ZpZGVyLT5jcmVhdGVSZXNvdXJjZShtX3Bvb2wsIHNpemUsIGZvcm1hdCwgQ0NSZXNvdXJj
ZVByb3ZpZGVyOjpUZXh0dXJlVXNhZ2VBbnkpOwogICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpC
YWNraW5nKiBiYWNraW5nID0gbmV3IENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nKHJlc291
cmNlSWQsIHNpemUsIGZvcm1hdCk7CiAgICAgbV9tZW1vcnlVc2VCeXRlcyArPSBiYWNraW5nLT5i
eXRlcygpOwogICAgIC8vIFB1dCBiYWNraW5nIHRleHR1cmUgYXQgdGhlIGZyb250IGZvciBldmlj
dGlvbiwgc2luY2UgaXQgaXNuJ3QgaW4gdXNlIHlldC4KICAgICBtX2JhY2tpbmdzLmluc2VydEJl
Zm9yZShtX2JhY2tpbmdzLmJlZ2luKCksIGJhY2tpbmcpOworICAgIG1fc2hhcmVkU3RhdGUuYWRk
QmFja2luZ09uSW1wbFRocmVhZChiYWNraW5nKTsKICAgICByZXR1cm4gYmFja2luZzsKIH0KIAot
dm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmRlc3Ryb3lCYWNraW5nKENDUHJpb3Jp
dGl6ZWRUZXh0dXJlOjpCYWNraW5nKiBiYWNraW5nLCBDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291
cmNlUHJvdmlkZXIpCit2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6ZGVzdHJveUJh
Y2tpbmcoQ0NQcmlvcml0aXplZFRleHR1cmU6OkJhY2tpbmcqIGJhY2tpbmcpCiB7CiAgICAgQVNT
RVJUKGJhY2tpbmcpOwotICAgIEFTU0VSVCghYmFja2luZy0+b3duZXIoKSB8fCAhYmFja2luZy0+
b3duZXIoKS0+aXNBYm92ZVByaW9yaXR5Q3V0b2ZmKCkpOwogICAgIEFTU0VSVCghYmFja2luZy0+
b3duZXIoKSB8fCAhYmFja2luZy0+b3duZXIoKS0+aXNTZWxmTWFuYWdlZCgpKTsKICAgICBBU1NF
UlQobV9iYWNraW5ncy5maW5kKGJhY2tpbmcpICE9IG1fYmFja2luZ3MuZW5kKCkpOwogCi0gICAg
aWYgKHJlc291cmNlUHJvdmlkZXIpCi0gICAgICAgIHJlc291cmNlUHJvdmlkZXItPmRlbGV0ZVJl
c291cmNlKGJhY2tpbmctPmlkKCkpOwogICAgIGlmIChiYWNraW5nLT5vd25lcigpKQogICAgICAg
ICBiYWNraW5nLT5vd25lcigpLT51bmxpbmsoKTsKICAgICBtX21lbW9yeVVzZUJ5dGVzIC09IGJh
Y2tpbmctPmJ5dGVzKCk7CkBAIC0zMjAsMTAgKzM0MywxMSBAQCB2b2lkIENDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlcjo6ZGVzdHJveUJhY2tpbmcoQ0NQcmlvcml0aXplZFRleHR1cmU6OkJhY2tp
bmcqCiAgICAgZGVsZXRlIGJhY2tpbmc7CiB9CiAKLQogI2lmICFBU1NFUlRfRElTQUJMRUQKIHZv
aWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjphc3NlcnRJbnZhcmlhbnRzKCkKIHsKKyAg
ICBBU1NFUlQoQ0NQcm94eTo6aXNNYWluVGhyZWFkKCkpOworCiAgICAgLy8gSWYgd2UgaGl0IGFu
eSBvZiB0aGVzZSBhc3NlcnRzLCB0aGVyZSBpcyBhIGJ1ZyBpbiB0aGlzIGNsYXNzLiBUbyBzZWUK
ICAgICAvLyB3aGVyZSB0aGUgYnVnIGlzLCBjYWxsIHRoaXMgZnVuY3Rpb24gYXQgdGhlIGJlZ2lu
bmluZyBhbmQgZW5kIG9mCiAgICAgLy8gZXZlcnkgcHVibGljIGZ1bmN0aW9uLgpAQCAtMzU1LDUg
KzM3OSw0OSBAQCB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6YXNzZXJ0SW52YXJp
YW50cygpCiB9CiAjZW5kaWYKIAorQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpTaGFyZWRT
dGF0ZTo6flNoYXJlZFN0YXRlKCkKK3sKKyAgICBBU1NFUlQobV9ldmljdGVkQmFja2luZ3MuaXNF
bXB0eSgpKTsKKyAgICBBU1NFUlQobV91bmV2aWN0ZWRCYWNraW5ncy5pc0VtcHR5KCkpOworfQor
Cit2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6U2hhcmVkU3RhdGU6OmFkZEJhY2tp
bmdPbkltcGxUaHJlYWQoQ0NQcmlvcml0aXplZFRleHR1cmU6OkJhY2tpbmcqIGJhY2tpbmcpCit7
CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpICYmIENDUHJveHk6OmlzTWFpblRo
cmVhZEJsb2NrZWQoKSk7CisgICAgbV91bmV2aWN0ZWRCYWNraW5ncy5hZGQoYmFja2luZyk7Cit9
CisKK3ZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpTaGFyZWRTdGF0ZTo6cmVtb3Zl
QmFja2luZ09uSW1wbFRocmVhZChDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZyogYmFja2lu
ZykKK3sKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkgJiYgQ0NQcm94eTo6aXNN
YWluVGhyZWFkQmxvY2tlZCgpKTsKKyAgICBpZiAoYmFja2luZy0+cmVzb3VyY2VEZWxldGVkKCkp
IHsKKyAgICAgICAgQVNTRVJUKG1fZXZpY3RlZEJhY2tpbmdzLmZpbmQoYmFja2luZykgIT0gbV9l
dmljdGVkQmFja2luZ3MuZW5kKCkpOworICAgICAgICBtX2V2aWN0ZWRCYWNraW5ncy5yZW1vdmUo
YmFja2luZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKG1fdW5ldmljdGVkQmFja2lu
Z3MuZmluZChiYWNraW5nKSAhPSBtX3VuZXZpY3RlZEJhY2tpbmdzLmVuZCgpKTsKKyAgICAgICAg
bV91bmV2aWN0ZWRCYWNraW5ncy5yZW1vdmUoYmFja2luZyk7CisgICAgfQorfQorCitib29sIEND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6U2hhcmVkU3RhdGU6OmV2aWN0QmFja2luZ3NSZXNv
dXJjZXNPbkltcGxUaHJlYWRBc3luYyhDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlk
ZXIpCit7CisgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJ
bXBsVGhyZWFkKCkpOworICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7CisgICAgZm9yIChC
YWNraW5nU2V0OjppdGVyYXRvciBpdCA9IG1fdW5ldmljdGVkQmFja2luZ3MuYmVnaW4oKTsgaXQg
IT0gbV91bmV2aWN0ZWRCYWNraW5ncy5lbmQoKTsgKytpdCkgeworICAgICAgICByZXN1bHQgPSB0
cnVlOworICAgICAgICAoKml0KS0+ZGVsZXRlUmVzb3VyY2UocmVzb3VyY2VQcm92aWRlcik7Cisg
ICAgICAgIG1fZXZpY3RlZEJhY2tpbmdzLmFkZCgoKml0KSk7CisgICAgfQorICAgIG1fdW5ldmlj
dGVkQmFja2luZ3MuY2xlYXIoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6U2hhcmVkU3RhdGU6OmdldEFuZENsZWFyRXZpY3RlZEJh
Y2tpbmdzKEJhY2tpbmdTZXQmIGV2aWN0ZWRCYWNraW5ncykKK3sKKyAgICBldmljdGVkQmFja2lu
Z3MuY2xlYXIoKTsKKyAgICBNdXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOworICAgIGV2aWN0ZWRC
YWNraW5ncy5zd2FwKG1fZXZpY3RlZEJhY2tpbmdzKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuaApp
bmRleCAxM2RiYzUxNzZiY2Q3OGVlMjk3MDkwYTY3NjUxMjQ1ZjliZDc2NGNhLi4zMzhmZDczYWI1
ZmUxMjNlNGVlMWZiMzZmNzVlMjkwYjc4ZDczZWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFn
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuaApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUg
IkludFNpemUuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0
SGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03Nyw4ICs3OCwxOSBA
QCBwdWJsaWM6CiAgICAgYm9vbCByZXF1ZXN0TGF0ZShDQ1ByaW9yaXRpemVkVGV4dHVyZSopOwog
CiAgICAgdm9pZCByZWR1Y2VNZW1vcnkoQ0NSZXNvdXJjZVByb3ZpZGVyKik7CisKKyAgICAvLyBS
ZXR1cm5zIHRydWUgaWYgcmVzb3VyY2VzIGFyZSBkZWxldGVkIGFzIGEgcmVzdWx0IG9mIHRoaXMg
Y2FsbC4KKyAgICAvLyBUaGlzIGNhbiBiZSBjYWxsZWQgY29uY3VycmVudGx5IHdpdGggdGhlIG1h
aW4gdGhyZWFkIGFjY2Vzc2luZyB0aGlzCisgICAgLy8gc3RydWN0dXJlLCBhbmQgb25seSB0b3Vj
aGVzIGRhdGEgaW4gdGhlIHF1YXJhbnRpbmVkIG1fc2hhcmVkU3RhdGUuCisgICAgYm9vbCByZWR1
Y2VNZW1vcnlPbkltcGxUaHJlYWRBc3luYyhDQ1Jlc291cmNlUHJvdmlkZXIqKTsKKworICAgIC8v
IFJlbW92ZSB0aGUgYmFja2luZ3Mgd2hvc2UgcmVzb3VyY2VzIHdlcmUgZGVzdHJveWVkIGJ5IAor
ICAgIC8vIHJlZHVjZU1lbW9yeU9uSW1wbFRocmVhZEFzeW5jCisgICAgdm9pZCBkZXN0cm95QmFj
a2luZ3NBc3luY2hyb25vdXNseUV2aWN0ZWQoKTsKKworICAgIC8vIERlbGV0ZSBhbGwgdGV4dHVy
ZXMgYW5kIGZybSB0aGUgaW1wbCB0aHJlYWQgKGF0IHRocmVhZCBleGl0IGFuZAorICAgIC8vIGNv
bnRleHQgbG9zdCkuCiAgICAgdm9pZCBjbGVhckFsbE1lbW9yeShDQ1Jlc291cmNlUHJvdmlkZXIq
KTsKLSAgICB2b2lkIGFsbEJhY2tpbmdUZXh0dXJlc1dlcmVEZWxldGVkKCk7CiAKICAgICB2b2lk
IGFjcXVpcmVCYWNraW5nVGV4dHVyZUlmTmVlZGVkKENDUHJpb3JpdGl6ZWRUZXh0dXJlKiwgQ0NS
ZXNvdXJjZVByb3ZpZGVyKik7CiAKQEAgLTkxLDYgKzEwMyw3IEBAIHB1YmxpYzoKICNlbmRpZgog
CiBwcml2YXRlOgorCiAgICAgLy8gQ29tcGFyZSB0ZXh0dXJlcy4gSGlnaGVzdCBwcmlvcml0eSBm
aXJzdC4KICAgICBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVRleHR1cmVzKENDUHJpb3JpdGl6
ZWRUZXh0dXJlKiBhLCBDQ1ByaW9yaXRpemVkVGV4dHVyZSogYikKICAgICB7CkBAIC0xMDksMTEg
KzEyMiwxMCBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcihzaXplX3QgbWF4TWVtb3J5TGltaXRCeXRlcywgaW50IG1heFRleHR1cmVTaXplLCBpbnQg
cG9vbCk7Ci0KICAgICB2b2lkIHJlZHVjZU1lbW9yeShzaXplX3QgbGltaXQsIENDUmVzb3VyY2VQ
cm92aWRlciopOwotCiAgICAgQ0NQcmlvcml0aXplZFRleHR1cmU6OkJhY2tpbmcqIGNyZWF0ZUJh
Y2tpbmcoSW50U2l6ZSwgR0MzRGVudW0gZm9ybWF0LCBDQ1Jlc291cmNlUHJvdmlkZXIqKTsKLSAg
ICB2b2lkIGRlc3Ryb3lCYWNraW5nKENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nKiwgQ0NS
ZXNvdXJjZVByb3ZpZGVyKik7CisgICAgdm9pZCBjbGVhckV2aWN0ZWRCYWNraW5ncygpOworICAg
IHZvaWQgZGVzdHJveUJhY2tpbmcoQ0NQcmlvcml0aXplZFRleHR1cmU6OkJhY2tpbmcqKTsKIAog
ICAgIHNpemVfdCBtX21heE1lbW9yeUxpbWl0Qnl0ZXM7CiAgICAgdW5zaWduZWQgbV9wcmlvcml0
eUN1dG9mZjsKQEAgLTEzMiw2ICsxNDQsMzQgQEAgcHJpdmF0ZToKIAogICAgIFRleHR1cmVWZWN0
b3IgbV90ZW1wVGV4dHVyZVZlY3RvcjsKICAgICBCYWNraW5nVmVjdG9yIG1fdGVtcEJhY2tpbmdW
ZWN0b3I7CisKKyAgICAvLyBUaGlzIHN0YXRlIHRoYXQgY2FuIGJlIGNvbmN1cnJlbnRseSBhY2Nl
c3NlZCBieSB0aGUgbWFpbiBhbmQgaW1wbCB0aHJlYWQsCisgICAgLy8gYW5kIG5lZWRzIHByb3Rl
Y3Rpb24gYnkgYSBtdXRleC4KKyAgICBjbGFzcyBTaGFyZWRTdGF0ZSB7CisgICAgcHVibGljOgor
ICAgICAgICBTaGFyZWRTdGF0ZSgpIHsgfQorICAgICAgICB+U2hhcmVkU3RhdGUoKTsKKworICAg
ICAgICAvLyBDYWxsZWQgb24gdGhlIGltcGwgdGhyZWFkIHdoaWxlIHRoZSBtYWluIHRocmVhZCBp
cyBibG9ja2VkCisgICAgICAgIHZvaWQgYWRkQmFja2luZ09uSW1wbFRocmVhZChDQ1ByaW9yaXRp
emVkVGV4dHVyZTo6QmFja2luZyopOworICAgICAgICB2b2lkIHJlbW92ZUJhY2tpbmdPbkltcGxU
aHJlYWQoQ0NQcmlvcml0aXplZFRleHR1cmU6OkJhY2tpbmcqKTsKKworICAgICAgICAvLyBDYWxs
ZWQgb24gdGhlIGltcGwgdGhyZWFkIHdoaWxlIHRoZSBtYWluIHRocmVhZCBtYXkgbm90IGJlCisg
ICAgICAgIC8vIGJsb2NrZWQKKyAgICAgICAgYm9vbCBldmljdEJhY2tpbmdzUmVzb3VyY2VzT25J
bXBsVGhyZWFkQXN5bmMoQ0NSZXNvdXJjZVByb3ZpZGVyKik7CisKKyAgICAgICAgLy8gQ2FsbGVk
IG9uIHRoZSBtYWluIHRocmVhZCwgcG9zc2libHkgY29uY3VycmVudGx5IHdpdGggCisgICAgICAg
IC8vIGV2aWN0QmFja2luZ3NSZXNvdXJjZXNPbkltcGxUaHJlYWRBc3luYy4KKyAgICAgICAgLy8g
QWxzbyBjYWxsZWQgb24gdGhlIGltcGwgdGhyZWFkIGR1cmluZyB0aHJlYWQtc2h1dGRvd24gYW5k
IAorICAgICAgICAvLyBjb250ZXh0LWxvc3QKKyAgICAgICAgdm9pZCBnZXRBbmRDbGVhckV2aWN0
ZWRCYWNraW5ncyhCYWNraW5nU2V0Jik7CisKKyAgICBwcml2YXRlOgorICAgICAgICBNdXRleCBt
X211dGV4OworICAgICAgICBCYWNraW5nU2V0IG1fdW5ldmljdGVkQmFja2luZ3M7CisgICAgICAg
IEJhY2tpbmdTZXQgbV9ldmljdGVkQmFja2luZ3M7CisgICAgfTsKKyAgICBTaGFyZWRTdGF0ZSBt
X3NoYXJlZFN0YXRlOwogfTsKIAogfSAvLyBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NjaGVkdWxlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NjaGVkdWxlci5jcHAK
aW5kZXggOTk5YTA4ZWM5ZDA1MTQ4MTc0ZDEzYzBmYTUyODhiZWYxYjJkYmY2My4uZTQxZDk1NWFi
OTViMWQ2MDIyNTcwZjA1M2IyMThiYzE3YjE3ZDY3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY2hlZHVsZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NoZWR1bGVyLmNw
cApAQCAtOTksNiArOTksNyBAQCB2b2lkIENDU2NoZWR1bGVyOjpiZWdpbkZyYW1lQWJvcnRlZCgp
CiAgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ1NjaGVkdWxlcjo6YmVnaW5GcmFtZUFib3J0ZWQi
KTsKICAgICBtX3N0YXRlTWFjaGluZS5iZWdpbkZyYW1lQWJvcnRlZCgpOwogICAgIHByb2Nlc3NT
Y2hlZHVsZWRBY3Rpb25zKCk7CisgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAogdm9pZCBDQ1Nj
aGVkdWxlcjo6c2V0TWF4RnJhbWVzUGVuZGluZyhpbnQgbWF4RnJhbWVzUGVuZGluZykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2lu
Z2xlVGhyZWFkUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKaW5kZXggNjg3NmVhMjE4OGJhZjY2Njhh
MjlhYzM3YzFjZDM4YzhjYjQ0MWNlOS4uMTQ1YWUyOTcwOTAyNDZkMTRjNTNmYWEyYTdhZmEwZTRk
MzI2OTJjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKQEAgLTE1
NSw5ICsxNTUsOSBAQCBib29sIENDU2luZ2xlVGhyZWFkUHJveHk6OnJlY3JlYXRlQ29udGV4dCgp
CiAKICAgICBib29sIGluaXRpYWxpemVkOwogICAgIHsKKyAgICAgICAgRGVidWdTY29wZWRTZXRN
YWluVGhyZWFkQmxvY2tlZCBtYWluVGhyZWFkQmxvY2tlZDsKICAgICAgICAgRGVidWdTY29wZWRT
ZXRJbXBsVGhyZWFkIGltcGw7Ci0gICAgICAgIGlmICghbV9sYXllclRyZWVIb3N0SW1wbC0+Y29u
dGVudHNUZXh0dXJlc1B1cmdlZCgpKQotICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5kZWxl
dGVDb250ZW50c1RleHR1cmVzT25JbXBsVGhyZWFkKG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJlc291
cmNlUHJvdmlkZXIoKSk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGVsZXRlQWxsQ29udGVu
dHNUZXh0dXJlc09uSW1wbFRocmVhZChtX2xheWVyVHJlZUhvc3RJbXBsLT5yZXNvdXJjZVByb3Zp
ZGVyKCkpOwogICAgICAgICBpbml0aWFsaXplZCA9IG1fbGF5ZXJUcmVlSG9zdEltcGwtPmluaXRp
YWxpemVSZW5kZXJlcihjb250ZXh0LnJlbGVhc2UoKSwgVW50aHJvdHRsZWRVcGxvYWRlcik7CiAg
ICAgICAgIGlmIChpbml0aWFsaXplZCkgewogICAgICAgICAgICAgbV9SZW5kZXJlckNhcGFiaWxp
dGllc0Zvck1haW5UaHJlYWQgPSBtX2xheWVyVHJlZUhvc3RJbXBsLT5yZW5kZXJlckNhcGFiaWxp
dGllcygpOwpAQCAtMjYwLDkgKzI2MCw3IEBAIHZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6c3Rv
cCgpCiAgICAgewogICAgICAgICBEZWJ1Z1Njb3BlZFNldE1haW5UaHJlYWRCbG9ja2VkIG1haW5U
aHJlYWRCbG9ja2VkOwogICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKLQot
ICAgICAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRlbnRzVGV4dHVyZXNQdXJnZWQo
KSkKLSAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGVsZXRlQ29udGVudHNUZXh0dXJlc09u
SW1wbFRocmVhZChtX2xheWVyVHJlZUhvc3RJbXBsLT5yZXNvdXJjZVByb3ZpZGVyKCkpOworICAg
ICAgICBtX2xheWVyVHJlZUhvc3QtPmRlbGV0ZUFsbENvbnRlbnRzVGV4dHVyZXNPbkltcGxUaHJl
YWQobV9sYXllclRyZWVIb3N0SW1wbC0+cmVzb3VyY2VQcm92aWRlcigpKTsKICAgICAgICAgbV9s
YXllclRyZWVIb3N0SW1wbC5jbGVhcigpOwogICAgIH0KICAgICBtX2xheWVyVHJlZUhvc3QgPSAw
OwpAQCAtMjc1LDYgKzI3MywxNSBAQCB2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OnBvc3RBbmlt
YXRpb25FdmVudHNUb01haW5UaHJlYWRPbkltcGxUaHJlYWQoUGFzc093blB0cgogICAgIG1fbGF5
ZXJUcmVlSG9zdC0+c2V0QW5pbWF0aW9uRXZlbnRzKGV2ZW50cywgd2FsbENsb2NrVGltZSk7CiB9
CiAKK3ZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6cmVkdWNlQ29udGVudHNUZXh0dXJlc01lbW9y
eU9uSW1wbFRocmVhZCgpCit7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsK
KyAgICBpZiAobV9sYXllclRyZWVIb3N0LT5yZWR1Y2VDb250ZW50c1RleHR1cmVzTWVtb3J5T25J
bXBsVGhyZWFkKG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJlc291cmNlUHJvdmlkZXIoKSkpIHsKKyAg
ICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+c2V0Q29udGVudHNUZXh0dXJlc1B1cmdlZCgpOwor
ICAgICAgICBzZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpOworICAgIH0KK30KKwogLy8gQ2Fs
bGVkIGJ5IHRoZSBsZWdhY3kgc2NoZWR1bGluZyBwYXRoIChlLmcuIHdoZXJlIHJlbmRlcl93aWRn
ZXQgZG9lcyB0aGUgc2NoZWR1bGluZykKIHZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tcG9z
aXRlSW1tZWRpYXRlbHkoKQogewpAQCAtMzAxLDggKzMwOCw3IEBAIGJvb2wgQ0NTaW5nbGVUaHJl
YWRQcm94eTo6Y29tbWl0QW5kQ29tcG9zaXRlKCkKICAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdC0+
aW5pdGlhbGl6ZVJlbmRlcmVySWZOZWVkZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgaWYgKG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRlbnRzVGV4dHVyZXNQdXJnZWQoKSkKLSAg
ICAgICAgbV9sYXllclRyZWVIb3N0LT5ldmljdEFsbENvbnRlbnRUZXh0dXJlcygpOworICAgIG1f
bGF5ZXJUcmVlSG9zdC0+ZGVzdHJveUNvbnRlbnRzVGV4dHVyZXNFdmljdGVkQnlJbXBsVGhyZWFk
KCk7CiAKICAgICBDQ1RleHR1cmVVcGRhdGVRdWV1ZSBxdWV1ZTsKICAgICBtX2xheWVyVHJlZUhv
c3QtPnVwZGF0ZUxheWVycyhxdWV1ZSwgbV9sYXllclRyZWVIb3N0SW1wbC0+bWVtb3J5QWxsb2Nh
dGlvbkxpbWl0Qnl0ZXMoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgKaW5k
ZXggYTczYTZhYTE3MDNjM2Q0ZTNkY2Y3MzgzNmVkYjRlYmExODdhODA5ZS4uOWZiMWFiOGQzNGM4
ZDc3YjQwZDhjNGUzMTcyMGExZTQ0NGI2NWQ3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhy
ZWFkUHJveHkuaApAQCAtNzIsNiArNzIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNl
dE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCkgT1ZFUlJJREUgeyBtX2xheWVyVHJlZUhvc3QtPnNj
aGVkdWxlQ29tcG9zaXRlKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNDb21taXRPbklt
cGxUaHJlYWQoKSBPVkVSUklERSB7IG1fbGF5ZXJUcmVlSG9zdC0+c2NoZWR1bGVDb21wb3NpdGUo
KTsgfQogICAgIHZpcnR1YWwgdm9pZCBwb3N0QW5pbWF0aW9uRXZlbnRzVG9NYWluVGhyZWFkT25J
bXBsVGhyZWFkKFBhc3NPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+LCBkb3VibGUgd2Fs
bENsb2NrVGltZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlZHVjZUNvbnRlbnRzVGV4
dHVyZXNNZW1vcnlPbkltcGxUaHJlYWQoKSBPVkVSUklERTsKIAogICAgIC8vIENhbGxlZCBieSB0
aGUgbGVnYWN5IHBhdGggd2hlcmUgUmVuZGVyV2lkZ2V0IGRvZXMgdGhlIHNjaGVkdWxpbmcuCiAg
ICAgdm9pZCBjb21wb3NpdGVJbW1lZGlhdGVseSgpOwpAQCAtMTAyLDcgKzEwMyw3IEBAIHByaXZh
dGU6CiB9OwogCiAvLyBGb3IgdXNlIGluIHRoZSBzaW5nbGUtdGhyZWFkZWQgY2FzZS4gSW4gZGVi
dWcgYnVpbGRzLCBpdCBwcmV0ZW5kcyB0aGF0IHRoZQotLy8gY29kZSBpcyBydW5uaW5nIG9uIHRo
ZSB0aHJlYWQgdG8gc2F0aXNmeSBhc3NlcnRpb24gY2hlY2tzLgorLy8gY29kZSBpcyBydW5uaW5n
IG9uIHRoZSBpbXBsIHRocmVhZCB0byBzYXRpc2Z5IGFzc2VydGlvbiBjaGVja3MuCiBjbGFzcyBE
ZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgewogcHVibGljOgogICAgIERlYnVnU2NvcGVkU2V0SW1w
bFRocmVhZCgpCkBAIC0xMzcsNiArMTM4LDE1IEBAIHB1YmxpYzoKICAgICB9CiB9OwogCisvLyBG
b3IgdXNlIGluIHRoZSBzaW5nbGUtdGhyZWFkZWQgY2FzZS4gSW4gZGVidWcgYnVpbGRzLCBpdCBw
cmV0ZW5kcyB0aGF0IHRoZQorLy8gY29kZSBpcyBydW5uaW5nIG9uIHRoZSBpbXBsIHRocmVhZCBh
bmQgdGhhdCB0aGUgbWFpbiB0aHJlYWQgaXMgYmxvY2tlZCB0bworLy8gc2F0aXNmeSBhc3NlcnRp
b24gY2hlY2tzCitjbGFzcyBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxv
Y2tlZCB7Citwcml2YXRlOgorICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBtX2ltcGxUaHJl
YWQ7CisgICAgRGVidWdTY29wZWRTZXRNYWluVGhyZWFkQmxvY2tlZCBtX21haW5UaHJlYWRCbG9j
a2VkOworfTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVw
ZGF0ZVF1ZXVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGV4dHVyZVVwZGF0ZVF1ZXVlLmNwcAppbmRleCA4ZjU4ZmNiY2I0Y2JhMjRmMzRhNWFh
ZDQ3ZWQ3Yzk0NjA3NDNjMWE4Li43MTlmY2QzMTQ0NTdmNzQ2MzdiYTU4NDUwYThjYjNkNDcwYmFk
OWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RleHR1cmVVcGRhdGVRdWV1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlUXVldWUuY3BwCkBAIC01NCwx
MCArNTQsMjEgQEAgdm9pZCBDQ1RleHR1cmVVcGRhdGVRdWV1ZTo6YXBwZW5kQ29weShUZXh0dXJl
Q29waWVyOjpQYXJhbWV0ZXJzIGNvcHkpCiAgICAgbV9jb3B5RW50cmllcy5hcHBlbmQoY29weSk7
CiB9CiAKLXZvaWQgQ0NUZXh0dXJlVXBkYXRlUXVldWU6OmNsZWFyVXBsb2FkcygpCit2b2lkIEND
VGV4dHVyZVVwZGF0ZVF1ZXVlOjpjbGVhclVwbG9hZHNUb0RlbGV0ZWRSZXNvdXJjZXMoKQogewot
ICAgIG1fZnVsbEVudHJpZXMuY2xlYXIoKTsKLSAgICBtX3BhcnRpYWxFbnRyaWVzLmNsZWFyKCk7
CisgICAgY2xlYXJVcGxvYWRzVG9EZWxldGVkUmVzb3VyY2VzKG1fZnVsbEVudHJpZXMpOworICAg
IGNsZWFyVXBsb2Fkc1RvRGVsZXRlZFJlc291cmNlcyhtX3BhcnRpYWxFbnRyaWVzKTsKK30KKwor
dm9pZCBDQ1RleHR1cmVVcGRhdGVRdWV1ZTo6Y2xlYXJVcGxvYWRzVG9EZWxldGVkUmVzb3VyY2Vz
KERlcXVlPFRleHR1cmVVcGxvYWRlcjo6UGFyYW1ldGVycz4mIGVudHJ5UXVldWUpCit7CisgICAg
RGVxdWU8VGV4dHVyZVVwbG9hZGVyOjpQYXJhbWV0ZXJzPiB0ZW1wOworICAgIGVudHJ5UXVldWUu
c3dhcCh0ZW1wKTsKKyAgICB3aGlsZSAodGVtcC5zaXplKCkpIHsKKyAgICAgICAgVGV4dHVyZVVw
bG9hZGVyOjpQYXJhbWV0ZXJzIHVwbG9hZCA9IHRlbXAudGFrZUZpcnN0KCk7CisgICAgICAgIGlm
ICghdXBsb2FkLnRleHR1cmUtPmJhY2tpbmdXYXNBc3luY2hyb25vdXNseURlbGV0ZWQoKSkKKyAg
ICAgICAgICAgIGVudHJ5UXVldWUuYXBwZW5kKHVwbG9hZCk7CisgICAgfQogfQogCiBUZXh0dXJl
VXBsb2FkZXI6OlBhcmFtZXRlcnMgQ0NUZXh0dXJlVXBkYXRlUXVldWU6OnRha2VGaXJzdEZ1bGxV
cGxvYWQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlUXVldWUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZVF1ZXVlLmgKaW5kZXggZGU2Mzcz
ODIxZjA4YTg0NTRhZTY0ODViNmFmMzc0ODNjNzgwNWVlNi4uYzhkY2IxNmUwMjNiYmExNzZiNTA4
ZTFjZDk0YjY4ZjYyN2Q5NzBlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlUXVldWUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVRdWV1
ZS5oCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFwcGVuZFBhcnRpYWxVcGxv
YWQoVGV4dHVyZVVwbG9hZGVyOjpQYXJhbWV0ZXJzKTsKICAgICB2b2lkIGFwcGVuZENvcHkoVGV4
dHVyZUNvcGllcjo6UGFyYW1ldGVycyk7CiAKLSAgICB2b2lkIGNsZWFyVXBsb2FkcygpOworICAg
IHZvaWQgY2xlYXJVcGxvYWRzVG9EZWxldGVkUmVzb3VyY2VzKCk7CiAKICAgICBUZXh0dXJlVXBs
b2FkZXI6OlBhcmFtZXRlcnMgdGFrZUZpcnN0RnVsbFVwbG9hZCgpOwogICAgIFRleHR1cmVVcGxv
YWRlcjo6UGFyYW1ldGVycyB0YWtlRmlyc3RQYXJ0aWFsVXBsb2FkKCk7CkBAIC01Niw2ICs1Niw3
IEBAIHB1YmxpYzoKICAgICBib29sIGhhc01vcmVVcGRhdGVzKCkgY29uc3Q7CiAKIHByaXZhdGU6
CisgICAgdm9pZCBjbGVhclVwbG9hZHNUb0RlbGV0ZWRSZXNvdXJjZXMoRGVxdWU8VGV4dHVyZVVw
bG9hZGVyOjpQYXJhbWV0ZXJzPiYgZW50cnlRdWV1ZSk7CiAgICAgRGVxdWU8VGV4dHVyZVVwbG9h
ZGVyOjpQYXJhbWV0ZXJzPiBtX2Z1bGxFbnRyaWVzOwogICAgIERlcXVlPFRleHR1cmVVcGxvYWRl
cjo6UGFyYW1ldGVycz4gbV9wYXJ0aWFsRW50cmllczsKICAgICBEZXF1ZTxUZXh0dXJlQ29waWVy
OjpQYXJhbWV0ZXJzPiBtX2NvcHlFbnRyaWVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcApp
bmRleCA1ODNjNzBjNjA0MzZmNTM3ZWU4NzhiMmQ3NDBkYWYyNmM5Mjk3NDUxLi4yYjU2MDFjZjk1
ZDQxNjIxM2EwMzE5ODdjZmY3YjMyNzRmMDIzZmQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5
LmNwcApAQCAtODAsNyArODAsOCBAQCBDQ1RocmVhZFByb3h5OjpDQ1RocmVhZFByb3h5KENDTGF5
ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCkKICAgICAsIG1fcmVhZGJhY2tSZXF1ZXN0T25JbXBs
VGhyZWFkKDApCiAgICAgLCBtX2NvbW1pdENvbXBsZXRpb25FdmVudE9uSW1wbFRocmVhZCgwKQog
ICAgICwgbV90ZXh0dXJlQWNxdWlzaXRpb25Db21wbGV0aW9uRXZlbnRPbkltcGxUaHJlYWQoMCkK
LSAgICAsIG1fcmVzZXRDb250ZW50c1RleHR1cmVzUHVyZ2VkQWZ0ZXJDb21taXRPbkltcGxUaHJl
YWQoZmFsc2UpCisgICAgLCBtX2NvbnRlbnRzVGV4dHVyZXNQdXJnZUNvdW50KDApCisgICAgLCBt
X2NvbnRlbnRzVGV4dHVyZXNQdXJnZUFjaygwKQogICAgICwgbV9uZXh0RnJhbWVJc05ld2x5Q29t
bWl0dGVkRnJhbWVPbkltcGxUaHJlYWQoZmFsc2UpCiAgICAgLCBtX3JlbmRlclZTeW5jRW5hYmxl
ZChsYXllclRyZWVIb3N0LT5zZXR0aW5ncygpLnJlbmRlclZTeW5jRW5hYmxlZCkKIHsKQEAgLTEw
OCw5ICsxMDksMTIgQEAgYm9vbCBDQ1RocmVhZFByb3h5Ojpjb21wb3NpdGVBbmRSZWFkYmFjayh2
b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmIHJlY3QpCiAKIAogICAgIC8vIFBlcmZvcm0gYSBz
eW5jaHJvbm91cyBjb21taXQuCi0gICAgQ0NDb21wbGV0aW9uRXZlbnQgYmVnaW5GcmFtZUNvbXBs
ZXRpb247Ci0gICAgQ0NQcm94eTo6aW1wbFRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVh
ZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OmZvcmNlQmVnaW5GcmFtZU9uSW1wbFRocmVhZCwg
JmJlZ2luRnJhbWVDb21wbGV0aW9uKSk7Ci0gICAgYmVnaW5GcmFtZUNvbXBsZXRpb24ud2FpdCgp
OworICAgIHsKKyAgICAgICAgRGVidWdTY29wZWRTZXRNYWluVGhyZWFkQmxvY2tlZCBtYWluVGhy
ZWFkQmxvY2tlZDsKKyAgICAgICAgQ0NDb21wbGV0aW9uRXZlbnQgYmVnaW5GcmFtZUNvbXBsZXRp
b247CisgICAgICAgIENDUHJveHk6OmltcGxUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJl
YWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5Ojpmb3JjZUJlZ2luRnJhbWVPbkltcGxUaHJlYWQs
ICZiZWdpbkZyYW1lQ29tcGxldGlvbikpOworICAgICAgICBiZWdpbkZyYW1lQ29tcGxldGlvbi53
YWl0KCk7CisgICAgfQogICAgIG1faW5Db21wb3NpdGVBbmRSZWFkYmFjayA9IHRydWU7CiAgICAg
YmVnaW5GcmFtZSgpOwogICAgIG1faW5Db21wb3NpdGVBbmRSZWFkYmFjayA9IGZhbHNlOwpAQCAt
MTE5LDggKzEyMywxMSBAQCBib29sIENDVGhyZWFkUHJveHk6OmNvbXBvc2l0ZUFuZFJlYWRiYWNr
KHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYgcmVjdCkKICAgICBSZWFkYmFja1JlcXVlc3Qg
cmVxdWVzdDsKICAgICByZXF1ZXN0LnJlY3QgPSByZWN0OwogICAgIHJlcXVlc3QucGl4ZWxzID0g
cGl4ZWxzOwotICAgIENDUHJveHk6OmltcGxUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJl
YWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5OjpyZXF1ZXN0UmVhZGJhY2tPbkltcGxUaHJlYWQs
ICZyZXF1ZXN0KSk7Ci0gICAgcmVxdWVzdC5jb21wbGV0aW9uLndhaXQoKTsKKyAgICB7CisgICAg
ICAgIERlYnVnU2NvcGVkU2V0TWFpblRocmVhZEJsb2NrZWQgbWFpblRocmVhZEJsb2NrZWQ7Cisg
ICAgICAgIENDUHJveHk6OmltcGxUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNr
KHRoaXMsICZDQ1RocmVhZFByb3h5OjpyZXF1ZXN0UmVhZGJhY2tPbkltcGxUaHJlYWQsICZyZXF1
ZXN0KSk7CisgICAgICAgIHJlcXVlc3QuY29tcGxldGlvbi53YWl0KCk7CisgICAgfQogICAgIHJl
dHVybiByZXF1ZXN0LnN1Y2Nlc3M7CiB9CiAKQEAgLTE1Nyw2ICsxNjQsNyBAQCB2b2lkIENDVGhy
ZWFkUHJveHk6OmZpbmlzaEFsbFJlbmRlcmluZygpCiAgICAgQVNTRVJUKENDUHJveHk6OmlzTWFp
blRocmVhZCgpKTsKIAogICAgIC8vIE1ha2Ugc3VyZSBhbGwgR0wgZHJhd2luZyBpcyBmaW5pc2hl
ZCBvbiB0aGUgaW1wbCB0aHJlYWQuCisgICAgRGVidWdTY29wZWRTZXRNYWluVGhyZWFkQmxvY2tl
ZCBtYWluVGhyZWFkQmxvY2tlZDsKICAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOwog
ICAgIENDUHJveHk6OmltcGxUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRo
aXMsICZDQ1RocmVhZFByb3h5OjpmaW5pc2hBbGxSZW5kZXJpbmdPbkltcGxUaHJlYWQsICZjb21w
bGV0aW9uKSk7CiAgICAgY29tcGxldGlvbi53YWl0KCk7CkBAIC0xOTUsNiArMjAzLDcgQEAgdm9p
ZCBDQ1RocmVhZFByb3h5OjpzZXRTdXJmYWNlUmVhZHlPbkltcGxUaHJlYWQoKQogdm9pZCBDQ1Ro
cmVhZFByb3h5OjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKIHsKICAgICBUUkFDRV9FVkVOVDAo
ImNjIiwgIkNDVGhyZWFkUHJveHk6OnNldFZpc2libGUiKTsKKyAgICBEZWJ1Z1Njb3BlZFNldE1h
aW5UaHJlYWRCbG9ja2VkIG1haW5UaHJlYWRCbG9ja2VkOwogICAgIENDQ29tcGxldGlvbkV2ZW50
IGNvbXBsZXRpb247CiAgICAgQ0NQcm94eTo6aW1wbFRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVD
Q1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OnNldFZpc2libGVPbkltcGxUaHJlYWQs
ICZjb21wbGV0aW9uLCB2aXNpYmxlKSk7CiAgICAgY29tcGxldGlvbi53YWl0KCk7CkBAIC0yMTMs
MTQgKzIyMiwxNyBAQCBib29sIENDVGhyZWFkUHJveHk6OmluaXRpYWxpemVSZW5kZXJlcigpCiAg
ICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplUmVuZGVyZXIi
KTsKICAgICAvLyBNYWtlIGEgYmxvY2tpbmcgY2FsbCB0byBpbml0aWFsaXplUmVuZGVyZXJPbklt
cGxUaHJlYWQuIFRoZSByZXN1bHRzIG9mIHRoYXQgY2FsbAogICAgIC8vIGFyZSBwdXNoZWQgaW50
byB0aGUgaW5pdGlhbGl6ZVN1Y2NlZWRlZCBhbmQgY2FwYWJpbGl0aWVzIGxvY2FsIHZhcmlhYmxl
cy4KLSAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOwogICAgIGJvb2wgaW5pdGlhbGl6
ZVN1Y2NlZWRlZCA9IGZhbHNlOwogICAgIFJlbmRlcmVyQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGll
czsKLSAgICBDQ1Byb3h5OjppbXBsVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFz
ayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZVJlbmRlcmVyT25JbXBsVGhyZWFkLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZj
b21wbGV0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZpbml0aWFsaXplU3VjY2VlZGVkLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjYXBhYmlsaXRpZXMpKTsKLSAgICBjb21w
bGV0aW9uLndhaXQoKTsKKyAgICB7CisgICAgICAgIERlYnVnU2NvcGVkU2V0TWFpblRocmVhZEJs
b2NrZWQgbWFpblRocmVhZEJsb2NrZWQ7CisgICAgICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBs
ZXRpb247CisgICAgICAgIENDUHJveHk6OmltcGxUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlQ0NU
aHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplUmVuZGVyZXJPbkltcGxU
aHJlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZjb21wbGV0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmaW5pdGlhbGl6ZVN1Y2NlZWRlZCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhcGFi
aWxpdGllcykpOworICAgICAgICBjb21wbGV0aW9uLndhaXQoKTsKKyAgICB9CiAKICAgICBpZiAo
aW5pdGlhbGl6ZVN1Y2NlZWRlZCkgewogICAgICAgICBtX3JlbmRlcmVySW5pdGlhbGl6ZWQgPSB0
cnVlOwpAQCAtMjQ1LDE1ICsyNTcsMTggQEAgYm9vbCBDQ1RocmVhZFByb3h5OjpyZWNyZWF0ZUNv
bnRleHQoKQogICAgIC8vIE1ha2UgYSBibG9ja2luZyBjYWxsIHRvIHJlY3JlYXRlQ29udGV4dE9u
SW1wbFRocmVhZC4gVGhlIHJlc3VsdHMgb2YgdGhhdAogICAgIC8vIGNhbGwgYXJlIHB1c2hlZCBp
bnRvIHRoZSByZWNyZWF0ZVN1Y2NlZWRlZCBhbmQgY2FwYWJpbGl0aWVzIGxvY2FsCiAgICAgLy8g
dmFyaWFibGVzLgotICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CiAgICAgYm9vbCBy
ZWNyZWF0ZVN1Y2NlZWRlZCA9IGZhbHNlOwogICAgIFJlbmRlcmVyQ2FwYWJpbGl0aWVzIGNhcGFi
aWxpdGllczsKLSAgICBDQ1Byb3h5OjppbXBsVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUNDVGhy
ZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6cmVjcmVhdGVDb250ZXh0T25JbXBsVGhyZWFk
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZjb21wbGV0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQubGVha1B0cigpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZWNyZWF0ZVN1Y2NlZWRlZCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2FwYWJp
bGl0aWVzKSk7Ci0gICAgY29tcGxldGlvbi53YWl0KCk7CisgICAgeworICAgICAgICBEZWJ1Z1Nj
b3BlZFNldE1haW5UaHJlYWRCbG9ja2VkIG1haW5UaHJlYWRCbG9ja2VkOworICAgICAgICBDQ0Nv
bXBsZXRpb25FdmVudCBjb21wbGV0aW9uOworICAgICAgICBDQ1Byb3h5OjppbXBsVGhyZWFkKCkt
PnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6cmVjcmVh
dGVDb250ZXh0T25JbXBsVGhyZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmY29tcGxldGlvbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5sZWFrUHRy
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZyZWNyZWF0ZVN1Y2NlZWRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhcGFiaWxpdGllcykpOworICAgICAgICBj
b21wbGV0aW9uLndhaXQoKTsKKyAgICB9CiAKICAgICBpZiAocmVjcmVhdGVTdWNjZWVkZWQpCiAg
ICAgICAgIG1fUmVuZGVyZXJDYXBhYmlsaXRpZXNNYWluVGhyZWFkQ29weSA9IGNhcGFiaWxpdGll
czsKQEAgLTI3MCw2ICsyODUsNyBAQCB2b2lkIENDVGhyZWFkUHJveHk6OmltcGxTaWRlUmVuZGVy
aW5nU3RhdHMoQ0NSZW5kZXJpbmdTdGF0cyYgc3RhdHMpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKIAorICAgIERlYnVnU2NvcGVkU2V0TWFpblRocmVhZEJsb2NrZWQgbWFpblRocmVh
ZEJsb2NrZWQ7CiAgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKICAgICBDQ1Byb3h5
OjppbXBsVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJl
YWRQcm94eTo6aW1wbFNpZGVSZW5kZXJpbmdTdGF0c09uSW1wbFRocmVhZCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29tcGxldGlvbiwK
QEAgLTMzMiw2ICszNDgsMTggQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpvblZTeW5jUGFyYW1ldGVy
c0NoYW5nZWQoZG91YmxlIG1vbm90b25pY1RpbWViYXNlLCBkb3VibGUgaW4KICAgICBtX3NjaGVk
dWxlck9uSW1wbFRocmVhZC0+c2V0VGltZWJhc2VBbmRJbnRlcnZhbChtb25vdG9uaWNUaW1lYmFz
ZSwgaW50ZXJ2YWxJblNlY29uZHMpOwogfQogCit2b2lkIENDVGhyZWFkUHJveHk6OnJlZHVjZUNv
bnRlbnRzVGV4dHVyZXNNZW1vcnlPbkltcGxUaHJlYWQoKQoreworICAgIEFTU0VSVChpc0ltcGxU
aHJlYWQoKSk7CisgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ1RocmVhZFByb3h5OjpyZWR1Y2VD
b250ZW50c1RleHR1cmVzTWVtb3J5T25JbXBsVGhyZWFkIik7CisKKyAgICBpZiAobV9sYXllclRy
ZWVIb3N0LT5yZWR1Y2VDb250ZW50c1RleHR1cmVzTWVtb3J5T25JbXBsVGhyZWFkKG1fbGF5ZXJU
cmVlSG9zdEltcGwtPnJlc291cmNlUHJvdmlkZXIoKSkpIHsKKyAgICAgICAgbV9jb250ZW50c1Rl
eHR1cmVzUHVyZ2VDb3VudCArPSAxOworICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5zZXRD
b250ZW50c1RleHR1cmVzUHVyZ2VkKCk7CisgICAgICAgIHNldE5lZWRzQ29tbWl0T25JbXBsVGhy
ZWFkKCk7CisgICAgfQorfQorCiB2b2lkIENDVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0T25J
bXBsVGhyZWFkKCkKIHsKICAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOwpAQCAtMzgwLDYgKzQw
OCw3IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6c3RhcnQoKQogICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CiAgICAgQVNTRVJUKENDUHJveHk6OmltcGxUaHJlYWQoKSk7CiAgICAgLy8gQ3JlYXRl
IExheWVyVHJlZUhvc3RJbXBsLgorICAgIERlYnVnU2NvcGVkU2V0TWFpblRocmVhZEJsb2NrZWQg
bWFpblRocmVhZEJsb2NrZWQ7CiAgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKICAg
ICBDQ1Byb3h5OjppbXBsVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlz
LCAmQ0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUltcGxPbkltcGxUaHJlYWQsICZjb21wbGV0aW9u
KSk7CiAgICAgY29tcGxldGlvbi53YWl0KCk7CkBAIC0zOTYsNyArNDI1LDYgQEAgdm9pZCBDQ1Ro
cmVhZFByb3h5OjpzdG9wKCkKICAgICAvLyBTeW5jaHJvbm91c2x5IGRlbGV0ZXMgdGhlIGltcGwu
CiAgICAgewogICAgICAgICBEZWJ1Z1Njb3BlZFNldE1haW5UaHJlYWRCbG9ja2VkIG1haW5UaHJl
YWRCbG9ja2VkOwotCiAgICAgICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CiAgICAg
ICAgIENDUHJveHk6OmltcGxUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRo
aXMsICZDQ1RocmVhZFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25JbXBsVGhyZWFkLCAmY29t
cGxldGlvbikpOwogICAgICAgICBjb21wbGV0aW9uLndhaXQoKTsKQEAgLTQxMSw2ICs0MzksNyBA
QCB2b2lkIENDVGhyZWFkUHJveHk6OnN0b3AoKQogCiB2b2lkIENDVGhyZWFkUHJveHk6OmZvcmNl
U2VyaWFsaXplT25Td2FwQnVmZmVycygpCiB7CisgICAgRGVidWdTY29wZWRTZXRNYWluVGhyZWFk
QmxvY2tlZCBtYWluVGhyZWFkQmxvY2tlZDsKICAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0
aW9uOwogICAgIENDUHJveHk6OmltcGxUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRU
YXNrKHRoaXMsICZDQ1RocmVhZFByb3h5Ojpmb3JjZVNlcmlhbGl6ZU9uU3dhcEJ1ZmZlcnNPbklt
cGxUaHJlYWQsICZjb21wbGV0aW9uKSk7CiAgICAgY29tcGxldGlvbi53YWl0KCk7CkBAIC00NTMs
NyArNDgyLDcgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpzY2hlZHVsZWRBY3Rpb25CZWdpbkZyYW1l
KCkKICAgICBtX3BlbmRpbmdCZWdpbkZyYW1lUmVxdWVzdCA9IGFkb3B0UHRyKG5ldyBCZWdpbkZy
YW1lQW5kQ29tbWl0U3RhdGUoKSk7CiAgICAgbV9wZW5kaW5nQmVnaW5GcmFtZVJlcXVlc3QtPm1v
bm90b25pY0ZyYW1lQmVnaW5UaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CiAg
ICAgbV9wZW5kaW5nQmVnaW5GcmFtZVJlcXVlc3QtPnNjcm9sbEluZm8gPSBtX2xheWVyVHJlZUhv
c3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7Ci0gICAgbV9wZW5kaW5nQmVnaW5GcmFtZVJl
cXVlc3QtPmNvbnRlbnRzVGV4dHVyZXNXZXJlRGVsZXRlZCA9IG1fbGF5ZXJUcmVlSG9zdEltcGwt
PmNvbnRlbnRzVGV4dHVyZXNQdXJnZWQoKTsKKyAgICBtX3BlbmRpbmdCZWdpbkZyYW1lUmVxdWVz
dC0+Y29udGVudHNUZXh0dXJlc1B1cmdlQWNrID0gbV9jb250ZW50c1RleHR1cmVzUHVyZ2VDb3Vu
dDsKICAgICBtX3BlbmRpbmdCZWdpbkZyYW1lUmVxdWVzdC0+bWVtb3J5QWxsb2NhdGlvbkxpbWl0
Qnl0ZXMgPSBtX2xheWVyVHJlZUhvc3RJbXBsLT5tZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlcygp
OwogCiAgICAgbV9tYWluVGhyZWFkUHJveHktPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0
aGlzLCAmQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZSkpOwpAQCAtNTIwLDggKzU0OSw3IEBAIHZv
aWQgQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZSgpCiAgICAgaWYgKCFtX2xheWVyVHJlZUhvc3Qt
PmluaXRpYWxpemVSZW5kZXJlcklmTmVlZGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlm
IChyZXF1ZXN0LT5jb250ZW50c1RleHR1cmVzV2VyZURlbGV0ZWQpCi0gICAgICAgIG1fbGF5ZXJU
cmVlSG9zdC0+ZXZpY3RBbGxDb250ZW50VGV4dHVyZXMoKTsKKyAgICBtX2xheWVyVHJlZUhvc3Qt
PmRlc3Ryb3lDb250ZW50c1RleHR1cmVzRXZpY3RlZEJ5SW1wbFRocmVhZCgpOwogCiAgICAgT3du
UHRyPENDVGV4dHVyZVVwZGF0ZVF1ZXVlPiBxdWV1ZSA9IGFkb3B0UHRyKG5ldyBDQ1RleHR1cmVV
cGRhdGVRdWV1ZSk7CiAgICAgbV9sYXllclRyZWVIb3N0LT51cGRhdGVMYXllcnMoKihxdWV1ZS5n
ZXQoKSksIHJlcXVlc3QtPm1lbW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzKTsKQEAgLTU0NCw5ICs1
NzIsOCBAQCB2b2lkIENDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWUoKQogICAgIHsKICAgICAgICAg
VFJBQ0VfRVZFTlQwKCJjYyIsICJjb21taXQiKTsKICAgICAgICAgRGVidWdTY29wZWRTZXRNYWlu
VGhyZWFkQmxvY2tlZCBtYWluVGhyZWFkQmxvY2tlZDsKLQogICAgICAgICBDQ0NvbXBsZXRpb25F
dmVudCBjb21wbGV0aW9uOwotICAgICAgICBDQ1Byb3h5OjppbXBsVGhyZWFkKCktPnBvc3RUYXNr
KGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUNvbXBs
ZXRlT25JbXBsVGhyZWFkLCAmY29tcGxldGlvbiwgcXVldWUucmVsZWFzZSgpLCByZXF1ZXN0LT5j
b250ZW50c1RleHR1cmVzV2VyZURlbGV0ZWQpKTsKKyAgICAgICAgQ0NQcm94eTo6aW1wbFRocmVh
ZCgpLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OmJl
Z2luRnJhbWVDb21wbGV0ZU9uSW1wbFRocmVhZCwgJmNvbXBsZXRpb24sIHF1ZXVlLnJlbGVhc2Uo
KSwgcmVxdWVzdC0+Y29udGVudHNUZXh0dXJlc1B1cmdlQWNrKSk7CiAgICAgICAgIGNvbXBsZXRp
b24ud2FpdCgpOwogICAgIH0KIApAQCAtNTU0LDcgKzU4MSw3IEBAIHZvaWQgQ0NUaHJlYWRQcm94
eTo6YmVnaW5GcmFtZSgpCiAgICAgbV9sYXllclRyZWVIb3N0LT5kaWRCZWdpbkZyYW1lKCk7CiB9
CiAKLXZvaWQgQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUNvbXBsZXRlT25JbXBsVGhyZWFkKEND
Q29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uLCBQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZVF1
ZXVlPiBxdWV1ZSwgYm9vbCBjb250ZW50c1RleHR1cmVzV2VyZURlbGV0ZWQpCit2b2lkIENDVGhy
ZWFkUHJveHk6OmJlZ2luRnJhbWVDb21wbGV0ZU9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVu
dCogY29tcGxldGlvbiwgUGFzc093blB0cjxDQ1RleHR1cmVVcGRhdGVRdWV1ZT4gcXVldWUsIGlu
dCBjb250ZW50c1RleHR1cmVzUHVyZ2VBY2spCiB7CiAgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJD
Q1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQ29tcGxldGVPbkltcGxUaHJlYWQiKTsKICAgICBBU1NF
UlQoIW1fY29tbWl0Q29tcGxldGlvbkV2ZW50T25JbXBsVGhyZWFkKTsKQEAgLTU2NywxOSArNTk0
LDIwIEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUNvbXBsZXRlT25JbXBsVGhyZWFk
KENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBpZiAoIWNvbnRlbnRzVGV4dHVyZXNXZXJlRGVsZXRlZCAmJiBtX2xheWVyVHJlZUhvc3RJ
bXBsLT5jb250ZW50c1RleHR1cmVzUHVyZ2VkKCkpIHsKLSAgICAgICAgLy8gV2UgcHVyZ2VkIHRo
ZSBjb250ZW50IHRleHR1cmVzIG9uIHRoZSBpbXBsIHRocmVhZCBiZXR3ZWVuIHRoZSB0aW1lIHdl
Ci0gICAgICAgIC8vIHBvc3RlZCB0aGUgYmVnaW5GcmFtZSB0YXNrIGFuZCBub3csIG1lYW5pbmcg
d2UgaGF2ZSBhIGJ1bmNoIG9mCi0gICAgICAgIC8vIHVwbG9hZHMgdGhhdCBhcmUgbm93IGludmFs
aWQuIENsZWFyIHRoZSB1cGxvYWRzICh0aGV5IGFsbCBnbyB0bwotICAgICAgICAvLyBjb250ZW50
IHRleHR1cmVzKSwgYW5kIGtpY2sgYW5vdGhlciBjb21taXQgdG8gZmlsbCB0aGVtIGFnYWluLgot
ICAgICAgICBxdWV1ZS0+Y2xlYXJVcGxvYWRzKCk7CisgICAgbV9jb250ZW50c1RleHR1cmVzUHVy
Z2VBY2sgPSBjb250ZW50c1RleHR1cmVzUHVyZ2VBY2s7CisgICAgaWYgKG1fY29udGVudHNUZXh0
dXJlc1B1cmdlQWNrICE9IG1fY29udGVudHNUZXh0dXJlc1B1cmdlQ291bnQpIHsKKyAgICAgICAg
VFJBQ0VfRVZFTlQwKCJjYyIsICJDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQ29tcGxldGVPbklt
cGxUaHJlYWRfcHVyZ2Vfc2luY2VfY29tbWl0Iik7CisgICAgICAgIC8vIFRoZSB1cGxvYWQgcXVl
dWUgbWF5IGNvbnRhaW4gcmVmZXJlbmNlcyB0byB0ZXh0dXJlcyB0aGF0IHdlcmUgYXN5bmNocm9u
b3VzbHkKKyAgICAgICAgLy8gZGVsZXRlZC4gUmVtb3ZlIHRoZW0uCisgICAgICAgIHF1ZXVlLT5j
bGVhclVwbG9hZHNUb0RlbGV0ZWRSZXNvdXJjZXMoKTsKKyAgICAgICAgLy8gVGhlcmUgZXhpc3Qg
dGV4dHVyZXMgcHVyZ2VkIGJ5IHRoZSBpbXBsIHRocmVhZCB0aGF0IHRoZSBtYWluIHRocmVhZAor
ICAgICAgICAvLyBkb2Vzbid0IGtub3cgb2YuIFJxdWVzdCBhIHJlY29tbWl0LCB3aGljaCB3aWxs
IGluZm9ybSB0aGUgbWFpbiB0aHJlYWQKKyAgICAgICAgLy8gb2YgdGhlIHB1cmdlZCByZXNvdXJj
ZXMuCiAgICAgICAgIHNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCk7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIG1fcmVzZXRDb250ZW50c1RleHR1cmVzUHVyZ2VkQWZ0ZXJDb21taXRPbkltcGxUaHJl
YWQgPSB0cnVlOworICAgIH0KIAogICAgIG1fY3VycmVudFRleHR1cmVVcGRhdGVDb250cm9sbGVy
T25JbXBsVGhyZWFkID0gQ0NUZXh0dXJlVXBkYXRlQ29udHJvbGxlcjo6Y3JlYXRlKENDUHJveHk6
OmltcGxUaHJlYWQoKSwgcXVldWUsIG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJlc291cmNlUHJvdmlk
ZXIoKSwgbV9sYXllclRyZWVIb3N0SW1wbC0+cmVuZGVyZXIoKS0+dGV4dHVyZUNvcGllcigpLCBt
X2xheWVyVHJlZUhvc3RJbXBsLT5yZW5kZXJlcigpLT50ZXh0dXJlVXBsb2FkZXIoKSk7CiAgICAg
bV9jb21taXRDb21wbGV0aW9uRXZlbnRPbkltcGxUaHJlYWQgPSBjb21wbGV0aW9uOwotCiAgICAg
bV9zY2hlZHVsZXJPbkltcGxUaHJlYWQtPmJlZ2luRnJhbWVDb21wbGV0ZSgpOwogfQogCkBAIC02
MzAsOCArNjU4LDggQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpzY2hlZHVsZWRBY3Rpb25Db21taXQo
KQogICAgIG1fbGF5ZXJUcmVlSG9zdC0+YmVnaW5Db21taXRPbkltcGxUaHJlYWQobV9sYXllclRy
ZWVIb3N0SW1wbC5nZXQoKSk7CiAgICAgbV9sYXllclRyZWVIb3N0LT5maW5pc2hDb21taXRPbklt
cGxUaHJlYWQobV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSk7CiAKLSAgICBpZiAobV9yZXNldENv
bnRlbnRzVGV4dHVyZXNQdXJnZWRBZnRlckNvbW1pdE9uSW1wbFRocmVhZCkgewotICAgICAgICBt
X3Jlc2V0Q29udGVudHNUZXh0dXJlc1B1cmdlZEFmdGVyQ29tbWl0T25JbXBsVGhyZWFkID0gZmFs
c2U7CisgICAgaWYgKG1fY29udGVudHNUZXh0dXJlc1B1cmdlQWNrID09IG1fY29udGVudHNUZXh0
dXJlc1B1cmdlQ291bnQpIHsKKyAgICAgICAgLy8gVGhlIHRyZWUgbm93IHJlZmVyZW5jZXMgbm8g
cHVyZ2VkIHRleHR1cmVzLiBBbGxvdyBpdCB0byBkcmF3IGFnYWluLgogICAgICAgICBtX2xheWVy
VHJlZUhvc3RJbXBsLT5yZXNldENvbnRlbnRzVGV4dHVyZXNQdXJnZWQoKTsKICAgICB9CiAKQEAg
LTcyNSw5ICs3NTMsMTIgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjphY3F1aXJlTGF5ZXJUZXh0dXJl
cygpCiAgICAgICAgIHJldHVybjsKIAogICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NUaHJlYWRQ
cm94eTo6YWNxdWlyZUxheWVyVGV4dHVyZXMiKTsKLSAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21w
bGV0aW9uOwotICAgIENDUHJveHk6OmltcGxUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJl
YWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5OjphY3F1aXJlTGF5ZXJUZXh0dXJlc0Zvck1haW5U
aHJlYWRPbkltcGxUaHJlYWQsICZjb21wbGV0aW9uKSk7Ci0gICAgY29tcGxldGlvbi53YWl0KCk7
IC8vIEJsb2NrIHVudGlsIGl0IGlzIHNhZmUgdG8gd3JpdGUgdG8gbGF5ZXIgdGV4dHVyZXMgZnJv
bSB0aGUgbWFpbiB0aHJlYWQuCisgICAgeworICAgICAgICBEZWJ1Z1Njb3BlZFNldE1haW5UaHJl
YWRCbG9ja2VkIG1haW5UaHJlYWRCbG9ja2VkOworICAgICAgICBDQ0NvbXBsZXRpb25FdmVudCBj
b21wbGV0aW9uOworICAgICAgICBDQ1Byb3h5OjppbXBsVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0
ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6YWNxdWlyZUxheWVyVGV4dHVyZXNG
b3JNYWluVGhyZWFkT25JbXBsVGhyZWFkLCAmY29tcGxldGlvbikpOworICAgICAgICBjb21wbGV0
aW9uLndhaXQoKTsgLy8gQmxvY2sgdW50aWwgaXQgaXMgc2FmZSB0byB3cml0ZSB0byBsYXllciB0
ZXh0dXJlcyBmcm9tIHRoZSBtYWluIHRocmVhZC4KKyAgICB9CiAKICAgICBtX3RleHR1cmVzQWNx
dWlyZWQgPSB0cnVlOwogfQpAQCAtODY5LDggKzkwMCw3IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6
bGF5ZXJUcmVlSG9zdENsb3NlZE9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxl
dGlvCiB7CiAgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ1RocmVhZFByb3h5OjpsYXllclRyZWVI
b3N0Q2xvc2VkT25JbXBsVGhyZWFkIik7CiAgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKLSAg
ICBpZiAoIW1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRlbnRzVGV4dHVyZXNQdXJnZWQoKSkKLSAg
ICAgICAgbV9sYXllclRyZWVIb3N0LT5kZWxldGVDb250ZW50c1RleHR1cmVzT25JbXBsVGhyZWFk
KG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJlc291cmNlUHJvdmlkZXIoKSk7CisgICAgbV9sYXllclRy
ZWVIb3N0LT5kZWxldGVBbGxDb250ZW50c1RleHR1cmVzT25JbXBsVGhyZWFkKG1fbGF5ZXJUcmVl
SG9zdEltcGwtPnJlc291cmNlUHJvdmlkZXIoKSk7CiAgICAgbV9pbnB1dEhhbmRsZXJPbkltcGxU
aHJlYWQuY2xlYXIoKTsKICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLmNsZWFyKCk7CiAgICAgbV9z
Y2hlZHVsZXJPbkltcGxUaHJlYWQuY2xlYXIoKTsKQEAgLTg5Miw4ICs5MjIsNyBAQCB2b2lkIEND
VGhyZWFkUHJveHk6OnJlY3JlYXRlQ29udGV4dE9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVu
dCogY29tcGxldGlvbiwgQwogewogICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NUaHJlYWRQcm94
eTo6cmVjcmVhdGVDb250ZXh0T25JbXBsVGhyZWFkIik7CiAgICAgQVNTRVJUKGlzSW1wbFRocmVh
ZCgpKTsKLSAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRlbnRzVGV4dHVyZXNQdXJn
ZWQoKSkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5kZWxldGVDb250ZW50c1RleHR1cmVzT25J
bXBsVGhyZWFkKG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJlc291cmNlUHJvdmlkZXIoKSk7CisgICAg
bV9sYXllclRyZWVIb3N0LT5kZWxldGVBbGxDb250ZW50c1RleHR1cmVzT25JbXBsVGhyZWFkKG1f
bGF5ZXJUcmVlSG9zdEltcGwtPnJlc291cmNlUHJvdmlkZXIoKSk7CiAgICAgKnJlY3JlYXRlU3Vj
Y2VlZGVkID0gbV9sYXllclRyZWVIb3N0SW1wbC0+aW5pdGlhbGl6ZVJlbmRlcmVyKGFkb3B0UHRy
KGNvbnRleHRQdHIpLCB0ZXh0dXJlVXBsb2FkZXIpOwogICAgIGlmICgqcmVjcmVhdGVTdWNjZWVk
ZWQpIHsKICAgICAgICAgKmNhcGFiaWxpdGllcyA9IG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJlbmRl
cmVyQ2FwYWJpbGl0aWVzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKaW5kZXggYTI0MDI4MWM1
NTYwNWMwNTY1ZmRkODM5Yzk5NjhjZjUyYWE3NjMwZi4uMDY4N2JhZjRiZTViNzY3NjE1MWYyNDRh
ZDJkN2Q5ZWM0YzQ5NjFlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaApAQCAtODEsNiArODEs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFk
KCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFk
KCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHBvc3RBbmltYXRpb25FdmVudHNUb01haW5U
aHJlYWRPbkltcGxUaHJlYWQoUGFzc093blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4sIGRv
dWJsZSB3YWxsQ2xvY2tUaW1lKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVkdWNlQ29u
dGVudHNUZXh0dXJlc01lbW9yeU9uSW1wbFRocmVhZCgpIE9WRVJSSURFOwogCiAgICAgLy8gQ0NT
Y2hlZHVsZXJDbGllbnQgaW1wbGVtZW50YXRpb24KICAgICB2aXJ0dWFsIGJvb2wgY2FuRHJhdygp
IE9WRVJSSURFOwpAQCAtMTAwLDEzICsxMDEsMTMgQEAgcHJpdmF0ZToKICAgICAvLyBTZXQgb24g
aW1wbCB0aHJlYWQsIHJlYWQgb24gbWFpbiB0aHJlYWQuCiAgICAgc3RydWN0IEJlZ2luRnJhbWVB
bmRDb21taXRTdGF0ZSB7CiAgICAgICAgIEJlZ2luRnJhbWVBbmRDb21taXRTdGF0ZSgpCi0gICAg
ICAgICAgICA6IG1vbm90b25pY0ZyYW1lQmVnaW5UaW1lKDApCisgICAgICAgICAgICA6IG1vbm90
b25pY0ZyYW1lQmVnaW5UaW1lKDApLCBjb250ZW50c1RleHR1cmVzUHVyZ2VBY2soMCkKICAgICAg
ICAgewogICAgICAgICB9CiAKICAgICAgICAgZG91YmxlIG1vbm90b25pY0ZyYW1lQmVnaW5UaW1l
OwogICAgICAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbzsKLSAgICAg
ICAgYm9vbCBjb250ZW50c1RleHR1cmVzV2VyZURlbGV0ZWQ7CisgICAgICAgIGludCBjb250ZW50
c1RleHR1cmVzUHVyZ2VBY2s7CiAgICAgICAgIHNpemVfdCBtZW1vcnlBbGxvY2F0aW9uTGltaXRC
eXRlczsKICAgICB9OwogICAgIE93blB0cjxCZWdpbkZyYW1lQW5kQ29tbWl0U3RhdGU+IG1fcGVu
ZGluZ0JlZ2luRnJhbWVSZXF1ZXN0OwpAQCAtMTI3LDcgKzEyOCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIEludFJlY3QgcmVjdDsKICAgICB9OwogICAgIHZvaWQgZm9yY2VCZWdpbkZyYW1lT25JbXBs
VGhyZWFkKENDQ29tcGxldGlvbkV2ZW50Kik7Ci0gICAgdm9pZCBiZWdpbkZyYW1lQ29tcGxldGVP
bkltcGxUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqLCBQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0
ZVF1ZXVlPiwgYm9vbCBjb250ZW50c1RleHR1cmVzV2VyZURlbGV0ZWQpOworICAgIHZvaWQgYmVn
aW5GcmFtZUNvbXBsZXRlT25JbXBsVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiwgUGFzc093blB0
cjxDQ1RleHR1cmVVcGRhdGVRdWV1ZT4sIGludCBjb250ZW50c1RleHR1cmVzUHVyZ2VBY2spOwog
ICAgIHZvaWQgYmVnaW5GcmFtZUFib3J0ZWRPbkltcGxUaHJlYWQoKTsKICAgICB2b2lkIHJlcXVl
c3RSZWFkYmFja09uSW1wbFRocmVhZChSZWFkYmFja1JlcXVlc3QqKTsKICAgICB2b2lkIHJlcXVl
c3RTdGFydFBhZ2VTY2FsZUFuaW1hdGlvbk9uSW1wbFRocmVhZChJbnRTaXplIHRhcmdldFBvc2l0
aW9uLCBib29sIHVzZUFuY2hvciwgZmxvYXQgc2NhbGUsIGRvdWJsZSBkdXJhdGlvblNlYyk7CkBA
IC0xODUsOSArMTg2LDE0IEBAIHByaXZhdGU6CiAKICAgICBPd25QdHI8Q0NUZXh0dXJlVXBkYXRl
Q29udHJvbGxlcj4gbV9jdXJyZW50VGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXJPbkltcGxUaHJlYWQ7
CiAKLSAgICAvLyBTZXQgd2hlbiB3ZSBuZWVkIHRvIHJlc2V0IHRoZSBjb250ZW50c1RleHR1cmVz
UHVyZ2VkIGZsYWcgYWZ0ZXIgdGhlCi0gICAgLy8gY29tbWl0LgotICAgIGJvb2wgbV9yZXNldENv
bnRlbnRzVGV4dHVyZXNQdXJnZWRBZnRlckNvbW1pdE9uSW1wbFRocmVhZDsKKyAgICAvLyBDb3Vu
dGVyIGluY3JlbWVudGVkIGV2ZXJ5IHRpbWUgdGhlIGltcGwgdGhyZWFkIGRlbGV0ZXMgdGV4dHVy
ZXMsIHNlbnQgdG8gdGhlCisgICAgLy8gbWFpbiB0aHJlYWQgd2l0aCBlYWNoIGNvbW1pdC4KKyAg
ICBpbnQgbV9jb250ZW50c1RleHR1cmVzUHVyZ2VDb3VudDsKKworICAgIC8vIFZhbHVlIHRoYXQg
dGhlIG1haW4gdGhyZWFkIHNlbmRzIGFzIGFuIGFja25vd2xlZGdlbWVudCB0byB0aGUgaW1wbCB0
aHJlYWQuCisgICAgLy8gSWYgdGhpcyBkb2VzIG5vdCBlcXVhbCBtX2NvbnRlbnRzVGV4dHVyZXNQ
dXJnZUNvdW50IHRoZW4gdGhlIGltcGwgbGF5ZXIgdHJlZQorICAgIC8vIG1heSByZWZlcmVuY2Ug
dGV4dHVyZXMgdGhhdCBoYXZlIGJlZW4gcHVyZ2VkLgorICAgIGludCBtX2NvbnRlbnRzVGV4dHVy
ZXNQdXJnZUFjazsKIAogICAgIC8vIFNldCB3aGVuIHRoZSBuZXh0IGRyYXcgc2hvdWxkIHBvc3Qg
ZGlkQ29tbWl0QW5kRHJhd0ZyYW1lIHRvIHRoZSBtYWluIHRocmVhZC4KICAgICBib29sIG1fbmV4
dEZyYW1lSXNOZXdseUNvbW1pdHRlZEZyYW1lT25JbXBsVGhyZWFkOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcApp
bmRleCBhNzE1ZjViOWE0OTk5YTM3NGJiYTlhZGQ0MjQ3MDAwNjZmZGVhY2E3Li5iNjkyYTFiYTBk
NjZjYTgzZjkzZGJlNzE3MjdjZGE1OWVmYjk3MTk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcApAQCAtODYs
NiArODYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3T25JbXBs
VGhyZWFkKCkgT1ZFUlJJREUgeyBtX2RpZFJlcXVlc3RSZWRyYXcgPSB0cnVlOyB9CiAgICAgdmly
dHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCkgT1ZFUlJJREUgeyBtX2RpZFJl
cXVlc3RDb21taXQgPSB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIHBvc3RBbmltYXRpb25FdmVu
dHNUb01haW5UaHJlYWRPbkltcGxUaHJlYWQoUGFzc093blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1Zl
Y3Rvcj4sIGRvdWJsZSB3YWxsQ2xvY2tUaW1lKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgcmVkdWNlQ29udGVudHNUZXh0dXJlc01lbW9yeU9uSW1wbFRocmVhZCgpIE9WRVJSSURFIHsg
fQogCiAgICAgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBjcmVhdGVMYXllclRyZWVI
b3N0KGJvb2wgcGFydGlhbFN3YXAsIFBhc3NPd25QdHI8Q0NHcmFwaGljc0NvbnRleHQ+IGdyYXBo
aWNzQ29udGV4dCwgUGFzc093blB0cjxDQ0xheWVySW1wbD4gcm9vdFB0cikKICAgICB7CkBAIC0z
NzcyLDEyICszNzczLDYgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzdXJmYWNl
VGV4dHVyZUNhY2hpbmdOb1BhcnRpYWxTd2FwKQogICAgIH0KIH0KIAotVEVTVF9GKENDTGF5ZXJU
cmVlSG9zdEltcGxUZXN0LCByZWxlYXNlQ29udGVudHNUZXh0dXJlU2hvdWxkVHJpZ2dlckNvbW1p
dCkKLXsKLSAgICBtX2hvc3RJbXBsLT5yZWxlYXNlQ29udGVudHNUZXh0dXJlcygpOwotICAgIEVY
UEVDVF9UUlVFKG1fZGlkUmVxdWVzdENvbW1pdCk7Ci19Ci0KIHN0cnVjdCBSZW5kZXJQYXNzQ2Fj
aGVFbnRyeSB7CiAgICAgbXV0YWJsZSBPd25QdHI8Q0NSZW5kZXJQYXNzPiByZW5kZXJQYXNzUHRy
OwogICAgIENDUmVuZGVyUGFzcyogcmVuZGVyUGFzczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LmNwcAppbmRleCA0
YmNhY2NkYzNhOWEwNzhmZmI4ZGRmMGUxNmU4ZWQ0N2Q0YjM3NGY3Li4zODNmYTU5ODc5ZGQ0ZWJm
NzQzZTdjYzM0MzVmYTg1MGQ0OTFkZmVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QuY3BwCkBAIC0zMiw2ICsz
Miw3IEBACiAjaW5jbHVkZSAiQ0NUaWxlZExheWVyVGVzdENvbW1vbi5oIgogI2luY2x1ZGUgIkZh
a2VDQ0dyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVk
ZSA8cHVibGljL1dlYkNvbXBvc2l0b3IuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1
c2luZyBuYW1lc3BhY2UgV2ViS2l0VGVzdHM7CkBAIC00NiwxNCArNDcsMTggQEAgcHVibGljOgog
ICAgICAgICAsIG1fdGV4dHVyZUZvcm1hdChHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkKICAgICAg
ICAgLCBtX2NvbnRleHQoV2ViS2l0OjpjcmVhdGVGYWtlQ0NHcmFwaGljc0NvbnRleHQoKSkKICAg
ICB7CisgICAgICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6aW5pdGlhbGl6ZSgwKTsKICAgICAg
ICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAgICAgICAgIG1fcmVzb3Vy
Y2VQcm92aWRlciA9IENDUmVzb3VyY2VQcm92aWRlcjo6Y3JlYXRlKG1fY29udGV4dC5nZXQoKSk7
CiAgICAgfQogCiAgICAgdmlydHVhbCB+Q0NQcmlvcml0aXplZFRleHR1cmVUZXN0KCkKICAgICB7
Ci0gICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwotICAgICAgICBt
X3Jlc291cmNlUHJvdmlkZXIuY2xlYXIoKTsKKyAgICAgICAgeworICAgICAgICAgICAgRGVidWdT
Y29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CisgICAgICAgICAgICBtX3Jlc291cmNlUHJv
dmlkZXIuY2xlYXIoKTsKKyAgICAgICAgfQorICAgICAgICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6
OnNodXRkb3duKCk7CiAgICAgfQogCiAgICAgc2l6ZV90IHRleHR1cmVzTWVtb3J5U2l6ZShzaXpl
X3QgdGV4dHVyZUNvdW50KQpAQCAtNjgsMTIgKzczLDEyIEBAIHB1YmxpYzoKIAogICAgIGJvb2wg
dmFsaWRhdGVUZXh0dXJlKE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZT4mIHRleHR1cmUsIGJv
b2wgcmVxdWVzdExhdGUpCiAgICAgewotICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQg
aW1wbFRocmVhZDsKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgIHRleHR1cmUtPnRleHR1
cmVNYW5hZ2VyKCktPmFzc2VydEludmFyaWFudHMoKTsKICNlbmRpZgogICAgICAgICBpZiAocmVx
dWVzdExhdGUpCiAgICAgICAgICAgICB0ZXh0dXJlLT5yZXF1ZXN0TGF0ZSgpOworICAgICAgICBE
ZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZCBpbXBsVGhyZWFkQW5k
TWFpblRocmVhZEJsb2NrZWQ7CiAgICAgICAgIGJvb2wgc3VjY2VzcyA9IHRleHR1cmUtPmNhbkFj
cXVpcmVCYWNraW5nVGV4dHVyZSgpOwogICAgICAgICBpZiAoc3VjY2VzcykKICAgICAgICAgICAg
IHRleHR1cmUtPmFjcXVpcmVCYWNraW5nVGV4dHVyZShyZXNvdXJjZVByb3ZpZGVyKCkpOwpAQCAt
MTI4LDcgKzEzMyw3IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHJlcXVlc3RU
ZXh0dXJlRXhjZWVkaW5nTWF4TGltaXQpCiAgICAgRVhQRUNUX0VRKHRleHR1cmVzTWVtb3J5U2l6
ZShtYXhUZXh0dXJlcyksIHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzKCkp
OwogICAgIEVYUEVDVF9MRSh0ZXh0dXJlTWFuYWdlci0+bWVtb3J5VXNlQnl0ZXMoKSwgdGV4dHVy
ZU1hbmFnZXItPm1lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMoKSk7CiAKLSAgICBEZWJ1Z1Njb3BlZFNl
dEltcGxUaHJlYWQgaW1wbFRocmVhZDsKKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWRBbmRN
YWluVGhyZWFkQmxvY2tlZCBpbXBsVGhyZWFkQW5kTWFpblRocmVhZEJsb2NrZWQ7CiAgICAgdGV4
dHVyZU1hbmFnZXItPmNsZWFyQWxsTWVtb3J5KHJlc291cmNlUHJvdmlkZXIoKSk7CiB9CiAKQEAg
LTE0OSw3ICsxNTQsNyBAQCBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCBjaGFuZ2VN
ZW1vcnlMaW1pdHMpCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgKytp
KQogICAgICAgICB2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbaV0sIGZhbHNlKTsKICAgICB7Ci0g
ICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOworICAgICAgICBEZWJ1
Z1Njb3BlZFNldEltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZCBpbXBsVGhyZWFkQW5kTWFp
blRocmVhZEJsb2NrZWQ7CiAgICAgICAgIHRleHR1cmVNYW5hZ2VyLT5yZWR1Y2VNZW1vcnkocmVz
b3VyY2VQcm92aWRlcigpKTsKICAgICB9CiAKQEAgLTE2Miw3ICsxNjcsNyBAQCBURVNUX0YoQ0NQ
cmlvcml0aXplZFRleHR1cmVUZXN0LCBjaGFuZ2VNZW1vcnlMaW1pdHMpCiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgKytpKQogICAgICAgICBFWFBFQ1RfRVEodmFsaWRh
dGVUZXh0dXJlKHRleHR1cmVzW2ldLCBmYWxzZSksIGkgPCA1KTsKICAgICB7Ci0gICAgICAgIERl
YnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOworICAgICAgICBEZWJ1Z1Njb3BlZFNl
dEltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZCBpbXBsVGhyZWFkQW5kTWFpblRocmVhZEJs
b2NrZWQ7CiAgICAgICAgIHRleHR1cmVNYW5hZ2VyLT5yZWR1Y2VNZW1vcnkocmVzb3VyY2VQcm92
aWRlcigpKTsKICAgICB9CiAKQEAgLTE3NSwxNCArMTgwLDE0IEBAIFRFU1RfRihDQ1ByaW9yaXRp
emVkVGV4dHVyZVRlc3QsIGNoYW5nZU1lbW9yeUxpbWl0cykKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1heFRleHR1cmVzOyArK2kpCiAgICAgICAgIEVYUEVDVF9FUSh2YWxpZGF0ZVRleHR1
cmUodGV4dHVyZXNbaV0sIGZhbHNlKSwgaSA8IDQpOwogICAgIHsKLSAgICAgICAgRGVidWdTY29w
ZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CisgICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRo
cmVhZEFuZE1haW5UaHJlYWRCbG9ja2VkIGltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZDsK
ICAgICAgICAgdGV4dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9yeShyZXNvdXJjZVByb3ZpZGVyKCkp
OwogICAgIH0KIAogICAgIEVYUEVDVF9FUSh0ZXh0dXJlc01lbW9yeVNpemUoNCksIHRleHR1cmVN
YW5hZ2VyLT5tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzKCkpOwogICAgIEVYUEVDVF9MRSh0ZXh0dXJl
TWFuYWdlci0+bWVtb3J5VXNlQnl0ZXMoKSwgdGV4dHVyZU1hbmFnZXItPm1lbW9yeUFib3ZlQ3V0
b2ZmQnl0ZXMoKSk7CiAKLSAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsK
KyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZCBpbXBsVGhy
ZWFkQW5kTWFpblRocmVhZEJsb2NrZWQ7CiAgICAgdGV4dHVyZU1hbmFnZXItPmNsZWFyQWxsTWVt
b3J5KHJlc291cmNlUHJvdmlkZXIoKSk7CiB9CiAKQEAgLTI0Miw3ICsyNDcsNyBAQCBURVNUX0Yo
Q0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCB0ZXh0dXJlTWFuYWdlclBhcnRpYWxVcGRhdGVUZXh0
dXJlcykKICAgICBFWFBFQ1RfRkFMU0UodGV4dHVyZXNbMl0tPmhhdmVCYWNraW5nVGV4dHVyZSgp
KTsKICAgICBFWFBFQ1RfRkFMU0UodGV4dHVyZXNbM10tPmhhdmVCYWNraW5nVGV4dHVyZSgpKTsK
IAotICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOworICAgIERlYnVnU2Nv
cGVkU2V0SW1wbFRocmVhZEFuZE1haW5UaHJlYWRCbG9ja2VkIGltcGxUaHJlYWRBbmRNYWluVGhy
ZWFkQmxvY2tlZDsKICAgICB0ZXh0dXJlTWFuYWdlci0+Y2xlYXJBbGxNZW1vcnkocmVzb3VyY2VQ
cm92aWRlcigpKTsKIH0KIApAQCAtMjgyLDcgKzI4Nyw3IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVk
VGV4dHVyZVRlc3QsIHRleHR1cmVNYW5hZ2VyUHJpb3JpdGllc0FyZUVxdWFsKQogICAgIEVYUEVD
VF9FUSh0ZXh0dXJlc01lbW9yeVNpemUoOCksIHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlBYm92ZUN1
dG9mZkJ5dGVzKCkpOwogICAgIEVYUEVDVF9MRSh0ZXh0dXJlTWFuYWdlci0+bWVtb3J5VXNlQnl0
ZXMoKSwgdGV4dHVyZU1hbmFnZXItPm1lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMoKSk7CiAKLSAgICBE
ZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKKyAgICBEZWJ1Z1Njb3BlZFNldElt
cGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZCBpbXBsVGhyZWFkQW5kTWFpblRocmVhZEJsb2Nr
ZWQ7CiAgICAgdGV4dHVyZU1hbmFnZXItPmNsZWFyQWxsTWVtb3J5KHJlc291cmNlUHJvdmlkZXIo
KSk7CiB9CiAKQEAgLTMwMiw3ICszMDcsNyBAQCBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVU
ZXN0LCB0ZXh0dXJlTWFuYWdlckRlc3Ryb3llZEZpcnN0KQogICAgIEVYUEVDVF9UUlVFKHRleHR1
cmUtPmhhdmVCYWNraW5nVGV4dHVyZSgpKTsKIAogICAgIHsKLSAgICAgICAgRGVidWdTY29wZWRT
ZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CisgICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVh
ZEFuZE1haW5UaHJlYWRCbG9ja2VkIGltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZDsKICAg
ICAgICAgdGV4dHVyZU1hbmFnZXItPmNsZWFyQWxsTWVtb3J5KHJlc291cmNlUHJvdmlkZXIoKSk7
CiAgICAgfQogICAgIHRleHR1cmVNYW5hZ2VyLmNsZWFyKCk7CkBAIC0zMzAsNyArMzM1LDcgQEAg
VEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgdGV4dHVyZU1vdmVkVG9OZXdNYW5hZ2Vy
KQogICAgIHRleHR1cmUtPnNldFRleHR1cmVNYW5hZ2VyKDApOwogCiAgICAgewotICAgICAgICBE
ZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKKyAgICAgICAgRGVidWdTY29wZWRT
ZXRJbXBsVGhyZWFkQW5kTWFpblRocmVhZEJsb2NrZWQgaW1wbFRocmVhZEFuZE1haW5UaHJlYWRC
bG9ja2VkOwogICAgICAgICB0ZXh0dXJlTWFuYWdlck9uZS0+Y2xlYXJBbGxNZW1vcnkocmVzb3Vy
Y2VQcm92aWRlcigpKTsKICAgICB9CiAgICAgdGV4dHVyZU1hbmFnZXJPbmUuY2xlYXIoKTsKQEAg
LTM0Niw3ICszNTEsNyBAQCBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCB0ZXh0dXJl
TW92ZWRUb05ld01hbmFnZXIpCiAgICAgRVhQRUNUX1RSVUUodGV4dHVyZS0+Y2FuQWNxdWlyZUJh
Y2tpbmdUZXh0dXJlKCkpOwogICAgIEVYUEVDVF9UUlVFKHRleHR1cmUtPmhhdmVCYWNraW5nVGV4
dHVyZSgpKTsKIAotICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOworICAg
IERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZEFuZE1haW5UaHJlYWRCbG9ja2VkIGltcGxUaHJlYWRB
bmRNYWluVGhyZWFkQmxvY2tlZDsKICAgICB0ZXh0dXJlTWFuYWdlclR3by0+Y2xlYXJBbGxNZW1v
cnkocmVzb3VyY2VQcm92aWRlcigpKTsKIH0KIApAQCAtMzkyLDcgKzM5Nyw3IEBAIFRFU1RfRihD
Q1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHJlbmRlclN1cmZhY2VzUmVkdWNlTWVtb3J5QXZhaWxh
YmxlT3V0c2lkZVJvb3RTCiAgICAgRVhQRUNUX0VRKHRleHR1cmVzTWVtb3J5U2l6ZSg0KSwgdGV4
dHVyZU1hbmFnZXItPm1lbW9yeUZvclNlbGZNYW5hZ2VkVGV4dHVyZXMoKSk7CiAgICAgRVhQRUNU
X0xFKHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlVc2VCeXRlcygpLCB0ZXh0dXJlTWFuYWdlci0+bWVt
b3J5QWJvdmVDdXRvZmZCeXRlcygpKTsKIAotICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBp
bXBsVGhyZWFkOworICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZEFuZE1haW5UaHJlYWRCbG9j
a2VkIGltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZDsKICAgICB0ZXh0dXJlTWFuYWdlci0+
Y2xlYXJBbGxNZW1vcnkocmVzb3VyY2VQcm92aWRlcigpKTsKIH0KIApAQCAtNDI5LDcgKzQzNCw3
IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHJlbmRlclN1cmZhY2VzUmVkdWNl
TWVtb3J5QXZhaWxhYmxlRm9yUmVxdWVzdExhCiAgICAgRVhQRUNUX0VRKHRleHR1cmVzTWVtb3J5
U2l6ZSg0KSwgdGV4dHVyZU1hbmFnZXItPm1lbW9yeUZvclNlbGZNYW5hZ2VkVGV4dHVyZXMoKSk7
CiAgICAgRVhQRUNUX0xFKHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlVc2VCeXRlcygpLCB0ZXh0dXJl
TWFuYWdlci0+bWVtb3J5QWJvdmVDdXRvZmZCeXRlcygpKTsKIAotICAgIERlYnVnU2NvcGVkU2V0
SW1wbFRocmVhZCBpbXBsVGhyZWFkOworICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZEFuZE1h
aW5UaHJlYWRCbG9ja2VkIGltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZDsKICAgICB0ZXh0
dXJlTWFuYWdlci0+Y2xlYXJBbGxNZW1vcnkocmVzb3VyY2VQcm92aWRlcigpKTsKIH0KIApAQCAt
NDY5LDcgKzQ3NCw3IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHdoZW5SZW5k
ZXJTdXJmYWNlTm90QXZhaWxhYmxlVGV4dHVyZXNBbHNvTm90QXZhCiAgICAgRVhQRUNUX0VRKHRl
eHR1cmVzTWVtb3J5U2l6ZSgyKSwgdGV4dHVyZU1hbmFnZXItPm1lbW9yeUZvclNlbGZNYW5hZ2Vk
VGV4dHVyZXMoKSk7CiAgICAgRVhQRUNUX0xFKHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlVc2VCeXRl
cygpLCB0ZXh0dXJlTWFuYWdlci0+bWVtb3J5QWJvdmVDdXRvZmZCeXRlcygpKTsKIAotICAgIERl
YnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOworICAgIERlYnVnU2NvcGVkU2V0SW1w
bFRocmVhZEFuZE1haW5UaHJlYWRCbG9ja2VkIGltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tl
ZDsKICAgICB0ZXh0dXJlTWFuYWdlci0+Y2xlYXJBbGxNZW1vcnkocmVzb3VyY2VQcm92aWRlcigp
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExh
eWVyQ2hyb21pdW1UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRM
YXllckNocm9taXVtVGVzdC5jcHAKaW5kZXggMDBlZTI4YTY4OGVhNmQyODU1NjdhMzdhMDA3MGQz
NWFhMTFiZjcwNS4uNjk4NDBiZDk3NDEwNWY0NzJhNjU2OGExOWM5ZTIzMjIwNTVhZWUxZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1U
ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJv
bWl1bVRlc3QuY3BwCkBAIC04MCwxNCArODAsMTkgQEAgcHVibGljOgogICAgICAgICAsIG1fdGV4
dHVyZU1hbmFnZXIoQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNjAqMTAyNCox
MDI0LCAxMDI0LCBDQ1JlbmRlcmVyOjpDb250ZW50UG9vbCkpCiAgICAgICAgICwgbV9vY2NsdXNp
b24oMCkKICAgICB7Ci0gICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFk
OworICAgICAgICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6OmluaXRpYWxpemUoMCk7CisgICAgICAg
IERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZEFuZE1haW5UaHJlYWRCbG9ja2VkIGltcGxUaHJlYWRB
bmRNYWluVGhyZWFkQmxvY2tlZDsKICAgICAgICAgbV9yZXNvdXJjZVByb3ZpZGVyID0gQ0NSZXNv
dXJjZVByb3ZpZGVyOjpjcmVhdGUobV9jb250ZXh0LmdldCgpKTsKICAgICB9CiAKICAgICB2aXJ0
dWFsIH5UaWxlZExheWVyQ2hyb21pdW1UZXN0KCkKICAgICB7Ci0gICAgICAgIERlYnVnU2NvcGVk
U2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwotICAgICAgICBtX3Jlc291cmNlUHJvdmlkZXIuY2xl
YXIoKTsKKyAgICAgICAgeworICAgICAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkQW5k
TWFpblRocmVhZEJsb2NrZWQgaW1wbFRocmVhZEFuZE1haW5UaHJlYWRCbG9ja2VkOworICAgICAg
ICAgICAgbV90ZXh0dXJlTWFuYWdlci0+Y2xlYXJBbGxNZW1vcnkobV9yZXNvdXJjZVByb3ZpZGVy
LmdldCgpKTsKKyAgICAgICAgICAgIG1fcmVzb3VyY2VQcm92aWRlci5jbGVhcigpOworICAgICAg
ICB9CisgICAgICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6c2h1dGRvd24oKTsKICAgICB9CiAK
ICAgICB2b2lkIHVwZGF0ZVRleHR1cmVzKGludCBjb3VudCA9IDUwMCkKQEAgLTEwMCwxOSArMTA1
LDIzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgRmFrZVRpbGVkTGF5ZXJDaHJv
bWl1bSogbGF5ZXIyID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgQ0NMYXllckltcGwqIGxh
eWVySW1wbDIgPSAwKQogICAgIHsKLSAgICAgICAgLy8gR2V0IHRleHR1cmVzCi0gICAgICAgIG1f
dGV4dHVyZU1hbmFnZXItPmNsZWFyUHJpb3JpdGllcygpOwotICAgICAgICBpZiAobGF5ZXIxKQot
ICAgICAgICAgICAgbGF5ZXIxLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3Vs
YXRvcik7Ci0gICAgICAgIGlmIChsYXllcjIpCi0gICAgICAgICAgICBsYXllcjItPnNldFRleHR1
cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsgICAgIAotICAgICAgICBtX3RleHR1
cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKLQotICAgICAgICAvLyBVcGRhdGUgY29u
dGVudAotICAgICAgICBpZiAobGF5ZXIxKQotICAgICAgICAgICAgbGF5ZXIxLT51cGRhdGUobV9x
dWV1ZSwgbV9vY2NsdXNpb24sIG1fc3RhdHMpOwotICAgICAgICBpZiAobGF5ZXIyKQotICAgICAg
ICAgICAgbGF5ZXIyLT51cGRhdGUobV9xdWV1ZSwgbV9vY2NsdXNpb24sIG1fc3RhdHMpOworICAg
ICAgICB7CisgICAgICAgICAgICBEZWJ1Z1Njb3BlZFNldE1haW5UaHJlYWQgbWFpblRocmVhZDsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gR2V0IHRleHR1cmVzCisgICAgICAgICAgICBt
X3RleHR1cmVNYW5hZ2VyLT5jbGVhclByaW9yaXRpZXMoKTsKKyAgICAgICAgICAgIGlmIChsYXll
cjEpCisgICAgICAgICAgICAgICAgbGF5ZXIxLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9y
aXR5Q2FsY3VsYXRvcik7CisgICAgICAgICAgICBpZiAobGF5ZXIyKQorICAgICAgICAgICAgICAg
IGxheWVyMi0+c2V0VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOyAgICAg
CisgICAgICAgICAgICBtX3RleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKwor
ICAgICAgICAgICAgLy8gVXBkYXRlIGNvbnRlbnQKKyAgICAgICAgICAgIGlmIChsYXllcjEpCisg
ICAgICAgICAgICAgICAgbGF5ZXIxLT51cGRhdGUobV9xdWV1ZSwgbV9vY2NsdXNpb24sIG1fc3Rh
dHMpOworICAgICAgICAgICAgaWYgKGxheWVyMikKKyAgICAgICAgICAgICAgICBsYXllcjItPnVw
ZGF0ZShtX3F1ZXVlLCBtX29jY2x1c2lvbiwgbV9zdGF0cyk7CisgICAgICAgIH0KIAogICAgICAg
ICBib29sIG5lZWRzVXBkYXRlID0gZmFsc2U7CiAgICAgICAgIGlmIChsYXllcjEpCkBAIC0xMzAs
NiArMTM5LDE5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG5lZWRzVXBkYXRlOwogICAgIH0K
IAorICAgIHZvaWQgc2V0VGV4dHVyZVByaW9yaXRpZXNBbmRQcmlvcml0aXplVGV4dHVyZXNPbk1h
aW5UaHJlYWQoRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSogbGF5ZXIpCisgICAgeworICAgICAgICBE
ZWJ1Z1Njb3BlZFNldE1haW5UaHJlYWQgbWFpblRocmVhZDsKKyAgICAgICAgbGF5ZXItPnNldFRl
eHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKKyAgICAgICAgbV90ZXh0dXJl
TWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgfQorCisgICAgdm9pZCB1cGRhdGVM
YXllck9uTWFpblRocmVhZChGYWtlVGlsZWRMYXllckNocm9taXVtKiBsYXllciwgVGVzdENDT2Nj
bHVzaW9uVHJhY2tlciogb2NjbHVkZWQpCisgICAgeworICAgICAgICBEZWJ1Z1Njb3BlZFNldE1h
aW5UaHJlYWQgbWFpblRocmVhZDsKKyAgICAgICAgbGF5ZXItPnVwZGF0ZShtX3F1ZXVlLCBvY2Ns
dWRlZCwgbV9zdGF0cyk7CisgICAgfQorCiBwdWJsaWM6CiAgICAgT3duUHRyPENDR3JhcGhpY3ND
b250ZXh0PiBtX2NvbnRleHQ7CiAgICAgT3duUHRyPENDUmVzb3VyY2VQcm92aWRlcj4gbV9yZXNv
dXJjZVByb3ZpZGVyOwpAQCAtMTQyLDEwICsxNjQsMTggQEAgcHVibGljOgogICAgIFRlc3RDQ09j
Y2x1c2lvblRyYWNrZXIqIG1fb2NjbHVzaW9uOwogfTsKIAotVEVTVF9GKFRpbGVkTGF5ZXJDaHJv
bWl1bVRlc3QsIHB1c2hEaXJ0eVRpbGVzKQorY2xhc3MgVGlsZWRMYXllckNocm9taXVtVGVzdE9u
SW1wbFRocmVhZCA6IHB1YmxpYyBUaWxlZExheWVyQ2hyb21pdW1UZXN0IHsKK3B1YmxpYzoKKyAg
ICBUaWxlZExheWVyQ2hyb21pdW1UZXN0T25JbXBsVGhyZWFkKCkgeyB9CisgICAgdmlydHVhbCB+
VGlsZWRMYXllckNocm9taXVtVGVzdE9uSW1wbFRocmVhZCgpIHsgfQorCitwcml2YXRlOgorICAg
ICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZCBtX2ltcGxUaHJl
YWRBbmRNYWluVGhyZWFkQmxvY2tlZDsKK307CisKK1RFU1RfRihUaWxlZExheWVyQ2hyb21pdW1U
ZXN0T25JbXBsVGhyZWFkLCBwdXNoRGlydHlUaWxlcykKIHsKICAgICBSZWZQdHI8RmFrZVRpbGVk
TGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1
bShtX3RleHR1cmVNYW5hZ2VyLmdldCgpKSk7Ci0gICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFk
IGltcGxUaHJlYWQ7CiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwo
YWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDEpKSk7CiAKICAgICAvLyBUaGUgdGls
ZSBzaXplIGlzIDEwMHgxMDAsIHNvIHRoaXMgaW52YWxpZGF0ZXMgYW5kIHRoZW4gcGFpbnRzIHR3
byB0aWxlcy4KQEAgLTE2OSwxMCArMTk5LDkgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRl
c3QsIHB1c2hEaXJ0eVRpbGVzKQogICAgIEVYUEVDVF9GQUxTRShsYXllckltcGwtPmhhc1RpbGVB
dCgwLCAxKSk7CiB9CiAKLVRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoT2NjbHVk
ZWREaXJ0eVRpbGVzKQorVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3RPbkltcGxUaHJlYWQs
IHB1c2hPY2NsdWRlZERpcnR5VGlsZXMpCiB7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hy
b21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0
dXJlTWFuYWdlci5nZXQoKSkpOwotICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhy
ZWFkOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRy
KG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOwogICAgIFRlc3RDQ09jY2x1c2lvblRyYWNr
ZXIgb2NjbHVkZWQ7CiAgICAgbV9vY2NsdXNpb24gPSAmb2NjbHVkZWQ7CkBAIC0yMDYsMTAgKzIz
NSw5IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoT2NjbHVkZWREaXJ0eVRp
bGVzKQogICAgIEVYUEVDVF9UUlVFKGxheWVySW1wbC0+aGFzVGlsZUF0KDAsIDEpKTsKIH0KIAot
VEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hEZWxldGVkVGlsZXMpCitURVNUX0Yo
VGlsZWRMYXllckNocm9taXVtVGVzdE9uSW1wbFRocmVhZCwgcHVzaERlbGV0ZWRUaWxlcykKIHsK
ICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcg
RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShtX3RleHR1cmVNYW5hZ2VyLmdldCgpKSk7Ci0gICAgRGVi
dWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAgICAgT3duUHRyPEZha2VDQ1RpbGVk
TGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDEp
KSk7CiAKICAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAsIHNvIHRoaXMgaW52YWxpZGF0
ZXMgYW5kIHRoZW4gcGFpbnRzIHR3byB0aWxlcy4KQEAgLTIyMiw3ICsyNTAsMTAgQEAgVEVTVF9G
KFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hEZWxldGVkVGlsZXMpCiAgICAgRVhQRUNUX1RS
VUUobGF5ZXJJbXBsLT5oYXNUaWxlQXQoMCwgMCkpOwogICAgIEVYUEVDVF9UUlVFKGxheWVySW1w
bC0+aGFzVGlsZUF0KDAsIDEpKTsKIAotICAgIG1fdGV4dHVyZU1hbmFnZXItPmNsZWFyUHJpb3Jp
dGllcygpOworICAgIHsKKyAgICAgICAgRGVidWdTY29wZWRTZXRNYWluVGhyZWFkIG1haW5UaHJl
YWQ7CisgICAgICAgIG1fdGV4dHVyZU1hbmFnZXItPmNsZWFyUHJpb3JpdGllcygpOworICAgIH0K
ICAgICBtX3RleHR1cmVNYW5hZ2VyLT5jbGVhckFsbE1lbW9yeShtX3Jlc291cmNlUHJvdmlkZXIu
Z2V0KCkpOwogICAgIG1fdGV4dHVyZU1hbmFnZXItPnNldE1heE1lbW9yeUxpbWl0Qnl0ZXMoNCox
MDI0KjEwMjQpOwogCkBAIC0yNDIsMTAgKzI3Myw5IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21p
dW1UZXN0LCBwdXNoRGVsZXRlZFRpbGVzKQogICAgIEVYUEVDVF9GQUxTRShsYXllckltcGwtPmhh
c1RpbGVBdCgwLCAxKSk7CiB9CiAKLVRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNo
SWRsZVBhaW50VGlsZXMpCitURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdE9uSW1wbFRocmVh
ZCwgcHVzaElkbGVQYWludFRpbGVzKQogewogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9t
aXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVy
ZU1hbmFnZXIuZ2V0KCkpKTsKLSAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVh
ZDsKICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihu
ZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMSkpKTsKIAogICAgIC8vIFRoZSB0aWxlIHNpemUgaXMg
MTAweDEwMC4gU2V0dXAgNXg1IHRpbGVzIHdpdGggb25lIHZpc2libGUgdGlsZSBpbiB0aGUgY2Vu
dGVyLgpAQCAtMjc5LDExICszMDksMTAgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3Qs
IHB1c2hJZGxlUGFpbnRUaWxlcykKICAgICBFWFBFQ1RfRkFMU0UobmVlZHNVcGRhdGUpOwogfQog
Ci1URVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaFRpbGVzQWZ0ZXJJZGxlUGFpbnRG
YWlsZWQpCitURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdE9uSW1wbFRocmVhZCwgcHVzaFRp
bGVzQWZ0ZXJJZGxlUGFpbnRGYWlsZWQpCiB7CiAgICAgLy8gU3RhcnQgd2l0aCAybWIgb2YgbWVt
b3J5LCBidXQgdGhlIHRlc3QgaXMgZ29pbmcgdG8gdHJ5IHRvIHVzZSBqdXN0IG1vcmUgdGhhbiAx
bWIsIHNvIHdlIHJlZHVjZSB0byAxbWIgbGF0ZXIuCiAgICAgbV90ZXh0dXJlTWFuYWdlci0+c2V0
TWF4TWVtb3J5TGltaXRCeXRlcygyICogMTAyNCAqIDEwMjQpOyAgICAKLSAgICBEZWJ1Z1Njb3Bl
ZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJv
bWl1bT4gbGF5ZXIxID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0
dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5
ZXJJbXBsMShhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMSkpKTsKICAgICBSZWZQ
dHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIyID0gYWRvcHRSZWYobmV3IEZha2VUaWxl
ZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwpAQCAtMzM0LDEwICszNjMs
OSBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaFRpbGVzQWZ0ZXJJZGxlUGFp
bnRGYWlsZWQpCiAgICAgRVhQRUNUX0ZBTFNFKGxheWVySW1wbDItPmhhc1RpbGVBdCgwLCAyKSk7
CiB9CiAKLVRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoSWRsZVBhaW50ZWRPY2Ns
dWRlZFRpbGVzKQorVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3RPbkltcGxUaHJlYWQsIHB1
c2hJZGxlUGFpbnRlZE9jY2x1ZGVkVGlsZXMpCiB7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVy
Q2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0obV90
ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwotICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBs
VGhyZWFkOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0
UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOwogICAgIFRlc3RDQ09jY2x1c2lvblRy
YWNrZXIgb2NjbHVkZWQ7CiAgICAgbV9vY2NsdXNpb24gPSAmb2NjbHVkZWQ7CkBAIC0zNTQsMTAg
KzM4Miw5IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoSWRsZVBhaW50ZWRP
Y2NsdWRlZFRpbGVzKQogICAgIEVYUEVDVF9FUSgxLCBvY2NsdWRlZC5vdmVyZHJhd01ldHJpY3Mo
KS50aWxlc0N1bGxlZEZvclVwbG9hZCgpKTsKIH0KIAotVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1
bVRlc3QsIHB1c2hUaWxlc01hcmtlZERpcnR5RHVyaW5nUGFpbnQpCitURVNUX0YoVGlsZWRMYXll
ckNocm9taXVtVGVzdE9uSW1wbFRocmVhZCwgcHVzaFRpbGVzTWFya2VkRGlydHlEdXJpbmdQYWlu
dCkKIHsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJl
ZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShtX3RleHR1cmVNYW5hZ2VyLmdldCgpKSk7Ci0g
ICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAgICAgT3duUHRyPEZha2VD
Q1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJ
bXBsKDEpKSk7CiAKICAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAsIHNvIHRoaXMgaW52
YWxpZGF0ZXMgYW5kIHRoZW4gcGFpbnRzIHR3byB0aWxlcy4KQEAgLTM3MywxMSArNDAwLDEwIEBA
IFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoVGlsZXNNYXJrZWREaXJ0eUR1cmlu
Z1BhaW50KQogICAgIEVYUEVDVF9UUlVFKGxheWVySW1wbC0+aGFzVGlsZUF0KDAsIDEpKTsKIH0K
IAotVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hUaWxlc0xheWVyTWFya2VkRGly
dHlEdXJpbmdQYWludE9uTmV4dExheWVyKQorVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3RP
bkltcGxUaHJlYWQsIHB1c2hUaWxlc0xheWVyTWFya2VkRGlydHlEdXJpbmdQYWludE9uTmV4dExh
eWVyKQogewogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllcjEgPSBhZG9w
dFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShtX3RleHR1cmVNYW5hZ2VyLmdldCgpKSk7
CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyMiA9IGFkb3B0UmVmKG5l
dyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKLSAgICBE
ZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKICAgICBPd25QdHI8RmFrZUNDVGls
ZWRMYXllckltcGw+IGxheWVyMUltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBs
KDEpKSk7CiAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllcjJJbXBsKGFkb3B0
UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgyKSkpOwogCkBAIC0zOTcsMTEgKzQyMywxMCBA
QCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaFRpbGVzTGF5ZXJNYXJrZWREaXJ0
eUR1cmluZ1BhaW50T25OZXh0TGF5ZXIpCiAgICAgRVhQRUNUX1RSVUUobGF5ZXIySW1wbC0+aGFz
VGlsZUF0KDAsIDEpKTsKIH0KIAotVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hU
aWxlc0xheWVyTWFya2VkRGlydHlEdXJpbmdQYWludE9uUHJldmlvdXNMYXllcikKK1RFU1RfRihU
aWxlZExheWVyQ2hyb21pdW1UZXN0T25JbXBsVGhyZWFkLCBwdXNoVGlsZXNMYXllck1hcmtlZERp
cnR5RHVyaW5nUGFpbnRPblByZXZpb3VzTGF5ZXIpCiB7CiAgICAgUmVmUHRyPEZha2VUaWxlZExh
eWVyQ2hyb21pdW0+IGxheWVyMSA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVt
KG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJv
bWl1bT4gbGF5ZXIyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0
dXJlTWFuYWdlci5nZXQoKSkpOwotICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhy
ZWFkOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXIxSW1wbChhZG9wdFB0
cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMSkpKTsKICAgICBPd25QdHI8RmFrZUNDVGlsZWRM
YXllckltcGw+IGxheWVyMkltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDIp
KSk7CiAKQEAgLTQyNCw3MiArNDQ5LDc3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0
LCBwYWludFNtYWxsQW5pbWF0ZWRMYXllcnNJbW1lZGlhdGVseSkKIHsKICAgICAvLyBDcmVhdGUg
YSBDQ0xheWVyVHJlZUhvc3QgdGhhdCBoYXMgdGhlIHJpZ2h0IHZpZXdwb3J0c2l6ZSwKICAgICAv
LyBzbyB0aGUgbGF5ZXIgaXMgY29uc2lkZXJlZCBzbWFsbCBlbm91Z2guCi0gICAgV2ViS2l0OjpX
ZWJDb21wb3NpdG9yOjppbml0aWFsaXplKDApOwogICAgIEZha2VDQ0xheWVyVHJlZUhvc3RDbGll
bnQgZmFrZUNDTGF5ZXJUcmVlSG9zdENsaWVudDsKICAgICBPd25QdHI8Q0NMYXllclRyZWVIb3N0
PiBjY0xheWVyVHJlZUhvc3QgPSBDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSgmZmFrZUNDTGF5ZXJU
cmVlSG9zdENsaWVudCwgQ0NMYXllclRyZWVTZXR0aW5ncygpKTsKIAotICAgIGJvb2wgcnVuT3V0
T2ZNZW1vcnlbMl0gPSB7ZmFsc2UsIHRydWV9OwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsg
aSsrKSB7Ci0gICAgICAgIC8vIENyZWF0ZSBhIGxheWVyIHdpdGggNHg0IHRpbGVzLgotICAgICAg
ICBpbnQgbGF5ZXJXaWR0aCAgPSA0ICogRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bTo6dGlsZVNpemUo
KS53aWR0aCgpOwotICAgICAgICBpbnQgbGF5ZXJIZWlnaHQgPSA0ICogRmFrZVRpbGVkTGF5ZXJD
aHJvbWl1bTo6dGlsZVNpemUoKS5oZWlnaHQoKTsKLSAgICAgICAgaW50IG1lbW9yeUZvckxheWVy
ID0gbGF5ZXJXaWR0aCAqIGxheWVySGVpZ2h0ICogNDsKLSAgICAgICAgSW50U2l6ZSB2aWV3cG9y
dFNpemUgPSBJbnRTaXplKGxheWVyV2lkdGgsIGxheWVySGVpZ2h0KTsKLSAgICAgICAgY2NMYXll
clRyZWVIb3N0LT5zZXRWaWV3cG9ydFNpemUodmlld3BvcnRTaXplLCB2aWV3cG9ydFNpemUpOwor
ICAgIHsKKyAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkQW5kTWFpblRocmVhZEJsb2Nr
ZWQgaW1wbFRocmVhZEFuZE1haW5UaHJlYWRCbG9ja2VkOworICAgICAgICBib29sIHJ1bk91dE9m
TWVtb3J5WzJdID0ge2ZhbHNlLCB0cnVlfTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAy
OyBpKyspIHsKKyAgICAgICAgICAgIC8vIENyZWF0ZSBhIGxheWVyIHdpdGggNHg0IHRpbGVzLgor
ICAgICAgICAgICAgaW50IGxheWVyV2lkdGggID0gNCAqIEZha2VUaWxlZExheWVyQ2hyb21pdW06
OnRpbGVTaXplKCkud2lkdGgoKTsKKyAgICAgICAgICAgIGludCBsYXllckhlaWdodCA9IDQgKiBG
YWtlVGlsZWRMYXllckNocm9taXVtOjp0aWxlU2l6ZSgpLmhlaWdodCgpOworICAgICAgICAgICAg
aW50IG1lbW9yeUZvckxheWVyID0gbGF5ZXJXaWR0aCAqIGxheWVySGVpZ2h0ICogNDsKKyAgICAg
ICAgICAgIEludFNpemUgdmlld3BvcnRTaXplID0gSW50U2l6ZShsYXllcldpZHRoLCBsYXllckhl
aWdodCk7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRGVidWdTY29wZWRTZXRNYWlu
VGhyZWFkIG1haW5UaHJlYWQ7CisgICAgICAgICAgICAgICAgY2NMYXllclRyZWVIb3N0LT5zZXRW
aWV3cG9ydFNpemUodmlld3BvcnRTaXplLCB2aWV3cG9ydFNpemUpOworICAgICAgICAgICAgfQog
Ci0gICAgICAgIC8vIFVzZSA4eDQgdGlsZXMgdG8gcnVuIG91dCBvZiBtZW1vcnkuCi0gICAgICAg
IGlmIChydW5PdXRPZk1lbW9yeVtpXSkKLSAgICAgICAgICAgIGxheWVyV2lkdGggKj0gMjsKKyAg
ICAgICAgICAgIC8vIFVzZSA4eDQgdGlsZXMgdG8gcnVuIG91dCBvZiBtZW1vcnkuCisgICAgICAg
ICAgICBpZiAocnVuT3V0T2ZNZW1vcnlbaV0pCisgICAgICAgICAgICAgICAgbGF5ZXJXaWR0aCAq
PSAyOwogCi0gICAgICAgIG1fdGV4dHVyZU1hbmFnZXItPnNldE1heE1lbW9yeUxpbWl0Qnl0ZXMo
bWVtb3J5Rm9yTGF5ZXIpOwotICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRo
cmVhZDsKKyAgICAgICAgICAgIG1fdGV4dHVyZU1hbmFnZXItPnNldE1heE1lbW9yeUxpbWl0Qnl0
ZXMobWVtb3J5Rm9yTGF5ZXIpOwogCi0gICAgICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9t
aXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVy
ZU1hbmFnZXIuZ2V0KCkpKTsKLSAgICAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBs
YXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDEpKSk7CisgICAgICAg
ICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcg
RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShtX3RleHR1cmVNYW5hZ2VyLmdldCgpKSk7CisgICAgICAg
ICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcg
RmFrZUNDVGlsZWRMYXllckltcGwoMSkpKTsKIAotICAgICAgICAvLyBGdWxsIHNpemUgbGF5ZXIg
d2l0aCBoYWxmIGJlaW5nIHZpc2libGUuCi0gICAgICAgIEludFNpemUgY29udGVudEJvdW5kcyhs
YXllcldpZHRoLCBsYXllckhlaWdodCk7Ci0gICAgICAgIEludFJlY3QgY29udGVudFJlY3QoSW50
UG9pbnQ6Onplcm8oKSwgY29udGVudEJvdW5kcyk7Ci0gICAgICAgIEludFJlY3QgdmlzaWJsZVJl
Y3QoSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZShsYXllcldpZHRoIC8gMiwgbGF5ZXJIZWlnaHQp
KTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEZWJ1Z1Njb3BlZFNldE1haW5UaHJl
YWQgbWFpblRocmVhZDsKIAotICAgICAgICAvLyBQcmV0ZW5kIHRoZSBsYXllciBpcyBhbmltYXRp
bmcuCi0gICAgICAgIGxheWVyLT5zZXREcmF3VHJhbnNmb3JtSXNBbmltYXRpbmcodHJ1ZSk7Ci0g
ICAgICAgIGxheWVyLT5zZXRCb3VuZHMoY29udGVudEJvdW5kcyk7Ci0gICAgICAgIGxheWVyLT5z
ZXRWaXNpYmxlQ29udGVudFJlY3QodmlzaWJsZVJlY3QpOwotICAgICAgICBsYXllci0+aW52YWxp
ZGF0ZUNvbnRlbnRSZWN0KGNvbnRlbnRSZWN0KTsKLSAgICAgICAgbGF5ZXItPnNldExheWVyVHJl
ZUhvc3QoY2NMYXllclRyZWVIb3N0LmdldCgpKTsKLQotICAgICAgICAvLyBUaGUgbGF5ZXIgc2hv
dWxkIHBhaW50IGl0J3MgZW50aXJlIGNvbnRlbnRzIG9uIHRoZSBmaXJzdCBwYWludAotICAgICAg
ICAvLyBpZiBpdCBpcyBjbG9zZSB0byB0aGUgdmlld3BvcnQgc2l6ZSBhbmQgaGFzIHRoZSBhdmFp
bGFibGUgbWVtb3J5LgotICAgICAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMobV9wcmlv
cml0eUNhbGN1bGF0b3IpOwotICAgICAgICBtX3RleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4
dHVyZXMoKTsKLSAgICAgICAgbGF5ZXItPnVwZGF0ZShtX3F1ZXVlLCAwLCBtX3N0YXRzKTsKLSAg
ICAgICAgdXBkYXRlVGV4dHVyZXMoKTsKLSAgICAgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8o
bGF5ZXJJbXBsLmdldCgpKTsKLQotICAgICAgICAvLyBXZSBzaG91bGQgaGF2ZSBhbGwgdGhlIHRp
bGVzIGZvciB0aGUgc21hbGwgYW5pbWF0ZWQgbGF5ZXIuCi0gICAgICAgIC8vIFdlIHNob3VsZCBz
dGlsbCBoYXZlIHRoZSB2aXNpYmxlIHRpbGVzIHdoZW4gd2UgZGlkbid0Ci0gICAgICAgIC8vIGhh
dmUgZW5vdWdoIG1lbW9yeSBmb3IgYWxsIHRoZSB0aWxlcy4KLSAgICAgICAgaWYgKCFydW5PdXRP
Zk1lbW9yeVtpXSkgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyArK2kpIHsK
LSAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDQ7ICsraikKLSAgICAgICAgICAg
ICAgICAgICAgRVhQRUNUX1RSVUUobGF5ZXJJbXBsLT5oYXNUaWxlQXQoaSwgaikpOworICAgICAg
ICAgICAgICAgIC8vIEZ1bGwgc2l6ZSBsYXllciB3aXRoIGhhbGYgYmVpbmcgdmlzaWJsZS4KKyAg
ICAgICAgICAgICAgICBJbnRTaXplIGNvbnRlbnRCb3VuZHMobGF5ZXJXaWR0aCwgbGF5ZXJIZWln
aHQpOworICAgICAgICAgICAgICAgIEludFJlY3QgY29udGVudFJlY3QoSW50UG9pbnQ6Onplcm8o
KSwgY29udGVudEJvdW5kcyk7CisgICAgICAgICAgICAgICAgSW50UmVjdCB2aXNpYmxlUmVjdChJ
bnRQb2ludDo6emVybygpLCBJbnRTaXplKGxheWVyV2lkdGggLyAyLCBsYXllckhlaWdodCkpOwor
CisgICAgICAgICAgICAgICAgLy8gUHJldGVuZCB0aGUgbGF5ZXIgaXMgYW5pbWF0aW5nLgorICAg
ICAgICAgICAgICAgIGxheWVyLT5zZXREcmF3VHJhbnNmb3JtSXNBbmltYXRpbmcodHJ1ZSk7Cisg
ICAgICAgICAgICAgICAgbGF5ZXItPnNldEJvdW5kcyhjb250ZW50Qm91bmRzKTsKKyAgICAgICAg
ICAgICAgICBsYXllci0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0KHZpc2libGVSZWN0KTsKKyAgICAg
ICAgICAgICAgICBsYXllci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KGNvbnRlbnRSZWN0KTsKKyAg
ICAgICAgICAgICAgICBsYXllci0+c2V0TGF5ZXJUcmVlSG9zdChjY0xheWVyVHJlZUhvc3QuZ2V0
KCkpOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCA4OyArK2kpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsg
aiA8IDQ7ICsraikKLSAgICAgICAgICAgICAgICAgICAgRVhQRUNUX0VRKGxheWVySW1wbC0+aGFz
VGlsZUF0KGksIGopLCBpIDwgNCk7CisKKyAgICAgICAgICAgIC8vIFRoZSBsYXllciBzaG91bGQg
cGFpbnQgaXQncyBlbnRpcmUgY29udGVudHMgb24gdGhlIGZpcnN0IHBhaW50CisgICAgICAgICAg
ICAvLyBpZiBpdCBpcyBjbG9zZSB0byB0aGUgdmlld3BvcnQgc2l6ZSBhbmQgaGFzIHRoZSBhdmFp
bGFibGUgbWVtb3J5LgorICAgICAgICAgICAgc2V0VGV4dHVyZVByaW9yaXRpZXNBbmRQcmlvcml0
aXplVGV4dHVyZXNPbk1haW5UaHJlYWQobGF5ZXIuZ2V0KCkpOworICAgICAgICAgICAgdXBkYXRl
TGF5ZXJPbk1haW5UaHJlYWQobGF5ZXIuZ2V0KCksIDApOworICAgICAgICAgICAgdXBkYXRlVGV4
dHVyZXMoKTsKKyAgICAgICAgICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5n
ZXQoKSk7CisKKyAgICAgICAgICAgIC8vIFdlIHNob3VsZCBoYXZlIGFsbCB0aGUgdGlsZXMgZm9y
IHRoZSBzbWFsbCBhbmltYXRlZCBsYXllci4KKyAgICAgICAgICAgIC8vIFdlIHNob3VsZCBzdGls
bCBoYXZlIHRoZSB2aXNpYmxlIHRpbGVzIHdoZW4gd2UgZGlkbid0CisgICAgICAgICAgICAvLyBo
YXZlIGVub3VnaCBtZW1vcnkgZm9yIGFsbCB0aGUgdGlsZXMuCisgICAgICAgICAgICBpZiAoIXJ1
bk91dE9mTWVtb3J5W2ldKSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0
OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA0OyArK2op
CisgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShsYXllckltcGwtPmhhc1RpbGVB
dChpLCBqKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7ICsraSkgeworICAgICAgICAgICAgICAg
ICAgICBmb3IgKGludCBqID0gMDsgaiA8IDQ7ICsraikKKyAgICAgICAgICAgICAgICAgICAgICAg
IEVYUEVDVF9FUShsYXllckltcGwtPmhhc1RpbGVBdChpLCBqKSwgaSA8IDQpOworICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICBjY0xheWVyVHJl
ZUhvc3QuY2xlYXIoKTsKLSAgICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6OnNodXRkb3duKCk7CiB9
CiAKLVRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFpbnRPdXRPZk1lbW9yeSkK
K1RFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0T25JbXBsVGhyZWFkLCBpZGxlUGFpbnRPdXRP
Zk1lbW9yeSkKIHsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBh
ZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShtX3RleHR1cmVNYW5hZ2VyLmdldCgp
KSk7Ci0gICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAgICAgT3duUHRy
PEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVk
TGF5ZXJJbXBsKDEpKSk7CiAKICAgICAvLyBXZSBoYXZlIGVub3VnaCBtZW1vcnkgZm9yIG9ubHkg
dGhlIHZpc2libGUgcmVjdCwgc28gd2Ugd2lsbCBydW4gb3V0IG9mIG1lbW9yeSBpbiBmaXJzdCBp
ZGxlIHBhaW50LgpAQCAtNTEwLDEwICs1NDAsOSBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVt
VGVzdCwgaWRsZVBhaW50T3V0T2ZNZW1vcnkpCiAgICAgRVhQRUNUX1RSVUUobGF5ZXJJbXBsLT5o
YXNUaWxlQXQoMSwgMSkpOwogfQogCi1URVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgaWRs
ZVBhaW50WmVyb1NpemVkTGF5ZXIpCitURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdE9uSW1w
bFRocmVhZCwgaWRsZVBhaW50WmVyb1NpemVkTGF5ZXIpCiB7CiAgICAgUmVmUHRyPEZha2VUaWxl
ZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21p
dW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwotICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVh
ZCBpbXBsVGhyZWFkOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBs
KGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOwogCiAgICAgYm9vbCBhbmlt
YXRpbmdbMl0gPSB7ZmFsc2UsIHRydWV9OwpAQCAtNTM4LDEwICs1NjcsOSBAQCBURVNUX0YoVGls
ZWRMYXllckNocm9taXVtVGVzdCwgaWRsZVBhaW50WmVyb1NpemVkTGF5ZXIpCiAgICAgfQogfQog
Ci1URVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgaWRsZVBhaW50Tm9uVmlzaWJsZUxheWVy
cykKK1RFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0T25JbXBsVGhyZWFkLCBpZGxlUGFpbnRO
b25WaXNpYmxlTGF5ZXJzKQogewogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBs
YXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVyZU1hbmFn
ZXIuZ2V0KCkpKTsKLSAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKICAg
ICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFr
ZUNDVGlsZWRMYXllckltcGwoMSkpKTsKIAogICAgIC8vIEFsdGVybmF0ZSBiZXR3ZWVuIG5vdCB2
aXNpYmxlIGFuZCB2aXNpYmxlLgpAQCAtNTY5LDEwICs1OTcsOSBAQCBURVNUX0YoVGlsZWRMYXll
ckNocm9taXVtVGVzdCwgaWRsZVBhaW50Tm9uVmlzaWJsZUxheWVycykKICAgICB9CiB9CiAKLVRF
U1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpbnZhbGlkYXRlRnJvbVByZXBhcmUpCitURVNU
X0YoVGlsZWRMYXllckNocm9taXVtVGVzdE9uSW1wbFRocmVhZCwgaW52YWxpZGF0ZUZyb21QcmVw
YXJlKQogewogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0
UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsK
LSAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKICAgICBPd25QdHI8RmFr
ZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXll
ckltcGwoMSkpKTsKIAogICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEwMCwgc28gdGhpcyBp
bnZhbGlkYXRlcyBhbmQgdGhlbiBwYWludHMgdHdvIHRpbGVzLgpAQCAtNjAzLDEyICs2MzAsMTEg
QEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGludmFsaWRhdGVGcm9tUHJlcGFyZSkK
ICAgICBFWFBFQ1RfRVEoMSwgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnByZXBh
cmVDb3VudCgpKTsKIH0KIAotVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHZlcmlmeVVw
ZGF0ZVJlY3RXaGVuQ29udGVudEJvdW5kc0FyZVNjYWxlZCkKK1RFU1RfRihUaWxlZExheWVyQ2hy
b21pdW1UZXN0T25JbXBsVGhyZWFkLCB2ZXJpZnlVcGRhdGVSZWN0V2hlbkNvbnRlbnRCb3VuZHNB
cmVTY2FsZWQpCiB7CiAgICAgLy8gVGhlIHVwZGF0ZVJlY3QgKHRoYXQgaW5kaWNhdGVzIHdoYXQg
d2FzIGFjdHVhbGx5IHBhaW50ZWQpIHNob3VsZCBiZSBpbgogICAgIC8vIGxheWVyIHNwYWNlLCBu
b3QgdGhlIGNvbnRlbnQgc3BhY2UuCiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyV2l0aFNjYWxl
ZEJvdW5kcz4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJXaXRoU2NhbGVkQm91
bmRzKG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKLSAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJl
YWQgaW1wbFRocmVhZDsKIAogICAgIEludFJlY3QgbGF5ZXJCb3VuZHMoMCwgMCwgMzAwLCAyMDAp
OwogICAgIEludFJlY3QgY29udGVudEJvdW5kcygwLCAwLCAyMDAsIDI1MCk7CkBAIC02MjEsMzMg
KzY0NywyOSBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdmVyaWZ5VXBkYXRlUmVj
dFdoZW5Db250ZW50Qm91bmRzQXJlU2NhbGVkKQogICAgIC8vIEhvd2V2ZXIsIGl0IHNob3VsZCBz
dGlsbCBiZSBpbiBsYXllciBzcGFjZSwgbm90IGNvbnRlbnQgc3BhY2UuCiAgICAgbGF5ZXItPmlu
dmFsaWRhdGVDb250ZW50UmVjdChjb250ZW50Qm91bmRzKTsKIAotICAgIGxheWVyLT5zZXRUZXh0
dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAgbV90ZXh0dXJlTWFuYWdl
ci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0gICAgbGF5ZXItPnVwZGF0ZShtX3F1ZXVlLCAwLCBt
X3N0YXRzKTsKKyAgICBzZXRUZXh0dXJlUHJpb3JpdGllc0FuZFByaW9yaXRpemVUZXh0dXJlc09u
TWFpblRocmVhZChsYXllci5nZXQoKSk7CisgICAgdXBkYXRlTGF5ZXJPbk1haW5UaHJlYWQobGF5
ZXIuZ2V0KCksIDApOwogICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgwLCAwLCAz
MDAsIDMwMCAqIDAuOCksIGxheWVyLT51cGRhdGVSZWN0KCkpOwogICAgIHVwZGF0ZVRleHR1cmVz
KCk7CiAKICAgICAvLyBBZnRlciB0aGUgdGlsZXMgYXJlIHVwZGF0ZWQgb25jZSwgYW5vdGhlciBp
bnZhbGlkYXRlIG9ubHkgbmVlZHMgdG8gdXBkYXRlIHRoZSBib3VuZHMgb2YgdGhlIGxheWVyLgot
ICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0g
ICAgbV90ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgc2V0VGV4dHVy
ZVByaW9yaXRpZXNBbmRQcmlvcml0aXplVGV4dHVyZXNPbk1haW5UaHJlYWQobGF5ZXIuZ2V0KCkp
OwogICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoY29udGVudEJvdW5kcyk7Ci0gICAg
bGF5ZXItPnVwZGF0ZShtX3F1ZXVlLCAwLCBtX3N0YXRzKTsKKyAgICB1cGRhdGVMYXllck9uTWFp
blRocmVhZChsYXllci5nZXQoKSwgMCk7CiAgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRS
ZWN0KGxheWVyQm91bmRzKSwgbGF5ZXItPnVwZGF0ZVJlY3QoKSk7CiAgICAgdXBkYXRlVGV4dHVy
ZXMoKTsKIAogICAgIC8vIFBhcnRpYWwgcmUtcGFpbnQgc2hvdWxkIGFsc28gYmUgcmVwcmVzZW50
ZWQgYnkgdGhlIHVwZGF0ZVJlY3QgaW4gbGF5ZXIgc3BhY2UsIG5vdCBjb250ZW50IHNwYWNlLgog
ICAgIEludFJlY3QgcGFydGlhbERhbWFnZSgzMCwgMTAwLCAxMCwgMTApOwogICAgIGxheWVyLT5p
bnZhbGlkYXRlQ29udGVudFJlY3QocGFydGlhbERhbWFnZSk7Ci0gICAgbGF5ZXItPnNldFRleHR1
cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICBtX3RleHR1cmVNYW5hZ2Vy
LT5wcmlvcml0aXplVGV4dHVyZXMoKTsKLSAgICBsYXllci0+dXBkYXRlKG1fcXVldWUsIDAsIG1f
c3RhdHMpOworICAgIHNldFRleHR1cmVQcmlvcml0aWVzQW5kUHJpb3JpdGl6ZVRleHR1cmVzT25N
YWluVGhyZWFkKGxheWVyLmdldCgpKTsKKyAgICB1cGRhdGVMYXllck9uTWFpblRocmVhZChsYXll
ci5nZXQoKSwgMCk7CiAgICAgRVhQRUNUX0ZMT0FUX1JFQ1RfRVEoRmxvYXRSZWN0KDQ1LCA4MCwg
MTUsIDgpLCBsYXllci0+dXBkYXRlUmVjdCgpKTsKIH0KIAotVEVTVF9GKFRpbGVkTGF5ZXJDaHJv
bWl1bVRlc3QsIHZlcmlmeUludmFsaWRhdGlvbldoZW5Db250ZW50c1NjYWxlQ2hhbmdlcykKK1RF
U1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0T25JbXBsVGhyZWFkLCB2ZXJpZnlJbnZhbGlkYXRp
b25XaGVuQ29udGVudHNTY2FsZUNoYW5nZXMpCiB7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVy
Q2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0obV90
ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwotICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBs
VGhyZWFkOwogICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0
UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOwogCiAgICAgLy8gQ3JlYXRlIGEgbGF5
ZXIgd2l0aCBvbmUgdGlsZS4KQEAgLTY1OSw5ICs2ODEsOCBAQCBURVNUX0YoVGlsZWRMYXllckNo
cm9taXVtVGVzdCwgdmVyaWZ5SW52YWxpZGF0aW9uV2hlbkNvbnRlbnRzU2NhbGVDaGFuZ2VzKQog
ICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgwLCAwLCAxMDAsIDEwMCksIGxheWVy
LT5sYXN0TmVlZHNEaXNwbGF5UmVjdCgpKTsKIAogICAgIC8vIFB1c2ggdGhlIHRpbGVzIHRvIHRo
ZSBpbXBsIHNpZGUgYW5kIGNoZWNrIHRoYXQgdGhlcmUgaXMgZXhhY3RseSBvbmUuCi0gICAgbGF5
ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICBtX3Rl
eHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKLSAgICBsYXllci0+dXBkYXRlKG1f
cXVldWUsIDAsIG1fc3RhdHMpOworICAgIHNldFRleHR1cmVQcmlvcml0aWVzQW5kUHJpb3JpdGl6
ZVRleHR1cmVzT25NYWluVGhyZWFkKGxheWVyLmdldCgpKTsKKyAgICB1cGRhdGVMYXllck9uTWFp
blRocmVhZChsYXllci5nZXQoKSwgMCk7CiAgICAgdXBkYXRlVGV4dHVyZXMoKTsKICAgICBsYXll
ci0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGxh
eWVySW1wbC0+aGFzVGlsZUF0KDAsIDApKTsKQEAgLTY3Niw5ICs2OTcsOCBAQCBURVNUX0YoVGls
ZWRMYXllckNocm9taXVtVGVzdCwgdmVyaWZ5SW52YWxpZGF0aW9uV2hlbkNvbnRlbnRzU2NhbGVD
aGFuZ2VzKQogICAgIEVYUEVDVF9GTE9BVF9SRUNUX0VRKEZsb2F0UmVjdCgwLCAwLCAxMDAsIDEw
MCksIGxheWVyLT5sYXN0TmVlZHNEaXNwbGF5UmVjdCgpKTsKIAogICAgIC8vIFRoZSBpbXBsIHNp
ZGUgc2hvdWxkIGdldCAyeDIgdGlsZXMgbm93LgotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3Jp
dGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAgbV90ZXh0dXJlTWFuYWdlci0+cHJpb3Jp
dGl6ZVRleHR1cmVzKCk7Ci0gICAgbGF5ZXItPnVwZGF0ZShtX3F1ZXVlLCAwLCBtX3N0YXRzKTsK
KyAgICBzZXRUZXh0dXJlUHJpb3JpdGllc0FuZFByaW9yaXRpemVUZXh0dXJlc09uTWFpblRocmVh
ZChsYXllci5nZXQoKSk7CisgICAgdXBkYXRlTGF5ZXJPbk1haW5UaHJlYWQobGF5ZXIuZ2V0KCks
IDApOwogICAgIHVwZGF0ZVRleHR1cmVzKCk7CiAgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8o
bGF5ZXJJbXBsLmdldCgpKTsKICAgICBFWFBFQ1RfVFJVRShsYXllckltcGwtPmhhc1RpbGVBdCgw
LCAwKSk7CkBAIC02ODksOSArNzA5LDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3Qs
IHZlcmlmeUludmFsaWRhdGlvbldoZW5Db250ZW50c1NjYWxlQ2hhbmdlcykKICAgICAvLyBJbnZh
bGlkYXRlIHRoZSBlbnRpcmUgbGF5ZXIgYWdhaW4sIGJ1dCBkbyBub3QgcGFpbnQuIEFsbCB0aWxl
cyBzaG91bGQgYmUgZ29uZSBub3cgZnJvbSB0aGUKICAgICAvLyBpbXBsIHNpZGUuCiAgICAgbGF5
ZXItPnNldE5lZWRzRGlzcGxheSgpOwotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyht
X3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAgbV90ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRl
eHR1cmVzKCk7Ci0KKyAgICBzZXRUZXh0dXJlUHJpb3JpdGllc0FuZFByaW9yaXRpemVUZXh0dXJl
c09uTWFpblRocmVhZChsYXllci5nZXQoKSk7CiAgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8o
bGF5ZXJJbXBsLmdldCgpKTsKICAgICBFWFBFQ1RfRkFMU0UobGF5ZXJJbXBsLT5oYXNUaWxlQXQo
MCwgMCkpOwogICAgIEVYUEVDVF9GQUxTRShsYXllckltcGwtPmhhc1RpbGVBdCgwLCAxKSk7CkBA
IC03MDEsNTYgKzcxOSw2MCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdmVyaWZ5
SW52YWxpZGF0aW9uV2hlbkNvbnRlbnRzU2NhbGVDaGFuZ2VzKQogCiBURVNUX0YoVGlsZWRMYXll
ckNocm9taXVtVGVzdCwgc2tpcHNEcmF3R2V0c1Jlc2V0KQogewotICAgIC8vIEluaXRpYWxpemUg
d2l0aG91dCB0aHJlYWRpbmcgc3VwcG9ydC4KLSAgICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6Omlu
aXRpYWxpemUoMCk7CiAgICAgRmFrZUNDTGF5ZXJUcmVlSG9zdENsaWVudCBmYWtlQ0NMYXllclRy
ZWVIb3N0Q2xpZW50OwogICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3Q+IGNjTGF5ZXJUcmVlSG9z
dCA9IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKCZmYWtlQ0NMYXllclRyZWVIb3N0Q2xpZW50LCBD
Q0xheWVyVHJlZVNldHRpbmdzKCkpOwogICAgIEFTU0VSVF9UUlVFKGNjTGF5ZXJUcmVlSG9zdC0+
aW5pdGlhbGl6ZVJlbmRlcmVySWZOZWVkZWQoKSk7CiAKLSAgICAvLyBDcmVhdGUgdHdvIDMwMCB4
IDMwMCB0aWxlZCBsYXllcnMuCi0gICAgSW50U2l6ZSBjb250ZW50Qm91bmRzKDMwMCwgMzAwKTsK
LSAgICBJbnRSZWN0IGNvbnRlbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIGNvbnRlbnRCb3VuZHMp
OwotCi0gICAgLy8gV2UgaGF2ZSBlbm91Z2ggbWVtb3J5IGZvciBvbmx5IG9uZSBvZiB0aGUgdHdv
IGxheWVycy4KLSAgICBpbnQgbWVtb3J5TGltaXQgPSA0ICogMzAwICogMzAwOyAvLyA0IGJ5dGVz
IHBlciBwaXhlbC4KLQotICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiByb290TGF5
ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShjY0xheWVyVHJlZUhvc3Qt
PmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKSkpOwotICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNo
cm9taXVtPiBjaGlsZExheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0o
Y2NMYXllclRyZWVIb3N0LT5jb250ZW50c1RleHR1cmVNYW5hZ2VyKCkpKTsKLSAgICByb290TGF5
ZXItPmFkZENoaWxkKGNoaWxkTGF5ZXIpOwotCi0gICAgcm9vdExheWVyLT5zZXRCb3VuZHMoY29u
dGVudEJvdW5kcyk7Ci0gICAgcm9vdExheWVyLT5zZXRWaXNpYmxlQ29udGVudFJlY3QoY29udGVu
dFJlY3QpOwotICAgIHJvb3RMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgwLCAwKSk7Ci0g
ICAgY2hpbGRMYXllci0+c2V0Qm91bmRzKGNvbnRlbnRCb3VuZHMpOwotICAgIGNoaWxkTGF5ZXIt
PnNldFZpc2libGVDb250ZW50UmVjdChjb250ZW50UmVjdCk7Ci0gICAgY2hpbGRMYXllci0+c2V0
UG9zaXRpb24oRmxvYXRQb2ludCgwLCAwKSk7Ci0gICAgcm9vdExheWVyLT5pbnZhbGlkYXRlQ29u
dGVudFJlY3QoY29udGVudFJlY3QpOwotICAgIGNoaWxkTGF5ZXItPmludmFsaWRhdGVDb250ZW50
UmVjdChjb250ZW50UmVjdCk7Ci0KLSAgICBjY0xheWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcihy
b290TGF5ZXIpOwotICAgIGNjTGF5ZXJUcmVlSG9zdC0+c2V0Vmlld3BvcnRTaXplKEludFNpemUo
MzAwLCAzMDApLCBJbnRTaXplKDMwMCwgMzAwKSk7Ci0KLSAgICBjY0xheWVyVHJlZUhvc3QtPnVw
ZGF0ZUxheWVycyhtX3F1ZXVlLCBtZW1vcnlMaW1pdCk7CisgICAgeworICAgICAgICBEZWJ1Z1Nj
b3BlZFNldEltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZCBpbXBsVGhyZWFkQW5kTWFpblRo
cmVhZEJsb2NrZWQ7CiAKLSAgICAvLyBXZSdsbCBza2lwIHRoZSByb290IGxheWVyLgotICAgIEVY
UEVDVF9UUlVFKHJvb3RMYXllci0+c2tpcHNEcmF3KCkpOwotICAgIEVYUEVDVF9GQUxTRShjaGls
ZExheWVyLT5za2lwc0RyYXcoKSk7CisgICAgICAgIC8vIENyZWF0ZSB0d28gMzAwIHggMzAwIHRp
bGVkIGxheWVycy4KKyAgICAgICAgSW50U2l6ZSBjb250ZW50Qm91bmRzKDMwMCwgMzAwKTsKKyAg
ICAgICAgSW50UmVjdCBjb250ZW50UmVjdChJbnRQb2ludDo6emVybygpLCBjb250ZW50Qm91bmRz
KTsKIAotICAgIGNjTGF5ZXJUcmVlSG9zdC0+Y29tbWl0Q29tcGxldGUoKTsKKyAgICAgICAgLy8g
V2UgaGF2ZSBlbm91Z2ggbWVtb3J5IGZvciBvbmx5IG9uZSBvZiB0aGUgdHdvIGxheWVycy4KKyAg
ICAgICAgaW50IG1lbW9yeUxpbWl0ID0gNCAqIDMwMCAqIDMwMDsgLy8gNCBieXRlcyBwZXIgcGl4
ZWwuCisKKyAgICAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IHJvb3RMYXllciA9
IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKGNjTGF5ZXJUcmVlSG9zdC0+Y29u
dGVudHNUZXh0dXJlTWFuYWdlcigpKSk7CisgICAgICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNo
cm9taXVtPiBjaGlsZExheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0o
Y2NMYXllclRyZWVIb3N0LT5jb250ZW50c1RleHR1cmVNYW5hZ2VyKCkpKTsKKyAgICAgICAgcm9v
dExheWVyLT5hZGRDaGlsZChjaGlsZExheWVyKTsKKworICAgICAgICB7CisgICAgICAgICAgICBE
ZWJ1Z1Njb3BlZFNldE1haW5UaHJlYWQgbWFpblRocmVhZDsKKyAgICAgICAgICAgIHJvb3RMYXll
ci0+c2V0Qm91bmRzKGNvbnRlbnRCb3VuZHMpOworICAgICAgICAgICAgcm9vdExheWVyLT5zZXRW
aXNpYmxlQ29udGVudFJlY3QoY29udGVudFJlY3QpOworICAgICAgICAgICAgcm9vdExheWVyLT5z
ZXRQb3NpdGlvbihGbG9hdFBvaW50KDAsIDApKTsKKyAgICAgICAgICAgIGNoaWxkTGF5ZXItPnNl
dEJvdW5kcyhjb250ZW50Qm91bmRzKTsKKyAgICAgICAgICAgIGNoaWxkTGF5ZXItPnNldFZpc2li
bGVDb250ZW50UmVjdChjb250ZW50UmVjdCk7CisgICAgICAgICAgICBjaGlsZExheWVyLT5zZXRQ
b3NpdGlvbihGbG9hdFBvaW50KDAsIDApKTsKKyAgICAgICAgICAgIHJvb3RMYXllci0+aW52YWxp
ZGF0ZUNvbnRlbnRSZWN0KGNvbnRlbnRSZWN0KTsKKyAgICAgICAgICAgIGNoaWxkTGF5ZXItPmlu
dmFsaWRhdGVDb250ZW50UmVjdChjb250ZW50UmVjdCk7CisKKyAgICAgICAgICAgIGNjTGF5ZXJU
cmVlSG9zdC0+c2V0Um9vdExheWVyKHJvb3RMYXllcik7CisgICAgICAgICAgICBjY0xheWVyVHJl
ZUhvc3QtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDMwMCwgMzAwKSwgSW50U2l6ZSgzMDAsIDMw
MCkpOworICAgICAgICAgICAgY2NMYXllclRyZWVIb3N0LT51cGRhdGVMYXllcnMobV9xdWV1ZSwg
bWVtb3J5TGltaXQpOworICAgICAgICB9CiAKLSAgICAvLyBSZW1vdmUgdGhlIGNoaWxkIGxheWVy
LgotICAgIHJvb3RMYXllci0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKKyAgICAgICAgLy8gV2UnbGwg
c2tpcCB0aGUgcm9vdCBsYXllci4KKyAgICAgICAgRVhQRUNUX1RSVUUocm9vdExheWVyLT5za2lw
c0RyYXcoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShjaGlsZExheWVyLT5za2lwc0RyYXcoKSk7
CiAKLSAgICBjY0xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVycyhtX3F1ZXVlLCBtZW1vcnlMaW1p
dCk7Ci0gICAgRVhQRUNUX0ZBTFNFKHJvb3RMYXllci0+c2tpcHNEcmF3KCkpOworICAgICAgICBj
Y0xheWVyVHJlZUhvc3QtPmNvbW1pdENvbXBsZXRlKCk7CiAKLSAgICBjY0xheWVyVHJlZUhvc3Qt
PmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+Y2xlYXJBbGxNZW1vcnkobV9yZXNvdXJjZVByb3Zp
ZGVyLmdldCgpKTsKKyAgICAgICAgeworICAgICAgICAgICAgRGVidWdTY29wZWRTZXRNYWluVGhy
ZWFkIG1haW5UaHJlYWQ7CisgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGNoaWxkIGxheWVyLgor
ICAgICAgICAgICAgcm9vdExheWVyLT5yZW1vdmVBbGxDaGlsZHJlbigpOworICAgICAgICAgICAg
Y2NMYXllclRyZWVIb3N0LT51cGRhdGVMYXllcnMobV9xdWV1ZSwgbWVtb3J5TGltaXQpOworICAg
ICAgICAgICAgRVhQRUNUX0ZBTFNFKHJvb3RMYXllci0+c2tpcHNEcmF3KCkpOworICAgICAgICB9
CisgICAgICAgIGNjTGF5ZXJUcmVlSG9zdC0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigpLT5jbGVh
ckFsbE1lbW9yeShtX3Jlc291cmNlUHJvdmlkZXIuZ2V0KCkpOworICAgIH0KICAgICBjY0xheWVy
VHJlZUhvc3QtPnNldFJvb3RMYXllcigwKTsKICAgICBjY0xheWVyVHJlZUhvc3QuY2xlYXIoKTsK
LSAgICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6OnNodXRkb3duKCk7CiB9CiAKLVRFU1RfRihUaWxl
ZExheWVyQ2hyb21pdW1UZXN0LCByZXNpemVUb1NtYWxsZXIpCitURVNUX0YoVGlsZWRMYXllckNo
cm9taXVtVGVzdE9uSW1wbFRocmVhZCwgcmVzaXplVG9TbWFsbGVyKQogewogICAgIFJlZlB0cjxG
YWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXll
ckNocm9taXVtKG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKIApAQCAtNzU4LDE1ICs3ODAsMTQg
QEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHJlc2l6ZVRvU21hbGxlcikKICAgICBs
YXllci0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgNzAwLCA3MDApKTsKICAg
ICBsYXllci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgNzAwLCA3MDApKTsK
IAotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7
Ci0gICAgbV90ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0gICAgbGF5ZXIt
PnVwZGF0ZShtX3F1ZXVlLCAwLCBtX3N0YXRzKTsKKyAgICBzZXRUZXh0dXJlUHJpb3JpdGllc0Fu
ZFByaW9yaXRpemVUZXh0dXJlc09uTWFpblRocmVhZChsYXllci5nZXQoKSk7CisgICAgdXBkYXRl
TGF5ZXJPbk1haW5UaHJlYWQobGF5ZXIuZ2V0KCksIDApOwogCiAgICAgbGF5ZXItPnNldEJvdW5k
cyhJbnRTaXplKDIwMCwgMjAwKSk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVDb250ZW50UmVjdChJ
bnRSZWN0KDAsIDAsIDIwMCwgMjAwKSk7CiB9CiAKLVRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1U
ZXN0LCBodWdlTGF5ZXJVcGRhdGVDcmFzaCkKK1RFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0
T25JbXBsVGhyZWFkLCBodWdlTGF5ZXJVcGRhdGVDcmFzaCkKIHsKICAgICBSZWZQdHI8RmFrZVRp
bGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJv
bWl1bShtX3RleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAKQEAgLTc3NiwxNiArNzk3LDEyIEBAIFRF
U1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBodWdlTGF5ZXJVcGRhdGVDcmFzaCkKICAgICBs
YXllci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgc2l6ZSwgc2l6ZSkpOwog
CiAgICAgLy8gRW5zdXJlIG5vIGNyYXNoIGZvciBib3VuZHMgd2hlcmUgc2l6ZSAqIHNpemUgd291
bGQgb3ZlcmZsb3cgYW4gaW50LgotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3By
aW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAgbV90ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1
cmVzKCk7Ci0gICAgbGF5ZXItPnVwZGF0ZShtX3F1ZXVlLCAwLCBtX3N0YXRzKTsKKyAgICBzZXRU
ZXh0dXJlUHJpb3JpdGllc0FuZFByaW9yaXRpemVUZXh0dXJlc09uTWFpblRocmVhZChsYXllci5n
ZXQoKSk7CisgICAgdXBkYXRlTGF5ZXJPbk1haW5UaHJlYWQobGF5ZXIuZ2V0KCksIDApOwogfQog
CiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcGFydGlhbFVwZGF0ZXMpCiB7Ci0gICAg
Ly8gSW5pdGlhbGl6ZSB3aXRob3V0IHRocmVhZGluZyBzdXBwb3J0LgotICAgIFdlYktpdDo6V2Vi
Q29tcG9zaXRvcjo6aW5pdGlhbGl6ZSgwKTsKLQogICAgIENDTGF5ZXJUcmVlU2V0dGluZ3Mgc2V0
dGluZ3M7CiAgICAgc2V0dGluZ3MubWF4UGFydGlhbFRleHR1cmVVcGRhdGVzID0gNDsKIApAQCAt
NzkzLDEyNCArODEwLDEzNSBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcGFydGlh
bFVwZGF0ZXMpCiAgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdD4gY2NMYXllclRyZWVIb3N0ID0g
Q0NMYXllclRyZWVIb3N0OjpjcmVhdGUoJmZha2VDQ0xheWVyVHJlZUhvc3RDbGllbnQsIHNldHRp
bmdzKTsKICAgICBBU1NFUlRfVFJVRShjY0xheWVyVHJlZUhvc3QtPmluaXRpYWxpemVSZW5kZXJl
cklmTmVlZGVkKCkpOwogCi0gICAgLy8gQ3JlYXRlIG9uZSAzMDAgeCAyMDAgdGlsZWQgbGF5ZXIg
d2l0aCAzIHggMiB0aWxlcy4KLSAgICBJbnRTaXplIGNvbnRlbnRCb3VuZHMoMzAwLCAyMDApOwot
ICAgIEludFJlY3QgY29udGVudFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgY29udGVudEJvdW5kcyk7
CisgICAgeworICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxv
Y2tlZCBpbXBsVGhyZWFkQW5kTWFpblRocmVhZEJsb2NrZWQ7CiAKLSAgICBSZWZQdHI8RmFrZVRp
bGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJv
bWl1bShjY0xheWVyVHJlZUhvc3QtPmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKSkpOwotICAgIGxh
eWVyLT5zZXRCb3VuZHMoY29udGVudEJvdW5kcyk7Ci0gICAgbGF5ZXItPnNldFBvc2l0aW9uKEZs
b2F0UG9pbnQoMCwgMCkpOwotICAgIGxheWVyLT5zZXRWaXNpYmxlQ29udGVudFJlY3QoY29udGVu
dFJlY3QpOwotICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoY29udGVudFJlY3QpOwor
ICAgICAgICAvLyBDcmVhdGUgb25lIDMwMCB4IDIwMCB0aWxlZCBsYXllciB3aXRoIDMgeCAyIHRp
bGVzLgorICAgICAgICBJbnRTaXplIGNvbnRlbnRCb3VuZHMoMzAwLCAyMDApOworICAgICAgICBJ
bnRSZWN0IGNvbnRlbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIGNvbnRlbnRCb3VuZHMpOwogCi0g
ICAgY2NMYXllclRyZWVIb3N0LT5zZXRSb290TGF5ZXIobGF5ZXIpOwotICAgIGNjTGF5ZXJUcmVl
SG9zdC0+c2V0Vmlld3BvcnRTaXplKEludFNpemUoMzAwLCAyMDApLCBJbnRTaXplKDMwMCwgMjAw
KSk7CisgICAgICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllcihhZG9wdFJl
ZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShjY0xheWVyVHJlZUhvc3QtPmNvbnRlbnRzVGV4
dHVyZU1hbmFnZXIoKSkpKTsKIAotICAgIC8vIEZ1bGwgdXBkYXRlIG9mIGFsbCA2IHRpbGVzLgot
ICAgIGNjTGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKG1fcXVldWUsIHN0ZDo6bnVtZXJpY19s
aW1pdHM8c2l6ZV90Pjo6bWF4KCkpOwotICAgIHsKLSAgICAgICAgRGVidWdTY29wZWRTZXRJbXBs
VGhyZWFkIGltcGxUaHJlYWQ7Ci0gICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4g
bGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOwotICAgICAg
ICB1cGRhdGVUZXh0dXJlcyg0KTsKLSAgICAgICAgRVhQRUNUX0VRKDQsIGxheWVyLT5mYWtlTGF5
ZXJUZXh0dXJlVXBkYXRlcigpLT51cGRhdGVDb3VudCgpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUo
bV9xdWV1ZS5oYXNNb3JlVXBkYXRlcygpKTsKLSAgICAgICAgbGF5ZXItPmZha2VMYXllclRleHR1
cmVVcGRhdGVyKCktPmNsZWFyVXBkYXRlQ291bnQoKTsKLSAgICAgICAgdXBkYXRlVGV4dHVyZXMo
NCk7Ci0gICAgICAgIEVYUEVDVF9FUSgyLCBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIo
KS0+dXBkYXRlQ291bnQoKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShtX3F1ZXVlLmhhc01vcmVV
cGRhdGVzKCkpOwotICAgICAgICBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+Y2xl
YXJVcGRhdGVDb3VudCgpOwotICAgICAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXllcklt
cGwuZ2V0KCkpOwotICAgIH0KLSAgICBjY0xheWVyVHJlZUhvc3QtPmNvbW1pdENvbXBsZXRlKCk7
CisgICAgICAgIHsKKyAgICAgICAgICAgIERlYnVnU2NvcGVkU2V0TWFpblRocmVhZCBtYWluVGhy
ZWFkOworICAgICAgICAgICAgbGF5ZXItPnNldEJvdW5kcyhjb250ZW50Qm91bmRzKTsKKyAgICAg
ICAgICAgIGxheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDAsIDApKTsKKyAgICAgICAgICAg
IGxheWVyLT5zZXRWaXNpYmxlQ29udGVudFJlY3QoY29udGVudFJlY3QpOworICAgICAgICAgICAg
bGF5ZXItPmludmFsaWRhdGVDb250ZW50UmVjdChjb250ZW50UmVjdCk7CiAKLSAgICAvLyBGdWxs
IHVwZGF0ZSBvZiAzIHRpbGVzIGFuZCBwYXJ0aWFsIHVwZGF0ZSBvZiAzIHRpbGVzLgotICAgIGxh
eWVyLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAzMDAsIDE1MCkpOwotICAg
IGNjTGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKG1fcXVldWUsIHN0ZDo6bnVtZXJpY19saW1p
dHM8c2l6ZV90Pjo6bWF4KCkpOwotICAgIHsKLSAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhy
ZWFkIGltcGxUaHJlYWQ7Ci0gICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5
ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOwotICAgICAgICB1
cGRhdGVUZXh0dXJlcyg0KTsKLSAgICAgICAgRVhQRUNUX0VRKDMsIGxheWVyLT5mYWtlTGF5ZXJU
ZXh0dXJlVXBkYXRlcigpLT51cGRhdGVDb3VudCgpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUobV9x
dWV1ZS5oYXNNb3JlVXBkYXRlcygpKTsKLSAgICAgICAgbGF5ZXItPmZha2VMYXllclRleHR1cmVV
cGRhdGVyKCktPmNsZWFyVXBkYXRlQ291bnQoKTsKLSAgICAgICAgdXBkYXRlVGV4dHVyZXMoNCk7
Ci0gICAgICAgIEVYUEVDVF9FUSgzLCBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+
dXBkYXRlQ291bnQoKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShtX3F1ZXVlLmhhc01vcmVVcGRh
dGVzKCkpOwotICAgICAgICBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+Y2xlYXJV
cGRhdGVDb3VudCgpOwotICAgICAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwu
Z2V0KCkpOwotICAgIH0KLSAgICBjY0xheWVyVHJlZUhvc3QtPmNvbW1pdENvbXBsZXRlKCk7Ci0K
LSAgICAvLyBQYXJ0aWFsIHVwZGF0ZSBvZiA2IHRpbGVzLgotICAgIGxheWVyLT5pbnZhbGlkYXRl
Q29udGVudFJlY3QoSW50UmVjdCg1MCwgNTAsIDIwMCwgMTAwKSk7Ci0gICAgewotICAgICAgICBE
ZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKLSAgICAgICAgT3duUHRyPEZha2VD
Q1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJ
bXBsKDEpKSk7Ci0gICAgICAgIGNjTGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKG1fcXVldWUs
IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkpOwotICAgICAgICB1cGRhdGVUZXh0
dXJlcyg0KTsKLSAgICAgICAgRVhQRUNUX0VRKDIsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBk
YXRlcigpLT51cGRhdGVDb3VudCgpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUobV9xdWV1ZS5oYXNN
b3JlVXBkYXRlcygpKTsKLSAgICAgICAgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCkt
PmNsZWFyVXBkYXRlQ291bnQoKTsKLSAgICAgICAgdXBkYXRlVGV4dHVyZXMoNCk7Ci0gICAgICAg
IEVYUEVDVF9FUSg0LCBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+dXBkYXRlQ291
bnQoKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShtX3F1ZXVlLmhhc01vcmVVcGRhdGVzKCkpOwot
ICAgICAgICBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+Y2xlYXJVcGRhdGVDb3Vu
dCgpOwotICAgICAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOwot
ICAgIH0KLSAgICBjY0xheWVyVHJlZUhvc3QtPmNvbW1pdENvbXBsZXRlKCk7CisgICAgICAgICAg
ICBjY0xheWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcihsYXllcik7CisgICAgICAgICAgICBjY0xh
eWVyVHJlZUhvc3QtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDMwMCwgMjAwKSwgSW50U2l6ZSgz
MDAsIDIwMCkpOwogCi0gICAgLy8gQ2hlY2tlcmJvYXJkIGFsbCB0aWxlcy4KLSAgICBsYXllci0+
aW52YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgMzAwLCAyMDApKTsKLSAgICB7Ci0g
ICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwotICAgICAgICBPd25Q
dHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGls
ZWRMYXllckltcGwoMSkpKTsKLSAgICAgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJ
bXBsLmdldCgpKTsKLSAgICB9Ci0gICAgY2NMYXllclRyZWVIb3N0LT5jb21taXRDb21wbGV0ZSgp
OworICAgICAgICAgICAgLy8gRnVsbCB1cGRhdGUgb2YgYWxsIDYgdGlsZXMuCisgICAgICAgICAg
ICBjY0xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVycyhtX3F1ZXVlLCBzdGQ6Om51bWVyaWNfbGlt
aXRzPHNpemVfdD46Om1heCgpKTsKKyAgICAgICAgfQogCi0gICAgLy8gUGFydGlhbCB1cGRhdGUg
b2YgNiBjaGVja2VyYm9hcmQgdGlsZXMuCi0gICAgbGF5ZXItPmludmFsaWRhdGVDb250ZW50UmVj
dChJbnRSZWN0KDUwLCA1MCwgMjAwLCAxMDApKTsKLSAgICB7Ci0gICAgICAgIERlYnVnU2NvcGVk
U2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwotICAgICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXll
ckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMSkpKTsK
LSAgICAgICAgY2NMYXllclRyZWVIb3N0LT51cGRhdGVMYXllcnMobV9xdWV1ZSwgc3RkOjpudW1l
cmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSk7Ci0gICAgICAgIHVwZGF0ZVRleHR1cmVzKDQpOwot
ICAgICAgICBFWFBFQ1RfRVEoNCwgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnVw
ZGF0ZUNvdW50KCkpOwotICAgICAgICBFWFBFQ1RfVFJVRShtX3F1ZXVlLmhhc01vcmVVcGRhdGVz
KCkpOwotICAgICAgICBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+Y2xlYXJVcGRh
dGVDb3VudCgpOwotICAgICAgICB1cGRhdGVUZXh0dXJlcyg0KTsKLSAgICAgICAgRVhQRUNUX0VR
KDIsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT51cGRhdGVDb3VudCgpKTsKLSAg
ICAgICAgRVhQRUNUX0ZBTFNFKG1fcXVldWUuaGFzTW9yZVVwZGF0ZXMoKSk7Ci0gICAgICAgIGxh
eWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5jbGVhclVwZGF0ZUNvdW50KCk7Ci0gICAg
ICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7Ci0gICAgfQotICAg
IGNjTGF5ZXJUcmVlSG9zdC0+Y29tbWl0Q29tcGxldGUoKTsKKyAgICAgICAgeworICAgICAgICAg
ICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZh
a2VDQ1RpbGVkTGF5ZXJJbXBsKDEpKSk7CisgICAgICAgICAgICB1cGRhdGVUZXh0dXJlcyg0KTsK
KyAgICAgICAgICAgIEVYUEVDVF9FUSg0LCBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIo
KS0+dXBkYXRlQ291bnQoKSk7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShtX3F1ZXVlLmhhc01v
cmVVcGRhdGVzKCkpOworICAgICAgICAgICAgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVy
KCktPmNsZWFyVXBkYXRlQ291bnQoKTsKKyAgICAgICAgICAgIHVwZGF0ZVRleHR1cmVzKDQpOwor
ICAgICAgICAgICAgRVhQRUNUX0VRKDIsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigp
LT51cGRhdGVDb3VudCgpKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShtX3F1ZXVlLmhhc01v
cmVVcGRhdGVzKCkpOworICAgICAgICAgICAgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVy
KCktPmNsZWFyVXBkYXRlQ291bnQoKTsKKyAgICAgICAgICAgIGxheWVyLT5wdXNoUHJvcGVydGll
c1RvKGxheWVySW1wbC5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgY2NMYXllclRyZWVIb3N0
LT5jb21taXRDb21wbGV0ZSgpOwogCi0gICAgLy8gUGFydGlhbCB1cGRhdGUgb2YgNCB0aWxlcy4K
LSAgICBsYXllci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJlY3QoNTAsIDUwLCAxMDAsIDEw
MCkpOwotICAgIHsKLSAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7
Ci0gICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRy
KG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOwotICAgICAgICBjY0xheWVyVHJlZUhvc3Qt
PnVwZGF0ZUxheWVycyhtX3F1ZXVlLCBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgp
KTsKLSAgICAgICAgdXBkYXRlVGV4dHVyZXMoNCk7Ci0gICAgICAgIEVYUEVDVF9FUSg0LCBsYXll
ci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+dXBkYXRlQ291bnQoKSk7Ci0gICAgICAgIEVY
UEVDVF9GQUxTRShtX3F1ZXVlLmhhc01vcmVVcGRhdGVzKCkpOwotICAgICAgICBsYXllci0+ZmFr
ZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+Y2xlYXJVcGRhdGVDb3VudCgpOwotICAgICAgICBsYXll
ci0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOwotICAgIH0KLSAgICBjY0xheWVy
VHJlZUhvc3QtPmNvbW1pdENvbXBsZXRlKCk7CisgICAgICAgIC8vIEZ1bGwgdXBkYXRlIG9mIDMg
dGlsZXMgYW5kIHBhcnRpYWwgdXBkYXRlIG9mIDMgdGlsZXMuCisgICAgICAgIGxheWVyLT5pbnZh
bGlkYXRlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAzMDAsIDE1MCkpOworICAgICAgICB7Cisg
ICAgICAgICAgICBEZWJ1Z1Njb3BlZFNldE1haW5UaHJlYWQgbWFpblRocmVhZDsKKyAgICAgICAg
ICAgIGNjTGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKG1fcXVldWUsIHN0ZDo6bnVtZXJpY19s
aW1pdHM8c2l6ZV90Pjo6bWF4KCkpOworICAgICAgICB9CisgICAgICAgIHsKKyAgICAgICAgICAg
IE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtl
Q0NUaWxlZExheWVySW1wbCgxKSkpOworICAgICAgICAgICAgdXBkYXRlVGV4dHVyZXMoNCk7Cisg
ICAgICAgICAgICBFWFBFQ1RfRVEoMywgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCkt
PnVwZGF0ZUNvdW50KCkpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUobV9xdWV1ZS5oYXNNb3Jl
VXBkYXRlcygpKTsKKyAgICAgICAgICAgIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigp
LT5jbGVhclVwZGF0ZUNvdW50KCk7CisgICAgICAgICAgICB1cGRhdGVUZXh0dXJlcyg0KTsKKyAg
ICAgICAgICAgIEVYUEVDVF9FUSgzLCBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+
dXBkYXRlQ291bnQoKSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UobV9xdWV1ZS5oYXNNb3Jl
VXBkYXRlcygpKTsKKyAgICAgICAgICAgIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigp
LT5jbGVhclVwZGF0ZUNvdW50KCk7CisgICAgICAgICAgICBsYXllci0+cHVzaFByb3BlcnRpZXNU
byhsYXllckltcGwuZ2V0KCkpOworICAgICAgICB9CisgICAgICAgIGNjTGF5ZXJUcmVlSG9zdC0+
Y29tbWl0Q29tcGxldGUoKTsKKworICAgICAgICAvLyBQYXJ0aWFsIHVwZGF0ZSBvZiA2IHRpbGVz
LgorICAgICAgICBsYXllci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJlY3QoNTAsIDUwLCAy
MDAsIDEwMCkpOworICAgICAgICB7CisgICAgICAgICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXll
ckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMSkpKTsK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEZWJ1Z1Njb3BlZFNldE1haW5UaHJlYWQg
bWFpblRocmVhZDsKKyAgICAgICAgICAgICAgICBjY0xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVy
cyhtX3F1ZXVlLCBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHVwZGF0ZVRleHR1cmVzKDQpOworICAgICAgICAgICAgRVhQRUNU
X0VRKDIsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT51cGRhdGVDb3VudCgpKTsK
KyAgICAgICAgICAgIEVYUEVDVF9UUlVFKG1fcXVldWUuaGFzTW9yZVVwZGF0ZXMoKSk7CisgICAg
ICAgICAgICBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+Y2xlYXJVcGRhdGVDb3Vu
dCgpOworICAgICAgICAgICAgdXBkYXRlVGV4dHVyZXMoNCk7CisgICAgICAgICAgICBFWFBFQ1Rf
RVEoNCwgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnVwZGF0ZUNvdW50KCkpOwor
ICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKG1fcXVldWUuaGFzTW9yZVVwZGF0ZXMoKSk7CisgICAg
ICAgICAgICBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+Y2xlYXJVcGRhdGVDb3Vu
dCgpOworICAgICAgICAgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgp
KTsKKyAgICAgICAgfQorICAgICAgICBjY0xheWVyVHJlZUhvc3QtPmNvbW1pdENvbXBsZXRlKCk7
CiAKLSAgICB7Ci0gICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwor
ICAgICAgICAvLyBDaGVja2VyYm9hcmQgYWxsIHRpbGVzLgorICAgICAgICBsYXllci0+aW52YWxp
ZGF0ZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgMzAwLCAyMDApKTsKKyAgICAgICAgeworICAg
ICAgICAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIo
bmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDEpKSk7CisgICAgICAgICAgICBsYXllci0+cHVzaFBy
b3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOworICAgICAgICB9CisgICAgICAgIGNjTGF5ZXJU
cmVlSG9zdC0+Y29tbWl0Q29tcGxldGUoKTsKKworICAgICAgICAvLyBQYXJ0aWFsIHVwZGF0ZSBv
ZiA2IGNoZWNrZXJib2FyZCB0aWxlcy4KKyAgICAgICAgbGF5ZXItPmludmFsaWRhdGVDb250ZW50
UmVjdChJbnRSZWN0KDUwLCA1MCwgMjAwLCAxMDApKTsKKyAgICAgICAgeworICAgICAgICAgICAg
T3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VD
Q1RpbGVkTGF5ZXJJbXBsKDEpKSk7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRGVi
dWdTY29wZWRTZXRNYWluVGhyZWFkIG1haW5UaHJlYWQ7CisgICAgICAgICAgICAgICAgY2NMYXll
clRyZWVIb3N0LT51cGRhdGVMYXllcnMobV9xdWV1ZSwgc3RkOjpudW1lcmljX2xpbWl0czxzaXpl
X3Q+OjptYXgoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB1cGRhdGVUZXh0dXJlcyg0
KTsKKyAgICAgICAgICAgIEVYUEVDVF9FUSg0LCBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0
ZXIoKS0+dXBkYXRlQ291bnQoKSk7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShtX3F1ZXVlLmhh
c01vcmVVcGRhdGVzKCkpOworICAgICAgICAgICAgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRh
dGVyKCktPmNsZWFyVXBkYXRlQ291bnQoKTsKKyAgICAgICAgICAgIHVwZGF0ZVRleHR1cmVzKDQp
OworICAgICAgICAgICAgRVhQRUNUX0VRKDIsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRl
cigpLT51cGRhdGVDb3VudCgpKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShtX3F1ZXVlLmhh
c01vcmVVcGRhdGVzKCkpOworICAgICAgICAgICAgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRh
dGVyKCktPmNsZWFyVXBkYXRlQ291bnQoKTsKKyAgICAgICAgICAgIGxheWVyLT5wdXNoUHJvcGVy
dGllc1RvKGxheWVySW1wbC5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgY2NMYXllclRyZWVI
b3N0LT5jb21taXRDb21wbGV0ZSgpOworCisgICAgICAgIC8vIFBhcnRpYWwgdXBkYXRlIG9mIDQg
dGlsZXMuCisgICAgICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoSW50UmVjdCg1MCwg
NTAsIDEwMCwgMTAwKSk7CisgICAgICAgIHsKKyAgICAgICAgICAgIE93blB0cjxGYWtlQ0NUaWxl
ZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgx
KSkpOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIERlYnVnU2NvcGVkU2V0TWFpblRo
cmVhZCBtYWluVGhyZWFkOworICAgICAgICAgICAgICAgIGNjTGF5ZXJUcmVlSG9zdC0+dXBkYXRl
TGF5ZXJzKG1fcXVldWUsIHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgdXBkYXRlVGV4dHVyZXMoNCk7CisgICAgICAgICAgICBF
WFBFQ1RfRVEoNCwgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnVwZGF0ZUNvdW50
KCkpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKG1fcXVldWUuaGFzTW9yZVVwZGF0ZXMoKSk7
CisgICAgICAgICAgICBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+Y2xlYXJVcGRh
dGVDb3VudCgpOworICAgICAgICAgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBs
LmdldCgpKTsKKyAgICAgICAgfQorICAgICAgICBjY0xheWVyVHJlZUhvc3QtPmNvbW1pdENvbXBs
ZXRlKCk7CiAgICAgICAgIGNjTGF5ZXJUcmVlSG9zdC0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigp
LT5jbGVhckFsbE1lbW9yeShtX3Jlc291cmNlUHJvdmlkZXIuZ2V0KCkpOwogICAgIH0KICAgICBj
Y0xheWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcigwKTsKICAgICBjY0xheWVyVHJlZUhvc3QuY2xl
YXIoKTsKLSAgICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6OnNodXRkb3duKCk7CiB9CiAKIFRFU1Rf
RihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRob3V0T2NjbHVzaW9uKQog
eworICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZEFuZE1haW5UaHJlYWRCbG9ja2VkIGltcGxU
aHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZDsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJv
bWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShtX3RleHR1
cmVNYW5hZ2VyLmdldCgpKSk7CiAKICAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAsIHNv
IHRoaXMgaW52YWxpZGF0ZXMgYW5kIHRoZW4gcGFpbnRzIHR3byB0aWxlcy4KQEAgLTkxOSwxNCAr
OTQ3LDE1IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRo
b3V0T2NjbHVzaW9uKQogICAgIGxheWVyLT5zZXRWaXNpYmxlQ29udGVudFJlY3QoSW50UmVjdCgw
LCAwLCAxMDAsIDIwMCkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoSW50UmVj
dCgwLCAwLCAxMDAsIDIwMCkpOwogCi0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKG1f
cHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICBtX3RleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4
dHVyZXMoKTsKLSAgICBsYXllci0+dXBkYXRlKG1fcXVldWUsIDAsIG1fc3RhdHMpOworCisgICAg
c2V0VGV4dHVyZVByaW9yaXRpZXNBbmRQcmlvcml0aXplVGV4dHVyZXNPbk1haW5UaHJlYWQobGF5
ZXIuZ2V0KCkpOworICAgIHVwZGF0ZUxheWVyT25NYWluVGhyZWFkKGxheWVyLmdldCgpLCAwKTsK
ICAgICBFWFBFQ1RfRVEoMiwgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnByZXBh
cmVSZWN0Q291bnQoKSk7CiB9CiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxl
c1BhaW50ZWRXaXRoT2NjbHVzaW9uKQogeworICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZEFu
ZE1haW5UaHJlYWRCbG9ja2VkIGltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZDsKICAgICBS
ZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRp
bGVkTGF5ZXJDaHJvbWl1bShtX3RleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgVGVzdENDT2Nj
bHVzaW9uVHJhY2tlciBvY2NsdWRlZDsKIApAQCAtOTM5LDkgKzk2OCw4IEBAIFRFU1RfRihUaWxl
ZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9uKQogICAgIGxheWVy
LT5zZXRWaXNpYmxlQ29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBsYXllci0+Y29udGVu
dEJvdW5kcygpKSk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVDb250ZW50UmVjdChJbnRSZWN0KDAs
IDAsIDYwMCwgNjAwKSk7CiAKLSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMobV9wcmlv
cml0eUNhbGN1bGF0b3IpOwotICAgIG1fdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJl
cygpOwotICAgIGxheWVyLT51cGRhdGUobV9xdWV1ZSwgJm9jY2x1ZGVkLCBtX3N0YXRzKTsKKyAg
ICBzZXRUZXh0dXJlUHJpb3JpdGllc0FuZFByaW9yaXRpemVUZXh0dXJlc09uTWFpblRocmVhZChs
YXllci5nZXQoKSk7CisgICAgdXBkYXRlTGF5ZXJPbk1haW5UaHJlYWQobGF5ZXIuZ2V0KCksICZv
Y2NsdWRlZCk7CiAgICAgRVhQRUNUX0VRKDM2LTMsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBk
YXRlcigpLT5wcmVwYXJlUmVjdENvdW50KCkpOwogCiAgICAgRVhQRUNUX05FQVIob2NjbHVkZWQu
b3ZlcmRyYXdNZXRyaWNzKCkucGl4ZWxzVXBsb2FkZWRPcGFxdWUoKSwgMCwgMSk7CkBAIC05NDks
MTIgKzk3NywxMSBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNQYWludGVk
V2l0aE9jY2x1c2lvbikKICAgICBFWFBFQ1RfRVEoMywgb2NjbHVkZWQub3ZlcmRyYXdNZXRyaWNz
KCkudGlsZXNDdWxsZWRGb3JVcGxvYWQoKSk7CiAKICAgICBsYXllci0+ZmFrZUxheWVyVGV4dHVy
ZVVwZGF0ZXIoKS0+Y2xlYXJQcmVwYXJlUmVjdENvdW50KCk7Ci0gICAgbGF5ZXItPnNldFRleHR1
cmVQcmlvcml0aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICBtX3RleHR1cmVNYW5hZ2Vy
LT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBzZXRUZXh0dXJlUHJpb3JpdGllc0FuZFByaW9y
aXRpemVUZXh0dXJlc09uTWFpblRocmVhZChsYXllci5nZXQoKSk7CiAKICAgICBvY2NsdWRlZC5z
ZXRPY2NsdXNpb24oSW50UmVjdCgyNTAsIDIwMCwgMzAwLCAxMDApKTsKICAgICBsYXllci0+aW52
YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgNjAwLCA2MDApKTsKLSAgICBsYXllci0+
dXBkYXRlKG1fcXVldWUsICZvY2NsdWRlZCwgbV9zdGF0cyk7CisgICAgdXBkYXRlTGF5ZXJPbk1h
aW5UaHJlYWQobGF5ZXIuZ2V0KCksICZvY2NsdWRlZCk7CiAgICAgRVhQRUNUX0VRKDM2LTIsIGxh
eWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5wcmVwYXJlUmVjdENvdW50KCkpOwogCiAg
ICAgRVhQRUNUX05FQVIob2NjbHVkZWQub3ZlcmRyYXdNZXRyaWNzKCkucGl4ZWxzVXBsb2FkZWRP
cGFxdWUoKSwgMCwgMSk7CkBAIC05NjIsMTIgKzk4OSwxMSBAQCBURVNUX0YoVGlsZWRMYXllckNo
cm9taXVtVGVzdCwgdGlsZXNQYWludGVkV2l0aE9jY2x1c2lvbikKICAgICBFWFBFQ1RfRVEoMyAr
IDIsIG9jY2x1ZGVkLm92ZXJkcmF3TWV0cmljcygpLnRpbGVzQ3VsbGVkRm9yVXBsb2FkKCkpOwog
CiAgICAgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPmNsZWFyUHJlcGFyZVJlY3RD
b3VudCgpOwotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3Vs
YXRvcik7Ci0gICAgbV90ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAg
c2V0VGV4dHVyZVByaW9yaXRpZXNBbmRQcmlvcml0aXplVGV4dHVyZXNPbk1haW5UaHJlYWQobGF5
ZXIuZ2V0KCkpOwogCiAgICAgb2NjbHVkZWQuc2V0T2NjbHVzaW9uKEludFJlY3QoMjUwLCAyNTAs
IDMwMCwgMTAwKSk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVDb250ZW50UmVjdChJbnRSZWN0KDAs
IDAsIDYwMCwgNjAwKSk7Ci0gICAgbGF5ZXItPnVwZGF0ZShtX3F1ZXVlLCAmb2NjbHVkZWQsIG1f
c3RhdHMpOworICAgIHVwZGF0ZUxheWVyT25NYWluVGhyZWFkKGxheWVyLmdldCgpLCAmb2NjbHVk
ZWQpOwogICAgIEVYUEVDVF9FUSgzNiwgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCkt
PnByZXBhcmVSZWN0Q291bnQoKSk7CiAKICAgICBFWFBFQ1RfTkVBUihvY2NsdWRlZC5vdmVyZHJh
d01ldHJpY3MoKS5waXhlbHNVcGxvYWRlZE9wYXF1ZSgpLCAwLCAxKTsKQEAgLTk3Nyw2ICsxMDAz
LDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdpdGhPY2Ns
dXNpb24pCiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRo
T2NjbHVzaW9uQW5kVmlzaWJsaXR5Q29uc3RyYWludHMpCiB7CisgICAgRGVidWdTY29wZWRTZXRJ
bXBsVGhyZWFkQW5kTWFpblRocmVhZEJsb2NrZWQgaW1wbFRocmVhZEFuZE1haW5UaHJlYWRCbG9j
a2VkOwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVm
KG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAg
ICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1ZGVkOwogCkBAIC05OTAsOSArMTAxNyw4IEBA
IFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9u
QW5kVmlzaWJsaXR5Q29uc3RyYWludHMpCiAgICAgbGF5ZXItPnNldFZpc2libGVDb250ZW50UmVj
dChJbnRSZWN0KDAsIDAsIDYwMCwgMzYwKSk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVDb250ZW50
UmVjdChJbnRSZWN0KDAsIDAsIDYwMCwgNjAwKSk7CiAKLSAgICBsYXllci0+c2V0VGV4dHVyZVBy
aW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIG1fdGV4dHVyZU1hbmFnZXItPnBy
aW9yaXRpemVUZXh0dXJlcygpOwotICAgIGxheWVyLT51cGRhdGUobV9xdWV1ZSwgJm9jY2x1ZGVk
LCBtX3N0YXRzKTsKKyAgICBzZXRUZXh0dXJlUHJpb3JpdGllc0FuZFByaW9yaXRpemVUZXh0dXJl
c09uTWFpblRocmVhZChsYXllci5nZXQoKSk7CisgICAgdXBkYXRlTGF5ZXJPbk1haW5UaHJlYWQo
bGF5ZXIuZ2V0KCksICZvY2NsdWRlZCk7CiAgICAgRVhQRUNUX0VRKDI0LTMsIGxheWVyLT5mYWtl
TGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5wcmVwYXJlUmVjdENvdW50KCkpOwogCiAgICAgRVhQRUNU
X05FQVIob2NjbHVkZWQub3ZlcmRyYXdNZXRyaWNzKCkucGl4ZWxzVXBsb2FkZWRPcGFxdWUoKSwg
MCwgMSk7CkBAIC0xMDA2LDkgKzEwMzIsOCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVz
dCwgdGlsZXNQYWludGVkV2l0aE9jY2x1c2lvbkFuZFZpc2libGl0eUNvbnN0cmFpbnRzKQogICAg
IGxheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgNjAwLCAzNTApKTsK
ICAgICBsYXllci0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgNjAwLCAzNTAp
KTsKICAgICBsYXllci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgNjAwLCA2
MDApKTsKLSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0
b3IpOwotICAgIG1fdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwotICAgIGxh
eWVyLT51cGRhdGUobV9xdWV1ZSwgJm9jY2x1ZGVkLCBtX3N0YXRzKTsKKyAgICBzZXRUZXh0dXJl
UHJpb3JpdGllc0FuZFByaW9yaXRpemVUZXh0dXJlc09uTWFpblRocmVhZChsYXllci5nZXQoKSk7
CisgICAgdXBkYXRlTGF5ZXJPbk1haW5UaHJlYWQobGF5ZXIuZ2V0KCksICZvY2NsdWRlZCk7CiAg
ICAgRVhQRUNUX0VRKDI0LTYsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5wcmVw
YXJlUmVjdENvdW50KCkpOwogCiAgICAgRVhQRUNUX05FQVIob2NjbHVkZWQub3ZlcmRyYXdNZXRy
aWNzKCkucGl4ZWxzVXBsb2FkZWRPcGFxdWUoKSwgMCwgMSk7CkBAIC0xMDIyLDkgKzEwNDcsOCBA
QCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNQYWludGVkV2l0aE9jY2x1c2lv
bkFuZFZpc2libGl0eUNvbnN0cmFpbnRzKQogICAgIGxheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRS
ZWN0KEludFJlY3QoMCwgMCwgNjAwLCAzNDApKTsKICAgICBsYXllci0+c2V0VmlzaWJsZUNvbnRl
bnRSZWN0KEludFJlY3QoMCwgMCwgNjAwLCAzNDApKTsKICAgICBsYXllci0+aW52YWxpZGF0ZUNv
bnRlbnRSZWN0KEludFJlY3QoMCwgMCwgNjAwLCA2MDApKTsKLSAgICBsYXllci0+c2V0VGV4dHVy
ZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIG1fdGV4dHVyZU1hbmFnZXIt
PnByaW9yaXRpemVUZXh0dXJlcygpOwotICAgIGxheWVyLT51cGRhdGUobV9xdWV1ZSwgJm9jY2x1
ZGVkLCBtX3N0YXRzKTsKKyAgICBzZXRUZXh0dXJlUHJpb3JpdGllc0FuZFByaW9yaXRpemVUZXh0
dXJlc09uTWFpblRocmVhZChsYXllci5nZXQoKSk7CisgICAgdXBkYXRlTGF5ZXJPbk1haW5UaHJl
YWQobGF5ZXIuZ2V0KCksICZvY2NsdWRlZCk7CiAgICAgRVhQRUNUX0VRKDI0LTYsIGxheWVyLT5m
YWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5wcmVwYXJlUmVjdENvdW50KCkpOwogCiAgICAgRVhQ
RUNUX05FQVIob2NjbHVkZWQub3ZlcmRyYXdNZXRyaWNzKCkucGl4ZWxzVXBsb2FkZWRPcGFxdWUo
KSwgMCwgMSk7CkBAIC0xMDM1LDYgKzEwNTksNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVt
VGVzdCwgdGlsZXNQYWludGVkV2l0aE9jY2x1c2lvbkFuZFZpc2libGl0eUNvbnN0cmFpbnRzKQog
CiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNOb3RQYWludGVkV2l0aG91dElu
dmFsaWRhdGlvbikKIHsKKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWRBbmRNYWluVGhyZWFk
QmxvY2tlZCBpbXBsVGhyZWFkQW5kTWFpblRocmVhZEJsb2NrZWQ7CiAgICAgUmVmUHRyPEZha2VU
aWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hy
b21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIFRlc3RDQ09jY2x1c2lvblRyYWNr
ZXIgb2NjbHVkZWQ7CiAKQEAgLTEwNDYsMjUgKzEwNzEsMjAgQEAgVEVTVF9GKFRpbGVkTGF5ZXJD
aHJvbWl1bVRlc3QsIHRpbGVzTm90UGFpbnRlZFdpdGhvdXRJbnZhbGlkYXRpb24pCiAgICAgbGF5
ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCA2MDAsIDYwMCkpOwogICAg
IGxheWVyLT5zZXRWaXNpYmxlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCA2MDAsIDYwMCkpOwog
ICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCA2MDAsIDYwMCkp
OwotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7
Ci0gICAgbV90ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0gICAgbGF5ZXIt
PnVwZGF0ZShtX3F1ZXVlLCAmb2NjbHVkZWQsIG1fc3RhdHMpOworICAgIHNldFRleHR1cmVQcmlv
cml0aWVzQW5kUHJpb3JpdGl6ZVRleHR1cmVzT25NYWluVGhyZWFkKGxheWVyLmdldCgpKTsKKyAg
ICB1cGRhdGVMYXllck9uTWFpblRocmVhZChsYXllci5nZXQoKSwgJm9jY2x1ZGVkKTsKICAgICBF
WFBFQ1RfRVEoMzYtMywgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnByZXBhcmVS
ZWN0Q291bnQoKSk7Ci0gICAgewotICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1w
bFRocmVhZDsKLSAgICAgICAgdXBkYXRlVGV4dHVyZXMoKTsKLSAgICB9CisgICAgdXBkYXRlVGV4
dHVyZXMoKTsKIAogICAgIEVYUEVDVF9ORUFSKG9jY2x1ZGVkLm92ZXJkcmF3TWV0cmljcygpLnBp
eGVsc1VwbG9hZGVkT3BhcXVlKCksIDAsIDEpOwogICAgIEVYUEVDVF9ORUFSKG9jY2x1ZGVkLm92
ZXJkcmF3TWV0cmljcygpLnBpeGVsc1VwbG9hZGVkVHJhbnNsdWNlbnQoKSwgMzMwMDAwLCAxKTsK
ICAgICBFWFBFQ1RfRVEoMywgb2NjbHVkZWQub3ZlcmRyYXdNZXRyaWNzKCkudGlsZXNDdWxsZWRG
b3JVcGxvYWQoKSk7CiAKICAgICBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+Y2xl
YXJQcmVwYXJlUmVjdENvdW50KCk7Ci0gICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0aWVzKG1f
cHJpb3JpdHlDYWxjdWxhdG9yKTsKLSAgICBtX3RleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4
dHVyZXMoKTsKKyAgICBzZXRUZXh0dXJlUHJpb3JpdGllc0FuZFByaW9yaXRpemVUZXh0dXJlc09u
TWFpblRocmVhZChsYXllci5nZXQoKSk7CiAKICAgICAvLyBSZXBhaW50IHdpdGhvdXQgbWFya2lu
ZyBpdCBkaXJ0eS4gVGhlIDMgY3VsbGVkIHRpbGVzIHdpbGwgYmUgcHJlLXBhaW50ZWQgbm93Lgot
ICAgIGxheWVyLT51cGRhdGUobV9xdWV1ZSwgJm9jY2x1ZGVkLCBtX3N0YXRzKTsKKyAgICB1cGRh
dGVMYXllck9uTWFpblRocmVhZChsYXllci5nZXQoKSwgJm9jY2x1ZGVkKTsKICAgICBFWFBFQ1Rf
RVEoMywgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnByZXBhcmVSZWN0Q291bnQo
KSk7CiAKICAgICBFWFBFQ1RfTkVBUihvY2NsdWRlZC5vdmVyZHJhd01ldHJpY3MoKS5waXhlbHNV
cGxvYWRlZE9wYXF1ZSgpLCAwLCAxKTsKQEAgLTEwNzQsNiArMTA5NCw3IEBAIFRFU1RfRihUaWxl
ZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc05vdFBhaW50ZWRXaXRob3V0SW52YWxpZGF0aW9uKQog
CiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNQYWludGVkV2l0aE9jY2x1c2lv
bkFuZFRyYW5zZm9ybXMpCiB7CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkQW5kTWFpblRo
cmVhZEJsb2NrZWQgaW1wbFRocmVhZEFuZE1haW5UaHJlYWRCbG9ja2VkOwogICAgIFJlZlB0cjxG
YWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXll
ckNocm9taXVtKG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBUZXN0Q0NPY2NsdXNpb25U
cmFja2VyIG9jY2x1ZGVkOwogCkBAIC0xMDkxLDkgKzExMTIsOCBAQCBURVNUX0YoVGlsZWRMYXll
ckNocm9taXVtVGVzdCwgdGlsZXNQYWludGVkV2l0aE9jY2x1c2lvbkFuZFRyYW5zZm9ybXMpCiAg
ICAgbGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBsYXll
ci0+Y29udGVudEJvdW5kcygpKSk7CiAgICAgbGF5ZXItPnNldFZpc2libGVDb250ZW50UmVjdChJ
bnRSZWN0KEludFBvaW50KCksIGxheWVyLT5jb250ZW50Qm91bmRzKCkpKTsKICAgICBsYXllci0+
aW52YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwgNjAwLCA2MDApKTsKLSAgICBsYXll
ci0+c2V0VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIG1fdGV4
dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwotICAgIGxheWVyLT51cGRhdGUobV9x
dWV1ZSwgJm9jY2x1ZGVkLCBtX3N0YXRzKTsKKyAgICBzZXRUZXh0dXJlUHJpb3JpdGllc0FuZFBy
aW9yaXRpemVUZXh0dXJlc09uTWFpblRocmVhZChsYXllci5nZXQoKSk7CisgICAgdXBkYXRlTGF5
ZXJPbk1haW5UaHJlYWQobGF5ZXIuZ2V0KCksICZvY2NsdWRlZCk7CiAgICAgRVhQRUNUX0VRKDM2
LTMsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5wcmVwYXJlUmVjdENvdW50KCkp
OwogCiAgICAgRVhQRUNUX05FQVIob2NjbHVkZWQub3ZlcmRyYXdNZXRyaWNzKCkucGl4ZWxzVXBs
b2FkZWRPcGFxdWUoKSwgMCwgMSk7CkBAIC0xMTAzLDYgKzExMjMsNyBAQCBURVNUX0YoVGlsZWRM
YXllckNocm9taXVtVGVzdCwgdGlsZXNQYWludGVkV2l0aE9jY2x1c2lvbkFuZFRyYW5zZm9ybXMp
CiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVz
aW9uQW5kU2NhbGluZykKIHsKKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWRBbmRNYWluVGhy
ZWFkQmxvY2tlZCBpbXBsVGhyZWFkQW5kTWFpblRocmVhZEJsb2NrZWQ7CiAgICAgUmVmUHRyPEZh
a2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVy
Q2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIFRlc3RDQ09jY2x1c2lvblRy
YWNrZXIgb2NjbHVkZWQ7CiAKQEAgLTExMjIsOSArMTE0Myw4IEBAIFRFU1RfRihUaWxlZExheWVy
Q2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9uQW5kU2NhbGluZykKICAgICBs
YXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCksIGxheWVyLT5j
b250ZW50Qm91bmRzKCkpKTsKICAgICBsYXllci0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0KEludFJl
Y3QoSW50UG9pbnQoKSwgbGF5ZXItPmNvbnRlbnRCb3VuZHMoKSkpOwogICAgIGxheWVyLT5pbnZh
bGlkYXRlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCA2MDAsIDYwMCkpOwotICAgIGxheWVyLT5z
ZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAgbV90ZXh0dXJl
TWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Ci0gICAgbGF5ZXItPnVwZGF0ZShtX3F1ZXVl
LCAmb2NjbHVkZWQsIG1fc3RhdHMpOworICAgIHNldFRleHR1cmVQcmlvcml0aWVzQW5kUHJpb3Jp
dGl6ZVRleHR1cmVzT25NYWluVGhyZWFkKGxheWVyLmdldCgpKTsKKyAgICB1cGRhdGVMYXllck9u
TWFpblRocmVhZChsYXllci5nZXQoKSwgJm9jY2x1ZGVkKTsKICAgICAvLyBUaGUgY29udGVudCBp
cyBoYWxmIHRoZSBzaXplIG9mIHRoZSBsYXllciAoc28gdGhlIG51bWJlciBvZiB0aWxlcyBpcyBm
ZXdlcikuCiAgICAgLy8gSW4gdGhpcyBjYXNlLCB0aGUgY29udGVudCBpcyAzMDB4MzAwLCBhbmQg
c2luY2UgdGhlIHRpbGUgc2l6ZSBpcyAxMDAsIHRoZQogICAgIC8vIG51bWJlciBvZiB0aWxlcyAz
eDMuCkBAIC0xMTQzLDkgKzExNjMsOCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwg
dGlsZXNQYWludGVkV2l0aE9jY2x1c2lvbkFuZFNjYWxpbmcpCiAgICAgbGF5ZXItPnNldERyYXdh
YmxlQ29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBsYXllci0+Y29udGVudEJvdW5kcygp
KSk7CiAgICAgbGF5ZXItPnNldFZpc2libGVDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCks
IGxheWVyLT5jb250ZW50Qm91bmRzKCkpKTsKICAgICBsYXllci0+aW52YWxpZGF0ZUNvbnRlbnRS
ZWN0KEludFJlY3QoMCwgMCwgNjAwLCA2MDApKTsKLSAgICBsYXllci0+c2V0VGV4dHVyZVByaW9y
aXRpZXMobV9wcmlvcml0eUNhbGN1bGF0b3IpOwotICAgIG1fdGV4dHVyZU1hbmFnZXItPnByaW9y
aXRpemVUZXh0dXJlcygpOwotICAgIGxheWVyLT51cGRhdGUobV9xdWV1ZSwgJm9jY2x1ZGVkLCBt
X3N0YXRzKTsKKyAgICBzZXRUZXh0dXJlUHJpb3JpdGllc0FuZFByaW9yaXRpemVUZXh0dXJlc09u
TWFpblRocmVhZChsYXllci5nZXQoKSk7CisgICAgdXBkYXRlTGF5ZXJPbk1haW5UaHJlYWQobGF5
ZXIuZ2V0KCksICZvY2NsdWRlZCk7CiAgICAgRVhQRUNUX0VRKDktMSwgbGF5ZXItPmZha2VMYXll
clRleHR1cmVVcGRhdGVyKCktPnByZXBhcmVSZWN0Q291bnQoKSk7CiAKICAgICBFWFBFQ1RfTkVB
UihvY2NsdWRlZC5vdmVyZHJhd01ldHJpY3MoKS5waXhlbHNVcGxvYWRlZE9wYXF1ZSgpLCAwLCAx
KTsKQEAgLTExNjQsOSArMTE4Myw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB0
aWxlc1BhaW50ZWRXaXRoT2NjbHVzaW9uQW5kU2NhbGluZykKICAgICBsYXllci0+c2V0RHJhd2Fi
bGVDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCksIGxheWVyLT5jb250ZW50Qm91bmRzKCkp
KTsKICAgICBsYXllci0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQoKSwg
bGF5ZXItPmNvbnRlbnRCb3VuZHMoKSkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVudFJl
Y3QoSW50UmVjdCgwLCAwLCA2MDAsIDYwMCkpOwotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3Jp
dGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAgbV90ZXh0dXJlTWFuYWdlci0+cHJpb3Jp
dGl6ZVRleHR1cmVzKCk7Ci0gICAgbGF5ZXItPnVwZGF0ZShtX3F1ZXVlLCAmb2NjbHVkZWQsIG1f
c3RhdHMpOworICAgIHNldFRleHR1cmVQcmlvcml0aWVzQW5kUHJpb3JpdGl6ZVRleHR1cmVzT25N
YWluVGhyZWFkKGxheWVyLmdldCgpKTsKKyAgICB1cGRhdGVMYXllck9uTWFpblRocmVhZChsYXll
ci5nZXQoKSwgJm9jY2x1ZGVkKTsKICAgICBFWFBFQ1RfRVEoOS0xLCBsYXllci0+ZmFrZUxheWVy
VGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFyZVJlY3RDb3VudCgpKTsKIAogICAgIEVYUEVDVF9ORUFS
KG9jY2x1ZGVkLm92ZXJkcmF3TWV0cmljcygpLnBpeGVsc1VwbG9hZGVkT3BhcXVlKCksIDAsIDEp
OwpAQCAtMTE3Niw5ICsxMTk0LDkgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRp
bGVzUGFpbnRlZFdpdGhPY2NsdXNpb25BbmRTY2FsaW5nKQogCiBURVNUX0YoVGlsZWRMYXllckNo
cm9taXVtVGVzdCwgdmlzaWJsZUNvbnRlbnRPcGFxdWVSZWdpb24pCiB7CisgICAgRGVidWdTY29w
ZWRTZXRJbXBsVGhyZWFkQW5kTWFpblRocmVhZEJsb2NrZWQgaW1wbFRocmVhZEFuZE1haW5UaHJl
YWRCbG9ja2VkOwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFk
b3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkp
KTsKICAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1ZGVkOwotICAgIERlYnVnU2NvcGVk
U2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogCiAgICAgLy8gVGhlIHRpbGUgc2l6ZSBpcyAxMDB4
MTAwLCBzbyB0aGlzIGludmFsaWRhdGVzIGFuZCB0aGVuIHBhaW50cyB0d28gdGlsZXMgaW4gdmFy
aW91cyB3YXlzLgogCkBAIC0xMTkzLDEzICsxMjExLDEyIEBAIFRFU1RfRihUaWxlZExheWVyQ2hy
b21pdW1UZXN0LCB2aXNpYmxlQ29udGVudE9wYXF1ZVJlZ2lvbikKICAgICBsYXllci0+c2V0Vmlz
aWJsZUNvbnRlbnRSZWN0KHZpc2libGVCb3VuZHMpOwogICAgIGxheWVyLT5zZXREcmF3T3BhY2l0
eSgxKTsKIAotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3Vs
YXRvcik7Ci0gICAgbV90ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAg
c2V0VGV4dHVyZVByaW9yaXRpZXNBbmRQcmlvcml0aXplVGV4dHVyZXNPbk1haW5UaHJlYWQobGF5
ZXIuZ2V0KCkpOwogCiAgICAgLy8gSWYgdGhlIGxheWVyIGRvZXNuJ3QgcGFpbnQgb3BhcXVlIGNv
bnRlbnQsIHRoZW4gdGhlIHZpc2libGVDb250ZW50T3BhcXVlUmVnaW9uIHNob3VsZCBiZSBlbXB0
eS4KICAgICBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+c2V0T3BhcXVlUGFpbnRS
ZWN0KEludFJlY3QoKSk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVDb250ZW50UmVjdChjb250ZW50
Qm91bmRzKTsKLSAgICBsYXllci0+dXBkYXRlKG1fcXVldWUsICZvY2NsdWRlZCwgbV9zdGF0cyk7
CisgICAgdXBkYXRlTGF5ZXJPbk1haW5UaHJlYWQobGF5ZXIuZ2V0KCksICZvY2NsdWRlZCk7CiAg
ICAgb3BhcXVlQ29udGVudHMgPSBsYXllci0+dmlzaWJsZUNvbnRlbnRPcGFxdWVSZWdpb24oKTsK
ICAgICBFWFBFQ1RfVFJVRShvcGFxdWVDb250ZW50cy5pc0VtcHR5KCkpOwogCkBAIC0xMjEyLDcg
KzEyMjksNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdmlzaWJsZUNvbnRlbnRP
cGFxdWVSZWdpb24pCiAgICAgb3BhcXVlUGFpbnRSZWN0ID0gSW50UmVjdCgxMCwgMTAsIDkwLCAx
OTApOwogICAgIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5zZXRPcGFxdWVQYWlu
dFJlY3Qob3BhcXVlUGFpbnRSZWN0KTsKICAgICBsYXllci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0
KGNvbnRlbnRCb3VuZHMpOwotICAgIGxheWVyLT51cGRhdGUobV9xdWV1ZSwgJm9jY2x1ZGVkLCBt
X3N0YXRzKTsKKyAgICB1cGRhdGVMYXllck9uTWFpblRocmVhZChsYXllci5nZXQoKSwgJm9jY2x1
ZGVkKTsKICAgICB1cGRhdGVUZXh0dXJlcygpOwogICAgIG9wYXF1ZUNvbnRlbnRzID0gbGF5ZXIt
PnZpc2libGVDb250ZW50T3BhcXVlUmVnaW9uKCk7CiAgICAgRVhQRUNUX0VRX1JFQ1QoaW50ZXJz
ZWN0aW9uKG9wYXF1ZVBhaW50UmVjdCwgdmlzaWJsZUJvdW5kcyksIG9wYXF1ZUNvbnRlbnRzLmJv
dW5kcygpKTsKQEAgLTEyMjUsNyArMTI0Miw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1U
ZXN0LCB2aXNpYmxlQ29udGVudE9wYXF1ZVJlZ2lvbikKIAogICAgIC8vIElmIHdlIHBhaW50IGFn
YWluIHdpdGhvdXQgaW52YWxpZGF0aW5nLCB0aGUgc2FtZSBzdHVmZiBzaG91bGQgYmUgb3BhcXVl
LgogICAgIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5zZXRPcGFxdWVQYWludFJl
Y3QoSW50UmVjdCgpKTsKLSAgICBsYXllci0+dXBkYXRlKG1fcXVldWUsICZvY2NsdWRlZCwgbV9z
dGF0cyk7CisgICAgdXBkYXRlTGF5ZXJPbk1haW5UaHJlYWQobGF5ZXIuZ2V0KCksICZvY2NsdWRl
ZCk7CiAgICAgdXBkYXRlVGV4dHVyZXMoKTsKICAgICBvcGFxdWVDb250ZW50cyA9IGxheWVyLT52
aXNpYmxlQ29udGVudE9wYXF1ZVJlZ2lvbigpOwogICAgIEVYUEVDVF9FUV9SRUNUKGludGVyc2Vj
dGlvbihvcGFxdWVQYWludFJlY3QsIHZpc2libGVCb3VuZHMpLCBvcGFxdWVDb250ZW50cy5ib3Vu
ZHMoKSk7CkBAIC0xMjQwLDcgKzEyNTcsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVz
dCwgdmlzaWJsZUNvbnRlbnRPcGFxdWVSZWdpb24pCiAgICAgLy8gbm90IGJlIGFmZmVjdGVkLgog
ICAgIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5zZXRPcGFxdWVQYWludFJlY3Qo
SW50UmVjdCgpKTsKICAgICBsYXllci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJlY3QoMCwg
MCwgMSwgMSkpOwotICAgIGxheWVyLT51cGRhdGUobV9xdWV1ZSwgJm9jY2x1ZGVkLCBtX3N0YXRz
KTsKKyAgICB1cGRhdGVMYXllck9uTWFpblRocmVhZChsYXllci5nZXQoKSwgJm9jY2x1ZGVkKTsK
ICAgICB1cGRhdGVUZXh0dXJlcygpOwogICAgIG9wYXF1ZUNvbnRlbnRzID0gbGF5ZXItPnZpc2li
bGVDb250ZW50T3BhcXVlUmVnaW9uKCk7CiAgICAgRVhQRUNUX0VRX1JFQ1QoaW50ZXJzZWN0aW9u
KG9wYXF1ZVBhaW50UmVjdCwgdmlzaWJsZUJvdW5kcyksIG9wYXF1ZUNvbnRlbnRzLmJvdW5kcygp
KTsKQEAgLTEyNTUsNyArMTI3Miw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB2
aXNpYmxlQ29udGVudE9wYXF1ZVJlZ2lvbikKICAgICAvLyBub3QgYmUgYWZmZWN0ZWQuCiAgICAg
bGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnNldE9wYXF1ZVBhaW50UmVjdChJbnRS
ZWN0KCkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoSW50UmVjdCgxMCwgMTAs
IDEsIDEpKTsKLSAgICBsYXllci0+dXBkYXRlKG1fcXVldWUsICZvY2NsdWRlZCwgbV9zdGF0cyk7
CisgICAgdXBkYXRlTGF5ZXJPbk1haW5UaHJlYWQobGF5ZXIuZ2V0KCksICZvY2NsdWRlZCk7CiAg
ICAgdXBkYXRlVGV4dHVyZXMoKTsKICAgICBvcGFxdWVDb250ZW50cyA9IGxheWVyLT52aXNpYmxl
Q29udGVudE9wYXF1ZVJlZ2lvbigpOwogICAgIEVYUEVDVF9FUV9SRUNUKGludGVyc2VjdGlvbihJ
bnRSZWN0KDEwLCAxMDAsIDkwLCAxMDApLCB2aXNpYmxlQm91bmRzKSwgb3BhcXVlQ29udGVudHMu
Ym91bmRzKCkpOwpAQCAtMTI2OSw5ICsxMjg2LDkgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1
bVRlc3QsIHZpc2libGVDb250ZW50T3BhcXVlUmVnaW9uKQogCiBURVNUX0YoVGlsZWRMYXllckNo
cm9taXVtVGVzdCwgcGl4ZWxzUGFpbnRlZE1ldHJpY3MpCiB7CisgICAgRGVidWdTY29wZWRTZXRJ
bXBsVGhyZWFkQW5kTWFpblRocmVhZEJsb2NrZWQgaW1wbFRocmVhZEFuZE1haW5UaHJlYWRCbG9j
a2VkOwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVm
KG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAg
ICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1ZGVkOwotICAgIERlYnVnU2NvcGVkU2V0SW1w
bFRocmVhZCBpbXBsVGhyZWFkOwogCiAgICAgLy8gVGhlIHRpbGUgc2l6ZSBpcyAxMDB4MTAwLCBz
byB0aGlzIGludmFsaWRhdGVzIGFuZCB0aGVuIHBhaW50cyB0d28gdGlsZXMgaW4gdmFyaW91cyB3
YXlzLgogCkBAIC0xMjg2LDEzICsxMzAzLDEyIEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1U
ZXN0LCBwaXhlbHNQYWludGVkTWV0cmljcykKICAgICBsYXllci0+c2V0VmlzaWJsZUNvbnRlbnRS
ZWN0KHZpc2libGVCb3VuZHMpOwogICAgIGxheWVyLT5zZXREcmF3T3BhY2l0eSgxKTsKIAotICAg
IGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAg
bV90ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgc2V0VGV4dHVyZVBy
aW9yaXRpZXNBbmRQcmlvcml0aXplVGV4dHVyZXNPbk1haW5UaHJlYWQobGF5ZXIuZ2V0KCkpOwog
CiAgICAgLy8gSW52YWxpZGF0ZXMgYW5kIHBhaW50cyB0aGUgd2hvbGUgbGF5ZXIuCiAgICAgbGF5
ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnNldE9wYXF1ZVBhaW50UmVjdChJbnRSZWN0
KCkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoY29udGVudEJvdW5kcyk7Ci0g
ICAgbGF5ZXItPnVwZGF0ZShtX3F1ZXVlLCAmb2NjbHVkZWQsIG1fc3RhdHMpOworICAgIHVwZGF0
ZUxheWVyT25NYWluVGhyZWFkKGxheWVyLmdldCgpLCAmb2NjbHVkZWQpOwogICAgIHVwZGF0ZVRl
eHR1cmVzKCk7CiAgICAgb3BhcXVlQ29udGVudHMgPSBsYXllci0+dmlzaWJsZUNvbnRlbnRPcGFx
dWVSZWdpb24oKTsKICAgICBFWFBFQ1RfVFJVRShvcGFxdWVDb250ZW50cy5pc0VtcHR5KCkpOwpA
QCAtMTMwNyw3ICsxMzIzLDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHBpeGVs
c1BhaW50ZWRNZXRyaWNzKQogICAgIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5z
ZXRPcGFxdWVQYWludFJlY3QoSW50UmVjdCgpKTsKICAgICBsYXllci0+aW52YWxpZGF0ZUNvbnRl
bnRSZWN0KEludFJlY3QoMCwgMCwgMSwgMSkpOwogICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVu
dFJlY3QoSW50UmVjdCg1MCwgMjAwLCAxMCwgMTApKTsKLSAgICBsYXllci0+dXBkYXRlKG1fcXVl
dWUsICZvY2NsdWRlZCwgbV9zdGF0cyk7CisgICAgdXBkYXRlTGF5ZXJPbk1haW5UaHJlYWQobGF5
ZXIuZ2V0KCksICZvY2NsdWRlZCk7CiAgICAgdXBkYXRlVGV4dHVyZXMoKTsKICAgICBvcGFxdWVD
b250ZW50cyA9IGxheWVyLT52aXNpYmxlQ29udGVudE9wYXF1ZVJlZ2lvbigpOwogICAgIEVYUEVD
VF9UUlVFKG9wYXF1ZUNvbnRlbnRzLmlzRW1wdHkoKSk7CkBAIC0xMzIyLDkgKzEzMzgsNiBAQCBU
RVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcGl4ZWxzUGFpbnRlZE1ldHJpY3MpCiAKIFRF
U1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBkb250QWxsb2NhdGVDb250ZW50c1doZW5UYXJn
ZXRTdXJmYWNlQ2FudEJlQWxsb2NhdGVkKQogewotICAgIC8vIEluaXRpYWxpemUgd2l0aG91dCB0
aHJlYWRpbmcgc3VwcG9ydC4KLSAgICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6OmluaXRpYWxpemUo
MCk7Ci0KICAgICAvLyBUaWxlIHNpemUgaXMgMTAweDEwMC4KICAgICBJbnRSZWN0IHJvb3RSZWN0
KDAsIDAsIDMwMCwgMjAwKTsKICAgICBJbnRSZWN0IGNoaWxkUmVjdCgwLCAwLCAzMDAsIDEwMCk7
CkBAIC0xMzM1LDQ1ICsxMzQ4LDUwIEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBk
b250QWxsb2NhdGVDb250ZW50c1doZW5UYXJnZXRTdXJmYWNlQ2FudEJlQWxsb2NhCiAgICAgT3du
UHRyPENDTGF5ZXJUcmVlSG9zdD4gY2NMYXllclRyZWVIb3N0ID0gQ0NMYXllclRyZWVIb3N0Ojpj
cmVhdGUoJmZha2VDQ0xheWVyVHJlZUhvc3RDbGllbnQsIHNldHRpbmdzKTsKICAgICBBU1NFUlRf
VFJVRShjY0xheWVyVHJlZUhvc3QtPmluaXRpYWxpemVSZW5kZXJlcklmTmVlZGVkKCkpOwogCi0g
ICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IHJvb3QgPSBhZG9wdFJlZihuZXcgRmFr
ZVRpbGVkTGF5ZXJDaHJvbWl1bShjY0xheWVyVHJlZUhvc3QtPmNvbnRlbnRzVGV4dHVyZU1hbmFn
ZXIoKSkpOwotICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBzdXJmYWNlID0gTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGNoaWxkID0g
YWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0oY2NMYXllclRyZWVIb3N0LT5jb250
ZW50c1RleHR1cmVNYW5hZ2VyKCkpKTsKLSAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1
bT4gY2hpbGQyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0oY2NMYXllclRy
ZWVIb3N0LT5jb250ZW50c1RleHR1cmVNYW5hZ2VyKCkpKTsKLQotICAgIHJvb3QtPnNldEJvdW5k
cyhyb290UmVjdC5zaXplKCkpOwotICAgIHJvb3QtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQo
KSk7Ci0gICAgcm9vdC0+c2V0RHJhd2FibGVDb250ZW50UmVjdChyb290UmVjdCk7Ci0gICAgcm9v
dC0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0KHJvb3RSZWN0KTsKLSAgICByb290LT5hZGRDaGlsZChz
dXJmYWNlKTsKLQotICAgIHN1cmZhY2UtPnNldEZvcmNlUmVuZGVyU3VyZmFjZSh0cnVlKTsKLSAg
ICBzdXJmYWNlLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KCkpOwotICAgIHN1cmZhY2UtPnNl
dE9wYWNpdHkoMC41KTsKLSAgICBzdXJmYWNlLT5hZGRDaGlsZChjaGlsZCk7Ci0gICAgc3VyZmFj
ZS0+YWRkQ2hpbGQoY2hpbGQyKTsKLQotICAgIGNoaWxkLT5zZXRCb3VuZHMoY2hpbGRSZWN0LnNp
emUoKSk7Ci0gICAgY2hpbGQtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoKSk7Ci0gICAgY2hp
bGQtPnNldFBvc2l0aW9uKGNoaWxkUmVjdC5sb2NhdGlvbigpKTsKLSAgICBjaGlsZC0+c2V0Vmlz
aWJsZUNvbnRlbnRSZWN0KGNoaWxkUmVjdCk7Ci0gICAgY2hpbGQtPnNldERyYXdhYmxlQ29udGVu
dFJlY3Qocm9vdFJlY3QpOwotCi0gICAgY2hpbGQyLT5zZXRCb3VuZHMoY2hpbGQyUmVjdC5zaXpl
KCkpOwotICAgIGNoaWxkMi0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgpKTsKLSAgICBjaGls
ZDItPnNldFBvc2l0aW9uKGNoaWxkMlJlY3QubG9jYXRpb24oKSk7Ci0gICAgY2hpbGQyLT5zZXRW
aXNpYmxlQ29udGVudFJlY3QoY2hpbGQyUmVjdCk7Ci0gICAgY2hpbGQyLT5zZXREcmF3YWJsZUNv
bnRlbnRSZWN0KHJvb3RSZWN0KTsKLQotICAgIGNjTGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVy
KHJvb3QpOwotICAgIGNjTGF5ZXJUcmVlSG9zdC0+c2V0Vmlld3BvcnRTaXplKHJvb3RSZWN0LnNp
emUoKSwgcm9vdFJlY3Quc2l6ZSgpKTsKLQotICAgIC8vIFdpdGggYSBodWdlIG1lbW9yeSBsaW1p
dCwgYWxsIGxheWVycyBzaG91bGQgdXBkYXRlIGFuZCBwdXNoIHRoZWlyIHRleHR1cmVzLgotICAg
IHJvb3QtPmludmFsaWRhdGVDb250ZW50UmVjdChyb290UmVjdCk7Ci0gICAgY2hpbGQtPmludmFs
aWRhdGVDb250ZW50UmVjdChjaGlsZFJlY3QpOwotICAgIGNoaWxkMi0+aW52YWxpZGF0ZUNvbnRl
bnRSZWN0KGNoaWxkMlJlY3QpOwotICAgIGNjTGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKG1f
cXVldWUsIHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkpOwogICAgIHsKLSAgICAg
ICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CisgICAgICAgIERlYnVnU2Nv
cGVkU2V0SW1wbFRocmVhZEFuZE1haW5UaHJlYWRCbG9ja2VkIGltcGxUaHJlYWRBbmRNYWluVGhy
ZWFkQmxvY2tlZDsKKyAgICAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IHJvb3Qg
PSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShjY0xheWVyVHJlZUhvc3QtPmNv
bnRlbnRzVGV4dHVyZU1hbmFnZXIoKSkpOworICAgICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
c3VyZmFjZSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOworICAgICAgICBSZWZQdHI8RmFrZVRp
bGVkTGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJv
bWl1bShjY0xheWVyVHJlZUhvc3QtPmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKSkpOworICAgICAg
ICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gY2hpbGQyID0gYWRvcHRSZWYobmV3IEZh
a2VUaWxlZExheWVyQ2hyb21pdW0oY2NMYXllclRyZWVIb3N0LT5jb250ZW50c1RleHR1cmVNYW5h
Z2VyKCkpKTsKKworICAgICAgICB7CisgICAgICAgICAgICBEZWJ1Z1Njb3BlZFNldE1haW5UaHJl
YWQgbWFpblRocmVhZDsKKworICAgICAgICAgICAgcm9vdC0+c2V0Qm91bmRzKHJvb3RSZWN0LnNp
emUoKSk7CisgICAgICAgICAgICByb290LT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KCkpOwor
ICAgICAgICAgICAgcm9vdC0+c2V0RHJhd2FibGVDb250ZW50UmVjdChyb290UmVjdCk7CisgICAg
ICAgICAgICByb290LT5zZXRWaXNpYmxlQ29udGVudFJlY3Qocm9vdFJlY3QpOworICAgICAgICAg
ICAgcm9vdC0+YWRkQ2hpbGQoc3VyZmFjZSk7CisKKyAgICAgICAgICAgIHN1cmZhY2UtPnNldEZv
cmNlUmVuZGVyU3VyZmFjZSh0cnVlKTsKKyAgICAgICAgICAgIHN1cmZhY2UtPnNldEFuY2hvclBv
aW50KEZsb2F0UG9pbnQoKSk7CisgICAgICAgICAgICBzdXJmYWNlLT5zZXRPcGFjaXR5KDAuNSk7
CisgICAgICAgICAgICBzdXJmYWNlLT5hZGRDaGlsZChjaGlsZCk7CisgICAgICAgICAgICBzdXJm
YWNlLT5hZGRDaGlsZChjaGlsZDIpOworCisgICAgICAgICAgICBjaGlsZC0+c2V0Qm91bmRzKGNo
aWxkUmVjdC5zaXplKCkpOworICAgICAgICAgICAgY2hpbGQtPnNldEFuY2hvclBvaW50KEZsb2F0
UG9pbnQoKSk7CisgICAgICAgICAgICBjaGlsZC0+c2V0UG9zaXRpb24oY2hpbGRSZWN0LmxvY2F0
aW9uKCkpOworICAgICAgICAgICAgY2hpbGQtPnNldFZpc2libGVDb250ZW50UmVjdChjaGlsZFJl
Y3QpOworICAgICAgICAgICAgY2hpbGQtPnNldERyYXdhYmxlQ29udGVudFJlY3Qocm9vdFJlY3Qp
OworCisgICAgICAgICAgICBjaGlsZDItPnNldEJvdW5kcyhjaGlsZDJSZWN0LnNpemUoKSk7Cisg
ICAgICAgICAgICBjaGlsZDItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoKSk7CisgICAgICAg
ICAgICBjaGlsZDItPnNldFBvc2l0aW9uKGNoaWxkMlJlY3QubG9jYXRpb24oKSk7CisgICAgICAg
ICAgICBjaGlsZDItPnNldFZpc2libGVDb250ZW50UmVjdChjaGlsZDJSZWN0KTsKKyAgICAgICAg
ICAgIGNoaWxkMi0+c2V0RHJhd2FibGVDb250ZW50UmVjdChyb290UmVjdCk7CisKKyAgICAgICAg
ICAgIGNjTGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKHJvb3QpOworICAgICAgICAgICAgY2NM
YXllclRyZWVIb3N0LT5zZXRWaWV3cG9ydFNpemUocm9vdFJlY3Quc2l6ZSgpLCByb290UmVjdC5z
aXplKCkpOworCisgICAgICAgICAgICAvLyBXaXRoIGEgaHVnZSBtZW1vcnkgbGltaXQsIGFsbCBs
YXllcnMgc2hvdWxkIHVwZGF0ZSBhbmQgcHVzaCB0aGVpciB0ZXh0dXJlcy4KKyAgICAgICAgICAg
IHJvb3QtPmludmFsaWRhdGVDb250ZW50UmVjdChyb290UmVjdCk7CisgICAgICAgICAgICBjaGls
ZC0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KGNoaWxkUmVjdCk7CisgICAgICAgICAgICBjaGlsZDIt
PmludmFsaWRhdGVDb250ZW50UmVjdChjaGlsZDJSZWN0KTsKKyAgICAgICAgICAgIGNjTGF5ZXJU
cmVlSG9zdC0+dXBkYXRlTGF5ZXJzKG1fcXVldWUsIHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90
Pjo6bWF4KCkpOworICAgICAgICB9CisKICAgICAgICAgdXBkYXRlVGV4dHVyZXMoMTAwMCk7CiAg
ICAgICAgIEVYUEVDVF9FUSg2LCByb290LT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT51cGRh
dGVDb3VudCgpKTsKICAgICAgICAgRVhQRUNUX0VRKDMsIGNoaWxkLT5mYWtlTGF5ZXJUZXh0dXJl
VXBkYXRlcigpLT51cGRhdGVDb3VudCgpKTsKQEAgLTEzODQsMzEgKzE0MDIsMzQgQEAgVEVTVF9G
KFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGRvbnRBbGxvY2F0ZUNvbnRlbnRzV2hlblRhcmdldFN1
cmZhY2VDYW50QmVBbGxvY2EKICAgICAgICAgY2hpbGQtPmZha2VMYXllclRleHR1cmVVcGRhdGVy
KCktPmNsZWFyVXBkYXRlQ291bnQoKTsKICAgICAgICAgY2hpbGQyLT5mYWtlTGF5ZXJUZXh0dXJl
VXBkYXRlcigpLT5jbGVhclVwZGF0ZUNvdW50KCk7CiAKLSAgICAgICAgT3duUHRyPEZha2VDQ1Rp
bGVkTGF5ZXJJbXBsPiByb290SW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwo
cm9vdC0+aWQoKSkpKTsKLSAgICAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBjaGls
ZEltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKGNoaWxkLT5pZCgpKSkpOwot
ICAgICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGNoaWxkMkltcGwoYWRvcHRQdHIo
bmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKGNoaWxkMi0+aWQoKSkpKTsKLSAgICAgICAgcm9vdC0+
cHVzaFByb3BlcnRpZXNUbyhyb290SW1wbC5nZXQoKSk7Ci0gICAgICAgIGNoaWxkLT5wdXNoUHJv
cGVydGllc1RvKGNoaWxkSW1wbC5nZXQoKSk7Ci0gICAgICAgIGNoaWxkMi0+cHVzaFByb3BlcnRp
ZXNUbyhjaGlsZDJJbXBsLmdldCgpKTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgMzsgKytpKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgMjsgKytq
KQotICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKHJvb3RJbXBsLT5oYXNUZXh0dXJlSWRGb3JU
aWxlQXQoaSwgaikpOwotICAgICAgICAgICAgRVhQRUNUX1RSVUUoY2hpbGRJbXBsLT5oYXNUZXh0
dXJlSWRGb3JUaWxlQXQoaSwgMCkpOwotICAgICAgICAgICAgRVhQRUNUX1RSVUUoY2hpbGQySW1w
bC0+aGFzVGV4dHVyZUlkRm9yVGlsZUF0KGksIDApKTsKKyAgICAgICAgeworICAgICAgICAgICAg
T3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiByb290SW1wbChhZG9wdFB0cihuZXcgRmFrZUND
VGlsZWRMYXllckltcGwocm9vdC0+aWQoKSkpKTsKKyAgICAgICAgICAgIE93blB0cjxGYWtlQ0NU
aWxlZExheWVySW1wbD4gY2hpbGRJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1w
bChjaGlsZC0+aWQoKSkpKTsKKyAgICAgICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1w
bD4gY2hpbGQySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoY2hpbGQyLT5p
ZCgpKSkpOworICAgICAgICAgICAgcm9vdC0+cHVzaFByb3BlcnRpZXNUbyhyb290SW1wbC5nZXQo
KSk7CisgICAgICAgICAgICBjaGlsZC0+cHVzaFByb3BlcnRpZXNUbyhjaGlsZEltcGwuZ2V0KCkp
OworICAgICAgICAgICAgY2hpbGQyLT5wdXNoUHJvcGVydGllc1RvKGNoaWxkMkltcGwuZ2V0KCkp
OworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMzsgKytpKSB7CisgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IDI7ICsraikKKyAgICAgICAgICAg
ICAgICAgICAgRVhQRUNUX1RSVUUocm9vdEltcGwtPmhhc1RleHR1cmVJZEZvclRpbGVBdChpLCBq
KSk7CisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoY2hpbGRJbXBsLT5oYXNUZXh0dXJlSWRG
b3JUaWxlQXQoaSwgMCkpOworICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKGNoaWxkMkltcGwt
Pmhhc1RleHR1cmVJZEZvclRpbGVBdChpLCAwKSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0K
LSAgICB9Ci0gICAgY2NMYXllclRyZWVIb3N0LT5jb21taXRDb21wbGV0ZSgpOwotCi0gICAgLy8g
V2l0aCBhIG1lbW9yeSBsaW1pdCB0aGF0IGluY2x1ZGVzIG9ubHkgdGhlIHJvb3QgbGF5ZXIgKDN4
MiB0aWxlcykgYW5kIGhhbGYgdGhlIHN1cmZhY2UgdGhhdAotICAgIC8vIHRoZSBjaGlsZCBsYXll
cnMgZHJhdyBpbnRvLCB0aGUgY2hpbGQgbGF5ZXJzIHdpbGwgbm90IGJlIGFsbG9jYXRlZC4gSWYg
dGhlIHN1cmZhY2UgaXNuJ3QKLSAgICAvLyBhY2NvdW50ZWQgZm9yLCB0aGVuIG9uZSBvZiB0aGUg
Y2hpbGRyZW4gd291bGQgZml0IHdpdGhpbiB0aGUgbWVtb3J5IGxpbWl0LgotICAgIHJvb3QtPmlu
dmFsaWRhdGVDb250ZW50UmVjdChyb290UmVjdCk7Ci0gICAgY2hpbGQtPmludmFsaWRhdGVDb250
ZW50UmVjdChjaGlsZFJlY3QpOwotICAgIGNoaWxkMi0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KGNo
aWxkMlJlY3QpOwotICAgIGNjTGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKG1fcXVldWUsICgz
ICogMiArIDMgKiAxKSAqICgxMDAgKiAxMDApICogNCk7Ci0gICAgewotICAgICAgICBEZWJ1Z1Nj
b3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKKyAgICAgICAgY2NMYXllclRyZWVIb3N0LT5j
b21taXRDb21wbGV0ZSgpOworCisgICAgICAgIC8vIFdpdGggYSBtZW1vcnkgbGltaXQgdGhhdCBp
bmNsdWRlcyBvbmx5IHRoZSByb290IGxheWVyICgzeDIgdGlsZXMpIGFuZCBoYWxmIHRoZSBzdXJm
YWNlIHRoYXQKKyAgICAgICAgLy8gdGhlIGNoaWxkIGxheWVycyBkcmF3IGludG8sIHRoZSBjaGls
ZCBsYXllcnMgd2lsbCBub3QgYmUgYWxsb2NhdGVkLiBJZiB0aGUgc3VyZmFjZSBpc24ndAorICAg
ICAgICAvLyBhY2NvdW50ZWQgZm9yLCB0aGVuIG9uZSBvZiB0aGUgY2hpbGRyZW4gd291bGQgZml0
IHdpdGhpbiB0aGUgbWVtb3J5IGxpbWl0LgorICAgICAgICB7CisgICAgICAgICAgICBEZWJ1Z1Nj
b3BlZFNldE1haW5UaHJlYWQgbWFpblRocmVhZDsKKyAgICAgICAgICAgIHJvb3QtPmludmFsaWRh
dGVDb250ZW50UmVjdChyb290UmVjdCk7CisgICAgICAgICAgICBjaGlsZC0+aW52YWxpZGF0ZUNv
bnRlbnRSZWN0KGNoaWxkUmVjdCk7CisgICAgICAgICAgICBjaGlsZDItPmludmFsaWRhdGVDb250
ZW50UmVjdChjaGlsZDJSZWN0KTsKKyAgICAgICAgICAgIGNjTGF5ZXJUcmVlSG9zdC0+dXBkYXRl
TGF5ZXJzKG1fcXVldWUsICgzICogMiArIDMgKiAxKSAqICgxMDAgKiAxMDApICogNCk7CisgICAg
ICAgIH0KKwogICAgICAgICB1cGRhdGVUZXh0dXJlcygxMDAwKTsKICAgICAgICAgRVhQRUNUX0VR
KDYsIHJvb3QtPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnVwZGF0ZUNvdW50KCkpOwogICAg
ICAgICBFWFBFQ1RfRVEoMCwgY2hpbGQtPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnVwZGF0
ZUNvdW50KCkpOwpAQCAtMTQxOSw2NSArMTQ0MCw2NCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9t
aXVtVGVzdCwgZG9udEFsbG9jYXRlQ29udGVudHNXaGVuVGFyZ2V0U3VyZmFjZUNhbnRCZUFsbG9j
YQogICAgICAgICBjaGlsZC0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+Y2xlYXJVcGRhdGVD
b3VudCgpOwogICAgICAgICBjaGlsZDItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPmNsZWFy
VXBkYXRlQ291bnQoKTsKIAotICAgICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IHJv
b3RJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbChyb290LT5pZCgpKSkpOwot
ICAgICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGNoaWxkSW1wbChhZG9wdFB0cihu
ZXcgRmFrZUNDVGlsZWRMYXllckltcGwoY2hpbGQtPmlkKCkpKSk7Ci0gICAgICAgIE93blB0cjxG
YWtlQ0NUaWxlZExheWVySW1wbD4gY2hpbGQySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRM
YXllckltcGwoY2hpbGQyLT5pZCgpKSkpOwotICAgICAgICByb290LT5wdXNoUHJvcGVydGllc1Rv
KHJvb3RJbXBsLmdldCgpKTsKLSAgICAgICAgY2hpbGQtPnB1c2hQcm9wZXJ0aWVzVG8oY2hpbGRJ
bXBsLmdldCgpKTsKLSAgICAgICAgY2hpbGQyLT5wdXNoUHJvcGVydGllc1RvKGNoaWxkMkltcGwu
Z2V0KCkpOwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCAyOyArK2opCi0gICAgICAgICAgICAg
ICAgRVhQRUNUX1RSVUUocm9vdEltcGwtPmhhc1RleHR1cmVJZEZvclRpbGVBdChpLCBqKSk7Ci0g
ICAgICAgICAgICBFWFBFQ1RfRkFMU0UoY2hpbGRJbXBsLT5oYXNUZXh0dXJlSWRGb3JUaWxlQXQo
aSwgMCkpOwotICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKGNoaWxkMkltcGwtPmhhc1RleHR1cmVJ
ZEZvclRpbGVBdChpLCAwKSk7CisgICAgICAgIHsKKyAgICAgICAgICAgIE93blB0cjxGYWtlQ0NU
aWxlZExheWVySW1wbD4gcm9vdEltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBs
KHJvb3QtPmlkKCkpKSk7CisgICAgICAgICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+
IGNoaWxkSW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoY2hpbGQtPmlkKCkp
KSk7CisgICAgICAgICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGNoaWxkMkltcGwo
YWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKGNoaWxkMi0+aWQoKSkpKTsKKyAgICAg
ICAgICAgIHJvb3QtPnB1c2hQcm9wZXJ0aWVzVG8ocm9vdEltcGwuZ2V0KCkpOworICAgICAgICAg
ICAgY2hpbGQtPnB1c2hQcm9wZXJ0aWVzVG8oY2hpbGRJbXBsLmdldCgpKTsKKyAgICAgICAgICAg
IGNoaWxkMi0+cHVzaFByb3BlcnRpZXNUbyhjaGlsZDJJbXBsLmdldCgpKTsKKworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDM7ICsraSkgeworICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaiA9IDA7IGogPCAyOyArK2opCisgICAgICAgICAgICAgICAgICAgIEVYUEVD
VF9UUlVFKHJvb3RJbXBsLT5oYXNUZXh0dXJlSWRGb3JUaWxlQXQoaSwgaikpOworICAgICAgICAg
ICAgICAgIEVYUEVDVF9GQUxTRShjaGlsZEltcGwtPmhhc1RleHR1cmVJZEZvclRpbGVBdChpLCAw
KSk7CisgICAgICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKGNoaWxkMkltcGwtPmhhc1RleHR1cmVJ
ZEZvclRpbGVBdChpLCAwKSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9Ci0gICAg
Y2NMYXllclRyZWVIb3N0LT5jb21taXRDb21wbGV0ZSgpOwotCi0gICAgLy8gV2l0aCBhIG1lbW9y
eSBsaW1pdCB0aGF0IGluY2x1ZGVzIG9ubHkgaGFsZiB0aGUgcm9vdCBsYXllciwgbm8gY29udGVu
dHMgd2lsbCBiZQotICAgIC8vIGFsbG9jYXRlZC4gSWYgcmVuZGVyIHN1cmZhY2UgbWVtb3J5IHdh
c24ndCBhY2NvdW50ZWQgZm9yLCB0aGVyZSBpcyBlbm91Z2ggc3BhY2UKLSAgICAvLyBmb3Igb25l
IG9mIHRoZSBjaGlsZHJlbiBsYXllcnMsIGJ1dCB0aGV5IGRyYXcgaW50byBhIHN1cmZhY2UgdGhh
dCBjYW4ndCBiZQotICAgIC8vIGFsbG9jYXRlZC4KLSAgICByb290LT5pbnZhbGlkYXRlQ29udGVu
dFJlY3Qocm9vdFJlY3QpOwotICAgIGNoaWxkLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoY2hpbGRS
ZWN0KTsKLSAgICBjaGlsZDItPmludmFsaWRhdGVDb250ZW50UmVjdChjaGlsZDJSZWN0KTsKLSAg
ICBjY0xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVycyhtX3F1ZXVlLCAoMyAqIDEpICogKDEwMCAq
IDEwMCkgKiA0KTsKLSAgICB7Ci0gICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBs
VGhyZWFkOwotICAgICAgICB1cGRhdGVUZXh0dXJlcygxMDAwKTsKLSAgICAgICAgRVhQRUNUX0VR
KDAsIHJvb3QtPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnVwZGF0ZUNvdW50KCkpOwotICAg
ICAgICBFWFBFQ1RfRVEoMCwgY2hpbGQtPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnVwZGF0
ZUNvdW50KCkpOwotICAgICAgICBFWFBFQ1RfRVEoMCwgY2hpbGQyLT5mYWtlTGF5ZXJUZXh0dXJl
VXBkYXRlcigpLT51cGRhdGVDb3VudCgpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKG1fcXVldWUu
aGFzTW9yZVVwZGF0ZXMoKSk7Ci0KLSAgICAgICAgcm9vdC0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0
ZXIoKS0+Y2xlYXJVcGRhdGVDb3VudCgpOwotICAgICAgICBjaGlsZC0+ZmFrZUxheWVyVGV4dHVy
ZVVwZGF0ZXIoKS0+Y2xlYXJVcGRhdGVDb3VudCgpOwotICAgICAgICBjaGlsZDItPmZha2VMYXll
clRleHR1cmVVcGRhdGVyKCktPmNsZWFyVXBkYXRlQ291bnQoKTsKLQotICAgICAgICBPd25QdHI8
RmFrZUNDVGlsZWRMYXllckltcGw+IHJvb3RJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExh
eWVySW1wbChyb290LT5pZCgpKSkpOwotICAgICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllcklt
cGw+IGNoaWxkSW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoY2hpbGQtPmlk
KCkpKSk7Ci0gICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gY2hpbGQySW1wbChh
ZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoY2hpbGQyLT5pZCgpKSkpOwotICAgICAg
ICByb290LT5wdXNoUHJvcGVydGllc1RvKHJvb3RJbXBsLmdldCgpKTsKLSAgICAgICAgY2hpbGQt
PnB1c2hQcm9wZXJ0aWVzVG8oY2hpbGRJbXBsLmdldCgpKTsKLSAgICAgICAgY2hpbGQyLT5wdXNo
UHJvcGVydGllc1RvKGNoaWxkMkltcGwuZ2V0KCkpOwotCi0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGog
PCAyOyArK2opCi0gICAgICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHJvb3RJbXBsLT5oYXNUZXh0
dXJlSWRGb3JUaWxlQXQoaSwgaikpOwotICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKGNoaWxkSW1w
bC0+aGFzVGV4dHVyZUlkRm9yVGlsZUF0KGksIDApKTsKLSAgICAgICAgICAgIEVYUEVDVF9GQUxT
RShjaGlsZDJJbXBsLT5oYXNUZXh0dXJlSWRGb3JUaWxlQXQoaSwgMCkpOworICAgICAgICBjY0xh
eWVyVHJlZUhvc3QtPmNvbW1pdENvbXBsZXRlKCk7CisKKyAgICAgICAgLy8gV2l0aCBhIG1lbW9y
eSBsaW1pdCB0aGF0IGluY2x1ZGVzIG9ubHkgaGFsZiB0aGUgcm9vdCBsYXllciwgbm8gY29udGVu
dHMgd2lsbCBiZQorICAgICAgICAvLyBhbGxvY2F0ZWQuIElmIHJlbmRlciBzdXJmYWNlIG1lbW9y
eSB3YXNuJ3QgYWNjb3VudGVkIGZvciwgdGhlcmUgaXMgZW5vdWdoIHNwYWNlCisgICAgICAgIC8v
IGZvciBvbmUgb2YgdGhlIGNoaWxkcmVuIGxheWVycywgYnV0IHRoZXkgZHJhdyBpbnRvIGEgc3Vy
ZmFjZSB0aGF0IGNhbid0IGJlCisgICAgICAgIC8vIGFsbG9jYXRlZC4KKyAgICAgICAgeworICAg
ICAgICAgICAgRGVidWdTY29wZWRTZXRNYWluVGhyZWFkIG1haW5UaHJlYWQ7CisgICAgICAgICAg
ICByb290LT5pbnZhbGlkYXRlQ29udGVudFJlY3Qocm9vdFJlY3QpOworICAgICAgICAgICAgY2hp
bGQtPmludmFsaWRhdGVDb250ZW50UmVjdChjaGlsZFJlY3QpOworICAgICAgICAgICAgY2hpbGQy
LT5pbnZhbGlkYXRlQ29udGVudFJlY3QoY2hpbGQyUmVjdCk7CisgICAgICAgICAgICBjY0xheWVy
VHJlZUhvc3QtPnVwZGF0ZUxheWVycyhtX3F1ZXVlLCAoMyAqIDEpICogKDEwMCAqIDEwMCkgKiA0
KTsKICAgICAgICAgfQotICAgIH0KLSAgICBjY0xheWVyVHJlZUhvc3QtPmNvbW1pdENvbXBsZXRl
KCk7Ci0KLSAgICB7Ci0gICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFk
OworICAgICAgICB7CisgICAgICAgICAgICB1cGRhdGVUZXh0dXJlcygxMDAwKTsKKyAgICAgICAg
ICAgIEVYUEVDVF9FUSgwLCByb290LT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT51cGRhdGVD
b3VudCgpKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUSgwLCBjaGlsZC0+ZmFrZUxheWVyVGV4dHVy
ZVVwZGF0ZXIoKS0+dXBkYXRlQ291bnQoKSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoMCwgY2hp
bGQyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT51cGRhdGVDb3VudCgpKTsKKyAgICAgICAg
ICAgIEVYUEVDVF9GQUxTRShtX3F1ZXVlLmhhc01vcmVVcGRhdGVzKCkpOworCisgICAgICAgICAg
ICByb290LT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5jbGVhclVwZGF0ZUNvdW50KCk7Cisg
ICAgICAgICAgICBjaGlsZC0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+Y2xlYXJVcGRhdGVD
b3VudCgpOworICAgICAgICAgICAgY2hpbGQyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5j
bGVhclVwZGF0ZUNvdW50KCk7CisKKyAgICAgICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVy
SW1wbD4gcm9vdEltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKHJvb3QtPmlk
KCkpKSk7CisgICAgICAgICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGNoaWxkSW1w
bChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoY2hpbGQtPmlkKCkpKSk7CisgICAg
ICAgICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGNoaWxkMkltcGwoYWRvcHRQdHIo
bmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKGNoaWxkMi0+aWQoKSkpKTsKKyAgICAgICAgICAgIHJv
b3QtPnB1c2hQcm9wZXJ0aWVzVG8ocm9vdEltcGwuZ2V0KCkpOworICAgICAgICAgICAgY2hpbGQt
PnB1c2hQcm9wZXJ0aWVzVG8oY2hpbGRJbXBsLmdldCgpKTsKKyAgICAgICAgICAgIGNoaWxkMi0+
cHVzaFByb3BlcnRpZXNUbyhjaGlsZDJJbXBsLmdldCgpKTsKKworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IDM7ICsraSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaiA9IDA7IGogPCAyOyArK2opCisgICAgICAgICAgICAgICAgICAgIEVYUEVDVF9GQUxTRShy
b290SW1wbC0+aGFzVGV4dHVyZUlkRm9yVGlsZUF0KGksIGopKTsKKyAgICAgICAgICAgICAgICBF
WFBFQ1RfRkFMU0UoY2hpbGRJbXBsLT5oYXNUZXh0dXJlSWRGb3JUaWxlQXQoaSwgMCkpOworICAg
ICAgICAgICAgICAgIEVYUEVDVF9GQUxTRShjaGlsZDJJbXBsLT5oYXNUZXh0dXJlSWRGb3JUaWxl
QXQoaSwgMCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNjTGF5ZXJUcmVl
SG9zdC0+Y29tbWl0Q29tcGxldGUoKTsKICAgICAgICAgY2NMYXllclRyZWVIb3N0LT5jb250ZW50
c1RleHR1cmVNYW5hZ2VyKCktPmNsZWFyQWxsTWVtb3J5KG1fcmVzb3VyY2VQcm92aWRlci5nZXQo
KSk7CiAgICAgfQogICAgIGNjTGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKDApOwogICAgIGNj
TGF5ZXJUcmVlSG9zdC5jbGVhcigpOwotICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6c2h1dGRv
d24oKTsKIH0KIAogY2xhc3MgVHJhY2tpbmdMYXllclBhaW50ZXIgOiBwdWJsaWMgTGF5ZXJQYWlu
dGVyQ2hyb21pdW0gewpAQCAtMTUyMSw2ICsxNTQxLDcgQEAgcHJpdmF0ZToKIAogVEVTVF9GKFRp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QsIG5vbkludGVnZXJDb250ZW50c1NjYWxlSXNOb3REaXN0b3J0
ZWREdXJpbmdQYWludCkKIHsKKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWRBbmRNYWluVGhy
ZWFkQmxvY2tlZCBpbXBsVGhyZWFkQW5kTWFpblRocmVhZEJsb2NrZWQ7CiAgICAgUmVmUHRyPFVw
ZGF0ZVRyYWNraW5nVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBVcGRh
dGVUcmFja2luZ1RpbGVkTGF5ZXJDaHJvbWl1bShtX3RleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAK
ICAgICBJbnRSZWN0IGxheWVyUmVjdCgwLCAwLCAzMCwgMzEpOwpAQCAtMTUzMywyOSArMTU1NCwy
NiBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgbm9uSW50ZWdlckNvbnRlbnRzU2Nh
bGVJc05vdERpc3RvcnRlZER1cmluZ1BhaW50KQogICAgIGxheWVyLT5zZXRWaXNpYmxlQ29udGVu
dFJlY3QoY29udGVudFJlY3QpOwogICAgIGxheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KGNv
bnRlbnRSZWN0KTsKIAotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5
Q2FsY3VsYXRvcik7Ci0gICAgbV90ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7
CisgICAgc2V0VGV4dHVyZVByaW9yaXRpZXNBbmRQcmlvcml0aXplVGV4dHVyZXNPbk1haW5UaHJl
YWQobGF5ZXIuZ2V0KCkpOwogCiAgICAgLy8gVXBkYXRlIHRoZSB3aG9sZSB0aWxlLgotICAgIGxh
eWVyLT51cGRhdGUobV9xdWV1ZSwgMCwgbV9zdGF0cyk7CisgICAgdXBkYXRlTGF5ZXJPbk1haW5U
aHJlYWQobGF5ZXIuZ2V0KCksIDApOwogICAgIGxheWVyLT50cmFja2luZ0xheWVyUGFpbnRlcigp
LT5yZXNldFBhaW50ZWRSZWN0KCk7CiAKICAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEoSW50UmVjdCgp
LCBsYXllci0+dHJhY2tpbmdMYXllclBhaW50ZXIoKS0+cGFpbnRlZFJlY3QoKSk7CiAKLSAgICB7
Ci0gICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwotICAgICAgICB1
cGRhdGVUZXh0dXJlcygpOwotICAgIH0KKyAgICB1cGRhdGVUZXh0dXJlcygpOwogCiAgICAgLy8g
SW52YWxpZGF0ZSB0aGUgZW50aXJlIGxheWVyIGluIGNvbnRlbnQgc3BhY2UuIFdoZW4gcGFpbnRp
bmcsIHRoZSByZWN0IGdpdmVuIHRvIHdlYmtpdCBzaG91bGQgbWF0Y2ggdGhlIGxheWVyJ3MgYm91
bmRzLgogICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoY29udGVudFJlY3QpOwotICAg
IGxheWVyLT51cGRhdGUobV9xdWV1ZSwgMCwgbV9zdGF0cyk7CisgICAgdXBkYXRlTGF5ZXJPbk1h
aW5UaHJlYWQobGF5ZXIuZ2V0KCksIDApOwogCiAgICAgRVhQRUNUX0lOVF9SRUNUX0VRKGxheWVy
UmVjdCwgbGF5ZXItPnRyYWNraW5nTGF5ZXJQYWludGVyKCktPnBhaW50ZWRSZWN0KCkpOwogfQog
CiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgbm9uSW50ZWdlckNvbnRlbnRzU2NhbGVJ
c05vdERpc3RvcnRlZER1cmluZ0ludmFsaWRhdGlvbikKIHsKKyAgICBEZWJ1Z1Njb3BlZFNldElt
cGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZCBpbXBsVGhyZWFkQW5kTWFpblRocmVhZEJsb2Nr
ZWQ7CiAgICAgUmVmUHRyPFVwZGF0ZVRyYWNraW5nVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9
IGFkb3B0UmVmKG5ldyBVcGRhdGVUcmFja2luZ1RpbGVkTGF5ZXJDaHJvbWl1bShtX3RleHR1cmVN
YW5hZ2VyLmdldCgpKSk7CiAKICAgICBJbnRSZWN0IGxheWVyUmVjdCgwLCAwLCAzMCwgMzEpOwpA
QCAtMTU2NywyMyArMTU4NSwxOSBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgbm9u
SW50ZWdlckNvbnRlbnRzU2NhbGVJc05vdERpc3RvcnRlZER1cmluZ0ludmFsaQogICAgIGxheWVy
LT5zZXRWaXNpYmxlQ29udGVudFJlY3QoY29udGVudFJlY3QpOwogICAgIGxheWVyLT5zZXREcmF3
YWJsZUNvbnRlbnRSZWN0KGNvbnRlbnRSZWN0KTsKIAotICAgIGxheWVyLT5zZXRUZXh0dXJlUHJp
b3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7Ci0gICAgbV90ZXh0dXJlTWFuYWdlci0+cHJp
b3JpdGl6ZVRleHR1cmVzKCk7CisgICAgc2V0VGV4dHVyZVByaW9yaXRpZXNBbmRQcmlvcml0aXpl
VGV4dHVyZXNPbk1haW5UaHJlYWQobGF5ZXIuZ2V0KCkpOwogCiAgICAgLy8gVXBkYXRlIHRoZSB3
aG9sZSB0aWxlLgotICAgIGxheWVyLT51cGRhdGUobV9xdWV1ZSwgMCwgbV9zdGF0cyk7CisgICAg
dXBkYXRlTGF5ZXJPbk1haW5UaHJlYWQobGF5ZXIuZ2V0KCksIDApOwogICAgIGxheWVyLT50cmFj
a2luZ0xheWVyUGFpbnRlcigpLT5yZXNldFBhaW50ZWRSZWN0KCk7CiAKICAgICBFWFBFQ1RfSU5U
X1JFQ1RfRVEoSW50UmVjdCgpLCBsYXllci0+dHJhY2tpbmdMYXllclBhaW50ZXIoKS0+cGFpbnRl
ZFJlY3QoKSk7CiAKLSAgICB7Ci0gICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBs
VGhyZWFkOwotICAgICAgICB1cGRhdGVUZXh0dXJlcygpOwotICAgIH0KKyAgICB1cGRhdGVUZXh0
dXJlcygpOwogCiAgICAgLy8gSW52YWxpZGF0ZSB0aGUgZW50aXJlIGxheWVyIGluIGxheWVyIHNw
YWNlLiBXaGVuIHBhaW50aW5nLCB0aGUgcmVjdCBnaXZlbiB0byB3ZWJraXQgc2hvdWxkIG1hdGNo
IHRoZSBsYXllcidzIGJvdW5kcy4KICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5UmVjdChsYXll
clJlY3QpOwotICAgIGxheWVyLT51cGRhdGUobV9xdWV1ZSwgMCwgbV9zdGF0cyk7CisgICAgdXBk
YXRlTGF5ZXJPbk1haW5UaHJlYWQobGF5ZXIuZ2V0KCksIDApOwogCiAgICAgRVhQRUNUX0lOVF9S
RUNUX0VRKGxheWVyUmVjdCwgbGF5ZXItPnRyYWNraW5nTGF5ZXJQYWludGVyKCktPnBhaW50ZWRS
ZWN0KCkpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161370</attachid>
            <date>2012-08-29 17:36:38 -0700</date>
            <delta_ts>2012-08-29 18:12:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95057-20120829173628.patch</filename>
            <type>text/plain</type>
            <size>100016</size>
            <attacher name="Christopher Cameron">ccameron</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2OTcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzFhODBiOWNiOWZjMzBm
MTg3ZDQyNDkxNjRmYzA1YmYzNjYxZjQ1NC4uMWM5YzgwYmYwYjY1MmRlNjY5MDRhNzJmOTJhYTAy
N2I0ZmM4MGU4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMyBAQAorMjAxMi0wOC0yOSAgQ2hy
aXN0b3BoZXIgQ2FtZXJvbiAgPGNjYW1lcm9uQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hy
b21pdW1dIEFsbG93IGltcGwtdGhyZWFkIGRlbGV0aW9uIG9mIG9ubHkgc29tZSByZXNvdXJjZXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1MDU3CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVG93YXJkcyBh
bGxvd2luZyB0aGUgaW1wbCB0aHJlYWQgdG8gZGVsZXRlIGp1c3Qgc29tZSByZXNvdXJjZXMgKGFz
CisgICAgICAgIG9wcG9zZWQgdG8gZGVsZXRpbmcgYWxsIHJlc291cmNlcykuCisKKyAgICAgICAg
RG8gaW1wbC10aHJlYWQgZGVsZXRpb24gdGhyb3VnaCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFn
ZXIgaW5zdGVhZCBvZgorICAgICAgICBDQ1Jlc291cmNlUHJvdmlkZXIuIEluIHN1YnNlcXVlbnQg
Y2hhbmdlcyB0aGUgaW1wbCB0aHJlYWQgd2lsbCBiZSBhYmxlCisgICAgICAgIHRvIHNldCBhIHRo
cmVzaG9sZCBmb3Igd2hhdCB0byBkZWxldGUpLiBQdXQgYWxsIHN0YXRlIHRoYXQgY2FuCisgICAg
ICAgIGJlIGNvbmN1cnJlbnRseSBhY2Nlc3NlZCBieSB0aGUgbWFpbiBhbmQgaW1wbCB0aHJlYWRz
IGludG8gYSBzZXBhcmF0ZQorICAgICAgICBTaGFyZWRTdGF0ZSBzdWItY2xhc3Mgd2hpY2ggaGFz
IGEgbXV0ZXguIEFkZCBhIHNldCBvZiB0ZXh0dXJlcyB0aGF0CisgICAgICAgIGhhdmUgYmVlbiBk
ZWxldGVkIGJ5IHRoZSBpbXBsIHRocmVhZCwgYnV0IGhhdmUgbm90IGhhZCB0aGVpciByZWxhdGVk
CisgICAgICAgIHN0cnVjdHVyZXMgY2xlYXJlZCBieSB0aGUgbWFpbiB0aHJlYWQgeWV0LiBBZGQg
aGVscGVyIGZ1bmN0aW9ucyB0byBkZWxldGUKKyAgICAgICAgYSBiYWNraW5nJ3MgcmVzb3VyY2Uu
CisKKyAgICAgICAgQWxsb3cgbXVsdGlwbGUgaW4tZmxpZ2h0IHRleHR1cmUgcHVyZ2VzLiBJbiBD
Q1RocmVhZFByb3h5LCBtYWtlIHRoZQorICAgICAgICBhY2tub3dsZWRnZW1lbnQgb2YgdGV4dHVy
ZSBkZWxldGlvbiBiZSBhbiBpbnRlZ2VyIGNvdW50ZXIgaW5zdGVhZCBvZiBhCisgICAgICAgIGJv
b2wsIGJlY2F1c2Ugd2UgbWF5IGhhdmUgbXVsdGlwbGUgaW4tZmxpZ2h0IHB1cmdlcy4gUmVtb3Zl
IG1hbnkKKyAgICAgICAgaW5zdGFuY2VzIHdoZXJlIHRleHR1cmUgcHVyZ2VzIHdlcmUgYXZvaWRl
ZCB3aGVuIHRoZXJlIHdhcyBhbgorICAgICAgICBvdXRzdGFuZGluZyB0ZXh0LgorCisgICAgICAg
IEFkZCB0aGUgYWJpbGl0eSB0byBjbGVhciBvbmx5IHRoZSByZWZlcmVuY2VzIHRvIGRlbGV0ZWQg
dGV4dHVyZXMgZnJvbQorICAgICAgICB0aGUgdGV4dHVyZSB1cGxvYWQgcXVldWUuCisKKyAgICAg
ICAgQWRkIGFzc2VydGlvbnMgdGhhdCByZXNvdXJjZXMgYmUgZnJlZWQgdG8gQ0NQcmlvcml0aXpl
ZFRleHR1cmVNYW5hZ2VyLgorCisgICAgICAgIEFkZCBsb3RzIG9mIGFzc2VydHMgdG8gQ0NQcmlv
cml0aXplZFRleHR1cmVNYW5hZ2VyIHRvIGVuc3VyZSBhbmQKKyAgICAgICAgaWxsdW1pbmF0ZSBz
dXBwb3J0ZWQgbXVsdGl0aHJlYWRlZCBhY2Nlc3MuCisgICAgICAgIAorICAgICAgICBGaXggYSBk
b3plbiBwbGFjZXMgd2hlcmUgQ0NUaHJlYWRQcm94eSBhbmQgQ0NTaW5nbGVUaHJlYWRQcm94eSBo
b2xkCisgICAgICAgIHRoZSBtYWluIHRocmVhZCBibG9ja2VkLCBidXQgZG9uJ3Qgbm90aWZ5IHRo
ZSBkZWJ1ZyBzdHJ1Y3R1cmVzIG9mCisgICAgICAgIHRoaXMuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clRleHR1cmVVcGRhdGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVy
OjpUZXh0dXJlOjpiYWNraW5nV2FzQXN5bmNocm9ub3VzbHlEZWxldGVkKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpkZWxldGVDb250ZW50c1RleHR1cmVzUmVzb3Vy
Y2VzT25JbXBsVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0OjpkZXN0cm95VGV4dHVyZXNEZWxldGVkQnlJbXBsVGhyZWFkKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaDoK
KyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3RJbXBsOjpyZWxlYXNlQ29udGVudHNUZXh0dXJlcyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorICAg
ICAgICAoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpzZXRDb250ZW50c1RleHR1cmVzUHVyZ2VkKToKKyAgICAgICAgKEND
TGF5ZXJUcmVlSG9zdEltcGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3Jp
dGl6ZWRUZXh0dXJlOjp1cGxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0aXplZFRl
eHR1cmU6OmJhY2tpbmdXYXNBc3luY2hyb25vdXNseURlbGV0ZWQpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXpl
ZFRleHR1cmUuaDoKKyAgICAgICAgKENDUHJpb3JpdGl6ZWRUZXh0dXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nOjpCYWNraW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nOjp+QmFja2luZyk6CisgICAg
ICAgIChCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlOjpC
YWNraW5nOjpvd25lcik6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZTo6
QmFja2luZzo6cmVzb3VyY2VEZWxldGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjp+Q0NQcmlvcml0aXplZFRleHR1cmVN
YW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6
cHJpb3JpdGl6ZVRleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcjo6cmVxdWVzdExhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0aXpl
ZFRleHR1cmVNYW5hZ2VyOjphY3F1aXJlQmFja2luZ1RleHR1cmVJZk5lZWRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnJlZHVjZU1lbW9yeSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmRlbGV0ZUJhY2tp
bmdzUmVzb3VyY2VzT25JbXBsVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlcjo6ZGVzdHJveUJhY2tpbmdzRnJlZWRCeUltcGxUaHJlYWQpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI6OmNsZWFyQWxsTWVtb3J5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlcjo6cmVnaXN0ZXJUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmV0dXJuQmFja2luZ1RleHR1cmUpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGVCYWNraW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6ZGVzdHJveUJhY2tp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjphc3Nl
cnRJbnZhcmlhbnRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuaDoKKyAgICAgICAgKENDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NT
Y2hlZHVsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY2hlZHVsZXI6OmJlZ2luRnJhbWVB
Ym9ydGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Npbmds
ZVRocmVhZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6
OnJlY3JlYXRlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5
OjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OmRlbGV0ZUNv
bnRlbnRzVGV4dHVyZXNPbkltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21taXRBbmRDb21wb3NpdGUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHku
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRh
dGVRdWV1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1RleHR1cmVVcGRhdGVRdWV1ZTo6Y2xl
YXJVcGxvYWRzVG9EZWxldGVkUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZVF1ZXVlLmg6
CisgICAgICAgIChDQ1RleHR1cmVVcGRhdGVRdWV1ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
Q1RocmVhZFByb3h5OjpDQ1RocmVhZFByb3h5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFk
UHJveHk6OmRlbGV0ZUNvbnRlbnRzVGV4dHVyZXNPbkltcGxUaHJlYWQpOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpzY2hlZHVsZWRBY3Rpb25C
ZWdpbkZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWUp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUNvbXBsZXRlT25J
bXBsVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OnNjaGVkdWxlZEFj
dGlvbkNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpsYXllclRyZWVI
b3N0Q2xvc2VkT25JbXBsVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6
OnJlY3JlYXRlQ29udGV4dE9uSW1wbFRocmVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJl
YWRQcm94eTo6QmVnaW5GcmFtZUFuZENvbW1pdFN0YXRlOjpCZWdpbkZyYW1lQW5kQ29tbWl0U3Rh
dGUpOgorICAgICAgICAoQmVnaW5GcmFtZUFuZENvbW1pdFN0YXRlKToKKyAgICAgICAgKENDVGhy
ZWFkUHJveHkpOgorCiAyMDEyLTA4LTI5ICBSeXVhbiBDaG9pICA8cnl1YW4uY2hvaUBzYW1zdW5n
LmNvbT4KIAogICAgICAgICBbRUZMXSBNb3ZlIHNldmVyYWwgZmlsZXMgdG8gcmVtb3ZlIHdlYmtp
dDEgZGVwZW5kZW5jeSBmcm9tIFdlYkNvcmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDNjZDk4YmM4ZDEyYzZjZmFjNmEwODk3MTBkYzVmYzg2ZTI4MTAzZjkuLjA5MDU2OGJiYWFhZWYy
YzBiYjA3ZTczNDJjYzQwODk5MWM2YzlkM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMTItMDgtMjkgIENocmlzdG9waGVyIENhbWVyb24gIDxjY2FtZXJv
bkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBBbGxvdyBpbXBsLXRocmVhZCBk
ZWxldGlvbiBvZiBvbmx5IHNvbWUgcmVzb3VyY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTA1NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEluIENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCByZW1vdmUg
dGhlIHRlc3QKKyAgICAgICAgcmVsZWFzZUNvbnRlbnRzVGV4dHVyZVNob3VsZFRyaWdnZXJDb21t
aXQgYmVjYXVzZSBpdCBpcyBubyBsb25nZXIgdmFsaWQKKyAgICAgICAgYW5kIGlzIHJlZHVuZGFu
dC4gIEEgcmVsZWFzZUNvbnRlbnRzVGV4dHVyZSB3aWxsIG9ubHkgdHJpZ2dlciBhIGNvbW1pdAor
ICAgICAgICBpZiB0aGUgcmVsZWFzZUNvbnRlbnRzVGV4dHVyZSBhY3R1YWxseSBkZWxldGVzIGFu
eSB0ZXh0dXJlcywgYW5kCisgICAgICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RFdmljdFRleHR1cmVz
IGFscmVhZHkgdGVzdHMgdGhhdCB0aGUgY29tbWl0IGlzCisgICAgICAgIGlzc3VlZCB1cG9uIGV2
aWN0aW9uLgorCisgICAgICAgIFVwZGF0ZSBUaWxlZExheWVyQ2hyb21pdW1UZXN0IHRvIGFkaGVy
ZSB0byB0aHJlYWRpbmcgcmVxdWlyZW1lbnRzIGFuZAorICAgICAgICBub3QgbGVhayByZXNvdXJj
ZXMuCisKKyAgICAgICAgVXBkYXRlIENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCB0byBhZGhlcmUg
dG8gdGhyZWFkaW5nIHJlcXVpcm1lbnRzLgorCisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVI
b3N0SW1wbFRlc3QuY3BwOgorICAgICAgICAqIHRlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3Qu
Y3BwOgorCiAyMDEyLTA4LTI4ICBEYXZpZCBSZXZlbWFuICA8cmV2ZW1hbkBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgW0Nocm9taXVtXSBTY2hlZHVsZXIgd2lsbCBuZXZlciBwcm9jZXNzIGEgY29t
bWl0IHVudGlsIGl0IHJlY2VpdmVzIGEgdnN5bmMgdGljay4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVw
ZGF0ZXIuaAppbmRleCAxYWQ2MWM4ZDhjYTQ2NTNjMWYyMGI4Y2VlNDI2MmM3NzFlNGJlMjFjLi42
YzRiMDBjOTlkZWU2NTcyNDQ3Y2NhOGJkMTU5N2QyNzk5MWQ5YWJiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJU
ZXh0dXJlVXBkYXRlci5oCkBAIC00OSw2ICs0OSw3IEBAIHB1YmxpYzoKIAogICAgICAgICBDQ1By
aW9yaXRpemVkVGV4dHVyZSogdGV4dHVyZSgpIHsgcmV0dXJuIG1fdGV4dHVyZS5nZXQoKTsgfQog
ICAgICAgICB2b2lkIHN3YXBUZXh0dXJlV2l0aChPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmU+
JiB0ZXh0dXJlKSB7IG1fdGV4dHVyZS5zd2FwKHRleHR1cmUpOyB9CisgICAgICAgIGJvb2wgYmFj
a2luZ1dhc0FzeW5jaHJvbm91c2x5RGVsZXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZS0+
YmFja2luZ1dhc0FzeW5jaHJvbm91c2x5RGVsZXRlZCgpOyB9CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBwcmVwYXJlUmVjdChjb25zdCBJbnRSZWN0JiAvKiBzb3VyY2VSZWN0ICovLCBDQ1JlbmRlcmlu
Z1N0YXRzJikgeyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZWN0KENDUmVzb3VyY2VQ
cm92aWRlciosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFNpemUmIGRlc3RP
ZmZzZXQpID0gMDsKICAgICBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNw
cAppbmRleCAyNGEzMzRjM2ZjNzEyNDdhZjFjMjNiMzJjZmMyMmU5OGFmMjI3YjRjLi4zZTU5Zjcz
ZjkzY2NjY2E4Y2VlM2ZjY2ZlMjc2NWQzZjZmYTczNWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdC5jcHAKQEAgLTE5MiwxMyArMTkyLDIxIEBAIENDTGF5ZXJUcmVlSG9zdDo6UmVjcmVh
dGVSZXN1bHQgQ0NMYXllclRyZWVIb3N0OjpyZWNyZWF0ZUNvbnRleHQoKQogICAgIHJldHVybiBS
ZWNyZWF0ZUZhaWxlZEFuZEdhdmVVcDsKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmRlbGV0
ZUNvbnRlbnRzVGV4dHVyZXNPbkltcGxUaHJlYWQoQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJj
ZVByb3ZpZGVyKQordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmRlbGV0ZUFsbENvbnRlbnRzVGV4dHVy
ZXNPbkltcGxUaHJlYWQoQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyKQogewog
ICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAgaWYgKG1fcmVuZGVyZXJJ
bml0aWFsaXplZCkKICAgICAgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5jbGVhckFsbE1l
bW9yeShyZXNvdXJjZVByb3ZpZGVyKTsKIH0KIAorYm9vbCBDQ0xheWVyVHJlZUhvc3Q6OnJlZHVj
ZUNvbnRlbnRzVGV4dHVyZXNNZW1vcnlPbkltcGxUaHJlYWQoQ0NSZXNvdXJjZVByb3ZpZGVyKiBy
ZXNvdXJjZVByb3ZpZGVyKQoreworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7
CisgICAgaWYgKG1fcmVuZGVyZXJJbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuIG1fY29udGVu
dHNUZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5T25JbXBsVGhyZWFkQXN5bmMocmVzb3VyY2VQ
cm92aWRlcik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6
YWNxdWlyZUxheWVyVGV4dHVyZXMoKQogewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJl
YWQoKSk7CkBAIC00MTEsMTEgKzQxOSwxMiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0Vmlz
aWJsZShib29sIHZpc2libGUpCiAgICAgbV9wcm94eS0+c2V0VmlzaWJsZSh2aXNpYmxlKTsKIH0K
IAotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmV2aWN0QWxsQ29udGVudFRleHR1cmVzKCkKKwordm9p
ZCBDQ0xheWVyVHJlZUhvc3Q6OmRlc3Ryb3lDb250ZW50c1RleHR1cmVzRXZpY3RlZEJ5SW1wbFRo
cmVhZCgpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKICAgICBBU1NF
UlQobV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLmdldCgpKTsKLSAgICBtX2NvbnRlbnRzVGV4dHVy
ZU1hbmFnZXItPmFsbEJhY2tpbmdUZXh0dXJlc1dlcmVEZWxldGVkKCk7CisgICAgbV9jb250ZW50
c1RleHR1cmVNYW5hZ2VyLT5kZXN0cm95QmFja2luZ3NBc3luY2hyb25vdXNseUV2aWN0ZWQoKTsK
IH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnN0YXJ0UGFnZVNjYWxlQW5pbWF0aW9uKGNvbnN0
IEludFNpemUmIHRhcmdldFBvc2l0aW9uLCBib29sIHVzZUFuY2hvciwgZmxvYXQgc2NhbGUsIGRv
dWJsZSBkdXJhdGlvblNlYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggN2M1ODc1
ZmZhODA1OTk1NGZmMDRhNmExYjAxNjAxYTgxZDFiYTQ2NC4uMDMwNjg4ZGU1NzkwYWY1YjA3Zjkw
NzVhNzU5ZDAwOGM3NWM4MmE0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTE3
NSw3ICsxNzUsNiBAQCBwdWJsaWM6CiAgICAgUmVjcmVhdGVSZXN1bHQgcmVjcmVhdGVDb250ZXh0
KCk7CiAgICAgdm9pZCBkaWRDb21taXRBbmREcmF3RnJhbWUoKSB7IG1fY2xpZW50LT5kaWRDb21t
aXRBbmREcmF3RnJhbWUoKTsgfQogICAgIHZvaWQgZGlkQ29tcGxldGVTd2FwQnVmZmVycygpIHsg
bV9jbGllbnQtPmRpZENvbXBsZXRlU3dhcEJ1ZmZlcnMoKTsgfQotICAgIHZvaWQgZGVsZXRlQ29u
dGVudHNUZXh0dXJlc09uSW1wbFRocmVhZChDQ1Jlc291cmNlUHJvdmlkZXIqKTsKICAgICB2aXJ0
dWFsIHZvaWQgYWNxdWlyZUxheWVyVGV4dHVyZXMoKTsKICAgICAvLyBSZXR1cm5zIGZhbHNlIGlm
IHdlIHNob3VsZCBhYm9ydCB0aGlzIGZyYW1lIGR1ZSB0byBpbml0aWFsaXphdGlvbiBmYWlsdXJl
LgogICAgIGJvb2wgaW5pdGlhbGl6ZVJlbmRlcmVySWZOZWVkZWQoKTsKQEAgLTIzMywxMSArMjMy
LDE2IEBAIHB1YmxpYzoKIAogICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlciogY29udGVu
dHNUZXh0dXJlTWFuYWdlcigpIGNvbnN0OwogCi0gICAgLy8gVGhpcyB3aWxsIGNhdXNlIGNvbnRl
bnRzIHRleHR1cmUgbWFuYWdlciB0byBldmljdCBhbGwgdGV4dHVyZXMsIGJ1dAotICAgIC8vIHdp
dGhvdXQgZGVsZXRpbmcgdGhlbS4gVGhpcyBoYXBwZW5zIGFmdGVyIGFsbCBjb250ZW50IHRleHR1
cmVzIGhhdmUKLSAgICAvLyBhbHJlYWR5IGJlZW4gZGVsZXRlZCBvbiBpbXBsLCBhZnRlciBnZXR0
aW5nIGEgMCBhbGxvY2F0aW9uIGxpbWl0LgotICAgIC8vIFNldCBkdXJpbmcgYSBjb21taXQsIGJ1
dCBiZWZvcmUgdXBkYXRlTGF5ZXJzLgotICAgIHZvaWQgZXZpY3RBbGxDb250ZW50VGV4dHVyZXMo
KTsKKyAgICB2b2lkIGRlbGV0ZUFsbENvbnRlbnRzVGV4dHVyZXNPbkltcGxUaHJlYWQoQ0NSZXNv
dXJjZVByb3ZpZGVyKik7CisKKyAgICAvLyBUaGlzIHdpbGwgY2F1c2UgY29udGVudHMgdGV4dHVy
ZSBtYW5hZ2VyIHRvIGZyZWUgc29tZSByZXNvdXJjZXMgdXNlZAorICAgIC8vIGJ5IHRleHR1cmVz
LCBidXQgd2lsbCBub3QgZGVsZXRlIHRoZSB0ZXh0dXJlIGJhY2tpbmdzIG9iamVjdHMuIFRoZQor
ICAgIC8vIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiBzb21lIHJlc291cmNlcyB3ZXJlIGluZGVl
ZCBkZXN0cm95ZWQuCisgICAgYm9vbCByZWR1Y2VDb250ZW50c1RleHR1cmVzTWVtb3J5T25JbXBs
VGhyZWFkKENDUmVzb3VyY2VQcm92aWRlciopOworCisgICAgLy8gVGhpcyB3aWxsIGRlc3Ryb3kg
dGhlIGJhY2tpbmdzIHRoYXQgaGFkIHRoZWlyIEdQVSByZXNvdXJjZXMgZnJlZWQKKyAgICAvLyBi
eSBkZWxldGVDb250ZW50c1RleHR1cmVzUmVzb3VyY2VzT25JbXBsVGhyZWFkLgorICAgIHZvaWQg
ZGVzdHJveUNvbnRlbnRzVGV4dHVyZXNFdmljdGVkQnlJbXBsVGhyZWFkKCk7CiAKICAgICBib29s
IHZpc2libGUoKSBjb25zdCB7IHJldHVybiBtX3Zpc2libGU7IH0KICAgICB2b2lkIHNldFZpc2li
bGUoYm9vbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IDkx
ODMzYWYxZjQzMzkzMmRmMjUwMGJkNDVkYmQxZThhYjdhYTM5ZGYuLjgyODM5MTNkZTg4OGYyYjUx
ODBiNjg2MDY0ZDU5NmVmYzFmNDQyNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuY3BwCkBAIC01MjUsMTEgKzUyNSw3IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6
cHJlcGFyZVRvRHJhdyhGcmFtZURhdGEmIGZyYW1lKQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdElt
cGw6OnJlbGVhc2VDb250ZW50c1RleHR1cmVzKCkKIHsKLSAgICBpZiAobV9jb250ZW50c1RleHR1
cmVzUHVyZ2VkKQotICAgICAgICByZXR1cm47Ci0gICAgbV9yZXNvdXJjZVByb3ZpZGVyLT5kZWxl
dGVPd25lZFJlc291cmNlcyhDQ1JlbmRlcmVyOjpDb250ZW50UG9vbCk7Ci0gICAgbV9jb250ZW50
c1RleHR1cmVzUHVyZ2VkID0gdHJ1ZTsKLSAgICBtX2NsaWVudC0+c2V0TmVlZHNDb21taXRPbklt
cGxUaHJlYWQoKTsKKyAgICBtX2NsaWVudC0+cmVkdWNlQ29udGVudHNUZXh0dXJlc01lbW9yeU9u
SW1wbFRocmVhZCgpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldE1lbW9yeUFs
bG9jYXRpb25MaW1pdEJ5dGVzKHNpemVfdCBieXRlcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdEltcGwuaAppbmRleCBiM2QwN2FjMjljMGE4MDc4ZjAxN2M4ZTE4OTMwYmEwMDcyOTA2Mzg0
Li4yNTQyZjgwZGY5N2U2ZjE1MjhlMjNhMTA5NmI4Zjc1OTEzMmNjZGJjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCkBAIC02MCw2ICs2MCw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgc2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIHNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCkgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBwb3N0QW5pbWF0aW9uRXZlbnRzVG9NYWluVGhyZWFkT25JbXBsVGhyZWFkKFBhc3NPd25QdHI8
Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+LCBkb3VibGUgd2FsbENsb2NrVGltZSkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCByZWR1Y2VDb250ZW50c1RleHR1cmVzTWVtb3J5T25JbXBsVGhyZWFkKCkg
PSAwOwogfTsKIAogLy8gQ0NMYXllclRyZWVIb3N0SW1wbCBvd25zIHRoZSBDQ0xheWVySW1wbCB0
cmVlIGFzIHdlbGwgYXMgYXNzb2NpYXRlZCByZW5kZXJpbmcgc3RhdGUKQEAgLTE1OSw3ICsxNjAs
NyBAQCBwdWJsaWM6CiAgICAgaW50IHNvdXJjZUZyYW1lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4g
bV9zb3VyY2VGcmFtZU51bWJlcjsgfQogICAgIHZvaWQgc2V0U291cmNlRnJhbWVOdW1iZXIoaW50
IGZyYW1lTnVtYmVyKSB7IG1fc291cmNlRnJhbWVOdW1iZXIgPSBmcmFtZU51bWJlcjsgfQogCi0g
ICAgYm9vbCBjb250ZW50c1RleHR1cmVzUHVyZ2VkKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50
c1RleHR1cmVzUHVyZ2VkOyB9CisgICAgdm9pZCBzZXRDb250ZW50c1RleHR1cmVzUHVyZ2VkKCkg
eyBtX2NvbnRlbnRzVGV4dHVyZXNQdXJnZWQgPSB0cnVlOyB9CiAgICAgdm9pZCByZXNldENvbnRl
bnRzVGV4dHVyZXNQdXJnZWQoKSB7IG1fY29udGVudHNUZXh0dXJlc1B1cmdlZCA9IGZhbHNlOyB9
CiAgICAgc2l6ZV90IG1lbW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzKCkgY29uc3QgeyByZXR1cm4g
bV9tZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlczsgfQogCkBAIC0yODIsNiArMjgzLDEwIEBAIHBy
aXZhdGU6CiAgICAgSW50U2l6ZSBtX2RldmljZVZpZXdwb3J0U2l6ZTsKICAgICBmbG9hdCBtX2Rl
dmljZVNjYWxlRmFjdG9yOwogICAgIGJvb2wgbV92aXNpYmxlOworCisgICAgLy8gU2V0IHdoZW4g
dGhlIGltcGwgdGhyZWFkIGRlbGV0ZXMgdGV4dHVyZXMsIHVuLXNldCB3aGVuIHRoZSBpbXBsJ3Mg
bGF5ZXIgdHJlZQorICAgIC8vIGlzIGtub3duIHRvIG5vdCByZWZlcmVuY2UgYW55IGRlbGV0ZWQg
cmVzb3VyY2VzLiBVc2VkIHRvIHByZXZlbnQgZHJhd2luZworICAgIC8vIHdpdGggZGVsZXRlZCBy
ZXNvdXJjZXMuCiAgICAgYm9vbCBtX2NvbnRlbnRzVGV4dHVyZXNQdXJnZWQ7CiAgICAgc2l6ZV90
IG1fbWVtb3J5QWxsb2NhdGlvbkxpbWl0Qnl0ZXM7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3Jp
dGl6ZWRUZXh0dXJlLmNwcAppbmRleCBkOWY2OGFmMGFlMGI5OTI4MTMzYTIzMmQ3NDE2OTI0NzYx
MjA2ZGRiLi5kYzA4Y2U3NGY5MjlkN2E0NDQ2YmNmYTY2ZTM5ZWI4YjkwNGJiOWI4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9y
aXRpemVkVGV4dHVyZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmUuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAK
ICNpbmNsdWRlICJDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuaCIKICNpbmNsdWRlICJDQ1By
aW9yaXR5Q2FsY3VsYXRvci5oIgorI2luY2x1ZGUgIkNDUHJveHkuaCIKICNpbmNsdWRlIDxhbGdv
cml0aG0+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkBAIC0xMTAsOSArMTExLDE3IEBAIHZvaWQg
Q0NQcmlvcml0aXplZFRleHR1cmU6OnVwbG9hZChDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNl
UHJvdmlkZXIsCiAgICAgaWYgKG1faXNBYm92ZVByaW9yaXR5Q3V0b2ZmKQogICAgICAgICBhY3F1
aXJlQmFja2luZ1RleHR1cmUocmVzb3VyY2VQcm92aWRlcik7CiAgICAgQVNTRVJUKG1fYmFja2lu
Zyk7CisgICAgQVNTRVJUKCFiYWNraW5nV2FzQXN5bmNocm9ub3VzbHlEZWxldGVkKCkpOwogICAg
IHJlc291cmNlUHJvdmlkZXItPnVwbG9hZChyZXNvdXJjZUlkKCksIGltYWdlLCBpbWFnZVJlY3Qs
IHNvdXJjZVJlY3QsIGRlc3RPZmZzZXQpOwogfQogCitib29sIENDUHJpb3JpdGl6ZWRUZXh0dXJl
OjpiYWNraW5nV2FzQXN5bmNocm9ub3VzbHlEZWxldGVkKCkgY29uc3QKK3sKKyAgICBpZiAobV9i
YWNraW5nKQorICAgICAgICByZXR1cm4gbV9iYWNraW5nLT5yZXNvdXJjZURlbGV0ZWQoKTsKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmU6OmxpbmsoQmFj
a2luZyogYmFja2luZykKIHsKICAgICBBU1NFUlQoYmFja2luZyk7CkBAIC0xMzksNCArMTQ4LDI1
IEBAIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmU6OnNldFRvU2VsZk1hbmFnZWRNZW1vcnlQbGFj
ZWhvbGRlcihzaXplX3QgYnl0ZXMpCiAgICAgbV9ieXRlcyA9IGJ5dGVzOwogfQogCitDQ1Jlc291
cmNlUHJvdmlkZXI6OlJlc291cmNlSWQgQ0NQcmlvcml0aXplZFRleHR1cmU6OkJhY2tpbmc6Omlk
KCkKK3sKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOworICAgIHJldHVybiBt
X3RleHR1cmUuaWQoKTsKK30KKworYm9vbCBDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZzo6
cmVzb3VyY2VEZWxldGVkKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhy
ZWFkKCkpOworICAgIHJldHVybiBtX3Jlc291cmNlRGVsZXRlZDsKK30KKwordm9pZCBDQ1ByaW9y
aXRpemVkVGV4dHVyZTo6QmFja2luZzo6ZGVsZXRlUmVzb3VyY2UoQ0NSZXNvdXJjZVByb3ZpZGVy
KiByZXNvdXJjZVByb3ZpZGVyKQoreworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQo
KSk7CisgICAgQVNTRVJUKHJlc291cmNlUHJvdmlkZXIpOworICAgIEFTU0VSVCghbV9yZXNvdXJj
ZURlbGV0ZWQpOworICAgIHJlc291cmNlUHJvdmlkZXItPmRlbGV0ZVJlc291cmNlKG1fdGV4dHVy
ZS5pZCgpKTsKKyAgICBtX3Jlc291cmNlRGVsZXRlZCA9IHRydWU7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZS5oCmluZGV4IDM3
ODlkN2YyNjlhM2Q3ZTUxOTVhODkyZGRkMzc2ZGFlNjE4ZDJiMGUuLjcyZjI2ZmU5ODJmZmM5MTM4
YTdmYjYyZGNjMGZjMTU5MWUxZjE5YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRl
eHR1cmUuaApAQCAtODgsNiArODgsOCBAQCBwdWJsaWM6CiAgICAgLy8gVXBsb2FkcyBwaXhlbHMg
aW50byB0aGUgYmFja2luZyByZXNvdXJjZS4gVGhpcyBmdW5jdGlvbnMgd2lsbCBhcXVpcmUgdGhl
IGJhY2tpbmcgaWYgbmVlZGVkLgogICAgIHZvaWQgdXBsb2FkKENDUmVzb3VyY2VQcm92aWRlcios
IGNvbnN0IHVpbnQ4X3QqIGltYWdlLCBjb25zdCBJbnRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0IElu
dFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFNpemUmIGRlc3RPZmZzZXQpOwogCisgICAgYm9v
bCBiYWNraW5nV2FzQXN5bmNocm9ub3VzbHlEZWxldGVkKCkgY29uc3Q7CisKICAgICBDQ1Jlc291
cmNlUHJvdmlkZXI6OlJlc291cmNlSWQgcmVzb3VyY2VJZCgpIGNvbnN0OwogCiAgICAgLy8gU2Vs
Zi1tYW5hZ2VkIHRleHR1cmVzIGFyZSBhY2NvdW50ZWQgZm9yIHdoZW4gcHJpb3JpdGl6aW5nIG90
aGVyIHRleHR1cmVzLApAQCAtMTAxLDE2ICsxMDMsMjcgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICBmcmllbmQgY2xhc3MgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOwogCi0gICAgY2xhc3Mg
QmFja2luZyA6IHB1YmxpYyBDQ1RleHR1cmUgeworICAgIGNsYXNzIEJhY2tpbmcgewogICAgICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShCYWNraW5nKTsKICAgICBwdWJsaWM6CiAgICAgICAgIEJh
Y2tpbmcodW5zaWduZWQgaWQsIEludFNpemUgc2l6ZSwgR0MzRGVudW0gZm9ybWF0KQotICAgICAg
ICAgICAgOiBDQ1RleHR1cmUoaWQsIHNpemUsIGZvcm1hdCksIG1fb3duZXIoMCkgeyB9Ci0gICAg
ICAgIH5CYWNraW5nKCkgeyBBU1NFUlQoIW1fb3duZXIpOyB9CisgICAgICAgICAgICA6IG1fdGV4
dHVyZShpZCwgc2l6ZSwgZm9ybWF0KSwgbV9yZXNvdXJjZURlbGV0ZWQoZmFsc2UpLCBtX293bmVy
KDApIHsgfQorICAgICAgICB+QmFja2luZygpIHsgQVNTRVJUKCFtX293bmVyICYmIG1fcmVzb3Vy
Y2VEZWxldGVkKTsgfQorCisgICAgICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlKiBvd25lcigpIGNv
bnN0IHsgcmV0dXJuIG1fb3duZXI7IH0KKworICAgICAgICBDQ1Jlc291cmNlUHJvdmlkZXI6OlJl
c291cmNlSWQgaWQoKTsKKyAgICAgICAgdm9pZCBkZWxldGVSZXNvdXJjZShDQ1Jlc291cmNlUHJv
dmlkZXIqKTsKKyAgICAgICAgYm9vbCByZXNvdXJjZURlbGV0ZWQoKSBjb25zdDsKKyAgICAgICAg
Y29uc3QgSW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZS5zaXplKCk7IH0K
KyAgICAgICAgR0MzRGVudW0gZm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlLmZvcm1h
dCgpOyB9CisgICAgICAgIHNpemVfdCBieXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZS5i
eXRlcygpOyB9CiAKLSAgICAgICAgQ0NQcmlvcml0aXplZFRleHR1cmUqIG93bmVyKCkgeyByZXR1
cm4gbV9vd25lcjsgfQogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBDQ1ByaW9y
aXRpemVkVGV4dHVyZTsKKyAgICAgICAgZnJpZW5kIGNsYXNzIENDUHJpb3JpdGl6ZWRUZXh0dXJl
TWFuYWdlcjsKKyAgICAgICAgQ0NUZXh0dXJlIG1fdGV4dHVyZTsKKyAgICAgICAgYm9vbCBtX3Jl
c291cmNlRGVsZXRlZDsKICAgICAgICAgQ0NQcmlvcml0aXplZFRleHR1cmUqIG1fb3duZXI7CiAg
ICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdl
ci5jcHAKaW5kZXggOTZmYjA1ZDk0NTJiMTE3NmUyOWI0NzdlYTdmNTgzNWUyYzMxMDg1Zi4uMjc3
Mjg0N2YzNTRhYzBhOThkNjI5MjliYWFhMGQ1YTA5NzY5OTRiNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1
cmVNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuY3BwCkBAIC0yOCw2ICsyOCw3IEBA
CiAKICNpbmNsdWRlICJDQ1ByaW9yaXRpemVkVGV4dHVyZS5oIgogI2luY2x1ZGUgIkNDUHJpb3Jp
dHlDYWxjdWxhdG9yLmgiCisjaW5jbHVkZSAiQ0NQcm94eS5oIgogI2luY2x1ZGUgIlRyYWNlRXZl
bnQuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAKQEAgLTQ5LDE1ICs1MCwxNyBAQCBDQ1ByaW9y
aXRpemVkVGV4dHVyZU1hbmFnZXI6On5DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIoKQogICAg
IHdoaWxlIChtX3RleHR1cmVzLnNpemUoKSA+IDApCiAgICAgICAgIHVucmVnaXN0ZXJUZXh0dXJl
KCptX3RleHR1cmVzLmJlZ2luKCkpOwogCi0gICAgLy8gRWFjaCByZW1haW5pbmcgYmFja2luZyBp
cyBhIGxlYWtlZCBvcGVuZ2wgdGV4dHVyZS4gV2UgZG9uJ3QgaGF2ZSB0aGUgcmVzb3VyY2VQcm92
aWRlcgotICAgIC8vIHRvIGRlbGV0ZSB0aGUgdGV4dHVyZXMgYXQgdGhpcyB0aW1lIHNvIGNsZWFy
TWVtb3J5KCkgbmVlZHMgdG8gYmUgY2FsbGVkIGJlZm9yZSB0aGlzLgotICAgIHdoaWxlIChtX2Jh
Y2tpbmdzLnNpemUoKSA+IDApCi0gICAgICAgIGRlc3Ryb3lCYWNraW5nKCptX2JhY2tpbmdzLmJl
Z2luKCksIDApOworICAgIC8vIFJlbW92ZSBhbnkgYmFja2luZ3MgdGhhdCB3ZXJlIGV2aWN0ZWQu
CisgICAgY2xlYXJFdmljdGVkQmFja2luZ3MoKTsKKworICAgIC8vIEVhY2ggcmVtYWluaW5nIGJh
Y2tpbmcgaXMgcmVhbCBtZW1vcnkgbGVhay4gVGhpcyBzaG91bGRuJ3QgaGFwcGVuLgorICAgIEFT
U0VSVChtX2JhY2tpbmdzLmlzRW1wdHkoKSk7CiB9CiAKIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1
cmVNYW5hZ2VyOjpwcmlvcml0aXplVGV4dHVyZXMoKQogewogICAgIFRSQUNFX0VWRU5UMCgiY2Mi
LCAiQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpwcmlvcml0aXplVGV4dHVyZXMiKTsKKyAg
ICBBU1NFUlQoQ0NQcm94eTo6aXNNYWluVGhyZWFkKCkpOwogCiAjaWYgIUFTU0VSVF9ESVNBQkxF
RAogICAgIGFzc2VydEludmFyaWFudHMoKTsKQEAgLTEzNyw2ICsxNDAsNyBAQCB2b2lkIENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cHJpb3JpdGl6ZVRleHR1cmVzKCkKIAogdm9pZCBDQ1By
aW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNsZWFyUHJpb3JpdGllcygpCiB7CisgICAgQVNTRVJU
KENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKICAgICBmb3IgKFRleHR1cmVTZXQ6Oml0ZXJhdG9y
IGl0ID0gbV90ZXh0dXJlcy5iZWdpbigpOyBpdCAhPSBtX3RleHR1cmVzLmVuZCgpOyArK2l0KSB7
CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVtb3ZlIHRoaXMgYW5kIGp1c3Qgc2V0IGFs
bCBwcmlvcml0aWVzIHRvCiAgICAgICAgIC8vICAgICAgICBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6
bG93ZXN0UHJpb3JpdHkoKSBvbmNlIHdlIGhhdmUgcHJpb3JpdGllcwpAQCAtMTQ4LDYgKzE1Miw4
IEBAIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjbGVhclByaW9yaXRpZXMoKQog
CiBib29sIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmVxdWVzdExhdGUoQ0NQcmlvcml0
aXplZFRleHR1cmUqIHRleHR1cmUpCiB7CisgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVh
ZCgpKTsKKwogICAgIC8vIFRoaXMgaXMgYWxyZWFkeSBhYm92ZSBjdXRvZmYsIHNvIGRvbid0IGRv
dWJsZSBjb3VudCBpdCdzIG1lbW9yeSBiZWxvdy4KICAgICBpZiAodGV4dHVyZS0+aXNBYm92ZVBy
aW9yaXR5Q3V0b2ZmKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTcwLDYgKzE3Niw4IEBA
IGJvb2wgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpyZXF1ZXN0TGF0ZShDQ1ByaW9yaXRp
emVkVGV4dHVyZSogdGV4dHVyZSkKIAogdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6
OmFjcXVpcmVCYWNraW5nVGV4dHVyZUlmTmVlZGVkKENDUHJpb3JpdGl6ZWRUZXh0dXJlKiB0ZXh0
dXJlLCBDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIpCiB7CisgICAgQVNTRVJU
KENDUHJveHk6OmlzSW1wbFRocmVhZCgpICYmIENDUHJveHk6OmlzTWFpblRocmVhZEJsb2NrZWQo
KSk7CisgICAgQVNTRVJUKHJlc291cmNlUHJvdmlkZXIpOwogICAgIEFTU0VSVCghdGV4dHVyZS0+
aXNTZWxmTWFuYWdlZCgpKTsKICAgICBBU1NFUlQodGV4dHVyZS0+aXNBYm92ZVByaW9yaXR5Q3V0
b2ZmKCkpOwogICAgIGlmICh0ZXh0dXJlLT5iYWNraW5nKCkgfHwgIXRleHR1cmUtPmlzQWJvdmVQ
cmlvcml0eUN1dG9mZigpKQpAQCAtMTgyLDYgKzE5MCw4IEBAIHZvaWQgQ0NQcmlvcml0aXplZFRl
eHR1cmVNYW5hZ2VyOjphY3F1aXJlQmFja2luZ1RleHR1cmVJZk5lZWRlZChDQ1ByaW9yaXRpemVk
VGV4CiAgICAgZm9yIChCYWNraW5nU2V0OjppdGVyYXRvciBpdCA9IG1fYmFja2luZ3MuYmVnaW4o
KTsgaXQgIT0gbV9iYWNraW5ncy5lbmQoKTsgKytpdCkgewogICAgICAgICBpZiAoKCppdCktPm93
bmVyKCkgJiYgKCppdCktPm93bmVyKCktPmlzQWJvdmVQcmlvcml0eUN1dG9mZigpKQogICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGlmICgoKml0KS0+cmVzb3VyY2VEZWxldGVkKCkpCisgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKCgqaXQpLT5zaXplKCkgPT0gdGV4dHVyZS0+
c2l6ZSgpICYmICgqaXQpLT5mb3JtYXQoKSA9PSB0ZXh0dXJlLT5mb3JtYXQoKSkgewogICAgICAg
ICAgICAgYmFja2luZyA9ICgqaXQpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xOTIsNiArMjAy
LDcgQEAgdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmFjcXVpcmVCYWNraW5nVGV4
dHVyZUlmTmVlZGVkKENDUHJpb3JpdGl6ZWRUZXgKICAgICBpZiAoIWJhY2tpbmcpIHsKICAgICAg
ICAgcmVkdWNlTWVtb3J5KG1fbWVtb3J5QXZhaWxhYmxlQnl0ZXMgLSB0ZXh0dXJlLT5ieXRlcygp
LCByZXNvdXJjZVByb3ZpZGVyKTsKICAgICAgICAgYmFja2luZyA9IGNyZWF0ZUJhY2tpbmcodGV4
dHVyZS0+c2l6ZSgpLCB0ZXh0dXJlLT5mb3JtYXQoKSwgcmVzb3VyY2VQcm92aWRlcik7CisgICAg
ICAgIG1fc2hhcmVkU3RhdGUuYWRkQmFja2luZ09uSW1wbFRocmVhZChiYWNraW5nKTsKICAgICB9
CiAKICAgICAvLyBNb3ZlIHRoZSB1c2VkIGJhY2tpbmcgdGV4dHVyZSB0byB0aGUgZW5kIG9mIHRo
ZSBldmljdGlvbiBsaXN0LgpAQCAtMjA0LDIwICsyMTUsMjQgQEAgdm9pZCBDQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXI6OmFjcXVpcmVCYWNraW5nVGV4dHVyZUlmTmVlZGVkKENDUHJpb3JpdGl6
ZWRUZXgKIAogdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnJlZHVjZU1lbW9yeShz
aXplX3QgbGltaXRCeXRlcywgQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyKQog
eworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSAmJiBDQ1Byb3h5Ojppc01haW5U
aHJlYWRCbG9ja2VkKCkpOworICAgIEFTU0VSVChyZXNvdXJjZVByb3ZpZGVyKTsKICAgICBpZiAo
bWVtb3J5VXNlQnl0ZXMoKSA8PSBsaW1pdEJ5dGVzKQogICAgICAgICByZXR1cm47CiAgICAgLy8g
RGVzdHJveSBiYWNraW5ncyB1bnRpbCB3ZSBhcmUgYmVsb3cgdGhlIGxpbWl0LAogICAgIC8vIG9y
IHVudGlsIGFsbCBiYWNraW5ncyByZW1haW5pbmcgYXJlIGFib3ZlIHRoZSBjdXRvZmYuCiAgICAg
d2hpbGUgKG1lbW9yeVVzZUJ5dGVzKCkgPiBsaW1pdEJ5dGVzICYmIG1fYmFja2luZ3Muc2l6ZSgp
ID4gMCkgewotICAgICAgICBCYWNraW5nU2V0OjppdGVyYXRvciBpdCA9IG1fYmFja2luZ3MuYmVn
aW4oKTsKLSAgICAgICAgaWYgKCgqaXQpLT5vd25lcigpICYmICgqaXQpLT5vd25lcigpLT5pc0Fi
b3ZlUHJpb3JpdHlDdXRvZmYoKSkKKyAgICAgICAgQ0NQcmlvcml0aXplZFRleHR1cmU6OkJhY2tp
bmcqIGJhY2tpbmcgPSAqbV9iYWNraW5ncy5iZWdpbigpOworICAgICAgICBpZiAoYmFja2luZy0+
b3duZXIoKSAmJiBiYWNraW5nLT5vd25lcigpLT5pc0Fib3ZlUHJpb3JpdHlDdXRvZmYoKSkKICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZXN0cm95QmFja2luZygoKml0KSwgcmVzb3VyY2VQ
cm92aWRlcik7CisgICAgICAgIG1fc2hhcmVkU3RhdGUucmVtb3ZlQmFja2luZ09uSW1wbFRocmVh
ZChiYWNraW5nLCByZXNvdXJjZVByb3ZpZGVyKTsKKyAgICAgICAgZGVzdHJveUJhY2tpbmcoYmFj
a2luZyk7CiAgICAgfQogfQogCiB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmVk
dWNlTWVtb3J5KENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlcikKIHsKKyAgICBB
U1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkgJiYgQ0NQcm94eTo6aXNNYWluVGhyZWFkQmxv
Y2tlZCgpKTsKICAgICByZWR1Y2VNZW1vcnkobV9tZW1vcnlBdmFpbGFibGVCeXRlcywgcmVzb3Vy
Y2VQcm92aWRlcik7CiAgICAgQVNTRVJUKG1lbW9yeVVzZUJ5dGVzKCkgPD0gbWF4TWVtb3J5TGlt
aXRCeXRlcygpKTsKIApAQCAtMjM4LDI3ICsyNTMsMzggQEAgdm9pZCBDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI6OnJlZHVjZU1lbW9yeShDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJv
dmkKICAgICByZWR1Y2VNZW1vcnkobWVtb3J5VXNlQnl0ZXMoKSAtICh3YXN0ZWRNZW1vcnkgLSB0
ZW5QZXJjZW50T2ZNZW1vcnkpLCByZXNvdXJjZVByb3ZpZGVyKTsKIH0KIAotdm9pZCBDQ1ByaW9y
aXRpemVkVGV4dHVyZU1hbmFnZXI6OmNsZWFyQWxsTWVtb3J5KENDUmVzb3VyY2VQcm92aWRlciog
cmVzb3VyY2VQcm92aWRlcikKK2Jvb2wgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpyZWR1
Y2VNZW1vcnlPbkltcGxUaHJlYWRBc3luYyhDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJv
dmlkZXIpCiB7Ci0gICAgLy8gVW5saW5rIGFuZCBkZXN0cm95IGFsbCBiYWNraW5nIHRleHR1cmVz
LgotICAgIHdoaWxlIChtX2JhY2tpbmdzLnNpemUoKSA+IDApIHsKLSAgICAgICAgQmFja2luZ1Nl
dDo6aXRlcmF0b3IgaXQgPSBtX2JhY2tpbmdzLmJlZ2luKCk7Ci0gICAgICAgIGlmICgoKml0KS0+
b3duZXIoKSkKLSAgICAgICAgICAgICgqaXQpLT5vd25lcigpLT51bmxpbmsoKTsKLSAgICAgICAg
ZGVzdHJveUJhY2tpbmcoKCppdCksIHJlc291cmNlUHJvdmlkZXIpOwotICAgIH0KKyAgICBBU1NF
UlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOworICAgIEFTU0VSVChyZXNvdXJjZVByb3ZpZGVy
KTsKKyAgICByZXR1cm4gbV9zaGFyZWRTdGF0ZS5ldmljdEJhY2tpbmdzUmVzb3VyY2VzT25JbXBs
VGhyZWFkQXN5bmMocmVzb3VyY2VQcm92aWRlcik7CiB9CiAKLXZvaWQgQ0NQcmlvcml0aXplZFRl
eHR1cmVNYW5hZ2VyOjphbGxCYWNraW5nVGV4dHVyZXNXZXJlRGVsZXRlZCgpCit2b2lkIENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6ZGVzdHJveUJhY2tpbmdzQXN5bmNocm9ub3VzbHlFdmlj
dGVkKCkKIHsKLSAgICAvLyBTYW1lIGFzIGNsZWFyQWxsTWVtb3J5LCBleGNlcHQgYWxsIG91ciB0
ZXh0dXJlcyB3ZXJlIGFscmVhZHkKLSAgICAvLyBkZWxldGVkIGV4dGVybmFsbHksIHNvIHdlIGRv
bid0IGRlbGV0ZSB0aGVtLiBQYXNzaW5nIG5vCi0gICAgLy8gcmVzb3VyY2VQcm92aWRlciByZXN1
bHRzIGluIGxlYWtpbmcgdGhlIChub3cgaW52YWxpZCkgdGV4dHVyZSBpZHMuCi0gICAgY2xlYXJB
bGxNZW1vcnkoMCk7CisgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKKyAgICBj
bGVhckV2aWN0ZWRCYWNraW5ncygpOworfQorCit2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcjo6Y2xlYXJFdmljdGVkQmFja2luZ3MoKQoreworICAgIEJhY2tpbmdTZXQgZXZpY3RlZEJh
Y2tpbmdzOworICAgIG1fc2hhcmVkU3RhdGUuZ2V0QW5kQ2xlYXJFdmljdGVkQmFja2luZ3MoZXZp
Y3RlZEJhY2tpbmdzKTsKKyAgICBmb3IgKEJhY2tpbmdTZXQ6Oml0ZXJhdG9yIGl0ID0gZXZpY3Rl
ZEJhY2tpbmdzLmJlZ2luKCk7IGl0ICE9IGV2aWN0ZWRCYWNraW5ncy5lbmQoKTsgKytpdCkKKyAg
ICAgICAgZGVzdHJveUJhY2tpbmcoKCppdCkpOworfQorCit2b2lkIENDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcjo6Y2xlYXJBbGxNZW1vcnkoQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVBy
b3ZpZGVyKQoreworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSAmJiBDQ1Byb3h5
Ojppc01haW5UaHJlYWRCbG9ja2VkKCkpOworICAgIEFTU0VSVChyZXNvdXJjZVByb3ZpZGVyKTsK
KyAgICByZWR1Y2VNZW1vcnlPbkltcGxUaHJlYWRBc3luYyhyZXNvdXJjZVByb3ZpZGVyKTsKKyAg
ICBjbGVhckV2aWN0ZWRCYWNraW5ncygpOwogfQogCiB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJl
TWFuYWdlcjo6cmVnaXN0ZXJUZXh0dXJlKENDUHJpb3JpdGl6ZWRUZXh0dXJlKiB0ZXh0dXJlKQog
eworICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKHRleHR1
cmUpOwogICAgIEFTU0VSVCghdGV4dHVyZS0+dGV4dHVyZU1hbmFnZXIoKSk7CiAgICAgQVNTRVJU
KCF0ZXh0dXJlLT5iYWNraW5nKCkpOwpAQCAtMjY2LDExICsyOTIsMTEgQEAgdm9pZCBDQ1ByaW9y
aXRpemVkVGV4dHVyZU1hbmFnZXI6OnJlZ2lzdGVyVGV4dHVyZShDQ1ByaW9yaXRpemVkVGV4dHVy
ZSogdGV4dHVyZSkKIAogICAgIHRleHR1cmUtPnNldE1hbmFnZXJJbnRlcm5hbCh0aGlzKTsKICAg
ICBtX3RleHR1cmVzLmFkZCh0ZXh0dXJlKTsKLQogfQogCiB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcjo6dW5yZWdpc3RlclRleHR1cmUoQ0NQcmlvcml0aXplZFRleHR1cmUqIHRleHR1
cmUpCiB7CisgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpIHx8IChDQ1Byb3h5Ojpp
c0ltcGxUaHJlYWQoKSAmJiBDQ1Byb3h5Ojppc01haW5UaHJlYWRCbG9ja2VkKCkpKTsKICAgICBB
U1NFUlQodGV4dHVyZSk7CiAgICAgQVNTRVJUKG1fdGV4dHVyZXMuZmluZCh0ZXh0dXJlKSAhPSBt
X3RleHR1cmVzLmVuZCgpKTsKIApAQCAtMjgwLDkgKzMwNiw5IEBAIHZvaWQgQ0NQcmlvcml0aXpl
ZFRleHR1cmVNYW5hZ2VyOjp1bnJlZ2lzdGVyVGV4dHVyZShDQ1ByaW9yaXRpemVkVGV4dHVyZSog
dGV4dHVyCiAgICAgdGV4dHVyZS0+c2V0QWJvdmVQcmlvcml0eUN1dG9mZihmYWxzZSk7CiB9CiAK
LQogdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnJldHVybkJhY2tpbmdUZXh0dXJl
KENDUHJpb3JpdGl6ZWRUZXh0dXJlKiB0ZXh0dXJlKQogeworICAgIEFTU0VSVChDQ1Byb3h5Ojpp
c01haW5UaHJlYWQoKSB8fCAoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkgJiYgQ0NQcm94eTo6aXNN
YWluVGhyZWFkQmxvY2tlZCgpKSk7CiAgICAgaWYgKHRleHR1cmUtPmJhY2tpbmcoKSkgewogICAg
ICAgICAvLyBNb3ZlIHRoZSBiYWNraW5nIHRleHR1cmUgdG8gdGhlIGZyb250IGZvciBldmljdGlv
bi9yZWN5Y2xpbmcgYW5kIHVubGluayBpdC4KICAgICAgICAgbV9iYWNraW5ncy5yZW1vdmUodGV4
dHVyZS0+YmFja2luZygpKTsKQEAgLTI5Myw4ICszMTksOCBAQCB2b2lkIENDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlcjo6cmV0dXJuQmFja2luZ1RleHR1cmUoQ0NQcmlvcml0aXplZFRleHR1cmUq
IHRleAogCiBDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZyogQ0NQcmlvcml0aXplZFRleHR1
cmVNYW5hZ2VyOjpjcmVhdGVCYWNraW5nKEludFNpemUgc2l6ZSwgR0MzRGVudW0gZm9ybWF0LCBD
Q1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIpCiB7CisgICAgQVNTRVJUKENDUHJv
eHk6OmlzSW1wbFRocmVhZCgpICYmIENDUHJveHk6OmlzTWFpblRocmVhZEJsb2NrZWQoKSk7CiAg
ICAgQVNTRVJUKHJlc291cmNlUHJvdmlkZXIpOwotCiAgICAgQ0NSZXNvdXJjZVByb3ZpZGVyOjpS
ZXNvdXJjZUlkIHJlc291cmNlSWQgPSByZXNvdXJjZVByb3ZpZGVyLT5jcmVhdGVSZXNvdXJjZSht
X3Bvb2wsIHNpemUsIGZvcm1hdCwgQ0NSZXNvdXJjZVByb3ZpZGVyOjpUZXh0dXJlVXNhZ2VBbnkp
OwogICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nKiBiYWNraW5nID0gbmV3IENDUHJp
b3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nKHJlc291cmNlSWQsIHNpemUsIGZvcm1hdCk7CiAgICAg
bV9tZW1vcnlVc2VCeXRlcyArPSBiYWNraW5nLT5ieXRlcygpOwpAQCAtMzAzLDE1ICszMjksMTMg
QEAgQ0NQcmlvcml0aXplZFRleHR1cmU6OkJhY2tpbmcqIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcjo6Y3JlYXRlQmFja2luZyhJbnRTaXoKICAgICByZXR1cm4gYmFja2luZzsKIH0KIAotdm9p
ZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmRlc3Ryb3lCYWNraW5nKENDUHJpb3JpdGl6
ZWRUZXh0dXJlOjpCYWNraW5nKiBiYWNraW5nLCBDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNl
UHJvdmlkZXIpCit2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6ZGVzdHJveUJhY2tp
bmcoQ0NQcmlvcml0aXplZFRleHR1cmU6OkJhY2tpbmcqIGJhY2tpbmcpCiB7CiAgICAgQVNTRVJU
KGJhY2tpbmcpOwotICAgIEFTU0VSVCghYmFja2luZy0+b3duZXIoKSB8fCAhYmFja2luZy0+b3du
ZXIoKS0+aXNBYm92ZVByaW9yaXR5Q3V0b2ZmKCkpOwogICAgIEFTU0VSVCghYmFja2luZy0+b3du
ZXIoKSB8fCAhYmFja2luZy0+b3duZXIoKS0+aXNTZWxmTWFuYWdlZCgpKTsKICAgICBBU1NFUlQo
bV9iYWNraW5ncy5maW5kKGJhY2tpbmcpICE9IG1fYmFja2luZ3MuZW5kKCkpOworICAgIEFTU0VS
VChiYWNraW5nLT5tX3Jlc291cmNlRGVsZXRlZCk7CiAKLSAgICBpZiAocmVzb3VyY2VQcm92aWRl
cikKLSAgICAgICAgcmVzb3VyY2VQcm92aWRlci0+ZGVsZXRlUmVzb3VyY2UoYmFja2luZy0+aWQo
KSk7CiAgICAgaWYgKGJhY2tpbmctPm93bmVyKCkpCiAgICAgICAgIGJhY2tpbmctPm93bmVyKCkt
PnVubGluaygpOwogICAgIG1fbWVtb3J5VXNlQnl0ZXMgLT0gYmFja2luZy0+Ynl0ZXMoKTsKQEAg
LTMyMCwxMCArMzQ0LDExIEBAIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpkZXN0
cm95QmFja2luZyhDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZyoKICAgICBkZWxldGUgYmFj
a2luZzsKIH0KIAotCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogdm9pZCBDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI6OmFzc2VydEludmFyaWFudHMoKQogeworICAgIEFTU0VSVChDQ1Byb3h5Ojpp
c01haW5UaHJlYWQoKSk7CisKICAgICAvLyBJZiB3ZSBoaXQgYW55IG9mIHRoZXNlIGFzc2VydHMs
IHRoZXJlIGlzIGEgYnVnIGluIHRoaXMgY2xhc3MuIFRvIHNlZQogICAgIC8vIHdoZXJlIHRoZSBi
dWcgaXMsIGNhbGwgdGhpcyBmdW5jdGlvbiBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YKICAg
ICAvLyBldmVyeSBwdWJsaWMgZnVuY3Rpb24uCkBAIC0zNTUsNSArMzgwLDUwIEBAIHZvaWQgQ0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjphc3NlcnRJbnZhcmlhbnRzKCkKIH0KICNlbmRpZgog
CitDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OlNoYXJlZFN0YXRlOjp+U2hhcmVkU3RhdGUo
KQoreworICAgIEFTU0VSVChtX2V2aWN0ZWRCYWNraW5ncy5pc0VtcHR5KCkpOworICAgIEFTU0VS
VChtX3VuZXZpY3RlZEJhY2tpbmdzLmlzRW1wdHkoKSk7Cit9CisKK3ZvaWQgQ0NQcmlvcml0aXpl
ZFRleHR1cmVNYW5hZ2VyOjpTaGFyZWRTdGF0ZTo6YWRkQmFja2luZ09uSW1wbFRocmVhZChDQ1By
aW9yaXRpemVkVGV4dHVyZTo6QmFja2luZyogYmFja2luZykKK3sKKyAgICBBU1NFUlQoQ0NQcm94
eTo6aXNJbXBsVGhyZWFkKCkgJiYgQ0NQcm94eTo6aXNNYWluVGhyZWFkQmxvY2tlZCgpKTsKKyAg
ICBtX3VuZXZpY3RlZEJhY2tpbmdzLmFkZChiYWNraW5nKTsKK30KKwordm9pZCBDQ1ByaW9yaXRp
emVkVGV4dHVyZU1hbmFnZXI6OlNoYXJlZFN0YXRlOjpyZW1vdmVCYWNraW5nT25JbXBsVGhyZWFk
KENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nKiBiYWNraW5nLCBDQ1Jlc291cmNlUHJvdmlk
ZXIqIHJlc291cmNlUHJvdmlkZXIpCit7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVh
ZCgpICYmIENDUHJveHk6OmlzTWFpblRocmVhZEJsb2NrZWQoKSk7CisgICAgaWYgKGJhY2tpbmct
PnJlc291cmNlRGVsZXRlZCgpKSB7CisgICAgICAgIEFTU0VSVChtX2V2aWN0ZWRCYWNraW5ncy5m
aW5kKGJhY2tpbmcpICE9IG1fZXZpY3RlZEJhY2tpbmdzLmVuZCgpKTsKKyAgICAgICAgbV9ldmlj
dGVkQmFja2luZ3MucmVtb3ZlKGJhY2tpbmcpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VS
VChtX3VuZXZpY3RlZEJhY2tpbmdzLmZpbmQoYmFja2luZykgIT0gbV91bmV2aWN0ZWRCYWNraW5n
cy5lbmQoKSk7CisgICAgICAgIG1fdW5ldmljdGVkQmFja2luZ3MucmVtb3ZlKGJhY2tpbmcpOwor
ICAgICAgICBiYWNraW5nLT5kZWxldGVSZXNvdXJjZShyZXNvdXJjZVByb3ZpZGVyKTsKKyAgICB9
Cit9CisKK2Jvb2wgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpTaGFyZWRTdGF0ZTo6ZXZp
Y3RCYWNraW5nc1Jlc291cmNlc09uSW1wbFRocmVhZEFzeW5jKENDUmVzb3VyY2VQcm92aWRlciog
cmVzb3VyY2VQcm92aWRlcikKK3sKKyAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgIEFTU0VS
VChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4
KTsKKyAgICBmb3IgKEJhY2tpbmdTZXQ6Oml0ZXJhdG9yIGl0ID0gbV91bmV2aWN0ZWRCYWNraW5n
cy5iZWdpbigpOyBpdCAhPSBtX3VuZXZpY3RlZEJhY2tpbmdzLmVuZCgpOyArK2l0KSB7CisgICAg
ICAgIHJlc3VsdCA9IHRydWU7CisgICAgICAgICgqaXQpLT5kZWxldGVSZXNvdXJjZShyZXNvdXJj
ZVByb3ZpZGVyKTsKKyAgICAgICAgbV9ldmljdGVkQmFja2luZ3MuYWRkKCgqaXQpKTsKKyAgICB9
CisgICAgbV91bmV2aWN0ZWRCYWNraW5ncy5jbGVhcigpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpTaGFyZWRTdGF0ZTo6Z2V0QW5k
Q2xlYXJFdmljdGVkQmFja2luZ3MoQmFja2luZ1NldCYgZXZpY3RlZEJhY2tpbmdzKQoreworICAg
IGV2aWN0ZWRCYWNraW5ncy5jbGVhcigpOworICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7
CisgICAgZXZpY3RlZEJhY2tpbmdzLnN3YXAobV9ldmljdGVkQmFja2luZ3MpOworfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlci5oCmluZGV4IDEzZGJjNTE3NmJjZDc4ZWUyOTcwOTBhNjc2NTEyNDVmOWJkNzY0
Y2EuLmNkNjMyMjYyY2JjY2E0YTRiMTJhOGViMzE4MmY3NjQ0MDc0OTMxZWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5oCkBAIC0zMyw2ICszMyw3
IEBACiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5j
bHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2
ZXMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTc3LDggKzc4LDE5IEBAIHB1YmxpYzoKICAgICBib29sIHJlcXVlc3RMYXRlKENDUHJpb3JpdGl6
ZWRUZXh0dXJlKik7CiAKICAgICB2b2lkIHJlZHVjZU1lbW9yeShDQ1Jlc291cmNlUHJvdmlkZXIq
KTsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiByZXNvdXJjZXMgYXJlIGRlbGV0ZWQgYXMgYSBy
ZXN1bHQgb2YgdGhpcyBjYWxsLgorICAgIC8vIFRoaXMgY2FuIGJlIGNhbGxlZCBjb25jdXJyZW50
bHkgd2l0aCB0aGUgbWFpbiB0aHJlYWQgYWNjZXNzaW5nIHRoaXMKKyAgICAvLyBzdHJ1Y3R1cmUs
IGFuZCBvbmx5IHRvdWNoZXMgZGF0YSBpbiB0aGUgcXVhcmFudGluZWQgbV9zaGFyZWRTdGF0ZS4K
KyAgICBib29sIHJlZHVjZU1lbW9yeU9uSW1wbFRocmVhZEFzeW5jKENDUmVzb3VyY2VQcm92aWRl
ciopOworCisgICAgLy8gUmVtb3ZlIHRoZSBiYWNraW5ncyB3aG9zZSByZXNvdXJjZXMgd2VyZSBk
ZXN0cm95ZWQgYnkgCisgICAgLy8gcmVkdWNlTWVtb3J5T25JbXBsVGhyZWFkQXN5bmMKKyAgICB2
b2lkIGRlc3Ryb3lCYWNraW5nc0FzeW5jaHJvbm91c2x5RXZpY3RlZCgpOworCisgICAgLy8gRGVs
ZXRlIGFsbCB0ZXh0dXJlcyBhbmQgZnJtIHRoZSBpbXBsIHRocmVhZCAoYXQgdGhyZWFkIGV4aXQg
YW5kCisgICAgLy8gY29udGV4dCBsb3N0KS4KICAgICB2b2lkIGNsZWFyQWxsTWVtb3J5KENDUmVz
b3VyY2VQcm92aWRlciopOwotICAgIHZvaWQgYWxsQmFja2luZ1RleHR1cmVzV2VyZURlbGV0ZWQo
KTsKIAogICAgIHZvaWQgYWNxdWlyZUJhY2tpbmdUZXh0dXJlSWZOZWVkZWQoQ0NQcmlvcml0aXpl
ZFRleHR1cmUqLCBDQ1Jlc291cmNlUHJvdmlkZXIqKTsKIApAQCAtOTEsNiArMTAzLDcgQEAgcHVi
bGljOgogI2VuZGlmCiAKIHByaXZhdGU6CisKICAgICAvLyBDb21wYXJlIHRleHR1cmVzLiBIaWdo
ZXN0IHByaW9yaXR5IGZpcnN0LgogICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlVGV4dHVy
ZXMoQ0NQcmlvcml0aXplZFRleHR1cmUqIGEsIENDUHJpb3JpdGl6ZWRUZXh0dXJlKiBiKQogICAg
IHsKQEAgLTEwOSwxMSArMTIyLDEwIEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgQ0NQcmlvcml0
aXplZFRleHR1cmVNYW5hZ2VyKHNpemVfdCBtYXhNZW1vcnlMaW1pdEJ5dGVzLCBpbnQgbWF4VGV4
dHVyZVNpemUsIGludCBwb29sKTsKLQogICAgIHZvaWQgcmVkdWNlTWVtb3J5KHNpemVfdCBsaW1p
dCwgQ0NSZXNvdXJjZVByb3ZpZGVyKik7Ci0KICAgICBDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFj
a2luZyogY3JlYXRlQmFja2luZyhJbnRTaXplLCBHQzNEZW51bSBmb3JtYXQsIENDUmVzb3VyY2VQ
cm92aWRlciopOwotICAgIHZvaWQgZGVzdHJveUJhY2tpbmcoQ0NQcmlvcml0aXplZFRleHR1cmU6
OkJhY2tpbmcqLCBDQ1Jlc291cmNlUHJvdmlkZXIqKTsKKyAgICB2b2lkIGNsZWFyRXZpY3RlZEJh
Y2tpbmdzKCk7CisgICAgdm9pZCBkZXN0cm95QmFja2luZyhDQ1ByaW9yaXRpemVkVGV4dHVyZTo6
QmFja2luZyopOwogCiAgICAgc2l6ZV90IG1fbWF4TWVtb3J5TGltaXRCeXRlczsKICAgICB1bnNp
Z25lZCBtX3ByaW9yaXR5Q3V0b2ZmOwpAQCAtMTMyLDYgKzE0NCwzNyBAQCBwcml2YXRlOgogCiAg
ICAgVGV4dHVyZVZlY3RvciBtX3RlbXBUZXh0dXJlVmVjdG9yOwogICAgIEJhY2tpbmdWZWN0b3Ig
bV90ZW1wQmFja2luZ1ZlY3RvcjsKKworICAgIC8vIFRoaXMgc3RhdGUgdGhhdCBjYW4gYmUgY29u
Y3VycmVudGx5IGFjY2Vzc2VkIGJ5IHRoZSBtYWluIGFuZCBpbXBsIHRocmVhZCwKKyAgICAvLyBh
bmQgbmVlZHMgcHJvdGVjdGlvbiBieSBhIG11dGV4LgorICAgIGNsYXNzIFNoYXJlZFN0YXRlIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIFNoYXJlZFN0YXRlKCkgeyB9CisgICAgICAgIH5TaGFyZWRT
dGF0ZSgpOworCisgICAgICAgIC8vIENhbGxlZCBvbiB0aGUgaW1wbCB0aHJlYWQgd2hpbGUgdGhl
IG1haW4gdGhyZWFkIGlzIGJsb2NrZWQKKyAgICAgICAgdm9pZCBhZGRCYWNraW5nT25JbXBsVGhy
ZWFkKENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nKik7CisKKyAgICAgICAgLy8gQ2FsbGVk
IG9uIHRoZSBpbXBsIHRocmVhZCB3aGlsZSB0aGUgbWFpbiB0aHJlYWQgaXMgYmxvY2tlZC4gRGVs
ZXRlcworICAgICAgICAvLyB0aGUgYmFja2luZydzIHJlc291cmNlIGlmIGl0IGhhcyBub3QgYmVl
biBkZWxldGVkIGFscmVhZHkuCisgICAgICAgIHZvaWQgcmVtb3ZlQmFja2luZ09uSW1wbFRocmVh
ZChDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZyosIENDUmVzb3VyY2VQcm92aWRlciopOwor
CisgICAgICAgIC8vIENhbGxlZCBvbiB0aGUgaW1wbCB0aHJlYWQgd2hpbGUgdGhlIG1haW4gdGhy
ZWFkIG1heSBub3QgYmUKKyAgICAgICAgLy8gYmxvY2tlZAorICAgICAgICBib29sIGV2aWN0QmFj
a2luZ3NSZXNvdXJjZXNPbkltcGxUaHJlYWRBc3luYyhDQ1Jlc291cmNlUHJvdmlkZXIqKTsKKwor
ICAgICAgICAvLyBDYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkLCBwb3NzaWJseSBjb25jdXJyZW50
bHkgd2l0aCAKKyAgICAgICAgLy8gZXZpY3RCYWNraW5nc1Jlc291cmNlc09uSW1wbFRocmVhZEFz
eW5jLgorICAgICAgICAvLyBBbHNvIGNhbGxlZCBvbiB0aGUgaW1wbCB0aHJlYWQgZHVyaW5nIHRo
cmVhZC1zaHV0ZG93biBhbmQgCisgICAgICAgIC8vIGNvbnRleHQtbG9zdAorICAgICAgICB2b2lk
IGdldEFuZENsZWFyRXZpY3RlZEJhY2tpbmdzKEJhY2tpbmdTZXQmKTsKKworICAgIHByaXZhdGU6
CisgICAgICAgIE11dGV4IG1fbXV0ZXg7CisgICAgICAgIEJhY2tpbmdTZXQgbV91bmV2aWN0ZWRC
YWNraW5nczsKKyAgICAgICAgQmFja2luZ1NldCBtX2V2aWN0ZWRCYWNraW5nczsKKyAgICB9Owor
ICAgIFNoYXJlZFN0YXRlIG1fc2hhcmVkU3RhdGU7CiB9OwogCiB9IC8vIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2No
ZWR1bGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDU2NoZWR1bGVyLmNwcAppbmRleCA0ZGY1MmFlZjk2MGY2YzFhZjg1ZmYwMjU0NDllNTE3NTRj
ZjgxZjc2Li43NTRlNzlhMDBiY2QyYjYzZWI2ZDRlZDI4MTUyYzg4MTA2YzRhNDdhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NjaGVk
dWxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NTY2hlZHVsZXIuY3BwCkBAIC0xMDEsNiArMTAxLDcgQEAgdm9pZCBDQ1NjaGVkdWxlcjo6
YmVnaW5GcmFtZUFib3J0ZWQoKQogICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NTY2hlZHVsZXI6
OmJlZ2luRnJhbWVBYm9ydGVkIik7CiAgICAgbV9zdGF0ZU1hY2hpbmUuYmVnaW5GcmFtZUFib3J0
ZWQoKTsKICAgICBwcm9jZXNzU2NoZWR1bGVkQWN0aW9ucygpOworICAgIHNldE5lZWRzQ29tbWl0
KCk7CiB9CiAKIHZvaWQgQ0NTY2hlZHVsZXI6OnNldE1heEZyYW1lc1BlbmRpbmcoaW50IG1heEZy
YW1lc1BlbmRpbmcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCmluZGV4
IDY4NzZlYTIxODhiYWY2NjY4YTI5YWMzN2MxY2QzOGM4Y2I0NDFjZTkuLjE0NWFlMjk3MDkwMjQ2
ZDE0YzUzZmFhMmE3YWZhMGU0ZDMyNjkyYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhy
ZWFkUHJveHkuY3BwCkBAIC0xNTUsOSArMTU1LDkgQEAgYm9vbCBDQ1NpbmdsZVRocmVhZFByb3h5
OjpyZWNyZWF0ZUNvbnRleHQoKQogCiAgICAgYm9vbCBpbml0aWFsaXplZDsKICAgICB7CisgICAg
ICAgIERlYnVnU2NvcGVkU2V0TWFpblRocmVhZEJsb2NrZWQgbWFpblRocmVhZEJsb2NrZWQ7CiAg
ICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOwotICAgICAgICBpZiAoIW1fbGF5
ZXJUcmVlSG9zdEltcGwtPmNvbnRlbnRzVGV4dHVyZXNQdXJnZWQoKSkKLSAgICAgICAgICAgIG1f
bGF5ZXJUcmVlSG9zdC0+ZGVsZXRlQ29udGVudHNUZXh0dXJlc09uSW1wbFRocmVhZChtX2xheWVy
VHJlZUhvc3RJbXBsLT5yZXNvdXJjZVByb3ZpZGVyKCkpOworICAgICAgICBtX2xheWVyVHJlZUhv
c3QtPmRlbGV0ZUFsbENvbnRlbnRzVGV4dHVyZXNPbkltcGxUaHJlYWQobV9sYXllclRyZWVIb3N0
SW1wbC0+cmVzb3VyY2VQcm92aWRlcigpKTsKICAgICAgICAgaW5pdGlhbGl6ZWQgPSBtX2xheWVy
VHJlZUhvc3RJbXBsLT5pbml0aWFsaXplUmVuZGVyZXIoY29udGV4dC5yZWxlYXNlKCksIFVudGhy
b3R0bGVkVXBsb2FkZXIpOwogICAgICAgICBpZiAoaW5pdGlhbGl6ZWQpIHsKICAgICAgICAgICAg
IG1fUmVuZGVyZXJDYXBhYmlsaXRpZXNGb3JNYWluVGhyZWFkID0gbV9sYXllclRyZWVIb3N0SW1w
bC0+cmVuZGVyZXJDYXBhYmlsaXRpZXMoKTsKQEAgLTI2MCw5ICsyNjAsNyBAQCB2b2lkIENDU2lu
Z2xlVGhyZWFkUHJveHk6OnN0b3AoKQogICAgIHsKICAgICAgICAgRGVidWdTY29wZWRTZXRNYWlu
VGhyZWFkQmxvY2tlZCBtYWluVGhyZWFkQmxvY2tlZDsKICAgICAgICAgRGVidWdTY29wZWRTZXRJ
bXBsVGhyZWFkIGltcGw7Ci0KLSAgICAgICAgaWYgKCFtX2xheWVyVHJlZUhvc3RJbXBsLT5jb250
ZW50c1RleHR1cmVzUHVyZ2VkKCkpCi0gICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmRlbGV0
ZUNvbnRlbnRzVGV4dHVyZXNPbkltcGxUaHJlYWQobV9sYXllclRyZWVIb3N0SW1wbC0+cmVzb3Vy
Y2VQcm92aWRlcigpKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5kZWxldGVBbGxDb250ZW50
c1RleHR1cmVzT25JbXBsVGhyZWFkKG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJlc291cmNlUHJvdmlk
ZXIoKSk7CiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwuY2xlYXIoKTsKICAgICB9CiAgICAg
bV9sYXllclRyZWVIb3N0ID0gMDsKQEAgLTI3NSw2ICsyNzMsMTUgQEAgdm9pZCBDQ1NpbmdsZVRo
cmVhZFByb3h5Ojpwb3N0QW5pbWF0aW9uRXZlbnRzVG9NYWluVGhyZWFkT25JbXBsVGhyZWFkKFBh
c3NPd25QdHIKICAgICBtX2xheWVyVHJlZUhvc3QtPnNldEFuaW1hdGlvbkV2ZW50cyhldmVudHMs
IHdhbGxDbG9ja1RpbWUpOwogfQogCit2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OnJlZHVjZUNv
bnRlbnRzVGV4dHVyZXNNZW1vcnlPbkltcGxUaHJlYWQoKQoreworICAgIEFTU0VSVChDQ1Byb3h5
Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdC0+cmVkdWNlQ29udGVu
dHNUZXh0dXJlc01lbW9yeU9uSW1wbFRocmVhZChtX2xheWVyVHJlZUhvc3RJbXBsLT5yZXNvdXJj
ZVByb3ZpZGVyKCkpKSB7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPnNldENvbnRlbnRz
VGV4dHVyZXNQdXJnZWQoKTsKKyAgICAgICAgc2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsK
KyAgICB9Cit9CisKIC8vIENhbGxlZCBieSB0aGUgbGVnYWN5IHNjaGVkdWxpbmcgcGF0aCAoZS5n
LiB3aGVyZSByZW5kZXJfd2lkZ2V0IGRvZXMgdGhlIHNjaGVkdWxpbmcpCiB2b2lkIENDU2luZ2xl
VGhyZWFkUHJveHk6OmNvbXBvc2l0ZUltbWVkaWF0ZWx5KCkKIHsKQEAgLTMwMSw4ICszMDgsNyBA
QCBib29sIENDU2luZ2xlVGhyZWFkUHJveHk6OmNvbW1pdEFuZENvbXBvc2l0ZSgpCiAgICAgaWYg
KCFtX2xheWVyVHJlZUhvc3QtPmluaXRpYWxpemVSZW5kZXJlcklmTmVlZGVkKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtX2xheWVyVHJlZUhvc3RJbXBsLT5jb250ZW50c1Rl
eHR1cmVzUHVyZ2VkKCkpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZXZpY3RBbGxDb250ZW50
VGV4dHVyZXMoKTsKKyAgICBtX2xheWVyVHJlZUhvc3QtPmRlc3Ryb3lDb250ZW50c1RleHR1cmVz
RXZpY3RlZEJ5SW1wbFRocmVhZCgpOwogCiAgICAgQ0NUZXh0dXJlVXBkYXRlUXVldWUgcXVldWU7
CiAgICAgbV9sYXllclRyZWVIb3N0LT51cGRhdGVMYXllcnMocXVldWUsIG1fbGF5ZXJUcmVlSG9z
dEltcGwtPm1lbW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94
eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5n
bGVUaHJlYWRQcm94eS5oCmluZGV4IGE3M2E2YWExNzAzYzNkNGUzZGNmNzM4MzZlZGI0ZWJhMTg3
YTgwOWUuLjlmYjFhYjhkMzRjOGQ3N2I0MGQ4YzRlMzE3MjBhMWU0NDRiNjVkNzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xl
VGhyZWFkUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgKQEAgLTcyLDYgKzcyLDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpIE9WRVJSSURFIHsg
bV9sYXllclRyZWVIb3N0LT5zY2hlZHVsZUNvbXBvc2l0ZSgpOyB9CiAgICAgdmlydHVhbCB2b2lk
IHNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCkgT1ZFUlJJREUgeyBtX2xheWVyVHJlZUhvc3Qt
PnNjaGVkdWxlQ29tcG9zaXRlKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgcG9zdEFuaW1hdGlvbkV2
ZW50c1RvTWFpblRocmVhZE9uSW1wbFRocmVhZChQYXNzT3duUHRyPENDQW5pbWF0aW9uRXZlbnRz
VmVjdG9yPiwgZG91YmxlIHdhbGxDbG9ja1RpbWUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCByZWR1Y2VDb250ZW50c1RleHR1cmVzTWVtb3J5T25JbXBsVGhyZWFkKCkgT1ZFUlJJREU7CiAK
ICAgICAvLyBDYWxsZWQgYnkgdGhlIGxlZ2FjeSBwYXRoIHdoZXJlIFJlbmRlcldpZGdldCBkb2Vz
IHRoZSBzY2hlZHVsaW5nLgogICAgIHZvaWQgY29tcG9zaXRlSW1tZWRpYXRlbHkoKTsKQEAgLTEw
Miw3ICsxMDMsNyBAQCBwcml2YXRlOgogfTsKIAogLy8gRm9yIHVzZSBpbiB0aGUgc2luZ2xlLXRo
cmVhZGVkIGNhc2UuIEluIGRlYnVnIGJ1aWxkcywgaXQgcHJldGVuZHMgdGhhdCB0aGUKLS8vIGNv
ZGUgaXMgcnVubmluZyBvbiB0aGUgdGhyZWFkIHRvIHNhdGlzZnkgYXNzZXJ0aW9uIGNoZWNrcy4K
Ky8vIGNvZGUgaXMgcnVubmluZyBvbiB0aGUgaW1wbCB0aHJlYWQgdG8gc2F0aXNmeSBhc3NlcnRp
b24gY2hlY2tzLgogY2xhc3MgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIHsKIHB1YmxpYzoKICAg
ICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQoKQpAQCAtMTM3LDYgKzEzOCwxNSBAQCBwdWJsaWM6
CiAgICAgfQogfTsKIAorLy8gRm9yIHVzZSBpbiB0aGUgc2luZ2xlLXRocmVhZGVkIGNhc2UuIElu
IGRlYnVnIGJ1aWxkcywgaXQgcHJldGVuZHMgdGhhdCB0aGUKKy8vIGNvZGUgaXMgcnVubmluZyBv
biB0aGUgaW1wbCB0aHJlYWQgYW5kIHRoYXQgdGhlIG1haW4gdGhyZWFkIGlzIGJsb2NrZWQgdG8K
Ky8vIHNhdGlzZnkgYXNzZXJ0aW9uIGNoZWNrcworY2xhc3MgRGVidWdTY29wZWRTZXRJbXBsVGhy
ZWFkQW5kTWFpblRocmVhZEJsb2NrZWQgeworcHJpdmF0ZToKKyAgICBEZWJ1Z1Njb3BlZFNldElt
cGxUaHJlYWQgbV9pbXBsVGhyZWFkOworICAgIERlYnVnU2NvcGVkU2V0TWFpblRocmVhZEJsb2Nr
ZWQgbV9tYWluVGhyZWFkQmxvY2tlZDsKK307CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXIuY3Bw
CmluZGV4IDAwYTRiZmYwZTA3YmUwNzUwODVkM2M4YzMzNWEzMjVkMTBmNWEzYzcuLjJlM2E1OTdh
MGExMzExODRjZDM1ZjQ4MDc0YmU4NTYwY2I1NjU2ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZUNvbnRyb2xs
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXIuY3BwCkBAIC0xNTIsMTEgKzE1MiwxNiBAQCB2b2lk
IENDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXI6OnVwZGF0ZU1vcmVUZXh0dXJlcyhkb3VibGUgbW9u
b3RvbmljVGltZUxpbWl0KQogICAgICAgICB1cGRhdGVNb3JlVGV4dHVyZXNOb3coKTsKIH0KIAot
dm9pZCBDQ1RleHR1cmVVcGRhdGVDb250cm9sbGVyOjpkaXNjYXJkVXBsb2FkcygpCit2b2lkIEND
VGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXI6OmRpc2NhcmRBbGxVcGxvYWRzKCkKIHsKICAgICAvLyBD
Q1RleHR1cmVVcGRhdGVDb250cm9sbGVyQ2xpZW50Ojp1cGRhdGVUZXh0dXJlc0NvbXBsZXRlZCB3
aWxsIGJlCiAgICAgLy8gY2FsbGVkIHdoZW4gYWxsIHJlbWFpbmluZyB0ZXh0dXJlIGNvcGllcyBh
cmUgZG9uZS4KLSAgICBtX3F1ZXVlLT5jbGVhclVwbG9hZHMoKTsKKyAgICBtX3F1ZXVlLT5jbGVh
ckFsbFVwbG9hZHMoKTsKK30KKwordm9pZCBDQ1RleHR1cmVVcGRhdGVDb250cm9sbGVyOjpkaXNj
YXJkVXBsb2Fkc1RvRGVsZXRlZFJlc291cmNlcygpCit7CisgICAgbV9xdWV1ZS0+Y2xlYXJVcGxv
YWRzVG9EZWxldGVkUmVzb3VyY2VzKCk7CiB9CiAKIHZvaWQgQ0NUZXh0dXJlVXBkYXRlQ29udHJv
bGxlcjo6b25UaW1lckZpcmVkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZUNv
bnRyb2xsZXIuaAppbmRleCA2ZTlkZTA0ZTIyMjNkMTM2OThmZWY0OTlhN2M5OWIwZTQ4ZDUyYzNm
Li5iNzYxYTdjZWE1ZDQxMjNlZDA3YzgyMjdhMjI0ZjNhYzQ5YjEzZDlmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRh
dGVDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlQ29udHJvbGxlci5oCkBAIC01OSw3ICs1OSwxMCBAQCBw
dWJsaWM6CiAgICAgdm9pZCB1cGRhdGVNb3JlVGV4dHVyZXMoZG91YmxlIG1vbm90b25pY1RpbWVM
aW1pdCk7CiAKICAgICAvLyBEaXNjYXJkIGFsbCByZW1haW5pbmcgdXBsb2Fkcy4KLSAgICB2b2lk
IGRpc2NhcmRVcGxvYWRzKCk7CisgICAgdm9pZCBkaXNjYXJkQWxsVXBsb2FkcygpOworCisgICAg
Ly8gRGlzY2FyZCB1cGxvYWRzIHRvIHRleHR1cmVzIHRoYXQgd2VyZSBldmljdGVkIG9uIHRoZSBp
bXBsIHRocmVhZAorICAgIHZvaWQgZGlzY2FyZFVwbG9hZHNUb0RlbGV0ZWRSZXNvdXJjZXMoKTsK
IAogICAgIC8vIENDVGltZXJDbGllbnQgaW1wbGVtZW50YXRpb24uCiAgICAgdmlydHVhbCB2b2lk
IG9uVGltZXJGaXJlZCgpIE9WRVJSSURFOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlUXVldWUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRl
UXVldWUuY3BwCmluZGV4IDhmNThmY2JjYjRjYmEyNGYzNGE1YWFkNDdlZDdjOTQ2MDc0M2MxYTgu
LmM4ZTJlNzBkYjgxODJlZjgwYWI5ZGFlZjdhY2UxZTE4NzY2NDkxZGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0
ZVF1ZXVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RleHR1cmVVcGRhdGVRdWV1ZS5jcHAKQEAgLTU0LDEyICs1NCwyOSBAQCB2b2lkIEND
VGV4dHVyZVVwZGF0ZVF1ZXVlOjphcHBlbmRDb3B5KFRleHR1cmVDb3BpZXI6OlBhcmFtZXRlcnMg
Y29weSkKICAgICBtX2NvcHlFbnRyaWVzLmFwcGVuZChjb3B5KTsKIH0KIAotdm9pZCBDQ1RleHR1
cmVVcGRhdGVRdWV1ZTo6Y2xlYXJVcGxvYWRzKCkKK3ZvaWQgQ0NUZXh0dXJlVXBkYXRlUXVldWU6
OmNsZWFyQWxsVXBsb2FkcygpCiB7CiAgICAgbV9mdWxsRW50cmllcy5jbGVhcigpOwogICAgIG1f
cGFydGlhbEVudHJpZXMuY2xlYXIoKTsKIH0KIAordm9pZCBDQ1RleHR1cmVVcGRhdGVRdWV1ZTo6
Y2xlYXJVcGxvYWRzVG9EZWxldGVkUmVzb3VyY2VzKCkKK3sKKyAgICBjbGVhclVwbG9hZHNUb0Rl
bGV0ZWRSZXNvdXJjZXMobV9mdWxsRW50cmllcyk7CisgICAgY2xlYXJVcGxvYWRzVG9EZWxldGVk
UmVzb3VyY2VzKG1fcGFydGlhbEVudHJpZXMpOworfQorCit2b2lkIENDVGV4dHVyZVVwZGF0ZVF1
ZXVlOjpjbGVhclVwbG9hZHNUb0RlbGV0ZWRSZXNvdXJjZXMoRGVxdWU8VGV4dHVyZVVwbG9hZGVy
OjpQYXJhbWV0ZXJzPiYgZW50cnlRdWV1ZSkKK3sKKyAgICBEZXF1ZTxUZXh0dXJlVXBsb2FkZXI6
OlBhcmFtZXRlcnM+IHRlbXA7CisgICAgZW50cnlRdWV1ZS5zd2FwKHRlbXApOworICAgIHdoaWxl
ICh0ZW1wLnNpemUoKSkgeworICAgICAgICBUZXh0dXJlVXBsb2FkZXI6OlBhcmFtZXRlcnMgdXBs
b2FkID0gdGVtcC50YWtlRmlyc3QoKTsKKyAgICAgICAgaWYgKCF1cGxvYWQudGV4dHVyZS0+YmFj
a2luZ1dhc0FzeW5jaHJvbm91c2x5RGVsZXRlZCgpKQorICAgICAgICAgICAgZW50cnlRdWV1ZS5h
cHBlbmQodXBsb2FkKTsKKyAgICB9Cit9CisKIFRleHR1cmVVcGxvYWRlcjo6UGFyYW1ldGVycyBD
Q1RleHR1cmVVcGRhdGVRdWV1ZTo6dGFrZUZpcnN0RnVsbFVwbG9hZCgpCiB7CiAgICAgcmV0dXJu
IG1fZnVsbEVudHJpZXMudGFrZUZpcnN0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVRdWV1ZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRl
UXVldWUuaAppbmRleCBkZTYzNzM4MjFmMDhhODQ1NGFlNjQ4NWI2YWYzNzQ4M2M3ODA1ZWU2Li4z
ZDk4MDgwMGExZWIwOTY5NjMwYTJlN2MzNjU4YWNkNDNkMDYwOGY2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVR
dWV1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGV4dHVyZVVwZGF0ZVF1ZXVlLmgKQEAgLTQzLDcgKzQzLDggQEAgcHVibGljOgogICAgIHZv
aWQgYXBwZW5kUGFydGlhbFVwbG9hZChUZXh0dXJlVXBsb2FkZXI6OlBhcmFtZXRlcnMpOwogICAg
IHZvaWQgYXBwZW5kQ29weShUZXh0dXJlQ29waWVyOjpQYXJhbWV0ZXJzKTsKIAotICAgIHZvaWQg
Y2xlYXJVcGxvYWRzKCk7CisgICAgdm9pZCBjbGVhckFsbFVwbG9hZHMoKTsKKyAgICB2b2lkIGNs
ZWFyVXBsb2Fkc1RvRGVsZXRlZFJlc291cmNlcygpOwogCiAgICAgVGV4dHVyZVVwbG9hZGVyOjpQ
YXJhbWV0ZXJzIHRha2VGaXJzdEZ1bGxVcGxvYWQoKTsKICAgICBUZXh0dXJlVXBsb2FkZXI6OlBh
cmFtZXRlcnMgdGFrZUZpcnN0UGFydGlhbFVwbG9hZCgpOwpAQCAtNTYsNiArNTcsNyBAQCBwdWJs
aWM6CiAgICAgYm9vbCBoYXNNb3JlVXBkYXRlcygpIGNvbnN0OwogCiBwcml2YXRlOgorICAgIHZv
aWQgY2xlYXJVcGxvYWRzVG9EZWxldGVkUmVzb3VyY2VzKERlcXVlPFRleHR1cmVVcGxvYWRlcjo6
UGFyYW1ldGVycz4mIGVudHJ5UXVldWUpOwogICAgIERlcXVlPFRleHR1cmVVcGxvYWRlcjo6UGFy
YW1ldGVycz4gbV9mdWxsRW50cmllczsKICAgICBEZXF1ZTxUZXh0dXJlVXBsb2FkZXI6OlBhcmFt
ZXRlcnM+IG1fcGFydGlhbEVudHJpZXM7CiAgICAgRGVxdWU8VGV4dHVyZUNvcGllcjo6UGFyYW1l
dGVycz4gbV9jb3B5RW50cmllczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKaW5kZXggZDZh
MjkzOGYwM2Y2YzliNDc3MTVhMzI0MDNhODk2ZTM3YWM4YWMyZC4uYmQ2NTljM2QxYTZjYjllNWQ5
YmMyNTRmNjdiZmUyOTEwMDRlMTc4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKQEAg
LTc5LDcgKzc5LDggQEAgQ0NUaHJlYWRQcm94eTo6Q0NUaHJlYWRQcm94eShDQ0xheWVyVHJlZUhv
c3QqIGxheWVyVHJlZUhvc3QpCiAgICAgLCBtX3JlYWRiYWNrUmVxdWVzdE9uSW1wbFRocmVhZCgw
KQogICAgICwgbV9jb21taXRDb21wbGV0aW9uRXZlbnRPbkltcGxUaHJlYWQoMCkKICAgICAsIG1f
dGV4dHVyZUFjcXVpc2l0aW9uQ29tcGxldGlvbkV2ZW50T25JbXBsVGhyZWFkKDApCi0gICAgLCBt
X3Jlc2V0Q29udGVudHNUZXh0dXJlc1B1cmdlZEFmdGVyQ29tbWl0T25JbXBsVGhyZWFkKGZhbHNl
KQorICAgICwgbV9jb250ZW50c1RleHR1cmVzUHVyZ2VDb3VudCgwKQorICAgICwgbV9jb250ZW50
c1RleHR1cmVzUHVyZ2VBY2soMCkKICAgICAsIG1fbmV4dEZyYW1lSXNOZXdseUNvbW1pdHRlZEZy
YW1lT25JbXBsVGhyZWFkKGZhbHNlKQogICAgICwgbV9yZW5kZXJWU3luY0VuYWJsZWQobGF5ZXJU
cmVlSG9zdC0+c2V0dGluZ3MoKS5yZW5kZXJWU3luY0VuYWJsZWQpCiB7CkBAIC0xMDcsOSArMTA4
LDEyIEBAIGJvb2wgQ0NUaHJlYWRQcm94eTo6Y29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4
ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0KQogCiAKICAgICAvLyBQZXJmb3JtIGEgc3luY2hyb25v
dXMgY29tbWl0LgotICAgIENDQ29tcGxldGlvbkV2ZW50IGJlZ2luRnJhbWVDb21wbGV0aW9uOwot
ICAgIENDUHJveHk6OmltcGxUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRo
aXMsICZDQ1RocmVhZFByb3h5Ojpmb3JjZUJlZ2luRnJhbWVPbkltcGxUaHJlYWQsICZiZWdpbkZy
YW1lQ29tcGxldGlvbikpOwotICAgIGJlZ2luRnJhbWVDb21wbGV0aW9uLndhaXQoKTsKKyAgICB7
CisgICAgICAgIERlYnVnU2NvcGVkU2V0TWFpblRocmVhZEJsb2NrZWQgbWFpblRocmVhZEJsb2Nr
ZWQ7CisgICAgICAgIENDQ29tcGxldGlvbkV2ZW50IGJlZ2luRnJhbWVDb21wbGV0aW9uOworICAg
ICAgICBDQ1Byb3h5OjppbXBsVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0
aGlzLCAmQ0NUaHJlYWRQcm94eTo6Zm9yY2VCZWdpbkZyYW1lT25JbXBsVGhyZWFkLCAmYmVnaW5G
cmFtZUNvbXBsZXRpb24pKTsKKyAgICAgICAgYmVnaW5GcmFtZUNvbXBsZXRpb24ud2FpdCgpOwor
ICAgIH0KICAgICBtX2luQ29tcG9zaXRlQW5kUmVhZGJhY2sgPSB0cnVlOwogICAgIGJlZ2luRnJh
bWUoKTsKICAgICBtX2luQ29tcG9zaXRlQW5kUmVhZGJhY2sgPSBmYWxzZTsKQEAgLTExOCw4ICsx
MjIsMTEgQEAgYm9vbCBDQ1RocmVhZFByb3h5Ojpjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpw
aXhlbHMsIGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgUmVhZGJhY2tSZXF1ZXN0IHJlcXVlc3Q7
CiAgICAgcmVxdWVzdC5yZWN0ID0gcmVjdDsKICAgICByZXF1ZXN0LnBpeGVscyA9IHBpeGVsczsK
LSAgICBDQ1Byb3h5OjppbXBsVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0
aGlzLCAmQ0NUaHJlYWRQcm94eTo6cmVxdWVzdFJlYWRiYWNrT25JbXBsVGhyZWFkLCAmcmVxdWVz
dCkpOwotICAgIHJlcXVlc3QuY29tcGxldGlvbi53YWl0KCk7CisgICAgeworICAgICAgICBEZWJ1
Z1Njb3BlZFNldE1haW5UaHJlYWRCbG9ja2VkIG1haW5UaHJlYWRCbG9ja2VkOworICAgICAgICBD
Q1Byb3h5OjppbXBsVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAm
Q0NUaHJlYWRQcm94eTo6cmVxdWVzdFJlYWRiYWNrT25JbXBsVGhyZWFkLCAmcmVxdWVzdCkpOwor
ICAgICAgICByZXF1ZXN0LmNvbXBsZXRpb24ud2FpdCgpOworICAgIH0KICAgICByZXR1cm4gcmVx
dWVzdC5zdWNjZXNzOwogfQogCkBAIC0xNTYsNiArMTYzLDcgQEAgdm9pZCBDQ1RocmVhZFByb3h5
OjpmaW5pc2hBbGxSZW5kZXJpbmcoKQogICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQo
KSk7CiAKICAgICAvLyBNYWtlIHN1cmUgYWxsIEdMIGRyYXdpbmcgaXMgZmluaXNoZWQgb24gdGhl
IGltcGwgdGhyZWFkLgorICAgIERlYnVnU2NvcGVkU2V0TWFpblRocmVhZEJsb2NrZWQgbWFpblRo
cmVhZEJsb2NrZWQ7CiAgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKICAgICBDQ1By
b3h5OjppbXBsVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NU
aHJlYWRQcm94eTo6ZmluaXNoQWxsUmVuZGVyaW5nT25JbXBsVGhyZWFkLCAmY29tcGxldGlvbikp
OwogICAgIGNvbXBsZXRpb24ud2FpdCgpOwpAQCAtMTk0LDYgKzIwMiw3IEBAIHZvaWQgQ0NUaHJl
YWRQcm94eTo6c2V0U3VyZmFjZVJlYWR5T25JbXBsVGhyZWFkKCkKIHZvaWQgQ0NUaHJlYWRQcm94
eTo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCiB7CiAgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJD
Q1RocmVhZFByb3h5OjpzZXRWaXNpYmxlIik7CisgICAgRGVidWdTY29wZWRTZXRNYWluVGhyZWFk
QmxvY2tlZCBtYWluVGhyZWFkQmxvY2tlZDsKICAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0
aW9uOwogICAgIENDUHJveHk6OmltcGxUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRU
YXNrKHRoaXMsICZDQ1RocmVhZFByb3h5OjpzZXRWaXNpYmxlT25JbXBsVGhyZWFkLCAmY29tcGxl
dGlvbiwgdmlzaWJsZSkpOwogICAgIGNvbXBsZXRpb24ud2FpdCgpOwpAQCAtMjEyLDE0ICsyMjEs
MTcgQEAgYm9vbCBDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplUmVuZGVyZXIoKQogICAgIFRSQUNF
X0VWRU5UMCgiY2MiLCAiQ0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZVJlbmRlcmVyIik7CiAgICAg
Ly8gTWFrZSBhIGJsb2NraW5nIGNhbGwgdG8gaW5pdGlhbGl6ZVJlbmRlcmVyT25JbXBsVGhyZWFk
LiBUaGUgcmVzdWx0cyBvZiB0aGF0IGNhbGwKICAgICAvLyBhcmUgcHVzaGVkIGludG8gdGhlIGlu
aXRpYWxpemVTdWNjZWVkZWQgYW5kIGNhcGFiaWxpdGllcyBsb2NhbCB2YXJpYWJsZXMuCi0gICAg
Q0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKICAgICBib29sIGluaXRpYWxpemVTdWNjZWVk
ZWQgPSBmYWxzZTsKICAgICBSZW5kZXJlckNhcGFiaWxpdGllcyBjYXBhYmlsaXRpZXM7Ci0gICAg
Q0NQcm94eTo6aW1wbFRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywg
JkNDVGhyZWFkUHJveHk6OmluaXRpYWxpemVSZW5kZXJlck9uSW1wbFRocmVhZCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29tcGxldGlv
biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmaW5pdGlhbGl6ZVN1Y2NlZWRlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmY2FwYWJpbGl0aWVzKSk7Ci0gICAgY29tcGxldGlvbi53
YWl0KCk7CisgICAgeworICAgICAgICBEZWJ1Z1Njb3BlZFNldE1haW5UaHJlYWRCbG9ja2VkIG1h
aW5UaHJlYWRCbG9ja2VkOworICAgICAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOwor
ICAgICAgICBDQ1Byb3h5OjppbXBsVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFz
ayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZVJlbmRlcmVyT25JbXBsVGhyZWFkLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmY29tcGxldGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJmluaXRpYWxpemVTdWNjZWVkZWQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjYXBhYmlsaXRpZXMp
KTsKKyAgICAgICAgY29tcGxldGlvbi53YWl0KCk7CisgICAgfQogCiAgICAgaWYgKGluaXRpYWxp
emVTdWNjZWVkZWQpIHsKICAgICAgICAgbV9yZW5kZXJlckluaXRpYWxpemVkID0gdHJ1ZTsKQEAg
LTI0NCwxNSArMjU2LDE4IEBAIGJvb2wgQ0NUaHJlYWRQcm94eTo6cmVjcmVhdGVDb250ZXh0KCkK
ICAgICAvLyBNYWtlIGEgYmxvY2tpbmcgY2FsbCB0byByZWNyZWF0ZUNvbnRleHRPbkltcGxUaHJl
YWQuIFRoZSByZXN1bHRzIG9mIHRoYXQKICAgICAvLyBjYWxsIGFyZSBwdXNoZWQgaW50byB0aGUg
cmVjcmVhdGVTdWNjZWVkZWQgYW5kIGNhcGFiaWxpdGllcyBsb2NhbAogICAgIC8vIHZhcmlhYmxl
cy4KLSAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOwogICAgIGJvb2wgcmVjcmVhdGVT
dWNjZWVkZWQgPSBmYWxzZTsKICAgICBSZW5kZXJlckNhcGFiaWxpdGllcyBjYXBhYmlsaXRpZXM7
Ci0gICAgQ0NQcm94eTo6aW1wbFRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2so
dGhpcywgJkNDVGhyZWFkUHJveHk6OnJlY3JlYXRlQ29udGV4dE9uSW1wbFRocmVhZCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29tcGxl
dGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LmxlYWtQdHIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmcmVjcmVhdGVTdWNjZWVkZWQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhcGFiaWxpdGllcykp
OwotICAgIGNvbXBsZXRpb24ud2FpdCgpOworICAgIHsKKyAgICAgICAgRGVidWdTY29wZWRTZXRN
YWluVGhyZWFkQmxvY2tlZCBtYWluVGhyZWFkQmxvY2tlZDsKKyAgICAgICAgQ0NDb21wbGV0aW9u
RXZlbnQgY29tcGxldGlvbjsKKyAgICAgICAgQ0NQcm94eTo6aW1wbFRocmVhZCgpLT5wb3N0VGFz
ayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OnJlY3JlYXRlQ29udGV4
dE9uSW1wbFRocmVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJmNvbXBsZXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubGVha1B0cigpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
cmVjcmVhdGVTdWNjZWVkZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZjYXBhYmlsaXRpZXMpKTsKKyAgICAgICAgY29tcGxldGlv
bi53YWl0KCk7CisgICAgfQogCiAgICAgaWYgKHJlY3JlYXRlU3VjY2VlZGVkKQogICAgICAgICBt
X1JlbmRlcmVyQ2FwYWJpbGl0aWVzTWFpblRocmVhZENvcHkgPSBjYXBhYmlsaXRpZXM7CkBAIC0y
NjksNiArMjg0LDcgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjppbXBsU2lkZVJlbmRlcmluZ1N0YXRz
KENDUmVuZGVyaW5nU3RhdHMmIHN0YXRzKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CiAKKyAgICBEZWJ1Z1Njb3BlZFNldE1haW5UaHJlYWRCbG9ja2VkIG1haW5UaHJlYWRCbG9ja2Vk
OwogICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CiAgICAgQ0NQcm94eTo6aW1wbFRo
cmVhZCgpLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6
OmltcGxTaWRlUmVuZGVyaW5nU3RhdHNPbkltcGxUaHJlYWQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbXBsZXRpb24sCkBAIC0zMTQs
NyArMzMwLDcgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpkaWRMb3NlQ29udGV4dE9uSW1wbFRocmVh
ZCgpCiAgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKICAgICBUUkFDRV9FVkVOVDAoImNjIiwg
IkNDVGhyZWFkUHJveHk6OmRpZExvc2VDb250ZXh0T25JbXBsVGhyZWFkIik7CiAgICAgaWYgKG1f
Y3VycmVudFRleHR1cmVVcGRhdGVDb250cm9sbGVyT25JbXBsVGhyZWFkKQotICAgICAgICBtX2N1
cnJlbnRUZXh0dXJlVXBkYXRlQ29udHJvbGxlck9uSW1wbFRocmVhZC0+ZGlzY2FyZFVwbG9hZHMo
KTsKKyAgICAgICAgbV9jdXJyZW50VGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXJPbkltcGxUaHJlYWQt
PmRpc2NhcmRBbGxVcGxvYWRzKCk7CiAgICAgbV9zY2hlZHVsZXJPbkltcGxUaHJlYWQtPmRpZExv
c2VDb250ZXh0KCk7CiB9CiAKQEAgLTMzMyw2ICszNDksMjAgQEAgdm9pZCBDQ1RocmVhZFByb3h5
OjpvblZTeW5jUGFyYW1ldGVyc0NoYW5nZWQoZG91YmxlIG1vbm90b25pY1RpbWViYXNlLCBkb3Vi
bGUgaW4KICAgICBtX3NjaGVkdWxlck9uSW1wbFRocmVhZC0+c2V0VGltZWJhc2VBbmRJbnRlcnZh
bChtb25vdG9uaWNUaW1lYmFzZSwgaW50ZXJ2YWxJblNlY29uZHMpOwogfQogCit2b2lkIENDVGhy
ZWFkUHJveHk6OnJlZHVjZUNvbnRlbnRzVGV4dHVyZXNNZW1vcnlPbkltcGxUaHJlYWQoKQorewor
ICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7CisgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ1Ro
cmVhZFByb3h5OjpyZWR1Y2VDb250ZW50c1RleHR1cmVzTWVtb3J5T25JbXBsVGhyZWFkIik7CisK
KyAgICBpZiAobV9sYXllclRyZWVIb3N0LT5yZWR1Y2VDb250ZW50c1RleHR1cmVzTWVtb3J5T25J
bXBsVGhyZWFkKG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJlc291cmNlUHJvdmlkZXIoKSkpIHsKKyAg
ICAgIGlmIChtX2N1cnJlbnRUZXh0dXJlVXBkYXRlQ29udHJvbGxlck9uSW1wbFRocmVhZCkKKyAg
ICAgICAgICBtX2N1cnJlbnRUZXh0dXJlVXBkYXRlQ29udHJvbGxlck9uSW1wbFRocmVhZC0+ZGlz
Y2FyZFVwbG9hZHNUb0RlbGV0ZWRSZXNvdXJjZXMoKTsKKyAgICAgICAgbV9jb250ZW50c1RleHR1
cmVzUHVyZ2VDb3VudCArPSAxOworICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5zZXRDb250
ZW50c1RleHR1cmVzUHVyZ2VkKCk7CisgICAgICAgIHNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFk
KCk7CisgICAgfQorfQorCiB2b2lkIENDVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0T25JbXBs
VGhyZWFkKCkKIHsKICAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOwpAQCAtMzgxLDYgKzQxMSw3
IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6c3RhcnQoKQogICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CiAgICAgQVNTRVJUKENDUHJveHk6OmltcGxUaHJlYWQoKSk7CiAgICAgLy8gQ3JlYXRlIExh
eWVyVHJlZUhvc3RJbXBsLgorICAgIERlYnVnU2NvcGVkU2V0TWFpblRocmVhZEJsb2NrZWQgbWFp
blRocmVhZEJsb2NrZWQ7CiAgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKICAgICBD
Q1Byb3h5OjppbXBsVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAm
Q0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUltcGxPbkltcGxUaHJlYWQsICZjb21wbGV0aW9uKSk7
CiAgICAgY29tcGxldGlvbi53YWl0KCk7CkBAIC0zOTcsNyArNDI4LDYgQEAgdm9pZCBDQ1RocmVh
ZFByb3h5OjpzdG9wKCkKICAgICAvLyBTeW5jaHJvbm91c2x5IGRlbGV0ZXMgdGhlIGltcGwuCiAg
ICAgewogICAgICAgICBEZWJ1Z1Njb3BlZFNldE1haW5UaHJlYWRCbG9ja2VkIG1haW5UaHJlYWRC
bG9ja2VkOwotCiAgICAgICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CiAgICAgICAg
IENDUHJveHk6OmltcGxUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMs
ICZDQ1RocmVhZFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25JbXBsVGhyZWFkLCAmY29tcGxl
dGlvbikpOwogICAgICAgICBjb21wbGV0aW9uLndhaXQoKTsKQEAgLTQxMiw2ICs0NDIsNyBAQCB2
b2lkIENDVGhyZWFkUHJveHk6OnN0b3AoKQogCiB2b2lkIENDVGhyZWFkUHJveHk6OmZvcmNlU2Vy
aWFsaXplT25Td2FwQnVmZmVycygpCiB7CisgICAgRGVidWdTY29wZWRTZXRNYWluVGhyZWFkQmxv
Y2tlZCBtYWluVGhyZWFkQmxvY2tlZDsKICAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9u
OwogICAgIENDUHJveHk6OmltcGxUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNr
KHRoaXMsICZDQ1RocmVhZFByb3h5Ojpmb3JjZVNlcmlhbGl6ZU9uU3dhcEJ1ZmZlcnNPbkltcGxU
aHJlYWQsICZjb21wbGV0aW9uKSk7CiAgICAgY29tcGxldGlvbi53YWl0KCk7CkBAIC00NTQsNyAr
NDg1LDcgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpzY2hlZHVsZWRBY3Rpb25CZWdpbkZyYW1lKCkK
ICAgICBtX3BlbmRpbmdCZWdpbkZyYW1lUmVxdWVzdCA9IGFkb3B0UHRyKG5ldyBCZWdpbkZyYW1l
QW5kQ29tbWl0U3RhdGUoKSk7CiAgICAgbV9wZW5kaW5nQmVnaW5GcmFtZVJlcXVlc3QtPm1vbm90
b25pY0ZyYW1lQmVnaW5UaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CiAgICAg
bV9wZW5kaW5nQmVnaW5GcmFtZVJlcXVlc3QtPnNjcm9sbEluZm8gPSBtX2xheWVyVHJlZUhvc3RJ
bXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7Ci0gICAgbV9wZW5kaW5nQmVnaW5GcmFtZVJlcXVl
c3QtPmNvbnRlbnRzVGV4dHVyZXNXZXJlRGVsZXRlZCA9IG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNv
bnRlbnRzVGV4dHVyZXNQdXJnZWQoKTsKKyAgICBtX3BlbmRpbmdCZWdpbkZyYW1lUmVxdWVzdC0+
Y29udGVudHNUZXh0dXJlc1B1cmdlQWNrID0gbV9jb250ZW50c1RleHR1cmVzUHVyZ2VDb3VudDsK
ICAgICBtX3BlbmRpbmdCZWdpbkZyYW1lUmVxdWVzdC0+bWVtb3J5QWxsb2NhdGlvbkxpbWl0Qnl0
ZXMgPSBtX2xheWVyVHJlZUhvc3RJbXBsLT5tZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlcygpOwog
CiAgICAgbV9tYWluVGhyZWFkUHJveHktPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlz
LCAmQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZSkpOwpAQCAtNTIxLDggKzU1Miw3IEBAIHZvaWQg
Q0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZSgpCiAgICAgaWYgKCFtX2xheWVyVHJlZUhvc3QtPmlu
aXRpYWxpemVSZW5kZXJlcklmTmVlZGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChy
ZXF1ZXN0LT5jb250ZW50c1RleHR1cmVzV2VyZURlbGV0ZWQpCi0gICAgICAgIG1fbGF5ZXJUcmVl
SG9zdC0+ZXZpY3RBbGxDb250ZW50VGV4dHVyZXMoKTsKKyAgICBtX2xheWVyVHJlZUhvc3QtPmRl
c3Ryb3lDb250ZW50c1RleHR1cmVzRXZpY3RlZEJ5SW1wbFRocmVhZCgpOwogCiAgICAgT3duUHRy
PENDVGV4dHVyZVVwZGF0ZVF1ZXVlPiBxdWV1ZSA9IGFkb3B0UHRyKG5ldyBDQ1RleHR1cmVVcGRh
dGVRdWV1ZSk7CiAgICAgbV9sYXllclRyZWVIb3N0LT51cGRhdGVMYXllcnMoKihxdWV1ZS5nZXQo
KSksIHJlcXVlc3QtPm1lbW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzKTsKQEAgLTU0NSw5ICs1NzUs
OCBAQCB2b2lkIENDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWUoKQogICAgIHsKICAgICAgICAgVFJB
Q0VfRVZFTlQwKCJjYyIsICJjb21taXQiKTsKICAgICAgICAgRGVidWdTY29wZWRTZXRNYWluVGhy
ZWFkQmxvY2tlZCBtYWluVGhyZWFkQmxvY2tlZDsKLQogICAgICAgICBDQ0NvbXBsZXRpb25FdmVu
dCBjb21wbGV0aW9uOwotICAgICAgICBDQ1Byb3h5OjppbXBsVGhyZWFkKCktPnBvc3RUYXNrKGNy
ZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUNvbXBsZXRl
T25JbXBsVGhyZWFkLCAmY29tcGxldGlvbiwgcXVldWUucmVsZWFzZSgpLCByZXF1ZXN0LT5jb250
ZW50c1RleHR1cmVzV2VyZURlbGV0ZWQpKTsKKyAgICAgICAgQ0NQcm94eTo6aW1wbFRocmVhZCgp
LT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OmJlZ2lu
RnJhbWVDb21wbGV0ZU9uSW1wbFRocmVhZCwgJmNvbXBsZXRpb24sIHF1ZXVlLnJlbGVhc2UoKSwg
cmVxdWVzdC0+Y29udGVudHNUZXh0dXJlc1B1cmdlQWNrKSk7CiAgICAgICAgIGNvbXBsZXRpb24u
d2FpdCgpOwogICAgIH0KIApAQCAtNTU1LDcgKzU4NCw3IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6
YmVnaW5GcmFtZSgpCiAgICAgbV9sYXllclRyZWVIb3N0LT5kaWRCZWdpbkZyYW1lKCk7CiB9CiAK
LXZvaWQgQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUNvbXBsZXRlT25JbXBsVGhyZWFkKENDQ29t
cGxldGlvbkV2ZW50KiBjb21wbGV0aW9uLCBQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZVF1ZXVl
PiBxdWV1ZSwgYm9vbCBjb250ZW50c1RleHR1cmVzV2VyZURlbGV0ZWQpCit2b2lkIENDVGhyZWFk
UHJveHk6OmJlZ2luRnJhbWVDb21wbGV0ZU9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVudCog
Y29tcGxldGlvbiwgUGFzc093blB0cjxDQ1RleHR1cmVVcGRhdGVRdWV1ZT4gcXVldWUsIGludCBj
b250ZW50c1RleHR1cmVzUHVyZ2VBY2spCiB7CiAgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ1Ro
cmVhZFByb3h5OjpiZWdpbkZyYW1lQ29tcGxldGVPbkltcGxUaHJlYWQiKTsKICAgICBBU1NFUlQo
IW1fY29tbWl0Q29tcGxldGlvbkV2ZW50T25JbXBsVGhyZWFkKTsKQEAgLTU2OCwxNSArNTk3LDE3
IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUNvbXBsZXRlT25JbXBsVGhyZWFkKEND
Q29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBpZiAoIWNvbnRlbnRzVGV4dHVyZXNXZXJlRGVsZXRlZCAmJiBtX2xheWVyVHJlZUhvc3RJbXBs
LT5jb250ZW50c1RleHR1cmVzUHVyZ2VkKCkpIHsKLSAgICAgICAgLy8gV2UgcHVyZ2VkIHRoZSBj
b250ZW50IHRleHR1cmVzIG9uIHRoZSBpbXBsIHRocmVhZCBiZXR3ZWVuIHRoZSB0aW1lIHdlCi0g
ICAgICAgIC8vIHBvc3RlZCB0aGUgYmVnaW5GcmFtZSB0YXNrIGFuZCBub3csIG1lYW5pbmcgd2Ug
aGF2ZSBhIGJ1bmNoIG9mCi0gICAgICAgIC8vIHVwbG9hZHMgdGhhdCBhcmUgbm93IGludmFsaWQu
IENsZWFyIHRoZSB1cGxvYWRzICh0aGV5IGFsbCBnbyB0bwotICAgICAgICAvLyBjb250ZW50IHRl
eHR1cmVzKSwgYW5kIGtpY2sgYW5vdGhlciBjb21taXQgdG8gZmlsbCB0aGVtIGFnYWluLgotICAg
ICAgICBxdWV1ZS0+Y2xlYXJVcGxvYWRzKCk7CisgICAgbV9jb250ZW50c1RleHR1cmVzUHVyZ2VB
Y2sgPSBjb250ZW50c1RleHR1cmVzUHVyZ2VBY2s7CisgICAgaWYgKG1fY29udGVudHNUZXh0dXJl
c1B1cmdlQWNrICE9IG1fY29udGVudHNUZXh0dXJlc1B1cmdlQ291bnQpIHsKKyAgICAgICAgVFJB
Q0VfRVZFTlQwKCJjYyIsICJDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQ29tcGxldGVPbkltcGxU
aHJlYWRfcHVyZ2Vfc2luY2VfY29tbWl0Iik7CisgICAgICAgIC8vIFRoZSB1cGxvYWQgcXVldWUg
bWF5IGNvbnRhaW4gcmVmZXJlbmNlcyB0byB0ZXh0dXJlcyB0aGF0IHdlcmUgYXN5bmNocm9ub3Vz
bHkKKyAgICAgICAgLy8gZGVsZXRlZC4gUmVtb3ZlIHRoZW0uCisgICAgICAgIHF1ZXVlLT5jbGVh
clVwbG9hZHNUb0RlbGV0ZWRSZXNvdXJjZXMoKTsKKyAgICAgICAgLy8gVGhlcmUgZXhpc3QgdGV4
dHVyZXMgcHVyZ2VkIGJ5IHRoZSBpbXBsIHRocmVhZCB0aGF0IHRoZSBtYWluIHRocmVhZAorICAg
ICAgICAvLyBkb2Vzbid0IGtub3cgb2YuIFJlcXVlc3QgYSByZWNvbW1pdCwgd2hpY2ggd2lsbCBp
bmZvcm0gdGhlIG1haW4gdGhyZWFkCisgICAgICAgIC8vIG9mIHRoZSBwdXJnZWQgcmVzb3VyY2Vz
LgogICAgICAgICBzZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpOwotICAgIH0gZWxzZQotICAg
ICAgICBtX3Jlc2V0Q29udGVudHNUZXh0dXJlc1B1cmdlZEFmdGVyQ29tbWl0T25JbXBsVGhyZWFk
ID0gdHJ1ZTsKKyAgICB9CiAKICAgICBib29sIGhhc1Jlc291cmNlVXBkYXRlcyA9IHF1ZXVlLT5o
YXNNb3JlVXBkYXRlcygpOwogICAgIGlmIChoYXNSZXNvdXJjZVVwZGF0ZXMpCkBAIC02MjQsOCAr
NjU1LDggQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpzY2hlZHVsZWRBY3Rpb25Db21taXQoKQogICAg
IG1fbGF5ZXJUcmVlSG9zdC0+YmVnaW5Db21taXRPbkltcGxUaHJlYWQobV9sYXllclRyZWVIb3N0
SW1wbC5nZXQoKSk7CiAgICAgbV9sYXllclRyZWVIb3N0LT5maW5pc2hDb21taXRPbkltcGxUaHJl
YWQobV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSk7CiAKLSAgICBpZiAobV9yZXNldENvbnRlbnRz
VGV4dHVyZXNQdXJnZWRBZnRlckNvbW1pdE9uSW1wbFRocmVhZCkgewotICAgICAgICBtX3Jlc2V0
Q29udGVudHNUZXh0dXJlc1B1cmdlZEFmdGVyQ29tbWl0T25JbXBsVGhyZWFkID0gZmFsc2U7Cisg
ICAgaWYgKG1fY29udGVudHNUZXh0dXJlc1B1cmdlQWNrID09IG1fY29udGVudHNUZXh0dXJlc1B1
cmdlQ291bnQpIHsKKyAgICAgICAgLy8gVGhlIHRyZWUgbm93IHJlZmVyZW5jZXMgbm8gcHVyZ2Vk
IHRleHR1cmVzLiBBbGxvdyBpdCB0byBkcmF3IGFnYWluLgogICAgICAgICBtX2xheWVyVHJlZUhv
c3RJbXBsLT5yZXNldENvbnRlbnRzVGV4dHVyZXNQdXJnZWQoKTsKICAgICB9CiAKQEAgLTcxOSw5
ICs3NTAsMTIgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjphY3F1aXJlTGF5ZXJUZXh0dXJlcygpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NUaHJlYWRQcm94eTo6
YWNxdWlyZUxheWVyVGV4dHVyZXMiKTsKLSAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9u
OwotICAgIENDUHJveHk6OmltcGxUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNr
KHRoaXMsICZDQ1RocmVhZFByb3h5OjphY3F1aXJlTGF5ZXJUZXh0dXJlc0Zvck1haW5UaHJlYWRP
bkltcGxUaHJlYWQsICZjb21wbGV0aW9uKSk7Ci0gICAgY29tcGxldGlvbi53YWl0KCk7IC8vIEJs
b2NrIHVudGlsIGl0IGlzIHNhZmUgdG8gd3JpdGUgdG8gbGF5ZXIgdGV4dHVyZXMgZnJvbSB0aGUg
bWFpbiB0aHJlYWQuCisgICAgeworICAgICAgICBEZWJ1Z1Njb3BlZFNldE1haW5UaHJlYWRCbG9j
a2VkIG1haW5UaHJlYWRCbG9ja2VkOworICAgICAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0
aW9uOworICAgICAgICBDQ1Byb3h5OjppbXBsVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUNDVGhy
ZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6YWNxdWlyZUxheWVyVGV4dHVyZXNGb3JNYWlu
VGhyZWFkT25JbXBsVGhyZWFkLCAmY29tcGxldGlvbikpOworICAgICAgICBjb21wbGV0aW9uLndh
aXQoKTsgLy8gQmxvY2sgdW50aWwgaXQgaXMgc2FmZSB0byB3cml0ZSB0byBsYXllciB0ZXh0dXJl
cyBmcm9tIHRoZSBtYWluIHRocmVhZC4KKyAgICB9CiAKICAgICBtX3RleHR1cmVzQWNxdWlyZWQg
PSB0cnVlOwogfQpAQCAtODY5LDggKzkwMyw3IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6bGF5ZXJU
cmVlSG9zdENsb3NlZE9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvCiB7
CiAgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ1RocmVhZFByb3h5OjpsYXllclRyZWVIb3N0Q2xv
c2VkT25JbXBsVGhyZWFkIik7CiAgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKLSAgICBpZiAo
IW1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRlbnRzVGV4dHVyZXNQdXJnZWQoKSkKLSAgICAgICAg
bV9sYXllclRyZWVIb3N0LT5kZWxldGVDb250ZW50c1RleHR1cmVzT25JbXBsVGhyZWFkKG1fbGF5
ZXJUcmVlSG9zdEltcGwtPnJlc291cmNlUHJvdmlkZXIoKSk7CisgICAgbV9sYXllclRyZWVIb3N0
LT5kZWxldGVBbGxDb250ZW50c1RleHR1cmVzT25JbXBsVGhyZWFkKG1fbGF5ZXJUcmVlSG9zdElt
cGwtPnJlc291cmNlUHJvdmlkZXIoKSk7CiAgICAgbV9pbnB1dEhhbmRsZXJPbkltcGxUaHJlYWQu
Y2xlYXIoKTsKICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLmNsZWFyKCk7CiAgICAgbV9zY2hlZHVs
ZXJPbkltcGxUaHJlYWQuY2xlYXIoKTsKQEAgLTg5Miw4ICs5MjUsNyBAQCB2b2lkIENDVGhyZWFk
UHJveHk6OnJlY3JlYXRlQ29udGV4dE9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29t
cGxldGlvbiwgQwogewogICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NUaHJlYWRQcm94eTo6cmVj
cmVhdGVDb250ZXh0T25JbXBsVGhyZWFkIik7CiAgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsK
LSAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRlbnRzVGV4dHVyZXNQdXJnZWQoKSkK
LSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5kZWxldGVDb250ZW50c1RleHR1cmVzT25JbXBsVGhy
ZWFkKG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJlc291cmNlUHJvdmlkZXIoKSk7CisgICAgbV9sYXll
clRyZWVIb3N0LT5kZWxldGVBbGxDb250ZW50c1RleHR1cmVzT25JbXBsVGhyZWFkKG1fbGF5ZXJU
cmVlSG9zdEltcGwtPnJlc291cmNlUHJvdmlkZXIoKSk7CiAgICAgKnJlY3JlYXRlU3VjY2VlZGVk
ID0gbV9sYXllclRyZWVIb3N0SW1wbC0+aW5pdGlhbGl6ZVJlbmRlcmVyKGFkb3B0UHRyKGNvbnRl
eHRQdHIpLCB0ZXh0dXJlVXBsb2FkZXIpOwogICAgIGlmICgqcmVjcmVhdGVTdWNjZWVkZWQpIHsK
ICAgICAgICAgKmNhcGFiaWxpdGllcyA9IG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJlbmRlcmVyQ2Fw
YWJpbGl0aWVzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKaW5kZXggZTEyZWU3ZWMxOTA4ZDA2
M2ZjZDBlYTlkMjFjODU3NjllMzE0ODRkNS4uZjU2OTczZGMzYzhjYzI4YTE1MmFhY2VjM2M2NzBj
MTlkYmJlODEyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaApAQCAtODEsNiArODEsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCkgT1ZF
UlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCkgT1ZF
UlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHBvc3RBbmltYXRpb25FdmVudHNUb01haW5UaHJlYWRP
bkltcGxUaHJlYWQoUGFzc093blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4sIGRvdWJsZSB3
YWxsQ2xvY2tUaW1lKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVkdWNlQ29udGVudHNU
ZXh0dXJlc01lbW9yeU9uSW1wbFRocmVhZCgpIE9WRVJSSURFOwogCiAgICAgLy8gQ0NTY2hlZHVs
ZXJDbGllbnQgaW1wbGVtZW50YXRpb24KICAgICB2aXJ0dWFsIGJvb2wgY2FuRHJhdygpIE9WRVJS
SURFOwpAQCAtMTAyLDEzICsxMDMsMTMgQEAgcHJpdmF0ZToKICAgICAvLyBTZXQgb24gaW1wbCB0
aHJlYWQsIHJlYWQgb24gbWFpbiB0aHJlYWQuCiAgICAgc3RydWN0IEJlZ2luRnJhbWVBbmRDb21t
aXRTdGF0ZSB7CiAgICAgICAgIEJlZ2luRnJhbWVBbmRDb21taXRTdGF0ZSgpCi0gICAgICAgICAg
ICA6IG1vbm90b25pY0ZyYW1lQmVnaW5UaW1lKDApCisgICAgICAgICAgICA6IG1vbm90b25pY0Zy
YW1lQmVnaW5UaW1lKDApLCBjb250ZW50c1RleHR1cmVzUHVyZ2VBY2soMCkKICAgICAgICAgewog
ICAgICAgICB9CiAKICAgICAgICAgZG91YmxlIG1vbm90b25pY0ZyYW1lQmVnaW5UaW1lOwogICAg
ICAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbzsKLSAgICAgICAgYm9v
bCBjb250ZW50c1RleHR1cmVzV2VyZURlbGV0ZWQ7CisgICAgICAgIGludCBjb250ZW50c1RleHR1
cmVzUHVyZ2VBY2s7CiAgICAgICAgIHNpemVfdCBtZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlczsK
ICAgICB9OwogICAgIE93blB0cjxCZWdpbkZyYW1lQW5kQ29tbWl0U3RhdGU+IG1fcGVuZGluZ0Jl
Z2luRnJhbWVSZXF1ZXN0OwpAQCAtMTI5LDcgKzEzMCw3IEBAIHByaXZhdGU6CiAgICAgICAgIElu
dFJlY3QgcmVjdDsKICAgICB9OwogICAgIHZvaWQgZm9yY2VCZWdpbkZyYW1lT25JbXBsVGhyZWFk
KENDQ29tcGxldGlvbkV2ZW50Kik7Ci0gICAgdm9pZCBiZWdpbkZyYW1lQ29tcGxldGVPbkltcGxU
aHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqLCBQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZVF1ZXVl
PiwgYm9vbCBjb250ZW50c1RleHR1cmVzV2VyZURlbGV0ZWQpOworICAgIHZvaWQgYmVnaW5GcmFt
ZUNvbXBsZXRlT25JbXBsVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiwgUGFzc093blB0cjxDQ1Rl
eHR1cmVVcGRhdGVRdWV1ZT4sIGludCBjb250ZW50c1RleHR1cmVzUHVyZ2VBY2spOwogICAgIHZv
aWQgYmVnaW5GcmFtZUFib3J0ZWRPbkltcGxUaHJlYWQoKTsKICAgICB2b2lkIHJlcXVlc3RSZWFk
YmFja09uSW1wbFRocmVhZChSZWFkYmFja1JlcXVlc3QqKTsKICAgICB2b2lkIHJlcXVlc3RTdGFy
dFBhZ2VTY2FsZUFuaW1hdGlvbk9uSW1wbFRocmVhZChJbnRTaXplIHRhcmdldFBvc2l0aW9uLCBi
b29sIHVzZUFuY2hvciwgZmxvYXQgc2NhbGUsIGRvdWJsZSBkdXJhdGlvblNlYyk7CkBAIC0xODcs
OSArMTg4LDE0IEBAIHByaXZhdGU6CiAKICAgICBPd25QdHI8Q0NUZXh0dXJlVXBkYXRlQ29udHJv
bGxlcj4gbV9jdXJyZW50VGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXJPbkltcGxUaHJlYWQ7CiAKLSAg
ICAvLyBTZXQgd2hlbiB3ZSBuZWVkIHRvIHJlc2V0IHRoZSBjb250ZW50c1RleHR1cmVzUHVyZ2Vk
IGZsYWcgYWZ0ZXIgdGhlCi0gICAgLy8gY29tbWl0LgotICAgIGJvb2wgbV9yZXNldENvbnRlbnRz
VGV4dHVyZXNQdXJnZWRBZnRlckNvbW1pdE9uSW1wbFRocmVhZDsKKyAgICAvLyBDb3VudGVyIGlu
Y3JlbWVudGVkIGV2ZXJ5IHRpbWUgdGhlIGltcGwgdGhyZWFkIGRlbGV0ZXMgdGV4dHVyZXMsIHNl
bnQgdG8gdGhlCisgICAgLy8gbWFpbiB0aHJlYWQgd2l0aCBlYWNoIGNvbW1pdC4KKyAgICBpbnQg
bV9jb250ZW50c1RleHR1cmVzUHVyZ2VDb3VudDsKKworICAgIC8vIFZhbHVlIHRoYXQgdGhlIG1h
aW4gdGhyZWFkIHNlbmRzIGFzIGFuIGFja25vd2xlZGdlbWVudCB0byB0aGUgaW1wbCB0aHJlYWQu
CisgICAgLy8gSWYgdGhpcyBkb2VzIG5vdCBlcXVhbCBtX2NvbnRlbnRzVGV4dHVyZXNQdXJnZUNv
dW50IHRoZW4gdGhlIGltcGwgbGF5ZXIgdHJlZQorICAgIC8vIG1heSByZWZlcmVuY2UgdGV4dHVy
ZXMgdGhhdCBoYXZlIGJlZW4gcHVyZ2VkLgorICAgIGludCBtX2NvbnRlbnRzVGV4dHVyZXNQdXJn
ZUFjazsKIAogICAgIC8vIFNldCB3aGVuIHRoZSBuZXh0IGRyYXcgc2hvdWxkIHBvc3QgZGlkQ29t
bWl0QW5kRHJhd0ZyYW1lIHRvIHRoZSBtYWluIHRocmVhZC4KICAgICBib29sIG1fbmV4dEZyYW1l
SXNOZXdseUNvbW1pdHRlZEZyYW1lT25JbXBsVGhyZWFkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAppbmRleCAy
Yzg3NGU4Y2MwYzkzOGE0OTg4MjhkNjlkMDcwNWM0OTZjZTM4MTlmLi43Y2JlZThkZDAzZGQ2YTNl
NzJlZWE1OWM0ZmFmNGRlODhlYmE0NWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcApAQCAtODcsNiArODcs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFk
KCkgT1ZFUlJJREUgeyBtX2RpZFJlcXVlc3RSZWRyYXcgPSB0cnVlOyB9CiAgICAgdmlydHVhbCB2
b2lkIHNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCkgT1ZFUlJJREUgeyBtX2RpZFJlcXVlc3RD
b21taXQgPSB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIHBvc3RBbmltYXRpb25FdmVudHNUb01h
aW5UaHJlYWRPbkltcGxUaHJlYWQoUGFzc093blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4s
IGRvdWJsZSB3YWxsQ2xvY2tUaW1lKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVk
dWNlQ29udGVudHNUZXh0dXJlc01lbW9yeU9uSW1wbFRocmVhZCgpIE9WRVJSSURFIHsgfQogCiAg
ICAgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBjcmVhdGVMYXllclRyZWVIb3N0KGJv
b2wgcGFydGlhbFN3YXAsIFBhc3NPd25QdHI8Q0NHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29u
dGV4dCwgUGFzc093blB0cjxDQ0xheWVySW1wbD4gcm9vdFB0cikKICAgICB7CkBAIC0zNzczLDEy
ICszNzc0LDYgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzdXJmYWNlVGV4dHVy
ZUNhY2hpbmdOb1BhcnRpYWxTd2FwKQogICAgIH0KIH0KIAotVEVTVF9GKENDTGF5ZXJUcmVlSG9z
dEltcGxUZXN0LCByZWxlYXNlQ29udGVudHNUZXh0dXJlU2hvdWxkVHJpZ2dlckNvbW1pdCkKLXsK
LSAgICBtX2hvc3RJbXBsLT5yZWxlYXNlQ29udGVudHNUZXh0dXJlcygpOwotICAgIEVYUEVDVF9U
UlVFKG1fZGlkUmVxdWVzdENvbW1pdCk7Ci19Ci0KIHN0cnVjdCBSZW5kZXJQYXNzQ2FjaGVFbnRy
eSB7CiAgICAgbXV0YWJsZSBPd25QdHI8Q0NSZW5kZXJQYXNzPiByZW5kZXJQYXNzUHRyOwogICAg
IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LmNwcAppbmRleCA0YmNhY2Nk
YzNhOWEwNzhmZmI4ZGRmMGUxNmU4ZWQ0N2Q0YjM3NGY3Li4zODNmYTU5ODc5ZGQ0ZWJmNzQzZTdj
YzM0MzVmYTg1MGQ0OTFkZmVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QuY3BwCkBAIC0zMiw2ICszMiw3IEBA
CiAjaW5jbHVkZSAiQ0NUaWxlZExheWVyVGVzdENvbW1vbi5oIgogI2luY2x1ZGUgIkZha2VDQ0dy
YXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8cHVi
bGljL1dlYkNvbXBvc2l0b3IuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1c2luZyBu
YW1lc3BhY2UgV2ViS2l0VGVzdHM7CkBAIC00NiwxNCArNDcsMTggQEAgcHVibGljOgogICAgICAg
ICAsIG1fdGV4dHVyZUZvcm1hdChHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkKICAgICAgICAgLCBt
X2NvbnRleHQoV2ViS2l0OjpjcmVhdGVGYWtlQ0NHcmFwaGljc0NvbnRleHQoKSkKICAgICB7Cisg
ICAgICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6aW5pdGlhbGl6ZSgwKTsKICAgICAgICAgRGVi
dWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAgICAgICAgIG1fcmVzb3VyY2VQcm92
aWRlciA9IENDUmVzb3VyY2VQcm92aWRlcjo6Y3JlYXRlKG1fY29udGV4dC5nZXQoKSk7CiAgICAg
fQogCiAgICAgdmlydHVhbCB+Q0NQcmlvcml0aXplZFRleHR1cmVUZXN0KCkKICAgICB7Ci0gICAg
ICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwotICAgICAgICBtX3Jlc291
cmNlUHJvdmlkZXIuY2xlYXIoKTsKKyAgICAgICAgeworICAgICAgICAgICAgRGVidWdTY29wZWRT
ZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CisgICAgICAgICAgICBtX3Jlc291cmNlUHJvdmlkZXIu
Y2xlYXIoKTsKKyAgICAgICAgfQorICAgICAgICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6OnNodXRk
b3duKCk7CiAgICAgfQogCiAgICAgc2l6ZV90IHRleHR1cmVzTWVtb3J5U2l6ZShzaXplX3QgdGV4
dHVyZUNvdW50KQpAQCAtNjgsMTIgKzczLDEyIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgdmFsaWRh
dGVUZXh0dXJlKE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZT4mIHRleHR1cmUsIGJvb2wgcmVx
dWVzdExhdGUpCiAgICAgewotICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRo
cmVhZDsKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgIHRleHR1cmUtPnRleHR1cmVNYW5h
Z2VyKCktPmFzc2VydEludmFyaWFudHMoKTsKICNlbmRpZgogICAgICAgICBpZiAocmVxdWVzdExh
dGUpCiAgICAgICAgICAgICB0ZXh0dXJlLT5yZXF1ZXN0TGF0ZSgpOworICAgICAgICBEZWJ1Z1Nj
b3BlZFNldEltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZCBpbXBsVGhyZWFkQW5kTWFpblRo
cmVhZEJsb2NrZWQ7CiAgICAgICAgIGJvb2wgc3VjY2VzcyA9IHRleHR1cmUtPmNhbkFjcXVpcmVC
YWNraW5nVGV4dHVyZSgpOwogICAgICAgICBpZiAoc3VjY2VzcykKICAgICAgICAgICAgIHRleHR1
cmUtPmFjcXVpcmVCYWNraW5nVGV4dHVyZShyZXNvdXJjZVByb3ZpZGVyKCkpOwpAQCAtMTI4LDcg
KzEzMyw3IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHJlcXVlc3RUZXh0dXJl
RXhjZWVkaW5nTWF4TGltaXQpCiAgICAgRVhQRUNUX0VRKHRleHR1cmVzTWVtb3J5U2l6ZShtYXhU
ZXh0dXJlcyksIHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzKCkpOwogICAg
IEVYUEVDVF9MRSh0ZXh0dXJlTWFuYWdlci0+bWVtb3J5VXNlQnl0ZXMoKSwgdGV4dHVyZU1hbmFn
ZXItPm1lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMoKSk7CiAKLSAgICBEZWJ1Z1Njb3BlZFNldEltcGxU
aHJlYWQgaW1wbFRocmVhZDsKKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWRBbmRNYWluVGhy
ZWFkQmxvY2tlZCBpbXBsVGhyZWFkQW5kTWFpblRocmVhZEJsb2NrZWQ7CiAgICAgdGV4dHVyZU1h
bmFnZXItPmNsZWFyQWxsTWVtb3J5KHJlc291cmNlUHJvdmlkZXIoKSk7CiB9CiAKQEAgLTE0OSw3
ICsxNTQsNyBAQCBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCBjaGFuZ2VNZW1vcnlM
aW1pdHMpCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgKytpKQogICAg
ICAgICB2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbaV0sIGZhbHNlKTsKICAgICB7Ci0gICAgICAg
IERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOworICAgICAgICBEZWJ1Z1Njb3Bl
ZFNldEltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZCBpbXBsVGhyZWFkQW5kTWFpblRocmVh
ZEJsb2NrZWQ7CiAgICAgICAgIHRleHR1cmVNYW5hZ2VyLT5yZWR1Y2VNZW1vcnkocmVzb3VyY2VQ
cm92aWRlcigpKTsKICAgICB9CiAKQEAgLTE2Miw3ICsxNjcsNyBAQCBURVNUX0YoQ0NQcmlvcml0
aXplZFRleHR1cmVUZXN0LCBjaGFuZ2VNZW1vcnlMaW1pdHMpCiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtYXhUZXh0dXJlczsgKytpKQogICAgICAgICBFWFBFQ1RfRVEodmFsaWRhdGVUZXh0
dXJlKHRleHR1cmVzW2ldLCBmYWxzZSksIGkgPCA1KTsKICAgICB7Ci0gICAgICAgIERlYnVnU2Nv
cGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOworICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxU
aHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZCBpbXBsVGhyZWFkQW5kTWFpblRocmVhZEJsb2NrZWQ7
CiAgICAgICAgIHRleHR1cmVNYW5hZ2VyLT5yZWR1Y2VNZW1vcnkocmVzb3VyY2VQcm92aWRlcigp
KTsKICAgICB9CiAKQEAgLTE3NSwxNCArMTgwLDE0IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4
dHVyZVRlc3QsIGNoYW5nZU1lbW9yeUxpbWl0cykKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1heFRleHR1cmVzOyArK2kpCiAgICAgICAgIEVYUEVDVF9FUSh2YWxpZGF0ZVRleHR1cmUodGV4
dHVyZXNbaV0sIGZhbHNlKSwgaSA8IDQpOwogICAgIHsKLSAgICAgICAgRGVidWdTY29wZWRTZXRJ
bXBsVGhyZWFkIGltcGxUaHJlYWQ7CisgICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZEFu
ZE1haW5UaHJlYWRCbG9ja2VkIGltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZDsKICAgICAg
ICAgdGV4dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9yeShyZXNvdXJjZVByb3ZpZGVyKCkpOwogICAg
IH0KIAogICAgIEVYUEVDVF9FUSh0ZXh0dXJlc01lbW9yeVNpemUoNCksIHRleHR1cmVNYW5hZ2Vy
LT5tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzKCkpOwogICAgIEVYUEVDVF9MRSh0ZXh0dXJlTWFuYWdl
ci0+bWVtb3J5VXNlQnl0ZXMoKSwgdGV4dHVyZU1hbmFnZXItPm1lbW9yeUFib3ZlQ3V0b2ZmQnl0
ZXMoKSk7CiAKLSAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKKyAgICBE
ZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZCBpbXBsVGhyZWFkQW5k
TWFpblRocmVhZEJsb2NrZWQ7CiAgICAgdGV4dHVyZU1hbmFnZXItPmNsZWFyQWxsTWVtb3J5KHJl
c291cmNlUHJvdmlkZXIoKSk7CiB9CiAKQEAgLTI0Miw3ICsyNDcsNyBAQCBURVNUX0YoQ0NQcmlv
cml0aXplZFRleHR1cmVUZXN0LCB0ZXh0dXJlTWFuYWdlclBhcnRpYWxVcGRhdGVUZXh0dXJlcykK
ICAgICBFWFBFQ1RfRkFMU0UodGV4dHVyZXNbMl0tPmhhdmVCYWNraW5nVGV4dHVyZSgpKTsKICAg
ICBFWFBFQ1RfRkFMU0UodGV4dHVyZXNbM10tPmhhdmVCYWNraW5nVGV4dHVyZSgpKTsKIAotICAg
IERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOworICAgIERlYnVnU2NvcGVkU2V0
SW1wbFRocmVhZEFuZE1haW5UaHJlYWRCbG9ja2VkIGltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxv
Y2tlZDsKICAgICB0ZXh0dXJlTWFuYWdlci0+Y2xlYXJBbGxNZW1vcnkocmVzb3VyY2VQcm92aWRl
cigpKTsKIH0KIApAQCAtMjgyLDcgKzI4Nyw3IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVy
ZVRlc3QsIHRleHR1cmVNYW5hZ2VyUHJpb3JpdGllc0FyZUVxdWFsKQogICAgIEVYUEVDVF9FUSh0
ZXh0dXJlc01lbW9yeVNpemUoOCksIHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlBYm92ZUN1dG9mZkJ5
dGVzKCkpOwogICAgIEVYUEVDVF9MRSh0ZXh0dXJlTWFuYWdlci0+bWVtb3J5VXNlQnl0ZXMoKSwg
dGV4dHVyZU1hbmFnZXItPm1lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMoKSk7CiAKLSAgICBEZWJ1Z1Nj
b3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJl
YWRBbmRNYWluVGhyZWFkQmxvY2tlZCBpbXBsVGhyZWFkQW5kTWFpblRocmVhZEJsb2NrZWQ7CiAg
ICAgdGV4dHVyZU1hbmFnZXItPmNsZWFyQWxsTWVtb3J5KHJlc291cmNlUHJvdmlkZXIoKSk7CiB9
CiAKQEAgLTMwMiw3ICszMDcsNyBAQCBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCB0
ZXh0dXJlTWFuYWdlckRlc3Ryb3llZEZpcnN0KQogICAgIEVYUEVDVF9UUlVFKHRleHR1cmUtPmhh
dmVCYWNraW5nVGV4dHVyZSgpKTsKIAogICAgIHsKLSAgICAgICAgRGVidWdTY29wZWRTZXRJbXBs
VGhyZWFkIGltcGxUaHJlYWQ7CisgICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZEFuZE1h
aW5UaHJlYWRCbG9ja2VkIGltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZDsKICAgICAgICAg
dGV4dHVyZU1hbmFnZXItPmNsZWFyQWxsTWVtb3J5KHJlc291cmNlUHJvdmlkZXIoKSk7CiAgICAg
fQogICAgIHRleHR1cmVNYW5hZ2VyLmNsZWFyKCk7CkBAIC0zMzAsNyArMzM1LDcgQEAgVEVTVF9G
KENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgdGV4dHVyZU1vdmVkVG9OZXdNYW5hZ2VyKQogICAg
IHRleHR1cmUtPnNldFRleHR1cmVNYW5hZ2VyKDApOwogCiAgICAgewotICAgICAgICBEZWJ1Z1Nj
b3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKKyAgICAgICAgRGVidWdTY29wZWRTZXRJbXBs
VGhyZWFkQW5kTWFpblRocmVhZEJsb2NrZWQgaW1wbFRocmVhZEFuZE1haW5UaHJlYWRCbG9ja2Vk
OwogICAgICAgICB0ZXh0dXJlTWFuYWdlck9uZS0+Y2xlYXJBbGxNZW1vcnkocmVzb3VyY2VQcm92
aWRlcigpKTsKICAgICB9CiAgICAgdGV4dHVyZU1hbmFnZXJPbmUuY2xlYXIoKTsKQEAgLTM0Niw3
ICszNTEsNyBAQCBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCB0ZXh0dXJlTW92ZWRU
b05ld01hbmFnZXIpCiAgICAgRVhQRUNUX1RSVUUodGV4dHVyZS0+Y2FuQWNxdWlyZUJhY2tpbmdU
ZXh0dXJlKCkpOwogICAgIEVYUEVDVF9UUlVFKHRleHR1cmUtPmhhdmVCYWNraW5nVGV4dHVyZSgp
KTsKIAotICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOworICAgIERlYnVn
U2NvcGVkU2V0SW1wbFRocmVhZEFuZE1haW5UaHJlYWRCbG9ja2VkIGltcGxUaHJlYWRBbmRNYWlu
VGhyZWFkQmxvY2tlZDsKICAgICB0ZXh0dXJlTWFuYWdlclR3by0+Y2xlYXJBbGxNZW1vcnkocmVz
b3VyY2VQcm92aWRlcigpKTsKIH0KIApAQCAtMzkyLDcgKzM5Nyw3IEBAIFRFU1RfRihDQ1ByaW9y
aXRpemVkVGV4dHVyZVRlc3QsIHJlbmRlclN1cmZhY2VzUmVkdWNlTWVtb3J5QXZhaWxhYmxlT3V0
c2lkZVJvb3RTCiAgICAgRVhQRUNUX0VRKHRleHR1cmVzTWVtb3J5U2l6ZSg0KSwgdGV4dHVyZU1h
bmFnZXItPm1lbW9yeUZvclNlbGZNYW5hZ2VkVGV4dHVyZXMoKSk7CiAgICAgRVhQRUNUX0xFKHRl
eHR1cmVNYW5hZ2VyLT5tZW1vcnlVc2VCeXRlcygpLCB0ZXh0dXJlTWFuYWdlci0+bWVtb3J5QWJv
dmVDdXRvZmZCeXRlcygpKTsKIAotICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhy
ZWFkOworICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZEFuZE1haW5UaHJlYWRCbG9ja2VkIGlt
cGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZDsKICAgICB0ZXh0dXJlTWFuYWdlci0+Y2xlYXJB
bGxNZW1vcnkocmVzb3VyY2VQcm92aWRlcigpKTsKIH0KIApAQCAtNDI5LDcgKzQzNCw3IEBAIFRF
U1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHJlbmRlclN1cmZhY2VzUmVkdWNlTWVtb3J5
QXZhaWxhYmxlRm9yUmVxdWVzdExhCiAgICAgRVhQRUNUX0VRKHRleHR1cmVzTWVtb3J5U2l6ZSg0
KSwgdGV4dHVyZU1hbmFnZXItPm1lbW9yeUZvclNlbGZNYW5hZ2VkVGV4dHVyZXMoKSk7CiAgICAg
RVhQRUNUX0xFKHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlVc2VCeXRlcygpLCB0ZXh0dXJlTWFuYWdl
ci0+bWVtb3J5QWJvdmVDdXRvZmZCeXRlcygpKTsKIAotICAgIERlYnVnU2NvcGVkU2V0SW1wbFRo
cmVhZCBpbXBsVGhyZWFkOworICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZEFuZE1haW5UaHJl
YWRCbG9ja2VkIGltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZDsKICAgICB0ZXh0dXJlTWFu
YWdlci0+Y2xlYXJBbGxNZW1vcnkocmVzb3VyY2VQcm92aWRlcigpKTsKIH0KIApAQCAtNDY5LDcg
KzQ3NCw3IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHdoZW5SZW5kZXJTdXJm
YWNlTm90QXZhaWxhYmxlVGV4dHVyZXNBbHNvTm90QXZhCiAgICAgRVhQRUNUX0VRKHRleHR1cmVz
TWVtb3J5U2l6ZSgyKSwgdGV4dHVyZU1hbmFnZXItPm1lbW9yeUZvclNlbGZNYW5hZ2VkVGV4dHVy
ZXMoKSk7CiAgICAgRVhQRUNUX0xFKHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlVc2VCeXRlcygpLCB0
ZXh0dXJlTWFuYWdlci0+bWVtb3J5QWJvdmVDdXRvZmZCeXRlcygpKTsKIAotICAgIERlYnVnU2Nv
cGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOworICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVh
ZEFuZE1haW5UaHJlYWRCbG9ja2VkIGltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZDsKICAg
ICB0ZXh0dXJlTWFuYWdlci0+Y2xlYXJBbGxNZW1vcnkocmVzb3VyY2VQcm92aWRlcigpKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hy
b21pdW1UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNo
cm9taXVtVGVzdC5jcHAKaW5kZXggMDBlZTI4YTY4OGVhNmQyODU1NjdhMzdhMDA3MGQzNWFhMTFi
ZjcwNS4uNWUyNTMyYzYxMDc4ZmQxM2IzMzBmZmJjZDgzZmMyNDk4NjM1MTljZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRl
c3QuY3BwCkBAIC04MCwyNSArODAsNzMgQEAgcHVibGljOgogICAgICAgICAsIG1fdGV4dHVyZU1h
bmFnZXIoQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNjAqMTAyNCoxMDI0LCAx
MDI0LCBDQ1JlbmRlcmVyOjpDb250ZW50UG9vbCkpCiAgICAgICAgICwgbV9vY2NsdXNpb24oMCkK
ICAgICB7Ci0gICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwotICAg
ICAgICBtX3Jlc291cmNlUHJvdmlkZXIgPSBDQ1Jlc291cmNlUHJvdmlkZXI6OmNyZWF0ZShtX2Nv
bnRleHQuZ2V0KCkpOworICAgICAgICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6OmluaXRpYWxpemUo
MCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZEFuZE1h
aW5UaHJlYWRCbG9ja2VkIGltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZDsKKyAgICAgICAg
ICAgICAgbV9yZXNvdXJjZVByb3ZpZGVyID0gQ0NSZXNvdXJjZVByb3ZpZGVyOjpjcmVhdGUobV9j
b250ZXh0LmdldCgpKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHZpcnR1YWwgflRpbGVkTGF5
ZXJDaHJvbWl1bVRlc3QoKQogICAgIHsKLSAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFk
IGltcGxUaHJlYWQ7Ci0gICAgICAgIG1fcmVzb3VyY2VQcm92aWRlci5jbGVhcigpOworICAgICAg
ICB0ZXh0dXJlTWFuYWdlckNsZWFyQWxsTWVtb3J5KG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCksIG1f
cmVzb3VyY2VQcm92aWRlci5nZXQoKSk7CisgICAgICAgIHsKKyAgICAgICAgICAgIERlYnVnU2Nv
cGVkU2V0SW1wbFRocmVhZEFuZE1haW5UaHJlYWRCbG9ja2VkIGltcGxUaHJlYWRBbmRNYWluVGhy
ZWFkQmxvY2tlZDsKKyAgICAgICAgICAgIG1fcmVzb3VyY2VQcm92aWRlci5jbGVhcigpOworICAg
ICAgICB9CisgICAgICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6c2h1dGRvd24oKTsKICAgICB9
CiAKKyAgICAvLyBIZWxwZXIgY2xhc3NlcyBhbmQgZnVuY3Rpb25zIHRoYXQgc2V0IHRoZSBjdXJy
ZW50IHRocmVhZCB0byBiZSB0aGUgaW1wbCB0aHJlYWQKKyAgICAvLyBiZWZvcmUgZG9pbmcgdGhl
IGFjdGlvbiB0aGF0IHRoZXkgd3JhcC4KKyAgICBjbGFzcyBTY29wZWRGYWtlQ0NUaWxlZExheWVy
SW1wbCB7CisgICAgcHVibGljOgorICAgICAgICBTY29wZWRGYWtlQ0NUaWxlZExheWVySW1wbChp
bnQgaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBp
bXBsVGhyZWFkOworICAgICAgICAgICAgbV9sYXllckltcGwgPSBuZXcgRmFrZUNDVGlsZWRMYXll
ckltcGwoaWQpOworICAgICAgICB9CisgICAgICAgIH5TY29wZWRGYWtlQ0NUaWxlZExheWVySW1w
bCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBs
VGhyZWFkOworICAgICAgICAgICAgZGVsZXRlIG1fbGF5ZXJJbXBsOworICAgICAgICB9CisgICAg
ICAgIEZha2VDQ1RpbGVkTGF5ZXJJbXBsKiBnZXQoKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gbV9sYXllckltcGw7CisgICAgICAgIH0KKyAgICAgICAgRmFrZUNDVGlsZWRMYXllcklt
cGwqIG9wZXJhdG9yLT4oKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9sYXllcklt
cGw7CisgICAgICAgIH0KKyAgICBwcml2YXRlOgorICAgICAgICBGYWtlQ0NUaWxlZExheWVySW1w
bCogbV9sYXllckltcGw7CisgICAgfTsKKyAgICB2b2lkIHRleHR1cmVNYW5hZ2VyQ2xlYXJBbGxN
ZW1vcnkoQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyKiB0ZXh0dXJlTWFuYWdlciwgQ0NSZXNv
dXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyKQorICAgIHsKKyAgICAgICAgRGVidWdTY29w
ZWRTZXRJbXBsVGhyZWFkQW5kTWFpblRocmVhZEJsb2NrZWQgaW1wbFRocmVhZEFuZE1haW5UaHJl
YWRCbG9ja2VkOworICAgICAgICB0ZXh0dXJlTWFuYWdlci0+Y2xlYXJBbGxNZW1vcnkocmVzb3Vy
Y2VQcm92aWRlcik7CisgICAgfQogICAgIHZvaWQgdXBkYXRlVGV4dHVyZXMoaW50IGNvdW50ID0g
NTAwKQogICAgIHsKKyAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkQW5kTWFpblRocmVh
ZEJsb2NrZWQgaW1wbFRocmVhZEFuZE1haW5UaHJlYWRCbG9ja2VkOwogICAgICAgICBDQ1RleHR1
cmVVcGRhdGVDb250cm9sbGVyOjp1cGRhdGVUZXh0dXJlcyhtX3Jlc291cmNlUHJvdmlkZXIuZ2V0
KCksICZtX2NvcGllciwgJm1fdXBsb2FkZXIsICZtX3F1ZXVlLCBjb3VudCk7CiAgICAgfQorICAg
IHZvaWQgbGF5ZXJQdXNoUHJvcGVydGllc1RvKEZha2VUaWxlZExheWVyQ2hyb21pdW0qIGxheWVy
LCBGYWtlQ0NUaWxlZExheWVySW1wbCogbGF5ZXJJbXBsKQorICAgIHsKKyAgICAgICAgRGVidWdT
Y29wZWRTZXRJbXBsVGhyZWFkQW5kTWFpblRocmVhZEJsb2NrZWQgaW1wbFRocmVhZEFuZE1haW5U
aHJlYWRCbG9ja2VkOworICAgICAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwp
OworICAgIH0KKyAgICB2b2lkIGxheWVyVXBkYXRlKEZha2VUaWxlZExheWVyQ2hyb21pdW0qIGxh
eWVyLCBUZXN0Q0NPY2NsdXNpb25UcmFja2VyKiBvY2NsdWRlZCkKKyAgICB7CisgICAgICAgIERl
YnVnU2NvcGVkU2V0TWFpblRocmVhZCBtYWluVGhyZWFkOworICAgICAgICBsYXllci0+dXBkYXRl
KG1fcXVldWUsIG9jY2x1ZGVkLCBtX3N0YXRzKTsKKyAgICB9CiAKICAgICBib29sIHVwZGF0ZUFu
ZFB1c2goRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSogbGF5ZXIxLAotICAgICAgICAgICAgICAgICAg
ICAgICBDQ0xheWVySW1wbCogbGF5ZXJJbXBsMSwKKyAgICAgICAgICAgICAgICAgICAgICAgRmFr
ZUNDVGlsZWRMYXllckltcGwqIGxheWVySW1wbDEsCiAgICAgICAgICAgICAgICAgICAgICAgIEZh
a2VUaWxlZExheWVyQ2hyb21pdW0qIGxheWVyMiA9IDAsCi0gICAgICAgICAgICAgICAgICAgICAg
IENDTGF5ZXJJbXBsKiBsYXllckltcGwyID0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgRmFr
ZUNDVGlsZWRMYXllckltcGwqIGxheWVySW1wbDIgPSAwKQogICAgIHsKICAgICAgICAgLy8gR2V0
IHRleHR1cmVzCiAgICAgICAgIG1fdGV4dHVyZU1hbmFnZXItPmNsZWFyUHJpb3JpdGllcygpOwpA
QCAtMTIzLDkgKzE3MSw5IEBAIHB1YmxpYzoKICAgICAgICAgLy8gVXBkYXRlIHRleHR1cmVzIGFu
ZCBwdXNoLgogICAgICAgICB1cGRhdGVUZXh0dXJlcygpOwogICAgICAgICBpZiAobGF5ZXIxKQot
ICAgICAgICAgICAgbGF5ZXIxLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbDEpOworICAgICAg
ICAgICAgbGF5ZXJQdXNoUHJvcGVydGllc1RvKGxheWVyMSwgbGF5ZXJJbXBsMSk7CiAgICAgICAg
IGlmIChsYXllcjIpCi0gICAgICAgICAgICBsYXllcjItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJ
bXBsMik7CisgICAgICAgICAgICBsYXllclB1c2hQcm9wZXJ0aWVzVG8obGF5ZXIyLCBsYXllcklt
cGwyKTsKIAogICAgICAgICByZXR1cm4gbmVlZHNVcGRhdGU7CiAgICAgfQpAQCAtMTQ1LDggKzE5
Myw3IEBAIHB1YmxpYzoKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoRGlydHlU
aWxlcykKIHsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9w
dFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShtX3RleHR1cmVNYW5hZ2VyLmdldCgpKSk7
Ci0gICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7Ci0gICAgT3duUHRyPEZh
a2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5
ZXJJbXBsKDEpKSk7CisgICAgU2NvcGVkRmFrZUNDVGlsZWRMYXllckltcGwgbGF5ZXJJbXBsKDEp
OwogCiAgICAgLy8gVGhlIHRpbGUgc2l6ZSBpcyAxMDB4MTAwLCBzbyB0aGlzIGludmFsaWRhdGVz
IGFuZCB0aGVuIHBhaW50cyB0d28gdGlsZXMuCiAgICAgbGF5ZXItPnNldEJvdW5kcyhJbnRTaXpl
KDEwMCwgMjAwKSk7CkBAIC0xNzIsOCArMjE5LDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1
bVRlc3QsIHB1c2hEaXJ0eVRpbGVzKQogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1
c2hPY2NsdWRlZERpcnR5VGlsZXMpCiB7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21p
dW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0dXJl
TWFuYWdlci5nZXQoKSkpOwotICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFk
OwotICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5l
dyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOworICAgIFNjb3BlZEZha2VDQ1RpbGVkTGF5ZXJJ
bXBsIGxheWVySW1wbCgxKTsKICAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1ZGVkOwog
ICAgIG1fb2NjbHVzaW9uID0gJm9jY2x1ZGVkOwogCkBAIC0yMDksOCArMjU1LDcgQEAgVEVTVF9G
KFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hPY2NsdWRlZERpcnR5VGlsZXMpCiBURVNUX0Yo
VGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaERlbGV0ZWRUaWxlcykKIHsKICAgICBSZWZQdHI8
RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5
ZXJDaHJvbWl1bShtX3RleHR1cmVNYW5hZ2VyLmdldCgpKSk7Ci0gICAgRGVidWdTY29wZWRTZXRJ
bXBsVGhyZWFkIGltcGxUaHJlYWQ7Ci0gICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBs
YXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDEpKSk7CisgICAgU2Nv
cGVkRmFrZUNDVGlsZWRMYXllckltcGwgbGF5ZXJJbXBsKDEpOwogCiAgICAgLy8gVGhlIHRpbGUg
c2l6ZSBpcyAxMDB4MTAwLCBzbyB0aGlzIGludmFsaWRhdGVzIGFuZCB0aGVuIHBhaW50cyB0d28g
dGlsZXMuCiAgICAgbGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMjAwKSk7CkBAIC0yMjMs
MTEgKzI2OCwxMSBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaERlbGV0ZWRU
aWxlcykKICAgICBFWFBFQ1RfVFJVRShsYXllckltcGwtPmhhc1RpbGVBdCgwLCAxKSk7CiAKICAg
ICBtX3RleHR1cmVNYW5hZ2VyLT5jbGVhclByaW9yaXRpZXMoKTsKLSAgICBtX3RleHR1cmVNYW5h
Z2VyLT5jbGVhckFsbE1lbW9yeShtX3Jlc291cmNlUHJvdmlkZXIuZ2V0KCkpOworICAgIHRleHR1
cmVNYW5hZ2VyQ2xlYXJBbGxNZW1vcnkobV90ZXh0dXJlTWFuYWdlci5nZXQoKSwgbV9yZXNvdXJj
ZVByb3ZpZGVyLmdldCgpKTsKICAgICBtX3RleHR1cmVNYW5hZ2VyLT5zZXRNYXhNZW1vcnlMaW1p
dEJ5dGVzKDQqMTAyNCoxMDI0KTsKIAogICAgIC8vIFRoaXMgc2hvdWxkIGRyb3AgdGhlIHRpbGVz
IG9uIHRoZSBpbXBsIHRocmVhZC4KLSAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXllcklt
cGwuZ2V0KCkpOworICAgIGxheWVyUHVzaFByb3BlcnRpZXNUbyhsYXllci5nZXQoKSwgbGF5ZXJJ
bXBsLmdldCgpKTsKIAogICAgIC8vIFdlIHNob3VsZCBub3cgaGF2ZSBubyB0ZXh0dXJlcyBvbiB0
aGUgaW1wbCB0aHJlYWQuCiAgICAgRVhQRUNUX0ZBTFNFKGxheWVySW1wbC0+aGFzVGlsZUF0KDAs
IDApKTsKQEAgLTI0NSw4ICsyOTAsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwg
cHVzaERlbGV0ZWRUaWxlcykKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoSWRs
ZVBhaW50VGlsZXMpCiB7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVy
ID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5n
ZXQoKSkpOwotICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwotICAgIE93
blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NU
aWxlZExheWVySW1wbCgxKSkpOworICAgIFNjb3BlZEZha2VDQ1RpbGVkTGF5ZXJJbXBsIGxheWVy
SW1wbCgxKTsKIAogICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEwMC4gU2V0dXAgNXg1IHRp
bGVzIHdpdGggb25lIHZpc2libGUgdGlsZSBpbiB0aGUgY2VudGVyLgogICAgIC8vIFRoaXMgcGFp
bnRzIDEgdmlzaWJsZSBvZiB0aGUgMjUgaW52YWxpZCB0aWxlcy4KQEAgLTI4MywxMSArMzI3LDEw
IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoVGlsZXNBZnRlcklkbGVQYWlu
dEZhaWxlZCkKIHsKICAgICAvLyBTdGFydCB3aXRoIDJtYiBvZiBtZW1vcnksIGJ1dCB0aGUgdGVz
dCBpcyBnb2luZyB0byB0cnkgdG8gdXNlIGp1c3QgbW9yZSB0aGFuIDFtYiwgc28gd2UgcmVkdWNl
IHRvIDFtYiBsYXRlci4KICAgICBtX3RleHR1cmVNYW5hZ2VyLT5zZXRNYXhNZW1vcnlMaW1pdEJ5
dGVzKDIgKiAxMDI0ICogMTAyNCk7ICAgIAotICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBp
bXBsVGhyZWFkOwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllcjEgPSBh
ZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShtX3RleHR1cmVNYW5hZ2VyLmdldCgp
KSk7Ci0gICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwxKGFkb3B0UHRy
KG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOworICAgIFNjb3BlZEZha2VDQ1RpbGVkTGF5
ZXJJbXBsIGxheWVySW1wbDEoMSk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+
IGxheWVyMiA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVyZU1h
bmFnZXIuZ2V0KCkpKTsKLSAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1w
bDIoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDIpKSk7CisgICAgU2NvcGVkRmFr
ZUNDVGlsZWRMYXllckltcGwgbGF5ZXJJbXBsMigyKTsKIAogICAgIC8vIEZvciB0aGlzIHRlc3Qg
d2UgaGF2ZSB0d28gbGF5ZXJzLiBsYXllcjEgZXhoYXVzdHMgbW9zdCB0ZXh0dXJlIG1lbW9yeSwg
bGVhdmluZyByb29tIGZvciAyIG1vcmUgdGlsZXMgZnJvbQogICAgIC8vIGxheWVyMiwgYnV0IG5v
dCBhbGwgdGhyZWUgdGlsZXMuIEZpcnN0IHdlIHBhaW50IGxheWVyMSwgYW5kIG9uZSB0aWxlIGZy
b20gbGF5ZXIyLiBUaGVuIHdoZW4gd2UgaWRsZSBwYWludApAQCAtMzM3LDggKzM4MCw3IEBAIFRF
U1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoVGlsZXNBZnRlcklkbGVQYWludEZhaWxl
ZCkKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoSWRsZVBhaW50ZWRPY2NsdWRl
ZFRpbGVzKQogewogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFk
b3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkp
KTsKLSAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKLSAgICBPd25QdHI8
RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRM
YXllckltcGwoMSkpKTsKKyAgICBTY29wZWRGYWtlQ0NUaWxlZExheWVySW1wbCBsYXllckltcGwo
MSk7CiAgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdWRlZDsKICAgICBtX29jY2x1c2lv
biA9ICZvY2NsdWRlZDsKICAgICAKQEAgLTM1Nyw4ICszOTksNyBAQCBURVNUX0YoVGlsZWRMYXll
ckNocm9taXVtVGVzdCwgcHVzaElkbGVQYWludGVkT2NjbHVkZWRUaWxlcykKIFRFU1RfRihUaWxl
ZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoVGlsZXNNYXJrZWREaXJ0eUR1cmluZ1BhaW50KQogewog
ICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBG
YWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKLSAgICBEZWJ1
Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKLSAgICBPd25QdHI8RmFrZUNDVGlsZWRM
YXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMSkp
KTsKKyAgICBTY29wZWRGYWtlQ0NUaWxlZExheWVySW1wbCBsYXllckltcGwoMSk7CiAKICAgICAv
LyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAsIHNvIHRoaXMgaW52YWxpZGF0ZXMgYW5kIHRoZW4g
cGFpbnRzIHR3byB0aWxlcy4KICAgICAvLyBIb3dldmVyLCBkdXJpbmcgdGhlIHBhaW50LCB3ZSBp
bnZhbGlkYXRlIG9uZSBvZiB0aGUgdGlsZXMuIFRoaXMgc2hvdWxkCkBAIC0zNzcsOSArNDE4LDgg
QEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hUaWxlc0xheWVyTWFya2VkRGly
dHlEdXJpbmdQYWludE9uTmV4dExheWVyKQogewogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNo
cm9taXVtPiBsYXllcjEgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShtX3Rl
eHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+
IGxheWVyMiA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVyZU1h
bmFnZXIuZ2V0KCkpKTsKLSAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsK
LSAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVyMUltcGwoYWRvcHRQdHIobmV3
IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDEpKSk7Ci0gICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJ
bXBsPiBsYXllcjJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgyKSkpOwor
ICAgIFNjb3BlZEZha2VDQ1RpbGVkTGF5ZXJJbXBsIGxheWVyMUltcGwoMSk7CisgICAgU2NvcGVk
RmFrZUNDVGlsZWRMYXllckltcGwgbGF5ZXIySW1wbCgyKTsKIAogICAgIC8vIEludmFsaWRhdGUg
YSB0aWxlIG9uIGxheWVyMSwgZHVyaW5nIHVwZGF0ZSBvZiBsYXllciAyLgogICAgIGxheWVyMi0+
ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+c2V0UmVjdFRvSW52YWxpZGF0ZShJbnRSZWN0KDAs
IDUwLCAxMDAsIDUwKSwgbGF5ZXIxLmdldCgpKTsKQEAgLTQwMSw5ICs0NDEsOCBAQCBURVNUX0Yo
VGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaFRpbGVzTGF5ZXJNYXJrZWREaXJ0eUR1cmluZ1Bh
aW50T25QcmV2aW91c0xheQogewogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBs
YXllcjEgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShtX3RleHR1cmVNYW5h
Z2VyLmdldCgpKSk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyMiA9
IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVyZU1hbmFnZXIuZ2V0
KCkpKTsKLSAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKLSAgICBPd25Q
dHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVyMUltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1Rp
bGVkTGF5ZXJJbXBsKDEpKSk7Ci0gICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXll
cjJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgyKSkpOworICAgIFNjb3Bl
ZEZha2VDQ1RpbGVkTGF5ZXJJbXBsIGxheWVyMUltcGwoMSk7CisgICAgU2NvcGVkRmFrZUNDVGls
ZWRMYXllckltcGwgbGF5ZXIySW1wbCgyKTsKIAogICAgIGxheWVyMS0+ZmFrZUxheWVyVGV4dHVy
ZVVwZGF0ZXIoKS0+c2V0UmVjdFRvSW52YWxpZGF0ZShJbnRSZWN0KDAsIDUwLCAxMDAsIDUwKSwg
bGF5ZXIyLmdldCgpKTsKICAgICBsYXllcjEtPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMjAwKSk7
CkBAIC00MjQsNyArNDYzLDYgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHBhaW50
U21hbGxBbmltYXRlZExheWVyc0ltbWVkaWF0ZWx5KQogewogICAgIC8vIENyZWF0ZSBhIENDTGF5
ZXJUcmVlSG9zdCB0aGF0IGhhcyB0aGUgcmlnaHQgdmlld3BvcnRzaXplLAogICAgIC8vIHNvIHRo
ZSBsYXllciBpcyBjb25zaWRlcmVkIHNtYWxsIGVub3VnaC4KLSAgICBXZWJLaXQ6OldlYkNvbXBv
c2l0b3I6OmluaXRpYWxpemUoMCk7CiAgICAgRmFrZUNDTGF5ZXJUcmVlSG9zdENsaWVudCBmYWtl
Q0NMYXllclRyZWVIb3N0Q2xpZW50OwogICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3Q+IGNjTGF5
ZXJUcmVlSG9zdCA9IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKCZmYWtlQ0NMYXllclRyZWVIb3N0
Q2xpZW50LCBDQ0xheWVyVHJlZVNldHRpbmdzKCkpOwogCkBAIC00NDIsMTAgKzQ4MCw5IEBAIFRF
U1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwYWludFNtYWxsQW5pbWF0ZWRMYXllcnNJbW1l
ZGlhdGVseSkKICAgICAgICAgICAgIGxheWVyV2lkdGggKj0gMjsKIAogICAgICAgICBtX3RleHR1
cmVNYW5hZ2VyLT5zZXRNYXhNZW1vcnlMaW1pdEJ5dGVzKG1lbW9yeUZvckxheWVyKTsKLSAgICAg
ICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAKICAgICAgICAgUmVmUHRy
PEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExh
eWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwotICAgICAgICBPd25QdHI8RmFr
ZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXll
ckltcGwoMSkpKTsKKyAgICAgICAgU2NvcGVkRmFrZUNDVGlsZWRMYXllckltcGwgbGF5ZXJJbXBs
KDEpOwogCiAgICAgICAgIC8vIEZ1bGwgc2l6ZSBsYXllciB3aXRoIGhhbGYgYmVpbmcgdmlzaWJs
ZS4KICAgICAgICAgSW50U2l6ZSBjb250ZW50Qm91bmRzKGxheWVyV2lkdGgsIGxheWVySGVpZ2h0
KTsKQEAgLTQ2NSw3ICs1MDIsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcGFp
bnRTbWFsbEFuaW1hdGVkTGF5ZXJzSW1tZWRpYXRlbHkpCiAgICAgICAgIG1fdGV4dHVyZU1hbmFn
ZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwogICAgICAgICBsYXllci0+dXBkYXRlKG1fcXVldWUs
IDAsIG1fc3RhdHMpOwogICAgICAgICB1cGRhdGVUZXh0dXJlcygpOwotICAgICAgICBsYXllci0+
cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOworICAgICAgICBsYXllclB1c2hQcm9w
ZXJ0aWVzVG8obGF5ZXIuZ2V0KCksIGxheWVySW1wbC5nZXQoKSk7CiAKICAgICAgICAgLy8gV2Ug
c2hvdWxkIGhhdmUgYWxsIHRoZSB0aWxlcyBmb3IgdGhlIHNtYWxsIGFuaW1hdGVkIGxheWVyLgog
ICAgICAgICAvLyBXZSBzaG91bGQgc3RpbGwgaGF2ZSB0aGUgdmlzaWJsZSB0aWxlcyB3aGVuIHdl
IGRpZG4ndApAQCAtNDgzLDE0ICs1MjAsMTIgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRl
c3QsIHBhaW50U21hbGxBbmltYXRlZExheWVyc0ltbWVkaWF0ZWx5KQogICAgICAgICB9CiAgICAg
fQogICAgIGNjTGF5ZXJUcmVlSG9zdC5jbGVhcigpOwotICAgIFdlYktpdDo6V2ViQ29tcG9zaXRv
cjo6c2h1dGRvd24oKTsKIH0KIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlkbGVQ
YWludE91dE9mTWVtb3J5KQogewogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBs
YXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVyZU1hbmFn
ZXIuZ2V0KCkpKTsKLSAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKLSAg
ICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFr
ZUNDVGlsZWRMYXllckltcGwoMSkpKTsKKyAgICBTY29wZWRGYWtlQ0NUaWxlZExheWVySW1wbCBs
YXllckltcGwoMSk7CiAKICAgICAvLyBXZSBoYXZlIGVub3VnaCBtZW1vcnkgZm9yIG9ubHkgdGhl
IHZpc2libGUgcmVjdCwgc28gd2Ugd2lsbCBydW4gb3V0IG9mIG1lbW9yeSBpbiBmaXJzdCBpZGxl
IHBhaW50LgogICAgIGludCBtZW1vcnlMaW1pdCA9IDQgKiAxMDAgKiAxMDA7IC8vIDEgdGlsZXMs
IDQgYnl0ZXMgcGVyIHBpeGVsLgpAQCAtNTEzLDggKzU0OCw3IEBAIFRFU1RfRihUaWxlZExheWVy
Q2hyb21pdW1UZXN0LCBpZGxlUGFpbnRPdXRPZk1lbW9yeSkKIFRFU1RfRihUaWxlZExheWVyQ2hy
b21pdW1UZXN0LCBpZGxlUGFpbnRaZXJvU2l6ZWRMYXllcikKIHsKICAgICBSZWZQdHI8RmFrZVRp
bGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJv
bWl1bShtX3RleHR1cmVNYW5hZ2VyLmdldCgpKSk7Ci0gICAgRGVidWdTY29wZWRTZXRJbXBsVGhy
ZWFkIGltcGxUaHJlYWQ7Ci0gICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllcklt
cGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDEpKSk7CisgICAgU2NvcGVkRmFr
ZUNDVGlsZWRMYXllckltcGwgbGF5ZXJJbXBsKDEpOwogCiAgICAgYm9vbCBhbmltYXRpbmdbMl0g
PSB7ZmFsc2UsIHRydWV9OwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7CkBAIC01
NDEsOCArNTc1LDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlkbGVQYWludFpl
cm9TaXplZExheWVyKQogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlkbGVQYWludE5v
blZpc2libGVMYXllcnMpCiB7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxh
eWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdl
ci5nZXQoKSkpOwotICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwotICAg
IE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtl
Q0NUaWxlZExheWVySW1wbCgxKSkpOworICAgIFNjb3BlZEZha2VDQ1RpbGVkTGF5ZXJJbXBsIGxh
eWVySW1wbCgxKTsKIAogICAgIC8vIEFsdGVybmF0ZSBiZXR3ZWVuIG5vdCB2aXNpYmxlIGFuZCB2
aXNpYmxlLgogICAgIEludFJlY3QgdigwLCAwLCAxMDAsIDEwMCk7CkBAIC01NzIsOCArNjA1LDcg
QEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlkbGVQYWludE5vblZpc2libGVMYXll
cnMpCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgaW52YWxpZGF0ZUZyb21QcmVwYXJl
KQogewogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVm
KG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKLSAg
ICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKLSAgICBPd25QdHI8RmFrZUND
VGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllcklt
cGwoMSkpKTsKKyAgICBTY29wZWRGYWtlQ0NUaWxlZExheWVySW1wbCBsYXllckltcGwoMSk7CiAK
ICAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAsIHNvIHRoaXMgaW52YWxpZGF0ZXMgYW5k
IHRoZW4gcGFpbnRzIHR3byB0aWxlcy4KICAgICBsYXllci0+c2V0Qm91bmRzKEludFNpemUoMTAw
LCAyMDApKTsKQEAgLTYwOCw3ICs2NDAsNiBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVz
dCwgdmVyaWZ5VXBkYXRlUmVjdFdoZW5Db250ZW50Qm91bmRzQXJlU2NhbGVkKQogICAgIC8vIFRo
ZSB1cGRhdGVSZWN0ICh0aGF0IGluZGljYXRlcyB3aGF0IHdhcyBhY3R1YWxseSBwYWludGVkKSBz
aG91bGQgYmUgaW4KICAgICAvLyBsYXllciBzcGFjZSwgbm90IHRoZSBjb250ZW50IHNwYWNlLgog
ICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllcldpdGhTY2FsZWRCb3VuZHM+IGxheWVyID0gYWRvcHRS
ZWYobmV3IEZha2VUaWxlZExheWVyV2l0aFNjYWxlZEJvdW5kcyhtX3RleHR1cmVNYW5hZ2VyLmdl
dCgpKSk7Ci0gICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAKICAgICBJ
bnRSZWN0IGxheWVyQm91bmRzKDAsIDAsIDMwMCwgMjAwKTsKICAgICBJbnRSZWN0IGNvbnRlbnRC
b3VuZHMoMCwgMCwgMjAwLCAyNTApOwpAQCAtNjQ3LDggKzY3OCw3IEBAIFRFU1RfRihUaWxlZExh
eWVyQ2hyb21pdW1UZXN0LCB2ZXJpZnlVcGRhdGVSZWN0V2hlbkNvbnRlbnRCb3VuZHNBcmVTY2Fs
ZWQpCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdmVyaWZ5SW52YWxpZGF0aW9uV2hl
bkNvbnRlbnRzU2NhbGVDaGFuZ2VzKQogewogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9t
aXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVy
ZU1hbmFnZXIuZ2V0KCkpKTsKLSAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVh
ZDsKLSAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihu
ZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMSkpKTsKKyAgICBTY29wZWRGYWtlQ0NUaWxlZExheWVy
SW1wbCBsYXllckltcGwoMSk7CiAKICAgICAvLyBDcmVhdGUgYSBsYXllciB3aXRoIG9uZSB0aWxl
LgogICAgIGxheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDEwMCkpOwpAQCAtNjYzLDcgKzY5
Myw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB2ZXJpZnlJbnZhbGlkYXRpb25X
aGVuQ29udGVudHNTY2FsZUNoYW5nZXMpCiAgICAgbV90ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6
ZVRleHR1cmVzKCk7CiAgICAgbGF5ZXItPnVwZGF0ZShtX3F1ZXVlLCAwLCBtX3N0YXRzKTsKICAg
ICB1cGRhdGVUZXh0dXJlcygpOwotICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1w
bC5nZXQoKSk7CisgICAgbGF5ZXJQdXNoUHJvcGVydGllc1RvKGxheWVyLmdldCgpLCBsYXllcklt
cGwuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGxheWVySW1wbC0+aGFzVGlsZUF0KDAsIDApKTsK
ICAgICBFWFBFQ1RfRkFMU0UobGF5ZXJJbXBsLT5oYXNUaWxlQXQoMCwgMSkpOwogICAgIEVYUEVD
VF9GQUxTRShsYXllckltcGwtPmhhc1RpbGVBdCgxLCAwKSk7CkBAIC02ODAsNyArNzEwLDcgQEAg
VEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHZlcmlmeUludmFsaWRhdGlvbldoZW5Db250
ZW50c1NjYWxlQ2hhbmdlcykKICAgICBtX3RleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVy
ZXMoKTsKICAgICBsYXllci0+dXBkYXRlKG1fcXVldWUsIDAsIG1fc3RhdHMpOwogICAgIHVwZGF0
ZVRleHR1cmVzKCk7Ci0gICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgp
KTsKKyAgICBsYXllclB1c2hQcm9wZXJ0aWVzVG8obGF5ZXIuZ2V0KCksIGxheWVySW1wbC5nZXQo
KSk7CiAgICAgRVhQRUNUX1RSVUUobGF5ZXJJbXBsLT5oYXNUaWxlQXQoMCwgMCkpOwogICAgIEVY
UEVDVF9UUlVFKGxheWVySW1wbC0+aGFzVGlsZUF0KDAsIDEpKTsKICAgICBFWFBFQ1RfVFJVRShs
YXllckltcGwtPmhhc1RpbGVBdCgxLCAwKSk7CkBAIC02OTIsNyArNzIyLDcgQEAgVEVTVF9GKFRp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHZlcmlmeUludmFsaWRhdGlvbldoZW5Db250ZW50c1NjYWxl
Q2hhbmdlcykKICAgICBsYXllci0+c2V0VGV4dHVyZVByaW9yaXRpZXMobV9wcmlvcml0eUNhbGN1
bGF0b3IpOwogICAgIG1fdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwogCi0g
ICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsKKyAgICBsYXllclB1
c2hQcm9wZXJ0aWVzVG8obGF5ZXIuZ2V0KCksIGxheWVySW1wbC5nZXQoKSk7CiAgICAgRVhQRUNU
X0ZBTFNFKGxheWVySW1wbC0+aGFzVGlsZUF0KDAsIDApKTsKICAgICBFWFBFQ1RfRkFMU0UobGF5
ZXJJbXBsLT5oYXNUaWxlQXQoMCwgMSkpOwogICAgIEVYUEVDVF9GQUxTRShsYXllckltcGwtPmhh
c1RpbGVBdCgxLCAwKSk7CkBAIC03MDEsOCArNzMxLDYgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJv
bWl1bVRlc3QsIHZlcmlmeUludmFsaWRhdGlvbldoZW5Db250ZW50c1NjYWxlQ2hhbmdlcykKIAog
VEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHNraXBzRHJhd0dldHNSZXNldCkKIHsKLSAg
ICAvLyBJbml0aWFsaXplIHdpdGhvdXQgdGhyZWFkaW5nIHN1cHBvcnQuCi0gICAgV2ViS2l0OjpX
ZWJDb21wb3NpdG9yOjppbml0aWFsaXplKDApOwogICAgIEZha2VDQ0xheWVyVHJlZUhvc3RDbGll
bnQgZmFrZUNDTGF5ZXJUcmVlSG9zdENsaWVudDsKICAgICBPd25QdHI8Q0NMYXllclRyZWVIb3N0
PiBjY0xheWVyVHJlZUhvc3QgPSBDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSgmZmFrZUNDTGF5ZXJU
cmVlSG9zdENsaWVudCwgQ0NMYXllclRyZWVTZXR0aW5ncygpKTsKICAgICBBU1NFUlRfVFJVRShj
Y0xheWVyVHJlZUhvc3QtPmluaXRpYWxpemVSZW5kZXJlcklmTmVlZGVkKCkpOwpAQCAtNzQ0LDEw
ICs3NzIsOSBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgc2tpcHNEcmF3R2V0c1Jl
c2V0KQogICAgIGNjTGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKG1fcXVldWUsIG1lbW9yeUxp
bWl0KTsKICAgICBFWFBFQ1RfRkFMU0Uocm9vdExheWVyLT5za2lwc0RyYXcoKSk7CiAKLSAgICBj
Y0xheWVyVHJlZUhvc3QtPmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+Y2xlYXJBbGxNZW1vcnko
bV9yZXNvdXJjZVByb3ZpZGVyLmdldCgpKTsKKyAgICB0ZXh0dXJlTWFuYWdlckNsZWFyQWxsTWVt
b3J5KGNjTGF5ZXJUcmVlSG9zdC0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigpLCBtX3Jlc291cmNl
UHJvdmlkZXIuZ2V0KCkpOwogICAgIGNjTGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKDApOwog
ICAgIGNjTGF5ZXJUcmVlSG9zdC5jbGVhcigpOwotICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6
c2h1dGRvd24oKTsKIH0KIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHJlc2l6ZVRv
U21hbGxlcikKQEAgLTc4Myw5ICs4MTAsNiBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVz
dCwgaHVnZUxheWVyVXBkYXRlQ3Jhc2gpCiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0
LCBwYXJ0aWFsVXBkYXRlcykKIHsKLSAgICAvLyBJbml0aWFsaXplIHdpdGhvdXQgdGhyZWFkaW5n
IHN1cHBvcnQuCi0gICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjppbml0aWFsaXplKDApOwotCiAg
ICAgQ0NMYXllclRyZWVTZXR0aW5ncyBzZXR0aW5nczsKICAgICBzZXR0aW5ncy5tYXhQYXJ0aWFs
VGV4dHVyZVVwZGF0ZXMgPSA0OwogCkBAIC04MDksOCArODMzLDcgQEAgVEVTVF9GKFRpbGVkTGF5
ZXJDaHJvbWl1bVRlc3QsIHBhcnRpYWxVcGRhdGVzKQogICAgIC8vIEZ1bGwgdXBkYXRlIG9mIGFs
bCA2IHRpbGVzLgogICAgIGNjTGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKG1fcXVldWUsIHN0
ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkpOwogICAgIHsKLSAgICAgICAgRGVidWdT
Y29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7Ci0gICAgICAgIE93blB0cjxGYWtlQ0NUaWxl
ZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgx
KSkpOworICAgICAgICBTY29wZWRGYWtlQ0NUaWxlZExheWVySW1wbCBsYXllckltcGwoMSk7CiAg
ICAgICAgIHVwZGF0ZVRleHR1cmVzKDQpOwogICAgICAgICBFWFBFQ1RfRVEoNCwgbGF5ZXItPmZh
a2VMYXllclRleHR1cmVVcGRhdGVyKCktPnVwZGF0ZUNvdW50KCkpOwogICAgICAgICBFWFBFQ1Rf
VFJVRShtX3F1ZXVlLmhhc01vcmVVcGRhdGVzKCkpOwpAQCAtODE5LDcgKzg0Miw3IEBAIFRFU1Rf
RihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwYXJ0aWFsVXBkYXRlcykKICAgICAgICAgRVhQRUNU
X0VRKDIsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT51cGRhdGVDb3VudCgpKTsK
ICAgICAgICAgRVhQRUNUX0ZBTFNFKG1fcXVldWUuaGFzTW9yZVVwZGF0ZXMoKSk7CiAgICAgICAg
IGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5jbGVhclVwZGF0ZUNvdW50KCk7Ci0g
ICAgICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7CisgICAgICAg
IGxheWVyUHVzaFByb3BlcnRpZXNUbyhsYXllci5nZXQoKSwgbGF5ZXJJbXBsLmdldCgpKTsKICAg
ICB9CiAgICAgY2NMYXllclRyZWVIb3N0LT5jb21taXRDb21wbGV0ZSgpOwogCkBAIC04MjcsOCAr
ODUwLDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHBhcnRpYWxVcGRhdGVzKQog
ICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAzMDAsIDE1MCkp
OwogICAgIGNjTGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKG1fcXVldWUsIHN0ZDo6bnVtZXJp
Y19saW1pdHM8c2l6ZV90Pjo6bWF4KCkpOwogICAgIHsKLSAgICAgICAgRGVidWdTY29wZWRTZXRJ
bXBsVGhyZWFkIGltcGxUaHJlYWQ7Ci0gICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1w
bD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOworICAg
ICAgICBTY29wZWRGYWtlQ0NUaWxlZExheWVySW1wbCBsYXllckltcGwoMSk7CiAgICAgICAgIHVw
ZGF0ZVRleHR1cmVzKDQpOwogICAgICAgICBFWFBFQ1RfRVEoMywgbGF5ZXItPmZha2VMYXllclRl
eHR1cmVVcGRhdGVyKCktPnVwZGF0ZUNvdW50KCkpOwogICAgICAgICBFWFBFQ1RfVFJVRShtX3F1
ZXVlLmhhc01vcmVVcGRhdGVzKCkpOwpAQCAtODM3LDE1ICs4NTksMTQgQEAgVEVTVF9GKFRpbGVk
TGF5ZXJDaHJvbWl1bVRlc3QsIHBhcnRpYWxVcGRhdGVzKQogICAgICAgICBFWFBFQ1RfRVEoMywg
bGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnVwZGF0ZUNvdW50KCkpOwogICAgICAg
ICBFWFBFQ1RfRkFMU0UobV9xdWV1ZS5oYXNNb3JlVXBkYXRlcygpKTsKICAgICAgICAgbGF5ZXIt
PmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPmNsZWFyVXBkYXRlQ291bnQoKTsKLSAgICAgICAg
bGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsKKyAgICAgICAgbGF5ZXJQ
dXNoUHJvcGVydGllc1RvKGxheWVyLmdldCgpLCBsYXllckltcGwuZ2V0KCkpOwogICAgIH0KICAg
ICBjY0xheWVyVHJlZUhvc3QtPmNvbW1pdENvbXBsZXRlKCk7CiAKICAgICAvLyBQYXJ0aWFsIHVw
ZGF0ZSBvZiA2IHRpbGVzLgogICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoSW50UmVj
dCg1MCwgNTAsIDIwMCwgMTAwKSk7CiAgICAgewotICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxU
aHJlYWQgaW1wbFRocmVhZDsKLSAgICAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBs
YXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDEpKSk7CisgICAgICAg
IFNjb3BlZEZha2VDQ1RpbGVkTGF5ZXJJbXBsIGxheWVySW1wbCgxKTsKICAgICAgICAgY2NMYXll
clRyZWVIb3N0LT51cGRhdGVMYXllcnMobV9xdWV1ZSwgc3RkOjpudW1lcmljX2xpbWl0czxzaXpl
X3Q+OjptYXgoKSk7CiAgICAgICAgIHVwZGF0ZVRleHR1cmVzKDQpOwogICAgICAgICBFWFBFQ1Rf
RVEoMiwgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnVwZGF0ZUNvdW50KCkpOwpA
QCAtODU1LDI0ICs4NzYsMjIgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHBhcnRp
YWxVcGRhdGVzKQogICAgICAgICBFWFBFQ1RfRVEoNCwgbGF5ZXItPmZha2VMYXllclRleHR1cmVV
cGRhdGVyKCktPnVwZGF0ZUNvdW50KCkpOwogICAgICAgICBFWFBFQ1RfRkFMU0UobV9xdWV1ZS5o
YXNNb3JlVXBkYXRlcygpKTsKICAgICAgICAgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVy
KCktPmNsZWFyVXBkYXRlQ291bnQoKTsKLSAgICAgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8o
bGF5ZXJJbXBsLmdldCgpKTsKKyAgICAgICAgbGF5ZXJQdXNoUHJvcGVydGllc1RvKGxheWVyLmdl
dCgpLCBsYXllckltcGwuZ2V0KCkpOwogICAgIH0KICAgICBjY0xheWVyVHJlZUhvc3QtPmNvbW1p
dENvbXBsZXRlKCk7CiAKICAgICAvLyBDaGVja2VyYm9hcmQgYWxsIHRpbGVzLgogICAgIGxheWVy
LT5pbnZhbGlkYXRlQ29udGVudFJlY3QoSW50UmVjdCgwLCAwLCAzMDAsIDIwMCkpOwogICAgIHsK
LSAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7Ci0gICAgICAgIE93
blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NU
aWxlZExheWVySW1wbCgxKSkpOwotICAgICAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXll
ckltcGwuZ2V0KCkpOworICAgICAgICBTY29wZWRGYWtlQ0NUaWxlZExheWVySW1wbCBsYXllcklt
cGwoMSk7CisgICAgICAgIGxheWVyUHVzaFByb3BlcnRpZXNUbyhsYXllci5nZXQoKSwgbGF5ZXJJ
bXBsLmdldCgpKTsKICAgICB9CiAgICAgY2NMYXllclRyZWVIb3N0LT5jb21taXRDb21wbGV0ZSgp
OwogCiAgICAgLy8gUGFydGlhbCB1cGRhdGUgb2YgNiBjaGVja2VyYm9hcmQgdGlsZXMuCiAgICAg
bGF5ZXItPmludmFsaWRhdGVDb250ZW50UmVjdChJbnRSZWN0KDUwLCA1MCwgMjAwLCAxMDApKTsK
ICAgICB7Ci0gICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwotICAg
ICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcg
RmFrZUNDVGlsZWRMYXllckltcGwoMSkpKTsKKyAgICAgICAgU2NvcGVkRmFrZUNDVGlsZWRMYXll
ckltcGwgbGF5ZXJJbXBsKDEpOwogICAgICAgICBjY0xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVy
cyhtX3F1ZXVlLCBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpKTsKICAgICAgICAg
dXBkYXRlVGV4dHVyZXMoNCk7CiAgICAgICAgIEVYUEVDVF9FUSg0LCBsYXllci0+ZmFrZUxheWVy
VGV4dHVyZVVwZGF0ZXIoKS0+dXBkYXRlQ291bnQoKSk7CkBAIC04ODIsMzEgKzkwMSwyNiBAQCBU
RVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcGFydGlhbFVwZGF0ZXMpCiAgICAgICAgIEVY
UEVDVF9FUSgyLCBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+dXBkYXRlQ291bnQo
KSk7CiAgICAgICAgIEVYUEVDVF9GQUxTRShtX3F1ZXVlLmhhc01vcmVVcGRhdGVzKCkpOwogICAg
ICAgICBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+Y2xlYXJVcGRhdGVDb3VudCgp
OwotICAgICAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOworICAg
ICAgICBsYXllclB1c2hQcm9wZXJ0aWVzVG8obGF5ZXIuZ2V0KCksIGxheWVySW1wbC5nZXQoKSk7
CiAgICAgfQogICAgIGNjTGF5ZXJUcmVlSG9zdC0+Y29tbWl0Q29tcGxldGUoKTsKIAogICAgIC8v
IFBhcnRpYWwgdXBkYXRlIG9mIDQgdGlsZXMuCiAgICAgbGF5ZXItPmludmFsaWRhdGVDb250ZW50
UmVjdChJbnRSZWN0KDUwLCA1MCwgMTAwLCAxMDApKTsKICAgICB7Ci0gICAgICAgIERlYnVnU2Nv
cGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwotICAgICAgICBPd25QdHI8RmFrZUNDVGlsZWRM
YXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMSkp
KTsKKyAgICAgICAgU2NvcGVkRmFrZUNDVGlsZWRMYXllckltcGwgbGF5ZXJJbXBsKDEpOwogICAg
ICAgICBjY0xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVycyhtX3F1ZXVlLCBzdGQ6Om51bWVyaWNf
bGltaXRzPHNpemVfdD46Om1heCgpKTsKICAgICAgICAgdXBkYXRlVGV4dHVyZXMoNCk7CiAgICAg
ICAgIEVYUEVDVF9FUSg0LCBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+dXBkYXRl
Q291bnQoKSk7CiAgICAgICAgIEVYUEVDVF9GQUxTRShtX3F1ZXVlLmhhc01vcmVVcGRhdGVzKCkp
OwogICAgICAgICBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+Y2xlYXJVcGRhdGVD
b3VudCgpOwotICAgICAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkp
OworICAgICAgICBsYXllclB1c2hQcm9wZXJ0aWVzVG8obGF5ZXIuZ2V0KCksIGxheWVySW1wbC5n
ZXQoKSk7CiAgICAgfQogICAgIGNjTGF5ZXJUcmVlSG9zdC0+Y29tbWl0Q29tcGxldGUoKTsKIAot
ICAgIHsKLSAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7Ci0gICAg
ICAgIGNjTGF5ZXJUcmVlSG9zdC0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigpLT5jbGVhckFsbE1l
bW9yeShtX3Jlc291cmNlUHJvdmlkZXIuZ2V0KCkpOwotICAgIH0KKyAgICB0ZXh0dXJlTWFuYWdl
ckNsZWFyQWxsTWVtb3J5KGNjTGF5ZXJUcmVlSG9zdC0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigp
LCBtX3Jlc291cmNlUHJvdmlkZXIuZ2V0KCkpOwogICAgIGNjTGF5ZXJUcmVlSG9zdC0+c2V0Um9v
dExheWVyKDApOwogICAgIGNjTGF5ZXJUcmVlSG9zdC5jbGVhcigpOwotICAgIFdlYktpdDo6V2Vi
Q29tcG9zaXRvcjo6c2h1dGRvd24oKTsKIH0KIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRl
c3QsIHRpbGVzUGFpbnRlZFdpdGhvdXRPY2NsdXNpb24pCkBAIC0xMDUxLDcgKzEwNjUsNiBAQCBU
RVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNOb3RQYWludGVkV2l0aG91dEludmFs
aWRhdGlvbikKICAgICBsYXllci0+dXBkYXRlKG1fcXVldWUsICZvY2NsdWRlZCwgbV9zdGF0cyk7
CiAgICAgRVhQRUNUX0VRKDM2LTMsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5w
cmVwYXJlUmVjdENvdW50KCkpOwogICAgIHsKLSAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhy
ZWFkIGltcGxUaHJlYWQ7CiAgICAgICAgIHVwZGF0ZVRleHR1cmVzKCk7CiAgICAgfQogCkBAIC0x
MTc4LDcgKzExOTEsNiBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdmlzaWJsZUNv
bnRlbnRPcGFxdWVSZWdpb24pCiB7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+
IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFu
YWdlci5nZXQoKSkpOwogICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVkZWQ7Ci0gICAg
RGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAKICAgICAvLyBUaGUgdGlsZSBz
aXplIGlzIDEwMHgxMDAsIHNvIHRoaXMgaW52YWxpZGF0ZXMgYW5kIHRoZW4gcGFpbnRzIHR3byB0
aWxlcyBpbiB2YXJpb3VzIHdheXMuCiAKQEAgLTEyNzEsOCArMTI4Myw3IEBAIFRFU1RfRihUaWxl
ZExheWVyQ2hyb21pdW1UZXN0LCBwaXhlbHNQYWludGVkTWV0cmljcykKIHsKICAgICBSZWZQdHI8
RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5
ZXJDaHJvbWl1bShtX3RleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgVGVzdENDT2NjbHVzaW9u
VHJhY2tlciBvY2NsdWRlZDsKLSAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVh
ZDsKLQorICAgIAogICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEwMCwgc28gdGhpcyBpbnZh
bGlkYXRlcyBhbmQgdGhlbiBwYWludHMgdHdvIHRpbGVzIGluIHZhcmlvdXMgd2F5cy4KIAogICAg
IEludFJlY3Qgb3BhcXVlUGFpbnRSZWN0OwpAQCAtMTMyMiw5ICsxMzMzLDYgQEAgVEVTVF9GKFRp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHBpeGVsc1BhaW50ZWRNZXRyaWNzKQogCiBURVNUX0YoVGls
ZWRMYXllckNocm9taXVtVGVzdCwgZG9udEFsbG9jYXRlQ29udGVudHNXaGVuVGFyZ2V0U3VyZmFj
ZUNhbnRCZUFsbG9jYXRlZCkKIHsKLSAgICAvLyBJbml0aWFsaXplIHdpdGhvdXQgdGhyZWFkaW5n
IHN1cHBvcnQuCi0gICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjppbml0aWFsaXplKDApOwotCiAg
ICAgLy8gVGlsZSBzaXplIGlzIDEwMHgxMDAuCiAgICAgSW50UmVjdCByb290UmVjdCgwLCAwLCAz
MDAsIDIwMCk7CiAgICAgSW50UmVjdCBjaGlsZFJlY3QoMCwgMCwgMzAwLCAxMDApOwpAQCAtMTM3
Myw3ICsxMzgxLDYgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGRvbnRBbGxvY2F0
ZUNvbnRlbnRzV2hlblRhcmdldFN1cmZhY2VDYW50QmVBbGxvY2EKICAgICBjaGlsZDItPmludmFs
aWRhdGVDb250ZW50UmVjdChjaGlsZDJSZWN0KTsKICAgICBjY0xheWVyVHJlZUhvc3QtPnVwZGF0
ZUxheWVycyhtX3F1ZXVlLCBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpKTsKICAg
ICB7Ci0gICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAgICAg
ICB1cGRhdGVUZXh0dXJlcygxMDAwKTsKICAgICAgICAgRVhQRUNUX0VRKDYsIHJvb3QtPmZha2VM
YXllclRleHR1cmVVcGRhdGVyKCktPnVwZGF0ZUNvdW50KCkpOwogICAgICAgICBFWFBFQ1RfRVEo
MywgY2hpbGQtPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnVwZGF0ZUNvdW50KCkpOwpAQCAt
MTM4NCwxMiArMTM5MSwxMiBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgZG9udEFs
bG9jYXRlQ29udGVudHNXaGVuVGFyZ2V0U3VyZmFjZUNhbnRCZUFsbG9jYQogICAgICAgICBjaGls
ZC0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+Y2xlYXJVcGRhdGVDb3VudCgpOwogICAgICAg
ICBjaGlsZDItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPmNsZWFyVXBkYXRlQ291bnQoKTsK
IAotICAgICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IHJvb3RJbXBsKGFkb3B0UHRy
KG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbChyb290LT5pZCgpKSkpOwotICAgICAgICBPd25QdHI8
RmFrZUNDVGlsZWRMYXllckltcGw+IGNoaWxkSW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRM
YXllckltcGwoY2hpbGQtPmlkKCkpKSk7Ci0gICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVy
SW1wbD4gY2hpbGQySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoY2hpbGQy
LT5pZCgpKSkpOwotICAgICAgICByb290LT5wdXNoUHJvcGVydGllc1RvKHJvb3RJbXBsLmdldCgp
KTsKLSAgICAgICAgY2hpbGQtPnB1c2hQcm9wZXJ0aWVzVG8oY2hpbGRJbXBsLmdldCgpKTsKLSAg
ICAgICAgY2hpbGQyLT5wdXNoUHJvcGVydGllc1RvKGNoaWxkMkltcGwuZ2V0KCkpOworICAgICAg
ICBTY29wZWRGYWtlQ0NUaWxlZExheWVySW1wbCByb290SW1wbChyb290LT5pZCgpKTsKKyAgICAg
ICAgU2NvcGVkRmFrZUNDVGlsZWRMYXllckltcGwgY2hpbGRJbXBsKGNoaWxkLT5pZCgpKTsKKyAg
ICAgICAgU2NvcGVkRmFrZUNDVGlsZWRMYXllckltcGwgY2hpbGQySW1wbChjaGlsZDItPmlkKCkp
OworICAgICAgICBsYXllclB1c2hQcm9wZXJ0aWVzVG8ocm9vdC5nZXQoKSwgcm9vdEltcGwuZ2V0
KCkpOworICAgICAgICBsYXllclB1c2hQcm9wZXJ0aWVzVG8oY2hpbGQuZ2V0KCksIGNoaWxkSW1w
bC5nZXQoKSk7CisgICAgICAgIGxheWVyUHVzaFByb3BlcnRpZXNUbyhjaGlsZDIuZ2V0KCksIGNo
aWxkMkltcGwuZ2V0KCkpOwogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAzOyAr
K2kpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCAyOyArK2opCkBAIC0x
NDA4LDcgKzE0MTUsNiBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgZG9udEFsbG9j
YXRlQ29udGVudHNXaGVuVGFyZ2V0U3VyZmFjZUNhbnRCZUFsbG9jYQogICAgIGNoaWxkMi0+aW52
YWxpZGF0ZUNvbnRlbnRSZWN0KGNoaWxkMlJlY3QpOwogICAgIGNjTGF5ZXJUcmVlSG9zdC0+dXBk
YXRlTGF5ZXJzKG1fcXVldWUsICgzICogMiArIDMgKiAxKSAqICgxMDAgKiAxMDApICogNCk7CiAg
ICAgewotICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKICAgICAg
ICAgdXBkYXRlVGV4dHVyZXMoMTAwMCk7CiAgICAgICAgIEVYUEVDVF9FUSg2LCByb290LT5mYWtl
TGF5ZXJUZXh0dXJlVXBkYXRlcigpLT51cGRhdGVDb3VudCgpKTsKICAgICAgICAgRVhQRUNUX0VR
KDAsIGNoaWxkLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT51cGRhdGVDb3VudCgpKTsKQEAg
LTE0MTksMTIgKzE0MjUsMTIgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGRvbnRB
bGxvY2F0ZUNvbnRlbnRzV2hlblRhcmdldFN1cmZhY2VDYW50QmVBbGxvY2EKICAgICAgICAgY2hp
bGQtPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPmNsZWFyVXBkYXRlQ291bnQoKTsKICAgICAg
ICAgY2hpbGQyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5jbGVhclVwZGF0ZUNvdW50KCk7
CiAKLSAgICAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiByb290SW1wbChhZG9wdFB0
cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwocm9vdC0+aWQoKSkpKTsKLSAgICAgICAgT3duUHRy
PEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBjaGlsZEltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVk
TGF5ZXJJbXBsKGNoaWxkLT5pZCgpKSkpOwotICAgICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXll
ckltcGw+IGNoaWxkMkltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKGNoaWxk
Mi0+aWQoKSkpKTsKLSAgICAgICAgcm9vdC0+cHVzaFByb3BlcnRpZXNUbyhyb290SW1wbC5nZXQo
KSk7Ci0gICAgICAgIGNoaWxkLT5wdXNoUHJvcGVydGllc1RvKGNoaWxkSW1wbC5nZXQoKSk7Ci0g
ICAgICAgIGNoaWxkMi0+cHVzaFByb3BlcnRpZXNUbyhjaGlsZDJJbXBsLmdldCgpKTsKKyAgICAg
ICAgU2NvcGVkRmFrZUNDVGlsZWRMYXllckltcGwgcm9vdEltcGwocm9vdC0+aWQoKSk7CisgICAg
ICAgIFNjb3BlZEZha2VDQ1RpbGVkTGF5ZXJJbXBsIGNoaWxkSW1wbChjaGlsZC0+aWQoKSk7Cisg
ICAgICAgIFNjb3BlZEZha2VDQ1RpbGVkTGF5ZXJJbXBsIGNoaWxkMkltcGwoY2hpbGQyLT5pZCgp
KTsKKyAgICAgICAgbGF5ZXJQdXNoUHJvcGVydGllc1RvKHJvb3QuZ2V0KCksIHJvb3RJbXBsLmdl
dCgpKTsKKyAgICAgICAgbGF5ZXJQdXNoUHJvcGVydGllc1RvKGNoaWxkLmdldCgpLCBjaGlsZElt
cGwuZ2V0KCkpOworICAgICAgICBsYXllclB1c2hQcm9wZXJ0aWVzVG8oY2hpbGQyLmdldCgpLCBj
aGlsZDJJbXBsLmdldCgpKTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMzsg
KytpKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgMjsgKytqKQpAQCAt
MTQ0NCw3ICsxNDUwLDYgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGRvbnRBbGxv
Y2F0ZUNvbnRlbnRzV2hlblRhcmdldFN1cmZhY2VDYW50QmVBbGxvY2EKICAgICBjaGlsZDItPmlu
dmFsaWRhdGVDb250ZW50UmVjdChjaGlsZDJSZWN0KTsKICAgICBjY0xheWVyVHJlZUhvc3QtPnVw
ZGF0ZUxheWVycyhtX3F1ZXVlLCAoMyAqIDEpICogKDEwMCAqIDEwMCkgKiA0KTsKICAgICB7Ci0g
ICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAgICAgICB1cGRh
dGVUZXh0dXJlcygxMDAwKTsKICAgICAgICAgRVhQRUNUX0VRKDAsIHJvb3QtPmZha2VMYXllclRl
eHR1cmVVcGRhdGVyKCktPnVwZGF0ZUNvdW50KCkpOwogICAgICAgICBFWFBFQ1RfRVEoMCwgY2hp
bGQtPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnVwZGF0ZUNvdW50KCkpOwpAQCAtMTQ1NSwx
MiArMTQ2MCwxMiBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgZG9udEFsbG9jYXRl
Q29udGVudHNXaGVuVGFyZ2V0U3VyZmFjZUNhbnRCZUFsbG9jYQogICAgICAgICBjaGlsZC0+ZmFr
ZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+Y2xlYXJVcGRhdGVDb3VudCgpOwogICAgICAgICBjaGls
ZDItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPmNsZWFyVXBkYXRlQ291bnQoKTsKIAotICAg
ICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IHJvb3RJbXBsKGFkb3B0UHRyKG5ldyBG
YWtlQ0NUaWxlZExheWVySW1wbChyb290LT5pZCgpKSkpOwotICAgICAgICBPd25QdHI8RmFrZUND
VGlsZWRMYXllckltcGw+IGNoaWxkSW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllcklt
cGwoY2hpbGQtPmlkKCkpKSk7Ci0gICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4g
Y2hpbGQySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoY2hpbGQyLT5pZCgp
KSkpOwotICAgICAgICByb290LT5wdXNoUHJvcGVydGllc1RvKHJvb3RJbXBsLmdldCgpKTsKLSAg
ICAgICAgY2hpbGQtPnB1c2hQcm9wZXJ0aWVzVG8oY2hpbGRJbXBsLmdldCgpKTsKLSAgICAgICAg
Y2hpbGQyLT5wdXNoUHJvcGVydGllc1RvKGNoaWxkMkltcGwuZ2V0KCkpOworICAgICAgICBTY29w
ZWRGYWtlQ0NUaWxlZExheWVySW1wbCByb290SW1wbChyb290LT5pZCgpKTsKKyAgICAgICAgU2Nv
cGVkRmFrZUNDVGlsZWRMYXllckltcGwgY2hpbGRJbXBsKGNoaWxkLT5pZCgpKTsKKyAgICAgICAg
U2NvcGVkRmFrZUNDVGlsZWRMYXllckltcGwgY2hpbGQySW1wbChjaGlsZDItPmlkKCkpOworICAg
ICAgICBsYXllclB1c2hQcm9wZXJ0aWVzVG8ocm9vdC5nZXQoKSwgcm9vdEltcGwuZ2V0KCkpOwor
ICAgICAgICBsYXllclB1c2hQcm9wZXJ0aWVzVG8oY2hpbGQuZ2V0KCksIGNoaWxkSW1wbC5nZXQo
KSk7CisgICAgICAgIGxheWVyUHVzaFByb3BlcnRpZXNUbyhjaGlsZDIuZ2V0KCksIGNoaWxkMklt
cGwuZ2V0KCkpOwogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAzOyArK2kpIHsK
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCAyOyArK2opCkBAIC0xNDcxLDEz
ICsxNDc2LDkgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGRvbnRBbGxvY2F0ZUNv
bnRlbnRzV2hlblRhcmdldFN1cmZhY2VDYW50QmVBbGxvY2EKICAgICB9CiAgICAgY2NMYXllclRy
ZWVIb3N0LT5jb21taXRDb21wbGV0ZSgpOwogCi0gICAgewotICAgICAgICBEZWJ1Z1Njb3BlZFNl
dEltcGxUaHJlYWQgaW1wbFRocmVhZDsKLSAgICAgICAgY2NMYXllclRyZWVIb3N0LT5jb250ZW50
c1RleHR1cmVNYW5hZ2VyKCktPmNsZWFyQWxsTWVtb3J5KG1fcmVzb3VyY2VQcm92aWRlci5nZXQo
KSk7Ci0gICAgfQorICAgIHRleHR1cmVNYW5hZ2VyQ2xlYXJBbGxNZW1vcnkoY2NMYXllclRyZWVI
b3N0LT5jb250ZW50c1RleHR1cmVNYW5hZ2VyKCksIG1fcmVzb3VyY2VQcm92aWRlci5nZXQoKSk7
CiAgICAgY2NMYXllclRyZWVIb3N0LT5zZXRSb290TGF5ZXIoMCk7CiAgICAgY2NMYXllclRyZWVI
b3N0LmNsZWFyKCk7Ci0gICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjpzaHV0ZG93bigpOwogfQog
CiBjbGFzcyBUcmFja2luZ0xheWVyUGFpbnRlciA6IHB1YmxpYyBMYXllclBhaW50ZXJDaHJvbWl1
bSB7CkBAIC0xNTQxLDExICsxNTQyLDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3Qs
IG5vbkludGVnZXJDb250ZW50c1NjYWxlSXNOb3REaXN0b3J0ZWREdXJpbmdQYWludCkKICAgICBs
YXllci0+dHJhY2tpbmdMYXllclBhaW50ZXIoKS0+cmVzZXRQYWludGVkUmVjdCgpOwogCiAgICAg
RVhQRUNUX0lOVF9SRUNUX0VRKEludFJlY3QoKSwgbGF5ZXItPnRyYWNraW5nTGF5ZXJQYWludGVy
KCktPnBhaW50ZWRSZWN0KCkpOwotCi0gICAgewotICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxU
aHJlYWQgaW1wbFRocmVhZDsKLSAgICAgICAgdXBkYXRlVGV4dHVyZXMoKTsKLSAgICB9CisgICAg
dXBkYXRlVGV4dHVyZXMoKTsKIAogICAgIC8vIEludmFsaWRhdGUgdGhlIGVudGlyZSBsYXllciBp
biBjb250ZW50IHNwYWNlLiBXaGVuIHBhaW50aW5nLCB0aGUgcmVjdCBnaXZlbiB0byB3ZWJraXQg
c2hvdWxkIG1hdGNoIHRoZSBsYXllcidzIGJvdW5kcy4KICAgICBsYXllci0+aW52YWxpZGF0ZUNv
bnRlbnRSZWN0KGNvbnRlbnRSZWN0KTsKQEAgLTE1NzUsMTEgKzE1NzIsNyBAQCBURVNUX0YoVGls
ZWRMYXllckNocm9taXVtVGVzdCwgbm9uSW50ZWdlckNvbnRlbnRzU2NhbGVJc05vdERpc3RvcnRl
ZER1cmluZ0ludmFsaQogICAgIGxheWVyLT50cmFja2luZ0xheWVyUGFpbnRlcigpLT5yZXNldFBh
aW50ZWRSZWN0KCk7CiAKICAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEoSW50UmVjdCgpLCBsYXllci0+
dHJhY2tpbmdMYXllclBhaW50ZXIoKS0+cGFpbnRlZFJlY3QoKSk7Ci0KLSAgICB7Ci0gICAgICAg
IERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwotICAgICAgICB1cGRhdGVUZXh0
dXJlcygpOwotICAgIH0KKyAgICB1cGRhdGVUZXh0dXJlcygpOwogCiAgICAgLy8gSW52YWxpZGF0
ZSB0aGUgZW50aXJlIGxheWVyIGluIGxheWVyIHNwYWNlLiBXaGVuIHBhaW50aW5nLCB0aGUgcmVj
dCBnaXZlbiB0byB3ZWJraXQgc2hvdWxkIG1hdGNoIHRoZSBsYXllcidzIGJvdW5kcy4KICAgICBs
YXllci0+c2V0TmVlZHNEaXNwbGF5UmVjdChsYXllclJlY3QpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161379</attachid>
            <date>2012-08-29 18:12:07 -0700</date>
            <delta_ts>2012-08-30 18:44:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95057-20120829181156.patch</filename>
            <type>text/plain</type>
            <size>104620</size>
            <attacher name="Christopher Cameron">ccameron</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2OTcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzFhODBiOWNiOWZjMzBm
MTg3ZDQyNDkxNjRmYzA1YmYzNjYxZjQ1NC4uNDM5ZTYxYTFhNGQ1MzE5NDBlYjQ3MzJlODQ4NTNj
ZTE2NDEyMTAzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMyBAQAorMjAxMi0wOC0yOSAgQ2hy
aXN0b3BoZXIgQ2FtZXJvbiAgPGNjYW1lcm9uQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hy
b21pdW1dIEFsbG93IGltcGwtdGhyZWFkIGRlbGV0aW9uIG9mIG9ubHkgc29tZSByZXNvdXJjZXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1MDU3CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVG93YXJkcyBh
bGxvd2luZyB0aGUgaW1wbCB0aHJlYWQgdG8gZGVsZXRlIGp1c3Qgc29tZSByZXNvdXJjZXMgKGFz
CisgICAgICAgIG9wcG9zZWQgdG8gZGVsZXRpbmcgYWxsIHJlc291cmNlcykuCisKKyAgICAgICAg
RG8gaW1wbC10aHJlYWQgZGVsZXRpb24gdGhyb3VnaCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFn
ZXIgaW5zdGVhZCBvZgorICAgICAgICBDQ1Jlc291cmNlUHJvdmlkZXIuIEluIHN1YnNlcXVlbnQg
Y2hhbmdlcyB0aGUgaW1wbCB0aHJlYWQgd2lsbCBiZSBhYmxlCisgICAgICAgIHRvIHNldCBhIHRo
cmVzaG9sZCBmb3Igd2hhdCB0byBkZWxldGUpLiBQdXQgYWxsIHN0YXRlIHRoYXQgY2FuCisgICAg
ICAgIGJlIGNvbmN1cnJlbnRseSBhY2Nlc3NlZCBieSB0aGUgbWFpbiBhbmQgaW1wbCB0aHJlYWRz
IGludG8gYSBzZXBhcmF0ZQorICAgICAgICBTaGFyZWRTdGF0ZSBzdWItY2xhc3Mgd2hpY2ggaGFz
IGEgbXV0ZXguIEFkZCBhIHNldCBvZiB0ZXh0dXJlcyB0aGF0CisgICAgICAgIGhhdmUgYmVlbiBk
ZWxldGVkIGJ5IHRoZSBpbXBsIHRocmVhZCwgYnV0IGhhdmUgbm90IGhhZCB0aGVpciByZWxhdGVk
CisgICAgICAgIHN0cnVjdHVyZXMgY2xlYXJlZCBieSB0aGUgbWFpbiB0aHJlYWQgeWV0LiBBZGQg
aGVscGVyIGZ1bmN0aW9ucyB0byBkZWxldGUKKyAgICAgICAgYSBiYWNraW5nJ3MgcmVzb3VyY2Uu
CisKKyAgICAgICAgQWxsb3cgbXVsdGlwbGUgaW4tZmxpZ2h0IHRleHR1cmUgcHVyZ2VzLiBJbiBD
Q1RocmVhZFByb3h5LCBtYWtlIHRoZQorICAgICAgICBhY2tub3dsZWRnZW1lbnQgb2YgdGV4dHVy
ZSBkZWxldGlvbiBiZSBhbiBpbnRlZ2VyIGNvdW50ZXIgaW5zdGVhZCBvZiBhCisgICAgICAgIGJv
b2wsIGJlY2F1c2Ugd2UgbWF5IGhhdmUgbXVsdGlwbGUgaW4tZmxpZ2h0IHB1cmdlcy4gUmVtb3Zl
IG1hbnkKKyAgICAgICAgaW5zdGFuY2VzIHdoZXJlIHRleHR1cmUgcHVyZ2VzIHdlcmUgYXZvaWRl
ZCB3aGVuIHRoZXJlIHdhcyBhbgorICAgICAgICBvdXRzdGFuZGluZyB0ZXh0LgorCisgICAgICAg
IEFkZCB0aGUgYWJpbGl0eSB0byBjbGVhciBvbmx5IHRoZSByZWZlcmVuY2VzIHRvIGRlbGV0ZWQg
dGV4dHVyZXMgZnJvbQorICAgICAgICB0aGUgdGV4dHVyZSB1cGxvYWQgcXVldWUuCisKKyAgICAg
ICAgQWRkIGFzc2VydGlvbnMgdGhhdCByZXNvdXJjZXMgYmUgZnJlZWQgdG8gQ0NQcmlvcml0aXpl
ZFRleHR1cmVNYW5hZ2VyLgorCisgICAgICAgIEFkZCBsb3RzIG9mIGFzc2VydHMgdG8gQ0NQcmlv
cml0aXplZFRleHR1cmVNYW5hZ2VyIHRvIGVuc3VyZSBhbmQKKyAgICAgICAgaWxsdW1pbmF0ZSBz
dXBwb3J0ZWQgbXVsdGl0aHJlYWRlZCBhY2Nlc3MuCisgICAgICAgIAorICAgICAgICBGaXggYSBk
b3plbiBwbGFjZXMgd2hlcmUgQ0NUaHJlYWRQcm94eSBhbmQgQ0NTaW5nbGVUaHJlYWRQcm94eSBo
b2xkCisgICAgICAgIHRoZSBtYWluIHRocmVhZCBibG9ja2VkLCBidXQgZG9uJ3Qgbm90aWZ5IHRo
ZSBkZWJ1ZyBzdHJ1Y3R1cmVzIG9mCisgICAgICAgIHRoaXMuCisKKyAgICAgICAgTmV3IHRlc3Qg
Q0NUZXh0dXJlVXBkYXRlQ29udHJvbGxlclRlc3RfQXN5bmNEZWxldGlvbgorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6YmFja2luZ1dhc0FzeW5j
aHJvbm91c2x5RGVsZXRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dDo6ZGVsZXRlQ29udGVudHNUZXh0dXJlc1Jlc291cmNlc09uSW1wbFRocmVhZCk6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6ZGVzdHJveVRl
eHR1cmVzRGVsZXRlZEJ5SW1wbFRocmVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmg6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6cmVsZWFz
ZUNvbnRlbnRzVGV4dHVyZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaDoKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdEltcGxD
bGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0Q29udGVu
dHNUZXh0dXJlc1B1cmdlZCk6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RJbXBsKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZTo6dXBsb2FkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlOjpiYWNraW5nV2FzQXN5bmNocm9u
b3VzbHlEZWxldGVkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlLmg6CisgICAgICAgIChDQ1By
aW9yaXRpemVkVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVy
ZTo6QmFja2luZzo6QmFja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4
dHVyZTo6QmFja2luZzo6fkJhY2tpbmcpOgorICAgICAgICAoQmFja2luZyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZzo6b3duZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmU6OkJhY2tpbmc6OnJlc291cmNlRGVsZXRlZCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRl
eHR1cmVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJl
TWFuYWdlcjo6fkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcik6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnByaW9yaXRpemVUZXh0dXJlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnJlcXVlc3RMYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6YWNxdWlyZUJh
Y2tpbmdUZXh0dXJlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0aXplZFRl
eHR1cmVNYW5hZ2VyOjpyZWR1Y2VNZW1vcnkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0
aXplZFRleHR1cmVNYW5hZ2VyOjpkZWxldGVCYWNraW5nc1Jlc291cmNlc09uSW1wbFRocmVhZCk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmRlc3Ryb3lC
YWNraW5nc0ZyZWVkQnlJbXBsVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjbGVhckFsbE1lbW9yeSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnJlZ2lzdGVyVGV4
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnJl
dHVybkJhY2tpbmdUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcjo6Y3JlYXRlQmFja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRp
emVkVGV4dHVyZU1hbmFnZXI6OmRlc3Ryb3lCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6YXNzZXJ0SW52YXJpYW50cyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
Lmg6CisgICAgICAgIChDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NoZWR1bGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNDU2NoZWR1bGVyOjpiZWdpbkZyYW1lQWJvcnRlZCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5OjpyZWNyZWF0ZUNvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6c3RvcCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1NpbmdsZVRocmVhZFByb3h5OjpkZWxldGVDb250ZW50c1RleHR1cmVzT25JbXBsVGhyZWFk
KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQ
cm94eTo6Y29tbWl0QW5kQ29tcG9zaXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlUXVldWUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NUZXh0dXJlVXBkYXRlUXVldWU6OmNsZWFyVXBsb2Fkc1RvRGVsZXRlZFJlc291cmNl
cyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVRdWV1ZS5oOgorICAgICAgICAoQ0NUZXh0dXJlVXBkYXRl
UXVldWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFk
UHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6Q0NUaHJlYWRQcm94
eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpkZWxldGVDb250ZW50c1RleHR1
cmVzT25JbXBsVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NUaHJlYWRQcm94eTo6c2NoZWR1bGVkQWN0aW9uQmVnaW5GcmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhy
ZWFkUHJveHk6OmJlZ2luRnJhbWVDb21wbGV0ZU9uSW1wbFRocmVhZCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ1RocmVhZFByb3h5OjpzY2hlZHVsZWRBY3Rpb25Db21taXQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NUaHJlYWRQcm94eTo6bGF5ZXJUcmVlSG9zdENsb3NlZE9uSW1wbFRocmVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpyZWNyZWF0ZUNvbnRleHRPbkltcGxUaHJl
YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJv
eHkuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OkJlZ2luRnJhbWVBbmRDb21t
aXRTdGF0ZTo6QmVnaW5GcmFtZUFuZENvbW1pdFN0YXRlKToKKyAgICAgICAgKEJlZ2luRnJhbWVB
bmRDb21taXRTdGF0ZSk6CisgICAgICAgIChDQ1RocmVhZFByb3h5KToKKwogMjAxMi0wOC0yOSAg
Unl1YW4gQ2hvaSAgPHJ5dWFuLmNob2lAc2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0VGTF0gTW92
ZSBzZXZlcmFsIGZpbGVzIHRvIHJlbW92ZSB3ZWJraXQxIGRlcGVuZGVuY3kgZnJvbSBXZWJDb3Jl
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAzY2Q5OGJjOGQxMmM2Y2ZhYzZhMDg5NzEw
ZGM1ZmM4NmUyODEwM2Y5Li5hM2ZlOGFkMzliMDFhNDNhMjNlZWZjZDhkMDg3MTMwOTE4YzIwMzkx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEyLTA4LTI5
ICBDaHJpc3RvcGhlciBDYW1lcm9uICA8Y2NhbWVyb25AY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFtjaHJvbWl1bV0gQWxsb3cgaW1wbC10aHJlYWQgZGVsZXRpb24gb2Ygb25seSBzb21lIHJlc291
cmNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTUw
NTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbiBD
Q0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgcmVtb3ZlIHRoZSB0ZXN0CisgICAgICAgIHJlbGVhc2VD
b250ZW50c1RleHR1cmVTaG91bGRUcmlnZ2VyQ29tbWl0IGJlY2F1c2UgaXQgaXMgbm8gbG9uZ2Vy
IHZhbGlkCisgICAgICAgIGFuZCBpcyByZWR1bmRhbnQuICBBIHJlbGVhc2VDb250ZW50c1RleHR1
cmUgd2lsbCBvbmx5IHRyaWdnZXIgYSBjb21taXQKKyAgICAgICAgaWYgdGhlIHJlbGVhc2VDb250
ZW50c1RleHR1cmUgYWN0dWFsbHkgZGVsZXRlcyBhbnkgdGV4dHVyZXMsIGFuZAorICAgICAgICBD
Q0xheWVyVHJlZUhvc3RUZXN0RXZpY3RUZXh0dXJlcyBhbHJlYWR5IHRlc3RzIHRoYXQgdGhlIGNv
bW1pdCBpcworICAgICAgICBpc3N1ZWQgdXBvbiBldmljdGlvbi4KKworICAgICAgICBVcGRhdGUg
VGlsZWRMYXllckNocm9taXVtVGVzdCB0byBhZGhlcmUgdG8gdGhyZWFkaW5nIHJlcXVpcmVtZW50
cyBhbmQKKyAgICAgICAgbm90IGxlYWsgcmVzb3VyY2VzLgorCisgICAgICAgIFVwZGF0ZSBDQ1By
aW9yaXRpemVkVGV4dHVyZVRlc3QgdG8gYWRoZXJlIHRvIHRocmVhZGluZyByZXF1aXJtZW50cy4K
KworICAgICAgICBBZGQgQ0NUZXh0dXJlVXBkYXRlQ29udHJvbGxlclRlc3RfQXN5bmNEZWxldGlv
biB0ZXN0IHRvIHZhbGlkYXRlIG5ldworICAgICAgICB0ZXh0dXJlIHVwbG9hZCBxdWV1ZSBiZWhh
dmlvci4KKworICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcDoKKyAg
ICAgICAgKiB0ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcDoKKwogMjAxMi0wOC0yOCAg
RGF2aWQgUmV2ZW1hbiAgPHJldmVtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1
bV0gU2NoZWR1bGVyIHdpbGwgbmV2ZXIgcHJvY2VzcyBhIGNvbW1pdCB1bnRpbCBpdCByZWNlaXZl
cyBhIHZzeW5jIHRpY2suCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgKaW5kZXggMWFkNjFj
OGQ4Y2E0NjUzYzFmMjBiOGNlZTQyNjJjNzcxZTRiZTIxYy4uMzMxOGFkYjQxYmFhZWMwMGUyZTcw
M2ViMGY0NDJmOTUxYzFiNDI3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaApAQCAt
NDksNiArNDksNyBAQCBwdWJsaWM6CiAKICAgICAgICAgQ0NQcmlvcml0aXplZFRleHR1cmUqIHRl
eHR1cmUoKSB7IHJldHVybiBtX3RleHR1cmUuZ2V0KCk7IH0KICAgICAgICAgdm9pZCBzd2FwVGV4
dHVyZVdpdGgoT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlPiYgdGV4dHVyZSkgeyBtX3RleHR1
cmUuc3dhcCh0ZXh0dXJlKTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgYmFja2luZ1dhc0FzeW5j
aHJvbm91c2x5RGVsZXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZS0+YmFja2luZ1dhc0Fz
eW5jaHJvbm91c2x5RGVsZXRlZCgpOyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlUmVj
dChjb25zdCBJbnRSZWN0JiAvKiBzb3VyY2VSZWN0ICovLCBDQ1JlbmRlcmluZ1N0YXRzJikgeyB9
CiAgICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZWN0KENDUmVzb3VyY2VQcm92aWRlciosIGNv
bnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFNpemUmIGRlc3RPZmZzZXQpID0gMDsK
ICAgICBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAppbmRleCAyNGEz
MzRjM2ZjNzEyNDdhZjFjMjNiMzJjZmMyMmU5OGFmMjI3YjRjLi4zZTU5ZjczZjkzY2NjY2E4Y2Vl
M2ZjY2ZlMjc2NWQzZjZmYTczNWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAK
QEAgLTE5MiwxMyArMTkyLDIxIEBAIENDTGF5ZXJUcmVlSG9zdDo6UmVjcmVhdGVSZXN1bHQgQ0NM
YXllclRyZWVIb3N0OjpyZWNyZWF0ZUNvbnRleHQoKQogICAgIHJldHVybiBSZWNyZWF0ZUZhaWxl
ZEFuZEdhdmVVcDsKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmRlbGV0ZUNvbnRlbnRzVGV4
dHVyZXNPbkltcGxUaHJlYWQoQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyKQor
dm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmRlbGV0ZUFsbENvbnRlbnRzVGV4dHVyZXNPbkltcGxUaHJl
YWQoQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyKQogewogICAgIEFTU0VSVChD
Q1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAgaWYgKG1fcmVuZGVyZXJJbml0aWFsaXplZCkK
ICAgICAgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5jbGVhckFsbE1lbW9yeShyZXNvdXJj
ZVByb3ZpZGVyKTsKIH0KIAorYm9vbCBDQ0xheWVyVHJlZUhvc3Q6OnJlZHVjZUNvbnRlbnRzVGV4
dHVyZXNNZW1vcnlPbkltcGxUaHJlYWQoQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3Zp
ZGVyKQoreworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgaWYgKG1f
cmVuZGVyZXJJbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuIG1fY29udGVudHNUZXh0dXJlTWFu
YWdlci0+cmVkdWNlTWVtb3J5T25JbXBsVGhyZWFkQXN5bmMocmVzb3VyY2VQcm92aWRlcik7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6YWNxdWlyZUxheWVy
VGV4dHVyZXMoKQogewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQoKSk7CkBAIC00
MTEsMTEgKzQxOSwxMiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZShib29sIHZp
c2libGUpCiAgICAgbV9wcm94eS0+c2V0VmlzaWJsZSh2aXNpYmxlKTsKIH0KIAotdm9pZCBDQ0xh
eWVyVHJlZUhvc3Q6OmV2aWN0QWxsQ29udGVudFRleHR1cmVzKCkKKwordm9pZCBDQ0xheWVyVHJl
ZUhvc3Q6OmRlc3Ryb3lDb250ZW50c1RleHR1cmVzRXZpY3RlZEJ5SW1wbFRocmVhZCgpCiB7CiAg
ICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQobV9jb250ZW50
c1RleHR1cmVNYW5hZ2VyLmdldCgpKTsKLSAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPmFs
bEJhY2tpbmdUZXh0dXJlc1dlcmVEZWxldGVkKCk7CisgICAgbV9jb250ZW50c1RleHR1cmVNYW5h
Z2VyLT5kZXN0cm95QmFja2luZ3NBc3luY2hyb25vdXNseUV2aWN0ZWQoKTsKIH0KIAogdm9pZCBD
Q0xheWVyVHJlZUhvc3Q6OnN0YXJ0UGFnZVNjYWxlQW5pbWF0aW9uKGNvbnN0IEludFNpemUmIHRh
cmdldFBvc2l0aW9uLCBib29sIHVzZUFuY2hvciwgZmxvYXQgc2NhbGUsIGRvdWJsZSBkdXJhdGlv
blNlYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggN2M1ODc1ZmZhODA1OTk1NGZm
MDRhNmExYjAxNjAxYTgxZDFiYTQ2NC4uMDMwNjg4ZGU1NzkwYWY1YjA3ZjkwNzVhNzU5ZDAwOGM3
NWM4MmE0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTE3NSw3ICsxNzUsNiBA
QCBwdWJsaWM6CiAgICAgUmVjcmVhdGVSZXN1bHQgcmVjcmVhdGVDb250ZXh0KCk7CiAgICAgdm9p
ZCBkaWRDb21taXRBbmREcmF3RnJhbWUoKSB7IG1fY2xpZW50LT5kaWRDb21taXRBbmREcmF3RnJh
bWUoKTsgfQogICAgIHZvaWQgZGlkQ29tcGxldGVTd2FwQnVmZmVycygpIHsgbV9jbGllbnQtPmRp
ZENvbXBsZXRlU3dhcEJ1ZmZlcnMoKTsgfQotICAgIHZvaWQgZGVsZXRlQ29udGVudHNUZXh0dXJl
c09uSW1wbFRocmVhZChDQ1Jlc291cmNlUHJvdmlkZXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgYWNx
dWlyZUxheWVyVGV4dHVyZXMoKTsKICAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIHdlIHNob3VsZCBh
Ym9ydCB0aGlzIGZyYW1lIGR1ZSB0byBpbml0aWFsaXphdGlvbiBmYWlsdXJlLgogICAgIGJvb2wg
aW5pdGlhbGl6ZVJlbmRlcmVySWZOZWVkZWQoKTsKQEAgLTIzMywxMSArMjMyLDE2IEBAIHB1Ymxp
YzoKIAogICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlciogY29udGVudHNUZXh0dXJlTWFu
YWdlcigpIGNvbnN0OwogCi0gICAgLy8gVGhpcyB3aWxsIGNhdXNlIGNvbnRlbnRzIHRleHR1cmUg
bWFuYWdlciB0byBldmljdCBhbGwgdGV4dHVyZXMsIGJ1dAotICAgIC8vIHdpdGhvdXQgZGVsZXRp
bmcgdGhlbS4gVGhpcyBoYXBwZW5zIGFmdGVyIGFsbCBjb250ZW50IHRleHR1cmVzIGhhdmUKLSAg
ICAvLyBhbHJlYWR5IGJlZW4gZGVsZXRlZCBvbiBpbXBsLCBhZnRlciBnZXR0aW5nIGEgMCBhbGxv
Y2F0aW9uIGxpbWl0LgotICAgIC8vIFNldCBkdXJpbmcgYSBjb21taXQsIGJ1dCBiZWZvcmUgdXBk
YXRlTGF5ZXJzLgotICAgIHZvaWQgZXZpY3RBbGxDb250ZW50VGV4dHVyZXMoKTsKKyAgICB2b2lk
IGRlbGV0ZUFsbENvbnRlbnRzVGV4dHVyZXNPbkltcGxUaHJlYWQoQ0NSZXNvdXJjZVByb3ZpZGVy
Kik7CisKKyAgICAvLyBUaGlzIHdpbGwgY2F1c2UgY29udGVudHMgdGV4dHVyZSBtYW5hZ2VyIHRv
IGZyZWUgc29tZSByZXNvdXJjZXMgdXNlZAorICAgIC8vIGJ5IHRleHR1cmVzLCBidXQgd2lsbCBu
b3QgZGVsZXRlIHRoZSB0ZXh0dXJlIGJhY2tpbmdzIG9iamVjdHMuIFRoZQorICAgIC8vIGZ1bmN0
aW9uIHJldHVybnMgdHJ1ZSBpZiBzb21lIHJlc291cmNlcyB3ZXJlIGluZGVlZCBkZXN0cm95ZWQu
CisgICAgYm9vbCByZWR1Y2VDb250ZW50c1RleHR1cmVzTWVtb3J5T25JbXBsVGhyZWFkKENDUmVz
b3VyY2VQcm92aWRlciopOworCisgICAgLy8gVGhpcyB3aWxsIGRlc3Ryb3kgdGhlIGJhY2tpbmdz
IHRoYXQgaGFkIHRoZWlyIEdQVSByZXNvdXJjZXMgZnJlZWQKKyAgICAvLyBieSBkZWxldGVDb250
ZW50c1RleHR1cmVzUmVzb3VyY2VzT25JbXBsVGhyZWFkLgorICAgIHZvaWQgZGVzdHJveUNvbnRl
bnRzVGV4dHVyZXNFdmljdGVkQnlJbXBsVGhyZWFkKCk7CiAKICAgICBib29sIHZpc2libGUoKSBj
b25zdCB7IHJldHVybiBtX3Zpc2libGU7IH0KICAgICB2b2lkIHNldFZpc2libGUoYm9vbCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IDkxODMzYWYxZjQzMzkz
MmRmMjUwMGJkNDVkYmQxZThhYjdhYTM5ZGYuLjgyODM5MTNkZTg4OGYyYjUxODBiNjg2MDY0ZDU5
NmVmYzFmNDQyNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBA
IC01MjUsMTEgKzUyNSw3IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6cHJlcGFyZVRvRHJh
dyhGcmFtZURhdGEmIGZyYW1lKQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnJlbGVhc2VD
b250ZW50c1RleHR1cmVzKCkKIHsKLSAgICBpZiAobV9jb250ZW50c1RleHR1cmVzUHVyZ2VkKQot
ICAgICAgICByZXR1cm47Ci0gICAgbV9yZXNvdXJjZVByb3ZpZGVyLT5kZWxldGVPd25lZFJlc291
cmNlcyhDQ1JlbmRlcmVyOjpDb250ZW50UG9vbCk7Ci0gICAgbV9jb250ZW50c1RleHR1cmVzUHVy
Z2VkID0gdHJ1ZTsKLSAgICBtX2NsaWVudC0+c2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsK
KyAgICBtX2NsaWVudC0+cmVkdWNlQ29udGVudHNUZXh0dXJlc01lbW9yeU9uSW1wbFRocmVhZCgp
OwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldE1lbW9yeUFsbG9jYXRpb25MaW1p
dEJ5dGVzKHNpemVfdCBieXRlcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApp
bmRleCBiM2QwN2FjMjljMGE4MDc4ZjAxN2M4ZTE4OTMwYmEwMDcyOTA2Mzg0Li4yNTQyZjgwZGY5
N2U2ZjE1MjhlMjNhMTA5NmI4Zjc1OTEzMmNjZGJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbC5oCkBAIC02MCw2ICs2MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
c2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldE5l
ZWRzQ29tbWl0T25JbXBsVGhyZWFkKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBwb3N0QW5pbWF0
aW9uRXZlbnRzVG9NYWluVGhyZWFkT25JbXBsVGhyZWFkKFBhc3NPd25QdHI8Q0NBbmltYXRpb25F
dmVudHNWZWN0b3I+LCBkb3VibGUgd2FsbENsb2NrVGltZSkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCByZWR1Y2VDb250ZW50c1RleHR1cmVzTWVtb3J5T25JbXBsVGhyZWFkKCkgPSAwOwogfTsKIAog
Ly8gQ0NMYXllclRyZWVIb3N0SW1wbCBvd25zIHRoZSBDQ0xheWVySW1wbCB0cmVlIGFzIHdlbGwg
YXMgYXNzb2NpYXRlZCByZW5kZXJpbmcgc3RhdGUKQEAgLTE1OSw3ICsxNjAsNyBAQCBwdWJsaWM6
CiAgICAgaW50IHNvdXJjZUZyYW1lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VGcmFt
ZU51bWJlcjsgfQogICAgIHZvaWQgc2V0U291cmNlRnJhbWVOdW1iZXIoaW50IGZyYW1lTnVtYmVy
KSB7IG1fc291cmNlRnJhbWVOdW1iZXIgPSBmcmFtZU51bWJlcjsgfQogCi0gICAgYm9vbCBjb250
ZW50c1RleHR1cmVzUHVyZ2VkKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c1RleHR1cmVzUHVy
Z2VkOyB9CisgICAgdm9pZCBzZXRDb250ZW50c1RleHR1cmVzUHVyZ2VkKCkgeyBtX2NvbnRlbnRz
VGV4dHVyZXNQdXJnZWQgPSB0cnVlOyB9CiAgICAgdm9pZCByZXNldENvbnRlbnRzVGV4dHVyZXNQ
dXJnZWQoKSB7IG1fY29udGVudHNUZXh0dXJlc1B1cmdlZCA9IGZhbHNlOyB9CiAgICAgc2l6ZV90
IG1lbW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV9tZW1vcnlBbGxv
Y2F0aW9uTGltaXRCeXRlczsgfQogCkBAIC0yODIsNiArMjgzLDEwIEBAIHByaXZhdGU6CiAgICAg
SW50U2l6ZSBtX2RldmljZVZpZXdwb3J0U2l6ZTsKICAgICBmbG9hdCBtX2RldmljZVNjYWxlRmFj
dG9yOwogICAgIGJvb2wgbV92aXNpYmxlOworCisgICAgLy8gU2V0IHdoZW4gdGhlIGltcGwgdGhy
ZWFkIGRlbGV0ZXMgdGV4dHVyZXMsIHVuLXNldCB3aGVuIHRoZSBpbXBsJ3MgbGF5ZXIgdHJlZQor
ICAgIC8vIGlzIGtub3duIHRvIG5vdCByZWZlcmVuY2UgYW55IGRlbGV0ZWQgcmVzb3VyY2VzLiBV
c2VkIHRvIHByZXZlbnQgZHJhd2luZworICAgIC8vIHdpdGggZGVsZXRlZCByZXNvdXJjZXMuCiAg
ICAgYm9vbCBtX2NvbnRlbnRzVGV4dHVyZXNQdXJnZWQ7CiAgICAgc2l6ZV90IG1fbWVtb3J5QWxs
b2NhdGlvbkxpbWl0Qnl0ZXM7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJl
LmNwcAppbmRleCBkOWY2OGFmMGFlMGI5OTI4MTMzYTIzMmQ3NDE2OTI0NzYxMjA2ZGRiLi5kYzA4
Y2U3NGY5MjlkN2E0NDQ2YmNmYTY2ZTM5ZWI4YjkwNGJiOWI4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVy
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NQcmlvcml0aXplZFRleHR1cmUuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJD
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuaCIKICNpbmNsdWRlICJDQ1ByaW9yaXR5Q2FsY3Vs
YXRvci5oIgorI2luY2x1ZGUgIkNDUHJveHkuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAKIHVz
aW5nIG5hbWVzcGFjZSBzdGQ7CkBAIC0xMTAsOSArMTExLDE3IEBAIHZvaWQgQ0NQcmlvcml0aXpl
ZFRleHR1cmU6OnVwbG9hZChDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIsCiAg
ICAgaWYgKG1faXNBYm92ZVByaW9yaXR5Q3V0b2ZmKQogICAgICAgICBhY3F1aXJlQmFja2luZ1Rl
eHR1cmUocmVzb3VyY2VQcm92aWRlcik7CiAgICAgQVNTRVJUKG1fYmFja2luZyk7CisgICAgQVNT
RVJUKCFiYWNraW5nV2FzQXN5bmNocm9ub3VzbHlEZWxldGVkKCkpOwogICAgIHJlc291cmNlUHJv
dmlkZXItPnVwbG9hZChyZXNvdXJjZUlkKCksIGltYWdlLCBpbWFnZVJlY3QsIHNvdXJjZVJlY3Qs
IGRlc3RPZmZzZXQpOwogfQogCitib29sIENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpiYWNraW5nV2Fz
QXN5bmNocm9ub3VzbHlEZWxldGVkKCkgY29uc3QKK3sKKyAgICBpZiAobV9iYWNraW5nKQorICAg
ICAgICByZXR1cm4gbV9iYWNraW5nLT5yZXNvdXJjZURlbGV0ZWQoKTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmU6OmxpbmsoQmFja2luZyogYmFja2lu
ZykKIHsKICAgICBBU1NFUlQoYmFja2luZyk7CkBAIC0xMzksNCArMTQ4LDI1IEBAIHZvaWQgQ0NQ
cmlvcml0aXplZFRleHR1cmU6OnNldFRvU2VsZk1hbmFnZWRNZW1vcnlQbGFjZWhvbGRlcihzaXpl
X3QgYnl0ZXMpCiAgICAgbV9ieXRlcyA9IGJ5dGVzOwogfQogCitDQ1Jlc291cmNlUHJvdmlkZXI6
OlJlc291cmNlSWQgQ0NQcmlvcml0aXplZFRleHR1cmU6OkJhY2tpbmc6OmlkKCkKK3sKKyAgICBB
U1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOworICAgIHJldHVybiBtX3RleHR1cmUuaWQo
KTsKK30KKworYm9vbCBDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZzo6cmVzb3VyY2VEZWxl
dGVkKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOworICAg
IHJldHVybiBtX3Jlc291cmNlRGVsZXRlZDsKK30KKwordm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVy
ZTo6QmFja2luZzo6ZGVsZXRlUmVzb3VyY2UoQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVBy
b3ZpZGVyKQoreworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgQVNT
RVJUKHJlc291cmNlUHJvdmlkZXIpOworICAgIEFTU0VSVCghbV9yZXNvdXJjZURlbGV0ZWQpOwor
ICAgIHJlc291cmNlUHJvdmlkZXItPmRlbGV0ZVJlc291cmNlKG1fdGV4dHVyZS5pZCgpKTsKKyAg
ICBtX3Jlc291cmNlRGVsZXRlZCA9IHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUHJpb3JpdGl6ZWRUZXh0dXJlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZS5oCmluZGV4IDM3ODlkN2YyNjlhM2Q3
ZTUxOTVhODkyZGRkMzc2ZGFlNjE4ZDJiMGUuLjcyZjI2ZmU5ODJmZmM5MTM4YTdmYjYyZGNjMGZj
MTU5MWUxZjE5YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmUuaApAQCAt
ODgsNiArODgsOCBAQCBwdWJsaWM6CiAgICAgLy8gVXBsb2FkcyBwaXhlbHMgaW50byB0aGUgYmFj
a2luZyByZXNvdXJjZS4gVGhpcyBmdW5jdGlvbnMgd2lsbCBhcXVpcmUgdGhlIGJhY2tpbmcgaWYg
bmVlZGVkLgogICAgIHZvaWQgdXBsb2FkKENDUmVzb3VyY2VQcm92aWRlciosIGNvbnN0IHVpbnQ4
X3QqIGltYWdlLCBjb25zdCBJbnRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEludFNpemUmIGRlc3RPZmZzZXQpOwogCisgICAgYm9vbCBiYWNraW5nV2Fz
QXN5bmNocm9ub3VzbHlEZWxldGVkKCkgY29uc3Q7CisKICAgICBDQ1Jlc291cmNlUHJvdmlkZXI6
OlJlc291cmNlSWQgcmVzb3VyY2VJZCgpIGNvbnN0OwogCiAgICAgLy8gU2VsZi1tYW5hZ2VkIHRl
eHR1cmVzIGFyZSBhY2NvdW50ZWQgZm9yIHdoZW4gcHJpb3JpdGl6aW5nIG90aGVyIHRleHR1cmVz
LApAQCAtMTAxLDE2ICsxMDMsMjcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xh
c3MgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOwogCi0gICAgY2xhc3MgQmFja2luZyA6IHB1
YmxpYyBDQ1RleHR1cmUgeworICAgIGNsYXNzIEJhY2tpbmcgewogICAgICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShCYWNraW5nKTsKICAgICBwdWJsaWM6CiAgICAgICAgIEJhY2tpbmcodW5zaWdu
ZWQgaWQsIEludFNpemUgc2l6ZSwgR0MzRGVudW0gZm9ybWF0KQotICAgICAgICAgICAgOiBDQ1Rl
eHR1cmUoaWQsIHNpemUsIGZvcm1hdCksIG1fb3duZXIoMCkgeyB9Ci0gICAgICAgIH5CYWNraW5n
KCkgeyBBU1NFUlQoIW1fb3duZXIpOyB9CisgICAgICAgICAgICA6IG1fdGV4dHVyZShpZCwgc2l6
ZSwgZm9ybWF0KSwgbV9yZXNvdXJjZURlbGV0ZWQoZmFsc2UpLCBtX293bmVyKDApIHsgfQorICAg
ICAgICB+QmFja2luZygpIHsgQVNTRVJUKCFtX293bmVyICYmIG1fcmVzb3VyY2VEZWxldGVkKTsg
fQorCisgICAgICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlKiBvd25lcigpIGNvbnN0IHsgcmV0dXJu
IG1fb3duZXI7IH0KKworICAgICAgICBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNlSWQgaWQo
KTsKKyAgICAgICAgdm9pZCBkZWxldGVSZXNvdXJjZShDQ1Jlc291cmNlUHJvdmlkZXIqKTsKKyAg
ICAgICAgYm9vbCByZXNvdXJjZURlbGV0ZWQoKSBjb25zdDsKKyAgICAgICAgY29uc3QgSW50U2l6
ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZS5zaXplKCk7IH0KKyAgICAgICAgR0Mz
RGVudW0gZm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlLmZvcm1hdCgpOyB9CisgICAg
ICAgIHNpemVfdCBieXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZS5ieXRlcygpOyB9CiAK
LSAgICAgICAgQ0NQcmlvcml0aXplZFRleHR1cmUqIG93bmVyKCkgeyByZXR1cm4gbV9vd25lcjsg
fQogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBDQ1ByaW9yaXRpemVkVGV4dHVy
ZTsKKyAgICAgICAgZnJpZW5kIGNsYXNzIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjsKKyAg
ICAgICAgQ0NUZXh0dXJlIG1fdGV4dHVyZTsKKyAgICAgICAgYm9vbCBtX3Jlc291cmNlRGVsZXRl
ZDsKICAgICAgICAgQ0NQcmlvcml0aXplZFRleHR1cmUqIG1fb3duZXI7CiAgICAgfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5jcHAKaW5kZXgg
OTZmYjA1ZDk0NTJiMTE3NmUyOWI0NzdlYTdmNTgzNWUyYzMxMDg1Zi4uMjc3Mjg0N2YzNTRhYzBh
OThkNjI5MjliYWFhMGQ1YTA5NzY5OTRiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1By
aW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRl
ICJDQ1ByaW9yaXRpemVkVGV4dHVyZS5oIgogI2luY2x1ZGUgIkNDUHJpb3JpdHlDYWxjdWxhdG9y
LmgiCisjaW5jbHVkZSAiQ0NQcm94eS5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKICNpbmNs
dWRlIDxhbGdvcml0aG0+CiAKQEAgLTQ5LDE1ICs1MCwxNyBAQCBDQ1ByaW9yaXRpemVkVGV4dHVy
ZU1hbmFnZXI6On5DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIoKQogICAgIHdoaWxlIChtX3Rl
eHR1cmVzLnNpemUoKSA+IDApCiAgICAgICAgIHVucmVnaXN0ZXJUZXh0dXJlKCptX3RleHR1cmVz
LmJlZ2luKCkpOwogCi0gICAgLy8gRWFjaCByZW1haW5pbmcgYmFja2luZyBpcyBhIGxlYWtlZCBv
cGVuZ2wgdGV4dHVyZS4gV2UgZG9uJ3QgaGF2ZSB0aGUgcmVzb3VyY2VQcm92aWRlcgotICAgIC8v
IHRvIGRlbGV0ZSB0aGUgdGV4dHVyZXMgYXQgdGhpcyB0aW1lIHNvIGNsZWFyTWVtb3J5KCkgbmVl
ZHMgdG8gYmUgY2FsbGVkIGJlZm9yZSB0aGlzLgotICAgIHdoaWxlIChtX2JhY2tpbmdzLnNpemUo
KSA+IDApCi0gICAgICAgIGRlc3Ryb3lCYWNraW5nKCptX2JhY2tpbmdzLmJlZ2luKCksIDApOwor
ICAgIC8vIFJlbW92ZSBhbnkgYmFja2luZ3MgdGhhdCB3ZXJlIGV2aWN0ZWQuCisgICAgY2xlYXJF
dmljdGVkQmFja2luZ3MoKTsKKworICAgIC8vIEVhY2ggcmVtYWluaW5nIGJhY2tpbmcgaXMgcmVh
bCBtZW1vcnkgbGVhay4gVGhpcyBzaG91bGRuJ3QgaGFwcGVuLgorICAgIEFTU0VSVChtX2JhY2tp
bmdzLmlzRW1wdHkoKSk7CiB9CiAKIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpw
cmlvcml0aXplVGV4dHVyZXMoKQogewogICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NQcmlvcml0
aXplZFRleHR1cmVNYW5hZ2VyOjpwcmlvcml0aXplVGV4dHVyZXMiKTsKKyAgICBBU1NFUlQoQ0NQ
cm94eTo6aXNNYWluVGhyZWFkKCkpOwogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIGFzc2Vy
dEludmFyaWFudHMoKTsKQEAgLTEzNyw2ICsxNDAsNyBAQCB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcjo6cHJpb3JpdGl6ZVRleHR1cmVzKCkKIAogdm9pZCBDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI6OmNsZWFyUHJpb3JpdGllcygpCiB7CisgICAgQVNTRVJUKENDUHJveHk6Omlz
TWFpblRocmVhZCgpKTsKICAgICBmb3IgKFRleHR1cmVTZXQ6Oml0ZXJhdG9yIGl0ID0gbV90ZXh0
dXJlcy5iZWdpbigpOyBpdCAhPSBtX3RleHR1cmVzLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgcmVtb3ZlIHRoaXMgYW5kIGp1c3Qgc2V0IGFsbCBwcmlvcml0aWVz
IHRvCiAgICAgICAgIC8vICAgICAgICBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6bG93ZXN0UHJpb3Jp
dHkoKSBvbmNlIHdlIGhhdmUgcHJpb3JpdGllcwpAQCAtMTQ4LDYgKzE1Miw4IEBAIHZvaWQgQ0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjbGVhclByaW9yaXRpZXMoKQogCiBib29sIENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmVxdWVzdExhdGUoQ0NQcmlvcml0aXplZFRleHR1cmUq
IHRleHR1cmUpCiB7CisgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKKwogICAg
IC8vIFRoaXMgaXMgYWxyZWFkeSBhYm92ZSBjdXRvZmYsIHNvIGRvbid0IGRvdWJsZSBjb3VudCBp
dCdzIG1lbW9yeSBiZWxvdy4KICAgICBpZiAodGV4dHVyZS0+aXNBYm92ZVByaW9yaXR5Q3V0b2Zm
KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTcwLDYgKzE3Niw4IEBAIGJvb2wgQ0NQcmlv
cml0aXplZFRleHR1cmVNYW5hZ2VyOjpyZXF1ZXN0TGF0ZShDQ1ByaW9yaXRpemVkVGV4dHVyZSog
dGV4dHVyZSkKIAogdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmFjcXVpcmVCYWNr
aW5nVGV4dHVyZUlmTmVlZGVkKENDUHJpb3JpdGl6ZWRUZXh0dXJlKiB0ZXh0dXJlLCBDQ1Jlc291
cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIpCiB7CisgICAgQVNTRVJUKENDUHJveHk6Omlz
SW1wbFRocmVhZCgpICYmIENDUHJveHk6OmlzTWFpblRocmVhZEJsb2NrZWQoKSk7CisgICAgQVNT
RVJUKHJlc291cmNlUHJvdmlkZXIpOwogICAgIEFTU0VSVCghdGV4dHVyZS0+aXNTZWxmTWFuYWdl
ZCgpKTsKICAgICBBU1NFUlQodGV4dHVyZS0+aXNBYm92ZVByaW9yaXR5Q3V0b2ZmKCkpOwogICAg
IGlmICh0ZXh0dXJlLT5iYWNraW5nKCkgfHwgIXRleHR1cmUtPmlzQWJvdmVQcmlvcml0eUN1dG9m
ZigpKQpAQCAtMTgyLDYgKzE5MCw4IEBAIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
OjphY3F1aXJlQmFja2luZ1RleHR1cmVJZk5lZWRlZChDQ1ByaW9yaXRpemVkVGV4CiAgICAgZm9y
IChCYWNraW5nU2V0OjppdGVyYXRvciBpdCA9IG1fYmFja2luZ3MuYmVnaW4oKTsgaXQgIT0gbV9i
YWNraW5ncy5lbmQoKTsgKytpdCkgewogICAgICAgICBpZiAoKCppdCktPm93bmVyKCkgJiYgKCpp
dCktPm93bmVyKCktPmlzQWJvdmVQcmlvcml0eUN1dG9mZigpKQogICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGlmICgoKml0KS0+cmVzb3VyY2VEZWxldGVkKCkpCisgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgaWYgKCgqaXQpLT5zaXplKCkgPT0gdGV4dHVyZS0+c2l6ZSgpICYmICgq
aXQpLT5mb3JtYXQoKSA9PSB0ZXh0dXJlLT5mb3JtYXQoKSkgewogICAgICAgICAgICAgYmFja2lu
ZyA9ICgqaXQpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xOTIsNiArMjAyLDcgQEAgdm9pZCBD
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmFjcXVpcmVCYWNraW5nVGV4dHVyZUlmTmVlZGVk
KENDUHJpb3JpdGl6ZWRUZXgKICAgICBpZiAoIWJhY2tpbmcpIHsKICAgICAgICAgcmVkdWNlTWVt
b3J5KG1fbWVtb3J5QXZhaWxhYmxlQnl0ZXMgLSB0ZXh0dXJlLT5ieXRlcygpLCByZXNvdXJjZVBy
b3ZpZGVyKTsKICAgICAgICAgYmFja2luZyA9IGNyZWF0ZUJhY2tpbmcodGV4dHVyZS0+c2l6ZSgp
LCB0ZXh0dXJlLT5mb3JtYXQoKSwgcmVzb3VyY2VQcm92aWRlcik7CisgICAgICAgIG1fc2hhcmVk
U3RhdGUuYWRkQmFja2luZ09uSW1wbFRocmVhZChiYWNraW5nKTsKICAgICB9CiAKICAgICAvLyBN
b3ZlIHRoZSB1c2VkIGJhY2tpbmcgdGV4dHVyZSB0byB0aGUgZW5kIG9mIHRoZSBldmljdGlvbiBs
aXN0LgpAQCAtMjA0LDIwICsyMTUsMjQgQEAgdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFn
ZXI6OmFjcXVpcmVCYWNraW5nVGV4dHVyZUlmTmVlZGVkKENDUHJpb3JpdGl6ZWRUZXgKIAogdm9p
ZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnJlZHVjZU1lbW9yeShzaXplX3QgbGltaXRC
eXRlcywgQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyKQogeworICAgIEFTU0VS
VChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSAmJiBDQ1Byb3h5Ojppc01haW5UaHJlYWRCbG9ja2Vk
KCkpOworICAgIEFTU0VSVChyZXNvdXJjZVByb3ZpZGVyKTsKICAgICBpZiAobWVtb3J5VXNlQnl0
ZXMoKSA8PSBsaW1pdEJ5dGVzKQogICAgICAgICByZXR1cm47CiAgICAgLy8gRGVzdHJveSBiYWNr
aW5ncyB1bnRpbCB3ZSBhcmUgYmVsb3cgdGhlIGxpbWl0LAogICAgIC8vIG9yIHVudGlsIGFsbCBi
YWNraW5ncyByZW1haW5pbmcgYXJlIGFib3ZlIHRoZSBjdXRvZmYuCiAgICAgd2hpbGUgKG1lbW9y
eVVzZUJ5dGVzKCkgPiBsaW1pdEJ5dGVzICYmIG1fYmFja2luZ3Muc2l6ZSgpID4gMCkgewotICAg
ICAgICBCYWNraW5nU2V0OjppdGVyYXRvciBpdCA9IG1fYmFja2luZ3MuYmVnaW4oKTsKLSAgICAg
ICAgaWYgKCgqaXQpLT5vd25lcigpICYmICgqaXQpLT5vd25lcigpLT5pc0Fib3ZlUHJpb3JpdHlD
dXRvZmYoKSkKKyAgICAgICAgQ0NQcmlvcml0aXplZFRleHR1cmU6OkJhY2tpbmcqIGJhY2tpbmcg
PSAqbV9iYWNraW5ncy5iZWdpbigpOworICAgICAgICBpZiAoYmFja2luZy0+b3duZXIoKSAmJiBi
YWNraW5nLT5vd25lcigpLT5pc0Fib3ZlUHJpb3JpdHlDdXRvZmYoKSkKICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBkZXN0cm95QmFja2luZygoKml0KSwgcmVzb3VyY2VQcm92aWRlcik7Cisg
ICAgICAgIG1fc2hhcmVkU3RhdGUucmVtb3ZlQmFja2luZ09uSW1wbFRocmVhZChiYWNraW5nLCBy
ZXNvdXJjZVByb3ZpZGVyKTsKKyAgICAgICAgZGVzdHJveUJhY2tpbmcoYmFja2luZyk7CiAgICAg
fQogfQogCiB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmVkdWNlTWVtb3J5KEND
UmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlcikKIHsKKyAgICBBU1NFUlQoQ0NQcm94
eTo6aXNJbXBsVGhyZWFkKCkgJiYgQ0NQcm94eTo6aXNNYWluVGhyZWFkQmxvY2tlZCgpKTsKICAg
ICByZWR1Y2VNZW1vcnkobV9tZW1vcnlBdmFpbGFibGVCeXRlcywgcmVzb3VyY2VQcm92aWRlcik7
CiAgICAgQVNTRVJUKG1lbW9yeVVzZUJ5dGVzKCkgPD0gbWF4TWVtb3J5TGltaXRCeXRlcygpKTsK
IApAQCAtMjM4LDI3ICsyNTMsMzggQEAgdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6
OnJlZHVjZU1lbW9yeShDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmkKICAgICByZWR1
Y2VNZW1vcnkobWVtb3J5VXNlQnl0ZXMoKSAtICh3YXN0ZWRNZW1vcnkgLSB0ZW5QZXJjZW50T2ZN
ZW1vcnkpLCByZXNvdXJjZVByb3ZpZGVyKTsKIH0KIAotdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVy
ZU1hbmFnZXI6OmNsZWFyQWxsTWVtb3J5KENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92
aWRlcikKK2Jvb2wgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpyZWR1Y2VNZW1vcnlPbklt
cGxUaHJlYWRBc3luYyhDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIpCiB7Ci0g
ICAgLy8gVW5saW5rIGFuZCBkZXN0cm95IGFsbCBiYWNraW5nIHRleHR1cmVzLgotICAgIHdoaWxl
IChtX2JhY2tpbmdzLnNpemUoKSA+IDApIHsKLSAgICAgICAgQmFja2luZ1NldDo6aXRlcmF0b3Ig
aXQgPSBtX2JhY2tpbmdzLmJlZ2luKCk7Ci0gICAgICAgIGlmICgoKml0KS0+b3duZXIoKSkKLSAg
ICAgICAgICAgICgqaXQpLT5vd25lcigpLT51bmxpbmsoKTsKLSAgICAgICAgZGVzdHJveUJhY2tp
bmcoKCppdCksIHJlc291cmNlUHJvdmlkZXIpOwotICAgIH0KKyAgICBBU1NFUlQoQ0NQcm94eTo6
aXNJbXBsVGhyZWFkKCkpOworICAgIEFTU0VSVChyZXNvdXJjZVByb3ZpZGVyKTsKKyAgICByZXR1
cm4gbV9zaGFyZWRTdGF0ZS5ldmljdEJhY2tpbmdzUmVzb3VyY2VzT25JbXBsVGhyZWFkQXN5bmMo
cmVzb3VyY2VQcm92aWRlcik7CiB9CiAKLXZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
OjphbGxCYWNraW5nVGV4dHVyZXNXZXJlRGVsZXRlZCgpCit2b2lkIENDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcjo6ZGVzdHJveUJhY2tpbmdzQXN5bmNocm9ub3VzbHlFdmljdGVkKCkKIHsKLSAg
ICAvLyBTYW1lIGFzIGNsZWFyQWxsTWVtb3J5LCBleGNlcHQgYWxsIG91ciB0ZXh0dXJlcyB3ZXJl
IGFscmVhZHkKLSAgICAvLyBkZWxldGVkIGV4dGVybmFsbHksIHNvIHdlIGRvbid0IGRlbGV0ZSB0
aGVtLiBQYXNzaW5nIG5vCi0gICAgLy8gcmVzb3VyY2VQcm92aWRlciByZXN1bHRzIGluIGxlYWtp
bmcgdGhlIChub3cgaW52YWxpZCkgdGV4dHVyZSBpZHMuCi0gICAgY2xlYXJBbGxNZW1vcnkoMCk7
CisgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKKyAgICBjbGVhckV2aWN0ZWRC
YWNraW5ncygpOworfQorCit2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y2xlYXJF
dmljdGVkQmFja2luZ3MoKQoreworICAgIEJhY2tpbmdTZXQgZXZpY3RlZEJhY2tpbmdzOworICAg
IG1fc2hhcmVkU3RhdGUuZ2V0QW5kQ2xlYXJFdmljdGVkQmFja2luZ3MoZXZpY3RlZEJhY2tpbmdz
KTsKKyAgICBmb3IgKEJhY2tpbmdTZXQ6Oml0ZXJhdG9yIGl0ID0gZXZpY3RlZEJhY2tpbmdzLmJl
Z2luKCk7IGl0ICE9IGV2aWN0ZWRCYWNraW5ncy5lbmQoKTsgKytpdCkKKyAgICAgICAgZGVzdHJv
eUJhY2tpbmcoKCppdCkpOworfQorCit2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6
Y2xlYXJBbGxNZW1vcnkoQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyKQorewor
ICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSAmJiBDQ1Byb3h5Ojppc01haW5UaHJl
YWRCbG9ja2VkKCkpOworICAgIEFTU0VSVChyZXNvdXJjZVByb3ZpZGVyKTsKKyAgICByZWR1Y2VN
ZW1vcnlPbkltcGxUaHJlYWRBc3luYyhyZXNvdXJjZVByb3ZpZGVyKTsKKyAgICBjbGVhckV2aWN0
ZWRCYWNraW5ncygpOwogfQogCiB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmVn
aXN0ZXJUZXh0dXJlKENDUHJpb3JpdGl6ZWRUZXh0dXJlKiB0ZXh0dXJlKQogeworICAgIEFTU0VS
VChDQ1Byb3h5Ojppc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKHRleHR1cmUpOwogICAgIEFT
U0VSVCghdGV4dHVyZS0+dGV4dHVyZU1hbmFnZXIoKSk7CiAgICAgQVNTRVJUKCF0ZXh0dXJlLT5i
YWNraW5nKCkpOwpAQCAtMjY2LDExICsyOTIsMTEgQEAgdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVy
ZU1hbmFnZXI6OnJlZ2lzdGVyVGV4dHVyZShDQ1ByaW9yaXRpemVkVGV4dHVyZSogdGV4dHVyZSkK
IAogICAgIHRleHR1cmUtPnNldE1hbmFnZXJJbnRlcm5hbCh0aGlzKTsKICAgICBtX3RleHR1cmVz
LmFkZCh0ZXh0dXJlKTsKLQogfQogCiB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6
dW5yZWdpc3RlclRleHR1cmUoQ0NQcmlvcml0aXplZFRleHR1cmUqIHRleHR1cmUpCiB7CisgICAg
QVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpIHx8IChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQo
KSAmJiBDQ1Byb3h5Ojppc01haW5UaHJlYWRCbG9ja2VkKCkpKTsKICAgICBBU1NFUlQodGV4dHVy
ZSk7CiAgICAgQVNTRVJUKG1fdGV4dHVyZXMuZmluZCh0ZXh0dXJlKSAhPSBtX3RleHR1cmVzLmVu
ZCgpKTsKIApAQCAtMjgwLDkgKzMwNiw5IEBAIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5h
Z2VyOjp1bnJlZ2lzdGVyVGV4dHVyZShDQ1ByaW9yaXRpemVkVGV4dHVyZSogdGV4dHVyCiAgICAg
dGV4dHVyZS0+c2V0QWJvdmVQcmlvcml0eUN1dG9mZihmYWxzZSk7CiB9CiAKLQogdm9pZCBDQ1By
aW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnJldHVybkJhY2tpbmdUZXh0dXJlKENDUHJpb3JpdGl6
ZWRUZXh0dXJlKiB0ZXh0dXJlKQogeworICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQo
KSB8fCAoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkgJiYgQ0NQcm94eTo6aXNNYWluVGhyZWFkQmxv
Y2tlZCgpKSk7CiAgICAgaWYgKHRleHR1cmUtPmJhY2tpbmcoKSkgewogICAgICAgICAvLyBNb3Zl
IHRoZSBiYWNraW5nIHRleHR1cmUgdG8gdGhlIGZyb250IGZvciBldmljdGlvbi9yZWN5Y2xpbmcg
YW5kIHVubGluayBpdC4KICAgICAgICAgbV9iYWNraW5ncy5yZW1vdmUodGV4dHVyZS0+YmFja2lu
ZygpKTsKQEAgLTI5Myw4ICszMTksOCBAQCB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdl
cjo6cmV0dXJuQmFja2luZ1RleHR1cmUoQ0NQcmlvcml0aXplZFRleHR1cmUqIHRleAogCiBDQ1By
aW9yaXRpemVkVGV4dHVyZTo6QmFja2luZyogQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpj
cmVhdGVCYWNraW5nKEludFNpemUgc2l6ZSwgR0MzRGVudW0gZm9ybWF0LCBDQ1Jlc291cmNlUHJv
dmlkZXIqIHJlc291cmNlUHJvdmlkZXIpCiB7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRo
cmVhZCgpICYmIENDUHJveHk6OmlzTWFpblRocmVhZEJsb2NrZWQoKSk7CiAgICAgQVNTRVJUKHJl
c291cmNlUHJvdmlkZXIpOwotCiAgICAgQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJjZUlkIHJl
c291cmNlSWQgPSByZXNvdXJjZVByb3ZpZGVyLT5jcmVhdGVSZXNvdXJjZShtX3Bvb2wsIHNpemUs
IGZvcm1hdCwgQ0NSZXNvdXJjZVByb3ZpZGVyOjpUZXh0dXJlVXNhZ2VBbnkpOwogICAgIENDUHJp
b3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nKiBiYWNraW5nID0gbmV3IENDUHJpb3JpdGl6ZWRUZXh0
dXJlOjpCYWNraW5nKHJlc291cmNlSWQsIHNpemUsIGZvcm1hdCk7CiAgICAgbV9tZW1vcnlVc2VC
eXRlcyArPSBiYWNraW5nLT5ieXRlcygpOwpAQCAtMzAzLDE1ICszMjksMTMgQEAgQ0NQcmlvcml0
aXplZFRleHR1cmU6OkJhY2tpbmcqIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRl
QmFja2luZyhJbnRTaXoKICAgICByZXR1cm4gYmFja2luZzsKIH0KIAotdm9pZCBDQ1ByaW9yaXRp
emVkVGV4dHVyZU1hbmFnZXI6OmRlc3Ryb3lCYWNraW5nKENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpC
YWNraW5nKiBiYWNraW5nLCBDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIpCit2
b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6ZGVzdHJveUJhY2tpbmcoQ0NQcmlvcml0
aXplZFRleHR1cmU6OkJhY2tpbmcqIGJhY2tpbmcpCiB7CiAgICAgQVNTRVJUKGJhY2tpbmcpOwot
ICAgIEFTU0VSVCghYmFja2luZy0+b3duZXIoKSB8fCAhYmFja2luZy0+b3duZXIoKS0+aXNBYm92
ZVByaW9yaXR5Q3V0b2ZmKCkpOwogICAgIEFTU0VSVCghYmFja2luZy0+b3duZXIoKSB8fCAhYmFj
a2luZy0+b3duZXIoKS0+aXNTZWxmTWFuYWdlZCgpKTsKICAgICBBU1NFUlQobV9iYWNraW5ncy5m
aW5kKGJhY2tpbmcpICE9IG1fYmFja2luZ3MuZW5kKCkpOworICAgIEFTU0VSVChiYWNraW5nLT5t
X3Jlc291cmNlRGVsZXRlZCk7CiAKLSAgICBpZiAocmVzb3VyY2VQcm92aWRlcikKLSAgICAgICAg
cmVzb3VyY2VQcm92aWRlci0+ZGVsZXRlUmVzb3VyY2UoYmFja2luZy0+aWQoKSk7CiAgICAgaWYg
KGJhY2tpbmctPm93bmVyKCkpCiAgICAgICAgIGJhY2tpbmctPm93bmVyKCktPnVubGluaygpOwog
ICAgIG1fbWVtb3J5VXNlQnl0ZXMgLT0gYmFja2luZy0+Ynl0ZXMoKTsKQEAgLTMyMCwxMCArMzQ0
LDExIEBAIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpkZXN0cm95QmFja2luZyhD
Q1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZyoKICAgICBkZWxldGUgYmFja2luZzsKIH0KIAot
CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6
OmFzc2VydEludmFyaWFudHMoKQogeworICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQo
KSk7CisKICAgICAvLyBJZiB3ZSBoaXQgYW55IG9mIHRoZXNlIGFzc2VydHMsIHRoZXJlIGlzIGEg
YnVnIGluIHRoaXMgY2xhc3MuIFRvIHNlZQogICAgIC8vIHdoZXJlIHRoZSBidWcgaXMsIGNhbGwg
dGhpcyBmdW5jdGlvbiBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YKICAgICAvLyBldmVyeSBw
dWJsaWMgZnVuY3Rpb24uCkBAIC0zNTUsNSArMzgwLDUwIEBAIHZvaWQgQ0NQcmlvcml0aXplZFRl
eHR1cmVNYW5hZ2VyOjphc3NlcnRJbnZhcmlhbnRzKCkKIH0KICNlbmRpZgogCitDQ1ByaW9yaXRp
emVkVGV4dHVyZU1hbmFnZXI6OlNoYXJlZFN0YXRlOjp+U2hhcmVkU3RhdGUoKQoreworICAgIEFT
U0VSVChtX2V2aWN0ZWRCYWNraW5ncy5pc0VtcHR5KCkpOworICAgIEFTU0VSVChtX3VuZXZpY3Rl
ZEJhY2tpbmdzLmlzRW1wdHkoKSk7Cit9CisKK3ZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5h
Z2VyOjpTaGFyZWRTdGF0ZTo6YWRkQmFja2luZ09uSW1wbFRocmVhZChDQ1ByaW9yaXRpemVkVGV4
dHVyZTo6QmFja2luZyogYmFja2luZykKK3sKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhy
ZWFkKCkgJiYgQ0NQcm94eTo6aXNNYWluVGhyZWFkQmxvY2tlZCgpKTsKKyAgICBtX3VuZXZpY3Rl
ZEJhY2tpbmdzLmFkZChiYWNraW5nKTsKK30KKwordm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI6OlNoYXJlZFN0YXRlOjpyZW1vdmVCYWNraW5nT25JbXBsVGhyZWFkKENDUHJpb3JpdGl6
ZWRUZXh0dXJlOjpCYWNraW5nKiBiYWNraW5nLCBDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNl
UHJvdmlkZXIpCit7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpICYmIENDUHJv
eHk6OmlzTWFpblRocmVhZEJsb2NrZWQoKSk7CisgICAgaWYgKGJhY2tpbmctPnJlc291cmNlRGVs
ZXRlZCgpKSB7CisgICAgICAgIEFTU0VSVChtX2V2aWN0ZWRCYWNraW5ncy5maW5kKGJhY2tpbmcp
ICE9IG1fZXZpY3RlZEJhY2tpbmdzLmVuZCgpKTsKKyAgICAgICAgbV9ldmljdGVkQmFja2luZ3Mu
cmVtb3ZlKGJhY2tpbmcpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChtX3VuZXZpY3Rl
ZEJhY2tpbmdzLmZpbmQoYmFja2luZykgIT0gbV91bmV2aWN0ZWRCYWNraW5ncy5lbmQoKSk7Cisg
ICAgICAgIG1fdW5ldmljdGVkQmFja2luZ3MucmVtb3ZlKGJhY2tpbmcpOworICAgICAgICBiYWNr
aW5nLT5kZWxldGVSZXNvdXJjZShyZXNvdXJjZVByb3ZpZGVyKTsKKyAgICB9Cit9CisKK2Jvb2wg
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpTaGFyZWRTdGF0ZTo6ZXZpY3RCYWNraW5nc1Jl
c291cmNlc09uSW1wbFRocmVhZEFzeW5jKENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92
aWRlcikKK3sKKyAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgIEFTU0VSVChDQ1Byb3h5Ojpp
c0ltcGxUaHJlYWQoKSk7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKKyAgICBmb3Ig
KEJhY2tpbmdTZXQ6Oml0ZXJhdG9yIGl0ID0gbV91bmV2aWN0ZWRCYWNraW5ncy5iZWdpbigpOyBp
dCAhPSBtX3VuZXZpY3RlZEJhY2tpbmdzLmVuZCgpOyArK2l0KSB7CisgICAgICAgIHJlc3VsdCA9
IHRydWU7CisgICAgICAgICgqaXQpLT5kZWxldGVSZXNvdXJjZShyZXNvdXJjZVByb3ZpZGVyKTsK
KyAgICAgICAgbV9ldmljdGVkQmFja2luZ3MuYWRkKCgqaXQpKTsKKyAgICB9CisgICAgbV91bmV2
aWN0ZWRCYWNraW5ncy5jbGVhcigpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgQ0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpTaGFyZWRTdGF0ZTo6Z2V0QW5kQ2xlYXJFdmljdGVk
QmFja2luZ3MoQmFja2luZ1NldCYgZXZpY3RlZEJhY2tpbmdzKQoreworICAgIGV2aWN0ZWRCYWNr
aW5ncy5jbGVhcigpOworICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7CisgICAgZXZpY3Rl
ZEJhY2tpbmdzLnN3YXAobV9ldmljdGVkQmFja2luZ3MpOworfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5o
CmluZGV4IDEzZGJjNTE3NmJjZDc4ZWUyOTcwOTBhNjc2NTEyNDVmOWJkNzY0Y2EuLmNkNjMyMjYy
Y2JjY2E0YTRiMTJhOGViMzE4MmY3NjQ0MDc0OTMxZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5oCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVk
ZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0xp
c3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTc3LDggKzc4LDE5
IEBAIHB1YmxpYzoKICAgICBib29sIHJlcXVlc3RMYXRlKENDUHJpb3JpdGl6ZWRUZXh0dXJlKik7
CiAKICAgICB2b2lkIHJlZHVjZU1lbW9yeShDQ1Jlc291cmNlUHJvdmlkZXIqKTsKKworICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiByZXNvdXJjZXMgYXJlIGRlbGV0ZWQgYXMgYSByZXN1bHQgb2YgdGhp
cyBjYWxsLgorICAgIC8vIFRoaXMgY2FuIGJlIGNhbGxlZCBjb25jdXJyZW50bHkgd2l0aCB0aGUg
bWFpbiB0aHJlYWQgYWNjZXNzaW5nIHRoaXMKKyAgICAvLyBzdHJ1Y3R1cmUsIGFuZCBvbmx5IHRv
dWNoZXMgZGF0YSBpbiB0aGUgcXVhcmFudGluZWQgbV9zaGFyZWRTdGF0ZS4KKyAgICBib29sIHJl
ZHVjZU1lbW9yeU9uSW1wbFRocmVhZEFzeW5jKENDUmVzb3VyY2VQcm92aWRlciopOworCisgICAg
Ly8gUmVtb3ZlIHRoZSBiYWNraW5ncyB3aG9zZSByZXNvdXJjZXMgd2VyZSBkZXN0cm95ZWQgYnkg
CisgICAgLy8gcmVkdWNlTWVtb3J5T25JbXBsVGhyZWFkQXN5bmMKKyAgICB2b2lkIGRlc3Ryb3lC
YWNraW5nc0FzeW5jaHJvbm91c2x5RXZpY3RlZCgpOworCisgICAgLy8gRGVsZXRlIGFsbCB0ZXh0
dXJlcyBhbmQgZnJtIHRoZSBpbXBsIHRocmVhZCAoYXQgdGhyZWFkIGV4aXQgYW5kCisgICAgLy8g
Y29udGV4dCBsb3N0KS4KICAgICB2b2lkIGNsZWFyQWxsTWVtb3J5KENDUmVzb3VyY2VQcm92aWRl
ciopOwotICAgIHZvaWQgYWxsQmFja2luZ1RleHR1cmVzV2VyZURlbGV0ZWQoKTsKIAogICAgIHZv
aWQgYWNxdWlyZUJhY2tpbmdUZXh0dXJlSWZOZWVkZWQoQ0NQcmlvcml0aXplZFRleHR1cmUqLCBD
Q1Jlc291cmNlUHJvdmlkZXIqKTsKIApAQCAtOTEsNiArMTAzLDcgQEAgcHVibGljOgogI2VuZGlm
CiAKIHByaXZhdGU6CisKICAgICAvLyBDb21wYXJlIHRleHR1cmVzLiBIaWdoZXN0IHByaW9yaXR5
IGZpcnN0LgogICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlVGV4dHVyZXMoQ0NQcmlvcml0
aXplZFRleHR1cmUqIGEsIENDUHJpb3JpdGl6ZWRUZXh0dXJlKiBiKQogICAgIHsKQEAgLTEwOSwx
MSArMTIyLDEwIEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgQ0NQcmlvcml0aXplZFRleHR1cmVN
YW5hZ2VyKHNpemVfdCBtYXhNZW1vcnlMaW1pdEJ5dGVzLCBpbnQgbWF4VGV4dHVyZVNpemUsIGlu
dCBwb29sKTsKLQogICAgIHZvaWQgcmVkdWNlTWVtb3J5KHNpemVfdCBsaW1pdCwgQ0NSZXNvdXJj
ZVByb3ZpZGVyKik7Ci0KICAgICBDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZyogY3JlYXRl
QmFja2luZyhJbnRTaXplLCBHQzNEZW51bSBmb3JtYXQsIENDUmVzb3VyY2VQcm92aWRlciopOwot
ICAgIHZvaWQgZGVzdHJveUJhY2tpbmcoQ0NQcmlvcml0aXplZFRleHR1cmU6OkJhY2tpbmcqLCBD
Q1Jlc291cmNlUHJvdmlkZXIqKTsKKyAgICB2b2lkIGNsZWFyRXZpY3RlZEJhY2tpbmdzKCk7Cisg
ICAgdm9pZCBkZXN0cm95QmFja2luZyhDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZyopOwog
CiAgICAgc2l6ZV90IG1fbWF4TWVtb3J5TGltaXRCeXRlczsKICAgICB1bnNpZ25lZCBtX3ByaW9y
aXR5Q3V0b2ZmOwpAQCAtMTMyLDYgKzE0NCwzNyBAQCBwcml2YXRlOgogCiAgICAgVGV4dHVyZVZl
Y3RvciBtX3RlbXBUZXh0dXJlVmVjdG9yOwogICAgIEJhY2tpbmdWZWN0b3IgbV90ZW1wQmFja2lu
Z1ZlY3RvcjsKKworICAgIC8vIFRoaXMgc3RhdGUgdGhhdCBjYW4gYmUgY29uY3VycmVudGx5IGFj
Y2Vzc2VkIGJ5IHRoZSBtYWluIGFuZCBpbXBsIHRocmVhZCwKKyAgICAvLyBhbmQgbmVlZHMgcHJv
dGVjdGlvbiBieSBhIG11dGV4LgorICAgIGNsYXNzIFNoYXJlZFN0YXRlIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIFNoYXJlZFN0YXRlKCkgeyB9CisgICAgICAgIH5TaGFyZWRTdGF0ZSgpOworCisg
ICAgICAgIC8vIENhbGxlZCBvbiB0aGUgaW1wbCB0aHJlYWQgd2hpbGUgdGhlIG1haW4gdGhyZWFk
IGlzIGJsb2NrZWQKKyAgICAgICAgdm9pZCBhZGRCYWNraW5nT25JbXBsVGhyZWFkKENDUHJpb3Jp
dGl6ZWRUZXh0dXJlOjpCYWNraW5nKik7CisKKyAgICAgICAgLy8gQ2FsbGVkIG9uIHRoZSBpbXBs
IHRocmVhZCB3aGlsZSB0aGUgbWFpbiB0aHJlYWQgaXMgYmxvY2tlZC4gRGVsZXRlcworICAgICAg
ICAvLyB0aGUgYmFja2luZydzIHJlc291cmNlIGlmIGl0IGhhcyBub3QgYmVlbiBkZWxldGVkIGFs
cmVhZHkuCisgICAgICAgIHZvaWQgcmVtb3ZlQmFja2luZ09uSW1wbFRocmVhZChDQ1ByaW9yaXRp
emVkVGV4dHVyZTo6QmFja2luZyosIENDUmVzb3VyY2VQcm92aWRlciopOworCisgICAgICAgIC8v
IENhbGxlZCBvbiB0aGUgaW1wbCB0aHJlYWQgd2hpbGUgdGhlIG1haW4gdGhyZWFkIG1heSBub3Qg
YmUKKyAgICAgICAgLy8gYmxvY2tlZAorICAgICAgICBib29sIGV2aWN0QmFja2luZ3NSZXNvdXJj
ZXNPbkltcGxUaHJlYWRBc3luYyhDQ1Jlc291cmNlUHJvdmlkZXIqKTsKKworICAgICAgICAvLyBD
YWxsZWQgb24gdGhlIG1haW4gdGhyZWFkLCBwb3NzaWJseSBjb25jdXJyZW50bHkgd2l0aCAKKyAg
ICAgICAgLy8gZXZpY3RCYWNraW5nc1Jlc291cmNlc09uSW1wbFRocmVhZEFzeW5jLgorICAgICAg
ICAvLyBBbHNvIGNhbGxlZCBvbiB0aGUgaW1wbCB0aHJlYWQgZHVyaW5nIHRocmVhZC1zaHV0ZG93
biBhbmQgCisgICAgICAgIC8vIGNvbnRleHQtbG9zdAorICAgICAgICB2b2lkIGdldEFuZENsZWFy
RXZpY3RlZEJhY2tpbmdzKEJhY2tpbmdTZXQmKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIE11
dGV4IG1fbXV0ZXg7CisgICAgICAgIEJhY2tpbmdTZXQgbV91bmV2aWN0ZWRCYWNraW5nczsKKyAg
ICAgICAgQmFja2luZ1NldCBtX2V2aWN0ZWRCYWNraW5nczsKKyAgICB9OworICAgIFNoYXJlZFN0
YXRlIG1fc2hhcmVkU3RhdGU7CiB9OwogCiB9IC8vIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NoZWR1bGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NoZWR1bGVy
LmNwcAppbmRleCA0ZGY1MmFlZjk2MGY2YzFhZjg1ZmYwMjU0NDllNTE3NTRjZjgxZjc2Li43NTRl
NzlhMDBiY2QyYjYzZWI2ZDRlZDI4MTUyYzg4MTA2YzRhNDdhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NjaGVkdWxlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY2hlZHVs
ZXIuY3BwCkBAIC0xMDEsNiArMTAxLDcgQEAgdm9pZCBDQ1NjaGVkdWxlcjo6YmVnaW5GcmFtZUFi
b3J0ZWQoKQogICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NTY2hlZHVsZXI6OmJlZ2luRnJhbWVB
Ym9ydGVkIik7CiAgICAgbV9zdGF0ZU1hY2hpbmUuYmVnaW5GcmFtZUFib3J0ZWQoKTsKICAgICBw
cm9jZXNzU2NoZWR1bGVkQWN0aW9ucygpOworICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKIHZv
aWQgQ0NTY2hlZHVsZXI6OnNldE1heEZyYW1lc1BlbmRpbmcoaW50IG1heEZyYW1lc1BlbmRpbmcp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCmluZGV4IDY4NzZlYTIxODhi
YWY2NjY4YTI5YWMzN2MxY2QzOGM4Y2I0NDFjZTkuLjE0NWFlMjk3MDkwMjQ2ZDE0YzUzZmFhMmE3
YWZhMGU0ZDMyNjkyYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3Bw
CkBAIC0xNTUsOSArMTU1LDkgQEAgYm9vbCBDQ1NpbmdsZVRocmVhZFByb3h5OjpyZWNyZWF0ZUNv
bnRleHQoKQogCiAgICAgYm9vbCBpbml0aWFsaXplZDsKICAgICB7CisgICAgICAgIERlYnVnU2Nv
cGVkU2V0TWFpblRocmVhZEJsb2NrZWQgbWFpblRocmVhZEJsb2NrZWQ7CiAgICAgICAgIERlYnVn
U2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOwotICAgICAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdElt
cGwtPmNvbnRlbnRzVGV4dHVyZXNQdXJnZWQoKSkKLSAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9z
dC0+ZGVsZXRlQ29udGVudHNUZXh0dXJlc09uSW1wbFRocmVhZChtX2xheWVyVHJlZUhvc3RJbXBs
LT5yZXNvdXJjZVByb3ZpZGVyKCkpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmRlbGV0ZUFs
bENvbnRlbnRzVGV4dHVyZXNPbkltcGxUaHJlYWQobV9sYXllclRyZWVIb3N0SW1wbC0+cmVzb3Vy
Y2VQcm92aWRlcigpKTsKICAgICAgICAgaW5pdGlhbGl6ZWQgPSBtX2xheWVyVHJlZUhvc3RJbXBs
LT5pbml0aWFsaXplUmVuZGVyZXIoY29udGV4dC5yZWxlYXNlKCksIFVudGhyb3R0bGVkVXBsb2Fk
ZXIpOwogICAgICAgICBpZiAoaW5pdGlhbGl6ZWQpIHsKICAgICAgICAgICAgIG1fUmVuZGVyZXJD
YXBhYmlsaXRpZXNGb3JNYWluVGhyZWFkID0gbV9sYXllclRyZWVIb3N0SW1wbC0+cmVuZGVyZXJD
YXBhYmlsaXRpZXMoKTsKQEAgLTI2MCw5ICsyNjAsNyBAQCB2b2lkIENDU2luZ2xlVGhyZWFkUHJv
eHk6OnN0b3AoKQogICAgIHsKICAgICAgICAgRGVidWdTY29wZWRTZXRNYWluVGhyZWFkQmxvY2tl
ZCBtYWluVGhyZWFkQmxvY2tlZDsKICAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGlt
cGw7Ci0KLSAgICAgICAgaWYgKCFtX2xheWVyVHJlZUhvc3RJbXBsLT5jb250ZW50c1RleHR1cmVz
UHVyZ2VkKCkpCi0gICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmRlbGV0ZUNvbnRlbnRzVGV4
dHVyZXNPbkltcGxUaHJlYWQobV9sYXllclRyZWVIb3N0SW1wbC0+cmVzb3VyY2VQcm92aWRlcigp
KTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5kZWxldGVBbGxDb250ZW50c1RleHR1cmVzT25J
bXBsVGhyZWFkKG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJlc291cmNlUHJvdmlkZXIoKSk7CiAgICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwuY2xlYXIoKTsKICAgICB9CiAgICAgbV9sYXllclRyZWVI
b3N0ID0gMDsKQEAgLTI3NSw2ICsyNzMsMTUgQEAgdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpw
b3N0QW5pbWF0aW9uRXZlbnRzVG9NYWluVGhyZWFkT25JbXBsVGhyZWFkKFBhc3NPd25QdHIKICAg
ICBtX2xheWVyVHJlZUhvc3QtPnNldEFuaW1hdGlvbkV2ZW50cyhldmVudHMsIHdhbGxDbG9ja1Rp
bWUpOwogfQogCit2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OnJlZHVjZUNvbnRlbnRzVGV4dHVy
ZXNNZW1vcnlPbkltcGxUaHJlYWQoKQoreworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJl
YWQoKSk7CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdC0+cmVkdWNlQ29udGVudHNUZXh0dXJlc01l
bW9yeU9uSW1wbFRocmVhZChtX2xheWVyVHJlZUhvc3RJbXBsLT5yZXNvdXJjZVByb3ZpZGVyKCkp
KSB7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPnNldENvbnRlbnRzVGV4dHVyZXNQdXJn
ZWQoKTsKKyAgICAgICAgc2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsKKyAgICB9Cit9CisK
IC8vIENhbGxlZCBieSB0aGUgbGVnYWN5IHNjaGVkdWxpbmcgcGF0aCAoZS5nLiB3aGVyZSByZW5k
ZXJfd2lkZ2V0IGRvZXMgdGhlIHNjaGVkdWxpbmcpCiB2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6
OmNvbXBvc2l0ZUltbWVkaWF0ZWx5KCkKIHsKQEAgLTMwMSw4ICszMDgsNyBAQCBib29sIENDU2lu
Z2xlVGhyZWFkUHJveHk6OmNvbW1pdEFuZENvbXBvc2l0ZSgpCiAgICAgaWYgKCFtX2xheWVyVHJl
ZUhvc3QtPmluaXRpYWxpemVSZW5kZXJlcklmTmVlZGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGlmIChtX2xheWVyVHJlZUhvc3RJbXBsLT5jb250ZW50c1RleHR1cmVzUHVyZ2Vk
KCkpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZXZpY3RBbGxDb250ZW50VGV4dHVyZXMoKTsK
KyAgICBtX2xheWVyVHJlZUhvc3QtPmRlc3Ryb3lDb250ZW50c1RleHR1cmVzRXZpY3RlZEJ5SW1w
bFRocmVhZCgpOwogCiAgICAgQ0NUZXh0dXJlVXBkYXRlUXVldWUgcXVldWU7CiAgICAgbV9sYXll
clRyZWVIb3N0LT51cGRhdGVMYXllcnMocXVldWUsIG1fbGF5ZXJUcmVlSG9zdEltcGwtPm1lbW9y
eUFsbG9jYXRpb25MaW1pdEJ5dGVzKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94
eS5oCmluZGV4IGE3M2E2YWExNzAzYzNkNGUzZGNmNzM4MzZlZGI0ZWJhMTg3YTgwOWUuLjlmYjFh
YjhkMzRjOGQ3N2I0MGQ4YzRlMzE3MjBhMWU0NDRiNjVkNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHku
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Np
bmdsZVRocmVhZFByb3h5LmgKQEAgLTcyLDYgKzcyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBzZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpIE9WRVJSSURFIHsgbV9sYXllclRyZWVI
b3N0LT5zY2hlZHVsZUNvbXBvc2l0ZSgpOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29t
bWl0T25JbXBsVGhyZWFkKCkgT1ZFUlJJREUgeyBtX2xheWVyVHJlZUhvc3QtPnNjaGVkdWxlQ29t
cG9zaXRlKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgcG9zdEFuaW1hdGlvbkV2ZW50c1RvTWFpblRo
cmVhZE9uSW1wbFRocmVhZChQYXNzT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiwgZG91
YmxlIHdhbGxDbG9ja1RpbWUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZWR1Y2VDb250
ZW50c1RleHR1cmVzTWVtb3J5T25JbXBsVGhyZWFkKCkgT1ZFUlJJREU7CiAKICAgICAvLyBDYWxs
ZWQgYnkgdGhlIGxlZ2FjeSBwYXRoIHdoZXJlIFJlbmRlcldpZGdldCBkb2VzIHRoZSBzY2hlZHVs
aW5nLgogICAgIHZvaWQgY29tcG9zaXRlSW1tZWRpYXRlbHkoKTsKQEAgLTEwMiw3ICsxMDMsNyBA
QCBwcml2YXRlOgogfTsKIAogLy8gRm9yIHVzZSBpbiB0aGUgc2luZ2xlLXRocmVhZGVkIGNhc2Uu
IEluIGRlYnVnIGJ1aWxkcywgaXQgcHJldGVuZHMgdGhhdCB0aGUKLS8vIGNvZGUgaXMgcnVubmlu
ZyBvbiB0aGUgdGhyZWFkIHRvIHNhdGlzZnkgYXNzZXJ0aW9uIGNoZWNrcy4KKy8vIGNvZGUgaXMg
cnVubmluZyBvbiB0aGUgaW1wbCB0aHJlYWQgdG8gc2F0aXNmeSBhc3NlcnRpb24gY2hlY2tzLgog
Y2xhc3MgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIHsKIHB1YmxpYzoKICAgICBEZWJ1Z1Njb3Bl
ZFNldEltcGxUaHJlYWQoKQpAQCAtMTM3LDYgKzEzOCwxNSBAQCBwdWJsaWM6CiAgICAgfQogfTsK
IAorLy8gRm9yIHVzZSBpbiB0aGUgc2luZ2xlLXRocmVhZGVkIGNhc2UuIEluIGRlYnVnIGJ1aWxk
cywgaXQgcHJldGVuZHMgdGhhdCB0aGUKKy8vIGNvZGUgaXMgcnVubmluZyBvbiB0aGUgaW1wbCB0
aHJlYWQgYW5kIHRoYXQgdGhlIG1haW4gdGhyZWFkIGlzIGJsb2NrZWQgdG8KKy8vIHNhdGlzZnkg
YXNzZXJ0aW9uIGNoZWNrcworY2xhc3MgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkQW5kTWFpblRo
cmVhZEJsb2NrZWQgeworcHJpdmF0ZToKKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgbV9p
bXBsVGhyZWFkOworICAgIERlYnVnU2NvcGVkU2V0TWFpblRocmVhZEJsb2NrZWQgbV9tYWluVGhy
ZWFkQmxvY2tlZDsKK307CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Rl
eHR1cmVVcGRhdGVDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXIuY3BwCmluZGV4IDAwYTRi
ZmYwZTA3YmUwNzUwODVkM2M4YzMzNWEzMjVkMTBmNWEzYzcuLjJlM2E1OTdhMGExMzExODRjZDM1
ZjQ4MDc0YmU4NTYwY2I1NjU2ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVw
ZGF0ZUNvbnRyb2xsZXIuY3BwCkBAIC0xNTIsMTEgKzE1MiwxNiBAQCB2b2lkIENDVGV4dHVyZVVw
ZGF0ZUNvbnRyb2xsZXI6OnVwZGF0ZU1vcmVUZXh0dXJlcyhkb3VibGUgbW9ub3RvbmljVGltZUxp
bWl0KQogICAgICAgICB1cGRhdGVNb3JlVGV4dHVyZXNOb3coKTsKIH0KIAotdm9pZCBDQ1RleHR1
cmVVcGRhdGVDb250cm9sbGVyOjpkaXNjYXJkVXBsb2FkcygpCit2b2lkIENDVGV4dHVyZVVwZGF0
ZUNvbnRyb2xsZXI6OmRpc2NhcmRBbGxVcGxvYWRzKCkKIHsKICAgICAvLyBDQ1RleHR1cmVVcGRh
dGVDb250cm9sbGVyQ2xpZW50Ojp1cGRhdGVUZXh0dXJlc0NvbXBsZXRlZCB3aWxsIGJlCiAgICAg
Ly8gY2FsbGVkIHdoZW4gYWxsIHJlbWFpbmluZyB0ZXh0dXJlIGNvcGllcyBhcmUgZG9uZS4KLSAg
ICBtX3F1ZXVlLT5jbGVhclVwbG9hZHMoKTsKKyAgICBtX3F1ZXVlLT5jbGVhckFsbFVwbG9hZHMo
KTsKK30KKwordm9pZCBDQ1RleHR1cmVVcGRhdGVDb250cm9sbGVyOjpkaXNjYXJkVXBsb2Fkc1Rv
RGVsZXRlZFJlc291cmNlcygpCit7CisgICAgbV9xdWV1ZS0+Y2xlYXJVcGxvYWRzVG9EZWxldGVk
UmVzb3VyY2VzKCk7CiB9CiAKIHZvaWQgQ0NUZXh0dXJlVXBkYXRlQ29udHJvbGxlcjo6b25UaW1l
ckZpcmVkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXIuaApp
bmRleCA2ZTlkZTA0ZTIyMjNkMTM2OThmZWY0OTlhN2M5OWIwZTQ4ZDUyYzNmLi5iNzYxYTdjZWE1
ZDQxMjNlZDA3YzgyMjdhMjI0ZjNhYzQ5YjEzZDlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVDb250cm9sbGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NU
ZXh0dXJlVXBkYXRlQ29udHJvbGxlci5oCkBAIC01OSw3ICs1OSwxMCBAQCBwdWJsaWM6CiAgICAg
dm9pZCB1cGRhdGVNb3JlVGV4dHVyZXMoZG91YmxlIG1vbm90b25pY1RpbWVMaW1pdCk7CiAKICAg
ICAvLyBEaXNjYXJkIGFsbCByZW1haW5pbmcgdXBsb2Fkcy4KLSAgICB2b2lkIGRpc2NhcmRVcGxv
YWRzKCk7CisgICAgdm9pZCBkaXNjYXJkQWxsVXBsb2FkcygpOworCisgICAgLy8gRGlzY2FyZCB1
cGxvYWRzIHRvIHRleHR1cmVzIHRoYXQgd2VyZSBldmljdGVkIG9uIHRoZSBpbXBsIHRocmVhZAor
ICAgIHZvaWQgZGlzY2FyZFVwbG9hZHNUb0RlbGV0ZWRSZXNvdXJjZXMoKTsKIAogICAgIC8vIEND
VGltZXJDbGllbnQgaW1wbGVtZW50YXRpb24uCiAgICAgdmlydHVhbCB2b2lkIG9uVGltZXJGaXJl
ZCgpIE9WRVJSSURFOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlUXVldWUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlUXVldWUuY3BwCmlu
ZGV4IDhmNThmY2JjYjRjYmEyNGYzNGE1YWFkNDdlZDdjOTQ2MDc0M2MxYTguLmM4ZTJlNzBkYjgx
ODJlZjgwYWI5ZGFlZjdhY2UxZTE4NzY2NDkxZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZVF1ZXVlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1
cmVVcGRhdGVRdWV1ZS5jcHAKQEAgLTU0LDEyICs1NCwyOSBAQCB2b2lkIENDVGV4dHVyZVVwZGF0
ZVF1ZXVlOjphcHBlbmRDb3B5KFRleHR1cmVDb3BpZXI6OlBhcmFtZXRlcnMgY29weSkKICAgICBt
X2NvcHlFbnRyaWVzLmFwcGVuZChjb3B5KTsKIH0KIAotdm9pZCBDQ1RleHR1cmVVcGRhdGVRdWV1
ZTo6Y2xlYXJVcGxvYWRzKCkKK3ZvaWQgQ0NUZXh0dXJlVXBkYXRlUXVldWU6OmNsZWFyQWxsVXBs
b2FkcygpCiB7CiAgICAgbV9mdWxsRW50cmllcy5jbGVhcigpOwogICAgIG1fcGFydGlhbEVudHJp
ZXMuY2xlYXIoKTsKIH0KIAordm9pZCBDQ1RleHR1cmVVcGRhdGVRdWV1ZTo6Y2xlYXJVcGxvYWRz
VG9EZWxldGVkUmVzb3VyY2VzKCkKK3sKKyAgICBjbGVhclVwbG9hZHNUb0RlbGV0ZWRSZXNvdXJj
ZXMobV9mdWxsRW50cmllcyk7CisgICAgY2xlYXJVcGxvYWRzVG9EZWxldGVkUmVzb3VyY2VzKG1f
cGFydGlhbEVudHJpZXMpOworfQorCit2b2lkIENDVGV4dHVyZVVwZGF0ZVF1ZXVlOjpjbGVhclVw
bG9hZHNUb0RlbGV0ZWRSZXNvdXJjZXMoRGVxdWU8VGV4dHVyZVVwbG9hZGVyOjpQYXJhbWV0ZXJz
PiYgZW50cnlRdWV1ZSkKK3sKKyAgICBEZXF1ZTxUZXh0dXJlVXBsb2FkZXI6OlBhcmFtZXRlcnM+
IHRlbXA7CisgICAgZW50cnlRdWV1ZS5zd2FwKHRlbXApOworICAgIHdoaWxlICh0ZW1wLnNpemUo
KSkgeworICAgICAgICBUZXh0dXJlVXBsb2FkZXI6OlBhcmFtZXRlcnMgdXBsb2FkID0gdGVtcC50
YWtlRmlyc3QoKTsKKyAgICAgICAgaWYgKCF1cGxvYWQudGV4dHVyZS0+YmFja2luZ1dhc0FzeW5j
aHJvbm91c2x5RGVsZXRlZCgpKQorICAgICAgICAgICAgZW50cnlRdWV1ZS5hcHBlbmQodXBsb2Fk
KTsKKyAgICB9Cit9CisKIFRleHR1cmVVcGxvYWRlcjo6UGFyYW1ldGVycyBDQ1RleHR1cmVVcGRh
dGVRdWV1ZTo6dGFrZUZpcnN0RnVsbFVwbG9hZCgpCiB7CiAgICAgcmV0dXJuIG1fZnVsbEVudHJp
ZXMudGFrZUZpcnN0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVRdWV1ZS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlUXVldWUuaAppbmRl
eCBkZTYzNzM4MjFmMDhhODQ1NGFlNjQ4NWI2YWYzNzQ4M2M3ODA1ZWU2Li4zZDk4MDgwMGExZWIw
OTY5NjMwYTJlN2MzNjU4YWNkNDNkMDYwOGY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVRdWV1ZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVw
ZGF0ZVF1ZXVlLmgKQEAgLTQzLDcgKzQzLDggQEAgcHVibGljOgogICAgIHZvaWQgYXBwZW5kUGFy
dGlhbFVwbG9hZChUZXh0dXJlVXBsb2FkZXI6OlBhcmFtZXRlcnMpOwogICAgIHZvaWQgYXBwZW5k
Q29weShUZXh0dXJlQ29waWVyOjpQYXJhbWV0ZXJzKTsKIAotICAgIHZvaWQgY2xlYXJVcGxvYWRz
KCk7CisgICAgdm9pZCBjbGVhckFsbFVwbG9hZHMoKTsKKyAgICB2b2lkIGNsZWFyVXBsb2Fkc1Rv
RGVsZXRlZFJlc291cmNlcygpOwogCiAgICAgVGV4dHVyZVVwbG9hZGVyOjpQYXJhbWV0ZXJzIHRh
a2VGaXJzdEZ1bGxVcGxvYWQoKTsKICAgICBUZXh0dXJlVXBsb2FkZXI6OlBhcmFtZXRlcnMgdGFr
ZUZpcnN0UGFydGlhbFVwbG9hZCgpOwpAQCAtNTYsNiArNTcsNyBAQCBwdWJsaWM6CiAgICAgYm9v
bCBoYXNNb3JlVXBkYXRlcygpIGNvbnN0OwogCiBwcml2YXRlOgorICAgIHZvaWQgY2xlYXJVcGxv
YWRzVG9EZWxldGVkUmVzb3VyY2VzKERlcXVlPFRleHR1cmVVcGxvYWRlcjo6UGFyYW1ldGVycz4m
IGVudHJ5UXVldWUpOwogICAgIERlcXVlPFRleHR1cmVVcGxvYWRlcjo6UGFyYW1ldGVycz4gbV9m
dWxsRW50cmllczsKICAgICBEZXF1ZTxUZXh0dXJlVXBsb2FkZXI6OlBhcmFtZXRlcnM+IG1fcGFy
dGlhbEVudHJpZXM7CiAgICAgRGVxdWU8VGV4dHVyZUNvcGllcjo6UGFyYW1ldGVycz4gbV9jb3B5
RW50cmllczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKaW5kZXggZDZhMjkzOGYwM2Y2Yzli
NDc3MTVhMzI0MDNhODk2ZTM3YWM4YWMyZC4uYmQ2NTljM2QxYTZjYjllNWQ5YmMyNTRmNjdiZmUy
OTEwMDRlMTc4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKQEAgLTc5LDcgKzc5LDgg
QEAgQ0NUaHJlYWRQcm94eTo6Q0NUaHJlYWRQcm94eShDQ0xheWVyVHJlZUhvc3QqIGxheWVyVHJl
ZUhvc3QpCiAgICAgLCBtX3JlYWRiYWNrUmVxdWVzdE9uSW1wbFRocmVhZCgwKQogICAgICwgbV9j
b21taXRDb21wbGV0aW9uRXZlbnRPbkltcGxUaHJlYWQoMCkKICAgICAsIG1fdGV4dHVyZUFjcXVp
c2l0aW9uQ29tcGxldGlvbkV2ZW50T25JbXBsVGhyZWFkKDApCi0gICAgLCBtX3Jlc2V0Q29udGVu
dHNUZXh0dXJlc1B1cmdlZEFmdGVyQ29tbWl0T25JbXBsVGhyZWFkKGZhbHNlKQorICAgICwgbV9j
b250ZW50c1RleHR1cmVzUHVyZ2VDb3VudCgwKQorICAgICwgbV9jb250ZW50c1RleHR1cmVzUHVy
Z2VBY2soMCkKICAgICAsIG1fbmV4dEZyYW1lSXNOZXdseUNvbW1pdHRlZEZyYW1lT25JbXBsVGhy
ZWFkKGZhbHNlKQogICAgICwgbV9yZW5kZXJWU3luY0VuYWJsZWQobGF5ZXJUcmVlSG9zdC0+c2V0
dGluZ3MoKS5yZW5kZXJWU3luY0VuYWJsZWQpCiB7CkBAIC0xMDcsOSArMTA4LDEyIEBAIGJvb2wg
Q0NUaHJlYWRQcm94eTo6Y29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQogCiAKICAgICAvLyBQZXJmb3JtIGEgc3luY2hyb25vdXMgY29tbWl0Lgot
ICAgIENDQ29tcGxldGlvbkV2ZW50IGJlZ2luRnJhbWVDb21wbGV0aW9uOwotICAgIENDUHJveHk6
OmltcGxUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVh
ZFByb3h5Ojpmb3JjZUJlZ2luRnJhbWVPbkltcGxUaHJlYWQsICZiZWdpbkZyYW1lQ29tcGxldGlv
bikpOwotICAgIGJlZ2luRnJhbWVDb21wbGV0aW9uLndhaXQoKTsKKyAgICB7CisgICAgICAgIERl
YnVnU2NvcGVkU2V0TWFpblRocmVhZEJsb2NrZWQgbWFpblRocmVhZEJsb2NrZWQ7CisgICAgICAg
IENDQ29tcGxldGlvbkV2ZW50IGJlZ2luRnJhbWVDb21wbGV0aW9uOworICAgICAgICBDQ1Byb3h5
OjppbXBsVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJl
YWRQcm94eTo6Zm9yY2VCZWdpbkZyYW1lT25JbXBsVGhyZWFkLCAmYmVnaW5GcmFtZUNvbXBsZXRp
b24pKTsKKyAgICAgICAgYmVnaW5GcmFtZUNvbXBsZXRpb24ud2FpdCgpOworICAgIH0KICAgICBt
X2luQ29tcG9zaXRlQW5kUmVhZGJhY2sgPSB0cnVlOwogICAgIGJlZ2luRnJhbWUoKTsKICAgICBt
X2luQ29tcG9zaXRlQW5kUmVhZGJhY2sgPSBmYWxzZTsKQEAgLTExOCw4ICsxMjIsMTEgQEAgYm9v
bCBDQ1RocmVhZFByb3h5Ojpjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMsIGNvbnN0
IEludFJlY3QmIHJlY3QpCiAgICAgUmVhZGJhY2tSZXF1ZXN0IHJlcXVlc3Q7CiAgICAgcmVxdWVz
dC5yZWN0ID0gcmVjdDsKICAgICByZXF1ZXN0LnBpeGVscyA9IHBpeGVsczsKLSAgICBDQ1Byb3h5
OjppbXBsVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJl
YWRQcm94eTo6cmVxdWVzdFJlYWRiYWNrT25JbXBsVGhyZWFkLCAmcmVxdWVzdCkpOwotICAgIHJl
cXVlc3QuY29tcGxldGlvbi53YWl0KCk7CisgICAgeworICAgICAgICBEZWJ1Z1Njb3BlZFNldE1h
aW5UaHJlYWRCbG9ja2VkIG1haW5UaHJlYWRCbG9ja2VkOworICAgICAgICBDQ1Byb3h5OjppbXBs
VGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94
eTo6cmVxdWVzdFJlYWRiYWNrT25JbXBsVGhyZWFkLCAmcmVxdWVzdCkpOworICAgICAgICByZXF1
ZXN0LmNvbXBsZXRpb24ud2FpdCgpOworICAgIH0KICAgICByZXR1cm4gcmVxdWVzdC5zdWNjZXNz
OwogfQogCkBAIC0xNTYsNiArMTYzLDcgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpmaW5pc2hBbGxS
ZW5kZXJpbmcoKQogICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQoKSk7CiAKICAgICAv
LyBNYWtlIHN1cmUgYWxsIEdMIGRyYXdpbmcgaXMgZmluaXNoZWQgb24gdGhlIGltcGwgdGhyZWFk
LgorICAgIERlYnVnU2NvcGVkU2V0TWFpblRocmVhZEJsb2NrZWQgbWFpblRocmVhZEJsb2NrZWQ7
CiAgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKICAgICBDQ1Byb3h5OjppbXBsVGhy
ZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6
ZmluaXNoQWxsUmVuZGVyaW5nT25JbXBsVGhyZWFkLCAmY29tcGxldGlvbikpOwogICAgIGNvbXBs
ZXRpb24ud2FpdCgpOwpAQCAtMTk0LDYgKzIwMiw3IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0
U3VyZmFjZVJlYWR5T25JbXBsVGhyZWFkKCkKIHZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0VmlzaWJs
ZShib29sIHZpc2libGUpCiB7CiAgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ1RocmVhZFByb3h5
OjpzZXRWaXNpYmxlIik7CisgICAgRGVidWdTY29wZWRTZXRNYWluVGhyZWFkQmxvY2tlZCBtYWlu
VGhyZWFkQmxvY2tlZDsKICAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOwogICAgIEND
UHJveHk6OmltcGxUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZD
Q1RocmVhZFByb3h5OjpzZXRWaXNpYmxlT25JbXBsVGhyZWFkLCAmY29tcGxldGlvbiwgdmlzaWJs
ZSkpOwogICAgIGNvbXBsZXRpb24ud2FpdCgpOwpAQCAtMjEyLDE0ICsyMjEsMTcgQEAgYm9vbCBD
Q1RocmVhZFByb3h5Ojppbml0aWFsaXplUmVuZGVyZXIoKQogICAgIFRSQUNFX0VWRU5UMCgiY2Mi
LCAiQ0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZVJlbmRlcmVyIik7CiAgICAgLy8gTWFrZSBhIGJs
b2NraW5nIGNhbGwgdG8gaW5pdGlhbGl6ZVJlbmRlcmVyT25JbXBsVGhyZWFkLiBUaGUgcmVzdWx0
cyBvZiB0aGF0IGNhbGwKICAgICAvLyBhcmUgcHVzaGVkIGludG8gdGhlIGluaXRpYWxpemVTdWNj
ZWVkZWQgYW5kIGNhcGFiaWxpdGllcyBsb2NhbCB2YXJpYWJsZXMuCi0gICAgQ0NDb21wbGV0aW9u
RXZlbnQgY29tcGxldGlvbjsKICAgICBib29sIGluaXRpYWxpemVTdWNjZWVkZWQgPSBmYWxzZTsK
ICAgICBSZW5kZXJlckNhcGFiaWxpdGllcyBjYXBhYmlsaXRpZXM7Ci0gICAgQ0NQcm94eTo6aW1w
bFRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJv
eHk6OmluaXRpYWxpemVSZW5kZXJlck9uSW1wbFRocmVhZCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29tcGxldGlvbiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW5pdGlhbGl6
ZVN1Y2NlZWRlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmY2FwYWJpbGl0aWVzKSk7Ci0gICAgY29tcGxldGlvbi53YWl0KCk7CisgICAg
eworICAgICAgICBEZWJ1Z1Njb3BlZFNldE1haW5UaHJlYWRCbG9ja2VkIG1haW5UaHJlYWRCbG9j
a2VkOworICAgICAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOworICAgICAgICBDQ1By
b3h5OjppbXBsVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NU
aHJlYWRQcm94eTo6aW5pdGlhbGl6ZVJlbmRlcmVyT25JbXBsVGhyZWFkLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29tcGxldGlv
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJmluaXRpYWxpemVTdWNjZWVkZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjYXBhYmlsaXRpZXMpKTsKKyAgICAgICAg
Y29tcGxldGlvbi53YWl0KCk7CisgICAgfQogCiAgICAgaWYgKGluaXRpYWxpemVTdWNjZWVkZWQp
IHsKICAgICAgICAgbV9yZW5kZXJlckluaXRpYWxpemVkID0gdHJ1ZTsKQEAgLTI0NCwxNSArMjU2
LDE4IEBAIGJvb2wgQ0NUaHJlYWRQcm94eTo6cmVjcmVhdGVDb250ZXh0KCkKICAgICAvLyBNYWtl
IGEgYmxvY2tpbmcgY2FsbCB0byByZWNyZWF0ZUNvbnRleHRPbkltcGxUaHJlYWQuIFRoZSByZXN1
bHRzIG9mIHRoYXQKICAgICAvLyBjYWxsIGFyZSBwdXNoZWQgaW50byB0aGUgcmVjcmVhdGVTdWNj
ZWVkZWQgYW5kIGNhcGFiaWxpdGllcyBsb2NhbAogICAgIC8vIHZhcmlhYmxlcy4KLSAgICBDQ0Nv
bXBsZXRpb25FdmVudCBjb21wbGV0aW9uOwogICAgIGJvb2wgcmVjcmVhdGVTdWNjZWVkZWQgPSBm
YWxzZTsKICAgICBSZW5kZXJlckNhcGFiaWxpdGllcyBjYXBhYmlsaXRpZXM7Ci0gICAgQ0NQcm94
eTo6aW1wbFRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhy
ZWFkUHJveHk6OnJlY3JlYXRlQ29udGV4dE9uSW1wbFRocmVhZCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29tcGxldGlvbiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LmxlYWtQdHIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmcmVjcmVhdGVTdWNjZWVkZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhcGFiaWxpdGllcykpOwotICAgIGNvbXBs
ZXRpb24ud2FpdCgpOworICAgIHsKKyAgICAgICAgRGVidWdTY29wZWRTZXRNYWluVGhyZWFkQmxv
Y2tlZCBtYWluVGhyZWFkQmxvY2tlZDsKKyAgICAgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxl
dGlvbjsKKyAgICAgICAgQ0NQcm94eTo6aW1wbFRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVDQ1Ro
cmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OnJlY3JlYXRlQ29udGV4dE9uSW1wbFRocmVh
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJmNvbXBsZXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubGVha1B0cigpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVjcmVhdGVTdWNj
ZWVkZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZjYXBhYmlsaXRpZXMpKTsKKyAgICAgICAgY29tcGxldGlvbi53YWl0KCk7Cisg
ICAgfQogCiAgICAgaWYgKHJlY3JlYXRlU3VjY2VlZGVkKQogICAgICAgICBtX1JlbmRlcmVyQ2Fw
YWJpbGl0aWVzTWFpblRocmVhZENvcHkgPSBjYXBhYmlsaXRpZXM7CkBAIC0yNjksNiArMjg0LDcg
QEAgdm9pZCBDQ1RocmVhZFByb3h5OjppbXBsU2lkZVJlbmRlcmluZ1N0YXRzKENDUmVuZGVyaW5n
U3RhdHMmIHN0YXRzKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKKyAgICBEZWJ1
Z1Njb3BlZFNldE1haW5UaHJlYWRCbG9ja2VkIG1haW5UaHJlYWRCbG9ja2VkOwogICAgIENDQ29t
cGxldGlvbkV2ZW50IGNvbXBsZXRpb247CiAgICAgQ0NQcm94eTo6aW1wbFRocmVhZCgpLT5wb3N0
VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OmltcGxTaWRlUmVu
ZGVyaW5nU3RhdHNPbkltcGxUaHJlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJmNvbXBsZXRpb24sCkBAIC0zMTQsNyArMzMwLDcgQEAg
dm9pZCBDQ1RocmVhZFByb3h5OjpkaWRMb3NlQ29udGV4dE9uSW1wbFRocmVhZCgpCiAgICAgQVNT
RVJUKGlzSW1wbFRocmVhZCgpKTsKICAgICBUUkFDRV9FVkVOVDAoImNjIiwgIkNDVGhyZWFkUHJv
eHk6OmRpZExvc2VDb250ZXh0T25JbXBsVGhyZWFkIik7CiAgICAgaWYgKG1fY3VycmVudFRleHR1
cmVVcGRhdGVDb250cm9sbGVyT25JbXBsVGhyZWFkKQotICAgICAgICBtX2N1cnJlbnRUZXh0dXJl
VXBkYXRlQ29udHJvbGxlck9uSW1wbFRocmVhZC0+ZGlzY2FyZFVwbG9hZHMoKTsKKyAgICAgICAg
bV9jdXJyZW50VGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXJPbkltcGxUaHJlYWQtPmRpc2NhcmRBbGxV
cGxvYWRzKCk7CiAgICAgbV9zY2hlZHVsZXJPbkltcGxUaHJlYWQtPmRpZExvc2VDb250ZXh0KCk7
CiB9CiAKQEAgLTMzMyw2ICszNDksMjAgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpvblZTeW5jUGFy
YW1ldGVyc0NoYW5nZWQoZG91YmxlIG1vbm90b25pY1RpbWViYXNlLCBkb3VibGUgaW4KICAgICBt
X3NjaGVkdWxlck9uSW1wbFRocmVhZC0+c2V0VGltZWJhc2VBbmRJbnRlcnZhbChtb25vdG9uaWNU
aW1lYmFzZSwgaW50ZXJ2YWxJblNlY29uZHMpOwogfQogCit2b2lkIENDVGhyZWFkUHJveHk6OnJl
ZHVjZUNvbnRlbnRzVGV4dHVyZXNNZW1vcnlPbkltcGxUaHJlYWQoKQoreworICAgIEFTU0VSVChp
c0ltcGxUaHJlYWQoKSk7CisgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ1RocmVhZFByb3h5Ojpy
ZWR1Y2VDb250ZW50c1RleHR1cmVzTWVtb3J5T25JbXBsVGhyZWFkIik7CisKKyAgICBpZiAobV9s
YXllclRyZWVIb3N0LT5yZWR1Y2VDb250ZW50c1RleHR1cmVzTWVtb3J5T25JbXBsVGhyZWFkKG1f
bGF5ZXJUcmVlSG9zdEltcGwtPnJlc291cmNlUHJvdmlkZXIoKSkpIHsKKyAgICAgIGlmIChtX2N1
cnJlbnRUZXh0dXJlVXBkYXRlQ29udHJvbGxlck9uSW1wbFRocmVhZCkKKyAgICAgICAgICBtX2N1
cnJlbnRUZXh0dXJlVXBkYXRlQ29udHJvbGxlck9uSW1wbFRocmVhZC0+ZGlzY2FyZFVwbG9hZHNU
b0RlbGV0ZWRSZXNvdXJjZXMoKTsKKyAgICAgICAgbV9jb250ZW50c1RleHR1cmVzUHVyZ2VDb3Vu
dCArPSAxOworICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5zZXRDb250ZW50c1RleHR1cmVz
UHVyZ2VkKCk7CisgICAgICAgIHNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCk7CisgICAgfQor
fQorCiB2b2lkIENDVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCkKIHsK
ICAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOwpAQCAtMzgxLDYgKzQxMSw3IEBAIHZvaWQgQ0NU
aHJlYWRQcm94eTo6c3RhcnQoKQogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNT
RVJUKENDUHJveHk6OmltcGxUaHJlYWQoKSk7CiAgICAgLy8gQ3JlYXRlIExheWVyVHJlZUhvc3RJ
bXBsLgorICAgIERlYnVnU2NvcGVkU2V0TWFpblRocmVhZEJsb2NrZWQgbWFpblRocmVhZEJsb2Nr
ZWQ7CiAgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKICAgICBDQ1Byb3h5OjppbXBs
VGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94
eTo6aW5pdGlhbGl6ZUltcGxPbkltcGxUaHJlYWQsICZjb21wbGV0aW9uKSk7CiAgICAgY29tcGxl
dGlvbi53YWl0KCk7CkBAIC0zOTcsNyArNDI4LDYgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpzdG9w
KCkKICAgICAvLyBTeW5jaHJvbm91c2x5IGRlbGV0ZXMgdGhlIGltcGwuCiAgICAgewogICAgICAg
ICBEZWJ1Z1Njb3BlZFNldE1haW5UaHJlYWRCbG9ja2VkIG1haW5UaHJlYWRCbG9ja2VkOwotCiAg
ICAgICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CiAgICAgICAgIENDUHJveHk6Omlt
cGxUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFBy
b3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25JbXBsVGhyZWFkLCAmY29tcGxldGlvbikpOwogICAg
ICAgICBjb21wbGV0aW9uLndhaXQoKTsKQEAgLTQxMiw2ICs0NDIsNyBAQCB2b2lkIENDVGhyZWFk
UHJveHk6OnN0b3AoKQogCiB2b2lkIENDVGhyZWFkUHJveHk6OmZvcmNlU2VyaWFsaXplT25Td2Fw
QnVmZmVycygpCiB7CisgICAgRGVidWdTY29wZWRTZXRNYWluVGhyZWFkQmxvY2tlZCBtYWluVGhy
ZWFkQmxvY2tlZDsKICAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOwogICAgIENDUHJv
eHk6OmltcGxUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1Ro
cmVhZFByb3h5Ojpmb3JjZVNlcmlhbGl6ZU9uU3dhcEJ1ZmZlcnNPbkltcGxUaHJlYWQsICZjb21w
bGV0aW9uKSk7CiAgICAgY29tcGxldGlvbi53YWl0KCk7CkBAIC00NTQsNyArNDg1LDcgQEAgdm9p
ZCBDQ1RocmVhZFByb3h5OjpzY2hlZHVsZWRBY3Rpb25CZWdpbkZyYW1lKCkKICAgICBtX3BlbmRp
bmdCZWdpbkZyYW1lUmVxdWVzdCA9IGFkb3B0UHRyKG5ldyBCZWdpbkZyYW1lQW5kQ29tbWl0U3Rh
dGUoKSk7CiAgICAgbV9wZW5kaW5nQmVnaW5GcmFtZVJlcXVlc3QtPm1vbm90b25pY0ZyYW1lQmVn
aW5UaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CiAgICAgbV9wZW5kaW5nQmVn
aW5GcmFtZVJlcXVlc3QtPnNjcm9sbEluZm8gPSBtX2xheWVyVHJlZUhvc3RJbXBsLT5wcm9jZXNz
U2Nyb2xsRGVsdGFzKCk7Ci0gICAgbV9wZW5kaW5nQmVnaW5GcmFtZVJlcXVlc3QtPmNvbnRlbnRz
VGV4dHVyZXNXZXJlRGVsZXRlZCA9IG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRlbnRzVGV4dHVy
ZXNQdXJnZWQoKTsKKyAgICBtX3BlbmRpbmdCZWdpbkZyYW1lUmVxdWVzdC0+Y29udGVudHNUZXh0
dXJlc1B1cmdlQWNrID0gbV9jb250ZW50c1RleHR1cmVzUHVyZ2VDb3VudDsKICAgICBtX3BlbmRp
bmdCZWdpbkZyYW1lUmVxdWVzdC0+bWVtb3J5QWxsb2NhdGlvbkxpbWl0Qnl0ZXMgPSBtX2xheWVy
VHJlZUhvc3RJbXBsLT5tZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlcygpOwogCiAgICAgbV9tYWlu
VGhyZWFkUHJveHktPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQ
cm94eTo6YmVnaW5GcmFtZSkpOwpAQCAtNTIxLDggKzU1Miw3IEBAIHZvaWQgQ0NUaHJlYWRQcm94
eTo6YmVnaW5GcmFtZSgpCiAgICAgaWYgKCFtX2xheWVyVHJlZUhvc3QtPmluaXRpYWxpemVSZW5k
ZXJlcklmTmVlZGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChyZXF1ZXN0LT5jb250
ZW50c1RleHR1cmVzV2VyZURlbGV0ZWQpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZXZpY3RB
bGxDb250ZW50VGV4dHVyZXMoKTsKKyAgICBtX2xheWVyVHJlZUhvc3QtPmRlc3Ryb3lDb250ZW50
c1RleHR1cmVzRXZpY3RlZEJ5SW1wbFRocmVhZCgpOwogCiAgICAgT3duUHRyPENDVGV4dHVyZVVw
ZGF0ZVF1ZXVlPiBxdWV1ZSA9IGFkb3B0UHRyKG5ldyBDQ1RleHR1cmVVcGRhdGVRdWV1ZSk7CiAg
ICAgbV9sYXllclRyZWVIb3N0LT51cGRhdGVMYXllcnMoKihxdWV1ZS5nZXQoKSksIHJlcXVlc3Qt
Pm1lbW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzKTsKQEAgLTU0NSw5ICs1NzUsOCBAQCB2b2lkIEND
VGhyZWFkUHJveHk6OmJlZ2luRnJhbWUoKQogICAgIHsKICAgICAgICAgVFJBQ0VfRVZFTlQwKCJj
YyIsICJjb21taXQiKTsKICAgICAgICAgRGVidWdTY29wZWRTZXRNYWluVGhyZWFkQmxvY2tlZCBt
YWluVGhyZWFkQmxvY2tlZDsKLQogICAgICAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9u
OwotICAgICAgICBDQ1Byb3h5OjppbXBsVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFk
VGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUNvbXBsZXRlT25JbXBsVGhyZWFk
LCAmY29tcGxldGlvbiwgcXVldWUucmVsZWFzZSgpLCByZXF1ZXN0LT5jb250ZW50c1RleHR1cmVz
V2VyZURlbGV0ZWQpKTsKKyAgICAgICAgQ0NQcm94eTo6aW1wbFRocmVhZCgpLT5wb3N0VGFzayhj
cmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVDb21wbGV0
ZU9uSW1wbFRocmVhZCwgJmNvbXBsZXRpb24sIHF1ZXVlLnJlbGVhc2UoKSwgcmVxdWVzdC0+Y29u
dGVudHNUZXh0dXJlc1B1cmdlQWNrKSk7CiAgICAgICAgIGNvbXBsZXRpb24ud2FpdCgpOwogICAg
IH0KIApAQCAtNTU1LDcgKzU4NCw3IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZSgp
CiAgICAgbV9sYXllclRyZWVIb3N0LT5kaWRCZWdpbkZyYW1lKCk7CiB9CiAKLXZvaWQgQ0NUaHJl
YWRQcm94eTo6YmVnaW5GcmFtZUNvbXBsZXRlT25JbXBsVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50
KiBjb21wbGV0aW9uLCBQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZVF1ZXVlPiBxdWV1ZSwgYm9v
bCBjb250ZW50c1RleHR1cmVzV2VyZURlbGV0ZWQpCit2b2lkIENDVGhyZWFkUHJveHk6OmJlZ2lu
RnJhbWVDb21wbGV0ZU9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbiwg
UGFzc093blB0cjxDQ1RleHR1cmVVcGRhdGVRdWV1ZT4gcXVldWUsIGludCBjb250ZW50c1RleHR1
cmVzUHVyZ2VBY2spCiB7CiAgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ1RocmVhZFByb3h5Ojpi
ZWdpbkZyYW1lQ29tcGxldGVPbkltcGxUaHJlYWQiKTsKICAgICBBU1NFUlQoIW1fY29tbWl0Q29t
cGxldGlvbkV2ZW50T25JbXBsVGhyZWFkKTsKQEAgLTU2OCwxNSArNTk3LDE3IEBAIHZvaWQgQ0NU
aHJlYWRQcm94eTo6YmVnaW5GcmFtZUNvbXBsZXRlT25JbXBsVGhyZWFkKENDQ29tcGxldGlvbkV2
ZW50KiBjb21wbGV0aW9uCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIWNvbnRl
bnRzVGV4dHVyZXNXZXJlRGVsZXRlZCAmJiBtX2xheWVyVHJlZUhvc3RJbXBsLT5jb250ZW50c1Rl
eHR1cmVzUHVyZ2VkKCkpIHsKLSAgICAgICAgLy8gV2UgcHVyZ2VkIHRoZSBjb250ZW50IHRleHR1
cmVzIG9uIHRoZSBpbXBsIHRocmVhZCBiZXR3ZWVuIHRoZSB0aW1lIHdlCi0gICAgICAgIC8vIHBv
c3RlZCB0aGUgYmVnaW5GcmFtZSB0YXNrIGFuZCBub3csIG1lYW5pbmcgd2UgaGF2ZSBhIGJ1bmNo
IG9mCi0gICAgICAgIC8vIHVwbG9hZHMgdGhhdCBhcmUgbm93IGludmFsaWQuIENsZWFyIHRoZSB1
cGxvYWRzICh0aGV5IGFsbCBnbyB0bwotICAgICAgICAvLyBjb250ZW50IHRleHR1cmVzKSwgYW5k
IGtpY2sgYW5vdGhlciBjb21taXQgdG8gZmlsbCB0aGVtIGFnYWluLgotICAgICAgICBxdWV1ZS0+
Y2xlYXJVcGxvYWRzKCk7CisgICAgbV9jb250ZW50c1RleHR1cmVzUHVyZ2VBY2sgPSBjb250ZW50
c1RleHR1cmVzUHVyZ2VBY2s7CisgICAgaWYgKG1fY29udGVudHNUZXh0dXJlc1B1cmdlQWNrICE9
IG1fY29udGVudHNUZXh0dXJlc1B1cmdlQ291bnQpIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQwKCJj
YyIsICJDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQ29tcGxldGVPbkltcGxUaHJlYWRfcHVyZ2Vf
c2luY2VfY29tbWl0Iik7CisgICAgICAgIC8vIFRoZSB1cGxvYWQgcXVldWUgbWF5IGNvbnRhaW4g
cmVmZXJlbmNlcyB0byB0ZXh0dXJlcyB0aGF0IHdlcmUgYXN5bmNocm9ub3VzbHkKKyAgICAgICAg
Ly8gZGVsZXRlZC4gUmVtb3ZlIHRoZW0uCisgICAgICAgIHF1ZXVlLT5jbGVhclVwbG9hZHNUb0Rl
bGV0ZWRSZXNvdXJjZXMoKTsKKyAgICAgICAgLy8gVGhlcmUgZXhpc3QgdGV4dHVyZXMgcHVyZ2Vk
IGJ5IHRoZSBpbXBsIHRocmVhZCB0aGF0IHRoZSBtYWluIHRocmVhZAorICAgICAgICAvLyBkb2Vz
bid0IGtub3cgb2YuIFJlcXVlc3QgYSByZWNvbW1pdCwgd2hpY2ggd2lsbCBpbmZvcm0gdGhlIG1h
aW4gdGhyZWFkCisgICAgICAgIC8vIG9mIHRoZSBwdXJnZWQgcmVzb3VyY2VzLgogICAgICAgICBz
ZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpOwotICAgIH0gZWxzZQotICAgICAgICBtX3Jlc2V0
Q29udGVudHNUZXh0dXJlc1B1cmdlZEFmdGVyQ29tbWl0T25JbXBsVGhyZWFkID0gdHJ1ZTsKKyAg
ICB9CiAKICAgICBib29sIGhhc1Jlc291cmNlVXBkYXRlcyA9IHF1ZXVlLT5oYXNNb3JlVXBkYXRl
cygpOwogICAgIGlmIChoYXNSZXNvdXJjZVVwZGF0ZXMpCkBAIC02MjQsOCArNjU1LDggQEAgdm9p
ZCBDQ1RocmVhZFByb3h5OjpzY2hlZHVsZWRBY3Rpb25Db21taXQoKQogICAgIG1fbGF5ZXJUcmVl
SG9zdC0+YmVnaW5Db21taXRPbkltcGxUaHJlYWQobV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSk7
CiAgICAgbV9sYXllclRyZWVIb3N0LT5maW5pc2hDb21taXRPbkltcGxUaHJlYWQobV9sYXllclRy
ZWVIb3N0SW1wbC5nZXQoKSk7CiAKLSAgICBpZiAobV9yZXNldENvbnRlbnRzVGV4dHVyZXNQdXJn
ZWRBZnRlckNvbW1pdE9uSW1wbFRocmVhZCkgewotICAgICAgICBtX3Jlc2V0Q29udGVudHNUZXh0
dXJlc1B1cmdlZEFmdGVyQ29tbWl0T25JbXBsVGhyZWFkID0gZmFsc2U7CisgICAgaWYgKG1fY29u
dGVudHNUZXh0dXJlc1B1cmdlQWNrID09IG1fY29udGVudHNUZXh0dXJlc1B1cmdlQ291bnQpIHsK
KyAgICAgICAgLy8gVGhlIHRyZWUgbm93IHJlZmVyZW5jZXMgbm8gcHVyZ2VkIHRleHR1cmVzLiBB
bGxvdyBpdCB0byBkcmF3IGFnYWluLgogICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5yZXNl
dENvbnRlbnRzVGV4dHVyZXNQdXJnZWQoKTsKICAgICB9CiAKQEAgLTcxOSw5ICs3NTAsMTIgQEAg
dm9pZCBDQ1RocmVhZFByb3h5OjphY3F1aXJlTGF5ZXJUZXh0dXJlcygpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NUaHJlYWRQcm94eTo6YWNxdWlyZUxheWVy
VGV4dHVyZXMiKTsKLSAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOwotICAgIENDUHJv
eHk6OmltcGxUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1Ro
cmVhZFByb3h5OjphY3F1aXJlTGF5ZXJUZXh0dXJlc0Zvck1haW5UaHJlYWRPbkltcGxUaHJlYWQs
ICZjb21wbGV0aW9uKSk7Ci0gICAgY29tcGxldGlvbi53YWl0KCk7IC8vIEJsb2NrIHVudGlsIGl0
IGlzIHNhZmUgdG8gd3JpdGUgdG8gbGF5ZXIgdGV4dHVyZXMgZnJvbSB0aGUgbWFpbiB0aHJlYWQu
CisgICAgeworICAgICAgICBEZWJ1Z1Njb3BlZFNldE1haW5UaHJlYWRCbG9ja2VkIG1haW5UaHJl
YWRCbG9ja2VkOworICAgICAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOworICAgICAg
ICBDQ1Byb3h5OjppbXBsVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlz
LCAmQ0NUaHJlYWRQcm94eTo6YWNxdWlyZUxheWVyVGV4dHVyZXNGb3JNYWluVGhyZWFkT25JbXBs
VGhyZWFkLCAmY29tcGxldGlvbikpOworICAgICAgICBjb21wbGV0aW9uLndhaXQoKTsgLy8gQmxv
Y2sgdW50aWwgaXQgaXMgc2FmZSB0byB3cml0ZSB0byBsYXllciB0ZXh0dXJlcyBmcm9tIHRoZSBt
YWluIHRocmVhZC4KKyAgICB9CiAKICAgICBtX3RleHR1cmVzQWNxdWlyZWQgPSB0cnVlOwogfQpA
QCAtODY5LDggKzkwMyw3IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6bGF5ZXJUcmVlSG9zdENsb3Nl
ZE9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvCiB7CiAgICAgVFJBQ0Vf
RVZFTlQwKCJjYyIsICJDQ1RocmVhZFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25JbXBsVGhy
ZWFkIik7CiAgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKLSAgICBpZiAoIW1fbGF5ZXJUcmVl
SG9zdEltcGwtPmNvbnRlbnRzVGV4dHVyZXNQdXJnZWQoKSkKLSAgICAgICAgbV9sYXllclRyZWVI
b3N0LT5kZWxldGVDb250ZW50c1RleHR1cmVzT25JbXBsVGhyZWFkKG1fbGF5ZXJUcmVlSG9zdElt
cGwtPnJlc291cmNlUHJvdmlkZXIoKSk7CisgICAgbV9sYXllclRyZWVIb3N0LT5kZWxldGVBbGxD
b250ZW50c1RleHR1cmVzT25JbXBsVGhyZWFkKG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJlc291cmNl
UHJvdmlkZXIoKSk7CiAgICAgbV9pbnB1dEhhbmRsZXJPbkltcGxUaHJlYWQuY2xlYXIoKTsKICAg
ICBtX2xheWVyVHJlZUhvc3RJbXBsLmNsZWFyKCk7CiAgICAgbV9zY2hlZHVsZXJPbkltcGxUaHJl
YWQuY2xlYXIoKTsKQEAgLTg5Miw4ICs5MjUsNyBAQCB2b2lkIENDVGhyZWFkUHJveHk6OnJlY3Jl
YXRlQ29udGV4dE9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbiwgQwog
ewogICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NUaHJlYWRQcm94eTo6cmVjcmVhdGVDb250ZXh0
T25JbXBsVGhyZWFkIik7CiAgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKLSAgICBpZiAoIW1f
bGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRlbnRzVGV4dHVyZXNQdXJnZWQoKSkKLSAgICAgICAgbV9s
YXllclRyZWVIb3N0LT5kZWxldGVDb250ZW50c1RleHR1cmVzT25JbXBsVGhyZWFkKG1fbGF5ZXJU
cmVlSG9zdEltcGwtPnJlc291cmNlUHJvdmlkZXIoKSk7CisgICAgbV9sYXllclRyZWVIb3N0LT5k
ZWxldGVBbGxDb250ZW50c1RleHR1cmVzT25JbXBsVGhyZWFkKG1fbGF5ZXJUcmVlSG9zdEltcGwt
PnJlc291cmNlUHJvdmlkZXIoKSk7CiAgICAgKnJlY3JlYXRlU3VjY2VlZGVkID0gbV9sYXllclRy
ZWVIb3N0SW1wbC0+aW5pdGlhbGl6ZVJlbmRlcmVyKGFkb3B0UHRyKGNvbnRleHRQdHIpLCB0ZXh0
dXJlVXBsb2FkZXIpOwogICAgIGlmICgqcmVjcmVhdGVTdWNjZWVkZWQpIHsKICAgICAgICAgKmNh
cGFiaWxpdGllcyA9IG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJlbmRlcmVyQ2FwYWJpbGl0aWVzKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RocmVhZFByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKaW5kZXggZTEyZWU3ZWMxOTA4ZDA2M2ZjZDBlYTlkMjFj
ODU3NjllMzE0ODRkNS4uZjU2OTczZGMzYzhjYzI4YTE1MmFhY2VjM2M2NzBjMTlkYmJlODEyZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUaHJlYWRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaApAQCAtODEsNiArODEsNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCkgT1ZFUlJJREU7CiAgICAg
dmlydHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCkgT1ZFUlJJREU7CiAgICAg
dmlydHVhbCB2b2lkIHBvc3RBbmltYXRpb25FdmVudHNUb01haW5UaHJlYWRPbkltcGxUaHJlYWQo
UGFzc093blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4sIGRvdWJsZSB3YWxsQ2xvY2tUaW1l
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVkdWNlQ29udGVudHNUZXh0dXJlc01lbW9y
eU9uSW1wbFRocmVhZCgpIE9WRVJSSURFOwogCiAgICAgLy8gQ0NTY2hlZHVsZXJDbGllbnQgaW1w
bGVtZW50YXRpb24KICAgICB2aXJ0dWFsIGJvb2wgY2FuRHJhdygpIE9WRVJSSURFOwpAQCAtMTAy
LDEzICsxMDMsMTMgQEAgcHJpdmF0ZToKICAgICAvLyBTZXQgb24gaW1wbCB0aHJlYWQsIHJlYWQg
b24gbWFpbiB0aHJlYWQuCiAgICAgc3RydWN0IEJlZ2luRnJhbWVBbmRDb21taXRTdGF0ZSB7CiAg
ICAgICAgIEJlZ2luRnJhbWVBbmRDb21taXRTdGF0ZSgpCi0gICAgICAgICAgICA6IG1vbm90b25p
Y0ZyYW1lQmVnaW5UaW1lKDApCisgICAgICAgICAgICA6IG1vbm90b25pY0ZyYW1lQmVnaW5UaW1l
KDApLCBjb250ZW50c1RleHR1cmVzUHVyZ2VBY2soMCkKICAgICAgICAgewogICAgICAgICB9CiAK
ICAgICAgICAgZG91YmxlIG1vbm90b25pY0ZyYW1lQmVnaW5UaW1lOwogICAgICAgICBPd25QdHI8
Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbzsKLSAgICAgICAgYm9vbCBjb250ZW50c1Rl
eHR1cmVzV2VyZURlbGV0ZWQ7CisgICAgICAgIGludCBjb250ZW50c1RleHR1cmVzUHVyZ2VBY2s7
CiAgICAgICAgIHNpemVfdCBtZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlczsKICAgICB9OwogICAg
IE93blB0cjxCZWdpbkZyYW1lQW5kQ29tbWl0U3RhdGU+IG1fcGVuZGluZ0JlZ2luRnJhbWVSZXF1
ZXN0OwpAQCAtMTI5LDcgKzEzMCw3IEBAIHByaXZhdGU6CiAgICAgICAgIEludFJlY3QgcmVjdDsK
ICAgICB9OwogICAgIHZvaWQgZm9yY2VCZWdpbkZyYW1lT25JbXBsVGhyZWFkKENDQ29tcGxldGlv
bkV2ZW50Kik7Ci0gICAgdm9pZCBiZWdpbkZyYW1lQ29tcGxldGVPbkltcGxUaHJlYWQoQ0NDb21w
bGV0aW9uRXZlbnQqLCBQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZVF1ZXVlPiwgYm9vbCBjb250
ZW50c1RleHR1cmVzV2VyZURlbGV0ZWQpOworICAgIHZvaWQgYmVnaW5GcmFtZUNvbXBsZXRlT25J
bXBsVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiwgUGFzc093blB0cjxDQ1RleHR1cmVVcGRhdGVR
dWV1ZT4sIGludCBjb250ZW50c1RleHR1cmVzUHVyZ2VBY2spOwogICAgIHZvaWQgYmVnaW5GcmFt
ZUFib3J0ZWRPbkltcGxUaHJlYWQoKTsKICAgICB2b2lkIHJlcXVlc3RSZWFkYmFja09uSW1wbFRo
cmVhZChSZWFkYmFja1JlcXVlc3QqKTsKICAgICB2b2lkIHJlcXVlc3RTdGFydFBhZ2VTY2FsZUFu
aW1hdGlvbk9uSW1wbFRocmVhZChJbnRTaXplIHRhcmdldFBvc2l0aW9uLCBib29sIHVzZUFuY2hv
ciwgZmxvYXQgc2NhbGUsIGRvdWJsZSBkdXJhdGlvblNlYyk7CkBAIC0xODcsOSArMTg4LDE0IEBA
IHByaXZhdGU6CiAKICAgICBPd25QdHI8Q0NUZXh0dXJlVXBkYXRlQ29udHJvbGxlcj4gbV9jdXJy
ZW50VGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXJPbkltcGxUaHJlYWQ7CiAKLSAgICAvLyBTZXQgd2hl
biB3ZSBuZWVkIHRvIHJlc2V0IHRoZSBjb250ZW50c1RleHR1cmVzUHVyZ2VkIGZsYWcgYWZ0ZXIg
dGhlCi0gICAgLy8gY29tbWl0LgotICAgIGJvb2wgbV9yZXNldENvbnRlbnRzVGV4dHVyZXNQdXJn
ZWRBZnRlckNvbW1pdE9uSW1wbFRocmVhZDsKKyAgICAvLyBDb3VudGVyIGluY3JlbWVudGVkIGV2
ZXJ5IHRpbWUgdGhlIGltcGwgdGhyZWFkIGRlbGV0ZXMgdGV4dHVyZXMsIHNlbnQgdG8gdGhlCisg
ICAgLy8gbWFpbiB0aHJlYWQgd2l0aCBlYWNoIGNvbW1pdC4KKyAgICBpbnQgbV9jb250ZW50c1Rl
eHR1cmVzUHVyZ2VDb3VudDsKKworICAgIC8vIFZhbHVlIHRoYXQgdGhlIG1haW4gdGhyZWFkIHNl
bmRzIGFzIGFuIGFja25vd2xlZGdlbWVudCB0byB0aGUgaW1wbCB0aHJlYWQuCisgICAgLy8gSWYg
dGhpcyBkb2VzIG5vdCBlcXVhbCBtX2NvbnRlbnRzVGV4dHVyZXNQdXJnZUNvdW50IHRoZW4gdGhl
IGltcGwgbGF5ZXIgdHJlZQorICAgIC8vIG1heSByZWZlcmVuY2UgdGV4dHVyZXMgdGhhdCBoYXZl
IGJlZW4gcHVyZ2VkLgorICAgIGludCBtX2NvbnRlbnRzVGV4dHVyZXNQdXJnZUFjazsKIAogICAg
IC8vIFNldCB3aGVuIHRoZSBuZXh0IGRyYXcgc2hvdWxkIHBvc3QgZGlkQ29tbWl0QW5kRHJhd0Zy
YW1lIHRvIHRoZSBtYWluIHRocmVhZC4KICAgICBib29sIG1fbmV4dEZyYW1lSXNOZXdseUNvbW1p
dHRlZEZyYW1lT25JbXBsVGhyZWFkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAppbmRleCAyYzg3NGU4Y2MwYzkz
OGE0OTg4MjhkNjlkMDcwNWM0OTZjZTM4MTlmLi43Y2JlZThkZDAzZGQ2YTNlNzJlZWE1OWM0ZmFm
NGRlODhlYmE0NWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
TGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcApAQCAtODcsNiArODcsNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCkgT1ZFUlJJREUg
eyBtX2RpZFJlcXVlc3RSZWRyYXcgPSB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRz
Q29tbWl0T25JbXBsVGhyZWFkKCkgT1ZFUlJJREUgeyBtX2RpZFJlcXVlc3RDb21taXQgPSB0cnVl
OyB9CiAgICAgdmlydHVhbCB2b2lkIHBvc3RBbmltYXRpb25FdmVudHNUb01haW5UaHJlYWRPbklt
cGxUaHJlYWQoUGFzc093blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4sIGRvdWJsZSB3YWxs
Q2xvY2tUaW1lKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVkdWNlQ29udGVudHNU
ZXh0dXJlc01lbW9yeU9uSW1wbFRocmVhZCgpIE9WRVJSSURFIHsgfQogCiAgICAgUGFzc093blB0
cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBjcmVhdGVMYXllclRyZWVIb3N0KGJvb2wgcGFydGlhbFN3
YXAsIFBhc3NPd25QdHI8Q0NHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dCwgUGFzc093
blB0cjxDQ0xheWVySW1wbD4gcm9vdFB0cikKICAgICB7CkBAIC0zNzczLDEyICszNzc0LDYgQEAg
VEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzdXJmYWNlVGV4dHVyZUNhY2hpbmdOb1Bh
cnRpYWxTd2FwKQogICAgIH0KIH0KIAotVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBy
ZWxlYXNlQ29udGVudHNUZXh0dXJlU2hvdWxkVHJpZ2dlckNvbW1pdCkKLXsKLSAgICBtX2hvc3RJ
bXBsLT5yZWxlYXNlQ29udGVudHNUZXh0dXJlcygpOwotICAgIEVYUEVDVF9UUlVFKG1fZGlkUmVx
dWVzdENvbW1pdCk7Ci19Ci0KIHN0cnVjdCBSZW5kZXJQYXNzQ2FjaGVFbnRyeSB7CiAgICAgbXV0
YWJsZSBPd25QdHI8Q0NSZW5kZXJQYXNzPiByZW5kZXJQYXNzUHRyOwogICAgIENDUmVuZGVyUGFz
cyogcmVuZGVyUGFzczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NQcmlvcml0aXplZFRleHR1cmVUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LmNwcAppbmRleCA0YmNhY2NkYzNhOWEwNzhmZmI4
ZGRmMGUxNmU4ZWQ0N2Q0YjM3NGY3Li4zODNmYTU5ODc5ZGQ0ZWJmNzQzZTdjYzM0MzVmYTg1MGQ0
OTFkZmVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDUHJpb3Jp
dGl6ZWRUZXh0dXJlVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q1ByaW9yaXRpemVkVGV4dHVyZVRlc3QuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAi
Q0NUaWxlZExheWVyVGVzdENvbW1vbi5oIgogI2luY2x1ZGUgIkZha2VDQ0dyYXBoaWNzQ29udGV4
dC5oIgogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8cHVibGljL1dlYkNvbXBv
c2l0b3IuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1c2luZyBuYW1lc3BhY2UgV2Vi
S2l0VGVzdHM7CkBAIC00NiwxNCArNDcsMTggQEAgcHVibGljOgogICAgICAgICAsIG1fdGV4dHVy
ZUZvcm1hdChHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkKICAgICAgICAgLCBtX2NvbnRleHQoV2Vi
S2l0OjpjcmVhdGVGYWtlQ0NHcmFwaGljc0NvbnRleHQoKSkKICAgICB7CisgICAgICAgIFdlYktp
dDo6V2ViQ29tcG9zaXRvcjo6aW5pdGlhbGl6ZSgwKTsKICAgICAgICAgRGVidWdTY29wZWRTZXRJ
bXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAgICAgICAgIG1fcmVzb3VyY2VQcm92aWRlciA9IENDUmVz
b3VyY2VQcm92aWRlcjo6Y3JlYXRlKG1fY29udGV4dC5nZXQoKSk7CiAgICAgfQogCiAgICAgdmly
dHVhbCB+Q0NQcmlvcml0aXplZFRleHR1cmVUZXN0KCkKICAgICB7Ci0gICAgICAgIERlYnVnU2Nv
cGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwotICAgICAgICBtX3Jlc291cmNlUHJvdmlkZXIu
Y2xlYXIoKTsKKyAgICAgICAgeworICAgICAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFk
IGltcGxUaHJlYWQ7CisgICAgICAgICAgICBtX3Jlc291cmNlUHJvdmlkZXIuY2xlYXIoKTsKKyAg
ICAgICAgfQorICAgICAgICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6OnNodXRkb3duKCk7CiAgICAg
fQogCiAgICAgc2l6ZV90IHRleHR1cmVzTWVtb3J5U2l6ZShzaXplX3QgdGV4dHVyZUNvdW50KQpA
QCAtNjgsMTIgKzczLDEyIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgdmFsaWRhdGVUZXh0dXJlKE93
blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZT4mIHRleHR1cmUsIGJvb2wgcmVxdWVzdExhdGUpCiAg
ICAgewotICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKICNpZiAh
QVNTRVJUX0RJU0FCTEVECiAgICAgICAgIHRleHR1cmUtPnRleHR1cmVNYW5hZ2VyKCktPmFzc2Vy
dEludmFyaWFudHMoKTsKICNlbmRpZgogICAgICAgICBpZiAocmVxdWVzdExhdGUpCiAgICAgICAg
ICAgICB0ZXh0dXJlLT5yZXF1ZXN0TGF0ZSgpOworICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxU
aHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZCBpbXBsVGhyZWFkQW5kTWFpblRocmVhZEJsb2NrZWQ7
CiAgICAgICAgIGJvb2wgc3VjY2VzcyA9IHRleHR1cmUtPmNhbkFjcXVpcmVCYWNraW5nVGV4dHVy
ZSgpOwogICAgICAgICBpZiAoc3VjY2VzcykKICAgICAgICAgICAgIHRleHR1cmUtPmFjcXVpcmVC
YWNraW5nVGV4dHVyZShyZXNvdXJjZVByb3ZpZGVyKCkpOwpAQCAtMTI4LDcgKzEzMyw3IEBAIFRF
U1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHJlcXVlc3RUZXh0dXJlRXhjZWVkaW5nTWF4
TGltaXQpCiAgICAgRVhQRUNUX0VRKHRleHR1cmVzTWVtb3J5U2l6ZShtYXhUZXh0dXJlcyksIHRl
eHR1cmVNYW5hZ2VyLT5tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzKCkpOwogICAgIEVYUEVDVF9MRSh0
ZXh0dXJlTWFuYWdlci0+bWVtb3J5VXNlQnl0ZXMoKSwgdGV4dHVyZU1hbmFnZXItPm1lbW9yeUFi
b3ZlQ3V0b2ZmQnl0ZXMoKSk7CiAKLSAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRo
cmVhZDsKKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZCBp
bXBsVGhyZWFkQW5kTWFpblRocmVhZEJsb2NrZWQ7CiAgICAgdGV4dHVyZU1hbmFnZXItPmNsZWFy
QWxsTWVtb3J5KHJlc291cmNlUHJvdmlkZXIoKSk7CiB9CiAKQEAgLTE0OSw3ICsxNTQsNyBAQCBU
RVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCBjaGFuZ2VNZW1vcnlMaW1pdHMpCiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgKytpKQogICAgICAgICB2YWxpZGF0
ZVRleHR1cmUodGV4dHVyZXNbaV0sIGZhbHNlKTsKICAgICB7Ci0gICAgICAgIERlYnVnU2NvcGVk
U2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOworICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJl
YWRBbmRNYWluVGhyZWFkQmxvY2tlZCBpbXBsVGhyZWFkQW5kTWFpblRocmVhZEJsb2NrZWQ7CiAg
ICAgICAgIHRleHR1cmVNYW5hZ2VyLT5yZWR1Y2VNZW1vcnkocmVzb3VyY2VQcm92aWRlcigpKTsK
ICAgICB9CiAKQEAgLTE2Miw3ICsxNjcsNyBAQCBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVU
ZXN0LCBjaGFuZ2VNZW1vcnlMaW1pdHMpCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhU
ZXh0dXJlczsgKytpKQogICAgICAgICBFWFBFQ1RfRVEodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVz
W2ldLCBmYWxzZSksIGkgPCA1KTsKICAgICB7Ci0gICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRo
cmVhZCBpbXBsVGhyZWFkOworICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWRBbmRNYWlu
VGhyZWFkQmxvY2tlZCBpbXBsVGhyZWFkQW5kTWFpblRocmVhZEJsb2NrZWQ7CiAgICAgICAgIHRl
eHR1cmVNYW5hZ2VyLT5yZWR1Y2VNZW1vcnkocmVzb3VyY2VQcm92aWRlcigpKTsKICAgICB9CiAK
QEAgLTE3NSwxNCArMTgwLDE0IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIGNo
YW5nZU1lbW9yeUxpbWl0cykKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1heFRleHR1cmVz
OyArK2kpCiAgICAgICAgIEVYUEVDVF9FUSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbaV0sIGZh
bHNlKSwgaSA8IDQpOwogICAgIHsKLSAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGlt
cGxUaHJlYWQ7CisgICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZEFuZE1haW5UaHJlYWRC
bG9ja2VkIGltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZDsKICAgICAgICAgdGV4dHVyZU1h
bmFnZXItPnJlZHVjZU1lbW9yeShyZXNvdXJjZVByb3ZpZGVyKCkpOwogICAgIH0KIAogICAgIEVY
UEVDVF9FUSh0ZXh0dXJlc01lbW9yeVNpemUoNCksIHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlBYm92
ZUN1dG9mZkJ5dGVzKCkpOwogICAgIEVYUEVDVF9MRSh0ZXh0dXJlTWFuYWdlci0+bWVtb3J5VXNl
Qnl0ZXMoKSwgdGV4dHVyZU1hbmFnZXItPm1lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMoKSk7CiAKLSAg
ICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKKyAgICBEZWJ1Z1Njb3BlZFNl
dEltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZCBpbXBsVGhyZWFkQW5kTWFpblRocmVhZEJs
b2NrZWQ7CiAgICAgdGV4dHVyZU1hbmFnZXItPmNsZWFyQWxsTWVtb3J5KHJlc291cmNlUHJvdmlk
ZXIoKSk7CiB9CiAKQEAgLTI0Miw3ICsyNDcsNyBAQCBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1
cmVUZXN0LCB0ZXh0dXJlTWFuYWdlclBhcnRpYWxVcGRhdGVUZXh0dXJlcykKICAgICBFWFBFQ1Rf
RkFMU0UodGV4dHVyZXNbMl0tPmhhdmVCYWNraW5nVGV4dHVyZSgpKTsKICAgICBFWFBFQ1RfRkFM
U0UodGV4dHVyZXNbM10tPmhhdmVCYWNraW5nVGV4dHVyZSgpKTsKIAotICAgIERlYnVnU2NvcGVk
U2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOworICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZEFu
ZE1haW5UaHJlYWRCbG9ja2VkIGltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZDsKICAgICB0
ZXh0dXJlTWFuYWdlci0+Y2xlYXJBbGxNZW1vcnkocmVzb3VyY2VQcm92aWRlcigpKTsKIH0KIApA
QCAtMjgyLDcgKzI4Nyw3IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHRleHR1
cmVNYW5hZ2VyUHJpb3JpdGllc0FyZUVxdWFsKQogICAgIEVYUEVDVF9FUSh0ZXh0dXJlc01lbW9y
eVNpemUoOCksIHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzKCkpOwogICAg
IEVYUEVDVF9MRSh0ZXh0dXJlTWFuYWdlci0+bWVtb3J5VXNlQnl0ZXMoKSwgdGV4dHVyZU1hbmFn
ZXItPm1lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMoKSk7CiAKLSAgICBEZWJ1Z1Njb3BlZFNldEltcGxU
aHJlYWQgaW1wbFRocmVhZDsKKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWRBbmRNYWluVGhy
ZWFkQmxvY2tlZCBpbXBsVGhyZWFkQW5kTWFpblRocmVhZEJsb2NrZWQ7CiAgICAgdGV4dHVyZU1h
bmFnZXItPmNsZWFyQWxsTWVtb3J5KHJlc291cmNlUHJvdmlkZXIoKSk7CiB9CiAKQEAgLTMwMiw3
ICszMDcsNyBAQCBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCB0ZXh0dXJlTWFuYWdl
ckRlc3Ryb3llZEZpcnN0KQogICAgIEVYUEVDVF9UUlVFKHRleHR1cmUtPmhhdmVCYWNraW5nVGV4
dHVyZSgpKTsKIAogICAgIHsKLSAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxU
aHJlYWQ7CisgICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZEFuZE1haW5UaHJlYWRCbG9j
a2VkIGltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZDsKICAgICAgICAgdGV4dHVyZU1hbmFn
ZXItPmNsZWFyQWxsTWVtb3J5KHJlc291cmNlUHJvdmlkZXIoKSk7CiAgICAgfQogICAgIHRleHR1
cmVNYW5hZ2VyLmNsZWFyKCk7CkBAIC0zMzAsNyArMzM1LDcgQEAgVEVTVF9GKENDUHJpb3JpdGl6
ZWRUZXh0dXJlVGVzdCwgdGV4dHVyZU1vdmVkVG9OZXdNYW5hZ2VyKQogICAgIHRleHR1cmUtPnNl
dFRleHR1cmVNYW5hZ2VyKDApOwogCiAgICAgewotICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxU
aHJlYWQgaW1wbFRocmVhZDsKKyAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkQW5kTWFp
blRocmVhZEJsb2NrZWQgaW1wbFRocmVhZEFuZE1haW5UaHJlYWRCbG9ja2VkOwogICAgICAgICB0
ZXh0dXJlTWFuYWdlck9uZS0+Y2xlYXJBbGxNZW1vcnkocmVzb3VyY2VQcm92aWRlcigpKTsKICAg
ICB9CiAgICAgdGV4dHVyZU1hbmFnZXJPbmUuY2xlYXIoKTsKQEAgLTM0Niw3ICszNTEsNyBAQCBU
RVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCB0ZXh0dXJlTW92ZWRUb05ld01hbmFnZXIp
CiAgICAgRVhQRUNUX1RSVUUodGV4dHVyZS0+Y2FuQWNxdWlyZUJhY2tpbmdUZXh0dXJlKCkpOwog
ICAgIEVYUEVDVF9UUlVFKHRleHR1cmUtPmhhdmVCYWNraW5nVGV4dHVyZSgpKTsKIAotICAgIERl
YnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOworICAgIERlYnVnU2NvcGVkU2V0SW1w
bFRocmVhZEFuZE1haW5UaHJlYWRCbG9ja2VkIGltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tl
ZDsKICAgICB0ZXh0dXJlTWFuYWdlclR3by0+Y2xlYXJBbGxNZW1vcnkocmVzb3VyY2VQcm92aWRl
cigpKTsKIH0KIApAQCAtMzkyLDcgKzM5Nyw3IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVy
ZVRlc3QsIHJlbmRlclN1cmZhY2VzUmVkdWNlTWVtb3J5QXZhaWxhYmxlT3V0c2lkZVJvb3RTCiAg
ICAgRVhQRUNUX0VRKHRleHR1cmVzTWVtb3J5U2l6ZSg0KSwgdGV4dHVyZU1hbmFnZXItPm1lbW9y
eUZvclNlbGZNYW5hZ2VkVGV4dHVyZXMoKSk7CiAgICAgRVhQRUNUX0xFKHRleHR1cmVNYW5hZ2Vy
LT5tZW1vcnlVc2VCeXRlcygpLCB0ZXh0dXJlTWFuYWdlci0+bWVtb3J5QWJvdmVDdXRvZmZCeXRl
cygpKTsKIAotICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOworICAgIERl
YnVnU2NvcGVkU2V0SW1wbFRocmVhZEFuZE1haW5UaHJlYWRCbG9ja2VkIGltcGxUaHJlYWRBbmRN
YWluVGhyZWFkQmxvY2tlZDsKICAgICB0ZXh0dXJlTWFuYWdlci0+Y2xlYXJBbGxNZW1vcnkocmVz
b3VyY2VQcm92aWRlcigpKTsKIH0KIApAQCAtNDI5LDcgKzQzNCw3IEBAIFRFU1RfRihDQ1ByaW9y
aXRpemVkVGV4dHVyZVRlc3QsIHJlbmRlclN1cmZhY2VzUmVkdWNlTWVtb3J5QXZhaWxhYmxlRm9y
UmVxdWVzdExhCiAgICAgRVhQRUNUX0VRKHRleHR1cmVzTWVtb3J5U2l6ZSg0KSwgdGV4dHVyZU1h
bmFnZXItPm1lbW9yeUZvclNlbGZNYW5hZ2VkVGV4dHVyZXMoKSk7CiAgICAgRVhQRUNUX0xFKHRl
eHR1cmVNYW5hZ2VyLT5tZW1vcnlVc2VCeXRlcygpLCB0ZXh0dXJlTWFuYWdlci0+bWVtb3J5QWJv
dmVDdXRvZmZCeXRlcygpKTsKIAotICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhy
ZWFkOworICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZEFuZE1haW5UaHJlYWRCbG9ja2VkIGlt
cGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZDsKICAgICB0ZXh0dXJlTWFuYWdlci0+Y2xlYXJB
bGxNZW1vcnkocmVzb3VyY2VQcm92aWRlcigpKTsKIH0KIApAQCAtNDY5LDcgKzQ3NCw3IEBAIFRF
U1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHdoZW5SZW5kZXJTdXJmYWNlTm90QXZhaWxh
YmxlVGV4dHVyZXNBbHNvTm90QXZhCiAgICAgRVhQRUNUX0VRKHRleHR1cmVzTWVtb3J5U2l6ZSgy
KSwgdGV4dHVyZU1hbmFnZXItPm1lbW9yeUZvclNlbGZNYW5hZ2VkVGV4dHVyZXMoKSk7CiAgICAg
RVhQRUNUX0xFKHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlVc2VCeXRlcygpLCB0ZXh0dXJlTWFuYWdl
ci0+bWVtb3J5QWJvdmVDdXRvZmZCeXRlcygpKTsKIAotICAgIERlYnVnU2NvcGVkU2V0SW1wbFRo
cmVhZCBpbXBsVGhyZWFkOworICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZEFuZE1haW5UaHJl
YWRCbG9ja2VkIGltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZDsKICAgICB0ZXh0dXJlTWFu
YWdlci0+Y2xlYXJBbGxNZW1vcnkocmVzb3VyY2VQcm92aWRlcigpKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RleHR1cmVVcGRhdGVDb250cm9sbGVy
VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGV4dHVyZVVwZGF0ZUNv
bnRyb2xsZXJUZXN0LmNwcAppbmRleCBjYWI1YWVmYTA3ZTc5MTQxMzVkZjc3MzY1N2QzZDg4NDdi
MDUxN2ZiLi5kMjdjZmEzOWM1M2ZhZTRlZWEzOWE3MmY3NTc5YzQwNzQ2MTQ0OTJhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGV4dHVyZVVwZGF0ZUNvbnRyb2xs
ZXJUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGV4dHVyZVVw
ZGF0ZUNvbnRyb2xsZXJUZXN0LmNwcApAQCAtODcsMTAgKzg3LDE0IEBAIHByaXZhdGU6CiAKIGNs
YXNzIFRleHR1cmVGb3JVcGxvYWRUZXN0IDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXI6OlRl
eHR1cmUgewogcHVibGljOgotICAgIFRleHR1cmVGb3JVcGxvYWRUZXN0KCkgOiBMYXllclRleHR1
cmVVcGRhdGVyOjpUZXh0dXJlKGFkb3B0UHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlPigwKSkgeyB9
CisgICAgVGV4dHVyZUZvclVwbG9hZFRlc3QoKSA6IExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1
cmUoYWRvcHRQdHI8Q0NQcmlvcml0aXplZFRleHR1cmU+KDApKSwgbV9kZWxldGVkKGZhbHNlKSB7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgYmFja2luZ1dhc0FzeW5jaHJvbm91c2x5RGVsZXRlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fZGVsZXRlZDsgfQogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZWN0KEND
UmVzb3VyY2VQcm92aWRlciosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFNp
emUmIGRlc3RPZmZzZXQpIHsgfQotfTsKIAorICAgIHZvaWQgc2V0QmFja2luZ0FzeW5jaHJvbm91
c2x5RGVsZXRlZCgpIHsgbV9kZWxldGVkID0gdHJ1ZTsgfQorcHJpdmF0ZToKKyAgICBib29sIG1f
ZGVsZXRlZDsKK307CiAKIGNsYXNzIENDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXJUZXN0IDogcHVi
bGljIFRlc3QgewogcHVibGljOgpAQCAtMTgzLDI4ICsxODcsMzggQEAgcHJvdGVjdGVkOgogICAg
ICAgICBXZWJDb21wb3NpdG9yOjpzaHV0ZG93bigpOwogICAgIH0KIAotICAgIHZvaWQgYXBwZW5k
RnVsbFVwbG9hZHNUb1VwZGF0ZVF1ZXVlKGludCBjb3VudCkKKyAgICB2b2lkIGFwcGVuZEZ1bGxV
cGxvYWRzT2ZJbmRleGVkVGV4dHVyZVRvVXBkYXRlUXVldWUoaW50IGNvdW50LCBpbnQgdGV4dHVy
ZUluZGV4KQogICAgIHsKICAgICAgICAgbV9mdWxsVXBsb2FkQ291bnRFeHBlY3RlZCArPSBjb3Vu
dDsKICAgICAgICAgbV90b3RhbFVwbG9hZENvdW50RXhwZWN0ZWQgKz0gY291bnQ7CiAKICAgICAg
ICAgY29uc3QgSW50UmVjdCByZWN0KDAsIDAsIDMwMCwgMTUwKTsKLSAgICAgICAgY29uc3QgVGV4
dHVyZVVwbG9hZGVyOjpQYXJhbWV0ZXJzIHVwbG9hZCA9IHsgJm1fdGV4dHVyZSwgcmVjdCwgSW50
U2l6ZSgpIH07CisgICAgICAgIGNvbnN0IFRleHR1cmVVcGxvYWRlcjo6UGFyYW1ldGVycyB1cGxv
YWQgPSB7ICZtX3RleHR1cmVzW3RleHR1cmVJbmRleF0sIHJlY3QsIEludFNpemUoKSB9OwogICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCiAgICAgICAgICAgICBtX3F1ZXVl
LT5hcHBlbmRGdWxsVXBsb2FkKHVwbG9hZCk7CiAgICAgfQogCi0gICAgdm9pZCBhcHBlbmRQYXJ0
aWFsVXBsb2Fkc1RvVXBkYXRlUXVldWUoaW50IGNvdW50KQorICAgIHZvaWQgYXBwZW5kRnVsbFVw
bG9hZHNUb1VwZGF0ZVF1ZXVlKGludCBjb3VudCkKKyAgICB7CisgICAgICAgIGFwcGVuZEZ1bGxV
cGxvYWRzT2ZJbmRleGVkVGV4dHVyZVRvVXBkYXRlUXVldWUoY291bnQsIDApOworICAgIH0KKwor
ICAgIHZvaWQgYXBwZW5kUGFydGlhbFVwbG9hZHNPZkluZGV4ZWRUZXh0dXJlVG9VcGRhdGVRdWV1
ZShpbnQgY291bnQsIGludCB0ZXh0dXJlSW5kZXgpCiAgICAgewogICAgICAgICBtX3BhcnRpYWxD
b3VudEV4cGVjdGVkICs9IGNvdW50OwogICAgICAgICBtX3RvdGFsVXBsb2FkQ291bnRFeHBlY3Rl
ZCArPSBjb3VudDsKIAogICAgICAgICBjb25zdCBJbnRSZWN0IHJlY3QoMCwgMCwgMTAwLCAxMDAp
OwotICAgICAgICBjb25zdCBUZXh0dXJlVXBsb2FkZXI6OlBhcmFtZXRlcnMgdXBsb2FkID0geyAm
bV90ZXh0dXJlLCByZWN0LCBJbnRTaXplKCkgfTsKKyAgICAgICAgY29uc3QgVGV4dHVyZVVwbG9h
ZGVyOjpQYXJhbWV0ZXJzIHVwbG9hZCA9IHsgJm1fdGV4dHVyZXNbdGV4dHVyZUluZGV4XSwgcmVj
dCwgSW50U2l6ZSgpIH07CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykK
ICAgICAgICAgICAgIG1fcXVldWUtPmFwcGVuZFBhcnRpYWxVcGxvYWQodXBsb2FkKTsKICAgICB9
CiAKKyAgICB2b2lkIGFwcGVuZFBhcnRpYWxVcGxvYWRzVG9VcGRhdGVRdWV1ZShpbnQgY291bnQp
CisgICAgeworICAgICAgICBhcHBlbmRQYXJ0aWFsVXBsb2Fkc09mSW5kZXhlZFRleHR1cmVUb1Vw
ZGF0ZVF1ZXVlKGNvdW50LCAwKTsKKyAgICB9CisKICAgICB2b2lkIHNldE1heFVwbG9hZENvdW50
UGVyVXBkYXRlKGludCBjb3VudCkKICAgICB7CiAgICAgICAgIG1fbWF4VXBsb2FkQ291bnRQZXJV
cGRhdGUgPSBjb3VudDsKQEAgLTIxNSw3ICsyMjksNyBAQCBwcm90ZWN0ZWQ6CiAgICAgT3duUHRy
PENDR3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7CiAgICAgT3duUHRyPENDUmVzb3VyY2VQcm92
aWRlcj4gbV9yZXNvdXJjZVByb3ZpZGVyOwogICAgIE93blB0cjxDQ1RleHR1cmVVcGRhdGVRdWV1
ZT4gbV9xdWV1ZTsKLSAgICBUZXh0dXJlRm9yVXBsb2FkVGVzdCBtX3RleHR1cmU7CisgICAgVGV4
dHVyZUZvclVwbG9hZFRlc3QgbV90ZXh0dXJlc1s0XTsKICAgICBGYWtlVGV4dHVyZUNvcGllciBt
X2NvcGllcjsKICAgICBUZXh0dXJlVXBsb2FkZXJGb3JVcGxvYWRUZXN0IG1fdXBsb2FkZXI7CiAK
QEAgLTY5Niw0ICs3MTAsMzkgQEAgVEVTVF9GKENDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXJUZXN0
LCBVcGRhdGVzQ29tcGxldGVJbkZpbml0ZVRpbWUpCiAgICAgRVhQRUNUX0VRKDIsIG1fbnVtVG90
YWxVcGxvYWRzKTsKIH0KIAorCisvLyBBU1lOQyBERUxFVElPTiBURVNUUworVEVTVF9GKENDVGV4
dHVyZVVwZGF0ZUNvbnRyb2xsZXJUZXN0LCBBc3luY0RlbGV0aW9uKQoreworICAgIGFwcGVuZEZ1
bGxVcGxvYWRzT2ZJbmRleGVkVGV4dHVyZVRvVXBkYXRlUXVldWUoMSwgMCk7CisgICAgYXBwZW5k
UGFydGlhbFVwbG9hZHNPZkluZGV4ZWRUZXh0dXJlVG9VcGRhdGVRdWV1ZSgxLCAxKTsKKyAgICBh
cHBlbmRGdWxsVXBsb2Fkc09mSW5kZXhlZFRleHR1cmVUb1VwZGF0ZVF1ZXVlKDEsIDIpOworICAg
IGFwcGVuZFBhcnRpYWxVcGxvYWRzT2ZJbmRleGVkVGV4dHVyZVRvVXBkYXRlUXVldWUoMSwgMyk7
CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CisKKyAgICBtX3F1ZXVl
LT5jbGVhclVwbG9hZHNUb0RlbGV0ZWRSZXNvdXJjZXMoKTsKKyAgICBFWFBFQ1RfRVEoMnUsIG1f
cXVldWUtPmZ1bGxVcGxvYWRTaXplKCkpOworICAgIEVYUEVDVF9FUSgydSwgbV9xdWV1ZS0+cGFy
dGlhbFVwbG9hZFNpemUoKSk7CisKKyAgICBtX3RleHR1cmVzWzBdLnNldEJhY2tpbmdBc3luY2hy
b25vdXNseURlbGV0ZWQoKTsKKyAgICBtX3F1ZXVlLT5jbGVhclVwbG9hZHNUb0RlbGV0ZWRSZXNv
dXJjZXMoKTsKKyAgICBFWFBFQ1RfRVEoMXUsIG1fcXVldWUtPmZ1bGxVcGxvYWRTaXplKCkpOwor
ICAgIEVYUEVDVF9FUSgydSwgbV9xdWV1ZS0+cGFydGlhbFVwbG9hZFNpemUoKSk7CisKKyAgICBt
X3RleHR1cmVzWzNdLnNldEJhY2tpbmdBc3luY2hyb25vdXNseURlbGV0ZWQoKTsKKyAgICBtX3F1
ZXVlLT5jbGVhclVwbG9hZHNUb0RlbGV0ZWRSZXNvdXJjZXMoKTsKKyAgICBFWFBFQ1RfRVEoMXUs
IG1fcXVldWUtPmZ1bGxVcGxvYWRTaXplKCkpOworICAgIEVYUEVDVF9FUSgxdSwgbV9xdWV1ZS0+
cGFydGlhbFVwbG9hZFNpemUoKSk7CisKKyAgICBtX3RleHR1cmVzWzJdLnNldEJhY2tpbmdBc3lu
Y2hyb25vdXNseURlbGV0ZWQoKTsKKyAgICBtX3F1ZXVlLT5jbGVhclVwbG9hZHNUb0RlbGV0ZWRS
ZXNvdXJjZXMoKTsKKyAgICBFWFBFQ1RfRVEoMHUsIG1fcXVldWUtPmZ1bGxVcGxvYWRTaXplKCkp
OworICAgIEVYUEVDVF9FUSgxdSwgbV9xdWV1ZS0+cGFydGlhbFVwbG9hZFNpemUoKSk7CisKKyAg
ICBtX3RleHR1cmVzWzFdLnNldEJhY2tpbmdBc3luY2hyb25vdXNseURlbGV0ZWQoKTsKKyAgICBt
X3F1ZXVlLT5jbGVhclVwbG9hZHNUb0RlbGV0ZWRSZXNvdXJjZXMoKTsKKyAgICBFWFBFQ1RfRVEo
MHUsIG1fcXVldWUtPmZ1bGxVcGxvYWRTaXplKCkpOworICAgIEVYUEVDVF9FUSgwdSwgbV9xdWV1
ZS0+cGFydGlhbFVwbG9hZFNpemUoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNw
cAppbmRleCAwMGVlMjhhNjg4ZWE2ZDI4NTU2N2EzN2EwMDcwZDM1YWExMWJmNzA1Li41ZTI1MzJj
NjEwNzhmZDEzYjMzMGZmYmNkODNmYzI0OTg2MzUxOWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAKQEAgLTgw
LDI1ICs4MCw3MyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV90ZXh0dXJlTWFuYWdlcihDQ1ByaW9y
aXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg2MCoxMDI0KjEwMjQsIDEwMjQsIENDUmVuZGVy
ZXI6OkNvbnRlbnRQb29sKSkKICAgICAgICAgLCBtX29jY2x1c2lvbigwKQogICAgIHsKLSAgICAg
ICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7Ci0gICAgICAgIG1fcmVzb3Vy
Y2VQcm92aWRlciA9IENDUmVzb3VyY2VQcm92aWRlcjo6Y3JlYXRlKG1fY29udGV4dC5nZXQoKSk7
CisgICAgICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6aW5pdGlhbGl6ZSgwKTsKKyAgICAgICAg
eworICAgICAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkQW5kTWFpblRocmVhZEJsb2Nr
ZWQgaW1wbFRocmVhZEFuZE1haW5UaHJlYWRCbG9ja2VkOworICAgICAgICAgICAgICBtX3Jlc291
cmNlUHJvdmlkZXIgPSBDQ1Jlc291cmNlUHJvdmlkZXI6OmNyZWF0ZShtX2NvbnRleHQuZ2V0KCkp
OworICAgICAgICB9CiAgICAgfQogCiAgICAgdmlydHVhbCB+VGlsZWRMYXllckNocm9taXVtVGVz
dCgpCiAgICAgewotICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsK
LSAgICAgICAgbV9yZXNvdXJjZVByb3ZpZGVyLmNsZWFyKCk7CisgICAgICAgIHRleHR1cmVNYW5h
Z2VyQ2xlYXJBbGxNZW1vcnkobV90ZXh0dXJlTWFuYWdlci5nZXQoKSwgbV9yZXNvdXJjZVByb3Zp
ZGVyLmdldCgpKTsKKyAgICAgICAgeworICAgICAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhy
ZWFkQW5kTWFpblRocmVhZEJsb2NrZWQgaW1wbFRocmVhZEFuZE1haW5UaHJlYWRCbG9ja2VkOwor
ICAgICAgICAgICAgbV9yZXNvdXJjZVByb3ZpZGVyLmNsZWFyKCk7CisgICAgICAgIH0KKyAgICAg
ICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjpzaHV0ZG93bigpOwogICAgIH0KIAorICAgIC8vIEhl
bHBlciBjbGFzc2VzIGFuZCBmdW5jdGlvbnMgdGhhdCBzZXQgdGhlIGN1cnJlbnQgdGhyZWFkIHRv
IGJlIHRoZSBpbXBsIHRocmVhZAorICAgIC8vIGJlZm9yZSBkb2luZyB0aGUgYWN0aW9uIHRoYXQg
dGhleSB3cmFwLgorICAgIGNsYXNzIFNjb3BlZEZha2VDQ1RpbGVkTGF5ZXJJbXBsIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIFNjb3BlZEZha2VDQ1RpbGVkTGF5ZXJJbXBsKGludCBpZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7Cisg
ICAgICAgICAgICBtX2xheWVySW1wbCA9IG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbChpZCk7Cisg
ICAgICAgIH0KKyAgICAgICAgflNjb3BlZEZha2VDQ1RpbGVkTGF5ZXJJbXBsKCkKKyAgICAgICAg
eworICAgICAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CisgICAg
ICAgICAgICBkZWxldGUgbV9sYXllckltcGw7CisgICAgICAgIH0KKyAgICAgICAgRmFrZUNDVGls
ZWRMYXllckltcGwqIGdldCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2xheWVy
SW1wbDsKKyAgICAgICAgfQorICAgICAgICBGYWtlQ0NUaWxlZExheWVySW1wbCogb3BlcmF0b3It
PigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2xheWVySW1wbDsKKyAgICAgICAg
fQorICAgIHByaXZhdGU6CisgICAgICAgIEZha2VDQ1RpbGVkTGF5ZXJJbXBsKiBtX2xheWVySW1w
bDsKKyAgICB9OworICAgIHZvaWQgdGV4dHVyZU1hbmFnZXJDbGVhckFsbE1lbW9yeShDQ1ByaW9y
aXRpemVkVGV4dHVyZU1hbmFnZXIqIHRleHR1cmVNYW5hZ2VyLCBDQ1Jlc291cmNlUHJvdmlkZXIq
IHJlc291cmNlUHJvdmlkZXIpCisgICAgeworICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJl
YWRBbmRNYWluVGhyZWFkQmxvY2tlZCBpbXBsVGhyZWFkQW5kTWFpblRocmVhZEJsb2NrZWQ7Cisg
ICAgICAgIHRleHR1cmVNYW5hZ2VyLT5jbGVhckFsbE1lbW9yeShyZXNvdXJjZVByb3ZpZGVyKTsK
KyAgICB9CiAgICAgdm9pZCB1cGRhdGVUZXh0dXJlcyhpbnQgY291bnQgPSA1MDApCiAgICAgewor
ICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZCBpbXBs
VGhyZWFkQW5kTWFpblRocmVhZEJsb2NrZWQ7CiAgICAgICAgIENDVGV4dHVyZVVwZGF0ZUNvbnRy
b2xsZXI6OnVwZGF0ZVRleHR1cmVzKG1fcmVzb3VyY2VQcm92aWRlci5nZXQoKSwgJm1fY29waWVy
LCAmbV91cGxvYWRlciwgJm1fcXVldWUsIGNvdW50KTsKICAgICB9CisgICAgdm9pZCBsYXllclB1
c2hQcm9wZXJ0aWVzVG8oRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIEZha2VDQ1RpbGVk
TGF5ZXJJbXBsKiBsYXllckltcGwpCisgICAgeworICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxU
aHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZCBpbXBsVGhyZWFkQW5kTWFpblRocmVhZEJsb2NrZWQ7
CisgICAgICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbCk7CisgICAgfQorICAg
IHZvaWQgbGF5ZXJVcGRhdGUoRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIFRlc3RDQ09j
Y2x1c2lvblRyYWNrZXIqIG9jY2x1ZGVkKQorICAgIHsKKyAgICAgICAgRGVidWdTY29wZWRTZXRN
YWluVGhyZWFkIG1haW5UaHJlYWQ7CisgICAgICAgIGxheWVyLT51cGRhdGUobV9xdWV1ZSwgb2Nj
bHVkZWQsIG1fc3RhdHMpOworICAgIH0KIAogICAgIGJvb2wgdXBkYXRlQW5kUHVzaChGYWtlVGls
ZWRMYXllckNocm9taXVtKiBsYXllcjEsCi0gICAgICAgICAgICAgICAgICAgICAgIENDTGF5ZXJJ
bXBsKiBsYXllckltcGwxLAorICAgICAgICAgICAgICAgICAgICAgICBGYWtlQ0NUaWxlZExheWVy
SW1wbCogbGF5ZXJJbXBsMSwKICAgICAgICAgICAgICAgICAgICAgICAgRmFrZVRpbGVkTGF5ZXJD
aHJvbWl1bSogbGF5ZXIyID0gMCwKLSAgICAgICAgICAgICAgICAgICAgICAgQ0NMYXllckltcGwq
IGxheWVySW1wbDIgPSAwKQorICAgICAgICAgICAgICAgICAgICAgICBGYWtlQ0NUaWxlZExheWVy
SW1wbCogbGF5ZXJJbXBsMiA9IDApCiAgICAgewogICAgICAgICAvLyBHZXQgdGV4dHVyZXMKICAg
ICAgICAgbV90ZXh0dXJlTWFuYWdlci0+Y2xlYXJQcmlvcml0aWVzKCk7CkBAIC0xMjMsOSArMTcx
LDkgQEAgcHVibGljOgogICAgICAgICAvLyBVcGRhdGUgdGV4dHVyZXMgYW5kIHB1c2guCiAgICAg
ICAgIHVwZGF0ZVRleHR1cmVzKCk7CiAgICAgICAgIGlmIChsYXllcjEpCi0gICAgICAgICAgICBs
YXllcjEtPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsMSk7CisgICAgICAgICAgICBsYXllclB1
c2hQcm9wZXJ0aWVzVG8obGF5ZXIxLCBsYXllckltcGwxKTsKICAgICAgICAgaWYgKGxheWVyMikK
LSAgICAgICAgICAgIGxheWVyMi0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwyKTsKKyAgICAg
ICAgICAgIGxheWVyUHVzaFByb3BlcnRpZXNUbyhsYXllcjIsIGxheWVySW1wbDIpOwogCiAgICAg
ICAgIHJldHVybiBuZWVkc1VwZGF0ZTsKICAgICB9CkBAIC0xNDUsOCArMTkzLDcgQEAgcHVibGlj
OgogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hEaXJ0eVRpbGVzKQogewogICAg
IFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtl
VGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKLSAgICBEZWJ1Z1Nj
b3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKLSAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXll
ckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMSkpKTsK
KyAgICBTY29wZWRGYWtlQ0NUaWxlZExheWVySW1wbCBsYXllckltcGwoMSk7CiAKICAgICAvLyBU
aGUgdGlsZSBzaXplIGlzIDEwMHgxMDAsIHNvIHRoaXMgaW52YWxpZGF0ZXMgYW5kIHRoZW4gcGFp
bnRzIHR3byB0aWxlcy4KICAgICBsYXllci0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAyMDApKTsK
QEAgLTE3Miw4ICsyMTksNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaERp
cnR5VGlsZXMpCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaE9jY2x1ZGVkRGly
dHlUaWxlcykKIHsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBh
ZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShtX3RleHR1cmVNYW5hZ2VyLmdldCgp
KSk7Ci0gICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7Ci0gICAgT3duUHRy
PEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVk
TGF5ZXJJbXBsKDEpKSk7CisgICAgU2NvcGVkRmFrZUNDVGlsZWRMYXllckltcGwgbGF5ZXJJbXBs
KDEpOwogICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVkZWQ7CiAgICAgbV9vY2NsdXNp
b24gPSAmb2NjbHVkZWQ7CiAKQEAgLTIwOSw4ICsyNTUsNyBAQCBURVNUX0YoVGlsZWRMYXllckNo
cm9taXVtVGVzdCwgcHVzaE9jY2x1ZGVkRGlydHlUaWxlcykKIFRFU1RfRihUaWxlZExheWVyQ2hy
b21pdW1UZXN0LCBwdXNoRGVsZXRlZFRpbGVzKQogewogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXll
ckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1f
dGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKLSAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1w
bFRocmVhZDsKLSAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9w
dFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMSkpKTsKKyAgICBTY29wZWRGYWtlQ0NUaWxl
ZExheWVySW1wbCBsYXllckltcGwoMSk7CiAKICAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEwMHgx
MDAsIHNvIHRoaXMgaW52YWxpZGF0ZXMgYW5kIHRoZW4gcGFpbnRzIHR3byB0aWxlcy4KICAgICBs
YXllci0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAyMDApKTsKQEAgLTIyMywxMSArMjY4LDExIEBA
IFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoRGVsZXRlZFRpbGVzKQogICAgIEVY
UEVDVF9UUlVFKGxheWVySW1wbC0+aGFzVGlsZUF0KDAsIDEpKTsKIAogICAgIG1fdGV4dHVyZU1h
bmFnZXItPmNsZWFyUHJpb3JpdGllcygpOwotICAgIG1fdGV4dHVyZU1hbmFnZXItPmNsZWFyQWxs
TWVtb3J5KG1fcmVzb3VyY2VQcm92aWRlci5nZXQoKSk7CisgICAgdGV4dHVyZU1hbmFnZXJDbGVh
ckFsbE1lbW9yeShtX3RleHR1cmVNYW5hZ2VyLmdldCgpLCBtX3Jlc291cmNlUHJvdmlkZXIuZ2V0
KCkpOwogICAgIG1fdGV4dHVyZU1hbmFnZXItPnNldE1heE1lbW9yeUxpbWl0Qnl0ZXMoNCoxMDI0
KjEwMjQpOwogCiAgICAgLy8gVGhpcyBzaG91bGQgZHJvcCB0aGUgdGlsZXMgb24gdGhlIGltcGwg
dGhyZWFkLgotICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7Cisg
ICAgbGF5ZXJQdXNoUHJvcGVydGllc1RvKGxheWVyLmdldCgpLCBsYXllckltcGwuZ2V0KCkpOwog
CiAgICAgLy8gV2Ugc2hvdWxkIG5vdyBoYXZlIG5vIHRleHR1cmVzIG9uIHRoZSBpbXBsIHRocmVh
ZC4KICAgICBFWFBFQ1RfRkFMU0UobGF5ZXJJbXBsLT5oYXNUaWxlQXQoMCwgMCkpOwpAQCAtMjQ1
LDggKzI5MCw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoRGVsZXRlZFRp
bGVzKQogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hJZGxlUGFpbnRUaWxlcykK
IHsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihu
ZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShtX3RleHR1cmVNYW5hZ2VyLmdldCgpKSk7Ci0gICAg
RGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7Ci0gICAgT3duUHRyPEZha2VDQ1Rp
bGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBs
KDEpKSk7CisgICAgU2NvcGVkRmFrZUNDVGlsZWRMYXllckltcGwgbGF5ZXJJbXBsKDEpOwogCiAg
ICAgLy8gVGhlIHRpbGUgc2l6ZSBpcyAxMDB4MTAwLiBTZXR1cCA1eDUgdGlsZXMgd2l0aCBvbmUg
dmlzaWJsZSB0aWxlIGluIHRoZSBjZW50ZXIuCiAgICAgLy8gVGhpcyBwYWludHMgMSB2aXNpYmxl
IG9mIHRoZSAyNSBpbnZhbGlkIHRpbGVzLgpAQCAtMjgzLDExICszMjcsMTAgQEAgVEVTVF9GKFRp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hUaWxlc0FmdGVySWRsZVBhaW50RmFpbGVkKQogewog
ICAgIC8vIFN0YXJ0IHdpdGggMm1iIG9mIG1lbW9yeSwgYnV0IHRoZSB0ZXN0IGlzIGdvaW5nIHRv
IHRyeSB0byB1c2UganVzdCBtb3JlIHRoYW4gMW1iLCBzbyB3ZSByZWR1Y2UgdG8gMW1iIGxhdGVy
LgogICAgIG1fdGV4dHVyZU1hbmFnZXItPnNldE1heE1lbW9yeUxpbWl0Qnl0ZXMoMiAqIDEwMjQg
KiAxMDI0KTsgICAgCi0gICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAg
ICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyMSA9IGFkb3B0UmVmKG5ldyBG
YWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKLSAgICBPd25Q
dHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbDEoYWRvcHRQdHIobmV3IEZha2VDQ1Rp
bGVkTGF5ZXJJbXBsKDEpKSk7CisgICAgU2NvcGVkRmFrZUNDVGlsZWRMYXllckltcGwgbGF5ZXJJ
bXBsMSgxKTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIyID0gYWRv
cHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkp
OwotICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsMihhZG9wdFB0cihu
ZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMikpKTsKKyAgICBTY29wZWRGYWtlQ0NUaWxlZExheWVy
SW1wbCBsYXllckltcGwyKDIpOwogCiAgICAgLy8gRm9yIHRoaXMgdGVzdCB3ZSBoYXZlIHR3byBs
YXllcnMuIGxheWVyMSBleGhhdXN0cyBtb3N0IHRleHR1cmUgbWVtb3J5LCBsZWF2aW5nIHJvb20g
Zm9yIDIgbW9yZSB0aWxlcyBmcm9tCiAgICAgLy8gbGF5ZXIyLCBidXQgbm90IGFsbCB0aHJlZSB0
aWxlcy4gRmlyc3Qgd2UgcGFpbnQgbGF5ZXIxLCBhbmQgb25lIHRpbGUgZnJvbSBsYXllcjIuIFRo
ZW4gd2hlbiB3ZSBpZGxlIHBhaW50CkBAIC0zMzcsOCArMzgwLDcgQEAgVEVTVF9GKFRpbGVkTGF5
ZXJDaHJvbWl1bVRlc3QsIHB1c2hUaWxlc0FmdGVySWRsZVBhaW50RmFpbGVkKQogVEVTVF9GKFRp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hJZGxlUGFpbnRlZE9jY2x1ZGVkVGlsZXMpCiB7CiAg
ICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZh
a2VUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwotICAgIERlYnVn
U2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwotICAgIE93blB0cjxGYWtlQ0NUaWxlZExh
eWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkp
OworICAgIFNjb3BlZEZha2VDQ1RpbGVkTGF5ZXJJbXBsIGxheWVySW1wbCgxKTsKICAgICBUZXN0
Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1ZGVkOwogICAgIG1fb2NjbHVzaW9uID0gJm9jY2x1ZGVk
OwogICAgIApAQCAtMzU3LDggKzM5OSw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0
LCBwdXNoSWRsZVBhaW50ZWRPY2NsdWRlZFRpbGVzKQogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1
bVRlc3QsIHB1c2hUaWxlc01hcmtlZERpcnR5RHVyaW5nUGFpbnQpCiB7CiAgICAgUmVmUHRyPEZh
a2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVy
Q2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwotICAgIERlYnVnU2NvcGVkU2V0SW1w
bFRocmVhZCBpbXBsVGhyZWFkOwotICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5
ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOworICAgIFNjb3Bl
ZEZha2VDQ1RpbGVkTGF5ZXJJbXBsIGxheWVySW1wbCgxKTsKIAogICAgIC8vIFRoZSB0aWxlIHNp
emUgaXMgMTAweDEwMCwgc28gdGhpcyBpbnZhbGlkYXRlcyBhbmQgdGhlbiBwYWludHMgdHdvIHRp
bGVzLgogICAgIC8vIEhvd2V2ZXIsIGR1cmluZyB0aGUgcGFpbnQsIHdlIGludmFsaWRhdGUgb25l
IG9mIHRoZSB0aWxlcy4gVGhpcyBzaG91bGQKQEAgLTM3Nyw5ICs0MTgsOCBAQCBURVNUX0YoVGls
ZWRMYXllckNocm9taXVtVGVzdCwgcHVzaFRpbGVzTGF5ZXJNYXJrZWREaXJ0eUR1cmluZ1BhaW50
T25OZXh0TGF5ZXIpCiB7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVy
MSA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVyZU1hbmFnZXIu
Z2V0KCkpKTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIyID0gYWRv
cHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkp
OwotICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwotICAgIE93blB0cjxG
YWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXIxSW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRM
YXllckltcGwoMSkpKTsKLSAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVyMklt
cGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDIpKSk7CisgICAgU2NvcGVkRmFr
ZUNDVGlsZWRMYXllckltcGwgbGF5ZXIxSW1wbCgxKTsKKyAgICBTY29wZWRGYWtlQ0NUaWxlZExh
eWVySW1wbCBsYXllcjJJbXBsKDIpOwogCiAgICAgLy8gSW52YWxpZGF0ZSBhIHRpbGUgb24gbGF5
ZXIxLCBkdXJpbmcgdXBkYXRlIG9mIGxheWVyIDIuCiAgICAgbGF5ZXIyLT5mYWtlTGF5ZXJUZXh0
dXJlVXBkYXRlcigpLT5zZXRSZWN0VG9JbnZhbGlkYXRlKEludFJlY3QoMCwgNTAsIDEwMCwgNTAp
LCBsYXllcjEuZ2V0KCkpOwpAQCAtNDAxLDkgKzQ0MSw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hy
b21pdW1UZXN0LCBwdXNoVGlsZXNMYXllck1hcmtlZERpcnR5RHVyaW5nUGFpbnRPblByZXZpb3Vz
TGF5CiB7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyMSA9IGFkb3B0
UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsK
ICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIyID0gYWRvcHRSZWYobmV3
IEZha2VUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwotICAgIERl
YnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwotICAgIE93blB0cjxGYWtlQ0NUaWxl
ZExheWVySW1wbD4gbGF5ZXIxSW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwo
MSkpKTsKLSAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVyMkltcGwoYWRvcHRQ
dHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDIpKSk7CisgICAgU2NvcGVkRmFrZUNDVGlsZWRM
YXllckltcGwgbGF5ZXIxSW1wbCgxKTsKKyAgICBTY29wZWRGYWtlQ0NUaWxlZExheWVySW1wbCBs
YXllcjJJbXBsKDIpOwogCiAgICAgbGF5ZXIxLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5z
ZXRSZWN0VG9JbnZhbGlkYXRlKEludFJlY3QoMCwgNTAsIDEwMCwgNTApLCBsYXllcjIuZ2V0KCkp
OwogICAgIGxheWVyMS0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAyMDApKTsKQEAgLTQyNCw3ICs0
NjMsNiBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcGFpbnRTbWFsbEFuaW1hdGVk
TGF5ZXJzSW1tZWRpYXRlbHkpCiB7CiAgICAgLy8gQ3JlYXRlIGEgQ0NMYXllclRyZWVIb3N0IHRo
YXQgaGFzIHRoZSByaWdodCB2aWV3cG9ydHNpemUsCiAgICAgLy8gc28gdGhlIGxheWVyIGlzIGNv
bnNpZGVyZWQgc21hbGwgZW5vdWdoLgotICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6aW5pdGlh
bGl6ZSgwKTsKICAgICBGYWtlQ0NMYXllclRyZWVIb3N0Q2xpZW50IGZha2VDQ0xheWVyVHJlZUhv
c3RDbGllbnQ7CiAgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdD4gY2NMYXllclRyZWVIb3N0ID0g
Q0NMYXllclRyZWVIb3N0OjpjcmVhdGUoJmZha2VDQ0xheWVyVHJlZUhvc3RDbGllbnQsIENDTGF5
ZXJUcmVlU2V0dGluZ3MoKSk7CiAKQEAgLTQ0MiwxMCArNDgwLDkgQEAgVEVTVF9GKFRpbGVkTGF5
ZXJDaHJvbWl1bVRlc3QsIHBhaW50U21hbGxBbmltYXRlZExheWVyc0ltbWVkaWF0ZWx5KQogICAg
ICAgICAgICAgbGF5ZXJXaWR0aCAqPSAyOwogCiAgICAgICAgIG1fdGV4dHVyZU1hbmFnZXItPnNl
dE1heE1lbW9yeUxpbWl0Qnl0ZXMobWVtb3J5Rm9yTGF5ZXIpOwotICAgICAgICBEZWJ1Z1Njb3Bl
ZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKIAogICAgICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5
ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSht
X3RleHR1cmVNYW5hZ2VyLmdldCgpKSk7Ci0gICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVy
SW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOwor
ICAgICAgICBTY29wZWRGYWtlQ0NUaWxlZExheWVySW1wbCBsYXllckltcGwoMSk7CiAKICAgICAg
ICAgLy8gRnVsbCBzaXplIGxheWVyIHdpdGggaGFsZiBiZWluZyB2aXNpYmxlLgogICAgICAgICBJ
bnRTaXplIGNvbnRlbnRCb3VuZHMobGF5ZXJXaWR0aCwgbGF5ZXJIZWlnaHQpOwpAQCAtNDY1LDcg
KzUwMiw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwYWludFNtYWxsQW5pbWF0
ZWRMYXllcnNJbW1lZGlhdGVseSkKICAgICAgICAgbV90ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6
ZVRleHR1cmVzKCk7CiAgICAgICAgIGxheWVyLT51cGRhdGUobV9xdWV1ZSwgMCwgbV9zdGF0cyk7
CiAgICAgICAgIHVwZGF0ZVRleHR1cmVzKCk7Ci0gICAgICAgIGxheWVyLT5wdXNoUHJvcGVydGll
c1RvKGxheWVySW1wbC5nZXQoKSk7CisgICAgICAgIGxheWVyUHVzaFByb3BlcnRpZXNUbyhsYXll
ci5nZXQoKSwgbGF5ZXJJbXBsLmdldCgpKTsKIAogICAgICAgICAvLyBXZSBzaG91bGQgaGF2ZSBh
bGwgdGhlIHRpbGVzIGZvciB0aGUgc21hbGwgYW5pbWF0ZWQgbGF5ZXIuCiAgICAgICAgIC8vIFdl
IHNob3VsZCBzdGlsbCBoYXZlIHRoZSB2aXNpYmxlIHRpbGVzIHdoZW4gd2UgZGlkbid0CkBAIC00
ODMsMTQgKzUyMCwxMiBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcGFpbnRTbWFs
bEFuaW1hdGVkTGF5ZXJzSW1tZWRpYXRlbHkpCiAgICAgICAgIH0KICAgICB9CiAgICAgY2NMYXll
clRyZWVIb3N0LmNsZWFyKCk7Ci0gICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjpzaHV0ZG93bigp
OwogfQogCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgaWRsZVBhaW50T3V0T2ZNZW1v
cnkpCiB7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRS
ZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwot
ICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwotICAgIE93blB0cjxGYWtl
Q0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVy
SW1wbCgxKSkpOworICAgIFNjb3BlZEZha2VDQ1RpbGVkTGF5ZXJJbXBsIGxheWVySW1wbCgxKTsK
IAogICAgIC8vIFdlIGhhdmUgZW5vdWdoIG1lbW9yeSBmb3Igb25seSB0aGUgdmlzaWJsZSByZWN0
LCBzbyB3ZSB3aWxsIHJ1biBvdXQgb2YgbWVtb3J5IGluIGZpcnN0IGlkbGUgcGFpbnQuCiAgICAg
aW50IG1lbW9yeUxpbWl0ID0gNCAqIDEwMCAqIDEwMDsgLy8gMSB0aWxlcywgNCBieXRlcyBwZXIg
cGl4ZWwuCkBAIC01MTMsOCArNTQ4LDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3Qs
IGlkbGVQYWludE91dE9mTWVtb3J5KQogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlk
bGVQYWludFplcm9TaXplZExheWVyKQogewogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9t
aXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVy
ZU1hbmFnZXIuZ2V0KCkpKTsKLSAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVh
ZDsKLSAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihu
ZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMSkpKTsKKyAgICBTY29wZWRGYWtlQ0NUaWxlZExheWVy
SW1wbCBsYXllckltcGwoMSk7CiAKICAgICBib29sIGFuaW1hdGluZ1syXSA9IHtmYWxzZSwgdHJ1
ZX07CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKQEAgLTU0MSw4ICs1NzUsNyBA
QCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgaWRsZVBhaW50WmVyb1NpemVkTGF5ZXIp
CiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgaWRsZVBhaW50Tm9uVmlzaWJsZUxheWVy
cykKIHsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJl
ZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShtX3RleHR1cmVNYW5hZ2VyLmdldCgpKSk7Ci0g
ICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7Ci0gICAgT3duUHRyPEZha2VD
Q1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJ
bXBsKDEpKSk7CisgICAgU2NvcGVkRmFrZUNDVGlsZWRMYXllckltcGwgbGF5ZXJJbXBsKDEpOwog
CiAgICAgLy8gQWx0ZXJuYXRlIGJldHdlZW4gbm90IHZpc2libGUgYW5kIHZpc2libGUuCiAgICAg
SW50UmVjdCB2KDAsIDAsIDEwMCwgMTAwKTsKQEAgLTU3Miw4ICs2MDUsNyBAQCBURVNUX0YoVGls
ZWRMYXllckNocm9taXVtVGVzdCwgaWRsZVBhaW50Tm9uVmlzaWJsZUxheWVycykKIFRFU1RfRihU
aWxlZExheWVyQ2hyb21pdW1UZXN0LCBpbnZhbGlkYXRlRnJvbVByZXBhcmUpCiB7CiAgICAgUmVm
UHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxl
ZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwotICAgIERlYnVnU2NvcGVk
U2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwotICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1w
bD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOworICAg
IFNjb3BlZEZha2VDQ1RpbGVkTGF5ZXJJbXBsIGxheWVySW1wbCgxKTsKIAogICAgIC8vIFRoZSB0
aWxlIHNpemUgaXMgMTAweDEwMCwgc28gdGhpcyBpbnZhbGlkYXRlcyBhbmQgdGhlbiBwYWludHMg
dHdvIHRpbGVzLgogICAgIGxheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDIwMCkpOwpAQCAt
NjA4LDcgKzY0MCw2IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB2ZXJpZnlVcGRh
dGVSZWN0V2hlbkNvbnRlbnRCb3VuZHNBcmVTY2FsZWQpCiAgICAgLy8gVGhlIHVwZGF0ZVJlY3Qg
KHRoYXQgaW5kaWNhdGVzIHdoYXQgd2FzIGFjdHVhbGx5IHBhaW50ZWQpIHNob3VsZCBiZSBpbgog
ICAgIC8vIGxheWVyIHNwYWNlLCBub3QgdGhlIGNvbnRlbnQgc3BhY2UuCiAgICAgUmVmUHRyPEZh
a2VUaWxlZExheWVyV2l0aFNjYWxlZEJvdW5kcz4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRp
bGVkTGF5ZXJXaXRoU2NhbGVkQm91bmRzKG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKLSAgICBE
ZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKIAogICAgIEludFJlY3QgbGF5ZXJC
b3VuZHMoMCwgMCwgMzAwLCAyMDApOwogICAgIEludFJlY3QgY29udGVudEJvdW5kcygwLCAwLCAy
MDAsIDI1MCk7CkBAIC02NDcsOCArNjc4LDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRl
c3QsIHZlcmlmeVVwZGF0ZVJlY3RXaGVuQ29udGVudEJvdW5kc0FyZVNjYWxlZCkKIFRFU1RfRihU
aWxlZExheWVyQ2hyb21pdW1UZXN0LCB2ZXJpZnlJbnZhbGlkYXRpb25XaGVuQ29udGVudHNTY2Fs
ZUNoYW5nZXMpCiB7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0g
YWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQo
KSkpOwotICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwotICAgIE93blB0
cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxl
ZExheWVySW1wbCgxKSkpOworICAgIFNjb3BlZEZha2VDQ1RpbGVkTGF5ZXJJbXBsIGxheWVySW1w
bCgxKTsKIAogICAgIC8vIENyZWF0ZSBhIGxheWVyIHdpdGggb25lIHRpbGUuCiAgICAgbGF5ZXIt
PnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMTAwKSk7CkBAIC02NjMsNyArNjkzLDcgQEAgVEVTVF9G
KFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHZlcmlmeUludmFsaWRhdGlvbldoZW5Db250ZW50c1Nj
YWxlQ2hhbmdlcykKICAgICBtX3RleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsK
ICAgICBsYXllci0+dXBkYXRlKG1fcXVldWUsIDAsIG1fc3RhdHMpOwogICAgIHVwZGF0ZVRleHR1
cmVzKCk7Ci0gICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsKKyAg
ICBsYXllclB1c2hQcm9wZXJ0aWVzVG8obGF5ZXIuZ2V0KCksIGxheWVySW1wbC5nZXQoKSk7CiAg
ICAgRVhQRUNUX1RSVUUobGF5ZXJJbXBsLT5oYXNUaWxlQXQoMCwgMCkpOwogICAgIEVYUEVDVF9G
QUxTRShsYXllckltcGwtPmhhc1RpbGVBdCgwLCAxKSk7CiAgICAgRVhQRUNUX0ZBTFNFKGxheWVy
SW1wbC0+aGFzVGlsZUF0KDEsIDApKTsKQEAgLTY4MCw3ICs3MTAsNyBAQCBURVNUX0YoVGlsZWRM
YXllckNocm9taXVtVGVzdCwgdmVyaWZ5SW52YWxpZGF0aW9uV2hlbkNvbnRlbnRzU2NhbGVDaGFu
Z2VzKQogICAgIG1fdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwogICAgIGxh
eWVyLT51cGRhdGUobV9xdWV1ZSwgMCwgbV9zdGF0cyk7CiAgICAgdXBkYXRlVGV4dHVyZXMoKTsK
LSAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOworICAgIGxheWVy
UHVzaFByb3BlcnRpZXNUbyhsYXllci5nZXQoKSwgbGF5ZXJJbXBsLmdldCgpKTsKICAgICBFWFBF
Q1RfVFJVRShsYXllckltcGwtPmhhc1RpbGVBdCgwLCAwKSk7CiAgICAgRVhQRUNUX1RSVUUobGF5
ZXJJbXBsLT5oYXNUaWxlQXQoMCwgMSkpOwogICAgIEVYUEVDVF9UUlVFKGxheWVySW1wbC0+aGFz
VGlsZUF0KDEsIDApKTsKQEAgLTY5Miw3ICs3MjIsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9t
aXVtVGVzdCwgdmVyaWZ5SW52YWxpZGF0aW9uV2hlbkNvbnRlbnRzU2NhbGVDaGFuZ2VzKQogICAg
IGxheWVyLT5zZXRUZXh0dXJlUHJpb3JpdGllcyhtX3ByaW9yaXR5Q2FsY3VsYXRvcik7CiAgICAg
bV90ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CiAKLSAgICBsYXllci0+cHVz
aFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOworICAgIGxheWVyUHVzaFByb3BlcnRpZXNU
byhsYXllci5nZXQoKSwgbGF5ZXJJbXBsLmdldCgpKTsKICAgICBFWFBFQ1RfRkFMU0UobGF5ZXJJ
bXBsLT5oYXNUaWxlQXQoMCwgMCkpOwogICAgIEVYUEVDVF9GQUxTRShsYXllckltcGwtPmhhc1Rp
bGVBdCgwLCAxKSk7CiAgICAgRVhQRUNUX0ZBTFNFKGxheWVySW1wbC0+aGFzVGlsZUF0KDEsIDAp
KTsKQEAgLTcwMSw4ICs3MzEsNiBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdmVy
aWZ5SW52YWxpZGF0aW9uV2hlbkNvbnRlbnRzU2NhbGVDaGFuZ2VzKQogCiBURVNUX0YoVGlsZWRM
YXllckNocm9taXVtVGVzdCwgc2tpcHNEcmF3R2V0c1Jlc2V0KQogewotICAgIC8vIEluaXRpYWxp
emUgd2l0aG91dCB0aHJlYWRpbmcgc3VwcG9ydC4KLSAgICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6
OmluaXRpYWxpemUoMCk7CiAgICAgRmFrZUNDTGF5ZXJUcmVlSG9zdENsaWVudCBmYWtlQ0NMYXll
clRyZWVIb3N0Q2xpZW50OwogICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3Q+IGNjTGF5ZXJUcmVl
SG9zdCA9IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKCZmYWtlQ0NMYXllclRyZWVIb3N0Q2xpZW50
LCBDQ0xheWVyVHJlZVNldHRpbmdzKCkpOwogICAgIEFTU0VSVF9UUlVFKGNjTGF5ZXJUcmVlSG9z
dC0+aW5pdGlhbGl6ZVJlbmRlcmVySWZOZWVkZWQoKSk7CkBAIC03NDQsMTAgKzc3Miw5IEBAIFRF
U1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBza2lwc0RyYXdHZXRzUmVzZXQpCiAgICAgY2NM
YXllclRyZWVIb3N0LT51cGRhdGVMYXllcnMobV9xdWV1ZSwgbWVtb3J5TGltaXQpOwogICAgIEVY
UEVDVF9GQUxTRShyb290TGF5ZXItPnNraXBzRHJhdygpKTsKIAotICAgIGNjTGF5ZXJUcmVlSG9z
dC0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigpLT5jbGVhckFsbE1lbW9yeShtX3Jlc291cmNlUHJv
dmlkZXIuZ2V0KCkpOworICAgIHRleHR1cmVNYW5hZ2VyQ2xlYXJBbGxNZW1vcnkoY2NMYXllclRy
ZWVIb3N0LT5jb250ZW50c1RleHR1cmVNYW5hZ2VyKCksIG1fcmVzb3VyY2VQcm92aWRlci5nZXQo
KSk7CiAgICAgY2NMYXllclRyZWVIb3N0LT5zZXRSb290TGF5ZXIoMCk7CiAgICAgY2NMYXllclRy
ZWVIb3N0LmNsZWFyKCk7Ci0gICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjpzaHV0ZG93bigpOwog
fQogCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcmVzaXplVG9TbWFsbGVyKQpAQCAt
NzgzLDkgKzgxMCw2IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBodWdlTGF5ZXJV
cGRhdGVDcmFzaCkKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHBhcnRpYWxVcGRh
dGVzKQogewotICAgIC8vIEluaXRpYWxpemUgd2l0aG91dCB0aHJlYWRpbmcgc3VwcG9ydC4KLSAg
ICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6OmluaXRpYWxpemUoMCk7Ci0KICAgICBDQ0xheWVyVHJl
ZVNldHRpbmdzIHNldHRpbmdzOwogICAgIHNldHRpbmdzLm1heFBhcnRpYWxUZXh0dXJlVXBkYXRl
cyA9IDQ7CiAKQEAgLTgwOSw4ICs4MzMsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVz
dCwgcGFydGlhbFVwZGF0ZXMpCiAgICAgLy8gRnVsbCB1cGRhdGUgb2YgYWxsIDYgdGlsZXMuCiAg
ICAgY2NMYXllclRyZWVIb3N0LT51cGRhdGVMYXllcnMobV9xdWV1ZSwgc3RkOjpudW1lcmljX2xp
bWl0czxzaXplX3Q+OjptYXgoKSk7CiAgICAgewotICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxU
aHJlYWQgaW1wbFRocmVhZDsKLSAgICAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBs
YXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDEpKSk7CisgICAgICAg
IFNjb3BlZEZha2VDQ1RpbGVkTGF5ZXJJbXBsIGxheWVySW1wbCgxKTsKICAgICAgICAgdXBkYXRl
VGV4dHVyZXMoNCk7CiAgICAgICAgIEVYUEVDVF9FUSg0LCBsYXllci0+ZmFrZUxheWVyVGV4dHVy
ZVVwZGF0ZXIoKS0+dXBkYXRlQ291bnQoKSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKG1fcXVldWUu
aGFzTW9yZVVwZGF0ZXMoKSk7CkBAIC04MTksNyArODQyLDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJD
aHJvbWl1bVRlc3QsIHBhcnRpYWxVcGRhdGVzKQogICAgICAgICBFWFBFQ1RfRVEoMiwgbGF5ZXIt
PmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnVwZGF0ZUNvdW50KCkpOwogICAgICAgICBFWFBF
Q1RfRkFMU0UobV9xdWV1ZS5oYXNNb3JlVXBkYXRlcygpKTsKICAgICAgICAgbGF5ZXItPmZha2VM
YXllclRleHR1cmVVcGRhdGVyKCktPmNsZWFyVXBkYXRlQ291bnQoKTsKLSAgICAgICAgbGF5ZXIt
PnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsKKyAgICAgICAgbGF5ZXJQdXNoUHJv
cGVydGllc1RvKGxheWVyLmdldCgpLCBsYXllckltcGwuZ2V0KCkpOwogICAgIH0KICAgICBjY0xh
eWVyVHJlZUhvc3QtPmNvbW1pdENvbXBsZXRlKCk7CiAKQEAgLTgyNyw4ICs4NTAsNyBAQCBURVNU
X0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcGFydGlhbFVwZGF0ZXMpCiAgICAgbGF5ZXItPmlu
dmFsaWRhdGVDb250ZW50UmVjdChJbnRSZWN0KDAsIDAsIDMwMCwgMTUwKSk7CiAgICAgY2NMYXll
clRyZWVIb3N0LT51cGRhdGVMYXllcnMobV9xdWV1ZSwgc3RkOjpudW1lcmljX2xpbWl0czxzaXpl
X3Q+OjptYXgoKSk7CiAgICAgewotICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1w
bFRocmVhZDsKLSAgICAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwo
YWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDEpKSk7CisgICAgICAgIFNjb3BlZEZh
a2VDQ1RpbGVkTGF5ZXJJbXBsIGxheWVySW1wbCgxKTsKICAgICAgICAgdXBkYXRlVGV4dHVyZXMo
NCk7CiAgICAgICAgIEVYUEVDVF9FUSgzLCBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIo
KS0+dXBkYXRlQ291bnQoKSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKG1fcXVldWUuaGFzTW9yZVVw
ZGF0ZXMoKSk7CkBAIC04MzcsMTUgKzg1OSwxNCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVt
VGVzdCwgcGFydGlhbFVwZGF0ZXMpCiAgICAgICAgIEVYUEVDVF9FUSgzLCBsYXllci0+ZmFrZUxh
eWVyVGV4dHVyZVVwZGF0ZXIoKS0+dXBkYXRlQ291bnQoKSk7CiAgICAgICAgIEVYUEVDVF9GQUxT
RShtX3F1ZXVlLmhhc01vcmVVcGRhdGVzKCkpOwogICAgICAgICBsYXllci0+ZmFrZUxheWVyVGV4
dHVyZVVwZGF0ZXIoKS0+Y2xlYXJVcGRhdGVDb3VudCgpOwotICAgICAgICBsYXllci0+cHVzaFBy
b3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOworICAgICAgICBsYXllclB1c2hQcm9wZXJ0aWVz
VG8obGF5ZXIuZ2V0KCksIGxheWVySW1wbC5nZXQoKSk7CiAgICAgfQogICAgIGNjTGF5ZXJUcmVl
SG9zdC0+Y29tbWl0Q29tcGxldGUoKTsKIAogICAgIC8vIFBhcnRpYWwgdXBkYXRlIG9mIDYgdGls
ZXMuCiAgICAgbGF5ZXItPmludmFsaWRhdGVDb250ZW50UmVjdChJbnRSZWN0KDUwLCA1MCwgMjAw
LCAxMDApKTsKICAgICB7Ci0gICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhy
ZWFkOwotICAgICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9w
dFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMSkpKTsKKyAgICAgICAgU2NvcGVkRmFrZUND
VGlsZWRMYXllckltcGwgbGF5ZXJJbXBsKDEpOwogICAgICAgICBjY0xheWVyVHJlZUhvc3QtPnVw
ZGF0ZUxheWVycyhtX3F1ZXVlLCBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpKTsK
ICAgICAgICAgdXBkYXRlVGV4dHVyZXMoNCk7CiAgICAgICAgIEVYUEVDVF9FUSgyLCBsYXllci0+
ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+dXBkYXRlQ291bnQoKSk7CkBAIC04NTUsMjQgKzg3
NiwyMiBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcGFydGlhbFVwZGF0ZXMpCiAg
ICAgICAgIEVYUEVDVF9FUSg0LCBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+dXBk
YXRlQ291bnQoKSk7CiAgICAgICAgIEVYUEVDVF9GQUxTRShtX3F1ZXVlLmhhc01vcmVVcGRhdGVz
KCkpOwogICAgICAgICBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+Y2xlYXJVcGRh
dGVDb3VudCgpOwotICAgICAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0
KCkpOworICAgICAgICBsYXllclB1c2hQcm9wZXJ0aWVzVG8obGF5ZXIuZ2V0KCksIGxheWVySW1w
bC5nZXQoKSk7CiAgICAgfQogICAgIGNjTGF5ZXJUcmVlSG9zdC0+Y29tbWl0Q29tcGxldGUoKTsK
IAogICAgIC8vIENoZWNrZXJib2FyZCBhbGwgdGlsZXMuCiAgICAgbGF5ZXItPmludmFsaWRhdGVD
b250ZW50UmVjdChJbnRSZWN0KDAsIDAsIDMwMCwgMjAwKSk7CiAgICAgewotICAgICAgICBEZWJ1
Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKLSAgICAgICAgT3duUHRyPEZha2VDQ1Rp
bGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBs
KDEpKSk7Ci0gICAgICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7
CisgICAgICAgIFNjb3BlZEZha2VDQ1RpbGVkTGF5ZXJJbXBsIGxheWVySW1wbCgxKTsKKyAgICAg
ICAgbGF5ZXJQdXNoUHJvcGVydGllc1RvKGxheWVyLmdldCgpLCBsYXllckltcGwuZ2V0KCkpOwog
ICAgIH0KICAgICBjY0xheWVyVHJlZUhvc3QtPmNvbW1pdENvbXBsZXRlKCk7CiAKICAgICAvLyBQ
YXJ0aWFsIHVwZGF0ZSBvZiA2IGNoZWNrZXJib2FyZCB0aWxlcy4KICAgICBsYXllci0+aW52YWxp
ZGF0ZUNvbnRlbnRSZWN0KEludFJlY3QoNTAsIDUwLCAyMDAsIDEwMCkpOwogICAgIHsKLSAgICAg
ICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7Ci0gICAgICAgIE93blB0cjxG
YWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExh
eWVySW1wbCgxKSkpOworICAgICAgICBTY29wZWRGYWtlQ0NUaWxlZExheWVySW1wbCBsYXllcklt
cGwoMSk7CiAgICAgICAgIGNjTGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKG1fcXVldWUsIHN0
ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkpOwogICAgICAgICB1cGRhdGVUZXh0dXJl
cyg0KTsKICAgICAgICAgRVhQRUNUX0VRKDQsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRl
cigpLT51cGRhdGVDb3VudCgpKTsKQEAgLTg4MiwzMSArOTAxLDI2IEBAIFRFU1RfRihUaWxlZExh
eWVyQ2hyb21pdW1UZXN0LCBwYXJ0aWFsVXBkYXRlcykKICAgICAgICAgRVhQRUNUX0VRKDIsIGxh
eWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT51cGRhdGVDb3VudCgpKTsKICAgICAgICAg
RVhQRUNUX0ZBTFNFKG1fcXVldWUuaGFzTW9yZVVwZGF0ZXMoKSk7CiAgICAgICAgIGxheWVyLT5m
YWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5jbGVhclVwZGF0ZUNvdW50KCk7Ci0gICAgICAgIGxh
eWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7CisgICAgICAgIGxheWVyUHVz
aFByb3BlcnRpZXNUbyhsYXllci5nZXQoKSwgbGF5ZXJJbXBsLmdldCgpKTsKICAgICB9CiAgICAg
Y2NMYXllclRyZWVIb3N0LT5jb21taXRDb21wbGV0ZSgpOwogCiAgICAgLy8gUGFydGlhbCB1cGRh
dGUgb2YgNCB0aWxlcy4KICAgICBsYXllci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJlY3Qo
NTAsIDUwLCAxMDAsIDEwMCkpOwogICAgIHsKLSAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhy
ZWFkIGltcGxUaHJlYWQ7Ci0gICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5
ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOworICAgICAgICBT
Y29wZWRGYWtlQ0NUaWxlZExheWVySW1wbCBsYXllckltcGwoMSk7CiAgICAgICAgIGNjTGF5ZXJU
cmVlSG9zdC0+dXBkYXRlTGF5ZXJzKG1fcXVldWUsIHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90
Pjo6bWF4KCkpOwogICAgICAgICB1cGRhdGVUZXh0dXJlcyg0KTsKICAgICAgICAgRVhQRUNUX0VR
KDQsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT51cGRhdGVDb3VudCgpKTsKICAg
ICAgICAgRVhQRUNUX0ZBTFNFKG1fcXVldWUuaGFzTW9yZVVwZGF0ZXMoKSk7CiAgICAgICAgIGxh
eWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5jbGVhclVwZGF0ZUNvdW50KCk7Ci0gICAg
ICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7CisgICAgICAgIGxh
eWVyUHVzaFByb3BlcnRpZXNUbyhsYXllci5nZXQoKSwgbGF5ZXJJbXBsLmdldCgpKTsKICAgICB9
CiAgICAgY2NMYXllclRyZWVIb3N0LT5jb21taXRDb21wbGV0ZSgpOwogCi0gICAgewotICAgICAg
ICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKLSAgICAgICAgY2NMYXllclRy
ZWVIb3N0LT5jb250ZW50c1RleHR1cmVNYW5hZ2VyKCktPmNsZWFyQWxsTWVtb3J5KG1fcmVzb3Vy
Y2VQcm92aWRlci5nZXQoKSk7Ci0gICAgfQorICAgIHRleHR1cmVNYW5hZ2VyQ2xlYXJBbGxNZW1v
cnkoY2NMYXllclRyZWVIb3N0LT5jb250ZW50c1RleHR1cmVNYW5hZ2VyKCksIG1fcmVzb3VyY2VQ
cm92aWRlci5nZXQoKSk7CiAgICAgY2NMYXllclRyZWVIb3N0LT5zZXRSb290TGF5ZXIoMCk7CiAg
ICAgY2NMYXllclRyZWVIb3N0LmNsZWFyKCk7Ci0gICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjpz
aHV0ZG93bigpOwogfQogCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNQYWlu
dGVkV2l0aG91dE9jY2x1c2lvbikKQEAgLTEwNTEsNyArMTA2NSw2IEBAIFRFU1RfRihUaWxlZExh
eWVyQ2hyb21pdW1UZXN0LCB0aWxlc05vdFBhaW50ZWRXaXRob3V0SW52YWxpZGF0aW9uKQogICAg
IGxheWVyLT51cGRhdGUobV9xdWV1ZSwgJm9jY2x1ZGVkLCBtX3N0YXRzKTsKICAgICBFWFBFQ1Rf
RVEoMzYtMywgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnByZXBhcmVSZWN0Q291
bnQoKSk7CiAgICAgewotICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVh
ZDsKICAgICAgICAgdXBkYXRlVGV4dHVyZXMoKTsKICAgICB9CiAKQEAgLTExNzgsNyArMTE5MSw2
IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB2aXNpYmxlQ29udGVudE9wYXF1ZVJl
Z2lvbikKIHsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9w
dFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShtX3RleHR1cmVNYW5hZ2VyLmdldCgpKSk7
CiAgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdWRlZDsKLSAgICBEZWJ1Z1Njb3BlZFNl
dEltcGxUaHJlYWQgaW1wbFRocmVhZDsKIAogICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEw
MCwgc28gdGhpcyBpbnZhbGlkYXRlcyBhbmQgdGhlbiBwYWludHMgdHdvIHRpbGVzIGluIHZhcmlv
dXMgd2F5cy4KIApAQCAtMTI3MSw4ICsxMjgzLDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1
bVRlc3QsIHBpeGVsc1BhaW50ZWRNZXRyaWNzKQogewogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXll
ckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1f
dGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VyIG9jY2x1
ZGVkOwotICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwotCisgICAgCiAg
ICAgLy8gVGhlIHRpbGUgc2l6ZSBpcyAxMDB4MTAwLCBzbyB0aGlzIGludmFsaWRhdGVzIGFuZCB0
aGVuIHBhaW50cyB0d28gdGlsZXMgaW4gdmFyaW91cyB3YXlzLgogCiAgICAgSW50UmVjdCBvcGFx
dWVQYWludFJlY3Q7CkBAIC0xMzIyLDkgKzEzMzMsNiBAQCBURVNUX0YoVGlsZWRMYXllckNocm9t
aXVtVGVzdCwgcGl4ZWxzUGFpbnRlZE1ldHJpY3MpCiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21p
dW1UZXN0LCBkb250QWxsb2NhdGVDb250ZW50c1doZW5UYXJnZXRTdXJmYWNlQ2FudEJlQWxsb2Nh
dGVkKQogewotICAgIC8vIEluaXRpYWxpemUgd2l0aG91dCB0aHJlYWRpbmcgc3VwcG9ydC4KLSAg
ICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6OmluaXRpYWxpemUoMCk7Ci0KICAgICAvLyBUaWxlIHNp
emUgaXMgMTAweDEwMC4KICAgICBJbnRSZWN0IHJvb3RSZWN0KDAsIDAsIDMwMCwgMjAwKTsKICAg
ICBJbnRSZWN0IGNoaWxkUmVjdCgwLCAwLCAzMDAsIDEwMCk7CkBAIC0xMzczLDcgKzEzODEsNiBA
QCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgZG9udEFsbG9jYXRlQ29udGVudHNXaGVu
VGFyZ2V0U3VyZmFjZUNhbnRCZUFsbG9jYQogICAgIGNoaWxkMi0+aW52YWxpZGF0ZUNvbnRlbnRS
ZWN0KGNoaWxkMlJlY3QpOwogICAgIGNjTGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKG1fcXVl
dWUsIHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkpOwogICAgIHsKLSAgICAgICAg
RGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAgICAgICAgIHVwZGF0ZVRleHR1
cmVzKDEwMDApOwogICAgICAgICBFWFBFQ1RfRVEoNiwgcm9vdC0+ZmFrZUxheWVyVGV4dHVyZVVw
ZGF0ZXIoKS0+dXBkYXRlQ291bnQoKSk7CiAgICAgICAgIEVYUEVDVF9FUSgzLCBjaGlsZC0+ZmFr
ZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+dXBkYXRlQ291bnQoKSk7CkBAIC0xMzg0LDEyICsxMzkx
LDEyIEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBkb250QWxsb2NhdGVDb250ZW50
c1doZW5UYXJnZXRTdXJmYWNlQ2FudEJlQWxsb2NhCiAgICAgICAgIGNoaWxkLT5mYWtlTGF5ZXJU
ZXh0dXJlVXBkYXRlcigpLT5jbGVhclVwZGF0ZUNvdW50KCk7CiAgICAgICAgIGNoaWxkMi0+ZmFr
ZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+Y2xlYXJVcGRhdGVDb3VudCgpOwogCi0gICAgICAgIE93
blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gcm9vdEltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1Rp
bGVkTGF5ZXJJbXBsKHJvb3QtPmlkKCkpKSk7Ci0gICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExh
eWVySW1wbD4gY2hpbGRJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbChjaGls
ZC0+aWQoKSkpKTsKLSAgICAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBjaGlsZDJJ
bXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbChjaGlsZDItPmlkKCkpKSk7Ci0g
ICAgICAgIHJvb3QtPnB1c2hQcm9wZXJ0aWVzVG8ocm9vdEltcGwuZ2V0KCkpOwotICAgICAgICBj
aGlsZC0+cHVzaFByb3BlcnRpZXNUbyhjaGlsZEltcGwuZ2V0KCkpOwotICAgICAgICBjaGlsZDIt
PnB1c2hQcm9wZXJ0aWVzVG8oY2hpbGQySW1wbC5nZXQoKSk7CisgICAgICAgIFNjb3BlZEZha2VD
Q1RpbGVkTGF5ZXJJbXBsIHJvb3RJbXBsKHJvb3QtPmlkKCkpOworICAgICAgICBTY29wZWRGYWtl
Q0NUaWxlZExheWVySW1wbCBjaGlsZEltcGwoY2hpbGQtPmlkKCkpOworICAgICAgICBTY29wZWRG
YWtlQ0NUaWxlZExheWVySW1wbCBjaGlsZDJJbXBsKGNoaWxkMi0+aWQoKSk7CisgICAgICAgIGxh
eWVyUHVzaFByb3BlcnRpZXNUbyhyb290LmdldCgpLCByb290SW1wbC5nZXQoKSk7CisgICAgICAg
IGxheWVyUHVzaFByb3BlcnRpZXNUbyhjaGlsZC5nZXQoKSwgY2hpbGRJbXBsLmdldCgpKTsKKyAg
ICAgICAgbGF5ZXJQdXNoUHJvcGVydGllc1RvKGNoaWxkMi5nZXQoKSwgY2hpbGQySW1wbC5nZXQo
KSk7CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDM7ICsraSkgewogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IDI7ICsraikKQEAgLTE0MDgsNyArMTQxNSw2
IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBkb250QWxsb2NhdGVDb250ZW50c1do
ZW5UYXJnZXRTdXJmYWNlQ2FudEJlQWxsb2NhCiAgICAgY2hpbGQyLT5pbnZhbGlkYXRlQ29udGVu
dFJlY3QoY2hpbGQyUmVjdCk7CiAgICAgY2NMYXllclRyZWVIb3N0LT51cGRhdGVMYXllcnMobV9x
dWV1ZSwgKDMgKiAyICsgMyAqIDEpICogKDEwMCAqIDEwMCkgKiA0KTsKICAgICB7Ci0gICAgICAg
IERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAgICAgICB1cGRhdGVUZXh0
dXJlcygxMDAwKTsKICAgICAgICAgRVhQRUNUX0VRKDYsIHJvb3QtPmZha2VMYXllclRleHR1cmVV
cGRhdGVyKCktPnVwZGF0ZUNvdW50KCkpOwogICAgICAgICBFWFBFQ1RfRVEoMCwgY2hpbGQtPmZh
a2VMYXllclRleHR1cmVVcGRhdGVyKCktPnVwZGF0ZUNvdW50KCkpOwpAQCAtMTQxOSwxMiArMTQy
NSwxMiBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgZG9udEFsbG9jYXRlQ29udGVu
dHNXaGVuVGFyZ2V0U3VyZmFjZUNhbnRCZUFsbG9jYQogICAgICAgICBjaGlsZC0+ZmFrZUxheWVy
VGV4dHVyZVVwZGF0ZXIoKS0+Y2xlYXJVcGRhdGVDb3VudCgpOwogICAgICAgICBjaGlsZDItPmZh
a2VMYXllclRleHR1cmVVcGRhdGVyKCktPmNsZWFyVXBkYXRlQ291bnQoKTsKIAotICAgICAgICBP
d25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IHJvb3RJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NU
aWxlZExheWVySW1wbChyb290LT5pZCgpKSkpOwotICAgICAgICBPd25QdHI8RmFrZUNDVGlsZWRM
YXllckltcGw+IGNoaWxkSW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoY2hp
bGQtPmlkKCkpKSk7Ci0gICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gY2hpbGQy
SW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoY2hpbGQyLT5pZCgpKSkpOwot
ICAgICAgICByb290LT5wdXNoUHJvcGVydGllc1RvKHJvb3RJbXBsLmdldCgpKTsKLSAgICAgICAg
Y2hpbGQtPnB1c2hQcm9wZXJ0aWVzVG8oY2hpbGRJbXBsLmdldCgpKTsKLSAgICAgICAgY2hpbGQy
LT5wdXNoUHJvcGVydGllc1RvKGNoaWxkMkltcGwuZ2V0KCkpOworICAgICAgICBTY29wZWRGYWtl
Q0NUaWxlZExheWVySW1wbCByb290SW1wbChyb290LT5pZCgpKTsKKyAgICAgICAgU2NvcGVkRmFr
ZUNDVGlsZWRMYXllckltcGwgY2hpbGRJbXBsKGNoaWxkLT5pZCgpKTsKKyAgICAgICAgU2NvcGVk
RmFrZUNDVGlsZWRMYXllckltcGwgY2hpbGQySW1wbChjaGlsZDItPmlkKCkpOworICAgICAgICBs
YXllclB1c2hQcm9wZXJ0aWVzVG8ocm9vdC5nZXQoKSwgcm9vdEltcGwuZ2V0KCkpOworICAgICAg
ICBsYXllclB1c2hQcm9wZXJ0aWVzVG8oY2hpbGQuZ2V0KCksIGNoaWxkSW1wbC5nZXQoKSk7Cisg
ICAgICAgIGxheWVyUHVzaFByb3BlcnRpZXNUbyhjaGlsZDIuZ2V0KCksIGNoaWxkMkltcGwuZ2V0
KCkpOwogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAzOyArK2kpIHsKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCAyOyArK2opCkBAIC0xNDQ0LDcgKzE0NTAs
NiBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgZG9udEFsbG9jYXRlQ29udGVudHNX
aGVuVGFyZ2V0U3VyZmFjZUNhbnRCZUFsbG9jYQogICAgIGNoaWxkMi0+aW52YWxpZGF0ZUNvbnRl
bnRSZWN0KGNoaWxkMlJlY3QpOwogICAgIGNjTGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKG1f
cXVldWUsICgzICogMSkgKiAoMTAwICogMTAwKSAqIDQpOwogICAgIHsKLSAgICAgICAgRGVidWdT
Y29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAgICAgICAgIHVwZGF0ZVRleHR1cmVzKDEw
MDApOwogICAgICAgICBFWFBFQ1RfRVEoMCwgcm9vdC0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIo
KS0+dXBkYXRlQ291bnQoKSk7CiAgICAgICAgIEVYUEVDVF9FUSgwLCBjaGlsZC0+ZmFrZUxheWVy
VGV4dHVyZVVwZGF0ZXIoKS0+dXBkYXRlQ291bnQoKSk7CkBAIC0xNDU1LDEyICsxNDYwLDEyIEBA
IFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBkb250QWxsb2NhdGVDb250ZW50c1doZW5U
YXJnZXRTdXJmYWNlQ2FudEJlQWxsb2NhCiAgICAgICAgIGNoaWxkLT5mYWtlTGF5ZXJUZXh0dXJl
VXBkYXRlcigpLT5jbGVhclVwZGF0ZUNvdW50KCk7CiAgICAgICAgIGNoaWxkMi0+ZmFrZUxheWVy
VGV4dHVyZVVwZGF0ZXIoKS0+Y2xlYXJVcGRhdGVDb3VudCgpOwogCi0gICAgICAgIE93blB0cjxG
YWtlQ0NUaWxlZExheWVySW1wbD4gcm9vdEltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5
ZXJJbXBsKHJvb3QtPmlkKCkpKSk7Ci0gICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1w
bD4gY2hpbGRJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbChjaGlsZC0+aWQo
KSkpKTsKLSAgICAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBjaGlsZDJJbXBsKGFk
b3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbChjaGlsZDItPmlkKCkpKSk7Ci0gICAgICAg
IHJvb3QtPnB1c2hQcm9wZXJ0aWVzVG8ocm9vdEltcGwuZ2V0KCkpOwotICAgICAgICBjaGlsZC0+
cHVzaFByb3BlcnRpZXNUbyhjaGlsZEltcGwuZ2V0KCkpOwotICAgICAgICBjaGlsZDItPnB1c2hQ
cm9wZXJ0aWVzVG8oY2hpbGQySW1wbC5nZXQoKSk7CisgICAgICAgIFNjb3BlZEZha2VDQ1RpbGVk
TGF5ZXJJbXBsIHJvb3RJbXBsKHJvb3QtPmlkKCkpOworICAgICAgICBTY29wZWRGYWtlQ0NUaWxl
ZExheWVySW1wbCBjaGlsZEltcGwoY2hpbGQtPmlkKCkpOworICAgICAgICBTY29wZWRGYWtlQ0NU
aWxlZExheWVySW1wbCBjaGlsZDJJbXBsKGNoaWxkMi0+aWQoKSk7CisgICAgICAgIGxheWVyUHVz
aFByb3BlcnRpZXNUbyhyb290LmdldCgpLCByb290SW1wbC5nZXQoKSk7CisgICAgICAgIGxheWVy
UHVzaFByb3BlcnRpZXNUbyhjaGlsZC5nZXQoKSwgY2hpbGRJbXBsLmdldCgpKTsKKyAgICAgICAg
bGF5ZXJQdXNoUHJvcGVydGllc1RvKGNoaWxkMi5nZXQoKSwgY2hpbGQySW1wbC5nZXQoKSk7CiAK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDM7ICsraSkgewogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IDI7ICsraikKQEAgLTE0NzEsMTMgKzE0NzYsOSBAQCBU
RVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgZG9udEFsbG9jYXRlQ29udGVudHNXaGVuVGFy
Z2V0U3VyZmFjZUNhbnRCZUFsbG9jYQogICAgIH0KICAgICBjY0xheWVyVHJlZUhvc3QtPmNvbW1p
dENvbXBsZXRlKCk7CiAKLSAgICB7Ci0gICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBp
bXBsVGhyZWFkOwotICAgICAgICBjY0xheWVyVHJlZUhvc3QtPmNvbnRlbnRzVGV4dHVyZU1hbmFn
ZXIoKS0+Y2xlYXJBbGxNZW1vcnkobV9yZXNvdXJjZVByb3ZpZGVyLmdldCgpKTsKLSAgICB9Cisg
ICAgdGV4dHVyZU1hbmFnZXJDbGVhckFsbE1lbW9yeShjY0xheWVyVHJlZUhvc3QtPmNvbnRlbnRz
VGV4dHVyZU1hbmFnZXIoKSwgbV9yZXNvdXJjZVByb3ZpZGVyLmdldCgpKTsKICAgICBjY0xheWVy
VHJlZUhvc3QtPnNldFJvb3RMYXllcigwKTsKICAgICBjY0xheWVyVHJlZUhvc3QuY2xlYXIoKTsK
LSAgICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6OnNodXRkb3duKCk7CiB9CiAKIGNsYXNzIFRyYWNr
aW5nTGF5ZXJQYWludGVyIDogcHVibGljIExheWVyUGFpbnRlckNocm9taXVtIHsKQEAgLTE1NDEs
MTEgKzE1NDIsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgbm9uSW50ZWdlckNv
bnRlbnRzU2NhbGVJc05vdERpc3RvcnRlZER1cmluZ1BhaW50KQogICAgIGxheWVyLT50cmFja2lu
Z0xheWVyUGFpbnRlcigpLT5yZXNldFBhaW50ZWRSZWN0KCk7CiAKICAgICBFWFBFQ1RfSU5UX1JF
Q1RfRVEoSW50UmVjdCgpLCBsYXllci0+dHJhY2tpbmdMYXllclBhaW50ZXIoKS0+cGFpbnRlZFJl
Y3QoKSk7Ci0KLSAgICB7Ci0gICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhy
ZWFkOwotICAgICAgICB1cGRhdGVUZXh0dXJlcygpOwotICAgIH0KKyAgICB1cGRhdGVUZXh0dXJl
cygpOwogCiAgICAgLy8gSW52YWxpZGF0ZSB0aGUgZW50aXJlIGxheWVyIGluIGNvbnRlbnQgc3Bh
Y2UuIFdoZW4gcGFpbnRpbmcsIHRoZSByZWN0IGdpdmVuIHRvIHdlYmtpdCBzaG91bGQgbWF0Y2gg
dGhlIGxheWVyJ3MgYm91bmRzLgogICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoY29u
dGVudFJlY3QpOwpAQCAtMTU3NSwxMSArMTU3Miw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21p
dW1UZXN0LCBub25JbnRlZ2VyQ29udGVudHNTY2FsZUlzTm90RGlzdG9ydGVkRHVyaW5nSW52YWxp
CiAgICAgbGF5ZXItPnRyYWNraW5nTGF5ZXJQYWludGVyKCktPnJlc2V0UGFpbnRlZFJlY3QoKTsK
IAogICAgIEVYUEVDVF9JTlRfUkVDVF9FUShJbnRSZWN0KCksIGxheWVyLT50cmFja2luZ0xheWVy
UGFpbnRlcigpLT5wYWludGVkUmVjdCgpKTsKLQotICAgIHsKLSAgICAgICAgRGVidWdTY29wZWRT
ZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7Ci0gICAgICAgIHVwZGF0ZVRleHR1cmVzKCk7Ci0gICAg
fQorICAgIHVwZGF0ZVRleHR1cmVzKCk7CiAKICAgICAvLyBJbnZhbGlkYXRlIHRoZSBlbnRpcmUg
bGF5ZXIgaW4gbGF5ZXIgc3BhY2UuIFdoZW4gcGFpbnRpbmcsIHRoZSByZWN0IGdpdmVuIHRvIHdl
YmtpdCBzaG91bGQgbWF0Y2ggdGhlIGxheWVyJ3MgYm91bmRzLgogICAgIGxheWVyLT5zZXROZWVk
c0Rpc3BsYXlSZWN0KGxheWVyUmVjdCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161601</attachid>
            <date>2012-08-30 18:44:28 -0700</date>
            <delta_ts>2012-08-31 18:51:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95057-20120830184417.patch</filename>
            <type>text/plain</type>
            <size>103968</size>
            <attacher name="Christopher Cameron">ccameron</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3MTk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWM3YTQzNmQ1Y2NjZGE0
ZDExYWMyMjUwNDFlYmYzYTA1NjdlN2RjMS4uN2UzOGE5OGQzZmJjOTM3ZjE5ZWYyMDcwN2IzMTEy
MWE0YmI3M2QyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMyBAQAorMjAxMi0wOC0zMCAgQ2hy
aXN0b3BoZXIgQ2FtZXJvbiAgPGNjYW1lcm9uQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hy
b21pdW1dIEFsbG93IGltcGwtdGhyZWFkIGRlbGV0aW9uIG9mIG9ubHkgc29tZSByZXNvdXJjZXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1MDU3CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVG93YXJkcyBh
bGxvd2luZyB0aGUgaW1wbCB0aHJlYWQgdG8gZGVsZXRlIGp1c3Qgc29tZSByZXNvdXJjZXMgKGFz
CisgICAgICAgIG9wcG9zZWQgdG8gZGVsZXRpbmcgYWxsIHJlc291cmNlcykuCisKKyAgICAgICAg
RG8gaW1wbC10aHJlYWQgZGVsZXRpb24gdGhyb3VnaCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFn
ZXIgaW5zdGVhZCBvZgorICAgICAgICBDQ1Jlc291cmNlUHJvdmlkZXIuIEluIHN1YnNlcXVlbnQg
Y2hhbmdlcyB0aGUgaW1wbCB0aHJlYWQgd2lsbCBiZSBhYmxlCisgICAgICAgIHRvIHNldCBhIHRo
cmVzaG9sZCBmb3Igd2hhdCB0byBkZWxldGUpLiBQdXQgYWxsIHN0YXRlIHRoYXQgY2FuCisgICAg
ICAgIGJlIGNvbmN1cnJlbnRseSBhY2Nlc3NlZCBieSB0aGUgbWFpbiBhbmQgaW1wbCB0aHJlYWRz
IGludG8gYSBzZXBhcmF0ZQorICAgICAgICBTaGFyZWRTdGF0ZSBzdWItY2xhc3Mgd2hpY2ggaGFz
IGEgbXV0ZXguIEFkZCBhIHNldCBvZiB0ZXh0dXJlcyB0aGF0CisgICAgICAgIGhhdmUgYmVlbiBk
ZWxldGVkIGJ5IHRoZSBpbXBsIHRocmVhZCwgYnV0IGhhdmUgbm90IGhhZCB0aGVpciByZWxhdGVk
CisgICAgICAgIHN0cnVjdHVyZXMgY2xlYXJlZCBieSB0aGUgbWFpbiB0aHJlYWQgeWV0LiBBZGQg
aGVscGVyIGZ1bmN0aW9ucyB0byBkZWxldGUKKyAgICAgICAgYSBiYWNraW5nJ3MgcmVzb3VyY2Uu
CisKKyAgICAgICAgQWxsb3cgbXVsdGlwbGUgaW4tZmxpZ2h0IHRleHR1cmUgcHVyZ2VzLiBJbiBD
Q1RocmVhZFByb3h5LCBtYWtlIHRoZQorICAgICAgICBhY2tub3dsZWRnZW1lbnQgb2YgdGV4dHVy
ZSBkZWxldGlvbiBiZSBhbiBpbnRlZ2VyIGNvdW50ZXIgaW5zdGVhZCBvZiBhCisgICAgICAgIGJv
b2wsIGJlY2F1c2Ugd2UgbWF5IGhhdmUgbXVsdGlwbGUgaW4tZmxpZ2h0IHB1cmdlcy4gUmVtb3Zl
IG1hbnkKKyAgICAgICAgaW5zdGFuY2VzIHdoZXJlIHRleHR1cmUgcHVyZ2VzIHdlcmUgYXZvaWRl
ZCB3aGVuIHRoZXJlIHdhcyBhbgorICAgICAgICBvdXRzdGFuZGluZyB0ZXh0LgorCisgICAgICAg
IEFkZCB0aGUgYWJpbGl0eSB0byBjbGVhciBvbmx5IHRoZSByZWZlcmVuY2VzIHRvIGRlbGV0ZWQg
dGV4dHVyZXMgZnJvbQorICAgICAgICB0aGUgdGV4dHVyZSB1cGxvYWQgcXVldWUuCisKKyAgICAg
ICAgQWRkIGFzc2VydGlvbnMgdGhhdCByZXNvdXJjZXMgYmUgZnJlZWQgdG8gQ0NQcmlvcml0aXpl
ZFRleHR1cmVNYW5hZ2VyLgorCisgICAgICAgIEFkZCBsb3RzIG9mIGFzc2VydHMgdG8gQ0NQcmlv
cml0aXplZFRleHR1cmVNYW5hZ2VyIHRvIGVuc3VyZSBhbmQKKyAgICAgICAgaWxsdW1pbmF0ZSBz
dXBwb3J0ZWQgbXVsdGl0aHJlYWRlZCBhY2Nlc3MuCisgICAgICAgIAorICAgICAgICBGaXggYSBk
b3plbiBwbGFjZXMgd2hlcmUgQ0NUaHJlYWRQcm94eSBhbmQgQ0NTaW5nbGVUaHJlYWRQcm94eSBo
b2xkCisgICAgICAgIHRoZSBtYWluIHRocmVhZCBibG9ja2VkLCBidXQgZG9uJ3Qgbm90aWZ5IHRo
ZSBkZWJ1ZyBzdHJ1Y3R1cmVzIG9mCisgICAgICAgIHRoaXMuCisKKyAgICAgICAgTmV3IHRlc3Qg
Q0NUZXh0dXJlVXBkYXRlQ29udHJvbGxlclRlc3RfQXN5bmNEZWxldGlvbgorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZTo6YmFja2luZ1dhc0FzeW5j
aHJvbm91c2x5RGVsZXRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dDo6ZGVsZXRlQ29udGVudHNUZXh0dXJlc1Jlc291cmNlc09uSW1wbFRocmVhZCk6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6ZGVzdHJveVRl
eHR1cmVzRGVsZXRlZEJ5SW1wbFRocmVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmg6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6cmVsZWFz
ZUNvbnRlbnRzVGV4dHVyZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaDoKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdEltcGxD
bGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6c2V0Q29udGVu
dHNUZXh0dXJlc1B1cmdlZCk6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RJbXBsKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZTo6dXBsb2FkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlOjpiYWNraW5nV2FzQXN5bmNocm9u
b3VzbHlEZWxldGVkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlLmg6CisgICAgICAgIChDQ1By
aW9yaXRpemVkVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVy
ZTo6QmFja2luZzo6QmFja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4
dHVyZTo6QmFja2luZzo6fkJhY2tpbmcpOgorICAgICAgICAoQmFja2luZyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZzo6b3duZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmU6OkJhY2tpbmc6OnJlc291cmNlRGVsZXRlZCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRl
eHR1cmVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJl
TWFuYWdlcjo6fkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcik6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnByaW9yaXRpemVUZXh0dXJlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnJlcXVlc3RMYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6YWNxdWlyZUJh
Y2tpbmdUZXh0dXJlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0aXplZFRl
eHR1cmVNYW5hZ2VyOjpyZWR1Y2VNZW1vcnkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0
aXplZFRleHR1cmVNYW5hZ2VyOjpkZWxldGVCYWNraW5nc1Jlc291cmNlc09uSW1wbFRocmVhZCk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmRlc3Ryb3lC
YWNraW5nc0ZyZWVkQnlJbXBsVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjbGVhckFsbE1lbW9yeSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnJlZ2lzdGVyVGV4
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnJl
dHVybkJhY2tpbmdUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcjo6Y3JlYXRlQmFja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRp
emVkVGV4dHVyZU1hbmFnZXI6OmRlc3Ryb3lCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6YXNzZXJ0SW52YXJpYW50cyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
Lmg6CisgICAgICAgIChDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NoZWR1bGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNDU2NoZWR1bGVyOjpiZWdpbkZyYW1lQWJvcnRlZCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5OjpyZWNyZWF0ZUNvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6c3RvcCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1NpbmdsZVRocmVhZFByb3h5OjpkZWxldGVDb250ZW50c1RleHR1cmVzT25JbXBsVGhyZWFk
KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQ
cm94eTo6Y29tbWl0QW5kQ29tcG9zaXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlUXVldWUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NUZXh0dXJlVXBkYXRlUXVldWU6OmNsZWFyVXBsb2Fkc1RvRGVsZXRlZFJlc291cmNl
cyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVRdWV1ZS5oOgorICAgICAgICAoQ0NUZXh0dXJlVXBkYXRl
UXVldWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFk
UHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6Q0NUaHJlYWRQcm94
eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpkZWxldGVDb250ZW50c1RleHR1
cmVzT25JbXBsVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NUaHJlYWRQcm94eTo6c2NoZWR1bGVkQWN0aW9uQmVnaW5GcmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhy
ZWFkUHJveHk6OmJlZ2luRnJhbWVDb21wbGV0ZU9uSW1wbFRocmVhZCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ1RocmVhZFByb3h5OjpzY2hlZHVsZWRBY3Rpb25Db21taXQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NUaHJlYWRQcm94eTo6bGF5ZXJUcmVlSG9zdENsb3NlZE9uSW1wbFRocmVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpyZWNyZWF0ZUNvbnRleHRPbkltcGxUaHJl
YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJv
eHkuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OkJlZ2luRnJhbWVBbmRDb21t
aXRTdGF0ZTo6QmVnaW5GcmFtZUFuZENvbW1pdFN0YXRlKToKKyAgICAgICAgKEJlZ2luRnJhbWVB
bmRDb21taXRTdGF0ZSk6CisgICAgICAgIChDQ1RocmVhZFByb3h5KToKKwogMjAxMi0wOC0zMCAg
UHJhdGlrIFNvbGFua2kgIDxwc29sYW5raUBhcHBsZS5jb20+CiAKICAgICAgICAgb2JqY19tc2dT
ZW5kIGFuZCBJTVAgc2hvdWxkIGJlIGNhc3QgYXBwcm9wcmlhdGVseSBiZWZvcmUgdXNpbmcKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZjU5NzU4YmU0MTVhNjQ4MjFkYzkzZjc4YjgyN2E3
YWMyNTNiZDZlZi4uZmYwZGY5ZTY4OTFiM2IzZWZmOGEwNzRjZjc5MjA5ZDBhZTY5NGY3MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAxMi0wOC0zMCAgQ2hy
aXN0b3BoZXIgQ2FtZXJvbiAgPGNjYW1lcm9uQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hy
b21pdW1dIEFsbG93IGltcGwtdGhyZWFkIGRlbGV0aW9uIG9mIG9ubHkgc29tZSByZXNvdXJjZXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1MDU3CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW4gQ0NMYXll
clRyZWVIb3N0SW1wbFRlc3QsIHJlbW92ZSB0aGUgdGVzdAorICAgICAgICByZWxlYXNlQ29udGVu
dHNUZXh0dXJlU2hvdWxkVHJpZ2dlckNvbW1pdCBiZWNhdXNlIGl0IGlzIG5vIGxvbmdlciB2YWxp
ZAorICAgICAgICBhbmQgaXMgcmVkdW5kYW50LiAgQSByZWxlYXNlQ29udGVudHNUZXh0dXJlIHdp
bGwgb25seSB0cmlnZ2VyIGEgY29tbWl0CisgICAgICAgIGlmIHRoZSByZWxlYXNlQ29udGVudHNU
ZXh0dXJlIGFjdHVhbGx5IGRlbGV0ZXMgYW55IHRleHR1cmVzLCBhbmQKKyAgICAgICAgQ0NMYXll
clRyZWVIb3N0VGVzdEV2aWN0VGV4dHVyZXMgYWxyZWFkeSB0ZXN0cyB0aGF0IHRoZSBjb21taXQg
aXMKKyAgICAgICAgaXNzdWVkIHVwb24gZXZpY3Rpb24uCisKKyAgICAgICAgVXBkYXRlIFRpbGVk
TGF5ZXJDaHJvbWl1bVRlc3QgdG8gYWRoZXJlIHRvIHRocmVhZGluZyByZXF1aXJlbWVudHMgYW5k
CisgICAgICAgIG5vdCBsZWFrIHJlc291cmNlcy4KKworICAgICAgICBVcGRhdGUgQ0NQcmlvcml0
aXplZFRleHR1cmVUZXN0IHRvIGFkaGVyZSB0byB0aHJlYWRpbmcgcmVxdWlybWVudHMuCisKKyAg
ICAgICAgQWRkIENDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXJUZXN0X0FzeW5jRGVsZXRpb24gdGVz
dCB0byB2YWxpZGF0ZSBuZXcKKyAgICAgICAgdGV4dHVyZSB1cGxvYWQgcXVldWUgYmVoYXZpb3Iu
CisKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHA6CisgICAgICAg
ICogdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHA6CisKIDIwMTItMDgtMzAgIEphbWVz
IFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIE1h
a2Ugd2Via2l0X2NvbXBvc2l0b3Igc3BlY2lmaWMgdW5pdCB0ZXN0IGNvbXBpbGF0aW9uIGNvbmRp
dGlvbmFsIG9uIGd5cCB2YXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaAppbmRleCAxYWQ2
MWM4ZDhjYTQ2NTNjMWYyMGI4Y2VlNDI2MmM3NzFlNGJlMjFjLi4zMzE4YWRiNDFiYWFlYzAwZTJl
NzAzZWIwZjQ0MmY5NTFjMWI0Mjc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oCkBA
IC00OSw2ICs0OSw3IEBAIHB1YmxpYzoKIAogICAgICAgICBDQ1ByaW9yaXRpemVkVGV4dHVyZSog
dGV4dHVyZSgpIHsgcmV0dXJuIG1fdGV4dHVyZS5nZXQoKTsgfQogICAgICAgICB2b2lkIHN3YXBU
ZXh0dXJlV2l0aChPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmU+JiB0ZXh0dXJlKSB7IG1fdGV4
dHVyZS5zd2FwKHRleHR1cmUpOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBiYWNraW5nV2FzQXN5
bmNocm9ub3VzbHlEZWxldGVkKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlLT5iYWNraW5nV2Fz
QXN5bmNocm9ub3VzbHlEZWxldGVkKCk7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVS
ZWN0KGNvbnN0IEludFJlY3QmIC8qIHNvdXJjZVJlY3QgKi8sIENDUmVuZGVyaW5nU3RhdHMmKSB7
IH0KICAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVJlY3QoQ0NSZXNvdXJjZVByb3ZpZGVyKiwg
Y29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50U2l6ZSYgZGVzdE9mZnNldCkgPSAw
OwogICAgIHByb3RlY3RlZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IDU3
MGQxNTY3MzM5MmM4ZjE3MTJhZjhmZTA4MWRkMzUxMTY0MjRhOTAuLjk3NmRmOTI2ZmEyMTVhZTMy
YjY3YmE0MWNkNGNjNTViNDBiMzE4YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNw
cApAQCAtMTkyLDEzICsxOTIsMjEgQEAgQ0NMYXllclRyZWVIb3N0OjpSZWNyZWF0ZVJlc3VsdCBD
Q0xheWVyVHJlZUhvc3Q6OnJlY3JlYXRlQ29udGV4dCgpCiAgICAgcmV0dXJuIFJlY3JlYXRlRmFp
bGVkQW5kR2F2ZVVwOwogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZGVsZXRlQ29udGVudHNU
ZXh0dXJlc09uSW1wbFRocmVhZChDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIp
Cit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZGVsZXRlQWxsQ29udGVudHNUZXh0dXJlc09uSW1wbFRo
cmVhZChDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIpCiB7CiAgICAgQVNTRVJU
KENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBpZiAobV9yZW5kZXJlckluaXRpYWxpemVk
KQogICAgICAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPmNsZWFyQWxsTWVtb3J5KHJlc291
cmNlUHJvdmlkZXIpOwogfQogCitib29sIENDTGF5ZXJUcmVlSG9zdDo6cmVkdWNlQ29udGVudHNU
ZXh0dXJlc01lbW9yeU9uSW1wbFRocmVhZChDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJv
dmlkZXIpCit7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKyAgICBpZiAo
bV9yZW5kZXJlckluaXRpYWxpemVkKQorICAgICAgICByZXR1cm4gbV9jb250ZW50c1RleHR1cmVN
YW5hZ2VyLT5yZWR1Y2VNZW1vcnlPbkltcGxUaHJlYWRBc3luYyhyZXNvdXJjZVByb3ZpZGVyKTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjphY3F1aXJlTGF5
ZXJUZXh0dXJlcygpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKQEAg
LTQxMywxMSArNDIxLDEyIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXRWaXNpYmxlKGJvb2wg
dmlzaWJsZSkKICAgICBtX3Byb3h5LT5zZXRWaXNpYmxlKHZpc2libGUpOwogfQogCi12b2lkIEND
TGF5ZXJUcmVlSG9zdDo6ZXZpY3RBbGxDb250ZW50VGV4dHVyZXMoKQorCit2b2lkIENDTGF5ZXJU
cmVlSG9zdDo6ZGVzdHJveUNvbnRlbnRzVGV4dHVyZXNFdmljdGVkQnlJbXBsVGhyZWFkKCkKIHsK
ICAgICBBU1NFUlQoQ0NQcm94eTo6aXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVChtX2NvbnRl
bnRzVGV4dHVyZU1hbmFnZXIuZ2V0KCkpOwotICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+
YWxsQmFja2luZ1RleHR1cmVzV2VyZURlbGV0ZWQoKTsKKyAgICBtX2NvbnRlbnRzVGV4dHVyZU1h
bmFnZXItPmRlc3Ryb3lCYWNraW5nc0FzeW5jaHJvbm91c2x5RXZpY3RlZCgpOwogfQogCiB2b2lk
IENDTGF5ZXJUcmVlSG9zdDo6c3RhcnRQYWdlU2NhbGVBbmltYXRpb24oY29uc3QgSW50U2l6ZSYg
dGFyZ2V0UG9zaXRpb24sIGJvb2wgdXNlQW5jaG9yLCBmbG9hdCBzY2FsZSwgZG91YmxlIGR1cmF0
aW9uU2VjKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAppbmRleCA1MjMwMmQzMjhiODMxZmNi
N2Y1MzkxOTI5NDQ5ZDYyNzJiMTI4YzY3Li5mOTg0YzA3ZTU2NGFjOWVjMGI5NDY1YTQwOTcxZTc3
N2Y0N2EwN2E2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApAQCAtMTc1LDcgKzE3NSw2
IEBAIHB1YmxpYzoKICAgICBSZWNyZWF0ZVJlc3VsdCByZWNyZWF0ZUNvbnRleHQoKTsKICAgICB2
b2lkIGRpZENvbW1pdEFuZERyYXdGcmFtZSgpIHsgbV9jbGllbnQtPmRpZENvbW1pdEFuZERyYXdG
cmFtZSgpOyB9CiAgICAgdm9pZCBkaWRDb21wbGV0ZVN3YXBCdWZmZXJzKCkgeyBtX2NsaWVudC0+
ZGlkQ29tcGxldGVTd2FwQnVmZmVycygpOyB9Ci0gICAgdm9pZCBkZWxldGVDb250ZW50c1RleHR1
cmVzT25JbXBsVGhyZWFkKENDUmVzb3VyY2VQcm92aWRlciopOwogICAgIHZpcnR1YWwgdm9pZCBh
Y3F1aXJlTGF5ZXJUZXh0dXJlcygpOwogICAgIC8vIFJldHVybnMgZmFsc2UgaWYgd2Ugc2hvdWxk
IGFib3J0IHRoaXMgZnJhbWUgZHVlIHRvIGluaXRpYWxpemF0aW9uIGZhaWx1cmUuCiAgICAgYm9v
bCBpbml0aWFsaXplUmVuZGVyZXJJZk5lZWRlZCgpOwpAQCAtMjMzLDExICsyMzIsMTYgQEAgcHVi
bGljOgogCiAgICAgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyKiBjb250ZW50c1RleHR1cmVN
YW5hZ2VyKCkgY29uc3Q7CiAKLSAgICAvLyBUaGlzIHdpbGwgY2F1c2UgY29udGVudHMgdGV4dHVy
ZSBtYW5hZ2VyIHRvIGV2aWN0IGFsbCB0ZXh0dXJlcywgYnV0Ci0gICAgLy8gd2l0aG91dCBkZWxl
dGluZyB0aGVtLiBUaGlzIGhhcHBlbnMgYWZ0ZXIgYWxsIGNvbnRlbnQgdGV4dHVyZXMgaGF2ZQot
ICAgIC8vIGFscmVhZHkgYmVlbiBkZWxldGVkIG9uIGltcGwsIGFmdGVyIGdldHRpbmcgYSAwIGFs
bG9jYXRpb24gbGltaXQuCi0gICAgLy8gU2V0IGR1cmluZyBhIGNvbW1pdCwgYnV0IGJlZm9yZSB1
cGRhdGVMYXllcnMuCi0gICAgdm9pZCBldmljdEFsbENvbnRlbnRUZXh0dXJlcygpOworICAgIHZv
aWQgZGVsZXRlQWxsQ29udGVudHNUZXh0dXJlc09uSW1wbFRocmVhZChDQ1Jlc291cmNlUHJvdmlk
ZXIqKTsKKworICAgIC8vIFRoaXMgd2lsbCBjYXVzZSBjb250ZW50cyB0ZXh0dXJlIG1hbmFnZXIg
dG8gZnJlZSBzb21lIHJlc291cmNlcyB1c2VkCisgICAgLy8gYnkgdGV4dHVyZXMsIGJ1dCB3aWxs
IG5vdCBkZWxldGUgdGhlIHRleHR1cmUgYmFja2luZ3Mgb2JqZWN0cy4gVGhlCisgICAgLy8gZnVu
Y3Rpb24gcmV0dXJucyB0cnVlIGlmIHNvbWUgcmVzb3VyY2VzIHdlcmUgaW5kZWVkIGRlc3Ryb3ll
ZC4KKyAgICBib29sIHJlZHVjZUNvbnRlbnRzVGV4dHVyZXNNZW1vcnlPbkltcGxUaHJlYWQoQ0NS
ZXNvdXJjZVByb3ZpZGVyKik7CisKKyAgICAvLyBUaGlzIHdpbGwgZGVzdHJveSB0aGUgYmFja2lu
Z3MgdGhhdCBoYWQgdGhlaXIgR1BVIHJlc291cmNlcyBmcmVlZAorICAgIC8vIGJ5IGRlbGV0ZUNv
bnRlbnRzVGV4dHVyZXNSZXNvdXJjZXNPbkltcGxUaHJlYWQuCisgICAgdm9pZCBkZXN0cm95Q29u
dGVudHNUZXh0dXJlc0V2aWN0ZWRCeUltcGxUaHJlYWQoKTsKIAogICAgIGJvb2wgdmlzaWJsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdmlzaWJsZTsgfQogICAgIHZvaWQgc2V0VmlzaWJsZShib29sKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXggZmNkZDI4YmNlODY1
YjVlNjAxZGY1MThiNWUzYzY4MTk3MzQ1N2IxYy4uZGFhNDgxYTRiYjAyOGIxNzE3NjNlMTM4Zjlj
MTM3NzFlNGQxNmMyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAK
QEAgLTUyNSwxMSArNTI1LDcgQEAgYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcmVwYXJlVG9E
cmF3KEZyYW1lRGF0YSYgZnJhbWUpCiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cmVsZWFz
ZUNvbnRlbnRzVGV4dHVyZXMoKQogewotICAgIGlmIChtX2NvbnRlbnRzVGV4dHVyZXNQdXJnZWQp
Ci0gICAgICAgIHJldHVybjsKLSAgICBtX3Jlc291cmNlUHJvdmlkZXItPmRlbGV0ZU93bmVkUmVz
b3VyY2VzKENDUmVuZGVyZXI6OkNvbnRlbnRQb29sKTsKLSAgICBtX2NvbnRlbnRzVGV4dHVyZXNQ
dXJnZWQgPSB0cnVlOwotICAgIG1fY2xpZW50LT5zZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgp
OworICAgIG1fY2xpZW50LT5yZWR1Y2VDb250ZW50c1RleHR1cmVzTWVtb3J5T25JbXBsVGhyZWFk
KCk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TWVtb3J5QWxsb2NhdGlvbkxp
bWl0Qnl0ZXMoc2l6ZV90IGJ5dGVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5o
CmluZGV4IGIzZDA3YWMyOWMwYTgwNzhmMDE3YzhlMTg5MzBiYTAwNzI5MDYzODQuLjI1NDJmODBk
Zjk3ZTZmMTUyOGUyM2ExMDk2YjhmNzU5MTMyY2NkYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RJbXBsLmgKQEAgLTYwLDYgKzYwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBzZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHBvc3RBbmlt
YXRpb25FdmVudHNUb01haW5UaHJlYWRPbkltcGxUaHJlYWQoUGFzc093blB0cjxDQ0FuaW1hdGlv
bkV2ZW50c1ZlY3Rvcj4sIGRvdWJsZSB3YWxsQ2xvY2tUaW1lKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHJlZHVjZUNvbnRlbnRzVGV4dHVyZXNNZW1vcnlPbkltcGxUaHJlYWQoKSA9IDA7CiB9Owog
CiAvLyBDQ0xheWVyVHJlZUhvc3RJbXBsIG93bnMgdGhlIENDTGF5ZXJJbXBsIHRyZWUgYXMgd2Vs
bCBhcyBhc3NvY2lhdGVkIHJlbmRlcmluZyBzdGF0ZQpAQCAtMTU5LDcgKzE2MCw3IEBAIHB1Ymxp
YzoKICAgICBpbnQgc291cmNlRnJhbWVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZUZy
YW1lTnVtYmVyOyB9CiAgICAgdm9pZCBzZXRTb3VyY2VGcmFtZU51bWJlcihpbnQgZnJhbWVOdW1i
ZXIpIHsgbV9zb3VyY2VGcmFtZU51bWJlciA9IGZyYW1lTnVtYmVyOyB9CiAKLSAgICBib29sIGNv
bnRlbnRzVGV4dHVyZXNQdXJnZWQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzVGV4dHVyZXNQ
dXJnZWQ7IH0KKyAgICB2b2lkIHNldENvbnRlbnRzVGV4dHVyZXNQdXJnZWQoKSB7IG1fY29udGVu
dHNUZXh0dXJlc1B1cmdlZCA9IHRydWU7IH0KICAgICB2b2lkIHJlc2V0Q29udGVudHNUZXh0dXJl
c1B1cmdlZCgpIHsgbV9jb250ZW50c1RleHR1cmVzUHVyZ2VkID0gZmFsc2U7IH0KICAgICBzaXpl
X3QgbWVtb3J5QWxsb2NhdGlvbkxpbWl0Qnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX21lbW9yeUFs
bG9jYXRpb25MaW1pdEJ5dGVzOyB9CiAKQEAgLTI4Miw2ICsyODMsMTAgQEAgcHJpdmF0ZToKICAg
ICBJbnRTaXplIG1fZGV2aWNlVmlld3BvcnRTaXplOwogICAgIGZsb2F0IG1fZGV2aWNlU2NhbGVG
YWN0b3I7CiAgICAgYm9vbCBtX3Zpc2libGU7CisKKyAgICAvLyBTZXQgd2hlbiB0aGUgaW1wbCB0
aHJlYWQgZGVsZXRlcyB0ZXh0dXJlcywgdW4tc2V0IHdoZW4gdGhlIGltcGwncyBsYXllciB0cmVl
CisgICAgLy8gaXMga25vd24gdG8gbm90IHJlZmVyZW5jZSBhbnkgZGVsZXRlZCByZXNvdXJjZXMu
IFVzZWQgdG8gcHJldmVudCBkcmF3aW5nCisgICAgLy8gd2l0aCBkZWxldGVkIHJlc291cmNlcy4K
ICAgICBib29sIG1fY29udGVudHNUZXh0dXJlc1B1cmdlZDsKICAgICBzaXplX3QgbV9tZW1vcnlB
bGxvY2F0aW9uTGltaXRCeXRlczsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmUuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1
cmUuY3BwCmluZGV4IGQ5ZjY4YWYwYWUwYjk5MjgxMzNhMjMyZDc0MTY5MjQ3NjEyMDZkZGIuLmRj
MDhjZTc0ZjkyOWQ3YTQ0NDZiY2ZhNjZlMzllYjhiOTA0YmI5YjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0
dXJlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1ByaW9yaXRpemVkVGV4dHVyZS5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUg
IkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5oIgogI2luY2x1ZGUgIkNDUHJpb3JpdHlDYWxj
dWxhdG9yLmgiCisjaW5jbHVkZSAiQ0NQcm94eS5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KIAog
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKQEAgLTExMCw5ICsxMTEsMTcgQEAgdm9pZCBDQ1ByaW9yaXRp
emVkVGV4dHVyZTo6dXBsb2FkKENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlciwK
ICAgICBpZiAobV9pc0Fib3ZlUHJpb3JpdHlDdXRvZmYpCiAgICAgICAgIGFjcXVpcmVCYWNraW5n
VGV4dHVyZShyZXNvdXJjZVByb3ZpZGVyKTsKICAgICBBU1NFUlQobV9iYWNraW5nKTsKKyAgICBB
U1NFUlQoIWJhY2tpbmdXYXNBc3luY2hyb25vdXNseURlbGV0ZWQoKSk7CiAgICAgcmVzb3VyY2VQ
cm92aWRlci0+dXBsb2FkKHJlc291cmNlSWQoKSwgaW1hZ2UsIGltYWdlUmVjdCwgc291cmNlUmVj
dCwgZGVzdE9mZnNldCk7CiB9CiAKK2Jvb2wgQ0NQcmlvcml0aXplZFRleHR1cmU6OmJhY2tpbmdX
YXNBc3luY2hyb25vdXNseURlbGV0ZWQoKSBjb25zdAoreworICAgIGlmIChtX2JhY2tpbmcpCisg
ICAgICAgIHJldHVybiBtX2JhY2tpbmctPnJlc291cmNlRGVsZXRlZCgpOworICAgIHJldHVybiBm
YWxzZTsKK30KKwogdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZTo6bGluayhCYWNraW5nKiBiYWNr
aW5nKQogewogICAgIEFTU0VSVChiYWNraW5nKTsKQEAgLTEzOSw0ICsxNDgsMjUgQEAgdm9pZCBD
Q1ByaW9yaXRpemVkVGV4dHVyZTo6c2V0VG9TZWxmTWFuYWdlZE1lbW9yeVBsYWNlaG9sZGVyKHNp
emVfdCBieXRlcykKICAgICBtX2J5dGVzID0gYnl0ZXM7CiB9CiAKK0NDUmVzb3VyY2VQcm92aWRl
cjo6UmVzb3VyY2VJZCBDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZzo6aWQoKQoreworICAg
IEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgcmV0dXJuIG1fdGV4dHVyZS5p
ZCgpOworfQorCitib29sIENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nOjpyZXNvdXJjZURl
bGV0ZWQoKSBjb25zdAoreworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7Cisg
ICAgcmV0dXJuIG1fcmVzb3VyY2VEZWxldGVkOworfQorCit2b2lkIENDUHJpb3JpdGl6ZWRUZXh0
dXJlOjpCYWNraW5nOjpkZWxldGVSZXNvdXJjZShDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNl
UHJvdmlkZXIpCit7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKyAgICBB
U1NFUlQocmVzb3VyY2VQcm92aWRlcik7CisgICAgQVNTRVJUKCFtX3Jlc291cmNlRGVsZXRlZCk7
CisgICAgcmVzb3VyY2VQcm92aWRlci0+ZGVsZXRlUmVzb3VyY2UobV90ZXh0dXJlLmlkKCkpOwor
ICAgIG1fcmVzb3VyY2VEZWxldGVkID0gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NQcmlvcml0aXplZFRleHR1cmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlLmgKaW5kZXggMzc4OWQ3ZjI2OWEz
ZDdlNTE5NWE4OTJkZGQzNzZkYWU2MThkMmIwZS4uNzJmMjZmZTk4MmZmYzkxMzhhN2ZiNjJkY2Mw
ZmMxNTkxZTFmMTliNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZS5oCkBA
IC04OCw2ICs4OCw4IEBAIHB1YmxpYzoKICAgICAvLyBVcGxvYWRzIHBpeGVscyBpbnRvIHRoZSBi
YWNraW5nIHJlc291cmNlLiBUaGlzIGZ1bmN0aW9ucyB3aWxsIGFxdWlyZSB0aGUgYmFja2luZyBp
ZiBuZWVkZWQuCiAgICAgdm9pZCB1cGxvYWQoQ0NSZXNvdXJjZVByb3ZpZGVyKiwgY29uc3QgdWlu
dDhfdCogaW1hZ2UsIGNvbnN0IEludFJlY3QmIGltYWdlUmVjdCwgY29uc3QgSW50UmVjdCYgc291
cmNlUmVjdCwgY29uc3QgSW50U2l6ZSYgZGVzdE9mZnNldCk7CiAKKyAgICBib29sIGJhY2tpbmdX
YXNBc3luY2hyb25vdXNseURlbGV0ZWQoKSBjb25zdDsKKwogICAgIENDUmVzb3VyY2VQcm92aWRl
cjo6UmVzb3VyY2VJZCByZXNvdXJjZUlkKCkgY29uc3Q7CiAKICAgICAvLyBTZWxmLW1hbmFnZWQg
dGV4dHVyZXMgYXJlIGFjY291bnRlZCBmb3Igd2hlbiBwcmlvcml0aXppbmcgb3RoZXIgdGV4dHVy
ZXMsCkBAIC0xMDEsMTYgKzEwMywyNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI7CiAKLSAgICBjbGFzcyBCYWNraW5nIDog
cHVibGljIENDVGV4dHVyZSB7CisgICAgY2xhc3MgQmFja2luZyB7CiAgICAgICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEJhY2tpbmcpOwogICAgIHB1YmxpYzoKICAgICAgICAgQmFja2luZyh1bnNp
Z25lZCBpZCwgSW50U2l6ZSBzaXplLCBHQzNEZW51bSBmb3JtYXQpCi0gICAgICAgICAgICA6IEND
VGV4dHVyZShpZCwgc2l6ZSwgZm9ybWF0KSwgbV9vd25lcigwKSB7IH0KLSAgICAgICAgfkJhY2tp
bmcoKSB7IEFTU0VSVCghbV9vd25lcik7IH0KKyAgICAgICAgICAgIDogbV90ZXh0dXJlKGlkLCBz
aXplLCBmb3JtYXQpLCBtX3Jlc291cmNlRGVsZXRlZChmYWxzZSksIG1fb3duZXIoMCkgeyB9Cisg
ICAgICAgIH5CYWNraW5nKCkgeyBBU1NFUlQoIW1fb3duZXIgJiYgbV9yZXNvdXJjZURlbGV0ZWQp
OyB9CisKKyAgICAgICAgQ0NQcmlvcml0aXplZFRleHR1cmUqIG93bmVyKCkgY29uc3QgeyByZXR1
cm4gbV9vd25lcjsgfQorCisgICAgICAgIENDUmVzb3VyY2VQcm92aWRlcjo6UmVzb3VyY2VJZCBp
ZCgpOworICAgICAgICB2b2lkIGRlbGV0ZVJlc291cmNlKENDUmVzb3VyY2VQcm92aWRlciopOwor
ICAgICAgICBib29sIHJlc291cmNlRGVsZXRlZCgpIGNvbnN0OworICAgICAgICBjb25zdCBJbnRT
aXplJiBzaXplKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlLnNpemUoKTsgfQorICAgICAgICBH
QzNEZW51bSBmb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmUuZm9ybWF0KCk7IH0KKyAg
ICAgICAgc2l6ZV90IGJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlLmJ5dGVzKCk7IH0K
IAotICAgICAgICBDQ1ByaW9yaXRpemVkVGV4dHVyZSogb3duZXIoKSB7IHJldHVybiBtX293bmVy
OyB9CiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIENDUHJpb3JpdGl6ZWRUZXh0
dXJlOworICAgICAgICBmcmllbmQgY2xhc3MgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOwor
ICAgICAgICBDQ1RleHR1cmUgbV90ZXh0dXJlOworICAgICAgICBib29sIG1fcmVzb3VyY2VEZWxl
dGVkOwogICAgICAgICBDQ1ByaW9yaXRpemVkVGV4dHVyZSogbV9vd25lcjsKICAgICB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmNwcAppbmRl
eCA5NmZiMDVkOTQ1MmIxMTc2ZTI5YjQ3N2VhN2Y1ODM1ZTJjMzEwODVmLi4yNzcyODQ3ZjM1NGFj
MGE5OGQ2MjkyOWJhYWEwZDVhMDk3Njk5NGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1
ZGUgIkNDUHJpb3JpdGl6ZWRUZXh0dXJlLmgiCiAjaW5jbHVkZSAiQ0NQcmlvcml0eUNhbGN1bGF0
b3IuaCIKKyNpbmNsdWRlICJDQ1Byb3h5LmgiCiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgogI2lu
Y2x1ZGUgPGFsZ29yaXRobT4KIApAQCAtNDksMTUgKzUwLDE3IEBAIENDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcjo6fkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcigpCiAgICAgd2hpbGUgKG1f
dGV4dHVyZXMuc2l6ZSgpID4gMCkKICAgICAgICAgdW5yZWdpc3RlclRleHR1cmUoKm1fdGV4dHVy
ZXMuYmVnaW4oKSk7CiAKLSAgICAvLyBFYWNoIHJlbWFpbmluZyBiYWNraW5nIGlzIGEgbGVha2Vk
IG9wZW5nbCB0ZXh0dXJlLiBXZSBkb24ndCBoYXZlIHRoZSByZXNvdXJjZVByb3ZpZGVyCi0gICAg
Ly8gdG8gZGVsZXRlIHRoZSB0ZXh0dXJlcyBhdCB0aGlzIHRpbWUgc28gY2xlYXJNZW1vcnkoKSBu
ZWVkcyB0byBiZSBjYWxsZWQgYmVmb3JlIHRoaXMuCi0gICAgd2hpbGUgKG1fYmFja2luZ3Muc2l6
ZSgpID4gMCkKLSAgICAgICAgZGVzdHJveUJhY2tpbmcoKm1fYmFja2luZ3MuYmVnaW4oKSwgMCk7
CisgICAgLy8gUmVtb3ZlIGFueSBiYWNraW5ncyB0aGF0IHdlcmUgZXZpY3RlZC4KKyAgICBjbGVh
ckV2aWN0ZWRCYWNraW5ncygpOworCisgICAgLy8gRWFjaCByZW1haW5pbmcgYmFja2luZyBpcyBy
ZWFsIG1lbW9yeSBsZWFrLiBUaGlzIHNob3VsZG4ndCBoYXBwZW4uCisgICAgQVNTRVJUKG1fYmFj
a2luZ3MuaXNFbXB0eSgpKTsKIH0KIAogdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6
OnByaW9yaXRpemVUZXh0dXJlcygpCiB7CiAgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ1ByaW9y
aXRpemVkVGV4dHVyZU1hbmFnZXI6OnByaW9yaXRpemVUZXh0dXJlcyIpOworICAgIEFTU0VSVChD
Q1Byb3h5Ojppc01haW5UaHJlYWQoKSk7CiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgYXNz
ZXJ0SW52YXJpYW50cygpOwpAQCAtMTM3LDYgKzE0MCw3IEBAIHZvaWQgQ0NQcmlvcml0aXplZFRl
eHR1cmVNYW5hZ2VyOjpwcmlvcml0aXplVGV4dHVyZXMoKQogCiB2b2lkIENDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlcjo6Y2xlYXJQcmlvcml0aWVzKCkKIHsKKyAgICBBU1NFUlQoQ0NQcm94eTo6
aXNNYWluVGhyZWFkKCkpOwogICAgIGZvciAoVGV4dHVyZVNldDo6aXRlcmF0b3IgaXQgPSBtX3Rl
eHR1cmVzLmJlZ2luKCk7IGl0ICE9IG1fdGV4dHVyZXMuZW5kKCk7ICsraXQpIHsKICAgICAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZCByZW1vdmUgdGhpcyBhbmQganVzdCBzZXQgYWxsIHByaW9yaXRp
ZXMgdG8KICAgICAgICAgLy8gICAgICAgIENDUHJpb3JpdHlDYWxjdWxhdG9yOjpsb3dlc3RQcmlv
cml0eSgpIG9uY2Ugd2UgaGF2ZSBwcmlvcml0aWVzCkBAIC0xNDgsNiArMTUyLDggQEAgdm9pZCBD
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNsZWFyUHJpb3JpdGllcygpCiAKIGJvb2wgQ0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpyZXF1ZXN0TGF0ZShDQ1ByaW9yaXRpemVkVGV4dHVy
ZSogdGV4dHVyZSkKIHsKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNNYWluVGhyZWFkKCkpOworCiAg
ICAgLy8gVGhpcyBpcyBhbHJlYWR5IGFib3ZlIGN1dG9mZiwgc28gZG9uJ3QgZG91YmxlIGNvdW50
IGl0J3MgbWVtb3J5IGJlbG93LgogICAgIGlmICh0ZXh0dXJlLT5pc0Fib3ZlUHJpb3JpdHlDdXRv
ZmYoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNzAsNiArMTc2LDggQEAgYm9vbCBDQ1By
aW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnJlcXVlc3RMYXRlKENDUHJpb3JpdGl6ZWRUZXh0dXJl
KiB0ZXh0dXJlKQogCiB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6YWNxdWlyZUJh
Y2tpbmdUZXh0dXJlSWZOZWVkZWQoQ0NQcmlvcml0aXplZFRleHR1cmUqIHRleHR1cmUsIENDUmVz
b3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlcikKIHsKKyAgICBBU1NFUlQoQ0NQcm94eTo6
aXNJbXBsVGhyZWFkKCkgJiYgQ0NQcm94eTo6aXNNYWluVGhyZWFkQmxvY2tlZCgpKTsKKyAgICBB
U1NFUlQocmVzb3VyY2VQcm92aWRlcik7CiAgICAgQVNTRVJUKCF0ZXh0dXJlLT5pc1NlbGZNYW5h
Z2VkKCkpOwogICAgIEFTU0VSVCh0ZXh0dXJlLT5pc0Fib3ZlUHJpb3JpdHlDdXRvZmYoKSk7CiAg
ICAgaWYgKHRleHR1cmUtPmJhY2tpbmcoKSB8fCAhdGV4dHVyZS0+aXNBYm92ZVByaW9yaXR5Q3V0
b2ZmKCkpCkBAIC0xODIsNiArMTkwLDggQEAgdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFn
ZXI6OmFjcXVpcmVCYWNraW5nVGV4dHVyZUlmTmVlZGVkKENDUHJpb3JpdGl6ZWRUZXgKICAgICBm
b3IgKEJhY2tpbmdTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9iYWNraW5ncy5iZWdpbigpOyBpdCAhPSBt
X2JhY2tpbmdzLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIGlmICgoKml0KS0+b3duZXIoKSAmJiAo
Kml0KS0+b3duZXIoKS0+aXNBYm92ZVByaW9yaXR5Q3V0b2ZmKCkpCiAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgaWYgKCgqaXQpLT5yZXNvdXJjZURlbGV0ZWQoKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICBpZiAoKCppdCktPnNpemUoKSA9PSB0ZXh0dXJlLT5zaXplKCkgJiYg
KCppdCktPmZvcm1hdCgpID09IHRleHR1cmUtPmZvcm1hdCgpKSB7CiAgICAgICAgICAgICBiYWNr
aW5nID0gKCppdCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE5Miw2ICsyMDIsNyBAQCB2b2lk
IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6YWNxdWlyZUJhY2tpbmdUZXh0dXJlSWZOZWVk
ZWQoQ0NQcmlvcml0aXplZFRleAogICAgIGlmICghYmFja2luZykgewogICAgICAgICByZWR1Y2VN
ZW1vcnkobV9tZW1vcnlBdmFpbGFibGVCeXRlcyAtIHRleHR1cmUtPmJ5dGVzKCksIHJlc291cmNl
UHJvdmlkZXIpOwogICAgICAgICBiYWNraW5nID0gY3JlYXRlQmFja2luZyh0ZXh0dXJlLT5zaXpl
KCksIHRleHR1cmUtPmZvcm1hdCgpLCByZXNvdXJjZVByb3ZpZGVyKTsKKyAgICAgICAgbV9zaGFy
ZWRTdGF0ZS5hZGRCYWNraW5nT25JbXBsVGhyZWFkKGJhY2tpbmcpOwogICAgIH0KIAogICAgIC8v
IE1vdmUgdGhlIHVzZWQgYmFja2luZyB0ZXh0dXJlIHRvIHRoZSBlbmQgb2YgdGhlIGV2aWN0aW9u
IGxpc3QuCkBAIC0yMDQsMjAgKzIxNSwyNCBAQCB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcjo6YWNxdWlyZUJhY2tpbmdUZXh0dXJlSWZOZWVkZWQoQ0NQcmlvcml0aXplZFRleAogCiB2
b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmVkdWNlTWVtb3J5KHNpemVfdCBsaW1p
dEJ5dGVzLCBDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIpCiB7CisgICAgQVNT
RVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpICYmIENDUHJveHk6OmlzTWFpblRocmVhZEJsb2Nr
ZWQoKSk7CisgICAgQVNTRVJUKHJlc291cmNlUHJvdmlkZXIpOwogICAgIGlmIChtZW1vcnlVc2VC
eXRlcygpIDw9IGxpbWl0Qnl0ZXMpCiAgICAgICAgIHJldHVybjsKICAgICAvLyBEZXN0cm95IGJh
Y2tpbmdzIHVudGlsIHdlIGFyZSBiZWxvdyB0aGUgbGltaXQsCiAgICAgLy8gb3IgdW50aWwgYWxs
IGJhY2tpbmdzIHJlbWFpbmluZyBhcmUgYWJvdmUgdGhlIGN1dG9mZi4KICAgICB3aGlsZSAobWVt
b3J5VXNlQnl0ZXMoKSA+IGxpbWl0Qnl0ZXMgJiYgbV9iYWNraW5ncy5zaXplKCkgPiAwKSB7Ci0g
ICAgICAgIEJhY2tpbmdTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9iYWNraW5ncy5iZWdpbigpOwotICAg
ICAgICBpZiAoKCppdCktPm93bmVyKCkgJiYgKCppdCktPm93bmVyKCktPmlzQWJvdmVQcmlvcml0
eUN1dG9mZigpKQorICAgICAgICBDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZyogYmFja2lu
ZyA9ICptX2JhY2tpbmdzLmJlZ2luKCk7CisgICAgICAgIGlmIChiYWNraW5nLT5vd25lcigpICYm
IGJhY2tpbmctPm93bmVyKCktPmlzQWJvdmVQcmlvcml0eUN1dG9mZigpKQogICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGRlc3Ryb3lCYWNraW5nKCgqaXQpLCByZXNvdXJjZVByb3ZpZGVyKTsK
KyAgICAgICAgbV9zaGFyZWRTdGF0ZS5yZW1vdmVCYWNraW5nT25JbXBsVGhyZWFkKGJhY2tpbmcs
IHJlc291cmNlUHJvdmlkZXIpOworICAgICAgICBkZXN0cm95QmFja2luZyhiYWNraW5nKTsKICAg
ICB9CiB9CiAKIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpyZWR1Y2VNZW1vcnko
Q0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyKQogeworICAgIEFTU0VSVChDQ1By
b3h5Ojppc0ltcGxUaHJlYWQoKSAmJiBDQ1Byb3h5Ojppc01haW5UaHJlYWRCbG9ja2VkKCkpOwog
ICAgIHJlZHVjZU1lbW9yeShtX21lbW9yeUF2YWlsYWJsZUJ5dGVzLCByZXNvdXJjZVByb3ZpZGVy
KTsKICAgICBBU1NFUlQobWVtb3J5VXNlQnl0ZXMoKSA8PSBtYXhNZW1vcnlMaW1pdEJ5dGVzKCkp
OwogCkBAIC0yMzgsMjcgKzI1MywzOCBAQCB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdl
cjo6cmVkdWNlTWVtb3J5KENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aQogICAgIHJl
ZHVjZU1lbW9yeShtZW1vcnlVc2VCeXRlcygpIC0gKHdhc3RlZE1lbW9yeSAtIHRlblBlcmNlbnRP
Zk1lbW9yeSksIHJlc291cmNlUHJvdmlkZXIpOwogfQogCi12b2lkIENDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcjo6Y2xlYXJBbGxNZW1vcnkoQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVBy
b3ZpZGVyKQorYm9vbCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnJlZHVjZU1lbW9yeU9u
SW1wbFRocmVhZEFzeW5jKENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlcikKIHsK
LSAgICAvLyBVbmxpbmsgYW5kIGRlc3Ryb3kgYWxsIGJhY2tpbmcgdGV4dHVyZXMuCi0gICAgd2hp
bGUgKG1fYmFja2luZ3Muc2l6ZSgpID4gMCkgewotICAgICAgICBCYWNraW5nU2V0OjppdGVyYXRv
ciBpdCA9IG1fYmFja2luZ3MuYmVnaW4oKTsKLSAgICAgICAgaWYgKCgqaXQpLT5vd25lcigpKQot
ICAgICAgICAgICAgKCppdCktPm93bmVyKCktPnVubGluaygpOwotICAgICAgICBkZXN0cm95QmFj
a2luZygoKml0KSwgcmVzb3VyY2VQcm92aWRlcik7Ci0gICAgfQorICAgIEFTU0VSVChDQ1Byb3h5
Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgQVNTRVJUKHJlc291cmNlUHJvdmlkZXIpOworICAgIHJl
dHVybiBtX3NoYXJlZFN0YXRlLmV2aWN0QmFja2luZ3NSZXNvdXJjZXNPbkltcGxUaHJlYWRBc3lu
YyhyZXNvdXJjZVByb3ZpZGVyKTsKIH0KIAotdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFn
ZXI6OmFsbEJhY2tpbmdUZXh0dXJlc1dlcmVEZWxldGVkKCkKK3ZvaWQgQ0NQcmlvcml0aXplZFRl
eHR1cmVNYW5hZ2VyOjpkZXN0cm95QmFja2luZ3NBc3luY2hyb25vdXNseUV2aWN0ZWQoKQogewot
ICAgIC8vIFNhbWUgYXMgY2xlYXJBbGxNZW1vcnksIGV4Y2VwdCBhbGwgb3VyIHRleHR1cmVzIHdl
cmUgYWxyZWFkeQotICAgIC8vIGRlbGV0ZWQgZXh0ZXJuYWxseSwgc28gd2UgZG9uJ3QgZGVsZXRl
IHRoZW0uIFBhc3Npbmcgbm8KLSAgICAvLyByZXNvdXJjZVByb3ZpZGVyIHJlc3VsdHMgaW4gbGVh
a2luZyB0aGUgKG5vdyBpbnZhbGlkKSB0ZXh0dXJlIGlkcy4KLSAgICBjbGVhckFsbE1lbW9yeSgw
KTsKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNNYWluVGhyZWFkKCkpOworICAgIGNsZWFyRXZpY3Rl
ZEJhY2tpbmdzKCk7Cit9CisKK3ZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjbGVh
ckV2aWN0ZWRCYWNraW5ncygpCit7CisgICAgQmFja2luZ1NldCBldmljdGVkQmFja2luZ3M7Cisg
ICAgbV9zaGFyZWRTdGF0ZS5nZXRBbmRDbGVhckV2aWN0ZWRCYWNraW5ncyhldmljdGVkQmFja2lu
Z3MpOworICAgIGZvciAoQmFja2luZ1NldDo6aXRlcmF0b3IgaXQgPSBldmljdGVkQmFja2luZ3Mu
YmVnaW4oKTsgaXQgIT0gZXZpY3RlZEJhY2tpbmdzLmVuZCgpOyArK2l0KQorICAgICAgICBkZXN0
cm95QmFja2luZygoKml0KSk7Cit9CisKK3ZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
OjpjbGVhckFsbE1lbW9yeShDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIpCit7
CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpICYmIENDUHJveHk6OmlzTWFpblRo
cmVhZEJsb2NrZWQoKSk7CisgICAgQVNTRVJUKHJlc291cmNlUHJvdmlkZXIpOworICAgIHJlZHVj
ZU1lbW9yeU9uSW1wbFRocmVhZEFzeW5jKHJlc291cmNlUHJvdmlkZXIpOworICAgIGNsZWFyRXZp
Y3RlZEJhY2tpbmdzKCk7CiB9CiAKIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpy
ZWdpc3RlclRleHR1cmUoQ0NQcmlvcml0aXplZFRleHR1cmUqIHRleHR1cmUpCiB7CisgICAgQVNT
RVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQodGV4dHVyZSk7CiAgICAg
QVNTRVJUKCF0ZXh0dXJlLT50ZXh0dXJlTWFuYWdlcigpKTsKICAgICBBU1NFUlQoIXRleHR1cmUt
PmJhY2tpbmcoKSk7CkBAIC0yNjYsMTEgKzI5MiwxMSBAQCB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcjo6cmVnaXN0ZXJUZXh0dXJlKENDUHJpb3JpdGl6ZWRUZXh0dXJlKiB0ZXh0dXJl
KQogCiAgICAgdGV4dHVyZS0+c2V0TWFuYWdlckludGVybmFsKHRoaXMpOwogICAgIG1fdGV4dHVy
ZXMuYWRkKHRleHR1cmUpOwotCiB9CiAKIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
Ojp1bnJlZ2lzdGVyVGV4dHVyZShDQ1ByaW9yaXRpemVkVGV4dHVyZSogdGV4dHVyZSkKIHsKKyAg
ICBBU1NFUlQoQ0NQcm94eTo6aXNNYWluVGhyZWFkKCkgfHwgKENDUHJveHk6OmlzSW1wbFRocmVh
ZCgpICYmIENDUHJveHk6OmlzTWFpblRocmVhZEJsb2NrZWQoKSkpOwogICAgIEFTU0VSVCh0ZXh0
dXJlKTsKICAgICBBU1NFUlQobV90ZXh0dXJlcy5maW5kKHRleHR1cmUpICE9IG1fdGV4dHVyZXMu
ZW5kKCkpOwogCkBAIC0yODAsOSArMzA2LDkgQEAgdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI6OnVucmVnaXN0ZXJUZXh0dXJlKENDUHJpb3JpdGl6ZWRUZXh0dXJlKiB0ZXh0dXIKICAg
ICB0ZXh0dXJlLT5zZXRBYm92ZVByaW9yaXR5Q3V0b2ZmKGZhbHNlKTsKIH0KIAotCiB2b2lkIEND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmV0dXJuQmFja2luZ1RleHR1cmUoQ0NQcmlvcml0
aXplZFRleHR1cmUqIHRleHR1cmUpCiB7CisgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVh
ZCgpIHx8IChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSAmJiBDQ1Byb3h5Ojppc01haW5UaHJlYWRC
bG9ja2VkKCkpKTsKICAgICBpZiAodGV4dHVyZS0+YmFja2luZygpKSB7CiAgICAgICAgIC8vIE1v
dmUgdGhlIGJhY2tpbmcgdGV4dHVyZSB0byB0aGUgZnJvbnQgZm9yIGV2aWN0aW9uL3JlY3ljbGlu
ZyBhbmQgdW5saW5rIGl0LgogICAgICAgICBtX2JhY2tpbmdzLnJlbW92ZSh0ZXh0dXJlLT5iYWNr
aW5nKCkpOwpAQCAtMjkzLDggKzMxOSw4IEBAIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5h
Z2VyOjpyZXR1cm5CYWNraW5nVGV4dHVyZShDQ1ByaW9yaXRpemVkVGV4dHVyZSogdGV4CiAKIEND
UHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nKiBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6
OmNyZWF0ZUJhY2tpbmcoSW50U2l6ZSBzaXplLCBHQzNEZW51bSBmb3JtYXQsIENDUmVzb3VyY2VQ
cm92aWRlciogcmVzb3VyY2VQcm92aWRlcikKIHsKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBs
VGhyZWFkKCkgJiYgQ0NQcm94eTo6aXNNYWluVGhyZWFkQmxvY2tlZCgpKTsKICAgICBBU1NFUlQo
cmVzb3VyY2VQcm92aWRlcik7Ci0KICAgICBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNlSWQg
cmVzb3VyY2VJZCA9IHJlc291cmNlUHJvdmlkZXItPmNyZWF0ZVJlc291cmNlKG1fcG9vbCwgc2l6
ZSwgZm9ybWF0LCBDQ1Jlc291cmNlUHJvdmlkZXI6OlRleHR1cmVVc2FnZUFueSk7CiAgICAgQ0NQ
cmlvcml0aXplZFRleHR1cmU6OkJhY2tpbmcqIGJhY2tpbmcgPSBuZXcgQ0NQcmlvcml0aXplZFRl
eHR1cmU6OkJhY2tpbmcocmVzb3VyY2VJZCwgc2l6ZSwgZm9ybWF0KTsKICAgICBtX21lbW9yeVVz
ZUJ5dGVzICs9IGJhY2tpbmctPmJ5dGVzKCk7CkBAIC0zMDMsMTUgKzMyOSwxMyBAQCBDQ1ByaW9y
aXRpemVkVGV4dHVyZTo6QmFja2luZyogQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVh
dGVCYWNraW5nKEludFNpegogICAgIHJldHVybiBiYWNraW5nOwogfQogCi12b2lkIENDUHJpb3Jp
dGl6ZWRUZXh0dXJlTWFuYWdlcjo6ZGVzdHJveUJhY2tpbmcoQ0NQcmlvcml0aXplZFRleHR1cmU6
OkJhY2tpbmcqIGJhY2tpbmcsIENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlcikK
K3ZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpkZXN0cm95QmFja2luZyhDQ1ByaW9y
aXRpemVkVGV4dHVyZTo6QmFja2luZyogYmFja2luZykKIHsKICAgICBBU1NFUlQoYmFja2luZyk7
Ci0gICAgQVNTRVJUKCFiYWNraW5nLT5vd25lcigpIHx8ICFiYWNraW5nLT5vd25lcigpLT5pc0Fi
b3ZlUHJpb3JpdHlDdXRvZmYoKSk7CiAgICAgQVNTRVJUKCFiYWNraW5nLT5vd25lcigpIHx8ICFi
YWNraW5nLT5vd25lcigpLT5pc1NlbGZNYW5hZ2VkKCkpOwogICAgIEFTU0VSVChtX2JhY2tpbmdz
LmZpbmQoYmFja2luZykgIT0gbV9iYWNraW5ncy5lbmQoKSk7CisgICAgQVNTRVJUKGJhY2tpbmct
Pm1fcmVzb3VyY2VEZWxldGVkKTsKIAotICAgIGlmIChyZXNvdXJjZVByb3ZpZGVyKQotICAgICAg
ICByZXNvdXJjZVByb3ZpZGVyLT5kZWxldGVSZXNvdXJjZShiYWNraW5nLT5pZCgpKTsKICAgICBp
ZiAoYmFja2luZy0+b3duZXIoKSkKICAgICAgICAgYmFja2luZy0+b3duZXIoKS0+dW5saW5rKCk7
CiAgICAgbV9tZW1vcnlVc2VCeXRlcyAtPSBiYWNraW5nLT5ieXRlcygpOwpAQCAtMzIwLDEwICsz
NDQsMTEgQEAgdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmRlc3Ryb3lCYWNraW5n
KENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nKgogICAgIGRlbGV0ZSBiYWNraW5nOwogfQog
Ci0KICNpZiAhQVNTRVJUX0RJU0FCTEVECiB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdl
cjo6YXNzZXJ0SW52YXJpYW50cygpCiB7CisgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVh
ZCgpKTsKKwogICAgIC8vIElmIHdlIGhpdCBhbnkgb2YgdGhlc2UgYXNzZXJ0cywgdGhlcmUgaXMg
YSBidWcgaW4gdGhpcyBjbGFzcy4gVG8gc2VlCiAgICAgLy8gd2hlcmUgdGhlIGJ1ZyBpcywgY2Fs
bCB0aGlzIGZ1bmN0aW9uIGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZgogICAgIC8vIGV2ZXJ5
IHB1YmxpYyBmdW5jdGlvbi4KQEAgLTM1NSw1ICszODAsNTAgQEAgdm9pZCBDQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXI6OmFzc2VydEludmFyaWFudHMoKQogfQogI2VuZGlmCiAKK0NDUHJpb3Jp
dGl6ZWRUZXh0dXJlTWFuYWdlcjo6U2hhcmVkU3RhdGU6On5TaGFyZWRTdGF0ZSgpCit7CisgICAg
QVNTRVJUKG1fZXZpY3RlZEJhY2tpbmdzLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1fdW5ldmlj
dGVkQmFja2luZ3MuaXNFbXB0eSgpKTsKK30KKwordm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI6OlNoYXJlZFN0YXRlOjphZGRCYWNraW5nT25JbXBsVGhyZWFkKENDUHJpb3JpdGl6ZWRU
ZXh0dXJlOjpCYWNraW5nKiBiYWNraW5nKQoreworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxU
aHJlYWQoKSAmJiBDQ1Byb3h5Ojppc01haW5UaHJlYWRCbG9ja2VkKCkpOworICAgIG1fdW5ldmlj
dGVkQmFja2luZ3MuYWRkKGJhY2tpbmcpOworfQorCit2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJl
TWFuYWdlcjo6U2hhcmVkU3RhdGU6OnJlbW92ZUJhY2tpbmdPbkltcGxUaHJlYWQoQ0NQcmlvcml0
aXplZFRleHR1cmU6OkJhY2tpbmcqIGJhY2tpbmcsIENDUmVzb3VyY2VQcm92aWRlciogcmVzb3Vy
Y2VQcm92aWRlcikKK3sKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkgJiYgQ0NQ
cm94eTo6aXNNYWluVGhyZWFkQmxvY2tlZCgpKTsKKyAgICBpZiAoYmFja2luZy0+cmVzb3VyY2VE
ZWxldGVkKCkpIHsKKyAgICAgICAgQVNTRVJUKG1fZXZpY3RlZEJhY2tpbmdzLmZpbmQoYmFja2lu
ZykgIT0gbV9ldmljdGVkQmFja2luZ3MuZW5kKCkpOworICAgICAgICBtX2V2aWN0ZWRCYWNraW5n
cy5yZW1vdmUoYmFja2luZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKG1fdW5ldmlj
dGVkQmFja2luZ3MuZmluZChiYWNraW5nKSAhPSBtX3VuZXZpY3RlZEJhY2tpbmdzLmVuZCgpKTsK
KyAgICAgICAgbV91bmV2aWN0ZWRCYWNraW5ncy5yZW1vdmUoYmFja2luZyk7CisgICAgICAgIGJh
Y2tpbmctPmRlbGV0ZVJlc291cmNlKHJlc291cmNlUHJvdmlkZXIpOworICAgIH0KK30KKworYm9v
bCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OlNoYXJlZFN0YXRlOjpldmljdEJhY2tpbmdz
UmVzb3VyY2VzT25JbXBsVGhyZWFkQXN5bmMoQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVBy
b3ZpZGVyKQoreworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgQVNTRVJUKENDUHJveHk6
OmlzSW1wbFRocmVhZCgpKTsKKyAgICBNdXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOworICAgIGZv
ciAoQmFja2luZ1NldDo6aXRlcmF0b3IgaXQgPSBtX3VuZXZpY3RlZEJhY2tpbmdzLmJlZ2luKCk7
IGl0ICE9IG1fdW5ldmljdGVkQmFja2luZ3MuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgcmVzdWx0
ID0gdHJ1ZTsKKyAgICAgICAgKCppdCktPmRlbGV0ZVJlc291cmNlKHJlc291cmNlUHJvdmlkZXIp
OworICAgICAgICBtX2V2aWN0ZWRCYWNraW5ncy5hZGQoKCppdCkpOworICAgIH0KKyAgICBtX3Vu
ZXZpY3RlZEJhY2tpbmdzLmNsZWFyKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBD
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OlNoYXJlZFN0YXRlOjpnZXRBbmRDbGVhckV2aWN0
ZWRCYWNraW5ncyhCYWNraW5nU2V0JiBldmljdGVkQmFja2luZ3MpCit7CisgICAgZXZpY3RlZEJh
Y2tpbmdzLmNsZWFyKCk7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKKyAgICBldmlj
dGVkQmFja2luZ3Muc3dhcChtX2V2aWN0ZWRCYWNraW5ncyk7Cit9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
LmgKaW5kZXggMTNkYmM1MTc2YmNkNzhlZTI5NzA5MGE2NzY1MTI0NWY5YmQ3NjRjYS4uY2Q2MzIy
NjJjYmNjYTRhNGIxMmE4ZWIzMTgyZjc2NDQwNzQ5MzFlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVN
YW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmgKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNs
dWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYv
TGlzdEhhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzcsOCArNzgs
MTkgQEAgcHVibGljOgogICAgIGJvb2wgcmVxdWVzdExhdGUoQ0NQcmlvcml0aXplZFRleHR1cmUq
KTsKIAogICAgIHZvaWQgcmVkdWNlTWVtb3J5KENDUmVzb3VyY2VQcm92aWRlciopOworCisgICAg
Ly8gUmV0dXJucyB0cnVlIGlmIHJlc291cmNlcyBhcmUgZGVsZXRlZCBhcyBhIHJlc3VsdCBvZiB0
aGlzIGNhbGwuCisgICAgLy8gVGhpcyBjYW4gYmUgY2FsbGVkIGNvbmN1cnJlbnRseSB3aXRoIHRo
ZSBtYWluIHRocmVhZCBhY2Nlc3NpbmcgdGhpcworICAgIC8vIHN0cnVjdHVyZSwgYW5kIG9ubHkg
dG91Y2hlcyBkYXRhIGluIHRoZSBxdWFyYW50aW5lZCBtX3NoYXJlZFN0YXRlLgorICAgIGJvb2wg
cmVkdWNlTWVtb3J5T25JbXBsVGhyZWFkQXN5bmMoQ0NSZXNvdXJjZVByb3ZpZGVyKik7CisKKyAg
ICAvLyBSZW1vdmUgdGhlIGJhY2tpbmdzIHdob3NlIHJlc291cmNlcyB3ZXJlIGRlc3Ryb3llZCBi
eSAKKyAgICAvLyByZWR1Y2VNZW1vcnlPbkltcGxUaHJlYWRBc3luYworICAgIHZvaWQgZGVzdHJv
eUJhY2tpbmdzQXN5bmNocm9ub3VzbHlFdmljdGVkKCk7CisKKyAgICAvLyBEZWxldGUgYWxsIHRl
eHR1cmVzIGFuZCBmcm0gdGhlIGltcGwgdGhyZWFkIChhdCB0aHJlYWQgZXhpdCBhbmQKKyAgICAv
LyBjb250ZXh0IGxvc3QpLgogICAgIHZvaWQgY2xlYXJBbGxNZW1vcnkoQ0NSZXNvdXJjZVByb3Zp
ZGVyKik7Ci0gICAgdm9pZCBhbGxCYWNraW5nVGV4dHVyZXNXZXJlRGVsZXRlZCgpOwogCiAgICAg
dm9pZCBhY3F1aXJlQmFja2luZ1RleHR1cmVJZk5lZWRlZChDQ1ByaW9yaXRpemVkVGV4dHVyZSos
IENDUmVzb3VyY2VQcm92aWRlciopOwogCkBAIC05MSw2ICsxMDMsNyBAQCBwdWJsaWM6CiAjZW5k
aWYKIAogcHJpdmF0ZToKKwogICAgIC8vIENvbXBhcmUgdGV4dHVyZXMuIEhpZ2hlc3QgcHJpb3Jp
dHkgZmlyc3QuCiAgICAgc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVUZXh0dXJlcyhDQ1ByaW9y
aXRpemVkVGV4dHVyZSogYSwgQ0NQcmlvcml0aXplZFRleHR1cmUqIGIpCiAgICAgewpAQCAtMTA5
LDExICsxMjIsMTAgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICBDQ1ByaW9yaXRpemVkVGV4dHVy
ZU1hbmFnZXIoc2l6ZV90IG1heE1lbW9yeUxpbWl0Qnl0ZXMsIGludCBtYXhUZXh0dXJlU2l6ZSwg
aW50IHBvb2wpOwotCiAgICAgdm9pZCByZWR1Y2VNZW1vcnkoc2l6ZV90IGxpbWl0LCBDQ1Jlc291
cmNlUHJvdmlkZXIqKTsKLQogICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nKiBjcmVh
dGVCYWNraW5nKEludFNpemUsIEdDM0RlbnVtIGZvcm1hdCwgQ0NSZXNvdXJjZVByb3ZpZGVyKik7
Ci0gICAgdm9pZCBkZXN0cm95QmFja2luZyhDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZyos
IENDUmVzb3VyY2VQcm92aWRlciopOworICAgIHZvaWQgY2xlYXJFdmljdGVkQmFja2luZ3MoKTsK
KyAgICB2b2lkIGRlc3Ryb3lCYWNraW5nKENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nKik7
CiAKICAgICBzaXplX3QgbV9tYXhNZW1vcnlMaW1pdEJ5dGVzOwogICAgIHVuc2lnbmVkIG1fcHJp
b3JpdHlDdXRvZmY7CkBAIC0xMzIsNiArMTQ0LDM3IEBAIHByaXZhdGU6CiAKICAgICBUZXh0dXJl
VmVjdG9yIG1fdGVtcFRleHR1cmVWZWN0b3I7CiAgICAgQmFja2luZ1ZlY3RvciBtX3RlbXBCYWNr
aW5nVmVjdG9yOworCisgICAgLy8gVGhpcyBzdGF0ZSB0aGF0IGNhbiBiZSBjb25jdXJyZW50bHkg
YWNjZXNzZWQgYnkgdGhlIG1haW4gYW5kIGltcGwgdGhyZWFkLAorICAgIC8vIGFuZCBuZWVkcyBw
cm90ZWN0aW9uIGJ5IGEgbXV0ZXguCisgICAgY2xhc3MgU2hhcmVkU3RhdGUgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgU2hhcmVkU3RhdGUoKSB7IH0KKyAgICAgICAgflNoYXJlZFN0YXRlKCk7CisK
KyAgICAgICAgLy8gQ2FsbGVkIG9uIHRoZSBpbXBsIHRocmVhZCB3aGlsZSB0aGUgbWFpbiB0aHJl
YWQgaXMgYmxvY2tlZAorICAgICAgICB2b2lkIGFkZEJhY2tpbmdPbkltcGxUaHJlYWQoQ0NQcmlv
cml0aXplZFRleHR1cmU6OkJhY2tpbmcqKTsKKworICAgICAgICAvLyBDYWxsZWQgb24gdGhlIGlt
cGwgdGhyZWFkIHdoaWxlIHRoZSBtYWluIHRocmVhZCBpcyBibG9ja2VkLiBEZWxldGVzCisgICAg
ICAgIC8vIHRoZSBiYWNraW5nJ3MgcmVzb3VyY2UgaWYgaXQgaGFzIG5vdCBiZWVuIGRlbGV0ZWQg
YWxyZWFkeS4KKyAgICAgICAgdm9pZCByZW1vdmVCYWNraW5nT25JbXBsVGhyZWFkKENDUHJpb3Jp
dGl6ZWRUZXh0dXJlOjpCYWNraW5nKiwgQ0NSZXNvdXJjZVByb3ZpZGVyKik7CisKKyAgICAgICAg
Ly8gQ2FsbGVkIG9uIHRoZSBpbXBsIHRocmVhZCB3aGlsZSB0aGUgbWFpbiB0aHJlYWQgbWF5IG5v
dCBiZQorICAgICAgICAvLyBibG9ja2VkCisgICAgICAgIGJvb2wgZXZpY3RCYWNraW5nc1Jlc291
cmNlc09uSW1wbFRocmVhZEFzeW5jKENDUmVzb3VyY2VQcm92aWRlciopOworCisgICAgICAgIC8v
IENhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQsIHBvc3NpYmx5IGNvbmN1cnJlbnRseSB3aXRoIAor
ICAgICAgICAvLyBldmljdEJhY2tpbmdzUmVzb3VyY2VzT25JbXBsVGhyZWFkQXN5bmMuCisgICAg
ICAgIC8vIEFsc28gY2FsbGVkIG9uIHRoZSBpbXBsIHRocmVhZCBkdXJpbmcgdGhyZWFkLXNodXRk
b3duIGFuZCAKKyAgICAgICAgLy8gY29udGV4dC1sb3N0CisgICAgICAgIHZvaWQgZ2V0QW5kQ2xl
YXJFdmljdGVkQmFja2luZ3MoQmFja2luZ1NldCYpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAg
TXV0ZXggbV9tdXRleDsKKyAgICAgICAgQmFja2luZ1NldCBtX3VuZXZpY3RlZEJhY2tpbmdzOwor
ICAgICAgICBCYWNraW5nU2V0IG1fZXZpY3RlZEJhY2tpbmdzOworICAgIH07CisgICAgU2hhcmVk
U3RhdGUgbV9zaGFyZWRTdGF0ZTsKIH07CiAKIH0gLy8gV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY2hlZHVsZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY2hlZHVs
ZXIuY3BwCmluZGV4IDk5OWEwOGVjOWQwNTE0ODE3NGQxM2MwZmE1Mjg4YmVmMWIyZGJmNjMuLmU0
MWQ5NTVhYjk1YjFkNjAyMjU3MGYwNTNiMjE4YmMxN2IxN2Q2N2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2NoZWR1bGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NjaGVk
dWxlci5jcHAKQEAgLTk5LDYgKzk5LDcgQEAgdm9pZCBDQ1NjaGVkdWxlcjo6YmVnaW5GcmFtZUFi
b3J0ZWQoKQogICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NTY2hlZHVsZXI6OmJlZ2luRnJhbWVB
Ym9ydGVkIik7CiAgICAgbV9zdGF0ZU1hY2hpbmUuYmVnaW5GcmFtZUFib3J0ZWQoKTsKICAgICBw
cm9jZXNzU2NoZWR1bGVkQWN0aW9ucygpOworICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKIHZv
aWQgQ0NTY2hlZHVsZXI6OnNldE1heEZyYW1lc1BlbmRpbmcoaW50IG1heEZyYW1lc1BlbmRpbmcp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCmluZGV4IDY4NzZlYTIxODhi
YWY2NjY4YTI5YWMzN2MxY2QzOGM4Y2I0NDFjZTkuLjE0NWFlMjk3MDkwMjQ2ZDE0YzUzZmFhMmE3
YWZhMGU0ZDMyNjkyYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3Bw
CkBAIC0xNTUsOSArMTU1LDkgQEAgYm9vbCBDQ1NpbmdsZVRocmVhZFByb3h5OjpyZWNyZWF0ZUNv
bnRleHQoKQogCiAgICAgYm9vbCBpbml0aWFsaXplZDsKICAgICB7CisgICAgICAgIERlYnVnU2Nv
cGVkU2V0TWFpblRocmVhZEJsb2NrZWQgbWFpblRocmVhZEJsb2NrZWQ7CiAgICAgICAgIERlYnVn
U2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOwotICAgICAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdElt
cGwtPmNvbnRlbnRzVGV4dHVyZXNQdXJnZWQoKSkKLSAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9z
dC0+ZGVsZXRlQ29udGVudHNUZXh0dXJlc09uSW1wbFRocmVhZChtX2xheWVyVHJlZUhvc3RJbXBs
LT5yZXNvdXJjZVByb3ZpZGVyKCkpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmRlbGV0ZUFs
bENvbnRlbnRzVGV4dHVyZXNPbkltcGxUaHJlYWQobV9sYXllclRyZWVIb3N0SW1wbC0+cmVzb3Vy
Y2VQcm92aWRlcigpKTsKICAgICAgICAgaW5pdGlhbGl6ZWQgPSBtX2xheWVyVHJlZUhvc3RJbXBs
LT5pbml0aWFsaXplUmVuZGVyZXIoY29udGV4dC5yZWxlYXNlKCksIFVudGhyb3R0bGVkVXBsb2Fk
ZXIpOwogICAgICAgICBpZiAoaW5pdGlhbGl6ZWQpIHsKICAgICAgICAgICAgIG1fUmVuZGVyZXJD
YXBhYmlsaXRpZXNGb3JNYWluVGhyZWFkID0gbV9sYXllclRyZWVIb3N0SW1wbC0+cmVuZGVyZXJD
YXBhYmlsaXRpZXMoKTsKQEAgLTI2MCw5ICsyNjAsNyBAQCB2b2lkIENDU2luZ2xlVGhyZWFkUHJv
eHk6OnN0b3AoKQogICAgIHsKICAgICAgICAgRGVidWdTY29wZWRTZXRNYWluVGhyZWFkQmxvY2tl
ZCBtYWluVGhyZWFkQmxvY2tlZDsKICAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGlt
cGw7Ci0KLSAgICAgICAgaWYgKCFtX2xheWVyVHJlZUhvc3RJbXBsLT5jb250ZW50c1RleHR1cmVz
UHVyZ2VkKCkpCi0gICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmRlbGV0ZUNvbnRlbnRzVGV4
dHVyZXNPbkltcGxUaHJlYWQobV9sYXllclRyZWVIb3N0SW1wbC0+cmVzb3VyY2VQcm92aWRlcigp
KTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5kZWxldGVBbGxDb250ZW50c1RleHR1cmVzT25J
bXBsVGhyZWFkKG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJlc291cmNlUHJvdmlkZXIoKSk7CiAgICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwuY2xlYXIoKTsKICAgICB9CiAgICAgbV9sYXllclRyZWVI
b3N0ID0gMDsKQEAgLTI3NSw2ICsyNzMsMTUgQEAgdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpw
b3N0QW5pbWF0aW9uRXZlbnRzVG9NYWluVGhyZWFkT25JbXBsVGhyZWFkKFBhc3NPd25QdHIKICAg
ICBtX2xheWVyVHJlZUhvc3QtPnNldEFuaW1hdGlvbkV2ZW50cyhldmVudHMsIHdhbGxDbG9ja1Rp
bWUpOwogfQogCit2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OnJlZHVjZUNvbnRlbnRzVGV4dHVy
ZXNNZW1vcnlPbkltcGxUaHJlYWQoKQoreworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJl
YWQoKSk7CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdC0+cmVkdWNlQ29udGVudHNUZXh0dXJlc01l
bW9yeU9uSW1wbFRocmVhZChtX2xheWVyVHJlZUhvc3RJbXBsLT5yZXNvdXJjZVByb3ZpZGVyKCkp
KSB7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPnNldENvbnRlbnRzVGV4dHVyZXNQdXJn
ZWQoKTsKKyAgICAgICAgc2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsKKyAgICB9Cit9CisK
IC8vIENhbGxlZCBieSB0aGUgbGVnYWN5IHNjaGVkdWxpbmcgcGF0aCAoZS5nLiB3aGVyZSByZW5k
ZXJfd2lkZ2V0IGRvZXMgdGhlIHNjaGVkdWxpbmcpCiB2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6
OmNvbXBvc2l0ZUltbWVkaWF0ZWx5KCkKIHsKQEAgLTMwMSw4ICszMDgsNyBAQCBib29sIENDU2lu
Z2xlVGhyZWFkUHJveHk6OmNvbW1pdEFuZENvbXBvc2l0ZSgpCiAgICAgaWYgKCFtX2xheWVyVHJl
ZUhvc3QtPmluaXRpYWxpemVSZW5kZXJlcklmTmVlZGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGlmIChtX2xheWVyVHJlZUhvc3RJbXBsLT5jb250ZW50c1RleHR1cmVzUHVyZ2Vk
KCkpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZXZpY3RBbGxDb250ZW50VGV4dHVyZXMoKTsK
KyAgICBtX2xheWVyVHJlZUhvc3QtPmRlc3Ryb3lDb250ZW50c1RleHR1cmVzRXZpY3RlZEJ5SW1w
bFRocmVhZCgpOwogCiAgICAgQ0NUZXh0dXJlVXBkYXRlUXVldWUgcXVldWU7CiAgICAgbV9sYXll
clRyZWVIb3N0LT51cGRhdGVMYXllcnMocXVldWUsIG1fbGF5ZXJUcmVlSG9zdEltcGwtPm1lbW9y
eUFsbG9jYXRpb25MaW1pdEJ5dGVzKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94
eS5oCmluZGV4IGE3M2E2YWExNzAzYzNkNGUzZGNmNzM4MzZlZGI0ZWJhMTg3YTgwOWUuLjlmYjFh
YjhkMzRjOGQ3N2I0MGQ4YzRlMzE3MjBhMWU0NDRiNjVkNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHku
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Np
bmdsZVRocmVhZFByb3h5LmgKQEAgLTcyLDYgKzcyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBzZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpIE9WRVJSSURFIHsgbV9sYXllclRyZWVI
b3N0LT5zY2hlZHVsZUNvbXBvc2l0ZSgpOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29t
bWl0T25JbXBsVGhyZWFkKCkgT1ZFUlJJREUgeyBtX2xheWVyVHJlZUhvc3QtPnNjaGVkdWxlQ29t
cG9zaXRlKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgcG9zdEFuaW1hdGlvbkV2ZW50c1RvTWFpblRo
cmVhZE9uSW1wbFRocmVhZChQYXNzT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiwgZG91
YmxlIHdhbGxDbG9ja1RpbWUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZWR1Y2VDb250
ZW50c1RleHR1cmVzTWVtb3J5T25JbXBsVGhyZWFkKCkgT1ZFUlJJREU7CiAKICAgICAvLyBDYWxs
ZWQgYnkgdGhlIGxlZ2FjeSBwYXRoIHdoZXJlIFJlbmRlcldpZGdldCBkb2VzIHRoZSBzY2hlZHVs
aW5nLgogICAgIHZvaWQgY29tcG9zaXRlSW1tZWRpYXRlbHkoKTsKQEAgLTEwMiw3ICsxMDMsNyBA
QCBwcml2YXRlOgogfTsKIAogLy8gRm9yIHVzZSBpbiB0aGUgc2luZ2xlLXRocmVhZGVkIGNhc2Uu
IEluIGRlYnVnIGJ1aWxkcywgaXQgcHJldGVuZHMgdGhhdCB0aGUKLS8vIGNvZGUgaXMgcnVubmlu
ZyBvbiB0aGUgdGhyZWFkIHRvIHNhdGlzZnkgYXNzZXJ0aW9uIGNoZWNrcy4KKy8vIGNvZGUgaXMg
cnVubmluZyBvbiB0aGUgaW1wbCB0aHJlYWQgdG8gc2F0aXNmeSBhc3NlcnRpb24gY2hlY2tzLgog
Y2xhc3MgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIHsKIHB1YmxpYzoKICAgICBEZWJ1Z1Njb3Bl
ZFNldEltcGxUaHJlYWQoKQpAQCAtMTM3LDYgKzEzOCwxNSBAQCBwdWJsaWM6CiAgICAgfQogfTsK
IAorLy8gRm9yIHVzZSBpbiB0aGUgc2luZ2xlLXRocmVhZGVkIGNhc2UuIEluIGRlYnVnIGJ1aWxk
cywgaXQgcHJldGVuZHMgdGhhdCB0aGUKKy8vIGNvZGUgaXMgcnVubmluZyBvbiB0aGUgaW1wbCB0
aHJlYWQgYW5kIHRoYXQgdGhlIG1haW4gdGhyZWFkIGlzIGJsb2NrZWQgdG8KKy8vIHNhdGlzZnkg
YXNzZXJ0aW9uIGNoZWNrcworY2xhc3MgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkQW5kTWFpblRo
cmVhZEJsb2NrZWQgeworcHJpdmF0ZToKKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgbV9p
bXBsVGhyZWFkOworICAgIERlYnVnU2NvcGVkU2V0TWFpblRocmVhZEJsb2NrZWQgbV9tYWluVGhy
ZWFkQmxvY2tlZDsKK307CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Rl
eHR1cmVVcGRhdGVDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXIuY3BwCmluZGV4IDZmYzc3
MWU5NTkwNWVlM2M4N2U2MWIwMWY2ODY2M2IyZjkwNjAxYzcuLjM5MzliMWIzODg4Y2ZiZDRhODlj
YWY3NDUzYzcxMDhjMmQyNGQ4NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVw
ZGF0ZUNvbnRyb2xsZXIuY3BwCkBAIC0xNTAsNiArMTUwLDExIEBAIHZvaWQgQ0NUZXh0dXJlVXBk
YXRlQ29udHJvbGxlcjo6dXBkYXRlTW9yZVRleHR1cmVzKGRvdWJsZSBtb25vdG9uaWNUaW1lTGlt
aXQpCiAgICAgICAgIHVwZGF0ZU1vcmVUZXh0dXJlc05vdygpOwogfQogCit2b2lkIENDVGV4dHVy
ZVVwZGF0ZUNvbnRyb2xsZXI6OmRpc2NhcmRVcGxvYWRzVG9EZWxldGVkUmVzb3VyY2VzKCkKK3sK
KyAgICBtX3F1ZXVlLT5jbGVhclVwbG9hZHNUb0RlbGV0ZWRSZXNvdXJjZXMoKTsKK30KKwogdm9p
ZCBDQ1RleHR1cmVVcGRhdGVDb250cm9sbGVyOjpvblRpbWVyRmlyZWQoKQogewogICAgIGlmICgh
bV9xdWV1ZS0+aGFzTW9yZVVwZGF0ZXMoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVw
ZGF0ZUNvbnRyb2xsZXIuaAppbmRleCBkZDc1OGJlYjRkOWZjZDg2NmUxOGM4NDdjY2QwYWYyODli
YTk1YmQxLi5jYTMyM2M5YmJkZmRlMDNmZGJjMzJiMDU5ZDY3YTBkM2M1YzEwY2E4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1
cmVVcGRhdGVDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlQ29udHJvbGxlci5oCkBAIC01MSw2ICs1MSw5
IEBAIHB1YmxpYzoKICAgICBib29sIGhhc01vcmVVcGRhdGVzKCkgY29uc3Q7CiAgICAgdm9pZCB1
cGRhdGVNb3JlVGV4dHVyZXMoZG91YmxlIG1vbm90b25pY1RpbWVMaW1pdCk7CiAKKyAgICAvLyBE
aXNjYXJkIHVwbG9hZHMgdG8gdGV4dHVyZXMgdGhhdCB3ZXJlIGV2aWN0ZWQgb24gdGhlIGltcGwg
dGhyZWFkCisgICAgdm9pZCBkaXNjYXJkVXBsb2Fkc1RvRGVsZXRlZFJlc291cmNlcygpOworCiAg
ICAgLy8gQ0NUaW1lckNsaWVudCBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFsIHZvaWQgb25U
aW1lckZpcmVkKCkgT1ZFUlJJREU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZVF1ZXVlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZVF1
ZXVlLmNwcAppbmRleCA4ZjU4ZmNiY2I0Y2JhMjRmMzRhNWFhZDQ3ZWQ3Yzk0NjA3NDNjMWE4Li43
MTlmY2QzMTQ0NTdmNzQ2MzdiYTU4NDUwYThjYjNkNDcwYmFkOWQ5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVR
dWV1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUZXh0dXJlVXBkYXRlUXVldWUuY3BwCkBAIC01NCwxMCArNTQsMjEgQEAgdm9pZCBDQ1Rl
eHR1cmVVcGRhdGVRdWV1ZTo6YXBwZW5kQ29weShUZXh0dXJlQ29waWVyOjpQYXJhbWV0ZXJzIGNv
cHkpCiAgICAgbV9jb3B5RW50cmllcy5hcHBlbmQoY29weSk7CiB9CiAKLXZvaWQgQ0NUZXh0dXJl
VXBkYXRlUXVldWU6OmNsZWFyVXBsb2FkcygpCit2b2lkIENDVGV4dHVyZVVwZGF0ZVF1ZXVlOjpj
bGVhclVwbG9hZHNUb0RlbGV0ZWRSZXNvdXJjZXMoKQogewotICAgIG1fZnVsbEVudHJpZXMuY2xl
YXIoKTsKLSAgICBtX3BhcnRpYWxFbnRyaWVzLmNsZWFyKCk7CisgICAgY2xlYXJVcGxvYWRzVG9E
ZWxldGVkUmVzb3VyY2VzKG1fZnVsbEVudHJpZXMpOworICAgIGNsZWFyVXBsb2Fkc1RvRGVsZXRl
ZFJlc291cmNlcyhtX3BhcnRpYWxFbnRyaWVzKTsKK30KKwordm9pZCBDQ1RleHR1cmVVcGRhdGVR
dWV1ZTo6Y2xlYXJVcGxvYWRzVG9EZWxldGVkUmVzb3VyY2VzKERlcXVlPFRleHR1cmVVcGxvYWRl
cjo6UGFyYW1ldGVycz4mIGVudHJ5UXVldWUpCit7CisgICAgRGVxdWU8VGV4dHVyZVVwbG9hZGVy
OjpQYXJhbWV0ZXJzPiB0ZW1wOworICAgIGVudHJ5UXVldWUuc3dhcCh0ZW1wKTsKKyAgICB3aGls
ZSAodGVtcC5zaXplKCkpIHsKKyAgICAgICAgVGV4dHVyZVVwbG9hZGVyOjpQYXJhbWV0ZXJzIHVw
bG9hZCA9IHRlbXAudGFrZUZpcnN0KCk7CisgICAgICAgIGlmICghdXBsb2FkLnRleHR1cmUtPmJh
Y2tpbmdXYXNBc3luY2hyb25vdXNseURlbGV0ZWQoKSkKKyAgICAgICAgICAgIGVudHJ5UXVldWUu
YXBwZW5kKHVwbG9hZCk7CisgICAgfQogfQogCiBUZXh0dXJlVXBsb2FkZXI6OlBhcmFtZXRlcnMg
Q0NUZXh0dXJlVXBkYXRlUXVldWU6OnRha2VGaXJzdEZ1bGxVcGxvYWQoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBk
YXRlUXVldWUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGV4dHVyZVVwZGF0ZVF1ZXVlLmgKaW5kZXggZGU2MzczODIxZjA4YTg0NTRhZTY0ODViNmFm
Mzc0ODNjNzgwNWVlNi4uYzhkY2IxNmUwMjNiYmExNzZiNTA4ZTFjZDk0YjY4ZjYyN2Q5NzBlMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUZXh0dXJlVXBkYXRlUXVldWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVRdWV1ZS5oCkBAIC00Myw3ICs0Myw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIGFwcGVuZFBhcnRpYWxVcGxvYWQoVGV4dHVyZVVwbG9hZGVyOjpQ
YXJhbWV0ZXJzKTsKICAgICB2b2lkIGFwcGVuZENvcHkoVGV4dHVyZUNvcGllcjo6UGFyYW1ldGVy
cyk7CiAKLSAgICB2b2lkIGNsZWFyVXBsb2FkcygpOworICAgIHZvaWQgY2xlYXJVcGxvYWRzVG9E
ZWxldGVkUmVzb3VyY2VzKCk7CiAKICAgICBUZXh0dXJlVXBsb2FkZXI6OlBhcmFtZXRlcnMgdGFr
ZUZpcnN0RnVsbFVwbG9hZCgpOwogICAgIFRleHR1cmVVcGxvYWRlcjo6UGFyYW1ldGVycyB0YWtl
Rmlyc3RQYXJ0aWFsVXBsb2FkKCk7CkBAIC01Niw2ICs1Niw3IEBAIHB1YmxpYzoKICAgICBib29s
IGhhc01vcmVVcGRhdGVzKCkgY29uc3Q7CiAKIHByaXZhdGU6CisgICAgdm9pZCBjbGVhclVwbG9h
ZHNUb0RlbGV0ZWRSZXNvdXJjZXMoRGVxdWU8VGV4dHVyZVVwbG9hZGVyOjpQYXJhbWV0ZXJzPiYg
ZW50cnlRdWV1ZSk7CiAgICAgRGVxdWU8VGV4dHVyZVVwbG9hZGVyOjpQYXJhbWV0ZXJzPiBtX2Z1
bGxFbnRyaWVzOwogICAgIERlcXVlPFRleHR1cmVVcGxvYWRlcjo6UGFyYW1ldGVycz4gbV9wYXJ0
aWFsRW50cmllczsKICAgICBEZXF1ZTxUZXh0dXJlQ29waWVyOjpQYXJhbWV0ZXJzPiBtX2NvcHlF
bnRyaWVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcAppbmRleCBmM2U5ZTBkOGEwNjkxM2E4
YWEyYzJhN2FkNzA2YjhjOTQ1OWZmZTRkLi4xZGNhNzgwNzdlNmM2NjMzMDZmODU5MjQ0MjFlZDFj
NWFkYzg4YjUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcApAQCAtODEsNyArODEsOCBA
QCBDQ1RocmVhZFByb3h5OjpDQ1RocmVhZFByb3h5KENDTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVl
SG9zdCkKICAgICAsIG1fcmVhZGJhY2tSZXF1ZXN0T25JbXBsVGhyZWFkKDApCiAgICAgLCBtX2Nv
bW1pdENvbXBsZXRpb25FdmVudE9uSW1wbFRocmVhZCgwKQogICAgICwgbV90ZXh0dXJlQWNxdWlz
aXRpb25Db21wbGV0aW9uRXZlbnRPbkltcGxUaHJlYWQoMCkKLSAgICAsIG1fcmVzZXRDb250ZW50
c1RleHR1cmVzUHVyZ2VkQWZ0ZXJDb21taXRPbkltcGxUaHJlYWQoZmFsc2UpCisgICAgLCBtX2Nv
bnRlbnRzVGV4dHVyZXNQdXJnZUNvdW50KDApCisgICAgLCBtX2NvbnRlbnRzVGV4dHVyZXNQdXJn
ZUFjaygwKQogICAgICwgbV9uZXh0RnJhbWVJc05ld2x5Q29tbWl0dGVkRnJhbWVPbkltcGxUaHJl
YWQoZmFsc2UpCiAgICAgLCBtX3JlbmRlclZTeW5jRW5hYmxlZChsYXllclRyZWVIb3N0LT5zZXR0
aW5ncygpLnJlbmRlclZTeW5jRW5hYmxlZCkKIHsKQEAgLTEwOSw5ICsxMTAsMTIgQEAgYm9vbCBD
Q1RocmVhZFByb3h5Ojpjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMsIGNvbnN0IElu
dFJlY3QmIHJlY3QpCiAKIAogICAgIC8vIFBlcmZvcm0gYSBzeW5jaHJvbm91cyBjb21taXQuCi0g
ICAgQ0NDb21wbGV0aW9uRXZlbnQgYmVnaW5GcmFtZUNvbXBsZXRpb247Ci0gICAgQ0NQcm94eTo6
aW1wbFRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFk
UHJveHk6OmZvcmNlQmVnaW5GcmFtZU9uSW1wbFRocmVhZCwgJmJlZ2luRnJhbWVDb21wbGV0aW9u
KSk7Ci0gICAgYmVnaW5GcmFtZUNvbXBsZXRpb24ud2FpdCgpOworICAgIHsKKyAgICAgICAgRGVi
dWdTY29wZWRTZXRNYWluVGhyZWFkQmxvY2tlZCBtYWluVGhyZWFkQmxvY2tlZDsKKyAgICAgICAg
Q0NDb21wbGV0aW9uRXZlbnQgYmVnaW5GcmFtZUNvbXBsZXRpb247CisgICAgICAgIENDUHJveHk6
OmltcGxUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVh
ZFByb3h5Ojpmb3JjZUJlZ2luRnJhbWVPbkltcGxUaHJlYWQsICZiZWdpbkZyYW1lQ29tcGxldGlv
bikpOworICAgICAgICBiZWdpbkZyYW1lQ29tcGxldGlvbi53YWl0KCk7CisgICAgfQogICAgIG1f
aW5Db21wb3NpdGVBbmRSZWFkYmFjayA9IHRydWU7CiAgICAgYmVnaW5GcmFtZSgpOwogICAgIG1f
aW5Db21wb3NpdGVBbmRSZWFkYmFjayA9IGZhbHNlOwpAQCAtMTIwLDggKzEyNCwxMSBAQCBib29s
IENDVGhyZWFkUHJveHk6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVscywgY29uc3Qg
SW50UmVjdCYgcmVjdCkKICAgICBSZWFkYmFja1JlcXVlc3QgcmVxdWVzdDsKICAgICByZXF1ZXN0
LnJlY3QgPSByZWN0OwogICAgIHJlcXVlc3QucGl4ZWxzID0gcGl4ZWxzOwotICAgIENDUHJveHk6
OmltcGxUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVh
ZFByb3h5OjpyZXF1ZXN0UmVhZGJhY2tPbkltcGxUaHJlYWQsICZyZXF1ZXN0KSk7Ci0gICAgcmVx
dWVzdC5jb21wbGV0aW9uLndhaXQoKTsKKyAgICB7CisgICAgICAgIERlYnVnU2NvcGVkU2V0TWFp
blRocmVhZEJsb2NrZWQgbWFpblRocmVhZEJsb2NrZWQ7CisgICAgICAgIENDUHJveHk6OmltcGxU
aHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5
OjpyZXF1ZXN0UmVhZGJhY2tPbkltcGxUaHJlYWQsICZyZXF1ZXN0KSk7CisgICAgICAgIHJlcXVl
c3QuY29tcGxldGlvbi53YWl0KCk7CisgICAgfQogICAgIHJldHVybiByZXF1ZXN0LnN1Y2Nlc3M7
CiB9CiAKQEAgLTE1OCw2ICsxNjUsNyBAQCB2b2lkIENDVGhyZWFkUHJveHk6OmZpbmlzaEFsbFJl
bmRlcmluZygpCiAgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKIAogICAgIC8v
IE1ha2Ugc3VyZSBhbGwgR0wgZHJhd2luZyBpcyBmaW5pc2hlZCBvbiB0aGUgaW1wbCB0aHJlYWQu
CisgICAgRGVidWdTY29wZWRTZXRNYWluVGhyZWFkQmxvY2tlZCBtYWluVGhyZWFkQmxvY2tlZDsK
ICAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOwogICAgIENDUHJveHk6OmltcGxUaHJl
YWQoKS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5Ojpm
aW5pc2hBbGxSZW5kZXJpbmdPbkltcGxUaHJlYWQsICZjb21wbGV0aW9uKSk7CiAgICAgY29tcGxl
dGlvbi53YWl0KCk7CkBAIC0xOTYsNiArMjA0LDcgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpzZXRT
dXJmYWNlUmVhZHlPbkltcGxUaHJlYWQoKQogdm9pZCBDQ1RocmVhZFByb3h5OjpzZXRWaXNpYmxl
KGJvb2wgdmlzaWJsZSkKIHsKICAgICBUUkFDRV9FVkVOVDAoImNjIiwgIkNDVGhyZWFkUHJveHk6
OnNldFZpc2libGUiKTsKKyAgICBEZWJ1Z1Njb3BlZFNldE1haW5UaHJlYWRCbG9ja2VkIG1haW5U
aHJlYWRCbG9ja2VkOwogICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CiAgICAgQ0NQ
cm94eTo6aW1wbFRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkND
VGhyZWFkUHJveHk6OnNldFZpc2libGVPbkltcGxUaHJlYWQsICZjb21wbGV0aW9uLCB2aXNpYmxl
KSk7CiAgICAgY29tcGxldGlvbi53YWl0KCk7CkBAIC0yMTQsMTQgKzIyMywxNyBAQCBib29sIEND
VGhyZWFkUHJveHk6OmluaXRpYWxpemVSZW5kZXJlcigpCiAgICAgVFJBQ0VfRVZFTlQwKCJjYyIs
ICJDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplUmVuZGVyZXIiKTsKICAgICAvLyBNYWtlIGEgYmxv
Y2tpbmcgY2FsbCB0byBpbml0aWFsaXplUmVuZGVyZXJPbkltcGxUaHJlYWQuIFRoZSByZXN1bHRz
IG9mIHRoYXQgY2FsbAogICAgIC8vIGFyZSBwdXNoZWQgaW50byB0aGUgaW5pdGlhbGl6ZVN1Y2Nl
ZWRlZCBhbmQgY2FwYWJpbGl0aWVzIGxvY2FsIHZhcmlhYmxlcy4KLSAgICBDQ0NvbXBsZXRpb25F
dmVudCBjb21wbGV0aW9uOwogICAgIGJvb2wgaW5pdGlhbGl6ZVN1Y2NlZWRlZCA9IGZhbHNlOwog
ICAgIFJlbmRlcmVyQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllczsKLSAgICBDQ1Byb3h5OjppbXBs
VGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94
eTo6aW5pdGlhbGl6ZVJlbmRlcmVyT25JbXBsVGhyZWFkLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb21wbGV0aW9uLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbml0aWFsaXpl
U3VjY2VlZGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZjYXBhYmlsaXRpZXMpKTsKLSAgICBjb21wbGV0aW9uLndhaXQoKTsKKyAgICB7
CisgICAgICAgIERlYnVnU2NvcGVkU2V0TWFpblRocmVhZEJsb2NrZWQgbWFpblRocmVhZEJsb2Nr
ZWQ7CisgICAgICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CisgICAgICAgIENDUHJv
eHk6OmltcGxUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1Ro
cmVhZFByb3h5Ojppbml0aWFsaXplUmVuZGVyZXJPbkltcGxUaHJlYWQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb21wbGV0aW9u
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmaW5pdGlhbGl6ZVN1Y2NlZWRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhcGFiaWxpdGllcykpOworICAgICAgICBj
b21wbGV0aW9uLndhaXQoKTsKKyAgICB9CiAKICAgICBpZiAoaW5pdGlhbGl6ZVN1Y2NlZWRlZCkg
ewogICAgICAgICBtX3JlbmRlcmVySW5pdGlhbGl6ZWQgPSB0cnVlOwpAQCAtMjQ2LDE1ICsyNTgs
MTggQEAgYm9vbCBDQ1RocmVhZFByb3h5OjpyZWNyZWF0ZUNvbnRleHQoKQogICAgIC8vIE1ha2Ug
YSBibG9ja2luZyBjYWxsIHRvIHJlY3JlYXRlQ29udGV4dE9uSW1wbFRocmVhZC4gVGhlIHJlc3Vs
dHMgb2YgdGhhdAogICAgIC8vIGNhbGwgYXJlIHB1c2hlZCBpbnRvIHRoZSByZWNyZWF0ZVN1Y2Nl
ZWRlZCBhbmQgY2FwYWJpbGl0aWVzIGxvY2FsCiAgICAgLy8gdmFyaWFibGVzLgotICAgIENDQ29t
cGxldGlvbkV2ZW50IGNvbXBsZXRpb247CiAgICAgYm9vbCByZWNyZWF0ZVN1Y2NlZWRlZCA9IGZh
bHNlOwogICAgIFJlbmRlcmVyQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllczsKLSAgICBDQ1Byb3h5
OjppbXBsVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJl
YWRQcm94eTo6cmVjcmVhdGVDb250ZXh0T25JbXBsVGhyZWFkLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb21wbGV0aW9uLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQu
bGVha1B0cigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZyZWNyZWF0ZVN1Y2NlZWRlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2FwYWJpbGl0aWVzKSk7Ci0gICAgY29tcGxl
dGlvbi53YWl0KCk7CisgICAgeworICAgICAgICBEZWJ1Z1Njb3BlZFNldE1haW5UaHJlYWRCbG9j
a2VkIG1haW5UaHJlYWRCbG9ja2VkOworICAgICAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0
aW9uOworICAgICAgICBDQ1Byb3h5OjppbXBsVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUNDVGhy
ZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6cmVjcmVhdGVDb250ZXh0T25JbXBsVGhyZWFk
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmY29tcGxldGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5sZWFrUHRyKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZWNyZWF0ZVN1Y2Nl
ZWRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJmNhcGFiaWxpdGllcykpOworICAgICAgICBjb21wbGV0aW9uLndhaXQoKTsKKyAg
ICB9CiAKICAgICBpZiAocmVjcmVhdGVTdWNjZWVkZWQpCiAgICAgICAgIG1fUmVuZGVyZXJDYXBh
YmlsaXRpZXNNYWluVGhyZWFkQ29weSA9IGNhcGFiaWxpdGllczsKQEAgLTI3MSw2ICsyODYsNyBA
QCB2b2lkIENDVGhyZWFkUHJveHk6OmltcGxTaWRlUmVuZGVyaW5nU3RhdHMoQ0NSZW5kZXJpbmdT
dGF0cyYgc3RhdHMpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAorICAgIERlYnVn
U2NvcGVkU2V0TWFpblRocmVhZEJsb2NrZWQgbWFpblRocmVhZEJsb2NrZWQ7CiAgICAgQ0NDb21w
bGV0aW9uRXZlbnQgY29tcGxldGlvbjsKICAgICBDQ1Byb3h5OjppbXBsVGhyZWFkKCktPnBvc3RU
YXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6aW1wbFNpZGVSZW5k
ZXJpbmdTdGF0c09uSW1wbFRocmVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmY29tcGxldGlvbiwKQEAgLTM0MSw2ICszNTcsMjAgQEAg
dm9pZCBDQ1RocmVhZFByb3h5OjpvblZTeW5jUGFyYW1ldGVyc0NoYW5nZWQoZG91YmxlIG1vbm90
b25pY1RpbWViYXNlLCBkb3VibGUgaW4KICAgICBtX3NjaGVkdWxlck9uSW1wbFRocmVhZC0+c2V0
VGltZWJhc2VBbmRJbnRlcnZhbChtb25vdG9uaWNUaW1lYmFzZSwgaW50ZXJ2YWxJblNlY29uZHMp
OwogfQogCit2b2lkIENDVGhyZWFkUHJveHk6OnJlZHVjZUNvbnRlbnRzVGV4dHVyZXNNZW1vcnlP
bkltcGxUaHJlYWQoKQoreworICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7CisgICAgVFJBQ0Vf
RVZFTlQwKCJjYyIsICJDQ1RocmVhZFByb3h5OjpyZWR1Y2VDb250ZW50c1RleHR1cmVzTWVtb3J5
T25JbXBsVGhyZWFkIik7CisKKyAgICBpZiAobV9sYXllclRyZWVIb3N0LT5yZWR1Y2VDb250ZW50
c1RleHR1cmVzTWVtb3J5T25JbXBsVGhyZWFkKG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJlc291cmNl
UHJvdmlkZXIoKSkpIHsKKyAgICAgIGlmIChtX2N1cnJlbnRUZXh0dXJlVXBkYXRlQ29udHJvbGxl
ck9uSW1wbFRocmVhZCkKKyAgICAgICAgICBtX2N1cnJlbnRUZXh0dXJlVXBkYXRlQ29udHJvbGxl
ck9uSW1wbFRocmVhZC0+ZGlzY2FyZFVwbG9hZHNUb0RlbGV0ZWRSZXNvdXJjZXMoKTsKKyAgICAg
ICAgbV9jb250ZW50c1RleHR1cmVzUHVyZ2VDb3VudCArPSAxOworICAgICAgICBtX2xheWVyVHJl
ZUhvc3RJbXBsLT5zZXRDb250ZW50c1RleHR1cmVzUHVyZ2VkKCk7CisgICAgICAgIHNldE5lZWRz
Q29tbWl0T25JbXBsVGhyZWFkKCk7CisgICAgfQorfQorCiB2b2lkIENDVGhyZWFkUHJveHk6OnNl
dE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCkKIHsKICAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkp
OwpAQCAtMzg5LDYgKzQxOSw3IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6c3RhcnQoKQogICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKENDUHJveHk6OmltcGxUaHJlYWQoKSk7
CiAgICAgLy8gQ3JlYXRlIExheWVyVHJlZUhvc3RJbXBsLgorICAgIERlYnVnU2NvcGVkU2V0TWFp
blRocmVhZEJsb2NrZWQgbWFpblRocmVhZEJsb2NrZWQ7CiAgICAgQ0NDb21wbGV0aW9uRXZlbnQg
Y29tcGxldGlvbjsKICAgICBDQ1Byb3h5OjppbXBsVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUND
VGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUltcGxPbkltcGxUaHJl
YWQsICZjb21wbGV0aW9uKSk7CiAgICAgY29tcGxldGlvbi53YWl0KCk7CkBAIC00MDUsNyArNDM2
LDYgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpzdG9wKCkKICAgICAvLyBTeW5jaHJvbm91c2x5IGRl
bGV0ZXMgdGhlIGltcGwuCiAgICAgewogICAgICAgICBEZWJ1Z1Njb3BlZFNldE1haW5UaHJlYWRC
bG9ja2VkIG1haW5UaHJlYWRCbG9ja2VkOwotCiAgICAgICAgIENDQ29tcGxldGlvbkV2ZW50IGNv
bXBsZXRpb247CiAgICAgICAgIENDUHJveHk6OmltcGxUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRl
Q0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25J
bXBsVGhyZWFkLCAmY29tcGxldGlvbikpOwogICAgICAgICBjb21wbGV0aW9uLndhaXQoKTsKQEAg
LTQyMCw2ICs0NTAsNyBAQCB2b2lkIENDVGhyZWFkUHJveHk6OnN0b3AoKQogCiB2b2lkIENDVGhy
ZWFkUHJveHk6OmZvcmNlU2VyaWFsaXplT25Td2FwQnVmZmVycygpCiB7CisgICAgRGVidWdTY29w
ZWRTZXRNYWluVGhyZWFkQmxvY2tlZCBtYWluVGhyZWFkQmxvY2tlZDsKICAgICBDQ0NvbXBsZXRp
b25FdmVudCBjb21wbGV0aW9uOwogICAgIENDUHJveHk6OmltcGxUaHJlYWQoKS0+cG9zdFRhc2so
Y3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5Ojpmb3JjZVNlcmlhbGl6ZU9u
U3dhcEJ1ZmZlcnNPbkltcGxUaHJlYWQsICZjb21wbGV0aW9uKSk7CiAgICAgY29tcGxldGlvbi53
YWl0KCk7CkBAIC00NjIsNyArNDkzLDcgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpzY2hlZHVsZWRB
Y3Rpb25CZWdpbkZyYW1lKCkKICAgICBtX3BlbmRpbmdCZWdpbkZyYW1lUmVxdWVzdCA9IGFkb3B0
UHRyKG5ldyBCZWdpbkZyYW1lQW5kQ29tbWl0U3RhdGUoKSk7CiAgICAgbV9wZW5kaW5nQmVnaW5G
cmFtZVJlcXVlc3QtPm1vbm90b25pY0ZyYW1lQmVnaW5UaW1lID0gbW9ub3RvbmljYWxseUluY3Jl
YXNpbmdUaW1lKCk7CiAgICAgbV9wZW5kaW5nQmVnaW5GcmFtZVJlcXVlc3QtPnNjcm9sbEluZm8g
PSBtX2xheWVyVHJlZUhvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7Ci0gICAgbV9wZW5k
aW5nQmVnaW5GcmFtZVJlcXVlc3QtPmNvbnRlbnRzVGV4dHVyZXNXZXJlRGVsZXRlZCA9IG1fbGF5
ZXJUcmVlSG9zdEltcGwtPmNvbnRlbnRzVGV4dHVyZXNQdXJnZWQoKTsKKyAgICBtX3BlbmRpbmdC
ZWdpbkZyYW1lUmVxdWVzdC0+Y29udGVudHNUZXh0dXJlc1B1cmdlQWNrID0gbV9jb250ZW50c1Rl
eHR1cmVzUHVyZ2VDb3VudDsKICAgICBtX3BlbmRpbmdCZWdpbkZyYW1lUmVxdWVzdC0+bWVtb3J5
QWxsb2NhdGlvbkxpbWl0Qnl0ZXMgPSBtX2xheWVyVHJlZUhvc3RJbXBsLT5tZW1vcnlBbGxvY2F0
aW9uTGltaXRCeXRlcygpOwogCiAgICAgbV9tYWluVGhyZWFkUHJveHktPnBvc3RUYXNrKGNyZWF0
ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZSkpOwpAQCAtNTMy
LDggKzU2Myw3IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZSgpCiAgICAgaWYgKCFt
X2xheWVyVHJlZUhvc3QtPmluaXRpYWxpemVSZW5kZXJlcklmTmVlZGVkKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmIChyZXF1ZXN0LT5jb250ZW50c1RleHR1cmVzV2VyZURlbGV0ZWQpCi0g
ICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZXZpY3RBbGxDb250ZW50VGV4dHVyZXMoKTsKKyAgICBt
X2xheWVyVHJlZUhvc3QtPmRlc3Ryb3lDb250ZW50c1RleHR1cmVzRXZpY3RlZEJ5SW1wbFRocmVh
ZCgpOwogCiAgICAgT3duUHRyPENDVGV4dHVyZVVwZGF0ZVF1ZXVlPiBxdWV1ZSA9IGFkb3B0UHRy
KG5ldyBDQ1RleHR1cmVVcGRhdGVRdWV1ZSk7CiAgICAgbV9sYXllclRyZWVIb3N0LT51cGRhdGVM
YXllcnMoKihxdWV1ZS5nZXQoKSksIHJlcXVlc3QtPm1lbW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVz
KTsKQEAgLTU2MSw5ICs1OTEsOCBAQCB2b2lkIENDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWUoKQog
ICAgIHsKICAgICAgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJjb21taXQiKTsKICAgICAgICAgRGVi
dWdTY29wZWRTZXRNYWluVGhyZWFkQmxvY2tlZCBtYWluVGhyZWFkQmxvY2tlZDsKLQogICAgICAg
ICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOwotICAgICAgICBDQ1Byb3h5OjppbXBsVGhy
ZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6
YmVnaW5GcmFtZUNvbXBsZXRlT25JbXBsVGhyZWFkLCAmY29tcGxldGlvbiwgcXVldWUucmVsZWFz
ZSgpLCByZXF1ZXN0LT5jb250ZW50c1RleHR1cmVzV2VyZURlbGV0ZWQpKTsKKyAgICAgICAgQ0NQ
cm94eTo6aW1wbFRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkND
VGhyZWFkUHJveHk6OmJlZ2luRnJhbWVDb21wbGV0ZU9uSW1wbFRocmVhZCwgJmNvbXBsZXRpb24s
IHF1ZXVlLnJlbGVhc2UoKSwgcmVxdWVzdC0+Y29udGVudHNUZXh0dXJlc1B1cmdlQWNrKSk7CiAg
ICAgICAgIGNvbXBsZXRpb24ud2FpdCgpOwogICAgIH0KIApAQCAtNTcxLDcgKzYwMCw3IEBAIHZv
aWQgQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZSgpCiAgICAgbV9sYXllclRyZWVIb3N0LT5kaWRC
ZWdpbkZyYW1lKCk7CiB9CiAKLXZvaWQgQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUNvbXBsZXRl
T25JbXBsVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uLCBQYXNzT3duUHRyPEND
VGV4dHVyZVVwZGF0ZVF1ZXVlPiBxdWV1ZSwgYm9vbCBjb250ZW50c1RleHR1cmVzV2VyZURlbGV0
ZWQpCit2b2lkIENDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVDb21wbGV0ZU9uSW1wbFRocmVhZChD
Q0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbiwgUGFzc093blB0cjxDQ1RleHR1cmVVcGRhdGVR
dWV1ZT4gcXVldWUsIGludCBjb250ZW50c1RleHR1cmVzUHVyZ2VBY2spCiB7CiAgICAgVFJBQ0Vf
RVZFTlQwKCJjYyIsICJDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQ29tcGxldGVPbkltcGxUaHJl
YWQiKTsKICAgICBBU1NFUlQoIW1fY29tbWl0Q29tcGxldGlvbkV2ZW50T25JbXBsVGhyZWFkKTsK
QEAgLTU4NCwxNSArNjEzLDE3IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUNvbXBs
ZXRlT25JbXBsVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBpZiAoIWNvbnRlbnRzVGV4dHVyZXNXZXJlRGVsZXRlZCAmJiBt
X2xheWVyVHJlZUhvc3RJbXBsLT5jb250ZW50c1RleHR1cmVzUHVyZ2VkKCkpIHsKLSAgICAgICAg
Ly8gV2UgcHVyZ2VkIHRoZSBjb250ZW50IHRleHR1cmVzIG9uIHRoZSBpbXBsIHRocmVhZCBiZXR3
ZWVuIHRoZSB0aW1lIHdlCi0gICAgICAgIC8vIHBvc3RlZCB0aGUgYmVnaW5GcmFtZSB0YXNrIGFu
ZCBub3csIG1lYW5pbmcgd2UgaGF2ZSBhIGJ1bmNoIG9mCi0gICAgICAgIC8vIHVwbG9hZHMgdGhh
dCBhcmUgbm93IGludmFsaWQuIENsZWFyIHRoZSB1cGxvYWRzICh0aGV5IGFsbCBnbyB0bwotICAg
ICAgICAvLyBjb250ZW50IHRleHR1cmVzKSwgYW5kIGtpY2sgYW5vdGhlciBjb21taXQgdG8gZmls
bCB0aGVtIGFnYWluLgotICAgICAgICBxdWV1ZS0+Y2xlYXJVcGxvYWRzKCk7CisgICAgbV9jb250
ZW50c1RleHR1cmVzUHVyZ2VBY2sgPSBjb250ZW50c1RleHR1cmVzUHVyZ2VBY2s7CisgICAgaWYg
KG1fY29udGVudHNUZXh0dXJlc1B1cmdlQWNrICE9IG1fY29udGVudHNUZXh0dXJlc1B1cmdlQ291
bnQpIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ1RocmVhZFByb3h5OjpiZWdpbkZy
YW1lQ29tcGxldGVPbkltcGxUaHJlYWRfcHVyZ2Vfc2luY2VfY29tbWl0Iik7CisgICAgICAgIC8v
IFRoZSB1cGxvYWQgcXVldWUgbWF5IGNvbnRhaW4gcmVmZXJlbmNlcyB0byB0ZXh0dXJlcyB0aGF0
IHdlcmUgYXN5bmNocm9ub3VzbHkKKyAgICAgICAgLy8gZGVsZXRlZC4gUmVtb3ZlIHRoZW0uCisg
ICAgICAgIHF1ZXVlLT5jbGVhclVwbG9hZHNUb0RlbGV0ZWRSZXNvdXJjZXMoKTsKKyAgICAgICAg
Ly8gVGhlcmUgZXhpc3QgdGV4dHVyZXMgcHVyZ2VkIGJ5IHRoZSBpbXBsIHRocmVhZCB0aGF0IHRo
ZSBtYWluIHRocmVhZAorICAgICAgICAvLyBkb2Vzbid0IGtub3cgb2YuIFJlcXVlc3QgYSByZWNv
bW1pdCwgd2hpY2ggd2lsbCBpbmZvcm0gdGhlIG1haW4gdGhyZWFkCisgICAgICAgIC8vIG9mIHRo
ZSBwdXJnZWQgcmVzb3VyY2VzLgogICAgICAgICBzZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgp
OwotICAgIH0gZWxzZQotICAgICAgICBtX3Jlc2V0Q29udGVudHNUZXh0dXJlc1B1cmdlZEFmdGVy
Q29tbWl0T25JbXBsVGhyZWFkID0gdHJ1ZTsKKyAgICB9CiAKICAgICBtX2N1cnJlbnRUZXh0dXJl
VXBkYXRlQ29udHJvbGxlck9uSW1wbFRocmVhZCA9IENDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXI6
OmNyZWF0ZShDQ1Byb3h5OjppbXBsVGhyZWFkKCksIHF1ZXVlLCBtX2xheWVyVHJlZUhvc3RJbXBs
LT5yZXNvdXJjZVByb3ZpZGVyKCksIG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJlbmRlcmVyKCktPnRl
eHR1cmVDb3BpZXIoKSwgbV9sYXllclRyZWVIb3N0SW1wbC0+cmVuZGVyZXIoKS0+dGV4dHVyZVVw
bG9hZGVyKCkpOwogICAgIG1fY29tbWl0Q29tcGxldGlvbkV2ZW50T25JbXBsVGhyZWFkID0gY29t
cGxldGlvbjsKQEAgLTY0Niw4ICs2NzcsOCBAQCB2b2lkIENDVGhyZWFkUHJveHk6OnNjaGVkdWxl
ZEFjdGlvbkNvbW1pdCgpCiAgICAgbV9sYXllclRyZWVIb3N0LT5iZWdpbkNvbW1pdE9uSW1wbFRo
cmVhZChtX2xheWVyVHJlZUhvc3RJbXBsLmdldCgpKTsKICAgICBtX2xheWVyVHJlZUhvc3QtPmZp
bmlzaENvbW1pdE9uSW1wbFRocmVhZChtX2xheWVyVHJlZUhvc3RJbXBsLmdldCgpKTsKIAotICAg
IGlmIChtX3Jlc2V0Q29udGVudHNUZXh0dXJlc1B1cmdlZEFmdGVyQ29tbWl0T25JbXBsVGhyZWFk
KSB7Ci0gICAgICAgIG1fcmVzZXRDb250ZW50c1RleHR1cmVzUHVyZ2VkQWZ0ZXJDb21taXRPbklt
cGxUaHJlYWQgPSBmYWxzZTsKKyAgICBpZiAobV9jb250ZW50c1RleHR1cmVzUHVyZ2VBY2sgPT0g
bV9jb250ZW50c1RleHR1cmVzUHVyZ2VDb3VudCkgeworICAgICAgICAvLyBUaGUgdHJlZSBub3cg
cmVmZXJlbmNlcyBubyBwdXJnZWQgdGV4dHVyZXMuIEFsbG93IGl0IHRvIGRyYXcgYWdhaW4uCiAg
ICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJlc2V0Q29udGVudHNUZXh0dXJlc1B1cmdlZCgp
OwogICAgIH0KIApAQCAtNzQxLDkgKzc3MiwxMiBAQCB2b2lkIENDVGhyZWFkUHJveHk6OmFjcXVp
cmVMYXllclRleHR1cmVzKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgVFJBQ0VfRVZFTlQwKCJj
YyIsICJDQ1RocmVhZFByb3h5OjphY3F1aXJlTGF5ZXJUZXh0dXJlcyIpOwotICAgIENDQ29tcGxl
dGlvbkV2ZW50IGNvbXBsZXRpb247Ci0gICAgQ0NQcm94eTo6aW1wbFRocmVhZCgpLT5wb3N0VGFz
ayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OmFjcXVpcmVMYXllclRl
eHR1cmVzRm9yTWFpblRocmVhZE9uSW1wbFRocmVhZCwgJmNvbXBsZXRpb24pKTsKLSAgICBjb21w
bGV0aW9uLndhaXQoKTsgLy8gQmxvY2sgdW50aWwgaXQgaXMgc2FmZSB0byB3cml0ZSB0byBsYXll
ciB0ZXh0dXJlcyBmcm9tIHRoZSBtYWluIHRocmVhZC4KKyAgICB7CisgICAgICAgIERlYnVnU2Nv
cGVkU2V0TWFpblRocmVhZEJsb2NrZWQgbWFpblRocmVhZEJsb2NrZWQ7CisgICAgICAgIENDQ29t
cGxldGlvbkV2ZW50IGNvbXBsZXRpb247CisgICAgICAgIENDUHJveHk6OmltcGxUaHJlYWQoKS0+
cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5OjphY3F1aXJl
TGF5ZXJUZXh0dXJlc0Zvck1haW5UaHJlYWRPbkltcGxUaHJlYWQsICZjb21wbGV0aW9uKSk7Cisg
ICAgICAgIGNvbXBsZXRpb24ud2FpdCgpOyAvLyBCbG9jayB1bnRpbCBpdCBpcyBzYWZlIHRvIHdy
aXRlIHRvIGxheWVyIHRleHR1cmVzIGZyb20gdGhlIG1haW4gdGhyZWFkLgorICAgIH0KIAogICAg
IG1fdGV4dHVyZXNBY3F1aXJlZCA9IHRydWU7CiB9CkBAIC04ODUsOCArOTE5LDcgQEAgdm9pZCBD
Q1RocmVhZFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25JbXBsVGhyZWFkKENDQ29tcGxldGlv
bkV2ZW50KiBjb21wbGV0aW8KIHsKICAgICBUUkFDRV9FVkVOVDAoImNjIiwgIkNDVGhyZWFkUHJv
eHk6OmxheWVyVHJlZUhvc3RDbG9zZWRPbkltcGxUaHJlYWQiKTsKICAgICBBU1NFUlQoaXNJbXBs
VGhyZWFkKCkpOwotICAgIGlmICghbV9sYXllclRyZWVIb3N0SW1wbC0+Y29udGVudHNUZXh0dXJl
c1B1cmdlZCgpKQotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmRlbGV0ZUNvbnRlbnRzVGV4dHVy
ZXNPbkltcGxUaHJlYWQobV9sYXllclRyZWVIb3N0SW1wbC0+cmVzb3VyY2VQcm92aWRlcigpKTsK
KyAgICBtX2xheWVyVHJlZUhvc3QtPmRlbGV0ZUFsbENvbnRlbnRzVGV4dHVyZXNPbkltcGxUaHJl
YWQobV9sYXllclRyZWVIb3N0SW1wbC0+cmVzb3VyY2VQcm92aWRlcigpKTsKICAgICBtX2lucHV0
SGFuZGxlck9uSW1wbFRocmVhZC5jbGVhcigpOwogICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwuY2xl
YXIoKTsKICAgICBtX3NjaGVkdWxlck9uSW1wbFRocmVhZC5jbGVhcigpOwpAQCAtOTA4LDggKzk0
MSw3IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6cmVjcmVhdGVDb250ZXh0T25JbXBsVGhyZWFkKEND
Q29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uLCBDCiB7CiAgICAgVFJBQ0VfRVZFTlQwKCJjYyIs
ICJDQ1RocmVhZFByb3h5OjpyZWNyZWF0ZUNvbnRleHRPbkltcGxUaHJlYWQiKTsKICAgICBBU1NF
UlQoaXNJbXBsVGhyZWFkKCkpOwotICAgIGlmICghbV9sYXllclRyZWVIb3N0SW1wbC0+Y29udGVu
dHNUZXh0dXJlc1B1cmdlZCgpKQotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmRlbGV0ZUNvbnRl
bnRzVGV4dHVyZXNPbkltcGxUaHJlYWQobV9sYXllclRyZWVIb3N0SW1wbC0+cmVzb3VyY2VQcm92
aWRlcigpKTsKKyAgICBtX2xheWVyVHJlZUhvc3QtPmRlbGV0ZUFsbENvbnRlbnRzVGV4dHVyZXNP
bkltcGxUaHJlYWQobV9sYXllclRyZWVIb3N0SW1wbC0+cmVzb3VyY2VQcm92aWRlcigpKTsKICAg
ICAqcmVjcmVhdGVTdWNjZWVkZWQgPSBtX2xheWVyVHJlZUhvc3RJbXBsLT5pbml0aWFsaXplUmVu
ZGVyZXIoYWRvcHRQdHIoY29udGV4dFB0ciksIHRleHR1cmVVcGxvYWRlcik7CiAgICAgaWYgKCpy
ZWNyZWF0ZVN1Y2NlZWRlZCkgewogICAgICAgICAqY2FwYWJpbGl0aWVzID0gbV9sYXllclRyZWVI
b3N0SW1wbC0+cmVuZGVyZXJDYXBhYmlsaXRpZXMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaApp
bmRleCA3MmFjODI1Y2E2ZGEwZmFiNzUwNjI1YzQ5OGZiYTQwNzA2MWUzZGUxLi5jYmZmNTFmMmIy
NDBmNDczNjQzYjdmMDFkMzIwNWYxM2ZhZDM5MjU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5o
CkBAIC04MSw2ICs4MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNSZWRy
YXdPbkltcGxUaHJlYWQoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNDb21t
aXRPbkltcGxUaHJlYWQoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgcG9zdEFuaW1hdGlv
bkV2ZW50c1RvTWFpblRocmVhZE9uSW1wbFRocmVhZChQYXNzT3duUHRyPENDQW5pbWF0aW9uRXZl
bnRzVmVjdG9yPiwgZG91YmxlIHdhbGxDbG9ja1RpbWUpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCByZWR1Y2VDb250ZW50c1RleHR1cmVzTWVtb3J5T25JbXBsVGhyZWFkKCkgT1ZFUlJJREU7
CiAKICAgICAvLyBDQ1NjaGVkdWxlckNsaWVudCBpbXBsZW1lbnRhdGlvbgogICAgIHZpcnR1YWwg
Ym9vbCBjYW5EcmF3KCkgT1ZFUlJJREU7CkBAIC0xMDAsMTMgKzEwMSwxMyBAQCBwcml2YXRlOgog
ICAgIC8vIFNldCBvbiBpbXBsIHRocmVhZCwgcmVhZCBvbiBtYWluIHRocmVhZC4KICAgICBzdHJ1
Y3QgQmVnaW5GcmFtZUFuZENvbW1pdFN0YXRlIHsKICAgICAgICAgQmVnaW5GcmFtZUFuZENvbW1p
dFN0YXRlKCkKLSAgICAgICAgICAgIDogbW9ub3RvbmljRnJhbWVCZWdpblRpbWUoMCkKKyAgICAg
ICAgICAgIDogbW9ub3RvbmljRnJhbWVCZWdpblRpbWUoMCksIGNvbnRlbnRzVGV4dHVyZXNQdXJn
ZUFjaygwKQogICAgICAgICB7CiAgICAgICAgIH0KIAogICAgICAgICBkb3VibGUgbW9ub3Rvbmlj
RnJhbWVCZWdpblRpbWU7CiAgICAgICAgIE93blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBzY3Jv
bGxJbmZvOwotICAgICAgICBib29sIGNvbnRlbnRzVGV4dHVyZXNXZXJlRGVsZXRlZDsKKyAgICAg
ICAgaW50IGNvbnRlbnRzVGV4dHVyZXNQdXJnZUFjazsKICAgICAgICAgc2l6ZV90IG1lbW9yeUFs
bG9jYXRpb25MaW1pdEJ5dGVzOwogICAgIH07CiAgICAgT3duUHRyPEJlZ2luRnJhbWVBbmRDb21t
aXRTdGF0ZT4gbV9wZW5kaW5nQmVnaW5GcmFtZVJlcXVlc3Q7CkBAIC0xMjcsNyArMTI4LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgSW50UmVjdCByZWN0OwogICAgIH07CiAgICAgdm9pZCBmb3JjZUJl
Z2luRnJhbWVPbkltcGxUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsKLSAgICB2b2lkIGJlZ2lu
RnJhbWVDb21wbGV0ZU9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVudCosIFBhc3NPd25QdHI8
Q0NUZXh0dXJlVXBkYXRlUXVldWU+LCBib29sIGNvbnRlbnRzVGV4dHVyZXNXZXJlRGVsZXRlZCk7
CisgICAgdm9pZCBiZWdpbkZyYW1lQ29tcGxldGVPbkltcGxUaHJlYWQoQ0NDb21wbGV0aW9uRXZl
bnQqLCBQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZVF1ZXVlPiwgaW50IGNvbnRlbnRzVGV4dHVy
ZXNQdXJnZUFjayk7CiAgICAgdm9pZCBiZWdpbkZyYW1lQWJvcnRlZE9uSW1wbFRocmVhZCgpOwog
ICAgIHZvaWQgcmVxdWVzdFJlYWRiYWNrT25JbXBsVGhyZWFkKFJlYWRiYWNrUmVxdWVzdCopOwog
ICAgIHZvaWQgcmVxdWVzdFN0YXJ0UGFnZVNjYWxlQW5pbWF0aW9uT25JbXBsVGhyZWFkKEludFNp
emUgdGFyZ2V0UG9zaXRpb24sIGJvb2wgdXNlQW5jaG9yLCBmbG9hdCBzY2FsZSwgZG91YmxlIGR1
cmF0aW9uU2VjKTsKQEAgLTE4Niw5ICsxODcsMTQgQEAgcHJpdmF0ZToKIAogICAgIE93blB0cjxD
Q1RleHR1cmVVcGRhdGVDb250cm9sbGVyPiBtX2N1cnJlbnRUZXh0dXJlVXBkYXRlQ29udHJvbGxl
ck9uSW1wbFRocmVhZDsKIAotICAgIC8vIFNldCB3aGVuIHdlIG5lZWQgdG8gcmVzZXQgdGhlIGNv
bnRlbnRzVGV4dHVyZXNQdXJnZWQgZmxhZyBhZnRlciB0aGUKLSAgICAvLyBjb21taXQuCi0gICAg
Ym9vbCBtX3Jlc2V0Q29udGVudHNUZXh0dXJlc1B1cmdlZEFmdGVyQ29tbWl0T25JbXBsVGhyZWFk
OworICAgIC8vIENvdW50ZXIgaW5jcmVtZW50ZWQgZXZlcnkgdGltZSB0aGUgaW1wbCB0aHJlYWQg
ZGVsZXRlcyB0ZXh0dXJlcywgc2VudCB0byB0aGUKKyAgICAvLyBtYWluIHRocmVhZCB3aXRoIGVh
Y2ggY29tbWl0LgorICAgIGludCBtX2NvbnRlbnRzVGV4dHVyZXNQdXJnZUNvdW50OworCisgICAg
Ly8gVmFsdWUgdGhhdCB0aGUgbWFpbiB0aHJlYWQgc2VuZHMgYXMgYW4gYWNrbm93bGVkZ2VtZW50
IHRvIHRoZSBpbXBsIHRocmVhZC4KKyAgICAvLyBJZiB0aGlzIGRvZXMgbm90IGVxdWFsIG1fY29u
dGVudHNUZXh0dXJlc1B1cmdlQ291bnQgdGhlbiB0aGUgaW1wbCBsYXllciB0cmVlCisgICAgLy8g
bWF5IHJlZmVyZW5jZSB0ZXh0dXJlcyB0aGF0IGhhdmUgYmVlbiBwdXJnZWQuCisgICAgaW50IG1f
Y29udGVudHNUZXh0dXJlc1B1cmdlQWNrOwogCiAgICAgLy8gU2V0IHdoZW4gdGhlIG5leHQgZHJh
dyBzaG91bGQgcG9zdCBkaWRDb21taXRBbmREcmF3RnJhbWUgdG8gdGhlIG1haW4gdGhyZWFkLgog
ICAgIGJvb2wgbV9uZXh0RnJhbWVJc05ld2x5Q29tbWl0dGVkRnJhbWVPbkltcGxUaHJlYWQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdElt
cGxUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0
SW1wbFRlc3QuY3BwCmluZGV4IDU2MmMwODY3NzFmYWYyNmRmZDBjNWNjZGVhZjgwNTIzODZhYzhl
NjYuLjIwNDFlN2MxZTk2NjQ5MzQ1ZGU1ODcwMzU4M2Y1ZWMyOWQ4YTQzYjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRl
c3QuY3BwCkBAIC04Nyw2ICs4Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVl
ZHNSZWRyYXdPbkltcGxUaHJlYWQoKSBPVkVSUklERSB7IG1fZGlkUmVxdWVzdFJlZHJhdyA9IHRy
dWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKSBPVkVS
UklERSB7IG1fZGlkUmVxdWVzdENvbW1pdCA9IHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgcG9z
dEFuaW1hdGlvbkV2ZW50c1RvTWFpblRocmVhZE9uSW1wbFRocmVhZChQYXNzT3duUHRyPENDQW5p
bWF0aW9uRXZlbnRzVmVjdG9yPiwgZG91YmxlIHdhbGxDbG9ja1RpbWUpIE9WRVJSSURFIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCByZWR1Y2VDb250ZW50c1RleHR1cmVzTWVtb3J5T25JbXBsVGhyZWFk
KCkgT1ZFUlJJREUgeyB9CiAKICAgICBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IGNy
ZWF0ZUxheWVyVHJlZUhvc3QoYm9vbCBwYXJ0aWFsU3dhcCwgUGFzc093blB0cjxDQ0dyYXBoaWNz
Q29udGV4dD4gZ3JhcGhpY3NDb250ZXh0LCBQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiByb290UHRy
KQogICAgIHsKQEAgLTM3OTEsMTIgKzM3OTIsNiBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1w
bFRlc3QsIHN1cmZhY2VUZXh0dXJlQ2FjaGluZ05vUGFydGlhbFN3YXApCiAgICAgfQogfQogCi1U
RVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHJlbGVhc2VDb250ZW50c1RleHR1cmVTaG91
bGRUcmlnZ2VyQ29tbWl0KQotewotICAgIG1faG9zdEltcGwtPnJlbGVhc2VDb250ZW50c1RleHR1
cmVzKCk7Ci0gICAgRVhQRUNUX1RSVUUobV9kaWRSZXF1ZXN0Q29tbWl0KTsKLX0KLQogc3RydWN0
IFJlbmRlclBhc3NDYWNoZUVudHJ5IHsKICAgICBtdXRhYmxlIE93blB0cjxDQ1JlbmRlclBhc3M+
IHJlbmRlclBhc3NQdHI7CiAgICAgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3Qu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1ByaW9yaXRpemVkVGV4dHVyZVRl
c3QuY3BwCmluZGV4IDRiY2FjY2RjM2E5YTA3OGZmYjhkZGYwZTE2ZThlZDQ3ZDRiMzc0ZjcuLjM4
M2ZhNTk4NzlkZDRlYmY3NDNlN2NjMzQzNWZhODUwZDQ5MWRmZWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdC5j
cHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJDQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uLmgi
CiAjaW5jbHVkZSAiRmFrZUNDR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rl
c3QuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViQ29tcG9zaXRvci5oPgogCiB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXRUZXN0czsKQEAgLTQ2LDE0ICs0Nywx
OCBAQCBwdWJsaWM6CiAgICAgICAgICwgbV90ZXh0dXJlRm9ybWF0KEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBKQogICAgICAgICAsIG1fY29udGV4dChXZWJLaXQ6OmNyZWF0ZUZha2VDQ0dyYXBoaWNz
Q29udGV4dCgpKQogICAgIHsKKyAgICAgICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjppbml0aWFs
aXplKDApOwogICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKICAg
ICAgICAgbV9yZXNvdXJjZVByb3ZpZGVyID0gQ0NSZXNvdXJjZVByb3ZpZGVyOjpjcmVhdGUobV9j
b250ZXh0LmdldCgpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIH5DQ1ByaW9yaXRpemVkVGV4dHVy
ZVRlc3QoKQogICAgIHsKLSAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJl
YWQ7Ci0gICAgICAgIG1fcmVzb3VyY2VQcm92aWRlci5jbGVhcigpOworICAgICAgICB7CisgICAg
ICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKKyAgICAgICAgICAg
IG1fcmVzb3VyY2VQcm92aWRlci5jbGVhcigpOworICAgICAgICB9CisgICAgICAgIFdlYktpdDo6
V2ViQ29tcG9zaXRvcjo6c2h1dGRvd24oKTsKICAgICB9CiAKICAgICBzaXplX3QgdGV4dHVyZXNN
ZW1vcnlTaXplKHNpemVfdCB0ZXh0dXJlQ291bnQpCkBAIC02OCwxMiArNzMsMTIgQEAgcHVibGlj
OgogCiAgICAgYm9vbCB2YWxpZGF0ZVRleHR1cmUoT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJl
PiYgdGV4dHVyZSwgYm9vbCByZXF1ZXN0TGF0ZSkKICAgICB7Ci0gICAgICAgIERlYnVnU2NvcGVk
U2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAg
dGV4dHVyZS0+dGV4dHVyZU1hbmFnZXIoKS0+YXNzZXJ0SW52YXJpYW50cygpOwogI2VuZGlmCiAg
ICAgICAgIGlmIChyZXF1ZXN0TGF0ZSkKICAgICAgICAgICAgIHRleHR1cmUtPnJlcXVlc3RMYXRl
KCk7CisgICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZEFuZE1haW5UaHJlYWRCbG9ja2Vk
IGltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZDsKICAgICAgICAgYm9vbCBzdWNjZXNzID0g
dGV4dHVyZS0+Y2FuQWNxdWlyZUJhY2tpbmdUZXh0dXJlKCk7CiAgICAgICAgIGlmIChzdWNjZXNz
KQogICAgICAgICAgICAgdGV4dHVyZS0+YWNxdWlyZUJhY2tpbmdUZXh0dXJlKHJlc291cmNlUHJv
dmlkZXIoKSk7CkBAIC0xMjgsNyArMTMzLDcgQEAgVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJl
VGVzdCwgcmVxdWVzdFRleHR1cmVFeGNlZWRpbmdNYXhMaW1pdCkKICAgICBFWFBFQ1RfRVEodGV4
dHVyZXNNZW1vcnlTaXplKG1heFRleHR1cmVzKSwgdGV4dHVyZU1hbmFnZXItPm1lbW9yeUFib3Zl
Q3V0b2ZmQnl0ZXMoKSk7CiAgICAgRVhQRUNUX0xFKHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlVc2VC
eXRlcygpLCB0ZXh0dXJlTWFuYWdlci0+bWVtb3J5QWJvdmVDdXRvZmZCeXRlcygpKTsKIAotICAg
IERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOworICAgIERlYnVnU2NvcGVkU2V0
SW1wbFRocmVhZEFuZE1haW5UaHJlYWRCbG9ja2VkIGltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxv
Y2tlZDsKICAgICB0ZXh0dXJlTWFuYWdlci0+Y2xlYXJBbGxNZW1vcnkocmVzb3VyY2VQcm92aWRl
cigpKTsKIH0KIApAQCAtMTQ5LDcgKzE1NCw3IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVy
ZVRlc3QsIGNoYW5nZU1lbW9yeUxpbWl0cykKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1h
eFRleHR1cmVzOyArK2kpCiAgICAgICAgIHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1tpXSwgZmFs
c2UpOwogICAgIHsKLSAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7
CisgICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZEFuZE1haW5UaHJlYWRCbG9ja2VkIGlt
cGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZDsKICAgICAgICAgdGV4dHVyZU1hbmFnZXItPnJl
ZHVjZU1lbW9yeShyZXNvdXJjZVByb3ZpZGVyKCkpOwogICAgIH0KIApAQCAtMTYyLDcgKzE2Nyw3
IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIGNoYW5nZU1lbW9yeUxpbWl0cykK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1heFRleHR1cmVzOyArK2kpCiAgICAgICAgIEVY
UEVDVF9FUSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbaV0sIGZhbHNlKSwgaSA8IDUpOwogICAg
IHsKLSAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CisgICAgICAg
IERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZEFuZE1haW5UaHJlYWRCbG9ja2VkIGltcGxUaHJlYWRB
bmRNYWluVGhyZWFkQmxvY2tlZDsKICAgICAgICAgdGV4dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9y
eShyZXNvdXJjZVByb3ZpZGVyKCkpOwogICAgIH0KIApAQCAtMTc1LDE0ICsxODAsMTQgQEAgVEVT
VF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgY2hhbmdlTWVtb3J5TGltaXRzKQogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkKICAgICAgICAgRVhQRUNUX0VR
KHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1tpXSwgZmFsc2UpLCBpIDwgNCk7CiAgICAgewotICAg
ICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKKyAgICAgICAgRGVidWdT
Y29wZWRTZXRJbXBsVGhyZWFkQW5kTWFpblRocmVhZEJsb2NrZWQgaW1wbFRocmVhZEFuZE1haW5U
aHJlYWRCbG9ja2VkOwogICAgICAgICB0ZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5KHJlc291
cmNlUHJvdmlkZXIoKSk7CiAgICAgfQogCiAgICAgRVhQRUNUX0VRKHRleHR1cmVzTWVtb3J5U2l6
ZSg0KSwgdGV4dHVyZU1hbmFnZXItPm1lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMoKSk7CiAgICAgRVhQ
RUNUX0xFKHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlVc2VCeXRlcygpLCB0ZXh0dXJlTWFuYWdlci0+
bWVtb3J5QWJvdmVDdXRvZmZCeXRlcygpKTsKIAotICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVh
ZCBpbXBsVGhyZWFkOworICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZEFuZE1haW5UaHJlYWRC
bG9ja2VkIGltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZDsKICAgICB0ZXh0dXJlTWFuYWdl
ci0+Y2xlYXJBbGxNZW1vcnkocmVzb3VyY2VQcm92aWRlcigpKTsKIH0KIApAQCAtMjQyLDcgKzI0
Nyw3IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHRleHR1cmVNYW5hZ2VyUGFy
dGlhbFVwZGF0ZVRleHR1cmVzKQogICAgIEVYUEVDVF9GQUxTRSh0ZXh0dXJlc1syXS0+aGF2ZUJh
Y2tpbmdUZXh0dXJlKCkpOwogICAgIEVYUEVDVF9GQUxTRSh0ZXh0dXJlc1szXS0+aGF2ZUJhY2tp
bmdUZXh0dXJlKCkpOwogCi0gICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7
CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkQW5kTWFpblRocmVhZEJsb2NrZWQgaW1wbFRo
cmVhZEFuZE1haW5UaHJlYWRCbG9ja2VkOwogICAgIHRleHR1cmVNYW5hZ2VyLT5jbGVhckFsbE1l
bW9yeShyZXNvdXJjZVByb3ZpZGVyKCkpOwogfQogCkBAIC0yODIsNyArMjg3LDcgQEAgVEVTVF9G
KENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgdGV4dHVyZU1hbmFnZXJQcmlvcml0aWVzQXJlRXF1
YWwpCiAgICAgRVhQRUNUX0VRKHRleHR1cmVzTWVtb3J5U2l6ZSg4KSwgdGV4dHVyZU1hbmFnZXIt
Pm1lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMoKSk7CiAgICAgRVhQRUNUX0xFKHRleHR1cmVNYW5hZ2Vy
LT5tZW1vcnlVc2VCeXRlcygpLCB0ZXh0dXJlTWFuYWdlci0+bWVtb3J5QWJvdmVDdXRvZmZCeXRl
cygpKTsKIAotICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOworICAgIERl
YnVnU2NvcGVkU2V0SW1wbFRocmVhZEFuZE1haW5UaHJlYWRCbG9ja2VkIGltcGxUaHJlYWRBbmRN
YWluVGhyZWFkQmxvY2tlZDsKICAgICB0ZXh0dXJlTWFuYWdlci0+Y2xlYXJBbGxNZW1vcnkocmVz
b3VyY2VQcm92aWRlcigpKTsKIH0KIApAQCAtMzAyLDcgKzMwNyw3IEBAIFRFU1RfRihDQ1ByaW9y
aXRpemVkVGV4dHVyZVRlc3QsIHRleHR1cmVNYW5hZ2VyRGVzdHJveWVkRmlyc3QpCiAgICAgRVhQ
RUNUX1RSVUUodGV4dHVyZS0+aGF2ZUJhY2tpbmdUZXh0dXJlKCkpOwogCiAgICAgewotICAgICAg
ICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKKyAgICAgICAgRGVidWdTY29w
ZWRTZXRJbXBsVGhyZWFkQW5kTWFpblRocmVhZEJsb2NrZWQgaW1wbFRocmVhZEFuZE1haW5UaHJl
YWRCbG9ja2VkOwogICAgICAgICB0ZXh0dXJlTWFuYWdlci0+Y2xlYXJBbGxNZW1vcnkocmVzb3Vy
Y2VQcm92aWRlcigpKTsKICAgICB9CiAgICAgdGV4dHVyZU1hbmFnZXIuY2xlYXIoKTsKQEAgLTMz
MCw3ICszMzUsNyBAQCBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCB0ZXh0dXJlTW92
ZWRUb05ld01hbmFnZXIpCiAgICAgdGV4dHVyZS0+c2V0VGV4dHVyZU1hbmFnZXIoMCk7CiAKICAg
ICB7Ci0gICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOworICAgICAg
ICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZCBpbXBsVGhyZWFk
QW5kTWFpblRocmVhZEJsb2NrZWQ7CiAgICAgICAgIHRleHR1cmVNYW5hZ2VyT25lLT5jbGVhckFs
bE1lbW9yeShyZXNvdXJjZVByb3ZpZGVyKCkpOwogICAgIH0KICAgICB0ZXh0dXJlTWFuYWdlck9u
ZS5jbGVhcigpOwpAQCAtMzQ2LDcgKzM1MSw3IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVy
ZVRlc3QsIHRleHR1cmVNb3ZlZFRvTmV3TWFuYWdlcikKICAgICBFWFBFQ1RfVFJVRSh0ZXh0dXJl
LT5jYW5BY3F1aXJlQmFja2luZ1RleHR1cmUoKSk7CiAgICAgRVhQRUNUX1RSVUUodGV4dHVyZS0+
aGF2ZUJhY2tpbmdUZXh0dXJlKCkpOwogCi0gICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGlt
cGxUaHJlYWQ7CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkQW5kTWFpblRocmVhZEJsb2Nr
ZWQgaW1wbFRocmVhZEFuZE1haW5UaHJlYWRCbG9ja2VkOwogICAgIHRleHR1cmVNYW5hZ2VyVHdv
LT5jbGVhckFsbE1lbW9yeShyZXNvdXJjZVByb3ZpZGVyKCkpOwogfQogCkBAIC0zOTIsNyArMzk3
LDcgQEAgVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgcmVuZGVyU3VyZmFjZXNSZWR1
Y2VNZW1vcnlBdmFpbGFibGVPdXRzaWRlUm9vdFMKICAgICBFWFBFQ1RfRVEodGV4dHVyZXNNZW1v
cnlTaXplKDQpLCB0ZXh0dXJlTWFuYWdlci0+bWVtb3J5Rm9yU2VsZk1hbmFnZWRUZXh0dXJlcygp
KTsKICAgICBFWFBFQ1RfTEUodGV4dHVyZU1hbmFnZXItPm1lbW9yeVVzZUJ5dGVzKCksIHRleHR1
cmVNYW5hZ2VyLT5tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzKCkpOwogCi0gICAgRGVidWdTY29wZWRT
ZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkQW5k
TWFpblRocmVhZEJsb2NrZWQgaW1wbFRocmVhZEFuZE1haW5UaHJlYWRCbG9ja2VkOwogICAgIHRl
eHR1cmVNYW5hZ2VyLT5jbGVhckFsbE1lbW9yeShyZXNvdXJjZVByb3ZpZGVyKCkpOwogfQogCkBA
IC00MjksNyArNDM0LDcgQEAgVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgcmVuZGVy
U3VyZmFjZXNSZWR1Y2VNZW1vcnlBdmFpbGFibGVGb3JSZXF1ZXN0TGEKICAgICBFWFBFQ1RfRVEo
dGV4dHVyZXNNZW1vcnlTaXplKDQpLCB0ZXh0dXJlTWFuYWdlci0+bWVtb3J5Rm9yU2VsZk1hbmFn
ZWRUZXh0dXJlcygpKTsKICAgICBFWFBFQ1RfTEUodGV4dHVyZU1hbmFnZXItPm1lbW9yeVVzZUJ5
dGVzKCksIHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzKCkpOwogCi0gICAg
RGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CisgICAgRGVidWdTY29wZWRTZXRJ
bXBsVGhyZWFkQW5kTWFpblRocmVhZEJsb2NrZWQgaW1wbFRocmVhZEFuZE1haW5UaHJlYWRCbG9j
a2VkOwogICAgIHRleHR1cmVNYW5hZ2VyLT5jbGVhckFsbE1lbW9yeShyZXNvdXJjZVByb3ZpZGVy
KCkpOwogfQogCkBAIC00NjksNyArNDc0LDcgQEAgVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJl
VGVzdCwgd2hlblJlbmRlclN1cmZhY2VOb3RBdmFpbGFibGVUZXh0dXJlc0Fsc29Ob3RBdmEKICAg
ICBFWFBFQ1RfRVEodGV4dHVyZXNNZW1vcnlTaXplKDIpLCB0ZXh0dXJlTWFuYWdlci0+bWVtb3J5
Rm9yU2VsZk1hbmFnZWRUZXh0dXJlcygpKTsKICAgICBFWFBFQ1RfTEUodGV4dHVyZU1hbmFnZXIt
Pm1lbW9yeVVzZUJ5dGVzKCksIHRleHR1cmVNYW5hZ2VyLT5tZW1vcnlBYm92ZUN1dG9mZkJ5dGVz
KCkpOwogCi0gICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CisgICAgRGVi
dWdTY29wZWRTZXRJbXBsVGhyZWFkQW5kTWFpblRocmVhZEJsb2NrZWQgaW1wbFRocmVhZEFuZE1h
aW5UaHJlYWRCbG9ja2VkOwogICAgIHRleHR1cmVNYW5hZ2VyLT5jbGVhckFsbE1lbW9yeShyZXNv
dXJjZVByb3ZpZGVyKCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NUZXh0dXJlVXBkYXRlQ29udHJvbGxlclRlc3QuY3BwCmluZGV4IDEx
NjU5ZjZmNTJiOGFiZDBhZTMwNzU5YjdhNjY1NDE0NTEwNjA0M2EuLjkyZjJhNmNkZjU4Mzk4N2Ux
YjhiYzkyODVmZmJlZTkxMmI2NTU2MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NUZXh0dXJlVXBkYXRlQ29udHJvbGxlclRlc3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUZXh0dXJlVXBkYXRlQ29udHJvbGxlclRlc3QuY3BwCkBA
IC04NywxMCArODcsMTQgQEAgcHJpdmF0ZToKIAogY2xhc3MgVGV4dHVyZUZvclVwbG9hZFRlc3Qg
OiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSB7CiBwdWJsaWM6Ci0gICAgVGV4
dHVyZUZvclVwbG9hZFRlc3QoKSA6IExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUoYWRvcHRQ
dHI8Q0NQcmlvcml0aXplZFRleHR1cmU+KDApKSB7IH0KKyAgICBUZXh0dXJlRm9yVXBsb2FkVGVz
dCgpIDogTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZShhZG9wdFB0cjxDQ1ByaW9yaXRpemVk
VGV4dHVyZT4oMCkpLCBtX2RlbGV0ZWQoZmFsc2UpIHsgfQorICAgIHZpcnR1YWwgYm9vbCBiYWNr
aW5nV2FzQXN5bmNocm9ub3VzbHlEZWxldGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWxldGVkOyB9
CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVJlY3QoQ0NSZXNvdXJjZVByb3ZpZGVyKiwgY29uc3Qg
SW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50U2l6ZSYgZGVzdE9mZnNldCkgeyB9Ci19Owog
CisgICAgdm9pZCBzZXRCYWNraW5nQXN5bmNocm9ub3VzbHlEZWxldGVkKCkgeyBtX2RlbGV0ZWQg
PSB0cnVlOyB9Citwcml2YXRlOgorICAgIGJvb2wgbV9kZWxldGVkOworfTsKIAogY2xhc3MgQ0NU
ZXh0dXJlVXBkYXRlQ29udHJvbGxlclRlc3QgOiBwdWJsaWMgVGVzdCB7CiBwdWJsaWM6CkBAIC0x
ODMsMjggKzE4NywzOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIFdlYkNvbXBvc2l0b3I6OnNodXRk
b3duKCk7CiAgICAgfQogCi0gICAgdm9pZCBhcHBlbmRGdWxsVXBsb2Fkc1RvVXBkYXRlUXVldWUo
aW50IGNvdW50KQorICAgIHZvaWQgYXBwZW5kRnVsbFVwbG9hZHNPZkluZGV4ZWRUZXh0dXJlVG9V
cGRhdGVRdWV1ZShpbnQgY291bnQsIGludCB0ZXh0dXJlSW5kZXgpCiAgICAgewogICAgICAgICBt
X2Z1bGxVcGxvYWRDb3VudEV4cGVjdGVkICs9IGNvdW50OwogICAgICAgICBtX3RvdGFsVXBsb2Fk
Q291bnRFeHBlY3RlZCArPSBjb3VudDsKIAogICAgICAgICBjb25zdCBJbnRSZWN0IHJlY3QoMCwg
MCwgMzAwLCAxNTApOwotICAgICAgICBjb25zdCBUZXh0dXJlVXBsb2FkZXI6OlBhcmFtZXRlcnMg
dXBsb2FkID0geyAmbV90ZXh0dXJlLCByZWN0LCBJbnRTaXplKCkgfTsKKyAgICAgICAgY29uc3Qg
VGV4dHVyZVVwbG9hZGVyOjpQYXJhbWV0ZXJzIHVwbG9hZCA9IHsgJm1fdGV4dHVyZXNbdGV4dHVy
ZUluZGV4XSwgcmVjdCwgSW50U2l6ZSgpIH07CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y291bnQ7IGkrKykKICAgICAgICAgICAgIG1fcXVldWUtPmFwcGVuZEZ1bGxVcGxvYWQodXBsb2Fk
KTsKICAgICB9CiAKLSAgICB2b2lkIGFwcGVuZFBhcnRpYWxVcGxvYWRzVG9VcGRhdGVRdWV1ZShp
bnQgY291bnQpCisgICAgdm9pZCBhcHBlbmRGdWxsVXBsb2Fkc1RvVXBkYXRlUXVldWUoaW50IGNv
dW50KQorICAgIHsKKyAgICAgICAgYXBwZW5kRnVsbFVwbG9hZHNPZkluZGV4ZWRUZXh0dXJlVG9V
cGRhdGVRdWV1ZShjb3VudCwgMCk7CisgICAgfQorCisgICAgdm9pZCBhcHBlbmRQYXJ0aWFsVXBs
b2Fkc09mSW5kZXhlZFRleHR1cmVUb1VwZGF0ZVF1ZXVlKGludCBjb3VudCwgaW50IHRleHR1cmVJ
bmRleCkKICAgICB7CiAgICAgICAgIG1fcGFydGlhbENvdW50RXhwZWN0ZWQgKz0gY291bnQ7CiAg
ICAgICAgIG1fdG90YWxVcGxvYWRDb3VudEV4cGVjdGVkICs9IGNvdW50OwogCiAgICAgICAgIGNv
bnN0IEludFJlY3QgcmVjdCgwLCAwLCAxMDAsIDEwMCk7Ci0gICAgICAgIGNvbnN0IFRleHR1cmVV
cGxvYWRlcjo6UGFyYW1ldGVycyB1cGxvYWQgPSB7ICZtX3RleHR1cmUsIHJlY3QsIEludFNpemUo
KSB9OworICAgICAgICBjb25zdCBUZXh0dXJlVXBsb2FkZXI6OlBhcmFtZXRlcnMgdXBsb2FkID0g
eyAmbV90ZXh0dXJlc1t0ZXh0dXJlSW5kZXhdLCByZWN0LCBJbnRTaXplKCkgfTsKICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogICAgICAgICAgICAgbV9xdWV1ZS0+YXBw
ZW5kUGFydGlhbFVwbG9hZCh1cGxvYWQpOwogICAgIH0KIAorICAgIHZvaWQgYXBwZW5kUGFydGlh
bFVwbG9hZHNUb1VwZGF0ZVF1ZXVlKGludCBjb3VudCkKKyAgICB7CisgICAgICAgIGFwcGVuZFBh
cnRpYWxVcGxvYWRzT2ZJbmRleGVkVGV4dHVyZVRvVXBkYXRlUXVldWUoY291bnQsIDApOworICAg
IH0KKwogICAgIHZvaWQgc2V0TWF4VXBsb2FkQ291bnRQZXJVcGRhdGUoaW50IGNvdW50KQogICAg
IHsKICAgICAgICAgbV9tYXhVcGxvYWRDb3VudFBlclVwZGF0ZSA9IGNvdW50OwpAQCAtMjE1LDcg
KzIyOSw3IEBAIHByb3RlY3RlZDoKICAgICBPd25QdHI8Q0NHcmFwaGljc0NvbnRleHQ+IG1fY29u
dGV4dDsKICAgICBPd25QdHI8Q0NSZXNvdXJjZVByb3ZpZGVyPiBtX3Jlc291cmNlUHJvdmlkZXI7
CiAgICAgT3duUHRyPENDVGV4dHVyZVVwZGF0ZVF1ZXVlPiBtX3F1ZXVlOwotICAgIFRleHR1cmVG
b3JVcGxvYWRUZXN0IG1fdGV4dHVyZTsKKyAgICBUZXh0dXJlRm9yVXBsb2FkVGVzdCBtX3RleHR1
cmVzWzRdOwogICAgIEZha2VUZXh0dXJlQ29waWVyIG1fY29waWVyOwogICAgIFRleHR1cmVVcGxv
YWRlckZvclVwbG9hZFRlc3QgbV91cGxvYWRlcjsKIApAQCAtNjg1LDQgKzY5OSwzOSBAQCBURVNU
X0YoQ0NUZXh0dXJlVXBkYXRlQ29udHJvbGxlclRlc3QsIFVwZGF0ZXNDb21wbGV0ZUluRmluaXRl
VGltZSkKICAgICBFWFBFQ1RfRVEoMiwgbV9udW1Ub3RhbFVwbG9hZHMpOwogfQogCisKKy8vIEFT
WU5DIERFTEVUSU9OIFRFU1RTCitURVNUX0YoQ0NUZXh0dXJlVXBkYXRlQ29udHJvbGxlclRlc3Qs
IEFzeW5jRGVsZXRpb24pCit7CisgICAgYXBwZW5kRnVsbFVwbG9hZHNPZkluZGV4ZWRUZXh0dXJl
VG9VcGRhdGVRdWV1ZSgxLCAwKTsKKyAgICBhcHBlbmRQYXJ0aWFsVXBsb2Fkc09mSW5kZXhlZFRl
eHR1cmVUb1VwZGF0ZVF1ZXVlKDEsIDEpOworICAgIGFwcGVuZEZ1bGxVcGxvYWRzT2ZJbmRleGVk
VGV4dHVyZVRvVXBkYXRlUXVldWUoMSwgMik7CisgICAgYXBwZW5kUGFydGlhbFVwbG9hZHNPZklu
ZGV4ZWRUZXh0dXJlVG9VcGRhdGVRdWV1ZSgxLCAzKTsKKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxU
aHJlYWQgaW1wbFRocmVhZDsKKworICAgIG1fcXVldWUtPmNsZWFyVXBsb2Fkc1RvRGVsZXRlZFJl
c291cmNlcygpOworICAgIEVYUEVDVF9FUSgydSwgbV9xdWV1ZS0+ZnVsbFVwbG9hZFNpemUoKSk7
CisgICAgRVhQRUNUX0VRKDJ1LCBtX3F1ZXVlLT5wYXJ0aWFsVXBsb2FkU2l6ZSgpKTsKKworICAg
IG1fdGV4dHVyZXNbMF0uc2V0QmFja2luZ0FzeW5jaHJvbm91c2x5RGVsZXRlZCgpOworICAgIG1f
cXVldWUtPmNsZWFyVXBsb2Fkc1RvRGVsZXRlZFJlc291cmNlcygpOworICAgIEVYUEVDVF9FUSgx
dSwgbV9xdWV1ZS0+ZnVsbFVwbG9hZFNpemUoKSk7CisgICAgRVhQRUNUX0VRKDJ1LCBtX3F1ZXVl
LT5wYXJ0aWFsVXBsb2FkU2l6ZSgpKTsKKworICAgIG1fdGV4dHVyZXNbM10uc2V0QmFja2luZ0Fz
eW5jaHJvbm91c2x5RGVsZXRlZCgpOworICAgIG1fcXVldWUtPmNsZWFyVXBsb2Fkc1RvRGVsZXRl
ZFJlc291cmNlcygpOworICAgIEVYUEVDVF9FUSgxdSwgbV9xdWV1ZS0+ZnVsbFVwbG9hZFNpemUo
KSk7CisgICAgRVhQRUNUX0VRKDF1LCBtX3F1ZXVlLT5wYXJ0aWFsVXBsb2FkU2l6ZSgpKTsKKwor
ICAgIG1fdGV4dHVyZXNbMl0uc2V0QmFja2luZ0FzeW5jaHJvbm91c2x5RGVsZXRlZCgpOworICAg
IG1fcXVldWUtPmNsZWFyVXBsb2Fkc1RvRGVsZXRlZFJlc291cmNlcygpOworICAgIEVYUEVDVF9F
USgwdSwgbV9xdWV1ZS0+ZnVsbFVwbG9hZFNpemUoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBtX3F1
ZXVlLT5wYXJ0aWFsVXBsb2FkU2l6ZSgpKTsKKworICAgIG1fdGV4dHVyZXNbMV0uc2V0QmFja2lu
Z0FzeW5jaHJvbm91c2x5RGVsZXRlZCgpOworICAgIG1fcXVldWUtPmNsZWFyVXBsb2Fkc1RvRGVs
ZXRlZFJlc291cmNlcygpOworICAgIEVYUEVDVF9FUSgwdSwgbV9xdWV1ZS0+ZnVsbFVwbG9hZFNp
emUoKSk7CisgICAgRVhQRUNUX0VRKDB1LCBtX3F1ZXVlLT5wYXJ0aWFsVXBsb2FkU2l6ZSgpKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCmluZGV4IDAwZWUyOGE2ODhlYTZkMjg1
NTY3YTM3YTAwNzBkMzVhYTExYmY3MDUuLjVlMjUzMmM2MTA3OGZkMTNiMzMwZmZiY2Q4M2ZjMjQ5
ODYzNTE5Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRM
YXllckNocm9taXVtVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9U
aWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcApAQCAtODAsMjUgKzgwLDczIEBAIHB1YmxpYzoKICAg
ICAgICAgLCBtX3RleHR1cmVNYW5hZ2VyKENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3Jl
YXRlKDYwKjEwMjQqMTAyNCwgMTAyNCwgQ0NSZW5kZXJlcjo6Q29udGVudFBvb2wpKQogICAgICAg
ICAsIG1fb2NjbHVzaW9uKDApCiAgICAgewotICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJl
YWQgaW1wbFRocmVhZDsKLSAgICAgICAgbV9yZXNvdXJjZVByb3ZpZGVyID0gQ0NSZXNvdXJjZVBy
b3ZpZGVyOjpjcmVhdGUobV9jb250ZXh0LmdldCgpKTsKKyAgICAgICAgV2ViS2l0OjpXZWJDb21w
b3NpdG9yOjppbml0aWFsaXplKDApOworICAgICAgICB7CisgICAgICAgICAgICBEZWJ1Z1Njb3Bl
ZFNldEltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZCBpbXBsVGhyZWFkQW5kTWFpblRocmVh
ZEJsb2NrZWQ7CisgICAgICAgICAgICAgIG1fcmVzb3VyY2VQcm92aWRlciA9IENDUmVzb3VyY2VQ
cm92aWRlcjo6Y3JlYXRlKG1fY29udGV4dC5nZXQoKSk7CisgICAgICAgIH0KICAgICB9CiAKICAg
ICB2aXJ0dWFsIH5UaWxlZExheWVyQ2hyb21pdW1UZXN0KCkKICAgICB7Ci0gICAgICAgIERlYnVn
U2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwotICAgICAgICBtX3Jlc291cmNlUHJvdmlk
ZXIuY2xlYXIoKTsKKyAgICAgICAgdGV4dHVyZU1hbmFnZXJDbGVhckFsbE1lbW9yeShtX3RleHR1
cmVNYW5hZ2VyLmdldCgpLCBtX3Jlc291cmNlUHJvdmlkZXIuZ2V0KCkpOworICAgICAgICB7Cisg
ICAgICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZCBp
bXBsVGhyZWFkQW5kTWFpblRocmVhZEJsb2NrZWQ7CisgICAgICAgICAgICBtX3Jlc291cmNlUHJv
dmlkZXIuY2xlYXIoKTsKKyAgICAgICAgfQorICAgICAgICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6
OnNodXRkb3duKCk7CiAgICAgfQogCisgICAgLy8gSGVscGVyIGNsYXNzZXMgYW5kIGZ1bmN0aW9u
cyB0aGF0IHNldCB0aGUgY3VycmVudCB0aHJlYWQgdG8gYmUgdGhlIGltcGwgdGhyZWFkCisgICAg
Ly8gYmVmb3JlIGRvaW5nIHRoZSBhY3Rpb24gdGhhdCB0aGV5IHdyYXAuCisgICAgY2xhc3MgU2Nv
cGVkRmFrZUNDVGlsZWRMYXllckltcGwgeworICAgIHB1YmxpYzoKKyAgICAgICAgU2NvcGVkRmFr
ZUNDVGlsZWRMYXllckltcGwoaW50IGlkKQorICAgICAgICB7CisgICAgICAgICAgICBEZWJ1Z1Nj
b3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKKyAgICAgICAgICAgIG1fbGF5ZXJJbXBsID0g
bmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKGlkKTsKKyAgICAgICAgfQorICAgICAgICB+U2NvcGVk
RmFrZUNDVGlsZWRMYXllckltcGwoKQorICAgICAgICB7CisgICAgICAgICAgICBEZWJ1Z1Njb3Bl
ZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKKyAgICAgICAgICAgIGRlbGV0ZSBtX2xheWVySW1w
bDsKKyAgICAgICAgfQorICAgICAgICBGYWtlQ0NUaWxlZExheWVySW1wbCogZ2V0KCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG1fbGF5ZXJJbXBsOworICAgICAgICB9CisgICAgICAg
IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKiBvcGVyYXRvci0+KCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1fbGF5ZXJJbXBsOworICAgICAgICB9CisgICAgcHJpdmF0ZToKKyAgICAgICAg
RmFrZUNDVGlsZWRMYXllckltcGwqIG1fbGF5ZXJJbXBsOworICAgIH07CisgICAgdm9pZCB0ZXh0
dXJlTWFuYWdlckNsZWFyQWxsTWVtb3J5KENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlciogdGV4
dHVyZU1hbmFnZXIsIENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlcikKKyAgICB7
CisgICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZEFuZE1haW5UaHJlYWRCbG9ja2VkIGlt
cGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZDsKKyAgICAgICAgdGV4dHVyZU1hbmFnZXItPmNs
ZWFyQWxsTWVtb3J5KHJlc291cmNlUHJvdmlkZXIpOworICAgIH0KICAgICB2b2lkIHVwZGF0ZVRl
eHR1cmVzKGludCBjb3VudCA9IDUwMCkKICAgICB7CisgICAgICAgIERlYnVnU2NvcGVkU2V0SW1w
bFRocmVhZEFuZE1haW5UaHJlYWRCbG9ja2VkIGltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tl
ZDsKICAgICAgICAgQ0NUZXh0dXJlVXBkYXRlQ29udHJvbGxlcjo6dXBkYXRlVGV4dHVyZXMobV9y
ZXNvdXJjZVByb3ZpZGVyLmdldCgpLCAmbV9jb3BpZXIsICZtX3VwbG9hZGVyLCAmbV9xdWV1ZSwg
Y291bnQpOwogICAgIH0KKyAgICB2b2lkIGxheWVyUHVzaFByb3BlcnRpZXNUbyhGYWtlVGlsZWRM
YXllckNocm9taXVtKiBsYXllciwgRmFrZUNDVGlsZWRMYXllckltcGwqIGxheWVySW1wbCkKKyAg
ICB7CisgICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZEFuZE1haW5UaHJlYWRCbG9ja2Vk
IGltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZDsKKyAgICAgICAgbGF5ZXItPnB1c2hQcm9w
ZXJ0aWVzVG8obGF5ZXJJbXBsKTsKKyAgICB9CisgICAgdm9pZCBsYXllclVwZGF0ZShGYWtlVGls
ZWRMYXllckNocm9taXVtKiBsYXllciwgVGVzdENDT2NjbHVzaW9uVHJhY2tlciogb2NjbHVkZWQp
CisgICAgeworICAgICAgICBEZWJ1Z1Njb3BlZFNldE1haW5UaHJlYWQgbWFpblRocmVhZDsKKyAg
ICAgICAgbGF5ZXItPnVwZGF0ZShtX3F1ZXVlLCBvY2NsdWRlZCwgbV9zdGF0cyk7CisgICAgfQog
CiAgICAgYm9vbCB1cGRhdGVBbmRQdXNoKEZha2VUaWxlZExheWVyQ2hyb21pdW0qIGxheWVyMSwK
LSAgICAgICAgICAgICAgICAgICAgICAgQ0NMYXllckltcGwqIGxheWVySW1wbDEsCisgICAgICAg
ICAgICAgICAgICAgICAgIEZha2VDQ1RpbGVkTGF5ZXJJbXBsKiBsYXllckltcGwxLAogICAgICAg
ICAgICAgICAgICAgICAgICBGYWtlVGlsZWRMYXllckNocm9taXVtKiBsYXllcjIgPSAwLAotICAg
ICAgICAgICAgICAgICAgICAgICBDQ0xheWVySW1wbCogbGF5ZXJJbXBsMiA9IDApCisgICAgICAg
ICAgICAgICAgICAgICAgIEZha2VDQ1RpbGVkTGF5ZXJJbXBsKiBsYXllckltcGwyID0gMCkKICAg
ICB7CiAgICAgICAgIC8vIEdldCB0ZXh0dXJlcwogICAgICAgICBtX3RleHR1cmVNYW5hZ2VyLT5j
bGVhclByaW9yaXRpZXMoKTsKQEAgLTEyMyw5ICsxNzEsOSBAQCBwdWJsaWM6CiAgICAgICAgIC8v
IFVwZGF0ZSB0ZXh0dXJlcyBhbmQgcHVzaC4KICAgICAgICAgdXBkYXRlVGV4dHVyZXMoKTsKICAg
ICAgICAgaWYgKGxheWVyMSkKLSAgICAgICAgICAgIGxheWVyMS0+cHVzaFByb3BlcnRpZXNUbyhs
YXllckltcGwxKTsKKyAgICAgICAgICAgIGxheWVyUHVzaFByb3BlcnRpZXNUbyhsYXllcjEsIGxh
eWVySW1wbDEpOwogICAgICAgICBpZiAobGF5ZXIyKQotICAgICAgICAgICAgbGF5ZXIyLT5wdXNo
UHJvcGVydGllc1RvKGxheWVySW1wbDIpOworICAgICAgICAgICAgbGF5ZXJQdXNoUHJvcGVydGll
c1RvKGxheWVyMiwgbGF5ZXJJbXBsMik7CiAKICAgICAgICAgcmV0dXJuIG5lZWRzVXBkYXRlOwog
ICAgIH0KQEAgLTE0NSw4ICsxOTMsNyBAQCBwdWJsaWM6CiBURVNUX0YoVGlsZWRMYXllckNocm9t
aXVtVGVzdCwgcHVzaERpcnR5VGlsZXMpCiB7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hy
b21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0
dXJlTWFuYWdlci5nZXQoKSkpOwotICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhy
ZWFkOwotICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRy
KG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOworICAgIFNjb3BlZEZha2VDQ1RpbGVkTGF5
ZXJJbXBsIGxheWVySW1wbCgxKTsKIAogICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEwMCwg
c28gdGhpcyBpbnZhbGlkYXRlcyBhbmQgdGhlbiBwYWludHMgdHdvIHRpbGVzLgogICAgIGxheWVy
LT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDIwMCkpOwpAQCAtMTcyLDggKzIxOSw3IEBAIFRFU1Rf
RihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoRGlydHlUaWxlcykKIFRFU1RfRihUaWxlZExh
eWVyQ2hyb21pdW1UZXN0LCBwdXNoT2NjbHVkZWREaXJ0eVRpbGVzKQogewogICAgIFJlZlB0cjxG
YWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXll
ckNocm9taXVtKG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKLSAgICBEZWJ1Z1Njb3BlZFNldElt
cGxUaHJlYWQgaW1wbFRocmVhZDsKLSAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxh
eWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMSkpKTsKKyAgICBTY29w
ZWRGYWtlQ0NUaWxlZExheWVySW1wbCBsYXllckltcGwoMSk7CiAgICAgVGVzdENDT2NjbHVzaW9u
VHJhY2tlciBvY2NsdWRlZDsKICAgICBtX29jY2x1c2lvbiA9ICZvY2NsdWRlZDsKIApAQCAtMjA5
LDggKzI1NSw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoT2NjbHVkZWRE
aXJ0eVRpbGVzKQogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hEZWxldGVkVGls
ZXMpCiB7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRS
ZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwot
ICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwotICAgIE93blB0cjxGYWtl
Q0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVy
SW1wbCgxKSkpOworICAgIFNjb3BlZEZha2VDQ1RpbGVkTGF5ZXJJbXBsIGxheWVySW1wbCgxKTsK
IAogICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEwMCwgc28gdGhpcyBpbnZhbGlkYXRlcyBh
bmQgdGhlbiBwYWludHMgdHdvIHRpbGVzLgogICAgIGxheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgx
MDAsIDIwMCkpOwpAQCAtMjIzLDExICsyNjgsMTEgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1
bVRlc3QsIHB1c2hEZWxldGVkVGlsZXMpCiAgICAgRVhQRUNUX1RSVUUobGF5ZXJJbXBsLT5oYXNU
aWxlQXQoMCwgMSkpOwogCiAgICAgbV90ZXh0dXJlTWFuYWdlci0+Y2xlYXJQcmlvcml0aWVzKCk7
Ci0gICAgbV90ZXh0dXJlTWFuYWdlci0+Y2xlYXJBbGxNZW1vcnkobV9yZXNvdXJjZVByb3ZpZGVy
LmdldCgpKTsKKyAgICB0ZXh0dXJlTWFuYWdlckNsZWFyQWxsTWVtb3J5KG1fdGV4dHVyZU1hbmFn
ZXIuZ2V0KCksIG1fcmVzb3VyY2VQcm92aWRlci5nZXQoKSk7CiAgICAgbV90ZXh0dXJlTWFuYWdl
ci0+c2V0TWF4TWVtb3J5TGltaXRCeXRlcyg0KjEwMjQqMTAyNCk7CiAKICAgICAvLyBUaGlzIHNo
b3VsZCBkcm9wIHRoZSB0aWxlcyBvbiB0aGUgaW1wbCB0aHJlYWQuCi0gICAgbGF5ZXItPnB1c2hQ
cm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsKKyAgICBsYXllclB1c2hQcm9wZXJ0aWVzVG8o
bGF5ZXIuZ2V0KCksIGxheWVySW1wbC5nZXQoKSk7CiAKICAgICAvLyBXZSBzaG91bGQgbm93IGhh
dmUgbm8gdGV4dHVyZXMgb24gdGhlIGltcGwgdGhyZWFkLgogICAgIEVYUEVDVF9GQUxTRShsYXll
ckltcGwtPmhhc1RpbGVBdCgwLCAwKSk7CkBAIC0yNDUsOCArMjkwLDcgQEAgVEVTVF9GKFRpbGVk
TGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hEZWxldGVkVGlsZXMpCiBURVNUX0YoVGlsZWRMYXllckNo
cm9taXVtVGVzdCwgcHVzaElkbGVQYWludFRpbGVzKQogewogICAgIFJlZlB0cjxGYWtlVGlsZWRM
YXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVt
KG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKLSAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQg
aW1wbFRocmVhZDsKLSAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChh
ZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMSkpKTsKKyAgICBTY29wZWRGYWtlQ0NU
aWxlZExheWVySW1wbCBsYXllckltcGwoMSk7CiAKICAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEw
MHgxMDAuIFNldHVwIDV4NSB0aWxlcyB3aXRoIG9uZSB2aXNpYmxlIHRpbGUgaW4gdGhlIGNlbnRl
ci4KICAgICAvLyBUaGlzIHBhaW50cyAxIHZpc2libGUgb2YgdGhlIDI1IGludmFsaWQgdGlsZXMu
CkBAIC0yODMsMTEgKzMyNywxMCBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVz
aFRpbGVzQWZ0ZXJJZGxlUGFpbnRGYWlsZWQpCiB7CiAgICAgLy8gU3RhcnQgd2l0aCAybWIgb2Yg
bWVtb3J5LCBidXQgdGhlIHRlc3QgaXMgZ29pbmcgdG8gdHJ5IHRvIHVzZSBqdXN0IG1vcmUgdGhh
biAxbWIsIHNvIHdlIHJlZHVjZSB0byAxbWIgbGF0ZXIuCiAgICAgbV90ZXh0dXJlTWFuYWdlci0+
c2V0TWF4TWVtb3J5TGltaXRCeXRlcygyICogMTAyNCAqIDEwMjQpOyAgICAKLSAgICBEZWJ1Z1Nj
b3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJD
aHJvbWl1bT4gbGF5ZXIxID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0obV90
ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwotICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4g
bGF5ZXJJbXBsMShhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMSkpKTsKKyAgICBT
Y29wZWRGYWtlQ0NUaWxlZExheWVySW1wbCBsYXllckltcGwxKDEpOwogICAgIFJlZlB0cjxGYWtl
VGlsZWRMYXllckNocm9taXVtPiBsYXllcjIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJD
aHJvbWl1bShtX3RleHR1cmVNYW5hZ2VyLmdldCgpKSk7Ci0gICAgT3duUHRyPEZha2VDQ1RpbGVk
TGF5ZXJJbXBsPiBsYXllckltcGwyKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgy
KSkpOworICAgIFNjb3BlZEZha2VDQ1RpbGVkTGF5ZXJJbXBsIGxheWVySW1wbDIoMik7CiAKICAg
ICAvLyBGb3IgdGhpcyB0ZXN0IHdlIGhhdmUgdHdvIGxheWVycy4gbGF5ZXIxIGV4aGF1c3RzIG1v
c3QgdGV4dHVyZSBtZW1vcnksIGxlYXZpbmcgcm9vbSBmb3IgMiBtb3JlIHRpbGVzIGZyb20KICAg
ICAvLyBsYXllcjIsIGJ1dCBub3QgYWxsIHRocmVlIHRpbGVzLiBGaXJzdCB3ZSBwYWludCBsYXll
cjEsIGFuZCBvbmUgdGlsZSBmcm9tIGxheWVyMi4gVGhlbiB3aGVuIHdlIGlkbGUgcGFpbnQKQEAg
LTMzNyw4ICszODAsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaFRpbGVz
QWZ0ZXJJZGxlUGFpbnRGYWlsZWQpCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVz
aElkbGVQYWludGVkT2NjbHVkZWRUaWxlcykKIHsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJD
aHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShtX3Rl
eHR1cmVNYW5hZ2VyLmdldCgpKSk7Ci0gICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxU
aHJlYWQ7Ci0gICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQ
dHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDEpKSk7CisgICAgU2NvcGVkRmFrZUNDVGlsZWRM
YXllckltcGwgbGF5ZXJJbXBsKDEpOwogICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVk
ZWQ7CiAgICAgbV9vY2NsdXNpb24gPSAmb2NjbHVkZWQ7CiAgICAgCkBAIC0zNTcsOCArMzk5LDcg
QEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hJZGxlUGFpbnRlZE9jY2x1ZGVk
VGlsZXMpCiBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaFRpbGVzTWFya2VkRGly
dHlEdXJpbmdQYWludCkKIHsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5
ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShtX3RleHR1cmVNYW5hZ2Vy
LmdldCgpKSk7Ci0gICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7Ci0gICAg
T3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VD
Q1RpbGVkTGF5ZXJJbXBsKDEpKSk7CisgICAgU2NvcGVkRmFrZUNDVGlsZWRMYXllckltcGwgbGF5
ZXJJbXBsKDEpOwogCiAgICAgLy8gVGhlIHRpbGUgc2l6ZSBpcyAxMDB4MTAwLCBzbyB0aGlzIGlu
dmFsaWRhdGVzIGFuZCB0aGVuIHBhaW50cyB0d28gdGlsZXMuCiAgICAgLy8gSG93ZXZlciwgZHVy
aW5nIHRoZSBwYWludCwgd2UgaW52YWxpZGF0ZSBvbmUgb2YgdGhlIHRpbGVzLiBUaGlzIHNob3Vs
ZApAQCAtMzc3LDkgKzQxOCw4IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNo
VGlsZXNMYXllck1hcmtlZERpcnR5RHVyaW5nUGFpbnRPbk5leHRMYXllcikKIHsKICAgICBSZWZQ
dHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIxID0gYWRvcHRSZWYobmV3IEZha2VUaWxl
ZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIFJlZlB0cjxGYWtl
VGlsZWRMYXllckNocm9taXVtPiBsYXllcjIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJD
aHJvbWl1bShtX3RleHR1cmVNYW5hZ2VyLmdldCgpKSk7Ci0gICAgRGVidWdTY29wZWRTZXRJbXBs
VGhyZWFkIGltcGxUaHJlYWQ7Ci0gICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXll
cjFJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOwotICAgIE93blB0
cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXIySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGls
ZWRMYXllckltcGwoMikpKTsKKyAgICBTY29wZWRGYWtlQ0NUaWxlZExheWVySW1wbCBsYXllcjFJ
bXBsKDEpOworICAgIFNjb3BlZEZha2VDQ1RpbGVkTGF5ZXJJbXBsIGxheWVyMkltcGwoMik7CiAK
ICAgICAvLyBJbnZhbGlkYXRlIGEgdGlsZSBvbiBsYXllcjEsIGR1cmluZyB1cGRhdGUgb2YgbGF5
ZXIgMi4KICAgICBsYXllcjItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnNldFJlY3RUb0lu
dmFsaWRhdGUoSW50UmVjdCgwLCA1MCwgMTAwLCA1MCksIGxheWVyMS5nZXQoKSk7CkBAIC00MDEs
OSArNDQxLDggQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hUaWxlc0xheWVy
TWFya2VkRGlydHlEdXJpbmdQYWludE9uUHJldmlvdXNMYXkKIHsKICAgICBSZWZQdHI8RmFrZVRp
bGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIxID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hy
b21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXll
ckNocm9taXVtPiBsYXllcjIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSht
X3RleHR1cmVNYW5hZ2VyLmdldCgpKSk7Ci0gICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGlt
cGxUaHJlYWQ7Ci0gICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllcjFJbXBsKGFk
b3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOwotICAgIE93blB0cjxGYWtlQ0NU
aWxlZExheWVySW1wbD4gbGF5ZXIySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllcklt
cGwoMikpKTsKKyAgICBTY29wZWRGYWtlQ0NUaWxlZExheWVySW1wbCBsYXllcjFJbXBsKDEpOwor
ICAgIFNjb3BlZEZha2VDQ1RpbGVkTGF5ZXJJbXBsIGxheWVyMkltcGwoMik7CiAKICAgICBsYXll
cjEtPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnNldFJlY3RUb0ludmFsaWRhdGUoSW50UmVj
dCgwLCA1MCwgMTAwLCA1MCksIGxheWVyMi5nZXQoKSk7CiAgICAgbGF5ZXIxLT5zZXRCb3VuZHMo
SW50U2l6ZSgxMDAsIDIwMCkpOwpAQCAtNDI0LDcgKzQ2Myw2IEBAIFRFU1RfRihUaWxlZExheWVy
Q2hyb21pdW1UZXN0LCBwYWludFNtYWxsQW5pbWF0ZWRMYXllcnNJbW1lZGlhdGVseSkKIHsKICAg
ICAvLyBDcmVhdGUgYSBDQ0xheWVyVHJlZUhvc3QgdGhhdCBoYXMgdGhlIHJpZ2h0IHZpZXdwb3J0
c2l6ZSwKICAgICAvLyBzbyB0aGUgbGF5ZXIgaXMgY29uc2lkZXJlZCBzbWFsbCBlbm91Z2guCi0g
ICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjppbml0aWFsaXplKDApOwogICAgIEZha2VDQ0xheWVy
VHJlZUhvc3RDbGllbnQgZmFrZUNDTGF5ZXJUcmVlSG9zdENsaWVudDsKICAgICBPd25QdHI8Q0NM
YXllclRyZWVIb3N0PiBjY0xheWVyVHJlZUhvc3QgPSBDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSgm
ZmFrZUNDTGF5ZXJUcmVlSG9zdENsaWVudCwgQ0NMYXllclRyZWVTZXR0aW5ncygpKTsKIApAQCAt
NDQyLDEwICs0ODAsOSBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcGFpbnRTbWFs
bEFuaW1hdGVkTGF5ZXJzSW1tZWRpYXRlbHkpCiAgICAgICAgICAgICBsYXllcldpZHRoICo9IDI7
CiAKICAgICAgICAgbV90ZXh0dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5TGltaXRCeXRlcyhtZW1v
cnlGb3JMYXllcik7Ci0gICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFk
OwogCiAgICAgICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0
UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsK
LSAgICAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIo
bmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDEpKSk7CisgICAgICAgIFNjb3BlZEZha2VDQ1RpbGVk
TGF5ZXJJbXBsIGxheWVySW1wbCgxKTsKIAogICAgICAgICAvLyBGdWxsIHNpemUgbGF5ZXIgd2l0
aCBoYWxmIGJlaW5nIHZpc2libGUuCiAgICAgICAgIEludFNpemUgY29udGVudEJvdW5kcyhsYXll
cldpZHRoLCBsYXllckhlaWdodCk7CkBAIC00NjUsNyArNTAyLDcgQEAgVEVTVF9GKFRpbGVkTGF5
ZXJDaHJvbWl1bVRlc3QsIHBhaW50U21hbGxBbmltYXRlZExheWVyc0ltbWVkaWF0ZWx5KQogICAg
ICAgICBtX3RleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKICAgICAgICAgbGF5
ZXItPnVwZGF0ZShtX3F1ZXVlLCAwLCBtX3N0YXRzKTsKICAgICAgICAgdXBkYXRlVGV4dHVyZXMo
KTsKLSAgICAgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsKKyAg
ICAgICAgbGF5ZXJQdXNoUHJvcGVydGllc1RvKGxheWVyLmdldCgpLCBsYXllckltcGwuZ2V0KCkp
OwogCiAgICAgICAgIC8vIFdlIHNob3VsZCBoYXZlIGFsbCB0aGUgdGlsZXMgZm9yIHRoZSBzbWFs
bCBhbmltYXRlZCBsYXllci4KICAgICAgICAgLy8gV2Ugc2hvdWxkIHN0aWxsIGhhdmUgdGhlIHZp
c2libGUgdGlsZXMgd2hlbiB3ZSBkaWRuJ3QKQEAgLTQ4MywxNCArNTIwLDEyIEBAIFRFU1RfRihU
aWxlZExheWVyQ2hyb21pdW1UZXN0LCBwYWludFNtYWxsQW5pbWF0ZWRMYXllcnNJbW1lZGlhdGVs
eSkKICAgICAgICAgfQogICAgIH0KICAgICBjY0xheWVyVHJlZUhvc3QuY2xlYXIoKTsKLSAgICBX
ZWJLaXQ6OldlYkNvbXBvc2l0b3I6OnNodXRkb3duKCk7CiB9CiAKIFRFU1RfRihUaWxlZExheWVy
Q2hyb21pdW1UZXN0LCBpZGxlUGFpbnRPdXRPZk1lbW9yeSkKIHsKICAgICBSZWZQdHI8RmFrZVRp
bGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJv
bWl1bShtX3RleHR1cmVNYW5hZ2VyLmdldCgpKSk7Ci0gICAgRGVidWdTY29wZWRTZXRJbXBsVGhy
ZWFkIGltcGxUaHJlYWQ7Ci0gICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllcklt
cGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDEpKSk7CisgICAgU2NvcGVkRmFr
ZUNDVGlsZWRMYXllckltcGwgbGF5ZXJJbXBsKDEpOwogCiAgICAgLy8gV2UgaGF2ZSBlbm91Z2gg
bWVtb3J5IGZvciBvbmx5IHRoZSB2aXNpYmxlIHJlY3QsIHNvIHdlIHdpbGwgcnVuIG91dCBvZiBt
ZW1vcnkgaW4gZmlyc3QgaWRsZSBwYWludC4KICAgICBpbnQgbWVtb3J5TGltaXQgPSA0ICogMTAw
ICogMTAwOyAvLyAxIHRpbGVzLCA0IGJ5dGVzIHBlciBwaXhlbC4KQEAgLTUxMyw4ICs1NDgsNyBA
QCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgaWRsZVBhaW50T3V0T2ZNZW1vcnkpCiBU
RVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgaWRsZVBhaW50WmVyb1NpemVkTGF5ZXIpCiB7
CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3
IEZha2VUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwotICAgIERl
YnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwotICAgIE93blB0cjxGYWtlQ0NUaWxl
ZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgx
KSkpOworICAgIFNjb3BlZEZha2VDQ1RpbGVkTGF5ZXJJbXBsIGxheWVySW1wbCgxKTsKIAogICAg
IGJvb2wgYW5pbWF0aW5nWzJdID0ge2ZhbHNlLCB0cnVlfTsKICAgICBmb3IgKGludCBpID0gMDsg
aSA8IDI7IGkrKykgewpAQCAtNTQxLDggKzU3NSw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21p
dW1UZXN0LCBpZGxlUGFpbnRaZXJvU2l6ZWRMYXllcikKIFRFU1RfRihUaWxlZExheWVyQ2hyb21p
dW1UZXN0LCBpZGxlUGFpbnROb25WaXNpYmxlTGF5ZXJzKQogewogICAgIFJlZlB0cjxGYWtlVGls
ZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9t
aXVtKG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKLSAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJl
YWQgaW1wbFRocmVhZDsKLSAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1w
bChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMSkpKTsKKyAgICBTY29wZWRGYWtl
Q0NUaWxlZExheWVySW1wbCBsYXllckltcGwoMSk7CiAKICAgICAvLyBBbHRlcm5hdGUgYmV0d2Vl
biBub3QgdmlzaWJsZSBhbmQgdmlzaWJsZS4KICAgICBJbnRSZWN0IHYoMCwgMCwgMTAwLCAxMDAp
OwpAQCAtNTcyLDggKzYwNSw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxl
UGFpbnROb25WaXNpYmxlTGF5ZXJzKQogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlu
dmFsaWRhdGVGcm9tUHJlcGFyZSkKIHsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1
bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bShtX3RleHR1cmVN
YW5hZ2VyLmdldCgpKSk7Ci0gICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7
Ci0gICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3
IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDEpKSk7CisgICAgU2NvcGVkRmFrZUNDVGlsZWRMYXllcklt
cGwgbGF5ZXJJbXBsKDEpOwogCiAgICAgLy8gVGhlIHRpbGUgc2l6ZSBpcyAxMDB4MTAwLCBzbyB0
aGlzIGludmFsaWRhdGVzIGFuZCB0aGVuIHBhaW50cyB0d28gdGlsZXMuCiAgICAgbGF5ZXItPnNl
dEJvdW5kcyhJbnRTaXplKDEwMCwgMjAwKSk7CkBAIC02MDgsNyArNjQwLDYgQEAgVEVTVF9GKFRp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHZlcmlmeVVwZGF0ZVJlY3RXaGVuQ29udGVudEJvdW5kc0Fy
ZVNjYWxlZCkKICAgICAvLyBUaGUgdXBkYXRlUmVjdCAodGhhdCBpbmRpY2F0ZXMgd2hhdCB3YXMg
YWN0dWFsbHkgcGFpbnRlZCkgc2hvdWxkIGJlIGluCiAgICAgLy8gbGF5ZXIgc3BhY2UsIG5vdCB0
aGUgY29udGVudCBzcGFjZS4KICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJXaXRoU2NhbGVkQm91
bmRzPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllcldpdGhTY2FsZWRCb3VuZHMo
bV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwotICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBp
bXBsVGhyZWFkOwogCiAgICAgSW50UmVjdCBsYXllckJvdW5kcygwLCAwLCAzMDAsIDIwMCk7CiAg
ICAgSW50UmVjdCBjb250ZW50Qm91bmRzKDAsIDAsIDIwMCwgMjUwKTsKQEAgLTY0Nyw4ICs2Nzgs
NyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdmVyaWZ5VXBkYXRlUmVjdFdoZW5D
b250ZW50Qm91bmRzQXJlU2NhbGVkKQogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHZl
cmlmeUludmFsaWRhdGlvbldoZW5Db250ZW50c1NjYWxlQ2hhbmdlcykKIHsKICAgICBSZWZQdHI8
RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5
ZXJDaHJvbWl1bShtX3RleHR1cmVNYW5hZ2VyLmdldCgpKSk7Ci0gICAgRGVidWdTY29wZWRTZXRJ
bXBsVGhyZWFkIGltcGxUaHJlYWQ7Ci0gICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBs
YXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDEpKSk7CisgICAgU2Nv
cGVkRmFrZUNDVGlsZWRMYXllckltcGwgbGF5ZXJJbXBsKDEpOwogCiAgICAgLy8gQ3JlYXRlIGEg
bGF5ZXIgd2l0aCBvbmUgdGlsZS4KICAgICBsYXllci0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAx
MDApKTsKQEAgLTY2Myw3ICs2OTMsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwg
dmVyaWZ5SW52YWxpZGF0aW9uV2hlbkNvbnRlbnRzU2NhbGVDaGFuZ2VzKQogICAgIG1fdGV4dHVy
ZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwogICAgIGxheWVyLT51cGRhdGUobV9xdWV1
ZSwgMCwgbV9zdGF0cyk7CiAgICAgdXBkYXRlVGV4dHVyZXMoKTsKLSAgICBsYXllci0+cHVzaFBy
b3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOworICAgIGxheWVyUHVzaFByb3BlcnRpZXNUbyhs
YXllci5nZXQoKSwgbGF5ZXJJbXBsLmdldCgpKTsKICAgICBFWFBFQ1RfVFJVRShsYXllckltcGwt
Pmhhc1RpbGVBdCgwLCAwKSk7CiAgICAgRVhQRUNUX0ZBTFNFKGxheWVySW1wbC0+aGFzVGlsZUF0
KDAsIDEpKTsKICAgICBFWFBFQ1RfRkFMU0UobGF5ZXJJbXBsLT5oYXNUaWxlQXQoMSwgMCkpOwpA
QCAtNjgwLDcgKzcxMCw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB2ZXJpZnlJ
bnZhbGlkYXRpb25XaGVuQ29udGVudHNTY2FsZUNoYW5nZXMpCiAgICAgbV90ZXh0dXJlTWFuYWdl
ci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CiAgICAgbGF5ZXItPnVwZGF0ZShtX3F1ZXVlLCAwLCBt
X3N0YXRzKTsKICAgICB1cGRhdGVUZXh0dXJlcygpOwotICAgIGxheWVyLT5wdXNoUHJvcGVydGll
c1RvKGxheWVySW1wbC5nZXQoKSk7CisgICAgbGF5ZXJQdXNoUHJvcGVydGllc1RvKGxheWVyLmdl
dCgpLCBsYXllckltcGwuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKGxheWVySW1wbC0+aGFzVGls
ZUF0KDAsIDApKTsKICAgICBFWFBFQ1RfVFJVRShsYXllckltcGwtPmhhc1RpbGVBdCgwLCAxKSk7
CiAgICAgRVhQRUNUX1RSVUUobGF5ZXJJbXBsLT5oYXNUaWxlQXQoMSwgMCkpOwpAQCAtNjkyLDcg
KzcyMiw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB2ZXJpZnlJbnZhbGlkYXRp
b25XaGVuQ29udGVudHNTY2FsZUNoYW5nZXMpCiAgICAgbGF5ZXItPnNldFRleHR1cmVQcmlvcml0
aWVzKG1fcHJpb3JpdHlDYWxjdWxhdG9yKTsKICAgICBtX3RleHR1cmVNYW5hZ2VyLT5wcmlvcml0
aXplVGV4dHVyZXMoKTsKIAotICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5n
ZXQoKSk7CisgICAgbGF5ZXJQdXNoUHJvcGVydGllc1RvKGxheWVyLmdldCgpLCBsYXllckltcGwu
Z2V0KCkpOwogICAgIEVYUEVDVF9GQUxTRShsYXllckltcGwtPmhhc1RpbGVBdCgwLCAwKSk7CiAg
ICAgRVhQRUNUX0ZBTFNFKGxheWVySW1wbC0+aGFzVGlsZUF0KDAsIDEpKTsKICAgICBFWFBFQ1Rf
RkFMU0UobGF5ZXJJbXBsLT5oYXNUaWxlQXQoMSwgMCkpOwpAQCAtNzAxLDggKzczMSw2IEBAIFRF
U1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB2ZXJpZnlJbnZhbGlkYXRpb25XaGVuQ29udGVu
dHNTY2FsZUNoYW5nZXMpCiAKIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBza2lwc0Ry
YXdHZXRzUmVzZXQpCiB7Ci0gICAgLy8gSW5pdGlhbGl6ZSB3aXRob3V0IHRocmVhZGluZyBzdXBw
b3J0LgotICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6aW5pdGlhbGl6ZSgwKTsKICAgICBGYWtl
Q0NMYXllclRyZWVIb3N0Q2xpZW50IGZha2VDQ0xheWVyVHJlZUhvc3RDbGllbnQ7CiAgICAgT3du
UHRyPENDTGF5ZXJUcmVlSG9zdD4gY2NMYXllclRyZWVIb3N0ID0gQ0NMYXllclRyZWVIb3N0Ojpj
cmVhdGUoJmZha2VDQ0xheWVyVHJlZUhvc3RDbGllbnQsIENDTGF5ZXJUcmVlU2V0dGluZ3MoKSk7
CiAgICAgQVNTRVJUX1RSVUUoY2NMYXllclRyZWVIb3N0LT5pbml0aWFsaXplUmVuZGVyZXJJZk5l
ZWRlZCgpKTsKQEAgLTc0NCwxMCArNzcyLDkgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRl
c3QsIHNraXBzRHJhd0dldHNSZXNldCkKICAgICBjY0xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVy
cyhtX3F1ZXVlLCBtZW1vcnlMaW1pdCk7CiAgICAgRVhQRUNUX0ZBTFNFKHJvb3RMYXllci0+c2tp
cHNEcmF3KCkpOwogCi0gICAgY2NMYXllclRyZWVIb3N0LT5jb250ZW50c1RleHR1cmVNYW5hZ2Vy
KCktPmNsZWFyQWxsTWVtb3J5KG1fcmVzb3VyY2VQcm92aWRlci5nZXQoKSk7CisgICAgdGV4dHVy
ZU1hbmFnZXJDbGVhckFsbE1lbW9yeShjY0xheWVyVHJlZUhvc3QtPmNvbnRlbnRzVGV4dHVyZU1h
bmFnZXIoKSwgbV9yZXNvdXJjZVByb3ZpZGVyLmdldCgpKTsKICAgICBjY0xheWVyVHJlZUhvc3Qt
PnNldFJvb3RMYXllcigwKTsKICAgICBjY0xheWVyVHJlZUhvc3QuY2xlYXIoKTsKLSAgICBXZWJL
aXQ6OldlYkNvbXBvc2l0b3I6OnNodXRkb3duKCk7CiB9CiAKIFRFU1RfRihUaWxlZExheWVyQ2hy
b21pdW1UZXN0LCByZXNpemVUb1NtYWxsZXIpCkBAIC03ODMsOSArODEwLDYgQEAgVEVTVF9GKFRp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGh1Z2VMYXllclVwZGF0ZUNyYXNoKQogCiBURVNUX0YoVGls
ZWRMYXllckNocm9taXVtVGVzdCwgcGFydGlhbFVwZGF0ZXMpCiB7Ci0gICAgLy8gSW5pdGlhbGl6
ZSB3aXRob3V0IHRocmVhZGluZyBzdXBwb3J0LgotICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6
aW5pdGlhbGl6ZSgwKTsKLQogICAgIENDTGF5ZXJUcmVlU2V0dGluZ3Mgc2V0dGluZ3M7CiAgICAg
c2V0dGluZ3MubWF4UGFydGlhbFRleHR1cmVVcGRhdGVzID0gNDsKIApAQCAtODA5LDggKzgzMyw3
IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwYXJ0aWFsVXBkYXRlcykKICAgICAv
LyBGdWxsIHVwZGF0ZSBvZiBhbGwgNiB0aWxlcy4KICAgICBjY0xheWVyVHJlZUhvc3QtPnVwZGF0
ZUxheWVycyhtX3F1ZXVlLCBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpKTsKICAg
ICB7Ci0gICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwotICAgICAg
ICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFr
ZUNDVGlsZWRMYXllckltcGwoMSkpKTsKKyAgICAgICAgU2NvcGVkRmFrZUNDVGlsZWRMYXllcklt
cGwgbGF5ZXJJbXBsKDEpOwogICAgICAgICB1cGRhdGVUZXh0dXJlcyg0KTsKICAgICAgICAgRVhQ
RUNUX0VRKDQsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT51cGRhdGVDb3VudCgp
KTsKICAgICAgICAgRVhQRUNUX1RSVUUobV9xdWV1ZS5oYXNNb3JlVXBkYXRlcygpKTsKQEAgLTgx
OSw3ICs4NDIsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcGFydGlhbFVwZGF0
ZXMpCiAgICAgICAgIEVYUEVDVF9FUSgyLCBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIo
KS0+dXBkYXRlQ291bnQoKSk7CiAgICAgICAgIEVYUEVDVF9GQUxTRShtX3F1ZXVlLmhhc01vcmVV
cGRhdGVzKCkpOwogICAgICAgICBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+Y2xl
YXJVcGRhdGVDb3VudCgpOwotICAgICAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXllcklt
cGwuZ2V0KCkpOworICAgICAgICBsYXllclB1c2hQcm9wZXJ0aWVzVG8obGF5ZXIuZ2V0KCksIGxh
eWVySW1wbC5nZXQoKSk7CiAgICAgfQogICAgIGNjTGF5ZXJUcmVlSG9zdC0+Y29tbWl0Q29tcGxl
dGUoKTsKIApAQCAtODI3LDggKzg1MCw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0
LCBwYXJ0aWFsVXBkYXRlcykKICAgICBsYXllci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJl
Y3QoMCwgMCwgMzAwLCAxNTApKTsKICAgICBjY0xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVycyht
X3F1ZXVlLCBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpKTsKICAgICB7Ci0gICAg
ICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwotICAgICAgICBPd25QdHI8
RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRM
YXllckltcGwoMSkpKTsKKyAgICAgICAgU2NvcGVkRmFrZUNDVGlsZWRMYXllckltcGwgbGF5ZXJJ
bXBsKDEpOwogICAgICAgICB1cGRhdGVUZXh0dXJlcyg0KTsKICAgICAgICAgRVhQRUNUX0VRKDMs
IGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT51cGRhdGVDb3VudCgpKTsKICAgICAg
ICAgRVhQRUNUX1RSVUUobV9xdWV1ZS5oYXNNb3JlVXBkYXRlcygpKTsKQEAgLTgzNywxNSArODU5
LDE0IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwYXJ0aWFsVXBkYXRlcykKICAg
ICAgICAgRVhQRUNUX0VRKDMsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT51cGRh
dGVDb3VudCgpKTsKICAgICAgICAgRVhQRUNUX0ZBTFNFKG1fcXVldWUuaGFzTW9yZVVwZGF0ZXMo
KSk7CiAgICAgICAgIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5jbGVhclVwZGF0
ZUNvdW50KCk7Ci0gICAgICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQo
KSk7CisgICAgICAgIGxheWVyUHVzaFByb3BlcnRpZXNUbyhsYXllci5nZXQoKSwgbGF5ZXJJbXBs
LmdldCgpKTsKICAgICB9CiAgICAgY2NMYXllclRyZWVIb3N0LT5jb21taXRDb21wbGV0ZSgpOwog
CiAgICAgLy8gUGFydGlhbCB1cGRhdGUgb2YgNiB0aWxlcy4KICAgICBsYXllci0+aW52YWxpZGF0
ZUNvbnRlbnRSZWN0KEludFJlY3QoNTAsIDUwLCAyMDAsIDEwMCkpOwogICAgIHsKLSAgICAgICAg
RGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7Ci0gICAgICAgIE93blB0cjxGYWtl
Q0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVy
SW1wbCgxKSkpOworICAgICAgICBTY29wZWRGYWtlQ0NUaWxlZExheWVySW1wbCBsYXllckltcGwo
MSk7CiAgICAgICAgIGNjTGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKG1fcXVldWUsIHN0ZDo6
bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkpOwogICAgICAgICB1cGRhdGVUZXh0dXJlcyg0
KTsKICAgICAgICAgRVhQRUNUX0VRKDIsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigp
LT51cGRhdGVDb3VudCgpKTsKQEAgLTg1NSwyNCArODc2LDIyIEBAIFRFU1RfRihUaWxlZExheWVy
Q2hyb21pdW1UZXN0LCBwYXJ0aWFsVXBkYXRlcykKICAgICAgICAgRVhQRUNUX0VRKDQsIGxheWVy
LT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT51cGRhdGVDb3VudCgpKTsKICAgICAgICAgRVhQ
RUNUX0ZBTFNFKG1fcXVldWUuaGFzTW9yZVVwZGF0ZXMoKSk7CiAgICAgICAgIGxheWVyLT5mYWtl
TGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5jbGVhclVwZGF0ZUNvdW50KCk7Ci0gICAgICAgIGxheWVy
LT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7CisgICAgICAgIGxheWVyUHVzaFBy
b3BlcnRpZXNUbyhsYXllci5nZXQoKSwgbGF5ZXJJbXBsLmdldCgpKTsKICAgICB9CiAgICAgY2NM
YXllclRyZWVIb3N0LT5jb21taXRDb21wbGV0ZSgpOwogCiAgICAgLy8gQ2hlY2tlcmJvYXJkIGFs
bCB0aWxlcy4KICAgICBsYXllci0+aW52YWxpZGF0ZUNvbnRlbnRSZWN0KEludFJlY3QoMCwgMCwg
MzAwLCAyMDApKTsKICAgICB7Ci0gICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBs
VGhyZWFkOwotICAgICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChh
ZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMSkpKTsKLSAgICAgICAgbGF5ZXItPnB1
c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsKKyAgICAgICAgU2NvcGVkRmFrZUNDVGls
ZWRMYXllckltcGwgbGF5ZXJJbXBsKDEpOworICAgICAgICBsYXllclB1c2hQcm9wZXJ0aWVzVG8o
bGF5ZXIuZ2V0KCksIGxheWVySW1wbC5nZXQoKSk7CiAgICAgfQogICAgIGNjTGF5ZXJUcmVlSG9z
dC0+Y29tbWl0Q29tcGxldGUoKTsKIAogICAgIC8vIFBhcnRpYWwgdXBkYXRlIG9mIDYgY2hlY2tl
cmJvYXJkIHRpbGVzLgogICAgIGxheWVyLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoSW50UmVjdCg1
MCwgNTAsIDIwMCwgMTAwKSk7CiAgICAgewotICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJl
YWQgaW1wbFRocmVhZDsKLSAgICAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXll
ckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDEpKSk7CisgICAgICAgIFNj
b3BlZEZha2VDQ1RpbGVkTGF5ZXJJbXBsIGxheWVySW1wbCgxKTsKICAgICAgICAgY2NMYXllclRy
ZWVIb3N0LT51cGRhdGVMYXllcnMobV9xdWV1ZSwgc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+
OjptYXgoKSk7CiAgICAgICAgIHVwZGF0ZVRleHR1cmVzKDQpOwogICAgICAgICBFWFBFQ1RfRVEo
NCwgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPnVwZGF0ZUNvdW50KCkpOwpAQCAt
ODgyLDMxICs5MDEsMjYgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHBhcnRpYWxV
cGRhdGVzKQogICAgICAgICBFWFBFQ1RfRVEoMiwgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRh
dGVyKCktPnVwZGF0ZUNvdW50KCkpOwogICAgICAgICBFWFBFQ1RfRkFMU0UobV9xdWV1ZS5oYXNN
b3JlVXBkYXRlcygpKTsKICAgICAgICAgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCkt
PmNsZWFyVXBkYXRlQ291bnQoKTsKLSAgICAgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5
ZXJJbXBsLmdldCgpKTsKKyAgICAgICAgbGF5ZXJQdXNoUHJvcGVydGllc1RvKGxheWVyLmdldCgp
LCBsYXllckltcGwuZ2V0KCkpOwogICAgIH0KICAgICBjY0xheWVyVHJlZUhvc3QtPmNvbW1pdENv
bXBsZXRlKCk7CiAKICAgICAvLyBQYXJ0aWFsIHVwZGF0ZSBvZiA0IHRpbGVzLgogICAgIGxheWVy
LT5pbnZhbGlkYXRlQ29udGVudFJlY3QoSW50UmVjdCg1MCwgNTAsIDEwMCwgMTAwKSk7CiAgICAg
ewotICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKLSAgICAgICAg
T3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VD
Q1RpbGVkTGF5ZXJJbXBsKDEpKSk7CisgICAgICAgIFNjb3BlZEZha2VDQ1RpbGVkTGF5ZXJJbXBs
IGxheWVySW1wbCgxKTsKICAgICAgICAgY2NMYXllclRyZWVIb3N0LT51cGRhdGVMYXllcnMobV9x
dWV1ZSwgc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSk7CiAgICAgICAgIHVwZGF0
ZVRleHR1cmVzKDQpOwogICAgICAgICBFWFBFQ1RfRVEoNCwgbGF5ZXItPmZha2VMYXllclRleHR1
cmVVcGRhdGVyKCktPnVwZGF0ZUNvdW50KCkpOwogICAgICAgICBFWFBFQ1RfRkFMU0UobV9xdWV1
ZS5oYXNNb3JlVXBkYXRlcygpKTsKICAgICAgICAgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRh
dGVyKCktPmNsZWFyVXBkYXRlQ291bnQoKTsKLSAgICAgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVz
VG8obGF5ZXJJbXBsLmdldCgpKTsKKyAgICAgICAgbGF5ZXJQdXNoUHJvcGVydGllc1RvKGxheWVy
LmdldCgpLCBsYXllckltcGwuZ2V0KCkpOwogICAgIH0KICAgICBjY0xheWVyVHJlZUhvc3QtPmNv
bW1pdENvbXBsZXRlKCk7CiAKLSAgICB7Ci0gICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVh
ZCBpbXBsVGhyZWFkOwotICAgICAgICBjY0xheWVyVHJlZUhvc3QtPmNvbnRlbnRzVGV4dHVyZU1h
bmFnZXIoKS0+Y2xlYXJBbGxNZW1vcnkobV9yZXNvdXJjZVByb3ZpZGVyLmdldCgpKTsKLSAgICB9
CisgICAgdGV4dHVyZU1hbmFnZXJDbGVhckFsbE1lbW9yeShjY0xheWVyVHJlZUhvc3QtPmNvbnRl
bnRzVGV4dHVyZU1hbmFnZXIoKSwgbV9yZXNvdXJjZVByb3ZpZGVyLmdldCgpKTsKICAgICBjY0xh
eWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcigwKTsKICAgICBjY0xheWVyVHJlZUhvc3QuY2xlYXIo
KTsKLSAgICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6OnNodXRkb3duKCk7CiB9CiAKIFRFU1RfRihU
aWxlZExheWVyQ2hyb21pdW1UZXN0LCB0aWxlc1BhaW50ZWRXaXRob3V0T2NjbHVzaW9uKQpAQCAt
MTA1MSw3ICsxMDY1LDYgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzTm90
UGFpbnRlZFdpdGhvdXRJbnZhbGlkYXRpb24pCiAgICAgbGF5ZXItPnVwZGF0ZShtX3F1ZXVlLCAm
b2NjbHVkZWQsIG1fc3RhdHMpOwogICAgIEVYUEVDVF9FUSgzNi0zLCBsYXllci0+ZmFrZUxheWVy
VGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFyZVJlY3RDb3VudCgpKTsKICAgICB7Ci0gICAgICAgIERl
YnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAgICAgICB1cGRhdGVUZXh0dXJl
cygpOwogICAgIH0KIApAQCAtMTE3OCw3ICsxMTkxLDYgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJv
bWl1bVRlc3QsIHZpc2libGVDb250ZW50T3BhcXVlUmVnaW9uKQogewogICAgIFJlZlB0cjxGYWtl
VGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNo
cm9taXVtKG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBUZXN0Q0NPY2NsdXNpb25UcmFj
a2VyIG9jY2x1ZGVkOwotICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwog
CiAgICAgLy8gVGhlIHRpbGUgc2l6ZSBpcyAxMDB4MTAwLCBzbyB0aGlzIGludmFsaWRhdGVzIGFu
ZCB0aGVuIHBhaW50cyB0d28gdGlsZXMgaW4gdmFyaW91cyB3YXlzLgogCkBAIC0xMjcxLDggKzEy
ODMsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcGl4ZWxzUGFpbnRlZE1ldHJp
Y3MpCiB7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRS
ZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0obV90ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwog
ICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVkZWQ7Ci0gICAgRGVidWdTY29wZWRTZXRJ
bXBsVGhyZWFkIGltcGxUaHJlYWQ7Ci0KKyAgICAKICAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEw
MHgxMDAsIHNvIHRoaXMgaW52YWxpZGF0ZXMgYW5kIHRoZW4gcGFpbnRzIHR3byB0aWxlcyBpbiB2
YXJpb3VzIHdheXMuCiAKICAgICBJbnRSZWN0IG9wYXF1ZVBhaW50UmVjdDsKQEAgLTEzMjIsOSAr
MTMzMyw2IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwaXhlbHNQYWludGVkTWV0
cmljcykKIAogVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGRvbnRBbGxvY2F0ZUNvbnRl
bnRzV2hlblRhcmdldFN1cmZhY2VDYW50QmVBbGxvY2F0ZWQpCiB7Ci0gICAgLy8gSW5pdGlhbGl6
ZSB3aXRob3V0IHRocmVhZGluZyBzdXBwb3J0LgotICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6
aW5pdGlhbGl6ZSgwKTsKLQogICAgIC8vIFRpbGUgc2l6ZSBpcyAxMDB4MTAwLgogICAgIEludFJl
Y3Qgcm9vdFJlY3QoMCwgMCwgMzAwLCAyMDApOwogICAgIEludFJlY3QgY2hpbGRSZWN0KDAsIDAs
IDMwMCwgMTAwKTsKQEAgLTEzNzMsNyArMTM4MSw2IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21p
dW1UZXN0LCBkb250QWxsb2NhdGVDb250ZW50c1doZW5UYXJnZXRTdXJmYWNlQ2FudEJlQWxsb2Nh
CiAgICAgY2hpbGQyLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoY2hpbGQyUmVjdCk7CiAgICAgY2NM
YXllclRyZWVIb3N0LT51cGRhdGVMYXllcnMobV9xdWV1ZSwgc3RkOjpudW1lcmljX2xpbWl0czxz
aXplX3Q+OjptYXgoKSk7CiAgICAgewotICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQg
aW1wbFRocmVhZDsKICAgICAgICAgdXBkYXRlVGV4dHVyZXMoMTAwMCk7CiAgICAgICAgIEVYUEVD
VF9FUSg2LCByb290LT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT51cGRhdGVDb3VudCgpKTsK
ICAgICAgICAgRVhQRUNUX0VRKDMsIGNoaWxkLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT51
cGRhdGVDb3VudCgpKTsKQEAgLTEzODQsMTIgKzEzOTEsMTIgQEAgVEVTVF9GKFRpbGVkTGF5ZXJD
aHJvbWl1bVRlc3QsIGRvbnRBbGxvY2F0ZUNvbnRlbnRzV2hlblRhcmdldFN1cmZhY2VDYW50QmVB
bGxvY2EKICAgICAgICAgY2hpbGQtPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPmNsZWFyVXBk
YXRlQ291bnQoKTsKICAgICAgICAgY2hpbGQyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5j
bGVhclVwZGF0ZUNvdW50KCk7CiAKLSAgICAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBs
PiByb290SW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwocm9vdC0+aWQoKSkp
KTsKLSAgICAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBjaGlsZEltcGwoYWRvcHRQ
dHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKGNoaWxkLT5pZCgpKSkpOwotICAgICAgICBPd25Q
dHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGNoaWxkMkltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1Rp
bGVkTGF5ZXJJbXBsKGNoaWxkMi0+aWQoKSkpKTsKLSAgICAgICAgcm9vdC0+cHVzaFByb3BlcnRp
ZXNUbyhyb290SW1wbC5nZXQoKSk7Ci0gICAgICAgIGNoaWxkLT5wdXNoUHJvcGVydGllc1RvKGNo
aWxkSW1wbC5nZXQoKSk7Ci0gICAgICAgIGNoaWxkMi0+cHVzaFByb3BlcnRpZXNUbyhjaGlsZDJJ
bXBsLmdldCgpKTsKKyAgICAgICAgU2NvcGVkRmFrZUNDVGlsZWRMYXllckltcGwgcm9vdEltcGwo
cm9vdC0+aWQoKSk7CisgICAgICAgIFNjb3BlZEZha2VDQ1RpbGVkTGF5ZXJJbXBsIGNoaWxkSW1w
bChjaGlsZC0+aWQoKSk7CisgICAgICAgIFNjb3BlZEZha2VDQ1RpbGVkTGF5ZXJJbXBsIGNoaWxk
MkltcGwoY2hpbGQyLT5pZCgpKTsKKyAgICAgICAgbGF5ZXJQdXNoUHJvcGVydGllc1RvKHJvb3Qu
Z2V0KCksIHJvb3RJbXBsLmdldCgpKTsKKyAgICAgICAgbGF5ZXJQdXNoUHJvcGVydGllc1RvKGNo
aWxkLmdldCgpLCBjaGlsZEltcGwuZ2V0KCkpOworICAgICAgICBsYXllclB1c2hQcm9wZXJ0aWVz
VG8oY2hpbGQyLmdldCgpLCBjaGlsZDJJbXBsLmdldCgpKTsKIAogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgMzsgKytpKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAw
OyBqIDwgMjsgKytqKQpAQCAtMTQwOCw3ICsxNDE1LDYgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJv
bWl1bVRlc3QsIGRvbnRBbGxvY2F0ZUNvbnRlbnRzV2hlblRhcmdldFN1cmZhY2VDYW50QmVBbGxv
Y2EKICAgICBjaGlsZDItPmludmFsaWRhdGVDb250ZW50UmVjdChjaGlsZDJSZWN0KTsKICAgICBj
Y0xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVycyhtX3F1ZXVlLCAoMyAqIDIgKyAzICogMSkgKiAo
MTAwICogMTAwKSAqIDQpOwogICAgIHsKLSAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFk
IGltcGxUaHJlYWQ7CiAgICAgICAgIHVwZGF0ZVRleHR1cmVzKDEwMDApOwogICAgICAgICBFWFBF
Q1RfRVEoNiwgcm9vdC0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+dXBkYXRlQ291bnQoKSk7
CiAgICAgICAgIEVYUEVDVF9FUSgwLCBjaGlsZC0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+
dXBkYXRlQ291bnQoKSk7CkBAIC0xNDE5LDEyICsxNDI1LDEyIEBAIFRFU1RfRihUaWxlZExheWVy
Q2hyb21pdW1UZXN0LCBkb250QWxsb2NhdGVDb250ZW50c1doZW5UYXJnZXRTdXJmYWNlQ2FudEJl
QWxsb2NhCiAgICAgICAgIGNoaWxkLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5jbGVhclVw
ZGF0ZUNvdW50KCk7CiAgICAgICAgIGNoaWxkMi0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+
Y2xlYXJVcGRhdGVDb3VudCgpOwogCi0gICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1w
bD4gcm9vdEltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKHJvb3QtPmlkKCkp
KSk7Ci0gICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gY2hpbGRJbXBsKGFkb3B0
UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbChjaGlsZC0+aWQoKSkpKTsKLSAgICAgICAgT3du
UHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBjaGlsZDJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NU
aWxlZExheWVySW1wbChjaGlsZDItPmlkKCkpKSk7Ci0gICAgICAgIHJvb3QtPnB1c2hQcm9wZXJ0
aWVzVG8ocm9vdEltcGwuZ2V0KCkpOwotICAgICAgICBjaGlsZC0+cHVzaFByb3BlcnRpZXNUbyhj
aGlsZEltcGwuZ2V0KCkpOwotICAgICAgICBjaGlsZDItPnB1c2hQcm9wZXJ0aWVzVG8oY2hpbGQy
SW1wbC5nZXQoKSk7CisgICAgICAgIFNjb3BlZEZha2VDQ1RpbGVkTGF5ZXJJbXBsIHJvb3RJbXBs
KHJvb3QtPmlkKCkpOworICAgICAgICBTY29wZWRGYWtlQ0NUaWxlZExheWVySW1wbCBjaGlsZElt
cGwoY2hpbGQtPmlkKCkpOworICAgICAgICBTY29wZWRGYWtlQ0NUaWxlZExheWVySW1wbCBjaGls
ZDJJbXBsKGNoaWxkMi0+aWQoKSk7CisgICAgICAgIGxheWVyUHVzaFByb3BlcnRpZXNUbyhyb290
LmdldCgpLCByb290SW1wbC5nZXQoKSk7CisgICAgICAgIGxheWVyUHVzaFByb3BlcnRpZXNUbyhj
aGlsZC5nZXQoKSwgY2hpbGRJbXBsLmdldCgpKTsKKyAgICAgICAgbGF5ZXJQdXNoUHJvcGVydGll
c1RvKGNoaWxkMi5nZXQoKSwgY2hpbGQySW1wbC5nZXQoKSk7CiAKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IDM7ICsraSkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0g
MDsgaiA8IDI7ICsraikKQEAgLTE0NDQsNyArMTQ1MCw2IEBAIFRFU1RfRihUaWxlZExheWVyQ2hy
b21pdW1UZXN0LCBkb250QWxsb2NhdGVDb250ZW50c1doZW5UYXJnZXRTdXJmYWNlQ2FudEJlQWxs
b2NhCiAgICAgY2hpbGQyLT5pbnZhbGlkYXRlQ29udGVudFJlY3QoY2hpbGQyUmVjdCk7CiAgICAg
Y2NMYXllclRyZWVIb3N0LT51cGRhdGVMYXllcnMobV9xdWV1ZSwgKDMgKiAxKSAqICgxMDAgKiAx
MDApICogNCk7CiAgICAgewotICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRo
cmVhZDsKICAgICAgICAgdXBkYXRlVGV4dHVyZXMoMTAwMCk7CiAgICAgICAgIEVYUEVDVF9FUSgw
LCByb290LT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT51cGRhdGVDb3VudCgpKTsKICAgICAg
ICAgRVhQRUNUX0VRKDAsIGNoaWxkLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT51cGRhdGVD
b3VudCgpKTsKQEAgLTE0NTUsMTIgKzE0NjAsMTIgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1
bVRlc3QsIGRvbnRBbGxvY2F0ZUNvbnRlbnRzV2hlblRhcmdldFN1cmZhY2VDYW50QmVBbGxvY2EK
ICAgICAgICAgY2hpbGQtPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCktPmNsZWFyVXBkYXRlQ291
bnQoKTsKICAgICAgICAgY2hpbGQyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT5jbGVhclVw
ZGF0ZUNvdW50KCk7CiAKLSAgICAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiByb290
SW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwocm9vdC0+aWQoKSkpKTsKLSAg
ICAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBjaGlsZEltcGwoYWRvcHRQdHIobmV3
IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKGNoaWxkLT5pZCgpKSkpOwotICAgICAgICBPd25QdHI8RmFr
ZUNDVGlsZWRMYXllckltcGw+IGNoaWxkMkltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5
ZXJJbXBsKGNoaWxkMi0+aWQoKSkpKTsKLSAgICAgICAgcm9vdC0+cHVzaFByb3BlcnRpZXNUbyhy
b290SW1wbC5nZXQoKSk7Ci0gICAgICAgIGNoaWxkLT5wdXNoUHJvcGVydGllc1RvKGNoaWxkSW1w
bC5nZXQoKSk7Ci0gICAgICAgIGNoaWxkMi0+cHVzaFByb3BlcnRpZXNUbyhjaGlsZDJJbXBsLmdl
dCgpKTsKKyAgICAgICAgU2NvcGVkRmFrZUNDVGlsZWRMYXllckltcGwgcm9vdEltcGwocm9vdC0+
aWQoKSk7CisgICAgICAgIFNjb3BlZEZha2VDQ1RpbGVkTGF5ZXJJbXBsIGNoaWxkSW1wbChjaGls
ZC0+aWQoKSk7CisgICAgICAgIFNjb3BlZEZha2VDQ1RpbGVkTGF5ZXJJbXBsIGNoaWxkMkltcGwo
Y2hpbGQyLT5pZCgpKTsKKyAgICAgICAgbGF5ZXJQdXNoUHJvcGVydGllc1RvKHJvb3QuZ2V0KCks
IHJvb3RJbXBsLmdldCgpKTsKKyAgICAgICAgbGF5ZXJQdXNoUHJvcGVydGllc1RvKGNoaWxkLmdl
dCgpLCBjaGlsZEltcGwuZ2V0KCkpOworICAgICAgICBsYXllclB1c2hQcm9wZXJ0aWVzVG8oY2hp
bGQyLmdldCgpLCBjaGlsZDJJbXBsLmdldCgpKTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgMzsgKytpKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwg
MjsgKytqKQpAQCAtMTQ3MSwxMyArMTQ3Niw5IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1U
ZXN0LCBkb250QWxsb2NhdGVDb250ZW50c1doZW5UYXJnZXRTdXJmYWNlQ2FudEJlQWxsb2NhCiAg
ICAgfQogICAgIGNjTGF5ZXJUcmVlSG9zdC0+Y29tbWl0Q29tcGxldGUoKTsKIAotICAgIHsKLSAg
ICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7Ci0gICAgICAgIGNjTGF5
ZXJUcmVlSG9zdC0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigpLT5jbGVhckFsbE1lbW9yeShtX3Jl
c291cmNlUHJvdmlkZXIuZ2V0KCkpOwotICAgIH0KKyAgICB0ZXh0dXJlTWFuYWdlckNsZWFyQWxs
TWVtb3J5KGNjTGF5ZXJUcmVlSG9zdC0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigpLCBtX3Jlc291
cmNlUHJvdmlkZXIuZ2V0KCkpOwogICAgIGNjTGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKDAp
OwogICAgIGNjTGF5ZXJUcmVlSG9zdC5jbGVhcigpOwotICAgIFdlYktpdDo6V2ViQ29tcG9zaXRv
cjo6c2h1dGRvd24oKTsKIH0KIAogY2xhc3MgVHJhY2tpbmdMYXllclBhaW50ZXIgOiBwdWJsaWMg
TGF5ZXJQYWludGVyQ2hyb21pdW0gewpAQCAtMTU0MSwxMSArMTU0Miw3IEBAIFRFU1RfRihUaWxl
ZExheWVyQ2hyb21pdW1UZXN0LCBub25JbnRlZ2VyQ29udGVudHNTY2FsZUlzTm90RGlzdG9ydGVk
RHVyaW5nUGFpbnQpCiAgICAgbGF5ZXItPnRyYWNraW5nTGF5ZXJQYWludGVyKCktPnJlc2V0UGFp
bnRlZFJlY3QoKTsKIAogICAgIEVYUEVDVF9JTlRfUkVDVF9FUShJbnRSZWN0KCksIGxheWVyLT50
cmFja2luZ0xheWVyUGFpbnRlcigpLT5wYWludGVkUmVjdCgpKTsKLQotICAgIHsKLSAgICAgICAg
RGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7Ci0gICAgICAgIHVwZGF0ZVRleHR1
cmVzKCk7Ci0gICAgfQorICAgIHVwZGF0ZVRleHR1cmVzKCk7CiAKICAgICAvLyBJbnZhbGlkYXRl
IHRoZSBlbnRpcmUgbGF5ZXIgaW4gY29udGVudCBzcGFjZS4gV2hlbiBwYWludGluZywgdGhlIHJl
Y3QgZ2l2ZW4gdG8gd2Via2l0IHNob3VsZCBtYXRjaCB0aGUgbGF5ZXIncyBib3VuZHMuCiAgICAg
bGF5ZXItPmludmFsaWRhdGVDb250ZW50UmVjdChjb250ZW50UmVjdCk7CkBAIC0xNTc1LDExICsx
NTcyLDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIG5vbkludGVnZXJDb250ZW50
c1NjYWxlSXNOb3REaXN0b3J0ZWREdXJpbmdJbnZhbGkKICAgICBsYXllci0+dHJhY2tpbmdMYXll
clBhaW50ZXIoKS0+cmVzZXRQYWludGVkUmVjdCgpOwogCiAgICAgRVhQRUNUX0lOVF9SRUNUX0VR
KEludFJlY3QoKSwgbGF5ZXItPnRyYWNraW5nTGF5ZXJQYWludGVyKCktPnBhaW50ZWRSZWN0KCkp
OwotCi0gICAgewotICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsK
LSAgICAgICAgdXBkYXRlVGV4dHVyZXMoKTsKLSAgICB9CisgICAgdXBkYXRlVGV4dHVyZXMoKTsK
IAogICAgIC8vIEludmFsaWRhdGUgdGhlIGVudGlyZSBsYXllciBpbiBsYXllciBzcGFjZS4gV2hl
biBwYWludGluZywgdGhlIHJlY3QgZ2l2ZW4gdG8gd2Via2l0IHNob3VsZCBtYXRjaCB0aGUgbGF5
ZXIncyBib3VuZHMuCiAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheVJlY3QobGF5ZXJSZWN0KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161808</attachid>
            <date>2012-08-31 18:51:08 -0700</date>
            <delta_ts>2012-08-31 19:15:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95057-20120831185056.patch</filename>
            <type>text/plain</type>
            <size>55144</size>
            <attacher name="Christopher Cameron">ccameron</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3MzQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzg0Y2Y2ZGM1NDJmYWM3
ODljNGNlNGYzOWM3ODkxMTcxYjIxM2MwZC4uZmUxMTUzNTFkZWM5MTA1NDhjNWRjYzM1MjRlM2Fl
OGU5MTkyMWVmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNiBAQAorMjAxMi0wOC0zMSAgQ2hy
aXN0b3BoZXIgQ2FtZXJvbiAgPGNjYW1lcm9uQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hy
b21pdW1dIEFsbG93IGltcGwtdGhyZWFkIGRlbGV0aW9uIG9mIG9ubHkgc29tZSByZXNvdXJjZXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1MDU3CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVG93YXJkcyBh
bGxvd2luZyB0aGUgaW1wbCB0aHJlYWQgdG8gZGVsZXRlIGp1c3Qgc29tZSByZXNvdXJjZXMgKGFz
CisgICAgICAgIG9wcG9zZWQgdG8gZGVsZXRpbmcgYWxsIHJlc291cmNlcykuCisKKyAgICAgICAg
RG8gaW1wbC10aHJlYWQgZGVsZXRpb24gdGhyb3VnaCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFn
ZXIgaW5zdGVhZCBvZgorICAgICAgICBDQ1Jlc291cmNlUHJvdmlkZXIuIEluIHN1YnNlcXVlbnQg
Y2hhbmdlcyB0aGUgaW1wbCB0aHJlYWQgd2lsbCBiZSBhYmxlCisgICAgICAgIHRvIHNldCBhIHRo
cmVzaG9sZCBmb3Igd2hhdCB0byBkZWxldGUpLiBQdXQgYWxsIHN0YXRlIHRoYXQgY2FuCisgICAg
ICAgIGJlIGNvbmN1cnJlbnRseSBhY2Nlc3NlZCBieSB0aGUgbWFpbiBhbmQgaW1wbCB0aHJlYWRz
IGludG8gYSBzZXBhcmF0ZQorICAgICAgICBTaGFyZWRTdGF0ZSBzdWItY2xhc3Mgd2hpY2ggaGFz
IGEgbXV0ZXguIEFkZCBhIHNldCBvZiB0ZXh0dXJlcyB0aGF0CisgICAgICAgIGhhdmUgYmVlbiBk
ZWxldGVkIGJ5IHRoZSBpbXBsIHRocmVhZCwgYnV0IGhhdmUgbm90IGhhZCB0aGVpciByZWxhdGVk
CisgICAgICAgIHN0cnVjdHVyZXMgY2xlYXJlZCBieSB0aGUgbWFpbiB0aHJlYWQgeWV0LiBBZGQg
aGVscGVyIGZ1bmN0aW9ucyB0byBkZWxldGUKKyAgICAgICAgYSBiYWNraW5nJ3MgcmVzb3VyY2Uu
CisKKyAgICAgICAgQWxsb3cgbXVsdGlwbGUgdGV4dHVyZSBwdXJnZXMgdG8gb2NjdXIgd2l0aG91
dCBhIGNvbW1pdCBiZXR3ZWVuIHRoZW0uCisgICAgICAgIEluIENDVGhyZWFkUHJveHksIG1ha2Ug
dGhlIGFja25vd2xlZGdlbWVudCBvZiB0ZXh0dXJlIGRlbGV0aW9uIGJlIGFuCisgICAgICAgIGlu
dGVnZXIgY291bnRlciBpbnN0ZWFkIG9mIGEgYm9vbCwgYmVjYXVzZSB3ZSBtYXkgaGF2ZSBtdWx0
aXBsZQorICAgICAgICBub3QteWV0LWFja25vd2xlZGdlZCBwdXJnZXMuIFJlbW92ZSBtYW55IGlu
c3RhbmNlcyB3aGVyZSB0ZXh0dXJlIHB1cmdlcworICAgICAgICB3ZXJlIGF2b2lkZWQgd2hlbiB0
aGVyZSB3YXMgYW4gb3V0c3RhbmRpbmcgdGV4dC4KKworICAgICAgICBBZGQgdGhlIGFiaWxpdHkg
dG8gY2xlYXIgb25seSB0aGUgcmVmZXJlbmNlcyB0byBkZWxldGVkIHRleHR1cmVzIGZyb20KKyAg
ICAgICAgdGhlIHRleHR1cmUgdXBsb2FkIHF1ZXVlLgorCisgICAgICAgIEFkZCBhc3NlcnRpb25z
IHRoYXQgcmVzb3VyY2VzIGJlIGZyZWVkIHRvIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci4K
KworICAgICAgICBOZXcgdGVzdCBDQ1RleHR1cmVVcGRhdGVDb250cm9sbGVyVGVzdF9Bc3luY0Rl
bGV0aW9uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1
cmVVcGRhdGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0
dXJlOjpiYWNraW5nV2FzQXN5bmNocm9ub3VzbHlEZWxldGVkKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0OjpkZWxldGVDb250ZW50c1RleHR1cmVzUmVzb3VyY2VzT25J
bXBsVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0OjpkZXN0cm95VGV4dHVyZXNEZWxldGVkQnlJbXBsVGhyZWFkKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaDoKKyAgICAg
ICAgKENDTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3RJbXBsOjpyZWxlYXNlQ29udGVudHNUZXh0dXJlcyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorICAgICAgICAo
Q0NMYXllclRyZWVIb3N0SW1wbENsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpzZXRDb250ZW50c1RleHR1cmVzUHVyZ2VkKToKKyAgICAgICAgKENDTGF5ZXJU
cmVlSG9zdEltcGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UHJpb3JpdGl6ZWRUZXh0dXJlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRU
ZXh0dXJlOjp1cGxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmU6
OmJhY2tpbmdXYXNBc3luY2hyb25vdXNseURlbGV0ZWQpOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1
cmUuaDoKKyAgICAgICAgKENDUHJpb3JpdGl6ZWRUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nOjpCYWNraW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nOjp+QmFja2luZyk6CisgICAgICAgIChC
YWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5n
Ojpvd25lcik6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2lu
Zzo6cmVzb3VyY2VEZWxldGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjp+Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cHJpb3Jp
dGl6ZVRleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcjo6cmVxdWVzdExhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1
cmVNYW5hZ2VyOjphY3F1aXJlQmFja2luZ1RleHR1cmVJZk5lZWRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnJlZHVjZU1lbW9yeSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmRlbGV0ZUJhY2tpbmdzUmVz
b3VyY2VzT25JbXBsVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcjo6ZGVzdHJveUJhY2tpbmdzRnJlZWRCeUltcGxUaHJlYWQpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6
OmNsZWFyQWxsTWVtb3J5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJl
TWFuYWdlcjo6cmVnaXN0ZXJUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlcjo6cmV0dXJuQmFja2luZ1RleHR1cmUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGVCYWNraW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6ZGVzdHJveUJhY2tpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjphc3NlcnRJbnZh
cmlhbnRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9y
aXRpemVkVGV4dHVyZU1hbmFnZXIuaDoKKyAgICAgICAgKENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY2hlZHVs
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY2hlZHVsZXI6OmJlZ2luRnJhbWVBYm9ydGVk
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVh
ZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OnJlY3Jl
YXRlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5OjpzdG9w
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OmRlbGV0ZUNvbnRlbnRz
VGV4dHVyZXNPbkltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21taXRBbmRDb21wb3NpdGUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVRdWV1
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1RleHR1cmVVcGRhdGVRdWV1ZTo6Y2xlYXJVcGxv
YWRzVG9EZWxldGVkUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZVF1ZXVlLmg6CisgICAg
ICAgIChDQ1RleHR1cmVVcGRhdGVRdWV1ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVh
ZFByb3h5OjpDQ1RocmVhZFByb3h5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6
OmRlbGV0ZUNvbnRlbnRzVGV4dHVyZXNPbkltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpzY2hlZHVsZWRBY3Rpb25CZWdpbkZy
YW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUNvbXBsZXRlT25JbXBsVGhy
ZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OnNjaGVkdWxlZEFjdGlvbkNv
bW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpsYXllclRyZWVIb3N0Q2xv
c2VkT25JbXBsVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OnJlY3Jl
YXRlQ29udGV4dE9uSW1wbFRocmVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94
eTo6QmVnaW5GcmFtZUFuZENvbW1pdFN0YXRlOjpCZWdpbkZyYW1lQW5kQ29tbWl0U3RhdGUpOgor
ICAgICAgICAoQmVnaW5GcmFtZUFuZENvbW1pdFN0YXRlKToKKyAgICAgICAgKENDVGhyZWFkUHJv
eHkpOgorCiAyMDEyLTA4LTMwICBEaXJrIFNjaHVsemUgIDxrcml0QHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgSW50cm9kdWNlIG5ldyBDU1MgcHJvcGVydHkgZm9yIGNsaXAtcGF0aApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwppbmRleCA3ZmM0YjFlMDk5ZmE1NzViYjNlNTZkYjU0MDFhMGEzMmNhMTZh
NjY4Li5mYTczOWNjODIwZmUwNmJjNDgwOGE3Nzg2ZjhmODljN2QyMDRmNzNjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTA4LTMxICBDaHJpc3RvcGhl
ciBDYW1lcm9uICA8Y2NhbWVyb25AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
QWxsb3cgaW1wbC10aHJlYWQgZGVsZXRpb24gb2Ygb25seSBzb21lIHJlc291cmNlcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTUwNTcKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbiBDQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdCwgcmVtb3ZlIHRoZSB0ZXN0CisgICAgICAgIHJlbGVhc2VDb250ZW50c1RleHR1
cmVTaG91bGRUcmlnZ2VyQ29tbWl0IGJlY2F1c2UgaXQgaXMgbm8gbG9uZ2VyIHZhbGlkCisgICAg
ICAgIGFuZCBpcyByZWR1bmRhbnQuICBBIHJlbGVhc2VDb250ZW50c1RleHR1cmUgd2lsbCBvbmx5
IHRyaWdnZXIgYSBjb21taXQKKyAgICAgICAgaWYgdGhlIHJlbGVhc2VDb250ZW50c1RleHR1cmUg
YWN0dWFsbHkgZGVsZXRlcyBhbnkgdGV4dHVyZXMsIGFuZAorICAgICAgICBDQ0xheWVyVHJlZUhv
c3RUZXN0RXZpY3RUZXh0dXJlcyBhbHJlYWR5IHRlc3RzIHRoYXQgdGhlIGNvbW1pdCBpcworICAg
ICAgICBpc3N1ZWQgdXBvbiBldmljdGlvbi4KKworICAgICAgICBBZGQgQ0NUZXh0dXJlVXBkYXRl
Q29udHJvbGxlclRlc3RfQXN5bmNEZWxldGlvbiB0ZXN0IHRvIHZhbGlkYXRlIG5ldworICAgICAg
ICB0ZXh0dXJlIHVwbG9hZCBxdWV1ZSBiZWhhdmlvci4KKworICAgICAgICAqIHRlc3RzL0NDTGF5
ZXJUcmVlSG9zdEltcGxUZXN0LmNwcDoKKyAgICAgICAgKiB0ZXN0cy9DQ1RleHR1cmVVcGRhdGVD
b250cm9sbGVyVGVzdC5jcHA6CisKIDIwMTItMDgtMzEgIFcuIEphbWVzIE1hY0xlYW4gIDx3am1h
Y2xlYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gTWFrZSBsaW5rIGhpZ2hs
aWdodGVyIHVzZSBzYW1lIG5vZGUgc2VsZWN0aW9uIGNyaXRlcmlhIGFzIENocm9taXVtIGZvciBB
bmRyb2lkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oCmluZGV4IDFhZDYxYzhkOGNhNDY1
M2MxZjIwYjhjZWU0MjYyYzc3MWU0YmUyMWMuLjMzMThhZGI0MWJhYWVjMDBlMmU3MDNlYjBmNDQy
Zjk1MWMxYjQyNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgKQEAgLTQ5LDYgKzQ5
LDcgQEAgcHVibGljOgogCiAgICAgICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlKiB0ZXh0dXJlKCkg
eyByZXR1cm4gbV90ZXh0dXJlLmdldCgpOyB9CiAgICAgICAgIHZvaWQgc3dhcFRleHR1cmVXaXRo
KE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZT4mIHRleHR1cmUpIHsgbV90ZXh0dXJlLnN3YXAo
dGV4dHVyZSk7IH0KKyAgICAgICAgdmlydHVhbCBib29sIGJhY2tpbmdXYXNBc3luY2hyb25vdXNs
eURlbGV0ZWQoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmUtPmJhY2tpbmdXYXNBc3luY2hyb25v
dXNseURlbGV0ZWQoKTsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVJlY3QoY29uc3Qg
SW50UmVjdCYgLyogc291cmNlUmVjdCAqLywgQ0NSZW5kZXJpbmdTdGF0cyYpIHsgfQogICAgICAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlUmVjdChDQ1Jlc291cmNlUHJvdmlkZXIqLCBjb25zdCBJbnRS
ZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRTaXplJiBkZXN0T2Zmc2V0KSA9IDA7CiAgICAgcHJv
dGVjdGVkOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggMDg0NzRhMWQzN2Vk
MTdkNmNkM2U5OTY5MzJjYmNjNWE2YTU4OWQxMC4uZGQxMmFjZDMwOGMzNjY2ODExNmZkNDE4YjMz
MTQ3YmNmODVhZDgwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC0xOTMs
MTMgKzE5MywyMSBAQCBDQ0xheWVyVHJlZUhvc3Q6OlJlY3JlYXRlUmVzdWx0IENDTGF5ZXJUcmVl
SG9zdDo6cmVjcmVhdGVDb250ZXh0KCkKICAgICByZXR1cm4gUmVjcmVhdGVGYWlsZWRBbmRHYXZl
VXA7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0OjpkZWxldGVDb250ZW50c1RleHR1cmVzT25J
bXBsVGhyZWFkKENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlcikKK3ZvaWQgQ0NM
YXllclRyZWVIb3N0OjpkZWxldGVBbGxDb250ZW50c1RleHR1cmVzT25JbXBsVGhyZWFkKENDUmVz
b3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlcikKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6
aXNJbXBsVGhyZWFkKCkpOwogICAgIGlmIChtX3JlbmRlcmVySW5pdGlhbGl6ZWQpCiAgICAgICAg
IG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+Y2xlYXJBbGxNZW1vcnkocmVzb3VyY2VQcm92aWRl
cik7CiB9CiAKK2Jvb2wgQ0NMYXllclRyZWVIb3N0OjpyZWR1Y2VDb250ZW50c1RleHR1cmVzTWVt
b3J5T25JbXBsVGhyZWFkKENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlcikKK3sK
KyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOworICAgIGlmIChtX3JlbmRlcmVy
SW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybiBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnJl
ZHVjZU1lbW9yeU9uSW1wbFRocmVhZChyZXNvdXJjZVByb3ZpZGVyKTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjphY3F1aXJlTGF5ZXJUZXh0dXJlcygpCiB7
CiAgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKQEAgLTQxNCwxMSArNDIyLDEy
IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKICAgICBt
X3Byb3h5LT5zZXRWaXNpYmxlKHZpc2libGUpOwogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdDo6
ZXZpY3RBbGxDb250ZW50VGV4dHVyZXMoKQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZGVzdHJv
eUNvbnRlbnRzVGV4dHVyZXNFdmljdGVkQnlJbXBsVGhyZWFkKGludCogcHVyZ2VDb3VudGVyQWNr
KQogewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKG1f
Y29udGVudHNUZXh0dXJlTWFuYWdlci5nZXQoKSk7Ci0gICAgbV9jb250ZW50c1RleHR1cmVNYW5h
Z2VyLT5hbGxCYWNraW5nVGV4dHVyZXNXZXJlRGVsZXRlZCgpOworICAgIG1fY29udGVudHNUZXh0
dXJlTWFuYWdlci0+ZGVzdHJveUV2aWN0ZWRCYWNraW5ncyhwdXJnZUNvdW50ZXJBY2spOwogfQog
CiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c3RhcnRQYWdlU2NhbGVBbmltYXRpb24oY29uc3QgSW50
U2l6ZSYgdGFyZ2V0UG9zaXRpb24sIGJvb2wgdXNlQW5jaG9yLCBmbG9hdCBzY2FsZSwgZG91Ymxl
IGR1cmF0aW9uU2VjKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAppbmRleCA3NDI3ODhjNzA2
NzgzYmI2MzhmNTNkNjI2ZjJkYzVjYzFlM2E1ODBhLi5kYzI1YWQ0MWY5NWM1NTk0MDkyMWI5NzQ3
ZGI4ZjBhNGRjMzJlOGUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApAQCAtMTU0LDcg
KzE1NCw2IEBAIHB1YmxpYzoKICAgICBSZWNyZWF0ZVJlc3VsdCByZWNyZWF0ZUNvbnRleHQoKTsK
ICAgICB2b2lkIGRpZENvbW1pdEFuZERyYXdGcmFtZSgpIHsgbV9jbGllbnQtPmRpZENvbW1pdEFu
ZERyYXdGcmFtZSgpOyB9CiAgICAgdm9pZCBkaWRDb21wbGV0ZVN3YXBCdWZmZXJzKCkgeyBtX2Ns
aWVudC0+ZGlkQ29tcGxldGVTd2FwQnVmZmVycygpOyB9Ci0gICAgdm9pZCBkZWxldGVDb250ZW50
c1RleHR1cmVzT25JbXBsVGhyZWFkKENDUmVzb3VyY2VQcm92aWRlciopOwogICAgIHZpcnR1YWwg
dm9pZCBhY3F1aXJlTGF5ZXJUZXh0dXJlcygpOwogICAgIC8vIFJldHVybnMgZmFsc2UgaWYgd2Ug
c2hvdWxkIGFib3J0IHRoaXMgZnJhbWUgZHVlIHRvIGluaXRpYWxpemF0aW9uIGZhaWx1cmUuCiAg
ICAgYm9vbCBpbml0aWFsaXplUmVuZGVyZXJJZk5lZWRlZCgpOwpAQCAtMjEyLDExICsyMTEsMTYg
QEAgcHVibGljOgogCiAgICAgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyKiBjb250ZW50c1Rl
eHR1cmVNYW5hZ2VyKCkgY29uc3Q7CiAKLSAgICAvLyBUaGlzIHdpbGwgY2F1c2UgY29udGVudHMg
dGV4dHVyZSBtYW5hZ2VyIHRvIGV2aWN0IGFsbCB0ZXh0dXJlcywgYnV0Ci0gICAgLy8gd2l0aG91
dCBkZWxldGluZyB0aGVtLiBUaGlzIGhhcHBlbnMgYWZ0ZXIgYWxsIGNvbnRlbnQgdGV4dHVyZXMg
aGF2ZQotICAgIC8vIGFscmVhZHkgYmVlbiBkZWxldGVkIG9uIGltcGwsIGFmdGVyIGdldHRpbmcg
YSAwIGFsbG9jYXRpb24gbGltaXQuCi0gICAgLy8gU2V0IGR1cmluZyBhIGNvbW1pdCwgYnV0IGJl
Zm9yZSB1cGRhdGVMYXllcnMuCi0gICAgdm9pZCBldmljdEFsbENvbnRlbnRUZXh0dXJlcygpOwor
ICAgIHZvaWQgZGVsZXRlQWxsQ29udGVudHNUZXh0dXJlc09uSW1wbFRocmVhZChDQ1Jlc291cmNl
UHJvdmlkZXIqKTsKKworICAgIC8vIFRoaXMgd2lsbCBjYXVzZSBjb250ZW50cyB0ZXh0dXJlIG1h
bmFnZXIgdG8gZnJlZSBzb21lIHJlc291cmNlcyB1c2VkCisgICAgLy8gYnkgdGV4dHVyZXMsIGJ1
dCB3aWxsIG5vdCBkZWxldGUgdGhlIHRleHR1cmUgYmFja2luZ3Mgb2JqZWN0cy4gVGhlCisgICAg
Ly8gZnVuY3Rpb24gcmV0dXJucyB0cnVlIGlmIHNvbWUgcmVzb3VyY2VzIHdlcmUgaW5kZWVkIGRl
c3Ryb3llZC4KKyAgICBib29sIHJlZHVjZUNvbnRlbnRzVGV4dHVyZXNNZW1vcnlPbkltcGxUaHJl
YWQoQ0NSZXNvdXJjZVByb3ZpZGVyKik7CisKKyAgICAvLyBUaGlzIHdpbGwgZGVzdHJveSB0aGUg
YmFja2luZ3MgdGhhdCBoYWQgdGhlaXIgR1BVIHJlc291cmNlcyBmcmVlZAorICAgIC8vIGJ5IGRl
bGV0ZUNvbnRlbnRzVGV4dHVyZXNSZXNvdXJjZXNPbkltcGxUaHJlYWQuCisgICAgdm9pZCBkZXN0
cm95Q29udGVudHNUZXh0dXJlc0V2aWN0ZWRCeUltcGxUaHJlYWQoaW50KiBwdXJnZUNvdW50ZXJB
Y2spOwogCiAgICAgYm9vbCB2aXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV92aXNpYmxlOyB9CiAg
ICAgdm9pZCBzZXRWaXNpYmxlKGJvb2wpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmNwcAppbmRleCBmY2RkMjhiY2U4NjViNWU2MDFkZjUxOGI1ZTNjNjgxOTczNDU3YjFjLi5k
YWE0ODFhNGJiMDI4YjE3MTc2M2UxMzhmOWMxMzc3MWU0ZDE2YzIyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtNTI1LDExICs1MjUsNyBAQCBib29sIENDTGF5
ZXJUcmVlSG9zdEltcGw6OnByZXBhcmVUb0RyYXcoRnJhbWVEYXRhJiBmcmFtZSkKIAogdm9pZCBD
Q0xheWVyVHJlZUhvc3RJbXBsOjpyZWxlYXNlQ29udGVudHNUZXh0dXJlcygpCiB7Ci0gICAgaWYg
KG1fY29udGVudHNUZXh0dXJlc1B1cmdlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fcmVzb3Vy
Y2VQcm92aWRlci0+ZGVsZXRlT3duZWRSZXNvdXJjZXMoQ0NSZW5kZXJlcjo6Q29udGVudFBvb2wp
OwotICAgIG1fY29udGVudHNUZXh0dXJlc1B1cmdlZCA9IHRydWU7Ci0gICAgbV9jbGllbnQtPnNl
dE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCk7CisgICAgbV9jbGllbnQtPnJlZHVjZUNvbnRlbnRz
VGV4dHVyZXNNZW1vcnlPbkltcGxUaHJlYWQoKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpzZXRNZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlcyhzaXplX3QgYnl0ZXMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKaW5kZXggYjNkMDdhYzI5YzBhODA3OGYwMTdjOGUx
ODkzMGJhMDA3MjkwNjM4NC4uMjU0MmY4MGRmOTdlNmYxNTI4ZTIzYTEwOTZiOGY3NTkxMzJjY2Ri
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApAQCAtNjAsNiArNjAsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCkg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgcG9zdEFuaW1hdGlvbkV2ZW50c1RvTWFpblRocmVhZE9uSW1wbFRo
cmVhZChQYXNzT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiwgZG91YmxlIHdhbGxDbG9j
a1RpbWUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVkdWNlQ29udGVudHNUZXh0dXJlc01lbW9y
eU9uSW1wbFRocmVhZCgpID0gMDsKIH07CiAKIC8vIENDTGF5ZXJUcmVlSG9zdEltcGwgb3ducyB0
aGUgQ0NMYXllckltcGwgdHJlZSBhcyB3ZWxsIGFzIGFzc29jaWF0ZWQgcmVuZGVyaW5nIHN0YXRl
CkBAIC0xNTksNyArMTYwLDcgQEAgcHVibGljOgogICAgIGludCBzb3VyY2VGcmFtZU51bWJlcigp
IGNvbnN0IHsgcmV0dXJuIG1fc291cmNlRnJhbWVOdW1iZXI7IH0KICAgICB2b2lkIHNldFNvdXJj
ZUZyYW1lTnVtYmVyKGludCBmcmFtZU51bWJlcikgeyBtX3NvdXJjZUZyYW1lTnVtYmVyID0gZnJh
bWVOdW1iZXI7IH0KIAotICAgIGJvb2wgY29udGVudHNUZXh0dXJlc1B1cmdlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fY29udGVudHNUZXh0dXJlc1B1cmdlZDsgfQorICAgIHZvaWQgc2V0Q29udGVudHNU
ZXh0dXJlc1B1cmdlZCgpIHsgbV9jb250ZW50c1RleHR1cmVzUHVyZ2VkID0gdHJ1ZTsgfQogICAg
IHZvaWQgcmVzZXRDb250ZW50c1RleHR1cmVzUHVyZ2VkKCkgeyBtX2NvbnRlbnRzVGV4dHVyZXNQ
dXJnZWQgPSBmYWxzZTsgfQogICAgIHNpemVfdCBtZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlcygp
IGNvbnN0IHsgcmV0dXJuIG1fbWVtb3J5QWxsb2NhdGlvbkxpbWl0Qnl0ZXM7IH0KIApAQCAtMjgy
LDYgKzI4MywxMCBAQCBwcml2YXRlOgogICAgIEludFNpemUgbV9kZXZpY2VWaWV3cG9ydFNpemU7
CiAgICAgZmxvYXQgbV9kZXZpY2VTY2FsZUZhY3RvcjsKICAgICBib29sIG1fdmlzaWJsZTsKKwor
ICAgIC8vIFNldCB3aGVuIHRoZSBpbXBsIHRocmVhZCBkZWxldGVzIHRleHR1cmVzLCB1bi1zZXQg
d2hlbiB0aGUgaW1wbCdzIGxheWVyIHRyZWUKKyAgICAvLyBpcyBrbm93biB0byBub3QgcmVmZXJl
bmNlIGFueSBkZWxldGVkIHJlc291cmNlcy4gVXNlZCB0byBwcmV2ZW50IGRyYXdpbmcKKyAgICAv
LyB3aXRoIGRlbGV0ZWQgcmVzb3VyY2VzLgogICAgIGJvb2wgbV9jb250ZW50c1RleHR1cmVzUHVy
Z2VkOwogICAgIHNpemVfdCBtX21lbW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9y
aXRpemVkVGV4dHVyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZS5jcHAKaW5kZXggZDlmNjhhZjBhZTBiOTkyODEz
M2EyMzJkNzQxNjkyNDc2MTIwNmRkYi4uZGMwOGNlNzRmOTI5ZDdhNDQ0NmJjZmE2NmUzOWViOGI5
MDRiYjliOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlLmNwcApAQCAt
MjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmgi
CiAjaW5jbHVkZSAiQ0NQcmlvcml0eUNhbGN1bGF0b3IuaCIKKyNpbmNsdWRlICJDQ1Byb3h5Lmgi
CiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpAQCAtMTEwLDkg
KzExMSwxNyBAQCB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlOjp1cGxvYWQoQ0NSZXNvdXJjZVBy
b3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyLAogICAgIGlmIChtX2lzQWJvdmVQcmlvcml0eUN1dG9m
ZikKICAgICAgICAgYWNxdWlyZUJhY2tpbmdUZXh0dXJlKHJlc291cmNlUHJvdmlkZXIpOwogICAg
IEFTU0VSVChtX2JhY2tpbmcpOworICAgIEFTU0VSVCghYmFja2luZ1dhc0FzeW5jaHJvbm91c2x5
RGVsZXRlZCgpKTsKICAgICByZXNvdXJjZVByb3ZpZGVyLT51cGxvYWQocmVzb3VyY2VJZCgpLCBp
bWFnZSwgaW1hZ2VSZWN0LCBzb3VyY2VSZWN0LCBkZXN0T2Zmc2V0KTsKIH0KIAorYm9vbCBDQ1By
aW9yaXRpemVkVGV4dHVyZTo6YmFja2luZ1dhc0FzeW5jaHJvbm91c2x5RGVsZXRlZCgpIGNvbnN0
Cit7CisgICAgaWYgKG1fYmFja2luZykKKyAgICAgICAgcmV0dXJuIG1fYmFja2luZy0+cmVzb3Vy
Y2VEZWxldGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIENDUHJpb3JpdGl6ZWRU
ZXh0dXJlOjpsaW5rKEJhY2tpbmcqIGJhY2tpbmcpCiB7CiAgICAgQVNTRVJUKGJhY2tpbmcpOwpA
QCAtMTM5LDQgKzE0OCwyNSBAQCB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpzZXRUb1NlbGZN
YW5hZ2VkTWVtb3J5UGxhY2Vob2xkZXIoc2l6ZV90IGJ5dGVzKQogICAgIG1fYnl0ZXMgPSBieXRl
czsKIH0KIAorQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJjZUlkIENDUHJpb3JpdGl6ZWRUZXh0
dXJlOjpCYWNraW5nOjppZCgpCit7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgp
KTsKKyAgICByZXR1cm4gbV90ZXh0dXJlLmlkKCk7Cit9CisKK2Jvb2wgQ0NQcmlvcml0aXplZFRl
eHR1cmU6OkJhY2tpbmc6OnJlc291cmNlRGVsZXRlZCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKEND
UHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKyAgICByZXR1cm4gbV9yZXNvdXJjZURlbGV0ZWQ7Cit9
CisKK3ZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmU6OkJhY2tpbmc6OmRlbGV0ZVJlc291cmNlKEND
UmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlcikKK3sKKyAgICBBU1NFUlQoQ0NQcm94
eTo6aXNJbXBsVGhyZWFkKCkpOworICAgIEFTU0VSVChyZXNvdXJjZVByb3ZpZGVyKTsKKyAgICBB
U1NFUlQoIW1fcmVzb3VyY2VEZWxldGVkKTsKKyAgICByZXNvdXJjZVByb3ZpZGVyLT5kZWxldGVS
ZXNvdXJjZShtX3RleHR1cmUuaWQoKSk7CisgICAgbV9yZXNvdXJjZURlbGV0ZWQgPSB0cnVlOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRl
eHR1cmUuaAppbmRleCAzNzg5ZDdmMjY5YTNkN2U1MTk1YTg5MmRkZDM3NmRhZTYxOGQyYjBlLi5j
MGZjYTNlN2U2MTQ4MzkzNzU5MWI3MzhkNjE5YWIxZWEyNTE2NDQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4
dHVyZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUHJpb3JpdGl6ZWRUZXh0dXJlLmgKQEAgLTg4LDYgKzg4LDggQEAgcHVibGljOgogICAgIC8v
IFVwbG9hZHMgcGl4ZWxzIGludG8gdGhlIGJhY2tpbmcgcmVzb3VyY2UuIFRoaXMgZnVuY3Rpb25z
IHdpbGwgYXF1aXJlIHRoZSBiYWNraW5nIGlmIG5lZWRlZC4KICAgICB2b2lkIHVwbG9hZChDQ1Jl
c291cmNlUHJvdmlkZXIqLCBjb25zdCB1aW50OF90KiBpbWFnZSwgY29uc3QgSW50UmVjdCYgaW1h
Z2VSZWN0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRTaXplJiBkZXN0T2Zm
c2V0KTsKIAorICAgIGJvb2wgYmFja2luZ1dhc0FzeW5jaHJvbm91c2x5RGVsZXRlZCgpIGNvbnN0
OworCiAgICAgQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJjZUlkIHJlc291cmNlSWQoKSBjb25z
dDsKIAogICAgIC8vIFNlbGYtbWFuYWdlZCB0ZXh0dXJlcyBhcmUgYWNjb3VudGVkIGZvciB3aGVu
IHByaW9yaXRpemluZyBvdGhlciB0ZXh0dXJlcywKQEAgLTEwMSwxNiArMTAzLDI4IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdl
cjsKIAotICAgIGNsYXNzIEJhY2tpbmcgOiBwdWJsaWMgQ0NUZXh0dXJlIHsKKyAgICBjbGFzcyBC
YWNraW5nIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQmFja2luZyk7CiAgICAgcHVi
bGljOgogICAgICAgICBCYWNraW5nKHVuc2lnbmVkIGlkLCBJbnRTaXplIHNpemUsIEdDM0RlbnVt
IGZvcm1hdCkKLSAgICAgICAgICAgIDogQ0NUZXh0dXJlKGlkLCBzaXplLCBmb3JtYXQpLCBtX293
bmVyKDApIHsgfQotICAgICAgICB+QmFja2luZygpIHsgQVNTRVJUKCFtX293bmVyKTsgfQorICAg
ICAgICAgICAgOiBtX3RleHR1cmUoaWQsIHNpemUsIGZvcm1hdCksIG1fcmVzb3VyY2VEZWxldGVk
KGZhbHNlKSwgbV9vd25lcigwKSB7IH0KKyAgICAgICAgfkJhY2tpbmcoKSB7IEFTU0VSVCghbV9v
d25lciAmJiBtX3Jlc291cmNlRGVsZXRlZCk7IH0KKworICAgICAgICBDQ1ByaW9yaXRpemVkVGV4
dHVyZSogb3duZXIoKSBjb25zdCB7IHJldHVybiBtX293bmVyOyB9CisKKyAgICAgICAgQ0NSZXNv
dXJjZVByb3ZpZGVyOjpSZXNvdXJjZUlkIGlkKCk7CisgICAgICAgIGNvbnN0IEludFNpemUmIHNp
emUoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmUuc2l6ZSgpOyB9CisgICAgICAgIEdDM0RlbnVt
IGZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZS5mb3JtYXQoKTsgfQorICAgICAgICBz
aXplX3QgYnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmUuYnl0ZXMoKTsgfQorCisgICAg
ICAgIHZvaWQgZGVsZXRlUmVzb3VyY2UoQ0NSZXNvdXJjZVByb3ZpZGVyKik7CisgICAgICAgIGJv
b2wgcmVzb3VyY2VEZWxldGVkKCkgY29uc3Q7CiAKLSAgICAgICAgQ0NQcmlvcml0aXplZFRleHR1
cmUqIG93bmVyKCkgeyByZXR1cm4gbV9vd25lcjsgfQogICAgIHByaXZhdGU6CiAgICAgICAgIGZy
aWVuZCBjbGFzcyBDQ1ByaW9yaXRpemVkVGV4dHVyZTsKKyAgICAgICAgZnJpZW5kIGNsYXNzIEND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjsKKyAgICAgICAgQ0NUZXh0dXJlIG1fdGV4dHVyZTsK
KyAgICAgICAgYm9vbCBtX3Jlc291cmNlRGVsZXRlZDsKICAgICAgICAgQ0NQcmlvcml0aXplZFRl
eHR1cmUqIG1fb3duZXI7CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3Jp
dGl6ZWRUZXh0dXJlTWFuYWdlci5jcHAKaW5kZXggODNkNjhhZDA3MWVkYjY1ODI4Mjg4OWFiYmIw
MDdmNTc4ZWJhMjQ2MC4uNWYwNDEyZWZiZjgwM2RmMjZjMGIzYTZjNTAwNDYxZDBmZDViNDQzZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuY3Bw
CkBAIC01MCwxMCArNTAsMTEgQEAgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjp+Q0NQcmlv
cml0aXplZFRleHR1cmVNYW5hZ2VyKCkKICAgICB3aGlsZSAobV90ZXh0dXJlcy5zaXplKCkgPiAw
KQogICAgICAgICB1bnJlZ2lzdGVyVGV4dHVyZSgqbV90ZXh0dXJlcy5iZWdpbigpKTsKIAotICAg
IC8vIEVhY2ggcmVtYWluaW5nIGJhY2tpbmcgaXMgYSBsZWFrZWQgb3BlbmdsIHRleHR1cmUuIFdl
IGRvbid0IGhhdmUgdGhlIHJlc291cmNlUHJvdmlkZXIKLSAgICAvLyB0byBkZWxldGUgdGhlIHRl
eHR1cmVzIGF0IHRoaXMgdGltZSBzbyBjbGVhck1lbW9yeSgpIG5lZWRzIHRvIGJlIGNhbGxlZCBi
ZWZvcmUgdGhpcy4KLSAgICB3aGlsZSAobV9iYWNraW5ncy5zaXplKCkgPiAwKQotICAgICAgICBk
ZXN0cm95QmFja2luZygqbV9iYWNraW5ncy5iZWdpbigpLCAwKTsKKyAgICAvLyBSZW1vdmUgYW55
IGJhY2tpbmdzIHRoYXQgd2VyZSBldmljdGVkLgorICAgIGNsZWFyRXZpY3RlZEJhY2tpbmdzKDAp
OworCisgICAgLy8gRWFjaCByZW1haW5pbmcgYmFja2luZyBpcyByZWFsIG1lbW9yeSBsZWFrLiBU
aGlzIHNob3VsZG4ndCBoYXBwZW4uCisgICAgQVNTRVJUKG1fYmFja2luZ3MuaXNFbXB0eSgpKTsK
IH0KIAogdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnByaW9yaXRpemVUZXh0dXJl
cygpCkBAIC0xNzYsNiArMTc3LDcgQEAgYm9vbCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6
OnJlcXVlc3RMYXRlKENDUHJpb3JpdGl6ZWRUZXh0dXJlKiB0ZXh0dXJlKQogdm9pZCBDQ1ByaW9y
aXRpemVkVGV4dHVyZU1hbmFnZXI6OmFjcXVpcmVCYWNraW5nVGV4dHVyZUlmTmVlZGVkKENDUHJp
b3JpdGl6ZWRUZXh0dXJlKiB0ZXh0dXJlLCBDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJv
dmlkZXIpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpICYmIENDUHJveHk6
OmlzTWFpblRocmVhZEJsb2NrZWQoKSk7CisgICAgQVNTRVJUKHJlc291cmNlUHJvdmlkZXIpOwog
ICAgIEFTU0VSVCghdGV4dHVyZS0+aXNTZWxmTWFuYWdlZCgpKTsKICAgICBBU1NFUlQodGV4dHVy
ZS0+aXNBYm92ZVByaW9yaXR5Q3V0b2ZmKCkpOwogICAgIGlmICh0ZXh0dXJlLT5iYWNraW5nKCkg
fHwgIXRleHR1cmUtPmlzQWJvdmVQcmlvcml0eUN1dG9mZigpKQpAQCAtMTg4LDYgKzE5MCw4IEBA
IHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjphY3F1aXJlQmFja2luZ1RleHR1cmVJ
Zk5lZWRlZChDQ1ByaW9yaXRpemVkVGV4CiAgICAgZm9yIChCYWNraW5nU2V0OjppdGVyYXRvciBp
dCA9IG1fYmFja2luZ3MuYmVnaW4oKTsgaXQgIT0gbV9iYWNraW5ncy5lbmQoKTsgKytpdCkgewog
ICAgICAgICBpZiAoKCppdCktPm93bmVyKCkgJiYgKCppdCktPm93bmVyKCktPmlzQWJvdmVQcmlv
cml0eUN1dG9mZigpKQogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICgoKml0KS0+cmVz
b3VyY2VEZWxldGVkKCkpCisgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKCgqaXQp
LT5zaXplKCkgPT0gdGV4dHVyZS0+c2l6ZSgpICYmICgqaXQpLT5mb3JtYXQoKSA9PSB0ZXh0dXJl
LT5mb3JtYXQoKSkgewogICAgICAgICAgICAgYmFja2luZyA9ICgqaXQpOwogICAgICAgICAgICAg
YnJlYWs7CkBAIC0xOTgsNiArMjAyLDcgQEAgdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFn
ZXI6OmFjcXVpcmVCYWNraW5nVGV4dHVyZUlmTmVlZGVkKENDUHJpb3JpdGl6ZWRUZXgKICAgICBp
ZiAoIWJhY2tpbmcpIHsKICAgICAgICAgcmVkdWNlTWVtb3J5KG1fbWVtb3J5QXZhaWxhYmxlQnl0
ZXMgLSB0ZXh0dXJlLT5ieXRlcygpLCByZXNvdXJjZVByb3ZpZGVyKTsKICAgICAgICAgYmFja2lu
ZyA9IGNyZWF0ZUJhY2tpbmcodGV4dHVyZS0+c2l6ZSgpLCB0ZXh0dXJlLT5mb3JtYXQoKSwgcmVz
b3VyY2VQcm92aWRlcik7CisgICAgICAgIG1fZXZpY3Rpb25TdGF0ZS5hZGRCYWNraW5nT25JbXBs
VGhyZWFkKGJhY2tpbmcpOwogICAgIH0KIAogICAgIC8vIE1vdmUgdGhlIHVzZWQgYmFja2luZyB0
ZXh0dXJlIHRvIHRoZSBlbmQgb2YgdGhlIGV2aWN0aW9uIGxpc3QuCkBAIC0yMTEsMTUgKzIxNiwx
NyBAQCB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6YWNxdWlyZUJhY2tpbmdUZXh0
dXJlSWZOZWVkZWQoQ0NQcmlvcml0aXplZFRleAogdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI6OnJlZHVjZU1lbW9yeShzaXplX3QgbGltaXRCeXRlcywgQ0NSZXNvdXJjZVByb3ZpZGVy
KiByZXNvdXJjZVByb3ZpZGVyKQogewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQo
KSAmJiBDQ1Byb3h5Ojppc01haW5UaHJlYWRCbG9ja2VkKCkpOworICAgIEFTU0VSVChyZXNvdXJj
ZVByb3ZpZGVyKTsKICAgICBpZiAobWVtb3J5VXNlQnl0ZXMoKSA8PSBsaW1pdEJ5dGVzKQogICAg
ICAgICByZXR1cm47CiAgICAgLy8gRGVzdHJveSBiYWNraW5ncyB1bnRpbCB3ZSBhcmUgYmVsb3cg
dGhlIGxpbWl0LAogICAgIC8vIG9yIHVudGlsIGFsbCBiYWNraW5ncyByZW1haW5pbmcgYXJlIGFi
b3ZlIHRoZSBjdXRvZmYuCiAgICAgd2hpbGUgKG1lbW9yeVVzZUJ5dGVzKCkgPiBsaW1pdEJ5dGVz
ICYmIG1fYmFja2luZ3Muc2l6ZSgpID4gMCkgewotICAgICAgICBCYWNraW5nU2V0OjppdGVyYXRv
ciBpdCA9IG1fYmFja2luZ3MuYmVnaW4oKTsKLSAgICAgICAgaWYgKCgqaXQpLT5vd25lcigpICYm
ICgqaXQpLT5vd25lcigpLT5pc0Fib3ZlUHJpb3JpdHlDdXRvZmYoKSkKKyAgICAgICAgQ0NQcmlv
cml0aXplZFRleHR1cmU6OkJhY2tpbmcqIGJhY2tpbmcgPSAqbV9iYWNraW5ncy5iZWdpbigpOwor
ICAgICAgICBpZiAoYmFja2luZy0+b3duZXIoKSAmJiBiYWNraW5nLT5vd25lcigpLT5pc0Fib3Zl
UHJpb3JpdHlDdXRvZmYoKSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZXN0cm95QmFj
a2luZygoKml0KSwgcmVzb3VyY2VQcm92aWRlcik7CisgICAgICAgIG1fZXZpY3Rpb25TdGF0ZS5y
ZW1vdmVCYWNraW5nT25JbXBsVGhyZWFkKGJhY2tpbmcsIHJlc291cmNlUHJvdmlkZXIpOworICAg
ICAgICBkZXN0cm95QmFja2luZyhiYWNraW5nKTsKICAgICB9CiB9CiAKQEAgLTI0NiwyMyArMjUz
LDM5IEBAIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpyZWR1Y2VNZW1vcnkoQ0NS
ZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpCiAgICAgcmVkdWNlTWVtb3J5KG1lbW9yeVVz
ZUJ5dGVzKCkgLSAod2FzdGVkTWVtb3J5IC0gdGVuUGVyY2VudE9mTWVtb3J5KSwgcmVzb3VyY2VQ
cm92aWRlcik7CiB9CiAKLXZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjbGVhckFs
bE1lbW9yeShDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIpCitib29sIENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmVkdWNlTWVtb3J5T25JbXBsVGhyZWFkKENDUmVzb3Vy
Y2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlcikKIHsKLSAgICAvLyBVbmxpbmsgYW5kIGRlc3Ry
b3kgYWxsIGJhY2tpbmcgdGV4dHVyZXMuCi0gICAgd2hpbGUgKG1fYmFja2luZ3Muc2l6ZSgpID4g
MCkgewotICAgICAgICBCYWNraW5nU2V0OjppdGVyYXRvciBpdCA9IG1fYmFja2luZ3MuYmVnaW4o
KTsKLSAgICAgICAgaWYgKCgqaXQpLT5vd25lcigpKQotICAgICAgICAgICAgKCppdCktPm93bmVy
KCktPnVubGluaygpOwotICAgICAgICBkZXN0cm95QmFja2luZygoKml0KSwgcmVzb3VyY2VQcm92
aWRlcik7Ci0gICAgfQorICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAg
QVNTRVJUKHJlc291cmNlUHJvdmlkZXIpOworICAgIHJldHVybiBtX2V2aWN0aW9uU3RhdGUuZXZp
Y3RCYWNraW5nc1Jlc291cmNlc09uSW1wbFRocmVhZChyZXNvdXJjZVByb3ZpZGVyKTsKK30KKwor
dm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmRlc3Ryb3lFdmljdGVkQmFja2luZ3Mo
aW50KiBldmljdGlvbkNvdW50ZXJBY2spCit7CisgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRo
cmVhZCgpKTsKKyAgICBjbGVhckV2aWN0ZWRCYWNraW5ncyhldmljdGlvbkNvdW50ZXJBY2spOwog
fQogCi12b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6YWxsQmFja2luZ1RleHR1cmVz
V2VyZURlbGV0ZWQoKQordm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNsZWFyRXZp
Y3RlZEJhY2tpbmdzKGludCogZXZpY3Rpb25Db3VudGVyQWNrKQogewotICAgIC8vIFNhbWUgYXMg
Y2xlYXJBbGxNZW1vcnksIGV4Y2VwdCBhbGwgb3VyIHRleHR1cmVzIHdlcmUgYWxyZWFkeQotICAg
IC8vIGRlbGV0ZWQgZXh0ZXJuYWxseSwgc28gd2UgZG9uJ3QgZGVsZXRlIHRoZW0uIFBhc3Npbmcg
bm8KLSAgICAvLyByZXNvdXJjZVByb3ZpZGVyIHJlc3VsdHMgaW4gbGVha2luZyB0aGUgKG5vdyBp
bnZhbGlkKSB0ZXh0dXJlIGlkcy4KLSAgICBjbGVhckFsbE1lbW9yeSgwKTsKKyAgICBCYWNraW5n
U2V0IGV2aWN0ZWRCYWNraW5nczsKKyAgICBtX2V2aWN0aW9uU3RhdGUuZ2V0QW5kQ2xlYXJFdmlj
dGVkQmFja2luZ3MoZXZpY3RlZEJhY2tpbmdzLCBldmljdGlvbkNvdW50ZXJBY2spOworICAgIGZv
ciAoQmFja2luZ1NldDo6aXRlcmF0b3IgaXQgPSBldmljdGVkQmFja2luZ3MuYmVnaW4oKTsgaXQg
IT0gZXZpY3RlZEJhY2tpbmdzLmVuZCgpOyArK2l0KQorICAgICAgICBkZXN0cm95QmFja2luZygo
Kml0KSk7Cit9CisKK2Jvb2wgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjppc0V2aWN0aW9u
Q291bnRlckFja1VwVG9EYXRlKGludCBldmljdGlvbkNvdW50ZXJBY2spCit7CisgICAgQVNTRVJU
KENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKyAgICByZXR1cm4gbV9ldmljdGlvblN0YXRlLmlz
RXZpY3Rpb25Db3VudGVyQWNrVXBUb0RhdGVPbkltcGxUaHJlYWQoZXZpY3Rpb25Db3VudGVyQWNr
KTsKK30KKwordm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNsZWFyQWxsTWVtb3J5
KENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlcikKK3sKKyAgICBBU1NFUlQoQ0NQ
cm94eTo6aXNJbXBsVGhyZWFkKCkgJiYgQ0NQcm94eTo6aXNNYWluVGhyZWFkQmxvY2tlZCgpKTsK
KyAgICBBU1NFUlQocmVzb3VyY2VQcm92aWRlcik7CisgICAgcmVkdWNlTWVtb3J5T25JbXBsVGhy
ZWFkKHJlc291cmNlUHJvdmlkZXIpOworICAgIGNsZWFyRXZpY3RlZEJhY2tpbmdzKDApOwogfQog
CiB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmVnaXN0ZXJUZXh0dXJlKENDUHJp
b3JpdGl6ZWRUZXh0dXJlKiB0ZXh0dXJlKQpAQCAtMjc1LDcgKzI5OCw2IEBAIHZvaWQgQ0NQcmlv
cml0aXplZFRleHR1cmVNYW5hZ2VyOjpyZWdpc3RlclRleHR1cmUoQ0NQcmlvcml0aXplZFRleHR1
cmUqIHRleHR1cmUpCiAKICAgICB0ZXh0dXJlLT5zZXRNYW5hZ2VySW50ZXJuYWwodGhpcyk7CiAg
ICAgbV90ZXh0dXJlcy5hZGQodGV4dHVyZSk7Ci0KIH0KIAogdm9pZCBDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI6OnVucmVnaXN0ZXJUZXh0dXJlKENDUHJpb3JpdGl6ZWRUZXh0dXJlKiB0ZXh0
dXJlKQpAQCAtMzEzLDE1ICszMzUsMTMgQEAgQ0NQcmlvcml0aXplZFRleHR1cmU6OkJhY2tpbmcq
IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlQmFja2luZyhJbnRTaXoKICAgICBy
ZXR1cm4gYmFja2luZzsKIH0KIAotdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmRl
c3Ryb3lCYWNraW5nKENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nKiBiYWNraW5nLCBDQ1Jl
c291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIpCit2b2lkIENDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcjo6ZGVzdHJveUJhY2tpbmcoQ0NQcmlvcml0aXplZFRleHR1cmU6OkJhY2tpbmcq
IGJhY2tpbmcpCiB7CiAgICAgQVNTRVJUKGJhY2tpbmcpOwotICAgIEFTU0VSVCghYmFja2luZy0+
b3duZXIoKSB8fCAhYmFja2luZy0+b3duZXIoKS0+aXNBYm92ZVByaW9yaXR5Q3V0b2ZmKCkpOwog
ICAgIEFTU0VSVCghYmFja2luZy0+b3duZXIoKSB8fCAhYmFja2luZy0+b3duZXIoKS0+aXNTZWxm
TWFuYWdlZCgpKTsKICAgICBBU1NFUlQobV9iYWNraW5ncy5maW5kKGJhY2tpbmcpICE9IG1fYmFj
a2luZ3MuZW5kKCkpOworICAgIEFTU0VSVChiYWNraW5nLT5tX3Jlc291cmNlRGVsZXRlZCk7CiAK
LSAgICBpZiAocmVzb3VyY2VQcm92aWRlcikKLSAgICAgICAgcmVzb3VyY2VQcm92aWRlci0+ZGVs
ZXRlUmVzb3VyY2UoYmFja2luZy0+aWQoKSk7CiAgICAgaWYgKGJhY2tpbmctPm93bmVyKCkpCiAg
ICAgICAgIGJhY2tpbmctPm93bmVyKCktPnVubGluaygpOwogICAgIG1fbWVtb3J5VXNlQnl0ZXMg
LT0gYmFja2luZy0+Ynl0ZXMoKTsKQEAgLTMzMCw3ICszNTAsNiBAQCB2b2lkIENDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlcjo6ZGVzdHJveUJhY2tpbmcoQ0NQcmlvcml0aXplZFRleHR1cmU6OkJh
Y2tpbmcqCiAgICAgZGVsZXRlIGJhY2tpbmc7CiB9CiAKLQogI2lmICFBU1NFUlRfRElTQUJMRUQK
IHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjphc3NlcnRJbnZhcmlhbnRzKCkKIHsK
QEAgLTM2Nyw1ICszODYsNjYgQEAgdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmFz
c2VydEludmFyaWFudHMoKQogfQogI2VuZGlmCiAKK0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdl
cjo6RXZpY3Rpb25TdGF0ZTo6fkV2aWN0aW9uU3RhdGUoKQoreworICAgIEFTU0VSVChtX2V2aWN0
ZWRCYWNraW5ncy5pc0VtcHR5KCkpOworICAgIEFTU0VSVChtX3VuZXZpY3RlZEJhY2tpbmdzLmlz
RW1wdHkoKSk7Cit9CisKK3ZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpFdmljdGlv
blN0YXRlOjphZGRCYWNraW5nT25JbXBsVGhyZWFkKENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNr
aW5nKiBiYWNraW5nKQoreworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSAmJiBD
Q1Byb3h5Ojppc01haW5UaHJlYWRCbG9ja2VkKCkpOworICAgIG1fdW5ldmljdGVkQmFja2luZ3Mu
YWRkKGJhY2tpbmcpOworfQorCit2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6RXZp
Y3Rpb25TdGF0ZTo6cmVtb3ZlQmFja2luZ09uSW1wbFRocmVhZChDQ1ByaW9yaXRpemVkVGV4dHVy
ZTo6QmFja2luZyogYmFja2luZywgQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVy
KQoreworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSAmJiBDQ1Byb3h5Ojppc01h
aW5UaHJlYWRCbG9ja2VkKCkpOworICAgIGlmIChiYWNraW5nLT5yZXNvdXJjZURlbGV0ZWQoKSkg
eworICAgICAgICBBU1NFUlQobV9ldmljdGVkQmFja2luZ3MuZmluZChiYWNraW5nKSAhPSBtX2V2
aWN0ZWRCYWNraW5ncy5lbmQoKSk7CisgICAgICAgIG1fZXZpY3RlZEJhY2tpbmdzLnJlbW92ZShi
YWNraW5nKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQobV91bmV2aWN0ZWRCYWNraW5n
cy5maW5kKGJhY2tpbmcpICE9IG1fdW5ldmljdGVkQmFja2luZ3MuZW5kKCkpOworICAgICAgICBt
X3VuZXZpY3RlZEJhY2tpbmdzLnJlbW92ZShiYWNraW5nKTsKKyAgICAgICAgYmFja2luZy0+ZGVs
ZXRlUmVzb3VyY2UocmVzb3VyY2VQcm92aWRlcik7CisgICAgfQorfQorCitib29sIENDUHJpb3Jp
dGl6ZWRUZXh0dXJlTWFuYWdlcjo6RXZpY3Rpb25TdGF0ZTo6ZXZpY3RCYWNraW5nc1Jlc291cmNl
c09uSW1wbFRocmVhZChDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIpCit7Cisg
ICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKyAgICBCYWNraW5nVmVjdG9yIGJh
Y2tpbmdzVG9FdmljdDsKKyAgICBmb3IgKEJhY2tpbmdTZXQ6Oml0ZXJhdG9yIGl0ID0gbV91bmV2
aWN0ZWRCYWNraW5ncy5iZWdpbigpOyBpdCAhPSBtX3VuZXZpY3RlZEJhY2tpbmdzLmVuZCgpOyAr
K2l0KSB7CisgICAgICAgICgqaXQpLT5kZWxldGVSZXNvdXJjZShyZXNvdXJjZVByb3ZpZGVyKTsK
KyAgICAgICAgYmFja2luZ3NUb0V2aWN0LmFwcGVuZCgoKml0KSk7CisgICAgfQorICAgIE11dGV4
TG9ja2VyIGxvY2sobV9ldmljdGVkU3RhdGVNdXRleCk7CisgICAgYm9vbCByZXN1bHQgPSBmYWxz
ZTsKKyAgICBpZiAoIWJhY2tpbmdzVG9FdmljdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgcmVzdWx0
ID0gdHJ1ZTsKKyAgICAgICAgZm9yIChCYWNraW5nVmVjdG9yOjppdGVyYXRvciBpdCA9IGJhY2tp
bmdzVG9FdmljdC5iZWdpbigpOyBpdCAhPSBiYWNraW5nc1RvRXZpY3QuZW5kKCk7ICsraXQpIHsK
KyAgICAgICAgICAgIG1fdW5ldmljdGVkQmFja2luZ3MucmVtb3ZlKCgqaXQpKTsKKyAgICAgICAg
ICAgIG1fZXZpY3RlZEJhY2tpbmdzLmFkZCgoKml0KSk7CisgICAgICAgIH0KKyAgICAgICAgbV9l
dmljdGlvbkNvdW50ZXIrKzsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBD
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OkV2aWN0aW9uU3RhdGU6OmdldEFuZENsZWFyRXZp
Y3RlZEJhY2tpbmdzKEJhY2tpbmdTZXQmIGV2aWN0ZWRCYWNraW5ncywgaW50KiBldmljdGlvbkNv
dW50ZXJBY2spCit7CisgICAgZXZpY3RlZEJhY2tpbmdzLmNsZWFyKCk7CisgICAgTXV0ZXhMb2Nr
ZXIgbG9jayhtX2V2aWN0ZWRTdGF0ZU11dGV4KTsKKyAgICBldmljdGVkQmFja2luZ3Muc3dhcCht
X2V2aWN0ZWRCYWNraW5ncyk7CisgICAgaWYgKGV2aWN0aW9uQ291bnRlckFjaykKKyAgICAgICAg
KmV2aWN0aW9uQ291bnRlckFjayA9IG1fZXZpY3Rpb25Db3VudGVyOworfQorCitib29sIENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6RXZpY3Rpb25TdGF0ZTo6aXNFdmljdGlvbkNvdW50ZXJB
Y2tVcFRvRGF0ZU9uSW1wbFRocmVhZChpbnQgZXZpY3Rpb25Db3VudGVyQWNrKQoreworICAgIEFT
U0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX2V2
aWN0ZWRTdGF0ZU11dGV4KTsKKyAgICByZXR1cm4gKGV2aWN0aW9uQ291bnRlckFjayA9PSBtX2V2
aWN0aW9uQ291bnRlcik7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmgKaW5kZXggMTNkYmM1MTc2YmNk
NzhlZTI5NzA5MGE2NzY1MTI0NWY5YmQ3NjRjYS4uNGNkOGY1YzRlNDY0MjE1Y2IxZmJjYjkxY2Ez
ZjEwM2FjZGFhNGQ4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1
cmVNYW5hZ2VyLmgKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KKyNpbmNs
dWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzcsOCArNzgsMjQgQEAgcHVibGljOgogICAgIGJv
b2wgcmVxdWVzdExhdGUoQ0NQcmlvcml0aXplZFRleHR1cmUqKTsKIAogICAgIHZvaWQgcmVkdWNl
TWVtb3J5KENDUmVzb3VyY2VQcm92aWRlciopOworCisgICAgLy8gUmV0dXJucyB0cnVlIGFuZCBp
bmNyZW1lbnRzIGFuIGludGVybmFsIGV2aWN0aW9uIGNvdW50ZXIgaWYgcmVzb3VyY2VzIGFyZQor
ICAgIC8vIGRlbGV0ZWQgYXMgYSByZXN1bHQgb2YgdGhpcyBjYWxsLgorICAgIC8vIFRoaXMgZnVu
Y3Rpb24gaXMgYXN5bmNocm9ub3VzIGluIHRoYXQgaXQgaXMgY2FsbGVkIG9uIHRoZSBpbXBsIHRo
cmVhZCB3aGlsZSB0aGUKKyAgICAvLyBtYWluIHRocmVhZCBpcyBub3QgYmxvY2tlZCAoc28gaXQg
bWF5IGJlIGNvbmN1cnJlbnQgd2l0aCBvdGhlciBjYWxscyBmcm9tIHRoZQorICAgIC8vIG1haW4g
dGhyZWFkKQorICAgIGJvb2wgcmVkdWNlTWVtb3J5T25JbXBsVGhyZWFkKENDUmVzb3VyY2VQcm92
aWRlciopOworCisgICAgLy8gUmVtb3ZlIHRoZSBiYWNraW5ncyB3aG9zZSByZXNvdXJjZXMgd2Vy
ZSBkZXN0cm95ZWQgYnkgcmVkdWNlTWVtb3J5T25JbXBsVGhyZWFkLgorICAgIC8vIFdyaXRlcyB0
aGUgaW50ZXJuYWwgZXZpY3Rpb24gY291bnRlciB0byBldmljdGlvbkNvdW50ZXJBY2suCisgICAg
dm9pZCBkZXN0cm95RXZpY3RlZEJhY2tpbmdzKGludCogZXZpY3Rpb25Db3VudGVyQWNrKTsKKwor
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBldmljdGlvbkNvdW50ZXJBY2sgaXMgdGhlIHZhbHVlIG9m
IGludGVybmFsIGV2aWN0aW9uIGNvdW50ZXIuCisgICAgYm9vbCBpc0V2aWN0aW9uQ291bnRlckFj
a1VwVG9EYXRlKGludCBldmljdGlvbkNvdW50ZXJBY2spOworCisgICAgLy8gRGVsZXRlIGFsbCB0
ZXh0dXJlcyBhbmQgZnJvbSB0aGUgaW1wbCB0aHJlYWQgKGF0IHRocmVhZCBleGl0IGFuZAorICAg
IC8vIGNvbnRleHQgbG9zdCkuCiAgICAgdm9pZCBjbGVhckFsbE1lbW9yeShDQ1Jlc291cmNlUHJv
dmlkZXIqKTsKLSAgICB2b2lkIGFsbEJhY2tpbmdUZXh0dXJlc1dlcmVEZWxldGVkKCk7CiAKICAg
ICB2b2lkIGFjcXVpcmVCYWNraW5nVGV4dHVyZUlmTmVlZGVkKENDUHJpb3JpdGl6ZWRUZXh0dXJl
KiwgQ0NSZXNvdXJjZVByb3ZpZGVyKik7CiAKQEAgLTEwOSwxMSArMTI2LDEwIEBAIHByaXZhdGU6
CiAgICAgfQogCiAgICAgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyKHNpemVfdCBtYXhNZW1v
cnlMaW1pdEJ5dGVzLCBpbnQgbWF4VGV4dHVyZVNpemUsIGludCBwb29sKTsKLQogICAgIHZvaWQg
cmVkdWNlTWVtb3J5KHNpemVfdCBsaW1pdCwgQ0NSZXNvdXJjZVByb3ZpZGVyKik7Ci0KICAgICBD
Q1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZyogY3JlYXRlQmFja2luZyhJbnRTaXplLCBHQzNE
ZW51bSBmb3JtYXQsIENDUmVzb3VyY2VQcm92aWRlciopOwotICAgIHZvaWQgZGVzdHJveUJhY2tp
bmcoQ0NQcmlvcml0aXplZFRleHR1cmU6OkJhY2tpbmcqLCBDQ1Jlc291cmNlUHJvdmlkZXIqKTsK
KyAgICB2b2lkIGNsZWFyRXZpY3RlZEJhY2tpbmdzKGludCogZXZpY3Rpb25Db3VudGVyQWNrKTsK
KyAgICB2b2lkIGRlc3Ryb3lCYWNraW5nKENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nKik7
CiAKICAgICBzaXplX3QgbV9tYXhNZW1vcnlMaW1pdEJ5dGVzOwogICAgIHVuc2lnbmVkIG1fcHJp
b3JpdHlDdXRvZmY7CkBAIC0xMzIsOCArMTQ4LDQ3IEBAIHByaXZhdGU6CiAKICAgICBUZXh0dXJl
VmVjdG9yIG1fdGVtcFRleHR1cmVWZWN0b3I7CiAgICAgQmFja2luZ1ZlY3RvciBtX3RlbXBCYWNr
aW5nVmVjdG9yOworCisgICAgLy8gQWxsIHN0YXRlIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGJ5IHRo
ZSBpbXBsIHRocmVhZCB3aGlsZSB0aGUgbWFpbiB0aHJlYWQKKyAgICAvLyBpcyBub3QgYmxvY2tl
ZCBpcyBzZXF1ZXN0ZXJlZCBpbiB0aGlzIHN0cnVjdHVyZS4KKyAgICBjbGFzcyBFdmljdGlvblN0
YXRlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEV2aWN0aW9uU3RhdGUoKSA6IG1fZXZpY3Rpb25D
b3VudGVyKDApIHsgfQorICAgICAgICB+RXZpY3Rpb25TdGF0ZSgpOworCisgICAgICAgIC8vIENh
bGxlZCBvbiB0aGUgaW1wbCB0aHJlYWQgd2hpbGUgdGhlIG1haW4gdGhyZWFkIGlzIGJsb2NrZWQK
KyAgICAgICAgdm9pZCBhZGRCYWNraW5nT25JbXBsVGhyZWFkKENDUHJpb3JpdGl6ZWRUZXh0dXJl
OjpCYWNraW5nKik7CisKKyAgICAgICAgLy8gQ2FsbGVkIG9uIHRoZSBpbXBsIHRocmVhZCB3aGls
ZSB0aGUgbWFpbiB0aHJlYWQgaXMgYmxvY2tlZC4gRGVsZXRlcworICAgICAgICAvLyB0aGUgYmFj
a2luZydzIHJlc291cmNlIGlmIGl0IGhhcyBub3QgYmVlbiBkZWxldGVkIGFscmVhZHkuCisgICAg
ICAgIHZvaWQgcmVtb3ZlQmFja2luZ09uSW1wbFRocmVhZChDQ1ByaW9yaXRpemVkVGV4dHVyZTo6
QmFja2luZyosIENDUmVzb3VyY2VQcm92aWRlciopOworCisgICAgICAgIC8vIENhbGxlZCBvbiB0
aGUgaW1wbCB0aHJlYWQgd2hpbGUgdGhlIG1haW4gdGhyZWFkIG1heSBub3QgYmUgYmxvY2tlZAor
ICAgICAgICBib29sIGV2aWN0QmFja2luZ3NSZXNvdXJjZXNPbkltcGxUaHJlYWQoQ0NSZXNvdXJj
ZVByb3ZpZGVyKik7CisKKyAgICAgICAgLy8gQ2FsbGVkIG9uIHRoZSBtYWluIHRocmVhZCwgcG9z
c2libHkgY29uY3VycmVudGx5IHdpdGggCisgICAgICAgIC8vIGV2aWN0QmFja2luZ3NSZXNvdXJj
ZXNPbkltcGxUaHJlYWRBc3luYy4KKyAgICAgICAgLy8gQWxzbyBjYWxsZWQgb24gdGhlIGltcGwg
dGhyZWFkIGR1cmluZyB0ZWFyLWRvd24gYW5kIGNvbnRleHQtbG9zdAorICAgICAgICB2b2lkIGdl
dEFuZENsZWFyRXZpY3RlZEJhY2tpbmdzKEJhY2tpbmdTZXQmLCBpbnQqIGV2aWN0aW9uQ291bnRl
ckFjayk7CisKKyAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIGV2aWN0aW9uQ291bnRlckFjayBp
cyB0aGUgdmFsdWUgb2YgaW50ZXJuYWwgZXZpY3Rpb24gY291bnRlci4KKyAgICAgICAgYm9vbCBp
c0V2aWN0aW9uQ291bnRlckFja1VwVG9EYXRlT25JbXBsVGhyZWFkKGludCBldmljdGlvbkNvdW50
ZXJBY2spOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgLy8gVGhpcyBzZXQgaXMgbmV2ZXIgYWNj
ZXNzZWQgb24gdGhlIG1haW4gdGhyZWFkLgorICAgICAgICBCYWNraW5nU2V0IG1fdW5ldmljdGVk
QmFja2luZ3M7CisKKyAgICAgICAgLy8gVGhpcyBzdGF0ZSBjYW4gYmUgYWNjZXNzZWQgYnkgdGhl
IGltcGwgdGhyZWFkIGFuZCB0aGUgbWFpbiB0aHJlYWQgY29uY3VycmVudGx5LAorICAgICAgICAv
LyBhbmQgbWF5IGJlIGFjY2Vzc2VkIG9ubHkgd2hlbiBtX2V2aWN0ZWRCYWNraW5nc011dGV4IGlz
IGhlbGQuCisgICAgICAgIE11dGV4IG1fZXZpY3RlZFN0YXRlTXV0ZXg7CisgICAgICAgIEJhY2tp
bmdTZXQgbV9ldmljdGVkQmFja2luZ3M7CisgICAgICAgIGludCBtX2V2aWN0aW9uQ291bnRlcjsK
KyAgICB9OworICAgIEV2aWN0aW9uU3RhdGUgbV9ldmljdGlvblN0YXRlOwogfTsKIAorCisKIH0g
Ly8gV2ViQ29yZQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5j
cHAKaW5kZXggNjg3NmVhMjE4OGJhZjY2NjhhMjlhYzM3YzFjZDM4YzhjYjQ0MWNlOS4uNGI2NTE3
YjRmZTYxNDg2ZGI5NThlMzVkNjg2MzNhOWZhMDdmOTQyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NT
aW5nbGVUaHJlYWRQcm94eS5jcHAKQEAgLTE1NSw5ICsxNTUsOSBAQCBib29sIENDU2luZ2xlVGhy
ZWFkUHJveHk6OnJlY3JlYXRlQ29udGV4dCgpCiAKICAgICBib29sIGluaXRpYWxpemVkOwogICAg
IHsKKyAgICAgICAgRGVidWdTY29wZWRTZXRNYWluVGhyZWFkQmxvY2tlZCBtYWluVGhyZWFkQmxv
Y2tlZDsKICAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7Ci0gICAgICAgIGlm
ICghbV9sYXllclRyZWVIb3N0SW1wbC0+Y29udGVudHNUZXh0dXJlc1B1cmdlZCgpKQotICAgICAg
ICAgICAgbV9sYXllclRyZWVIb3N0LT5kZWxldGVDb250ZW50c1RleHR1cmVzT25JbXBsVGhyZWFk
KG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJlc291cmNlUHJvdmlkZXIoKSk7CisgICAgICAgIG1fbGF5
ZXJUcmVlSG9zdC0+ZGVsZXRlQWxsQ29udGVudHNUZXh0dXJlc09uSW1wbFRocmVhZChtX2xheWVy
VHJlZUhvc3RJbXBsLT5yZXNvdXJjZVByb3ZpZGVyKCkpOwogICAgICAgICBpbml0aWFsaXplZCA9
IG1fbGF5ZXJUcmVlSG9zdEltcGwtPmluaXRpYWxpemVSZW5kZXJlcihjb250ZXh0LnJlbGVhc2Uo
KSwgVW50aHJvdHRsZWRVcGxvYWRlcik7CiAgICAgICAgIGlmIChpbml0aWFsaXplZCkgewogICAg
ICAgICAgICAgbV9SZW5kZXJlckNhcGFiaWxpdGllc0Zvck1haW5UaHJlYWQgPSBtX2xheWVyVHJl
ZUhvc3RJbXBsLT5yZW5kZXJlckNhcGFiaWxpdGllcygpOwpAQCAtMjYwLDkgKzI2MCw3IEBAIHZv
aWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6c3RvcCgpCiAgICAgewogICAgICAgICBEZWJ1Z1Njb3Bl
ZFNldE1haW5UaHJlYWRCbG9ja2VkIG1haW5UaHJlYWRCbG9ja2VkOwogICAgICAgICBEZWJ1Z1Nj
b3BlZFNldEltcGxUaHJlYWQgaW1wbDsKLQotICAgICAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdElt
cGwtPmNvbnRlbnRzVGV4dHVyZXNQdXJnZWQoKSkKLSAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9z
dC0+ZGVsZXRlQ29udGVudHNUZXh0dXJlc09uSW1wbFRocmVhZChtX2xheWVyVHJlZUhvc3RJbXBs
LT5yZXNvdXJjZVByb3ZpZGVyKCkpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmRlbGV0ZUFs
bENvbnRlbnRzVGV4dHVyZXNPbkltcGxUaHJlYWQobV9sYXllclRyZWVIb3N0SW1wbC0+cmVzb3Vy
Y2VQcm92aWRlcigpKTsKICAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC5jbGVhcigpOwogICAg
IH0KICAgICBtX2xheWVyVHJlZUhvc3QgPSAwOwpAQCAtMjc1LDYgKzI3MywxNSBAQCB2b2lkIEND
U2luZ2xlVGhyZWFkUHJveHk6OnBvc3RBbmltYXRpb25FdmVudHNUb01haW5UaHJlYWRPbkltcGxU
aHJlYWQoUGFzc093blB0cgogICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0QW5pbWF0aW9uRXZlbnRz
KGV2ZW50cywgd2FsbENsb2NrVGltZSk7CiB9CiAKK3ZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6
cmVkdWNlQ29udGVudHNUZXh0dXJlc01lbW9yeU9uSW1wbFRocmVhZCgpCit7CisgICAgQVNTRVJU
KENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKyAgICBpZiAobV9sYXllclRyZWVIb3N0LT5yZWR1
Y2VDb250ZW50c1RleHR1cmVzTWVtb3J5T25JbXBsVGhyZWFkKG1fbGF5ZXJUcmVlSG9zdEltcGwt
PnJlc291cmNlUHJvdmlkZXIoKSkpIHsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+c2V0
Q29udGVudHNUZXh0dXJlc1B1cmdlZCgpOworICAgICAgICBzZXROZWVkc0NvbW1pdE9uSW1wbFRo
cmVhZCgpOworICAgIH0KK30KKwogLy8gQ2FsbGVkIGJ5IHRoZSBsZWdhY3kgc2NoZWR1bGluZyBw
YXRoIChlLmcuIHdoZXJlIHJlbmRlcl93aWRnZXQgZG9lcyB0aGUgc2NoZWR1bGluZykKIHZvaWQg
Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tcG9zaXRlSW1tZWRpYXRlbHkoKQogewpAQCAtMzAxLDkg
KzMwOCw3IEBAIGJvb2wgQ0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tbWl0QW5kQ29tcG9zaXRlKCkK
ICAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdC0+aW5pdGlhbGl6ZVJlbmRlcmVySWZOZWVkZWQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNv
bnRlbnRzVGV4dHVyZXNQdXJnZWQoKSkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5ldmljdEFs
bENvbnRlbnRUZXh0dXJlcygpOwotCisgICAgbV9sYXllclRyZWVIb3N0LT5kZXN0cm95Q29udGVu
dHNUZXh0dXJlc0V2aWN0ZWRCeUltcGxUaHJlYWQoMCk7CiAgICAgQ0NUZXh0dXJlVXBkYXRlUXVl
dWUgcXVldWU7CiAgICAgbV9sYXllclRyZWVIb3N0LT51cGRhdGVMYXllcnMocXVldWUsIG1fbGF5
ZXJUcmVlSG9zdEltcGwtPm1lbW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzKCkpOwogICAgIG1fbGF5
ZXJUcmVlSG9zdEltcGwtPnJlc2V0Q29udGVudHNUZXh0dXJlc1B1cmdlZCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVU
aHJlYWRQcm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oCmluZGV4IDcxZjRmNGY1N2VjZTRhZGYxZTQ2NWEyNDg1
OTk3YjVmYzkwYTJlMmQuLjlmYjFhYjhkMzRjOGQ3N2I0MGQ4YzRlMzE3MjBhMWU0NDRiNjVkNzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDU2luZ2xlVGhyZWFkUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgKQEAgLTcyLDYgKzcyLDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpIE9W
RVJSSURFIHsgbV9sYXllclRyZWVIb3N0LT5zY2hlZHVsZUNvbXBvc2l0ZSgpOyB9CiAgICAgdmly
dHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCkgT1ZFUlJJREUgeyBtX2xheWVy
VHJlZUhvc3QtPnNjaGVkdWxlQ29tcG9zaXRlKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgcG9zdEFu
aW1hdGlvbkV2ZW50c1RvTWFpblRocmVhZE9uSW1wbFRocmVhZChQYXNzT3duUHRyPENDQW5pbWF0
aW9uRXZlbnRzVmVjdG9yPiwgZG91YmxlIHdhbGxDbG9ja1RpbWUpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCByZWR1Y2VDb250ZW50c1RleHR1cmVzTWVtb3J5T25JbXBsVGhyZWFkKCkgT1ZF
UlJJREU7CiAKICAgICAvLyBDYWxsZWQgYnkgdGhlIGxlZ2FjeSBwYXRoIHdoZXJlIFJlbmRlcldp
ZGdldCBkb2VzIHRoZSBzY2hlZHVsaW5nLgogICAgIHZvaWQgY29tcG9zaXRlSW1tZWRpYXRlbHko
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlQ29udHJvbGxlci5jcHAKaW5k
ZXggNmZjNzcxZTk1OTA1ZWUzYzg3ZTYxYjAxZjY4NjYzYjJmOTA2MDFjNy4uMzkzOWIxYjM4ODhj
ZmJkNGE4OWNhZjc0NTNjNzEwOGMyZDI0ZDg1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlQ29udHJvbGxlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NU
ZXh0dXJlVXBkYXRlQ29udHJvbGxlci5jcHAKQEAgLTE1MCw2ICsxNTAsMTEgQEAgdm9pZCBDQ1Rl
eHR1cmVVcGRhdGVDb250cm9sbGVyOjp1cGRhdGVNb3JlVGV4dHVyZXMoZG91YmxlIG1vbm90b25p
Y1RpbWVMaW1pdCkKICAgICAgICAgdXBkYXRlTW9yZVRleHR1cmVzTm93KCk7CiB9CiAKK3ZvaWQg
Q0NUZXh0dXJlVXBkYXRlQ29udHJvbGxlcjo6ZGlzY2FyZFVwbG9hZHNUb0RlbGV0ZWRSZXNvdXJj
ZXMoKQoreworICAgIG1fcXVldWUtPmNsZWFyVXBsb2Fkc1RvRGVsZXRlZFJlc291cmNlcygpOwor
fQorCiB2b2lkIENDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXI6Om9uVGltZXJGaXJlZCgpCiB7CiAg
ICAgaWYgKCFtX3F1ZXVlLT5oYXNNb3JlVXBkYXRlcygpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlQ29udHJv
bGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NU
ZXh0dXJlVXBkYXRlQ29udHJvbGxlci5oCmluZGV4IGRkNzU4YmViNGQ5ZmNkODY2ZTE4Yzg0N2Nj
ZDBhZjI4OWJhOTViZDEuLmNhMzIzYzliYmRmZGUwM2ZkYmMzMmIwNTlkNjdhMGQzYzVjMTBjYTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVDb250cm9sbGVyLmgKQEAgLTUx
LDYgKzUxLDkgQEAgcHVibGljOgogICAgIGJvb2wgaGFzTW9yZVVwZGF0ZXMoKSBjb25zdDsKICAg
ICB2b2lkIHVwZGF0ZU1vcmVUZXh0dXJlcyhkb3VibGUgbW9ub3RvbmljVGltZUxpbWl0KTsKIAor
ICAgIC8vIERpc2NhcmQgdXBsb2FkcyB0byB0ZXh0dXJlcyB0aGF0IHdlcmUgZXZpY3RlZCBvbiB0
aGUgaW1wbCB0aHJlYWQKKyAgICB2b2lkIGRpc2NhcmRVcGxvYWRzVG9EZWxldGVkUmVzb3VyY2Vz
KCk7CisKICAgICAvLyBDQ1RpbWVyQ2xpZW50IGltcGxlbWVudGF0aW9uLgogICAgIHZpcnR1YWwg
dm9pZCBvblRpbWVyRmlyZWQoKSBPVkVSUklERTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlUXVldWUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJl
VXBkYXRlUXVldWUuY3BwCmluZGV4IDhmNThmY2JjYjRjYmEyNGYzNGE1YWFkNDdlZDdjOTQ2MDc0
M2MxYTguLjcxOWZjZDMxNDQ1N2Y3NDYzN2JhNTg0NTBhOGNiM2Q0NzBiYWQ5ZDkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVy
ZVVwZGF0ZVF1ZXVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVRdWV1ZS5jcHAKQEAgLTU0LDEwICs1NCwyMSBAQCB2
b2lkIENDVGV4dHVyZVVwZGF0ZVF1ZXVlOjphcHBlbmRDb3B5KFRleHR1cmVDb3BpZXI6OlBhcmFt
ZXRlcnMgY29weSkKICAgICBtX2NvcHlFbnRyaWVzLmFwcGVuZChjb3B5KTsKIH0KIAotdm9pZCBD
Q1RleHR1cmVVcGRhdGVRdWV1ZTo6Y2xlYXJVcGxvYWRzKCkKK3ZvaWQgQ0NUZXh0dXJlVXBkYXRl
UXVldWU6OmNsZWFyVXBsb2Fkc1RvRGVsZXRlZFJlc291cmNlcygpCiB7Ci0gICAgbV9mdWxsRW50
cmllcy5jbGVhcigpOwotICAgIG1fcGFydGlhbEVudHJpZXMuY2xlYXIoKTsKKyAgICBjbGVhclVw
bG9hZHNUb0RlbGV0ZWRSZXNvdXJjZXMobV9mdWxsRW50cmllcyk7CisgICAgY2xlYXJVcGxvYWRz
VG9EZWxldGVkUmVzb3VyY2VzKG1fcGFydGlhbEVudHJpZXMpOworfQorCit2b2lkIENDVGV4dHVy
ZVVwZGF0ZVF1ZXVlOjpjbGVhclVwbG9hZHNUb0RlbGV0ZWRSZXNvdXJjZXMoRGVxdWU8VGV4dHVy
ZVVwbG9hZGVyOjpQYXJhbWV0ZXJzPiYgZW50cnlRdWV1ZSkKK3sKKyAgICBEZXF1ZTxUZXh0dXJl
VXBsb2FkZXI6OlBhcmFtZXRlcnM+IHRlbXA7CisgICAgZW50cnlRdWV1ZS5zd2FwKHRlbXApOwor
ICAgIHdoaWxlICh0ZW1wLnNpemUoKSkgeworICAgICAgICBUZXh0dXJlVXBsb2FkZXI6OlBhcmFt
ZXRlcnMgdXBsb2FkID0gdGVtcC50YWtlRmlyc3QoKTsKKyAgICAgICAgaWYgKCF1cGxvYWQudGV4
dHVyZS0+YmFja2luZ1dhc0FzeW5jaHJvbm91c2x5RGVsZXRlZCgpKQorICAgICAgICAgICAgZW50
cnlRdWV1ZS5hcHBlbmQodXBsb2FkKTsKKyAgICB9CiB9CiAKIFRleHR1cmVVcGxvYWRlcjo6UGFy
YW1ldGVycyBDQ1RleHR1cmVVcGRhdGVRdWV1ZTo6dGFrZUZpcnN0RnVsbFVwbG9hZCgpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Rl
eHR1cmVVcGRhdGVRdWV1ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlUXVldWUuaAppbmRleCBkZTYzNzM4MjFmMDhhODQ1NGFl
NjQ4NWI2YWYzNzQ4M2M3ODA1ZWU2Li5jOGRjYjE2ZTAyM2JiYTE3NmI1MDhlMWNkOTRiNjhmNjI3
ZDk3MGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVRdWV1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZVF1ZXVlLmgKQEAgLTQzLDcg
KzQzLDcgQEAgcHVibGljOgogICAgIHZvaWQgYXBwZW5kUGFydGlhbFVwbG9hZChUZXh0dXJlVXBs
b2FkZXI6OlBhcmFtZXRlcnMpOwogICAgIHZvaWQgYXBwZW5kQ29weShUZXh0dXJlQ29waWVyOjpQ
YXJhbWV0ZXJzKTsKIAotICAgIHZvaWQgY2xlYXJVcGxvYWRzKCk7CisgICAgdm9pZCBjbGVhclVw
bG9hZHNUb0RlbGV0ZWRSZXNvdXJjZXMoKTsKIAogICAgIFRleHR1cmVVcGxvYWRlcjo6UGFyYW1l
dGVycyB0YWtlRmlyc3RGdWxsVXBsb2FkKCk7CiAgICAgVGV4dHVyZVVwbG9hZGVyOjpQYXJhbWV0
ZXJzIHRha2VGaXJzdFBhcnRpYWxVcGxvYWQoKTsKQEAgLTU2LDYgKzU2LDcgQEAgcHVibGljOgog
ICAgIGJvb2wgaGFzTW9yZVVwZGF0ZXMoKSBjb25zdDsKIAogcHJpdmF0ZToKKyAgICB2b2lkIGNs
ZWFyVXBsb2Fkc1RvRGVsZXRlZFJlc291cmNlcyhEZXF1ZTxUZXh0dXJlVXBsb2FkZXI6OlBhcmFt
ZXRlcnM+JiBlbnRyeVF1ZXVlKTsKICAgICBEZXF1ZTxUZXh0dXJlVXBsb2FkZXI6OlBhcmFtZXRl
cnM+IG1fZnVsbEVudHJpZXM7CiAgICAgRGVxdWU8VGV4dHVyZVVwbG9hZGVyOjpQYXJhbWV0ZXJz
PiBtX3BhcnRpYWxFbnRyaWVzOwogICAgIERlcXVlPFRleHR1cmVDb3BpZXI6OlBhcmFtZXRlcnM+
IG1fY29weUVudHJpZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCmluZGV4IDZkNzQzNWQ1
NjU0NGEyYTIyN2Q3OGI0MzI2NDdhZWVhNDU3NGQwMTMuLmQ5ODcyNjEwOTNjOGVjMTM0NDZiNWIw
MzQwZGQ0YjEwMjFhYTliN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCkBAIC04MSw3
ICs4MSw3IEBAIENDVGhyZWFkUHJveHk6OkNDVGhyZWFkUHJveHkoQ0NMYXllclRyZWVIb3N0KiBs
YXllclRyZWVIb3N0KQogICAgICwgbV9yZWFkYmFja1JlcXVlc3RPbkltcGxUaHJlYWQoMCkKICAg
ICAsIG1fY29tbWl0Q29tcGxldGlvbkV2ZW50T25JbXBsVGhyZWFkKDApCiAgICAgLCBtX3RleHR1
cmVBY3F1aXNpdGlvbkNvbXBsZXRpb25FdmVudE9uSW1wbFRocmVhZCgwKQotICAgICwgbV9yZXNl
dENvbnRlbnRzVGV4dHVyZXNQdXJnZWRBZnRlckNvbW1pdE9uSW1wbFRocmVhZChmYWxzZSkKKyAg
ICAsIG1fY29udGVudHNUZXh0dXJlc0V2aWN0aW9uQ291bnRlckFjaygwKQogICAgICwgbV9uZXh0
RnJhbWVJc05ld2x5Q29tbWl0dGVkRnJhbWVPbkltcGxUaHJlYWQoZmFsc2UpCiAgICAgLCBtX3Jl
bmRlclZTeW5jRW5hYmxlZChsYXllclRyZWVIb3N0LT5zZXR0aW5ncygpLnJlbmRlclZTeW5jRW5h
YmxlZCkKIHsKQEAgLTM1Miw2ICszNTIsMTkgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpvblZTeW5j
UGFyYW1ldGVyc0NoYW5nZWQoZG91YmxlIG1vbm90b25pY1RpbWViYXNlLCBkb3VibGUgaW4KICAg
ICBtX3NjaGVkdWxlck9uSW1wbFRocmVhZC0+c2V0VGltZWJhc2VBbmRJbnRlcnZhbChtb25vdG9u
aWNUaW1lYmFzZSwgaW50ZXJ2YWxJblNlY29uZHMpOwogfQogCit2b2lkIENDVGhyZWFkUHJveHk6
OnJlZHVjZUNvbnRlbnRzVGV4dHVyZXNNZW1vcnlPbkltcGxUaHJlYWQoKQoreworICAgIEFTU0VS
VChpc0ltcGxUaHJlYWQoKSk7CisgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ1RocmVhZFByb3h5
OjpyZWR1Y2VDb250ZW50c1RleHR1cmVzTWVtb3J5T25JbXBsVGhyZWFkIik7CisKKyAgICBpZiAo
bV9sYXllclRyZWVIb3N0LT5yZWR1Y2VDb250ZW50c1RleHR1cmVzTWVtb3J5T25JbXBsVGhyZWFk
KG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJlc291cmNlUHJvdmlkZXIoKSkpIHsKKyAgICAgICAgaWYg
KG1fY3VycmVudFRleHR1cmVVcGRhdGVDb250cm9sbGVyT25JbXBsVGhyZWFkKQorICAgICAgICAg
ICAgbV9jdXJyZW50VGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXJPbkltcGxUaHJlYWQtPmRpc2NhcmRV
cGxvYWRzVG9EZWxldGVkUmVzb3VyY2VzKCk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwt
PnNldENvbnRlbnRzVGV4dHVyZXNQdXJnZWQoKTsKKyAgICAgICAgc2V0TmVlZHNDb21taXRPbklt
cGxUaHJlYWQoKTsKKyAgICB9Cit9CisKIHZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21t
aXRPbkltcGxUaHJlYWQoKQogewogICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7CkBAIC00NzUs
NyArNDg4LDYgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpzY2hlZHVsZWRBY3Rpb25CZWdpbkZyYW1l
KCkKICAgICBtX3BlbmRpbmdCZWdpbkZyYW1lUmVxdWVzdCA9IGFkb3B0UHRyKG5ldyBCZWdpbkZy
YW1lQW5kQ29tbWl0U3RhdGUoKSk7CiAgICAgbV9wZW5kaW5nQmVnaW5GcmFtZVJlcXVlc3QtPm1v
bm90b25pY0ZyYW1lQmVnaW5UaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CiAg
ICAgbV9wZW5kaW5nQmVnaW5GcmFtZVJlcXVlc3QtPnNjcm9sbEluZm8gPSBtX2xheWVyVHJlZUhv
c3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7Ci0gICAgbV9wZW5kaW5nQmVnaW5GcmFtZVJl
cXVlc3QtPmNvbnRlbnRzVGV4dHVyZXNXZXJlRGVsZXRlZCA9IG1fbGF5ZXJUcmVlSG9zdEltcGwt
PmNvbnRlbnRzVGV4dHVyZXNQdXJnZWQoKTsKICAgICBtX3BlbmRpbmdCZWdpbkZyYW1lUmVxdWVz
dC0+bWVtb3J5QWxsb2NhdGlvbkxpbWl0Qnl0ZXMgPSBtX2xheWVyVHJlZUhvc3RJbXBsLT5tZW1v
cnlBbGxvY2F0aW9uTGltaXRCeXRlcygpOwogCiAgICAgbV9tYWluVGhyZWFkUHJveHktPnBvc3RU
YXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZSkp
OwpAQCAtNTQ1LDggKzU1Nyw4IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZSgpCiAg
ICAgaWYgKCFtX2xheWVyVHJlZUhvc3QtPmluaXRpYWxpemVSZW5kZXJlcklmTmVlZGVkKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmIChyZXF1ZXN0LT5jb250ZW50c1RleHR1cmVzV2VyZURl
bGV0ZWQpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZXZpY3RBbGxDb250ZW50VGV4dHVyZXMo
KTsKKyAgICBpbnQgY29udGVudHNUZXh0dXJlc1B1cmdlQWNrID0gMDsKKyAgICBtX2xheWVyVHJl
ZUhvc3QtPmRlc3Ryb3lDb250ZW50c1RleHR1cmVzRXZpY3RlZEJ5SW1wbFRocmVhZCgmY29udGVu
dHNUZXh0dXJlc1B1cmdlQWNrKTsKIAogICAgIE93blB0cjxDQ1RleHR1cmVVcGRhdGVRdWV1ZT4g
cXVldWUgPSBhZG9wdFB0cihuZXcgQ0NUZXh0dXJlVXBkYXRlUXVldWUpOwogICAgIG1fbGF5ZXJU
cmVlSG9zdC0+dXBkYXRlTGF5ZXJzKCoocXVldWUuZ2V0KCkpLCByZXF1ZXN0LT5tZW1vcnlBbGxv
Y2F0aW9uTGltaXRCeXRlcyk7CkBAIC01NzYsNyArNTg4LDcgQEAgdm9pZCBDQ1RocmVhZFByb3h5
OjpiZWdpbkZyYW1lKCkKICAgICAgICAgRGVidWdTY29wZWRTZXRNYWluVGhyZWFkQmxvY2tlZCBt
YWluVGhyZWFkQmxvY2tlZDsKIAogICAgICAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9u
OwotICAgICAgICBDQ1Byb3h5OjppbXBsVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFk
VGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUNvbXBsZXRlT25JbXBsVGhyZWFk
LCAmY29tcGxldGlvbiwgcXVldWUucmVsZWFzZSgpLCByZXF1ZXN0LT5jb250ZW50c1RleHR1cmVz
V2VyZURlbGV0ZWQpKTsKKyAgICAgICAgQ0NQcm94eTo6aW1wbFRocmVhZCgpLT5wb3N0VGFzayhj
cmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVDb21wbGV0
ZU9uSW1wbFRocmVhZCwgJmNvbXBsZXRpb24sIHF1ZXVlLnJlbGVhc2UoKSwgY29udGVudHNUZXh0
dXJlc1B1cmdlQWNrKSk7CiAgICAgICAgIGNvbXBsZXRpb24ud2FpdCgpOwogICAgIH0KIApAQCAt
NTg0LDcgKzU5Niw3IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZSgpCiAgICAgbV9s
YXllclRyZWVIb3N0LT5kaWRCZWdpbkZyYW1lKCk7CiB9CiAKLXZvaWQgQ0NUaHJlYWRQcm94eTo6
YmVnaW5GcmFtZUNvbXBsZXRlT25JbXBsVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0
aW9uLCBQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZVF1ZXVlPiBxdWV1ZSwgYm9vbCBjb250ZW50
c1RleHR1cmVzV2VyZURlbGV0ZWQpCit2b2lkIENDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVDb21w
bGV0ZU9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbiwgUGFzc093blB0
cjxDQ1RleHR1cmVVcGRhdGVRdWV1ZT4gcXVldWUsIGludCBjb250ZW50c1RleHR1cmVzRXZpY3Rp
b25Db3VudGVyQWNrKQogewogICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NUaHJlYWRQcm94eTo6
YmVnaW5GcmFtZUNvbXBsZXRlT25JbXBsVGhyZWFkIik7CiAgICAgQVNTRVJUKCFtX2NvbW1pdENv
bXBsZXRpb25FdmVudE9uSW1wbFRocmVhZCk7CkBAIC01OTcsMTUgKzYwOSwxNyBAQCB2b2lkIEND
VGhyZWFkUHJveHk6OmJlZ2luRnJhbWVDb21wbGV0ZU9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25F
dmVudCogY29tcGxldGlvbgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFjb250
ZW50c1RleHR1cmVzV2VyZURlbGV0ZWQgJiYgbV9sYXllclRyZWVIb3N0SW1wbC0+Y29udGVudHNU
ZXh0dXJlc1B1cmdlZCgpKSB7Ci0gICAgICAgIC8vIFdlIHB1cmdlZCB0aGUgY29udGVudCB0ZXh0
dXJlcyBvbiB0aGUgaW1wbCB0aHJlYWQgYmV0d2VlbiB0aGUgdGltZSB3ZQotICAgICAgICAvLyBw
b3N0ZWQgdGhlIGJlZ2luRnJhbWUgdGFzayBhbmQgbm93LCBtZWFuaW5nIHdlIGhhdmUgYSBidW5j
aCBvZgotICAgICAgICAvLyB1cGxvYWRzIHRoYXQgYXJlIG5vdyBpbnZhbGlkLiBDbGVhciB0aGUg
dXBsb2FkcyAodGhleSBhbGwgZ28gdG8KLSAgICAgICAgLy8gY29udGVudCB0ZXh0dXJlcyksIGFu
ZCBraWNrIGFub3RoZXIgY29tbWl0IHRvIGZpbGwgdGhlbSBhZ2Fpbi4KLSAgICAgICAgcXVldWUt
PmNsZWFyVXBsb2FkcygpOworICAgIG1fY29udGVudHNUZXh0dXJlc0V2aWN0aW9uQ291bnRlckFj
ayA9IGNvbnRlbnRzVGV4dHVyZXNFdmljdGlvbkNvdW50ZXJBY2s7CisgICAgaWYgKCFtX2xheWVy
VHJlZUhvc3QtPmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+aXNFdmljdGlvbkNvdW50ZXJBY2tV
cFRvRGF0ZShtX2NvbnRlbnRzVGV4dHVyZXNFdmljdGlvbkNvdW50ZXJBY2spKSB7CisgICAgICAg
IFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUNvbXBsZXRlT25J
bXBsVGhyZWFkX3B1cmdlX3NpbmNlX2NvbW1pdCIpOworICAgICAgICAvLyBUaGUgdXBsb2FkIHF1
ZXVlIG1heSBjb250YWluIHJlZmVyZW5jZXMgdG8gdGV4dHVyZXMgdGhhdCB3ZXJlIGFzeW5jaHJv
bm91c2x5CisgICAgICAgIC8vIGRlbGV0ZWQuIFJlbW92ZSB0aGVtLgorICAgICAgICBxdWV1ZS0+
Y2xlYXJVcGxvYWRzVG9EZWxldGVkUmVzb3VyY2VzKCk7CisgICAgICAgIC8vIFRoZXJlIGV4aXN0
IHRleHR1cmVzIHB1cmdlZCBieSB0aGUgaW1wbCB0aHJlYWQgdGhhdCB0aGUgbWFpbiB0aHJlYWQK
KyAgICAgICAgLy8gZG9lc24ndCBrbm93IG9mLiBSZXF1ZXN0IGEgcmVjb21taXQsIHdoaWNoIHdp
bGwgaW5mb3JtIHRoZSBtYWluIHRocmVhZAorICAgICAgICAvLyBvZiB0aGUgcHVyZ2VkIHJlc291
cmNlcy4KICAgICAgICAgc2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsKLSAgICB9IGVsc2UK
LSAgICAgICAgbV9yZXNldENvbnRlbnRzVGV4dHVyZXNQdXJnZWRBZnRlckNvbW1pdE9uSW1wbFRo
cmVhZCA9IHRydWU7CisgICAgfQogCiAgICAgbV9jdXJyZW50VGV4dHVyZVVwZGF0ZUNvbnRyb2xs
ZXJPbkltcGxUaHJlYWQgPSBDQ1RleHR1cmVVcGRhdGVDb250cm9sbGVyOjpjcmVhdGUoQ0NQcm94
eTo6aW1wbFRocmVhZCgpLCBxdWV1ZSwgbV9sYXllclRyZWVIb3N0SW1wbC0+cmVzb3VyY2VQcm92
aWRlcigpLCBtX2xheWVyVHJlZUhvc3RJbXBsLT5yZW5kZXJlcigpLT50ZXh0dXJlQ29waWVyKCks
IG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJlbmRlcmVyKCktPnRleHR1cmVVcGxvYWRlcigpKTsKICAg
ICBtX2NvbW1pdENvbXBsZXRpb25FdmVudE9uSW1wbFRocmVhZCA9IGNvbXBsZXRpb247CkBAIC02
NTksOCArNjczLDggQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpzY2hlZHVsZWRBY3Rpb25Db21taXQo
KQogICAgIG1fbGF5ZXJUcmVlSG9zdC0+YmVnaW5Db21taXRPbkltcGxUaHJlYWQobV9sYXllclRy
ZWVIb3N0SW1wbC5nZXQoKSk7CiAgICAgbV9sYXllclRyZWVIb3N0LT5maW5pc2hDb21taXRPbklt
cGxUaHJlYWQobV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSk7CiAKLSAgICBpZiAobV9yZXNldENv
bnRlbnRzVGV4dHVyZXNQdXJnZWRBZnRlckNvbW1pdE9uSW1wbFRocmVhZCkgewotICAgICAgICBt
X3Jlc2V0Q29udGVudHNUZXh0dXJlc1B1cmdlZEFmdGVyQ29tbWl0T25JbXBsVGhyZWFkID0gZmFs
c2U7CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdC0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigpLT5p
c0V2aWN0aW9uQ291bnRlckFja1VwVG9EYXRlKG1fY29udGVudHNUZXh0dXJlc0V2aWN0aW9uQ291
bnRlckFjaykpIHsKKyAgICAgICAgLy8gVGhlIHRyZWUgbm93IHJlZmVyZW5jZXMgbm8gcHVyZ2Vk
IHRleHR1cmVzLiBBbGxvdyBpdCB0byBkcmF3IGFnYWluLgogICAgICAgICBtX2xheWVyVHJlZUhv
c3RJbXBsLT5yZXNldENvbnRlbnRzVGV4dHVyZXNQdXJnZWQoKTsKICAgICB9CiAKQEAgLTg5OSw4
ICs5MTMsNyBAQCB2b2lkIENDVGhyZWFkUHJveHk6OmxheWVyVHJlZUhvc3RDbG9zZWRPbkltcGxU
aHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpbwogewogICAgIFRSQUNFX0VWRU5UMCgi
Y2MiLCAiQ0NUaHJlYWRQcm94eTo6bGF5ZXJUcmVlSG9zdENsb3NlZE9uSW1wbFRocmVhZCIpOwog
ICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7Ci0gICAgaWYgKCFtX2xheWVyVHJlZUhvc3RJbXBs
LT5jb250ZW50c1RleHR1cmVzUHVyZ2VkKCkpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGVs
ZXRlQ29udGVudHNUZXh0dXJlc09uSW1wbFRocmVhZChtX2xheWVyVHJlZUhvc3RJbXBsLT5yZXNv
dXJjZVByb3ZpZGVyKCkpOworICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGVsZXRlQWxsQ29udGVudHNU
ZXh0dXJlc09uSW1wbFRocmVhZChtX2xheWVyVHJlZUhvc3RJbXBsLT5yZXNvdXJjZVByb3ZpZGVy
KCkpOwogICAgIG1faW5wdXRIYW5kbGVyT25JbXBsVGhyZWFkLmNsZWFyKCk7CiAgICAgbV9sYXll
clRyZWVIb3N0SW1wbC5jbGVhcigpOwogICAgIG1fc2NoZWR1bGVyT25JbXBsVGhyZWFkLmNsZWFy
KCk7CkBAIC05MjIsOCArOTM1LDcgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpyZWNyZWF0ZUNvbnRl
eHRPbkltcGxUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24sIEMKIHsKICAgICBU
UkFDRV9FVkVOVDAoImNjIiwgIkNDVGhyZWFkUHJveHk6OnJlY3JlYXRlQ29udGV4dE9uSW1wbFRo
cmVhZCIpOwogICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7Ci0gICAgaWYgKCFtX2xheWVyVHJl
ZUhvc3RJbXBsLT5jb250ZW50c1RleHR1cmVzUHVyZ2VkKCkpCi0gICAgICAgIG1fbGF5ZXJUcmVl
SG9zdC0+ZGVsZXRlQ29udGVudHNUZXh0dXJlc09uSW1wbFRocmVhZChtX2xheWVyVHJlZUhvc3RJ
bXBsLT5yZXNvdXJjZVByb3ZpZGVyKCkpOworICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGVsZXRlQWxs
Q29udGVudHNUZXh0dXJlc09uSW1wbFRocmVhZChtX2xheWVyVHJlZUhvc3RJbXBsLT5yZXNvdXJj
ZVByb3ZpZGVyKCkpOwogICAgICpyZWNyZWF0ZVN1Y2NlZWRlZCA9IG1fbGF5ZXJUcmVlSG9zdElt
cGwtPmluaXRpYWxpemVSZW5kZXJlcihhZG9wdFB0cihjb250ZXh0UHRyKSwgdGV4dHVyZVVwbG9h
ZGVyKTsKICAgICBpZiAoKnJlY3JlYXRlU3VjY2VlZGVkKSB7CiAgICAgICAgICpjYXBhYmlsaXRp
ZXMgPSBtX2xheWVyVHJlZUhvc3RJbXBsLT5yZW5kZXJlckNhcGFiaWxpdGllcygpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJl
YWRQcm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUaHJlYWRQcm94eS5oCmluZGV4IDcyYWM4MjVjYTZkYTBmYWI3NTA2MjVjNDk4ZmJhNDA3MDYx
ZTNkZTEuLmU0NzZjOTY1M2IzZmJkODgxYWZhZWFlNTkyZTA3NmQ0M2E3MGFkNmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFk
UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RocmVhZFByb3h5LmgKQEAgLTgxLDYgKzgxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBzZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwg
dm9pZCBzZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwg
dm9pZCBwb3N0QW5pbWF0aW9uRXZlbnRzVG9NYWluVGhyZWFkT25JbXBsVGhyZWFkKFBhc3NPd25Q
dHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+LCBkb3VibGUgd2FsbENsb2NrVGltZSkgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIHJlZHVjZUNvbnRlbnRzVGV4dHVyZXNNZW1vcnlPbkltcGxU
aHJlYWQoKSBPVkVSUklERTsKIAogICAgIC8vIENDU2NoZWR1bGVyQ2xpZW50IGltcGxlbWVudGF0
aW9uCiAgICAgdmlydHVhbCBib29sIGNhbkRyYXcoKSBPVkVSUklERTsKQEAgLTEwNiw3ICsxMDcs
NiBAQCBwcml2YXRlOgogCiAgICAgICAgIGRvdWJsZSBtb25vdG9uaWNGcmFtZUJlZ2luVGltZTsK
ICAgICAgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm87Ci0gICAgICAg
IGJvb2wgY29udGVudHNUZXh0dXJlc1dlcmVEZWxldGVkOwogICAgICAgICBzaXplX3QgbWVtb3J5
QWxsb2NhdGlvbkxpbWl0Qnl0ZXM7CiAgICAgfTsKICAgICBPd25QdHI8QmVnaW5GcmFtZUFuZENv
bW1pdFN0YXRlPiBtX3BlbmRpbmdCZWdpbkZyYW1lUmVxdWVzdDsKQEAgLTEyNyw3ICsxMjcsNyBA
QCBwcml2YXRlOgogICAgICAgICBJbnRSZWN0IHJlY3Q7CiAgICAgfTsKICAgICB2b2lkIGZvcmNl
QmVnaW5GcmFtZU9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVudCopOwotICAgIHZvaWQgYmVn
aW5GcmFtZUNvbXBsZXRlT25JbXBsVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiwgUGFzc093blB0
cjxDQ1RleHR1cmVVcGRhdGVRdWV1ZT4sIGJvb2wgY29udGVudHNUZXh0dXJlc1dlcmVEZWxldGVk
KTsKKyAgICB2b2lkIGJlZ2luRnJhbWVDb21wbGV0ZU9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25F
dmVudCosIFBhc3NPd25QdHI8Q0NUZXh0dXJlVXBkYXRlUXVldWU+LCBpbnQgY29udGVudHNUZXh0
dXJlc1B1cmdlQWNrKTsKICAgICB2b2lkIGJlZ2luRnJhbWVBYm9ydGVkT25JbXBsVGhyZWFkKCk7
CiAgICAgdm9pZCByZXF1ZXN0UmVhZGJhY2tPbkltcGxUaHJlYWQoUmVhZGJhY2tSZXF1ZXN0Kik7
CiAgICAgdm9pZCByZXF1ZXN0U3RhcnRQYWdlU2NhbGVBbmltYXRpb25PbkltcGxUaHJlYWQoSW50
U2l6ZSB0YXJnZXRQb3NpdGlvbiwgYm9vbCB1c2VBbmNob3IsIGZsb2F0IHNjYWxlLCBkb3VibGUg
ZHVyYXRpb25TZWMpOwpAQCAtMTg2LDkgKzE4NiwxMCBAQCBwcml2YXRlOgogCiAgICAgT3duUHRy
PENDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXI+IG1fY3VycmVudFRleHR1cmVVcGRhdGVDb250cm9s
bGVyT25JbXBsVGhyZWFkOwogCi0gICAgLy8gU2V0IHdoZW4gd2UgbmVlZCB0byByZXNldCB0aGUg
Y29udGVudHNUZXh0dXJlc1B1cmdlZCBmbGFnIGFmdGVyIHRoZQotICAgIC8vIGNvbW1pdC4KLSAg
ICBib29sIG1fcmVzZXRDb250ZW50c1RleHR1cmVzUHVyZ2VkQWZ0ZXJDb21taXRPbkltcGxUaHJl
YWQ7CisgICAgLy8gVGV4dHVyZSBldmljdGlvbiBjb3VudGVyIGFja25vd2xlZGdlbWVudCB0aGF0
IHRoZSBtYWluIHRocmVhZCBzZW5kcyB0byB0aGUKKyAgICAvLyBpbXBsIHRocmVhZC4gSWYgdGhp
cyBpcyBub3QgdXAgdG8gZGF0ZSB0aGVuIHRoZSBpbXBsIGxheWVyIHRyZWUgbWF5IHJlZmVyZW5j
ZQorICAgIC8vIHRleHR1cmVzIHRoYXQgaGF2ZSBiZWVuIHB1cmdlZC4KKyAgICBpbnQgbV9jb250
ZW50c1RleHR1cmVzRXZpY3Rpb25Db3VudGVyQWNrOwogCiAgICAgLy8gU2V0IHdoZW4gdGhlIG5l
eHQgZHJhdyBzaG91bGQgcG9zdCBkaWRDb21taXRBbmREcmF3RnJhbWUgdG8gdGhlIG1haW4gdGhy
ZWFkLgogICAgIGJvb2wgbV9uZXh0RnJhbWVJc05ld2x5Q29tbWl0dGVkRnJhbWVPbkltcGxUaHJl
YWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVl
SG9zdEltcGxUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRy
ZWVIb3N0SW1wbFRlc3QuY3BwCmluZGV4IGQwOWJjMzY0OWVhZWJlYzQzZDg5ZGQ2MjM3NDMzNmVi
ZjI1NjFjMjQuLjQ4YjIyMGFhOTFlN2VlMmI2MDQyZTYyMGYwYzVlNDc1YzI4NDNjZTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRl
c3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0
SW1wbFRlc3QuY3BwCkBAIC04Nyw2ICs4Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
c2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKSBPVkVSUklERSB7IG1fZGlkUmVxdWVzdFJlZHJh
dyA9IHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQo
KSBPVkVSUklERSB7IG1fZGlkUmVxdWVzdENvbW1pdCA9IHRydWU7IH0KICAgICB2aXJ0dWFsIHZv
aWQgcG9zdEFuaW1hdGlvbkV2ZW50c1RvTWFpblRocmVhZE9uSW1wbFRocmVhZChQYXNzT3duUHRy
PENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiwgZG91YmxlIHdhbGxDbG9ja1RpbWUpIE9WRVJSSURF
IHsgfQorICAgIHZpcnR1YWwgdm9pZCByZWR1Y2VDb250ZW50c1RleHR1cmVzTWVtb3J5T25JbXBs
VGhyZWFkKCkgT1ZFUlJJREUgeyB9CiAKICAgICBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdElt
cGw+IGNyZWF0ZUxheWVyVHJlZUhvc3QoYm9vbCBwYXJ0aWFsU3dhcCwgUGFzc093blB0cjxDQ0dy
YXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0LCBQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiBy
b290UHRyKQogICAgIHsKQEAgLTM3OTEsMTIgKzM3OTIsNiBAQCBURVNUX0YoQ0NMYXllclRyZWVI
b3N0SW1wbFRlc3QsIHN1cmZhY2VUZXh0dXJlQ2FjaGluZ05vUGFydGlhbFN3YXApCiAgICAgfQog
fQogCi1URVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHJlbGVhc2VDb250ZW50c1RleHR1
cmVTaG91bGRUcmlnZ2VyQ29tbWl0KQotewotICAgIG1faG9zdEltcGwtPnJlbGVhc2VDb250ZW50
c1RleHR1cmVzKCk7Ci0gICAgRVhQRUNUX1RSVUUobV9kaWRSZXF1ZXN0Q29tbWl0KTsKLX0KLQog
c3RydWN0IFJlbmRlclBhc3NDYWNoZUVudHJ5IHsKICAgICBtdXRhYmxlIE93blB0cjxDQ1JlbmRl
clBhc3M+IHJlbmRlclBhc3NQdHI7CiAgICAgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RleHR1cmVVcGRhdGVDb250
cm9sbGVyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGV4dHVyZVVw
ZGF0ZUNvbnRyb2xsZXJUZXN0LmNwcAppbmRleCAxMTY1OWY2ZjUyYjhhYmQwYWUzMDc1OWI3YTY2
NTQxNDUxMDYwNDNhLi4zMzBjYzRmZTY4YWY1Yjk3MWZlMmMzNjNjNTRlNDYzYTc1ZDM5MTdkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGV4dHVyZVVwZGF0ZUNv
bnRyb2xsZXJUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGV4
dHVyZVVwZGF0ZUNvbnRyb2xsZXJUZXN0LmNwcApAQCAtODcsMTAgKzg3LDE0IEBAIHByaXZhdGU6
CiAKIGNsYXNzIFRleHR1cmVGb3JVcGxvYWRUZXN0IDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0
ZXI6OlRleHR1cmUgewogcHVibGljOgotICAgIFRleHR1cmVGb3JVcGxvYWRUZXN0KCkgOiBMYXll
clRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKGFkb3B0UHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlPigw
KSkgeyB9CisgICAgVGV4dHVyZUZvclVwbG9hZFRlc3QoKSA6IExheWVyVGV4dHVyZVVwZGF0ZXI6
OlRleHR1cmUoYWRvcHRQdHI8Q0NQcmlvcml0aXplZFRleHR1cmU+KDApKSwgbV9kZWxldGVkKGZh
bHNlKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgYmFja2luZ1dhc0FzeW5jaHJvbm91c2x5RGVsZXRl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVsZXRlZDsgfQogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVS
ZWN0KENDUmVzb3VyY2VQcm92aWRlciosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0
IEludFNpemUmIGRlc3RPZmZzZXQpIHsgfQotfTsKIAorICAgIHZvaWQgc2V0QmFja2luZ0FzeW5j
aHJvbm91c2x5RGVsZXRlZCgpIHsgbV9kZWxldGVkID0gdHJ1ZTsgfQorcHJpdmF0ZToKKyAgICBi
b29sIG1fZGVsZXRlZDsKK307CiAKIGNsYXNzIENDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXJUZXN0
IDogcHVibGljIFRlc3QgewogcHVibGljOgpAQCAtMTgzLDI4ICsxODcsMzggQEAgcHJvdGVjdGVk
OgogICAgICAgICBXZWJDb21wb3NpdG9yOjpzaHV0ZG93bigpOwogICAgIH0KIAotICAgIHZvaWQg
YXBwZW5kRnVsbFVwbG9hZHNUb1VwZGF0ZVF1ZXVlKGludCBjb3VudCkKKyAgICB2b2lkIGFwcGVu
ZEZ1bGxVcGxvYWRzT2ZJbmRleGVkVGV4dHVyZVRvVXBkYXRlUXVldWUoaW50IGNvdW50LCBpbnQg
dGV4dHVyZUluZGV4KQogICAgIHsKICAgICAgICAgbV9mdWxsVXBsb2FkQ291bnRFeHBlY3RlZCAr
PSBjb3VudDsKICAgICAgICAgbV90b3RhbFVwbG9hZENvdW50RXhwZWN0ZWQgKz0gY291bnQ7CiAK
ICAgICAgICAgY29uc3QgSW50UmVjdCByZWN0KDAsIDAsIDMwMCwgMTUwKTsKLSAgICAgICAgY29u
c3QgVGV4dHVyZVVwbG9hZGVyOjpQYXJhbWV0ZXJzIHVwbG9hZCA9IHsgJm1fdGV4dHVyZSwgcmVj
dCwgSW50U2l6ZSgpIH07CisgICAgICAgIGNvbnN0IFRleHR1cmVVcGxvYWRlcjo6UGFyYW1ldGVy
cyB1cGxvYWQgPSB7ICZtX3RleHR1cmVzW3RleHR1cmVJbmRleF0sIHJlY3QsIEludFNpemUoKSB9
OwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCiAgICAgICAgICAgICBt
X3F1ZXVlLT5hcHBlbmRGdWxsVXBsb2FkKHVwbG9hZCk7CiAgICAgfQogCi0gICAgdm9pZCBhcHBl
bmRQYXJ0aWFsVXBsb2Fkc1RvVXBkYXRlUXVldWUoaW50IGNvdW50KQorICAgIHZvaWQgYXBwZW5k
RnVsbFVwbG9hZHNUb1VwZGF0ZVF1ZXVlKGludCBjb3VudCkKKyAgICB7CisgICAgICAgIGFwcGVu
ZEZ1bGxVcGxvYWRzT2ZJbmRleGVkVGV4dHVyZVRvVXBkYXRlUXVldWUoY291bnQsIDApOworICAg
IH0KKworICAgIHZvaWQgYXBwZW5kUGFydGlhbFVwbG9hZHNPZkluZGV4ZWRUZXh0dXJlVG9VcGRh
dGVRdWV1ZShpbnQgY291bnQsIGludCB0ZXh0dXJlSW5kZXgpCiAgICAgewogICAgICAgICBtX3Bh
cnRpYWxDb3VudEV4cGVjdGVkICs9IGNvdW50OwogICAgICAgICBtX3RvdGFsVXBsb2FkQ291bnRF
eHBlY3RlZCArPSBjb3VudDsKIAogICAgICAgICBjb25zdCBJbnRSZWN0IHJlY3QoMCwgMCwgMTAw
LCAxMDApOwotICAgICAgICBjb25zdCBUZXh0dXJlVXBsb2FkZXI6OlBhcmFtZXRlcnMgdXBsb2Fk
ID0geyAmbV90ZXh0dXJlLCByZWN0LCBJbnRTaXplKCkgfTsKKyAgICAgICAgY29uc3QgVGV4dHVy
ZVVwbG9hZGVyOjpQYXJhbWV0ZXJzIHVwbG9hZCA9IHsgJm1fdGV4dHVyZXNbdGV4dHVyZUluZGV4
XSwgcmVjdCwgSW50U2l6ZSgpIH07CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKICAgICAgICAgICAgIG1fcXVldWUtPmFwcGVuZFBhcnRpYWxVcGxvYWQodXBsb2FkKTsK
ICAgICB9CiAKKyAgICB2b2lkIGFwcGVuZFBhcnRpYWxVcGxvYWRzVG9VcGRhdGVRdWV1ZShpbnQg
Y291bnQpCisgICAgeworICAgICAgICBhcHBlbmRQYXJ0aWFsVXBsb2Fkc09mSW5kZXhlZFRleHR1
cmVUb1VwZGF0ZVF1ZXVlKGNvdW50LCAwKTsKKyAgICB9CisKICAgICB2b2lkIHNldE1heFVwbG9h
ZENvdW50UGVyVXBkYXRlKGludCBjb3VudCkKICAgICB7CiAgICAgICAgIG1fbWF4VXBsb2FkQ291
bnRQZXJVcGRhdGUgPSBjb3VudDsKQEAgLTIxNSw3ICsyMjksNyBAQCBwcm90ZWN0ZWQ6CiAgICAg
T3duUHRyPENDR3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7CiAgICAgT3duUHRyPENDUmVzb3Vy
Y2VQcm92aWRlcj4gbV9yZXNvdXJjZVByb3ZpZGVyOwogICAgIE93blB0cjxDQ1RleHR1cmVVcGRh
dGVRdWV1ZT4gbV9xdWV1ZTsKLSAgICBUZXh0dXJlRm9yVXBsb2FkVGVzdCBtX3RleHR1cmU7Cisg
ICAgVGV4dHVyZUZvclVwbG9hZFRlc3QgbV90ZXh0dXJlc1s0XTsKICAgICBGYWtlVGV4dHVyZUNv
cGllciBtX2NvcGllcjsKICAgICBUZXh0dXJlVXBsb2FkZXJGb3JVcGxvYWRUZXN0IG1fdXBsb2Fk
ZXI7CiAKQEAgLTY4NSw0ICs2OTksMzcgQEAgVEVTVF9GKENDVGV4dHVyZVVwZGF0ZUNvbnRyb2xs
ZXJUZXN0LCBVcGRhdGVzQ29tcGxldGVJbkZpbml0ZVRpbWUpCiAgICAgRVhQRUNUX0VRKDIsIG1f
bnVtVG90YWxVcGxvYWRzKTsKIH0KIAorVEVTVF9GKENDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXJU
ZXN0LCBBc3luY0RlbGV0aW9uKQoreworICAgIGFwcGVuZEZ1bGxVcGxvYWRzT2ZJbmRleGVkVGV4
dHVyZVRvVXBkYXRlUXVldWUoMSwgMCk7CisgICAgYXBwZW5kUGFydGlhbFVwbG9hZHNPZkluZGV4
ZWRUZXh0dXJlVG9VcGRhdGVRdWV1ZSgxLCAxKTsKKyAgICBhcHBlbmRGdWxsVXBsb2Fkc09mSW5k
ZXhlZFRleHR1cmVUb1VwZGF0ZVF1ZXVlKDEsIDIpOworICAgIGFwcGVuZFBhcnRpYWxVcGxvYWRz
T2ZJbmRleGVkVGV4dHVyZVRvVXBkYXRlUXVldWUoMSwgMyk7CisgICAgRGVidWdTY29wZWRTZXRJ
bXBsVGhyZWFkIGltcGxUaHJlYWQ7CisKKyAgICBtX3F1ZXVlLT5jbGVhclVwbG9hZHNUb0RlbGV0
ZWRSZXNvdXJjZXMoKTsKKyAgICBFWFBFQ1RfRVEoMnUsIG1fcXVldWUtPmZ1bGxVcGxvYWRTaXpl
KCkpOworICAgIEVYUEVDVF9FUSgydSwgbV9xdWV1ZS0+cGFydGlhbFVwbG9hZFNpemUoKSk7CisK
KyAgICBtX3RleHR1cmVzWzBdLnNldEJhY2tpbmdBc3luY2hyb25vdXNseURlbGV0ZWQoKTsKKyAg
ICBtX3F1ZXVlLT5jbGVhclVwbG9hZHNUb0RlbGV0ZWRSZXNvdXJjZXMoKTsKKyAgICBFWFBFQ1Rf
RVEoMXUsIG1fcXVldWUtPmZ1bGxVcGxvYWRTaXplKCkpOworICAgIEVYUEVDVF9FUSgydSwgbV9x
dWV1ZS0+cGFydGlhbFVwbG9hZFNpemUoKSk7CisKKyAgICBtX3RleHR1cmVzWzNdLnNldEJhY2tp
bmdBc3luY2hyb25vdXNseURlbGV0ZWQoKTsKKyAgICBtX3F1ZXVlLT5jbGVhclVwbG9hZHNUb0Rl
bGV0ZWRSZXNvdXJjZXMoKTsKKyAgICBFWFBFQ1RfRVEoMXUsIG1fcXVldWUtPmZ1bGxVcGxvYWRT
aXplKCkpOworICAgIEVYUEVDVF9FUSgxdSwgbV9xdWV1ZS0+cGFydGlhbFVwbG9hZFNpemUoKSk7
CisKKyAgICBtX3RleHR1cmVzWzJdLnNldEJhY2tpbmdBc3luY2hyb25vdXNseURlbGV0ZWQoKTsK
KyAgICBtX3F1ZXVlLT5jbGVhclVwbG9hZHNUb0RlbGV0ZWRSZXNvdXJjZXMoKTsKKyAgICBFWFBF
Q1RfRVEoMHUsIG1fcXVldWUtPmZ1bGxVcGxvYWRTaXplKCkpOworICAgIEVYUEVDVF9FUSgxdSwg
bV9xdWV1ZS0+cGFydGlhbFVwbG9hZFNpemUoKSk7CisKKyAgICBtX3RleHR1cmVzWzFdLnNldEJh
Y2tpbmdBc3luY2hyb25vdXNseURlbGV0ZWQoKTsKKyAgICBtX3F1ZXVlLT5jbGVhclVwbG9hZHNU
b0RlbGV0ZWRSZXNvdXJjZXMoKTsKKyAgICBFWFBFQ1RfRVEoMHUsIG1fcXVldWUtPmZ1bGxVcGxv
YWRTaXplKCkpOworICAgIEVYUEVDVF9FUSgwdSwgbV9xdWV1ZS0+cGFydGlhbFVwbG9hZFNpemUo
KSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161809</attachid>
            <date>2012-08-31 19:15:53 -0700</date>
            <delta_ts>2012-09-05 00:11:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95057-20120831191540.patch</filename>
            <type>text/plain</type>
            <size>52222</size>
            <attacher name="Christopher Cameron">ccameron</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3MzQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzg0Y2Y2ZGM1NDJmYWM3
ODljNGNlNGYzOWM3ODkxMTcxYjIxM2MwZC4uZTA1NjEzOWNmYTlkMzhmYTFlNzQ5ZjRiYmFiZTI4
MWMzMDdlZTVmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDEyLTA4LTMxICBDaHJp
c3RvcGhlciBDYW1lcm9uICA8Y2NhbWVyb25AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJv
bWl1bV0gQWxsb3cgaW1wbC10aHJlYWQgZGVsZXRpb24gb2Ygb25seSBzb21lIHJlc291cmNlcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTUwNTcKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUb3dhcmRzIGFs
bG93aW5nIHRoZSBpbXBsIHRocmVhZCB0byBkZWxldGUganVzdCBzb21lIHJlc291cmNlcyAoYXMK
KyAgICAgICAgb3Bwb3NlZCB0byBkZWxldGluZyBhbGwgcmVzb3VyY2VzKS4KKworICAgICAgICBE
byBpbXBsLXRocmVhZCBkZWxldGlvbiB0aHJvdWdoIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdl
ciBpbnN0ZWFkIG9mCisgICAgICAgIENDUmVzb3VyY2VQcm92aWRlci4gSW4gc3Vic2VxdWVudCBj
aGFuZ2VzIHRoZSBpbXBsIHRocmVhZCB3aWxsIGJlIGFibGUKKyAgICAgICAgdG8gc2V0IGEgdGhy
ZXNob2xkIGZvciB3aGF0IHRvIGRlbGV0ZSkuIFB1dCBhbGwgc3RhdGUgdGhhdCBjYW4KKyAgICAg
ICAgYmUgY29uY3VycmVudGx5IGFjY2Vzc2VkIGJ5IHRoZSBtYWluIGFuZCBpbXBsIHRocmVhZHMg
aW50byBhIHNlcGFyYXRlCisgICAgICAgIFNoYXJlZFN0YXRlIHN1Yi1jbGFzcyB3aGljaCBoYXMg
YSBtdXRleC4gQWRkIGEgc2V0IG9mIHRleHR1cmVzIHRoYXQKKyAgICAgICAgaGF2ZSBiZWVuIGRl
bGV0ZWQgYnkgdGhlIGltcGwgdGhyZWFkLCBidXQgaGF2ZSBub3QgaGFkIHRoZWlyIHJlbGF0ZWQK
KyAgICAgICAgc3RydWN0dXJlcyBjbGVhcmVkIGJ5IHRoZSBtYWluIHRocmVhZCB5ZXQuIEFkZCBo
ZWxwZXIgZnVuY3Rpb25zIHRvIGRlbGV0ZQorICAgICAgICBhIGJhY2tpbmcncyByZXNvdXJjZS4K
KworICAgICAgICBBbGxvdyBtdWx0aXBsZSB0ZXh0dXJlIHB1cmdlcyB0byBvY2N1ciB3aXRob3V0
IGEgY29tbWl0IGJldHdlZW4gdGhlbS4KKyAgICAgICAgSW4gQ0NUaHJlYWRQcm94eSwgbWFrZSB0
aGUgYWNrbm93bGVkZ2VtZW50IG9mIHRleHR1cmUgZGVsZXRpb24gYmUgYW4KKyAgICAgICAgaW50
ZWdlciBjb3VudGVyIGluc3RlYWQgb2YgYSBib29sLCBiZWNhdXNlIHdlIG1heSBoYXZlIG11bHRp
cGxlCisgICAgICAgIG5vdC15ZXQtYWNrbm93bGVkZ2VkIHB1cmdlcy4gUmVtb3ZlIG1hbnkgaW5z
dGFuY2VzIHdoZXJlIHRleHR1cmUgcHVyZ2VzCisgICAgICAgIHdlcmUgYXZvaWRlZCB3aGVuIHRo
ZXJlIHdhcyBhbiBvdXRzdGFuZGluZyB0ZXh0dXJlIHB1cmdlLgorCisgICAgICAgIEFkZCB0aGUg
YWJpbGl0eSB0byBjbGVhciBvbmx5IHRoZSByZWZlcmVuY2VzIHRvIGRlbGV0ZWQgdGV4dHVyZXMg
ZnJvbQorICAgICAgICB0aGUgdGV4dHVyZSB1cGxvYWQgcXVldWUuCisKKyAgICAgICAgQWRkIGFz
c2VydGlvbnMgdGhhdCByZXNvdXJjZXMgYmUgZnJlZWQgdG8gQ0NQcmlvcml0aXplZFRleHR1cmVN
YW5hZ2VyLgorCisgICAgICAgIE5ldyB0ZXN0IENDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXJUZXN0
X0FzeW5jRGVsZXRpb24KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyVGV4dHVyZVVwZGF0ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZS5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1
cmUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRp
emVkVGV4dHVyZU1hbmFnZXIuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVDb250
cm9sbGVyLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Rl
eHR1cmVVcGRhdGVDb250cm9sbGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlUXVldWUuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZVF1ZXVlLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHA6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oOgorCiAyMDEyLTA4
LTMwICBEaXJrIFNjaHVsemUgIDxrcml0QHdlYmtpdC5vcmc+CiAKICAgICAgICAgSW50cm9kdWNl
IG5ldyBDU1MgcHJvcGVydHkgZm9yIGNsaXAtcGF0aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpp
bmRleCA3ZmM0YjFlMDk5ZmE1NzViYjNlNTZkYjU0MDFhMGEzMmNhMTZhNjY4Li5mYTczOWNjODIw
ZmUwNmJjNDgwOGE3Nzg2ZjhmODljN2QyMDRmNzNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTA4LTMxICBDaHJpc3RvcGhlciBDYW1lcm9uICA8Y2Nh
bWVyb25AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQWxsb3cgaW1wbC10aHJl
YWQgZGVsZXRpb24gb2Ygb25seSBzb21lIHJlc291cmNlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTUwNTcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbiBDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgcmVt
b3ZlIHRoZSB0ZXN0CisgICAgICAgIHJlbGVhc2VDb250ZW50c1RleHR1cmVTaG91bGRUcmlnZ2Vy
Q29tbWl0IGJlY2F1c2UgaXQgaXMgbm8gbG9uZ2VyIHZhbGlkCisgICAgICAgIGFuZCBpcyByZWR1
bmRhbnQuICBBIHJlbGVhc2VDb250ZW50c1RleHR1cmUgd2lsbCBvbmx5IHRyaWdnZXIgYSBjb21t
aXQKKyAgICAgICAgaWYgdGhlIHJlbGVhc2VDb250ZW50c1RleHR1cmUgYWN0dWFsbHkgZGVsZXRl
cyBhbnkgdGV4dHVyZXMsIGFuZAorICAgICAgICBDQ0xheWVyVHJlZUhvc3RUZXN0RXZpY3RUZXh0
dXJlcyBhbHJlYWR5IHRlc3RzIHRoYXQgdGhlIGNvbW1pdCBpcworICAgICAgICBpc3N1ZWQgdXBv
biBldmljdGlvbi4KKworICAgICAgICBBZGQgQ0NUZXh0dXJlVXBkYXRlQ29udHJvbGxlclRlc3Rf
QXN5bmNEZWxldGlvbiB0ZXN0IHRvIHZhbGlkYXRlIG5ldworICAgICAgICB0ZXh0dXJlIHVwbG9h
ZCBxdWV1ZSBiZWhhdmlvci4KKworICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxU
ZXN0LmNwcDoKKyAgICAgICAgKiB0ZXN0cy9DQ1RleHR1cmVVcGRhdGVDb250cm9sbGVyVGVzdC5j
cHA6CisKIDIwMTItMDgtMzEgIFcuIEphbWVzIE1hY0xlYW4gIDx3am1hY2xlYW5AY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gTWFrZSBsaW5rIGhpZ2hsaWdodGVyIHVzZSBzYW1l
IG5vZGUgc2VsZWN0aW9uIGNyaXRlcmlhIGFzIENocm9taXVtIGZvciBBbmRyb2lkLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0
dXJlVXBkYXRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJUZXh0dXJlVXBkYXRlci5oCmluZGV4IDFhZDYxYzhkOGNhNDY1M2MxZjIwYjhjZWU0MjYy
Yzc3MWU0YmUyMWMuLjMzMThhZGI0MWJhYWVjMDBlMmU3MDNlYjBmNDQyZjk1MWMxYjQyNzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
VGV4dHVyZVVwZGF0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgKQEAgLTQ5LDYgKzQ5LDcgQEAgcHVibGljOgog
CiAgICAgICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlKiB0ZXh0dXJlKCkgeyByZXR1cm4gbV90ZXh0
dXJlLmdldCgpOyB9CiAgICAgICAgIHZvaWQgc3dhcFRleHR1cmVXaXRoKE93blB0cjxDQ1ByaW9y
aXRpemVkVGV4dHVyZT4mIHRleHR1cmUpIHsgbV90ZXh0dXJlLnN3YXAodGV4dHVyZSk7IH0KKyAg
ICAgICAgdmlydHVhbCBib29sIGJhY2tpbmdXYXNBc3luY2hyb25vdXNseURlbGV0ZWQoKSBjb25z
dCB7IHJldHVybiBtX3RleHR1cmUtPmJhY2tpbmdXYXNBc3luY2hyb25vdXNseURlbGV0ZWQoKTsg
fQogICAgICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVJlY3QoY29uc3QgSW50UmVjdCYgLyogc291
cmNlUmVjdCAqLywgQ0NSZW5kZXJpbmdTdGF0cyYpIHsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlUmVjdChDQ1Jlc291cmNlUHJvdmlkZXIqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0
LCBjb25zdCBJbnRTaXplJiBkZXN0T2Zmc2V0KSA9IDA7CiAgICAgcHJvdGVjdGVkOgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggMDg0NzRhMWQzN2VkMTdkNmNkM2U5OTY5MzJj
YmNjNWE2YTU4OWQxMC4uZGQxMmFjZDMwOGMzNjY2ODExNmZkNDE4YjMzMTQ3YmNmODVhZDgwZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC0xOTMsMTMgKzE5MywyMSBAQCBD
Q0xheWVyVHJlZUhvc3Q6OlJlY3JlYXRlUmVzdWx0IENDTGF5ZXJUcmVlSG9zdDo6cmVjcmVhdGVD
b250ZXh0KCkKICAgICByZXR1cm4gUmVjcmVhdGVGYWlsZWRBbmRHYXZlVXA7CiB9CiAKLXZvaWQg
Q0NMYXllclRyZWVIb3N0OjpkZWxldGVDb250ZW50c1RleHR1cmVzT25JbXBsVGhyZWFkKENDUmVz
b3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlcikKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Ojpk
ZWxldGVBbGxDb250ZW50c1RleHR1cmVzT25JbXBsVGhyZWFkKENDUmVzb3VyY2VQcm92aWRlciog
cmVzb3VyY2VQcm92aWRlcikKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkp
OwogICAgIGlmIChtX3JlbmRlcmVySW5pdGlhbGl6ZWQpCiAgICAgICAgIG1fY29udGVudHNUZXh0
dXJlTWFuYWdlci0+Y2xlYXJBbGxNZW1vcnkocmVzb3VyY2VQcm92aWRlcik7CiB9CiAKK2Jvb2wg
Q0NMYXllclRyZWVIb3N0OjpyZWR1Y2VDb250ZW50c1RleHR1cmVzTWVtb3J5T25JbXBsVGhyZWFk
KENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlcikKK3sKKyAgICBBU1NFUlQoQ0NQ
cm94eTo6aXNJbXBsVGhyZWFkKCkpOworICAgIGlmIChtX3JlbmRlcmVySW5pdGlhbGl6ZWQpCisg
ICAgICAgIHJldHVybiBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9yeU9uSW1w
bFRocmVhZChyZXNvdXJjZVByb3ZpZGVyKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHZvaWQg
Q0NMYXllclRyZWVIb3N0OjphY3F1aXJlTGF5ZXJUZXh0dXJlcygpCiB7CiAgICAgQVNTRVJUKEND
UHJveHk6OmlzTWFpblRocmVhZCgpKTsKQEAgLTQxNCwxMSArNDIyLDEyIEBAIHZvaWQgQ0NMYXll
clRyZWVIb3N0OjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKICAgICBtX3Byb3h5LT5zZXRWaXNp
YmxlKHZpc2libGUpOwogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZXZpY3RBbGxDb250ZW50
VGV4dHVyZXMoKQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZGVzdHJveUNvbnRlbnRzVGV4dHVy
ZXNFdmljdGVkQnlJbXBsVGhyZWFkKGludCogcHVyZ2VDb3VudGVyQWNrKQogewogICAgIEFTU0VS
VChDQ1Byb3h5Ojppc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKG1fY29udGVudHNUZXh0dXJl
TWFuYWdlci5nZXQoKSk7Ci0gICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5hbGxCYWNraW5n
VGV4dHVyZXNXZXJlRGVsZXRlZCgpOworICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+ZGVz
dHJveUV2aWN0ZWRCYWNraW5ncyhwdXJnZUNvdW50ZXJBY2spOwogfQogCiB2b2lkIENDTGF5ZXJU
cmVlSG9zdDo6c3RhcnRQYWdlU2NhbGVBbmltYXRpb24oY29uc3QgSW50U2l6ZSYgdGFyZ2V0UG9z
aXRpb24sIGJvb2wgdXNlQW5jaG9yLCBmbG9hdCBzY2FsZSwgZG91YmxlIGR1cmF0aW9uU2VjKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAppbmRleCA3NDI3ODhjNzA2NzgzYmI2MzhmNTNkNjI2
ZjJkYzVjYzFlM2E1ODBhLi5kYzI1YWQ0MWY5NWM1NTk0MDkyMWI5NzQ3ZGI4ZjBhNGRjMzJlOGUx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApAQCAtMTU0LDcgKzE1NCw2IEBAIHB1Ymxp
YzoKICAgICBSZWNyZWF0ZVJlc3VsdCByZWNyZWF0ZUNvbnRleHQoKTsKICAgICB2b2lkIGRpZENv
bW1pdEFuZERyYXdGcmFtZSgpIHsgbV9jbGllbnQtPmRpZENvbW1pdEFuZERyYXdGcmFtZSgpOyB9
CiAgICAgdm9pZCBkaWRDb21wbGV0ZVN3YXBCdWZmZXJzKCkgeyBtX2NsaWVudC0+ZGlkQ29tcGxl
dGVTd2FwQnVmZmVycygpOyB9Ci0gICAgdm9pZCBkZWxldGVDb250ZW50c1RleHR1cmVzT25JbXBs
VGhyZWFkKENDUmVzb3VyY2VQcm92aWRlciopOwogICAgIHZpcnR1YWwgdm9pZCBhY3F1aXJlTGF5
ZXJUZXh0dXJlcygpOwogICAgIC8vIFJldHVybnMgZmFsc2UgaWYgd2Ugc2hvdWxkIGFib3J0IHRo
aXMgZnJhbWUgZHVlIHRvIGluaXRpYWxpemF0aW9uIGZhaWx1cmUuCiAgICAgYm9vbCBpbml0aWFs
aXplUmVuZGVyZXJJZk5lZWRlZCgpOwpAQCAtMjEyLDExICsyMTEsMTYgQEAgcHVibGljOgogCiAg
ICAgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyKiBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCkg
Y29uc3Q7CiAKLSAgICAvLyBUaGlzIHdpbGwgY2F1c2UgY29udGVudHMgdGV4dHVyZSBtYW5hZ2Vy
IHRvIGV2aWN0IGFsbCB0ZXh0dXJlcywgYnV0Ci0gICAgLy8gd2l0aG91dCBkZWxldGluZyB0aGVt
LiBUaGlzIGhhcHBlbnMgYWZ0ZXIgYWxsIGNvbnRlbnQgdGV4dHVyZXMgaGF2ZQotICAgIC8vIGFs
cmVhZHkgYmVlbiBkZWxldGVkIG9uIGltcGwsIGFmdGVyIGdldHRpbmcgYSAwIGFsbG9jYXRpb24g
bGltaXQuCi0gICAgLy8gU2V0IGR1cmluZyBhIGNvbW1pdCwgYnV0IGJlZm9yZSB1cGRhdGVMYXll
cnMuCi0gICAgdm9pZCBldmljdEFsbENvbnRlbnRUZXh0dXJlcygpOworICAgIHZvaWQgZGVsZXRl
QWxsQ29udGVudHNUZXh0dXJlc09uSW1wbFRocmVhZChDQ1Jlc291cmNlUHJvdmlkZXIqKTsKKwor
ICAgIC8vIFRoaXMgd2lsbCBjYXVzZSBjb250ZW50cyB0ZXh0dXJlIG1hbmFnZXIgdG8gZnJlZSBz
b21lIHJlc291cmNlcyB1c2VkCisgICAgLy8gYnkgdGV4dHVyZXMsIGJ1dCB3aWxsIG5vdCBkZWxl
dGUgdGhlIHRleHR1cmUgYmFja2luZ3Mgb2JqZWN0cy4gVGhlCisgICAgLy8gZnVuY3Rpb24gcmV0
dXJucyB0cnVlIGlmIHNvbWUgcmVzb3VyY2VzIHdlcmUgaW5kZWVkIGRlc3Ryb3llZC4KKyAgICBi
b29sIHJlZHVjZUNvbnRlbnRzVGV4dHVyZXNNZW1vcnlPbkltcGxUaHJlYWQoQ0NSZXNvdXJjZVBy
b3ZpZGVyKik7CisKKyAgICAvLyBUaGlzIHdpbGwgZGVzdHJveSB0aGUgYmFja2luZ3MgdGhhdCBo
YWQgdGhlaXIgR1BVIHJlc291cmNlcyBmcmVlZAorICAgIC8vIGJ5IGRlbGV0ZUNvbnRlbnRzVGV4
dHVyZXNSZXNvdXJjZXNPbkltcGxUaHJlYWQuCisgICAgdm9pZCBkZXN0cm95Q29udGVudHNUZXh0
dXJlc0V2aWN0ZWRCeUltcGxUaHJlYWQoaW50KiBwdXJnZUNvdW50ZXJBY2spOwogCiAgICAgYm9v
bCB2aXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV92aXNpYmxlOyB9CiAgICAgdm9pZCBzZXRWaXNp
YmxlKGJvb2wpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCBm
Y2RkMjhiY2U4NjViNWU2MDFkZjUxOGI1ZTNjNjgxOTczNDU3YjFjLi5kYWE0ODFhNGJiMDI4YjE3
MTc2M2UxMzhmOWMxMzc3MWU0ZDE2YzIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmNwcApAQCAtNTI1LDExICs1MjUsNyBAQCBib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6
OnByZXBhcmVUb0RyYXcoRnJhbWVEYXRhJiBmcmFtZSkKIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpyZWxlYXNlQ29udGVudHNUZXh0dXJlcygpCiB7Ci0gICAgaWYgKG1fY29udGVudHNUZXh0
dXJlc1B1cmdlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fcmVzb3VyY2VQcm92aWRlci0+ZGVs
ZXRlT3duZWRSZXNvdXJjZXMoQ0NSZW5kZXJlcjo6Q29udGVudFBvb2wpOwotICAgIG1fY29udGVu
dHNUZXh0dXJlc1B1cmdlZCA9IHRydWU7Ci0gICAgbV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25J
bXBsVGhyZWFkKCk7CisgICAgbV9jbGllbnQtPnJlZHVjZUNvbnRlbnRzVGV4dHVyZXNNZW1vcnlP
bkltcGxUaHJlYWQoKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRNZW1vcnlB
bGxvY2F0aW9uTGltaXRCeXRlcyhzaXplX3QgYnl0ZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmgKaW5kZXggYjNkMDdhYzI5YzBhODA3OGYwMTdjOGUxODkzMGJhMDA3MjkwNjM4
NC4uMjU0MmY4MGRmOTdlNmYxNTI4ZTIzYTEwOTZiOGY3NTkxMzJjY2RiYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApAQCAtNjAsNiArNjAsNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCkgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBzZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgcG9zdEFuaW1hdGlvbkV2ZW50c1RvTWFpblRocmVhZE9uSW1wbFRocmVhZChQYXNzT3duUHRy
PENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiwgZG91YmxlIHdhbGxDbG9ja1RpbWUpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVkdWNlQ29udGVudHNUZXh0dXJlc01lbW9yeU9uSW1wbFRocmVhZCgp
ID0gMDsKIH07CiAKIC8vIENDTGF5ZXJUcmVlSG9zdEltcGwgb3ducyB0aGUgQ0NMYXllckltcGwg
dHJlZSBhcyB3ZWxsIGFzIGFzc29jaWF0ZWQgcmVuZGVyaW5nIHN0YXRlCkBAIC0xNTksNyArMTYw
LDcgQEAgcHVibGljOgogICAgIGludCBzb3VyY2VGcmFtZU51bWJlcigpIGNvbnN0IHsgcmV0dXJu
IG1fc291cmNlRnJhbWVOdW1iZXI7IH0KICAgICB2b2lkIHNldFNvdXJjZUZyYW1lTnVtYmVyKGlu
dCBmcmFtZU51bWJlcikgeyBtX3NvdXJjZUZyYW1lTnVtYmVyID0gZnJhbWVOdW1iZXI7IH0KIAot
ICAgIGJvb2wgY29udGVudHNUZXh0dXJlc1B1cmdlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVu
dHNUZXh0dXJlc1B1cmdlZDsgfQorICAgIHZvaWQgc2V0Q29udGVudHNUZXh0dXJlc1B1cmdlZCgp
IHsgbV9jb250ZW50c1RleHR1cmVzUHVyZ2VkID0gdHJ1ZTsgfQogICAgIHZvaWQgcmVzZXRDb250
ZW50c1RleHR1cmVzUHVyZ2VkKCkgeyBtX2NvbnRlbnRzVGV4dHVyZXNQdXJnZWQgPSBmYWxzZTsg
fQogICAgIHNpemVfdCBtZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlcygpIGNvbnN0IHsgcmV0dXJu
IG1fbWVtb3J5QWxsb2NhdGlvbkxpbWl0Qnl0ZXM7IH0KIApAQCAtMjgyLDYgKzI4MywxMCBAQCBw
cml2YXRlOgogICAgIEludFNpemUgbV9kZXZpY2VWaWV3cG9ydFNpemU7CiAgICAgZmxvYXQgbV9k
ZXZpY2VTY2FsZUZhY3RvcjsKICAgICBib29sIG1fdmlzaWJsZTsKKworICAgIC8vIFNldCB3aGVu
IHRoZSBpbXBsIHRocmVhZCBkZWxldGVzIHRleHR1cmVzLCB1bi1zZXQgd2hlbiB0aGUgaW1wbCdz
IGxheWVyIHRyZWUKKyAgICAvLyBpcyBrbm93biB0byBub3QgcmVmZXJlbmNlIGFueSBkZWxldGVk
IHJlc291cmNlcy4gVXNlZCB0byBwcmV2ZW50IGRyYXdpbmcKKyAgICAvLyB3aXRoIGRlbGV0ZWQg
cmVzb3VyY2VzLgogICAgIGJvb2wgbV9jb250ZW50c1RleHR1cmVzUHVyZ2VkOwogICAgIHNpemVf
dCBtX21lbW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9y
aXRpemVkVGV4dHVyZS5jcHAKaW5kZXggZDlmNjhhZjBhZTBiOTkyODEzM2EyMzJkNzQxNjkyNDc2
MTIwNmRkYi4uZGMwOGNlNzRmOTI5ZDdhNDQ0NmJjZmE2NmUzOWViOGI5MDRiYjliOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlv
cml0aXplZFRleHR1cmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlLmNwcApAQCAtMjgsNiArMjgsNyBAQAog
CiAjaW5jbHVkZSAiQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiQ0NQ
cmlvcml0eUNhbGN1bGF0b3IuaCIKKyNpbmNsdWRlICJDQ1Byb3h5LmgiCiAjaW5jbHVkZSA8YWxn
b3JpdGhtPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpAQCAtMTEwLDkgKzExMSwxNyBAQCB2b2lk
IENDUHJpb3JpdGl6ZWRUZXh0dXJlOjp1cGxvYWQoQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJj
ZVByb3ZpZGVyLAogICAgIGlmIChtX2lzQWJvdmVQcmlvcml0eUN1dG9mZikKICAgICAgICAgYWNx
dWlyZUJhY2tpbmdUZXh0dXJlKHJlc291cmNlUHJvdmlkZXIpOwogICAgIEFTU0VSVChtX2JhY2tp
bmcpOworICAgIEFTU0VSVCghYmFja2luZ1dhc0FzeW5jaHJvbm91c2x5RGVsZXRlZCgpKTsKICAg
ICByZXNvdXJjZVByb3ZpZGVyLT51cGxvYWQocmVzb3VyY2VJZCgpLCBpbWFnZSwgaW1hZ2VSZWN0
LCBzb3VyY2VSZWN0LCBkZXN0T2Zmc2V0KTsKIH0KIAorYm9vbCBDQ1ByaW9yaXRpemVkVGV4dHVy
ZTo6YmFja2luZ1dhc0FzeW5jaHJvbm91c2x5RGVsZXRlZCgpIGNvbnN0Cit7CisgICAgaWYgKG1f
YmFja2luZykKKyAgICAgICAgcmV0dXJuIG1fYmFja2luZy0+cmVzb3VyY2VEZWxldGVkKCk7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpsaW5rKEJh
Y2tpbmcqIGJhY2tpbmcpCiB7CiAgICAgQVNTRVJUKGJhY2tpbmcpOwpAQCAtMTM5LDQgKzE0OCwy
NSBAQCB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpzZXRUb1NlbGZNYW5hZ2VkTWVtb3J5UGxh
Y2Vob2xkZXIoc2l6ZV90IGJ5dGVzKQogICAgIG1fYnl0ZXMgPSBieXRlczsKIH0KIAorQ0NSZXNv
dXJjZVByb3ZpZGVyOjpSZXNvdXJjZUlkIENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nOjpp
ZCgpCit7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKyAgICByZXR1cm4g
bV90ZXh0dXJlLmlkKCk7Cit9CisKK2Jvb2wgQ0NQcmlvcml0aXplZFRleHR1cmU6OkJhY2tpbmc6
OnJlc291cmNlRGVsZXRlZCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRo
cmVhZCgpKTsKKyAgICByZXR1cm4gbV9yZXNvdXJjZURlbGV0ZWQ7Cit9CisKK3ZvaWQgQ0NQcmlv
cml0aXplZFRleHR1cmU6OkJhY2tpbmc6OmRlbGV0ZVJlc291cmNlKENDUmVzb3VyY2VQcm92aWRl
ciogcmVzb3VyY2VQcm92aWRlcikKK3sKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFk
KCkpOworICAgIEFTU0VSVChyZXNvdXJjZVByb3ZpZGVyKTsKKyAgICBBU1NFUlQoIW1fcmVzb3Vy
Y2VEZWxldGVkKTsKKyAgICByZXNvdXJjZVByb3ZpZGVyLT5kZWxldGVSZXNvdXJjZShtX3RleHR1
cmUuaWQoKSk7CisgICAgbV9yZXNvdXJjZURlbGV0ZWQgPSB0cnVlOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmUuaAppbmRleCAz
Nzg5ZDdmMjY5YTNkN2U1MTk1YTg5MmRkZDM3NmRhZTYxOGQyYjBlLi5jMGZjYTNlN2U2MTQ4Mzkz
NzU5MWI3MzhkNjE5YWIxZWEyNTE2NDQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRU
ZXh0dXJlLmgKQEAgLTg4LDYgKzg4LDggQEAgcHVibGljOgogICAgIC8vIFVwbG9hZHMgcGl4ZWxz
IGludG8gdGhlIGJhY2tpbmcgcmVzb3VyY2UuIFRoaXMgZnVuY3Rpb25zIHdpbGwgYXF1aXJlIHRo
ZSBiYWNraW5nIGlmIG5lZWRlZC4KICAgICB2b2lkIHVwbG9hZChDQ1Jlc291cmNlUHJvdmlkZXIq
LCBjb25zdCB1aW50OF90KiBpbWFnZSwgY29uc3QgSW50UmVjdCYgaW1hZ2VSZWN0LCBjb25zdCBJ
bnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRTaXplJiBkZXN0T2Zmc2V0KTsKIAorICAgIGJv
b2wgYmFja2luZ1dhc0FzeW5jaHJvbm91c2x5RGVsZXRlZCgpIGNvbnN0OworCiAgICAgQ0NSZXNv
dXJjZVByb3ZpZGVyOjpSZXNvdXJjZUlkIHJlc291cmNlSWQoKSBjb25zdDsKIAogICAgIC8vIFNl
bGYtbWFuYWdlZCB0ZXh0dXJlcyBhcmUgYWNjb3VudGVkIGZvciB3aGVuIHByaW9yaXRpemluZyBv
dGhlciB0ZXh0dXJlcywKQEAgLTEwMSwxNiArMTAzLDI4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjsKIAotICAgIGNsYXNz
IEJhY2tpbmcgOiBwdWJsaWMgQ0NUZXh0dXJlIHsKKyAgICBjbGFzcyBCYWNraW5nIHsKICAgICAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQmFja2luZyk7CiAgICAgcHVibGljOgogICAgICAgICBC
YWNraW5nKHVuc2lnbmVkIGlkLCBJbnRTaXplIHNpemUsIEdDM0RlbnVtIGZvcm1hdCkKLSAgICAg
ICAgICAgIDogQ0NUZXh0dXJlKGlkLCBzaXplLCBmb3JtYXQpLCBtX293bmVyKDApIHsgfQotICAg
ICAgICB+QmFja2luZygpIHsgQVNTRVJUKCFtX293bmVyKTsgfQorICAgICAgICAgICAgOiBtX3Rl
eHR1cmUoaWQsIHNpemUsIGZvcm1hdCksIG1fcmVzb3VyY2VEZWxldGVkKGZhbHNlKSwgbV9vd25l
cigwKSB7IH0KKyAgICAgICAgfkJhY2tpbmcoKSB7IEFTU0VSVCghbV9vd25lciAmJiBtX3Jlc291
cmNlRGVsZXRlZCk7IH0KKworICAgICAgICBDQ1ByaW9yaXRpemVkVGV4dHVyZSogb3duZXIoKSBj
b25zdCB7IHJldHVybiBtX293bmVyOyB9CisKKyAgICAgICAgQ0NSZXNvdXJjZVByb3ZpZGVyOjpS
ZXNvdXJjZUlkIGlkKCk7CisgICAgICAgIGNvbnN0IEludFNpemUmIHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX3RleHR1cmUuc2l6ZSgpOyB9CisgICAgICAgIEdDM0RlbnVtIGZvcm1hdCgpIGNvbnN0
IHsgcmV0dXJuIG1fdGV4dHVyZS5mb3JtYXQoKTsgfQorICAgICAgICBzaXplX3QgYnl0ZXMoKSBj
b25zdCB7IHJldHVybiBtX3RleHR1cmUuYnl0ZXMoKTsgfQorCisgICAgICAgIHZvaWQgZGVsZXRl
UmVzb3VyY2UoQ0NSZXNvdXJjZVByb3ZpZGVyKik7CisgICAgICAgIGJvb2wgcmVzb3VyY2VEZWxl
dGVkKCkgY29uc3Q7CiAKLSAgICAgICAgQ0NQcmlvcml0aXplZFRleHR1cmUqIG93bmVyKCkgeyBy
ZXR1cm4gbV9vd25lcjsgfQogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBDQ1By
aW9yaXRpemVkVGV4dHVyZTsKKyAgICAgICAgZnJpZW5kIGNsYXNzIENDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcjsKKyAgICAgICAgQ0NUZXh0dXJlIG1fdGV4dHVyZTsKKyAgICAgICAgYm9vbCBt
X3Jlc291cmNlRGVsZXRlZDsKICAgICAgICAgQ0NQcmlvcml0aXplZFRleHR1cmUqIG1fb3duZXI7
CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlci5jcHAKaW5kZXggODNkNjhhZDA3MWVkYjY1ODI4Mjg4OWFiYmIwMDdmNTc4ZWJhMjQ2MC4u
NWYwNDEyZWZiZjgwM2RmMjZjMGIzYTZjNTAwNDYxZDBmZDViNDQzZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRl
eHR1cmVNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuY3BwCkBAIC01MCwxMCArNTAs
MTEgQEAgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjp+Q0NQcmlvcml0aXplZFRleHR1cmVN
YW5hZ2VyKCkKICAgICB3aGlsZSAobV90ZXh0dXJlcy5zaXplKCkgPiAwKQogICAgICAgICB1bnJl
Z2lzdGVyVGV4dHVyZSgqbV90ZXh0dXJlcy5iZWdpbigpKTsKIAotICAgIC8vIEVhY2ggcmVtYWlu
aW5nIGJhY2tpbmcgaXMgYSBsZWFrZWQgb3BlbmdsIHRleHR1cmUuIFdlIGRvbid0IGhhdmUgdGhl
IHJlc291cmNlUHJvdmlkZXIKLSAgICAvLyB0byBkZWxldGUgdGhlIHRleHR1cmVzIGF0IHRoaXMg
dGltZSBzbyBjbGVhck1lbW9yeSgpIG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmUgdGhpcy4KLSAg
ICB3aGlsZSAobV9iYWNraW5ncy5zaXplKCkgPiAwKQotICAgICAgICBkZXN0cm95QmFja2luZygq
bV9iYWNraW5ncy5iZWdpbigpLCAwKTsKKyAgICAvLyBSZW1vdmUgYW55IGJhY2tpbmdzIHRoYXQg
d2VyZSBldmljdGVkLgorICAgIGNsZWFyRXZpY3RlZEJhY2tpbmdzKDApOworCisgICAgLy8gRWFj
aCByZW1haW5pbmcgYmFja2luZyBpcyByZWFsIG1lbW9yeSBsZWFrLiBUaGlzIHNob3VsZG4ndCBo
YXBwZW4uCisgICAgQVNTRVJUKG1fYmFja2luZ3MuaXNFbXB0eSgpKTsKIH0KIAogdm9pZCBDQ1By
aW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnByaW9yaXRpemVUZXh0dXJlcygpCkBAIC0xNzYsNiAr
MTc3LDcgQEAgYm9vbCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnJlcXVlc3RMYXRlKEND
UHJpb3JpdGl6ZWRUZXh0dXJlKiB0ZXh0dXJlKQogdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI6OmFjcXVpcmVCYWNraW5nVGV4dHVyZUlmTmVlZGVkKENDUHJpb3JpdGl6ZWRUZXh0dXJl
KiB0ZXh0dXJlLCBDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIpCiB7CiAgICAg
QVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpICYmIENDUHJveHk6OmlzTWFpblRocmVhZEJs
b2NrZWQoKSk7CisgICAgQVNTRVJUKHJlc291cmNlUHJvdmlkZXIpOwogICAgIEFTU0VSVCghdGV4
dHVyZS0+aXNTZWxmTWFuYWdlZCgpKTsKICAgICBBU1NFUlQodGV4dHVyZS0+aXNBYm92ZVByaW9y
aXR5Q3V0b2ZmKCkpOwogICAgIGlmICh0ZXh0dXJlLT5iYWNraW5nKCkgfHwgIXRleHR1cmUtPmlz
QWJvdmVQcmlvcml0eUN1dG9mZigpKQpAQCAtMTg4LDYgKzE5MCw4IEBAIHZvaWQgQ0NQcmlvcml0
aXplZFRleHR1cmVNYW5hZ2VyOjphY3F1aXJlQmFja2luZ1RleHR1cmVJZk5lZWRlZChDQ1ByaW9y
aXRpemVkVGV4CiAgICAgZm9yIChCYWNraW5nU2V0OjppdGVyYXRvciBpdCA9IG1fYmFja2luZ3Mu
YmVnaW4oKTsgaXQgIT0gbV9iYWNraW5ncy5lbmQoKTsgKytpdCkgewogICAgICAgICBpZiAoKCpp
dCktPm93bmVyKCkgJiYgKCppdCktPm93bmVyKCktPmlzQWJvdmVQcmlvcml0eUN1dG9mZigpKQog
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICgoKml0KS0+cmVzb3VyY2VEZWxldGVkKCkp
CisgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKCgqaXQpLT5zaXplKCkgPT0gdGV4
dHVyZS0+c2l6ZSgpICYmICgqaXQpLT5mb3JtYXQoKSA9PSB0ZXh0dXJlLT5mb3JtYXQoKSkgewog
ICAgICAgICAgICAgYmFja2luZyA9ICgqaXQpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xOTgs
NiArMjAyLDcgQEAgdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmFjcXVpcmVCYWNr
aW5nVGV4dHVyZUlmTmVlZGVkKENDUHJpb3JpdGl6ZWRUZXgKICAgICBpZiAoIWJhY2tpbmcpIHsK
ICAgICAgICAgcmVkdWNlTWVtb3J5KG1fbWVtb3J5QXZhaWxhYmxlQnl0ZXMgLSB0ZXh0dXJlLT5i
eXRlcygpLCByZXNvdXJjZVByb3ZpZGVyKTsKICAgICAgICAgYmFja2luZyA9IGNyZWF0ZUJhY2tp
bmcodGV4dHVyZS0+c2l6ZSgpLCB0ZXh0dXJlLT5mb3JtYXQoKSwgcmVzb3VyY2VQcm92aWRlcik7
CisgICAgICAgIG1fZXZpY3Rpb25TdGF0ZS5hZGRCYWNraW5nT25JbXBsVGhyZWFkKGJhY2tpbmcp
OwogICAgIH0KIAogICAgIC8vIE1vdmUgdGhlIHVzZWQgYmFja2luZyB0ZXh0dXJlIHRvIHRoZSBl
bmQgb2YgdGhlIGV2aWN0aW9uIGxpc3QuCkBAIC0yMTEsMTUgKzIxNiwxNyBAQCB2b2lkIENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6YWNxdWlyZUJhY2tpbmdUZXh0dXJlSWZOZWVkZWQoQ0NQ
cmlvcml0aXplZFRleAogdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnJlZHVjZU1l
bW9yeShzaXplX3QgbGltaXRCeXRlcywgQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3Zp
ZGVyKQogewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSAmJiBDQ1Byb3h5Ojpp
c01haW5UaHJlYWRCbG9ja2VkKCkpOworICAgIEFTU0VSVChyZXNvdXJjZVByb3ZpZGVyKTsKICAg
ICBpZiAobWVtb3J5VXNlQnl0ZXMoKSA8PSBsaW1pdEJ5dGVzKQogICAgICAgICByZXR1cm47CiAg
ICAgLy8gRGVzdHJveSBiYWNraW5ncyB1bnRpbCB3ZSBhcmUgYmVsb3cgdGhlIGxpbWl0LAogICAg
IC8vIG9yIHVudGlsIGFsbCBiYWNraW5ncyByZW1haW5pbmcgYXJlIGFib3ZlIHRoZSBjdXRvZmYu
CiAgICAgd2hpbGUgKG1lbW9yeVVzZUJ5dGVzKCkgPiBsaW1pdEJ5dGVzICYmIG1fYmFja2luZ3Mu
c2l6ZSgpID4gMCkgewotICAgICAgICBCYWNraW5nU2V0OjppdGVyYXRvciBpdCA9IG1fYmFja2lu
Z3MuYmVnaW4oKTsKLSAgICAgICAgaWYgKCgqaXQpLT5vd25lcigpICYmICgqaXQpLT5vd25lcigp
LT5pc0Fib3ZlUHJpb3JpdHlDdXRvZmYoKSkKKyAgICAgICAgQ0NQcmlvcml0aXplZFRleHR1cmU6
OkJhY2tpbmcqIGJhY2tpbmcgPSAqbV9iYWNraW5ncy5iZWdpbigpOworICAgICAgICBpZiAoYmFj
a2luZy0+b3duZXIoKSAmJiBiYWNraW5nLT5vd25lcigpLT5pc0Fib3ZlUHJpb3JpdHlDdXRvZmYo
KSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZXN0cm95QmFja2luZygoKml0KSwgcmVz
b3VyY2VQcm92aWRlcik7CisgICAgICAgIG1fZXZpY3Rpb25TdGF0ZS5yZW1vdmVCYWNraW5nT25J
bXBsVGhyZWFkKGJhY2tpbmcsIHJlc291cmNlUHJvdmlkZXIpOworICAgICAgICBkZXN0cm95QmFj
a2luZyhiYWNraW5nKTsKICAgICB9CiB9CiAKQEAgLTI0NiwyMyArMjUzLDM5IEBAIHZvaWQgQ0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpyZWR1Y2VNZW1vcnkoQ0NSZXNvdXJjZVByb3ZpZGVy
KiByZXNvdXJjZVByb3ZpCiAgICAgcmVkdWNlTWVtb3J5KG1lbW9yeVVzZUJ5dGVzKCkgLSAod2Fz
dGVkTWVtb3J5IC0gdGVuUGVyY2VudE9mTWVtb3J5KSwgcmVzb3VyY2VQcm92aWRlcik7CiB9CiAK
LXZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjbGVhckFsbE1lbW9yeShDQ1Jlc291
cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIpCitib29sIENDUHJpb3JpdGl6ZWRUZXh0dXJl
TWFuYWdlcjo6cmVkdWNlTWVtb3J5T25JbXBsVGhyZWFkKENDUmVzb3VyY2VQcm92aWRlciogcmVz
b3VyY2VQcm92aWRlcikKIHsKLSAgICAvLyBVbmxpbmsgYW5kIGRlc3Ryb3kgYWxsIGJhY2tpbmcg
dGV4dHVyZXMuCi0gICAgd2hpbGUgKG1fYmFja2luZ3Muc2l6ZSgpID4gMCkgewotICAgICAgICBC
YWNraW5nU2V0OjppdGVyYXRvciBpdCA9IG1fYmFja2luZ3MuYmVnaW4oKTsKLSAgICAgICAgaWYg
KCgqaXQpLT5vd25lcigpKQotICAgICAgICAgICAgKCppdCktPm93bmVyKCktPnVubGluaygpOwot
ICAgICAgICBkZXN0cm95QmFja2luZygoKml0KSwgcmVzb3VyY2VQcm92aWRlcik7Ci0gICAgfQor
ICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgQVNTRVJUKHJlc291cmNl
UHJvdmlkZXIpOworICAgIHJldHVybiBtX2V2aWN0aW9uU3RhdGUuZXZpY3RCYWNraW5nc1Jlc291
cmNlc09uSW1wbFRocmVhZChyZXNvdXJjZVByb3ZpZGVyKTsKK30KKwordm9pZCBDQ1ByaW9yaXRp
emVkVGV4dHVyZU1hbmFnZXI6OmRlc3Ryb3lFdmljdGVkQmFja2luZ3MoaW50KiBldmljdGlvbkNv
dW50ZXJBY2spCit7CisgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKKyAgICBj
bGVhckV2aWN0ZWRCYWNraW5ncyhldmljdGlvbkNvdW50ZXJBY2spOwogfQogCi12b2lkIENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6YWxsQmFja2luZ1RleHR1cmVzV2VyZURlbGV0ZWQoKQor
dm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNsZWFyRXZpY3RlZEJhY2tpbmdzKGlu
dCogZXZpY3Rpb25Db3VudGVyQWNrKQogewotICAgIC8vIFNhbWUgYXMgY2xlYXJBbGxNZW1vcnks
IGV4Y2VwdCBhbGwgb3VyIHRleHR1cmVzIHdlcmUgYWxyZWFkeQotICAgIC8vIGRlbGV0ZWQgZXh0
ZXJuYWxseSwgc28gd2UgZG9uJ3QgZGVsZXRlIHRoZW0uIFBhc3Npbmcgbm8KLSAgICAvLyByZXNv
dXJjZVByb3ZpZGVyIHJlc3VsdHMgaW4gbGVha2luZyB0aGUgKG5vdyBpbnZhbGlkKSB0ZXh0dXJl
IGlkcy4KLSAgICBjbGVhckFsbE1lbW9yeSgwKTsKKyAgICBCYWNraW5nU2V0IGV2aWN0ZWRCYWNr
aW5nczsKKyAgICBtX2V2aWN0aW9uU3RhdGUuZ2V0QW5kQ2xlYXJFdmljdGVkQmFja2luZ3MoZXZp
Y3RlZEJhY2tpbmdzLCBldmljdGlvbkNvdW50ZXJBY2spOworICAgIGZvciAoQmFja2luZ1NldDo6
aXRlcmF0b3IgaXQgPSBldmljdGVkQmFja2luZ3MuYmVnaW4oKTsgaXQgIT0gZXZpY3RlZEJhY2tp
bmdzLmVuZCgpOyArK2l0KQorICAgICAgICBkZXN0cm95QmFja2luZygoKml0KSk7Cit9CisKK2Jv
b2wgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjppc0V2aWN0aW9uQ291bnRlckFja1VwVG9E
YXRlKGludCBldmljdGlvbkNvdW50ZXJBY2spCit7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1w
bFRocmVhZCgpKTsKKyAgICByZXR1cm4gbV9ldmljdGlvblN0YXRlLmlzRXZpY3Rpb25Db3VudGVy
QWNrVXBUb0RhdGVPbkltcGxUaHJlYWQoZXZpY3Rpb25Db3VudGVyQWNrKTsKK30KKwordm9pZCBD
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNsZWFyQWxsTWVtb3J5KENDUmVzb3VyY2VQcm92
aWRlciogcmVzb3VyY2VQcm92aWRlcikKK3sKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhy
ZWFkKCkgJiYgQ0NQcm94eTo6aXNNYWluVGhyZWFkQmxvY2tlZCgpKTsKKyAgICBBU1NFUlQocmVz
b3VyY2VQcm92aWRlcik7CisgICAgcmVkdWNlTWVtb3J5T25JbXBsVGhyZWFkKHJlc291cmNlUHJv
dmlkZXIpOworICAgIGNsZWFyRXZpY3RlZEJhY2tpbmdzKDApOwogfQogCiB2b2lkIENDUHJpb3Jp
dGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmVnaXN0ZXJUZXh0dXJlKENDUHJpb3JpdGl6ZWRUZXh0dXJl
KiB0ZXh0dXJlKQpAQCAtMjc1LDcgKzI5OCw2IEBAIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVN
YW5hZ2VyOjpyZWdpc3RlclRleHR1cmUoQ0NQcmlvcml0aXplZFRleHR1cmUqIHRleHR1cmUpCiAK
ICAgICB0ZXh0dXJlLT5zZXRNYW5hZ2VySW50ZXJuYWwodGhpcyk7CiAgICAgbV90ZXh0dXJlcy5h
ZGQodGV4dHVyZSk7Ci0KIH0KIAogdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnVu
cmVnaXN0ZXJUZXh0dXJlKENDUHJpb3JpdGl6ZWRUZXh0dXJlKiB0ZXh0dXJlKQpAQCAtMzEzLDE1
ICszMzUsMTMgQEAgQ0NQcmlvcml0aXplZFRleHR1cmU6OkJhY2tpbmcqIENDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlcjo6Y3JlYXRlQmFja2luZyhJbnRTaXoKICAgICByZXR1cm4gYmFja2luZzsK
IH0KIAotdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmRlc3Ryb3lCYWNraW5nKEND
UHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nKiBiYWNraW5nLCBDQ1Jlc291cmNlUHJvdmlkZXIq
IHJlc291cmNlUHJvdmlkZXIpCit2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6ZGVz
dHJveUJhY2tpbmcoQ0NQcmlvcml0aXplZFRleHR1cmU6OkJhY2tpbmcqIGJhY2tpbmcpCiB7CiAg
ICAgQVNTRVJUKGJhY2tpbmcpOwotICAgIEFTU0VSVCghYmFja2luZy0+b3duZXIoKSB8fCAhYmFj
a2luZy0+b3duZXIoKS0+aXNBYm92ZVByaW9yaXR5Q3V0b2ZmKCkpOwogICAgIEFTU0VSVCghYmFj
a2luZy0+b3duZXIoKSB8fCAhYmFja2luZy0+b3duZXIoKS0+aXNTZWxmTWFuYWdlZCgpKTsKICAg
ICBBU1NFUlQobV9iYWNraW5ncy5maW5kKGJhY2tpbmcpICE9IG1fYmFja2luZ3MuZW5kKCkpOwor
ICAgIEFTU0VSVChiYWNraW5nLT5tX3Jlc291cmNlRGVsZXRlZCk7CiAKLSAgICBpZiAocmVzb3Vy
Y2VQcm92aWRlcikKLSAgICAgICAgcmVzb3VyY2VQcm92aWRlci0+ZGVsZXRlUmVzb3VyY2UoYmFj
a2luZy0+aWQoKSk7CiAgICAgaWYgKGJhY2tpbmctPm93bmVyKCkpCiAgICAgICAgIGJhY2tpbmct
Pm93bmVyKCktPnVubGluaygpOwogICAgIG1fbWVtb3J5VXNlQnl0ZXMgLT0gYmFja2luZy0+Ynl0
ZXMoKTsKQEAgLTMzMCw3ICszNTAsNiBAQCB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdl
cjo6ZGVzdHJveUJhY2tpbmcoQ0NQcmlvcml0aXplZFRleHR1cmU6OkJhY2tpbmcqCiAgICAgZGVs
ZXRlIGJhY2tpbmc7CiB9CiAKLQogI2lmICFBU1NFUlRfRElTQUJMRUQKIHZvaWQgQ0NQcmlvcml0
aXplZFRleHR1cmVNYW5hZ2VyOjphc3NlcnRJbnZhcmlhbnRzKCkKIHsKQEAgLTM2Nyw1ICszODYs
NjYgQEAgdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmFzc2VydEludmFyaWFudHMo
KQogfQogI2VuZGlmCiAKK0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6RXZpY3Rpb25TdGF0
ZTo6fkV2aWN0aW9uU3RhdGUoKQoreworICAgIEFTU0VSVChtX2V2aWN0ZWRCYWNraW5ncy5pc0Vt
cHR5KCkpOworICAgIEFTU0VSVChtX3VuZXZpY3RlZEJhY2tpbmdzLmlzRW1wdHkoKSk7Cit9CisK
K3ZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpFdmljdGlvblN0YXRlOjphZGRCYWNr
aW5nT25JbXBsVGhyZWFkKENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nKiBiYWNraW5nKQor
eworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSAmJiBDQ1Byb3h5Ojppc01haW5U
aHJlYWRCbG9ja2VkKCkpOworICAgIG1fdW5ldmljdGVkQmFja2luZ3MuYWRkKGJhY2tpbmcpOwor
fQorCit2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6RXZpY3Rpb25TdGF0ZTo6cmVt
b3ZlQmFja2luZ09uSW1wbFRocmVhZChDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZyogYmFj
a2luZywgQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyKQoreworICAgIEFTU0VS
VChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSAmJiBDQ1Byb3h5Ojppc01haW5UaHJlYWRCbG9ja2Vk
KCkpOworICAgIGlmIChiYWNraW5nLT5yZXNvdXJjZURlbGV0ZWQoKSkgeworICAgICAgICBBU1NF
UlQobV9ldmljdGVkQmFja2luZ3MuZmluZChiYWNraW5nKSAhPSBtX2V2aWN0ZWRCYWNraW5ncy5l
bmQoKSk7CisgICAgICAgIG1fZXZpY3RlZEJhY2tpbmdzLnJlbW92ZShiYWNraW5nKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBBU1NFUlQobV91bmV2aWN0ZWRCYWNraW5ncy5maW5kKGJhY2tpbmcp
ICE9IG1fdW5ldmljdGVkQmFja2luZ3MuZW5kKCkpOworICAgICAgICBtX3VuZXZpY3RlZEJhY2tp
bmdzLnJlbW92ZShiYWNraW5nKTsKKyAgICAgICAgYmFja2luZy0+ZGVsZXRlUmVzb3VyY2UocmVz
b3VyY2VQcm92aWRlcik7CisgICAgfQorfQorCitib29sIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcjo6RXZpY3Rpb25TdGF0ZTo6ZXZpY3RCYWNraW5nc1Jlc291cmNlc09uSW1wbFRocmVhZChD
Q1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIpCit7CisgICAgQVNTRVJUKENDUHJv
eHk6OmlzSW1wbFRocmVhZCgpKTsKKyAgICBCYWNraW5nVmVjdG9yIGJhY2tpbmdzVG9FdmljdDsK
KyAgICBmb3IgKEJhY2tpbmdTZXQ6Oml0ZXJhdG9yIGl0ID0gbV91bmV2aWN0ZWRCYWNraW5ncy5i
ZWdpbigpOyBpdCAhPSBtX3VuZXZpY3RlZEJhY2tpbmdzLmVuZCgpOyArK2l0KSB7CisgICAgICAg
ICgqaXQpLT5kZWxldGVSZXNvdXJjZShyZXNvdXJjZVByb3ZpZGVyKTsKKyAgICAgICAgYmFja2lu
Z3NUb0V2aWN0LmFwcGVuZCgoKml0KSk7CisgICAgfQorICAgIE11dGV4TG9ja2VyIGxvY2sobV9l
dmljdGVkU3RhdGVNdXRleCk7CisgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICBpZiAoIWJh
Y2tpbmdzVG9FdmljdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAg
ICAgZm9yIChCYWNraW5nVmVjdG9yOjppdGVyYXRvciBpdCA9IGJhY2tpbmdzVG9FdmljdC5iZWdp
bigpOyBpdCAhPSBiYWNraW5nc1RvRXZpY3QuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgICAgIG1f
dW5ldmljdGVkQmFja2luZ3MucmVtb3ZlKCgqaXQpKTsKKyAgICAgICAgICAgIG1fZXZpY3RlZEJh
Y2tpbmdzLmFkZCgoKml0KSk7CisgICAgICAgIH0KKyAgICAgICAgbV9ldmljdGlvbkNvdW50ZXIr
KzsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI6OkV2aWN0aW9uU3RhdGU6OmdldEFuZENsZWFyRXZpY3RlZEJhY2tpbmdzKEJh
Y2tpbmdTZXQmIGV2aWN0ZWRCYWNraW5ncywgaW50KiBldmljdGlvbkNvdW50ZXJBY2spCit7Cisg
ICAgZXZpY3RlZEJhY2tpbmdzLmNsZWFyKCk7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX2V2aWN0
ZWRTdGF0ZU11dGV4KTsKKyAgICBldmljdGVkQmFja2luZ3Muc3dhcChtX2V2aWN0ZWRCYWNraW5n
cyk7CisgICAgaWYgKGV2aWN0aW9uQ291bnRlckFjaykKKyAgICAgICAgKmV2aWN0aW9uQ291bnRl
ckFjayA9IG1fZXZpY3Rpb25Db3VudGVyOworfQorCitib29sIENDUHJpb3JpdGl6ZWRUZXh0dXJl
TWFuYWdlcjo6RXZpY3Rpb25TdGF0ZTo6aXNFdmljdGlvbkNvdW50ZXJBY2tVcFRvRGF0ZU9uSW1w
bFRocmVhZChpbnQgZXZpY3Rpb25Db3VudGVyQWNrKQoreworICAgIEFTU0VSVChDQ1Byb3h5Ojpp
c0ltcGxUaHJlYWQoKSk7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX2V2aWN0ZWRTdGF0ZU11dGV4
KTsKKyAgICByZXR1cm4gKGV2aWN0aW9uQ291bnRlckFjayA9PSBtX2V2aWN0aW9uQ291bnRlcik7
Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdl
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlv
cml0aXplZFRleHR1cmVNYW5hZ2VyLmgKaW5kZXggMTNkYmM1MTc2YmNkNzhlZTI5NzA5MGE2NzY1
MTI0NWY5YmQ3NjRjYS4uNGNkOGY1YzRlNDY0MjE1Y2IxZmJjYjkxY2EzZjEwM2FjZGFhNGQ4ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmgKQEAg
LTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFk
aW5nUHJpbWl0aXZlcy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtNzcsOCArNzgsMjQgQEAgcHVibGljOgogICAgIGJvb2wgcmVxdWVzdExhdGUo
Q0NQcmlvcml0aXplZFRleHR1cmUqKTsKIAogICAgIHZvaWQgcmVkdWNlTWVtb3J5KENDUmVzb3Vy
Y2VQcm92aWRlciopOworCisgICAgLy8gUmV0dXJucyB0cnVlIGFuZCBpbmNyZW1lbnRzIGFuIGlu
dGVybmFsIGV2aWN0aW9uIGNvdW50ZXIgaWYgcmVzb3VyY2VzIGFyZQorICAgIC8vIGRlbGV0ZWQg
YXMgYSByZXN1bHQgb2YgdGhpcyBjYWxsLgorICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgYXN5bmNo
cm9ub3VzIGluIHRoYXQgaXQgaXMgY2FsbGVkIG9uIHRoZSBpbXBsIHRocmVhZCB3aGlsZSB0aGUK
KyAgICAvLyBtYWluIHRocmVhZCBpcyBub3QgYmxvY2tlZCAoc28gaXQgbWF5IGJlIGNvbmN1cnJl
bnQgd2l0aCBvdGhlciBjYWxscyBmcm9tIHRoZQorICAgIC8vIG1haW4gdGhyZWFkKQorICAgIGJv
b2wgcmVkdWNlTWVtb3J5T25JbXBsVGhyZWFkKENDUmVzb3VyY2VQcm92aWRlciopOworCisgICAg
Ly8gUmVtb3ZlIHRoZSBiYWNraW5ncyB3aG9zZSByZXNvdXJjZXMgd2VyZSBkZXN0cm95ZWQgYnkg
cmVkdWNlTWVtb3J5T25JbXBsVGhyZWFkLgorICAgIC8vIFdyaXRlcyB0aGUgaW50ZXJuYWwgZXZp
Y3Rpb24gY291bnRlciB0byBldmljdGlvbkNvdW50ZXJBY2suCisgICAgdm9pZCBkZXN0cm95RXZp
Y3RlZEJhY2tpbmdzKGludCogZXZpY3Rpb25Db3VudGVyQWNrKTsKKworICAgIC8vIFJldHVybnMg
dHJ1ZSBpZiBldmljdGlvbkNvdW50ZXJBY2sgaXMgdGhlIHZhbHVlIG9mIGludGVybmFsIGV2aWN0
aW9uIGNvdW50ZXIuCisgICAgYm9vbCBpc0V2aWN0aW9uQ291bnRlckFja1VwVG9EYXRlKGludCBl
dmljdGlvbkNvdW50ZXJBY2spOworCisgICAgLy8gRGVsZXRlIGFsbCB0ZXh0dXJlcyBhbmQgZnJv
bSB0aGUgaW1wbCB0aHJlYWQgKGF0IHRocmVhZCBleGl0IGFuZAorICAgIC8vIGNvbnRleHQgbG9z
dCkuCiAgICAgdm9pZCBjbGVhckFsbE1lbW9yeShDQ1Jlc291cmNlUHJvdmlkZXIqKTsKLSAgICB2
b2lkIGFsbEJhY2tpbmdUZXh0dXJlc1dlcmVEZWxldGVkKCk7CiAKICAgICB2b2lkIGFjcXVpcmVC
YWNraW5nVGV4dHVyZUlmTmVlZGVkKENDUHJpb3JpdGl6ZWRUZXh0dXJlKiwgQ0NSZXNvdXJjZVBy
b3ZpZGVyKik7CiAKQEAgLTEwOSwxMSArMTI2LDEwIEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAg
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyKHNpemVfdCBtYXhNZW1vcnlMaW1pdEJ5dGVzLCBp
bnQgbWF4VGV4dHVyZVNpemUsIGludCBwb29sKTsKLQogICAgIHZvaWQgcmVkdWNlTWVtb3J5KHNp
emVfdCBsaW1pdCwgQ0NSZXNvdXJjZVByb3ZpZGVyKik7Ci0KICAgICBDQ1ByaW9yaXRpemVkVGV4
dHVyZTo6QmFja2luZyogY3JlYXRlQmFja2luZyhJbnRTaXplLCBHQzNEZW51bSBmb3JtYXQsIEND
UmVzb3VyY2VQcm92aWRlciopOwotICAgIHZvaWQgZGVzdHJveUJhY2tpbmcoQ0NQcmlvcml0aXpl
ZFRleHR1cmU6OkJhY2tpbmcqLCBDQ1Jlc291cmNlUHJvdmlkZXIqKTsKKyAgICB2b2lkIGNsZWFy
RXZpY3RlZEJhY2tpbmdzKGludCogZXZpY3Rpb25Db3VudGVyQWNrKTsKKyAgICB2b2lkIGRlc3Ry
b3lCYWNraW5nKENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nKik7CiAKICAgICBzaXplX3Qg
bV9tYXhNZW1vcnlMaW1pdEJ5dGVzOwogICAgIHVuc2lnbmVkIG1fcHJpb3JpdHlDdXRvZmY7CkBA
IC0xMzIsOCArMTQ4LDQ3IEBAIHByaXZhdGU6CiAKICAgICBUZXh0dXJlVmVjdG9yIG1fdGVtcFRl
eHR1cmVWZWN0b3I7CiAgICAgQmFja2luZ1ZlY3RvciBtX3RlbXBCYWNraW5nVmVjdG9yOworCisg
ICAgLy8gQWxsIHN0YXRlIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGJ5IHRoZSBpbXBsIHRocmVhZCB3
aGlsZSB0aGUgbWFpbiB0aHJlYWQKKyAgICAvLyBpcyBub3QgYmxvY2tlZCBpcyBzZXF1ZXN0ZXJl
ZCBpbiB0aGlzIHN0cnVjdHVyZS4KKyAgICBjbGFzcyBFdmljdGlvblN0YXRlIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIEV2aWN0aW9uU3RhdGUoKSA6IG1fZXZpY3Rpb25Db3VudGVyKDApIHsgfQor
ICAgICAgICB+RXZpY3Rpb25TdGF0ZSgpOworCisgICAgICAgIC8vIENhbGxlZCBvbiB0aGUgaW1w
bCB0aHJlYWQgd2hpbGUgdGhlIG1haW4gdGhyZWFkIGlzIGJsb2NrZWQKKyAgICAgICAgdm9pZCBh
ZGRCYWNraW5nT25JbXBsVGhyZWFkKENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nKik7CisK
KyAgICAgICAgLy8gQ2FsbGVkIG9uIHRoZSBpbXBsIHRocmVhZCB3aGlsZSB0aGUgbWFpbiB0aHJl
YWQgaXMgYmxvY2tlZC4gRGVsZXRlcworICAgICAgICAvLyB0aGUgYmFja2luZydzIHJlc291cmNl
IGlmIGl0IGhhcyBub3QgYmVlbiBkZWxldGVkIGFscmVhZHkuCisgICAgICAgIHZvaWQgcmVtb3Zl
QmFja2luZ09uSW1wbFRocmVhZChDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZyosIENDUmVz
b3VyY2VQcm92aWRlciopOworCisgICAgICAgIC8vIENhbGxlZCBvbiB0aGUgaW1wbCB0aHJlYWQg
d2hpbGUgdGhlIG1haW4gdGhyZWFkIG1heSBub3QgYmUgYmxvY2tlZAorICAgICAgICBib29sIGV2
aWN0QmFja2luZ3NSZXNvdXJjZXNPbkltcGxUaHJlYWQoQ0NSZXNvdXJjZVByb3ZpZGVyKik7CisK
KyAgICAgICAgLy8gQ2FsbGVkIG9uIHRoZSBtYWluIHRocmVhZCwgcG9zc2libHkgY29uY3VycmVu
dGx5IHdpdGggCisgICAgICAgIC8vIGV2aWN0QmFja2luZ3NSZXNvdXJjZXNPbkltcGxUaHJlYWRB
c3luYy4KKyAgICAgICAgLy8gQWxzbyBjYWxsZWQgb24gdGhlIGltcGwgdGhyZWFkIGR1cmluZyB0
ZWFyLWRvd24gYW5kIGNvbnRleHQtbG9zdAorICAgICAgICB2b2lkIGdldEFuZENsZWFyRXZpY3Rl
ZEJhY2tpbmdzKEJhY2tpbmdTZXQmLCBpbnQqIGV2aWN0aW9uQ291bnRlckFjayk7CisKKyAgICAg
ICAgLy8gUmV0dXJucyB0cnVlIGlmIGV2aWN0aW9uQ291bnRlckFjayBpcyB0aGUgdmFsdWUgb2Yg
aW50ZXJuYWwgZXZpY3Rpb24gY291bnRlci4KKyAgICAgICAgYm9vbCBpc0V2aWN0aW9uQ291bnRl
ckFja1VwVG9EYXRlT25JbXBsVGhyZWFkKGludCBldmljdGlvbkNvdW50ZXJBY2spOworCisgICAg
cHJpdmF0ZToKKyAgICAgICAgLy8gVGhpcyBzZXQgaXMgbmV2ZXIgYWNjZXNzZWQgb24gdGhlIG1h
aW4gdGhyZWFkLgorICAgICAgICBCYWNraW5nU2V0IG1fdW5ldmljdGVkQmFja2luZ3M7CisKKyAg
ICAgICAgLy8gVGhpcyBzdGF0ZSBjYW4gYmUgYWNjZXNzZWQgYnkgdGhlIGltcGwgdGhyZWFkIGFu
ZCB0aGUgbWFpbiB0aHJlYWQgY29uY3VycmVudGx5LAorICAgICAgICAvLyBhbmQgbWF5IGJlIGFj
Y2Vzc2VkIG9ubHkgd2hlbiBtX2V2aWN0ZWRCYWNraW5nc011dGV4IGlzIGhlbGQuCisgICAgICAg
IE11dGV4IG1fZXZpY3RlZFN0YXRlTXV0ZXg7CisgICAgICAgIEJhY2tpbmdTZXQgbV9ldmljdGVk
QmFja2luZ3M7CisgICAgICAgIGludCBtX2V2aWN0aW9uQ291bnRlcjsKKyAgICB9OworICAgIEV2
aWN0aW9uU3RhdGUgbV9ldmljdGlvblN0YXRlOwogfTsKIAorCisKIH0gLy8gV2ViQ29yZQogCiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKaW5kZXggNjg3NmVh
MjE4OGJhZjY2NjhhMjlhYzM3YzFjZDM4YzhjYjQ0MWNlOS4uNGI2NTE3YjRmZTYxNDg2ZGI5NThl
MzVkNjg2MzNhOWZhMDdmOTQyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94
eS5jcHAKQEAgLTE1NSw5ICsxNTUsOSBAQCBib29sIENDU2luZ2xlVGhyZWFkUHJveHk6OnJlY3Jl
YXRlQ29udGV4dCgpCiAKICAgICBib29sIGluaXRpYWxpemVkOwogICAgIHsKKyAgICAgICAgRGVi
dWdTY29wZWRTZXRNYWluVGhyZWFkQmxvY2tlZCBtYWluVGhyZWFkQmxvY2tlZDsKICAgICAgICAg
RGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7Ci0gICAgICAgIGlmICghbV9sYXllclRyZWVI
b3N0SW1wbC0+Y29udGVudHNUZXh0dXJlc1B1cmdlZCgpKQotICAgICAgICAgICAgbV9sYXllclRy
ZWVIb3N0LT5kZWxldGVDb250ZW50c1RleHR1cmVzT25JbXBsVGhyZWFkKG1fbGF5ZXJUcmVlSG9z
dEltcGwtPnJlc291cmNlUHJvdmlkZXIoKSk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGVs
ZXRlQWxsQ29udGVudHNUZXh0dXJlc09uSW1wbFRocmVhZChtX2xheWVyVHJlZUhvc3RJbXBsLT5y
ZXNvdXJjZVByb3ZpZGVyKCkpOwogICAgICAgICBpbml0aWFsaXplZCA9IG1fbGF5ZXJUcmVlSG9z
dEltcGwtPmluaXRpYWxpemVSZW5kZXJlcihjb250ZXh0LnJlbGVhc2UoKSwgVW50aHJvdHRsZWRV
cGxvYWRlcik7CiAgICAgICAgIGlmIChpbml0aWFsaXplZCkgewogICAgICAgICAgICAgbV9SZW5k
ZXJlckNhcGFiaWxpdGllc0Zvck1haW5UaHJlYWQgPSBtX2xheWVyVHJlZUhvc3RJbXBsLT5yZW5k
ZXJlckNhcGFiaWxpdGllcygpOwpAQCAtMjYwLDkgKzI2MCw3IEBAIHZvaWQgQ0NTaW5nbGVUaHJl
YWRQcm94eTo6c3RvcCgpCiAgICAgewogICAgICAgICBEZWJ1Z1Njb3BlZFNldE1haW5UaHJlYWRC
bG9ja2VkIG1haW5UaHJlYWRCbG9ja2VkOwogICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJl
YWQgaW1wbDsKLQotICAgICAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRlbnRzVGV4
dHVyZXNQdXJnZWQoKSkKLSAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGVsZXRlQ29udGVu
dHNUZXh0dXJlc09uSW1wbFRocmVhZChtX2xheWVyVHJlZUhvc3RJbXBsLT5yZXNvdXJjZVByb3Zp
ZGVyKCkpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmRlbGV0ZUFsbENvbnRlbnRzVGV4dHVy
ZXNPbkltcGxUaHJlYWQobV9sYXllclRyZWVIb3N0SW1wbC0+cmVzb3VyY2VQcm92aWRlcigpKTsK
ICAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC5jbGVhcigpOwogICAgIH0KICAgICBtX2xheWVy
VHJlZUhvc3QgPSAwOwpAQCAtMjc1LDYgKzI3MywxNSBAQCB2b2lkIENDU2luZ2xlVGhyZWFkUHJv
eHk6OnBvc3RBbmltYXRpb25FdmVudHNUb01haW5UaHJlYWRPbkltcGxUaHJlYWQoUGFzc093blB0
cgogICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0QW5pbWF0aW9uRXZlbnRzKGV2ZW50cywgd2FsbENs
b2NrVGltZSk7CiB9CiAKK3ZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6cmVkdWNlQ29udGVudHNU
ZXh0dXJlc01lbW9yeU9uSW1wbFRocmVhZCgpCit7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1w
bFRocmVhZCgpKTsKKyAgICBpZiAobV9sYXllclRyZWVIb3N0LT5yZWR1Y2VDb250ZW50c1RleHR1
cmVzTWVtb3J5T25JbXBsVGhyZWFkKG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJlc291cmNlUHJvdmlk
ZXIoKSkpIHsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+c2V0Q29udGVudHNUZXh0dXJl
c1B1cmdlZCgpOworICAgICAgICBzZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpOworICAgIH0K
K30KKwogLy8gQ2FsbGVkIGJ5IHRoZSBsZWdhY3kgc2NoZWR1bGluZyBwYXRoIChlLmcuIHdoZXJl
IHJlbmRlcl93aWRnZXQgZG9lcyB0aGUgc2NoZWR1bGluZykKIHZvaWQgQ0NTaW5nbGVUaHJlYWRQ
cm94eTo6Y29tcG9zaXRlSW1tZWRpYXRlbHkoKQogewpAQCAtMzAxLDkgKzMwOCw3IEBAIGJvb2wg
Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tbWl0QW5kQ29tcG9zaXRlKCkKICAgICBpZiAoIW1fbGF5
ZXJUcmVlSG9zdC0+aW5pdGlhbGl6ZVJlbmRlcmVySWZOZWVkZWQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgaWYgKG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRlbnRzVGV4dHVyZXNQ
dXJnZWQoKSkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5ldmljdEFsbENvbnRlbnRUZXh0dXJl
cygpOwotCisgICAgbV9sYXllclRyZWVIb3N0LT5kZXN0cm95Q29udGVudHNUZXh0dXJlc0V2aWN0
ZWRCeUltcGxUaHJlYWQoMCk7CiAgICAgQ0NUZXh0dXJlVXBkYXRlUXVldWUgcXVldWU7CiAgICAg
bV9sYXllclRyZWVIb3N0LT51cGRhdGVMYXllcnMocXVldWUsIG1fbGF5ZXJUcmVlSG9zdEltcGwt
Pm1lbW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzKCkpOwogICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwt
PnJlc2V0Q29udGVudHNUZXh0dXJlc1B1cmdlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJl
YWRQcm94eS5oCmluZGV4IDcxZjRmNGY1N2VjZTRhZGYxZTQ2NWEyNDg1OTk3YjVmYzkwYTJlMmQu
LjlmYjFhYjhkMzRjOGQ3N2I0MGQ4YzRlMzE3MjBhMWU0NDRiNjVkNzggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFk
UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1NpbmdsZVRocmVhZFByb3h5LmgKQEAgLTcyLDYgKzcyLDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBzZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpIE9WRVJSSURFIHsgbV9sYXll
clRyZWVIb3N0LT5zY2hlZHVsZUNvbXBvc2l0ZSgpOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldE5l
ZWRzQ29tbWl0T25JbXBsVGhyZWFkKCkgT1ZFUlJJREUgeyBtX2xheWVyVHJlZUhvc3QtPnNjaGVk
dWxlQ29tcG9zaXRlKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgcG9zdEFuaW1hdGlvbkV2ZW50c1Rv
TWFpblRocmVhZE9uSW1wbFRocmVhZChQYXNzT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9y
PiwgZG91YmxlIHdhbGxDbG9ja1RpbWUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZWR1
Y2VDb250ZW50c1RleHR1cmVzTWVtb3J5T25JbXBsVGhyZWFkKCkgT1ZFUlJJREU7CiAKICAgICAv
LyBDYWxsZWQgYnkgdGhlIGxlZ2FjeSBwYXRoIHdoZXJlIFJlbmRlcldpZGdldCBkb2VzIHRoZSBz
Y2hlZHVsaW5nLgogICAgIHZvaWQgY29tcG9zaXRlSW1tZWRpYXRlbHkoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVw
ZGF0ZUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlQ29udHJvbGxlci5jcHAKaW5kZXggNmZjNzcxZTk1OTA1
ZWUzYzg3ZTYxYjAxZjY4NjYzYjJmOTA2MDFjNy4uMzkzOWIxYjM4ODhjZmJkNGE4OWNhZjc0NTNj
NzEwOGMyZDI0ZDg1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlQ29u
dHJvbGxlci5jcHAKQEAgLTE1MCw2ICsxNTAsMTEgQEAgdm9pZCBDQ1RleHR1cmVVcGRhdGVDb250
cm9sbGVyOjp1cGRhdGVNb3JlVGV4dHVyZXMoZG91YmxlIG1vbm90b25pY1RpbWVMaW1pdCkKICAg
ICAgICAgdXBkYXRlTW9yZVRleHR1cmVzTm93KCk7CiB9CiAKK3ZvaWQgQ0NUZXh0dXJlVXBkYXRl
Q29udHJvbGxlcjo6ZGlzY2FyZFVwbG9hZHNUb0RlbGV0ZWRSZXNvdXJjZXMoKQoreworICAgIG1f
cXVldWUtPmNsZWFyVXBsb2Fkc1RvRGVsZXRlZFJlc291cmNlcygpOworfQorCiB2b2lkIENDVGV4
dHVyZVVwZGF0ZUNvbnRyb2xsZXI6Om9uVGltZXJGaXJlZCgpCiB7CiAgICAgaWYgKCFtX3F1ZXVl
LT5oYXNNb3JlVXBkYXRlcygpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlQ29udHJvbGxlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlQ29u
dHJvbGxlci5oCmluZGV4IGRkNzU4YmViNGQ5ZmNkODY2ZTE4Yzg0N2NjZDBhZjI4OWJhOTViZDEu
LmNhMzIzYzliYmRmZGUwM2ZkYmMzMmIwNTlkNjdhMGQzYzVjMTBjYTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0
ZUNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVDb250cm9sbGVyLmgKQEAgLTUxLDYgKzUxLDkgQEAgcHVi
bGljOgogICAgIGJvb2wgaGFzTW9yZVVwZGF0ZXMoKSBjb25zdDsKICAgICB2b2lkIHVwZGF0ZU1v
cmVUZXh0dXJlcyhkb3VibGUgbW9ub3RvbmljVGltZUxpbWl0KTsKIAorICAgIC8vIERpc2NhcmQg
dXBsb2FkcyB0byB0ZXh0dXJlcyB0aGF0IHdlcmUgZXZpY3RlZCBvbiB0aGUgaW1wbCB0aHJlYWQK
KyAgICB2b2lkIGRpc2NhcmRVcGxvYWRzVG9EZWxldGVkUmVzb3VyY2VzKCk7CisKICAgICAvLyBD
Q1RpbWVyQ2xpZW50IGltcGxlbWVudGF0aW9uLgogICAgIHZpcnR1YWwgdm9pZCBvblRpbWVyRmly
ZWQoKSBPVkVSUklERTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlUXVldWUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlUXVldWUuY3Bw
CmluZGV4IDhmNThmY2JjYjRjYmEyNGYzNGE1YWFkNDdlZDdjOTQ2MDc0M2MxYTguLjcxOWZjZDMx
NDQ1N2Y3NDYzN2JhNTg0NTBhOGNiM2Q0NzBiYWQ5ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZVF1ZXVlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Rl
eHR1cmVVcGRhdGVRdWV1ZS5jcHAKQEAgLTU0LDEwICs1NCwyMSBAQCB2b2lkIENDVGV4dHVyZVVw
ZGF0ZVF1ZXVlOjphcHBlbmRDb3B5KFRleHR1cmVDb3BpZXI6OlBhcmFtZXRlcnMgY29weSkKICAg
ICBtX2NvcHlFbnRyaWVzLmFwcGVuZChjb3B5KTsKIH0KIAotdm9pZCBDQ1RleHR1cmVVcGRhdGVR
dWV1ZTo6Y2xlYXJVcGxvYWRzKCkKK3ZvaWQgQ0NUZXh0dXJlVXBkYXRlUXVldWU6OmNsZWFyVXBs
b2Fkc1RvRGVsZXRlZFJlc291cmNlcygpCiB7Ci0gICAgbV9mdWxsRW50cmllcy5jbGVhcigpOwot
ICAgIG1fcGFydGlhbEVudHJpZXMuY2xlYXIoKTsKKyAgICBjbGVhclVwbG9hZHNUb0RlbGV0ZWRS
ZXNvdXJjZXMobV9mdWxsRW50cmllcyk7CisgICAgY2xlYXJVcGxvYWRzVG9EZWxldGVkUmVzb3Vy
Y2VzKG1fcGFydGlhbEVudHJpZXMpOworfQorCit2b2lkIENDVGV4dHVyZVVwZGF0ZVF1ZXVlOjpj
bGVhclVwbG9hZHNUb0RlbGV0ZWRSZXNvdXJjZXMoRGVxdWU8VGV4dHVyZVVwbG9hZGVyOjpQYXJh
bWV0ZXJzPiYgZW50cnlRdWV1ZSkKK3sKKyAgICBEZXF1ZTxUZXh0dXJlVXBsb2FkZXI6OlBhcmFt
ZXRlcnM+IHRlbXA7CisgICAgZW50cnlRdWV1ZS5zd2FwKHRlbXApOworICAgIHdoaWxlICh0ZW1w
LnNpemUoKSkgeworICAgICAgICBUZXh0dXJlVXBsb2FkZXI6OlBhcmFtZXRlcnMgdXBsb2FkID0g
dGVtcC50YWtlRmlyc3QoKTsKKyAgICAgICAgaWYgKCF1cGxvYWQudGV4dHVyZS0+YmFja2luZ1dh
c0FzeW5jaHJvbm91c2x5RGVsZXRlZCgpKQorICAgICAgICAgICAgZW50cnlRdWV1ZS5hcHBlbmQo
dXBsb2FkKTsKKyAgICB9CiB9CiAKIFRleHR1cmVVcGxvYWRlcjo6UGFyYW1ldGVycyBDQ1RleHR1
cmVVcGRhdGVRdWV1ZTo6dGFrZUZpcnN0RnVsbFVwbG9hZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVRdWV1
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0
dXJlVXBkYXRlUXVldWUuaAppbmRleCBkZTYzNzM4MjFmMDhhODQ1NGFlNjQ4NWI2YWYzNzQ4M2M3
ODA1ZWU2Li5jOGRjYjE2ZTAyM2JiYTE3NmI1MDhlMWNkOTRiNjhmNjI3ZDk3MGUyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1
cmVVcGRhdGVRdWV1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZVF1ZXVlLmgKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGlj
OgogICAgIHZvaWQgYXBwZW5kUGFydGlhbFVwbG9hZChUZXh0dXJlVXBsb2FkZXI6OlBhcmFtZXRl
cnMpOwogICAgIHZvaWQgYXBwZW5kQ29weShUZXh0dXJlQ29waWVyOjpQYXJhbWV0ZXJzKTsKIAot
ICAgIHZvaWQgY2xlYXJVcGxvYWRzKCk7CisgICAgdm9pZCBjbGVhclVwbG9hZHNUb0RlbGV0ZWRS
ZXNvdXJjZXMoKTsKIAogICAgIFRleHR1cmVVcGxvYWRlcjo6UGFyYW1ldGVycyB0YWtlRmlyc3RG
dWxsVXBsb2FkKCk7CiAgICAgVGV4dHVyZVVwbG9hZGVyOjpQYXJhbWV0ZXJzIHRha2VGaXJzdFBh
cnRpYWxVcGxvYWQoKTsKQEAgLTU2LDYgKzU2LDcgQEAgcHVibGljOgogICAgIGJvb2wgaGFzTW9y
ZVVwZGF0ZXMoKSBjb25zdDsKIAogcHJpdmF0ZToKKyAgICB2b2lkIGNsZWFyVXBsb2Fkc1RvRGVs
ZXRlZFJlc291cmNlcyhEZXF1ZTxUZXh0dXJlVXBsb2FkZXI6OlBhcmFtZXRlcnM+JiBlbnRyeVF1
ZXVlKTsKICAgICBEZXF1ZTxUZXh0dXJlVXBsb2FkZXI6OlBhcmFtZXRlcnM+IG1fZnVsbEVudHJp
ZXM7CiAgICAgRGVxdWU8VGV4dHVyZVVwbG9hZGVyOjpQYXJhbWV0ZXJzPiBtX3BhcnRpYWxFbnRy
aWVzOwogICAgIERlcXVlPFRleHR1cmVDb3BpZXI6OlBhcmFtZXRlcnM+IG1fY29weUVudHJpZXM7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCmluZGV4IDZkNzQzNWQ1NjU0NGEyYTIyN2Q3OGI0
MzI2NDdhZWVhNDU3NGQwMTMuLmQ5ODcyNjEwOTNjOGVjMTM0NDZiNWIwMzQwZGQ0YjEwMjFhYTli
N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCkBAIC04MSw3ICs4MSw3IEBAIENDVGhy
ZWFkUHJveHk6OkNDVGhyZWFkUHJveHkoQ0NMYXllclRyZWVIb3N0KiBsYXllclRyZWVIb3N0KQog
ICAgICwgbV9yZWFkYmFja1JlcXVlc3RPbkltcGxUaHJlYWQoMCkKICAgICAsIG1fY29tbWl0Q29t
cGxldGlvbkV2ZW50T25JbXBsVGhyZWFkKDApCiAgICAgLCBtX3RleHR1cmVBY3F1aXNpdGlvbkNv
bXBsZXRpb25FdmVudE9uSW1wbFRocmVhZCgwKQotICAgICwgbV9yZXNldENvbnRlbnRzVGV4dHVy
ZXNQdXJnZWRBZnRlckNvbW1pdE9uSW1wbFRocmVhZChmYWxzZSkKKyAgICAsIG1fY29udGVudHNU
ZXh0dXJlc0V2aWN0aW9uQ291bnRlckFjaygwKQogICAgICwgbV9uZXh0RnJhbWVJc05ld2x5Q29t
bWl0dGVkRnJhbWVPbkltcGxUaHJlYWQoZmFsc2UpCiAgICAgLCBtX3JlbmRlclZTeW5jRW5hYmxl
ZChsYXllclRyZWVIb3N0LT5zZXR0aW5ncygpLnJlbmRlclZTeW5jRW5hYmxlZCkKIHsKQEAgLTM1
Miw2ICszNTIsMTkgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpvblZTeW5jUGFyYW1ldGVyc0NoYW5n
ZWQoZG91YmxlIG1vbm90b25pY1RpbWViYXNlLCBkb3VibGUgaW4KICAgICBtX3NjaGVkdWxlck9u
SW1wbFRocmVhZC0+c2V0VGltZWJhc2VBbmRJbnRlcnZhbChtb25vdG9uaWNUaW1lYmFzZSwgaW50
ZXJ2YWxJblNlY29uZHMpOwogfQogCit2b2lkIENDVGhyZWFkUHJveHk6OnJlZHVjZUNvbnRlbnRz
VGV4dHVyZXNNZW1vcnlPbkltcGxUaHJlYWQoKQoreworICAgIEFTU0VSVChpc0ltcGxUaHJlYWQo
KSk7CisgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ1RocmVhZFByb3h5OjpyZWR1Y2VDb250ZW50
c1RleHR1cmVzTWVtb3J5T25JbXBsVGhyZWFkIik7CisKKyAgICBpZiAobV9sYXllclRyZWVIb3N0
LT5yZWR1Y2VDb250ZW50c1RleHR1cmVzTWVtb3J5T25JbXBsVGhyZWFkKG1fbGF5ZXJUcmVlSG9z
dEltcGwtPnJlc291cmNlUHJvdmlkZXIoKSkpIHsKKyAgICAgICAgaWYgKG1fY3VycmVudFRleHR1
cmVVcGRhdGVDb250cm9sbGVyT25JbXBsVGhyZWFkKQorICAgICAgICAgICAgbV9jdXJyZW50VGV4
dHVyZVVwZGF0ZUNvbnRyb2xsZXJPbkltcGxUaHJlYWQtPmRpc2NhcmRVcGxvYWRzVG9EZWxldGVk
UmVzb3VyY2VzKCk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPnNldENvbnRlbnRzVGV4
dHVyZXNQdXJnZWQoKTsKKyAgICAgICAgc2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsKKyAg
ICB9Cit9CisKIHZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQo
KQogewogICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7CkBAIC00NzUsNyArNDg4LDYgQEAgdm9p
ZCBDQ1RocmVhZFByb3h5OjpzY2hlZHVsZWRBY3Rpb25CZWdpbkZyYW1lKCkKICAgICBtX3BlbmRp
bmdCZWdpbkZyYW1lUmVxdWVzdCA9IGFkb3B0UHRyKG5ldyBCZWdpbkZyYW1lQW5kQ29tbWl0U3Rh
dGUoKSk7CiAgICAgbV9wZW5kaW5nQmVnaW5GcmFtZVJlcXVlc3QtPm1vbm90b25pY0ZyYW1lQmVn
aW5UaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CiAgICAgbV9wZW5kaW5nQmVn
aW5GcmFtZVJlcXVlc3QtPnNjcm9sbEluZm8gPSBtX2xheWVyVHJlZUhvc3RJbXBsLT5wcm9jZXNz
U2Nyb2xsRGVsdGFzKCk7Ci0gICAgbV9wZW5kaW5nQmVnaW5GcmFtZVJlcXVlc3QtPmNvbnRlbnRz
VGV4dHVyZXNXZXJlRGVsZXRlZCA9IG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRlbnRzVGV4dHVy
ZXNQdXJnZWQoKTsKICAgICBtX3BlbmRpbmdCZWdpbkZyYW1lUmVxdWVzdC0+bWVtb3J5QWxsb2Nh
dGlvbkxpbWl0Qnl0ZXMgPSBtX2xheWVyVHJlZUhvc3RJbXBsLT5tZW1vcnlBbGxvY2F0aW9uTGlt
aXRCeXRlcygpOwogCiAgICAgbV9tYWluVGhyZWFkUHJveHktPnBvc3RUYXNrKGNyZWF0ZUNDVGhy
ZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZSkpOwpAQCAtNTQ1LDggKzU1
Nyw4IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZSgpCiAgICAgaWYgKCFtX2xheWVy
VHJlZUhvc3QtPmluaXRpYWxpemVSZW5kZXJlcklmTmVlZGVkKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGlmIChyZXF1ZXN0LT5jb250ZW50c1RleHR1cmVzV2VyZURlbGV0ZWQpCi0gICAgICAg
IG1fbGF5ZXJUcmVlSG9zdC0+ZXZpY3RBbGxDb250ZW50VGV4dHVyZXMoKTsKKyAgICBpbnQgY29u
dGVudHNUZXh0dXJlc1B1cmdlQWNrID0gMDsKKyAgICBtX2xheWVyVHJlZUhvc3QtPmRlc3Ryb3lD
b250ZW50c1RleHR1cmVzRXZpY3RlZEJ5SW1wbFRocmVhZCgmY29udGVudHNUZXh0dXJlc1B1cmdl
QWNrKTsKIAogICAgIE93blB0cjxDQ1RleHR1cmVVcGRhdGVRdWV1ZT4gcXVldWUgPSBhZG9wdFB0
cihuZXcgQ0NUZXh0dXJlVXBkYXRlUXVldWUpOwogICAgIG1fbGF5ZXJUcmVlSG9zdC0+dXBkYXRl
TGF5ZXJzKCoocXVldWUuZ2V0KCkpLCByZXF1ZXN0LT5tZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRl
cyk7CkBAIC01NzYsNyArNTg4LDcgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lKCkK
ICAgICAgICAgRGVidWdTY29wZWRTZXRNYWluVGhyZWFkQmxvY2tlZCBtYWluVGhyZWFkQmxvY2tl
ZDsKIAogICAgICAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOwotICAgICAgICBDQ1By
b3h5OjppbXBsVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NU
aHJlYWRQcm94eTo6YmVnaW5GcmFtZUNvbXBsZXRlT25JbXBsVGhyZWFkLCAmY29tcGxldGlvbiwg
cXVldWUucmVsZWFzZSgpLCByZXF1ZXN0LT5jb250ZW50c1RleHR1cmVzV2VyZURlbGV0ZWQpKTsK
KyAgICAgICAgQ0NQcm94eTo6aW1wbFRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRh
c2sodGhpcywgJkNDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVDb21wbGV0ZU9uSW1wbFRocmVhZCwg
JmNvbXBsZXRpb24sIHF1ZXVlLnJlbGVhc2UoKSwgY29udGVudHNUZXh0dXJlc1B1cmdlQWNrKSk7
CiAgICAgICAgIGNvbXBsZXRpb24ud2FpdCgpOwogICAgIH0KIApAQCAtNTg0LDcgKzU5Niw3IEBA
IHZvaWQgQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZSgpCiAgICAgbV9sYXllclRyZWVIb3N0LT5k
aWRCZWdpbkZyYW1lKCk7CiB9CiAKLXZvaWQgQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUNvbXBs
ZXRlT25JbXBsVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uLCBQYXNzT3duUHRy
PENDVGV4dHVyZVVwZGF0ZVF1ZXVlPiBxdWV1ZSwgYm9vbCBjb250ZW50c1RleHR1cmVzV2VyZURl
bGV0ZWQpCit2b2lkIENDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVDb21wbGV0ZU9uSW1wbFRocmVh
ZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbiwgUGFzc093blB0cjxDQ1RleHR1cmVVcGRh
dGVRdWV1ZT4gcXVldWUsIGludCBjb250ZW50c1RleHR1cmVzRXZpY3Rpb25Db3VudGVyQWNrKQog
ewogICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUNvbXBs
ZXRlT25JbXBsVGhyZWFkIik7CiAgICAgQVNTRVJUKCFtX2NvbW1pdENvbXBsZXRpb25FdmVudE9u
SW1wbFRocmVhZCk7CkBAIC01OTcsMTUgKzYwOSwxNyBAQCB2b2lkIENDVGhyZWFkUHJveHk6OmJl
Z2luRnJhbWVDb21wbGV0ZU9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlv
bgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFjb250ZW50c1RleHR1cmVzV2Vy
ZURlbGV0ZWQgJiYgbV9sYXllclRyZWVIb3N0SW1wbC0+Y29udGVudHNUZXh0dXJlc1B1cmdlZCgp
KSB7Ci0gICAgICAgIC8vIFdlIHB1cmdlZCB0aGUgY29udGVudCB0ZXh0dXJlcyBvbiB0aGUgaW1w
bCB0aHJlYWQgYmV0d2VlbiB0aGUgdGltZSB3ZQotICAgICAgICAvLyBwb3N0ZWQgdGhlIGJlZ2lu
RnJhbWUgdGFzayBhbmQgbm93LCBtZWFuaW5nIHdlIGhhdmUgYSBidW5jaCBvZgotICAgICAgICAv
LyB1cGxvYWRzIHRoYXQgYXJlIG5vdyBpbnZhbGlkLiBDbGVhciB0aGUgdXBsb2FkcyAodGhleSBh
bGwgZ28gdG8KLSAgICAgICAgLy8gY29udGVudCB0ZXh0dXJlcyksIGFuZCBraWNrIGFub3RoZXIg
Y29tbWl0IHRvIGZpbGwgdGhlbSBhZ2Fpbi4KLSAgICAgICAgcXVldWUtPmNsZWFyVXBsb2Fkcygp
OworICAgIG1fY29udGVudHNUZXh0dXJlc0V2aWN0aW9uQ291bnRlckFjayA9IGNvbnRlbnRzVGV4
dHVyZXNFdmljdGlvbkNvdW50ZXJBY2s7CisgICAgaWYgKCFtX2xheWVyVHJlZUhvc3QtPmNvbnRl
bnRzVGV4dHVyZU1hbmFnZXIoKS0+aXNFdmljdGlvbkNvdW50ZXJBY2tVcFRvRGF0ZShtX2NvbnRl
bnRzVGV4dHVyZXNFdmljdGlvbkNvdW50ZXJBY2spKSB7CisgICAgICAgIFRSQUNFX0VWRU5UMCgi
Y2MiLCAiQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUNvbXBsZXRlT25JbXBsVGhyZWFkX3B1cmdl
X3NpbmNlX2NvbW1pdCIpOworICAgICAgICAvLyBUaGUgdXBsb2FkIHF1ZXVlIG1heSBjb250YWlu
IHJlZmVyZW5jZXMgdG8gdGV4dHVyZXMgdGhhdCB3ZXJlIGFzeW5jaHJvbm91c2x5CisgICAgICAg
IC8vIGRlbGV0ZWQuIFJlbW92ZSB0aGVtLgorICAgICAgICBxdWV1ZS0+Y2xlYXJVcGxvYWRzVG9E
ZWxldGVkUmVzb3VyY2VzKCk7CisgICAgICAgIC8vIFRoZXJlIGV4aXN0IHRleHR1cmVzIHB1cmdl
ZCBieSB0aGUgaW1wbCB0aHJlYWQgdGhhdCB0aGUgbWFpbiB0aHJlYWQKKyAgICAgICAgLy8gZG9l
c24ndCBrbm93IG9mLiBSZXF1ZXN0IGEgcmVjb21taXQsIHdoaWNoIHdpbGwgaW5mb3JtIHRoZSBt
YWluIHRocmVhZAorICAgICAgICAvLyBvZiB0aGUgcHVyZ2VkIHJlc291cmNlcy4KICAgICAgICAg
c2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9yZXNl
dENvbnRlbnRzVGV4dHVyZXNQdXJnZWRBZnRlckNvbW1pdE9uSW1wbFRocmVhZCA9IHRydWU7Cisg
ICAgfQogCiAgICAgbV9jdXJyZW50VGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXJPbkltcGxUaHJlYWQg
PSBDQ1RleHR1cmVVcGRhdGVDb250cm9sbGVyOjpjcmVhdGUoQ0NQcm94eTo6aW1wbFRocmVhZCgp
LCBxdWV1ZSwgbV9sYXllclRyZWVIb3N0SW1wbC0+cmVzb3VyY2VQcm92aWRlcigpLCBtX2xheWVy
VHJlZUhvc3RJbXBsLT5yZW5kZXJlcigpLT50ZXh0dXJlQ29waWVyKCksIG1fbGF5ZXJUcmVlSG9z
dEltcGwtPnJlbmRlcmVyKCktPnRleHR1cmVVcGxvYWRlcigpKTsKICAgICBtX2NvbW1pdENvbXBs
ZXRpb25FdmVudE9uSW1wbFRocmVhZCA9IGNvbXBsZXRpb247CkBAIC02NTksOCArNjczLDggQEAg
dm9pZCBDQ1RocmVhZFByb3h5OjpzY2hlZHVsZWRBY3Rpb25Db21taXQoKQogICAgIG1fbGF5ZXJU
cmVlSG9zdC0+YmVnaW5Db21taXRPbkltcGxUaHJlYWQobV9sYXllclRyZWVIb3N0SW1wbC5nZXQo
KSk7CiAgICAgbV9sYXllclRyZWVIb3N0LT5maW5pc2hDb21taXRPbkltcGxUaHJlYWQobV9sYXll
clRyZWVIb3N0SW1wbC5nZXQoKSk7CiAKLSAgICBpZiAobV9yZXNldENvbnRlbnRzVGV4dHVyZXNQ
dXJnZWRBZnRlckNvbW1pdE9uSW1wbFRocmVhZCkgewotICAgICAgICBtX3Jlc2V0Q29udGVudHNU
ZXh0dXJlc1B1cmdlZEFmdGVyQ29tbWl0T25JbXBsVGhyZWFkID0gZmFsc2U7CisgICAgaWYgKG1f
bGF5ZXJUcmVlSG9zdC0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigpLT5pc0V2aWN0aW9uQ291bnRl
ckFja1VwVG9EYXRlKG1fY29udGVudHNUZXh0dXJlc0V2aWN0aW9uQ291bnRlckFjaykpIHsKKyAg
ICAgICAgLy8gVGhlIHRyZWUgbm93IHJlZmVyZW5jZXMgbm8gcHVyZ2VkIHRleHR1cmVzLiBBbGxv
dyBpdCB0byBkcmF3IGFnYWluLgogICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5yZXNldENv
bnRlbnRzVGV4dHVyZXNQdXJnZWQoKTsKICAgICB9CiAKQEAgLTg5OSw4ICs5MTMsNyBAQCB2b2lk
IENDVGhyZWFkUHJveHk6OmxheWVyVHJlZUhvc3RDbG9zZWRPbkltcGxUaHJlYWQoQ0NDb21wbGV0
aW9uRXZlbnQqIGNvbXBsZXRpbwogewogICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NUaHJlYWRQ
cm94eTo6bGF5ZXJUcmVlSG9zdENsb3NlZE9uSW1wbFRocmVhZCIpOwogICAgIEFTU0VSVChpc0lt
cGxUaHJlYWQoKSk7Ci0gICAgaWYgKCFtX2xheWVyVHJlZUhvc3RJbXBsLT5jb250ZW50c1RleHR1
cmVzUHVyZ2VkKCkpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGVsZXRlQ29udGVudHNUZXh0
dXJlc09uSW1wbFRocmVhZChtX2xheWVyVHJlZUhvc3RJbXBsLT5yZXNvdXJjZVByb3ZpZGVyKCkp
OworICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGVsZXRlQWxsQ29udGVudHNUZXh0dXJlc09uSW1wbFRo
cmVhZChtX2xheWVyVHJlZUhvc3RJbXBsLT5yZXNvdXJjZVByb3ZpZGVyKCkpOwogICAgIG1faW5w
dXRIYW5kbGVyT25JbXBsVGhyZWFkLmNsZWFyKCk7CiAgICAgbV9sYXllclRyZWVIb3N0SW1wbC5j
bGVhcigpOwogICAgIG1fc2NoZWR1bGVyT25JbXBsVGhyZWFkLmNsZWFyKCk7CkBAIC05MjIsOCAr
OTM1LDcgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpyZWNyZWF0ZUNvbnRleHRPbkltcGxUaHJlYWQo
Q0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24sIEMKIHsKICAgICBUUkFDRV9FVkVOVDAoImNj
IiwgIkNDVGhyZWFkUHJveHk6OnJlY3JlYXRlQ29udGV4dE9uSW1wbFRocmVhZCIpOwogICAgIEFT
U0VSVChpc0ltcGxUaHJlYWQoKSk7Ci0gICAgaWYgKCFtX2xheWVyVHJlZUhvc3RJbXBsLT5jb250
ZW50c1RleHR1cmVzUHVyZ2VkKCkpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGVsZXRlQ29u
dGVudHNUZXh0dXJlc09uSW1wbFRocmVhZChtX2xheWVyVHJlZUhvc3RJbXBsLT5yZXNvdXJjZVBy
b3ZpZGVyKCkpOworICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGVsZXRlQWxsQ29udGVudHNUZXh0dXJl
c09uSW1wbFRocmVhZChtX2xheWVyVHJlZUhvc3RJbXBsLT5yZXNvdXJjZVByb3ZpZGVyKCkpOwog
ICAgICpyZWNyZWF0ZVN1Y2NlZWRlZCA9IG1fbGF5ZXJUcmVlSG9zdEltcGwtPmluaXRpYWxpemVS
ZW5kZXJlcihhZG9wdFB0cihjb250ZXh0UHRyKSwgdGV4dHVyZVVwbG9hZGVyKTsKICAgICBpZiAo
KnJlY3JlYXRlU3VjY2VlZGVkKSB7CiAgICAgICAgICpjYXBhYmlsaXRpZXMgPSBtX2xheWVyVHJl
ZUhvc3RJbXBsLT5yZW5kZXJlckNhcGFiaWxpdGllcygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5o
CmluZGV4IDcyYWM4MjVjYTZkYTBmYWI3NTA2MjVjNDk4ZmJhNDA3MDYxZTNkZTEuLmU0NzZjOTY1
M2IzZmJkODgxYWZhZWFlNTkyZTA3NmQ0M2E3MGFkNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5
LmgKQEAgLTgxLDYgKzgxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1Jl
ZHJhd09uSW1wbFRocmVhZCgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Nv
bW1pdE9uSW1wbFRocmVhZCgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBwb3N0QW5pbWF0
aW9uRXZlbnRzVG9NYWluVGhyZWFkT25JbXBsVGhyZWFkKFBhc3NPd25QdHI8Q0NBbmltYXRpb25F
dmVudHNWZWN0b3I+LCBkb3VibGUgd2FsbENsb2NrVGltZSkgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIHJlZHVjZUNvbnRlbnRzVGV4dHVyZXNNZW1vcnlPbkltcGxUaHJlYWQoKSBPVkVSUklE
RTsKIAogICAgIC8vIENDU2NoZWR1bGVyQ2xpZW50IGltcGxlbWVudGF0aW9uCiAgICAgdmlydHVh
bCBib29sIGNhbkRyYXcoKSBPVkVSUklERTsKQEAgLTEwNiw3ICsxMDcsNiBAQCBwcml2YXRlOgog
CiAgICAgICAgIGRvdWJsZSBtb25vdG9uaWNGcmFtZUJlZ2luVGltZTsKICAgICAgICAgT3duUHRy
PENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm87Ci0gICAgICAgIGJvb2wgY29udGVudHNU
ZXh0dXJlc1dlcmVEZWxldGVkOwogICAgICAgICBzaXplX3QgbWVtb3J5QWxsb2NhdGlvbkxpbWl0
Qnl0ZXM7CiAgICAgfTsKICAgICBPd25QdHI8QmVnaW5GcmFtZUFuZENvbW1pdFN0YXRlPiBtX3Bl
bmRpbmdCZWdpbkZyYW1lUmVxdWVzdDsKQEAgLTEyNyw3ICsxMjcsNyBAQCBwcml2YXRlOgogICAg
ICAgICBJbnRSZWN0IHJlY3Q7CiAgICAgfTsKICAgICB2b2lkIGZvcmNlQmVnaW5GcmFtZU9uSW1w
bFRocmVhZChDQ0NvbXBsZXRpb25FdmVudCopOwotICAgIHZvaWQgYmVnaW5GcmFtZUNvbXBsZXRl
T25JbXBsVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiwgUGFzc093blB0cjxDQ1RleHR1cmVVcGRh
dGVRdWV1ZT4sIGJvb2wgY29udGVudHNUZXh0dXJlc1dlcmVEZWxldGVkKTsKKyAgICB2b2lkIGJl
Z2luRnJhbWVDb21wbGV0ZU9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVudCosIFBhc3NPd25Q
dHI8Q0NUZXh0dXJlVXBkYXRlUXVldWU+LCBpbnQgY29udGVudHNUZXh0dXJlc1B1cmdlQWNrKTsK
ICAgICB2b2lkIGJlZ2luRnJhbWVBYm9ydGVkT25JbXBsVGhyZWFkKCk7CiAgICAgdm9pZCByZXF1
ZXN0UmVhZGJhY2tPbkltcGxUaHJlYWQoUmVhZGJhY2tSZXF1ZXN0Kik7CiAgICAgdm9pZCByZXF1
ZXN0U3RhcnRQYWdlU2NhbGVBbmltYXRpb25PbkltcGxUaHJlYWQoSW50U2l6ZSB0YXJnZXRQb3Np
dGlvbiwgYm9vbCB1c2VBbmNob3IsIGZsb2F0IHNjYWxlLCBkb3VibGUgZHVyYXRpb25TZWMpOwpA
QCAtMTg2LDkgKzE4NiwxMCBAQCBwcml2YXRlOgogCiAgICAgT3duUHRyPENDVGV4dHVyZVVwZGF0
ZUNvbnRyb2xsZXI+IG1fY3VycmVudFRleHR1cmVVcGRhdGVDb250cm9sbGVyT25JbXBsVGhyZWFk
OwogCi0gICAgLy8gU2V0IHdoZW4gd2UgbmVlZCB0byByZXNldCB0aGUgY29udGVudHNUZXh0dXJl
c1B1cmdlZCBmbGFnIGFmdGVyIHRoZQotICAgIC8vIGNvbW1pdC4KLSAgICBib29sIG1fcmVzZXRD
b250ZW50c1RleHR1cmVzUHVyZ2VkQWZ0ZXJDb21taXRPbkltcGxUaHJlYWQ7CisgICAgLy8gVGV4
dHVyZSBldmljdGlvbiBjb3VudGVyIGFja25vd2xlZGdlbWVudCB0aGF0IHRoZSBtYWluIHRocmVh
ZCBzZW5kcyB0byB0aGUKKyAgICAvLyBpbXBsIHRocmVhZC4gSWYgdGhpcyBpcyBub3QgdXAgdG8g
ZGF0ZSB0aGVuIHRoZSBpbXBsIGxheWVyIHRyZWUgbWF5IHJlZmVyZW5jZQorICAgIC8vIHRleHR1
cmVzIHRoYXQgaGF2ZSBiZWVuIHB1cmdlZC4KKyAgICBpbnQgbV9jb250ZW50c1RleHR1cmVzRXZp
Y3Rpb25Db3VudGVyQWNrOwogCiAgICAgLy8gU2V0IHdoZW4gdGhlIG5leHQgZHJhdyBzaG91bGQg
cG9zdCBkaWRDb21taXRBbmREcmF3RnJhbWUgdG8gdGhlIG1haW4gdGhyZWFkLgogICAgIGJvb2wg
bV9uZXh0RnJhbWVJc05ld2x5Q29tbWl0dGVkRnJhbWVPbkltcGxUaHJlYWQ7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3Qu
Y3BwCmluZGV4IGQwOWJjMzY0OWVhZWJlYzQzZDg5ZGQ2MjM3NDMzNmViZjI1NjFjMjQuLjQ4YjIy
MGFhOTFlN2VlMmI2MDQyZTYyMGYwYzVlNDc1YzI4NDNjZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCkBA
IC04Nyw2ICs4Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNSZWRyYXdP
bkltcGxUaHJlYWQoKSBPVkVSUklERSB7IG1fZGlkUmVxdWVzdFJlZHJhdyA9IHRydWU7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKSBPVkVSUklERSB7IG1f
ZGlkUmVxdWVzdENvbW1pdCA9IHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgcG9zdEFuaW1hdGlv
bkV2ZW50c1RvTWFpblRocmVhZE9uSW1wbFRocmVhZChQYXNzT3duUHRyPENDQW5pbWF0aW9uRXZl
bnRzVmVjdG9yPiwgZG91YmxlIHdhbGxDbG9ja1RpbWUpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1
YWwgdm9pZCByZWR1Y2VDb250ZW50c1RleHR1cmVzTWVtb3J5T25JbXBsVGhyZWFkKCkgT1ZFUlJJ
REUgeyB9CiAKICAgICBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IGNyZWF0ZUxheWVy
VHJlZUhvc3QoYm9vbCBwYXJ0aWFsU3dhcCwgUGFzc093blB0cjxDQ0dyYXBoaWNzQ29udGV4dD4g
Z3JhcGhpY3NDb250ZXh0LCBQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiByb290UHRyKQogICAgIHsK
QEAgLTM3OTEsMTIgKzM3OTIsNiBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHN1
cmZhY2VUZXh0dXJlQ2FjaGluZ05vUGFydGlhbFN3YXApCiAgICAgfQogfQogCi1URVNUX0YoQ0NM
YXllclRyZWVIb3N0SW1wbFRlc3QsIHJlbGVhc2VDb250ZW50c1RleHR1cmVTaG91bGRUcmlnZ2Vy
Q29tbWl0KQotewotICAgIG1faG9zdEltcGwtPnJlbGVhc2VDb250ZW50c1RleHR1cmVzKCk7Ci0g
ICAgRVhQRUNUX1RSVUUobV9kaWRSZXF1ZXN0Q29tbWl0KTsKLX0KLQogc3RydWN0IFJlbmRlclBh
c3NDYWNoZUVudHJ5IHsKICAgICBtdXRhYmxlIE93blB0cjxDQ1JlbmRlclBhc3M+IHJlbmRlclBh
c3NQdHI7CiAgICAgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RleHR1cmVVcGRhdGVDb250cm9sbGVyVGVzdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXJU
ZXN0LmNwcAppbmRleCAxMTY1OWY2ZjUyYjhhYmQwYWUzMDc1OWI3YTY2NTQxNDUxMDYwNDNhLi4z
MzBjYzRmZTY4YWY1Yjk3MWZlMmMzNjNjNTRlNDYzYTc1ZDM5MTdkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXJUZXN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGV4dHVyZVVwZGF0ZUNvbnRy
b2xsZXJUZXN0LmNwcApAQCAtODcsMTAgKzg3LDE0IEBAIHByaXZhdGU6CiAKIGNsYXNzIFRleHR1
cmVGb3JVcGxvYWRUZXN0IDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUgewog
cHVibGljOgotICAgIFRleHR1cmVGb3JVcGxvYWRUZXN0KCkgOiBMYXllclRleHR1cmVVcGRhdGVy
OjpUZXh0dXJlKGFkb3B0UHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlPigwKSkgeyB9CisgICAgVGV4
dHVyZUZvclVwbG9hZFRlc3QoKSA6IExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUoYWRvcHRQ
dHI8Q0NQcmlvcml0aXplZFRleHR1cmU+KDApKSwgbV9kZWxldGVkKGZhbHNlKSB7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgYmFja2luZ1dhc0FzeW5jaHJvbm91c2x5RGVsZXRlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fZGVsZXRlZDsgfQogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZWN0KENDUmVzb3VyY2VQ
cm92aWRlciosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFNpemUmIGRlc3RP
ZmZzZXQpIHsgfQotfTsKIAorICAgIHZvaWQgc2V0QmFja2luZ0FzeW5jaHJvbm91c2x5RGVsZXRl
ZCgpIHsgbV9kZWxldGVkID0gdHJ1ZTsgfQorcHJpdmF0ZToKKyAgICBib29sIG1fZGVsZXRlZDsK
K307CiAKIGNsYXNzIENDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXJUZXN0IDogcHVibGljIFRlc3Qg
ewogcHVibGljOgpAQCAtMTgzLDI4ICsxODcsMzggQEAgcHJvdGVjdGVkOgogICAgICAgICBXZWJD
b21wb3NpdG9yOjpzaHV0ZG93bigpOwogICAgIH0KIAotICAgIHZvaWQgYXBwZW5kRnVsbFVwbG9h
ZHNUb1VwZGF0ZVF1ZXVlKGludCBjb3VudCkKKyAgICB2b2lkIGFwcGVuZEZ1bGxVcGxvYWRzT2ZJ
bmRleGVkVGV4dHVyZVRvVXBkYXRlUXVldWUoaW50IGNvdW50LCBpbnQgdGV4dHVyZUluZGV4KQog
ICAgIHsKICAgICAgICAgbV9mdWxsVXBsb2FkQ291bnRFeHBlY3RlZCArPSBjb3VudDsKICAgICAg
ICAgbV90b3RhbFVwbG9hZENvdW50RXhwZWN0ZWQgKz0gY291bnQ7CiAKICAgICAgICAgY29uc3Qg
SW50UmVjdCByZWN0KDAsIDAsIDMwMCwgMTUwKTsKLSAgICAgICAgY29uc3QgVGV4dHVyZVVwbG9h
ZGVyOjpQYXJhbWV0ZXJzIHVwbG9hZCA9IHsgJm1fdGV4dHVyZSwgcmVjdCwgSW50U2l6ZSgpIH07
CisgICAgICAgIGNvbnN0IFRleHR1cmVVcGxvYWRlcjo6UGFyYW1ldGVycyB1cGxvYWQgPSB7ICZt
X3RleHR1cmVzW3RleHR1cmVJbmRleF0sIHJlY3QsIEludFNpemUoKSB9OwogICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCiAgICAgICAgICAgICBtX3F1ZXVlLT5hcHBlbmRG
dWxsVXBsb2FkKHVwbG9hZCk7CiAgICAgfQogCi0gICAgdm9pZCBhcHBlbmRQYXJ0aWFsVXBsb2Fk
c1RvVXBkYXRlUXVldWUoaW50IGNvdW50KQorICAgIHZvaWQgYXBwZW5kRnVsbFVwbG9hZHNUb1Vw
ZGF0ZVF1ZXVlKGludCBjb3VudCkKKyAgICB7CisgICAgICAgIGFwcGVuZEZ1bGxVcGxvYWRzT2ZJ
bmRleGVkVGV4dHVyZVRvVXBkYXRlUXVldWUoY291bnQsIDApOworICAgIH0KKworICAgIHZvaWQg
YXBwZW5kUGFydGlhbFVwbG9hZHNPZkluZGV4ZWRUZXh0dXJlVG9VcGRhdGVRdWV1ZShpbnQgY291
bnQsIGludCB0ZXh0dXJlSW5kZXgpCiAgICAgewogICAgICAgICBtX3BhcnRpYWxDb3VudEV4cGVj
dGVkICs9IGNvdW50OwogICAgICAgICBtX3RvdGFsVXBsb2FkQ291bnRFeHBlY3RlZCArPSBjb3Vu
dDsKIAogICAgICAgICBjb25zdCBJbnRSZWN0IHJlY3QoMCwgMCwgMTAwLCAxMDApOwotICAgICAg
ICBjb25zdCBUZXh0dXJlVXBsb2FkZXI6OlBhcmFtZXRlcnMgdXBsb2FkID0geyAmbV90ZXh0dXJl
LCByZWN0LCBJbnRTaXplKCkgfTsKKyAgICAgICAgY29uc3QgVGV4dHVyZVVwbG9hZGVyOjpQYXJh
bWV0ZXJzIHVwbG9hZCA9IHsgJm1fdGV4dHVyZXNbdGV4dHVyZUluZGV4XSwgcmVjdCwgSW50U2l6
ZSgpIH07CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKICAgICAgICAg
ICAgIG1fcXVldWUtPmFwcGVuZFBhcnRpYWxVcGxvYWQodXBsb2FkKTsKICAgICB9CiAKKyAgICB2
b2lkIGFwcGVuZFBhcnRpYWxVcGxvYWRzVG9VcGRhdGVRdWV1ZShpbnQgY291bnQpCisgICAgewor
ICAgICAgICBhcHBlbmRQYXJ0aWFsVXBsb2Fkc09mSW5kZXhlZFRleHR1cmVUb1VwZGF0ZVF1ZXVl
KGNvdW50LCAwKTsKKyAgICB9CisKICAgICB2b2lkIHNldE1heFVwbG9hZENvdW50UGVyVXBkYXRl
KGludCBjb3VudCkKICAgICB7CiAgICAgICAgIG1fbWF4VXBsb2FkQ291bnRQZXJVcGRhdGUgPSBj
b3VudDsKQEAgLTIxNSw3ICsyMjksNyBAQCBwcm90ZWN0ZWQ6CiAgICAgT3duUHRyPENDR3JhcGhp
Y3NDb250ZXh0PiBtX2NvbnRleHQ7CiAgICAgT3duUHRyPENDUmVzb3VyY2VQcm92aWRlcj4gbV9y
ZXNvdXJjZVByb3ZpZGVyOwogICAgIE93blB0cjxDQ1RleHR1cmVVcGRhdGVRdWV1ZT4gbV9xdWV1
ZTsKLSAgICBUZXh0dXJlRm9yVXBsb2FkVGVzdCBtX3RleHR1cmU7CisgICAgVGV4dHVyZUZvclVw
bG9hZFRlc3QgbV90ZXh0dXJlc1s0XTsKICAgICBGYWtlVGV4dHVyZUNvcGllciBtX2NvcGllcjsK
ICAgICBUZXh0dXJlVXBsb2FkZXJGb3JVcGxvYWRUZXN0IG1fdXBsb2FkZXI7CiAKQEAgLTY4NSw0
ICs2OTksMzcgQEAgVEVTVF9GKENDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXJUZXN0LCBVcGRhdGVz
Q29tcGxldGVJbkZpbml0ZVRpbWUpCiAgICAgRVhQRUNUX0VRKDIsIG1fbnVtVG90YWxVcGxvYWRz
KTsKIH0KIAorVEVTVF9GKENDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXJUZXN0LCBBc3luY0RlbGV0
aW9uKQoreworICAgIGFwcGVuZEZ1bGxVcGxvYWRzT2ZJbmRleGVkVGV4dHVyZVRvVXBkYXRlUXVl
dWUoMSwgMCk7CisgICAgYXBwZW5kUGFydGlhbFVwbG9hZHNPZkluZGV4ZWRUZXh0dXJlVG9VcGRh
dGVRdWV1ZSgxLCAxKTsKKyAgICBhcHBlbmRGdWxsVXBsb2Fkc09mSW5kZXhlZFRleHR1cmVUb1Vw
ZGF0ZVF1ZXVlKDEsIDIpOworICAgIGFwcGVuZFBhcnRpYWxVcGxvYWRzT2ZJbmRleGVkVGV4dHVy
ZVRvVXBkYXRlUXVldWUoMSwgMyk7CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxU
aHJlYWQ7CisKKyAgICBtX3F1ZXVlLT5jbGVhclVwbG9hZHNUb0RlbGV0ZWRSZXNvdXJjZXMoKTsK
KyAgICBFWFBFQ1RfRVEoMnUsIG1fcXVldWUtPmZ1bGxVcGxvYWRTaXplKCkpOworICAgIEVYUEVD
VF9FUSgydSwgbV9xdWV1ZS0+cGFydGlhbFVwbG9hZFNpemUoKSk7CisKKyAgICBtX3RleHR1cmVz
WzBdLnNldEJhY2tpbmdBc3luY2hyb25vdXNseURlbGV0ZWQoKTsKKyAgICBtX3F1ZXVlLT5jbGVh
clVwbG9hZHNUb0RlbGV0ZWRSZXNvdXJjZXMoKTsKKyAgICBFWFBFQ1RfRVEoMXUsIG1fcXVldWUt
PmZ1bGxVcGxvYWRTaXplKCkpOworICAgIEVYUEVDVF9FUSgydSwgbV9xdWV1ZS0+cGFydGlhbFVw
bG9hZFNpemUoKSk7CisKKyAgICBtX3RleHR1cmVzWzNdLnNldEJhY2tpbmdBc3luY2hyb25vdXNs
eURlbGV0ZWQoKTsKKyAgICBtX3F1ZXVlLT5jbGVhclVwbG9hZHNUb0RlbGV0ZWRSZXNvdXJjZXMo
KTsKKyAgICBFWFBFQ1RfRVEoMXUsIG1fcXVldWUtPmZ1bGxVcGxvYWRTaXplKCkpOworICAgIEVY
UEVDVF9FUSgxdSwgbV9xdWV1ZS0+cGFydGlhbFVwbG9hZFNpemUoKSk7CisKKyAgICBtX3RleHR1
cmVzWzJdLnNldEJhY2tpbmdBc3luY2hyb25vdXNseURlbGV0ZWQoKTsKKyAgICBtX3F1ZXVlLT5j
bGVhclVwbG9hZHNUb0RlbGV0ZWRSZXNvdXJjZXMoKTsKKyAgICBFWFBFQ1RfRVEoMHUsIG1fcXVl
dWUtPmZ1bGxVcGxvYWRTaXplKCkpOworICAgIEVYUEVDVF9FUSgxdSwgbV9xdWV1ZS0+cGFydGlh
bFVwbG9hZFNpemUoKSk7CisKKyAgICBtX3RleHR1cmVzWzFdLnNldEJhY2tpbmdBc3luY2hyb25v
dXNseURlbGV0ZWQoKTsKKyAgICBtX3F1ZXVlLT5jbGVhclVwbG9hZHNUb0RlbGV0ZWRSZXNvdXJj
ZXMoKTsKKyAgICBFWFBFQ1RfRVEoMHUsIG1fcXVldWUtPmZ1bGxVcGxvYWRTaXplKCkpOworICAg
IEVYUEVDVF9FUSgwdSwgbV9xdWV1ZS0+cGFydGlhbFVwbG9hZFNpemUoKSk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162173</attachid>
            <date>2012-09-05 00:11:25 -0700</date>
            <delta_ts>2012-09-05 14:35:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95057-20120905001107.patch</filename>
            <type>text/plain</type>
            <size>48621</size>
            <attacher name="Christopher Cameron">ccameron</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3MzQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzg0Y2Y2ZGM1NDJmYWM3
ODljNGNlNGYzOWM3ODkxMTcxYjIxM2MwZC4uMjRhMjllYThmODc5NWU4Y2IxMzM0Y2NlY2Y3NThl
Y2Y4MjcwMTJiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDEyLTA4LTMxICBDaHJp
c3RvcGhlciBDYW1lcm9uICA8Y2NhbWVyb25AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJv
bWl1bV0gQWxsb3cgaW1wbC10aHJlYWQgZGVsZXRpb24gb2Ygb25seSBzb21lIHJlc291cmNlcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTUwNTcKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUb3dhcmRzIGFs
bG93aW5nIHRoZSBpbXBsIHRocmVhZCB0byBkZWxldGUganVzdCBzb21lIHJlc291cmNlcyAoYXMK
KyAgICAgICAgb3Bwb3NlZCB0byBkZWxldGluZyBhbGwgcmVzb3VyY2VzKS4KKworICAgICAgICBE
byBpbXBsLXRocmVhZCBkZWxldGlvbiB0aHJvdWdoIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdl
ciBpbnN0ZWFkIG9mCisgICAgICAgIENDUmVzb3VyY2VQcm92aWRlci4gSW4gc3Vic2VxdWVudCBj
aGFuZ2VzIHRoZSBpbXBsIHRocmVhZCB3aWxsIGJlIGFibGUKKyAgICAgICAgdG8gc2V0IGEgdGhy
ZXNob2xkIGZvciB3aGF0IHRvIGRlbGV0ZS4KKworICAgICAgICBJbnN0ZWFkIG9mIHNlbmRpbmcg
YSBib29sIHNheWluZyAiYWxsIHRleHR1cmVzIHdlcmUgZGVsZXRlZCIgdG8KKyAgICAgICAgYmVn
aW5GcmFtZSwgc2VuZCBhIGxpc3Qgb2YgdGhlIHRleHR1cmUgYmFja2luZ3MgZGVsZXRlZCBieSB0
aGUKKyAgICAgICAgaW1wbCB0aHJlYWQuCisKKyAgICAgICAgQWxsb3cgbXVsdGlwbGUgdGV4dHVy
ZSBwdXJnZXMgdG8gb2NjdXIgd2l0aG91dCBhIGNvbW1pdCBiZXR3ZWVuIHRoZW0uCisgICAgICAg
IEluIENDVGhyZWFkUHJveHksIG1ha2UgdGhlIGFja25vd2xlZGdlbWVudCBvZiB0ZXh0dXJlIGRl
bGV0aW9uIGJlIGFuCisgICAgICAgIGludGVnZXIgY291bnRlciBpbnN0ZWFkIG9mIGEgYm9vbCwg
YmVjYXVzZSB3ZSBtYXkgaGF2ZSBtdWx0aXBsZQorICAgICAgICBub3QteWV0LWFja25vd2xlZGdl
ZCBwdXJnZXMuIFJlbW92ZSBtYW55IGluc3RhbmNlcyB3aGVyZSB0ZXh0dXJlIHB1cmdlcworICAg
ICAgICB3ZXJlIGF2b2lkZWQgd2hlbiB0aGVyZSB3YXMgYW4gb3V0c3RhbmRpbmcgdGV4dHVyZSBw
dXJnZS4KKworICAgICAgICBBZGQgYSBtaXJyb3Igc2V0IG9mIHRleHR1cmVzIHRoYXQgdG8gQ0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyIGZvcgorICAgICAgICBhY2Nlc3MgYnkgdGhlIGltcGwg
dGhyZWFkIGF0IGFueSB0aW1lLiAgQWRkIGhlbHBlciBmdW5jdGlvbnMgdG8gZGVsZXRlCisgICAg
ICAgIGEgYmFja2luZydzIHJlc291cmNlIHdpdGhvdXQgZGVsZXRpbmcgdGhlIGJhY2tpbmcgb2Jq
ZWN0LgorCisgICAgICAgIEFkZCB0aGUgYWJpbGl0eSB0byBjbGVhciBvbmx5IHRoZSByZWZlcmVu
Y2VzIHRvIGRlbGV0ZWQgdGV4dHVyZXMgZnJvbQorICAgICAgICB0aGUgdGV4dHVyZSB1cGxvYWQg
cXVldWUuCisKKyAgICAgICAgQWRkIGFzc2VydGlvbnMgdGhhdCByZXNvdXJjZXMgYmUgZnJlZWQg
dG8gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLgorCisgICAgICAgIE5ldyB0ZXN0IENDVGV4
dHVyZVVwZGF0ZUNvbnRyb2xsZXJUZXN0X0FzeW5jRGVsZXRpb24KKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwu
Y3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdEltcGwuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1By
aW9yaXRpemVkVGV4dHVyZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdl
ci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhy
ZWFkUHJveHkuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
U2luZ2xlVGhyZWFkUHJveHkuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RleHR1cmVVcGRhdGVDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVDb250cm9sbGVyLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlUXVldWUuY3Bw
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0
ZVF1ZXVlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJl
YWRQcm94eS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NU
aHJlYWRQcm94eS5oOgorCiAyMDEyLTA4LTMwICBEaXJrIFNjaHVsemUgIDxrcml0QHdlYmtpdC5v
cmc+CiAKICAgICAgICAgSW50cm9kdWNlIG5ldyBDU1MgcHJvcGVydHkgZm9yIGNsaXAtcGF0aApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA3ZmM0YjFlMDk5ZmE1NzViYjNlNTZkYjU0MDFh
MGEzMmNhMTZhNjY4Li5mYTczOWNjODIwZmUwNmJjNDgwOGE3Nzg2ZjhmODljN2QyMDRmNzNjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTA4LTMxICBD
aHJpc3RvcGhlciBDYW1lcm9uICA8Y2NhbWVyb25AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtj
aHJvbWl1bV0gQWxsb3cgaW1wbC10aHJlYWQgZGVsZXRpb24gb2Ygb25seSBzb21lIHJlc291cmNl
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTUwNTcK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbiBDQ0xh
eWVyVHJlZUhvc3RJbXBsVGVzdCwgcmVtb3ZlIHRoZSB0ZXN0CisgICAgICAgIHJlbGVhc2VDb250
ZW50c1RleHR1cmVTaG91bGRUcmlnZ2VyQ29tbWl0IGJlY2F1c2UgaXQgaXMgbm8gbG9uZ2VyIHZh
bGlkCisgICAgICAgIGFuZCBpcyByZWR1bmRhbnQuICBBIHJlbGVhc2VDb250ZW50c1RleHR1cmUg
d2lsbCBvbmx5IHRyaWdnZXIgYSBjb21taXQKKyAgICAgICAgaWYgdGhlIHJlbGVhc2VDb250ZW50
c1RleHR1cmUgYWN0dWFsbHkgZGVsZXRlcyBhbnkgdGV4dHVyZXMsIGFuZAorICAgICAgICBDQ0xh
eWVyVHJlZUhvc3RUZXN0RXZpY3RUZXh0dXJlcyBhbHJlYWR5IHRlc3RzIHRoYXQgdGhlIGNvbW1p
dCBpcworICAgICAgICBpc3N1ZWQgdXBvbiBldmljdGlvbi4KKworICAgICAgICBBZGQgQ0NUZXh0
dXJlVXBkYXRlQ29udHJvbGxlclRlc3RfQXN5bmNEZWxldGlvbiB0ZXN0IHRvIHZhbGlkYXRlIG5l
dworICAgICAgICB0ZXh0dXJlIHVwbG9hZCBxdWV1ZSBiZWhhdmlvci4KKworICAgICAgICAqIHRl
c3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcDoKKyAgICAgICAgKiB0ZXN0cy9DQ1RleHR1
cmVVcGRhdGVDb250cm9sbGVyVGVzdC5jcHA6CisKIDIwMTItMDgtMzEgIFcuIEphbWVzIE1hY0xl
YW4gIDx3am1hY2xlYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gTWFrZSBs
aW5rIGhpZ2hsaWdodGVyIHVzZSBzYW1lIG5vZGUgc2VsZWN0aW9uIGNyaXRlcmlhIGFzIENocm9t
aXVtIGZvciBBbmRyb2lkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oCmluZGV4IDFhZDYx
YzhkOGNhNDY1M2MxZjIwYjhjZWU0MjYyYzc3MWU0YmUyMWMuLjI1OGM0MTBlM2NhMmY0ODgzYTdl
MmNjNDIyNDVmOGY4MjFlN2E3ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgKQEAg
LTQ5LDYgKzQ5LDcgQEAgcHVibGljOgogCiAgICAgICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlKiB0
ZXh0dXJlKCkgeyByZXR1cm4gbV90ZXh0dXJlLmdldCgpOyB9CiAgICAgICAgIHZvaWQgc3dhcFRl
eHR1cmVXaXRoKE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZT4mIHRleHR1cmUpIHsgbV90ZXh0
dXJlLnN3YXAodGV4dHVyZSk7IH0KKyAgICAgICAgdmlydHVhbCBib29sIGJhY2tpbmdXYXNEZWxl
dGVkKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlLT5iYWNraW5nV2FzRGVsZXRlZCgpOyB9CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlUmVjdChjb25zdCBJbnRSZWN0JiAvKiBzb3VyY2VS
ZWN0ICovLCBDQ1JlbmRlcmluZ1N0YXRzJikgeyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVSZWN0KENDUmVzb3VyY2VQcm92aWRlciosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNv
bnN0IEludFNpemUmIGRlc3RPZmZzZXQpID0gMDsKICAgICBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcAppbmRleCAwODQ3NGExZDM3ZWQxN2Q2Y2QzZTk5NjkzMmNiY2M1
YTZhNTg5ZDEwLi45MDM1ODAwOGExOWM1ZWYzMDhiNWFiMmY0NzAyODk0NDA5MzA2YWQxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTE5MywxMyArMTkzLDYgQEAgQ0NMYXll
clRyZWVIb3N0OjpSZWNyZWF0ZVJlc3VsdCBDQ0xheWVyVHJlZUhvc3Q6OnJlY3JlYXRlQ29udGV4
dCgpCiAgICAgcmV0dXJuIFJlY3JlYXRlRmFpbGVkQW5kR2F2ZVVwOwogfQogCi12b2lkIENDTGF5
ZXJUcmVlSG9zdDo6ZGVsZXRlQ29udGVudHNUZXh0dXJlc09uSW1wbFRocmVhZChDQ1Jlc291cmNl
UHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIpCi17Ci0gICAgQVNTRVJUKENDUHJveHk6OmlzSW1w
bFRocmVhZCgpKTsKLSAgICBpZiAobV9yZW5kZXJlckluaXRpYWxpemVkKQotICAgICAgICBtX2Nv
bnRlbnRzVGV4dHVyZU1hbmFnZXItPmNsZWFyQWxsTWVtb3J5KHJlc291cmNlUHJvdmlkZXIpOwot
fQotCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6YWNxdWlyZUxheWVyVGV4dHVyZXMoKQogewogICAg
IEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQoKSk7CkBAIC00MTQsMTMgKzQwNyw2IEBAIHZv
aWQgQ0NMYXllclRyZWVIb3N0OjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKICAgICBtX3Byb3h5
LT5zZXRWaXNpYmxlKHZpc2libGUpOwogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZXZpY3RB
bGxDb250ZW50VGV4dHVyZXMoKQotewotICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQo
KSk7Ci0gICAgQVNTRVJUKG1fY29udGVudHNUZXh0dXJlTWFuYWdlci5nZXQoKSk7Ci0gICAgbV9j
b250ZW50c1RleHR1cmVNYW5hZ2VyLT5hbGxCYWNraW5nVGV4dHVyZXNXZXJlRGVsZXRlZCgpOwot
fQotCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c3RhcnRQYWdlU2NhbGVBbmltYXRpb24oY29uc3Qg
SW50U2l6ZSYgdGFyZ2V0UG9zaXRpb24sIGJvb2wgdXNlQW5jaG9yLCBmbG9hdCBzY2FsZSwgZG91
YmxlIGR1cmF0aW9uU2VjKQogewogICAgIG1fcHJveHktPnN0YXJ0UGFnZVNjYWxlQW5pbWF0aW9u
KHRhcmdldFBvc2l0aW9uLCB1c2VBbmNob3IsIHNjYWxlLCBkdXJhdGlvblNlYyk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5oCmluZGV4IDc0Mjc4OGM3MDY3ODNiYjYzOGY1M2Q2MjZmMmRjNWNj
MWUzYTU4MGEuLjgxODNhMTI0OGZlODMwYjVlZjEyZWM5YmQwNDYxNzU2Njg4OWM1ZWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCkBAIC0xNTQsNyArMTU0LDYgQEAgcHVibGljOgogICAg
IFJlY3JlYXRlUmVzdWx0IHJlY3JlYXRlQ29udGV4dCgpOwogICAgIHZvaWQgZGlkQ29tbWl0QW5k
RHJhd0ZyYW1lKCkgeyBtX2NsaWVudC0+ZGlkQ29tbWl0QW5kRHJhd0ZyYW1lKCk7IH0KICAgICB2
b2lkIGRpZENvbXBsZXRlU3dhcEJ1ZmZlcnMoKSB7IG1fY2xpZW50LT5kaWRDb21wbGV0ZVN3YXBC
dWZmZXJzKCk7IH0KLSAgICB2b2lkIGRlbGV0ZUNvbnRlbnRzVGV4dHVyZXNPbkltcGxUaHJlYWQo
Q0NSZXNvdXJjZVByb3ZpZGVyKik7CiAgICAgdmlydHVhbCB2b2lkIGFjcXVpcmVMYXllclRleHR1
cmVzKCk7CiAgICAgLy8gUmV0dXJucyBmYWxzZSBpZiB3ZSBzaG91bGQgYWJvcnQgdGhpcyBmcmFt
ZSBkdWUgdG8gaW5pdGlhbGl6YXRpb24gZmFpbHVyZS4KICAgICBib29sIGluaXRpYWxpemVSZW5k
ZXJlcklmTmVlZGVkKCk7CkBAIC0yMTIsMTIgKzIxMSw2IEBAIHB1YmxpYzoKIAogICAgIENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlciogY29udGVudHNUZXh0dXJlTWFuYWdlcigpIGNvbnN0Owog
Ci0gICAgLy8gVGhpcyB3aWxsIGNhdXNlIGNvbnRlbnRzIHRleHR1cmUgbWFuYWdlciB0byBldmlj
dCBhbGwgdGV4dHVyZXMsIGJ1dAotICAgIC8vIHdpdGhvdXQgZGVsZXRpbmcgdGhlbS4gVGhpcyBo
YXBwZW5zIGFmdGVyIGFsbCBjb250ZW50IHRleHR1cmVzIGhhdmUKLSAgICAvLyBhbHJlYWR5IGJl
ZW4gZGVsZXRlZCBvbiBpbXBsLCBhZnRlciBnZXR0aW5nIGEgMCBhbGxvY2F0aW9uIGxpbWl0Lgot
ICAgIC8vIFNldCBkdXJpbmcgYSBjb21taXQsIGJ1dCBiZWZvcmUgdXBkYXRlTGF5ZXJzLgotICAg
IHZvaWQgZXZpY3RBbGxDb250ZW50VGV4dHVyZXMoKTsKLQogICAgIGJvb2wgdmlzaWJsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdmlzaWJsZTsgfQogICAgIHZvaWQgc2V0VmlzaWJsZShib29sKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCBmY2RkMjhiY2U4NjVi
NWU2MDFkZjUxOGI1ZTNjNjgxOTczNDU3YjFjLi5kYWE0ODFhNGJiMDI4YjE3MTc2M2UxMzhmOWMx
Mzc3MWU0ZDE2YzIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApA
QCAtNTI1LDExICs1MjUsNyBAQCBib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OnByZXBhcmVUb0Ry
YXcoRnJhbWVEYXRhJiBmcmFtZSkKIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpyZWxlYXNl
Q29udGVudHNUZXh0dXJlcygpCiB7Ci0gICAgaWYgKG1fY29udGVudHNUZXh0dXJlc1B1cmdlZCkK
LSAgICAgICAgcmV0dXJuOwotICAgIG1fcmVzb3VyY2VQcm92aWRlci0+ZGVsZXRlT3duZWRSZXNv
dXJjZXMoQ0NSZW5kZXJlcjo6Q29udGVudFBvb2wpOwotICAgIG1fY29udGVudHNUZXh0dXJlc1B1
cmdlZCA9IHRydWU7Ci0gICAgbV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCk7
CisgICAgbV9jbGllbnQtPnJlZHVjZUNvbnRlbnRzVGV4dHVyZXNNZW1vcnlPbkltcGxUaHJlYWQo
KTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRNZW1vcnlBbGxvY2F0aW9uTGlt
aXRCeXRlcyhzaXplX3QgYnl0ZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgK
aW5kZXggYjNkMDdhYzI5YzBhODA3OGYwMTdjOGUxODkzMGJhMDA3MjkwNjM4NC4uMjU0MmY4MGRm
OTdlNmYxNTI4ZTIzYTEwOTZiOGY3NTkxMzJjY2RiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdEltcGwuaApAQCAtNjAsNiArNjAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRO
ZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcG9zdEFuaW1h
dGlvbkV2ZW50c1RvTWFpblRocmVhZE9uSW1wbFRocmVhZChQYXNzT3duUHRyPENDQW5pbWF0aW9u
RXZlbnRzVmVjdG9yPiwgZG91YmxlIHdhbGxDbG9ja1RpbWUpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgcmVkdWNlQ29udGVudHNUZXh0dXJlc01lbW9yeU9uSW1wbFRocmVhZCgpID0gMDsKIH07CiAK
IC8vIENDTGF5ZXJUcmVlSG9zdEltcGwgb3ducyB0aGUgQ0NMYXllckltcGwgdHJlZSBhcyB3ZWxs
IGFzIGFzc29jaWF0ZWQgcmVuZGVyaW5nIHN0YXRlCkBAIC0xNTksNyArMTYwLDcgQEAgcHVibGlj
OgogICAgIGludCBzb3VyY2VGcmFtZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlRnJh
bWVOdW1iZXI7IH0KICAgICB2b2lkIHNldFNvdXJjZUZyYW1lTnVtYmVyKGludCBmcmFtZU51bWJl
cikgeyBtX3NvdXJjZUZyYW1lTnVtYmVyID0gZnJhbWVOdW1iZXI7IH0KIAotICAgIGJvb2wgY29u
dGVudHNUZXh0dXJlc1B1cmdlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNUZXh0dXJlc1B1
cmdlZDsgfQorICAgIHZvaWQgc2V0Q29udGVudHNUZXh0dXJlc1B1cmdlZCgpIHsgbV9jb250ZW50
c1RleHR1cmVzUHVyZ2VkID0gdHJ1ZTsgfQogICAgIHZvaWQgcmVzZXRDb250ZW50c1RleHR1cmVz
UHVyZ2VkKCkgeyBtX2NvbnRlbnRzVGV4dHVyZXNQdXJnZWQgPSBmYWxzZTsgfQogICAgIHNpemVf
dCBtZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fbWVtb3J5QWxs
b2NhdGlvbkxpbWl0Qnl0ZXM7IH0KIApAQCAtMjgyLDYgKzI4MywxMCBAQCBwcml2YXRlOgogICAg
IEludFNpemUgbV9kZXZpY2VWaWV3cG9ydFNpemU7CiAgICAgZmxvYXQgbV9kZXZpY2VTY2FsZUZh
Y3RvcjsKICAgICBib29sIG1fdmlzaWJsZTsKKworICAgIC8vIFNldCB3aGVuIHRoZSBpbXBsIHRo
cmVhZCBkZWxldGVzIHRleHR1cmVzLCB1bi1zZXQgd2hlbiB0aGUgaW1wbCdzIGxheWVyIHRyZWUK
KyAgICAvLyBpcyBrbm93biB0byBub3QgcmVmZXJlbmNlIGFueSBkZWxldGVkIHJlc291cmNlcy4g
VXNlZCB0byBwcmV2ZW50IGRyYXdpbmcKKyAgICAvLyB3aXRoIGRlbGV0ZWQgcmVzb3VyY2VzLgog
ICAgIGJvb2wgbV9jb250ZW50c1RleHR1cmVzUHVyZ2VkOwogICAgIHNpemVfdCBtX21lbW9yeUFs
bG9jYXRpb25MaW1pdEJ5dGVzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVy
ZS5jcHAKaW5kZXggZDlmNjhhZjBhZTBiOTkyODEzM2EyMzJkNzQxNjkyNDc2MTIwNmRkYi4uMjNk
M2Y0Yjk0N2E2NjEyZGQyNzBiNmEyYjU2Mzk4NWJkNzNhYzVhYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1
cmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUHJpb3JpdGl6ZWRUZXh0dXJlLmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAi
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiQ0NQcmlvcml0eUNhbGN1
bGF0b3IuaCIKKyNpbmNsdWRlICJDQ1Byb3h5LmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogCiB1
c2luZyBuYW1lc3BhY2Ugc3RkOwpAQCAtMTEwLDkgKzExMSwxNyBAQCB2b2lkIENDUHJpb3JpdGl6
ZWRUZXh0dXJlOjp1cGxvYWQoQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyLAog
ICAgIGlmIChtX2lzQWJvdmVQcmlvcml0eUN1dG9mZikKICAgICAgICAgYWNxdWlyZUJhY2tpbmdU
ZXh0dXJlKHJlc291cmNlUHJvdmlkZXIpOwogICAgIEFTU0VSVChtX2JhY2tpbmcpOworICAgIEFT
U0VSVCghYmFja2luZ1dhc0RlbGV0ZWQoKSk7CiAgICAgcmVzb3VyY2VQcm92aWRlci0+dXBsb2Fk
KHJlc291cmNlSWQoKSwgaW1hZ2UsIGltYWdlUmVjdCwgc291cmNlUmVjdCwgZGVzdE9mZnNldCk7
CiB9CiAKK2Jvb2wgQ0NQcmlvcml0aXplZFRleHR1cmU6OmJhY2tpbmdXYXNEZWxldGVkKCkgY29u
c3QKK3sKKyAgICBpZiAobV9iYWNraW5nKQorICAgICAgICByZXR1cm4gbV9iYWNraW5nLT5yZXNv
dXJjZURlbGV0ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHZvaWQgQ0NQcmlvcml0aXpl
ZFRleHR1cmU6OmxpbmsoQmFja2luZyogYmFja2luZykKIHsKICAgICBBU1NFUlQoYmFja2luZyk7
CkBAIC0xMzksNCArMTQ4LDI1IEBAIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmU6OnNldFRvU2Vs
Zk1hbmFnZWRNZW1vcnlQbGFjZWhvbGRlcihzaXplX3QgYnl0ZXMpCiAgICAgbV9ieXRlcyA9IGJ5
dGVzOwogfQogCitDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNlSWQgQ0NQcmlvcml0aXplZFRl
eHR1cmU6OkJhY2tpbmc6OmlkKCkKK3sKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFk
KCkpOworICAgIHJldHVybiBtX3RleHR1cmUuaWQoKTsKK30KKworYm9vbCBDQ1ByaW9yaXRpemVk
VGV4dHVyZTo6QmFja2luZzo6cmVzb3VyY2VEZWxldGVkKCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
Q0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOworICAgIHJldHVybiBtX3Jlc291cmNlRGVsZXRlZDsK
K30KKwordm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZzo6ZGVsZXRlUmVzb3VyY2Uo
Q0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyKQoreworICAgIEFTU0VSVChDQ1By
b3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgQVNTRVJUKHJlc291cmNlUHJvdmlkZXIpOworICAg
IEFTU0VSVCghbV9yZXNvdXJjZURlbGV0ZWQpOworICAgIHJlc291cmNlUHJvdmlkZXItPmRlbGV0
ZVJlc291cmNlKG1fdGV4dHVyZS5pZCgpKTsKKyAgICBtX3Jlc291cmNlRGVsZXRlZCA9IHRydWU7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVk
VGV4dHVyZS5oCmluZGV4IDM3ODlkN2YyNjlhM2Q3ZTUxOTVhODkyZGRkMzc2ZGFlNjE4ZDJiMGUu
LjNlY2ZlOTU1YTY1MDlkYjgzODVmYzdjM2Q4NTlhN2ZkMjc2ZDI2M2QgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRU
ZXh0dXJlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NQcmlvcml0aXplZFRleHR1cmUuaApAQCAtODgsNiArODgsOCBAQCBwdWJsaWM6CiAgICAg
Ly8gVXBsb2FkcyBwaXhlbHMgaW50byB0aGUgYmFja2luZyByZXNvdXJjZS4gVGhpcyBmdW5jdGlv
bnMgd2lsbCBhcXVpcmUgdGhlIGJhY2tpbmcgaWYgbmVlZGVkLgogICAgIHZvaWQgdXBsb2FkKEND
UmVzb3VyY2VQcm92aWRlciosIGNvbnN0IHVpbnQ4X3QqIGltYWdlLCBjb25zdCBJbnRSZWN0JiBp
bWFnZVJlY3QsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFNpemUmIGRlc3RP
ZmZzZXQpOwogCisgICAgYm9vbCBiYWNraW5nV2FzRGVsZXRlZCgpIGNvbnN0OworCiAgICAgQ0NS
ZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJjZUlkIHJlc291cmNlSWQoKSBjb25zdDsKIAogICAgIC8v
IFNlbGYtbWFuYWdlZCB0ZXh0dXJlcyBhcmUgYWNjb3VudGVkIGZvciB3aGVuIHByaW9yaXRpemlu
ZyBvdGhlciB0ZXh0dXJlcywKQEAgLTEwMSwxNiArMTAzLDI4IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgZnJpZW5kIGNsYXNzIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjsKIAotICAgIGNs
YXNzIEJhY2tpbmcgOiBwdWJsaWMgQ0NUZXh0dXJlIHsKKyAgICBjbGFzcyBCYWNraW5nIHsKICAg
ICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQmFja2luZyk7CiAgICAgcHVibGljOgogICAgICAg
ICBCYWNraW5nKHVuc2lnbmVkIGlkLCBJbnRTaXplIHNpemUsIEdDM0RlbnVtIGZvcm1hdCkKLSAg
ICAgICAgICAgIDogQ0NUZXh0dXJlKGlkLCBzaXplLCBmb3JtYXQpLCBtX293bmVyKDApIHsgfQot
ICAgICAgICB+QmFja2luZygpIHsgQVNTRVJUKCFtX293bmVyKTsgfQorICAgICAgICAgICAgOiBt
X3RleHR1cmUoaWQsIHNpemUsIGZvcm1hdCksIG1fcmVzb3VyY2VEZWxldGVkKGZhbHNlKSwgbV9v
d25lcigwKSB7IH0KKyAgICAgICAgfkJhY2tpbmcoKSB7IEFTU0VSVCghbV9vd25lciAmJiBtX3Jl
c291cmNlRGVsZXRlZCk7IH0KKworICAgICAgICBDQ1ByaW9yaXRpemVkVGV4dHVyZSogb3duZXIo
KSBjb25zdCB7IHJldHVybiBtX293bmVyOyB9CisKKyAgICAgICAgQ0NSZXNvdXJjZVByb3ZpZGVy
OjpSZXNvdXJjZUlkIGlkKCk7CisgICAgICAgIGNvbnN0IEludFNpemUmIHNpemUoKSBjb25zdCB7
IHJldHVybiBtX3RleHR1cmUuc2l6ZSgpOyB9CisgICAgICAgIEdDM0RlbnVtIGZvcm1hdCgpIGNv
bnN0IHsgcmV0dXJuIG1fdGV4dHVyZS5mb3JtYXQoKTsgfQorICAgICAgICBzaXplX3QgYnl0ZXMo
KSBjb25zdCB7IHJldHVybiBtX3RleHR1cmUuYnl0ZXMoKTsgfQorCisgICAgICAgIHZvaWQgZGVs
ZXRlUmVzb3VyY2UoQ0NSZXNvdXJjZVByb3ZpZGVyKik7CisgICAgICAgIGJvb2wgcmVzb3VyY2VE
ZWxldGVkKCkgY29uc3Q7CiAKLSAgICAgICAgQ0NQcmlvcml0aXplZFRleHR1cmUqIG93bmVyKCkg
eyByZXR1cm4gbV9vd25lcjsgfQogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBD
Q1ByaW9yaXRpemVkVGV4dHVyZTsKKyAgICAgICAgZnJpZW5kIGNsYXNzIENDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlcjsKKyAgICAgICAgQ0NUZXh0dXJlIG1fdGV4dHVyZTsKKyAgICAgICAgYm9v
bCBtX3Jlc291cmNlRGVsZXRlZDsKICAgICAgICAgQ0NQcmlvcml0aXplZFRleHR1cmUqIG1fb3du
ZXI7CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJl
TWFuYWdlci5jcHAKaW5kZXggODNkNjhhZDA3MWVkYjY1ODI4Mjg4OWFiYmIwMDdmNTc4ZWJhMjQ2
MC4uNTgxNmE3ZjQ2NGNiMWQyNDdhMTVjZjdkZWY0ZDZiZTRiMWRmNmVkOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXpl
ZFRleHR1cmVNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuY3BwCkBAIC00Miw2ICs0
Miw3IEBAIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Q0NQcmlvcml0aXplZFRleHR1cmVN
YW5hZ2VyKHNpemVfdCBtYXhNZW1vcnlMaW1pdEJ5CiAgICAgLCBtX21lbW9yeUFib3ZlQ3V0b2Zm
Qnl0ZXMoMCkKICAgICAsIG1fbWVtb3J5QXZhaWxhYmxlQnl0ZXMoMCkKICAgICAsIG1fcG9vbChw
b29sKQorICAgICwgbV9ldmljdGlvbkNvdW50ZXIoMCkKIHsKIH0KIApAQCAtNTAsMTAgKzUxLDE0
IEBAIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6fkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcigpCiAgICAgd2hpbGUgKG1fdGV4dHVyZXMuc2l6ZSgpID4gMCkKICAgICAgICAgdW5yZWdp
c3RlclRleHR1cmUoKm1fdGV4dHVyZXMuYmVnaW4oKSk7CiAKLSAgICAvLyBFYWNoIHJlbWFpbmlu
ZyBiYWNraW5nIGlzIGEgbGVha2VkIG9wZW5nbCB0ZXh0dXJlLiBXZSBkb24ndCBoYXZlIHRoZSBy
ZXNvdXJjZVByb3ZpZGVyCi0gICAgLy8gdG8gZGVsZXRlIHRoZSB0ZXh0dXJlcyBhdCB0aGlzIHRp
bWUgc28gY2xlYXJNZW1vcnkoKSBuZWVkcyB0byBiZSBjYWxsZWQgYmVmb3JlIHRoaXMuCi0gICAg
d2hpbGUgKG1fYmFja2luZ3Muc2l6ZSgpID4gMCkKLSAgICAgICAgZGVzdHJveUJhY2tpbmcoKm1f
YmFja2luZ3MuYmVnaW4oKSwgMCk7CisgICAgLy8gRGVzdHJveSBhbnkgYmFja2luZ3MgdGhhdCB3
ZXJlIGV2aWN0ZWQuCisgICAgZm9yIChCYWNraW5nU2V0OjppdGVyYXRvciBpdCA9IG1fZXZpY3Rl
ZEJhY2tpbmdzLmJlZ2luKCk7IGl0ICE9IG1fZXZpY3RlZEJhY2tpbmdzLmVuZCgpOyArK2l0KQor
ICAgICAgICBkZXN0cm95QmFja2luZygoKml0KSk7CisgICAgbV9ldmljdGVkQmFja2luZ3MuY2xl
YXIoKTsKKworICAgIC8vIEVhY2ggcmVtYWluaW5nIGJhY2tpbmcgaXMgcmVhbCBtZW1vcnkgbGVh
ay4gVGhpcyBzaG91bGRuJ3QgaGFwcGVuLgorICAgIEFTU0VSVChtX3VuZXZpY3RlZEJhY2tpbmdz
LmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1fYmFja2luZ3MuaXNFbXB0eSgpKTsKIH0KIAogdm9p
ZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnByaW9yaXRpemVUZXh0dXJlcygpCkBAIC0x
NzYsNiArMTgxLDcgQEAgYm9vbCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnJlcXVlc3RM
YXRlKENDUHJpb3JpdGl6ZWRUZXh0dXJlKiB0ZXh0dXJlKQogdm9pZCBDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI6OmFjcXVpcmVCYWNraW5nVGV4dHVyZUlmTmVlZGVkKENDUHJpb3JpdGl6ZWRU
ZXh0dXJlKiB0ZXh0dXJlLCBDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIpCiB7
CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpICYmIENDUHJveHk6OmlzTWFpblRo
cmVhZEJsb2NrZWQoKSk7CisgICAgQVNTRVJUKHJlc291cmNlUHJvdmlkZXIpOwogICAgIEFTU0VS
VCghdGV4dHVyZS0+aXNTZWxmTWFuYWdlZCgpKTsKICAgICBBU1NFUlQodGV4dHVyZS0+aXNBYm92
ZVByaW9yaXR5Q3V0b2ZmKCkpOwogICAgIGlmICh0ZXh0dXJlLT5iYWNraW5nKCkgfHwgIXRleHR1
cmUtPmlzQWJvdmVQcmlvcml0eUN1dG9mZigpKQpAQCAtMTg4LDYgKzE5NCw4IEBAIHZvaWQgQ0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjphY3F1aXJlQmFja2luZ1RleHR1cmVJZk5lZWRlZChD
Q1ByaW9yaXRpemVkVGV4CiAgICAgZm9yIChCYWNraW5nU2V0OjppdGVyYXRvciBpdCA9IG1fYmFj
a2luZ3MuYmVnaW4oKTsgaXQgIT0gbV9iYWNraW5ncy5lbmQoKTsgKytpdCkgewogICAgICAgICBp
ZiAoKCppdCktPm93bmVyKCkgJiYgKCppdCktPm93bmVyKCktPmlzQWJvdmVQcmlvcml0eUN1dG9m
ZigpKQogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICgoKml0KS0+cmVzb3VyY2VEZWxl
dGVkKCkpCisgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKCgqaXQpLT5zaXplKCkg
PT0gdGV4dHVyZS0+c2l6ZSgpICYmICgqaXQpLT5mb3JtYXQoKSA9PSB0ZXh0dXJlLT5mb3JtYXQo
KSkgewogICAgICAgICAgICAgYmFja2luZyA9ICgqaXQpOwogICAgICAgICAgICAgYnJlYWs7CkBA
IC0xOTgsNiArMjA2LDcgQEAgdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmFjcXVp
cmVCYWNraW5nVGV4dHVyZUlmTmVlZGVkKENDUHJpb3JpdGl6ZWRUZXgKICAgICBpZiAoIWJhY2tp
bmcpIHsKICAgICAgICAgcmVkdWNlTWVtb3J5KG1fbWVtb3J5QXZhaWxhYmxlQnl0ZXMgLSB0ZXh0
dXJlLT5ieXRlcygpLCByZXNvdXJjZVByb3ZpZGVyKTsKICAgICAgICAgYmFja2luZyA9IGNyZWF0
ZUJhY2tpbmcodGV4dHVyZS0+c2l6ZSgpLCB0ZXh0dXJlLT5mb3JtYXQoKSwgcmVzb3VyY2VQcm92
aWRlcik7CisgICAgICAgIG1fdW5ldmljdGVkQmFja2luZ3MuYWRkKGJhY2tpbmcpOwogICAgIH0K
IAogICAgIC8vIE1vdmUgdGhlIHVzZWQgYmFja2luZyB0ZXh0dXJlIHRvIHRoZSBlbmQgb2YgdGhl
IGV2aWN0aW9uIGxpc3QuCkBAIC0yMTEsNiArMjIwLDcgQEAgdm9pZCBDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI6OmFjcXVpcmVCYWNraW5nVGV4dHVyZUlmTmVlZGVkKENDUHJpb3JpdGl6ZWRU
ZXgKIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpyZWR1Y2VNZW1vcnkoc2l6ZV90
IGxpbWl0Qnl0ZXMsIENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlcikKIHsKICAg
ICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkgJiYgQ0NQcm94eTo6aXNNYWluVGhyZWFk
QmxvY2tlZCgpKTsKKyAgICBBU1NFUlQocmVzb3VyY2VQcm92aWRlcik7CiAgICAgaWYgKG1lbW9y
eVVzZUJ5dGVzKCkgPD0gbGltaXRCeXRlcykKICAgICAgICAgcmV0dXJuOwogICAgIC8vIERlc3Ry
b3kgYmFja2luZ3MgdW50aWwgd2UgYXJlIGJlbG93IHRoZSBsaW1pdCwKQEAgLTIxOSw3ICsyMjks
MTUgQEAgdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnJlZHVjZU1lbW9yeShzaXpl
X3QgbGltaXRCeXRlcywgQ0NSZXNvdXJjZVByb3YKICAgICAgICAgQmFja2luZ1NldDo6aXRlcmF0
b3IgaXQgPSBtX2JhY2tpbmdzLmJlZ2luKCk7CiAgICAgICAgIGlmICgoKml0KS0+b3duZXIoKSAm
JiAoKml0KS0+b3duZXIoKS0+aXNBYm92ZVByaW9yaXR5Q3V0b2ZmKCkpCiAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgZGVzdHJveUJhY2tpbmcoKCppdCksIHJlc291cmNlUHJvdmlkZXIpOwor
ICAgICAgICBpZiAoKCppdCktPnJlc291cmNlRGVsZXRlZCgpKSB7CisgICAgICAgICAgICBBU1NF
UlQobV9ldmljdGVkQmFja2luZ3MuZmluZCgoKml0KSkgIT0gbV9ldmljdGVkQmFja2luZ3MuZW5k
KCkpOworICAgICAgICAgICAgbV9ldmljdGVkQmFja2luZ3MucmVtb3ZlKCgqaXQpKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3VuZXZpY3RlZEJhY2tpbmdzLmZpbmQo
KCppdCkpICE9IG1fdW5ldmljdGVkQmFja2luZ3MuZW5kKCkpOworICAgICAgICAgICAgbV91bmV2
aWN0ZWRCYWNraW5ncy5yZW1vdmUoKCppdCkpOworICAgICAgICAgICAgKCppdCktPmRlbGV0ZVJl
c291cmNlKHJlc291cmNlUHJvdmlkZXIpOworICAgICAgICB9CisgICAgICAgIGRlc3Ryb3lCYWNr
aW5nKCgqaXQpKTsKICAgICB9CiB9CiAKQEAgLTI0OCwyMSArMjY2LDUwIEBAIHZvaWQgQ0NQcmlv
cml0aXplZFRleHR1cmVNYW5hZ2VyOjpyZWR1Y2VNZW1vcnkoQ0NSZXNvdXJjZVByb3ZpZGVyKiBy
ZXNvdXJjZVByb3ZpCiAKIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjbGVhckFs
bE1lbW9yeShDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIpCiB7Ci0gICAgLy8g
VW5saW5rIGFuZCBkZXN0cm95IGFsbCBiYWNraW5nIHRleHR1cmVzLgotICAgIHdoaWxlIChtX2Jh
Y2tpbmdzLnNpemUoKSA+IDApIHsKLSAgICAgICAgQmFja2luZ1NldDo6aXRlcmF0b3IgaXQgPSBt
X2JhY2tpbmdzLmJlZ2luKCk7Ci0gICAgICAgIGlmICgoKml0KS0+b3duZXIoKSkKLSAgICAgICAg
ICAgICgqaXQpLT5vd25lcigpLT51bmxpbmsoKTsKLSAgICAgICAgZGVzdHJveUJhY2tpbmcoKCpp
dCksIHJlc291cmNlUHJvdmlkZXIpOworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQo
KSAmJiBDQ1Byb3h5Ojppc01haW5UaHJlYWRCbG9ja2VkKCkpOworICAgIEFTU0VSVChyZXNvdXJj
ZVByb3ZpZGVyKTsKKworICAgIHJlZHVjZU1lbW9yeU9uSW1wbFRocmVhZChyZXNvdXJjZVByb3Zp
ZGVyKTsKKyAgICBmb3IgKEJhY2tpbmdTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9ldmljdGVkQmFja2lu
Z3MuYmVnaW4oKTsgaXQgIT0gbV9ldmljdGVkQmFja2luZ3MuZW5kKCk7ICsraXQpCisgICAgICAg
IGRlc3Ryb3lCYWNraW5nKCgqaXQpKTsKKyAgICBtX2V2aWN0ZWRCYWNraW5ncy5jbGVhcigpOwor
fQorCitib29sIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmVkdWNlTWVtb3J5T25JbXBs
VGhyZWFkKENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlcikKK3sKKyAgICBib29s
IHJlc3VsdCA9IGZhbHNlOworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7Cisg
ICAgQVNTRVJUKHJlc291cmNlUHJvdmlkZXIpOworICAgIGZvciAoQmFja2luZ1NldDo6aXRlcmF0
b3IgaXQgPSBtX3VuZXZpY3RlZEJhY2tpbmdzLmJlZ2luKCk7IGl0ICE9IG1fdW5ldmljdGVkQmFj
a2luZ3MuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgKCppdCktPmRlbGV0ZVJlc291cmNlKHJlc291
cmNlUHJvdmlkZXIpOworICAgICAgICBtX2V2aWN0ZWRCYWNraW5ncy5hZGQoKCppdCkpOworICAg
ICAgICByZXN1bHQgPSB0cnVlOwogICAgIH0KKyAgICBtX3VuZXZpY3RlZEJhY2tpbmdzLmNsZWFy
KCk7CisgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgbV9ldmljdGlvbkNvdW50ZXIrKzsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Z2V0
QW5kQ2xlYXJFdmljdGVkQmFja2luZ3MoQmFja2luZ1NldCYgZXZpY3RlZEJhY2tpbmdzLCBpbnQm
IGV2aWN0aW9uQ291bnRlcikKK3sKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkp
OworICAgIGV2aWN0ZWRCYWNraW5ncy5jbGVhcigpOworICAgIGV2aWN0ZWRCYWNraW5ncy5zd2Fw
KG1fZXZpY3RlZEJhY2tpbmdzKTsKKyAgICBldmljdGlvbkNvdW50ZXIgPSBtX2V2aWN0aW9uQ291
bnRlcjsKK30KKwordm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmRlc3Ryb3lFdmlj
dGVkQmFja2luZ3MoY29uc3QgQmFja2luZ1NldCYgZXZpY3RlZEJhY2tpbmdzKQoreworICAgIEFT
U0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQoKSk7CisgICAgZm9yIChCYWNraW5nU2V0Ojpjb25z
dF9pdGVyYXRvciBpdCA9IGV2aWN0ZWRCYWNraW5ncy5iZWdpbigpOyBpdCAhPSBldmljdGVkQmFj
a2luZ3MuZW5kKCk7ICsraXQpCisgICAgICAgIGRlc3Ryb3lCYWNraW5nKCgqaXQpKTsKIH0KIAot
dm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmFsbEJhY2tpbmdUZXh0dXJlc1dlcmVE
ZWxldGVkKCkKK2Jvb2wgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjppc0V2aWN0aW9uQ291
bnRlckFja1VwVG9EYXRlKGludCBldmljdGlvbkNvdW50ZXJBY2spIGNvbnN0CiB7Ci0gICAgLy8g
U2FtZSBhcyBjbGVhckFsbE1lbW9yeSwgZXhjZXB0IGFsbCBvdXIgdGV4dHVyZXMgd2VyZSBhbHJl
YWR5Ci0gICAgLy8gZGVsZXRlZCBleHRlcm5hbGx5LCBzbyB3ZSBkb24ndCBkZWxldGUgdGhlbS4g
UGFzc2luZyBubwotICAgIC8vIHJlc291cmNlUHJvdmlkZXIgcmVzdWx0cyBpbiBsZWFraW5nIHRo
ZSAobm93IGludmFsaWQpIHRleHR1cmUgaWRzLgotICAgIGNsZWFyQWxsTWVtb3J5KDApOworICAg
IEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgcmV0dXJuIChtX2V2aWN0aW9u
Q291bnRlciA9PSBldmljdGlvbkNvdW50ZXJBY2spOwogfQogCiB2b2lkIENDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlcjo6cmVnaXN0ZXJUZXh0dXJlKENDUHJpb3JpdGl6ZWRUZXh0dXJlKiB0ZXh0
dXJlKQpAQCAtMzEzLDE1ICszNjAsMTMgQEAgQ0NQcmlvcml0aXplZFRleHR1cmU6OkJhY2tpbmcq
IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlQmFja2luZyhJbnRTaXoKICAgICBy
ZXR1cm4gYmFja2luZzsKIH0KIAotdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmRl
c3Ryb3lCYWNraW5nKENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nKiBiYWNraW5nLCBDQ1Jl
c291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIpCit2b2lkIENDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcjo6ZGVzdHJveUJhY2tpbmcoQ0NQcmlvcml0aXplZFRleHR1cmU6OkJhY2tpbmcq
IGJhY2tpbmcpCiB7CiAgICAgQVNTRVJUKGJhY2tpbmcpOwotICAgIEFTU0VSVCghYmFja2luZy0+
b3duZXIoKSB8fCAhYmFja2luZy0+b3duZXIoKS0+aXNBYm92ZVByaW9yaXR5Q3V0b2ZmKCkpOwog
ICAgIEFTU0VSVCghYmFja2luZy0+b3duZXIoKSB8fCAhYmFja2luZy0+b3duZXIoKS0+aXNTZWxm
TWFuYWdlZCgpKTsKICAgICBBU1NFUlQobV9iYWNraW5ncy5maW5kKGJhY2tpbmcpICE9IG1fYmFj
a2luZ3MuZW5kKCkpOworICAgIEFTU0VSVChiYWNraW5nLT5tX3Jlc291cmNlRGVsZXRlZCk7CiAK
LSAgICBpZiAocmVzb3VyY2VQcm92aWRlcikKLSAgICAgICAgcmVzb3VyY2VQcm92aWRlci0+ZGVs
ZXRlUmVzb3VyY2UoYmFja2luZy0+aWQoKSk7CiAgICAgaWYgKGJhY2tpbmctPm93bmVyKCkpCiAg
ICAgICAgIGJhY2tpbmctPm93bmVyKCktPnVubGluaygpOwogICAgIG1fbWVtb3J5VXNlQnl0ZXMg
LT0gYmFja2luZy0+Ynl0ZXMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRl
eHR1cmVNYW5hZ2VyLmgKaW5kZXggMTNkYmM1MTc2YmNkNzhlZTI5NzA5MGE2NzY1MTI0NWY5YmQ3
NjRjYS4uYmQ2YzMyN2I4ZjViYWE3NjIzN2UyMjlmNTMzODczNDE2OTc5OTNkNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0
aXplZFRleHR1cmVNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmgKQEAgLTUzLDYgKzUz
LDggQEAgcHVibGljOgogICAgIH0KICAgICB+Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyKCk7
CiAKKyAgICB0eXBlZGVmIExpc3RIYXNoU2V0PENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5n
Kj4gQmFja2luZ1NldDsKKwogICAgIC8vIEZJWE1FIChodHRwOi8vY3JidWcuY29tLzEzNzA5NCk6
IFRoaXMgNjRNQiBkZWZhdWx0IGlzIGEgc3RyYWdnbGVyIGZyb20gdGhlCiAgICAgLy8gb2xkIHRl
eHR1cmUgbWFuYWdlciBhbmQgaXMganVzdCB0byBnaXZlIHVzIGEgZGVmYXVsdCBtZW1vcnkgYWxs
b2NhdGlvbiBiZWZvcmUKICAgICAvLyB3ZSBnZXQgYSBjYWxsYmFjayBmcm9tIHRoZSBHUFUgbWVt
b3J5IG1hbmFnZXIuIFdlIHNob3VsZCBwcm9iYWJ5IGVpdGhlcjoKQEAgLTc3LDggKzc5LDI5IEBA
IHB1YmxpYzoKICAgICBib29sIHJlcXVlc3RMYXRlKENDUHJpb3JpdGl6ZWRUZXh0dXJlKik7CiAK
ICAgICB2b2lkIHJlZHVjZU1lbW9yeShDQ1Jlc291cmNlUHJvdmlkZXIqKTsKKworICAgIC8vIFJl
dHVybnMgdHJ1ZSBpZiByZXNvdXJjZXMgYXJlIGRlbGV0ZWQgYXMgYSByZXN1bHQgb2YgdGhpcyBj
YWxsLgorICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgYXN5bmNocm9ub3VzIGluIHRoYXQgaXQgaXMg
Y2FsbGVkIG9uIHRoZSBpbXBsIHRocmVhZCB3aGlsZSB0aGUKKyAgICAvLyBtYWluIHRocmVhZCBp
cyBub3QgYmxvY2tlZCAoc28gaXQgbWF5IGJlIGNvbmN1cnJlbnQgd2l0aCBvdGhlciBjYWxscyBm
cm9tIHRoZQorICAgIC8vIG1haW4gdGhyZWFkKQorICAgIGJvb2wgcmVkdWNlTWVtb3J5T25JbXBs
VGhyZWFkKENDUmVzb3VyY2VQcm92aWRlciopOworCisgICAgLy8gUmV0dXJuIHRoZSBiYWNraW5n
cyB0aGF0IHdlcmUgZGVsZXRlZCBieSBhbGwgY2FsbHMgdG8gcmVkdWNlTWVtb3J5T25JbXBsVGhy
ZWFkCisgICAgLy8gc2luY2UgdGhlIGxhc3QgY2FsbCB0byBnZXRBbmRDbGVhckV2aWN0ZWRCYWNr
aW5ncy4gU2V0IGV2aWN0aW9uQ291bnRlckFjaworICAgIC8vIHRvIGFuIGludGVybmFsIGNvdW50
ZXIgdmFsdWUgdXNlZCB0byB0cmFjayBpZiB0aGVyZSBhcmUgZXZpY3RlZCB0ZXh0dXJlcworICAg
IC8vIHRoYXQgbWF5IHN0aWxsIHRoZSBpbiB0aGUgaW1wbCB0aHJlYWQncyBsYXllciB0cmVlLgor
ICAgIHZvaWQgZ2V0QW5kQ2xlYXJFdmljdGVkQmFja2luZ3MoQmFja2luZ1NldCYsIGludCYgZXZp
Y3Rpb25Db3VudGVyQWNrKTsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBldmljdGlvbkNvdW50
ZXJBY2sgaXMgdGhlIHZhbHVlIG9mIGludGVybmFsIGV2aWN0aW9uIGNvdW50ZXIuCisgICAgYm9v
bCBpc0V2aWN0aW9uQ291bnRlckFja1VwVG9EYXRlKGludCBldmljdGlvbkNvdW50ZXJBY2spIGNv
bnN0OworCisgICAgLy8gRGVsZXRlIGFsbCB0ZXh0dXJlcyBhbmQgZnJvbSB0aGUgaW1wbCB0aHJl
YWQgKHdoZW4gY2xvc2luZyB0aGUgdHJlZSBhbmQgYXQKKyAgICAvLyBjb250ZXh0IGxvc3QpLgog
ICAgIHZvaWQgY2xlYXJBbGxNZW1vcnkoQ0NSZXNvdXJjZVByb3ZpZGVyKik7Ci0gICAgdm9pZCBh
bGxCYWNraW5nVGV4dHVyZXNXZXJlRGVsZXRlZCgpOworCisgICAgLy8gUmVtb3ZlIGJhY2tpbmdz
IHdob3NlIHJlc291cmNlcyB3ZXJlIGRlc3Ryb3llZCBieSByZWR1Y2VNZW1vcnlPbkltcGxUaHJl
YWQuCisgICAgLy8gQ2FsbGVkIG9uIHRoZSBtYWluIHRocmVhZC4KKyAgICB2b2lkIGRlc3Ryb3lF
dmljdGVkQmFja2luZ3MoY29uc3QgQmFja2luZ1NldCYgZXZpY3RlZEJhY2tpbmdzKTsKIAogICAg
IHZvaWQgYWNxdWlyZUJhY2tpbmdUZXh0dXJlSWZOZWVkZWQoQ0NQcmlvcml0aXplZFRleHR1cmUq
LCBDQ1Jlc291cmNlUHJvdmlkZXIqKTsKIApAQCAtMTEzLDcgKzEzNiw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCByZWR1Y2VNZW1vcnkoc2l6ZV90IGxpbWl0LCBDQ1Jlc291cmNlUHJvdmlkZXIqKTsK
IAogICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nKiBjcmVhdGVCYWNraW5nKEludFNp
emUsIEdDM0RlbnVtIGZvcm1hdCwgQ0NSZXNvdXJjZVByb3ZpZGVyKik7Ci0gICAgdm9pZCBkZXN0
cm95QmFja2luZyhDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZyosIENDUmVzb3VyY2VQcm92
aWRlciopOworICAgIHZvaWQgZGVzdHJveUJhY2tpbmcoQ0NQcmlvcml0aXplZFRleHR1cmU6OkJh
Y2tpbmcqKTsKIAogICAgIHNpemVfdCBtX21heE1lbW9yeUxpbWl0Qnl0ZXM7CiAgICAgdW5zaWdu
ZWQgbV9wcmlvcml0eUN1dG9mZjsKQEAgLTEyMyw3ICsxNDYsNiBAQCBwcml2YXRlOgogICAgIGlu
dCBtX3Bvb2w7CiAKICAgICB0eXBlZGVmIEhhc2hTZXQ8Q0NQcmlvcml0aXplZFRleHR1cmUqPiBU
ZXh0dXJlU2V0OwotICAgIHR5cGVkZWYgTGlzdEhhc2hTZXQ8Q0NQcmlvcml0aXplZFRleHR1cmU6
OkJhY2tpbmcqPiBCYWNraW5nU2V0OwogICAgIHR5cGVkZWYgVmVjdG9yPENDUHJpb3JpdGl6ZWRU
ZXh0dXJlKj4gVGV4dHVyZVZlY3RvcjsKICAgICB0eXBlZGVmIFZlY3RvcjxDQ1ByaW9yaXRpemVk
VGV4dHVyZTo6QmFja2luZyo+IEJhY2tpbmdWZWN0b3I7CiAKQEAgLTEzMiw2ICsxNTQsMTYgQEAg
cHJpdmF0ZToKIAogICAgIFRleHR1cmVWZWN0b3IgbV90ZW1wVGV4dHVyZVZlY3RvcjsKICAgICBC
YWNraW5nVmVjdG9yIG1fdGVtcEJhY2tpbmdWZWN0b3I7CisKKyAgICAvLyBUaGUgc2V0IG9mIGJh
Y2tpbmdzIHRoYXQgaGF2ZSBub3QgYmVlbiBldmljdGVkIChleGlzdHMgYmVjYXVzZSB0aGUgaW1w
bAorICAgIC8vIHRocmVhZCBjYW4ndCBhY2Nlc3MgbV9iYWNraW5ncyB3aGlsZSB0aGUgbWFpbiB0
aHJlYWQgaXMgbm90IGJsb2NrZWQpLgorICAgIEJhY2tpbmdTZXQgbV91bmV2aWN0ZWRCYWNraW5n
czsKKworICAgIC8vIEJhY2tpbmdzIHRoYXQgaGF2ZSBiZWVuIGV2aWN0ZWQgc2luY2UgdGhlIGxh
c3QgY2FsbCB0byBnZXRBbmRDbGVhckV2aWN0ZWRCYWNraW5ncy4KKyAgICBCYWNraW5nU2V0IG1f
ZXZpY3RlZEJhY2tpbmdzOworCisgICAgLy8gQ291bnRlciBpbmNyZW1lbnRlZCBmb3IgZWFjaCBj
YWxsIHRvIHJlZHVjZU1lbW9yeU9uSW1wbFRocmVhZCB0aGF0IGV2aWN0cyBhIHRleHR1cmUuCisg
ICAgaW50IG1fZXZpY3Rpb25Db3VudGVyOwogfTsKIAogfSAvLyBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRo
cmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCmluZGV4IDY4NzZlYTIxODhiYWY2NjY4YTI5YWMz
N2MxY2QzOGM4Y2I0NDFjZTkuLmRiMGZkMzZlMzYwZmM4ZTFjYTNlYTdlMDhmODMyZjgwYWNiMzZm
M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCkBAIC0xNTUsOSAr
MTU1LDEwIEBAIGJvb2wgQ0NTaW5nbGVUaHJlYWRQcm94eTo6cmVjcmVhdGVDb250ZXh0KCkKIAog
ICAgIGJvb2wgaW5pdGlhbGl6ZWQ7CiAgICAgeworICAgICAgICBEZWJ1Z1Njb3BlZFNldE1haW5U
aHJlYWRCbG9ja2VkIG1haW5UaHJlYWRCbG9ja2VkOwogICAgICAgICBEZWJ1Z1Njb3BlZFNldElt
cGxUaHJlYWQgaW1wbDsKLSAgICAgICAgaWYgKCFtX2xheWVyVHJlZUhvc3RJbXBsLT5jb250ZW50
c1RleHR1cmVzUHVyZ2VkKCkpCi0gICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmRlbGV0ZUNv
bnRlbnRzVGV4dHVyZXNPbkltcGxUaHJlYWQobV9sYXllclRyZWVIb3N0SW1wbC0+cmVzb3VyY2VQ
cm92aWRlcigpKTsKKyAgICAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdC0+Y29udGVudHNUZXh0dXJl
TWFuYWdlcigpKQorICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5jb250ZW50c1RleHR1cmVN
YW5hZ2VyKCktPmNsZWFyQWxsTWVtb3J5KG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJlc291cmNlUHJv
dmlkZXIoKSk7CiAgICAgICAgIGluaXRpYWxpemVkID0gbV9sYXllclRyZWVIb3N0SW1wbC0+aW5p
dGlhbGl6ZVJlbmRlcmVyKGNvbnRleHQucmVsZWFzZSgpLCBVbnRocm90dGxlZFVwbG9hZGVyKTsK
ICAgICAgICAgaWYgKGluaXRpYWxpemVkKSB7CiAgICAgICAgICAgICBtX1JlbmRlcmVyQ2FwYWJp
bGl0aWVzRm9yTWFpblRocmVhZCA9IG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJlbmRlcmVyQ2FwYWJp
bGl0aWVzKCk7CkBAIC0yNjAsOSArMjYxLDggQEAgdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpz
dG9wKCkKICAgICB7CiAgICAgICAgIERlYnVnU2NvcGVkU2V0TWFpblRocmVhZEJsb2NrZWQgbWFp
blRocmVhZEJsb2NrZWQ7CiAgICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOwot
Ci0gICAgICAgIGlmICghbV9sYXllclRyZWVIb3N0SW1wbC0+Y29udGVudHNUZXh0dXJlc1B1cmdl
ZCgpKQotICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5kZWxldGVDb250ZW50c1RleHR1cmVz
T25JbXBsVGhyZWFkKG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJlc291cmNlUHJvdmlkZXIoKSk7Cisg
ICAgICAgIGlmIChtX2xheWVyVHJlZUhvc3QtPmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKSkKKyAg
ICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigpLT5jbGVh
ckFsbE1lbW9yeShtX2xheWVyVHJlZUhvc3RJbXBsLT5yZXNvdXJjZVByb3ZpZGVyKCkpOwogICAg
ICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLmNsZWFyKCk7CiAgICAgfQogICAgIG1fbGF5ZXJUcmVl
SG9zdCA9IDA7CkBAIC0yNzUsNiArMjc1LDE2IEBAIHZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6
cG9zdEFuaW1hdGlvbkV2ZW50c1RvTWFpblRocmVhZE9uSW1wbFRocmVhZChQYXNzT3duUHRyCiAg
ICAgbV9sYXllclRyZWVIb3N0LT5zZXRBbmltYXRpb25FdmVudHMoZXZlbnRzLCB3YWxsQ2xvY2tU
aW1lKTsKIH0KIAordm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5OjpyZWR1Y2VDb250ZW50c1RleHR1
cmVzTWVtb3J5T25JbXBsVGhyZWFkKCkKK3sKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhy
ZWFkKCkpOworICAgIGlmIChtX2xheWVyVHJlZUhvc3QtPmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIo
KQorICAgICAgICAmJiBtX2xheWVyVHJlZUhvc3QtPmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+
cmVkdWNlTWVtb3J5T25JbXBsVGhyZWFkKG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJlc291cmNlUHJv
dmlkZXIoKSkpIHsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+c2V0Q29udGVudHNUZXh0
dXJlc1B1cmdlZCgpOworICAgICAgICBzZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpOworICAg
IH0KK30KKwogLy8gQ2FsbGVkIGJ5IHRoZSBsZWdhY3kgc2NoZWR1bGluZyBwYXRoIChlLmcuIHdo
ZXJlIHJlbmRlcl93aWRnZXQgZG9lcyB0aGUgc2NoZWR1bGluZykKIHZvaWQgQ0NTaW5nbGVUaHJl
YWRQcm94eTo6Y29tcG9zaXRlSW1tZWRpYXRlbHkoKQogewpAQCAtMzAxLDggKzMxMSwxNSBAQCBi
b29sIENDU2luZ2xlVGhyZWFkUHJveHk6OmNvbW1pdEFuZENvbXBvc2l0ZSgpCiAgICAgaWYgKCFt
X2xheWVyVHJlZUhvc3QtPmluaXRpYWxpemVSZW5kZXJlcklmTmVlZGVkKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGlmIChtX2xheWVyVHJlZUhvc3RJbXBsLT5jb250ZW50c1RleHR1
cmVzUHVyZ2VkKCkpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZXZpY3RBbGxDb250ZW50VGV4
dHVyZXMoKTsKKyAgICBpZiAobV9sYXllclRyZWVIb3N0LT5jb250ZW50c1RleHR1cmVNYW5hZ2Vy
KCkpIHsKKyAgICAgICAgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpCYWNraW5nU2V0IGV2
aWN0ZWRCYWNraW5nczsKKyAgICAgICAgaW50IGV2aWN0aW9uQ291bnRlciA9IDA7CisgICAgICAg
IHsKKyAgICAgICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOworICAgICAgICAg
ICAgbV9sYXllclRyZWVIb3N0LT5jb250ZW50c1RleHR1cmVNYW5hZ2VyKCktPmdldEFuZENsZWFy
RXZpY3RlZEJhY2tpbmdzKGV2aWN0ZWRCYWNraW5ncywgZXZpY3Rpb25Db3VudGVyKTsKKyAgICAg
ICAgfQorICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+
ZGVzdHJveUV2aWN0ZWRCYWNraW5ncyhldmljdGVkQmFja2luZ3MpOworICAgIH0KIAogICAgIEND
VGV4dHVyZVVwZGF0ZVF1ZXVlIHF1ZXVlOwogICAgIG1fbGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5
ZXJzKHF1ZXVlLCBtX2xheWVyVHJlZUhvc3RJbXBsLT5tZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRl
cygpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaAppbmRleCA3MWY0ZjRmNTdl
Y2U0YWRmMWU0NjVhMjQ4NTk5N2I1ZmM5MGEyZTJkLi45ZmIxYWI4ZDM0YzhkNzdiNDBkOGM0ZTMx
NzIwYTFlNDQ0YjY1ZDc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oCkBA
IC03Miw2ICs3Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNSZWRyYXdP
bkltcGxUaHJlYWQoKSBPVkVSUklERSB7IG1fbGF5ZXJUcmVlSG9zdC0+c2NoZWR1bGVDb21wb3Np
dGUoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpIE9W
RVJSSURFIHsgbV9sYXllclRyZWVIb3N0LT5zY2hlZHVsZUNvbXBvc2l0ZSgpOyB9CiAgICAgdmly
dHVhbCB2b2lkIHBvc3RBbmltYXRpb25FdmVudHNUb01haW5UaHJlYWRPbkltcGxUaHJlYWQoUGFz
c093blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4sIGRvdWJsZSB3YWxsQ2xvY2tUaW1lKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVkdWNlQ29udGVudHNUZXh0dXJlc01lbW9yeU9u
SW1wbFRocmVhZCgpIE9WRVJSSURFOwogCiAgICAgLy8gQ2FsbGVkIGJ5IHRoZSBsZWdhY3kgcGF0
aCB3aGVyZSBSZW5kZXJXaWRnZXQgZG9lcyB0aGUgc2NoZWR1bGluZy4KICAgICB2b2lkIGNvbXBv
c2l0ZUltbWVkaWF0ZWx5KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVDb250cm9sbGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZUNv
bnRyb2xsZXIuY3BwCmluZGV4IDZmYzc3MWU5NTkwNWVlM2M4N2U2MWIwMWY2ODY2M2IyZjkwNjAx
YzcuLjM5MzliMWIzODg4Y2ZiZDRhODljYWY3NDUzYzcxMDhjMmQyNGQ4NTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVw
ZGF0ZUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXIuY3BwCkBAIC0xNTAsNiArMTUw
LDExIEBAIHZvaWQgQ0NUZXh0dXJlVXBkYXRlQ29udHJvbGxlcjo6dXBkYXRlTW9yZVRleHR1cmVz
KGRvdWJsZSBtb25vdG9uaWNUaW1lTGltaXQpCiAgICAgICAgIHVwZGF0ZU1vcmVUZXh0dXJlc05v
dygpOwogfQogCit2b2lkIENDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXI6OmRpc2NhcmRVcGxvYWRz
VG9EZWxldGVkUmVzb3VyY2VzKCkKK3sKKyAgICBtX3F1ZXVlLT5jbGVhclVwbG9hZHNUb0RlbGV0
ZWRSZXNvdXJjZXMoKTsKK30KKwogdm9pZCBDQ1RleHR1cmVVcGRhdGVDb250cm9sbGVyOjpvblRp
bWVyRmlyZWQoKQogewogICAgIGlmICghbV9xdWV1ZS0+aGFzTW9yZVVwZGF0ZXMoKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4
dHVyZVVwZGF0ZUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXIuaAppbmRleCBkZDc1OGJlYjRk
OWZjZDg2NmUxOGM4NDdjY2QwYWYyODliYTk1YmQxLi5jYTMyM2M5YmJkZmRlMDNmZGJjMzJiMDU5
ZDY3YTBkM2M1YzEwY2E4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVDb250cm9sbGVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlQ29u
dHJvbGxlci5oCkBAIC01MSw2ICs1MSw5IEBAIHB1YmxpYzoKICAgICBib29sIGhhc01vcmVVcGRh
dGVzKCkgY29uc3Q7CiAgICAgdm9pZCB1cGRhdGVNb3JlVGV4dHVyZXMoZG91YmxlIG1vbm90b25p
Y1RpbWVMaW1pdCk7CiAKKyAgICAvLyBEaXNjYXJkIHVwbG9hZHMgdG8gdGV4dHVyZXMgdGhhdCB3
ZXJlIGV2aWN0ZWQgb24gdGhlIGltcGwgdGhyZWFkCisgICAgdm9pZCBkaXNjYXJkVXBsb2Fkc1Rv
RGVsZXRlZFJlc291cmNlcygpOworCiAgICAgLy8gQ0NUaW1lckNsaWVudCBpbXBsZW1lbnRhdGlv
bi4KICAgICB2aXJ0dWFsIHZvaWQgb25UaW1lckZpcmVkKCkgT1ZFUlJJREU7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVy
ZVVwZGF0ZVF1ZXVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGV4dHVyZVVwZGF0ZVF1ZXVlLmNwcAppbmRleCA4ZjU4ZmNiY2I0Y2JhMjRmMzRh
NWFhZDQ3ZWQ3Yzk0NjA3NDNjMWE4Li4zYmEwZThiYjgwZDRiYWJlNzc0NTg2ZTA0M2Q0ODFiM2M3
YmE1NDMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVRdWV1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlUXVldWUuY3BwCkBAIC01
NCwxMCArNTQsMjEgQEAgdm9pZCBDQ1RleHR1cmVVcGRhdGVRdWV1ZTo6YXBwZW5kQ29weShUZXh0
dXJlQ29waWVyOjpQYXJhbWV0ZXJzIGNvcHkpCiAgICAgbV9jb3B5RW50cmllcy5hcHBlbmQoY29w
eSk7CiB9CiAKLXZvaWQgQ0NUZXh0dXJlVXBkYXRlUXVldWU6OmNsZWFyVXBsb2FkcygpCit2b2lk
IENDVGV4dHVyZVVwZGF0ZVF1ZXVlOjpjbGVhclVwbG9hZHNUb0RlbGV0ZWRSZXNvdXJjZXMoKQog
ewotICAgIG1fZnVsbEVudHJpZXMuY2xlYXIoKTsKLSAgICBtX3BhcnRpYWxFbnRyaWVzLmNsZWFy
KCk7CisgICAgY2xlYXJVcGxvYWRzVG9EZWxldGVkUmVzb3VyY2VzKG1fZnVsbEVudHJpZXMpOwor
ICAgIGNsZWFyVXBsb2Fkc1RvRGVsZXRlZFJlc291cmNlcyhtX3BhcnRpYWxFbnRyaWVzKTsKK30K
Kwordm9pZCBDQ1RleHR1cmVVcGRhdGVRdWV1ZTo6Y2xlYXJVcGxvYWRzVG9EZWxldGVkUmVzb3Vy
Y2VzKERlcXVlPFRleHR1cmVVcGxvYWRlcjo6UGFyYW1ldGVycz4mIGVudHJ5UXVldWUpCit7Cisg
ICAgRGVxdWU8VGV4dHVyZVVwbG9hZGVyOjpQYXJhbWV0ZXJzPiB0ZW1wOworICAgIGVudHJ5UXVl
dWUuc3dhcCh0ZW1wKTsKKyAgICB3aGlsZSAodGVtcC5zaXplKCkpIHsKKyAgICAgICAgVGV4dHVy
ZVVwbG9hZGVyOjpQYXJhbWV0ZXJzIHVwbG9hZCA9IHRlbXAudGFrZUZpcnN0KCk7CisgICAgICAg
IGlmICghdXBsb2FkLnRleHR1cmUtPmJhY2tpbmdXYXNEZWxldGVkKCkpCisgICAgICAgICAgICBl
bnRyeVF1ZXVlLmFwcGVuZCh1cGxvYWQpOworICAgIH0KIH0KIAogVGV4dHVyZVVwbG9hZGVyOjpQ
YXJhbWV0ZXJzIENDVGV4dHVyZVVwZGF0ZVF1ZXVlOjp0YWtlRmlyc3RGdWxsVXBsb2FkKCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGV4dHVyZVVwZGF0ZVF1ZXVlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVRdWV1ZS5oCmluZGV4IGRlNjM3MzgyMWYwOGE4NDU0
YWU2NDg1YjZhZjM3NDgzYzc4MDVlZTYuLmM4ZGNiMTZlMDIzYmJhMTc2YjUwOGUxY2Q5NGI2OGY2
MjdkOTcwZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZVF1ZXVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlUXVldWUuaApAQCAtNDMs
NyArNDMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhcHBlbmRQYXJ0aWFsVXBsb2FkKFRleHR1cmVV
cGxvYWRlcjo6UGFyYW1ldGVycyk7CiAgICAgdm9pZCBhcHBlbmRDb3B5KFRleHR1cmVDb3BpZXI6
OlBhcmFtZXRlcnMpOwogCi0gICAgdm9pZCBjbGVhclVwbG9hZHMoKTsKKyAgICB2b2lkIGNsZWFy
VXBsb2Fkc1RvRGVsZXRlZFJlc291cmNlcygpOwogCiAgICAgVGV4dHVyZVVwbG9hZGVyOjpQYXJh
bWV0ZXJzIHRha2VGaXJzdEZ1bGxVcGxvYWQoKTsKICAgICBUZXh0dXJlVXBsb2FkZXI6OlBhcmFt
ZXRlcnMgdGFrZUZpcnN0UGFydGlhbFVwbG9hZCgpOwpAQCAtNTYsNiArNTYsNyBAQCBwdWJsaWM6
CiAgICAgYm9vbCBoYXNNb3JlVXBkYXRlcygpIGNvbnN0OwogCiBwcml2YXRlOgorICAgIHZvaWQg
Y2xlYXJVcGxvYWRzVG9EZWxldGVkUmVzb3VyY2VzKERlcXVlPFRleHR1cmVVcGxvYWRlcjo6UGFy
YW1ldGVycz4mIGVudHJ5UXVldWUpOwogICAgIERlcXVlPFRleHR1cmVVcGxvYWRlcjo6UGFyYW1l
dGVycz4gbV9mdWxsRW50cmllczsKICAgICBEZXF1ZTxUZXh0dXJlVXBsb2FkZXI6OlBhcmFtZXRl
cnM+IG1fcGFydGlhbEVudHJpZXM7CiAgICAgRGVxdWU8VGV4dHVyZUNvcGllcjo6UGFyYW1ldGVy
cz4gbV9jb3B5RW50cmllczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKaW5kZXggNmQ3NDM1
ZDU2NTQ0YTJhMjI3ZDc4YjQzMjY0N2FlZWE0NTc0ZDAxMy4uMzI1ZDNmNjcyOGE1NTFhNTBkOTVh
OGIxN2M5MzU4MWYyNmMyYTlmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKQEAgLTM1
Miw2ICszNTIsMjUgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpvblZTeW5jUGFyYW1ldGVyc0NoYW5n
ZWQoZG91YmxlIG1vbm90b25pY1RpbWViYXNlLCBkb3VibGUgaW4KICAgICBtX3NjaGVkdWxlck9u
SW1wbFRocmVhZC0+c2V0VGltZWJhc2VBbmRJbnRlcnZhbChtb25vdG9uaWNUaW1lYmFzZSwgaW50
ZXJ2YWxJblNlY29uZHMpOwogfQogCit2b2lkIENDVGhyZWFkUHJveHk6OnJlZHVjZUNvbnRlbnRz
VGV4dHVyZXNNZW1vcnlPbkltcGxUaHJlYWQoKQoreworICAgIEFTU0VSVChpc0ltcGxUaHJlYWQo
KSk7CisgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ1RocmVhZFByb3h5OjpyZWR1Y2VDb250ZW50
c1RleHR1cmVzTWVtb3J5T25JbXBsVGhyZWFkIik7CisKKyAgICBpZiAobV9sYXllclRyZWVIb3N0
LT5jb250ZW50c1RleHR1cmVNYW5hZ2VyKCkKKyAgICAgICAgJiYgbV9sYXllclRyZWVIb3N0LT5j
b250ZW50c1RleHR1cmVNYW5hZ2VyKCktPnJlZHVjZU1lbW9yeU9uSW1wbFRocmVhZChtX2xheWVy
VHJlZUhvc3RJbXBsLT5yZXNvdXJjZVByb3ZpZGVyKCkpKSB7CisgICAgICAgIC8vIERpc2NhcmQg
cGVuZGluZyB1cGxvYWRzIHRvIHJlc291cmNlcyB3ZSBqdXN0ZWQgZGVsZXRlZC4KKyAgICAgICAg
aWYgKG1fY3VycmVudFRleHR1cmVVcGRhdGVDb250cm9sbGVyT25JbXBsVGhyZWFkKQorICAgICAg
ICAgICAgbV9jdXJyZW50VGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXJPbkltcGxUaHJlYWQtPmRpc2Nh
cmRVcGxvYWRzVG9EZWxldGVkUmVzb3VyY2VzKCk7CisgICAgICAgIC8vIFRoZSBpbXBsIGxheWVy
IHRyZWUgbm93IHJlZmVyZW5jZXMgaW52YWxpZCB0ZXh0dXJlcy4gRGlzYWxsb3cKKyAgICAgICAg
Ly8gZHJhd2luZyB1bnRpbCBhIGNvbW1pdCBhY2tub3dsZWRnZXMgdGhlIHB1cmdlIGFuZCBoYXMg
Y2xlYXJlZAorICAgICAgICAvLyB0aGUgaW52YWxpZCByZWZlcmVuY2VzLgorICAgICAgICBtX3Jl
c2V0Q29udGVudHNUZXh0dXJlc1B1cmdlZEFmdGVyQ29tbWl0T25JbXBsVGhyZWFkID0gZmFsc2U7
CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPnNldENvbnRlbnRzVGV4dHVyZXNQdXJnZWQo
KTsKKyAgICAgICAgc2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsKKyAgICB9Cit9CisKIHZv
aWQgQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKQogewogICAgIEFT
U0VSVChpc0ltcGxUaHJlYWQoKSk7CkBAIC00NzUsOCArNDk0LDExIEBAIHZvaWQgQ0NUaHJlYWRQ
cm94eTo6c2NoZWR1bGVkQWN0aW9uQmVnaW5GcmFtZSgpCiAgICAgbV9wZW5kaW5nQmVnaW5GcmFt
ZVJlcXVlc3QgPSBhZG9wdFB0cihuZXcgQmVnaW5GcmFtZUFuZENvbW1pdFN0YXRlKCkpOwogICAg
IG1fcGVuZGluZ0JlZ2luRnJhbWVSZXF1ZXN0LT5tb25vdG9uaWNGcmFtZUJlZ2luVGltZSA9IG1v
bm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOwogICAgIG1fcGVuZGluZ0JlZ2luRnJhbWVSZXF1
ZXN0LT5zY3JvbGxJbmZvID0gbV9sYXllclRyZWVIb3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRh
cygpOwotICAgIG1fcGVuZGluZ0JlZ2luRnJhbWVSZXF1ZXN0LT5jb250ZW50c1RleHR1cmVzV2Vy
ZURlbGV0ZWQgPSBtX2xheWVyVHJlZUhvc3RJbXBsLT5jb250ZW50c1RleHR1cmVzUHVyZ2VkKCk7
CiAgICAgbV9wZW5kaW5nQmVnaW5GcmFtZVJlcXVlc3QtPm1lbW9yeUFsbG9jYXRpb25MaW1pdEJ5
dGVzID0gbV9sYXllclRyZWVIb3N0SW1wbC0+bWVtb3J5QWxsb2NhdGlvbkxpbWl0Qnl0ZXMoKTsK
KyAgICBpZiAobV9sYXllclRyZWVIb3N0LT5jb250ZW50c1RleHR1cmVNYW5hZ2VyKCkpCisgICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigpLT5nZXRBbmRDbGVh
ckV2aWN0ZWRCYWNraW5ncygKKyAgICAgICAgICAgIG1fcGVuZGluZ0JlZ2luRnJhbWVSZXF1ZXN0
LT5ldmljdGVkQmFja2luZ3MsCisgICAgICAgICAgICBtX3BlbmRpbmdCZWdpbkZyYW1lUmVxdWVz
dC0+ZXZpY3Rpb25Db3VudGVyKTsKIAogICAgIG1fbWFpblRocmVhZFByb3h5LT5wb3N0VGFzayhj
cmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWUpKTsKIApA
QCAtNTIwLDYgKzU0MiwxMCBAQCB2b2lkIENDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWUoKQogICAg
IC8vIFJlLWRvIHRoZSBjb21taXQgZmxvdyBzbyB0aGF0IHdlIGRvbid0IHNlbmQgdGhlIHNjcm9s
bEluZm8gb24gdGhlIEJGQUMgbWVzc2FnZS4KICAgICBtX2xheWVyVHJlZUhvc3QtPmFwcGx5U2Ny
b2xsQW5kU2NhbGUoKnJlcXVlc3QtPnNjcm9sbEluZm8pOwogCisgICAgLy8gQ2xlYXIgYW55IGV2
aWN0ZWQgdGV4dHVyZXMgZnJvbSB0aGUgdGV4dHVyZSBtYW5hZ2VyLgorICAgIGlmIChtX2xheWVy
VHJlZUhvc3QtPmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKSkKKyAgICAgICAgbV9sYXllclRyZWVI
b3N0LT5jb250ZW50c1RleHR1cmVNYW5hZ2VyKCktPmRlc3Ryb3lFdmljdGVkQmFja2luZ3MocmVx
dWVzdC0+ZXZpY3RlZEJhY2tpbmdzKTsKKwogICAgIGlmICghbV9pbkNvbXBvc2l0ZUFuZFJlYWRi
YWNrICYmICFtX2xheWVyVHJlZUhvc3QtPnZpc2libGUoKSkgewogICAgICAgICBtX2NvbW1pdFJl
cXVlc3RlZCA9IGZhbHNlOwogICAgICAgICBtX2NvbW1pdFJlcXVlc3RTZW50VG9JbXBsVGhyZWFk
ID0gZmFsc2U7CkBAIC01NDUsOSArNTcxLDYgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpiZWdpbkZy
YW1lKCkKICAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdC0+aW5pdGlhbGl6ZVJlbmRlcmVySWZOZWVk
ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHJlcXVlc3QtPmNvbnRlbnRzVGV4dHVy
ZXNXZXJlRGVsZXRlZCkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5ldmljdEFsbENvbnRlbnRU
ZXh0dXJlcygpOwotCiAgICAgT3duUHRyPENDVGV4dHVyZVVwZGF0ZVF1ZXVlPiBxdWV1ZSA9IGFk
b3B0UHRyKG5ldyBDQ1RleHR1cmVVcGRhdGVRdWV1ZSk7CiAgICAgbV9sYXllclRyZWVIb3N0LT51
cGRhdGVMYXllcnMoKihxdWV1ZS5nZXQoKSksIHJlcXVlc3QtPm1lbW9yeUFsbG9jYXRpb25MaW1p
dEJ5dGVzKTsKIApAQCAtNTc2LDcgKzU5OSw3IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6YmVnaW5G
cmFtZSgpCiAgICAgICAgIERlYnVnU2NvcGVkU2V0TWFpblRocmVhZEJsb2NrZWQgbWFpblRocmVh
ZEJsb2NrZWQ7CiAKICAgICAgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKLSAgICAg
ICAgQ0NQcm94eTo6aW1wbFRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhp
cywgJkNDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVDb21wbGV0ZU9uSW1wbFRocmVhZCwgJmNvbXBs
ZXRpb24sIHF1ZXVlLnJlbGVhc2UoKSwgcmVxdWVzdC0+Y29udGVudHNUZXh0dXJlc1dlcmVEZWxl
dGVkKSk7CisgICAgICAgIENDUHJveHk6OmltcGxUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlQ0NU
aHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQ29tcGxldGVPbkltcGxU
aHJlYWQsICZjb21wbGV0aW9uLCBxdWV1ZS5yZWxlYXNlKCksIHJlcXVlc3QtPmV2aWN0aW9uQ291
bnRlcikpOwogICAgICAgICBjb21wbGV0aW9uLndhaXQoKTsKICAgICB9CiAKQEAgLTU4NCw3ICs2
MDcsNyBAQCB2b2lkIENDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWUoKQogICAgIG1fbGF5ZXJUcmVl
SG9zdC0+ZGlkQmVnaW5GcmFtZSgpOwogfQogCi12b2lkIENDVGhyZWFkUHJveHk6OmJlZ2luRnJh
bWVDb21wbGV0ZU9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbiwgUGFz
c093blB0cjxDQ1RleHR1cmVVcGRhdGVRdWV1ZT4gcXVldWUsIGJvb2wgY29udGVudHNUZXh0dXJl
c1dlcmVEZWxldGVkKQordm9pZCBDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQ29tcGxldGVPbklt
cGxUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24sIFBhc3NPd25QdHI8Q0NUZXh0
dXJlVXBkYXRlUXVldWU+IHF1ZXVlLCBpbnQgY29udGVudHNUZXh0dXJlc0V2aWN0aW9uQ291bnRl
ckFjaykKIHsKICAgICBUUkFDRV9FVkVOVDAoImNjIiwgIkNDVGhyZWFkUHJveHk6OmJlZ2luRnJh
bWVDb21wbGV0ZU9uSW1wbFRocmVhZCIpOwogICAgIEFTU0VSVCghbV9jb21taXRDb21wbGV0aW9u
RXZlbnRPbkltcGxUaHJlYWQpOwpAQCAtNTk3LDE1ICs2MjAsMjEgQEAgdm9pZCBDQ1RocmVhZFBy
b3h5OjpiZWdpbkZyYW1lQ29tcGxldGVPbkltcGxUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNv
bXBsZXRpb24KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghY29udGVudHNUZXh0
dXJlc1dlcmVEZWxldGVkICYmIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRlbnRzVGV4dHVyZXNQ
dXJnZWQoKSkgewotICAgICAgICAvLyBXZSBwdXJnZWQgdGhlIGNvbnRlbnQgdGV4dHVyZXMgb24g
dGhlIGltcGwgdGhyZWFkIGJldHdlZW4gdGhlIHRpbWUgd2UKLSAgICAgICAgLy8gcG9zdGVkIHRo
ZSBiZWdpbkZyYW1lIHRhc2sgYW5kIG5vdywgbWVhbmluZyB3ZSBoYXZlIGEgYnVuY2ggb2YKLSAg
ICAgICAgLy8gdXBsb2FkcyB0aGF0IGFyZSBub3cgaW52YWxpZC4gQ2xlYXIgdGhlIHVwbG9hZHMg
KHRoZXkgYWxsIGdvIHRvCi0gICAgICAgIC8vIGNvbnRlbnQgdGV4dHVyZXMpLCBhbmQga2ljayBh
bm90aGVyIGNvbW1pdCB0byBmaWxsIHRoZW0gYWdhaW4uCi0gICAgICAgIHF1ZXVlLT5jbGVhclVw
bG9hZHMoKTsKKyAgICBpZiAobV9sYXllclRyZWVIb3N0LT5jb250ZW50c1RleHR1cmVNYW5hZ2Vy
KCkKKyAgICAgICAgJiYgIW1fbGF5ZXJUcmVlSG9zdC0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigp
LT5pc0V2aWN0aW9uQ291bnRlckFja1VwVG9EYXRlKGNvbnRlbnRzVGV4dHVyZXNFdmljdGlvbkNv
dW50ZXJBY2spKSB7CisgICAgICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NUaHJlYWRQcm94eTo6
YmVnaW5GcmFtZUNvbXBsZXRlT25JbXBsVGhyZWFkX3B1cmdlX3NpbmNlX2NvbW1pdCIpOworICAg
ICAgICAvLyBUaGUgdXBsb2FkIHF1ZXVlIG1heSBjb250YWluIHJlZmVyZW5jZXMgdG8gdGV4dHVy
ZXMgdGhhdCB3ZXJlIGFzeW5jaHJvbm91c2x5CisgICAgICAgIC8vIGRlbGV0ZWQuIFJlbW92ZSB0
aGVtLgorICAgICAgICBxdWV1ZS0+Y2xlYXJVcGxvYWRzVG9EZWxldGVkUmVzb3VyY2VzKCk7Cisg
ICAgICAgIC8vIFRoZXJlIGV4aXN0IHRleHR1cmVzIHB1cmdlZCBieSB0aGUgaW1wbCB0aHJlYWQg
dGhhdCB0aGUgbWFpbiB0aHJlYWQKKyAgICAgICAgLy8gZG9lc24ndCBrbm93IG9mLiBSZXF1ZXN0
IGEgcmVjb21taXQsIHdoaWNoIHdpbGwgaW5mb3JtIHRoZSBtYWluIHRocmVhZAorICAgICAgICAv
LyBvZiB0aGUgcHVyZ2VkIHJlc291cmNlcy4KICAgICAgICAgc2V0TmVlZHNDb21taXRPbkltcGxU
aHJlYWQoKTsKLSAgICB9IGVsc2UKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBPbmNlIHRoaXMg
Y29tbWl0IGNvbXBsZXRlcywgdGhlIGltcGwgbGF5ZXIgdGhyZWUgd29uJ3QgcmVmZXJlbmNlIGFu
eQorICAgICAgICAvLyBldmljdGVkIHRleHR1cmVzICh1bmxlc3MgYW5vdGhlciBldmljdGlvbiBo
YXBwZW5zKQogICAgICAgICBtX3Jlc2V0Q29udGVudHNUZXh0dXJlc1B1cmdlZEFmdGVyQ29tbWl0
T25JbXBsVGhyZWFkID0gdHJ1ZTsKKyAgICB9CiAKICAgICBtX2N1cnJlbnRUZXh0dXJlVXBkYXRl
Q29udHJvbGxlck9uSW1wbFRocmVhZCA9IENDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXI6OmNyZWF0
ZShDQ1Byb3h5OjppbXBsVGhyZWFkKCksIHF1ZXVlLCBtX2xheWVyVHJlZUhvc3RJbXBsLT5yZXNv
dXJjZVByb3ZpZGVyKCksIG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJlbmRlcmVyKCktPnRleHR1cmVD
b3BpZXIoKSwgbV9sYXllclRyZWVIb3N0SW1wbC0+cmVuZGVyZXIoKS0+dGV4dHVyZVVwbG9hZGVy
KCkpOwogICAgIG1fY29tbWl0Q29tcGxldGlvbkV2ZW50T25JbXBsVGhyZWFkID0gY29tcGxldGlv
bjsKQEAgLTg5OSw4ICs5MjgsOCBAQCB2b2lkIENDVGhyZWFkUHJveHk6OmxheWVyVHJlZUhvc3RD
bG9zZWRPbkltcGxUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpbwogewogICAgIFRS
QUNFX0VWRU5UMCgiY2MiLCAiQ0NUaHJlYWRQcm94eTo6bGF5ZXJUcmVlSG9zdENsb3NlZE9uSW1w
bFRocmVhZCIpOwogICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7Ci0gICAgaWYgKCFtX2xheWVy
VHJlZUhvc3RJbXBsLT5jb250ZW50c1RleHR1cmVzUHVyZ2VkKCkpCi0gICAgICAgIG1fbGF5ZXJU
cmVlSG9zdC0+ZGVsZXRlQ29udGVudHNUZXh0dXJlc09uSW1wbFRocmVhZChtX2xheWVyVHJlZUhv
c3RJbXBsLT5yZXNvdXJjZVByb3ZpZGVyKCkpOworICAgIGlmIChtX2xheWVyVHJlZUhvc3QtPmNv
bnRlbnRzVGV4dHVyZU1hbmFnZXIoKSkKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5jb250ZW50
c1RleHR1cmVNYW5hZ2VyKCktPmNsZWFyQWxsTWVtb3J5KG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJl
c291cmNlUHJvdmlkZXIoKSk7CiAgICAgbV9pbnB1dEhhbmRsZXJPbkltcGxUaHJlYWQuY2xlYXIo
KTsKICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLmNsZWFyKCk7CiAgICAgbV9zY2hlZHVsZXJPbklt
cGxUaHJlYWQuY2xlYXIoKTsKQEAgLTkyMiw4ICs5NTEsOCBAQCB2b2lkIENDVGhyZWFkUHJveHk6
OnJlY3JlYXRlQ29udGV4dE9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlv
biwgQwogewogICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NUaHJlYWRQcm94eTo6cmVjcmVhdGVD
b250ZXh0T25JbXBsVGhyZWFkIik7CiAgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKLSAgICBp
ZiAoIW1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRlbnRzVGV4dHVyZXNQdXJnZWQoKSkKLSAgICAg
ICAgbV9sYXllclRyZWVIb3N0LT5kZWxldGVDb250ZW50c1RleHR1cmVzT25JbXBsVGhyZWFkKG1f
bGF5ZXJUcmVlSG9zdEltcGwtPnJlc291cmNlUHJvdmlkZXIoKSk7CisgICAgaWYgKG1fbGF5ZXJU
cmVlSG9zdC0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigpKQorICAgICAgICBtX2xheWVyVHJlZUhv
c3QtPmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+Y2xlYXJBbGxNZW1vcnkobV9sYXllclRyZWVI
b3N0SW1wbC0+cmVzb3VyY2VQcm92aWRlcigpKTsKICAgICAqcmVjcmVhdGVTdWNjZWVkZWQgPSBt
X2xheWVyVHJlZUhvc3RJbXBsLT5pbml0aWFsaXplUmVuZGVyZXIoYWRvcHRQdHIoY29udGV4dFB0
ciksIHRleHR1cmVVcGxvYWRlcik7CiAgICAgaWYgKCpyZWNyZWF0ZVN1Y2NlZWRlZCkgewogICAg
ICAgICAqY2FwYWJpbGl0aWVzID0gbV9sYXllclRyZWVIb3N0SW1wbC0+cmVuZGVyZXJDYXBhYmls
aXRpZXMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaAppbmRleCA3MmFjODI1Y2E2ZGEwZmFiNzUw
NjI1YzQ5OGZiYTQwNzA2MWUzZGUxLi4wZTUyZGNjMjczNjRkNDdjNWE3MWEyYTMzMzg3NGU3NTli
M2ExY2U0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oCkBAIC04MSw2ICs4MSw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKSBPVkVSUklE
RTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKSBPVkVSUklE
RTsKICAgICB2aXJ0dWFsIHZvaWQgcG9zdEFuaW1hdGlvbkV2ZW50c1RvTWFpblRocmVhZE9uSW1w
bFRocmVhZChQYXNzT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiwgZG91YmxlIHdhbGxD
bG9ja1RpbWUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZWR1Y2VDb250ZW50c1RleHR1
cmVzTWVtb3J5T25JbXBsVGhyZWFkKCkgT1ZFUlJJREU7CiAKICAgICAvLyBDQ1NjaGVkdWxlckNs
aWVudCBpbXBsZW1lbnRhdGlvbgogICAgIHZpcnR1YWwgYm9vbCBjYW5EcmF3KCkgT1ZFUlJJREU7
CkBAIC0xMDEsMTMgKzEwMiwxNiBAQCBwcml2YXRlOgogICAgIHN0cnVjdCBCZWdpbkZyYW1lQW5k
Q29tbWl0U3RhdGUgewogICAgICAgICBCZWdpbkZyYW1lQW5kQ29tbWl0U3RhdGUoKQogICAgICAg
ICAgICAgOiBtb25vdG9uaWNGcmFtZUJlZ2luVGltZSgwKQorICAgICAgICAgICAgLCBtZW1vcnlB
bGxvY2F0aW9uTGltaXRCeXRlcygwKQorICAgICAgICAgICAgLCBldmljdGlvbkNvdW50ZXIoMCkK
ICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgZG91YmxlIG1vbm90b25pY0ZyYW1lQmVn
aW5UaW1lOwogICAgICAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5mbzsK
LSAgICAgICAgYm9vbCBjb250ZW50c1RleHR1cmVzV2VyZURlbGV0ZWQ7CiAgICAgICAgIHNpemVf
dCBtZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlczsKKyAgICAgICAgQ0NQcmlvcml0aXplZFRleHR1
cmVNYW5hZ2VyOjpCYWNraW5nU2V0IGV2aWN0ZWRCYWNraW5nczsKKyAgICAgICAgaW50IGV2aWN0
aW9uQ291bnRlcjsKICAgICB9OwogICAgIE93blB0cjxCZWdpbkZyYW1lQW5kQ29tbWl0U3RhdGU+
IG1fcGVuZGluZ0JlZ2luRnJhbWVSZXF1ZXN0OwogCkBAIC0xMjcsNyArMTMxLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgSW50UmVjdCByZWN0OwogICAgIH07CiAgICAgdm9pZCBmb3JjZUJlZ2luRnJh
bWVPbkltcGxUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsKLSAgICB2b2lkIGJlZ2luRnJhbWVD
b21wbGV0ZU9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVudCosIFBhc3NPd25QdHI8Q0NUZXh0
dXJlVXBkYXRlUXVldWU+LCBib29sIGNvbnRlbnRzVGV4dHVyZXNXZXJlRGVsZXRlZCk7CisgICAg
dm9pZCBiZWdpbkZyYW1lQ29tcGxldGVPbkltcGxUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqLCBQ
YXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZVF1ZXVlPiwgaW50IGNvbnRlbnRzVGV4dHVyZXNQdXJn
ZUFjayk7CiAgICAgdm9pZCBiZWdpbkZyYW1lQWJvcnRlZE9uSW1wbFRocmVhZCgpOwogICAgIHZv
aWQgcmVxdWVzdFJlYWRiYWNrT25JbXBsVGhyZWFkKFJlYWRiYWNrUmVxdWVzdCopOwogICAgIHZv
aWQgcmVxdWVzdFN0YXJ0UGFnZVNjYWxlQW5pbWF0aW9uT25JbXBsVGhyZWFkKEludFNpemUgdGFy
Z2V0UG9zaXRpb24sIGJvb2wgdXNlQW5jaG9yLCBmbG9hdCBzY2FsZSwgZG91YmxlIGR1cmF0aW9u
U2VjKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRy
ZWVIb3N0SW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVy
VHJlZUhvc3RJbXBsVGVzdC5jcHAKaW5kZXggZDA5YmMzNjQ5ZWFlYmVjNDNkODlkZDYyMzc0MzM2
ZWJmMjU2MWMyNC4uNDhiMjIwYWE5MWU3ZWUyYjYwNDJlNjIwZjBjNWU0NzVjMjg0M2NlOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBs
VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdC5jcHAKQEAgLTg3LDYgKzg3LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBzZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpIE9WRVJSSURFIHsgbV9kaWRSZXF1ZXN0UmVk
cmF3ID0gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0NvbW1pdE9uSW1wbFRocmVh
ZCgpIE9WRVJSSURFIHsgbV9kaWRSZXF1ZXN0Q29tbWl0ID0gdHJ1ZTsgfQogICAgIHZpcnR1YWwg
dm9pZCBwb3N0QW5pbWF0aW9uRXZlbnRzVG9NYWluVGhyZWFkT25JbXBsVGhyZWFkKFBhc3NPd25Q
dHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+LCBkb3VibGUgd2FsbENsb2NrVGltZSkgT1ZFUlJJ
REUgeyB9CisgICAgdmlydHVhbCB2b2lkIHJlZHVjZUNvbnRlbnRzVGV4dHVyZXNNZW1vcnlPbklt
cGxUaHJlYWQoKSBPVkVSUklERSB7IH0KIAogICAgIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0
SW1wbD4gY3JlYXRlTGF5ZXJUcmVlSG9zdChib29sIHBhcnRpYWxTd2FwLCBQYXNzT3duUHRyPEND
R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQsIFBhc3NPd25QdHI8Q0NMYXllckltcGw+
IHJvb3RQdHIpCiAgICAgewpAQCAtMzc5MSwxMiArMzc5Miw2IEBAIFRFU1RfRihDQ0xheWVyVHJl
ZUhvc3RJbXBsVGVzdCwgc3VyZmFjZVRleHR1cmVDYWNoaW5nTm9QYXJ0aWFsU3dhcCkKICAgICB9
CiB9CiAKLVRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgcmVsZWFzZUNvbnRlbnRzVGV4
dHVyZVNob3VsZFRyaWdnZXJDb21taXQpCi17Ci0gICAgbV9ob3N0SW1wbC0+cmVsZWFzZUNvbnRl
bnRzVGV4dHVyZXMoKTsKLSAgICBFWFBFQ1RfVFJVRShtX2RpZFJlcXVlc3RDb21taXQpOwotfQot
CiBzdHJ1Y3QgUmVuZGVyUGFzc0NhY2hlRW50cnkgewogICAgIG11dGFibGUgT3duUHRyPENDUmVu
ZGVyUGFzcz4gcmVuZGVyUGFzc1B0cjsKICAgICBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3M7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGV4dHVyZVVwZGF0ZUNv
bnRyb2xsZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUZXh0dXJl
VXBkYXRlQ29udHJvbGxlclRlc3QuY3BwCmluZGV4IDExNjU5ZjZmNTJiOGFiZDBhZTMwNzU5Yjdh
NjY1NDE0NTEwNjA0M2EuLjk3YjkzOTg1ZWRkZmIxNGI5MGY3OGVlZWFhNDVmODI0NTg0ZDMyZmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUZXh0dXJlVXBkYXRl
Q29udHJvbGxlclRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NU
ZXh0dXJlVXBkYXRlQ29udHJvbGxlclRlc3QuY3BwCkBAIC04NywxMCArODcsMTQgQEAgcHJpdmF0
ZToKIAogY2xhc3MgVGV4dHVyZUZvclVwbG9hZFRlc3QgOiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6VGV4dHVyZSB7CiBwdWJsaWM6Ci0gICAgVGV4dHVyZUZvclVwbG9hZFRlc3QoKSA6IExh
eWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUoYWRvcHRQdHI8Q0NQcmlvcml0aXplZFRleHR1cmU+
KDApKSB7IH0KKyAgICBUZXh0dXJlRm9yVXBsb2FkVGVzdCgpIDogTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6VGV4dHVyZShhZG9wdFB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZT4oMCkpLCBtX2RlbGV0ZWQo
ZmFsc2UpIHsgfQorICAgIHZpcnR1YWwgYm9vbCBiYWNraW5nV2FzRGVsZXRlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fZGVsZXRlZDsgfQogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZWN0KENDUmVzb3Vy
Y2VQcm92aWRlciosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFNpemUmIGRl
c3RPZmZzZXQpIHsgfQotfTsKIAorICAgIHZvaWQgc2V0QmFja2luZ0RlbGV0ZWQoKSB7IG1fZGVs
ZXRlZCA9IHRydWU7IH0KK3ByaXZhdGU6CisgICAgYm9vbCBtX2RlbGV0ZWQ7Cit9OwogCiBjbGFz
cyBDQ1RleHR1cmVVcGRhdGVDb250cm9sbGVyVGVzdCA6IHB1YmxpYyBUZXN0IHsKIHB1YmxpYzoK
QEAgLTE4MywyOCArMTg3LDM4IEBAIHByb3RlY3RlZDoKICAgICAgICAgV2ViQ29tcG9zaXRvcjo6
c2h1dGRvd24oKTsKICAgICB9CiAKLSAgICB2b2lkIGFwcGVuZEZ1bGxVcGxvYWRzVG9VcGRhdGVR
dWV1ZShpbnQgY291bnQpCisgICAgdm9pZCBhcHBlbmRGdWxsVXBsb2Fkc09mSW5kZXhlZFRleHR1
cmVUb1VwZGF0ZVF1ZXVlKGludCBjb3VudCwgaW50IHRleHR1cmVJbmRleCkKICAgICB7CiAgICAg
ICAgIG1fZnVsbFVwbG9hZENvdW50RXhwZWN0ZWQgKz0gY291bnQ7CiAgICAgICAgIG1fdG90YWxV
cGxvYWRDb3VudEV4cGVjdGVkICs9IGNvdW50OwogCiAgICAgICAgIGNvbnN0IEludFJlY3QgcmVj
dCgwLCAwLCAzMDAsIDE1MCk7Ci0gICAgICAgIGNvbnN0IFRleHR1cmVVcGxvYWRlcjo6UGFyYW1l
dGVycyB1cGxvYWQgPSB7ICZtX3RleHR1cmUsIHJlY3QsIEludFNpemUoKSB9OworICAgICAgICBj
b25zdCBUZXh0dXJlVXBsb2FkZXI6OlBhcmFtZXRlcnMgdXBsb2FkID0geyAmbV90ZXh0dXJlc1t0
ZXh0dXJlSW5kZXhdLCByZWN0LCBJbnRTaXplKCkgfTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKQogICAgICAgICAgICAgbV9xdWV1ZS0+YXBwZW5kRnVsbFVwbG9hZCh1
cGxvYWQpOwogICAgIH0KIAotICAgIHZvaWQgYXBwZW5kUGFydGlhbFVwbG9hZHNUb1VwZGF0ZVF1
ZXVlKGludCBjb3VudCkKKyAgICB2b2lkIGFwcGVuZEZ1bGxVcGxvYWRzVG9VcGRhdGVRdWV1ZShp
bnQgY291bnQpCisgICAgeworICAgICAgICBhcHBlbmRGdWxsVXBsb2Fkc09mSW5kZXhlZFRleHR1
cmVUb1VwZGF0ZVF1ZXVlKGNvdW50LCAwKTsKKyAgICB9CisKKyAgICB2b2lkIGFwcGVuZFBhcnRp
YWxVcGxvYWRzT2ZJbmRleGVkVGV4dHVyZVRvVXBkYXRlUXVldWUoaW50IGNvdW50LCBpbnQgdGV4
dHVyZUluZGV4KQogICAgIHsKICAgICAgICAgbV9wYXJ0aWFsQ291bnRFeHBlY3RlZCArPSBjb3Vu
dDsKICAgICAgICAgbV90b3RhbFVwbG9hZENvdW50RXhwZWN0ZWQgKz0gY291bnQ7CiAKICAgICAg
ICAgY29uc3QgSW50UmVjdCByZWN0KDAsIDAsIDEwMCwgMTAwKTsKLSAgICAgICAgY29uc3QgVGV4
dHVyZVVwbG9hZGVyOjpQYXJhbWV0ZXJzIHVwbG9hZCA9IHsgJm1fdGV4dHVyZSwgcmVjdCwgSW50
U2l6ZSgpIH07CisgICAgICAgIGNvbnN0IFRleHR1cmVVcGxvYWRlcjo6UGFyYW1ldGVycyB1cGxv
YWQgPSB7ICZtX3RleHR1cmVzW3RleHR1cmVJbmRleF0sIHJlY3QsIEludFNpemUoKSB9OwogICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCiAgICAgICAgICAgICBtX3F1ZXVl
LT5hcHBlbmRQYXJ0aWFsVXBsb2FkKHVwbG9hZCk7CiAgICAgfQogCisgICAgdm9pZCBhcHBlbmRQ
YXJ0aWFsVXBsb2Fkc1RvVXBkYXRlUXVldWUoaW50IGNvdW50KQorICAgIHsKKyAgICAgICAgYXBw
ZW5kUGFydGlhbFVwbG9hZHNPZkluZGV4ZWRUZXh0dXJlVG9VcGRhdGVRdWV1ZShjb3VudCwgMCk7
CisgICAgfQorCiAgICAgdm9pZCBzZXRNYXhVcGxvYWRDb3VudFBlclVwZGF0ZShpbnQgY291bnQp
CiAgICAgewogICAgICAgICBtX21heFVwbG9hZENvdW50UGVyVXBkYXRlID0gY291bnQ7CkBAIC0y
MTUsNyArMjI5LDcgQEAgcHJvdGVjdGVkOgogICAgIE93blB0cjxDQ0dyYXBoaWNzQ29udGV4dD4g
bV9jb250ZXh0OwogICAgIE93blB0cjxDQ1Jlc291cmNlUHJvdmlkZXI+IG1fcmVzb3VyY2VQcm92
aWRlcjsKICAgICBPd25QdHI8Q0NUZXh0dXJlVXBkYXRlUXVldWU+IG1fcXVldWU7Ci0gICAgVGV4
dHVyZUZvclVwbG9hZFRlc3QgbV90ZXh0dXJlOworICAgIFRleHR1cmVGb3JVcGxvYWRUZXN0IG1f
dGV4dHVyZXNbNF07CiAgICAgRmFrZVRleHR1cmVDb3BpZXIgbV9jb3BpZXI7CiAgICAgVGV4dHVy
ZVVwbG9hZGVyRm9yVXBsb2FkVGVzdCBtX3VwbG9hZGVyOwogCkBAIC02ODUsNCArNjk5LDM3IEBA
IFRFU1RfRihDQ1RleHR1cmVVcGRhdGVDb250cm9sbGVyVGVzdCwgVXBkYXRlc0NvbXBsZXRlSW5G
aW5pdGVUaW1lKQogICAgIEVYUEVDVF9FUSgyLCBtX251bVRvdGFsVXBsb2Fkcyk7CiB9CiAKK1RF
U1RfRihDQ1RleHR1cmVVcGRhdGVDb250cm9sbGVyVGVzdCwgQXN5bmNEZWxldGlvbikKK3sKKyAg
ICBhcHBlbmRGdWxsVXBsb2Fkc09mSW5kZXhlZFRleHR1cmVUb1VwZGF0ZVF1ZXVlKDEsIDApOwor
ICAgIGFwcGVuZFBhcnRpYWxVcGxvYWRzT2ZJbmRleGVkVGV4dHVyZVRvVXBkYXRlUXVldWUoMSwg
MSk7CisgICAgYXBwZW5kRnVsbFVwbG9hZHNPZkluZGV4ZWRUZXh0dXJlVG9VcGRhdGVRdWV1ZSgx
LCAyKTsKKyAgICBhcHBlbmRQYXJ0aWFsVXBsb2Fkc09mSW5kZXhlZFRleHR1cmVUb1VwZGF0ZVF1
ZXVlKDEsIDMpOworICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOworCisg
ICAgbV9xdWV1ZS0+Y2xlYXJVcGxvYWRzVG9EZWxldGVkUmVzb3VyY2VzKCk7CisgICAgRVhQRUNU
X0VRKDJ1LCBtX3F1ZXVlLT5mdWxsVXBsb2FkU2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMnUsIG1f
cXVldWUtPnBhcnRpYWxVcGxvYWRTaXplKCkpOworCisgICAgbV90ZXh0dXJlc1swXS5zZXRCYWNr
aW5nRGVsZXRlZCgpOworICAgIG1fcXVldWUtPmNsZWFyVXBsb2Fkc1RvRGVsZXRlZFJlc291cmNl
cygpOworICAgIEVYUEVDVF9FUSgxdSwgbV9xdWV1ZS0+ZnVsbFVwbG9hZFNpemUoKSk7CisgICAg
RVhQRUNUX0VRKDJ1LCBtX3F1ZXVlLT5wYXJ0aWFsVXBsb2FkU2l6ZSgpKTsKKworICAgIG1fdGV4
dHVyZXNbM10uc2V0QmFja2luZ0RlbGV0ZWQoKTsKKyAgICBtX3F1ZXVlLT5jbGVhclVwbG9hZHNU
b0RlbGV0ZWRSZXNvdXJjZXMoKTsKKyAgICBFWFBFQ1RfRVEoMXUsIG1fcXVldWUtPmZ1bGxVcGxv
YWRTaXplKCkpOworICAgIEVYUEVDVF9FUSgxdSwgbV9xdWV1ZS0+cGFydGlhbFVwbG9hZFNpemUo
KSk7CisKKyAgICBtX3RleHR1cmVzWzJdLnNldEJhY2tpbmdEZWxldGVkKCk7CisgICAgbV9xdWV1
ZS0+Y2xlYXJVcGxvYWRzVG9EZWxldGVkUmVzb3VyY2VzKCk7CisgICAgRVhQRUNUX0VRKDB1LCBt
X3F1ZXVlLT5mdWxsVXBsb2FkU2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIG1fcXVldWUtPnBh
cnRpYWxVcGxvYWRTaXplKCkpOworCisgICAgbV90ZXh0dXJlc1sxXS5zZXRCYWNraW5nRGVsZXRl
ZCgpOworICAgIG1fcXVldWUtPmNsZWFyVXBsb2Fkc1RvRGVsZXRlZFJlc291cmNlcygpOworICAg
IEVYUEVDVF9FUSgwdSwgbV9xdWV1ZS0+ZnVsbFVwbG9hZFNpemUoKSk7CisgICAgRVhQRUNUX0VR
KDB1LCBtX3F1ZXVlLT5wYXJ0aWFsVXBsb2FkU2l6ZSgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162335</attachid>
            <date>2012-09-05 14:35:15 -0700</date>
            <delta_ts>2012-09-05 15:02:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95057-20120905143457.patch</filename>
            <type>text/plain</type>
            <size>46816</size>
            <attacher name="Christopher Cameron">ccameron</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3NDM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzhkYzY2NGZlNzhlY2Fh
NmViZDE5YmMyNWQzZjEzODdhYTVkOGY2MS4uNWQ4N2ZjMjc0NWNlYjE2MjcxOTAyNjBlYzljODVh
YWViMTkyMjM1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDEyLTA4LTMxICBDaHJp
c3RvcGhlciBDYW1lcm9uICA8Y2NhbWVyb25AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJv
bWl1bV0gQWxsb3cgaW1wbC10aHJlYWQgZGVsZXRpb24gb2Ygb25seSBzb21lIHJlc291cmNlcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTUwNTcKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUb3dhcmRzIGFs
bG93aW5nIHRoZSBpbXBsIHRocmVhZCB0byBkZWxldGUganVzdCBzb21lIHJlc291cmNlcyAoYXMK
KyAgICAgICAgb3Bwb3NlZCB0byBkZWxldGluZyBhbGwgcmVzb3VyY2VzKS4KKworICAgICAgICBE
byBpbXBsLXRocmVhZCBkZWxldGlvbiB0aHJvdWdoIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdl
ciBpbnN0ZWFkIG9mCisgICAgICAgIENDUmVzb3VyY2VQcm92aWRlci4gSW4gc3Vic2VxdWVudCBj
aGFuZ2VzIHRoZSBpbXBsIHRocmVhZCB3aWxsIGJlIGFibGUKKyAgICAgICAgdG8gc2V0IGEgdGhy
ZXNob2xkIGZvciB3aGF0IHRvIGRlbGV0ZSkuIEFkZCBhIHNldCBvZiB0ZXh0dXJlcyB0aGF0Cisg
ICAgICAgIGhhdmUgYmVlbiBkZWxldGVkIGJ5IHRoZSBpbXBsIHRocmVhZCwgYnV0IGhhdmUgbm90
IGhhZCB0aGVpciByZWxhdGVkCisgICAgICAgIHN0cnVjdHVyZXMgY2xlYXJlZCBieSB0aGUgbWFp
biB0aHJlYWQgeWV0LgorCisgICAgICAgIEFsbG93IG11bHRpcGxlIHRleHR1cmUgcHVyZ2VzIHRv
IG9jY3VyIHdpdGhvdXQgYSBjb21taXQgYmV0d2VlbiB0aGVtLgorICAgICAgICBJbiBDQ1RocmVh
ZFByb3h5LCBtYWtlIHRoZSBhY2tub3dsZWRnZW1lbnQgb2YgdGV4dHVyZSBkZWxldGlvbiBiZSBh
bgorICAgICAgICBpbnRlZ2VyIGNvdW50ZXIgaW5zdGVhZCBvZiBhIGJvb2wsIGJlY2F1c2Ugd2Ug
bWF5IGhhdmUgbXVsdGlwbGUKKyAgICAgICAgbm90LXlldC1hY2tub3dsZWRnZWQgcHVyZ2VzLiBS
ZW1vdmUgbWFueSBpbnN0YW5jZXMgd2hlcmUgdGV4dHVyZSBwdXJnZXMKKyAgICAgICAgd2VyZSBh
dm9pZGVkIHdoZW4gdGhlcmUgd2FzIGFuIG91dHN0YW5kaW5nIHRleHR1cmUgcHVyZ2UuCisKKyAg
ICAgICAgQWRkIHRoZSBhYmlsaXR5IHRvIGNsZWFyIG9ubHkgdGhlIHJlZmVyZW5jZXMgdG8gZGVs
ZXRlZCB0ZXh0dXJlcyBmcm9tCisgICAgICAgIHRoZSB0ZXh0dXJlIHVwbG9hZCBxdWV1ZS4KKwor
ICAgICAgICBBZGQgYXNzZXJ0aW9ucyB0aGF0IHJlc291cmNlcyBiZSBmcmVlZCB0byBDQ1ByaW9y
aXRpemVkVGV4dHVyZU1hbmFnZXIuCisKKyAgICAgICAgTmV3IHRlc3QgQ0NUZXh0dXJlVXBkYXRl
Q29udHJvbGxlclRlc3RfQXN5bmNEZWxldGlvbgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRU
ZXh0dXJlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1By
aW9yaXRpemVkVGV4dHVyZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5jcHA6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5j
cHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJl
YWRQcm94eS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4
dHVyZVVwZGF0ZUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVRdWV1ZS5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlUXVldWUuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNw
cDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5
Lmg6CisKIDIwMTItMDktMDMgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwu
Y29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMjc0MjcuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCmluZGV4IGZjNDhlNTllMGFlNjZiYTA0MDU5MTg1Yjg2ZmY0MmY1NDg5
MTZlYzkuLmRiZmZjYmU3OWFiNmY3Njk1Y2JjYjg2YjAzMDA5OGQ3NDI5MjMyMmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTItMDgtMzEgIENocmlzdG9w
aGVyIENhbWVyb24gIDxjY2FtZXJvbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVt
XSBBbGxvdyBpbXBsLXRocmVhZCBkZWxldGlvbiBvZiBvbmx5IHNvbWUgcmVzb3VyY2VzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTA1NworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIENDTGF5ZXJUcmVl
SG9zdEltcGxUZXN0LCByZW1vdmUgdGhlIHRlc3QKKyAgICAgICAgcmVsZWFzZUNvbnRlbnRzVGV4
dHVyZVNob3VsZFRyaWdnZXJDb21taXQgYmVjYXVzZSBpdCBpcyBubyBsb25nZXIgdmFsaWQKKyAg
ICAgICAgYW5kIGlzIHJlZHVuZGFudC4gIEEgcmVsZWFzZUNvbnRlbnRzVGV4dHVyZSB3aWxsIG9u
bHkgdHJpZ2dlciBhIGNvbW1pdAorICAgICAgICBpZiB0aGUgcmVsZWFzZUNvbnRlbnRzVGV4dHVy
ZSBhY3R1YWxseSBkZWxldGVzIGFueSB0ZXh0dXJlcywgYW5kCisgICAgICAgIENDTGF5ZXJUcmVl
SG9zdFRlc3RFdmljdFRleHR1cmVzIGFscmVhZHkgdGVzdHMgdGhhdCB0aGUgY29tbWl0IGlzCisg
ICAgICAgIGlzc3VlZCB1cG9uIGV2aWN0aW9uLgorCisgICAgICAgIEFkZCBDQ1RleHR1cmVVcGRh
dGVDb250cm9sbGVyVGVzdF9Bc3luY0RlbGV0aW9uIHRlc3QgdG8gdmFsaWRhdGUgbmV3CisgICAg
ICAgIHRleHR1cmUgdXBsb2FkIHF1ZXVlIGJlaGF2aW9yLgorCisgICAgICAgICogdGVzdHMvQ0NM
YXllclRyZWVIb3N0SW1wbFRlc3QuY3BwOgorICAgICAgICAqIHRlc3RzL0NDVGV4dHVyZVVwZGF0
ZUNvbnRyb2xsZXJUZXN0LmNwcDoKKwogMjAxMi0wOS0wMyAgVGFvIEJhaSAgPG1pY2hhZWxiYWlA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFkZGVkIEFORFJPSURfR0RCU0VSVkVSIGRlZmluaXRp
b24gZm9yIEFudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oCmluZGV4IDFhZDYxYzhkOGNh
NDY1M2MxZjIwYjhjZWU0MjYyYzc3MWU0YmUyMWMuLjc0ZjRjNWRhNTQ5ZGNkNjY1YjQ2OTNiODRh
MWFlNzdhYjEzNDM3NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgKQEAgLTQ5LDYg
KzQ5LDcgQEAgcHVibGljOgogCiAgICAgICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlKiB0ZXh0dXJl
KCkgeyByZXR1cm4gbV90ZXh0dXJlLmdldCgpOyB9CiAgICAgICAgIHZvaWQgc3dhcFRleHR1cmVX
aXRoKE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZT4mIHRleHR1cmUpIHsgbV90ZXh0dXJlLnN3
YXAodGV4dHVyZSk7IH0KKyAgICAgICAgdmlydHVhbCBib29sIGJhY2tpbmdSZXNvdXJjZVdhc0Rl
bGV0ZWQoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmUtPmJhY2tpbmdSZXNvdXJjZVdhc0RlbGV0
ZWQoKTsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVJlY3QoY29uc3QgSW50UmVjdCYg
Lyogc291cmNlUmVjdCAqLywgQ0NSZW5kZXJpbmdTdGF0cyYpIHsgfQogICAgICAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlUmVjdChDQ1Jlc291cmNlUHJvdmlkZXIqLCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0LCBjb25zdCBJbnRTaXplJiBkZXN0T2Zmc2V0KSA9IDA7CiAgICAgcHJvdGVjdGVkOgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggMDg0NzRhMWQzN2VkMTdkNmNkM2U5
OTY5MzJjYmNjNWE2YTU4OWQxMC4uZGQxMmFjZDMwOGMzNjY2ODExNmZkNDE4YjMzMTQ3YmNmODVh
ZDgwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC0xOTMsMTMgKzE5Mywy
MSBAQCBDQ0xheWVyVHJlZUhvc3Q6OlJlY3JlYXRlUmVzdWx0IENDTGF5ZXJUcmVlSG9zdDo6cmVj
cmVhdGVDb250ZXh0KCkKICAgICByZXR1cm4gUmVjcmVhdGVGYWlsZWRBbmRHYXZlVXA7CiB9CiAK
LXZvaWQgQ0NMYXllclRyZWVIb3N0OjpkZWxldGVDb250ZW50c1RleHR1cmVzT25JbXBsVGhyZWFk
KENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlcikKK3ZvaWQgQ0NMYXllclRyZWVI
b3N0OjpkZWxldGVBbGxDb250ZW50c1RleHR1cmVzT25JbXBsVGhyZWFkKENDUmVzb3VyY2VQcm92
aWRlciogcmVzb3VyY2VQcm92aWRlcikKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhy
ZWFkKCkpOwogICAgIGlmIChtX3JlbmRlcmVySW5pdGlhbGl6ZWQpCiAgICAgICAgIG1fY29udGVu
dHNUZXh0dXJlTWFuYWdlci0+Y2xlYXJBbGxNZW1vcnkocmVzb3VyY2VQcm92aWRlcik7CiB9CiAK
K2Jvb2wgQ0NMYXllclRyZWVIb3N0OjpyZWR1Y2VDb250ZW50c1RleHR1cmVzTWVtb3J5T25JbXBs
VGhyZWFkKENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlcikKK3sKKyAgICBBU1NF
UlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOworICAgIGlmIChtX3JlbmRlcmVySW5pdGlhbGl6
ZWQpCisgICAgICAgIHJldHVybiBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9y
eU9uSW1wbFRocmVhZChyZXNvdXJjZVByb3ZpZGVyKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
IHZvaWQgQ0NMYXllclRyZWVIb3N0OjphY3F1aXJlTGF5ZXJUZXh0dXJlcygpCiB7CiAgICAgQVNT
RVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKQEAgLTQxNCwxMSArNDIyLDEyIEBAIHZvaWQg
Q0NMYXllclRyZWVIb3N0OjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKICAgICBtX3Byb3h5LT5z
ZXRWaXNpYmxlKHZpc2libGUpOwogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZXZpY3RBbGxD
b250ZW50VGV4dHVyZXMoKQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZGVzdHJveUNvbnRlbnRz
VGV4dHVyZXNFdmljdGVkQnlJbXBsVGhyZWFkKGludCogcHVyZ2VDb3VudGVyQWNrKQogewogICAg
IEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKG1fY29udGVudHNU
ZXh0dXJlTWFuYWdlci5nZXQoKSk7Ci0gICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5hbGxC
YWNraW5nVGV4dHVyZXNXZXJlRGVsZXRlZCgpOworICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdl
ci0+ZGVzdHJveUV2aWN0ZWRCYWNraW5ncyhwdXJnZUNvdW50ZXJBY2spOwogfQogCiB2b2lkIEND
TGF5ZXJUcmVlSG9zdDo6c3RhcnRQYWdlU2NhbGVBbmltYXRpb24oY29uc3QgSW50U2l6ZSYgdGFy
Z2V0UG9zaXRpb24sIGJvb2wgdXNlQW5jaG9yLCBmbG9hdCBzY2FsZSwgZG91YmxlIGR1cmF0aW9u
U2VjKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAppbmRleCA3NDI3ODhjNzA2NzgzYmI2Mzhm
NTNkNjI2ZjJkYzVjYzFlM2E1ODBhLi5kYzI1YWQ0MWY5NWM1NTk0MDkyMWI5NzQ3ZGI4ZjBhNGRj
MzJlOGUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApAQCAtMTU0LDcgKzE1NCw2IEBA
IHB1YmxpYzoKICAgICBSZWNyZWF0ZVJlc3VsdCByZWNyZWF0ZUNvbnRleHQoKTsKICAgICB2b2lk
IGRpZENvbW1pdEFuZERyYXdGcmFtZSgpIHsgbV9jbGllbnQtPmRpZENvbW1pdEFuZERyYXdGcmFt
ZSgpOyB9CiAgICAgdm9pZCBkaWRDb21wbGV0ZVN3YXBCdWZmZXJzKCkgeyBtX2NsaWVudC0+ZGlk
Q29tcGxldGVTd2FwQnVmZmVycygpOyB9Ci0gICAgdm9pZCBkZWxldGVDb250ZW50c1RleHR1cmVz
T25JbXBsVGhyZWFkKENDUmVzb3VyY2VQcm92aWRlciopOwogICAgIHZpcnR1YWwgdm9pZCBhY3F1
aXJlTGF5ZXJUZXh0dXJlcygpOwogICAgIC8vIFJldHVybnMgZmFsc2UgaWYgd2Ugc2hvdWxkIGFi
b3J0IHRoaXMgZnJhbWUgZHVlIHRvIGluaXRpYWxpemF0aW9uIGZhaWx1cmUuCiAgICAgYm9vbCBp
bml0aWFsaXplUmVuZGVyZXJJZk5lZWRlZCgpOwpAQCAtMjEyLDExICsyMTEsMTYgQEAgcHVibGlj
OgogCiAgICAgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyKiBjb250ZW50c1RleHR1cmVNYW5h
Z2VyKCkgY29uc3Q7CiAKLSAgICAvLyBUaGlzIHdpbGwgY2F1c2UgY29udGVudHMgdGV4dHVyZSBt
YW5hZ2VyIHRvIGV2aWN0IGFsbCB0ZXh0dXJlcywgYnV0Ci0gICAgLy8gd2l0aG91dCBkZWxldGlu
ZyB0aGVtLiBUaGlzIGhhcHBlbnMgYWZ0ZXIgYWxsIGNvbnRlbnQgdGV4dHVyZXMgaGF2ZQotICAg
IC8vIGFscmVhZHkgYmVlbiBkZWxldGVkIG9uIGltcGwsIGFmdGVyIGdldHRpbmcgYSAwIGFsbG9j
YXRpb24gbGltaXQuCi0gICAgLy8gU2V0IGR1cmluZyBhIGNvbW1pdCwgYnV0IGJlZm9yZSB1cGRh
dGVMYXllcnMuCi0gICAgdm9pZCBldmljdEFsbENvbnRlbnRUZXh0dXJlcygpOworICAgIHZvaWQg
ZGVsZXRlQWxsQ29udGVudHNUZXh0dXJlc09uSW1wbFRocmVhZChDQ1Jlc291cmNlUHJvdmlkZXIq
KTsKKworICAgIC8vIFRoaXMgd2lsbCBjYXVzZSBjb250ZW50cyB0ZXh0dXJlIG1hbmFnZXIgdG8g
ZnJlZSBzb21lIHJlc291cmNlcyB1c2VkCisgICAgLy8gYnkgdGV4dHVyZXMsIGJ1dCB3aWxsIG5v
dCBkZWxldGUgdGhlIHRleHR1cmUgYmFja2luZ3Mgb2JqZWN0cy4gVGhlCisgICAgLy8gZnVuY3Rp
b24gcmV0dXJucyB0cnVlIGlmIHNvbWUgcmVzb3VyY2VzIHdlcmUgaW5kZWVkIGRlc3Ryb3llZC4K
KyAgICBib29sIHJlZHVjZUNvbnRlbnRzVGV4dHVyZXNNZW1vcnlPbkltcGxUaHJlYWQoQ0NSZXNv
dXJjZVByb3ZpZGVyKik7CisKKyAgICAvLyBUaGlzIHdpbGwgZGVzdHJveSB0aGUgYmFja2luZ3Mg
dGhhdCBoYWQgdGhlaXIgR1BVIHJlc291cmNlcyBmcmVlZAorICAgIC8vIGJ5IGRlbGV0ZUNvbnRl
bnRzVGV4dHVyZXNSZXNvdXJjZXNPbkltcGxUaHJlYWQuCisgICAgdm9pZCBkZXN0cm95Q29udGVu
dHNUZXh0dXJlc0V2aWN0ZWRCeUltcGxUaHJlYWQoaW50KiBwdXJnZUNvdW50ZXJBY2spOwogCiAg
ICAgYm9vbCB2aXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV92aXNpYmxlOyB9CiAgICAgdm9pZCBz
ZXRWaXNpYmxlKGJvb2wpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApp
bmRleCBmY2RkMjhiY2U4NjViNWU2MDFkZjUxOGI1ZTNjNjgxOTczNDU3YjFjLi5kYWE0ODFhNGJi
MDI4YjE3MTc2M2UxMzhmOWMxMzc3MWU0ZDE2YzIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RJbXBsLmNwcApAQCAtNTI1LDExICs1MjUsNyBAQCBib29sIENDTGF5ZXJUcmVlSG9z
dEltcGw6OnByZXBhcmVUb0RyYXcoRnJhbWVEYXRhJiBmcmFtZSkKIAogdm9pZCBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpyZWxlYXNlQ29udGVudHNUZXh0dXJlcygpCiB7Ci0gICAgaWYgKG1fY29udGVu
dHNUZXh0dXJlc1B1cmdlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fcmVzb3VyY2VQcm92aWRl
ci0+ZGVsZXRlT3duZWRSZXNvdXJjZXMoQ0NSZW5kZXJlcjo6Q29udGVudFBvb2wpOwotICAgIG1f
Y29udGVudHNUZXh0dXJlc1B1cmdlZCA9IHRydWU7Ci0gICAgbV9jbGllbnQtPnNldE5lZWRzQ29t
bWl0T25JbXBsVGhyZWFkKCk7CisgICAgbV9jbGllbnQtPnJlZHVjZUNvbnRlbnRzVGV4dHVyZXNN
ZW1vcnlPbkltcGxUaHJlYWQoKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRN
ZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlcyhzaXplX3QgYnl0ZXMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsLmgKaW5kZXggYjNkMDdhYzI5YzBhODA3OGYwMTdjOGUxODkzMGJhMDA3
MjkwNjM4NC4uMjU0MmY4MGRmOTdlNmYxNTI4ZTIzYTEwOTZiOGY3NTkxMzJjY2RiYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApAQCAtNjAsNiArNjAsNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCkgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBzZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgcG9zdEFuaW1hdGlvbkV2ZW50c1RvTWFpblRocmVhZE9uSW1wbFRocmVhZChQYXNz
T3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiwgZG91YmxlIHdhbGxDbG9ja1RpbWUpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVkdWNlQ29udGVudHNUZXh0dXJlc01lbW9yeU9uSW1wbFRo
cmVhZCgpID0gMDsKIH07CiAKIC8vIENDTGF5ZXJUcmVlSG9zdEltcGwgb3ducyB0aGUgQ0NMYXll
ckltcGwgdHJlZSBhcyB3ZWxsIGFzIGFzc29jaWF0ZWQgcmVuZGVyaW5nIHN0YXRlCkBAIC0xNTks
NyArMTYwLDcgQEAgcHVibGljOgogICAgIGludCBzb3VyY2VGcmFtZU51bWJlcigpIGNvbnN0IHsg
cmV0dXJuIG1fc291cmNlRnJhbWVOdW1iZXI7IH0KICAgICB2b2lkIHNldFNvdXJjZUZyYW1lTnVt
YmVyKGludCBmcmFtZU51bWJlcikgeyBtX3NvdXJjZUZyYW1lTnVtYmVyID0gZnJhbWVOdW1iZXI7
IH0KIAotICAgIGJvb2wgY29udGVudHNUZXh0dXJlc1B1cmdlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29udGVudHNUZXh0dXJlc1B1cmdlZDsgfQorICAgIHZvaWQgc2V0Q29udGVudHNUZXh0dXJlc1B1
cmdlZCgpIHsgbV9jb250ZW50c1RleHR1cmVzUHVyZ2VkID0gdHJ1ZTsgfQogICAgIHZvaWQgcmVz
ZXRDb250ZW50c1RleHR1cmVzUHVyZ2VkKCkgeyBtX2NvbnRlbnRzVGV4dHVyZXNQdXJnZWQgPSBm
YWxzZTsgfQogICAgIHNpemVfdCBtZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlcygpIGNvbnN0IHsg
cmV0dXJuIG1fbWVtb3J5QWxsb2NhdGlvbkxpbWl0Qnl0ZXM7IH0KIApAQCAtMjgyLDYgKzI4Mywx
MCBAQCBwcml2YXRlOgogICAgIEludFNpemUgbV9kZXZpY2VWaWV3cG9ydFNpemU7CiAgICAgZmxv
YXQgbV9kZXZpY2VTY2FsZUZhY3RvcjsKICAgICBib29sIG1fdmlzaWJsZTsKKworICAgIC8vIFNl
dCB3aGVuIHRoZSBpbXBsIHRocmVhZCBkZWxldGVzIHRleHR1cmVzLCB1bi1zZXQgd2hlbiB0aGUg
aW1wbCdzIGxheWVyIHRyZWUKKyAgICAvLyBpcyBrbm93biB0byBub3QgcmVmZXJlbmNlIGFueSBk
ZWxldGVkIHJlc291cmNlcy4gVXNlZCB0byBwcmV2ZW50IGRyYXdpbmcKKyAgICAvLyB3aXRoIGRl
bGV0ZWQgcmVzb3VyY2VzLgogICAgIGJvb2wgbV9jb250ZW50c1RleHR1cmVzUHVyZ2VkOwogICAg
IHNpemVfdCBtX21lbW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4
dHVyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1ByaW9yaXRpemVkVGV4dHVyZS5jcHAKaW5kZXggZDlmNjhhZjBhZTBiOTkyODEzM2EyMzJkNzQx
NjkyNDc2MTIwNmRkYi4uMTQ4ZDVkOTcwZWMyMDA1ZmM1MGEzN2RkN2M1MmIzZjhlMDc0NGM1OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NQcmlvcml0aXplZFRleHR1cmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlLmNwcApAQCAtMjgsNiArMjgs
NyBAQAogCiAjaW5jbHVkZSAiQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmgiCiAjaW5jbHVk
ZSAiQ0NQcmlvcml0eUNhbGN1bGF0b3IuaCIKKyNpbmNsdWRlICJDQ1Byb3h5LmgiCiAjaW5jbHVk
ZSA8YWxnb3JpdGhtPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpAQCAtMTEwLDkgKzExMSwxNyBA
QCB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlOjp1cGxvYWQoQ0NSZXNvdXJjZVByb3ZpZGVyKiBy
ZXNvdXJjZVByb3ZpZGVyLAogICAgIGlmIChtX2lzQWJvdmVQcmlvcml0eUN1dG9mZikKICAgICAg
ICAgYWNxdWlyZUJhY2tpbmdUZXh0dXJlKHJlc291cmNlUHJvdmlkZXIpOwogICAgIEFTU0VSVCht
X2JhY2tpbmcpOworICAgIEFTU0VSVCghYmFja2luZ1Jlc291cmNlV2FzRGVsZXRlZCgpKTsKICAg
ICByZXNvdXJjZVByb3ZpZGVyLT51cGxvYWQocmVzb3VyY2VJZCgpLCBpbWFnZSwgaW1hZ2VSZWN0
LCBzb3VyY2VSZWN0LCBkZXN0T2Zmc2V0KTsKIH0KIAorYm9vbCBDQ1ByaW9yaXRpemVkVGV4dHVy
ZTo6YmFja2luZ1Jlc291cmNlV2FzRGVsZXRlZCgpIGNvbnN0Cit7CisgICAgaWYgKG1fYmFja2lu
ZykKKyAgICAgICAgcmV0dXJuIG1fYmFja2luZy0+cmVzb3VyY2VEZWxldGVkKCk7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCiB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpsaW5rKEJhY2tpbmcq
IGJhY2tpbmcpCiB7CiAgICAgQVNTRVJUKGJhY2tpbmcpOwpAQCAtMTM5LDQgKzE0OCwyNSBAQCB2
b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpzZXRUb1NlbGZNYW5hZ2VkTWVtb3J5UGxhY2Vob2xk
ZXIoc2l6ZV90IGJ5dGVzKQogICAgIG1fYnl0ZXMgPSBieXRlczsKIH0KIAorQ0NSZXNvdXJjZVBy
b3ZpZGVyOjpSZXNvdXJjZUlkIENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nOjppZCgpCit7
CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKyAgICByZXR1cm4gbV90ZXh0
dXJlLmlkKCk7Cit9CisKK2Jvb2wgQ0NQcmlvcml0aXplZFRleHR1cmU6OkJhY2tpbmc6OnJlc291
cmNlRGVsZXRlZCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgp
KTsKKyAgICByZXR1cm4gbV9yZXNvdXJjZURlbGV0ZWQ7Cit9CisKK3ZvaWQgQ0NQcmlvcml0aXpl
ZFRleHR1cmU6OkJhY2tpbmc6OmRlbGV0ZVJlc291cmNlKENDUmVzb3VyY2VQcm92aWRlciogcmVz
b3VyY2VQcm92aWRlcikKK3sKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwor
ICAgIEFTU0VSVChyZXNvdXJjZVByb3ZpZGVyKTsKKyAgICBBU1NFUlQoIW1fcmVzb3VyY2VEZWxl
dGVkKTsKKyAgICByZXNvdXJjZVByb3ZpZGVyLT5kZWxldGVSZXNvdXJjZShtX3RleHR1cmUuaWQo
KSk7CisgICAgbV9yZXNvdXJjZURlbGV0ZWQgPSB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmUuaAppbmRleCAzNzg5ZDdm
MjY5YTNkN2U1MTk1YTg5MmRkZDM3NmRhZTYxOGQyYjBlLi40NmM3YTE4N2NiMzZkZmY4N2JjNDQw
ZjE2YjQxYTZhNDkzMjA0YWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJl
LmgKQEAgLTg4LDYgKzg4LDggQEAgcHVibGljOgogICAgIC8vIFVwbG9hZHMgcGl4ZWxzIGludG8g
dGhlIGJhY2tpbmcgcmVzb3VyY2UuIFRoaXMgZnVuY3Rpb25zIHdpbGwgYXF1aXJlIHRoZSBiYWNr
aW5nIGlmIG5lZWRlZC4KICAgICB2b2lkIHVwbG9hZChDQ1Jlc291cmNlUHJvdmlkZXIqLCBjb25z
dCB1aW50OF90KiBpbWFnZSwgY29uc3QgSW50UmVjdCYgaW1hZ2VSZWN0LCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRTaXplJiBkZXN0T2Zmc2V0KTsKIAorICAgIGJvb2wgYmFj
a2luZ1Jlc291cmNlV2FzRGVsZXRlZCgpIGNvbnN0OworCiAgICAgQ0NSZXNvdXJjZVByb3ZpZGVy
OjpSZXNvdXJjZUlkIHJlc291cmNlSWQoKSBjb25zdDsKIAogICAgIC8vIFNlbGYtbWFuYWdlZCB0
ZXh0dXJlcyBhcmUgYWNjb3VudGVkIGZvciB3aGVuIHByaW9yaXRpemluZyBvdGhlciB0ZXh0dXJl
cywKQEAgLTEwMSwxNiArMTAzLDI4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNs
YXNzIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjsKIAotICAgIGNsYXNzIEJhY2tpbmcgOiBw
dWJsaWMgQ0NUZXh0dXJlIHsKKyAgICBjbGFzcyBCYWNraW5nIHsKICAgICAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoQmFja2luZyk7CiAgICAgcHVibGljOgogICAgICAgICBCYWNraW5nKHVuc2ln
bmVkIGlkLCBJbnRTaXplIHNpemUsIEdDM0RlbnVtIGZvcm1hdCkKLSAgICAgICAgICAgIDogQ0NU
ZXh0dXJlKGlkLCBzaXplLCBmb3JtYXQpLCBtX293bmVyKDApIHsgfQotICAgICAgICB+QmFja2lu
ZygpIHsgQVNTRVJUKCFtX293bmVyKTsgfQorICAgICAgICAgICAgOiBtX3RleHR1cmUoaWQsIHNp
emUsIGZvcm1hdCksIG1fcmVzb3VyY2VEZWxldGVkKGZhbHNlKSwgbV9vd25lcigwKSB7IH0KKyAg
ICAgICAgfkJhY2tpbmcoKSB7IEFTU0VSVCghbV9vd25lciAmJiBtX3Jlc291cmNlRGVsZXRlZCk7
IH0KKworICAgICAgICBDQ1ByaW9yaXRpemVkVGV4dHVyZSogb3duZXIoKSBjb25zdCB7IHJldHVy
biBtX293bmVyOyB9CisKKyAgICAgICAgQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJjZUlkIGlk
KCk7CisgICAgICAgIGNvbnN0IEludFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3RleHR1
cmUuc2l6ZSgpOyB9CisgICAgICAgIEdDM0RlbnVtIGZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1f
dGV4dHVyZS5mb3JtYXQoKTsgfQorICAgICAgICBzaXplX3QgYnl0ZXMoKSBjb25zdCB7IHJldHVy
biBtX3RleHR1cmUuYnl0ZXMoKTsgfQorCisgICAgICAgIHZvaWQgZGVsZXRlUmVzb3VyY2UoQ0NS
ZXNvdXJjZVByb3ZpZGVyKik7CisgICAgICAgIGJvb2wgcmVzb3VyY2VEZWxldGVkKCkgY29uc3Q7
CiAKLSAgICAgICAgQ0NQcmlvcml0aXplZFRleHR1cmUqIG93bmVyKCkgeyByZXR1cm4gbV9vd25l
cjsgfQogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBDQ1ByaW9yaXRpemVkVGV4
dHVyZTsKKyAgICAgICAgZnJpZW5kIGNsYXNzIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjsK
KyAgICAgICAgQ0NUZXh0dXJlIG1fdGV4dHVyZTsKKyAgICAgICAgYm9vbCBtX3Jlc291cmNlRGVs
ZXRlZDsKICAgICAgICAgQ0NQcmlvcml0aXplZFRleHR1cmUqIG1fb3duZXI7CiAgICAgfTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5jcHAKaW5k
ZXggODNkNjhhZDA3MWVkYjY1ODI4Mjg4OWFiYmIwMDdmNTc4ZWJhMjQ2MC4uN2ZhNDY0MDgxYWZj
MjJmNmFjNTI3NzZiMWRiOWY3MmU2NWI4ZTJlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuY3BwCkBAIC01MCwxMCArNTAsMTEgQEAgQ0NQcmlv
cml0aXplZFRleHR1cmVNYW5hZ2VyOjp+Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyKCkKICAg
ICB3aGlsZSAobV90ZXh0dXJlcy5zaXplKCkgPiAwKQogICAgICAgICB1bnJlZ2lzdGVyVGV4dHVy
ZSgqbV90ZXh0dXJlcy5iZWdpbigpKTsKIAotICAgIC8vIEVhY2ggcmVtYWluaW5nIGJhY2tpbmcg
aXMgYSBsZWFrZWQgb3BlbmdsIHRleHR1cmUuIFdlIGRvbid0IGhhdmUgdGhlIHJlc291cmNlUHJv
dmlkZXIKLSAgICAvLyB0byBkZWxldGUgdGhlIHRleHR1cmVzIGF0IHRoaXMgdGltZSBzbyBjbGVh
ck1lbW9yeSgpIG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmUgdGhpcy4KLSAgICB3aGlsZSAobV9i
YWNraW5ncy5zaXplKCkgPiAwKQotICAgICAgICBkZXN0cm95QmFja2luZygqbV9iYWNraW5ncy5i
ZWdpbigpLCAwKTsKKyAgICAvLyBSZW1vdmUgYW55IGJhY2tpbmdzIHRoYXQgd2VyZSBldmljdGVk
LgorICAgIGNsZWFyRXZpY3RlZEJhY2tpbmdzSW50ZXJuYWwoMCk7CisKKyAgICAvLyBFYWNoIHJl
bWFpbmluZyBiYWNraW5nIGlzIHJlYWwgbWVtb3J5IGxlYWsuIFRoaXMgc2hvdWxkbid0IGhhcHBl
bi4KKyAgICBBU1NFUlQobV9iYWNraW5ncy5pc0VtcHR5KCkpOwogfQogCiB2b2lkIENDUHJpb3Jp
dGl6ZWRUZXh0dXJlTWFuYWdlcjo6cHJpb3JpdGl6ZVRleHR1cmVzKCkKQEAgLTE3Niw2ICsxNzcs
NyBAQCBib29sIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmVxdWVzdExhdGUoQ0NQcmlv
cml0aXplZFRleHR1cmUqIHRleHR1cmUpCiB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdl
cjo6YWNxdWlyZUJhY2tpbmdUZXh0dXJlSWZOZWVkZWQoQ0NQcmlvcml0aXplZFRleHR1cmUqIHRl
eHR1cmUsIENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlcikKIHsKICAgICBBU1NF
UlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkgJiYgQ0NQcm94eTo6aXNNYWluVGhyZWFkQmxvY2tl
ZCgpKTsKKyAgICBBU1NFUlQocmVzb3VyY2VQcm92aWRlcik7CiAgICAgQVNTRVJUKCF0ZXh0dXJl
LT5pc1NlbGZNYW5hZ2VkKCkpOwogICAgIEFTU0VSVCh0ZXh0dXJlLT5pc0Fib3ZlUHJpb3JpdHlD
dXRvZmYoKSk7CiAgICAgaWYgKHRleHR1cmUtPmJhY2tpbmcoKSB8fCAhdGV4dHVyZS0+aXNBYm92
ZVByaW9yaXR5Q3V0b2ZmKCkpCkBAIC0xODgsNiArMTkwLDggQEAgdm9pZCBDQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXI6OmFjcXVpcmVCYWNraW5nVGV4dHVyZUlmTmVlZGVkKENDUHJpb3JpdGl6
ZWRUZXgKICAgICBmb3IgKEJhY2tpbmdTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9iYWNraW5ncy5iZWdp
bigpOyBpdCAhPSBtX2JhY2tpbmdzLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIGlmICgoKml0KS0+
b3duZXIoKSAmJiAoKml0KS0+b3duZXIoKS0+aXNBYm92ZVByaW9yaXR5Q3V0b2ZmKCkpCiAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKCgqaXQpLT5yZXNvdXJjZURlbGV0ZWQoKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoKCppdCktPnNpemUoKSA9PSB0ZXh0dXJl
LT5zaXplKCkgJiYgKCppdCktPmZvcm1hdCgpID09IHRleHR1cmUtPmZvcm1hdCgpKSB7CiAgICAg
ICAgICAgICBiYWNraW5nID0gKCppdCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE5OCw2ICsy
MDIsNyBAQCB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6YWNxdWlyZUJhY2tpbmdU
ZXh0dXJlSWZOZWVkZWQoQ0NQcmlvcml0aXplZFRleAogICAgIGlmICghYmFja2luZykgewogICAg
ICAgICByZWR1Y2VNZW1vcnkobV9tZW1vcnlBdmFpbGFibGVCeXRlcyAtIHRleHR1cmUtPmJ5dGVz
KCksIHJlc291cmNlUHJvdmlkZXIpOwogICAgICAgICBiYWNraW5nID0gY3JlYXRlQmFja2luZyh0
ZXh0dXJlLT5zaXplKCksIHRleHR1cmUtPmZvcm1hdCgpLCByZXNvdXJjZVByb3ZpZGVyKTsKKyAg
ICAgICAgbV91bmV2aWN0ZWRCYWNraW5ncy5hZGQoYmFja2luZyk7CiAgICAgfQogCiAgICAgLy8g
TW92ZSB0aGUgdXNlZCBiYWNraW5nIHRleHR1cmUgdG8gdGhlIGVuZCBvZiB0aGUgZXZpY3Rpb24g
bGlzdC4KQEAgLTIxMSw2ICsyMTYsNyBAQCB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdl
cjo6YWNxdWlyZUJhY2tpbmdUZXh0dXJlSWZOZWVkZWQoQ0NQcmlvcml0aXplZFRleAogdm9pZCBD
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnJlZHVjZU1lbW9yeShzaXplX3QgbGltaXRCeXRl
cywgQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyKQogewogICAgIEFTU0VSVChD
Q1Byb3h5Ojppc0ltcGxUaHJlYWQoKSAmJiBDQ1Byb3h5Ojppc01haW5UaHJlYWRCbG9ja2VkKCkp
OworICAgIEFTU0VSVChyZXNvdXJjZVByb3ZpZGVyKTsKICAgICBpZiAobWVtb3J5VXNlQnl0ZXMo
KSA8PSBsaW1pdEJ5dGVzKQogICAgICAgICByZXR1cm47CiAgICAgLy8gRGVzdHJveSBiYWNraW5n
cyB1bnRpbCB3ZSBhcmUgYmVsb3cgdGhlIGxpbWl0LApAQCAtMjE5LDcgKzIyNSwxNSBAQCB2b2lk
IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmVkdWNlTWVtb3J5KHNpemVfdCBsaW1pdEJ5
dGVzLCBDQ1Jlc291cmNlUHJvdgogICAgICAgICBCYWNraW5nU2V0OjppdGVyYXRvciBpdCA9IG1f
YmFja2luZ3MuYmVnaW4oKTsKICAgICAgICAgaWYgKCgqaXQpLT5vd25lcigpICYmICgqaXQpLT5v
d25lcigpLT5pc0Fib3ZlUHJpb3JpdHlDdXRvZmYoKSkKICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBkZXN0cm95QmFja2luZygoKml0KSwgcmVzb3VyY2VQcm92aWRlcik7CisgICAgICAgIGlm
ICgoKml0KS0+cmVzb3VyY2VEZWxldGVkKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChtX2V2aWN0
ZWRCYWNraW5ncy5maW5kKCgqaXQpKSAhPSBtX2V2aWN0ZWRCYWNraW5ncy5lbmQoKSk7CisgICAg
ICAgICAgICBtX2V2aWN0ZWRCYWNraW5ncy5yZW1vdmUoKCppdCkpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgQVNTRVJUKG1fdW5ldmljdGVkQmFja2luZ3MuZmluZCgoKml0KSkgIT0g
bV91bmV2aWN0ZWRCYWNraW5ncy5lbmQoKSk7CisgICAgICAgICAgICBtX3VuZXZpY3RlZEJhY2tp
bmdzLnJlbW92ZSgoKml0KSk7CisgICAgICAgICAgICAoKml0KS0+ZGVsZXRlUmVzb3VyY2UocmVz
b3VyY2VQcm92aWRlcik7CisgICAgICAgIH0KKyAgICAgICAgZGVzdHJveUJhY2tpbmcoKCppdCkp
OwogICAgIH0KIH0KIApAQCAtMjQ2LDIzICsyNjAsNjAgQEAgdm9pZCBDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI6OnJlZHVjZU1lbW9yeShDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJv
dmkKICAgICByZWR1Y2VNZW1vcnkobWVtb3J5VXNlQnl0ZXMoKSAtICh3YXN0ZWRNZW1vcnkgLSB0
ZW5QZXJjZW50T2ZNZW1vcnkpLCByZXNvdXJjZVByb3ZpZGVyKTsKIH0KIAotdm9pZCBDQ1ByaW9y
aXRpemVkVGV4dHVyZU1hbmFnZXI6OmNsZWFyQWxsTWVtb3J5KENDUmVzb3VyY2VQcm92aWRlciog
cmVzb3VyY2VQcm92aWRlcikKK2Jvb2wgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpyZWR1
Y2VNZW1vcnlPbkltcGxUaHJlYWQoQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVy
KQogewotICAgIC8vIFVubGluayBhbmQgZGVzdHJveSBhbGwgYmFja2luZyB0ZXh0dXJlcy4KLSAg
ICB3aGlsZSAobV9iYWNraW5ncy5zaXplKCkgPiAwKSB7Ci0gICAgICAgIEJhY2tpbmdTZXQ6Oml0
ZXJhdG9yIGl0ID0gbV9iYWNraW5ncy5iZWdpbigpOwotICAgICAgICBpZiAoKCppdCktPm93bmVy
KCkpCi0gICAgICAgICAgICAoKml0KS0+b3duZXIoKS0+dW5saW5rKCk7Ci0gICAgICAgIGRlc3Ry
b3lCYWNraW5nKCgqaXQpLCByZXNvdXJjZVByb3ZpZGVyKTsKKyAgICBBU1NFUlQoQ0NQcm94eTo6
aXNJbXBsVGhyZWFkKCkpOworICAgIEFTU0VSVChyZXNvdXJjZVByb3ZpZGVyKTsKKworICAgIEJh
Y2tpbmdWZWN0b3IgYmFja2luZ3NUb0V2aWN0OworICAgIGZvciAoQmFja2luZ1NldDo6aXRlcmF0
b3IgaXQgPSBtX3VuZXZpY3RlZEJhY2tpbmdzLmJlZ2luKCk7IGl0ICE9IG1fdW5ldmljdGVkQmFj
a2luZ3MuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgKCppdCktPmRlbGV0ZVJlc291cmNlKHJlc291
cmNlUHJvdmlkZXIpOworICAgICAgICBiYWNraW5nc1RvRXZpY3QuYXBwZW5kKCgqaXQpKTsKKyAg
ICB9CisgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICBNdXRleExvY2tlciBsb2NrKG1fZXZp
Y3RlZFN0YXRlTXV0ZXgpOworICAgIGlmICghYmFja2luZ3NUb0V2aWN0LmlzRW1wdHkoKSkgewor
ICAgICAgICByZXN1bHQgPSB0cnVlOworICAgICAgICBmb3IgKEJhY2tpbmdWZWN0b3I6Oml0ZXJh
dG9yIGl0ID0gYmFja2luZ3NUb0V2aWN0LmJlZ2luKCk7IGl0ICE9IGJhY2tpbmdzVG9FdmljdC5l
bmQoKTsgKytpdCkgeworICAgICAgICAgICAgbV91bmV2aWN0ZWRCYWNraW5ncy5yZW1vdmUoKCpp
dCkpOworICAgICAgICAgICAgbV9ldmljdGVkQmFja2luZ3MuYWRkKCgqaXQpKTsKKyAgICAgICAg
fQorICAgICAgICBtX2V2aWN0aW9uQ291bnRlcisrOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6ZGVzdHJveUV2aWN0ZWRC
YWNraW5ncyhpbnQqIGV2aWN0aW9uQ291bnRlckFjaykKK3sKKyAgICBBU1NFUlQoQ0NQcm94eTo6
aXNNYWluVGhyZWFkKCkpOworICAgIGNsZWFyRXZpY3RlZEJhY2tpbmdzSW50ZXJuYWwoZXZpY3Rp
b25Db3VudGVyQWNrKTsKK30KKwordm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNs
ZWFyRXZpY3RlZEJhY2tpbmdzSW50ZXJuYWwoaW50KiBldmljdGlvbkNvdW50ZXJBY2spCit7Cisg
ICAgLy8gVGhpcyBjYW4gYmUgY2FsbGVkIG9uIHRoZSBtYWluIG9yIGltcGwgdGhyZWFkLCBvciBh
dCB0ZWFyLWRvd24uCisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX2V2aWN0ZWRTdGF0ZU11dGV4KTsK
KyAgICBmb3IgKEJhY2tpbmdTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9ldmljdGVkQmFja2luZ3MuYmVn
aW4oKTsgaXQgIT0gbV9ldmljdGVkQmFja2luZ3MuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgZGVz
dHJveUJhY2tpbmcoKCppdCkpOwogICAgIH0KKyAgICBtX2V2aWN0ZWRCYWNraW5ncy5jbGVhcigp
OworICAgIGlmIChldmljdGlvbkNvdW50ZXJBY2spCisgICAgICAgICpldmljdGlvbkNvdW50ZXJB
Y2sgPSBtX2V2aWN0aW9uQ291bnRlcjsKIH0KIAotdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI6OmFsbEJhY2tpbmdUZXh0dXJlc1dlcmVEZWxldGVkKCkKK2Jvb2wgQ0NQcmlvcml0aXpl
ZFRleHR1cmVNYW5hZ2VyOjppc0V2aWN0aW9uQ291bnRlckFja1VwVG9EYXRlKGludCBldmljdGlv
bkNvdW50ZXJBY2spCiB7Ci0gICAgLy8gU2FtZSBhcyBjbGVhckFsbE1lbW9yeSwgZXhjZXB0IGFs
bCBvdXIgdGV4dHVyZXMgd2VyZSBhbHJlYWR5Ci0gICAgLy8gZGVsZXRlZCBleHRlcm5hbGx5LCBz
byB3ZSBkb24ndCBkZWxldGUgdGhlbS4gUGFzc2luZyBubwotICAgIC8vIHJlc291cmNlUHJvdmlk
ZXIgcmVzdWx0cyBpbiBsZWFraW5nIHRoZSAobm93IGludmFsaWQpIHRleHR1cmUgaWRzLgotICAg
IGNsZWFyQWxsTWVtb3J5KDApOworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7
CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX2V2aWN0ZWRTdGF0ZU11dGV4KTsKKyAgICByZXR1cm4g
KGV2aWN0aW9uQ291bnRlckFjayA9PSBtX2V2aWN0aW9uQ291bnRlcik7Cit9CisKK3ZvaWQgQ0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjbGVhckFsbE1lbW9yeShDQ1Jlc291cmNlUHJvdmlk
ZXIqIHJlc291cmNlUHJvdmlkZXIpCit7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVh
ZCgpICYmIENDUHJveHk6OmlzTWFpblRocmVhZEJsb2NrZWQoKSk7CisgICAgQVNTRVJUKHJlc291
cmNlUHJvdmlkZXIpOworICAgIHJlZHVjZU1lbW9yeU9uSW1wbFRocmVhZChyZXNvdXJjZVByb3Zp
ZGVyKTsKKyAgICBjbGVhckV2aWN0ZWRCYWNraW5nc0ludGVybmFsKDApOwogfQogCiB2b2lkIEND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmVnaXN0ZXJUZXh0dXJlKENDUHJpb3JpdGl6ZWRU
ZXh0dXJlKiB0ZXh0dXJlKQpAQCAtMzEzLDE1ICszNjQsMTMgQEAgQ0NQcmlvcml0aXplZFRleHR1
cmU6OkJhY2tpbmcqIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlQmFja2luZyhJ
bnRTaXoKICAgICByZXR1cm4gYmFja2luZzsKIH0KIAotdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVy
ZU1hbmFnZXI6OmRlc3Ryb3lCYWNraW5nKENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nKiBi
YWNraW5nLCBDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIpCit2b2lkIENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6ZGVzdHJveUJhY2tpbmcoQ0NQcmlvcml0aXplZFRleHR1
cmU6OkJhY2tpbmcqIGJhY2tpbmcpCiB7CiAgICAgQVNTRVJUKGJhY2tpbmcpOwotICAgIEFTU0VS
VCghYmFja2luZy0+b3duZXIoKSB8fCAhYmFja2luZy0+b3duZXIoKS0+aXNBYm92ZVByaW9yaXR5
Q3V0b2ZmKCkpOwogICAgIEFTU0VSVCghYmFja2luZy0+b3duZXIoKSB8fCAhYmFja2luZy0+b3du
ZXIoKS0+aXNTZWxmTWFuYWdlZCgpKTsKICAgICBBU1NFUlQobV9iYWNraW5ncy5maW5kKGJhY2tp
bmcpICE9IG1fYmFja2luZ3MuZW5kKCkpOworICAgIEFTU0VSVChiYWNraW5nLT5tX3Jlc291cmNl
RGVsZXRlZCk7CiAKLSAgICBpZiAocmVzb3VyY2VQcm92aWRlcikKLSAgICAgICAgcmVzb3VyY2VQ
cm92aWRlci0+ZGVsZXRlUmVzb3VyY2UoYmFja2luZy0+aWQoKSk7CiAgICAgaWYgKGJhY2tpbmct
Pm93bmVyKCkpCiAgICAgICAgIGJhY2tpbmctPm93bmVyKCktPnVubGluaygpOwogICAgIG1fbWVt
b3J5VXNlQnl0ZXMgLT0gYmFja2luZy0+Ynl0ZXMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmgKaW5kZXggMTNkYmM1MTc2YmNkNzhlZTI5NzA5MGE2
NzY1MTI0NWY5YmQ3NjRjYS4uYjY3MzllNjg3MDI5ZmFhNzIwZjVmZWUzODg5NWM0YmUxMjZiYzhj
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmgK
QEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nUHJpbWl0aXZlcy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtNzcsOCArNzgsMjQgQEAgcHVibGljOgogICAgIGJvb2wgcmVxdWVzdExh
dGUoQ0NQcmlvcml0aXplZFRleHR1cmUqKTsKIAogICAgIHZvaWQgcmVkdWNlTWVtb3J5KENDUmVz
b3VyY2VQcm92aWRlciopOworCisgICAgLy8gUmV0dXJucyB0cnVlIGFuZCBpbmNyZW1lbnRzIGFu
IGludGVybmFsIGV2aWN0aW9uIGNvdW50ZXIgaWYgcmVzb3VyY2VzIGFyZQorICAgIC8vIGRlbGV0
ZWQgYXMgYSByZXN1bHQgb2YgdGhpcyBjYWxsLgorICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgYXN5
bmNocm9ub3VzIGluIHRoYXQgaXQgaXMgY2FsbGVkIG9uIHRoZSBpbXBsIHRocmVhZCB3aGlsZSB0
aGUKKyAgICAvLyBtYWluIHRocmVhZCBpcyBub3QgYmxvY2tlZCAoc28gaXQgbWF5IGJlIGNvbmN1
cnJlbnQgd2l0aCBvdGhlciBjYWxscyBmcm9tIHRoZQorICAgIC8vIG1haW4gdGhyZWFkKQorICAg
IGJvb2wgcmVkdWNlTWVtb3J5T25JbXBsVGhyZWFkKENDUmVzb3VyY2VQcm92aWRlciopOworCisg
ICAgLy8gUmVtb3ZlIHRoZSBiYWNraW5ncyB3aG9zZSByZXNvdXJjZXMgd2VyZSBkZXN0cm95ZWQg
YnkgcmVkdWNlTWVtb3J5T25JbXBsVGhyZWFkLgorICAgIC8vIFdyaXRlcyB0aGUgaW50ZXJuYWwg
ZXZpY3Rpb24gY291bnRlciB0byBldmljdGlvbkNvdW50ZXJBY2suCisgICAgdm9pZCBkZXN0cm95
RXZpY3RlZEJhY2tpbmdzKGludCogZXZpY3Rpb25Db3VudGVyQWNrKTsKKworICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiBldmljdGlvbkNvdW50ZXJBY2sgaXMgdGhlIHZhbHVlIG9mIGludGVybmFsIGV2
aWN0aW9uIGNvdW50ZXIuCisgICAgYm9vbCBpc0V2aWN0aW9uQ291bnRlckFja1VwVG9EYXRlKGlu
dCBldmljdGlvbkNvdW50ZXJBY2spOworCisgICAgLy8gRGVsZXRlIGFsbCB0ZXh0dXJlcyBhbmQg
ZnJvbSB0aGUgaW1wbCB0aHJlYWQgKGF0IHRocmVhZCBleGl0IGFuZAorICAgIC8vIGNvbnRleHQg
bG9zdCkuCiAgICAgdm9pZCBjbGVhckFsbE1lbW9yeShDQ1Jlc291cmNlUHJvdmlkZXIqKTsKLSAg
ICB2b2lkIGFsbEJhY2tpbmdUZXh0dXJlc1dlcmVEZWxldGVkKCk7CiAKICAgICB2b2lkIGFjcXVp
cmVCYWNraW5nVGV4dHVyZUlmTmVlZGVkKENDUHJpb3JpdGl6ZWRUZXh0dXJlKiwgQ0NSZXNvdXJj
ZVByb3ZpZGVyKik7CiAKQEAgLTEwOSwxMSArMTI2LDEwIEBAIHByaXZhdGU6CiAgICAgfQogCiAg
ICAgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyKHNpemVfdCBtYXhNZW1vcnlMaW1pdEJ5dGVz
LCBpbnQgbWF4VGV4dHVyZVNpemUsIGludCBwb29sKTsKLQogICAgIHZvaWQgcmVkdWNlTWVtb3J5
KHNpemVfdCBsaW1pdCwgQ0NSZXNvdXJjZVByb3ZpZGVyKik7Ci0KICAgICBDQ1ByaW9yaXRpemVk
VGV4dHVyZTo6QmFja2luZyogY3JlYXRlQmFja2luZyhJbnRTaXplLCBHQzNEZW51bSBmb3JtYXQs
IENDUmVzb3VyY2VQcm92aWRlciopOwotICAgIHZvaWQgZGVzdHJveUJhY2tpbmcoQ0NQcmlvcml0
aXplZFRleHR1cmU6OkJhY2tpbmcqLCBDQ1Jlc291cmNlUHJvdmlkZXIqKTsKKyAgICB2b2lkIGNs
ZWFyRXZpY3RlZEJhY2tpbmdzSW50ZXJuYWwoaW50KiBldmljdGlvbkNvdW50ZXJBY2spOworICAg
IHZvaWQgZGVzdHJveUJhY2tpbmcoQ0NQcmlvcml0aXplZFRleHR1cmU6OkJhY2tpbmcqKTsKIAog
ICAgIHNpemVfdCBtX21heE1lbW9yeUxpbWl0Qnl0ZXM7CiAgICAgdW5zaWduZWQgbV9wcmlvcml0
eUN1dG9mZjsKQEAgLTEzMiw4ICsxNDgsMjMgQEAgcHJpdmF0ZToKIAogICAgIFRleHR1cmVWZWN0
b3IgbV90ZW1wVGV4dHVyZVZlY3RvcjsKICAgICBCYWNraW5nVmVjdG9yIG1fdGVtcEJhY2tpbmdW
ZWN0b3I7CisKKyAgICAvLyBBIGNvcHkgb2YgbV9iYWNraW5ncyAobWludXMgZXZpY3RlZCBiYWNr
aW5ncykgd2hpY2ggaXMgYWNjZXNzZWQgb25seSBvbgorICAgIC8vIHRoZSBpbXBsIHRocmVhZC4g
VGhpcyBpcyB0cmF2ZXJzZWQgd2hlbiBldmljdGluZyBiYWNraW5ncyAod2hpY2ggaGFwcGVucyAK
KyAgICAvLyB3aGlsZSB0aGUgbWFpbiB0aHJlYWQgbWF5IGJlIHRyYXZlcnNpbmcgbV9iYWNraW5n
cykuCisgICAgLy8gVE9PRDogbWFrZSBtX2JhY2tpbmdzIG5vdCBhY2Nlc3NlZCBvbiB0aGUgbWFp
biB0aHJlYWQsIGFuZCByZW1vdmUgdGhpcworICAgIC8vIHJlZHVuZGFudCBzdGF0ZS4KKyAgICBC
YWNraW5nU2V0IG1fdW5ldmljdGVkQmFja2luZ3M7CisKKyAgICAvLyBUaGlzIHN0YXRlIGNhbiBi
ZSBhY2Nlc3NlZCBieSB0aGUgaW1wbCB0aHJlYWQgYW5kIHRoZSBtYWluIHRocmVhZCBjb25jdXJy
ZW50bHksCisgICAgLy8gYW5kIG1heSBiZSBhY2Nlc3NlZCBvbmx5IHdoZW4gbV9ldmljdGVkQmFj
a2luZ3NNdXRleCBpcyBoZWxkLgorICAgIE11dGV4IG1fZXZpY3RlZFN0YXRlTXV0ZXg7CisgICAg
QmFja2luZ1NldCBtX2V2aWN0ZWRCYWNraW5nczsKKyAgICBpbnQgbV9ldmljdGlvbkNvdW50ZXI7
CiB9OwogCisKKwogfSAvLyBXZWJDb3JlCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Npbmds
ZVRocmVhZFByb3h5LmNwcAppbmRleCA2ODc2ZWEyMTg4YmFmNjY2OGEyOWFjMzdjMWNkMzhjOGNi
NDQxY2U5Li40YjY1MTdiNGZlNjE0ODZkYjk1OGUzNWQ2ODYzM2E5ZmEwN2Y5NDIyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Npbmds
ZVRocmVhZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcApAQCAtMTU1LDkgKzE1NSw5IEBAIGJv
b2wgQ0NTaW5nbGVUaHJlYWRQcm94eTo6cmVjcmVhdGVDb250ZXh0KCkKIAogICAgIGJvb2wgaW5p
dGlhbGl6ZWQ7CiAgICAgeworICAgICAgICBEZWJ1Z1Njb3BlZFNldE1haW5UaHJlYWRCbG9ja2Vk
IG1haW5UaHJlYWRCbG9ja2VkOwogICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1w
bDsKLSAgICAgICAgaWYgKCFtX2xheWVyVHJlZUhvc3RJbXBsLT5jb250ZW50c1RleHR1cmVzUHVy
Z2VkKCkpCi0gICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmRlbGV0ZUNvbnRlbnRzVGV4dHVy
ZXNPbkltcGxUaHJlYWQobV9sYXllclRyZWVIb3N0SW1wbC0+cmVzb3VyY2VQcm92aWRlcigpKTsK
KyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5kZWxldGVBbGxDb250ZW50c1RleHR1cmVzT25JbXBs
VGhyZWFkKG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJlc291cmNlUHJvdmlkZXIoKSk7CiAgICAgICAg
IGluaXRpYWxpemVkID0gbV9sYXllclRyZWVIb3N0SW1wbC0+aW5pdGlhbGl6ZVJlbmRlcmVyKGNv
bnRleHQucmVsZWFzZSgpLCBVbnRocm90dGxlZFVwbG9hZGVyKTsKICAgICAgICAgaWYgKGluaXRp
YWxpemVkKSB7CiAgICAgICAgICAgICBtX1JlbmRlcmVyQ2FwYWJpbGl0aWVzRm9yTWFpblRocmVh
ZCA9IG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJlbmRlcmVyQ2FwYWJpbGl0aWVzKCk7CkBAIC0yNjAs
OSArMjYwLDcgQEAgdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5OjpzdG9wKCkKICAgICB7CiAgICAg
ICAgIERlYnVnU2NvcGVkU2V0TWFpblRocmVhZEJsb2NrZWQgbWFpblRocmVhZEJsb2NrZWQ7CiAg
ICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOwotCi0gICAgICAgIGlmICghbV9s
YXllclRyZWVIb3N0SW1wbC0+Y29udGVudHNUZXh0dXJlc1B1cmdlZCgpKQotICAgICAgICAgICAg
bV9sYXllclRyZWVIb3N0LT5kZWxldGVDb250ZW50c1RleHR1cmVzT25JbXBsVGhyZWFkKG1fbGF5
ZXJUcmVlSG9zdEltcGwtPnJlc291cmNlUHJvdmlkZXIoKSk7CisgICAgICAgIG1fbGF5ZXJUcmVl
SG9zdC0+ZGVsZXRlQWxsQ29udGVudHNUZXh0dXJlc09uSW1wbFRocmVhZChtX2xheWVyVHJlZUhv
c3RJbXBsLT5yZXNvdXJjZVByb3ZpZGVyKCkpOwogICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBs
LmNsZWFyKCk7CiAgICAgfQogICAgIG1fbGF5ZXJUcmVlSG9zdCA9IDA7CkBAIC0yNzUsNiArMjcz
LDE1IEBAIHZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6cG9zdEFuaW1hdGlvbkV2ZW50c1RvTWFp
blRocmVhZE9uSW1wbFRocmVhZChQYXNzT3duUHRyCiAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRB
bmltYXRpb25FdmVudHMoZXZlbnRzLCB3YWxsQ2xvY2tUaW1lKTsKIH0KIAordm9pZCBDQ1Npbmds
ZVRocmVhZFByb3h5OjpyZWR1Y2VDb250ZW50c1RleHR1cmVzTWVtb3J5T25JbXBsVGhyZWFkKCkK
K3sKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOworICAgIGlmIChtX2xheWVy
VHJlZUhvc3QtPnJlZHVjZUNvbnRlbnRzVGV4dHVyZXNNZW1vcnlPbkltcGxUaHJlYWQobV9sYXll
clRyZWVIb3N0SW1wbC0+cmVzb3VyY2VQcm92aWRlcigpKSkgeworICAgICAgICBtX2xheWVyVHJl
ZUhvc3RJbXBsLT5zZXRDb250ZW50c1RleHR1cmVzUHVyZ2VkKCk7CisgICAgICAgIHNldE5lZWRz
Q29tbWl0T25JbXBsVGhyZWFkKCk7CisgICAgfQorfQorCiAvLyBDYWxsZWQgYnkgdGhlIGxlZ2Fj
eSBzY2hlZHVsaW5nIHBhdGggKGUuZy4gd2hlcmUgcmVuZGVyX3dpZGdldCBkb2VzIHRoZSBzY2hl
ZHVsaW5nKQogdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21wb3NpdGVJbW1lZGlhdGVseSgp
CiB7CkBAIC0zMDEsOSArMzA4LDcgQEAgYm9vbCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21taXRB
bmRDb21wb3NpdGUoKQogICAgIGlmICghbV9sYXllclRyZWVIb3N0LT5pbml0aWFsaXplUmVuZGVy
ZXJJZk5lZWRlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobV9sYXllclRy
ZWVIb3N0SW1wbC0+Y29udGVudHNUZXh0dXJlc1B1cmdlZCgpKQotICAgICAgICBtX2xheWVyVHJl
ZUhvc3QtPmV2aWN0QWxsQ29udGVudFRleHR1cmVzKCk7Ci0KKyAgICBtX2xheWVyVHJlZUhvc3Qt
PmRlc3Ryb3lDb250ZW50c1RleHR1cmVzRXZpY3RlZEJ5SW1wbFRocmVhZCgwKTsKICAgICBDQ1Rl
eHR1cmVVcGRhdGVRdWV1ZSBxdWV1ZTsKICAgICBtX2xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVy
cyhxdWV1ZSwgbV9sYXllclRyZWVIb3N0SW1wbC0+bWVtb3J5QWxsb2NhdGlvbkxpbWl0Qnl0ZXMo
KSk7CiAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+cmVzZXRDb250ZW50c1RleHR1cmVzUHVyZ2Vk
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgKaW5kZXggNzFmNGY0ZjU3ZWNl
NGFkZjFlNDY1YTI0ODU5OTdiNWZjOTBhMmUyZC4uOWZiMWFiOGQzNGM4ZDc3YjQwZDhjNGUzMTcy
MGExZTQ0NGI2NWQ3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaApAQCAt
NzIsNiArNzIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3T25J
bXBsVGhyZWFkKCkgT1ZFUlJJREUgeyBtX2xheWVyVHJlZUhvc3QtPnNjaGVkdWxlQ29tcG9zaXRl
KCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKSBPVkVS
UklERSB7IG1fbGF5ZXJUcmVlSG9zdC0+c2NoZWR1bGVDb21wb3NpdGUoKTsgfQogICAgIHZpcnR1
YWwgdm9pZCBwb3N0QW5pbWF0aW9uRXZlbnRzVG9NYWluVGhyZWFkT25JbXBsVGhyZWFkKFBhc3NP
d25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+LCBkb3VibGUgd2FsbENsb2NrVGltZSkgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlZHVjZUNvbnRlbnRzVGV4dHVyZXNNZW1vcnlPbklt
cGxUaHJlYWQoKSBPVkVSUklERTsKIAogICAgIC8vIENhbGxlZCBieSB0aGUgbGVnYWN5IHBhdGgg
d2hlcmUgUmVuZGVyV2lkZ2V0IGRvZXMgdGhlIHNjaGVkdWxpbmcuCiAgICAgdm9pZCBjb21wb3Np
dGVJbW1lZGlhdGVseSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlQ29udHJvbGxlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVDb250
cm9sbGVyLmNwcAppbmRleCA2ZmM3NzFlOTU5MDVlZTNjODdlNjFiMDFmNjg2NjNiMmY5MDYwMWM3
Li4zOTM5YjFiMzg4OGNmYmQ0YTg5Y2FmNzQ1M2M3MTA4YzJkMjRkODU4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRh
dGVDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVDb250cm9sbGVyLmNwcApAQCAtMTUwLDYgKzE1MCwx
MSBAQCB2b2lkIENDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXI6OnVwZGF0ZU1vcmVUZXh0dXJlcyhk
b3VibGUgbW9ub3RvbmljVGltZUxpbWl0KQogICAgICAgICB1cGRhdGVNb3JlVGV4dHVyZXNOb3co
KTsKIH0KIAordm9pZCBDQ1RleHR1cmVVcGRhdGVDb250cm9sbGVyOjpkaXNjYXJkVXBsb2Fkc1Rv
RGVsZXRlZFJlc291cmNlcygpCit7CisgICAgbV9xdWV1ZS0+Y2xlYXJVcGxvYWRzVG9EZWxldGVk
UmVzb3VyY2VzKCk7Cit9CisKIHZvaWQgQ0NUZXh0dXJlVXBkYXRlQ29udHJvbGxlcjo6b25UaW1l
ckZpcmVkKCkKIHsKICAgICBpZiAoIW1fcXVldWUtPmhhc01vcmVVcGRhdGVzKCkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1
cmVVcGRhdGVDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVDb250cm9sbGVyLmgKaW5kZXggZGQ3NThiZWI0ZDlm
Y2Q4NjZlMThjODQ3Y2NkMGFmMjg5YmE5NWJkMS4uY2EzMjNjOWJiZGZkZTAzZmRiYzMyYjA1OWQ2
N2EwZDNjNWMxMGNhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZUNvbnRy
b2xsZXIuaApAQCAtNTEsNiArNTEsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNNb3JlVXBkYXRl
cygpIGNvbnN0OwogICAgIHZvaWQgdXBkYXRlTW9yZVRleHR1cmVzKGRvdWJsZSBtb25vdG9uaWNU
aW1lTGltaXQpOwogCisgICAgLy8gRGlzY2FyZCB1cGxvYWRzIHRvIHRleHR1cmVzIHRoYXQgd2Vy
ZSBldmljdGVkIG9uIHRoZSBpbXBsIHRocmVhZAorICAgIHZvaWQgZGlzY2FyZFVwbG9hZHNUb0Rl
bGV0ZWRSZXNvdXJjZXMoKTsKKwogICAgIC8vIENDVGltZXJDbGllbnQgaW1wbGVtZW50YXRpb24u
CiAgICAgdmlydHVhbCB2b2lkIG9uVGltZXJGaXJlZCgpIE9WRVJSSURFOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVV
cGRhdGVRdWV1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RleHR1cmVVcGRhdGVRdWV1ZS5jcHAKaW5kZXggOGY1OGZjYmNiNGNiYTI0ZjM0YTVh
YWQ0N2VkN2M5NDYwNzQzYzFhOC4uYTkwNTU3NjE3MTM2ZDEzODUxYmNhZjc2ZTMzYTgyMDg1MTNk
MjZhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NUZXh0dXJlVXBkYXRlUXVldWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZVF1ZXVlLmNwcApAQCAtNTQs
MTAgKzU0LDIxIEBAIHZvaWQgQ0NUZXh0dXJlVXBkYXRlUXVldWU6OmFwcGVuZENvcHkoVGV4dHVy
ZUNvcGllcjo6UGFyYW1ldGVycyBjb3B5KQogICAgIG1fY29weUVudHJpZXMuYXBwZW5kKGNvcHkp
OwogfQogCi12b2lkIENDVGV4dHVyZVVwZGF0ZVF1ZXVlOjpjbGVhclVwbG9hZHMoKQordm9pZCBD
Q1RleHR1cmVVcGRhdGVRdWV1ZTo6Y2xlYXJVcGxvYWRzVG9EZWxldGVkUmVzb3VyY2VzKCkKIHsK
LSAgICBtX2Z1bGxFbnRyaWVzLmNsZWFyKCk7Ci0gICAgbV9wYXJ0aWFsRW50cmllcy5jbGVhcigp
OworICAgIGNsZWFyVXBsb2Fkc1RvRGVsZXRlZFJlc291cmNlcyhtX2Z1bGxFbnRyaWVzKTsKKyAg
ICBjbGVhclVwbG9hZHNUb0RlbGV0ZWRSZXNvdXJjZXMobV9wYXJ0aWFsRW50cmllcyk7Cit9CisK
K3ZvaWQgQ0NUZXh0dXJlVXBkYXRlUXVldWU6OmNsZWFyVXBsb2Fkc1RvRGVsZXRlZFJlc291cmNl
cyhEZXF1ZTxUZXh0dXJlVXBsb2FkZXI6OlBhcmFtZXRlcnM+JiBlbnRyeVF1ZXVlKQoreworICAg
IERlcXVlPFRleHR1cmVVcGxvYWRlcjo6UGFyYW1ldGVycz4gdGVtcDsKKyAgICBlbnRyeVF1ZXVl
LnN3YXAodGVtcCk7CisgICAgd2hpbGUgKHRlbXAuc2l6ZSgpKSB7CisgICAgICAgIFRleHR1cmVV
cGxvYWRlcjo6UGFyYW1ldGVycyB1cGxvYWQgPSB0ZW1wLnRha2VGaXJzdCgpOworICAgICAgICBp
ZiAoIXVwbG9hZC50ZXh0dXJlLT5iYWNraW5nUmVzb3VyY2VXYXNEZWxldGVkKCkpCisgICAgICAg
ICAgICBlbnRyeVF1ZXVlLmFwcGVuZCh1cGxvYWQpOworICAgIH0KIH0KIAogVGV4dHVyZVVwbG9h
ZGVyOjpQYXJhbWV0ZXJzIENDVGV4dHVyZVVwZGF0ZVF1ZXVlOjp0YWtlRmlyc3RGdWxsVXBsb2Fk
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGV4dHVyZVVwZGF0ZVF1ZXVlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVRdWV1ZS5oCmluZGV4IGRlNjM3MzgyMWYw
OGE4NDU0YWU2NDg1YjZhZjM3NDgzYzc4MDVlZTYuLmM4ZGNiMTZlMDIzYmJhMTc2YjUwOGUxY2Q5
NGI2OGY2MjdkOTcwZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZVF1ZXVlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlUXVldWUuaApA
QCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhcHBlbmRQYXJ0aWFsVXBsb2FkKFRl
eHR1cmVVcGxvYWRlcjo6UGFyYW1ldGVycyk7CiAgICAgdm9pZCBhcHBlbmRDb3B5KFRleHR1cmVD
b3BpZXI6OlBhcmFtZXRlcnMpOwogCi0gICAgdm9pZCBjbGVhclVwbG9hZHMoKTsKKyAgICB2b2lk
IGNsZWFyVXBsb2Fkc1RvRGVsZXRlZFJlc291cmNlcygpOwogCiAgICAgVGV4dHVyZVVwbG9hZGVy
OjpQYXJhbWV0ZXJzIHRha2VGaXJzdEZ1bGxVcGxvYWQoKTsKICAgICBUZXh0dXJlVXBsb2FkZXI6
OlBhcmFtZXRlcnMgdGFrZUZpcnN0UGFydGlhbFVwbG9hZCgpOwpAQCAtNTYsNiArNTYsNyBAQCBw
dWJsaWM6CiAgICAgYm9vbCBoYXNNb3JlVXBkYXRlcygpIGNvbnN0OwogCiBwcml2YXRlOgorICAg
IHZvaWQgY2xlYXJVcGxvYWRzVG9EZWxldGVkUmVzb3VyY2VzKERlcXVlPFRleHR1cmVVcGxvYWRl
cjo6UGFyYW1ldGVycz4mIGVudHJ5UXVldWUpOwogICAgIERlcXVlPFRleHR1cmVVcGxvYWRlcjo6
UGFyYW1ldGVycz4gbV9mdWxsRW50cmllczsKICAgICBEZXF1ZTxUZXh0dXJlVXBsb2FkZXI6OlBh
cmFtZXRlcnM+IG1fcGFydGlhbEVudHJpZXM7CiAgICAgRGVxdWU8VGV4dHVyZUNvcGllcjo6UGFy
YW1ldGVycz4gbV9jb3B5RW50cmllczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKaW5kZXgg
NmQ3NDM1ZDU2NTQ0YTJhMjI3ZDc4YjQzMjY0N2FlZWE0NTc0ZDAxMy4uMzljZTFmNmU2ODY1ODVm
NWZmODc0MDA5MDE4ZDEyMzIzMWU2OTUzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAK
QEAgLTM1Miw2ICszNTIsMjQgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpvblZTeW5jUGFyYW1ldGVy
c0NoYW5nZWQoZG91YmxlIG1vbm90b25pY1RpbWViYXNlLCBkb3VibGUgaW4KICAgICBtX3NjaGVk
dWxlck9uSW1wbFRocmVhZC0+c2V0VGltZWJhc2VBbmRJbnRlcnZhbChtb25vdG9uaWNUaW1lYmFz
ZSwgaW50ZXJ2YWxJblNlY29uZHMpOwogfQogCit2b2lkIENDVGhyZWFkUHJveHk6OnJlZHVjZUNv
bnRlbnRzVGV4dHVyZXNNZW1vcnlPbkltcGxUaHJlYWQoKQoreworICAgIEFTU0VSVChpc0ltcGxU
aHJlYWQoKSk7CisgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ1RocmVhZFByb3h5OjpyZWR1Y2VD
b250ZW50c1RleHR1cmVzTWVtb3J5T25JbXBsVGhyZWFkIik7CisKKyAgICBpZiAobV9sYXllclRy
ZWVIb3N0LT5yZWR1Y2VDb250ZW50c1RleHR1cmVzTWVtb3J5T25JbXBsVGhyZWFkKG1fbGF5ZXJU
cmVlSG9zdEltcGwtPnJlc291cmNlUHJvdmlkZXIoKSkpIHsKKyAgICAgICAgLy8gQ2xlYXIgYW55
IHBlbmRpbmcgdXBsb2FkcyB0byBkZWxldGVkIHJlc291cmNlcy4KKyAgICAgICAgaWYgKG1fY3Vy
cmVudFRleHR1cmVVcGRhdGVDb250cm9sbGVyT25JbXBsVGhyZWFkKQorICAgICAgICAgICAgbV9j
dXJyZW50VGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXJPbkltcGxUaHJlYWQtPmRpc2NhcmRVcGxvYWRz
VG9EZWxldGVkUmVzb3VyY2VzKCk7CisKKyAgICAgICAgLy8gVGhlIGltcGwgbGF5ZXIgdHJlZSBt
YXkgbm93IGNvbnRhaW4gcmVmZXJlbmNlcyB0byBkZWxldGVkIHJlc291cmNlcywgc28gZGlzYWxs
b3cKKyAgICAgICAgLy8gZHJhd2luZyB1bnRpbCBhIGNvbW1pdCB3aGljaCBhY2tub3dsZWRnZXMg
dGhlIHJlZmVyZW5jZXMgYXJlIHJlbW92ZWQgb2NjdXJzLgorICAgICAgICBtX3Jlc2V0Q29udGVu
dHNUZXh0dXJlc1B1cmdlZEFmdGVyQ29tbWl0T25JbXBsVGhyZWFkID0gZmFsc2U7CisgICAgICAg
IG1fbGF5ZXJUcmVlSG9zdEltcGwtPnNldENvbnRlbnRzVGV4dHVyZXNQdXJnZWQoKTsKKyAgICAg
ICAgc2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKTsKKyAgICB9Cit9CisKIHZvaWQgQ0NUaHJl
YWRQcm94eTo6c2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKQogewogICAgIEFTU0VSVChpc0lt
cGxUaHJlYWQoKSk7CkBAIC00NzUsNyArNDkzLDYgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpzY2hl
ZHVsZWRBY3Rpb25CZWdpbkZyYW1lKCkKICAgICBtX3BlbmRpbmdCZWdpbkZyYW1lUmVxdWVzdCA9
IGFkb3B0UHRyKG5ldyBCZWdpbkZyYW1lQW5kQ29tbWl0U3RhdGUoKSk7CiAgICAgbV9wZW5kaW5n
QmVnaW5GcmFtZVJlcXVlc3QtPm1vbm90b25pY0ZyYW1lQmVnaW5UaW1lID0gbW9ub3RvbmljYWxs
eUluY3JlYXNpbmdUaW1lKCk7CiAgICAgbV9wZW5kaW5nQmVnaW5GcmFtZVJlcXVlc3QtPnNjcm9s
bEluZm8gPSBtX2xheWVyVHJlZUhvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7Ci0gICAg
bV9wZW5kaW5nQmVnaW5GcmFtZVJlcXVlc3QtPmNvbnRlbnRzVGV4dHVyZXNXZXJlRGVsZXRlZCA9
IG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRlbnRzVGV4dHVyZXNQdXJnZWQoKTsKICAgICBtX3Bl
bmRpbmdCZWdpbkZyYW1lUmVxdWVzdC0+bWVtb3J5QWxsb2NhdGlvbkxpbWl0Qnl0ZXMgPSBtX2xh
eWVyVHJlZUhvc3RJbXBsLT5tZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlcygpOwogCiAgICAgbV9t
YWluVGhyZWFkUHJveHktPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJl
YWRQcm94eTo6YmVnaW5GcmFtZSkpOwpAQCAtNTQ1LDggKzU2Miw4IEBAIHZvaWQgQ0NUaHJlYWRQ
cm94eTo6YmVnaW5GcmFtZSgpCiAgICAgaWYgKCFtX2xheWVyVHJlZUhvc3QtPmluaXRpYWxpemVS
ZW5kZXJlcklmTmVlZGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChyZXF1ZXN0LT5j
b250ZW50c1RleHR1cmVzV2VyZURlbGV0ZWQpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZXZp
Y3RBbGxDb250ZW50VGV4dHVyZXMoKTsKKyAgICBpbnQgY29udGVudHNUZXh0dXJlc1B1cmdlQWNr
ID0gMDsKKyAgICBtX2xheWVyVHJlZUhvc3QtPmRlc3Ryb3lDb250ZW50c1RleHR1cmVzRXZpY3Rl
ZEJ5SW1wbFRocmVhZCgmY29udGVudHNUZXh0dXJlc1B1cmdlQWNrKTsKIAogICAgIE93blB0cjxD
Q1RleHR1cmVVcGRhdGVRdWV1ZT4gcXVldWUgPSBhZG9wdFB0cihuZXcgQ0NUZXh0dXJlVXBkYXRl
UXVldWUpOwogICAgIG1fbGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKCoocXVldWUuZ2V0KCkp
LCByZXF1ZXN0LT5tZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlcyk7CkBAIC01NzYsNyArNTkzLDcg
QEAgdm9pZCBDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lKCkKICAgICAgICAgRGVidWdTY29wZWRT
ZXRNYWluVGhyZWFkQmxvY2tlZCBtYWluVGhyZWFkQmxvY2tlZDsKIAogICAgICAgICBDQ0NvbXBs
ZXRpb25FdmVudCBjb21wbGV0aW9uOwotICAgICAgICBDQ1Byb3h5OjppbXBsVGhyZWFkKCktPnBv
c3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFt
ZUNvbXBsZXRlT25JbXBsVGhyZWFkLCAmY29tcGxldGlvbiwgcXVldWUucmVsZWFzZSgpLCByZXF1
ZXN0LT5jb250ZW50c1RleHR1cmVzV2VyZURlbGV0ZWQpKTsKKyAgICAgICAgQ0NQcm94eTo6aW1w
bFRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJv
eHk6OmJlZ2luRnJhbWVDb21wbGV0ZU9uSW1wbFRocmVhZCwgJmNvbXBsZXRpb24sIHF1ZXVlLnJl
bGVhc2UoKSwgY29udGVudHNUZXh0dXJlc1B1cmdlQWNrKSk7CiAgICAgICAgIGNvbXBsZXRpb24u
d2FpdCgpOwogICAgIH0KIApAQCAtNTg0LDcgKzYwMSw3IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6
YmVnaW5GcmFtZSgpCiAgICAgbV9sYXllclRyZWVIb3N0LT5kaWRCZWdpbkZyYW1lKCk7CiB9CiAK
LXZvaWQgQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUNvbXBsZXRlT25JbXBsVGhyZWFkKENDQ29t
cGxldGlvbkV2ZW50KiBjb21wbGV0aW9uLCBQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZVF1ZXVl
PiBxdWV1ZSwgYm9vbCBjb250ZW50c1RleHR1cmVzV2VyZURlbGV0ZWQpCit2b2lkIENDVGhyZWFk
UHJveHk6OmJlZ2luRnJhbWVDb21wbGV0ZU9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVudCog
Y29tcGxldGlvbiwgUGFzc093blB0cjxDQ1RleHR1cmVVcGRhdGVRdWV1ZT4gcXVldWUsIGludCBj
b250ZW50c1RleHR1cmVzRXZpY3Rpb25Db3VudGVyQWNrKQogewogICAgIFRSQUNFX0VWRU5UMCgi
Y2MiLCAiQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUNvbXBsZXRlT25JbXBsVGhyZWFkIik7CiAg
ICAgQVNTRVJUKCFtX2NvbW1pdENvbXBsZXRpb25FdmVudE9uSW1wbFRocmVhZCk7CkBAIC01OTcs
MTIgKzYxNCwxNSBAQCB2b2lkIENDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVDb21wbGV0ZU9uSW1w
bFRocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbgogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgaWYgKCFjb250ZW50c1RleHR1cmVzV2VyZURlbGV0ZWQgJiYgbV9sYXllclRy
ZWVIb3N0SW1wbC0+Y29udGVudHNUZXh0dXJlc1B1cmdlZCgpKSB7Ci0gICAgICAgIC8vIFdlIHB1
cmdlZCB0aGUgY29udGVudCB0ZXh0dXJlcyBvbiB0aGUgaW1wbCB0aHJlYWQgYmV0d2VlbiB0aGUg
dGltZSB3ZQotICAgICAgICAvLyBwb3N0ZWQgdGhlIGJlZ2luRnJhbWUgdGFzayBhbmQgbm93LCBt
ZWFuaW5nIHdlIGhhdmUgYSBidW5jaCBvZgotICAgICAgICAvLyB1cGxvYWRzIHRoYXQgYXJlIG5v
dyBpbnZhbGlkLiBDbGVhciB0aGUgdXBsb2FkcyAodGhleSBhbGwgZ28gdG8KLSAgICAgICAgLy8g
Y29udGVudCB0ZXh0dXJlcyksIGFuZCBraWNrIGFub3RoZXIgY29tbWl0IHRvIGZpbGwgdGhlbSBh
Z2Fpbi4KLSAgICAgICAgcXVldWUtPmNsZWFyVXBsb2FkcygpOworICAgIGlmICghbV9sYXllclRy
ZWVIb3N0LT5jb250ZW50c1RleHR1cmVNYW5hZ2VyKCktPmlzRXZpY3Rpb25Db3VudGVyQWNrVXBU
b0RhdGUoY29udGVudHNUZXh0dXJlc0V2aWN0aW9uQ291bnRlckFjaykpIHsKKyAgICAgICAgVFJB
Q0VfRVZFTlQwKCJjYyIsICJDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQ29tcGxldGVPbkltcGxU
aHJlYWRfcHVyZ2Vfc2luY2VfY29tbWl0Iik7CisgICAgICAgIC8vIFRoZSB1cGxvYWQgcXVldWUg
bWF5IGNvbnRhaW4gcmVmZXJlbmNlcyB0byB0ZXh0dXJlcyB0aGF0IHdlcmUgYXN5bmNocm9ub3Vz
bHkKKyAgICAgICAgLy8gZGVsZXRlZC4gUmVtb3ZlIHRoZW0uCisgICAgICAgIHF1ZXVlLT5jbGVh
clVwbG9hZHNUb0RlbGV0ZWRSZXNvdXJjZXMoKTsKKworICAgICAgICAvLyBUaGVyZSBleGlzdCB0
ZXh0dXJlcyBwdXJnZWQgYnkgdGhlIGltcGwgdGhyZWFkIHRoYXQgdGhlIG1haW4gdGhyZWFkCisg
ICAgICAgIC8vIGRvZXNuJ3Qga25vdyBvZi4gUmVxdWVzdCBhIHJlY29tbWl0LCB3aGljaCB3aWxs
IGluZm9ybSB0aGUgbWFpbiB0aHJlYWQKKyAgICAgICAgLy8gb2YgdGhlIHB1cmdlZCByZXNvdXJj
ZXMuCiAgICAgICAgIHNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCk7CiAgICAgfSBlbHNlCiAg
ICAgICAgIG1fcmVzZXRDb250ZW50c1RleHR1cmVzUHVyZ2VkQWZ0ZXJDb21taXRPbkltcGxUaHJl
YWQgPSB0cnVlOwpAQCAtODk5LDggKzkxOSw3IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6bGF5ZXJU
cmVlSG9zdENsb3NlZE9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvCiB7
CiAgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ1RocmVhZFByb3h5OjpsYXllclRyZWVIb3N0Q2xv
c2VkT25JbXBsVGhyZWFkIik7CiAgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKLSAgICBpZiAo
IW1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRlbnRzVGV4dHVyZXNQdXJnZWQoKSkKLSAgICAgICAg
bV9sYXllclRyZWVIb3N0LT5kZWxldGVDb250ZW50c1RleHR1cmVzT25JbXBsVGhyZWFkKG1fbGF5
ZXJUcmVlSG9zdEltcGwtPnJlc291cmNlUHJvdmlkZXIoKSk7CisgICAgbV9sYXllclRyZWVIb3N0
LT5kZWxldGVBbGxDb250ZW50c1RleHR1cmVzT25JbXBsVGhyZWFkKG1fbGF5ZXJUcmVlSG9zdElt
cGwtPnJlc291cmNlUHJvdmlkZXIoKSk7CiAgICAgbV9pbnB1dEhhbmRsZXJPbkltcGxUaHJlYWQu
Y2xlYXIoKTsKICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLmNsZWFyKCk7CiAgICAgbV9zY2hlZHVs
ZXJPbkltcGxUaHJlYWQuY2xlYXIoKTsKQEAgLTkyMiw4ICs5NDEsNyBAQCB2b2lkIENDVGhyZWFk
UHJveHk6OnJlY3JlYXRlQ29udGV4dE9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29t
cGxldGlvbiwgQwogewogICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NUaHJlYWRQcm94eTo6cmVj
cmVhdGVDb250ZXh0T25JbXBsVGhyZWFkIik7CiAgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsK
LSAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRlbnRzVGV4dHVyZXNQdXJnZWQoKSkK
LSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5kZWxldGVDb250ZW50c1RleHR1cmVzT25JbXBsVGhy
ZWFkKG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJlc291cmNlUHJvdmlkZXIoKSk7CisgICAgbV9sYXll
clRyZWVIb3N0LT5kZWxldGVBbGxDb250ZW50c1RleHR1cmVzT25JbXBsVGhyZWFkKG1fbGF5ZXJU
cmVlSG9zdEltcGwtPnJlc291cmNlUHJvdmlkZXIoKSk7CiAgICAgKnJlY3JlYXRlU3VjY2VlZGVk
ID0gbV9sYXllclRyZWVIb3N0SW1wbC0+aW5pdGlhbGl6ZVJlbmRlcmVyKGFkb3B0UHRyKGNvbnRl
eHRQdHIpLCB0ZXh0dXJlVXBsb2FkZXIpOwogICAgIGlmICgqcmVjcmVhdGVTdWNjZWVkZWQpIHsK
ICAgICAgICAgKmNhcGFiaWxpdGllcyA9IG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJlbmRlcmVyQ2Fw
YWJpbGl0aWVzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKaW5kZXggNzJhYzgyNWNhNmRhMGZh
Yjc1MDYyNWM0OThmYmE0MDcwNjFlM2RlMS4uNmI5NzkxN2FlYjIwNzYwZWMwOWQ2MDQyNDljYjk3
OTFmMmJlODVkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaApAQCAtODEsNiArODEsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCkgT1ZF
UlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCkgT1ZF
UlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHBvc3RBbmltYXRpb25FdmVudHNUb01haW5UaHJlYWRP
bkltcGxUaHJlYWQoUGFzc093blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4sIGRvdWJsZSB3
YWxsQ2xvY2tUaW1lKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVkdWNlQ29udGVudHNU
ZXh0dXJlc01lbW9yeU9uSW1wbFRocmVhZCgpIE9WRVJSSURFOwogCiAgICAgLy8gQ0NTY2hlZHVs
ZXJDbGllbnQgaW1wbGVtZW50YXRpb24KICAgICB2aXJ0dWFsIGJvb2wgY2FuRHJhdygpIE9WRVJS
SURFOwpAQCAtMTA2LDcgKzEwNyw2IEBAIHByaXZhdGU6CiAKICAgICAgICAgZG91YmxlIG1vbm90
b25pY0ZyYW1lQmVnaW5UaW1lOwogICAgICAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4g
c2Nyb2xsSW5mbzsKLSAgICAgICAgYm9vbCBjb250ZW50c1RleHR1cmVzV2VyZURlbGV0ZWQ7CiAg
ICAgICAgIHNpemVfdCBtZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlczsKICAgICB9OwogICAgIE93
blB0cjxCZWdpbkZyYW1lQW5kQ29tbWl0U3RhdGU+IG1fcGVuZGluZ0JlZ2luRnJhbWVSZXF1ZXN0
OwpAQCAtMTI3LDcgKzEyNyw3IEBAIHByaXZhdGU6CiAgICAgICAgIEludFJlY3QgcmVjdDsKICAg
ICB9OwogICAgIHZvaWQgZm9yY2VCZWdpbkZyYW1lT25JbXBsVGhyZWFkKENDQ29tcGxldGlvbkV2
ZW50Kik7Ci0gICAgdm9pZCBiZWdpbkZyYW1lQ29tcGxldGVPbkltcGxUaHJlYWQoQ0NDb21wbGV0
aW9uRXZlbnQqLCBQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZVF1ZXVlPiwgYm9vbCBjb250ZW50
c1RleHR1cmVzV2VyZURlbGV0ZWQpOworICAgIHZvaWQgYmVnaW5GcmFtZUNvbXBsZXRlT25JbXBs
VGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiwgUGFzc093blB0cjxDQ1RleHR1cmVVcGRhdGVRdWV1
ZT4sIGludCBjb250ZW50c1RleHR1cmVzUHVyZ2VBY2spOwogICAgIHZvaWQgYmVnaW5GcmFtZUFi
b3J0ZWRPbkltcGxUaHJlYWQoKTsKICAgICB2b2lkIHJlcXVlc3RSZWFkYmFja09uSW1wbFRocmVh
ZChSZWFkYmFja1JlcXVlc3QqKTsKICAgICB2b2lkIHJlcXVlc3RTdGFydFBhZ2VTY2FsZUFuaW1h
dGlvbk9uSW1wbFRocmVhZChJbnRTaXplIHRhcmdldFBvc2l0aW9uLCBib29sIHVzZUFuY2hvciwg
ZmxvYXQgc2NhbGUsIGRvdWJsZSBkdXJhdGlvblNlYyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCmluZGV4IGQw
OWJjMzY0OWVhZWJlYzQzZDg5ZGQ2MjM3NDMzNmViZjI1NjFjMjQuLjQ4YjIyMGFhOTFlN2VlMmI2
MDQyZTYyMGYwYzVlNDc1YzI4NDNjZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCkBAIC04Nyw2ICs4Nyw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQo
KSBPVkVSUklERSB7IG1fZGlkUmVxdWVzdFJlZHJhdyA9IHRydWU7IH0KICAgICB2aXJ0dWFsIHZv
aWQgc2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKSBPVkVSUklERSB7IG1fZGlkUmVxdWVzdENv
bW1pdCA9IHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgcG9zdEFuaW1hdGlvbkV2ZW50c1RvTWFp
blRocmVhZE9uSW1wbFRocmVhZChQYXNzT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiwg
ZG91YmxlIHdhbGxDbG9ja1RpbWUpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCByZWR1
Y2VDb250ZW50c1RleHR1cmVzTWVtb3J5T25JbXBsVGhyZWFkKCkgT1ZFUlJJREUgeyB9CiAKICAg
ICBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IGNyZWF0ZUxheWVyVHJlZUhvc3QoYm9v
bCBwYXJ0aWFsU3dhcCwgUGFzc093blB0cjxDQ0dyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250
ZXh0LCBQYXNzT3duUHRyPENDTGF5ZXJJbXBsPiByb290UHRyKQogICAgIHsKQEAgLTM3OTEsMTIg
KzM3OTIsNiBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHN1cmZhY2VUZXh0dXJl
Q2FjaGluZ05vUGFydGlhbFN3YXApCiAgICAgfQogfQogCi1URVNUX0YoQ0NMYXllclRyZWVIb3N0
SW1wbFRlc3QsIHJlbGVhc2VDb250ZW50c1RleHR1cmVTaG91bGRUcmlnZ2VyQ29tbWl0KQotewot
ICAgIG1faG9zdEltcGwtPnJlbGVhc2VDb250ZW50c1RleHR1cmVzKCk7Ci0gICAgRVhQRUNUX1RS
VUUobV9kaWRSZXF1ZXN0Q29tbWl0KTsKLX0KLQogc3RydWN0IFJlbmRlclBhc3NDYWNoZUVudHJ5
IHsKICAgICBtdXRhYmxlIE93blB0cjxDQ1JlbmRlclBhc3M+IHJlbmRlclBhc3NQdHI7CiAgICAg
Q0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ1RleHR1cmVVcGRhdGVDb250cm9sbGVyVGVzdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXJUZXN0LmNwcAppbmRl
eCAxMTY1OWY2ZjUyYjhhYmQwYWUzMDc1OWI3YTY2NTQxNDUxMDYwNDNhLi4wMjI3NzExNjhjYzlk
MmI4MWVkMGVlYzYzYTUzNzNkOTkyMzdiYWNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXJUZXN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXJUZXN0LmNw
cApAQCAtODcsMTAgKzg3LDE0IEBAIHByaXZhdGU6CiAKIGNsYXNzIFRleHR1cmVGb3JVcGxvYWRU
ZXN0IDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUgewogcHVibGljOgotICAg
IFRleHR1cmVGb3JVcGxvYWRUZXN0KCkgOiBMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKGFk
b3B0UHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlPigwKSkgeyB9CisgICAgVGV4dHVyZUZvclVwbG9h
ZFRlc3QoKSA6IExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUoYWRvcHRQdHI8Q0NQcmlvcml0
aXplZFRleHR1cmU+KDApKSwgbV9kZWxldGVkKGZhbHNlKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
YmFja2luZ1Jlc291cmNlV2FzRGVsZXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVsZXRlZDsgfQog
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZWN0KENDUmVzb3VyY2VQcm92aWRlciosIGNvbnN0IElu
dFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFNpemUmIGRlc3RPZmZzZXQpIHsgfQotfTsKIAor
ICAgIHZvaWQgc2V0QmFja2luZ1Jlc291cmNlRGVsZXRlZCgpIHsgbV9kZWxldGVkID0gdHJ1ZTsg
fQorcHJpdmF0ZToKKyAgICBib29sIG1fZGVsZXRlZDsKK307CiAKIGNsYXNzIENDVGV4dHVyZVVw
ZGF0ZUNvbnRyb2xsZXJUZXN0IDogcHVibGljIFRlc3QgewogcHVibGljOgpAQCAtMTgzLDI4ICsx
ODcsMzggQEAgcHJvdGVjdGVkOgogICAgICAgICBXZWJDb21wb3NpdG9yOjpzaHV0ZG93bigpOwog
ICAgIH0KIAotICAgIHZvaWQgYXBwZW5kRnVsbFVwbG9hZHNUb1VwZGF0ZVF1ZXVlKGludCBjb3Vu
dCkKKyAgICB2b2lkIGFwcGVuZEZ1bGxVcGxvYWRzT2ZJbmRleGVkVGV4dHVyZVRvVXBkYXRlUXVl
dWUoaW50IGNvdW50LCBpbnQgdGV4dHVyZUluZGV4KQogICAgIHsKICAgICAgICAgbV9mdWxsVXBs
b2FkQ291bnRFeHBlY3RlZCArPSBjb3VudDsKICAgICAgICAgbV90b3RhbFVwbG9hZENvdW50RXhw
ZWN0ZWQgKz0gY291bnQ7CiAKICAgICAgICAgY29uc3QgSW50UmVjdCByZWN0KDAsIDAsIDMwMCwg
MTUwKTsKLSAgICAgICAgY29uc3QgVGV4dHVyZVVwbG9hZGVyOjpQYXJhbWV0ZXJzIHVwbG9hZCA9
IHsgJm1fdGV4dHVyZSwgcmVjdCwgSW50U2l6ZSgpIH07CisgICAgICAgIGNvbnN0IFRleHR1cmVV
cGxvYWRlcjo6UGFyYW1ldGVycyB1cGxvYWQgPSB7ICZtX3RleHR1cmVzW3RleHR1cmVJbmRleF0s
IHJlY3QsIEludFNpemUoKSB9OwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBp
KyspCiAgICAgICAgICAgICBtX3F1ZXVlLT5hcHBlbmRGdWxsVXBsb2FkKHVwbG9hZCk7CiAgICAg
fQogCi0gICAgdm9pZCBhcHBlbmRQYXJ0aWFsVXBsb2Fkc1RvVXBkYXRlUXVldWUoaW50IGNvdW50
KQorICAgIHZvaWQgYXBwZW5kRnVsbFVwbG9hZHNUb1VwZGF0ZVF1ZXVlKGludCBjb3VudCkKKyAg
ICB7CisgICAgICAgIGFwcGVuZEZ1bGxVcGxvYWRzT2ZJbmRleGVkVGV4dHVyZVRvVXBkYXRlUXVl
dWUoY291bnQsIDApOworICAgIH0KKworICAgIHZvaWQgYXBwZW5kUGFydGlhbFVwbG9hZHNPZklu
ZGV4ZWRUZXh0dXJlVG9VcGRhdGVRdWV1ZShpbnQgY291bnQsIGludCB0ZXh0dXJlSW5kZXgpCiAg
ICAgewogICAgICAgICBtX3BhcnRpYWxDb3VudEV4cGVjdGVkICs9IGNvdW50OwogICAgICAgICBt
X3RvdGFsVXBsb2FkQ291bnRFeHBlY3RlZCArPSBjb3VudDsKIAogICAgICAgICBjb25zdCBJbnRS
ZWN0IHJlY3QoMCwgMCwgMTAwLCAxMDApOwotICAgICAgICBjb25zdCBUZXh0dXJlVXBsb2FkZXI6
OlBhcmFtZXRlcnMgdXBsb2FkID0geyAmbV90ZXh0dXJlLCByZWN0LCBJbnRTaXplKCkgfTsKKyAg
ICAgICAgY29uc3QgVGV4dHVyZVVwbG9hZGVyOjpQYXJhbWV0ZXJzIHVwbG9hZCA9IHsgJm1fdGV4
dHVyZXNbdGV4dHVyZUluZGV4XSwgcmVjdCwgSW50U2l6ZSgpIH07CiAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKICAgICAgICAgICAgIG1fcXVldWUtPmFwcGVuZFBhcnRp
YWxVcGxvYWQodXBsb2FkKTsKICAgICB9CiAKKyAgICB2b2lkIGFwcGVuZFBhcnRpYWxVcGxvYWRz
VG9VcGRhdGVRdWV1ZShpbnQgY291bnQpCisgICAgeworICAgICAgICBhcHBlbmRQYXJ0aWFsVXBs
b2Fkc09mSW5kZXhlZFRleHR1cmVUb1VwZGF0ZVF1ZXVlKGNvdW50LCAwKTsKKyAgICB9CisKICAg
ICB2b2lkIHNldE1heFVwbG9hZENvdW50UGVyVXBkYXRlKGludCBjb3VudCkKICAgICB7CiAgICAg
ICAgIG1fbWF4VXBsb2FkQ291bnRQZXJVcGRhdGUgPSBjb3VudDsKQEAgLTIxNSw3ICsyMjksNyBA
QCBwcm90ZWN0ZWQ6CiAgICAgT3duUHRyPENDR3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7CiAg
ICAgT3duUHRyPENDUmVzb3VyY2VQcm92aWRlcj4gbV9yZXNvdXJjZVByb3ZpZGVyOwogICAgIE93
blB0cjxDQ1RleHR1cmVVcGRhdGVRdWV1ZT4gbV9xdWV1ZTsKLSAgICBUZXh0dXJlRm9yVXBsb2Fk
VGVzdCBtX3RleHR1cmU7CisgICAgVGV4dHVyZUZvclVwbG9hZFRlc3QgbV90ZXh0dXJlc1s0XTsK
ICAgICBGYWtlVGV4dHVyZUNvcGllciBtX2NvcGllcjsKICAgICBUZXh0dXJlVXBsb2FkZXJGb3JV
cGxvYWRUZXN0IG1fdXBsb2FkZXI7CiAKQEAgLTY4NSw0ICs2OTksMzcgQEAgVEVTVF9GKENDVGV4
dHVyZVVwZGF0ZUNvbnRyb2xsZXJUZXN0LCBVcGRhdGVzQ29tcGxldGVJbkZpbml0ZVRpbWUpCiAg
ICAgRVhQRUNUX0VRKDIsIG1fbnVtVG90YWxVcGxvYWRzKTsKIH0KIAorVEVTVF9GKENDVGV4dHVy
ZVVwZGF0ZUNvbnRyb2xsZXJUZXN0LCBBc3luY0RlbGV0aW9uKQoreworICAgIGFwcGVuZEZ1bGxV
cGxvYWRzT2ZJbmRleGVkVGV4dHVyZVRvVXBkYXRlUXVldWUoMSwgMCk7CisgICAgYXBwZW5kUGFy
dGlhbFVwbG9hZHNPZkluZGV4ZWRUZXh0dXJlVG9VcGRhdGVRdWV1ZSgxLCAxKTsKKyAgICBhcHBl
bmRGdWxsVXBsb2Fkc09mSW5kZXhlZFRleHR1cmVUb1VwZGF0ZVF1ZXVlKDEsIDIpOworICAgIGFw
cGVuZFBhcnRpYWxVcGxvYWRzT2ZJbmRleGVkVGV4dHVyZVRvVXBkYXRlUXVldWUoMSwgMyk7Cisg
ICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CisKKyAgICBtX3F1ZXVlLT5j
bGVhclVwbG9hZHNUb0RlbGV0ZWRSZXNvdXJjZXMoKTsKKyAgICBFWFBFQ1RfRVEoMnUsIG1fcXVl
dWUtPmZ1bGxVcGxvYWRTaXplKCkpOworICAgIEVYUEVDVF9FUSgydSwgbV9xdWV1ZS0+cGFydGlh
bFVwbG9hZFNpemUoKSk7CisKKyAgICBtX3RleHR1cmVzWzBdLnNldEJhY2tpbmdSZXNvdXJjZURl
bGV0ZWQoKTsKKyAgICBtX3F1ZXVlLT5jbGVhclVwbG9hZHNUb0RlbGV0ZWRSZXNvdXJjZXMoKTsK
KyAgICBFWFBFQ1RfRVEoMXUsIG1fcXVldWUtPmZ1bGxVcGxvYWRTaXplKCkpOworICAgIEVYUEVD
VF9FUSgydSwgbV9xdWV1ZS0+cGFydGlhbFVwbG9hZFNpemUoKSk7CisKKyAgICBtX3RleHR1cmVz
WzNdLnNldEJhY2tpbmdSZXNvdXJjZURlbGV0ZWQoKTsKKyAgICBtX3F1ZXVlLT5jbGVhclVwbG9h
ZHNUb0RlbGV0ZWRSZXNvdXJjZXMoKTsKKyAgICBFWFBFQ1RfRVEoMXUsIG1fcXVldWUtPmZ1bGxV
cGxvYWRTaXplKCkpOworICAgIEVYUEVDVF9FUSgxdSwgbV9xdWV1ZS0+cGFydGlhbFVwbG9hZFNp
emUoKSk7CisKKyAgICBtX3RleHR1cmVzWzJdLnNldEJhY2tpbmdSZXNvdXJjZURlbGV0ZWQoKTsK
KyAgICBtX3F1ZXVlLT5jbGVhclVwbG9hZHNUb0RlbGV0ZWRSZXNvdXJjZXMoKTsKKyAgICBFWFBF
Q1RfRVEoMHUsIG1fcXVldWUtPmZ1bGxVcGxvYWRTaXplKCkpOworICAgIEVYUEVDVF9FUSgxdSwg
bV9xdWV1ZS0+cGFydGlhbFVwbG9hZFNpemUoKSk7CisKKyAgICBtX3RleHR1cmVzWzFdLnNldEJh
Y2tpbmdSZXNvdXJjZURlbGV0ZWQoKTsKKyAgICBtX3F1ZXVlLT5jbGVhclVwbG9hZHNUb0RlbGV0
ZWRSZXNvdXJjZXMoKTsKKyAgICBFWFBFQ1RfRVEoMHUsIG1fcXVldWUtPmZ1bGxVcGxvYWRTaXpl
KCkpOworICAgIEVYUEVDVF9FUSgwdSwgbV9xdWV1ZS0+cGFydGlhbFVwbG9hZFNpemUoKSk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162345</attachid>
            <date>2012-09-05 15:02:30 -0700</date>
            <delta_ts>2012-09-05 16:04:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95057-20120905150212.patch</filename>
            <type>text/plain</type>
            <size>46862</size>
            <attacher name="Christopher Cameron">ccameron</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3NTMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzc3NjFkMGY5MGUzZDRj
MWJjMmY4NDc0MTZmZDVlODdjYmI5OWI4Zi4uZWZiYTg1NTc2OWE3ZTJkY2U0NzZmNGFjOTlmNDU5
NDExZTUzOThjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDEyLTA4LTMxICBDaHJp
c3RvcGhlciBDYW1lcm9uICA8Y2NhbWVyb25AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJv
bWl1bV0gQWxsb3cgaW1wbC10aHJlYWQgZGVsZXRpb24gb2Ygb25seSBzb21lIHJlc291cmNlcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTUwNTcKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUb3dhcmRzIGFs
bG93aW5nIHRoZSBpbXBsIHRocmVhZCB0byBkZWxldGUganVzdCBzb21lIHJlc291cmNlcyAoYXMK
KyAgICAgICAgb3Bwb3NlZCB0byBkZWxldGluZyBhbGwgcmVzb3VyY2VzKS4KKworICAgICAgICBE
byBpbXBsLXRocmVhZCBkZWxldGlvbiB0aHJvdWdoIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdl
ciBpbnN0ZWFkIG9mCisgICAgICAgIENDUmVzb3VyY2VQcm92aWRlci4gSW4gc3Vic2VxdWVudCBj
aGFuZ2VzIHRoZSBpbXBsIHRocmVhZCB3aWxsIGJlIGFibGUKKyAgICAgICAgdG8gc2V0IGEgdGhy
ZXNob2xkIGZvciB3aGF0IHRvIGRlbGV0ZSkuIEFkZCBhIHNldCBvZiB0ZXh0dXJlcyB0aGF0Cisg
ICAgICAgIGhhdmUgYmVlbiBkZWxldGVkIGJ5IHRoZSBpbXBsIHRocmVhZCwgYnV0IGhhdmUgbm90
IGhhZCB0aGVpciByZWxhdGVkCisgICAgICAgIHN0cnVjdHVyZXMgY2xlYXJlZCBieSB0aGUgbWFp
biB0aHJlYWQgeWV0LgorCisgICAgICAgIEFsbG93IG11bHRpcGxlIHRleHR1cmUgcHVyZ2VzIHRv
IG9jY3VyIHdpdGhvdXQgYSBjb21taXQgYmV0d2VlbiB0aGVtLgorICAgICAgICBJbiBDQ1RocmVh
ZFByb3h5LCBtYWtlIHRoZSBhY2tub3dsZWRnZW1lbnQgb2YgdGV4dHVyZSBkZWxldGlvbiBiZSBh
bgorICAgICAgICBpbnRlZ2VyIGNvdW50ZXIgaW5zdGVhZCBvZiBhIGJvb2wsIGJlY2F1c2Ugd2Ug
bWF5IGhhdmUgbXVsdGlwbGUKKyAgICAgICAgbm90LXlldC1hY2tub3dsZWRnZWQgcHVyZ2VzLiBS
ZW1vdmUgbWFueSBpbnN0YW5jZXMgd2hlcmUgdGV4dHVyZSBwdXJnZXMKKyAgICAgICAgd2VyZSBh
dm9pZGVkIHdoZW4gdGhlcmUgd2FzIGFuIG91dHN0YW5kaW5nIHRleHR1cmUgcHVyZ2UuCisKKyAg
ICAgICAgQWRkIHRoZSBhYmlsaXR5IHRvIGNsZWFyIG9ubHkgdGhlIHJlZmVyZW5jZXMgdG8gZGVs
ZXRlZCB0ZXh0dXJlcyBmcm9tCisgICAgICAgIHRoZSB0ZXh0dXJlIHVwbG9hZCBxdWV1ZS4KKwor
ICAgICAgICBBZGQgYXNzZXJ0aW9ucyB0aGF0IHJlc291cmNlcyBiZSBmcmVlZCB0byBDQ1ByaW9y
aXRpemVkVGV4dHVyZU1hbmFnZXIuCisKKyAgICAgICAgTmV3IHRlc3QgQ0NUZXh0dXJlVXBkYXRl
Q29udHJvbGxlclRlc3RfQXN5bmNEZWxldGlvbgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRU
ZXh0dXJlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1By
aW9yaXRpemVkVGV4dHVyZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5jcHA6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5j
cHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJl
YWRQcm94eS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4
dHVyZVVwZGF0ZUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVRdWV1ZS5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlUXVldWUuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNw
cDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5
Lmg6CisKIDIwMTItMDktMDMgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAg
ICBQYXJ0IDEgb2YgcmVtb3ZpbmcgUGxhdGZvcm1TdHJpbmcuaCwgbW92ZSByZW1haW5pbmcgZnVu
Y3Rpb25zIHRvIG5ldyBob21lcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBmMjM0ZTdi
MTc4MTNjYTAwMThlYjVmZmRlYTVlMWMzYzE1MmZlNGFkLi4zMjgyODk3NWRmYjg0OTFiOGUxNGVm
ODdiMDViZGNiYjRiYmFiZDc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDIzIEBACisyMDEyLTA4LTMxICBDaHJpc3RvcGhlciBDYW1lcm9uICA8Y2NhbWVyb25AY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQWxsb3cgaW1wbC10aHJlYWQgZGVsZXRpb24g
b2Ygb25seSBzb21lIHJlc291cmNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9OTUwNTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBJbiBDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgcmVtb3ZlIHRoZSB0ZXN0
CisgICAgICAgIHJlbGVhc2VDb250ZW50c1RleHR1cmVTaG91bGRUcmlnZ2VyQ29tbWl0IGJlY2F1
c2UgaXQgaXMgbm8gbG9uZ2VyIHZhbGlkCisgICAgICAgIGFuZCBpcyByZWR1bmRhbnQuICBBIHJl
bGVhc2VDb250ZW50c1RleHR1cmUgd2lsbCBvbmx5IHRyaWdnZXIgYSBjb21taXQKKyAgICAgICAg
aWYgdGhlIHJlbGVhc2VDb250ZW50c1RleHR1cmUgYWN0dWFsbHkgZGVsZXRlcyBhbnkgdGV4dHVy
ZXMsIGFuZAorICAgICAgICBDQ0xheWVyVHJlZUhvc3RUZXN0RXZpY3RUZXh0dXJlcyBhbHJlYWR5
IHRlc3RzIHRoYXQgdGhlIGNvbW1pdCBpcworICAgICAgICBpc3N1ZWQgdXBvbiBldmljdGlvbi4K
KworICAgICAgICBBZGQgQ0NUZXh0dXJlVXBkYXRlQ29udHJvbGxlclRlc3RfQXN5bmNEZWxldGlv
biB0ZXN0IHRvIHZhbGlkYXRlIG5ldworICAgICAgICB0ZXh0dXJlIHVwbG9hZCBxdWV1ZSBiZWhh
dmlvci4KKworICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcDoKKyAg
ICAgICAgKiB0ZXN0cy9DQ1RleHR1cmVVcGRhdGVDb250cm9sbGVyVGVzdC5jcHA6CisKIDIwMTIt
MDktMDQgIFRpZW4tUmVuIENoZW4gIDx0cmNoZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtj
aHJvbWl1bV0gUmVuYW1lIFdlYlZpZXdDbGllbnQ6OmhhbmRsZURpc2FtYmlndWF0aW9uUG9wdXAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyVGV4dHVyZVVwZGF0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaAppbmRleCAxYWQ2MWM4ZDhjYTQ2NTNjMWYyMGI4
Y2VlNDI2MmM3NzFlNGJlMjFjLi43NGY0YzVkYTU0OWRjZDY2NWI0NjkzYjg0YTFhZTc3YWIxMzQz
Nzc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclRleHR1cmVVcGRhdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oCkBAIC00OSw2ICs0OSw3IEBAIHB1
YmxpYzoKIAogICAgICAgICBDQ1ByaW9yaXRpemVkVGV4dHVyZSogdGV4dHVyZSgpIHsgcmV0dXJu
IG1fdGV4dHVyZS5nZXQoKTsgfQogICAgICAgICB2b2lkIHN3YXBUZXh0dXJlV2l0aChPd25QdHI8
Q0NQcmlvcml0aXplZFRleHR1cmU+JiB0ZXh0dXJlKSB7IG1fdGV4dHVyZS5zd2FwKHRleHR1cmUp
OyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBiYWNraW5nUmVzb3VyY2VXYXNEZWxldGVkKCkgY29u
c3QgeyByZXR1cm4gbV90ZXh0dXJlLT5iYWNraW5nUmVzb3VyY2VXYXNEZWxldGVkKCk7IH0KICAg
ICAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVSZWN0KGNvbnN0IEludFJlY3QmIC8qIHNvdXJjZVJl
Y3QgKi8sIENDUmVuZGVyaW5nU3RhdHMmKSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZVJlY3QoQ0NSZXNvdXJjZVByb3ZpZGVyKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29u
c3QgSW50U2l6ZSYgZGVzdE9mZnNldCkgPSAwOwogICAgIHByb3RlY3RlZDoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IDA4NDc0YTFkMzdlZDE3ZDZjZDNlOTk2OTMyY2JjYzVh
NmE1ODlkMTAuLmRkMTJhY2QzMDhjMzY2NjgxMTZmZDQxOGIzMzE0N2JjZjg1YWQ4MGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtMTkzLDEzICsxOTMsMjEgQEAgQ0NMYXll
clRyZWVIb3N0OjpSZWNyZWF0ZVJlc3VsdCBDQ0xheWVyVHJlZUhvc3Q6OnJlY3JlYXRlQ29udGV4
dCgpCiAgICAgcmV0dXJuIFJlY3JlYXRlRmFpbGVkQW5kR2F2ZVVwOwogfQogCi12b2lkIENDTGF5
ZXJUcmVlSG9zdDo6ZGVsZXRlQ29udGVudHNUZXh0dXJlc09uSW1wbFRocmVhZChDQ1Jlc291cmNl
UHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIpCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZGVsZXRl
QWxsQ29udGVudHNUZXh0dXJlc09uSW1wbFRocmVhZChDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291
cmNlUHJvdmlkZXIpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAg
ICBpZiAobV9yZW5kZXJlckluaXRpYWxpemVkKQogICAgICAgICBtX2NvbnRlbnRzVGV4dHVyZU1h
bmFnZXItPmNsZWFyQWxsTWVtb3J5KHJlc291cmNlUHJvdmlkZXIpOwogfQogCitib29sIENDTGF5
ZXJUcmVlSG9zdDo6cmVkdWNlQ29udGVudHNUZXh0dXJlc01lbW9yeU9uSW1wbFRocmVhZChDQ1Jl
c291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIpCit7CisgICAgQVNTRVJUKENDUHJveHk6
OmlzSW1wbFRocmVhZCgpKTsKKyAgICBpZiAobV9yZW5kZXJlckluaXRpYWxpemVkKQorICAgICAg
ICByZXR1cm4gbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5yZWR1Y2VNZW1vcnlPbkltcGxUaHJl
YWQocmVzb3VyY2VQcm92aWRlcik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIENDTGF5
ZXJUcmVlSG9zdDo6YWNxdWlyZUxheWVyVGV4dHVyZXMoKQogewogICAgIEFTU0VSVChDQ1Byb3h5
Ojppc01haW5UaHJlYWQoKSk7CkBAIC00MTQsMTEgKzQyMiwxMiBAQCB2b2lkIENDTGF5ZXJUcmVl
SG9zdDo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCiAgICAgbV9wcm94eS0+c2V0VmlzaWJsZSh2
aXNpYmxlKTsKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmV2aWN0QWxsQ29udGVudFRleHR1
cmVzKCkKKwordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmRlc3Ryb3lDb250ZW50c1RleHR1cmVzRXZp
Y3RlZEJ5SW1wbFRocmVhZChpbnQqIHB1cmdlQ291bnRlckFjaykKIHsKICAgICBBU1NFUlQoQ0NQ
cm94eTo6aXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVChtX2NvbnRlbnRzVGV4dHVyZU1hbmFn
ZXIuZ2V0KCkpOwotICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+YWxsQmFja2luZ1RleHR1
cmVzV2VyZURlbGV0ZWQoKTsKKyAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPmRlc3Ryb3lF
dmljdGVkQmFja2luZ3MocHVyZ2VDb3VudGVyQWNrKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhv
c3Q6OnN0YXJ0UGFnZVNjYWxlQW5pbWF0aW9uKGNvbnN0IEludFNpemUmIHRhcmdldFBvc2l0aW9u
LCBib29sIHVzZUFuY2hvciwgZmxvYXQgc2NhbGUsIGRvdWJsZSBkdXJhdGlvblNlYykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggNzQyNzg4YzcwNjc4M2JiNjM4ZjUzZDYyNmYyZGM1
Y2MxZTNhNTgwYS4uZGMyNWFkNDFmOTVjNTU5NDA5MjFiOTc0N2RiOGYwYTRkYzMyZThlMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTE1NCw3ICsxNTQsNiBAQCBwdWJsaWM6CiAg
ICAgUmVjcmVhdGVSZXN1bHQgcmVjcmVhdGVDb250ZXh0KCk7CiAgICAgdm9pZCBkaWRDb21taXRB
bmREcmF3RnJhbWUoKSB7IG1fY2xpZW50LT5kaWRDb21taXRBbmREcmF3RnJhbWUoKTsgfQogICAg
IHZvaWQgZGlkQ29tcGxldGVTd2FwQnVmZmVycygpIHsgbV9jbGllbnQtPmRpZENvbXBsZXRlU3dh
cEJ1ZmZlcnMoKTsgfQotICAgIHZvaWQgZGVsZXRlQ29udGVudHNUZXh0dXJlc09uSW1wbFRocmVh
ZChDQ1Jlc291cmNlUHJvdmlkZXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgYWNxdWlyZUxheWVyVGV4
dHVyZXMoKTsKICAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIHdlIHNob3VsZCBhYm9ydCB0aGlzIGZy
YW1lIGR1ZSB0byBpbml0aWFsaXphdGlvbiBmYWlsdXJlLgogICAgIGJvb2wgaW5pdGlhbGl6ZVJl
bmRlcmVySWZOZWVkZWQoKTsKQEAgLTIxMiwxMSArMjExLDE2IEBAIHB1YmxpYzoKIAogICAgIEND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlciogY29udGVudHNUZXh0dXJlTWFuYWdlcigpIGNvbnN0
OwogCi0gICAgLy8gVGhpcyB3aWxsIGNhdXNlIGNvbnRlbnRzIHRleHR1cmUgbWFuYWdlciB0byBl
dmljdCBhbGwgdGV4dHVyZXMsIGJ1dAotICAgIC8vIHdpdGhvdXQgZGVsZXRpbmcgdGhlbS4gVGhp
cyBoYXBwZW5zIGFmdGVyIGFsbCBjb250ZW50IHRleHR1cmVzIGhhdmUKLSAgICAvLyBhbHJlYWR5
IGJlZW4gZGVsZXRlZCBvbiBpbXBsLCBhZnRlciBnZXR0aW5nIGEgMCBhbGxvY2F0aW9uIGxpbWl0
LgotICAgIC8vIFNldCBkdXJpbmcgYSBjb21taXQsIGJ1dCBiZWZvcmUgdXBkYXRlTGF5ZXJzLgot
ICAgIHZvaWQgZXZpY3RBbGxDb250ZW50VGV4dHVyZXMoKTsKKyAgICB2b2lkIGRlbGV0ZUFsbENv
bnRlbnRzVGV4dHVyZXNPbkltcGxUaHJlYWQoQ0NSZXNvdXJjZVByb3ZpZGVyKik7CisKKyAgICAv
LyBUaGlzIHdpbGwgY2F1c2UgY29udGVudHMgdGV4dHVyZSBtYW5hZ2VyIHRvIGZyZWUgc29tZSBy
ZXNvdXJjZXMgdXNlZAorICAgIC8vIGJ5IHRleHR1cmVzLCBidXQgd2lsbCBub3QgZGVsZXRlIHRo
ZSB0ZXh0dXJlIGJhY2tpbmdzIG9iamVjdHMuIFRoZQorICAgIC8vIGZ1bmN0aW9uIHJldHVybnMg
dHJ1ZSBpZiBzb21lIHJlc291cmNlcyB3ZXJlIGluZGVlZCBkZXN0cm95ZWQuCisgICAgYm9vbCBy
ZWR1Y2VDb250ZW50c1RleHR1cmVzTWVtb3J5T25JbXBsVGhyZWFkKENDUmVzb3VyY2VQcm92aWRl
ciopOworCisgICAgLy8gVGhpcyB3aWxsIGRlc3Ryb3kgdGhlIGJhY2tpbmdzIHRoYXQgaGFkIHRo
ZWlyIEdQVSByZXNvdXJjZXMgZnJlZWQKKyAgICAvLyBieSBkZWxldGVDb250ZW50c1RleHR1cmVz
UmVzb3VyY2VzT25JbXBsVGhyZWFkLgorICAgIHZvaWQgZGVzdHJveUNvbnRlbnRzVGV4dHVyZXNF
dmljdGVkQnlJbXBsVGhyZWFkKGludCogcHVyZ2VDb3VudGVyQWNrKTsKIAogICAgIGJvb2wgdmlz
aWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaWJsZTsgfQogICAgIHZvaWQgc2V0VmlzaWJsZShi
b29sKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXggZmNkZDI4
YmNlODY1YjVlNjAxZGY1MThiNWUzYzY4MTk3MzQ1N2IxYy4uZGFhNDgxYTRiYjAyOGIxNzE3NjNl
MTM4ZjljMTM3NzFlNGQxNmMyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bC5jcHAKQEAgLTUyNSwxMSArNTI1LDcgQEAgYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcmVw
YXJlVG9EcmF3KEZyYW1lRGF0YSYgZnJhbWUpCiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6
cmVsZWFzZUNvbnRlbnRzVGV4dHVyZXMoKQogewotICAgIGlmIChtX2NvbnRlbnRzVGV4dHVyZXNQ
dXJnZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3Jlc291cmNlUHJvdmlkZXItPmRlbGV0ZU93
bmVkUmVzb3VyY2VzKENDUmVuZGVyZXI6OkNvbnRlbnRQb29sKTsKLSAgICBtX2NvbnRlbnRzVGV4
dHVyZXNQdXJnZWQgPSB0cnVlOwotICAgIG1fY2xpZW50LT5zZXROZWVkc0NvbW1pdE9uSW1wbFRo
cmVhZCgpOworICAgIG1fY2xpZW50LT5yZWR1Y2VDb250ZW50c1RleHR1cmVzTWVtb3J5T25JbXBs
VGhyZWFkKCk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TWVtb3J5QWxsb2Nh
dGlvbkxpbWl0Qnl0ZXMoc2l6ZV90IGJ5dGVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5oCmluZGV4IGIzZDA3YWMyOWMwYTgwNzhmMDE3YzhlMTg5MzBiYTAwNzI5MDYzODQuLjI1
NDJmODBkZjk3ZTZmMTUyOGUyM2ExMDk2YjhmNzU5MTMyY2NkYmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmgKQEAgLTYwLDYgKzYwLDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBzZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgc2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHBv
c3RBbmltYXRpb25FdmVudHNUb01haW5UaHJlYWRPbkltcGxUaHJlYWQoUGFzc093blB0cjxDQ0Fu
aW1hdGlvbkV2ZW50c1ZlY3Rvcj4sIGRvdWJsZSB3YWxsQ2xvY2tUaW1lKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHJlZHVjZUNvbnRlbnRzVGV4dHVyZXNNZW1vcnlPbkltcGxUaHJlYWQoKSA9IDA7
CiB9OwogCiAvLyBDQ0xheWVyVHJlZUhvc3RJbXBsIG93bnMgdGhlIENDTGF5ZXJJbXBsIHRyZWUg
YXMgd2VsbCBhcyBhc3NvY2lhdGVkIHJlbmRlcmluZyBzdGF0ZQpAQCAtMTU5LDcgKzE2MCw3IEBA
IHB1YmxpYzoKICAgICBpbnQgc291cmNlRnJhbWVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX3Nv
dXJjZUZyYW1lTnVtYmVyOyB9CiAgICAgdm9pZCBzZXRTb3VyY2VGcmFtZU51bWJlcihpbnQgZnJh
bWVOdW1iZXIpIHsgbV9zb3VyY2VGcmFtZU51bWJlciA9IGZyYW1lTnVtYmVyOyB9CiAKLSAgICBi
b29sIGNvbnRlbnRzVGV4dHVyZXNQdXJnZWQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzVGV4
dHVyZXNQdXJnZWQ7IH0KKyAgICB2b2lkIHNldENvbnRlbnRzVGV4dHVyZXNQdXJnZWQoKSB7IG1f
Y29udGVudHNUZXh0dXJlc1B1cmdlZCA9IHRydWU7IH0KICAgICB2b2lkIHJlc2V0Q29udGVudHNU
ZXh0dXJlc1B1cmdlZCgpIHsgbV9jb250ZW50c1RleHR1cmVzUHVyZ2VkID0gZmFsc2U7IH0KICAg
ICBzaXplX3QgbWVtb3J5QWxsb2NhdGlvbkxpbWl0Qnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX21l
bW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzOyB9CiAKQEAgLTI4Miw2ICsyODMsMTAgQEAgcHJpdmF0
ZToKICAgICBJbnRTaXplIG1fZGV2aWNlVmlld3BvcnRTaXplOwogICAgIGZsb2F0IG1fZGV2aWNl
U2NhbGVGYWN0b3I7CiAgICAgYm9vbCBtX3Zpc2libGU7CisKKyAgICAvLyBTZXQgd2hlbiB0aGUg
aW1wbCB0aHJlYWQgZGVsZXRlcyB0ZXh0dXJlcywgdW4tc2V0IHdoZW4gdGhlIGltcGwncyBsYXll
ciB0cmVlCisgICAgLy8gaXMga25vd24gdG8gbm90IHJlZmVyZW5jZSBhbnkgZGVsZXRlZCByZXNv
dXJjZXMuIFVzZWQgdG8gcHJldmVudCBkcmF3aW5nCisgICAgLy8gd2l0aCBkZWxldGVkIHJlc291
cmNlcy4KICAgICBib29sIG1fY29udGVudHNUZXh0dXJlc1B1cmdlZDsKICAgICBzaXplX3QgbV9t
ZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlczsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXpl
ZFRleHR1cmUuY3BwCmluZGV4IGQ5ZjY4YWYwYWUwYjk5MjgxMzNhMjMyZDc0MTY5MjQ3NjEyMDZk
ZGIuLjE0OGQ1ZDk3MGVjMjAwNWZjNTBhMzdkZDdjNTJiM2Y4ZTA3NDRjNTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6
ZWRUZXh0dXJlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZS5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lu
Y2x1ZGUgIkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5oIgogI2luY2x1ZGUgIkNDUHJpb3Jp
dHlDYWxjdWxhdG9yLmgiCisjaW5jbHVkZSAiQ0NQcm94eS5oIgogI2luY2x1ZGUgPGFsZ29yaXRo
bT4KIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKQEAgLTExMCw5ICsxMTEsMTcgQEAgdm9pZCBDQ1By
aW9yaXRpemVkVGV4dHVyZTo6dXBsb2FkKENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92
aWRlciwKICAgICBpZiAobV9pc0Fib3ZlUHJpb3JpdHlDdXRvZmYpCiAgICAgICAgIGFjcXVpcmVC
YWNraW5nVGV4dHVyZShyZXNvdXJjZVByb3ZpZGVyKTsKICAgICBBU1NFUlQobV9iYWNraW5nKTsK
KyAgICBBU1NFUlQoIWJhY2tpbmdSZXNvdXJjZVdhc0RlbGV0ZWQoKSk7CiAgICAgcmVzb3VyY2VQ
cm92aWRlci0+dXBsb2FkKHJlc291cmNlSWQoKSwgaW1hZ2UsIGltYWdlUmVjdCwgc291cmNlUmVj
dCwgZGVzdE9mZnNldCk7CiB9CiAKK2Jvb2wgQ0NQcmlvcml0aXplZFRleHR1cmU6OmJhY2tpbmdS
ZXNvdXJjZVdhc0RlbGV0ZWQoKSBjb25zdAoreworICAgIGlmIChtX2JhY2tpbmcpCisgICAgICAg
IHJldHVybiBtX2JhY2tpbmctPnJlc291cmNlRGVsZXRlZCgpOworICAgIHJldHVybiBmYWxzZTsK
K30KKwogdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZTo6bGluayhCYWNraW5nKiBiYWNraW5nKQog
ewogICAgIEFTU0VSVChiYWNraW5nKTsKQEAgLTEzOSw0ICsxNDgsMjUgQEAgdm9pZCBDQ1ByaW9y
aXRpemVkVGV4dHVyZTo6c2V0VG9TZWxmTWFuYWdlZE1lbW9yeVBsYWNlaG9sZGVyKHNpemVfdCBi
eXRlcykKICAgICBtX2J5dGVzID0gYnl0ZXM7CiB9CiAKK0NDUmVzb3VyY2VQcm92aWRlcjo6UmVz
b3VyY2VJZCBDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZzo6aWQoKQoreworICAgIEFTU0VS
VChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgcmV0dXJuIG1fdGV4dHVyZS5pZCgpOwor
fQorCitib29sIENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nOjpyZXNvdXJjZURlbGV0ZWQo
KSBjb25zdAoreworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgcmV0
dXJuIG1fcmVzb3VyY2VEZWxldGVkOworfQorCit2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpC
YWNraW5nOjpkZWxldGVSZXNvdXJjZShDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlk
ZXIpCit7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKyAgICBBU1NFUlQo
cmVzb3VyY2VQcm92aWRlcik7CisgICAgQVNTRVJUKCFtX3Jlc291cmNlRGVsZXRlZCk7CisgICAg
cmVzb3VyY2VQcm92aWRlci0+ZGVsZXRlUmVzb3VyY2UobV90ZXh0dXJlLmlkKCkpOworICAgIG1f
cmVzb3VyY2VEZWxldGVkID0gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQ
cmlvcml0aXplZFRleHR1cmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlLmgKaW5kZXggMzc4OWQ3ZjI2OWEzZDdlNTE5
NWE4OTJkZGQzNzZkYWU2MThkMmIwZS4uNDZjN2ExODdjYjM2ZGZmODdiYzQ0MGYxNmI0MWE2YTQ5
MzIwNGFhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZS5oCkBAIC04OCw2
ICs4OCw4IEBAIHB1YmxpYzoKICAgICAvLyBVcGxvYWRzIHBpeGVscyBpbnRvIHRoZSBiYWNraW5n
IHJlc291cmNlLiBUaGlzIGZ1bmN0aW9ucyB3aWxsIGFxdWlyZSB0aGUgYmFja2luZyBpZiBuZWVk
ZWQuCiAgICAgdm9pZCB1cGxvYWQoQ0NSZXNvdXJjZVByb3ZpZGVyKiwgY29uc3QgdWludDhfdCog
aW1hZ2UsIGNvbnN0IEludFJlY3QmIGltYWdlUmVjdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVj
dCwgY29uc3QgSW50U2l6ZSYgZGVzdE9mZnNldCk7CiAKKyAgICBib29sIGJhY2tpbmdSZXNvdXJj
ZVdhc0RlbGV0ZWQoKSBjb25zdDsKKwogICAgIENDUmVzb3VyY2VQcm92aWRlcjo6UmVzb3VyY2VJ
ZCByZXNvdXJjZUlkKCkgY29uc3Q7CiAKICAgICAvLyBTZWxmLW1hbmFnZWQgdGV4dHVyZXMgYXJl
IGFjY291bnRlZCBmb3Igd2hlbiBwcmlvcml0aXppbmcgb3RoZXIgdGV4dHVyZXMsCkBAIC0xMDEs
MTYgKzEwMywyOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBDQ1ByaW9y
aXRpemVkVGV4dHVyZU1hbmFnZXI7CiAKLSAgICBjbGFzcyBCYWNraW5nIDogcHVibGljIENDVGV4
dHVyZSB7CisgICAgY2xhc3MgQmFja2luZyB7CiAgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEJhY2tpbmcpOwogICAgIHB1YmxpYzoKICAgICAgICAgQmFja2luZyh1bnNpZ25lZCBpZCwgSW50
U2l6ZSBzaXplLCBHQzNEZW51bSBmb3JtYXQpCi0gICAgICAgICAgICA6IENDVGV4dHVyZShpZCwg
c2l6ZSwgZm9ybWF0KSwgbV9vd25lcigwKSB7IH0KLSAgICAgICAgfkJhY2tpbmcoKSB7IEFTU0VS
VCghbV9vd25lcik7IH0KKyAgICAgICAgICAgIDogbV90ZXh0dXJlKGlkLCBzaXplLCBmb3JtYXQp
LCBtX3Jlc291cmNlRGVsZXRlZChmYWxzZSksIG1fb3duZXIoMCkgeyB9CisgICAgICAgIH5CYWNr
aW5nKCkgeyBBU1NFUlQoIW1fb3duZXIgJiYgbV9yZXNvdXJjZURlbGV0ZWQpOyB9CisKKyAgICAg
ICAgQ0NQcmlvcml0aXplZFRleHR1cmUqIG93bmVyKCkgY29uc3QgeyByZXR1cm4gbV9vd25lcjsg
fQorCisgICAgICAgIENDUmVzb3VyY2VQcm92aWRlcjo6UmVzb3VyY2VJZCBpZCgpOworICAgICAg
ICBjb25zdCBJbnRTaXplJiBzaXplKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlLnNpemUoKTsg
fQorICAgICAgICBHQzNEZW51bSBmb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmUuZm9y
bWF0KCk7IH0KKyAgICAgICAgc2l6ZV90IGJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJl
LmJ5dGVzKCk7IH0KKworICAgICAgICB2b2lkIGRlbGV0ZVJlc291cmNlKENDUmVzb3VyY2VQcm92
aWRlciopOworICAgICAgICBib29sIHJlc291cmNlRGVsZXRlZCgpIGNvbnN0OwogCi0gICAgICAg
IENDUHJpb3JpdGl6ZWRUZXh0dXJlKiBvd25lcigpIHsgcmV0dXJuIG1fb3duZXI7IH0KICAgICBw
cml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgQ0NQcmlvcml0aXplZFRleHR1cmU7CisgICAg
ICAgIGZyaWVuZCBjbGFzcyBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI7CisgICAgICAgIEND
VGV4dHVyZSBtX3RleHR1cmU7CisgICAgICAgIGJvb2wgbV9yZXNvdXJjZURlbGV0ZWQ7CiAgICAg
ICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlKiBtX293bmVyOwogICAgIH07CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuY3BwCmluZGV4IDgzZDY4YWQw
NzFlZGI2NTgyODI4ODlhYmJiMDA3ZjU3OGViYTI0NjAuLjdmYTQ2NDA4MWFmYzIyZjZhYzUyNzc2
YjFkYjlmNzJlNjViOGUyZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXpl
ZFRleHR1cmVNYW5hZ2VyLmNwcApAQCAtNTAsMTAgKzUwLDExIEBAIENDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcjo6fkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcigpCiAgICAgd2hpbGUgKG1f
dGV4dHVyZXMuc2l6ZSgpID4gMCkKICAgICAgICAgdW5yZWdpc3RlclRleHR1cmUoKm1fdGV4dHVy
ZXMuYmVnaW4oKSk7CiAKLSAgICAvLyBFYWNoIHJlbWFpbmluZyBiYWNraW5nIGlzIGEgbGVha2Vk
IG9wZW5nbCB0ZXh0dXJlLiBXZSBkb24ndCBoYXZlIHRoZSByZXNvdXJjZVByb3ZpZGVyCi0gICAg
Ly8gdG8gZGVsZXRlIHRoZSB0ZXh0dXJlcyBhdCB0aGlzIHRpbWUgc28gY2xlYXJNZW1vcnkoKSBu
ZWVkcyB0byBiZSBjYWxsZWQgYmVmb3JlIHRoaXMuCi0gICAgd2hpbGUgKG1fYmFja2luZ3Muc2l6
ZSgpID4gMCkKLSAgICAgICAgZGVzdHJveUJhY2tpbmcoKm1fYmFja2luZ3MuYmVnaW4oKSwgMCk7
CisgICAgLy8gUmVtb3ZlIGFueSBiYWNraW5ncyB0aGF0IHdlcmUgZXZpY3RlZC4KKyAgICBjbGVh
ckV2aWN0ZWRCYWNraW5nc0ludGVybmFsKDApOworCisgICAgLy8gRWFjaCByZW1haW5pbmcgYmFj
a2luZyBpcyByZWFsIG1lbW9yeSBsZWFrLiBUaGlzIHNob3VsZG4ndCBoYXBwZW4uCisgICAgQVNT
RVJUKG1fYmFja2luZ3MuaXNFbXB0eSgpKTsKIH0KIAogdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVy
ZU1hbmFnZXI6OnByaW9yaXRpemVUZXh0dXJlcygpCkBAIC0xNzYsNiArMTc3LDcgQEAgYm9vbCBD
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnJlcXVlc3RMYXRlKENDUHJpb3JpdGl6ZWRUZXh0
dXJlKiB0ZXh0dXJlKQogdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmFjcXVpcmVC
YWNraW5nVGV4dHVyZUlmTmVlZGVkKENDUHJpb3JpdGl6ZWRUZXh0dXJlKiB0ZXh0dXJlLCBDQ1Jl
c291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6
OmlzSW1wbFRocmVhZCgpICYmIENDUHJveHk6OmlzTWFpblRocmVhZEJsb2NrZWQoKSk7CisgICAg
QVNTRVJUKHJlc291cmNlUHJvdmlkZXIpOwogICAgIEFTU0VSVCghdGV4dHVyZS0+aXNTZWxmTWFu
YWdlZCgpKTsKICAgICBBU1NFUlQodGV4dHVyZS0+aXNBYm92ZVByaW9yaXR5Q3V0b2ZmKCkpOwog
ICAgIGlmICh0ZXh0dXJlLT5iYWNraW5nKCkgfHwgIXRleHR1cmUtPmlzQWJvdmVQcmlvcml0eUN1
dG9mZigpKQpAQCAtMTg4LDYgKzE5MCw4IEBAIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5h
Z2VyOjphY3F1aXJlQmFja2luZ1RleHR1cmVJZk5lZWRlZChDQ1ByaW9yaXRpemVkVGV4CiAgICAg
Zm9yIChCYWNraW5nU2V0OjppdGVyYXRvciBpdCA9IG1fYmFja2luZ3MuYmVnaW4oKTsgaXQgIT0g
bV9iYWNraW5ncy5lbmQoKTsgKytpdCkgewogICAgICAgICBpZiAoKCppdCktPm93bmVyKCkgJiYg
KCppdCktPm93bmVyKCktPmlzQWJvdmVQcmlvcml0eUN1dG9mZigpKQogICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGlmICgoKml0KS0+cmVzb3VyY2VEZWxldGVkKCkpCisgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgaWYgKCgqaXQpLT5zaXplKCkgPT0gdGV4dHVyZS0+c2l6ZSgpICYm
ICgqaXQpLT5mb3JtYXQoKSA9PSB0ZXh0dXJlLT5mb3JtYXQoKSkgewogICAgICAgICAgICAgYmFj
a2luZyA9ICgqaXQpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xOTgsNiArMjAyLDcgQEAgdm9p
ZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmFjcXVpcmVCYWNraW5nVGV4dHVyZUlmTmVl
ZGVkKENDUHJpb3JpdGl6ZWRUZXgKICAgICBpZiAoIWJhY2tpbmcpIHsKICAgICAgICAgcmVkdWNl
TWVtb3J5KG1fbWVtb3J5QXZhaWxhYmxlQnl0ZXMgLSB0ZXh0dXJlLT5ieXRlcygpLCByZXNvdXJj
ZVByb3ZpZGVyKTsKICAgICAgICAgYmFja2luZyA9IGNyZWF0ZUJhY2tpbmcodGV4dHVyZS0+c2l6
ZSgpLCB0ZXh0dXJlLT5mb3JtYXQoKSwgcmVzb3VyY2VQcm92aWRlcik7CisgICAgICAgIG1fdW5l
dmljdGVkQmFja2luZ3MuYWRkKGJhY2tpbmcpOwogICAgIH0KIAogICAgIC8vIE1vdmUgdGhlIHVz
ZWQgYmFja2luZyB0ZXh0dXJlIHRvIHRoZSBlbmQgb2YgdGhlIGV2aWN0aW9uIGxpc3QuCkBAIC0y
MTEsNiArMjE2LDcgQEAgdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmFjcXVpcmVC
YWNraW5nVGV4dHVyZUlmTmVlZGVkKENDUHJpb3JpdGl6ZWRUZXgKIHZvaWQgQ0NQcmlvcml0aXpl
ZFRleHR1cmVNYW5hZ2VyOjpyZWR1Y2VNZW1vcnkoc2l6ZV90IGxpbWl0Qnl0ZXMsIENDUmVzb3Vy
Y2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlcikKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJ
bXBsVGhyZWFkKCkgJiYgQ0NQcm94eTo6aXNNYWluVGhyZWFkQmxvY2tlZCgpKTsKKyAgICBBU1NF
UlQocmVzb3VyY2VQcm92aWRlcik7CiAgICAgaWYgKG1lbW9yeVVzZUJ5dGVzKCkgPD0gbGltaXRC
eXRlcykKICAgICAgICAgcmV0dXJuOwogICAgIC8vIERlc3Ryb3kgYmFja2luZ3MgdW50aWwgd2Ug
YXJlIGJlbG93IHRoZSBsaW1pdCwKQEAgLTIxOSw3ICsyMjUsMTUgQEAgdm9pZCBDQ1ByaW9yaXRp
emVkVGV4dHVyZU1hbmFnZXI6OnJlZHVjZU1lbW9yeShzaXplX3QgbGltaXRCeXRlcywgQ0NSZXNv
dXJjZVByb3YKICAgICAgICAgQmFja2luZ1NldDo6aXRlcmF0b3IgaXQgPSBtX2JhY2tpbmdzLmJl
Z2luKCk7CiAgICAgICAgIGlmICgoKml0KS0+b3duZXIoKSAmJiAoKml0KS0+b3duZXIoKS0+aXNB
Ym92ZVByaW9yaXR5Q3V0b2ZmKCkpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVzdHJv
eUJhY2tpbmcoKCppdCksIHJlc291cmNlUHJvdmlkZXIpOworICAgICAgICBpZiAoKCppdCktPnJl
c291cmNlRGVsZXRlZCgpKSB7CisgICAgICAgICAgICBBU1NFUlQobV9ldmljdGVkQmFja2luZ3Mu
ZmluZCgoKml0KSkgIT0gbV9ldmljdGVkQmFja2luZ3MuZW5kKCkpOworICAgICAgICAgICAgbV9l
dmljdGVkQmFja2luZ3MucmVtb3ZlKCgqaXQpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIEFTU0VSVChtX3VuZXZpY3RlZEJhY2tpbmdzLmZpbmQoKCppdCkpICE9IG1fdW5ldmljdGVk
QmFja2luZ3MuZW5kKCkpOworICAgICAgICAgICAgbV91bmV2aWN0ZWRCYWNraW5ncy5yZW1vdmUo
KCppdCkpOworICAgICAgICAgICAgKCppdCktPmRlbGV0ZVJlc291cmNlKHJlc291cmNlUHJvdmlk
ZXIpOworICAgICAgICB9CisgICAgICAgIGRlc3Ryb3lCYWNraW5nKCgqaXQpKTsKICAgICB9CiB9
CiAKQEAgLTI0NiwyMyArMjYwLDYwIEBAIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
OjpyZWR1Y2VNZW1vcnkoQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpCiAgICAgcmVk
dWNlTWVtb3J5KG1lbW9yeVVzZUJ5dGVzKCkgLSAod2FzdGVkTWVtb3J5IC0gdGVuUGVyY2VudE9m
TWVtb3J5KSwgcmVzb3VyY2VQcm92aWRlcik7CiB9CiAKLXZvaWQgQ0NQcmlvcml0aXplZFRleHR1
cmVNYW5hZ2VyOjpjbGVhckFsbE1lbW9yeShDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJv
dmlkZXIpCitib29sIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmVkdWNlTWVtb3J5T25J
bXBsVGhyZWFkKENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlcikKIHsKLSAgICAv
LyBVbmxpbmsgYW5kIGRlc3Ryb3kgYWxsIGJhY2tpbmcgdGV4dHVyZXMuCi0gICAgd2hpbGUgKG1f
YmFja2luZ3Muc2l6ZSgpID4gMCkgewotICAgICAgICBCYWNraW5nU2V0OjppdGVyYXRvciBpdCA9
IG1fYmFja2luZ3MuYmVnaW4oKTsKLSAgICAgICAgaWYgKCgqaXQpLT5vd25lcigpKQotICAgICAg
ICAgICAgKCppdCktPm93bmVyKCktPnVubGluaygpOwotICAgICAgICBkZXN0cm95QmFja2luZygo
Kml0KSwgcmVzb3VyY2VQcm92aWRlcik7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVh
ZCgpKTsKKyAgICBBU1NFUlQocmVzb3VyY2VQcm92aWRlcik7CisKKyAgICBCYWNraW5nVmVjdG9y
IGJhY2tpbmdzVG9FdmljdDsKKyAgICBmb3IgKEJhY2tpbmdTZXQ6Oml0ZXJhdG9yIGl0ID0gbV91
bmV2aWN0ZWRCYWNraW5ncy5iZWdpbigpOyBpdCAhPSBtX3VuZXZpY3RlZEJhY2tpbmdzLmVuZCgp
OyArK2l0KSB7CisgICAgICAgICgqaXQpLT5kZWxldGVSZXNvdXJjZShyZXNvdXJjZVByb3ZpZGVy
KTsKKyAgICAgICAgYmFja2luZ3NUb0V2aWN0LmFwcGVuZCgoKml0KSk7CisgICAgfQorICAgIGJv
b2wgcmVzdWx0ID0gZmFsc2U7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX2V2aWN0ZWRTdGF0ZU11
dGV4KTsKKyAgICBpZiAoIWJhY2tpbmdzVG9FdmljdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgcmVz
dWx0ID0gdHJ1ZTsKKyAgICAgICAgZm9yIChCYWNraW5nVmVjdG9yOjppdGVyYXRvciBpdCA9IGJh
Y2tpbmdzVG9FdmljdC5iZWdpbigpOyBpdCAhPSBiYWNraW5nc1RvRXZpY3QuZW5kKCk7ICsraXQp
IHsKKyAgICAgICAgICAgIG1fdW5ldmljdGVkQmFja2luZ3MucmVtb3ZlKCgqaXQpKTsKKyAgICAg
ICAgICAgIG1fZXZpY3RlZEJhY2tpbmdzLmFkZCgoKml0KSk7CisgICAgICAgIH0KKyAgICAgICAg
bV9ldmljdGlvbkNvdW50ZXIrKzsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmRlc3Ryb3lFdmljdGVkQmFja2luZ3MoaW50
KiBldmljdGlvbkNvdW50ZXJBY2spCit7CisgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVh
ZCgpKTsKKyAgICBjbGVhckV2aWN0ZWRCYWNraW5nc0ludGVybmFsKGV2aWN0aW9uQ291bnRlckFj
ayk7Cit9CisKK3ZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjbGVhckV2aWN0ZWRC
YWNraW5nc0ludGVybmFsKGludCogZXZpY3Rpb25Db3VudGVyQWNrKQoreworICAgIC8vIFRoaXMg
Y2FuIGJlIGNhbGxlZCBvbiB0aGUgbWFpbiBvciBpbXBsIHRocmVhZCwgb3IgYXQgdGVhci1kb3du
LgorICAgIE11dGV4TG9ja2VyIGxvY2sobV9ldmljdGVkU3RhdGVNdXRleCk7CisgICAgZm9yIChC
YWNraW5nU2V0OjppdGVyYXRvciBpdCA9IG1fZXZpY3RlZEJhY2tpbmdzLmJlZ2luKCk7IGl0ICE9
IG1fZXZpY3RlZEJhY2tpbmdzLmVuZCgpOyArK2l0KSB7CisgICAgICAgIGRlc3Ryb3lCYWNraW5n
KCgqaXQpKTsKICAgICB9CisgICAgbV9ldmljdGVkQmFja2luZ3MuY2xlYXIoKTsKKyAgICBpZiAo
ZXZpY3Rpb25Db3VudGVyQWNrKQorICAgICAgICAqZXZpY3Rpb25Db3VudGVyQWNrID0gbV9ldmlj
dGlvbkNvdW50ZXI7CiB9CiAKLXZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjphbGxC
YWNraW5nVGV4dHVyZXNXZXJlRGVsZXRlZCgpCitib29sIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcjo6aXNFdmljdGlvbkNvdW50ZXJBY2tVcFRvRGF0ZShpbnQgZXZpY3Rpb25Db3VudGVyQWNr
KQogewotICAgIC8vIFNhbWUgYXMgY2xlYXJBbGxNZW1vcnksIGV4Y2VwdCBhbGwgb3VyIHRleHR1
cmVzIHdlcmUgYWxyZWFkeQotICAgIC8vIGRlbGV0ZWQgZXh0ZXJuYWxseSwgc28gd2UgZG9uJ3Qg
ZGVsZXRlIHRoZW0uIFBhc3Npbmcgbm8KLSAgICAvLyByZXNvdXJjZVByb3ZpZGVyIHJlc3VsdHMg
aW4gbGVha2luZyB0aGUgKG5vdyBpbnZhbGlkKSB0ZXh0dXJlIGlkcy4KLSAgICBjbGVhckFsbE1l
bW9yeSgwKTsKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOworICAgIE11dGV4
TG9ja2VyIGxvY2sobV9ldmljdGVkU3RhdGVNdXRleCk7CisgICAgcmV0dXJuIChldmljdGlvbkNv
dW50ZXJBY2sgPT0gbV9ldmljdGlvbkNvdW50ZXIpOworfQorCit2b2lkIENDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlcjo6Y2xlYXJBbGxNZW1vcnkoQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJj
ZVByb3ZpZGVyKQoreworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSAmJiBDQ1By
b3h5Ojppc01haW5UaHJlYWRCbG9ja2VkKCkpOworICAgIEFTU0VSVChyZXNvdXJjZVByb3ZpZGVy
KTsKKyAgICByZWR1Y2VNZW1vcnlPbkltcGxUaHJlYWQocmVzb3VyY2VQcm92aWRlcik7CisgICAg
Y2xlYXJFdmljdGVkQmFja2luZ3NJbnRlcm5hbCgwKTsKIH0KIAogdm9pZCBDQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXI6OnJlZ2lzdGVyVGV4dHVyZShDQ1ByaW9yaXRpemVkVGV4dHVyZSogdGV4
dHVyZSkKQEAgLTMxMywxNSArMzY0LDEzIEBAIENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5n
KiBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZUJhY2tpbmcoSW50U2l6CiAgICAg
cmV0dXJuIGJhY2tpbmc7CiB9CiAKLXZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpk
ZXN0cm95QmFja2luZyhDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZyogYmFja2luZywgQ0NS
ZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyKQordm9pZCBDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI6OmRlc3Ryb3lCYWNraW5nKENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5n
KiBiYWNraW5nKQogewogICAgIEFTU0VSVChiYWNraW5nKTsKLSAgICBBU1NFUlQoIWJhY2tpbmct
Pm93bmVyKCkgfHwgIWJhY2tpbmctPm93bmVyKCktPmlzQWJvdmVQcmlvcml0eUN1dG9mZigpKTsK
ICAgICBBU1NFUlQoIWJhY2tpbmctPm93bmVyKCkgfHwgIWJhY2tpbmctPm93bmVyKCktPmlzU2Vs
Zk1hbmFnZWQoKSk7CiAgICAgQVNTRVJUKG1fYmFja2luZ3MuZmluZChiYWNraW5nKSAhPSBtX2Jh
Y2tpbmdzLmVuZCgpKTsKKyAgICBBU1NFUlQoYmFja2luZy0+bV9yZXNvdXJjZURlbGV0ZWQpOwog
Ci0gICAgaWYgKHJlc291cmNlUHJvdmlkZXIpCi0gICAgICAgIHJlc291cmNlUHJvdmlkZXItPmRl
bGV0ZVJlc291cmNlKGJhY2tpbmctPmlkKCkpOwogICAgIGlmIChiYWNraW5nLT5vd25lcigpKQog
ICAgICAgICBiYWNraW5nLT5vd25lcigpLT51bmxpbmsoKTsKICAgICBtX21lbW9yeVVzZUJ5dGVz
IC09IGJhY2tpbmctPmJ5dGVzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlci5oCmluZGV4IDEzZGJjNTE3NmJjZDc4ZWUyOTcwOTBhNjc2NTEyNDVmOWJk
NzY0Y2EuLmI2NzM5ZTY4NzAyOWZhYTcyMGY1ZmVlMzg4OTVjNGJlMTI2YmM4YzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3Jp
dGl6ZWRUZXh0dXJlTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5oCkBAIC0zMyw2ICsz
Myw3IEBACiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAj
aW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1p
dGl2ZXMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTc3LDggKzc4LDI0IEBAIHB1YmxpYzoKICAgICBib29sIHJlcXVlc3RMYXRlKENDUHJpb3Jp
dGl6ZWRUZXh0dXJlKik7CiAKICAgICB2b2lkIHJlZHVjZU1lbW9yeShDQ1Jlc291cmNlUHJvdmlk
ZXIqKTsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBhbmQgaW5jcmVtZW50cyBhbiBpbnRlcm5hbCBl
dmljdGlvbiBjb3VudGVyIGlmIHJlc291cmNlcyBhcmUKKyAgICAvLyBkZWxldGVkIGFzIGEgcmVz
dWx0IG9mIHRoaXMgY2FsbC4KKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGFzeW5jaHJvbm91cyBp
biB0aGF0IGl0IGlzIGNhbGxlZCBvbiB0aGUgaW1wbCB0aHJlYWQgd2hpbGUgdGhlCisgICAgLy8g
bWFpbiB0aHJlYWQgaXMgbm90IGJsb2NrZWQgKHNvIGl0IG1heSBiZSBjb25jdXJyZW50IHdpdGgg
b3RoZXIgY2FsbHMgZnJvbSB0aGUKKyAgICAvLyBtYWluIHRocmVhZCkKKyAgICBib29sIHJlZHVj
ZU1lbW9yeU9uSW1wbFRocmVhZChDQ1Jlc291cmNlUHJvdmlkZXIqKTsKKworICAgIC8vIFJlbW92
ZSB0aGUgYmFja2luZ3Mgd2hvc2UgcmVzb3VyY2VzIHdlcmUgZGVzdHJveWVkIGJ5IHJlZHVjZU1l
bW9yeU9uSW1wbFRocmVhZC4KKyAgICAvLyBXcml0ZXMgdGhlIGludGVybmFsIGV2aWN0aW9uIGNv
dW50ZXIgdG8gZXZpY3Rpb25Db3VudGVyQWNrLgorICAgIHZvaWQgZGVzdHJveUV2aWN0ZWRCYWNr
aW5ncyhpbnQqIGV2aWN0aW9uQ291bnRlckFjayk7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYg
ZXZpY3Rpb25Db3VudGVyQWNrIGlzIHRoZSB2YWx1ZSBvZiBpbnRlcm5hbCBldmljdGlvbiBjb3Vu
dGVyLgorICAgIGJvb2wgaXNFdmljdGlvbkNvdW50ZXJBY2tVcFRvRGF0ZShpbnQgZXZpY3Rpb25D
b3VudGVyQWNrKTsKKworICAgIC8vIERlbGV0ZSBhbGwgdGV4dHVyZXMgYW5kIGZyb20gdGhlIGlt
cGwgdGhyZWFkIChhdCB0aHJlYWQgZXhpdCBhbmQKKyAgICAvLyBjb250ZXh0IGxvc3QpLgogICAg
IHZvaWQgY2xlYXJBbGxNZW1vcnkoQ0NSZXNvdXJjZVByb3ZpZGVyKik7Ci0gICAgdm9pZCBhbGxC
YWNraW5nVGV4dHVyZXNXZXJlRGVsZXRlZCgpOwogCiAgICAgdm9pZCBhY3F1aXJlQmFja2luZ1Rl
eHR1cmVJZk5lZWRlZChDQ1ByaW9yaXRpemVkVGV4dHVyZSosIENDUmVzb3VyY2VQcm92aWRlciop
OwogCkBAIC0xMDksMTEgKzEyNiwxMCBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIENDUHJpb3Jp
dGl6ZWRUZXh0dXJlTWFuYWdlcihzaXplX3QgbWF4TWVtb3J5TGltaXRCeXRlcywgaW50IG1heFRl
eHR1cmVTaXplLCBpbnQgcG9vbCk7Ci0KICAgICB2b2lkIHJlZHVjZU1lbW9yeShzaXplX3QgbGlt
aXQsIENDUmVzb3VyY2VQcm92aWRlciopOwotCiAgICAgQ0NQcmlvcml0aXplZFRleHR1cmU6OkJh
Y2tpbmcqIGNyZWF0ZUJhY2tpbmcoSW50U2l6ZSwgR0MzRGVudW0gZm9ybWF0LCBDQ1Jlc291cmNl
UHJvdmlkZXIqKTsKLSAgICB2b2lkIGRlc3Ryb3lCYWNraW5nKENDUHJpb3JpdGl6ZWRUZXh0dXJl
OjpCYWNraW5nKiwgQ0NSZXNvdXJjZVByb3ZpZGVyKik7CisgICAgdm9pZCBjbGVhckV2aWN0ZWRC
YWNraW5nc0ludGVybmFsKGludCogZXZpY3Rpb25Db3VudGVyQWNrKTsKKyAgICB2b2lkIGRlc3Ry
b3lCYWNraW5nKENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nKik7CiAKICAgICBzaXplX3Qg
bV9tYXhNZW1vcnlMaW1pdEJ5dGVzOwogICAgIHVuc2lnbmVkIG1fcHJpb3JpdHlDdXRvZmY7CkBA
IC0xMzIsOCArMTQ4LDIzIEBAIHByaXZhdGU6CiAKICAgICBUZXh0dXJlVmVjdG9yIG1fdGVtcFRl
eHR1cmVWZWN0b3I7CiAgICAgQmFja2luZ1ZlY3RvciBtX3RlbXBCYWNraW5nVmVjdG9yOworCisg
ICAgLy8gQSBjb3B5IG9mIG1fYmFja2luZ3MgKG1pbnVzIGV2aWN0ZWQgYmFja2luZ3MpIHdoaWNo
IGlzIGFjY2Vzc2VkIG9ubHkgb24KKyAgICAvLyB0aGUgaW1wbCB0aHJlYWQuIFRoaXMgaXMgdHJh
dmVyc2VkIHdoZW4gZXZpY3RpbmcgYmFja2luZ3MgKHdoaWNoIGhhcHBlbnMgCisgICAgLy8gd2hp
bGUgdGhlIG1haW4gdGhyZWFkIG1heSBiZSB0cmF2ZXJzaW5nIG1fYmFja2luZ3MpLgorICAgIC8v
IFRPT0Q6IG1ha2UgbV9iYWNraW5ncyBub3QgYWNjZXNzZWQgb24gdGhlIG1haW4gdGhyZWFkLCBh
bmQgcmVtb3ZlIHRoaXMKKyAgICAvLyByZWR1bmRhbnQgc3RhdGUuCisgICAgQmFja2luZ1NldCBt
X3VuZXZpY3RlZEJhY2tpbmdzOworCisgICAgLy8gVGhpcyBzdGF0ZSBjYW4gYmUgYWNjZXNzZWQg
YnkgdGhlIGltcGwgdGhyZWFkIGFuZCB0aGUgbWFpbiB0aHJlYWQgY29uY3VycmVudGx5LAorICAg
IC8vIGFuZCBtYXkgYmUgYWNjZXNzZWQgb25seSB3aGVuIG1fZXZpY3RlZEJhY2tpbmdzTXV0ZXgg
aXMgaGVsZC4KKyAgICBNdXRleCBtX2V2aWN0ZWRTdGF0ZU11dGV4OworICAgIEJhY2tpbmdTZXQg
bV9ldmljdGVkQmFja2luZ3M7CisgICAgaW50IG1fZXZpY3Rpb25Db3VudGVyOwogfTsKIAorCisK
IH0gLy8gV2ViQ29yZQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94
eS5jcHAKaW5kZXggNjg3NmVhMjE4OGJhZjY2NjhhMjlhYzM3YzFjZDM4YzhjYjQ0MWNlOS4uNGI2
NTE3YjRmZTYxNDg2ZGI5NThlMzVkNjg2MzNhOWZhMDdmOTQyMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94
eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKQEAgLTE1NSw5ICsxNTUsOSBAQCBib29sIENDU2luZ2xl
VGhyZWFkUHJveHk6OnJlY3JlYXRlQ29udGV4dCgpCiAKICAgICBib29sIGluaXRpYWxpemVkOwog
ICAgIHsKKyAgICAgICAgRGVidWdTY29wZWRTZXRNYWluVGhyZWFkQmxvY2tlZCBtYWluVGhyZWFk
QmxvY2tlZDsKICAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7Ci0gICAgICAg
IGlmICghbV9sYXllclRyZWVIb3N0SW1wbC0+Y29udGVudHNUZXh0dXJlc1B1cmdlZCgpKQotICAg
ICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5kZWxldGVDb250ZW50c1RleHR1cmVzT25JbXBsVGhy
ZWFkKG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJlc291cmNlUHJvdmlkZXIoKSk7CisgICAgICAgIG1f
bGF5ZXJUcmVlSG9zdC0+ZGVsZXRlQWxsQ29udGVudHNUZXh0dXJlc09uSW1wbFRocmVhZChtX2xh
eWVyVHJlZUhvc3RJbXBsLT5yZXNvdXJjZVByb3ZpZGVyKCkpOwogICAgICAgICBpbml0aWFsaXpl
ZCA9IG1fbGF5ZXJUcmVlSG9zdEltcGwtPmluaXRpYWxpemVSZW5kZXJlcihjb250ZXh0LnJlbGVh
c2UoKSwgVW50aHJvdHRsZWRVcGxvYWRlcik7CiAgICAgICAgIGlmIChpbml0aWFsaXplZCkgewog
ICAgICAgICAgICAgbV9SZW5kZXJlckNhcGFiaWxpdGllc0Zvck1haW5UaHJlYWQgPSBtX2xheWVy
VHJlZUhvc3RJbXBsLT5yZW5kZXJlckNhcGFiaWxpdGllcygpOwpAQCAtMjYwLDkgKzI2MCw3IEBA
IHZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6c3RvcCgpCiAgICAgewogICAgICAgICBEZWJ1Z1Nj
b3BlZFNldE1haW5UaHJlYWRCbG9ja2VkIG1haW5UaHJlYWRCbG9ja2VkOwogICAgICAgICBEZWJ1
Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKLQotICAgICAgICBpZiAoIW1fbGF5ZXJUcmVlSG9z
dEltcGwtPmNvbnRlbnRzVGV4dHVyZXNQdXJnZWQoKSkKLSAgICAgICAgICAgIG1fbGF5ZXJUcmVl
SG9zdC0+ZGVsZXRlQ29udGVudHNUZXh0dXJlc09uSW1wbFRocmVhZChtX2xheWVyVHJlZUhvc3RJ
bXBsLT5yZXNvdXJjZVByb3ZpZGVyKCkpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmRlbGV0
ZUFsbENvbnRlbnRzVGV4dHVyZXNPbkltcGxUaHJlYWQobV9sYXllclRyZWVIb3N0SW1wbC0+cmVz
b3VyY2VQcm92aWRlcigpKTsKICAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC5jbGVhcigpOwog
ICAgIH0KICAgICBtX2xheWVyVHJlZUhvc3QgPSAwOwpAQCAtMjc1LDYgKzI3MywxNSBAQCB2b2lk
IENDU2luZ2xlVGhyZWFkUHJveHk6OnBvc3RBbmltYXRpb25FdmVudHNUb01haW5UaHJlYWRPbklt
cGxUaHJlYWQoUGFzc093blB0cgogICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0QW5pbWF0aW9uRXZl
bnRzKGV2ZW50cywgd2FsbENsb2NrVGltZSk7CiB9CiAKK3ZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94
eTo6cmVkdWNlQ29udGVudHNUZXh0dXJlc01lbW9yeU9uSW1wbFRocmVhZCgpCit7CisgICAgQVNT
RVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKyAgICBpZiAobV9sYXllclRyZWVIb3N0LT5y
ZWR1Y2VDb250ZW50c1RleHR1cmVzTWVtb3J5T25JbXBsVGhyZWFkKG1fbGF5ZXJUcmVlSG9zdElt
cGwtPnJlc291cmNlUHJvdmlkZXIoKSkpIHsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+
c2V0Q29udGVudHNUZXh0dXJlc1B1cmdlZCgpOworICAgICAgICBzZXROZWVkc0NvbW1pdE9uSW1w
bFRocmVhZCgpOworICAgIH0KK30KKwogLy8gQ2FsbGVkIGJ5IHRoZSBsZWdhY3kgc2NoZWR1bGlu
ZyBwYXRoIChlLmcuIHdoZXJlIHJlbmRlcl93aWRnZXQgZG9lcyB0aGUgc2NoZWR1bGluZykKIHZv
aWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tcG9zaXRlSW1tZWRpYXRlbHkoKQogewpAQCAtMzAx
LDkgKzMwOCw3IEBAIGJvb2wgQ0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tbWl0QW5kQ29tcG9zaXRl
KCkKICAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdC0+aW5pdGlhbGl6ZVJlbmRlcmVySWZOZWVkZWQo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1fbGF5ZXJUcmVlSG9zdEltcGwt
PmNvbnRlbnRzVGV4dHVyZXNQdXJnZWQoKSkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5ldmlj
dEFsbENvbnRlbnRUZXh0dXJlcygpOwotCisgICAgbV9sYXllclRyZWVIb3N0LT5kZXN0cm95Q29u
dGVudHNUZXh0dXJlc0V2aWN0ZWRCeUltcGxUaHJlYWQoMCk7CiAgICAgQ0NUZXh0dXJlVXBkYXRl
UXVldWUgcXVldWU7CiAgICAgbV9sYXllclRyZWVIb3N0LT51cGRhdGVMYXllcnMocXVldWUsIG1f
bGF5ZXJUcmVlSG9zdEltcGwtPm1lbW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzKCkpOwogICAgIG1f
bGF5ZXJUcmVlSG9zdEltcGwtPnJlc2V0Q29udGVudHNUZXh0dXJlc1B1cmdlZCgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5n
bGVUaHJlYWRQcm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oCmluZGV4IDcxZjRmNGY1N2VjZTRhZGYxZTQ2NWEy
NDg1OTk3YjVmYzkwYTJlMmQuLjlmYjFhYjhkMzRjOGQ3N2I0MGQ4YzRlMzE3MjBhMWU0NDRiNjVk
NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgKQEAgLTcyLDYgKzcyLDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgp
IE9WRVJSSURFIHsgbV9sYXllclRyZWVIb3N0LT5zY2hlZHVsZUNvbXBvc2l0ZSgpOyB9CiAgICAg
dmlydHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCkgT1ZFUlJJREUgeyBtX2xh
eWVyVHJlZUhvc3QtPnNjaGVkdWxlQ29tcG9zaXRlKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgcG9z
dEFuaW1hdGlvbkV2ZW50c1RvTWFpblRocmVhZE9uSW1wbFRocmVhZChQYXNzT3duUHRyPENDQW5p
bWF0aW9uRXZlbnRzVmVjdG9yPiwgZG91YmxlIHdhbGxDbG9ja1RpbWUpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCByZWR1Y2VDb250ZW50c1RleHR1cmVzTWVtb3J5T25JbXBsVGhyZWFkKCkg
T1ZFUlJJREU7CiAKICAgICAvLyBDYWxsZWQgYnkgdGhlIGxlZ2FjeSBwYXRoIHdoZXJlIFJlbmRl
cldpZGdldCBkb2VzIHRoZSBzY2hlZHVsaW5nLgogICAgIHZvaWQgY29tcG9zaXRlSW1tZWRpYXRl
bHkoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlQ29udHJvbGxlci5jcHAK
aW5kZXggNmZjNzcxZTk1OTA1ZWUzYzg3ZTYxYjAxZjY4NjYzYjJmOTA2MDFjNy4uMzkzOWIxYjM4
ODhjZmJkNGE4OWNhZjc0NTNjNzEwOGMyZDI0ZDg1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlQ29udHJvbGxl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUZXh0dXJlVXBkYXRlQ29udHJvbGxlci5jcHAKQEAgLTE1MCw2ICsxNTAsMTEgQEAgdm9pZCBD
Q1RleHR1cmVVcGRhdGVDb250cm9sbGVyOjp1cGRhdGVNb3JlVGV4dHVyZXMoZG91YmxlIG1vbm90
b25pY1RpbWVMaW1pdCkKICAgICAgICAgdXBkYXRlTW9yZVRleHR1cmVzTm93KCk7CiB9CiAKK3Zv
aWQgQ0NUZXh0dXJlVXBkYXRlQ29udHJvbGxlcjo6ZGlzY2FyZFVwbG9hZHNUb0RlbGV0ZWRSZXNv
dXJjZXMoKQoreworICAgIG1fcXVldWUtPmNsZWFyVXBsb2Fkc1RvRGVsZXRlZFJlc291cmNlcygp
OworfQorCiB2b2lkIENDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXI6Om9uVGltZXJGaXJlZCgpCiB7
CiAgICAgaWYgKCFtX3F1ZXVlLT5oYXNNb3JlVXBkYXRlcygpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlQ29u
dHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUZXh0dXJlVXBkYXRlQ29udHJvbGxlci5oCmluZGV4IGRkNzU4YmViNGQ5ZmNkODY2ZTE4Yzg0
N2NjZDBhZjI4OWJhOTViZDEuLmNhMzIzYzliYmRmZGUwM2ZkYmMzMmIwNTlkNjdhMGQzYzVjMTBj
YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVDb250cm9sbGVyLmgKQEAg
LTUxLDYgKzUxLDkgQEAgcHVibGljOgogICAgIGJvb2wgaGFzTW9yZVVwZGF0ZXMoKSBjb25zdDsK
ICAgICB2b2lkIHVwZGF0ZU1vcmVUZXh0dXJlcyhkb3VibGUgbW9ub3RvbmljVGltZUxpbWl0KTsK
IAorICAgIC8vIERpc2NhcmQgdXBsb2FkcyB0byB0ZXh0dXJlcyB0aGF0IHdlcmUgZXZpY3RlZCBv
biB0aGUgaW1wbCB0aHJlYWQKKyAgICB2b2lkIGRpc2NhcmRVcGxvYWRzVG9EZWxldGVkUmVzb3Vy
Y2VzKCk7CisKICAgICAvLyBDQ1RpbWVyQ2xpZW50IGltcGxlbWVudGF0aW9uLgogICAgIHZpcnR1
YWwgdm9pZCBvblRpbWVyRmlyZWQoKSBPVkVSUklERTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlUXVldWUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0
dXJlVXBkYXRlUXVldWUuY3BwCmluZGV4IDhmNThmY2JjYjRjYmEyNGYzNGE1YWFkNDdlZDdjOTQ2
MDc0M2MxYTguLmE5MDU1NzYxNzEzNmQxMzg1MWJjYWY3NmUzM2E4MjA4NTEzZDI2YTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4
dHVyZVVwZGF0ZVF1ZXVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVRdWV1ZS5jcHAKQEAgLTU0LDEwICs1NCwyMSBA
QCB2b2lkIENDVGV4dHVyZVVwZGF0ZVF1ZXVlOjphcHBlbmRDb3B5KFRleHR1cmVDb3BpZXI6OlBh
cmFtZXRlcnMgY29weSkKICAgICBtX2NvcHlFbnRyaWVzLmFwcGVuZChjb3B5KTsKIH0KIAotdm9p
ZCBDQ1RleHR1cmVVcGRhdGVRdWV1ZTo6Y2xlYXJVcGxvYWRzKCkKK3ZvaWQgQ0NUZXh0dXJlVXBk
YXRlUXVldWU6OmNsZWFyVXBsb2Fkc1RvRGVsZXRlZFJlc291cmNlcygpCiB7Ci0gICAgbV9mdWxs
RW50cmllcy5jbGVhcigpOwotICAgIG1fcGFydGlhbEVudHJpZXMuY2xlYXIoKTsKKyAgICBjbGVh
clVwbG9hZHNUb0RlbGV0ZWRSZXNvdXJjZXMobV9mdWxsRW50cmllcyk7CisgICAgY2xlYXJVcGxv
YWRzVG9EZWxldGVkUmVzb3VyY2VzKG1fcGFydGlhbEVudHJpZXMpOworfQorCit2b2lkIENDVGV4
dHVyZVVwZGF0ZVF1ZXVlOjpjbGVhclVwbG9hZHNUb0RlbGV0ZWRSZXNvdXJjZXMoRGVxdWU8VGV4
dHVyZVVwbG9hZGVyOjpQYXJhbWV0ZXJzPiYgZW50cnlRdWV1ZSkKK3sKKyAgICBEZXF1ZTxUZXh0
dXJlVXBsb2FkZXI6OlBhcmFtZXRlcnM+IHRlbXA7CisgICAgZW50cnlRdWV1ZS5zd2FwKHRlbXAp
OworICAgIHdoaWxlICh0ZW1wLnNpemUoKSkgeworICAgICAgICBUZXh0dXJlVXBsb2FkZXI6OlBh
cmFtZXRlcnMgdXBsb2FkID0gdGVtcC50YWtlRmlyc3QoKTsKKyAgICAgICAgaWYgKCF1cGxvYWQu
dGV4dHVyZS0+YmFja2luZ1Jlc291cmNlV2FzRGVsZXRlZCgpKQorICAgICAgICAgICAgZW50cnlR
dWV1ZS5hcHBlbmQodXBsb2FkKTsKKyAgICB9CiB9CiAKIFRleHR1cmVVcGxvYWRlcjo6UGFyYW1l
dGVycyBDQ1RleHR1cmVVcGRhdGVRdWV1ZTo6dGFrZUZpcnN0RnVsbFVwbG9hZCgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1
cmVVcGRhdGVRdWV1ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NUZXh0dXJlVXBkYXRlUXVldWUuaAppbmRleCBkZTYzNzM4MjFmMDhhODQ1NGFlNjQ4
NWI2YWYzNzQ4M2M3ODA1ZWU2Li5jOGRjYjE2ZTAyM2JiYTE3NmI1MDhlMWNkOTRiNjhmNjI3ZDk3
MGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RleHR1cmVVcGRhdGVRdWV1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZVF1ZXVlLmgKQEAgLTQzLDcgKzQz
LDcgQEAgcHVibGljOgogICAgIHZvaWQgYXBwZW5kUGFydGlhbFVwbG9hZChUZXh0dXJlVXBsb2Fk
ZXI6OlBhcmFtZXRlcnMpOwogICAgIHZvaWQgYXBwZW5kQ29weShUZXh0dXJlQ29waWVyOjpQYXJh
bWV0ZXJzKTsKIAotICAgIHZvaWQgY2xlYXJVcGxvYWRzKCk7CisgICAgdm9pZCBjbGVhclVwbG9h
ZHNUb0RlbGV0ZWRSZXNvdXJjZXMoKTsKIAogICAgIFRleHR1cmVVcGxvYWRlcjo6UGFyYW1ldGVy
cyB0YWtlRmlyc3RGdWxsVXBsb2FkKCk7CiAgICAgVGV4dHVyZVVwbG9hZGVyOjpQYXJhbWV0ZXJz
IHRha2VGaXJzdFBhcnRpYWxVcGxvYWQoKTsKQEAgLTU2LDYgKzU2LDcgQEAgcHVibGljOgogICAg
IGJvb2wgaGFzTW9yZVVwZGF0ZXMoKSBjb25zdDsKIAogcHJpdmF0ZToKKyAgICB2b2lkIGNsZWFy
VXBsb2Fkc1RvRGVsZXRlZFJlc291cmNlcyhEZXF1ZTxUZXh0dXJlVXBsb2FkZXI6OlBhcmFtZXRl
cnM+JiBlbnRyeVF1ZXVlKTsKICAgICBEZXF1ZTxUZXh0dXJlVXBsb2FkZXI6OlBhcmFtZXRlcnM+
IG1fZnVsbEVudHJpZXM7CiAgICAgRGVxdWU8VGV4dHVyZVVwbG9hZGVyOjpQYXJhbWV0ZXJzPiBt
X3BhcnRpYWxFbnRyaWVzOwogICAgIERlcXVlPFRleHR1cmVDb3BpZXI6OlBhcmFtZXRlcnM+IG1f
Y29weUVudHJpZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCmluZGV4IDEzYjkwNDUyNzUz
NmExZDQ0OTA2MmExNWFjZTYzZDk2ODA0MTY1NWQuLjM5MTBkNjU2ODUxMmI0MmJkNDRmY2U3ZDli
MzM2YmJmYTE3MDcxOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCkBAIC0zNTIsNiAr
MzUyLDI0IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6b25WU3luY1BhcmFtZXRlcnNDaGFuZ2VkKGRv
dWJsZSBtb25vdG9uaWNUaW1lYmFzZSwgZG91YmxlIGluCiAgICAgbV9zY2hlZHVsZXJPbkltcGxU
aHJlYWQtPnNldFRpbWViYXNlQW5kSW50ZXJ2YWwobW9ub3RvbmljVGltZWJhc2UsIGludGVydmFs
SW5TZWNvbmRzKTsKIH0KIAordm9pZCBDQ1RocmVhZFByb3h5OjpyZWR1Y2VDb250ZW50c1RleHR1
cmVzTWVtb3J5T25JbXBsVGhyZWFkKCkKK3sKKyAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOwor
ICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NUaHJlYWRQcm94eTo6cmVkdWNlQ29udGVudHNUZXh0
dXJlc01lbW9yeU9uSW1wbFRocmVhZCIpOworCisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdC0+cmVk
dWNlQ29udGVudHNUZXh0dXJlc01lbW9yeU9uSW1wbFRocmVhZChtX2xheWVyVHJlZUhvc3RJbXBs
LT5yZXNvdXJjZVByb3ZpZGVyKCkpKSB7CisgICAgICAgIC8vIENsZWFyIGFueSBwZW5kaW5nIHVw
bG9hZHMgdG8gZGVsZXRlZCByZXNvdXJjZXMuCisgICAgICAgIGlmIChtX2N1cnJlbnRUZXh0dXJl
VXBkYXRlQ29udHJvbGxlck9uSW1wbFRocmVhZCkKKyAgICAgICAgICAgIG1fY3VycmVudFRleHR1
cmVVcGRhdGVDb250cm9sbGVyT25JbXBsVGhyZWFkLT5kaXNjYXJkVXBsb2Fkc1RvRGVsZXRlZFJl
c291cmNlcygpOworCisgICAgICAgIC8vIFRoZSBpbXBsIGxheWVyIHRyZWUgbWF5IG5vdyBjb250
YWluIHJlZmVyZW5jZXMgdG8gZGVsZXRlZCByZXNvdXJjZXMsIHNvIGRpc2FsbG93CisgICAgICAg
IC8vIGRyYXdpbmcgdW50aWwgYSBjb21taXQgd2hpY2ggYWNrbm93bGVkZ2VzIHRoZSByZWZlcmVu
Y2VzIGFyZSByZW1vdmVkIG9jY3Vycy4KKyAgICAgICAgbV9yZXNldENvbnRlbnRzVGV4dHVyZXNQ
dXJnZWRBZnRlckNvbW1pdE9uSW1wbFRocmVhZCA9IGZhbHNlOworICAgICAgICBtX2xheWVyVHJl
ZUhvc3RJbXBsLT5zZXRDb250ZW50c1RleHR1cmVzUHVyZ2VkKCk7CisgICAgICAgIHNldE5lZWRz
Q29tbWl0T25JbXBsVGhyZWFkKCk7CisgICAgfQorfQorCiB2b2lkIENDVGhyZWFkUHJveHk6OnNl
dE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCkKIHsKICAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkp
OwpAQCAtNDc1LDcgKzQ5Myw2IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6c2NoZWR1bGVkQWN0aW9u
QmVnaW5GcmFtZSgpCiAgICAgbV9wZW5kaW5nQmVnaW5GcmFtZVJlcXVlc3QgPSBhZG9wdFB0cihu
ZXcgQmVnaW5GcmFtZUFuZENvbW1pdFN0YXRlKCkpOwogICAgIG1fcGVuZGluZ0JlZ2luRnJhbWVS
ZXF1ZXN0LT5tb25vdG9uaWNGcmFtZUJlZ2luVGltZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5n
VGltZSgpOwogICAgIG1fcGVuZGluZ0JlZ2luRnJhbWVSZXF1ZXN0LT5zY3JvbGxJbmZvID0gbV9s
YXllclRyZWVIb3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOwotICAgIG1fcGVuZGluZ0Jl
Z2luRnJhbWVSZXF1ZXN0LT5jb250ZW50c1RleHR1cmVzV2VyZURlbGV0ZWQgPSBtX2xheWVyVHJl
ZUhvc3RJbXBsLT5jb250ZW50c1RleHR1cmVzUHVyZ2VkKCk7CiAgICAgbV9wZW5kaW5nQmVnaW5G
cmFtZVJlcXVlc3QtPm1lbW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzID0gbV9sYXllclRyZWVIb3N0
SW1wbC0+bWVtb3J5QWxsb2NhdGlvbkxpbWl0Qnl0ZXMoKTsKIAogICAgIG1fbWFpblRocmVhZFBy
b3h5LT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OmJl
Z2luRnJhbWUpKTsKQEAgLTU0NSw4ICs1NjIsOCBAQCB2b2lkIENDVGhyZWFkUHJveHk6OmJlZ2lu
RnJhbWUoKQogICAgIGlmICghbV9sYXllclRyZWVIb3N0LT5pbml0aWFsaXplUmVuZGVyZXJJZk5l
ZWRlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAocmVxdWVzdC0+Y29udGVudHNUZXh0
dXJlc1dlcmVEZWxldGVkKQotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmV2aWN0QWxsQ29udGVu
dFRleHR1cmVzKCk7CisgICAgaW50IGNvbnRlbnRzVGV4dHVyZXNQdXJnZUFjayA9IDA7CisgICAg
bV9sYXllclRyZWVIb3N0LT5kZXN0cm95Q29udGVudHNUZXh0dXJlc0V2aWN0ZWRCeUltcGxUaHJl
YWQoJmNvbnRlbnRzVGV4dHVyZXNQdXJnZUFjayk7CiAKICAgICBPd25QdHI8Q0NUZXh0dXJlVXBk
YXRlUXVldWU+IHF1ZXVlID0gYWRvcHRQdHIobmV3IENDVGV4dHVyZVVwZGF0ZVF1ZXVlKTsKICAg
ICBtX2xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVycygqKHF1ZXVlLmdldCgpKSwgcmVxdWVzdC0+
bWVtb3J5QWxsb2NhdGlvbkxpbWl0Qnl0ZXMpOwpAQCAtNTc2LDcgKzU5Myw3IEBAIHZvaWQgQ0NU
aHJlYWRQcm94eTo6YmVnaW5GcmFtZSgpCiAgICAgICAgIERlYnVnU2NvcGVkU2V0TWFpblRocmVh
ZEJsb2NrZWQgbWFpblRocmVhZEJsb2NrZWQ7CiAKICAgICAgICAgQ0NDb21wbGV0aW9uRXZlbnQg
Y29tcGxldGlvbjsKLSAgICAgICAgQ0NQcm94eTo6aW1wbFRocmVhZCgpLT5wb3N0VGFzayhjcmVh
dGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVDb21wbGV0ZU9u
SW1wbFRocmVhZCwgJmNvbXBsZXRpb24sIHF1ZXVlLnJlbGVhc2UoKSwgcmVxdWVzdC0+Y29udGVu
dHNUZXh0dXJlc1dlcmVEZWxldGVkKSk7CisgICAgICAgIENDUHJveHk6OmltcGxUaHJlYWQoKS0+
cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5OjpiZWdpbkZy
YW1lQ29tcGxldGVPbkltcGxUaHJlYWQsICZjb21wbGV0aW9uLCBxdWV1ZS5yZWxlYXNlKCksIGNv
bnRlbnRzVGV4dHVyZXNQdXJnZUFjaykpOwogICAgICAgICBjb21wbGV0aW9uLndhaXQoKTsKICAg
ICB9CiAKQEAgLTU4NCw3ICs2MDEsNyBAQCB2b2lkIENDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWUo
KQogICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGlkQmVnaW5GcmFtZSgpOwogfQogCi12b2lkIENDVGhy
ZWFkUHJveHk6OmJlZ2luRnJhbWVDb21wbGV0ZU9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVu
dCogY29tcGxldGlvbiwgUGFzc093blB0cjxDQ1RleHR1cmVVcGRhdGVRdWV1ZT4gcXVldWUsIGJv
b2wgY29udGVudHNUZXh0dXJlc1dlcmVEZWxldGVkKQordm9pZCBDQ1RocmVhZFByb3h5OjpiZWdp
bkZyYW1lQ29tcGxldGVPbkltcGxUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24s
IFBhc3NPd25QdHI8Q0NUZXh0dXJlVXBkYXRlUXVldWU+IHF1ZXVlLCBpbnQgY29udGVudHNUZXh0
dXJlc0V2aWN0aW9uQ291bnRlckFjaykKIHsKICAgICBUUkFDRV9FVkVOVDAoImNjIiwgIkNDVGhy
ZWFkUHJveHk6OmJlZ2luRnJhbWVDb21wbGV0ZU9uSW1wbFRocmVhZCIpOwogICAgIEFTU0VSVCgh
bV9jb21taXRDb21wbGV0aW9uRXZlbnRPbkltcGxUaHJlYWQpOwpAQCAtNTk3LDEyICs2MTQsMTUg
QEAgdm9pZCBDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQ29tcGxldGVPbkltcGxUaHJlYWQoQ0ND
b21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGlmICghY29udGVudHNUZXh0dXJlc1dlcmVEZWxldGVkICYmIG1fbGF5ZXJUcmVlSG9zdEltcGwt
PmNvbnRlbnRzVGV4dHVyZXNQdXJnZWQoKSkgewotICAgICAgICAvLyBXZSBwdXJnZWQgdGhlIGNv
bnRlbnQgdGV4dHVyZXMgb24gdGhlIGltcGwgdGhyZWFkIGJldHdlZW4gdGhlIHRpbWUgd2UKLSAg
ICAgICAgLy8gcG9zdGVkIHRoZSBiZWdpbkZyYW1lIHRhc2sgYW5kIG5vdywgbWVhbmluZyB3ZSBo
YXZlIGEgYnVuY2ggb2YKLSAgICAgICAgLy8gdXBsb2FkcyB0aGF0IGFyZSBub3cgaW52YWxpZC4g
Q2xlYXIgdGhlIHVwbG9hZHMgKHRoZXkgYWxsIGdvIHRvCi0gICAgICAgIC8vIGNvbnRlbnQgdGV4
dHVyZXMpLCBhbmQga2ljayBhbm90aGVyIGNvbW1pdCB0byBmaWxsIHRoZW0gYWdhaW4uCi0gICAg
ICAgIHF1ZXVlLT5jbGVhclVwbG9hZHMoKTsKKyAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdC0+Y29u
dGVudHNUZXh0dXJlTWFuYWdlcigpLT5pc0V2aWN0aW9uQ291bnRlckFja1VwVG9EYXRlKGNvbnRl
bnRzVGV4dHVyZXNFdmljdGlvbkNvdW50ZXJBY2spKSB7CisgICAgICAgIFRSQUNFX0VWRU5UMCgi
Y2MiLCAiQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUNvbXBsZXRlT25JbXBsVGhyZWFkX3B1cmdl
X3NpbmNlX2NvbW1pdCIpOworICAgICAgICAvLyBUaGUgdXBsb2FkIHF1ZXVlIG1heSBjb250YWlu
IHJlZmVyZW5jZXMgdG8gdGV4dHVyZXMgdGhhdCB3ZXJlIGFzeW5jaHJvbm91c2x5CisgICAgICAg
IC8vIGRlbGV0ZWQuIFJlbW92ZSB0aGVtLgorICAgICAgICBxdWV1ZS0+Y2xlYXJVcGxvYWRzVG9E
ZWxldGVkUmVzb3VyY2VzKCk7CisKKyAgICAgICAgLy8gVGhlcmUgZXhpc3QgdGV4dHVyZXMgcHVy
Z2VkIGJ5IHRoZSBpbXBsIHRocmVhZCB0aGF0IHRoZSBtYWluIHRocmVhZAorICAgICAgICAvLyBk
b2Vzbid0IGtub3cgb2YuIFJlcXVlc3QgYSByZWNvbW1pdCwgd2hpY2ggd2lsbCBpbmZvcm0gdGhl
IG1haW4gdGhyZWFkCisgICAgICAgIC8vIG9mIHRoZSBwdXJnZWQgcmVzb3VyY2VzLgogICAgICAg
ICBzZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpOwogICAgIH0gZWxzZQogICAgICAgICBtX3Jl
c2V0Q29udGVudHNUZXh0dXJlc1B1cmdlZEFmdGVyQ29tbWl0T25JbXBsVGhyZWFkID0gdHJ1ZTsK
QEAgLTg5OSw4ICs5MTksNyBAQCB2b2lkIENDVGhyZWFkUHJveHk6OmxheWVyVHJlZUhvc3RDbG9z
ZWRPbkltcGxUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpbwogewogICAgIFRSQUNF
X0VWRU5UMCgiY2MiLCAiQ0NUaHJlYWRQcm94eTo6bGF5ZXJUcmVlSG9zdENsb3NlZE9uSW1wbFRo
cmVhZCIpOwogICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7Ci0gICAgaWYgKCFtX2xheWVyVHJl
ZUhvc3RJbXBsLT5jb250ZW50c1RleHR1cmVzUHVyZ2VkKCkpCi0gICAgICAgIG1fbGF5ZXJUcmVl
SG9zdC0+ZGVsZXRlQ29udGVudHNUZXh0dXJlc09uSW1wbFRocmVhZChtX2xheWVyVHJlZUhvc3RJ
bXBsLT5yZXNvdXJjZVByb3ZpZGVyKCkpOworICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGVsZXRlQWxs
Q29udGVudHNUZXh0dXJlc09uSW1wbFRocmVhZChtX2xheWVyVHJlZUhvc3RJbXBsLT5yZXNvdXJj
ZVByb3ZpZGVyKCkpOwogICAgIG1faW5wdXRIYW5kbGVyT25JbXBsVGhyZWFkLmNsZWFyKCk7CiAg
ICAgbV9sYXllclRyZWVIb3N0SW1wbC5jbGVhcigpOwogICAgIG1fc2NoZWR1bGVyT25JbXBsVGhy
ZWFkLmNsZWFyKCk7CkBAIC05MjIsOCArOTQxLDcgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpyZWNy
ZWF0ZUNvbnRleHRPbkltcGxUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24sIEMK
IHsKICAgICBUUkFDRV9FVkVOVDAoImNjIiwgIkNDVGhyZWFkUHJveHk6OnJlY3JlYXRlQ29udGV4
dE9uSW1wbFRocmVhZCIpOwogICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7Ci0gICAgaWYgKCFt
X2xheWVyVHJlZUhvc3RJbXBsLT5jb250ZW50c1RleHR1cmVzUHVyZ2VkKCkpCi0gICAgICAgIG1f
bGF5ZXJUcmVlSG9zdC0+ZGVsZXRlQ29udGVudHNUZXh0dXJlc09uSW1wbFRocmVhZChtX2xheWVy
VHJlZUhvc3RJbXBsLT5yZXNvdXJjZVByb3ZpZGVyKCkpOworICAgIG1fbGF5ZXJUcmVlSG9zdC0+
ZGVsZXRlQWxsQ29udGVudHNUZXh0dXJlc09uSW1wbFRocmVhZChtX2xheWVyVHJlZUhvc3RJbXBs
LT5yZXNvdXJjZVByb3ZpZGVyKCkpOwogICAgICpyZWNyZWF0ZVN1Y2NlZWRlZCA9IG1fbGF5ZXJU
cmVlSG9zdEltcGwtPmluaXRpYWxpemVSZW5kZXJlcihhZG9wdFB0cihjb250ZXh0UHRyKSwgdGV4
dHVyZVVwbG9hZGVyKTsKICAgICBpZiAoKnJlY3JlYXRlU3VjY2VlZGVkKSB7CiAgICAgICAgICpj
YXBhYmlsaXRpZXMgPSBtX2xheWVyVHJlZUhvc3RJbXBsLT5yZW5kZXJlckNhcGFiaWxpdGllcygp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaHJlYWRQcm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oCmluZGV4IDcyYWM4MjVjYTZkYTBmYWI3NTA2MjVjNDk4
ZmJhNDA3MDYxZTNkZTEuLjZiOTc5MTdhZWIyMDc2MGVjMDlkNjA0MjQ5Y2I5NzkxZjJiZTg1ZDYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGhyZWFkUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKQEAgLTgxLDYgKzgxLDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBzZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpIE9WRVJSSURFOwogICAg
IHZpcnR1YWwgdm9pZCBzZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpIE9WRVJSSURFOwogICAg
IHZpcnR1YWwgdm9pZCBwb3N0QW5pbWF0aW9uRXZlbnRzVG9NYWluVGhyZWFkT25JbXBsVGhyZWFk
KFBhc3NPd25QdHI8Q0NBbmltYXRpb25FdmVudHNWZWN0b3I+LCBkb3VibGUgd2FsbENsb2NrVGlt
ZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlZHVjZUNvbnRlbnRzVGV4dHVyZXNNZW1v
cnlPbkltcGxUaHJlYWQoKSBPVkVSUklERTsKIAogICAgIC8vIENDU2NoZWR1bGVyQ2xpZW50IGlt
cGxlbWVudGF0aW9uCiAgICAgdmlydHVhbCBib29sIGNhbkRyYXcoKSBPVkVSUklERTsKQEAgLTEw
Niw3ICsxMDcsNiBAQCBwcml2YXRlOgogCiAgICAgICAgIGRvdWJsZSBtb25vdG9uaWNGcmFtZUJl
Z2luVGltZTsKICAgICAgICAgT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm87
Ci0gICAgICAgIGJvb2wgY29udGVudHNUZXh0dXJlc1dlcmVEZWxldGVkOwogICAgICAgICBzaXpl
X3QgbWVtb3J5QWxsb2NhdGlvbkxpbWl0Qnl0ZXM7CiAgICAgfTsKICAgICBPd25QdHI8QmVnaW5G
cmFtZUFuZENvbW1pdFN0YXRlPiBtX3BlbmRpbmdCZWdpbkZyYW1lUmVxdWVzdDsKQEAgLTEyNyw3
ICsxMjcsNyBAQCBwcml2YXRlOgogICAgICAgICBJbnRSZWN0IHJlY3Q7CiAgICAgfTsKICAgICB2
b2lkIGZvcmNlQmVnaW5GcmFtZU9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVudCopOwotICAg
IHZvaWQgYmVnaW5GcmFtZUNvbXBsZXRlT25JbXBsVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50Kiwg
UGFzc093blB0cjxDQ1RleHR1cmVVcGRhdGVRdWV1ZT4sIGJvb2wgY29udGVudHNUZXh0dXJlc1dl
cmVEZWxldGVkKTsKKyAgICB2b2lkIGJlZ2luRnJhbWVDb21wbGV0ZU9uSW1wbFRocmVhZChDQ0Nv
bXBsZXRpb25FdmVudCosIFBhc3NPd25QdHI8Q0NUZXh0dXJlVXBkYXRlUXVldWU+LCBpbnQgY29u
dGVudHNUZXh0dXJlc1B1cmdlQWNrKTsKICAgICB2b2lkIGJlZ2luRnJhbWVBYm9ydGVkT25JbXBs
VGhyZWFkKCk7CiAgICAgdm9pZCByZXF1ZXN0UmVhZGJhY2tPbkltcGxUaHJlYWQoUmVhZGJhY2tS
ZXF1ZXN0Kik7CiAgICAgdm9pZCByZXF1ZXN0U3RhcnRQYWdlU2NhbGVBbmltYXRpb25PbkltcGxU
aHJlYWQoSW50U2l6ZSB0YXJnZXRQb3NpdGlvbiwgYm9vbCB1c2VBbmNob3IsIGZsb2F0IHNjYWxl
LCBkb3VibGUgZHVyYXRpb25TZWMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAppbmRleCBkMDliYzM2NDllYWVi
ZWM0M2Q4OWRkNjIzNzQzMzZlYmYyNTYxYzI0Li40OGIyMjBhYTkxZTdlZTJiNjA0MmU2MjBmMGM1
ZTQ3NWMyODQzY2U4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
TGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcApAQCAtODcsNiArODcsNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCkgT1ZFUlJJREUg
eyBtX2RpZFJlcXVlc3RSZWRyYXcgPSB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRz
Q29tbWl0T25JbXBsVGhyZWFkKCkgT1ZFUlJJREUgeyBtX2RpZFJlcXVlc3RDb21taXQgPSB0cnVl
OyB9CiAgICAgdmlydHVhbCB2b2lkIHBvc3RBbmltYXRpb25FdmVudHNUb01haW5UaHJlYWRPbklt
cGxUaHJlYWQoUGFzc093blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4sIGRvdWJsZSB3YWxs
Q2xvY2tUaW1lKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVkdWNlQ29udGVudHNU
ZXh0dXJlc01lbW9yeU9uSW1wbFRocmVhZCgpIE9WRVJSSURFIHsgfQogCiAgICAgUGFzc093blB0
cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBjcmVhdGVMYXllclRyZWVIb3N0KGJvb2wgcGFydGlhbFN3
YXAsIFBhc3NPd25QdHI8Q0NHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dCwgUGFzc093
blB0cjxDQ0xheWVySW1wbD4gcm9vdFB0cikKICAgICB7CkBAIC0zNzkxLDEyICszNzkyLDYgQEAg
VEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzdXJmYWNlVGV4dHVyZUNhY2hpbmdOb1Bh
cnRpYWxTd2FwKQogICAgIH0KIH0KIAotVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBy
ZWxlYXNlQ29udGVudHNUZXh0dXJlU2hvdWxkVHJpZ2dlckNvbW1pdCkKLXsKLSAgICBtX2hvc3RJ
bXBsLT5yZWxlYXNlQ29udGVudHNUZXh0dXJlcygpOwotICAgIEVYUEVDVF9UUlVFKG1fZGlkUmVx
dWVzdENvbW1pdCk7Ci19Ci0KIHN0cnVjdCBSZW5kZXJQYXNzQ2FjaGVFbnRyeSB7CiAgICAgbXV0
YWJsZSBPd25QdHI8Q0NSZW5kZXJQYXNzPiByZW5kZXJQYXNzUHRyOwogICAgIENDUmVuZGVyUGFz
cyogcmVuZGVyUGFzczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NUZXh0dXJlVXBkYXRlQ29udHJvbGxlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ1RleHR1cmVVcGRhdGVDb250cm9sbGVyVGVzdC5jcHAKaW5kZXggMTE2NTlmNmY1
MmI4YWJkMGFlMzA3NTliN2E2NjU0MTQ1MTA2MDQzYS4uMDIyNzcxMTY4Y2M5ZDJiODFlZDBlZWM2
M2E1MzczZDk5MjM3YmFjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ1RleHR1cmVVcGRhdGVDb250cm9sbGVyVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ1RleHR1cmVVcGRhdGVDb250cm9sbGVyVGVzdC5jcHAKQEAgLTg3LDEw
ICs4NywxNCBAQCBwcml2YXRlOgogCiBjbGFzcyBUZXh0dXJlRm9yVXBsb2FkVGVzdCA6IHB1Ymxp
YyBMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlIHsKIHB1YmxpYzoKLSAgICBUZXh0dXJlRm9y
VXBsb2FkVGVzdCgpIDogTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZShhZG9wdFB0cjxDQ1By
aW9yaXRpemVkVGV4dHVyZT4oMCkpIHsgfQorICAgIFRleHR1cmVGb3JVcGxvYWRUZXN0KCkgOiBM
YXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlKGFkb3B0UHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJl
PigwKSksIG1fZGVsZXRlZChmYWxzZSkgeyB9CisgICAgdmlydHVhbCBib29sIGJhY2tpbmdSZXNv
dXJjZVdhc0RlbGV0ZWQoKSBjb25zdCB7IHJldHVybiBtX2RlbGV0ZWQ7IH0KICAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlUmVjdChDQ1Jlc291cmNlUHJvdmlkZXIqLCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0LCBjb25zdCBJbnRTaXplJiBkZXN0T2Zmc2V0KSB7IH0KLX07CiAKKyAgICB2b2lkIHNl
dEJhY2tpbmdSZXNvdXJjZURlbGV0ZWQoKSB7IG1fZGVsZXRlZCA9IHRydWU7IH0KK3ByaXZhdGU6
CisgICAgYm9vbCBtX2RlbGV0ZWQ7Cit9OwogCiBjbGFzcyBDQ1RleHR1cmVVcGRhdGVDb250cm9s
bGVyVGVzdCA6IHB1YmxpYyBUZXN0IHsKIHB1YmxpYzoKQEAgLTE4MywyOCArMTg3LDM4IEBAIHBy
b3RlY3RlZDoKICAgICAgICAgV2ViQ29tcG9zaXRvcjo6c2h1dGRvd24oKTsKICAgICB9CiAKLSAg
ICB2b2lkIGFwcGVuZEZ1bGxVcGxvYWRzVG9VcGRhdGVRdWV1ZShpbnQgY291bnQpCisgICAgdm9p
ZCBhcHBlbmRGdWxsVXBsb2Fkc09mSW5kZXhlZFRleHR1cmVUb1VwZGF0ZVF1ZXVlKGludCBjb3Vu
dCwgaW50IHRleHR1cmVJbmRleCkKICAgICB7CiAgICAgICAgIG1fZnVsbFVwbG9hZENvdW50RXhw
ZWN0ZWQgKz0gY291bnQ7CiAgICAgICAgIG1fdG90YWxVcGxvYWRDb3VudEV4cGVjdGVkICs9IGNv
dW50OwogCiAgICAgICAgIGNvbnN0IEludFJlY3QgcmVjdCgwLCAwLCAzMDAsIDE1MCk7Ci0gICAg
ICAgIGNvbnN0IFRleHR1cmVVcGxvYWRlcjo6UGFyYW1ldGVycyB1cGxvYWQgPSB7ICZtX3RleHR1
cmUsIHJlY3QsIEludFNpemUoKSB9OworICAgICAgICBjb25zdCBUZXh0dXJlVXBsb2FkZXI6OlBh
cmFtZXRlcnMgdXBsb2FkID0geyAmbV90ZXh0dXJlc1t0ZXh0dXJlSW5kZXhdLCByZWN0LCBJbnRT
aXplKCkgfTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogICAgICAg
ICAgICAgbV9xdWV1ZS0+YXBwZW5kRnVsbFVwbG9hZCh1cGxvYWQpOwogICAgIH0KIAotICAgIHZv
aWQgYXBwZW5kUGFydGlhbFVwbG9hZHNUb1VwZGF0ZVF1ZXVlKGludCBjb3VudCkKKyAgICB2b2lk
IGFwcGVuZEZ1bGxVcGxvYWRzVG9VcGRhdGVRdWV1ZShpbnQgY291bnQpCisgICAgeworICAgICAg
ICBhcHBlbmRGdWxsVXBsb2Fkc09mSW5kZXhlZFRleHR1cmVUb1VwZGF0ZVF1ZXVlKGNvdW50LCAw
KTsKKyAgICB9CisKKyAgICB2b2lkIGFwcGVuZFBhcnRpYWxVcGxvYWRzT2ZJbmRleGVkVGV4dHVy
ZVRvVXBkYXRlUXVldWUoaW50IGNvdW50LCBpbnQgdGV4dHVyZUluZGV4KQogICAgIHsKICAgICAg
ICAgbV9wYXJ0aWFsQ291bnRFeHBlY3RlZCArPSBjb3VudDsKICAgICAgICAgbV90b3RhbFVwbG9h
ZENvdW50RXhwZWN0ZWQgKz0gY291bnQ7CiAKICAgICAgICAgY29uc3QgSW50UmVjdCByZWN0KDAs
IDAsIDEwMCwgMTAwKTsKLSAgICAgICAgY29uc3QgVGV4dHVyZVVwbG9hZGVyOjpQYXJhbWV0ZXJz
IHVwbG9hZCA9IHsgJm1fdGV4dHVyZSwgcmVjdCwgSW50U2l6ZSgpIH07CisgICAgICAgIGNvbnN0
IFRleHR1cmVVcGxvYWRlcjo6UGFyYW1ldGVycyB1cGxvYWQgPSB7ICZtX3RleHR1cmVzW3RleHR1
cmVJbmRleF0sIHJlY3QsIEludFNpemUoKSB9OwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGNvdW50OyBpKyspCiAgICAgICAgICAgICBtX3F1ZXVlLT5hcHBlbmRQYXJ0aWFsVXBsb2FkKHVw
bG9hZCk7CiAgICAgfQogCisgICAgdm9pZCBhcHBlbmRQYXJ0aWFsVXBsb2Fkc1RvVXBkYXRlUXVl
dWUoaW50IGNvdW50KQorICAgIHsKKyAgICAgICAgYXBwZW5kUGFydGlhbFVwbG9hZHNPZkluZGV4
ZWRUZXh0dXJlVG9VcGRhdGVRdWV1ZShjb3VudCwgMCk7CisgICAgfQorCiAgICAgdm9pZCBzZXRN
YXhVcGxvYWRDb3VudFBlclVwZGF0ZShpbnQgY291bnQpCiAgICAgewogICAgICAgICBtX21heFVw
bG9hZENvdW50UGVyVXBkYXRlID0gY291bnQ7CkBAIC0yMTUsNyArMjI5LDcgQEAgcHJvdGVjdGVk
OgogICAgIE93blB0cjxDQ0dyYXBoaWNzQ29udGV4dD4gbV9jb250ZXh0OwogICAgIE93blB0cjxD
Q1Jlc291cmNlUHJvdmlkZXI+IG1fcmVzb3VyY2VQcm92aWRlcjsKICAgICBPd25QdHI8Q0NUZXh0
dXJlVXBkYXRlUXVldWU+IG1fcXVldWU7Ci0gICAgVGV4dHVyZUZvclVwbG9hZFRlc3QgbV90ZXh0
dXJlOworICAgIFRleHR1cmVGb3JVcGxvYWRUZXN0IG1fdGV4dHVyZXNbNF07CiAgICAgRmFrZVRl
eHR1cmVDb3BpZXIgbV9jb3BpZXI7CiAgICAgVGV4dHVyZVVwbG9hZGVyRm9yVXBsb2FkVGVzdCBt
X3VwbG9hZGVyOwogCkBAIC02ODUsNCArNjk5LDM3IEBAIFRFU1RfRihDQ1RleHR1cmVVcGRhdGVD
b250cm9sbGVyVGVzdCwgVXBkYXRlc0NvbXBsZXRlSW5GaW5pdGVUaW1lKQogICAgIEVYUEVDVF9F
USgyLCBtX251bVRvdGFsVXBsb2Fkcyk7CiB9CiAKK1RFU1RfRihDQ1RleHR1cmVVcGRhdGVDb250
cm9sbGVyVGVzdCwgQXN5bmNEZWxldGlvbikKK3sKKyAgICBhcHBlbmRGdWxsVXBsb2Fkc09mSW5k
ZXhlZFRleHR1cmVUb1VwZGF0ZVF1ZXVlKDEsIDApOworICAgIGFwcGVuZFBhcnRpYWxVcGxvYWRz
T2ZJbmRleGVkVGV4dHVyZVRvVXBkYXRlUXVldWUoMSwgMSk7CisgICAgYXBwZW5kRnVsbFVwbG9h
ZHNPZkluZGV4ZWRUZXh0dXJlVG9VcGRhdGVRdWV1ZSgxLCAyKTsKKyAgICBhcHBlbmRQYXJ0aWFs
VXBsb2Fkc09mSW5kZXhlZFRleHR1cmVUb1VwZGF0ZVF1ZXVlKDEsIDMpOworICAgIERlYnVnU2Nv
cGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOworCisgICAgbV9xdWV1ZS0+Y2xlYXJVcGxvYWRz
VG9EZWxldGVkUmVzb3VyY2VzKCk7CisgICAgRVhQRUNUX0VRKDJ1LCBtX3F1ZXVlLT5mdWxsVXBs
b2FkU2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMnUsIG1fcXVldWUtPnBhcnRpYWxVcGxvYWRTaXpl
KCkpOworCisgICAgbV90ZXh0dXJlc1swXS5zZXRCYWNraW5nUmVzb3VyY2VEZWxldGVkKCk7Cisg
ICAgbV9xdWV1ZS0+Y2xlYXJVcGxvYWRzVG9EZWxldGVkUmVzb3VyY2VzKCk7CisgICAgRVhQRUNU
X0VRKDF1LCBtX3F1ZXVlLT5mdWxsVXBsb2FkU2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMnUsIG1f
cXVldWUtPnBhcnRpYWxVcGxvYWRTaXplKCkpOworCisgICAgbV90ZXh0dXJlc1szXS5zZXRCYWNr
aW5nUmVzb3VyY2VEZWxldGVkKCk7CisgICAgbV9xdWV1ZS0+Y2xlYXJVcGxvYWRzVG9EZWxldGVk
UmVzb3VyY2VzKCk7CisgICAgRVhQRUNUX0VRKDF1LCBtX3F1ZXVlLT5mdWxsVXBsb2FkU2l6ZSgp
KTsKKyAgICBFWFBFQ1RfRVEoMXUsIG1fcXVldWUtPnBhcnRpYWxVcGxvYWRTaXplKCkpOworCisg
ICAgbV90ZXh0dXJlc1syXS5zZXRCYWNraW5nUmVzb3VyY2VEZWxldGVkKCk7CisgICAgbV9xdWV1
ZS0+Y2xlYXJVcGxvYWRzVG9EZWxldGVkUmVzb3VyY2VzKCk7CisgICAgRVhQRUNUX0VRKDB1LCBt
X3F1ZXVlLT5mdWxsVXBsb2FkU2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIG1fcXVldWUtPnBh
cnRpYWxVcGxvYWRTaXplKCkpOworCisgICAgbV90ZXh0dXJlc1sxXS5zZXRCYWNraW5nUmVzb3Vy
Y2VEZWxldGVkKCk7CisgICAgbV9xdWV1ZS0+Y2xlYXJVcGxvYWRzVG9EZWxldGVkUmVzb3VyY2Vz
KCk7CisgICAgRVhQRUNUX0VRKDB1LCBtX3F1ZXVlLT5mdWxsVXBsb2FkU2l6ZSgpKTsKKyAgICBF
WFBFQ1RfRVEoMHUsIG1fcXVldWUtPnBhcnRpYWxVcGxvYWRTaXplKCkpOworfQorCiB9IC8vIG5h
bWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162358</attachid>
            <date>2012-09-05 16:05:10 -0700</date>
            <delta_ts>2012-09-06 11:15:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95057-20120905160451.patch</filename>
            <type>text/plain</type>
            <size>47433</size>
            <attacher name="Christopher Cameron">ccameron</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3NjUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODEzOThhZjJmNmQ0MTNi
M2RhNTdlMmMxZjUwOGUwZDdjODI0MWEwZC4uMDc5YmFmMmEwNGY1YTkxOGQ4OWRjYTljM2I3MDMy
OThmM2Q1NTE0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDEyLTA5LTA1ICBDaHJp
c3RvcGhlciBDYW1lcm9uICA8Y2NhbWVyb25AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJv
bWl1bV0gQWxsb3cgaW1wbC10aHJlYWQgZGVsZXRpb24gb2Ygb25seSBzb21lIHJlc291cmNlcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTUwNTcKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUb3dhcmRzIGFs
bG93aW5nIHRoZSBpbXBsIHRocmVhZCB0byBkZWxldGUganVzdCBzb21lIHJlc291cmNlcyAoYXMK
KyAgICAgICAgb3Bwb3NlZCB0byBkZWxldGluZyBhbGwgcmVzb3VyY2VzKS4KKworICAgICAgICBE
byBpbXBsLXRocmVhZCBkZWxldGlvbiB0aHJvdWdoIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdl
ciBpbnN0ZWFkIG9mCisgICAgICAgIENDUmVzb3VyY2VQcm92aWRlci4gSW4gc3Vic2VxdWVudCBj
aGFuZ2VzIHRoZSBpbXBsIHRocmVhZCB3aWxsIGJlIGFibGUKKyAgICAgICAgdG8gc2V0IGEgdGhy
ZXNob2xkIGZvciB3aGF0IHRvIGRlbGV0ZSkuIEFkZCBhIHNldCBvZiB0ZXh0dXJlcyB0aGF0Cisg
ICAgICAgIGhhdmUgYmVlbiBkZWxldGVkIGJ5IHRoZSBpbXBsIHRocmVhZCwgYnV0IGhhdmUgbm90
IGhhZCB0aGVpciByZWxhdGVkCisgICAgICAgIHN0cnVjdHVyZXMgY2xlYXJlZCBieSB0aGUgbWFp
biB0aHJlYWQgeWV0LgorCisgICAgICAgIEFsbG93IG11bHRpcGxlIHRleHR1cmUgcHVyZ2VzIHRv
IG9jY3VyIHdpdGhvdXQgYSBjb21taXQgYmV0d2VlbiB0aGVtLgorICAgICAgICBJbiBDQ1RocmVh
ZFByb3h5LCBtYWtlIHRoZSBhY2tub3dsZWRnZW1lbnQgb2YgdGV4dHVyZSBkZWxldGlvbiBiZSBh
bgorICAgICAgICBpbnRlZ2VyIGNvdW50ZXIgaW5zdGVhZCBvZiBhIGJvb2wsIGJlY2F1c2Ugd2Ug
bWF5IGhhdmUgbXVsdGlwbGUKKyAgICAgICAgbm90LXlldC1hY2tub3dsZWRnZWQgcHVyZ2VzLiBS
ZW1vdmUgbWFueSBpbnN0YW5jZXMgd2hlcmUgdGV4dHVyZSBwdXJnZXMKKyAgICAgICAgd2VyZSBh
dm9pZGVkIHdoZW4gdGhlcmUgd2FzIGFuIG91dHN0YW5kaW5nIHRleHR1cmUgcHVyZ2UuCisKKyAg
ICAgICAgQWRkIHRoZSBhYmlsaXR5IHRvIGNsZWFyIG9ubHkgdGhlIHJlZmVyZW5jZXMgdG8gZGVs
ZXRlZCB0ZXh0dXJlcyBmcm9tCisgICAgICAgIHRoZSB0ZXh0dXJlIHVwbG9hZCBxdWV1ZS4KKwor
ICAgICAgICBBZGQgYXNzZXJ0aW9ucyB0aGF0IHJlc291cmNlcyBiZSBmcmVlZCB0byBDQ1ByaW9y
aXRpemVkVGV4dHVyZU1hbmFnZXIuCisKKyAgICAgICAgTmV3IHRlc3QgQ0NUZXh0dXJlVXBkYXRl
Q29udHJvbGxlclRlc3RfQXN5bmNEZWxldGlvbgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRU
ZXh0dXJlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1By
aW9yaXRpemVkVGV4dHVyZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5jcHA6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5j
cHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJl
YWRQcm94eS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4
dHVyZVVwZGF0ZUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVRdWV1ZS5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlUXVldWUuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNw
cDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5
Lmg6CisKIDIwMTItMDktMDUgIEJydW5vIGRlIE9saXZlaXJhIEFiaW5hZGVyICA8YnJ1bm8uYWJp
bmFkZXJAYmFzeXNrb20uY29tPgogCiAgICAgICAgIE1ha2UgUmVuZGVyU3R5bGU6OmNvbG9ySW5j
bHVkaW5nRmFsbGJhY2sgdXNlIHByaXZhdGUgZ2V0dGVycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwppbmRleCAwMzY3MmExZjcwMDdmZWFjZDQ2NGY1NDdiYjk1OGM0OWMxNTJmYjk3Li5kZWNlY2Uz
NDY2YjFjNTAzMWQ1MTM3OWNlMjg3NmE5ZTZjMzYxYjdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDEyLTA5LTA1ICBDaHJpc3RvcGhlciBDYW1lcm9uICA8
Y2NhbWVyb25AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQWxsb3cgaW1wbC10
aHJlYWQgZGVsZXRpb24gb2Ygb25seSBzb21lIHJlc291cmNlcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTUwNTcKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbiBDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwg
cmVtb3ZlIHRoZSB0ZXN0CisgICAgICAgIHJlbGVhc2VDb250ZW50c1RleHR1cmVTaG91bGRUcmln
Z2VyQ29tbWl0IGJlY2F1c2UgaXQgaXMgbm8gbG9uZ2VyIHZhbGlkCisgICAgICAgIGFuZCBpcyBy
ZWR1bmRhbnQuICBBIHJlbGVhc2VDb250ZW50c1RleHR1cmUgd2lsbCBvbmx5IHRyaWdnZXIgYSBj
b21taXQKKyAgICAgICAgaWYgdGhlIHJlbGVhc2VDb250ZW50c1RleHR1cmUgYWN0dWFsbHkgZGVs
ZXRlcyBhbnkgdGV4dHVyZXMsIGFuZAorICAgICAgICBDQ0xheWVyVHJlZUhvc3RUZXN0RXZpY3RU
ZXh0dXJlcyBhbHJlYWR5IHRlc3RzIHRoYXQgdGhlIGNvbW1pdCBpcworICAgICAgICBpc3N1ZWQg
dXBvbiBldmljdGlvbi4KKworICAgICAgICBBZGQgQ0NUZXh0dXJlVXBkYXRlQ29udHJvbGxlclRl
c3RfQXN5bmNEZWxldGlvbiB0ZXN0IHRvIHZhbGlkYXRlIG5ldworICAgICAgICB0ZXh0dXJlIHVw
bG9hZCBxdWV1ZSBiZWhhdmlvci4KKworICAgICAgICBVcGRhdGUgQ0NMYXllclRyZWVIb3N0SW1w
bFRlc3Qubm90aWZ5SWZDYW5EcmF3Q2hhbmdlZCB0byB3b3JrIHdpdGggdGhlCisgICAgICAgIG5l
dyBzdHJ1Y3R1cmUgKGNhbGxpbmcgaW50byB0aGUgaW1wbCB0cmVlIGZyb20gdGhlIGNsaWVudCku
CisKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHA6CisgICAgICAg
ICogdGVzdHMvQ0NUZXh0dXJlVXBkYXRlQ29udHJvbGxlclRlc3QuY3BwOgorCiAyMDEyLTA5LTA1
ICBNYXJrIFBpbGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21p
dW1dIFJlbW92ZSBnZXRSZW5kZXJTdHlsZUZvclN0cmlrZSBmcm9tIFBsYXRmb3JtU3VwcG9ydApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJUZXh0dXJlVXBkYXRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oCmluZGV4IDFhZDYxYzhkOGNhNDY1M2MxZjIwYjhj
ZWU0MjYyYzc3MWU0YmUyMWMuLjc0ZjRjNWRhNTQ5ZGNkNjY1YjQ2OTNiODRhMWFlNzdhYjEzNDM3
NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyVGV4dHVyZVVwZGF0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgKQEAgLTQ5LDYgKzQ5LDcgQEAgcHVi
bGljOgogCiAgICAgICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlKiB0ZXh0dXJlKCkgeyByZXR1cm4g
bV90ZXh0dXJlLmdldCgpOyB9CiAgICAgICAgIHZvaWQgc3dhcFRleHR1cmVXaXRoKE93blB0cjxD
Q1ByaW9yaXRpemVkVGV4dHVyZT4mIHRleHR1cmUpIHsgbV90ZXh0dXJlLnN3YXAodGV4dHVyZSk7
IH0KKyAgICAgICAgdmlydHVhbCBib29sIGJhY2tpbmdSZXNvdXJjZVdhc0RlbGV0ZWQoKSBjb25z
dCB7IHJldHVybiBtX3RleHR1cmUtPmJhY2tpbmdSZXNvdXJjZVdhc0RlbGV0ZWQoKTsgfQogICAg
ICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVJlY3QoY29uc3QgSW50UmVjdCYgLyogc291cmNlUmVj
dCAqLywgQ0NSZW5kZXJpbmdTdGF0cyYpIHsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
UmVjdChDQ1Jlc291cmNlUHJvdmlkZXIqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25z
dCBJbnRTaXplJiBkZXN0T2Zmc2V0KSA9IDA7CiAgICAgcHJvdGVjdGVkOgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggNDAyNmVlODIzZGRiMDE0NzBlN2Y2ZDY3ODY5MmU2NWU2
MTMzMTdiOC4uOGU3OTE1Njc4NWZjMWI0NTc2NDI3NTNjZjc0N2UxZWQ0ZmRjMTM2OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC0xOTMsMTMgKzE5MywyMSBAQCBDQ0xheWVy
VHJlZUhvc3Q6OlJlY3JlYXRlUmVzdWx0IENDTGF5ZXJUcmVlSG9zdDo6cmVjcmVhdGVDb250ZXh0
KCkKICAgICByZXR1cm4gUmVjcmVhdGVGYWlsZWRBbmRHYXZlVXA7CiB9CiAKLXZvaWQgQ0NMYXll
clRyZWVIb3N0OjpkZWxldGVDb250ZW50c1RleHR1cmVzT25JbXBsVGhyZWFkKENDUmVzb3VyY2VQ
cm92aWRlciogcmVzb3VyY2VQcm92aWRlcikKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpkZWxldGVB
bGxDb250ZW50c1RleHR1cmVzT25JbXBsVGhyZWFkKENDUmVzb3VyY2VQcm92aWRlciogcmVzb3Vy
Y2VQcm92aWRlcikKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogICAg
IGlmIChtX3JlbmRlcmVySW5pdGlhbGl6ZWQpCiAgICAgICAgIG1fY29udGVudHNUZXh0dXJlTWFu
YWdlci0+Y2xlYXJBbGxNZW1vcnkocmVzb3VyY2VQcm92aWRlcik7CiB9CiAKK2Jvb2wgQ0NMYXll
clRyZWVIb3N0OjpyZWR1Y2VDb250ZW50c1RleHR1cmVzTWVtb3J5T25JbXBsVGhyZWFkKENDUmVz
b3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlcikKK3sKKyAgICBBU1NFUlQoQ0NQcm94eTo6
aXNJbXBsVGhyZWFkKCkpOworICAgIGlmIChtX3JlbmRlcmVySW5pdGlhbGl6ZWQpCisgICAgICAg
IHJldHVybiBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9yeU9uSW1wbFRocmVh
ZChyZXNvdXJjZVByb3ZpZGVyKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHZvaWQgQ0NMYXll
clRyZWVIb3N0OjphY3F1aXJlTGF5ZXJUZXh0dXJlcygpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6
OmlzTWFpblRocmVhZCgpKTsKQEAgLTQxNCwxMSArNDIyLDEyIEBAIHZvaWQgQ0NMYXllclRyZWVI
b3N0OjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKICAgICBtX3Byb3h5LT5zZXRWaXNpYmxlKHZp
c2libGUpOwogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZXZpY3RBbGxDb250ZW50VGV4dHVy
ZXMoKQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZGVzdHJveUNvbnRlbnRzVGV4dHVyZXNFdmlj
dGVkQnlJbXBsVGhyZWFkKGludCogcHVyZ2VDb3VudGVyQWNrKQogewogICAgIEFTU0VSVChDQ1By
b3h5Ojppc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKG1fY29udGVudHNUZXh0dXJlTWFuYWdl
ci5nZXQoKSk7Ci0gICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5hbGxCYWNraW5nVGV4dHVy
ZXNXZXJlRGVsZXRlZCgpOworICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+ZGVzdHJveUV2
aWN0ZWRCYWNraW5ncyhwdXJnZUNvdW50ZXJBY2spOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9z
dDo6c3RhcnRQYWdlU2NhbGVBbmltYXRpb24oY29uc3QgSW50U2l6ZSYgdGFyZ2V0UG9zaXRpb24s
IGJvb2wgdXNlQW5jaG9yLCBmbG9hdCBzY2FsZSwgZG91YmxlIGR1cmF0aW9uU2VjKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3QuaAppbmRleCA3NDI3ODhjNzA2NzgzYmI2MzhmNTNkNjI2ZjJkYzVj
YzFlM2E1ODBhLi5kYzI1YWQ0MWY5NWM1NTk0MDkyMWI5NzQ3ZGI4ZjBhNGRjMzJlOGUxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApAQCAtMTU0LDcgKzE1NCw2IEBAIHB1YmxpYzoKICAg
ICBSZWNyZWF0ZVJlc3VsdCByZWNyZWF0ZUNvbnRleHQoKTsKICAgICB2b2lkIGRpZENvbW1pdEFu
ZERyYXdGcmFtZSgpIHsgbV9jbGllbnQtPmRpZENvbW1pdEFuZERyYXdGcmFtZSgpOyB9CiAgICAg
dm9pZCBkaWRDb21wbGV0ZVN3YXBCdWZmZXJzKCkgeyBtX2NsaWVudC0+ZGlkQ29tcGxldGVTd2Fw
QnVmZmVycygpOyB9Ci0gICAgdm9pZCBkZWxldGVDb250ZW50c1RleHR1cmVzT25JbXBsVGhyZWFk
KENDUmVzb3VyY2VQcm92aWRlciopOwogICAgIHZpcnR1YWwgdm9pZCBhY3F1aXJlTGF5ZXJUZXh0
dXJlcygpOwogICAgIC8vIFJldHVybnMgZmFsc2UgaWYgd2Ugc2hvdWxkIGFib3J0IHRoaXMgZnJh
bWUgZHVlIHRvIGluaXRpYWxpemF0aW9uIGZhaWx1cmUuCiAgICAgYm9vbCBpbml0aWFsaXplUmVu
ZGVyZXJJZk5lZWRlZCgpOwpAQCAtMjEyLDExICsyMTEsMTYgQEAgcHVibGljOgogCiAgICAgQ0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyKiBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCkgY29uc3Q7
CiAKLSAgICAvLyBUaGlzIHdpbGwgY2F1c2UgY29udGVudHMgdGV4dHVyZSBtYW5hZ2VyIHRvIGV2
aWN0IGFsbCB0ZXh0dXJlcywgYnV0Ci0gICAgLy8gd2l0aG91dCBkZWxldGluZyB0aGVtLiBUaGlz
IGhhcHBlbnMgYWZ0ZXIgYWxsIGNvbnRlbnQgdGV4dHVyZXMgaGF2ZQotICAgIC8vIGFscmVhZHkg
YmVlbiBkZWxldGVkIG9uIGltcGwsIGFmdGVyIGdldHRpbmcgYSAwIGFsbG9jYXRpb24gbGltaXQu
Ci0gICAgLy8gU2V0IGR1cmluZyBhIGNvbW1pdCwgYnV0IGJlZm9yZSB1cGRhdGVMYXllcnMuCi0g
ICAgdm9pZCBldmljdEFsbENvbnRlbnRUZXh0dXJlcygpOworICAgIHZvaWQgZGVsZXRlQWxsQ29u
dGVudHNUZXh0dXJlc09uSW1wbFRocmVhZChDQ1Jlc291cmNlUHJvdmlkZXIqKTsKKworICAgIC8v
IFRoaXMgd2lsbCBjYXVzZSBjb250ZW50cyB0ZXh0dXJlIG1hbmFnZXIgdG8gZnJlZSBzb21lIHJl
c291cmNlcyB1c2VkCisgICAgLy8gYnkgdGV4dHVyZXMsIGJ1dCB3aWxsIG5vdCBkZWxldGUgdGhl
IHRleHR1cmUgYmFja2luZ3Mgb2JqZWN0cy4gVGhlCisgICAgLy8gZnVuY3Rpb24gcmV0dXJucyB0
cnVlIGlmIHNvbWUgcmVzb3VyY2VzIHdlcmUgaW5kZWVkIGRlc3Ryb3llZC4KKyAgICBib29sIHJl
ZHVjZUNvbnRlbnRzVGV4dHVyZXNNZW1vcnlPbkltcGxUaHJlYWQoQ0NSZXNvdXJjZVByb3ZpZGVy
Kik7CisKKyAgICAvLyBUaGlzIHdpbGwgZGVzdHJveSB0aGUgYmFja2luZ3MgdGhhdCBoYWQgdGhl
aXIgR1BVIHJlc291cmNlcyBmcmVlZAorICAgIC8vIGJ5IGRlbGV0ZUNvbnRlbnRzVGV4dHVyZXNS
ZXNvdXJjZXNPbkltcGxUaHJlYWQuCisgICAgdm9pZCBkZXN0cm95Q29udGVudHNUZXh0dXJlc0V2
aWN0ZWRCeUltcGxUaHJlYWQoaW50KiBwdXJnZUNvdW50ZXJBY2spOwogCiAgICAgYm9vbCB2aXNp
YmxlKCkgY29uc3QgeyByZXR1cm4gbV92aXNpYmxlOyB9CiAgICAgdm9pZCBzZXRWaXNpYmxlKGJv
b2wpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCBkNDU2N2Ni
ZTQyMjk0OGM5YzUwMjAzMjA4YmFkYzY1NWVmNGMzYzcxLi4xNjFmMTQ3MWNiNWEwMGRhYmVmYjY2
YzdjYWQxMWQ3YWQxNTFhYzViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBs
LmNwcApAQCAtNTI5LDEyICs1MjksNyBAQCBib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OnByZXBh
cmVUb0RyYXcoRnJhbWVEYXRhJiBmcmFtZSkKIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpy
ZWxlYXNlQ29udGVudHNUZXh0dXJlcygpCiB7Ci0gICAgaWYgKG1fY29udGVudHNUZXh0dXJlc1B1
cmdlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fcmVzb3VyY2VQcm92aWRlci0+ZGVsZXRlT3du
ZWRSZXNvdXJjZXMoQ0NSZW5kZXJlcjo6Q29udGVudFBvb2wpOwotICAgIG1fY29udGVudHNUZXh0
dXJlc1B1cmdlZCA9IHRydWU7Ci0gICAgbV9jbGllbnQtPnNldE5lZWRzQ29tbWl0T25JbXBsVGhy
ZWFkKCk7Ci0gICAgbV9jbGllbnQtPm9uQ2FuRHJhd1N0YXRlQ2hhbmdlZChjYW5EcmF3KCkpOwor
ICAgIG1fY2xpZW50LT5yZWR1Y2VDb250ZW50c1RleHR1cmVzTWVtb3J5T25JbXBsVGhyZWFkKCk7
CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TWVtb3J5QWxsb2NhdGlvbkxpbWl0
Qnl0ZXMoc2l6ZV90IGJ5dGVzKQpAQCAtNzQzLDYgKzczOCwxMiBAQCBib29sIENDTGF5ZXJUcmVl
SG9zdEltcGw6OmluaXRpYWxpemVSZW5kZXJlcihQYXNzT3duUHRyPENDR3JhcGhpY3NDb250ZXh0
PiBjb250ZQogICAgIHJldHVybiBtX3JlbmRlcmVyOwogfQogCit2b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGw6OnNldENvbnRlbnRzVGV4dHVyZXNQdXJnZWQoKQoreworICAgIG1fY29udGVudHNUZXh0
dXJlc1B1cmdlZCA9IHRydWU7CisgICAgbV9jbGllbnQtPm9uQ2FuRHJhd1N0YXRlQ2hhbmdlZChj
YW5EcmF3KCkpOworfQorCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnJlc2V0Q29udGVudHNU
ZXh0dXJlc1B1cmdlZCgpCiB7CiAgICAgbV9jb250ZW50c1RleHR1cmVzUHVyZ2VkID0gZmFsc2U7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKaW5kZXggNjkxOWE1MWUzZmQ0Y2Ji
NzY3ZWM0YWZlN2M0YTMyZGIzZjhkYTZmNS4uNWRiNGE1M2I3Yjg3Mzc1YTU4NmU1MWUxZjZhMzcx
ZmVmMjQyYzQ1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApAQCAtNjEs
NiArNjEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3T25JbXBs
VGhyZWFkKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0NvbW1pdE9uSW1wbFRocmVh
ZCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcG9zdEFuaW1hdGlvbkV2ZW50c1RvTWFpblRocmVh
ZE9uSW1wbFRocmVhZChQYXNzT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVjdG9yPiwgZG91Ymxl
IHdhbGxDbG9ja1RpbWUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVkdWNlQ29udGVudHNUZXh0
dXJlc01lbW9yeU9uSW1wbFRocmVhZCgpID0gMDsKIH07CiAKIC8vIENDTGF5ZXJUcmVlSG9zdElt
cGwgb3ducyB0aGUgQ0NMYXllckltcGwgdHJlZSBhcyB3ZWxsIGFzIGFzc29jaWF0ZWQgcmVuZGVy
aW5nIHN0YXRlCkBAIC0xNjAsOCArMTYxLDkgQEAgcHVibGljOgogICAgIGludCBzb3VyY2VGcmFt
ZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlRnJhbWVOdW1iZXI7IH0KICAgICB2b2lk
IHNldFNvdXJjZUZyYW1lTnVtYmVyKGludCBmcmFtZU51bWJlcikgeyBtX3NvdXJjZUZyYW1lTnVt
YmVyID0gZnJhbWVOdW1iZXI7IH0KIAotICAgIGJvb2wgY29udGVudHNUZXh0dXJlc1B1cmdlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNUZXh0dXJlc1B1cmdlZDsgfQorICAgIHZvaWQgc2V0
Q29udGVudHNUZXh0dXJlc1B1cmdlZCgpOwogICAgIHZvaWQgcmVzZXRDb250ZW50c1RleHR1cmVz
UHVyZ2VkKCk7CisKICAgICBzaXplX3QgbWVtb3J5QWxsb2NhdGlvbkxpbWl0Qnl0ZXMoKSBjb25z
dCB7IHJldHVybiBtX21lbW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzOyB9CiAKICAgICB2b2lkIHNl
dFZpZXdwb3J0U2l6ZShjb25zdCBJbnRTaXplJiBsYXlvdXRWaWV3cG9ydFNpemUsIGNvbnN0IElu
dFNpemUmIGRldmljZVZpZXdwb3J0U2l6ZSk7CkBAIC0yODMsNiArMjg1LDEwIEBAIHByaXZhdGU6
CiAgICAgSW50U2l6ZSBtX2RldmljZVZpZXdwb3J0U2l6ZTsKICAgICBmbG9hdCBtX2RldmljZVNj
YWxlRmFjdG9yOwogICAgIGJvb2wgbV92aXNpYmxlOworCisgICAgLy8gU2V0IHdoZW4gdGhlIGlt
cGwgdGhyZWFkIGRlbGV0ZXMgdGV4dHVyZXMsIHVuLXNldCB3aGVuIHRoZSBpbXBsJ3MgbGF5ZXIg
dHJlZQorICAgIC8vIGlzIGtub3duIHRvIG5vdCByZWZlcmVuY2UgYW55IGRlbGV0ZWQgcmVzb3Vy
Y2VzLiBVc2VkIHRvIHByZXZlbnQgZHJhd2luZworICAgIC8vIHdpdGggZGVsZXRlZCByZXNvdXJj
ZXMuCiAgICAgYm9vbCBtX2NvbnRlbnRzVGV4dHVyZXNQdXJnZWQ7CiAgICAgc2l6ZV90IG1fbWVt
b3J5QWxsb2NhdGlvbkxpbWl0Qnl0ZXM7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRU
ZXh0dXJlLmNwcAppbmRleCBkOWY2OGFmMGFlMGI5OTI4MTMzYTIzMmQ3NDE2OTI0NzYxMjA2ZGRi
Li4xNDhkNWQ5NzBlYzIwMDVmYzUwYTM3ZGQ3YzUyYjNmOGUwNzQ0YzU5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVk
VGV4dHVyZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmUuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNs
dWRlICJDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuaCIKICNpbmNsdWRlICJDQ1ByaW9yaXR5
Q2FsY3VsYXRvci5oIgorI2luY2x1ZGUgIkNDUHJveHkuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+
CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkBAIC0xMTAsOSArMTExLDE3IEBAIHZvaWQgQ0NQcmlv
cml0aXplZFRleHR1cmU6OnVwbG9hZChDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlk
ZXIsCiAgICAgaWYgKG1faXNBYm92ZVByaW9yaXR5Q3V0b2ZmKQogICAgICAgICBhY3F1aXJlQmFj
a2luZ1RleHR1cmUocmVzb3VyY2VQcm92aWRlcik7CiAgICAgQVNTRVJUKG1fYmFja2luZyk7Cisg
ICAgQVNTRVJUKCFiYWNraW5nUmVzb3VyY2VXYXNEZWxldGVkKCkpOwogICAgIHJlc291cmNlUHJv
dmlkZXItPnVwbG9hZChyZXNvdXJjZUlkKCksIGltYWdlLCBpbWFnZVJlY3QsIHNvdXJjZVJlY3Qs
IGRlc3RPZmZzZXQpOwogfQogCitib29sIENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpiYWNraW5nUmVz
b3VyY2VXYXNEZWxldGVkKCkgY29uc3QKK3sKKyAgICBpZiAobV9iYWNraW5nKQorICAgICAgICBy
ZXR1cm4gbV9iYWNraW5nLT5yZXNvdXJjZURlbGV0ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmU6OmxpbmsoQmFja2luZyogYmFja2luZykKIHsK
ICAgICBBU1NFUlQoYmFja2luZyk7CkBAIC0xMzksNCArMTQ4LDI1IEBAIHZvaWQgQ0NQcmlvcml0
aXplZFRleHR1cmU6OnNldFRvU2VsZk1hbmFnZWRNZW1vcnlQbGFjZWhvbGRlcihzaXplX3QgYnl0
ZXMpCiAgICAgbV9ieXRlcyA9IGJ5dGVzOwogfQogCitDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291
cmNlSWQgQ0NQcmlvcml0aXplZFRleHR1cmU6OkJhY2tpbmc6OmlkKCkKK3sKKyAgICBBU1NFUlQo
Q0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOworICAgIHJldHVybiBtX3RleHR1cmUuaWQoKTsKK30K
KworYm9vbCBDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZzo6cmVzb3VyY2VEZWxldGVkKCkg
Y29uc3QKK3sKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOworICAgIHJldHVy
biBtX3Jlc291cmNlRGVsZXRlZDsKK30KKwordm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFj
a2luZzo6ZGVsZXRlUmVzb3VyY2UoQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVy
KQoreworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgQVNTRVJUKHJl
c291cmNlUHJvdmlkZXIpOworICAgIEFTU0VSVCghbV9yZXNvdXJjZURlbGV0ZWQpOworICAgIHJl
c291cmNlUHJvdmlkZXItPmRlbGV0ZVJlc291cmNlKG1fdGV4dHVyZS5pZCgpKTsKKyAgICBtX3Jl
c291cmNlRGVsZXRlZCA9IHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJp
b3JpdGl6ZWRUZXh0dXJlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZS5oCmluZGV4IDM3ODlkN2YyNjlhM2Q3ZTUxOTVh
ODkyZGRkMzc2ZGFlNjE4ZDJiMGUuLjQ2YzdhMTg3Y2IzNmRmZjg3YmM0NDBmMTZiNDFhNmE0OTMy
MDRhYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmUuaApAQCAtODgsNiAr
ODgsOCBAQCBwdWJsaWM6CiAgICAgLy8gVXBsb2FkcyBwaXhlbHMgaW50byB0aGUgYmFja2luZyBy
ZXNvdXJjZS4gVGhpcyBmdW5jdGlvbnMgd2lsbCBhcXVpcmUgdGhlIGJhY2tpbmcgaWYgbmVlZGVk
LgogICAgIHZvaWQgdXBsb2FkKENDUmVzb3VyY2VQcm92aWRlciosIGNvbnN0IHVpbnQ4X3QqIGlt
YWdlLCBjb25zdCBJbnRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qs
IGNvbnN0IEludFNpemUmIGRlc3RPZmZzZXQpOwogCisgICAgYm9vbCBiYWNraW5nUmVzb3VyY2VX
YXNEZWxldGVkKCkgY29uc3Q7CisKICAgICBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNlSWQg
cmVzb3VyY2VJZCgpIGNvbnN0OwogCiAgICAgLy8gU2VsZi1tYW5hZ2VkIHRleHR1cmVzIGFyZSBh
Y2NvdW50ZWQgZm9yIHdoZW4gcHJpb3JpdGl6aW5nIG90aGVyIHRleHR1cmVzLApAQCAtMTAxLDE2
ICsxMDMsMjggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQ0NQcmlvcml0
aXplZFRleHR1cmVNYW5hZ2VyOwogCi0gICAgY2xhc3MgQmFja2luZyA6IHB1YmxpYyBDQ1RleHR1
cmUgeworICAgIGNsYXNzIEJhY2tpbmcgewogICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShC
YWNraW5nKTsKICAgICBwdWJsaWM6CiAgICAgICAgIEJhY2tpbmcodW5zaWduZWQgaWQsIEludFNp
emUgc2l6ZSwgR0MzRGVudW0gZm9ybWF0KQotICAgICAgICAgICAgOiBDQ1RleHR1cmUoaWQsIHNp
emUsIGZvcm1hdCksIG1fb3duZXIoMCkgeyB9Ci0gICAgICAgIH5CYWNraW5nKCkgeyBBU1NFUlQo
IW1fb3duZXIpOyB9CisgICAgICAgICAgICA6IG1fdGV4dHVyZShpZCwgc2l6ZSwgZm9ybWF0KSwg
bV9yZXNvdXJjZURlbGV0ZWQoZmFsc2UpLCBtX293bmVyKDApIHsgfQorICAgICAgICB+QmFja2lu
ZygpIHsgQVNTRVJUKCFtX293bmVyICYmIG1fcmVzb3VyY2VEZWxldGVkKTsgfQorCisgICAgICAg
IENDUHJpb3JpdGl6ZWRUZXh0dXJlKiBvd25lcigpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXI7IH0K
KworICAgICAgICBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNlSWQgaWQoKTsKKyAgICAgICAg
Y29uc3QgSW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZS5zaXplKCk7IH0K
KyAgICAgICAgR0MzRGVudW0gZm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlLmZvcm1h
dCgpOyB9CisgICAgICAgIHNpemVfdCBieXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZS5i
eXRlcygpOyB9CisKKyAgICAgICAgdm9pZCBkZWxldGVSZXNvdXJjZShDQ1Jlc291cmNlUHJvdmlk
ZXIqKTsKKyAgICAgICAgYm9vbCByZXNvdXJjZURlbGV0ZWQoKSBjb25zdDsKIAotICAgICAgICBD
Q1ByaW9yaXRpemVkVGV4dHVyZSogb3duZXIoKSB7IHJldHVybiBtX293bmVyOyB9CiAgICAgcHJp
dmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIENDUHJpb3JpdGl6ZWRUZXh0dXJlOworICAgICAg
ICBmcmllbmQgY2xhc3MgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOworICAgICAgICBDQ1Rl
eHR1cmUgbV90ZXh0dXJlOworICAgICAgICBib29sIG1fcmVzb3VyY2VEZWxldGVkOwogICAgICAg
ICBDQ1ByaW9yaXRpemVkVGV4dHVyZSogbV9vd25lcjsKICAgICB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmNwcAppbmRleCA4M2Q2OGFkMDcx
ZWRiNjU4MjgyODg5YWJiYjAwN2Y1NzhlYmEyNDYwLi43ZmE0NjQwODFhZmMyMmY2YWM1Mjc3NmIx
ZGI5ZjcyZTY1YjhlMmU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlci5jcHAKQEAgLTUwLDEwICs1MCwxMSBAQCBDQ1ByaW9yaXRpemVkVGV4dHVy
ZU1hbmFnZXI6On5DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIoKQogICAgIHdoaWxlIChtX3Rl
eHR1cmVzLnNpemUoKSA+IDApCiAgICAgICAgIHVucmVnaXN0ZXJUZXh0dXJlKCptX3RleHR1cmVz
LmJlZ2luKCkpOwogCi0gICAgLy8gRWFjaCByZW1haW5pbmcgYmFja2luZyBpcyBhIGxlYWtlZCBv
cGVuZ2wgdGV4dHVyZS4gV2UgZG9uJ3QgaGF2ZSB0aGUgcmVzb3VyY2VQcm92aWRlcgotICAgIC8v
IHRvIGRlbGV0ZSB0aGUgdGV4dHVyZXMgYXQgdGhpcyB0aW1lIHNvIGNsZWFyTWVtb3J5KCkgbmVl
ZHMgdG8gYmUgY2FsbGVkIGJlZm9yZSB0aGlzLgotICAgIHdoaWxlIChtX2JhY2tpbmdzLnNpemUo
KSA+IDApCi0gICAgICAgIGRlc3Ryb3lCYWNraW5nKCptX2JhY2tpbmdzLmJlZ2luKCksIDApOwor
ICAgIC8vIFJlbW92ZSBhbnkgYmFja2luZ3MgdGhhdCB3ZXJlIGV2aWN0ZWQuCisgICAgY2xlYXJF
dmljdGVkQmFja2luZ3NJbnRlcm5hbCgwKTsKKworICAgIC8vIEVhY2ggcmVtYWluaW5nIGJhY2tp
bmcgaXMgcmVhbCBtZW1vcnkgbGVhay4gVGhpcyBzaG91bGRuJ3QgaGFwcGVuLgorICAgIEFTU0VS
VChtX2JhY2tpbmdzLmlzRW1wdHkoKSk7CiB9CiAKIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVN
YW5hZ2VyOjpwcmlvcml0aXplVGV4dHVyZXMoKQpAQCAtMTc2LDYgKzE3Nyw3IEBAIGJvb2wgQ0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpyZXF1ZXN0TGF0ZShDQ1ByaW9yaXRpemVkVGV4dHVy
ZSogdGV4dHVyZSkKIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjphY3F1aXJlQmFj
a2luZ1RleHR1cmVJZk5lZWRlZChDQ1ByaW9yaXRpemVkVGV4dHVyZSogdGV4dHVyZSwgQ0NSZXNv
dXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyKQogewogICAgIEFTU0VSVChDQ1Byb3h5Ojpp
c0ltcGxUaHJlYWQoKSAmJiBDQ1Byb3h5Ojppc01haW5UaHJlYWRCbG9ja2VkKCkpOworICAgIEFT
U0VSVChyZXNvdXJjZVByb3ZpZGVyKTsKICAgICBBU1NFUlQoIXRleHR1cmUtPmlzU2VsZk1hbmFn
ZWQoKSk7CiAgICAgQVNTRVJUKHRleHR1cmUtPmlzQWJvdmVQcmlvcml0eUN1dG9mZigpKTsKICAg
ICBpZiAodGV4dHVyZS0+YmFja2luZygpIHx8ICF0ZXh0dXJlLT5pc0Fib3ZlUHJpb3JpdHlDdXRv
ZmYoKSkKQEAgLTE4OCw2ICsxOTAsOCBAQCB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdl
cjo6YWNxdWlyZUJhY2tpbmdUZXh0dXJlSWZOZWVkZWQoQ0NQcmlvcml0aXplZFRleAogICAgIGZv
ciAoQmFja2luZ1NldDo6aXRlcmF0b3IgaXQgPSBtX2JhY2tpbmdzLmJlZ2luKCk7IGl0ICE9IG1f
YmFja2luZ3MuZW5kKCk7ICsraXQpIHsKICAgICAgICAgaWYgKCgqaXQpLT5vd25lcigpICYmICgq
aXQpLT5vd25lcigpLT5pc0Fib3ZlUHJpb3JpdHlDdXRvZmYoKSkKICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBpZiAoKCppdCktPnJlc291cmNlRGVsZXRlZCgpKQorICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIGlmICgoKml0KS0+c2l6ZSgpID09IHRleHR1cmUtPnNpemUoKSAmJiAo
Kml0KS0+Zm9ybWF0KCkgPT0gdGV4dHVyZS0+Zm9ybWF0KCkpIHsKICAgICAgICAgICAgIGJhY2tp
bmcgPSAoKml0KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTk4LDYgKzIwMiw3IEBAIHZvaWQg
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjphY3F1aXJlQmFja2luZ1RleHR1cmVJZk5lZWRl
ZChDQ1ByaW9yaXRpemVkVGV4CiAgICAgaWYgKCFiYWNraW5nKSB7CiAgICAgICAgIHJlZHVjZU1l
bW9yeShtX21lbW9yeUF2YWlsYWJsZUJ5dGVzIC0gdGV4dHVyZS0+Ynl0ZXMoKSwgcmVzb3VyY2VQ
cm92aWRlcik7CiAgICAgICAgIGJhY2tpbmcgPSBjcmVhdGVCYWNraW5nKHRleHR1cmUtPnNpemUo
KSwgdGV4dHVyZS0+Zm9ybWF0KCksIHJlc291cmNlUHJvdmlkZXIpOworICAgICAgICBtX3VuZXZp
Y3RlZEJhY2tpbmdzLmFkZChiYWNraW5nKTsKICAgICB9CiAKICAgICAvLyBNb3ZlIHRoZSB1c2Vk
IGJhY2tpbmcgdGV4dHVyZSB0byB0aGUgZW5kIG9mIHRoZSBldmljdGlvbiBsaXN0LgpAQCAtMjEx
LDYgKzIxNiw3IEBAIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjphY3F1aXJlQmFj
a2luZ1RleHR1cmVJZk5lZWRlZChDQ1ByaW9yaXRpemVkVGV4CiB2b2lkIENDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlcjo6cmVkdWNlTWVtb3J5KHNpemVfdCBsaW1pdEJ5dGVzLCBDQ1Jlc291cmNl
UHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1w
bFRocmVhZCgpICYmIENDUHJveHk6OmlzTWFpblRocmVhZEJsb2NrZWQoKSk7CisgICAgQVNTRVJU
KHJlc291cmNlUHJvdmlkZXIpOwogICAgIGlmIChtZW1vcnlVc2VCeXRlcygpIDw9IGxpbWl0Qnl0
ZXMpCiAgICAgICAgIHJldHVybjsKICAgICAvLyBEZXN0cm95IGJhY2tpbmdzIHVudGlsIHdlIGFy
ZSBiZWxvdyB0aGUgbGltaXQsCkBAIC0yMTksNyArMjI1LDE1IEBAIHZvaWQgQ0NQcmlvcml0aXpl
ZFRleHR1cmVNYW5hZ2VyOjpyZWR1Y2VNZW1vcnkoc2l6ZV90IGxpbWl0Qnl0ZXMsIENDUmVzb3Vy
Y2VQcm92CiAgICAgICAgIEJhY2tpbmdTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9iYWNraW5ncy5iZWdp
bigpOwogICAgICAgICBpZiAoKCppdCktPm93bmVyKCkgJiYgKCppdCktPm93bmVyKCktPmlzQWJv
dmVQcmlvcml0eUN1dG9mZigpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlc3Ryb3lC
YWNraW5nKCgqaXQpLCByZXNvdXJjZVByb3ZpZGVyKTsKKyAgICAgICAgaWYgKCgqaXQpLT5yZXNv
dXJjZURlbGV0ZWQoKSkgeworICAgICAgICAgICAgQVNTRVJUKG1fZXZpY3RlZEJhY2tpbmdzLmZp
bmQoKCppdCkpICE9IG1fZXZpY3RlZEJhY2tpbmdzLmVuZCgpKTsKKyAgICAgICAgICAgIG1fZXZp
Y3RlZEJhY2tpbmdzLnJlbW92ZSgoKml0KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBBU1NFUlQobV91bmV2aWN0ZWRCYWNraW5ncy5maW5kKCgqaXQpKSAhPSBtX3VuZXZpY3RlZEJh
Y2tpbmdzLmVuZCgpKTsKKyAgICAgICAgICAgIG1fdW5ldmljdGVkQmFja2luZ3MucmVtb3ZlKCgq
aXQpKTsKKyAgICAgICAgICAgICgqaXQpLT5kZWxldGVSZXNvdXJjZShyZXNvdXJjZVByb3ZpZGVy
KTsKKyAgICAgICAgfQorICAgICAgICBkZXN0cm95QmFja2luZygoKml0KSk7CiAgICAgfQogfQog
CkBAIC0yNDYsMjMgKzI2MCw2MCBAQCB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6
cmVkdWNlTWVtb3J5KENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aQogICAgIHJlZHVj
ZU1lbW9yeShtZW1vcnlVc2VCeXRlcygpIC0gKHdhc3RlZE1lbW9yeSAtIHRlblBlcmNlbnRPZk1l
bW9yeSksIHJlc291cmNlUHJvdmlkZXIpOwogfQogCi12b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJl
TWFuYWdlcjo6Y2xlYXJBbGxNZW1vcnkoQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3Zp
ZGVyKQorYm9vbCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnJlZHVjZU1lbW9yeU9uSW1w
bFRocmVhZChDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIpCiB7Ci0gICAgLy8g
VW5saW5rIGFuZCBkZXN0cm95IGFsbCBiYWNraW5nIHRleHR1cmVzLgotICAgIHdoaWxlIChtX2Jh
Y2tpbmdzLnNpemUoKSA+IDApIHsKLSAgICAgICAgQmFja2luZ1NldDo6aXRlcmF0b3IgaXQgPSBt
X2JhY2tpbmdzLmJlZ2luKCk7Ci0gICAgICAgIGlmICgoKml0KS0+b3duZXIoKSkKLSAgICAgICAg
ICAgICgqaXQpLT5vd25lcigpLT51bmxpbmsoKTsKLSAgICAgICAgZGVzdHJveUJhY2tpbmcoKCpp
dCksIHJlc291cmNlUHJvdmlkZXIpOworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQo
KSk7CisgICAgQVNTRVJUKHJlc291cmNlUHJvdmlkZXIpOworCisgICAgQmFja2luZ1ZlY3RvciBi
YWNraW5nc1RvRXZpY3Q7CisgICAgZm9yIChCYWNraW5nU2V0OjppdGVyYXRvciBpdCA9IG1fdW5l
dmljdGVkQmFja2luZ3MuYmVnaW4oKTsgaXQgIT0gbV91bmV2aWN0ZWRCYWNraW5ncy5lbmQoKTsg
KytpdCkgeworICAgICAgICAoKml0KS0+ZGVsZXRlUmVzb3VyY2UocmVzb3VyY2VQcm92aWRlcik7
CisgICAgICAgIGJhY2tpbmdzVG9FdmljdC5hcHBlbmQoKCppdCkpOworICAgIH0KKyAgICBib29s
IHJlc3VsdCA9IGZhbHNlOworICAgIE11dGV4TG9ja2VyIGxvY2sobV9ldmljdGVkU3RhdGVNdXRl
eCk7CisgICAgaWYgKCFiYWNraW5nc1RvRXZpY3QuaXNFbXB0eSgpKSB7CisgICAgICAgIHJlc3Vs
dCA9IHRydWU7CisgICAgICAgIGZvciAoQmFja2luZ1ZlY3Rvcjo6aXRlcmF0b3IgaXQgPSBiYWNr
aW5nc1RvRXZpY3QuYmVnaW4oKTsgaXQgIT0gYmFja2luZ3NUb0V2aWN0LmVuZCgpOyArK2l0KSB7
CisgICAgICAgICAgICBtX3VuZXZpY3RlZEJhY2tpbmdzLnJlbW92ZSgoKml0KSk7CisgICAgICAg
ICAgICBtX2V2aWN0ZWRCYWNraW5ncy5hZGQoKCppdCkpOworICAgICAgICB9CisgICAgICAgIG1f
ZXZpY3Rpb25Db3VudGVyKys7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQg
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpkZXN0cm95RXZpY3RlZEJhY2tpbmdzKGludCog
ZXZpY3Rpb25Db3VudGVyQWNrKQoreworICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQo
KSk7CisgICAgY2xlYXJFdmljdGVkQmFja2luZ3NJbnRlcm5hbChldmljdGlvbkNvdW50ZXJBY2sp
OworfQorCit2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y2xlYXJFdmljdGVkQmFj
a2luZ3NJbnRlcm5hbChpbnQqIGV2aWN0aW9uQ291bnRlckFjaykKK3sKKyAgICAvLyBUaGlzIGNh
biBiZSBjYWxsZWQgb24gdGhlIG1haW4gb3IgaW1wbCB0aHJlYWQsIG9yIGF0IHRlYXItZG93bi4K
KyAgICBNdXRleExvY2tlciBsb2NrKG1fZXZpY3RlZFN0YXRlTXV0ZXgpOworICAgIGZvciAoQmFj
a2luZ1NldDo6aXRlcmF0b3IgaXQgPSBtX2V2aWN0ZWRCYWNraW5ncy5iZWdpbigpOyBpdCAhPSBt
X2V2aWN0ZWRCYWNraW5ncy5lbmQoKTsgKytpdCkgeworICAgICAgICBkZXN0cm95QmFja2luZygo
Kml0KSk7CiAgICAgfQorICAgIG1fZXZpY3RlZEJhY2tpbmdzLmNsZWFyKCk7CisgICAgaWYgKGV2
aWN0aW9uQ291bnRlckFjaykKKyAgICAgICAgKmV2aWN0aW9uQ291bnRlckFjayA9IG1fZXZpY3Rp
b25Db3VudGVyOwogfQogCi12b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6YWxsQmFj
a2luZ1RleHR1cmVzV2VyZURlbGV0ZWQoKQorYm9vbCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFn
ZXI6OmlzRXZpY3Rpb25Db3VudGVyQWNrVXBUb0RhdGUoaW50IGV2aWN0aW9uQ291bnRlckFjaykK
IHsKLSAgICAvLyBTYW1lIGFzIGNsZWFyQWxsTWVtb3J5LCBleGNlcHQgYWxsIG91ciB0ZXh0dXJl
cyB3ZXJlIGFscmVhZHkKLSAgICAvLyBkZWxldGVkIGV4dGVybmFsbHksIHNvIHdlIGRvbid0IGRl
bGV0ZSB0aGVtLiBQYXNzaW5nIG5vCi0gICAgLy8gcmVzb3VyY2VQcm92aWRlciByZXN1bHRzIGlu
IGxlYWtpbmcgdGhlIChub3cgaW52YWxpZCkgdGV4dHVyZSBpZHMuCi0gICAgY2xlYXJBbGxNZW1v
cnkoMCk7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKyAgICBNdXRleExv
Y2tlciBsb2NrKG1fZXZpY3RlZFN0YXRlTXV0ZXgpOworICAgIHJldHVybiAoZXZpY3Rpb25Db3Vu
dGVyQWNrID09IG1fZXZpY3Rpb25Db3VudGVyKTsKK30KKwordm9pZCBDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI6OmNsZWFyQWxsTWVtb3J5KENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQ
cm92aWRlcikKK3sKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkgJiYgQ0NQcm94
eTo6aXNNYWluVGhyZWFkQmxvY2tlZCgpKTsKKyAgICBBU1NFUlQocmVzb3VyY2VQcm92aWRlcik7
CisgICAgcmVkdWNlTWVtb3J5T25JbXBsVGhyZWFkKHJlc291cmNlUHJvdmlkZXIpOworICAgIGNs
ZWFyRXZpY3RlZEJhY2tpbmdzSW50ZXJuYWwoMCk7CiB9CiAKIHZvaWQgQ0NQcmlvcml0aXplZFRl
eHR1cmVNYW5hZ2VyOjpyZWdpc3RlclRleHR1cmUoQ0NQcmlvcml0aXplZFRleHR1cmUqIHRleHR1
cmUpCkBAIC0zMTMsMTUgKzM2NCwxMyBAQCBDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZyog
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGVCYWNraW5nKEludFNpegogICAgIHJl
dHVybiBiYWNraW5nOwogfQogCi12b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6ZGVz
dHJveUJhY2tpbmcoQ0NQcmlvcml0aXplZFRleHR1cmU6OkJhY2tpbmcqIGJhY2tpbmcsIENDUmVz
b3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlcikKK3ZvaWQgQ0NQcmlvcml0aXplZFRleHR1
cmVNYW5hZ2VyOjpkZXN0cm95QmFja2luZyhDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZyog
YmFja2luZykKIHsKICAgICBBU1NFUlQoYmFja2luZyk7Ci0gICAgQVNTRVJUKCFiYWNraW5nLT5v
d25lcigpIHx8ICFiYWNraW5nLT5vd25lcigpLT5pc0Fib3ZlUHJpb3JpdHlDdXRvZmYoKSk7CiAg
ICAgQVNTRVJUKCFiYWNraW5nLT5vd25lcigpIHx8ICFiYWNraW5nLT5vd25lcigpLT5pc1NlbGZN
YW5hZ2VkKCkpOwogICAgIEFTU0VSVChtX2JhY2tpbmdzLmZpbmQoYmFja2luZykgIT0gbV9iYWNr
aW5ncy5lbmQoKSk7CisgICAgQVNTRVJUKGJhY2tpbmctPm1fcmVzb3VyY2VEZWxldGVkKTsKIAot
ICAgIGlmIChyZXNvdXJjZVByb3ZpZGVyKQotICAgICAgICByZXNvdXJjZVByb3ZpZGVyLT5kZWxl
dGVSZXNvdXJjZShiYWNraW5nLT5pZCgpKTsKICAgICBpZiAoYmFja2luZy0+b3duZXIoKSkKICAg
ICAgICAgYmFja2luZy0+b3duZXIoKS0+dW5saW5rKCk7CiAgICAgbV9tZW1vcnlVc2VCeXRlcyAt
PSBiYWNraW5nLT5ieXRlcygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXIuaAppbmRleCAxM2RiYzUxNzZiY2Q3OGVlMjk3MDkwYTY3NjUxMjQ1ZjliZDc2
NGNhLi5iNjczOWU2ODcwMjlmYWE3MjBmNWZlZTM4ODk1YzRiZTEyNmJjOGM3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRp
emVkVGV4dHVyZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuaApAQCAtMzMsNiArMzMs
NyBAQAogI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2lu
Y2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRp
dmVzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC03Nyw4ICs3OCwyNCBAQCBwdWJsaWM6CiAgICAgYm9vbCByZXF1ZXN0TGF0ZShDQ1ByaW9yaXRp
emVkVGV4dHVyZSopOwogCiAgICAgdm9pZCByZWR1Y2VNZW1vcnkoQ0NSZXNvdXJjZVByb3ZpZGVy
Kik7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgYW5kIGluY3JlbWVudHMgYW4gaW50ZXJuYWwgZXZp
Y3Rpb24gY291bnRlciBpZiByZXNvdXJjZXMgYXJlCisgICAgLy8gZGVsZXRlZCBhcyBhIHJlc3Vs
dCBvZiB0aGlzIGNhbGwuCisgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBhc3luY2hyb25vdXMgaW4g
dGhhdCBpdCBpcyBjYWxsZWQgb24gdGhlIGltcGwgdGhyZWFkIHdoaWxlIHRoZQorICAgIC8vIG1h
aW4gdGhyZWFkIGlzIG5vdCBibG9ja2VkIChzbyBpdCBtYXkgYmUgY29uY3VycmVudCB3aXRoIG90
aGVyIGNhbGxzIGZyb20gdGhlCisgICAgLy8gbWFpbiB0aHJlYWQpCisgICAgYm9vbCByZWR1Y2VN
ZW1vcnlPbkltcGxUaHJlYWQoQ0NSZXNvdXJjZVByb3ZpZGVyKik7CisKKyAgICAvLyBSZW1vdmUg
dGhlIGJhY2tpbmdzIHdob3NlIHJlc291cmNlcyB3ZXJlIGRlc3Ryb3llZCBieSByZWR1Y2VNZW1v
cnlPbkltcGxUaHJlYWQuCisgICAgLy8gV3JpdGVzIHRoZSBpbnRlcm5hbCBldmljdGlvbiBjb3Vu
dGVyIHRvIGV2aWN0aW9uQ291bnRlckFjay4KKyAgICB2b2lkIGRlc3Ryb3lFdmljdGVkQmFja2lu
Z3MoaW50KiBldmljdGlvbkNvdW50ZXJBY2spOworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIGV2
aWN0aW9uQ291bnRlckFjayBpcyB0aGUgdmFsdWUgb2YgaW50ZXJuYWwgZXZpY3Rpb24gY291bnRl
ci4KKyAgICBib29sIGlzRXZpY3Rpb25Db3VudGVyQWNrVXBUb0RhdGUoaW50IGV2aWN0aW9uQ291
bnRlckFjayk7CisKKyAgICAvLyBEZWxldGUgYWxsIHRleHR1cmVzIGFuZCBmcm9tIHRoZSBpbXBs
IHRocmVhZCAoYXQgdGhyZWFkIGV4aXQgYW5kCisgICAgLy8gY29udGV4dCBsb3N0KS4KICAgICB2
b2lkIGNsZWFyQWxsTWVtb3J5KENDUmVzb3VyY2VQcm92aWRlciopOwotICAgIHZvaWQgYWxsQmFj
a2luZ1RleHR1cmVzV2VyZURlbGV0ZWQoKTsKIAogICAgIHZvaWQgYWNxdWlyZUJhY2tpbmdUZXh0
dXJlSWZOZWVkZWQoQ0NQcmlvcml0aXplZFRleHR1cmUqLCBDQ1Jlc291cmNlUHJvdmlkZXIqKTsK
IApAQCAtMTA5LDExICsxMjYsMTAgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICBDQ1ByaW9yaXRp
emVkVGV4dHVyZU1hbmFnZXIoc2l6ZV90IG1heE1lbW9yeUxpbWl0Qnl0ZXMsIGludCBtYXhUZXh0
dXJlU2l6ZSwgaW50IHBvb2wpOwotCiAgICAgdm9pZCByZWR1Y2VNZW1vcnkoc2l6ZV90IGxpbWl0
LCBDQ1Jlc291cmNlUHJvdmlkZXIqKTsKLQogICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNr
aW5nKiBjcmVhdGVCYWNraW5nKEludFNpemUsIEdDM0RlbnVtIGZvcm1hdCwgQ0NSZXNvdXJjZVBy
b3ZpZGVyKik7Ci0gICAgdm9pZCBkZXN0cm95QmFja2luZyhDQ1ByaW9yaXRpemVkVGV4dHVyZTo6
QmFja2luZyosIENDUmVzb3VyY2VQcm92aWRlciopOworICAgIHZvaWQgY2xlYXJFdmljdGVkQmFj
a2luZ3NJbnRlcm5hbChpbnQqIGV2aWN0aW9uQ291bnRlckFjayk7CisgICAgdm9pZCBkZXN0cm95
QmFja2luZyhDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZyopOwogCiAgICAgc2l6ZV90IG1f
bWF4TWVtb3J5TGltaXRCeXRlczsKICAgICB1bnNpZ25lZCBtX3ByaW9yaXR5Q3V0b2ZmOwpAQCAt
MTMyLDggKzE0OCwyMyBAQCBwcml2YXRlOgogCiAgICAgVGV4dHVyZVZlY3RvciBtX3RlbXBUZXh0
dXJlVmVjdG9yOwogICAgIEJhY2tpbmdWZWN0b3IgbV90ZW1wQmFja2luZ1ZlY3RvcjsKKworICAg
IC8vIEEgY29weSBvZiBtX2JhY2tpbmdzIChtaW51cyBldmljdGVkIGJhY2tpbmdzKSB3aGljaCBp
cyBhY2Nlc3NlZCBvbmx5IG9uCisgICAgLy8gdGhlIGltcGwgdGhyZWFkLiBUaGlzIGlzIHRyYXZl
cnNlZCB3aGVuIGV2aWN0aW5nIGJhY2tpbmdzICh3aGljaCBoYXBwZW5zIAorICAgIC8vIHdoaWxl
IHRoZSBtYWluIHRocmVhZCBtYXkgYmUgdHJhdmVyc2luZyBtX2JhY2tpbmdzKS4KKyAgICAvLyBU
T09EOiBtYWtlIG1fYmFja2luZ3Mgbm90IGFjY2Vzc2VkIG9uIHRoZSBtYWluIHRocmVhZCwgYW5k
IHJlbW92ZSB0aGlzCisgICAgLy8gcmVkdW5kYW50IHN0YXRlLgorICAgIEJhY2tpbmdTZXQgbV91
bmV2aWN0ZWRCYWNraW5nczsKKworICAgIC8vIFRoaXMgc3RhdGUgY2FuIGJlIGFjY2Vzc2VkIGJ5
IHRoZSBpbXBsIHRocmVhZCBhbmQgdGhlIG1haW4gdGhyZWFkIGNvbmN1cnJlbnRseSwKKyAgICAv
LyBhbmQgbWF5IGJlIGFjY2Vzc2VkIG9ubHkgd2hlbiBtX2V2aWN0ZWRCYWNraW5nc011dGV4IGlz
IGhlbGQuCisgICAgTXV0ZXggbV9ldmljdGVkU3RhdGVNdXRleDsKKyAgICBCYWNraW5nU2V0IG1f
ZXZpY3RlZEJhY2tpbmdzOworICAgIGludCBtX2V2aWN0aW9uQ291bnRlcjsKIH07CiAKKworCiB9
IC8vIFdlYkNvcmUKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHku
Y3BwCmluZGV4IDY4NzZlYTIxODhiYWY2NjY4YTI5YWMzN2MxY2QzOGM4Y2I0NDFjZTkuLjRiNjUx
N2I0ZmU2MTQ4NmRiOTU4ZTM1ZDY4NjMzYTlmYTA3Zjk0MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHku
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
U2luZ2xlVGhyZWFkUHJveHkuY3BwCkBAIC0xNTUsOSArMTU1LDkgQEAgYm9vbCBDQ1NpbmdsZVRo
cmVhZFByb3h5OjpyZWNyZWF0ZUNvbnRleHQoKQogCiAgICAgYm9vbCBpbml0aWFsaXplZDsKICAg
ICB7CisgICAgICAgIERlYnVnU2NvcGVkU2V0TWFpblRocmVhZEJsb2NrZWQgbWFpblRocmVhZEJs
b2NrZWQ7CiAgICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOwotICAgICAgICBp
ZiAoIW1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRlbnRzVGV4dHVyZXNQdXJnZWQoKSkKLSAgICAg
ICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGVsZXRlQ29udGVudHNUZXh0dXJlc09uSW1wbFRocmVh
ZChtX2xheWVyVHJlZUhvc3RJbXBsLT5yZXNvdXJjZVByb3ZpZGVyKCkpOworICAgICAgICBtX2xh
eWVyVHJlZUhvc3QtPmRlbGV0ZUFsbENvbnRlbnRzVGV4dHVyZXNPbkltcGxUaHJlYWQobV9sYXll
clRyZWVIb3N0SW1wbC0+cmVzb3VyY2VQcm92aWRlcigpKTsKICAgICAgICAgaW5pdGlhbGl6ZWQg
PSBtX2xheWVyVHJlZUhvc3RJbXBsLT5pbml0aWFsaXplUmVuZGVyZXIoY29udGV4dC5yZWxlYXNl
KCksIFVudGhyb3R0bGVkVXBsb2FkZXIpOwogICAgICAgICBpZiAoaW5pdGlhbGl6ZWQpIHsKICAg
ICAgICAgICAgIG1fUmVuZGVyZXJDYXBhYmlsaXRpZXNGb3JNYWluVGhyZWFkID0gbV9sYXllclRy
ZWVIb3N0SW1wbC0+cmVuZGVyZXJDYXBhYmlsaXRpZXMoKTsKQEAgLTI2MCw5ICsyNjAsNyBAQCB2
b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OnN0b3AoKQogICAgIHsKICAgICAgICAgRGVidWdTY29w
ZWRTZXRNYWluVGhyZWFkQmxvY2tlZCBtYWluVGhyZWFkQmxvY2tlZDsKICAgICAgICAgRGVidWdT
Y29wZWRTZXRJbXBsVGhyZWFkIGltcGw7Ci0KLSAgICAgICAgaWYgKCFtX2xheWVyVHJlZUhvc3RJ
bXBsLT5jb250ZW50c1RleHR1cmVzUHVyZ2VkKCkpCi0gICAgICAgICAgICBtX2xheWVyVHJlZUhv
c3QtPmRlbGV0ZUNvbnRlbnRzVGV4dHVyZXNPbkltcGxUaHJlYWQobV9sYXllclRyZWVIb3N0SW1w
bC0+cmVzb3VyY2VQcm92aWRlcigpKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5kZWxldGVB
bGxDb250ZW50c1RleHR1cmVzT25JbXBsVGhyZWFkKG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJlc291
cmNlUHJvdmlkZXIoKSk7CiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwuY2xlYXIoKTsKICAg
ICB9CiAgICAgbV9sYXllclRyZWVIb3N0ID0gMDsKQEAgLTI3NSw2ICsyNzMsMTUgQEAgdm9pZCBD
Q1NpbmdsZVRocmVhZFByb3h5Ojpwb3N0QW5pbWF0aW9uRXZlbnRzVG9NYWluVGhyZWFkT25JbXBs
VGhyZWFkKFBhc3NPd25QdHIKICAgICBtX2xheWVyVHJlZUhvc3QtPnNldEFuaW1hdGlvbkV2ZW50
cyhldmVudHMsIHdhbGxDbG9ja1RpbWUpOwogfQogCit2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6
OnJlZHVjZUNvbnRlbnRzVGV4dHVyZXNNZW1vcnlPbkltcGxUaHJlYWQoKQoreworICAgIEFTU0VS
VChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdC0+cmVk
dWNlQ29udGVudHNUZXh0dXJlc01lbW9yeU9uSW1wbFRocmVhZChtX2xheWVyVHJlZUhvc3RJbXBs
LT5yZXNvdXJjZVByb3ZpZGVyKCkpKSB7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPnNl
dENvbnRlbnRzVGV4dHVyZXNQdXJnZWQoKTsKKyAgICAgICAgc2V0TmVlZHNDb21taXRPbkltcGxU
aHJlYWQoKTsKKyAgICB9Cit9CisKIC8vIENhbGxlZCBieSB0aGUgbGVnYWN5IHNjaGVkdWxpbmcg
cGF0aCAoZS5nLiB3aGVyZSByZW5kZXJfd2lkZ2V0IGRvZXMgdGhlIHNjaGVkdWxpbmcpCiB2b2lk
IENDU2luZ2xlVGhyZWFkUHJveHk6OmNvbXBvc2l0ZUltbWVkaWF0ZWx5KCkKIHsKQEAgLTMwMSw5
ICszMDgsNyBAQCBib29sIENDU2luZ2xlVGhyZWFkUHJveHk6OmNvbW1pdEFuZENvbXBvc2l0ZSgp
CiAgICAgaWYgKCFtX2xheWVyVHJlZUhvc3QtPmluaXRpYWxpemVSZW5kZXJlcklmTmVlZGVkKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtX2xheWVyVHJlZUhvc3RJbXBsLT5j
b250ZW50c1RleHR1cmVzUHVyZ2VkKCkpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZXZpY3RB
bGxDb250ZW50VGV4dHVyZXMoKTsKLQorICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGVzdHJveUNvbnRl
bnRzVGV4dHVyZXNFdmljdGVkQnlJbXBsVGhyZWFkKDApOwogICAgIENDVGV4dHVyZVVwZGF0ZVF1
ZXVlIHF1ZXVlOwogICAgIG1fbGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKHF1ZXVlLCBtX2xh
eWVyVHJlZUhvc3RJbXBsLT5tZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlcygpKTsKICAgICBtX2xh
eWVyVHJlZUhvc3RJbXBsLT5yZXNldENvbnRlbnRzVGV4dHVyZXNQdXJnZWQoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xl
VGhyZWFkUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaAppbmRleCBhN2FmZDBkOTAxYmU5MmFhNTFmM2RiN2Q2
ODkxNGMzOTcxNGViOTg3Li5hZmJkM2NmZDBhMGRmYjgyYmUyYTY2YTc5ZmI3NWFkOTc2MzJlMDZm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1NpbmdsZVRocmVhZFByb3h5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oCkBAIC03Myw2ICs3Myw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKSBP
VkVSUklERSB7IG1fbGF5ZXJUcmVlSG9zdC0+c2NoZWR1bGVDb21wb3NpdGUoKTsgfQogICAgIHZp
cnR1YWwgdm9pZCBzZXROZWVkc0NvbW1pdE9uSW1wbFRocmVhZCgpIE9WRVJSSURFIHsgbV9sYXll
clRyZWVIb3N0LT5zY2hlZHVsZUNvbXBvc2l0ZSgpOyB9CiAgICAgdmlydHVhbCB2b2lkIHBvc3RB
bmltYXRpb25FdmVudHNUb01haW5UaHJlYWRPbkltcGxUaHJlYWQoUGFzc093blB0cjxDQ0FuaW1h
dGlvbkV2ZW50c1ZlY3Rvcj4sIGRvdWJsZSB3YWxsQ2xvY2tUaW1lKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVkdWNlQ29udGVudHNUZXh0dXJlc01lbW9yeU9uSW1wbFRocmVhZCgpIE9W
RVJSSURFOwogCiAgICAgLy8gQ2FsbGVkIGJ5IHRoZSBsZWdhY3kgcGF0aCB3aGVyZSBSZW5kZXJX
aWRnZXQgZG9lcyB0aGUgc2NoZWR1bGluZy4KICAgICB2b2lkIGNvbXBvc2l0ZUltbWVkaWF0ZWx5
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RleHR1cmVVcGRhdGVDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXIuY3BwCmlu
ZGV4IDZmYzc3MWU5NTkwNWVlM2M4N2U2MWIwMWY2ODY2M2IyZjkwNjAxYzcuLjM5MzliMWIzODg4
Y2ZiZDRhODljYWY3NDUzYzcxMDhjMmQyNGQ4NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXIuY3BwCkBAIC0xNTAsNiArMTUwLDExIEBAIHZvaWQgQ0NU
ZXh0dXJlVXBkYXRlQ29udHJvbGxlcjo6dXBkYXRlTW9yZVRleHR1cmVzKGRvdWJsZSBtb25vdG9u
aWNUaW1lTGltaXQpCiAgICAgICAgIHVwZGF0ZU1vcmVUZXh0dXJlc05vdygpOwogfQogCit2b2lk
IENDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXI6OmRpc2NhcmRVcGxvYWRzVG9EZWxldGVkUmVzb3Vy
Y2VzKCkKK3sKKyAgICBtX3F1ZXVlLT5jbGVhclVwbG9hZHNUb0RlbGV0ZWRSZXNvdXJjZXMoKTsK
K30KKwogdm9pZCBDQ1RleHR1cmVVcGRhdGVDb250cm9sbGVyOjpvblRpbWVyRmlyZWQoKQogewog
ICAgIGlmICghbV9xdWV1ZS0+aGFzTW9yZVVwZGF0ZXMoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZUNvbnRy
b2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXIuaAppbmRleCBkZDc1OGJlYjRkOWZjZDg2NmUxOGM4NDdj
Y2QwYWYyODliYTk1YmQxLi5jYTMyM2M5YmJkZmRlMDNmZGJjMzJiMDU5ZDY3YTBkM2M1YzEwY2E4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RleHR1cmVVcGRhdGVDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlQ29udHJvbGxlci5oCkBAIC01
MSw2ICs1MSw5IEBAIHB1YmxpYzoKICAgICBib29sIGhhc01vcmVVcGRhdGVzKCkgY29uc3Q7CiAg
ICAgdm9pZCB1cGRhdGVNb3JlVGV4dHVyZXMoZG91YmxlIG1vbm90b25pY1RpbWVMaW1pdCk7CiAK
KyAgICAvLyBEaXNjYXJkIHVwbG9hZHMgdG8gdGV4dHVyZXMgdGhhdCB3ZXJlIGV2aWN0ZWQgb24g
dGhlIGltcGwgdGhyZWFkCisgICAgdm9pZCBkaXNjYXJkVXBsb2Fkc1RvRGVsZXRlZFJlc291cmNl
cygpOworCiAgICAgLy8gQ0NUaW1lckNsaWVudCBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFs
IHZvaWQgb25UaW1lckZpcmVkKCkgT1ZFUlJJREU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZVVwZGF0ZVF1ZXVlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVy
ZVVwZGF0ZVF1ZXVlLmNwcAppbmRleCA4ZjU4ZmNiY2I0Y2JhMjRmMzRhNWFhZDQ3ZWQ3Yzk0NjA3
NDNjMWE4Li5hOTA1NTc2MTcxMzZkMTM4NTFiY2FmNzZlMzNhODIwODUxM2QyNmEzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1
cmVVcGRhdGVRdWV1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUZXh0dXJlVXBkYXRlUXVldWUuY3BwCkBAIC01NCwxMCArNTQsMjEgQEAg
dm9pZCBDQ1RleHR1cmVVcGRhdGVRdWV1ZTo6YXBwZW5kQ29weShUZXh0dXJlQ29waWVyOjpQYXJh
bWV0ZXJzIGNvcHkpCiAgICAgbV9jb3B5RW50cmllcy5hcHBlbmQoY29weSk7CiB9CiAKLXZvaWQg
Q0NUZXh0dXJlVXBkYXRlUXVldWU6OmNsZWFyVXBsb2FkcygpCit2b2lkIENDVGV4dHVyZVVwZGF0
ZVF1ZXVlOjpjbGVhclVwbG9hZHNUb0RlbGV0ZWRSZXNvdXJjZXMoKQogewotICAgIG1fZnVsbEVu
dHJpZXMuY2xlYXIoKTsKLSAgICBtX3BhcnRpYWxFbnRyaWVzLmNsZWFyKCk7CisgICAgY2xlYXJV
cGxvYWRzVG9EZWxldGVkUmVzb3VyY2VzKG1fZnVsbEVudHJpZXMpOworICAgIGNsZWFyVXBsb2Fk
c1RvRGVsZXRlZFJlc291cmNlcyhtX3BhcnRpYWxFbnRyaWVzKTsKK30KKwordm9pZCBDQ1RleHR1
cmVVcGRhdGVRdWV1ZTo6Y2xlYXJVcGxvYWRzVG9EZWxldGVkUmVzb3VyY2VzKERlcXVlPFRleHR1
cmVVcGxvYWRlcjo6UGFyYW1ldGVycz4mIGVudHJ5UXVldWUpCit7CisgICAgRGVxdWU8VGV4dHVy
ZVVwbG9hZGVyOjpQYXJhbWV0ZXJzPiB0ZW1wOworICAgIGVudHJ5UXVldWUuc3dhcCh0ZW1wKTsK
KyAgICB3aGlsZSAodGVtcC5zaXplKCkpIHsKKyAgICAgICAgVGV4dHVyZVVwbG9hZGVyOjpQYXJh
bWV0ZXJzIHVwbG9hZCA9IHRlbXAudGFrZUZpcnN0KCk7CisgICAgICAgIGlmICghdXBsb2FkLnRl
eHR1cmUtPmJhY2tpbmdSZXNvdXJjZVdhc0RlbGV0ZWQoKSkKKyAgICAgICAgICAgIGVudHJ5UXVl
dWUuYXBwZW5kKHVwbG9hZCk7CisgICAgfQogfQogCiBUZXh0dXJlVXBsb2FkZXI6OlBhcmFtZXRl
cnMgQ0NUZXh0dXJlVXBkYXRlUXVldWU6OnRha2VGaXJzdEZ1bGxVcGxvYWQoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJl
VXBkYXRlUXVldWUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGV4dHVyZVVwZGF0ZVF1ZXVlLmgKaW5kZXggZGU2MzczODIxZjA4YTg0NTRhZTY0ODVi
NmFmMzc0ODNjNzgwNWVlNi4uYzhkY2IxNmUwMjNiYmExNzZiNTA4ZTFjZDk0YjY4ZjYyN2Q5NzBl
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUZXh0dXJlVXBkYXRlUXVldWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVVcGRhdGVRdWV1ZS5oCkBAIC00Myw3ICs0Myw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIGFwcGVuZFBhcnRpYWxVcGxvYWQoVGV4dHVyZVVwbG9hZGVy
OjpQYXJhbWV0ZXJzKTsKICAgICB2b2lkIGFwcGVuZENvcHkoVGV4dHVyZUNvcGllcjo6UGFyYW1l
dGVycyk7CiAKLSAgICB2b2lkIGNsZWFyVXBsb2FkcygpOworICAgIHZvaWQgY2xlYXJVcGxvYWRz
VG9EZWxldGVkUmVzb3VyY2VzKCk7CiAKICAgICBUZXh0dXJlVXBsb2FkZXI6OlBhcmFtZXRlcnMg
dGFrZUZpcnN0RnVsbFVwbG9hZCgpOwogICAgIFRleHR1cmVVcGxvYWRlcjo6UGFyYW1ldGVycyB0
YWtlRmlyc3RQYXJ0aWFsVXBsb2FkKCk7CkBAIC01Niw2ICs1Niw3IEBAIHB1YmxpYzoKICAgICBi
b29sIGhhc01vcmVVcGRhdGVzKCkgY29uc3Q7CiAKIHByaXZhdGU6CisgICAgdm9pZCBjbGVhclVw
bG9hZHNUb0RlbGV0ZWRSZXNvdXJjZXMoRGVxdWU8VGV4dHVyZVVwbG9hZGVyOjpQYXJhbWV0ZXJz
PiYgZW50cnlRdWV1ZSk7CiAgICAgRGVxdWU8VGV4dHVyZVVwbG9hZGVyOjpQYXJhbWV0ZXJzPiBt
X2Z1bGxFbnRyaWVzOwogICAgIERlcXVlPFRleHR1cmVVcGxvYWRlcjo6UGFyYW1ldGVycz4gbV9w
YXJ0aWFsRW50cmllczsKICAgICBEZXF1ZTxUZXh0dXJlQ29waWVyOjpQYXJhbWV0ZXJzPiBtX2Nv
cHlFbnRyaWVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcAppbmRleCBiM2FmNThlOTMyYWUz
MmI1ZDJiMjg4MjIwZTExNjdkODEwNjE3MGI0Li40ODkxNzZlMDY0ZDExYTEyMmZhYmI3OWM2ZDdk
YzI3MTJiNDA3M2M5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcApAQCAtMzU5LDYgKzM1
OSwyNCBAQCB2b2lkIENDVGhyZWFkUHJveHk6Om9uQ2FuRHJhd1N0YXRlQ2hhbmdlZChib29sIGNh
bkRyYXcpCiAgICAgbV9zY2hlZHVsZXJPbkltcGxUaHJlYWQtPnNldENhbkRyYXcoY2FuRHJhdyk7
CiB9CiAKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6cmVkdWNlQ29udGVudHNUZXh0dXJlc01lbW9yeU9u
SW1wbFRocmVhZCgpCit7CisgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKKyAgICBUUkFDRV9F
VkVOVDAoImNjIiwgIkNDVGhyZWFkUHJveHk6OnJlZHVjZUNvbnRlbnRzVGV4dHVyZXNNZW1vcnlP
bkltcGxUaHJlYWQiKTsKKworICAgIGlmIChtX2xheWVyVHJlZUhvc3QtPnJlZHVjZUNvbnRlbnRz
VGV4dHVyZXNNZW1vcnlPbkltcGxUaHJlYWQobV9sYXllclRyZWVIb3N0SW1wbC0+cmVzb3VyY2VQ
cm92aWRlcigpKSkgeworICAgICAgICAvLyBDbGVhciBhbnkgcGVuZGluZyB1cGxvYWRzIHRvIGRl
bGV0ZWQgcmVzb3VyY2VzLgorICAgICAgICBpZiAobV9jdXJyZW50VGV4dHVyZVVwZGF0ZUNvbnRy
b2xsZXJPbkltcGxUaHJlYWQpCisgICAgICAgICAgICBtX2N1cnJlbnRUZXh0dXJlVXBkYXRlQ29u
dHJvbGxlck9uSW1wbFRocmVhZC0+ZGlzY2FyZFVwbG9hZHNUb0RlbGV0ZWRSZXNvdXJjZXMoKTsK
KworICAgICAgICAvLyBUaGUgaW1wbCBsYXllciB0cmVlIG1heSBub3cgY29udGFpbiByZWZlcmVu
Y2VzIHRvIGRlbGV0ZWQgcmVzb3VyY2VzLCBzbyBkaXNhbGxvdworICAgICAgICAvLyBkcmF3aW5n
IHVudGlsIGEgY29tbWl0IHdoaWNoIGFja25vd2xlZGdlcyB0aGUgcmVmZXJlbmNlcyBhcmUgcmVt
b3ZlZCBvY2N1cnMuCisgICAgICAgIG1fcmVzZXRDb250ZW50c1RleHR1cmVzUHVyZ2VkQWZ0ZXJD
b21taXRPbkltcGxUaHJlYWQgPSBmYWxzZTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+
c2V0Q29udGVudHNUZXh0dXJlc1B1cmdlZCgpOworICAgICAgICBzZXROZWVkc0NvbW1pdE9uSW1w
bFRocmVhZCgpOworICAgIH0KK30KKwogdm9pZCBDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1p
dE9uSW1wbFRocmVhZCgpCiB7CiAgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKQEAgLTQ4Miw3
ICs1MDAsNiBAQCB2b2lkIENDVGhyZWFkUHJveHk6OnNjaGVkdWxlZEFjdGlvbkJlZ2luRnJhbWUo
KQogICAgIG1fcGVuZGluZ0JlZ2luRnJhbWVSZXF1ZXN0ID0gYWRvcHRQdHIobmV3IEJlZ2luRnJh
bWVBbmRDb21taXRTdGF0ZSgpKTsKICAgICBtX3BlbmRpbmdCZWdpbkZyYW1lUmVxdWVzdC0+bW9u
b3RvbmljRnJhbWVCZWdpblRpbWUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKICAg
ICBtX3BlbmRpbmdCZWdpbkZyYW1lUmVxdWVzdC0+c2Nyb2xsSW5mbyA9IG1fbGF5ZXJUcmVlSG9z
dEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKLSAgICBtX3BlbmRpbmdCZWdpbkZyYW1lUmVx
dWVzdC0+Y29udGVudHNUZXh0dXJlc1dlcmVEZWxldGVkID0gbV9sYXllclRyZWVIb3N0SW1wbC0+
Y29udGVudHNUZXh0dXJlc1B1cmdlZCgpOwogICAgIG1fcGVuZGluZ0JlZ2luRnJhbWVSZXF1ZXN0
LT5tZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlcyA9IG1fbGF5ZXJUcmVlSG9zdEltcGwtPm1lbW9y
eUFsbG9jYXRpb25MaW1pdEJ5dGVzKCk7CiAKICAgICBtX21haW5UaHJlYWRQcm94eS0+cG9zdFRh
c2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lKSk7
CkBAIC01NTQsOCArNTcxLDggQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lKCkKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChyZXF1ZXN0LT5jb250ZW50c1RleHR1cmVz
V2VyZURlbGV0ZWQpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZXZpY3RBbGxDb250ZW50VGV4
dHVyZXMoKTsKKyAgICBpbnQgY29udGVudHNUZXh0dXJlc1B1cmdlQWNrID0gMDsKKyAgICBtX2xh
eWVyVHJlZUhvc3QtPmRlc3Ryb3lDb250ZW50c1RleHR1cmVzRXZpY3RlZEJ5SW1wbFRocmVhZCgm
Y29udGVudHNUZXh0dXJlc1B1cmdlQWNrKTsKIAogICAgIE93blB0cjxDQ1RleHR1cmVVcGRhdGVR
dWV1ZT4gcXVldWUgPSBhZG9wdFB0cihuZXcgQ0NUZXh0dXJlVXBkYXRlUXVldWUpOwogICAgIG1f
bGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKCoocXVldWUuZ2V0KCkpLCByZXF1ZXN0LT5tZW1v
cnlBbGxvY2F0aW9uTGltaXRCeXRlcyk7CkBAIC01ODUsNyArNjAyLDcgQEAgdm9pZCBDQ1RocmVh
ZFByb3h5OjpiZWdpbkZyYW1lKCkKICAgICAgICAgRGVidWdTY29wZWRTZXRNYWluVGhyZWFkQmxv
Y2tlZCBtYWluVGhyZWFkQmxvY2tlZDsKIAogICAgICAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21w
bGV0aW9uOwotICAgICAgICBDQ1Byb3h5OjppbXBsVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUND
VGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUNvbXBsZXRlT25JbXBs
VGhyZWFkLCAmY29tcGxldGlvbiwgcXVldWUucmVsZWFzZSgpLCByZXF1ZXN0LT5jb250ZW50c1Rl
eHR1cmVzV2VyZURlbGV0ZWQpKTsKKyAgICAgICAgQ0NQcm94eTo6aW1wbFRocmVhZCgpLT5wb3N0
VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVD
b21wbGV0ZU9uSW1wbFRocmVhZCwgJmNvbXBsZXRpb24sIHF1ZXVlLnJlbGVhc2UoKSwgY29udGVu
dHNUZXh0dXJlc1B1cmdlQWNrKSk7CiAgICAgICAgIGNvbXBsZXRpb24ud2FpdCgpOwogICAgIH0K
IApAQCAtNTkzLDcgKzYxMCw3IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZSgpCiAg
ICAgbV9sYXllclRyZWVIb3N0LT5kaWRCZWdpbkZyYW1lKCk7CiB9CiAKLXZvaWQgQ0NUaHJlYWRQ
cm94eTo6YmVnaW5GcmFtZUNvbXBsZXRlT25JbXBsVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBj
b21wbGV0aW9uLCBQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZVF1ZXVlPiBxdWV1ZSwgYm9vbCBj
b250ZW50c1RleHR1cmVzV2VyZURlbGV0ZWQpCit2b2lkIENDVGhyZWFkUHJveHk6OmJlZ2luRnJh
bWVDb21wbGV0ZU9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbiwgUGFz
c093blB0cjxDQ1RleHR1cmVVcGRhdGVRdWV1ZT4gcXVldWUsIGludCBjb250ZW50c1RleHR1cmVz
RXZpY3Rpb25Db3VudGVyQWNrKQogewogICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NUaHJlYWRQ
cm94eTo6YmVnaW5GcmFtZUNvbXBsZXRlT25JbXBsVGhyZWFkIik7CiAgICAgQVNTRVJUKCFtX2Nv
bW1pdENvbXBsZXRpb25FdmVudE9uSW1wbFRocmVhZCk7CkBAIC02MDcsMTIgKzYyNCwxNSBAQCB2
b2lkIENDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVDb21wbGV0ZU9uSW1wbFRocmVhZChDQ0NvbXBs
ZXRpb25FdmVudCogY29tcGxldGlvbgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYg
KCFjb250ZW50c1RleHR1cmVzV2VyZURlbGV0ZWQgJiYgbV9sYXllclRyZWVIb3N0SW1wbC0+Y29u
dGVudHNUZXh0dXJlc1B1cmdlZCgpKSB7Ci0gICAgICAgIC8vIFdlIHB1cmdlZCB0aGUgY29udGVu
dCB0ZXh0dXJlcyBvbiB0aGUgaW1wbCB0aHJlYWQgYmV0d2VlbiB0aGUgdGltZSB3ZQotICAgICAg
ICAvLyBwb3N0ZWQgdGhlIGJlZ2luRnJhbWUgdGFzayBhbmQgbm93LCBtZWFuaW5nIHdlIGhhdmUg
YSBidW5jaCBvZgotICAgICAgICAvLyB1cGxvYWRzIHRoYXQgYXJlIG5vdyBpbnZhbGlkLiBDbGVh
ciB0aGUgdXBsb2FkcyAodGhleSBhbGwgZ28gdG8KLSAgICAgICAgLy8gY29udGVudCB0ZXh0dXJl
cyksIGFuZCBraWNrIGFub3RoZXIgY29tbWl0IHRvIGZpbGwgdGhlbSBhZ2Fpbi4KLSAgICAgICAg
cXVldWUtPmNsZWFyVXBsb2FkcygpOworICAgIGlmICghbV9sYXllclRyZWVIb3N0LT5jb250ZW50
c1RleHR1cmVNYW5hZ2VyKCktPmlzRXZpY3Rpb25Db3VudGVyQWNrVXBUb0RhdGUoY29udGVudHNU
ZXh0dXJlc0V2aWN0aW9uQ291bnRlckFjaykpIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQwKCJjYyIs
ICJDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQ29tcGxldGVPbkltcGxUaHJlYWRfcHVyZ2Vfc2lu
Y2VfY29tbWl0Iik7CisgICAgICAgIC8vIFRoZSB1cGxvYWQgcXVldWUgbWF5IGNvbnRhaW4gcmVm
ZXJlbmNlcyB0byB0ZXh0dXJlcyB0aGF0IHdlcmUgYXN5bmNocm9ub3VzbHkKKyAgICAgICAgLy8g
ZGVsZXRlZC4gUmVtb3ZlIHRoZW0uCisgICAgICAgIHF1ZXVlLT5jbGVhclVwbG9hZHNUb0RlbGV0
ZWRSZXNvdXJjZXMoKTsKKworICAgICAgICAvLyBUaGVyZSBleGlzdCB0ZXh0dXJlcyBwdXJnZWQg
YnkgdGhlIGltcGwgdGhyZWFkIHRoYXQgdGhlIG1haW4gdGhyZWFkCisgICAgICAgIC8vIGRvZXNu
J3Qga25vdyBvZi4gUmVxdWVzdCBhIHJlY29tbWl0LCB3aGljaCB3aWxsIGluZm9ybSB0aGUgbWFp
biB0aHJlYWQKKyAgICAgICAgLy8gb2YgdGhlIHB1cmdlZCByZXNvdXJjZXMuCiAgICAgICAgIHNl
dE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fcmVzZXRD
b250ZW50c1RleHR1cmVzUHVyZ2VkQWZ0ZXJDb21taXRPbkltcGxUaHJlYWQgPSB0cnVlOwpAQCAt
OTAxLDggKzkyMSw3IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6bGF5ZXJUcmVlSG9zdENsb3NlZE9u
SW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvCiB7CiAgICAgVFJBQ0VfRVZF
TlQwKCJjYyIsICJDQ1RocmVhZFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25JbXBsVGhyZWFk
Iik7CiAgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKLSAgICBpZiAoIW1fbGF5ZXJUcmVlSG9z
dEltcGwtPmNvbnRlbnRzVGV4dHVyZXNQdXJnZWQoKSkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0
LT5kZWxldGVDb250ZW50c1RleHR1cmVzT25JbXBsVGhyZWFkKG1fbGF5ZXJUcmVlSG9zdEltcGwt
PnJlc291cmNlUHJvdmlkZXIoKSk7CisgICAgbV9sYXllclRyZWVIb3N0LT5kZWxldGVBbGxDb250
ZW50c1RleHR1cmVzT25JbXBsVGhyZWFkKG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJlc291cmNlUHJv
dmlkZXIoKSk7CiAgICAgbV9pbnB1dEhhbmRsZXJPbkltcGxUaHJlYWQuY2xlYXIoKTsKICAgICBt
X2xheWVyVHJlZUhvc3RJbXBsLmNsZWFyKCk7CiAgICAgbV9zY2hlZHVsZXJPbkltcGxUaHJlYWQu
Y2xlYXIoKTsKQEAgLTkyNCw4ICs5NDMsNyBAQCB2b2lkIENDVGhyZWFkUHJveHk6OnJlY3JlYXRl
Q29udGV4dE9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbiwgQwogewog
ICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NUaHJlYWRQcm94eTo6cmVjcmVhdGVDb250ZXh0T25J
bXBsVGhyZWFkIik7CiAgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKLSAgICBpZiAoIW1fbGF5
ZXJUcmVlSG9zdEltcGwtPmNvbnRlbnRzVGV4dHVyZXNQdXJnZWQoKSkKLSAgICAgICAgbV9sYXll
clRyZWVIb3N0LT5kZWxldGVDb250ZW50c1RleHR1cmVzT25JbXBsVGhyZWFkKG1fbGF5ZXJUcmVl
SG9zdEltcGwtPnJlc291cmNlUHJvdmlkZXIoKSk7CisgICAgbV9sYXllclRyZWVIb3N0LT5kZWxl
dGVBbGxDb250ZW50c1RleHR1cmVzT25JbXBsVGhyZWFkKG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJl
c291cmNlUHJvdmlkZXIoKSk7CiAgICAgKnJlY3JlYXRlU3VjY2VlZGVkID0gbV9sYXllclRyZWVI
b3N0SW1wbC0+aW5pdGlhbGl6ZVJlbmRlcmVyKGFkb3B0UHRyKGNvbnRleHRQdHIpLCB0ZXh0dXJl
VXBsb2FkZXIpOwogICAgIGlmICgqcmVjcmVhdGVTdWNjZWVkZWQpIHsKICAgICAgICAgKmNhcGFi
aWxpdGllcyA9IG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJlbmRlcmVyQ2FwYWJpbGl0aWVzKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RocmVhZFByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RocmVhZFByb3h5LmgKaW5kZXggYzQ4ZGY5MzA1OTk2YmM0MDNmNjZlYzVjZDlhM2U5
YjM2YzY1ZGVkNy4uNjc3YmU5ZGIzMTUxYTQyZGNmMTM5YmY1NWNlNmFjOWVmYjQ5NzZjOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NU
aHJlYWRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGhyZWFkUHJveHkuaApAQCAtODIsNiArODIsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCkgT1ZFUlJJREU7CiAgICAgdmly
dHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0T25JbXBsVGhyZWFkKCkgT1ZFUlJJREU7CiAgICAgdmly
dHVhbCB2b2lkIHBvc3RBbmltYXRpb25FdmVudHNUb01haW5UaHJlYWRPbkltcGxUaHJlYWQoUGFz
c093blB0cjxDQ0FuaW1hdGlvbkV2ZW50c1ZlY3Rvcj4sIGRvdWJsZSB3YWxsQ2xvY2tUaW1lKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVkdWNlQ29udGVudHNUZXh0dXJlc01lbW9yeU9u
SW1wbFRocmVhZCgpIE9WRVJSSURFOwogCiAgICAgLy8gQ0NTY2hlZHVsZXJDbGllbnQgaW1wbGVt
ZW50YXRpb24KICAgICB2aXJ0dWFsIGJvb2wgaGFzTW9yZVJlc291cmNlVXBkYXRlcygpIGNvbnN0
IE9WRVJSSURFOwpAQCAtMTA3LDcgKzEwOCw2IEBAIHByaXZhdGU6CiAKICAgICAgICAgZG91Ymxl
IG1vbm90b25pY0ZyYW1lQmVnaW5UaW1lOwogICAgICAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2Fs
ZVNldD4gc2Nyb2xsSW5mbzsKLSAgICAgICAgYm9vbCBjb250ZW50c1RleHR1cmVzV2VyZURlbGV0
ZWQ7CiAgICAgICAgIHNpemVfdCBtZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlczsKICAgICB9Owog
ICAgIE93blB0cjxCZWdpbkZyYW1lQW5kQ29tbWl0U3RhdGU+IG1fcGVuZGluZ0JlZ2luRnJhbWVS
ZXF1ZXN0OwpAQCAtMTI4LDcgKzEyOCw3IEBAIHByaXZhdGU6CiAgICAgICAgIEludFJlY3QgcmVj
dDsKICAgICB9OwogICAgIHZvaWQgZm9yY2VCZWdpbkZyYW1lT25JbXBsVGhyZWFkKENDQ29tcGxl
dGlvbkV2ZW50Kik7Ci0gICAgdm9pZCBiZWdpbkZyYW1lQ29tcGxldGVPbkltcGxUaHJlYWQoQ0ND
b21wbGV0aW9uRXZlbnQqLCBQYXNzT3duUHRyPENDVGV4dHVyZVVwZGF0ZVF1ZXVlPiwgYm9vbCBj
b250ZW50c1RleHR1cmVzV2VyZURlbGV0ZWQpOworICAgIHZvaWQgYmVnaW5GcmFtZUNvbXBsZXRl
T25JbXBsVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiwgUGFzc093blB0cjxDQ1RleHR1cmVVcGRh
dGVRdWV1ZT4sIGludCBjb250ZW50c1RleHR1cmVzUHVyZ2VBY2spOwogICAgIHZvaWQgYmVnaW5G
cmFtZUFib3J0ZWRPbkltcGxUaHJlYWQoKTsKICAgICB2b2lkIHJlcXVlc3RSZWFkYmFja09uSW1w
bFRocmVhZChSZWFkYmFja1JlcXVlc3QqKTsKICAgICB2b2lkIHJlcXVlc3RTdGFydFBhZ2VTY2Fs
ZUFuaW1hdGlvbk9uSW1wbFRocmVhZChJbnRTaXplIHRhcmdldFBvc2l0aW9uLCBib29sIHVzZUFu
Y2hvciwgZmxvYXQgc2NhbGUsIGRvdWJsZSBkdXJhdGlvblNlYyk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCmlu
ZGV4IDc5NmEzMTk4ZTY2NWNhMTQzMGI3ZDgwNDc0MTM3NWQ1ZmY0Y2ZhNzQuLjc3OTg3NjY3ZWUz
ZjIzOGZjOTRmMjkxZDVlZTY0NWNhMzVhYWZiNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCkBAIC04OSw2
ICs4OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNSZWRyYXdPbkltcGxU
aHJlYWQoKSBPVkVSUklERSB7IG1fZGlkUmVxdWVzdFJlZHJhdyA9IHRydWU7IH0KICAgICB2aXJ0
dWFsIHZvaWQgc2V0TmVlZHNDb21taXRPbkltcGxUaHJlYWQoKSBPVkVSUklERSB7IG1fZGlkUmVx
dWVzdENvbW1pdCA9IHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgcG9zdEFuaW1hdGlvbkV2ZW50
c1RvTWFpblRocmVhZE9uSW1wbFRocmVhZChQYXNzT3duUHRyPENDQW5pbWF0aW9uRXZlbnRzVmVj
dG9yPiwgZG91YmxlIHdhbGxDbG9ja1RpbWUpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCByZWR1Y2VDb250ZW50c1RleHR1cmVzTWVtb3J5T25JbXBsVGhyZWFkKCkgT1ZFUlJJREUgeyBt
X2hvc3RJbXBsLT5zZXRDb250ZW50c1RleHR1cmVzUHVyZ2VkKCk7IH0KIAogICAgIFBhc3NPd25Q
dHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gY3JlYXRlTGF5ZXJUcmVlSG9zdChib29sIHBhcnRpYWxT
d2FwLCBQYXNzT3duUHRyPENDR3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQsIFBhc3NP
d25QdHI8Q0NMYXllckltcGw+IHJvb3RQdHIpCiAgICAgewpAQCAtMzg0MSwxMiArMzg0Miw2IEBA
IFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc3VyZmFjZVRleHR1cmVDYWNoaW5nTm9Q
YXJ0aWFsU3dhcCkKICAgICB9CiB9CiAKLVRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwg
cmVsZWFzZUNvbnRlbnRzVGV4dHVyZVNob3VsZFRyaWdnZXJDb21taXQpCi17Ci0gICAgbV9ob3N0
SW1wbC0+cmVsZWFzZUNvbnRlbnRzVGV4dHVyZXMoKTsKLSAgICBFWFBFQ1RfVFJVRShtX2RpZFJl
cXVlc3RDb21taXQpOwotfQotCiBzdHJ1Y3QgUmVuZGVyUGFzc0NhY2hlRW50cnkgewogICAgIG11
dGFibGUgT3duUHRyPENDUmVuZGVyUGFzcz4gcmVuZGVyUGFzc1B0cjsKICAgICBDQ1JlbmRlclBh
c3MqIHJlbmRlclBhc3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NUZXh0dXJlVXBkYXRlQ29udHJvbGxlclRlc3QuY3BwCmluZGV4IDExNjU5ZjZm
NTJiOGFiZDBhZTMwNzU5YjdhNjY1NDE0NTEwNjA0M2EuLjAyMjc3MTE2OGNjOWQyYjgxZWQwZWVj
NjNhNTM3M2Q5OTIzN2JhY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NUZXh0dXJlVXBkYXRlQ29udHJvbGxlclRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NUZXh0dXJlVXBkYXRlQ29udHJvbGxlclRlc3QuY3BwCkBAIC04Nywx
MCArODcsMTQgQEAgcHJpdmF0ZToKIAogY2xhc3MgVGV4dHVyZUZvclVwbG9hZFRlc3QgOiBwdWJs
aWMgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZSB7CiBwdWJsaWM6Ci0gICAgVGV4dHVyZUZv
clVwbG9hZFRlc3QoKSA6IExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmUoYWRvcHRQdHI8Q0NQ
cmlvcml0aXplZFRleHR1cmU+KDApKSB7IH0KKyAgICBUZXh0dXJlRm9yVXBsb2FkVGVzdCgpIDog
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZShhZG9wdFB0cjxDQ1ByaW9yaXRpemVkVGV4dHVy
ZT4oMCkpLCBtX2RlbGV0ZWQoZmFsc2UpIHsgfQorICAgIHZpcnR1YWwgYm9vbCBiYWNraW5nUmVz
b3VyY2VXYXNEZWxldGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWxldGVkOyB9CiAgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZVJlY3QoQ0NSZXNvdXJjZVByb3ZpZGVyKiwgY29uc3QgSW50UmVjdCYgc291
cmNlUmVjdCwgY29uc3QgSW50U2l6ZSYgZGVzdE9mZnNldCkgeyB9Ci19OwogCisgICAgdm9pZCBz
ZXRCYWNraW5nUmVzb3VyY2VEZWxldGVkKCkgeyBtX2RlbGV0ZWQgPSB0cnVlOyB9Citwcml2YXRl
OgorICAgIGJvb2wgbV9kZWxldGVkOworfTsKIAogY2xhc3MgQ0NUZXh0dXJlVXBkYXRlQ29udHJv
bGxlclRlc3QgOiBwdWJsaWMgVGVzdCB7CiBwdWJsaWM6CkBAIC0xODMsMjggKzE4NywzOCBAQCBw
cm90ZWN0ZWQ6CiAgICAgICAgIFdlYkNvbXBvc2l0b3I6OnNodXRkb3duKCk7CiAgICAgfQogCi0g
ICAgdm9pZCBhcHBlbmRGdWxsVXBsb2Fkc1RvVXBkYXRlUXVldWUoaW50IGNvdW50KQorICAgIHZv
aWQgYXBwZW5kRnVsbFVwbG9hZHNPZkluZGV4ZWRUZXh0dXJlVG9VcGRhdGVRdWV1ZShpbnQgY291
bnQsIGludCB0ZXh0dXJlSW5kZXgpCiAgICAgewogICAgICAgICBtX2Z1bGxVcGxvYWRDb3VudEV4
cGVjdGVkICs9IGNvdW50OwogICAgICAgICBtX3RvdGFsVXBsb2FkQ291bnRFeHBlY3RlZCArPSBj
b3VudDsKIAogICAgICAgICBjb25zdCBJbnRSZWN0IHJlY3QoMCwgMCwgMzAwLCAxNTApOwotICAg
ICAgICBjb25zdCBUZXh0dXJlVXBsb2FkZXI6OlBhcmFtZXRlcnMgdXBsb2FkID0geyAmbV90ZXh0
dXJlLCByZWN0LCBJbnRTaXplKCkgfTsKKyAgICAgICAgY29uc3QgVGV4dHVyZVVwbG9hZGVyOjpQ
YXJhbWV0ZXJzIHVwbG9hZCA9IHsgJm1fdGV4dHVyZXNbdGV4dHVyZUluZGV4XSwgcmVjdCwgSW50
U2l6ZSgpIH07CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKICAgICAg
ICAgICAgIG1fcXVldWUtPmFwcGVuZEZ1bGxVcGxvYWQodXBsb2FkKTsKICAgICB9CiAKLSAgICB2
b2lkIGFwcGVuZFBhcnRpYWxVcGxvYWRzVG9VcGRhdGVRdWV1ZShpbnQgY291bnQpCisgICAgdm9p
ZCBhcHBlbmRGdWxsVXBsb2Fkc1RvVXBkYXRlUXVldWUoaW50IGNvdW50KQorICAgIHsKKyAgICAg
ICAgYXBwZW5kRnVsbFVwbG9hZHNPZkluZGV4ZWRUZXh0dXJlVG9VcGRhdGVRdWV1ZShjb3VudCwg
MCk7CisgICAgfQorCisgICAgdm9pZCBhcHBlbmRQYXJ0aWFsVXBsb2Fkc09mSW5kZXhlZFRleHR1
cmVUb1VwZGF0ZVF1ZXVlKGludCBjb3VudCwgaW50IHRleHR1cmVJbmRleCkKICAgICB7CiAgICAg
ICAgIG1fcGFydGlhbENvdW50RXhwZWN0ZWQgKz0gY291bnQ7CiAgICAgICAgIG1fdG90YWxVcGxv
YWRDb3VudEV4cGVjdGVkICs9IGNvdW50OwogCiAgICAgICAgIGNvbnN0IEludFJlY3QgcmVjdCgw
LCAwLCAxMDAsIDEwMCk7Ci0gICAgICAgIGNvbnN0IFRleHR1cmVVcGxvYWRlcjo6UGFyYW1ldGVy
cyB1cGxvYWQgPSB7ICZtX3RleHR1cmUsIHJlY3QsIEludFNpemUoKSB9OworICAgICAgICBjb25z
dCBUZXh0dXJlVXBsb2FkZXI6OlBhcmFtZXRlcnMgdXBsb2FkID0geyAmbV90ZXh0dXJlc1t0ZXh0
dXJlSW5kZXhdLCByZWN0LCBJbnRTaXplKCkgfTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKQogICAgICAgICAgICAgbV9xdWV1ZS0+YXBwZW5kUGFydGlhbFVwbG9hZCh1
cGxvYWQpOwogICAgIH0KIAorICAgIHZvaWQgYXBwZW5kUGFydGlhbFVwbG9hZHNUb1VwZGF0ZVF1
ZXVlKGludCBjb3VudCkKKyAgICB7CisgICAgICAgIGFwcGVuZFBhcnRpYWxVcGxvYWRzT2ZJbmRl
eGVkVGV4dHVyZVRvVXBkYXRlUXVldWUoY291bnQsIDApOworICAgIH0KKwogICAgIHZvaWQgc2V0
TWF4VXBsb2FkQ291bnRQZXJVcGRhdGUoaW50IGNvdW50KQogICAgIHsKICAgICAgICAgbV9tYXhV
cGxvYWRDb3VudFBlclVwZGF0ZSA9IGNvdW50OwpAQCAtMjE1LDcgKzIyOSw3IEBAIHByb3RlY3Rl
ZDoKICAgICBPd25QdHI8Q0NHcmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsKICAgICBPd25QdHI8
Q0NSZXNvdXJjZVByb3ZpZGVyPiBtX3Jlc291cmNlUHJvdmlkZXI7CiAgICAgT3duUHRyPENDVGV4
dHVyZVVwZGF0ZVF1ZXVlPiBtX3F1ZXVlOwotICAgIFRleHR1cmVGb3JVcGxvYWRUZXN0IG1fdGV4
dHVyZTsKKyAgICBUZXh0dXJlRm9yVXBsb2FkVGVzdCBtX3RleHR1cmVzWzRdOwogICAgIEZha2VU
ZXh0dXJlQ29waWVyIG1fY29waWVyOwogICAgIFRleHR1cmVVcGxvYWRlckZvclVwbG9hZFRlc3Qg
bV91cGxvYWRlcjsKIApAQCAtNjg1LDQgKzY5OSwzNyBAQCBURVNUX0YoQ0NUZXh0dXJlVXBkYXRl
Q29udHJvbGxlclRlc3QsIFVwZGF0ZXNDb21wbGV0ZUluRmluaXRlVGltZSkKICAgICBFWFBFQ1Rf
RVEoMiwgbV9udW1Ub3RhbFVwbG9hZHMpOwogfQogCitURVNUX0YoQ0NUZXh0dXJlVXBkYXRlQ29u
dHJvbGxlclRlc3QsIEFzeW5jRGVsZXRpb24pCit7CisgICAgYXBwZW5kRnVsbFVwbG9hZHNPZklu
ZGV4ZWRUZXh0dXJlVG9VcGRhdGVRdWV1ZSgxLCAwKTsKKyAgICBhcHBlbmRQYXJ0aWFsVXBsb2Fk
c09mSW5kZXhlZFRleHR1cmVUb1VwZGF0ZVF1ZXVlKDEsIDEpOworICAgIGFwcGVuZEZ1bGxVcGxv
YWRzT2ZJbmRleGVkVGV4dHVyZVRvVXBkYXRlUXVldWUoMSwgMik7CisgICAgYXBwZW5kUGFydGlh
bFVwbG9hZHNPZkluZGV4ZWRUZXh0dXJlVG9VcGRhdGVRdWV1ZSgxLCAzKTsKKyAgICBEZWJ1Z1Nj
b3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKKworICAgIG1fcXVldWUtPmNsZWFyVXBsb2Fk
c1RvRGVsZXRlZFJlc291cmNlcygpOworICAgIEVYUEVDVF9FUSgydSwgbV9xdWV1ZS0+ZnVsbFVw
bG9hZFNpemUoKSk7CisgICAgRVhQRUNUX0VRKDJ1LCBtX3F1ZXVlLT5wYXJ0aWFsVXBsb2FkU2l6
ZSgpKTsKKworICAgIG1fdGV4dHVyZXNbMF0uc2V0QmFja2luZ1Jlc291cmNlRGVsZXRlZCgpOwor
ICAgIG1fcXVldWUtPmNsZWFyVXBsb2Fkc1RvRGVsZXRlZFJlc291cmNlcygpOworICAgIEVYUEVD
VF9FUSgxdSwgbV9xdWV1ZS0+ZnVsbFVwbG9hZFNpemUoKSk7CisgICAgRVhQRUNUX0VRKDJ1LCBt
X3F1ZXVlLT5wYXJ0aWFsVXBsb2FkU2l6ZSgpKTsKKworICAgIG1fdGV4dHVyZXNbM10uc2V0QmFj
a2luZ1Jlc291cmNlRGVsZXRlZCgpOworICAgIG1fcXVldWUtPmNsZWFyVXBsb2Fkc1RvRGVsZXRl
ZFJlc291cmNlcygpOworICAgIEVYUEVDVF9FUSgxdSwgbV9xdWV1ZS0+ZnVsbFVwbG9hZFNpemUo
KSk7CisgICAgRVhQRUNUX0VRKDF1LCBtX3F1ZXVlLT5wYXJ0aWFsVXBsb2FkU2l6ZSgpKTsKKwor
ICAgIG1fdGV4dHVyZXNbMl0uc2V0QmFja2luZ1Jlc291cmNlRGVsZXRlZCgpOworICAgIG1fcXVl
dWUtPmNsZWFyVXBsb2Fkc1RvRGVsZXRlZFJlc291cmNlcygpOworICAgIEVYUEVDVF9FUSgwdSwg
bV9xdWV1ZS0+ZnVsbFVwbG9hZFNpemUoKSk7CisgICAgRVhQRUNUX0VRKDF1LCBtX3F1ZXVlLT5w
YXJ0aWFsVXBsb2FkU2l6ZSgpKTsKKworICAgIG1fdGV4dHVyZXNbMV0uc2V0QmFja2luZ1Jlc291
cmNlRGVsZXRlZCgpOworICAgIG1fcXVldWUtPmNsZWFyVXBsb2Fkc1RvRGVsZXRlZFJlc291cmNl
cygpOworICAgIEVYUEVDVF9FUSgwdSwgbV9xdWV1ZS0+ZnVsbFVwbG9hZFNpemUoKSk7CisgICAg
RVhQRUNUX0VRKDB1LCBtX3F1ZXVlLT5wYXJ0aWFsVXBsb2FkU2l6ZSgpKTsKK30KKwogfSAvLyBu
YW1lc3BhY2UK
</data>
<flag name="review"
          id="173454"
          type_id="1"
          status="-"
          setter="jamesr"
    />
          </attachment>
      

    </bug>

</bugzilla>