<?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>81823</bug_id>
          
          <creation_ts>2012-03-21 12:16:47 -0700</creation_ts>
          <short_desc>[chromium] LayerRendererChromium should use GpuMemoryAllocationChanged callback to explicitly manage framebuffer.</short_desc>
          <delta_ts>2012-03-22 20:00:08 -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>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michal Mocny">mmocny</reporter>
          <assigned_to name="Michal Mocny">mmocny</assigned_to>
          <cc>abarth</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>danakj</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>tkent</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>584474</commentid>
    <comment_count>0</comment_count>
    <who name="Michal Mocny">mmocny</who>
    <bug_when>2012-03-21 12:16:47 -0700</bug_when>
    <thetext>[chromium] LayerRendererChromium should use GpuMemoryAllocationChanged callback to explicitly manage framebuffer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584480</commentid>
    <comment_count>1</comment_count>
      <attachid>133093</attachid>
    <who name="Michal Mocny">mmocny</who>
    <bug_when>2012-03-21 12:19:39 -0700</bug_when>
    <thetext>Created attachment 133093
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584488</commentid>
    <comment_count>2</comment_count>
    <who name="Michal Mocny">mmocny</who>
    <bug_when>2012-03-21 12:26:05 -0700</bug_when>
    <thetext>This patch is still rough around the edges, but combined with https://chromiumcodereview.appspot.com/9699125/ it does fix the underlying issue with thumbnail generation using renderer when tabs finish loading in the background.

I am still doing some manual testing and confirming gpu resource usage figures,
as well as making sure this patch can land safely before chromium patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584520</commentid>
    <comment_count>3</comment_count>
      <attachid>133093</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-03-21 12:51:59 -0700</bug_when>
    <thetext>Comment on attachment 133093
Patch

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

Pretty cool!

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:189
&gt; +class ScopedEnsureFramebufferAllocationImpl : public LayerRendererChromium::ScopedEnsureFramebufferAllocation {

why subclass?

you can do 

LRC {
private:
  class Foo;
}

Then have the entire class actually only declared here...

class LRC::Foo {
 ...
}

I think

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:211
&gt; +    bool framebufferWasInitiallyDiscarded;

m_

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:309
&gt; +    if (extensions-&gt;supports(&quot;GL_CHROMIUM_gpu_memory_manager&quot;)) {

move to lrc capabilities, test capaibilities

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:316
&gt; +            m_isFramebufferDiscarded = false;

you set this on :233, do you need to again here?

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:1163
&gt; +    if (extensions-&gt;supports(&quot;GL_EXT_discard_framebuffer&quot;)) {

you should move this to a bool on LayerRendererCapabilities that you probe at initialize time rather than hammering extensions

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:75
&gt; +    OwnPtr&lt;LayerRendererChromium::ScopedEnsureFramebufferAllocation&gt; sfa(m_layerTreeHostImpl-&gt;layerRenderer()-&gt;createScopedEnsureFramebufferAllocation());

For these kinds of thigns you dont need the pointer stuff. Look at CCThread.h debugscopedsomethignorother. Copy that style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584529</commentid>
    <comment_count>4</comment_count>
      <attachid>133093</attachid>
    <who name="Michal Mocny">mmocny</who>
    <bug_when>2012-03-21 12:57:52 -0700</bug_when>
    <thetext>Comment on attachment 133093
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:189
&gt;&gt; +class ScopedEnsureFramebufferAllocationImpl : public LayerRendererChromium::ScopedEnsureFramebufferAllocation {
&gt; 
&gt; why subclass?
&gt; 
&gt; you can do 
&gt; 
&gt; LRC {
&gt; private:
&gt;   class Foo;
&gt; }
&gt; 
&gt; Then have the entire class actually only declared here...
&gt; 
&gt; class LRC::Foo {
&gt;  ...
&gt; }
&gt; 
&gt; I think

Tried that (well similar), but since outside clients will be calling the destructor, the class needs to be fully defined.

What you describe can be done if the only caller of destructor is inside the cc file where the class is defined, as is the case with PIMPL.

I maybe don&apos;t need to be so clever with friend impl class if I add more to the public definition, but I wanted to keep as little public as possible.

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:309
&gt;&gt; +    if (extensions-&gt;supports(&quot;GL_CHROMIUM_gpu_memory_manager&quot;)) {
&gt; 
&gt; move to lrc capabilities, test capaibilities

Okay, no problem.  For future reference, I thought capabilities was to inform clients of LRC capabilities, or is it also for efficiency so we dont scan strings each time?

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:316
&gt;&gt; +            m_isFramebufferDiscarded = false;
&gt; 
&gt; you set this on :233, do you need to again here?

I wasn&apos;t sure if initialize gets called more than once (like after context loss?), but if not, it should be removed.

This reminds me to test killing gpu process.

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:1163
&gt;&gt; +    if (extensions-&gt;supports(&quot;GL_EXT_discard_framebuffer&quot;)) {
&gt; 
&gt; you should move this to a bool on LayerRendererCapabilities that you probe at initialize time rather than hammering extensions

will do.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:75
&gt;&gt; +    OwnPtr&lt;LayerRendererChromium::ScopedEnsureFramebufferAllocation&gt; sfa(m_layerTreeHostImpl-&gt;layerRenderer()-&gt;createScopedEnsureFramebufferAllocation());
&gt; 
&gt; For these kinds of thigns you dont need the pointer stuff. Look at CCThread.h debugscopedsomethignorother. Copy that style.

will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584707</commentid>
    <comment_count>5</comment_count>
      <attachid>133128</attachid>
    <who name="Michal Mocny">mmocny</who>
    <bug_when>2012-03-21 15:38:05 -0700</bug_when>
    <thetext>Created attachment 133128
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584716</commentid>
    <comment_count>6</comment_count>
      <attachid>133128</attachid>
    <who name="Michal Mocny">mmocny</who>
    <bug_when>2012-03-21 15:47:45 -0700</bug_when>
    <thetext>Comment on attachment 133128
Patch

Alright, fixed the nits and cleaned up a few things.

Also fixed two related bugs that happened when rapid tab switching:
1. Don&apos;t swap with a discarded fb
2. Always call ensure fb when given an allocation requesting one.  Usually ends up a no-op, but sometimes previous allocation is delivered very late (since it is asynchronous).  This race only appeared when using non-threaded composting, perhaps because impl thread is so much more responsive that race becomes unlikely.

This patch should and can land before the chromium side patch lands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584720</commentid>
    <comment_count>7</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-21 15:50:41 -0700</bug_when>
    <thetext>Are you able to make unit tests for these cases you fixed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584726</commentid>
    <comment_count>8</comment_count>
    <who name="Michal Mocny">mmocny</who>
    <bug_when>2012-03-21 15:56:57 -0700</bug_when>
    <thetext>The problem only arose during rapid tab switching and only rarely.  I think it would be difficult to make a reliable unit test.

I will see if there are any existing rapid tab switching related tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584742</commentid>
    <comment_count>9</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-03-21 16:18:00 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; The problem only arose during rapid tab switching and only rarely.  I think it would be difficult to make a reliable unit test.
&gt; 
&gt; I will see if there are any existing rapid tab switching related tests.

There aren&apos;t tab switching tests, but you could forcibly drop a front buffer on an LRC and make sure there was no swap and it got recreated properly.  We have fake graphics contexts, so you could create an LRC in a unit test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584761</commentid>
    <comment_count>10</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-03-21 16:42:30 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; The problem only arose during rapid tab switching and only rarely.  I think it would be difficult to make a reliable unit test.
&gt; &gt; 
&gt; &gt; I will see if there are any existing rapid tab switching related tests.
&gt; 
&gt; There aren&apos;t tab switching tests, but you could forcibly drop a front buffer on an LRC and make sure there was no swap and it got recreated properly.  We have fake graphics contexts, so you could create an LRC in a unit test.

In particular, look at CCLayerTreeHostImplTest.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584806</commentid>
    <comment_count>11</comment_count>
      <attachid>133152</attachid>
    <who name="Michal Mocny">mmocny</who>
    <bug_when>2012-03-21 17:26:41 -0700</bug_when>
    <thetext>Created attachment 133152
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584808</commentid>
    <comment_count>12</comment_count>
      <attachid>133152</attachid>
    <who name="Michal Mocny">mmocny</who>
    <bug_when>2012-03-21 17:28:18 -0700</bug_when>
    <thetext>Comment on attachment 133152
Patch

Added a unittest to make sure we do the right thing regarding swaps and discarded framebuffers.

This test will likely be removed once we have automatic recreation of backbuffer upon first use.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584853</commentid>
    <comment_count>13</comment_count>
      <attachid>133152</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-03-21 18:16:25 -0700</bug_when>
    <thetext>Comment on attachment 133152
Patch

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

Looks good in general.  Here&apos;s a bunch of small things to fix, and then we can land this.  Thanks so much for the test!

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:1078
&gt; +      m_client-&gt;setFullRootLayerDamage();

Is this redundant? It looks like you already set the full root layer damage during discardFramebuffer.

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:1110
&gt; +    if (m_capabilities.usingDiscardFramebuffer) {

style nit: early out here, rather than indenting this whole block of code.

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:1127
&gt; +    if (m_capabilities.usingDiscardFramebuffer) {

style nit: early out here too.

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h:169
&gt; +    friend class LayerRendererGpuMemoryAllocationChangedCallbackAdapter;
&gt; +    friend class ScopedEnsureFramebufferAllocation;
&gt; +    void discardFramebuffer();
&gt; +    void ensureFramebuffer();

I think you should just make these functions public for the sake of future design, add an isFramebufferDiscarded() function, and remove the friend class.  At some point, we&apos;d like to make a CCRenderer interface that LayerRendererChromium can implement, and I think that interface would end up using these framebuffer functions directly.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:75
&gt; +    ScopedEnsureFramebufferAllocation sefa(m_layerTreeHostImpl-&gt;layerRenderer());

style nit: please don&apos;t use abbreviations.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:94
&gt; +    ScopedEnsureFramebufferAllocation sefa(m_layerTreeHostImpl-&gt;layerRenderer());

style nit: please don&apos;t use abbreviations.

&gt; Source/WebKit/chromium/tests/LayerRendererChromiumTest.cpp:53
&gt; +    virtual const IntSize&amp; viewportSize() const { static IntSize sz; return sz; }

style nit: please don&apos;t use abbreviations.

&gt; Source/WebKit/chromium/tests/LayerRendererChromiumTest.cpp:64
&gt; +    LayerRendererChromiumTest(LayerRendererChromiumClient* lrcc, PassRefPtr&lt;GraphicsContext3D&gt; context)

style nit: please don&apos;t use abbreviations.

&gt; Source/WebKit/chromium/tests/LayerRendererChromiumTest.cpp:83
&gt; +    LayerRendererChromiumTest lrc(&amp;client, context.release());

style nit: please don&apos;t use abbreviations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584854</commentid>
    <comment_count>14</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-03-21 18:18:09 -0700</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=133152&amp;action=review

Getting there... you want your tests to test the feature you&apos;re adding --- this is (a) responding to the callback in both directions, squelching swaps, issuing full root layer damage at the right time, and temporarily recreating the framebuffer during forced draws.

&gt; Source/WebKit/chromium/tests/LayerRendererChromiumTest.cpp:59
&gt; +    virtual void setFullRootLayerDamage() { }

you need to also test that full rld is set at the right place

&gt; Source/WebKit/chromium/tests/LayerRendererChromiumTest.cpp:93
&gt; +    lrc.discardFramebuffer();

I think you&apos;re missing the key part --- you need to not swap and you need to issue full damage.

you should make a test that advertise the extension and then trigger the callback, and expect that you got a discard

then you need to try drawing and expect to see an ensure call, followed by a discard.

and, you should then test that firing the callback again and setting it to 1 trigers an ensure again</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585358</commentid>
    <comment_count>15</comment_count>
      <attachid>133152</attachid>
    <who name="Michal Mocny">mmocny</who>
    <bug_when>2012-03-22 09:18:43 -0700</bug_when>
    <thetext>Comment on attachment 133152
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:1078
&gt;&gt; +      m_client-&gt;setFullRootLayerDamage();
&gt; 
&gt; Is this redundant? It looks like you already set the full root layer damage during discardFramebuffer.

This isn&apos;t redundant because setFullRootLayerDamage() only applies for the next frame, and the partial swap code does not yet handle discarding a swap.
I&apos;ve coordinated with Shawn to make sure the damage tracker is not out of synch at this point, but we do need to reset damage so that once backbuffer is recreated we push a full frame.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585361</commentid>
    <comment_count>16</comment_count>
      <attachid>133276</attachid>
    <who name="Michal Mocny">mmocny</who>
    <bug_when>2012-03-22 09:21:42 -0700</bug_when>
    <thetext>Created attachment 133276
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585367</commentid>
    <comment_count>17</comment_count>
      <attachid>133276</attachid>
    <who name="Michal Mocny">mmocny</who>
    <bug_when>2012-03-22 09:24:53 -0700</bug_when>
    <thetext>Comment on attachment 133276
Patch

Fixed nits and expanded unit test significantly.

Figuring out how to force extensions was a pain (examples in other unittests dont have the word &quot;extension&quot; anywhere and so was not grep-able).

extensions-&gt;ensureEnabled does not do what I expected it to do :(

You live, you learn.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585470</commentid>
    <comment_count>18</comment_count>
      <attachid>133276</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-03-22 10:50:52 -0700</bug_when>
    <thetext>Comment on attachment 133276
Patch

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

Thanks for all the additional tests.

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:353
&gt; +    // FIXME: Remove this once framebuffer is automatically recreated on first use
&gt; +    ensureFramebuffer();

Do you want to ensure the framebuffer even on setVisible(false)?

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:1080
&gt; +    if (m_isFramebufferDiscarded) {
&gt; +      m_client-&gt;setFullRootLayerDamage();
&gt; +      return;
&gt; +    }

style nit: four space indent.  Kind of surprised stylebot didn&apos;t yell.

&gt; Source/WebKit/chromium/tests/LayerRendererChromiumTest.cpp:134
&gt; +    // Reset back to suggestHaveBackbufferNo allocation.
&gt; +    mockContext.setMemoryAllocation(suggestHaveBackbufferYes);

s/No/Yes/

&gt; Source/WebKit/chromium/tests/LayerRendererChromiumTest.cpp:146
&gt; +    // Make sure swaps are ignored while framebuffer is droped, and that setFullRootLayerDamage is called.

s/droped/dropped/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585472</commentid>
    <comment_count>19</comment_count>
      <attachid>133276</attachid>
    <who name="Michal Mocny">mmocny</who>
    <bug_when>2012-03-22 10:54:43 -0700</bug_when>
    <thetext>Comment on attachment 133276
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:353
&gt;&gt; +    ensureFramebuffer();
&gt; 
&gt; Do you want to ensure the framebuffer even on setVisible(false)?

No, I don&apos;t.  It wouldn&apos;t do anything at this moment, but that may change once we start plumbing visibility to gpu process directly from browser. Thanks, I&apos;ll make the change.

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:1080
&gt;&gt; +    }
&gt; 
&gt; style nit: four space indent.  Kind of surprised stylebot didn&apos;t yell.

Indeed!

&gt;&gt; Source/WebKit/chromium/tests/LayerRendererChromiumTest.cpp:134
&gt;&gt; +    mockContext.setMemoryAllocation(suggestHaveBackbufferYes);
&gt; 
&gt; s/No/Yes/

Thanks.

&gt;&gt; Source/WebKit/chromium/tests/LayerRendererChromiumTest.cpp:146
&gt;&gt; +    // Make sure swaps are ignored while framebuffer is droped, and that setFullRootLayerDamage is called.
&gt; 
&gt; s/droped/dropped/

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585489</commentid>
    <comment_count>20</comment_count>
      <attachid>133296</attachid>
    <who name="Michal Mocny">mmocny</who>
    <bug_when>2012-03-22 11:08:08 -0700</bug_when>
    <thetext>Created attachment 133296
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585518</commentid>
    <comment_count>21</comment_count>
      <attachid>133296</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-03-22 11:29:59 -0700</bug_when>
    <thetext>Comment on attachment 133296
Patch

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

Better, thank you. However, while you&apos;ve gotten good coverage with these tests, they&apos;re not quite written in a stylistically correct way. The thing you need now is to split these up so you have 1 test per unit of behavior, whereas now you&apos;ve got one giant megasuperduperubertest covering tons of behavior.

&gt; Source/WebKit/chromium/tests/LayerRendererChromiumTest.cpp:111
&gt; +

You need to follow standard test style. Change these so that they are different TEST_ macros. A TEST_ macro should test 1 thing in isolation....

You can take everything from line 101 to line 110 and put them in a test fixture class as follows (or you can read this doc http://code.google.com/p/googletest/source/browse/trunk/samples/sample3_unittest.cc)

class DiscardTestFixture : public testing::Test {
   virtual void SetUp() {
      ... set up stuff, stuff variables 
   }
   LRC m_layerRendererChromium
   
}

Once ou have that, then 

TEST_F( DiscardTestFixture, SuggestHaveBackbuffersYesShouldNotSwap) {
   this is actually a member function of the discard test fixture
}

&gt; Source/WebKit/chromium/tests/LayerRendererChromiumTest.cpp:113
&gt; +    layerRendererChromium.swapBuffers(IntRect());

I dont understand the poitn of this test. You&apos;re testing the test harness here, I&apos;m not sure you need to do this one.

&gt; Source/WebKit/chromium/tests/LayerRendererChromiumTest.cpp:119
&gt; +    // Send suggestHaveBackbufferYes allocation, and expect no difference.

&quot;Expect no difference&quot; is a content free statement. Expect ____ something.... i think you meant to say &quot;sending an allocationYes when you already have a yes should not cause anything to happen.&quot;

Try to remember, these are going to pop and someone != you is going to have to understand what you were intending to test, what is going on here and so on.

&gt; Source/WebKit/chromium/tests/LayerRendererChromiumTest.cpp:121
&gt; +    layerRendererChromium.swapBuffers(IntRect());

This seems like a different test. &quot;Expect that a newly initialized lrc swaps.

&gt; Source/WebKit/chromium/tests/LayerRendererChromiumTest.cpp:122
&gt; +    EXPECT_EQ(2, mockContext.frameCount());

once you use a test fixture, you dont have to reset or track these numbers anymore. The test fixture is deleted and recreated after each test --- that is, each TEST_F gets its own instance of the fixture.

&gt; Source/WebKit/chromium/tests/LayerRendererChromiumTest.cpp:127
&gt; +    // Send suggestHaveBackbufferNo allocation.

Yes, and what do you expect. This should become the name of the TEST_F function., E.g.

TEST_F(..., SuggestBackbufferNoShouldDamageRootLayerAndDiscardFrameBuffer)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585522</commentid>
    <comment_count>22</comment_count>
      <attachid>133296</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-03-22 11:31:47 -0700</bug_when>
    <thetext>Comment on attachment 133296
Patch

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

&gt; Source/WebKit/chromium/tests/LayerRendererChromiumTest.cpp:42
&gt; +    // This method would normally do a glSwapBuffers under the hood.

Same comment as below. Put a comment that groups the interface methods separately from the added-value methods

&gt; Source/WebKit/chromium/tests/LayerRendererChromiumTest.cpp:68
&gt; +    virtual const IntSize&amp; viewportSize() const { static IntSize fakeSize; return fakeSize; }

Make a comment saying // LayerRendererChromiumClient implementation to separate out interface from extra methods</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585610</commentid>
    <comment_count>23</comment_count>
      <attachid>133296</attachid>
    <who name="Michal Mocny">mmocny</who>
    <bug_when>2012-03-22 13:03:17 -0700</bug_when>
    <thetext>Comment on attachment 133296
Patch

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

&gt;&gt; Source/WebKit/chromium/tests/LayerRendererChromiumTest.cpp:111
&gt;&gt; +
&gt; 
&gt; You need to follow standard test style. Change these so that they are different TEST_ macros. A TEST_ macro should test 1 thing in isolation....
&gt; 
&gt; You can take everything from line 101 to line 110 and put them in a test fixture class as follows (or you can read this doc http://code.google.com/p/googletest/source/browse/trunk/samples/sample3_unittest.cc)
&gt; 
&gt; class DiscardTestFixture : public testing::Test {
&gt;    virtual void SetUp() {
&gt;       ... set up stuff, stuff variables 
&gt;    }
&gt;    LRC m_layerRendererChromium
&gt; 
&gt; }
&gt; 
&gt; Once ou have that, then 
&gt; 
&gt; TEST_F( DiscardTestFixture, SuggestHaveBackbuffersYesShouldNotSwap) {
&gt;    this is actually a member function of the discard test fixture
&gt; }

Thanks, this evolved from a simple test which is how we got here, but you are 100% correct and I&apos;ve updated.

FYI, seems TEST_F does not make the test a member function, but rather a subclass, so locals have to be marked protected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585614</commentid>
    <comment_count>24</comment_count>
      <attachid>133328</attachid>
    <who name="Michal Mocny">mmocny</who>
    <bug_when>2012-03-22 13:05:47 -0700</bug_when>
    <thetext>Created attachment 133328
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585618</commentid>
    <comment_count>25</comment_count>
      <attachid>133328</attachid>
    <who name="Michal Mocny">mmocny</who>
    <bug_when>2012-03-22 13:13:20 -0700</bug_when>
    <thetext>Comment on attachment 133328
Patch

Found a typo, new patch incoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585627</commentid>
    <comment_count>26</comment_count>
      <attachid>133331</attachid>
    <who name="Michal Mocny">mmocny</who>
    <bug_when>2012-03-22 13:22:56 -0700</bug_when>
    <thetext>Created attachment 133331
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585669</commentid>
    <comment_count>27</comment_count>
      <attachid>133331</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-03-22 14:03:26 -0700</bug_when>
    <thetext>Comment on attachment 133331
Patch

LGTM ty</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585680</commentid>
    <comment_count>28</comment_count>
      <attachid>133331</attachid>
    <who name="Michal Mocny">mmocny</who>
    <bug_when>2012-03-22 14:13:07 -0700</bug_when>
    <thetext>Comment on attachment 133331
Patch

I am just going to rename GL_EXT_discard_framebuffer to GL_CHROMIUM_discard_framebuffer since it doesn&apos;t yet do exactly what standard extension requires, and chromium side patch reviewers wanted to see this change for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585686</commentid>
    <comment_count>29</comment_count>
      <attachid>133341</attachid>
    <who name="Michal Mocny">mmocny</who>
    <bug_when>2012-03-22 14:16:56 -0700</bug_when>
    <thetext>Created attachment 133341
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585690</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-22 14:20:28 -0700</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585693</commentid>
    <comment_count>31</comment_count>
      <attachid>133341</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-03-22 14:21:05 -0700</bug_when>
    <thetext>Comment on attachment 133341
Patch

Looks great! R=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585712</commentid>
    <comment_count>32</comment_count>
      <attachid>133348</attachid>
    <who name="Michal Mocny">mmocny</who>
    <bug_when>2012-03-22 14:34:03 -0700</bug_when>
    <thetext>Created attachment 133348
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585731</commentid>
    <comment_count>33</comment_count>
      <attachid>133348</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-03-22 14:52:00 -0700</bug_when>
    <thetext>Comment on attachment 133348
Patch

Yeah, the extensions haven&apos;t changed because of this patch, so no need to change the comments on the public API, I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585735</commentid>
    <comment_count>34</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-22 14:54:12 -0700</bug_when>
    <thetext>Looks fine to me (I also think that changing a comment doesn&apos;t really count as changing the API).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585801</commentid>
    <comment_count>35</comment_count>
      <attachid>133348</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-22 15:43:43 -0700</bug_when>
    <thetext>Comment on attachment 133348
Patch

Clearing flags on attachment: 133348

Committed r111777: &lt;http://trac.webkit.org/changeset/111777&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585802</commentid>
    <comment_count>36</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-22 15:43:55 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585944</commentid>
    <comment_count>37</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-03-22 18:14:00 -0700</bug_when>
    <thetext>(In reply to comment #35)
&gt; (From update of attachment 133348 [details])
&gt; Clearing flags on attachment: 133348
&gt; 
&gt; Committed r111777: &lt;http://trac.webkit.org/changeset/111777&gt;

I believe CCLayerTreeHostImplTest.visibilityChangeResetsDamage started failing after this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585988</commentid>
    <comment_count>38</comment_count>
    <who name="Michal Mocny">mmocny</who>
    <bug_when>2012-03-22 19:14:01 -0700</bug_when>
    <thetext>Thanks for finding that Tony.

This test is expected to fail now, since we no longer drop backbuffer on visibility change (we wait for an allocation, which usually happens some time after the visibility change, but may not).  Because we don&apos;t, we don&apos;t need to force reset damage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585989</commentid>
    <comment_count>39</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-03-22 19:15:39 -0700</bug_when>
    <thetext>Patch incoming</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586022</commentid>
    <comment_count>40</comment_count>
    <who name="Michal Mocny">mmocny</who>
    <bug_when>2012-03-22 19:46:31 -0700</bug_when>
    <thetext>I assumed CQ should have caught this, so filed a bug: https://bugs.webkit.org/show_bug.cgi?id=82007</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586024</commentid>
    <comment_count>41</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-22 19:47:48 -0700</bug_when>
    <thetext>Yeh CQ/EWS doesn&apos;t run unit tests right now. It did for a short while. One day it may again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586030</commentid>
    <comment_count>42</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-03-22 20:00:08 -0700</bug_when>
    <thetext>Committed r111816: &lt;http://trac.webkit.org/changeset/111816&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133093</attachid>
            <date>2012-03-21 12:19:39 -0700</date>
            <delta_ts>2012-03-21 15:38:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81823-20120321151938.patch</filename>
            <type>text/plain</type>
            <size>17555</size>
            <attacher name="Michal Mocny">mmocny</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExNTc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjhmNDg1OWJlNDU4OTI5
ZDNmMmRkYmJkNDUxNDE5Y2QzNWViODhlMS4uNDcyYzljZGQ0ZGI2OGRkNWQ4NDAwYjVmOGYyMGU0
OGMwYTEwOThjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDEyLTAzLTIxICBNaWNo
YWwgTW9jbnkgIDxtbW9jbnlAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIExheWVy
UmVuZGVyZXJDaHJvbWl1bSBzaG91bGQgdXNlIEdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkIGNh
bGxiYWNrIHRvIGV4cGxpY2l0bHkgbWFuYWdlIGZyYW1lYnVmZmVyLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE4MjMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChMYXllclJlbmRlcmVyR3B1
TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJSZW5kZXJlckdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVy
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckdwdU1lbW9yeUFsbG9j
YXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyOjp+TGF5ZXJSZW5kZXJlckdwdU1lbW9yeUFsbG9j
YXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJHcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlcjo6b25HcHVNZW1v
cnlBbGxvY2F0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyR3B1
TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXI6OkxheWVyUmVuZGVyZXJHcHVN
ZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlcik6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFNjb3BlZEVuc3VyZUZyYW1lYnVmZmVyQWxsb2NhdGlvbkltcGwpOgorICAg
ICAgICAoV2ViQ29yZTo6U2NvcGVkRW5zdXJlRnJhbWVidWZmZXJBbGxvY2F0aW9uSW1wbDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjb3BlZEVuc3VyZUZyYW1lYnVmZmVyQWxsb2NhdGlv
bkltcGw6On5TY29wZWRFbnN1cmVGcmFtZWJ1ZmZlckFsbG9jYXRpb25JbXBsKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjb3BlZEVuc3VyZUZyYW1lYnVmZmVyQWxsb2NhdGlvbkltcGw6OlNjb3BlZEVu
c3VyZUZyYW1lYnVmZmVyQWxsb2NhdGlvbkltcGwpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6fkxheWVyUmVuZGVyZXJDaHJvbWl1bSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldFZpc2libGUpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpTY29wZWRFbnN1cmVGcmFtZWJ1ZmZlckFs
bG9jYXRpb246On5TY29wZWRFbnN1cmVGcmFtZWJ1ZmZlckFsbG9jYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGVTY29wZWRFbnN1cmVGcmFtZWJ1
ZmZlckFsbG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVt
Ojpzd2FwQnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06
Om9uR3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkaXNjYXJkRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjplbnN1cmVGcmFtZWJ1ZmZlcik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKExheWVyUmVuZGVyZXJDaHJvbWl1bUNsaWVudCk6CisgICAg
ICAgIChMYXllclJlbmRlcmVyQ2hyb21pdW0pOgorICAgICAgICAoU2NvcGVkRW5zdXJlRnJhbWVi
dWZmZXJBbGxvY2F0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OnNldFZpc2libGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaDoKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdElt
cGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhy
ZWFkUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y29t
cG9zaXRlQW5kUmVhZGJhY2spOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGhyZWFkUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6
Y29tcG9zaXRlQW5kUmVhZGJhY2spOgorCiAyMDEyLTAzLTIxICBaZW5vIEFsYmlzc2VyICA8emVu
b0B3ZWJraXQub3JnPgogCiAgICAgICAgIFtRdF1bTWFjXSByYW5saWIgc2VnZmF1bHRzIHdoZW4g
Y3JlYXRpbmcgc3ltYm9sIHRhYmxlcyBmb3IgbGliV2ViQ29yZS5hLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggMjdiM2VkZTUxMzI1N2E3YTlmNDZiOWFlMjQ5MjE5
NmE2Yzk2Mzk5MC4uMWY4ZTQ5OTYzMzVlZWEwMTE3Y2YxNDhjOTFhMGYxYjgzZGQ2OGU3MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC0zNCw3ICszNCw2IEBACiAj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJD
aHJvbWl1bS5oIgogCi0jaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKICNpbmNsdWRl
ICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJHZW9tZXRyeUJpbmRpbmcuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQzRC5oIgpAQCAtMTY1LDYgKzE2NCw1MyBAQCBwcml2YXRlOgogICAgIExh
eWVyUmVuZGVyZXJDaHJvbWl1bSogbV9sYXllclJlbmRlcmVyOwogfTsKIAorY2xhc3MgTGF5ZXJS
ZW5kZXJlckdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyIDogcHVibGlj
IEV4dGVuc2lvbnMzRENocm9taXVtOjpHcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNr
Q0hST01JVU0geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPExheWVyUmVuZGVyZXJH
cHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlcj4gY3JlYXRlKExheWVyUmVu
ZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFB0cihuZXcgTGF5ZXJSZW5kZXJlckdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tB
ZGFwdGVyKGxheWVyUmVuZGVyZXIpKTsKKyAgICB9CisgICAgdmlydHVhbCB+TGF5ZXJSZW5kZXJl
ckdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyKCkgeyB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgb25HcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZChFeHRlbnNpb25zM0RDaHJv
bWl1bTo6R3B1TWVtb3J5QWxsb2NhdGlvbkNIUk9NSVVNIGFsbG9jYXRpb24pCisgICAgeworICAg
ICAgICBtX2xheWVyUmVuZGVyZXItPm9uR3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWQoYWxsb2Nh
dGlvbik7CisgICAgfQorCitwcml2YXRlOgorICAgIGV4cGxpY2l0IExheWVyUmVuZGVyZXJHcHVN
ZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlcihMYXllclJlbmRlcmVyQ2hyb21p
dW0qIGxheWVyUmVuZGVyZXIpCisgICAgICAgIDogbV9sYXllclJlbmRlcmVyKGxheWVyUmVuZGVy
ZXIpCisgICAgeworICAgIH0KKworICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbV9sYXllclJl
bmRlcmVyOworfTsKKworY2xhc3MgU2NvcGVkRW5zdXJlRnJhbWVidWZmZXJBbGxvY2F0aW9uSW1w
bCA6IHB1YmxpYyBMYXllclJlbmRlcmVyQ2hyb21pdW06OlNjb3BlZEVuc3VyZUZyYW1lYnVmZmVy
QWxsb2NhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8TGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpTY29wZWRFbnN1cmVGcmFtZWJ1ZmZlckFsbG9jYXRpb24+IGNyZWF0ZShMYXll
clJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRQdHIobmV3IFNjb3BlZEVuc3VyZUZyYW1lYnVmZmVyQWxsb2NhdGlvbkltcGwobGF5ZXJS
ZW5kZXJlcikpOworICAgIH0KKworICAgIHZpcnR1YWwgflNjb3BlZEVuc3VyZUZyYW1lYnVmZmVy
QWxsb2NhdGlvbkltcGwoKQorICAgIHsKKyAgICAgICAgaWYgKGZyYW1lYnVmZmVyV2FzSW5pdGlh
bGx5RGlzY2FyZGVkKQorICAgICAgICAgICAgbV9sYXllclJlbmRlcmVyLT5kaXNjYXJkRnJhbWVi
dWZmZXIoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgU2NvcGVkRW5zdXJlRnJh
bWVidWZmZXJBbGxvY2F0aW9uSW1wbChMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVy
ZXIpCisgICAgICAgIDogbV9sYXllclJlbmRlcmVyKGxheWVyUmVuZGVyZXIpLCBmcmFtZWJ1ZmZl
cldhc0luaXRpYWxseURpc2NhcmRlZChsYXllclJlbmRlcmVyLT5tX2lzRnJhbWVidWZmZXJEaXNj
YXJkZWQpCisgICAgeworICAgICAgICBpZiAoZnJhbWVidWZmZXJXYXNJbml0aWFsbHlEaXNjYXJk
ZWQpCisgICAgICAgICAgICBtX2xheWVyUmVuZGVyZXItPmVuc3VyZUZyYW1lYnVmZmVyKCk7Cisg
ICAgfQorCisgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBtX2xheWVyUmVuZGVyZXI7CisgICAg
Ym9vbCBmcmFtZWJ1ZmZlcldhc0luaXRpYWxseURpc2NhcmRlZDsKK307CisKIAogUGFzc093blB0
cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKExh
eWVyUmVuZGVyZXJDaHJvbWl1bUNsaWVudCogY2xpZW50LCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiBjb250ZXh0KQogewpAQCAtMTg0LDYgKzIzMCw3IEBAIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKExheWVyUmVuZGVyZXJDaHJvbWl1bUNsaWVudCog
Y2xpZW50CiAgICAgLCBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlKDApCiAgICAgLCBtX3NoYXJlZEdl
b21ldHJ5UXVhZChGbG9hdFJlY3QoLTAuNWYsIC0wLjVmLCAxLjBmLCAxLjBmKSkKICAgICAsIG1f
aXNWaWV3cG9ydENoYW5nZWQoZmFsc2UpCisgICAgLCBtX2lzRnJhbWVidWZmZXJEaXNjYXJkZWQo
ZmFsc2UpCiB7CiB9CiAKQEAgLTI1OSw2ICszMDYsMTcgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmluaXRpYWxpemUoKQogICAgIGlmIChtX2NhcGFiaWxpdGllcy51c2luZ1RleHR1cmVT
dG9yYWdlRXh0ZW5zaW9uKQogICAgICAgICBleHRlbnNpb25zLT5lbnN1cmVFbmFibGVkKCJHTF9F
WFRfdGV4dHVyZV9zdG9yYWdlIik7CiAKKyAgICBpZiAoZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdM
X0NIUk9NSVVNX2dwdV9tZW1vcnlfbWFuYWdlciIpKSB7CisgICAgICAgIGV4dGVuc2lvbnMtPmVu
c3VyZUVuYWJsZWQoIkdMX0NIUk9NSVVNX2dwdV9tZW1vcnlfbWFuYWdlciIpOworICAgICAgICBF
eHRlbnNpb25zM0RDaHJvbWl1bSogZXh0ZW5zaW9uczNEQ2hyb21pdW0gPSBzdGF0aWNfY2FzdDxF
eHRlbnNpb25zM0RDaHJvbWl1bSo+KGV4dGVuc2lvbnMpOworICAgICAgICBleHRlbnNpb25zM0RD
aHJvbWl1bS0+c2V0R3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNKExh
eWVyUmVuZGVyZXJHcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlcjo6Y3Jl
YXRlKHRoaXMpKTsKKworICAgICAgICBpZiAoZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0VYVF9k
aXNjYXJkX2ZyYW1lYnVmZmVyIikpIHsKKyAgICAgICAgICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVu
YWJsZWQoIkdMX0VYVF9kaXNjYXJkX2ZyYW1lYnVmZmVyIik7CisgICAgICAgICAgICBtX2lzRnJh
bWVidWZmZXJEaXNjYXJkZWQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIEdMQyht
X2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6
Ok1BWF9URVhUVVJFX1NJWkUsICZtX2NhcGFiaWxpdGllcy5tYXhUZXh0dXJlU2l6ZSkpOwogICAg
IG1fY2FwYWJpbGl0aWVzLmJlc3RUZXh0dXJlRm9ybWF0ID0gUGxhdGZvcm1Db2xvcjo6YmVzdFRl
eHR1cmVGb3JtYXQobV9jb250ZXh0LmdldCgpKTsKIApAQCAtMjc3LDYgKzMzNSw3IEBAIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6fkxheWVyUmVuZGVyZXJDaHJvbWl1bSgpCiAgICAgQVNTRVJUKEND
UHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBFeHRlbnNpb25zM0RDaHJvbWl1bSogZXh0ZW5z
aW9uczNEQ2hyb21pdW0gPSBzdGF0aWNfY2FzdDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KG1fY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpKTsKICAgICBleHRlbnNpb25zM0RDaHJvbWl1bS0+c2V0U3dh
cEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQ0hST01JVU0obnVsbHB0cik7CisgICAgZXh0ZW5zaW9u
czNEQ2hyb21pdW0tPnNldEdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tDSFJPTUlV
TShudWxscHRyKTsKICAgICBtX2hlYWRzVXBEaXNwbGF5LmNsZWFyKCk7IC8vIEV4cGxpY2l0bHkg
ZGVzdHJveSB0aGUgSFVEIGJlZm9yZSB0aGUgVGV4dHVyZU1hbmFnZXIgZGllcy4KICAgICBjbGVh
bnVwU2hhcmVkT2JqZWN0cygpOwogfQpAQCAtMzExLDYgKzM3MCw5IEBAIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKICAgICBpZiAoIXZpc2libGUp
CiAgICAgICAgIHJlbGVhc2VSZW5kZXJTdXJmYWNlVGV4dHVyZXMoKTsKIAorICAgIC8vIEZJWE1F
OiBSZW1vdmUgdGhpcyBvbmNlIGZyYW1lYnVmZmVyIGlzIGF1dG9tYXRpY2FsbHkgcmVjcmVhdGVk
IG9uIGZpcnN0IHVzZQorICAgIGVuc3VyZUZyYW1lYnVmZmVyKCk7CisKICAgICAvLyBUT0RPOiBS
ZXBsYWNlIHNldFZpc2liaWxpdHlDSFJPTUlVTSB3aXRoIGFuIGV4dGVuc2lvbiB0byBleHBsaWNp
dGx5IG1hbmFnZSBmcm9udC9iYWNrYnVmZmVycwogICAgIC8vIGNyYnVnLmNvbS8xMTYwNDkKICAg
ICBpZiAobV9jYXBhYmlsaXRpZXMudXNpbmdTZXRWaXNpYmlsaXR5KSB7CkBAIC0zMTksNiArMzgx
LDE1IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJs
ZSkKICAgICB9CiB9CiAKK0xheWVyUmVuZGVyZXJDaHJvbWl1bTo6U2NvcGVkRW5zdXJlRnJhbWVi
dWZmZXJBbGxvY2F0aW9uOjp+U2NvcGVkRW5zdXJlRnJhbWVidWZmZXJBbGxvY2F0aW9uKCkKK3sK
K30KKworUGFzc093blB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW06OlNjb3BlZEVuc3VyZUZyYW1l
YnVmZmVyQWxsb2NhdGlvbj4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGVTY29wZWRFbnN1
cmVGcmFtZWJ1ZmZlckFsbG9jYXRpb24oKQoreworICAgIHJldHVybiBTY29wZWRFbnN1cmVGcmFt
ZWJ1ZmZlckFsbG9jYXRpb25JbXBsOjpjcmVhdGUodGhpcyk7Cit9CisKIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpyZWxlYXNlUmVuZGVyU3VyZmFjZVRleHR1cmVzKCkKIHsKICAgICBpZiAo
bV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXIpCkBAIC0xMDMxLDYgKzExMDIsOCBAQCB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZmluaXNoKCkKIAogdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OnN3YXBCdWZmZXJzKGNvbnN0IEludFJlY3QmIHN1YkJ1ZmZlcikKIHsKKyAgICBBU1NF
UlQoIW1faXNGcmFtZWJ1ZmZlckRpc2NhcmRlZCk7CisKICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpzd2FwQnVmZmVycyIsIHRoaXMsIDApOwogICAgIC8vIFdlJ3JlIGRv
bmUhIFRpbWUgdG8gc3dhcGJ1ZmZlcnMhCiAKQEAgLTEwNTQsNiArMTEyNyw0NiBAQCB2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6b25Td2FwQnVmZmVyc0NvbXBsZXRlKCkKICAgICBtX2NsaWVu
dC0+b25Td2FwQnVmZmVyc0NvbXBsZXRlKCk7CiB9CiAKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpvbkdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkKEV4dGVuc2lvbnMzRENocm9taXVtOjpH
cHVNZW1vcnlBbGxvY2F0aW9uQ0hST01JVU0gYWxsb2NhdGlvbikKK3sKKyAgICBpZiAoIWFsbG9j
YXRpb24uc3VnZ2VzdEhhdmVCYWNrYnVmZmVyKQorICAgICAgICBkaXNjYXJkRnJhbWVidWZmZXIo
KTsKK30KKwordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRpc2NhcmRGcmFtZWJ1ZmZlcigp
Cit7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKworICAgIGlmIChtX2lz
RnJhbWVidWZmZXJEaXNjYXJkZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEV4dGVuc2lvbnMz
RCogZXh0ZW5zaW9ucyA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpOworICAgIGlmIChleHRl
bnNpb25zLT5zdXBwb3J0cygiR0xfRVhUX2Rpc2NhcmRfZnJhbWVidWZmZXIiKSkgeworICAgICAg
ICBFeHRlbnNpb25zM0RDaHJvbWl1bSogZXh0ZW5zaW9uczNEQ2hyb21pdW0gPSBzdGF0aWNfY2Fz
dDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KGV4dGVuc2lvbnMpOworICAgICAgICAvLyBGSVhNRTog
VXBkYXRlIGF0dGFjaG1lbnRzIGFyZ3VtZW50IHRvIGFwcHJvcHJpYXRlIHZhbHVlcyBvbmNlIHRo
ZXkgYXJlIG5vIGxvbmdlciBpZ25vcmVkLgorICAgICAgICBleHRlbnNpb25zM0RDaHJvbWl1bS0+
ZGlzY2FyZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCAw
KTsKKyAgICAgICAgbV9pc0ZyYW1lYnVmZmVyRGlzY2FyZGVkID0gdHJ1ZTsKKworICAgICAgICAv
LyBEYW1hZ2UgdHJhY2tlciBuZWVkcyBhIGZ1bGwgcmVzZXQgZXZlcnkgdGltZSBmcmFtZWJ1ZmZl
ciBpcyBkaXNjYXJkZWQuCisgICAgICAgIG1fY2xpZW50LT5zZXRGdWxsUm9vdExheWVyRGFtYWdl
KCk7CisgICAgfQorfQorCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZW5zdXJlRnJhbWVi
dWZmZXIoKQoreworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisKKyAgICBp
ZiAoIW1faXNGcmFtZWJ1ZmZlckRpc2NhcmRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgRXh0
ZW5zaW9uczNEKiBleHRlbnNpb25zID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCk7CisgICAg
aWYgKGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9FWFRfZGlzY2FyZF9mcmFtZWJ1ZmZlciIpKSB7
CisgICAgICAgIEV4dGVuc2lvbnMzRENocm9taXVtKiBleHRlbnNpb25zM0RDaHJvbWl1bSA9IHN0
YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4oZXh0ZW5zaW9ucyk7CisgICAgICAgIGV4
dGVuc2lvbnMzRENocm9taXVtLT5lbnN1cmVGcmFtZWJ1ZmZlckNIUk9NSVVNKCk7CisgICAgICAg
IG1faXNGcmFtZWJ1ZmZlckRpc2NhcmRlZCA9IGZhbHNlOworICAgIH0KK30KKwogdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmdldEZyYW1lYnVmZmVyUGl4ZWxzKHZvaWQgKnBpeGVscywgY29u
c3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBBU1NFUlQocmVjdC5tYXhYKCkgPD0gdmlld3BvcnRX
aWR0aCgpICYmIHJlY3QubWF4WSgpIDw9IHZpZXdwb3J0SGVpZ2h0KCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCA1MmVhODdjMTMzYjE1N2YxYTVlMGE4ODIwYWRkZjYz
MTYxZjA4ZDYzLi42MzkzYTRmZTU4NTFlOWRlZDMyZjY0YzYxZjVkNTQ4OTQ1NzM4ODQxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAtMzUsNiArMzUsNyBAQAogI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAogI2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9t
aXVtLmgiCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKICNpbmNsdWRlICJGbG9h
dFF1YWQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5o
IgpAQCAtNjEsNiArNjIsNyBAQCBjbGFzcyBHZW9tZXRyeUJpbmRpbmc7CiBjbGFzcyBHcmFwaGlj
c0NvbnRleHQzRDsKIGNsYXNzIFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcjsKIGNsYXNzIExheWVy
UmVuZGVyZXJTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tBZGFwdGVyOworY2xhc3MgU2NvcGVk
RW5zdXJlRnJhbWVidWZmZXJBbGxvY2F0aW9uSW1wbDsKIAogY2xhc3MgTGF5ZXJSZW5kZXJlckNo
cm9taXVtQ2xpZW50IHsKIHB1YmxpYzoKQEAgLTcwLDYgKzcyLDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgY29uc3QgQ0NMYXllckltcGwqIHJvb3RMYXllcigpIGNvbnN0ID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgZGlkTG9zZUNvbnRleHQoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIG9uU3dhcEJ1
ZmZlcnNDb21wbGV0ZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RnVsbFJvb3RMYXllckRh
bWFnZSgpID0gMDsKIH07CiAKIC8vIENsYXNzIHRoYXQgaGFuZGxlcyBkcmF3aW5nIG9mIGNvbXBv
c2l0ZWQgcmVuZGVyIGxheWVycyB1c2luZyBHTC4KQEAgLTE1Myw2ICsxNTYsMTkgQEAgcHVibGlj
OgogCiAgICAgdm9pZCBzZXRWaXNpYmxlKGJvb2wpOwogCisgICAgLy8gVGhlIHB1cnBvc2Ugb2Yg
dGhpcyBoZWxwZXIgaXMgdHdvZm9sZDoKKyAgICAvLyAxLiBUbyBlbnN1cmUgdGhhdCBhIGZyYW1l
YnVmZmVyIGlzIGF2YWlsYWJsZSBmb3Igc2NvcGUgbGlmZXRpbWUsIGFuZAorICAgIC8vIDIuIFRv
IHJlc2V0IGZyYW1lYnVmZmVyIGFsbG9jYXRpb24gdG8gcHJldmlvdXMgc3RhdGUgb24gc2NvcGUg
ZXhpdC4KKyAgICAvLyBJZiB0aGUgZnJhbWVidWZmZXIgaXMgcmVjcmVhdGVkLCBpdHMgY29udGVu
dHMgYXJlIHVuZGVmaW5lZC4KKyAgICAvLyBGSVhNRTogUHJldmVudC9kZWxheSBkaXNjYXJkaW5n
IGZyYW1lYnVmZmVyIHZpYSBhbnkgbWVhbnMgd2hpbGUgYW55CisgICAgLy8gaW5zdGFuY2Ugb2Yg
dGhpcyBpcyBhbGl2ZS4gQXQgdGhlIG1vbWVudCwgdGhpcyBpc24ndCBhbiBpc3N1ZS4KKyAgICBj
bGFzcyBTY29wZWRFbnN1cmVGcmFtZWJ1ZmZlckFsbG9jYXRpb24geworICAgIHB1YmxpYzoKKyAg
ICAgICAgdmlydHVhbCB+U2NvcGVkRW5zdXJlRnJhbWVidWZmZXJBbGxvY2F0aW9uKCkgPSAwOwor
ICAgIH07CisgICAgZnJpZW5kIGNsYXNzIFNjb3BlZEVuc3VyZUZyYW1lYnVmZmVyQWxsb2NhdGlv
bkltcGw7CisgICAgUGFzc093blB0cjxTY29wZWRFbnN1cmVGcmFtZWJ1ZmZlckFsbG9jYXRpb24+
IGNyZWF0ZVNjb3BlZEVuc3VyZUZyYW1lYnVmZmVyQWxsb2NhdGlvbigpOworCiAgICAgR0MzRGVu
dW0gYmVzdFRleHR1cmVGb3JtYXQoKTsKIAogICAgIHN0YXRpYyB2b2lkIHRvR0xNYXRyaXgoZmxv
YXQqLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwpAQCAtMjA0LDYgKzIyMCwxMiBAQCBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMYXllclJlbmRlcmVyU3dhcEJ1ZmZlcnNDb21wbGV0
ZUNhbGxiYWNrQWRhcHRlcjsKICAgICB2b2lkIG9uU3dhcEJ1ZmZlcnNDb21wbGV0ZSgpOwogCisg
ICAgZnJpZW5kIGNsYXNzIExheWVyUmVuZGVyZXJHcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENh
bGxiYWNrQWRhcHRlcjsKKyAgICB2b2lkIG9uR3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWQoRXh0
ZW5zaW9uczNEQ2hyb21pdW06OkdwdU1lbW9yeUFsbG9jYXRpb25DSFJPTUlVTSk7CisKKyAgICB2
b2lkIGRpc2NhcmRGcmFtZWJ1ZmZlcigpOworICAgIHZvaWQgZW5zdXJlRnJhbWVidWZmZXIoKTsK
KwogICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bUNsaWVudCogbV9jbGllbnQ7CiAKICAgICBMYXll
clJlbmRlcmVyQ2FwYWJpbGl0aWVzIG1fY2FwYWJpbGl0aWVzOwpAQCAtMjU0LDYgKzI3Niw3IEBA
IHByaXZhdGU6CiAgICAgRmxvYXRRdWFkIG1fc2hhcmVkR2VvbWV0cnlRdWFkOwogCiAgICAgYm9v
bCBtX2lzVmlld3BvcnRDaGFuZ2VkOworICAgIGJvb2wgbV9pc0ZyYW1lYnVmZmVyRGlzY2FyZGVk
OwogfTsKIAogLy8gU2V0dGluZyBERUJVR19HTF9DQUxMUyB0byAxIHdpbGwgY2FsbCBnbEdldEVy
cm9yKCkgYWZ0ZXIgYWxtb3N0IGV2ZXJ5IEdMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuY3BwCmluZGV4IDBhYmZhZTE4OGRiOWZlMjNlN2UzMzM1NTY0ZjMwMzJlYjU5NTY5YWUu
LmViZTViNDlhNWI4N2IxZGYwNTEwYTVjOWE1MGFmZmNmYTYwMzNhZTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC00NDksMTEgKzQ0OSw2IEBAIHZvaWQgQ0NM
YXllclRyZWVIb3N0SW1wbDo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCiAKICAgICBtX2xheWVy
UmVuZGVyZXItPnNldFZpc2libGUodmlzaWJsZSk7CiAKLSAgICAvLyBSZXNldCB0aGUgZGFtYWdl
IHRyYWNrZXIgYmVjYXVzZSB0aGUgZnJvbnQvYmFjayBidWZmZXJzIG1heSBoYXZlIGJlZW4gZGFt
YWdlZCBieSB0aGUgR1BVCi0gICAgLy8gcHJvY2VzcyBvbiB2aXNpYmlsaXR5IGNoYW5nZS4KLSAg
ICBpZiAodmlzaWJsZSAmJiBtX2xheWVyUmVuZGVyZXItPmNhcGFiaWxpdGllcygpLnVzaW5nUGFy
dGlhbFN3YXApCi0gICAgICAgIHNldEZ1bGxSb290TGF5ZXJEYW1hZ2UoKTsKLQogICAgIGNvbnN0
IGJvb2wgc2hvdWxkVGlja0luQmFja2dyb3VuZCA9ICF2aXNpYmxlICYmIG1fbmVlZHNBbmltYXRl
TGF5ZXJzOwogICAgIG1fdGltZVNvdXJjZUNsaWVudEFkYXB0ZXItPnNldEFjdGl2ZShzaG91bGRU
aWNrSW5CYWNrZ3JvdW5kKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApp
bmRleCAzMTQ5NDc0YzRiNThhNWM1ZDBlZTcwYjYzYTYxMWFlMmU4MmMxMmM2Li5mMmVkN2Y1NTUw
MTRiOGFlMWIwOWE5ZWEyOGYyYTZkMjIyOTc5N2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbC5oCkBAIC05MCw2ICs5MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGNvbnN0
IENDTGF5ZXJJbXBsKiByb290TGF5ZXIoKSBjb25zdCAgeyByZXR1cm4gbV9yb290TGF5ZXJJbXBs
LmdldCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGRpZExvc2VDb250ZXh0KCk7CiAgICAgdmlydHVh
bCB2b2lkIG9uU3dhcEJ1ZmZlcnNDb21wbGV0ZSgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRGdWxs
Um9vdExheWVyRGFtYWdlKCk7CiAKICAgICAvLyBJbXBsZW1lbnRhdGlvbgogICAgIGJvb2wgY2Fu
RHJhdygpOwpAQCAtMTI2LDEwICsxMjcsNiBAQCBwdWJsaWM6CiAKICAgICBQYXNzT3duUHRyPEND
U2Nyb2xsQW5kU2NhbGVTZXQ+IHByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKIAotICAgIC8vIFdoZXJl
IHBvc3NpYmxlLCByZWRyYXdzIGFyZSBzY2lzc29yZWQgdG8gYSBkYW1hZ2UgcmVnaW9uIGNhbGN1
bGF0ZWQgZnJvbSBjaGFuZ2VzIHRvCi0gICAgLy8gbGF5ZXIgcHJvcGVydGllcy4gVGhpcyBmdW5j
dGlvbiBvdmVycmlkZXMgdGhlIGRhbWFnZSByZWdpb24gZm9yIHRoZSBuZXh0IGRyYXcgY3ljbGUu
Ci0gICAgdm9pZCBzZXRGdWxsUm9vdExheWVyRGFtYWdlKCk7Ci0KICAgICB2b2lkIHN0YXJ0UGFn
ZVNjYWxlQW5pbWF0aW9uKGNvbnN0IEludFNpemUmIHRyYWdldFBvc2l0aW9uLCBib29sIHVzZUFu
Y2hvciwgZmxvYXQgc2NhbGUsIGRvdWJsZSBkdXJhdGlvblNlYyk7CiAKICAgICBib29sIG5lZWRz
QW5pbWF0ZUxheWVycygpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNBbmltYXRlTGF5ZXJzOyB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1NpbmdsZVRocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCmluZGV4IGI2ZmM3NmI1MmU4YmRm
NGZlYTk3NTUwYTIxNmVmMTMyZmY3YjViZjUuLmYwNzY0MDUzZDdiOWZhYzU2MzI0YjA1M2JmMDU4
ZjU0MzVmZTRhOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCkBA
IC03Miw2ICs3Miw4IEBAIGJvb2wgQ0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tcG9zaXRlQW5kUmVh
ZGJhY2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0CiAgICAgVFJBQ0VfRVZFTlQo
IkNDU2luZ2xlVGhyZWFkUHJveHk6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrIiwgdGhpcywgMCk7CiAg
ICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKIAorICAgIE93blB0cjxMYXllclJl
bmRlcmVyQ2hyb21pdW06OlNjb3BlZEVuc3VyZUZyYW1lYnVmZmVyQWxsb2NhdGlvbj4gc2ZhKG1f
bGF5ZXJUcmVlSG9zdEltcGwtPmxheWVyUmVuZGVyZXIoKS0+Y3JlYXRlU2NvcGVkRW5zdXJlRnJh
bWVidWZmZXJBbGxvY2F0aW9uKCkpOworCiAgICAgaWYgKCFjb21taXRJZk5lZWRlZCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTg2LDYgKzg4LDkgQEAgYm9vbCBDQ1NpbmdsZVRocmVh
ZFByb3h5Ojpjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3Qm
IHJlY3QKICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5zd2FwQnVmZmVycygpOwogICAgIGRpZFN3
YXBGcmFtZSgpOwogCisgICAgLy8gRklYTUU6IFdpdGhvdXQgdGhpcywgZmFpbHMgdG8gY29tcGls
ZSBiZWNhdXNlIHNmYSB2YXJpYWJsZSBub3QgdXNlZC4KKyAgICAvLyAgICAgICAgU2hvdWxkIGRp
c2FibGUgdGhpcyB3YXJuaW5nLWFzLWVycm9yIGFuZCByZW1vdmUgdGhpcy4KKyAgICBzZmEucmVs
ZWFzZSgpOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3Bw
CmluZGV4IGQ1NDg4ZjJjNzFkOWNiNTBhMzE3NWIxYWQ3N2UwYTdkYzVkNGQ1MjAuLjZiMGJiZmE2
ZTY4Y2E4Njk0ZDMyZjJiMWMxMWZjM2RkMGQzNGNhNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJv
eHkuY3BwCkBAIC05MSw2ICs5MSw4IEBAIGJvb2wgQ0NUaHJlYWRQcm94eTo6Y29tcG9zaXRlQW5k
UmVhZGJhY2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0KQogICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKG1fbGF5ZXJUcmVlSG9zdCk7CiAKKyAgICBPd25Q
dHI8TGF5ZXJSZW5kZXJlckNocm9taXVtOjpTY29wZWRFbnN1cmVGcmFtZWJ1ZmZlckFsbG9jYXRp
b24+IHNmYShtX2xheWVyVHJlZUhvc3RJbXBsLT5sYXllclJlbmRlcmVyKCktPmNyZWF0ZVNjb3Bl
ZEVuc3VyZUZyYW1lYnVmZmVyQWxsb2NhdGlvbigpKTsKKwogICAgIGlmICghbV9sYXllclJlbmRl
cmVySW5pdGlhbGl6ZWQpIHsKICAgICAgICAgVFJBQ0VfRVZFTlQoImNvbXBvc2l0ZUFuZFJlYWRi
YWNrX0Vhcmx5T3V0X0xSX1VuaW5pdGlhbGl6ZWQiLCB0aGlzLCAwKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMTA5LDYgKzExMSwxMCBAQCBib29sIENDVGhyZWFkUHJveHk6OmNvbXBvc2l0
ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYgcmVjdCkKICAgICByZXF1
ZXN0LnBpeGVscyA9IHBpeGVsczsKICAgICBDQ1Byb3h5OjppbXBsVGhyZWFkKCktPnBvc3RUYXNr
KGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6cmVxdWVzdFJlYWRiYWNr
T25JbXBsVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZyZXF1ZXN0KSkpOwogICAgIHJl
cXVlc3QuY29tcGxldGlvbi53YWl0KCk7CisKKyAgICAvLyBGSVhNRTogV2l0aG91dCB0aGlzLCBm
YWlscyB0byBjb21waWxlIGJlY2F1c2Ugc2ZhIHZhcmlhYmxlIG5vdCB1c2VkLgorICAgIC8vICAg
ICAgICBTaG91bGQgZGlzYWJsZSB0aGlzIHdhcm5pbmctYXMtZXJyb3IgYW5kIHJlbW92ZSB0aGlz
LgorICAgIHNmYS5yZWxlYXNlKCk7CiAgICAgcmV0dXJuIHJlcXVlc3Quc3VjY2VzczsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133128</attachid>
            <date>2012-03-21 15:38:05 -0700</date>
            <delta_ts>2012-03-21 17:26:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81823-20120321183804.patch</filename>
            <type>text/plain</type>
            <size>15899</size>
            <attacher name="Michal Mocny">mmocny</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExNTc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjhmNDg1OWJlNDU4OTI5
ZDNmMmRkYmJkNDUxNDE5Y2QzNWViODhlMS4uZjlmMzA1NWIzZTQyNDI4YjAwMTE3YmIyZjI2ZTEy
MjhkMWZiNzA4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTAzLTIxICBNaWNo
YWwgTW9jbnkgIDxtbW9jbnlAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIExheWVy
UmVuZGVyZXJDaHJvbWl1bSBzaG91bGQgdXNlIEdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkIGNh
bGxiYWNrIHRvIGV4cGxpY2l0bHkgbWFuYWdlIGZyYW1lYnVmZmVyLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE4MjMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChMYXllclJlbmRlcmVyR3B1
TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJSZW5kZXJlckdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVy
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckdwdU1lbW9yeUFsbG9j
YXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyOjp+TGF5ZXJSZW5kZXJlckdwdU1lbW9yeUFsbG9j
YXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJHcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlcjo6b25HcHVNZW1v
cnlBbGxvY2F0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyR3B1
TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXI6OkxheWVyUmVuZGVyZXJHcHVN
ZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlcik6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJl
ckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5p
dGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06On5MYXll
clJlbmRlcmVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpzZXRWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6c3dhcEJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVt
OjpkaXNjYXJkRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNo
cm9taXVtOjplbnN1cmVGcmFtZWJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKExheWVyUmVuZGVyZXJDaHJvbWl1bUNsaWVudCk6CisgICAgICAgIChMYXllclJlbmRl
cmVyQ2hyb21pdW0pOgorICAgICAgICAoU2NvcGVkRW5zdXJlRnJhbWVidWZmZXJBbGxvY2F0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjb3BlZEVuc3VyZUZyYW1lYnVmZmVyQWxsb2NhdGlvbjo6
U2NvcGVkRW5zdXJlRnJhbWVidWZmZXJBbGxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
b3BlZEVuc3VyZUZyYW1lYnVmZmVyQWxsb2NhdGlvbjo6flNjb3BlZEVuc3VyZUZyYW1lYnVmZmVy
QWxsb2NhdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0Lmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2FwYWJpbGl0
aWVzOjpMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKToKKyAgICAgICAgKExheWVyUmVuZGVyZXJD
YXBhYmlsaXRpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0
SW1wbDo6c2V0VmlzaWJsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorICAgICAgICAoQ0NMYXllclRyZWVIb3N0SW1wbCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQ
cm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21wb3Np
dGVBbmRSZWFkYmFjayk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUaHJlYWRQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5Ojpjb21w
b3NpdGVBbmRSZWFkYmFjayk6CisKIDIwMTItMDMtMjEgIFplbm8gQWxiaXNzZXIgIDx6ZW5vQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgW1F0XVtNYWNdIHJhbmxpYiBzZWdmYXVsdHMgd2hlbiBjcmVh
dGluZyBzeW1ib2wgdGFibGVzIGZvciBsaWJXZWJDb3JlLmEuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcAppbmRleCAyN2IzZWRlNTEzMjU3YTdhOWY0NmI5YWUyNDkyMTk2YTZj
OTYzOTkwLi44YWI0ODcwZDZkN2Q4MjdjYWFmMzkyZDVmNTYxNDNiYjM0YWI1ZDA5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTE2NSw2ICsxNjUsMzEgQEAgcHJp
dmF0ZToKICAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0qIG1fbGF5ZXJSZW5kZXJlcjsKIH07CiAK
K2NsYXNzIExheWVyUmVuZGVyZXJHcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRh
cHRlciA6IHB1YmxpYyBFeHRlbnNpb25zM0RDaHJvbWl1bTo6R3B1TWVtb3J5QWxsb2NhdGlvbkNo
YW5nZWRDYWxsYmFja0NIUk9NSVVNIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxM
YXllclJlbmRlcmVyR3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXI+IGNy
ZWF0ZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IExheWVyUmVuZGVyZXJHcHVNZW1vcnlBbGxvY2F0aW9uQ2hh
bmdlZENhbGxiYWNrQWRhcHRlcihsYXllclJlbmRlcmVyKSk7CisgICAgfQorICAgIHZpcnR1YWwg
fkxheWVyUmVuZGVyZXJHcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlcigp
IHsgfQorCisgICAgdmlydHVhbCB2b2lkIG9uR3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWQoRXh0
ZW5zaW9uczNEQ2hyb21pdW06OkdwdU1lbW9yeUFsbG9jYXRpb25DSFJPTUlVTSBhbGxvY2F0aW9u
KQorICAgIHsKKyAgICAgICAgaWYgKCFhbGxvY2F0aW9uLnN1Z2dlc3RIYXZlQmFja2J1ZmZlcikK
KyAgICAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZGlzY2FyZEZyYW1lYnVmZmVyKCk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZW5zdXJlRnJhbWVidWZmZXIo
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgTGF5ZXJSZW5kZXJlckdwdU1lbW9y
eUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSog
bGF5ZXJSZW5kZXJlcikKKyAgICAgICAgOiBtX2xheWVyUmVuZGVyZXIobGF5ZXJSZW5kZXJlcikK
KyAgICB7CisgICAgfQorCisgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBtX2xheWVyUmVuZGVy
ZXI7Cit9OworCiAKIFBhc3NPd25QdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmNyZWF0ZShMYXllclJlbmRlcmVyQ2hyb21pdW1DbGllbnQqIGNsaWVudCwg
UGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCkKIHsKQEAgLTE4NCw2ICsyMDks
NyBAQCBMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1bShMYXllclJl
bmRlcmVyQ2hyb21pdW1DbGllbnQqIGNsaWVudAogICAgICwgbV9kZWZhdWx0UmVuZGVyU3VyZmFj
ZSgwKQogICAgICwgbV9zaGFyZWRHZW9tZXRyeVF1YWQoRmxvYXRSZWN0KC0wLjVmLCAtMC41Ziwg
MS4wZiwgMS4wZikpCiAgICAgLCBtX2lzVmlld3BvcnRDaGFuZ2VkKGZhbHNlKQorICAgICwgbV9p
c0ZyYW1lYnVmZmVyRGlzY2FyZGVkKGZhbHNlKQogewogfQogCkBAIC0yNTksNiArMjg1LDE3IEBA
IGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplKCkKICAgICBpZiAobV9jYXBh
YmlsaXRpZXMudXNpbmdUZXh0dXJlU3RvcmFnZUV4dGVuc2lvbikKICAgICAgICAgZXh0ZW5zaW9u
cy0+ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX3RleHR1cmVfc3RvcmFnZSIpOwogCisgICAgbV9jYXBh
YmlsaXRpZXMudXNpbmdHcHVNZW1vcnlNYW5hZ2VyID0gZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdM
X0NIUk9NSVVNX2dwdV9tZW1vcnlfbWFuYWdlciIpOworICAgIGlmIChtX2NhcGFiaWxpdGllcy51
c2luZ0dwdU1lbW9yeU1hbmFnZXIpIHsKKyAgICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxl
ZCgiR0xfQ0hST01JVU1fZ3B1X21lbW9yeV9tYW5hZ2VyIik7CisgICAgICAgIEV4dGVuc2lvbnMz
RENocm9taXVtKiBleHRlbnNpb25zM0RDaHJvbWl1bSA9IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMz
RENocm9taXVtKj4oZXh0ZW5zaW9ucyk7CisgICAgICAgIGV4dGVuc2lvbnMzRENocm9taXVtLT5z
ZXRHcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQ0hST01JVU0oTGF5ZXJSZW5kZXJl
ckdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyOjpjcmVhdGUodGhpcykp
OworICAgIH0KKworICAgIG1fY2FwYWJpbGl0aWVzLnVzaW5nRGlzY2FyZEZyYW1lYnVmZmVyID0g
ZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0VYVF9kaXNjYXJkX2ZyYW1lYnVmZmVyIik7CisgICAg
aWYgKG1fY2FwYWJpbGl0aWVzLnVzaW5nRGlzY2FyZEZyYW1lYnVmZmVyKQorICAgICAgICBleHRl
bnNpb25zLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfZGlzY2FyZF9mcmFtZWJ1ZmZlciIpOworCiAg
ICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0Nv
bnRleHQzRDo6TUFYX1RFWFRVUkVfU0laRSwgJm1fY2FwYWJpbGl0aWVzLm1heFRleHR1cmVTaXpl
KSk7CiAgICAgbV9jYXBhYmlsaXRpZXMuYmVzdFRleHR1cmVGb3JtYXQgPSBQbGF0Zm9ybUNvbG9y
OjpiZXN0VGV4dHVyZUZvcm1hdChtX2NvbnRleHQuZ2V0KCkpOwogCkBAIC0yNzcsNiArMzE0LDcg
QEAgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp+TGF5ZXJSZW5kZXJlckNocm9taXVtKCkKICAgICBB
U1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogICAgIEV4dGVuc2lvbnMzRENocm9taXVt
KiBleHRlbnNpb25zM0RDaHJvbWl1bSA9IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVt
Kj4obV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkpOwogICAgIGV4dGVuc2lvbnMzRENocm9taXVt
LT5zZXRTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tDSFJPTUlVTShudWxscHRyKTsKKyAgICBl
eHRlbnNpb25zM0RDaHJvbWl1bS0+c2V0R3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFj
a0NIUk9NSVVNKG51bGxwdHIpOwogICAgIG1faGVhZHNVcERpc3BsYXkuY2xlYXIoKTsgLy8gRXhw
bGljaXRseSBkZXN0cm95IHRoZSBIVUQgYmVmb3JlIHRoZSBUZXh0dXJlTWFuYWdlciBkaWVzLgog
ICAgIGNsZWFudXBTaGFyZWRPYmplY3RzKCk7CiB9CkBAIC0zMTEsNiArMzQ5LDkgQEAgdm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQogICAgIGlmICgh
dmlzaWJsZSkKICAgICAgICAgcmVsZWFzZVJlbmRlclN1cmZhY2VUZXh0dXJlcygpOwogCisgICAg
Ly8gRklYTUU6IFJlbW92ZSB0aGlzIG9uY2UgZnJhbWVidWZmZXIgaXMgYXV0b21hdGljYWxseSBy
ZWNyZWF0ZWQgb24gZmlyc3QgdXNlCisgICAgZW5zdXJlRnJhbWVidWZmZXIoKTsKKwogICAgIC8v
IFRPRE86IFJlcGxhY2Ugc2V0VmlzaWJpbGl0eUNIUk9NSVVNIHdpdGggYW4gZXh0ZW5zaW9uIHRv
IGV4cGxpY2l0bHkgbWFuYWdlIGZyb250L2JhY2tidWZmZXJzCiAgICAgLy8gY3JidWcuY29tLzEx
NjA0OQogICAgIGlmIChtX2NhcGFiaWxpdGllcy51c2luZ1NldFZpc2liaWxpdHkpIHsKQEAgLTEw
MzEsNiArMTA3MiwxMyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZmluaXNoKCkKIAog
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnN3YXBCdWZmZXJzKGNvbnN0IEludFJlY3QmIHN1
YkJ1ZmZlcikKIHsKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgb25jZSBncHUgcHJvY2VzcyBz
dXBwb3J0cyBpZ25vcmluZyBzd2FwIGJ1ZmZlcnMgY29tbWFuZCB3aGlsZSBmcmFtZWJ1ZmZlciBp
cyBkaXNjYXJkZWQuCisgICAgLy8gICAgICAgIEFsdGVybmF0aXZlbHkgKHByZWZlcmFibHk/KSwg
cHJvdGVjdCBhbGwgY2MgY29kZSBzbyBhcyBub3QgdG8gYXR0ZW1wdCBhIHN3YXAgYWZ0ZXIgYSBm
cmFtZWJ1ZmZlciBkaXNjYXJkLgorICAgIGlmIChtX2lzRnJhbWVidWZmZXJEaXNjYXJkZWQpIHsK
KyAgICAgIG1fY2xpZW50LT5zZXRGdWxsUm9vdExheWVyRGFtYWdlKCk7CisgICAgICByZXR1cm47
CisgICAgfQorCiAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6c3dhcEJ1
ZmZlcnMiLCB0aGlzLCAwKTsKICAgICAvLyBXZSdyZSBkb25lISBUaW1lIHRvIHN3YXBidWZmZXJz
IQogCkBAIC0xMDU0LDYgKzExMDIsMzYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06Om9u
U3dhcEJ1ZmZlcnNDb21wbGV0ZSgpCiAgICAgbV9jbGllbnQtPm9uU3dhcEJ1ZmZlcnNDb21wbGV0
ZSgpOwogfQogCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZGlzY2FyZEZyYW1lYnVmZmVy
KCkKK3sKKyAgICBpZiAobV9pc0ZyYW1lYnVmZmVyRGlzY2FyZGVkKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAobV9jYXBhYmlsaXRpZXMudXNpbmdEaXNjYXJkRnJhbWVidWZmZXIpIHsKKyAg
ICAgICAgRXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCk7CisgICAgICAgIEV4dGVuc2lvbnMzRENocm9taXVtKiBleHRlbnNpb25zM0RDaHJvbWl1bSA9
IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4oZXh0ZW5zaW9ucyk7CisgICAgICAg
IC8vIEZJWE1FOiBVcGRhdGUgYXR0YWNobWVudHMgYXJndW1lbnQgdG8gYXBwcm9wcmlhdGUgdmFs
dWVzIG9uY2UgdGhleSBhcmUgbm8gbG9uZ2VyIGlnbm9yZWQuCisgICAgICAgIGV4dGVuc2lvbnMz
RENocm9taXVtLT5kaXNjYXJkRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIDAsIDApOworICAgICAgICBtX2lzRnJhbWVidWZmZXJEaXNjYXJkZWQgPSB0cnVlOwor
CisgICAgICAgIC8vIERhbWFnZSB0cmFja2VyIG5lZWRzIGEgZnVsbCByZXNldCBldmVyeSB0aW1l
IGZyYW1lYnVmZmVyIGlzIGRpc2NhcmRlZC4KKyAgICAgICAgbV9jbGllbnQtPnNldEZ1bGxSb290
TGF5ZXJEYW1hZ2UoKTsKKyAgICB9Cit9CisKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpl
bnN1cmVGcmFtZWJ1ZmZlcigpCit7CisgICAgaWYgKCFtX2lzRnJhbWVidWZmZXJEaXNjYXJkZWQp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2NhcGFiaWxpdGllcy51c2luZ0Rpc2NhcmRG
cmFtZWJ1ZmZlcikgeworICAgICAgICBFeHRlbnNpb25zM0QqIGV4dGVuc2lvbnMgPSBtX2NvbnRl
eHQtPmdldEV4dGVuc2lvbnMoKTsKKyAgICAgICAgRXh0ZW5zaW9uczNEQ2hyb21pdW0qIGV4dGVu
c2lvbnMzRENocm9taXVtID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21pdW0qPihleHRl
bnNpb25zKTsKKyAgICAgICAgZXh0ZW5zaW9uczNEQ2hyb21pdW0tPmVuc3VyZUZyYW1lYnVmZmVy
Q0hST01JVU0oKTsKKyAgICAgICAgbV9pc0ZyYW1lYnVmZmVyRGlzY2FyZGVkID0gZmFsc2U7Cisg
ICAgfQorfQorCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Z2V0RnJhbWVidWZmZXJQaXhl
bHModm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIEFTU0VSVChyZWN0
Lm1heFgoKSA8PSB2aWV3cG9ydFdpZHRoKCkgJiYgcmVjdC5tYXhZKCkgPD0gdmlld3BvcnRIZWln
aHQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IDUyZWE4N2MxMzNi
MTU3ZjFhNWUwYTg4MjBhZGRmNjMxNjFmMDhkNjMuLmFmODE5ZDI1OTE3NWE3NjE2Yjk5NjcyZDJm
ZTkwNTc5NzY3YTFjZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC02
MSw2ICs2MSw3IEBAIGNsYXNzIEdlb21ldHJ5QmluZGluZzsKIGNsYXNzIEdyYXBoaWNzQ29udGV4
dDNEOwogY2xhc3MgVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yOwogY2xhc3MgTGF5ZXJSZW5kZXJl
clN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0FkYXB0ZXI7CitjbGFzcyBTY29wZWRFbnN1cmVG
cmFtZWJ1ZmZlckFsbG9jYXRpb247CiAKIGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bUNsaWVu
dCB7CiBwdWJsaWM6CkBAIC03MCw2ICs3MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGNvbnN0
IENDTGF5ZXJJbXBsKiByb290TGF5ZXIoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRp
ZExvc2VDb250ZXh0KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBvblN3YXBCdWZmZXJzQ29tcGxl
dGUoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEZ1bGxSb290TGF5ZXJEYW1hZ2UoKSA9IDA7
CiB9OwogCiAvLyBDbGFzcyB0aGF0IGhhbmRsZXMgZHJhd2luZyBvZiBjb21wb3NpdGVkIHJlbmRl
ciBsYXllcnMgdXNpbmcgR0wuCkBAIC0yMDQsNiArMjA2LDExIEBAIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIExheWVyUmVuZGVyZXJTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tBZGFwdGVy
OwogICAgIHZvaWQgb25Td2FwQnVmZmVyc0NvbXBsZXRlKCk7CiAKKyAgICBmcmllbmQgY2xhc3Mg
TGF5ZXJSZW5kZXJlckdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyOwor
ICAgIGZyaWVuZCBjbGFzcyBTY29wZWRFbnN1cmVGcmFtZWJ1ZmZlckFsbG9jYXRpb247CisgICAg
dm9pZCBkaXNjYXJkRnJhbWVidWZmZXIoKTsKKyAgICB2b2lkIGVuc3VyZUZyYW1lYnVmZmVyKCk7
CisKICAgICBMYXllclJlbmRlcmVyQ2hyb21pdW1DbGllbnQqIG1fY2xpZW50OwogCiAgICAgTGF5
ZXJSZW5kZXJlckNhcGFiaWxpdGllcyBtX2NhcGFiaWxpdGllczsKQEAgLTI1NCw4ICsyNjEsMzcg
QEAgcHJpdmF0ZToKICAgICBGbG9hdFF1YWQgbV9zaGFyZWRHZW9tZXRyeVF1YWQ7CiAKICAgICBi
b29sIG1faXNWaWV3cG9ydENoYW5nZWQ7CisgICAgYm9vbCBtX2lzRnJhbWVidWZmZXJEaXNjYXJk
ZWQ7CiB9OwogCisvLyBUaGUgcHVycG9zZSBvZiB0aGlzIGhlbHBlciBpcyB0d29mb2xkOgorLy8g
MS4gVG8gZW5zdXJlIHRoYXQgYSBmcmFtZWJ1ZmZlciBpcyBhdmFpbGFibGUgZm9yIHNjb3BlIGxp
ZmV0aW1lLCBhbmQKKy8vIDIuIFRvIHJlc2V0IGZyYW1lYnVmZmVyIGFsbG9jYXRpb24gdG8gcHJl
dmlvdXMgc3RhdGUgb24gc2NvcGUgZXhpdC4KKy8vIElmIHRoZSBmcmFtZWJ1ZmZlciBpcyByZWNy
ZWF0ZWQsIGl0cyBjb250ZW50cyBhcmUgdW5kZWZpbmVkLgorLy8gRklYTUU6IFByZXZlbnQvZGVs
YXkgZGlzY2FyZGluZyBmcmFtZWJ1ZmZlciB2aWEgYW55IG1lYW5zIHdoaWxlIGFueQorLy8gaW5z
dGFuY2Ugb2YgdGhpcyBpcyBhbGl2ZS4gQXQgdGhlIG1vbWVudCwgdGhpcyBpc24ndCBhbiBpc3N1
ZS4KK2NsYXNzIFNjb3BlZEVuc3VyZUZyYW1lYnVmZmVyQWxsb2NhdGlvbiB7CitwdWJsaWM6Cisg
ICAgZXhwbGljaXQgU2NvcGVkRW5zdXJlRnJhbWVidWZmZXJBbGxvY2F0aW9uKExheWVyUmVuZGVy
ZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKKyAgICAgICAgOiBtX2xheWVyUmVuZGVyZXIobGF5
ZXJSZW5kZXJlcikKKyAgICAgICAgLCBtX2ZyYW1lYnVmZmVyV2FzSW5pdGlhbGx5RGlzY2FyZGVk
KGxheWVyUmVuZGVyZXItPm1faXNGcmFtZWJ1ZmZlckRpc2NhcmRlZCkKKyAgICB7CisgICAgICAg
IGlmIChtX2ZyYW1lYnVmZmVyV2FzSW5pdGlhbGx5RGlzY2FyZGVkKQorICAgICAgICAgICAgbV9s
YXllclJlbmRlcmVyLT5lbnN1cmVGcmFtZWJ1ZmZlcigpOworICAgIH0KKworICAgIH5TY29wZWRF
bnN1cmVGcmFtZWJ1ZmZlckFsbG9jYXRpb24oKQorICAgIHsKKyAgICAgICAgaWYgKG1fZnJhbWVi
dWZmZXJXYXNJbml0aWFsbHlEaXNjYXJkZWQpCisgICAgICAgICAgICBtX2xheWVyUmVuZGVyZXIt
PmRpc2NhcmRGcmFtZWJ1ZmZlcigpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBMYXllclJlbmRl
cmVyQ2hyb21pdW0qIG1fbGF5ZXJSZW5kZXJlcjsKKyAgICBib29sIG1fZnJhbWVidWZmZXJXYXNJ
bml0aWFsbHlEaXNjYXJkZWQ7Cit9OworCisKIC8vIFNldHRpbmcgREVCVUdfR0xfQ0FMTFMgdG8g
MSB3aWxsIGNhbGwgZ2xHZXRFcnJvcigpIGFmdGVyIGFsbW9zdCBldmVyeSBHTAogLy8gY2FsbCBt
YWRlIGJ5IHRoZSBjb21wb3NpdG9yLiBVc2VmdWwgZm9yIGRlYnVnZ2luZyByZW5kZXJpbmcgaXNz
dWVzIGJ1dAogLy8gd2lsbCBzaWduaWZpY2FudGx5IGRlZ3JhZGUgcGVyZm9ybWFuY2UuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5oCmluZGV4IDlmNzgwYTdhZTc3YWExZThlMTUxMzdhMWRiOGY5
ZjBmOTBiZjhjYWIuLjczOTBlYzM0YTllN2I4ZDAzMDZiM2Q2Njk0NjExZTAwYTRkNzI3NjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCkBAIC0xMDIsNiArMTAyLDggQEAgc3RydWN0IExh
eWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMgewogICAgICAgICAsIHVzaW5nU3dhcENvbXBsZXRlQ2Fs
bGJhY2soZmFsc2UpCiAgICAgICAgICwgdXNpbmdUZXh0dXJlVXNhZ2VIaW50KGZhbHNlKQogICAg
ICAgICAsIHVzaW5nVGV4dHVyZVN0b3JhZ2VFeHRlbnNpb24oZmFsc2UpCisgICAgICAgICwgdXNp
bmdHcHVNZW1vcnlNYW5hZ2VyKGZhbHNlKQorICAgICAgICAsIHVzaW5nRGlzY2FyZEZyYW1lYnVm
ZmVyKGZhbHNlKQogICAgICAgICAsIG1heFRleHR1cmVTaXplKDApIHsgfQogCiAgICAgR0MzRGVu
dW0gYmVzdFRleHR1cmVGb3JtYXQ7CkBAIC0xMTMsNiArMTE1LDggQEAgc3RydWN0IExheWVyUmVu
ZGVyZXJDYXBhYmlsaXRpZXMgewogICAgIGJvb2wgdXNpbmdTd2FwQ29tcGxldGVDYWxsYmFjazsK
ICAgICBib29sIHVzaW5nVGV4dHVyZVVzYWdlSGludDsKICAgICBib29sIHVzaW5nVGV4dHVyZVN0
b3JhZ2VFeHRlbnNpb247CisgICAgYm9vbCB1c2luZ0dwdU1lbW9yeU1hbmFnZXI7CisgICAgYm9v
bCB1c2luZ0Rpc2NhcmRGcmFtZWJ1ZmZlcjsKICAgICBpbnQgbWF4VGV4dHVyZVNpemU7CiB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IDBhYmZhZTE4OGRi
OWZlMjNlN2UzMzM1NTY0ZjMwMzJlYjU5NTY5YWUuLmViZTViNDlhNWI4N2IxZGYwNTEwYTVjOWE1
MGFmZmNmYTYwMzNhZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3Bw
CkBAIC00NDksMTEgKzQ0OSw2IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0VmlzaWJs
ZShib29sIHZpc2libGUpCiAKICAgICBtX2xheWVyUmVuZGVyZXItPnNldFZpc2libGUodmlzaWJs
ZSk7CiAKLSAgICAvLyBSZXNldCB0aGUgZGFtYWdlIHRyYWNrZXIgYmVjYXVzZSB0aGUgZnJvbnQv
YmFjayBidWZmZXJzIG1heSBoYXZlIGJlZW4gZGFtYWdlZCBieSB0aGUgR1BVCi0gICAgLy8gcHJv
Y2VzcyBvbiB2aXNpYmlsaXR5IGNoYW5nZS4KLSAgICBpZiAodmlzaWJsZSAmJiBtX2xheWVyUmVu
ZGVyZXItPmNhcGFiaWxpdGllcygpLnVzaW5nUGFydGlhbFN3YXApCi0gICAgICAgIHNldEZ1bGxS
b290TGF5ZXJEYW1hZ2UoKTsKLQogICAgIGNvbnN0IGJvb2wgc2hvdWxkVGlja0luQmFja2dyb3Vu
ZCA9ICF2aXNpYmxlICYmIG1fbmVlZHNBbmltYXRlTGF5ZXJzOwogICAgIG1fdGltZVNvdXJjZUNs
aWVudEFkYXB0ZXItPnNldEFjdGl2ZShzaG91bGRUaWNrSW5CYWNrZ3JvdW5kKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAppbmRleCAzMTQ5NDc0YzRiNThhNWM1ZDBlZTcw
YjYzYTYxMWFlMmU4MmMxMmM2Li5mMmVkN2Y1NTUwMTRiOGFlMWIwOWE5ZWEyOGYyYTZkMjIyOTc5
N2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCkBAIC05MCw2ICs5MCw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGNvbnN0IENDTGF5ZXJJbXBsKiByb290TGF5ZXIoKSBj
b25zdCAgeyByZXR1cm4gbV9yb290TGF5ZXJJbXBsLmdldCgpOyB9CiAgICAgdmlydHVhbCB2b2lk
IGRpZExvc2VDb250ZXh0KCk7CiAgICAgdmlydHVhbCB2b2lkIG9uU3dhcEJ1ZmZlcnNDb21wbGV0
ZSgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRGdWxsUm9vdExheWVyRGFtYWdlKCk7CiAKICAgICAv
LyBJbXBsZW1lbnRhdGlvbgogICAgIGJvb2wgY2FuRHJhdygpOwpAQCAtMTI2LDEwICsxMjcsNiBA
QCBwdWJsaWM6CiAKICAgICBQYXNzT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHByb2Nlc3NT
Y3JvbGxEZWx0YXMoKTsKIAotICAgIC8vIFdoZXJlIHBvc3NpYmxlLCByZWRyYXdzIGFyZSBzY2lz
c29yZWQgdG8gYSBkYW1hZ2UgcmVnaW9uIGNhbGN1bGF0ZWQgZnJvbSBjaGFuZ2VzIHRvCi0gICAg
Ly8gbGF5ZXIgcHJvcGVydGllcy4gVGhpcyBmdW5jdGlvbiBvdmVycmlkZXMgdGhlIGRhbWFnZSBy
ZWdpb24gZm9yIHRoZSBuZXh0IGRyYXcgY3ljbGUuCi0gICAgdm9pZCBzZXRGdWxsUm9vdExheWVy
RGFtYWdlKCk7Ci0KICAgICB2b2lkIHN0YXJ0UGFnZVNjYWxlQW5pbWF0aW9uKGNvbnN0IEludFNp
emUmIHRyYWdldFBvc2l0aW9uLCBib29sIHVzZUFuY2hvciwgZmxvYXQgc2NhbGUsIGRvdWJsZSBk
dXJhdGlvblNlYyk7CiAKICAgICBib29sIG5lZWRzQW5pbWF0ZUxheWVycygpIGNvbnN0IHsgcmV0
dXJuIG1fbmVlZHNBbmltYXRlTGF5ZXJzOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFk
UHJveHkuY3BwCmluZGV4IGI2ZmM3NmI1MmU4YmRmNGZlYTk3NTUwYTIxNmVmMTMyZmY3YjViZjUu
LmUxM2RiMmFiYjNhN2JkZjQyMTg1MWRlNDE2ZTdlZjljNGIyYmRiOWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFk
UHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCkBAIC03Miw2ICs3Miw4IEBAIGJvb2wgQ0NTaW5n
bGVUaHJlYWRQcm94eTo6Y29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJ
bnRSZWN0JiByZWN0CiAgICAgVFJBQ0VfRVZFTlQoIkNDU2luZ2xlVGhyZWFkUHJveHk6OmNvbXBv
c2l0ZUFuZFJlYWRiYWNrIiwgdGhpcywgMCk7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRo
cmVhZCgpKTsKIAorICAgIFNjb3BlZEVuc3VyZUZyYW1lYnVmZmVyQWxsb2NhdGlvbiBzZWZhKG1f
bGF5ZXJUcmVlSG9zdEltcGwtPmxheWVyUmVuZGVyZXIoKSk7CisKICAgICBpZiAoIWNvbW1pdElm
TmVlZGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5
LmNwcAppbmRleCBkNTQ4OGYyYzcxZDljYjUwYTMxNzViMWFkNzdlMGE3ZGM1ZDRkNTIwLi5kOTZh
ZmI5MGE2ZGZiMzFjNjMzYWI3OWI2NDJiZjY5MGIwMTM1ZDEzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVh
ZFByb3h5LmNwcApAQCAtOTEsNiArOTEsOCBAQCBib29sIENDVGhyZWFkUHJveHk6OmNvbXBvc2l0
ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYgcmVjdCkKICAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVChtX2xheWVyVHJlZUhvc3QpOwogCisgICAg
U2NvcGVkRW5zdXJlRnJhbWVidWZmZXJBbGxvY2F0aW9uIHNlZmEobV9sYXllclRyZWVIb3N0SW1w
bC0+bGF5ZXJSZW5kZXJlcigpKTsKKwogICAgIGlmICghbV9sYXllclJlbmRlcmVySW5pdGlhbGl6
ZWQpIHsKICAgICAgICAgVFJBQ0VfRVZFTlQoImNvbXBvc2l0ZUFuZFJlYWRiYWNrX0Vhcmx5T3V0
X0xSX1VuaW5pdGlhbGl6ZWQiLCB0aGlzLCAwKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133152</attachid>
            <date>2012-03-21 17:26:41 -0700</date>
            <delta_ts>2012-03-22 09:21:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81823-20120321202639.patch</filename>
            <type>text/plain</type>
            <size>22828</size>
            <attacher name="Michal Mocny">mmocny</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExNTc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjhmNDg1OWJlNDU4OTI5
ZDNmMmRkYmJkNDUxNDE5Y2QzNWViODhlMS4uZjlmMzA1NWIzZTQyNDI4YjAwMTE3YmIyZjI2ZTEy
MjhkMWZiNzA4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTAzLTIxICBNaWNo
YWwgTW9jbnkgIDxtbW9jbnlAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIExheWVy
UmVuZGVyZXJDaHJvbWl1bSBzaG91bGQgdXNlIEdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkIGNh
bGxiYWNrIHRvIGV4cGxpY2l0bHkgbWFuYWdlIGZyYW1lYnVmZmVyLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE4MjMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChMYXllclJlbmRlcmVyR3B1
TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJSZW5kZXJlckdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVy
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckdwdU1lbW9yeUFsbG9j
YXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyOjp+TGF5ZXJSZW5kZXJlckdwdU1lbW9yeUFsbG9j
YXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJHcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlcjo6b25HcHVNZW1v
cnlBbGxvY2F0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyR3B1
TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXI6OkxheWVyUmVuZGVyZXJHcHVN
ZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlcik6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJl
ckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5p
dGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06On5MYXll
clJlbmRlcmVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpzZXRWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6c3dhcEJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVt
OjpkaXNjYXJkRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNo
cm9taXVtOjplbnN1cmVGcmFtZWJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKExheWVyUmVuZGVyZXJDaHJvbWl1bUNsaWVudCk6CisgICAgICAgIChMYXllclJlbmRl
cmVyQ2hyb21pdW0pOgorICAgICAgICAoU2NvcGVkRW5zdXJlRnJhbWVidWZmZXJBbGxvY2F0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjb3BlZEVuc3VyZUZyYW1lYnVmZmVyQWxsb2NhdGlvbjo6
U2NvcGVkRW5zdXJlRnJhbWVidWZmZXJBbGxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
b3BlZEVuc3VyZUZyYW1lYnVmZmVyQWxsb2NhdGlvbjo6flNjb3BlZEVuc3VyZUZyYW1lYnVmZmVy
QWxsb2NhdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0Lmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2FwYWJpbGl0
aWVzOjpMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKToKKyAgICAgICAgKExheWVyUmVuZGVyZXJD
YXBhYmlsaXRpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0
SW1wbDo6c2V0VmlzaWJsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorICAgICAgICAoQ0NMYXllclRyZWVIb3N0SW1wbCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQ
cm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21wb3Np
dGVBbmRSZWFkYmFjayk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUaHJlYWRQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5Ojpjb21w
b3NpdGVBbmRSZWFkYmFjayk6CisKIDIwMTItMDMtMjEgIFplbm8gQWxiaXNzZXIgIDx6ZW5vQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgW1F0XVtNYWNdIHJhbmxpYiBzZWdmYXVsdHMgd2hlbiBjcmVh
dGluZyBzeW1ib2wgdGFibGVzIGZvciBsaWJXZWJDb3JlLmEuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCmluZGV4IDUxNWM0OGE3MTNkZDA0NGFjYjRhYzUwZjYwN2Y0YjA3YTY4ODExMTEuLjQwZTgz
OTY3NTdkZmFiNDk0ZDQ4OTA0ZTJkNTNlOGViODE3NGUzMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTItMDMtMjEgIE1pY2hhbCBNb2NueSAgPG1tb2Nu
eUBnb29nbGUuY29tPgorCisgICAgICAgIFtjaHJvbWl1bV0gTGF5ZXJSZW5kZXJlckNocm9taXVt
IHNob3VsZCB1c2UgR3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWQgY2FsbGJhY2sgdG8gZXhwbGlj
aXRseSBtYW5hZ2UgZnJhbWVidWZmZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04MTgyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogdGVzdHMvTGF5ZXJSZW5k
ZXJlckNocm9taXVtVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoRnJhbWVDb3VudGluZ0NvbnRl
eHQpOgorICAgICAgICAoRnJhbWVDb3VudGluZ0NvbnRleHQ6OkZyYW1lQ291bnRpbmdDb250ZXh0
KToKKyAgICAgICAgKEZyYW1lQ291bnRpbmdDb250ZXh0OjpwcmVwYXJlVGV4dHVyZSk6CisgICAg
ICAgIChGcmFtZUNvdW50aW5nQ29udGV4dDo6ZnJhbWVDb3VudCk6CisgICAgICAgIChGYWtlTGF5
ZXJSZW5kZXJlckNocm9taXVtQ2xpZW50KToKKyAgICAgICAgKEZha2VMYXllclJlbmRlcmVyQ2hy
b21pdW1DbGllbnQ6OnZpZXdwb3J0U2l6ZSk6CisgICAgICAgIChGYWtlTGF5ZXJSZW5kZXJlckNo
cm9taXVtQ2xpZW50OjpzZXR0aW5ncyk6CisgICAgICAgIChGYWtlTGF5ZXJSZW5kZXJlckNocm9t
aXVtQ2xpZW50Ojpyb290TGF5ZXIpOgorICAgICAgICAoRmFrZUxheWVyUmVuZGVyZXJDaHJvbWl1
bUNsaWVudDo6ZGlkTG9zZUNvbnRleHQpOgorICAgICAgICAoRmFrZUxheWVyUmVuZGVyZXJDaHJv
bWl1bUNsaWVudDo6b25Td2FwQnVmZmVyc0NvbXBsZXRlKToKKyAgICAgICAgKEZha2VMYXllclJl
bmRlcmVyQ2hyb21pdW1DbGllbnQ6OnNldEZ1bGxSb290TGF5ZXJEYW1hZ2UpOgorICAgICAgICAo
TGF5ZXJSZW5kZXJlckNocm9taXVtVGVzdCk6CisgICAgICAgIChMYXllclJlbmRlcmVyQ2hyb21p
dW1UZXN0OjpMYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0KToKKyAgICAgICAgKFRFU1QpOgorCiAy
MDEyLTAzLTIxICBUb21teSBXaWRlbmZseWNodCAgPHRvbW15d0Bnb29nbGUuY29tPgogCiAgICAg
ICAgIFtjaHJvbWl1bV0gTWVkaWFTdHJlYW0gQVBJIChKU0VQKTogSW50cm9kdWNpbmcgV2ViU2Vz
c2lvbkRlc2NyaXB0aW9uIGFuZCBXZWJJY2VDYW5kaWRhdGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uY3BwCmluZGV4IDI3YjNlZGU1MTMyNTdhN2E5ZjQ2YjlhZTI0OTIxOTZhNmM5
NjM5OTAuLjhhYjQ4NzBkNmQ3ZDgyN2NhYWYzOTJkNWY1NjE0M2JiMzRhYjVkMDkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtMTY1LDYgKzE2NSwzMSBAQCBwcml2
YXRlOgogICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbV9sYXllclJlbmRlcmVyOwogfTsKIAor
Y2xhc3MgTGF5ZXJSZW5kZXJlckdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFw
dGVyIDogcHVibGljIEV4dGVuc2lvbnMzRENocm9taXVtOjpHcHVNZW1vcnlBbGxvY2F0aW9uQ2hh
bmdlZENhbGxiYWNrQ0hST01JVU0geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPExh
eWVyUmVuZGVyZXJHcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlcj4gY3Jl
YXRlKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFB0cihuZXcgTGF5ZXJSZW5kZXJlckdwdU1lbW9yeUFsbG9jYXRpb25DaGFu
Z2VkQ2FsbGJhY2tBZGFwdGVyKGxheWVyUmVuZGVyZXIpKTsKKyAgICB9CisgICAgdmlydHVhbCB+
TGF5ZXJSZW5kZXJlckdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyKCkg
eyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgb25HcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZChFeHRl
bnNpb25zM0RDaHJvbWl1bTo6R3B1TWVtb3J5QWxsb2NhdGlvbkNIUk9NSVVNIGFsbG9jYXRpb24p
CisgICAgeworICAgICAgICBpZiAoIWFsbG9jYXRpb24uc3VnZ2VzdEhhdmVCYWNrYnVmZmVyKQor
ICAgICAgICAgICAgbV9sYXllclJlbmRlcmVyLT5kaXNjYXJkRnJhbWVidWZmZXIoKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgbV9sYXllclJlbmRlcmVyLT5lbnN1cmVGcmFtZWJ1ZmZlcigp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBMYXllclJlbmRlcmVyR3B1TWVtb3J5
QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBs
YXllclJlbmRlcmVyKQorICAgICAgICA6IG1fbGF5ZXJSZW5kZXJlcihsYXllclJlbmRlcmVyKQor
ICAgIHsKKyAgICB9CisKKyAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0qIG1fbGF5ZXJSZW5kZXJl
cjsKK307CisKIAogUGFzc093blB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6Y3JlYXRlKExheWVyUmVuZGVyZXJDaHJvbWl1bUNsaWVudCogY2xpZW50LCBQ
YXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KQogewpAQCAtMTg0LDYgKzIwOSw3
IEBAIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKExheWVyUmVu
ZGVyZXJDaHJvbWl1bUNsaWVudCogY2xpZW50CiAgICAgLCBtX2RlZmF1bHRSZW5kZXJTdXJmYWNl
KDApCiAgICAgLCBtX3NoYXJlZEdlb21ldHJ5UXVhZChGbG9hdFJlY3QoLTAuNWYsIC0wLjVmLCAx
LjBmLCAxLjBmKSkKICAgICAsIG1faXNWaWV3cG9ydENoYW5nZWQoZmFsc2UpCisgICAgLCBtX2lz
RnJhbWVidWZmZXJEaXNjYXJkZWQoZmFsc2UpCiB7CiB9CiAKQEAgLTI1OSw2ICsyODUsMTcgQEAg
Ym9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemUoKQogICAgIGlmIChtX2NhcGFi
aWxpdGllcy51c2luZ1RleHR1cmVTdG9yYWdlRXh0ZW5zaW9uKQogICAgICAgICBleHRlbnNpb25z
LT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfdGV4dHVyZV9zdG9yYWdlIik7CiAKKyAgICBtX2NhcGFi
aWxpdGllcy51c2luZ0dwdU1lbW9yeU1hbmFnZXIgPSBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xf
Q0hST01JVU1fZ3B1X21lbW9yeV9tYW5hZ2VyIik7CisgICAgaWYgKG1fY2FwYWJpbGl0aWVzLnVz
aW5nR3B1TWVtb3J5TWFuYWdlcikgeworICAgICAgICBleHRlbnNpb25zLT5lbnN1cmVFbmFibGVk
KCJHTF9DSFJPTUlVTV9ncHVfbWVtb3J5X21hbmFnZXIiKTsKKyAgICAgICAgRXh0ZW5zaW9uczNE
Q2hyb21pdW0qIGV4dGVuc2lvbnMzRENocm9taXVtID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNE
Q2hyb21pdW0qPihleHRlbnNpb25zKTsKKyAgICAgICAgZXh0ZW5zaW9uczNEQ2hyb21pdW0tPnNl
dEdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tDSFJPTUlVTShMYXllclJlbmRlcmVy
R3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXI6OmNyZWF0ZSh0aGlzKSk7
CisgICAgfQorCisgICAgbV9jYXBhYmlsaXRpZXMudXNpbmdEaXNjYXJkRnJhbWVidWZmZXIgPSBl
eHRlbnNpb25zLT5zdXBwb3J0cygiR0xfRVhUX2Rpc2NhcmRfZnJhbWVidWZmZXIiKTsKKyAgICBp
ZiAobV9jYXBhYmlsaXRpZXMudXNpbmdEaXNjYXJkRnJhbWVidWZmZXIpCisgICAgICAgIGV4dGVu
c2lvbnMtPmVuc3VyZUVuYWJsZWQoIkdMX0VYVF9kaXNjYXJkX2ZyYW1lYnVmZmVyIik7CisKICAg
ICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29u
dGV4dDNEOjpNQVhfVEVYVFVSRV9TSVpFLCAmbV9jYXBhYmlsaXRpZXMubWF4VGV4dHVyZVNpemUp
KTsKICAgICBtX2NhcGFiaWxpdGllcy5iZXN0VGV4dHVyZUZvcm1hdCA9IFBsYXRmb3JtQ29sb3I6
OmJlc3RUZXh0dXJlRm9ybWF0KG1fY29udGV4dC5nZXQoKSk7CiAKQEAgLTI3Nyw2ICszMTQsNyBA
QCBMYXllclJlbmRlcmVyQ2hyb21pdW06On5MYXllclJlbmRlcmVyQ2hyb21pdW0oKQogICAgIEFT
U0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAgRXh0ZW5zaW9uczNEQ2hyb21pdW0q
IGV4dGVuc2lvbnMzRENocm9taXVtID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21pdW0q
PihtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKSk7CiAgICAgZXh0ZW5zaW9uczNEQ2hyb21pdW0t
PnNldFN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0NIUk9NSVVNKG51bGxwdHIpOworICAgIGV4
dGVuc2lvbnMzRENocm9taXVtLT5zZXRHcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNr
Q0hST01JVU0obnVsbHB0cik7CiAgICAgbV9oZWFkc1VwRGlzcGxheS5jbGVhcigpOyAvLyBFeHBs
aWNpdGx5IGRlc3Ryb3kgdGhlIEhVRCBiZWZvcmUgdGhlIFRleHR1cmVNYW5hZ2VyIGRpZXMuCiAg
ICAgY2xlYW51cFNoYXJlZE9iamVjdHMoKTsKIH0KQEAgLTMxMSw2ICszNDksOSBAQCB2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCiAgICAgaWYgKCF2
aXNpYmxlKQogICAgICAgICByZWxlYXNlUmVuZGVyU3VyZmFjZVRleHR1cmVzKCk7CiAKKyAgICAv
LyBGSVhNRTogUmVtb3ZlIHRoaXMgb25jZSBmcmFtZWJ1ZmZlciBpcyBhdXRvbWF0aWNhbGx5IHJl
Y3JlYXRlZCBvbiBmaXJzdCB1c2UKKyAgICBlbnN1cmVGcmFtZWJ1ZmZlcigpOworCiAgICAgLy8g
VE9ETzogUmVwbGFjZSBzZXRWaXNpYmlsaXR5Q0hST01JVU0gd2l0aCBhbiBleHRlbnNpb24gdG8g
ZXhwbGljaXRseSBtYW5hZ2UgZnJvbnQvYmFja2J1ZmZlcnMKICAgICAvLyBjcmJ1Zy5jb20vMTE2
MDQ5CiAgICAgaWYgKG1fY2FwYWJpbGl0aWVzLnVzaW5nU2V0VmlzaWJpbGl0eSkgewpAQCAtMTAz
MSw2ICsxMDcyLDEzIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpmaW5pc2goKQogCiB2
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c3dhcEJ1ZmZlcnMoY29uc3QgSW50UmVjdCYgc3Vi
QnVmZmVyKQogeworICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBvbmNlIGdwdSBwcm9jZXNzIHN1
cHBvcnRzIGlnbm9yaW5nIHN3YXAgYnVmZmVycyBjb21tYW5kIHdoaWxlIGZyYW1lYnVmZmVyIGlz
IGRpc2NhcmRlZC4KKyAgICAvLyAgICAgICAgQWx0ZXJuYXRpdmVseSAocHJlZmVyYWJseT8pLCBw
cm90ZWN0IGFsbCBjYyBjb2RlIHNvIGFzIG5vdCB0byBhdHRlbXB0IGEgc3dhcCBhZnRlciBhIGZy
YW1lYnVmZmVyIGRpc2NhcmQuCisgICAgaWYgKG1faXNGcmFtZWJ1ZmZlckRpc2NhcmRlZCkgewor
ICAgICAgbV9jbGllbnQtPnNldEZ1bGxSb290TGF5ZXJEYW1hZ2UoKTsKKyAgICAgIHJldHVybjsK
KyAgICB9CisKICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzd2FwQnVm
ZmVycyIsIHRoaXMsIDApOwogICAgIC8vIFdlJ3JlIGRvbmUhIFRpbWUgdG8gc3dhcGJ1ZmZlcnMh
CiAKQEAgLTEwNTQsNiArMTEwMiwzNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6b25T
d2FwQnVmZmVyc0NvbXBsZXRlKCkKICAgICBtX2NsaWVudC0+b25Td2FwQnVmZmVyc0NvbXBsZXRl
KCk7CiB9CiAKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkaXNjYXJkRnJhbWVidWZmZXIo
KQoreworICAgIGlmIChtX2lzRnJhbWVidWZmZXJEaXNjYXJkZWQpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChtX2NhcGFiaWxpdGllcy51c2luZ0Rpc2NhcmRGcmFtZWJ1ZmZlcikgeworICAg
ICAgICBFeHRlbnNpb25zM0QqIGV4dGVuc2lvbnMgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMo
KTsKKyAgICAgICAgRXh0ZW5zaW9uczNEQ2hyb21pdW0qIGV4dGVuc2lvbnMzRENocm9taXVtID0g
c3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21pdW0qPihleHRlbnNpb25zKTsKKyAgICAgICAg
Ly8gRklYTUU6IFVwZGF0ZSBhdHRhY2htZW50cyBhcmd1bWVudCB0byBhcHByb3ByaWF0ZSB2YWx1
ZXMgb25jZSB0aGV5IGFyZSBubyBsb25nZXIgaWdub3JlZC4KKyAgICAgICAgZXh0ZW5zaW9uczNE
Q2hyb21pdW0tPmRpc2NhcmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgMCwgMCk7CisgICAgICAgIG1faXNGcmFtZWJ1ZmZlckRpc2NhcmRlZCA9IHRydWU7CisK
KyAgICAgICAgLy8gRGFtYWdlIHRyYWNrZXIgbmVlZHMgYSBmdWxsIHJlc2V0IGV2ZXJ5IHRpbWUg
ZnJhbWVidWZmZXIgaXMgZGlzY2FyZGVkLgorICAgICAgICBtX2NsaWVudC0+c2V0RnVsbFJvb3RM
YXllckRhbWFnZSgpOworICAgIH0KK30KKwordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmVu
c3VyZUZyYW1lYnVmZmVyKCkKK3sKKyAgICBpZiAoIW1faXNGcmFtZWJ1ZmZlckRpc2NhcmRlZCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fY2FwYWJpbGl0aWVzLnVzaW5nRGlzY2FyZEZy
YW1lYnVmZmVyKSB7CisgICAgICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IG1fY29udGV4
dC0+Z2V0RXh0ZW5zaW9ucygpOworICAgICAgICBFeHRlbnNpb25zM0RDaHJvbWl1bSogZXh0ZW5z
aW9uczNEQ2hyb21pdW0gPSBzdGF0aWNfY2FzdDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KGV4dGVu
c2lvbnMpOworICAgICAgICBleHRlbnNpb25zM0RDaHJvbWl1bS0+ZW5zdXJlRnJhbWVidWZmZXJD
SFJPTUlVTSgpOworICAgICAgICBtX2lzRnJhbWVidWZmZXJEaXNjYXJkZWQgPSBmYWxzZTsKKyAg
ICB9Cit9CisKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRGcmFtZWJ1ZmZlclBpeGVs
cyh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgQVNTRVJUKHJlY3Qu
bWF4WCgpIDw9IHZpZXdwb3J0V2lkdGgoKSAmJiByZWN0Lm1heFkoKSA8PSB2aWV3cG9ydEhlaWdo
dCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKaW5kZXggNTJlYTg3YzEzM2Ix
NTdmMWE1ZTBhODgyMGFkZGY2MzE2MWYwOGQ2My4uNWYwN2M5ZGU5N2U3NzZkYmNhZTRjNTQzNjZh
OGY5MDM4OGM4NDM1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKQEAgLTYx
LDYgKzYxLDcgQEAgY2xhc3MgR2VvbWV0cnlCaW5kaW5nOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0
M0Q7CiBjbGFzcyBUcmFja2luZ1RleHR1cmVBbGxvY2F0b3I7CiBjbGFzcyBMYXllclJlbmRlcmVy
U3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQWRhcHRlcjsKK2NsYXNzIFNjb3BlZEVuc3VyZUZy
YW1lYnVmZmVyQWxsb2NhdGlvbjsKIAogY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtQ2xpZW50
IHsKIHB1YmxpYzoKQEAgLTcwLDYgKzcxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgY29uc3Qg
Q0NMYXllckltcGwqIHJvb3RMYXllcigpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlk
TG9zZUNvbnRleHQoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIG9uU3dhcEJ1ZmZlcnNDb21wbGV0
ZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RnVsbFJvb3RMYXllckRhbWFnZSgpID0gMDsK
IH07CiAKIC8vIENsYXNzIHRoYXQgaGFuZGxlcyBkcmF3aW5nIG9mIGNvbXBvc2l0ZWQgcmVuZGVy
IGxheWVycyB1c2luZyBHTC4KQEAgLTE2MCwxMCArMTYyLDE2IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgb3BhY2l0
eSwgY29uc3QgRmxvYXRRdWFkJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1hdHJp
eExvY2F0aW9uLCBpbnQgYWxwaGFMb2NhdGlvbiwgaW50IHF1YWRMb2NhdGlvbik7CiAKLXByaXZh
dGU6Citwcm90ZWN0ZWQ6CisgICAgZnJpZW5kIGNsYXNzIExheWVyUmVuZGVyZXJHcHVNZW1vcnlB
bGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlcjsKKyAgICBmcmllbmQgY2xhc3MgU2NvcGVk
RW5zdXJlRnJhbWVidWZmZXJBbGxvY2F0aW9uOworICAgIHZvaWQgZGlzY2FyZEZyYW1lYnVmZmVy
KCk7CisgICAgdm9pZCBlbnN1cmVGcmFtZWJ1ZmZlcigpOworCiAgICAgTGF5ZXJSZW5kZXJlckNo
cm9taXVtKExheWVyUmVuZGVyZXJDaHJvbWl1bUNsaWVudCosIFBhc3NSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+KTsKICAgICBib29sIGluaXRpYWxpemUoKTsKIAorcHJpdmF0ZToKICAgICB2b2lk
IGRyYXdRdWFkKGNvbnN0IENDRHJhd1F1YWQqLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1h
Z2VSZWN0KTsKICAgICB2b2lkIGRyYXdEZWJ1Z0JvcmRlclF1YWQoY29uc3QgQ0NEZWJ1Z0JvcmRl
ckRyYXdRdWFkKik7CiAgICAgdm9pZCBkcmF3UmVuZGVyU3VyZmFjZVF1YWQoY29uc3QgQ0NSZW5k
ZXJTdXJmYWNlRHJhd1F1YWQqKTsKQEAgLTI1NCw4ICsyNjIsMzcgQEAgcHJpdmF0ZToKICAgICBG
bG9hdFF1YWQgbV9zaGFyZWRHZW9tZXRyeVF1YWQ7CiAKICAgICBib29sIG1faXNWaWV3cG9ydENo
YW5nZWQ7CisgICAgYm9vbCBtX2lzRnJhbWVidWZmZXJEaXNjYXJkZWQ7CiB9OwogCisvLyBUaGUg
cHVycG9zZSBvZiB0aGlzIGhlbHBlciBpcyB0d29mb2xkOgorLy8gMS4gVG8gZW5zdXJlIHRoYXQg
YSBmcmFtZWJ1ZmZlciBpcyBhdmFpbGFibGUgZm9yIHNjb3BlIGxpZmV0aW1lLCBhbmQKKy8vIDIu
IFRvIHJlc2V0IGZyYW1lYnVmZmVyIGFsbG9jYXRpb24gdG8gcHJldmlvdXMgc3RhdGUgb24gc2Nv
cGUgZXhpdC4KKy8vIElmIHRoZSBmcmFtZWJ1ZmZlciBpcyByZWNyZWF0ZWQsIGl0cyBjb250ZW50
cyBhcmUgdW5kZWZpbmVkLgorLy8gRklYTUU6IFByZXZlbnQvZGVsYXkgZGlzY2FyZGluZyBmcmFt
ZWJ1ZmZlciB2aWEgYW55IG1lYW5zIHdoaWxlIGFueQorLy8gaW5zdGFuY2Ugb2YgdGhpcyBpcyBh
bGl2ZS4gQXQgdGhlIG1vbWVudCwgdGhpcyBpc24ndCBhbiBpc3N1ZS4KK2NsYXNzIFNjb3BlZEVu
c3VyZUZyYW1lYnVmZmVyQWxsb2NhdGlvbiB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgU2NvcGVk
RW5zdXJlRnJhbWVidWZmZXJBbGxvY2F0aW9uKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJS
ZW5kZXJlcikKKyAgICAgICAgOiBtX2xheWVyUmVuZGVyZXIobGF5ZXJSZW5kZXJlcikKKyAgICAg
ICAgLCBtX2ZyYW1lYnVmZmVyV2FzSW5pdGlhbGx5RGlzY2FyZGVkKGxheWVyUmVuZGVyZXItPm1f
aXNGcmFtZWJ1ZmZlckRpc2NhcmRlZCkKKyAgICB7CisgICAgICAgIGlmIChtX2ZyYW1lYnVmZmVy
V2FzSW5pdGlhbGx5RGlzY2FyZGVkKQorICAgICAgICAgICAgbV9sYXllclJlbmRlcmVyLT5lbnN1
cmVGcmFtZWJ1ZmZlcigpOworICAgIH0KKworICAgIH5TY29wZWRFbnN1cmVGcmFtZWJ1ZmZlckFs
bG9jYXRpb24oKQorICAgIHsKKyAgICAgICAgaWYgKG1fZnJhbWVidWZmZXJXYXNJbml0aWFsbHlE
aXNjYXJkZWQpCisgICAgICAgICAgICBtX2xheWVyUmVuZGVyZXItPmRpc2NhcmRGcmFtZWJ1ZmZl
cigpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0qIG1fbGF5
ZXJSZW5kZXJlcjsKKyAgICBib29sIG1fZnJhbWVidWZmZXJXYXNJbml0aWFsbHlEaXNjYXJkZWQ7
Cit9OworCisKIC8vIFNldHRpbmcgREVCVUdfR0xfQ0FMTFMgdG8gMSB3aWxsIGNhbGwgZ2xHZXRF
cnJvcigpIGFmdGVyIGFsbW9zdCBldmVyeSBHTAogLy8gY2FsbCBtYWRlIGJ5IHRoZSBjb21wb3Np
dG9yLiBVc2VmdWwgZm9yIGRlYnVnZ2luZyByZW5kZXJpbmcgaXNzdWVzIGJ1dAogLy8gd2lsbCBz
aWduaWZpY2FudGx5IGRlZ3JhZGUgcGVyZm9ybWFuY2UuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dC5oCmluZGV4IDlmNzgwYTdhZTc3YWExZThlMTUxMzdhMWRiOGY5ZjBmOTBiZjhjYWIuLjczOTBl
YzM0YTllN2I4ZDAzMDZiM2Q2Njk0NjExZTAwYTRkNzI3NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdC5oCkBAIC0xMDIsNiArMTAyLDggQEAgc3RydWN0IExheWVyUmVuZGVyZXJDYXBhYmls
aXRpZXMgewogICAgICAgICAsIHVzaW5nU3dhcENvbXBsZXRlQ2FsbGJhY2soZmFsc2UpCiAgICAg
ICAgICwgdXNpbmdUZXh0dXJlVXNhZ2VIaW50KGZhbHNlKQogICAgICAgICAsIHVzaW5nVGV4dHVy
ZVN0b3JhZ2VFeHRlbnNpb24oZmFsc2UpCisgICAgICAgICwgdXNpbmdHcHVNZW1vcnlNYW5hZ2Vy
KGZhbHNlKQorICAgICAgICAsIHVzaW5nRGlzY2FyZEZyYW1lYnVmZmVyKGZhbHNlKQogICAgICAg
ICAsIG1heFRleHR1cmVTaXplKDApIHsgfQogCiAgICAgR0MzRGVudW0gYmVzdFRleHR1cmVGb3Jt
YXQ7CkBAIC0xMTMsNiArMTE1LDggQEAgc3RydWN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMg
ewogICAgIGJvb2wgdXNpbmdTd2FwQ29tcGxldGVDYWxsYmFjazsKICAgICBib29sIHVzaW5nVGV4
dHVyZVVzYWdlSGludDsKICAgICBib29sIHVzaW5nVGV4dHVyZVN0b3JhZ2VFeHRlbnNpb247Cisg
ICAgYm9vbCB1c2luZ0dwdU1lbW9yeU1hbmFnZXI7CisgICAgYm9vbCB1c2luZ0Rpc2NhcmRGcmFt
ZWJ1ZmZlcjsKICAgICBpbnQgbWF4VGV4dHVyZVNpemU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IDBhYmZhZTE4OGRiOWZlMjNlN2UzMzM1NTY0ZjMw
MzJlYjU5NTY5YWUuLmViZTViNDlhNWI4N2IxZGYwNTEwYTVjOWE1MGFmZmNmYTYwMzNhZTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC00NDksMTEgKzQ0OSw2
IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCiAK
ICAgICBtX2xheWVyUmVuZGVyZXItPnNldFZpc2libGUodmlzaWJsZSk7CiAKLSAgICAvLyBSZXNl
dCB0aGUgZGFtYWdlIHRyYWNrZXIgYmVjYXVzZSB0aGUgZnJvbnQvYmFjayBidWZmZXJzIG1heSBo
YXZlIGJlZW4gZGFtYWdlZCBieSB0aGUgR1BVCi0gICAgLy8gcHJvY2VzcyBvbiB2aXNpYmlsaXR5
IGNoYW5nZS4KLSAgICBpZiAodmlzaWJsZSAmJiBtX2xheWVyUmVuZGVyZXItPmNhcGFiaWxpdGll
cygpLnVzaW5nUGFydGlhbFN3YXApCi0gICAgICAgIHNldEZ1bGxSb290TGF5ZXJEYW1hZ2UoKTsK
LQogICAgIGNvbnN0IGJvb2wgc2hvdWxkVGlja0luQmFja2dyb3VuZCA9ICF2aXNpYmxlICYmIG1f
bmVlZHNBbmltYXRlTGF5ZXJzOwogICAgIG1fdGltZVNvdXJjZUNsaWVudEFkYXB0ZXItPnNldEFj
dGl2ZShzaG91bGRUaWNrSW5CYWNrZ3JvdW5kKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdEltcGwuaAppbmRleCAzMTQ5NDc0YzRiNThhNWM1ZDBlZTcwYjYzYTYxMWFlMmU4MmMxMmM2
Li5mMmVkN2Y1NTUwMTRiOGFlMWIwOWE5ZWEyOGYyYTZkMjIyOTc5N2ZhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCkBAIC05MCw2ICs5MCw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIGNvbnN0IENDTGF5ZXJJbXBsKiByb290TGF5ZXIoKSBjb25zdCAgeyByZXR1cm4gbV9y
b290TGF5ZXJJbXBsLmdldCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGRpZExvc2VDb250ZXh0KCk7
CiAgICAgdmlydHVhbCB2b2lkIG9uU3dhcEJ1ZmZlcnNDb21wbGV0ZSgpOworICAgIHZpcnR1YWwg
dm9pZCBzZXRGdWxsUm9vdExheWVyRGFtYWdlKCk7CiAKICAgICAvLyBJbXBsZW1lbnRhdGlvbgog
ICAgIGJvb2wgY2FuRHJhdygpOwpAQCAtMTI2LDEwICsxMjcsNiBAQCBwdWJsaWM6CiAKICAgICBQ
YXNzT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKIAot
ICAgIC8vIFdoZXJlIHBvc3NpYmxlLCByZWRyYXdzIGFyZSBzY2lzc29yZWQgdG8gYSBkYW1hZ2Ug
cmVnaW9uIGNhbGN1bGF0ZWQgZnJvbSBjaGFuZ2VzIHRvCi0gICAgLy8gbGF5ZXIgcHJvcGVydGll
cy4gVGhpcyBmdW5jdGlvbiBvdmVycmlkZXMgdGhlIGRhbWFnZSByZWdpb24gZm9yIHRoZSBuZXh0
IGRyYXcgY3ljbGUuCi0gICAgdm9pZCBzZXRGdWxsUm9vdExheWVyRGFtYWdlKCk7Ci0KICAgICB2
b2lkIHN0YXJ0UGFnZVNjYWxlQW5pbWF0aW9uKGNvbnN0IEludFNpemUmIHRyYWdldFBvc2l0aW9u
LCBib29sIHVzZUFuY2hvciwgZmxvYXQgc2NhbGUsIGRvdWJsZSBkdXJhdGlvblNlYyk7CiAKICAg
ICBib29sIG5lZWRzQW5pbWF0ZUxheWVycygpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNBbmltYXRl
TGF5ZXJzOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCmluZGV4IGI2
ZmM3NmI1MmU4YmRmNGZlYTk3NTUwYTIxNmVmMTMyZmY3YjViZjUuLmUxM2RiMmFiYjNhN2JkZjQy
MTg1MWRlNDE2ZTdlZjljNGIyYmRiOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFk
UHJveHkuY3BwCkBAIC03Miw2ICs3Miw4IEBAIGJvb2wgQ0NTaW5nbGVUaHJlYWRQcm94eTo6Y29t
cG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0CiAgICAg
VFJBQ0VfRVZFTlQoIkNDU2luZ2xlVGhyZWFkUHJveHk6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrIiwg
dGhpcywgMCk7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKIAorICAgIFNj
b3BlZEVuc3VyZUZyYW1lYnVmZmVyQWxsb2NhdGlvbiBzZWZhKG1fbGF5ZXJUcmVlSG9zdEltcGwt
PmxheWVyUmVuZGVyZXIoKSk7CisKICAgICBpZiAoIWNvbW1pdElmTmVlZGVkKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcAppbmRleCBkNTQ4OGYy
YzcxZDljYjUwYTMxNzViMWFkNzdlMGE3ZGM1ZDRkNTIwLi5kOTZhZmI5MGE2ZGZiMzFjNjMzYWI3
OWI2NDJiZjY5MGIwMTM1ZDEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcApAQCAtOTEs
NiArOTEsOCBAQCBib29sIENDVGhyZWFkUHJveHk6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQg
KnBpeGVscywgY29uc3QgSW50UmVjdCYgcmVjdCkKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogICAgIEFTU0VSVChtX2xheWVyVHJlZUhvc3QpOwogCisgICAgU2NvcGVkRW5zdXJlRnJhbWVi
dWZmZXJBbGxvY2F0aW9uIHNlZmEobV9sYXllclRyZWVIb3N0SW1wbC0+bGF5ZXJSZW5kZXJlcigp
KTsKKwogICAgIGlmICghbV9sYXllclJlbmRlcmVySW5pdGlhbGl6ZWQpIHsKICAgICAgICAgVFJB
Q0VfRVZFTlQoImNvbXBvc2l0ZUFuZFJlYWRiYWNrX0Vhcmx5T3V0X0xSX1VuaW5pdGlhbGl6ZWQi
LCB0aGlzLCAwKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cGkKaW5kZXggZTI2N2E1YmQzZGI5M2NkYjJjN2Y4OTJjMjE2Yjg5NzJmMzMzN2YyYS4uODg5
NDI5YmQ5MjM4MDFkNjMxNzZmYmQwMTI2NzA1NDZlMjY4OGU0ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXBpCkBAIC0xMDUsNiArMTA1LDcgQEAKICAgICAgICAgICAgICd0ZXN0cy9LZXli
b2FyZFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9LVVJMVGVzdC5jcHAnLAogICAgICAg
ICAgICAgJ3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMv
TGF5ZXJSZW5kZXJlckNocm9taXVtVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0xheWVy
VGV4dHVyZVVwZGF0ZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvTGV2ZWxEQlRlc3Qu
Y3BwJywKICAgICAgICAgICAgICd0ZXN0cy9Mb2NhbGl6ZWROdW1iZXJJQ1VUZXN0LmNwcCcsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyUmVuZGVyZXJDaHJv
bWl1bVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllclJlbmRlcmVy
Q2hyb21pdW1UZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yOWU5ZjU2MDJjMDUxMzZiNDU0N2ZiMDAwZDIx
ZDI1NzQ1ZTVmNzVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9MYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0LmNwcApAQCAtMCwwICsxLDEwMSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJD
aHJvbWl1bS5oIgorCisjaW5jbHVkZSAiRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGUuaCIKKworI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rl
c3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0
OworCitjbGFzcyBGcmFtZUNvdW50aW5nQ29udGV4dCA6IHB1YmxpYyBGYWtlV2ViR3JhcGhpY3ND
b250ZXh0M0QgeworcHVibGljOgorICAgIEZyYW1lQ291bnRpbmdDb250ZXh0KCkgOiBtX2ZyYW1l
KDApIHsgfQorCisgICAgLy8gVGhpcyBtZXRob2Qgd291bGQgbm9ybWFsbHkgZG8gYSBnbFN3YXBC
dWZmZXJzIHVuZGVyIHRoZSBob29kLgorICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVGV4dHVyZSgp
IHsgbV9mcmFtZSsrOyB9CisKKyAgICBpbnQgZnJhbWVDb3VudCgpIHsgcmV0dXJuIG1fZnJhbWU7
IH0KKworcHJpdmF0ZToKKyAgICBpbnQgbV9mcmFtZTsKK307CisKK2NsYXNzIEZha2VMYXllclJl
bmRlcmVyQ2hyb21pdW1DbGllbnQgOiBwdWJsaWMgTGF5ZXJSZW5kZXJlckNocm9taXVtQ2xpZW50
IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSgpIGNv
bnN0IHsgc3RhdGljIEludFNpemUgc3o7IHJldHVybiBzejsgfQorICAgIHZpcnR1YWwgY29uc3Qg
Q0NTZXR0aW5ncyYgc2V0dGluZ3MoKSBjb25zdCB7IHN0YXRpYyBDQ1NldHRpbmdzIHNldHRpbmdz
OyByZXR1cm4gc2V0dGluZ3M7IH0KKyAgICB2aXJ0dWFsIENDTGF5ZXJJbXBsKiByb290TGF5ZXIo
KSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBjb25zdCBDQ0xheWVySW1wbCogcm9vdExheWVy
KCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRMb3NlQ29udGV4dCgp
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBvblN3YXBCdWZmZXJzQ29tcGxldGUoKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgc2V0RnVsbFJvb3RMYXllckRhbWFnZSgpIHsgfQorfTsKKworY2xhc3MgTGF5
ZXJSZW5kZXJlckNocm9taXVtVGVzdCA6IHB1YmxpYyBMYXllclJlbmRlcmVyQ2hyb21pdW0gewor
cHVibGljOgorICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bVRlc3QoTGF5ZXJSZW5kZXJlckNocm9t
aXVtQ2xpZW50KiBscmNjLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KQor
ICAgICAgICA6IExheWVyUmVuZGVyZXJDaHJvbWl1bShscmNjLCBjb250ZXh0KQorICAgIHsKKyAg
ICB9CisKKyAgICAvLyBDaGFuZ2UgdmlzaWJsaXR5IG9mIHRoZXNlIHRvIHB1YmxpYy4KKyAgICB1
c2luZyBMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemU7CisgICAgdXNpbmcgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkaXNjYXJkRnJhbWVidWZmZXI7CisgICAgdXNpbmcgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjplbnN1cmVGcmFtZWJ1ZmZlcjsKK307CisKKy8vIFRoaXMgdGVzdHMgdGhh
dCBMYXllclJlbmRlcmVyQ2hyb21pdW0gd2lsbCBub3Qgc3dhcCB3aXRoIGEgZGlzY2FyZGVkIGZy
YW1lYnVmZmVyLCBhbmQgd2lsbCByZXN1bWUgc3dhcHBpbmcgYWZ0ZXIgaXQgaGFzIGJlZW4gcmVj
cmVhdGVkLgorVEVTVChMYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0LCBTd2FwV2hpbGVGcmFtZWJ1
ZmZlckRpc2NhcmRlZElzSWdub3JlZCkKK3sKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmli
dXRlcyBhdHRyczsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0
KGFkb3B0UHRyKG5ldyBGcmFtZUNvdW50aW5nQ29udGV4dCgpKSwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKKyAgICBGcmFtZUNvdW50aW5nQ29udGV4dCYg
bW9ja0NvbnRleHQgPSAqc3RhdGljX2Nhc3Q8RnJhbWVDb3VudGluZ0NvbnRleHQqPihHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRChjb250ZXh0Lmdl
dCgpKSk7CisKKyAgICBGYWtlTGF5ZXJSZW5kZXJlckNocm9taXVtQ2xpZW50IGNsaWVudDsKKyAg
ICBMYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0IGxyYygmY2xpZW50LCBjb250ZXh0LnJlbGVhc2Uo
KSk7CisKKyAgICBscmMuaW5pdGlhbGl6ZSgpOworICAgIGNvbnN0X2Nhc3Q8TGF5ZXJSZW5kZXJl
ckNhcGFiaWxpdGllcyY+KGxyYy5jYXBhYmlsaXRpZXMoKSkudXNpbmdEaXNjYXJkRnJhbWVidWZm
ZXIgPSB0cnVlOworCisgICAgLy8gRmlyc3QsIHRoZSBzaW1wbGUgY2FzZS4KKyAgICBscmMuc3dh
cEJ1ZmZlcnMoSW50UmVjdCgpKTsKKyAgICBFWFBFQ1RfRVEoMSwgbW9ja0NvbnRleHQuZnJhbWVD
b3VudCgpKTsKKworICAgIC8vIE5vdywgZGlzY2FyZCBmcmFtZWJ1ZmZlci4KKyAgICBscmMuZGlz
Y2FyZEZyYW1lYnVmZmVyKCk7CisgICAgbHJjLnN3YXBCdWZmZXJzKEludFJlY3QoKSk7CisgICAg
RVhQRUNUX0VRKDEsIG1vY2tDb250ZXh0LmZyYW1lQ291bnQoKSk7CisKKyAgICAvLyBBbmQgbWFr
ZSBzdXJlIGl0IGNhbiByZXN1bWUgZnVuY3Rpb24uCisgICAgbHJjLmVuc3VyZUZyYW1lYnVmZmVy
KCk7CisgICAgbHJjLnN3YXBCdWZmZXJzKEludFJlY3QoKSk7CisgICAgRVhQRUNUX0VRKDIsIG1v
Y2tDb250ZXh0LmZyYW1lQ291bnQoKSk7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133276</attachid>
            <date>2012-03-22 09:21:42 -0700</date>
            <delta_ts>2012-03-22 11:08:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81823-20120322122141.patch</filename>
            <type>text/plain</type>
            <size>28472</size>
            <attacher name="Michal Mocny">mmocny</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExNzExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzRjMTk5ODIxNGQ5MjJl
ZmU4MGIzYjViMjkzYjU2MjBkOTBjODk5Ni4uZGQ4YjIzZWI3YTM1ZWVlZmMxNWYyOTU4OWM5ODZl
M2E4MDE0YTA1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDEyLTAzLTIyICBNaWNo
YWwgTW9jbnkgIDxtbW9jbnlAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIExheWVy
UmVuZGVyZXJDaHJvbWl1bSBzaG91bGQgdXNlIEdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkIGNh
bGxiYWNrIHRvIGV4cGxpY2l0bHkgbWFuYWdlIGZyYW1lYnVmZmVyLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE4MjMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZXcgVW5pdFRlc3Q6IExheWVyUmVuZGVy
ZXJDaHJvbWl1bVRlc3QuRGlzY2FyZEZyYW1lYnVmZmVyVGVzdHMuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAg
ICAoTGF5ZXJSZW5kZXJlckdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJHcHVNZW1vcnlBbGxvY2F0aW9uQ2hh
bmdlZENhbGxiYWNrQWRhcHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJHcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlcjo6fkxheWVyUmVu
ZGVyZXJHcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlcik6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyR3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFj
a0FkYXB0ZXI6Om9uR3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJSZW5kZXJlckdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVy
OjpMYXllclJlbmRlcmVyR3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXIp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJl
bmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtOjp+TGF5ZXJSZW5kZXJlckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpM
YXllclJlbmRlcmVyQ2hyb21pdW06OnN3YXBCdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZGlzY2FyZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZW5zdXJlRnJhbWVidWZmZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChMYXllclJlbmRlcmVyQ2hyb21pdW1DbGllbnQpOgor
ICAgICAgICAoTGF5ZXJSZW5kZXJlckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
UmVuZGVyZXJDaHJvbWl1bTo6aXNGcmFtZWJ1ZmZlckRpc2NhcmRlZCk6CisgICAgICAgIChTY29w
ZWRFbnN1cmVGcmFtZWJ1ZmZlckFsbG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVk
RW5zdXJlRnJhbWVidWZmZXJBbGxvY2F0aW9uOjpTY29wZWRFbnN1cmVGcmFtZWJ1ZmZlckFsbG9j
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVkRW5zdXJlRnJhbWVidWZmZXJBbGxvY2F0
aW9uOjp+U2NvcGVkRW5zdXJlRnJhbWVidWZmZXJBbGxvY2F0aW9uKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXM6OkxheWVyUmVuZGVyZXJDYXBhYmlsaXRp
ZXMpOgorICAgICAgICAoTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaXNpYmxlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmg6Cisg
ICAgICAgIChDQ0xheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNDU2luZ2xlVGhyZWFkUHJveHk6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKToKKwogMjAxMi0w
My0yMiAgS3Jpc3TDs2YgS29zenR5w7MgIDxra3Jpc3RvZkBpbmYudS1zemVnZWQuaHU+CiAKICAg
ICAgICAgW1F0XSBGaXggUXQgbWluaW1hbCBidWlsZCBhZnRlciByMTExNjkyCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCmluZGV4IDg4ZGVhYzMzYTBkMTliMzc0MjlmNWE2NGZlNjI2MmJmNTlmMjYz
MDUuLmZjYjRkMjg1MTJmYjdkNjRkZTJhNjk5NTM1ODA5ODU4ZjA2NWQ5NzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTItMDMtMjIgIE1pY2hhbCBNb2Nu
eSAgPG1tb2NueUBnb29nbGUuY29tPgorCisgICAgICAgIFtjaHJvbWl1bV0gTGF5ZXJSZW5kZXJl
ckNocm9taXVtIHNob3VsZCB1c2UgR3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWQgY2FsbGJhY2sg
dG8gZXhwbGljaXRseSBtYW5hZ2UgZnJhbWVidWZmZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTgyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogdGVzdHMv
TGF5ZXJSZW5kZXJlckNocm9taXVtVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoRnJhbWVDb3Vu
dGluZ01lbW9yeUFsbG9jYXRpb25TZXR0aW5nQ29udGV4dCk6CisgICAgICAgIChGcmFtZUNvdW50
aW5nTWVtb3J5QWxsb2NhdGlvblNldHRpbmdDb250ZXh0OjpGcmFtZUNvdW50aW5nTWVtb3J5QWxs
b2NhdGlvblNldHRpbmdDb250ZXh0KToKKyAgICAgICAgKEZyYW1lQ291bnRpbmdNZW1vcnlBbGxv
Y2F0aW9uU2V0dGluZ0NvbnRleHQ6OnByZXBhcmVUZXh0dXJlKToKKyAgICAgICAgKEZyYW1lQ291
bnRpbmdNZW1vcnlBbGxvY2F0aW9uU2V0dGluZ0NvbnRleHQ6OmZyYW1lQ291bnQpOgorICAgICAg
ICAoRnJhbWVDb3VudGluZ01lbW9yeUFsbG9jYXRpb25TZXR0aW5nQ29udGV4dDo6c2V0TWVtb3J5
QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNKToKKyAgICAgICAgKEZyYW1lQ291bnRp
bmdNZW1vcnlBbGxvY2F0aW9uU2V0dGluZ0NvbnRleHQ6OnNldE1lbW9yeUFsbG9jYXRpb24pOgor
ICAgICAgICAoRnJhbWVDb3VudGluZ01lbW9yeUFsbG9jYXRpb25TZXR0aW5nQ29udGV4dDo6Z2V0
U3RyaW5nKToKKyAgICAgICAgKEZha2VMYXllclJlbmRlcmVyQ2hyb21pdW1DbGllbnQpOgorICAg
ICAgICAoRmFrZUxheWVyUmVuZGVyZXJDaHJvbWl1bUNsaWVudDo6RmFrZUxheWVyUmVuZGVyZXJD
aHJvbWl1bUNsaWVudCk6CisgICAgICAgIChGYWtlTGF5ZXJSZW5kZXJlckNocm9taXVtQ2xpZW50
Ojp2aWV3cG9ydFNpemUpOgorICAgICAgICAoRmFrZUxheWVyUmVuZGVyZXJDaHJvbWl1bUNsaWVu
dDo6c2V0dGluZ3MpOgorICAgICAgICAoRmFrZUxheWVyUmVuZGVyZXJDaHJvbWl1bUNsaWVudDo6
cm9vdExheWVyKToKKyAgICAgICAgKEZha2VMYXllclJlbmRlcmVyQ2hyb21pdW1DbGllbnQ6OmRp
ZExvc2VDb250ZXh0KToKKyAgICAgICAgKEZha2VMYXllclJlbmRlcmVyQ2hyb21pdW1DbGllbnQ6
Om9uU3dhcEJ1ZmZlcnNDb21wbGV0ZSk6CisgICAgICAgIChGYWtlTGF5ZXJSZW5kZXJlckNocm9t
aXVtQ2xpZW50OjpzZXRGdWxsUm9vdExheWVyRGFtYWdlKToKKyAgICAgICAgKEZha2VMYXllclJl
bmRlcmVyQ2hyb21pdW1DbGllbnQ6OnJlc2V0KToKKyAgICAgICAgKExheWVyUmVuZGVyZXJDaHJv
bWl1bVRlc3QpOgorICAgICAgICAoTGF5ZXJSZW5kZXJlckNocm9taXVtVGVzdDo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtVGVzdCk6CisgICAgICAgIChURVNUKToKKwogMjAxMi0wMy0yMiAgQWRyaWVu
bmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUuY29tPgogCiAgICAgICAgIFtjaHJvbWl1bV0gRml4IHNj
cm9sbGJhciBsYXllcnMgaG9sZGluZyBvbnRvIGludmFsaWQgdGV4dHVyZXMgYWZ0ZXIgbG9zdCBj
b250ZXh0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCAyN2IzZWRl
NTEzMjU3YTdhOWY0NmI5YWUyNDkyMTk2YTZjOTYzOTkwLi5hOGEyZDFiNzAyMDY2Zjc5NWRlYzc1
MTkwZTY4MWI3Mzc4N2MwNjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHAKQEAgLTE2NSw2ICsxNjUsMzEgQEAgcHJpdmF0ZToKICAgICBMYXllclJlbmRlcmVyQ2hyb21p
dW0qIG1fbGF5ZXJSZW5kZXJlcjsKIH07CiAKK2NsYXNzIExheWVyUmVuZGVyZXJHcHVNZW1vcnlB
bGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlciA6IHB1YmxpYyBFeHRlbnNpb25zM0RDaHJv
bWl1bTo6R3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxMYXllclJlbmRlcmVyR3B1TWVtb3J5QWxsb2NhdGlv
bkNoYW5nZWRDYWxsYmFja0FkYXB0ZXI+IGNyZWF0ZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxh
eWVyUmVuZGVyZXIpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IExheWVyUmVu
ZGVyZXJHcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlcihsYXllclJlbmRl
cmVyKSk7CisgICAgfQorICAgIHZpcnR1YWwgfkxheWVyUmVuZGVyZXJHcHVNZW1vcnlBbGxvY2F0
aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlcigpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIG9uR3B1
TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWQoRXh0ZW5zaW9uczNEQ2hyb21pdW06OkdwdU1lbW9yeUFs
bG9jYXRpb25DSFJPTUlVTSBhbGxvY2F0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKCFhbGxvY2F0
aW9uLnN1Z2dlc3RIYXZlQmFja2J1ZmZlcikKKyAgICAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+
ZGlzY2FyZEZyYW1lYnVmZmVyKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fbGF5ZXJS
ZW5kZXJlci0+ZW5zdXJlRnJhbWVidWZmZXIoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgZXhw
bGljaXQgTGF5ZXJSZW5kZXJlckdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFw
dGVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKKyAgICAgICAgOiBtX2xh
eWVyUmVuZGVyZXIobGF5ZXJSZW5kZXJlcikKKyAgICB7CisgICAgfQorCisgICAgTGF5ZXJSZW5k
ZXJlckNocm9taXVtKiBtX2xheWVyUmVuZGVyZXI7Cit9OworCiAKIFBhc3NPd25QdHI8TGF5ZXJS
ZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShMYXllclJlbmRl
cmVyQ2hyb21pdW1DbGllbnQqIGNsaWVudCwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
Y29udGV4dCkKIHsKQEAgLTE4NCw2ICsyMDksNyBAQCBMYXllclJlbmRlcmVyQ2hyb21pdW06Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bShMYXllclJlbmRlcmVyQ2hyb21pdW1DbGllbnQqIGNsaWVudAog
ICAgICwgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZSgwKQogICAgICwgbV9zaGFyZWRHZW9tZXRyeVF1
YWQoRmxvYXRSZWN0KC0wLjVmLCAtMC41ZiwgMS4wZiwgMS4wZikpCiAgICAgLCBtX2lzVmlld3Bv
cnRDaGFuZ2VkKGZhbHNlKQorICAgICwgbV9pc0ZyYW1lYnVmZmVyRGlzY2FyZGVkKGZhbHNlKQog
ewogfQogCkBAIC0yNTksNiArMjg1LDE3IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpp
bml0aWFsaXplKCkKICAgICBpZiAobV9jYXBhYmlsaXRpZXMudXNpbmdUZXh0dXJlU3RvcmFnZUV4
dGVuc2lvbikKICAgICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX3RleHR1
cmVfc3RvcmFnZSIpOwogCisgICAgbV9jYXBhYmlsaXRpZXMudXNpbmdHcHVNZW1vcnlNYW5hZ2Vy
ID0gZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0NIUk9NSVVNX2dwdV9tZW1vcnlfbWFuYWdlciIp
OworICAgIGlmIChtX2NhcGFiaWxpdGllcy51c2luZ0dwdU1lbW9yeU1hbmFnZXIpIHsKKyAgICAg
ICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xfQ0hST01JVU1fZ3B1X21lbW9yeV9tYW5h
Z2VyIik7CisgICAgICAgIEV4dGVuc2lvbnMzRENocm9taXVtKiBleHRlbnNpb25zM0RDaHJvbWl1
bSA9IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4oZXh0ZW5zaW9ucyk7CisgICAg
ICAgIGV4dGVuc2lvbnMzRENocm9taXVtLT5zZXRHcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENh
bGxiYWNrQ0hST01JVU0oTGF5ZXJSZW5kZXJlckdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2Fs
bGJhY2tBZGFwdGVyOjpjcmVhdGUodGhpcykpOworICAgIH0KKworICAgIG1fY2FwYWJpbGl0aWVz
LnVzaW5nRGlzY2FyZEZyYW1lYnVmZmVyID0gZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0VYVF9k
aXNjYXJkX2ZyYW1lYnVmZmVyIik7CisgICAgaWYgKG1fY2FwYWJpbGl0aWVzLnVzaW5nRGlzY2Fy
ZEZyYW1lYnVmZmVyKQorICAgICAgICBleHRlbnNpb25zLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRf
ZGlzY2FyZF9mcmFtZWJ1ZmZlciIpOworCiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250
ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1RFWFRVUkVfU0laRSwgJm1f
Y2FwYWJpbGl0aWVzLm1heFRleHR1cmVTaXplKSk7CiAgICAgbV9jYXBhYmlsaXRpZXMuYmVzdFRl
eHR1cmVGb3JtYXQgPSBQbGF0Zm9ybUNvbG9yOjpiZXN0VGV4dHVyZUZvcm1hdChtX2NvbnRleHQu
Z2V0KCkpOwogCkBAIC0yNzcsNiArMzE0LDcgQEAgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp+TGF5
ZXJSZW5kZXJlckNocm9taXVtKCkKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkp
OwogICAgIEV4dGVuc2lvbnMzRENocm9taXVtKiBleHRlbnNpb25zM0RDaHJvbWl1bSA9IHN0YXRp
Y19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4obV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkp
OwogICAgIGV4dGVuc2lvbnMzRENocm9taXVtLT5zZXRTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJh
Y2tDSFJPTUlVTShudWxscHRyKTsKKyAgICBleHRlbnNpb25zM0RDaHJvbWl1bS0+c2V0R3B1TWVt
b3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNKG51bGxwdHIpOwogICAgIG1faGVh
ZHNVcERpc3BsYXkuY2xlYXIoKTsgLy8gRXhwbGljaXRseSBkZXN0cm95IHRoZSBIVUQgYmVmb3Jl
IHRoZSBUZXh0dXJlTWFuYWdlciBkaWVzLgogICAgIGNsZWFudXBTaGFyZWRPYmplY3RzKCk7CiB9
CkBAIC0zMTEsNiArMzQ5LDkgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldFZpc2li
bGUoYm9vbCB2aXNpYmxlKQogICAgIGlmICghdmlzaWJsZSkKICAgICAgICAgcmVsZWFzZVJlbmRl
clN1cmZhY2VUZXh0dXJlcygpOwogCisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIG9uY2UgZnJh
bWVidWZmZXIgaXMgYXV0b21hdGljYWxseSByZWNyZWF0ZWQgb24gZmlyc3QgdXNlCisgICAgZW5z
dXJlRnJhbWVidWZmZXIoKTsKKwogICAgIC8vIFRPRE86IFJlcGxhY2Ugc2V0VmlzaWJpbGl0eUNI
Uk9NSVVNIHdpdGggYW4gZXh0ZW5zaW9uIHRvIGV4cGxpY2l0bHkgbWFuYWdlIGZyb250L2JhY2ti
dWZmZXJzCiAgICAgLy8gY3JidWcuY29tLzExNjA0OQogICAgIGlmIChtX2NhcGFiaWxpdGllcy51
c2luZ1NldFZpc2liaWxpdHkpIHsKQEAgLTEwMzEsNiArMTA3MiwxMyBAQCB2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZmluaXNoKCkKIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnN3
YXBCdWZmZXJzKGNvbnN0IEludFJlY3QmIHN1YkJ1ZmZlcikKIHsKKyAgICAvLyBGSVhNRTogUmVt
b3ZlIHRoaXMgb25jZSBncHUgcHJvY2VzcyBzdXBwb3J0cyBpZ25vcmluZyBzd2FwIGJ1ZmZlcnMg
Y29tbWFuZCB3aGlsZSBmcmFtZWJ1ZmZlciBpcyBkaXNjYXJkZWQuCisgICAgLy8gICAgICAgIEFs
dGVybmF0aXZlbHkgKHByZWZlcmFibHk/KSwgcHJvdGVjdCBhbGwgY2MgY29kZSBzbyBhcyBub3Qg
dG8gYXR0ZW1wdCBhIHN3YXAgYWZ0ZXIgYSBmcmFtZWJ1ZmZlciBkaXNjYXJkLgorICAgIGlmICht
X2lzRnJhbWVidWZmZXJEaXNjYXJkZWQpIHsKKyAgICAgIG1fY2xpZW50LT5zZXRGdWxsUm9vdExh
eWVyRGFtYWdlKCk7CisgICAgICByZXR1cm47CisgICAgfQorCiAgICAgVFJBQ0VfRVZFTlQoIkxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6c3dhcEJ1ZmZlcnMiLCB0aGlzLCAwKTsKICAgICAvLyBXZSdy
ZSBkb25lISBUaW1lIHRvIHN3YXBidWZmZXJzIQogCkBAIC0xMDU0LDYgKzExMDIsMzggQEAgdm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06Om9uU3dhcEJ1ZmZlcnNDb21wbGV0ZSgpCiAgICAgbV9j
bGllbnQtPm9uU3dhcEJ1ZmZlcnNDb21wbGV0ZSgpOwogfQogCit2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6ZGlzY2FyZEZyYW1lYnVmZmVyKCkKK3sKKyAgICBpZiAobV9pc0ZyYW1lYnVmZmVy
RGlzY2FyZGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fY2FwYWJpbGl0aWVzLnVz
aW5nRGlzY2FyZEZyYW1lYnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBFeHRlbnNpb25z
M0QqIGV4dGVuc2lvbnMgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKTsKKyAgICBFeHRlbnNp
b25zM0RDaHJvbWl1bSogZXh0ZW5zaW9uczNEQ2hyb21pdW0gPSBzdGF0aWNfY2FzdDxFeHRlbnNp
b25zM0RDaHJvbWl1bSo+KGV4dGVuc2lvbnMpOworICAgIC8vIEZJWE1FOiBVcGRhdGUgYXR0YWNo
bWVudHMgYXJndW1lbnQgdG8gYXBwcm9wcmlhdGUgdmFsdWVzIG9uY2UgdGhleSBhcmUgbm8gbG9u
Z2VyIGlnbm9yZWQuCisgICAgZXh0ZW5zaW9uczNEQ2hyb21pdW0tPmRpc2NhcmRGcmFtZWJ1ZmZl
ckVYVChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCk7CisgICAgbV9pc0ZyYW1l
YnVmZmVyRGlzY2FyZGVkID0gdHJ1ZTsKKworICAgIC8vIERhbWFnZSB0cmFja2VyIG5lZWRzIGEg
ZnVsbCByZXNldCBldmVyeSB0aW1lIGZyYW1lYnVmZmVyIGlzIGRpc2NhcmRlZC4KKyAgICBtX2Ns
aWVudC0+c2V0RnVsbFJvb3RMYXllckRhbWFnZSgpOworfQorCit2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6ZW5zdXJlRnJhbWVidWZmZXIoKQoreworICAgIGlmICghbV9pc0ZyYW1lYnVmZmVy
RGlzY2FyZGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fY2FwYWJpbGl0aWVzLnVz
aW5nRGlzY2FyZEZyYW1lYnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBFeHRlbnNpb25z
M0QqIGV4dGVuc2lvbnMgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKTsKKyAgICBFeHRlbnNp
b25zM0RDaHJvbWl1bSogZXh0ZW5zaW9uczNEQ2hyb21pdW0gPSBzdGF0aWNfY2FzdDxFeHRlbnNp
b25zM0RDaHJvbWl1bSo+KGV4dGVuc2lvbnMpOworICAgIGV4dGVuc2lvbnMzRENocm9taXVtLT5l
bnN1cmVGcmFtZWJ1ZmZlckNIUk9NSVVNKCk7CisgICAgbV9pc0ZyYW1lYnVmZmVyRGlzY2FyZGVk
ID0gZmFsc2U7Cit9CisKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRGcmFtZWJ1ZmZl
clBpeGVscyh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgQVNTRVJU
KHJlY3QubWF4WCgpIDw9IHZpZXdwb3J0V2lkdGgoKSAmJiByZWN0Lm1heFkoKSA8PSB2aWV3cG9y
dEhlaWdodCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKaW5kZXggNTJlYTg3
YzEzM2IxNTdmMWE1ZTBhODgyMGFkZGY2MzE2MWYwOGQ2My4uNjFjMWQ0YTg3N2JlYmNjZmE1ZGEx
ZmQxZGViNjQyMzE5MjJhMmM3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgK
QEAgLTYxLDYgKzYxLDcgQEAgY2xhc3MgR2VvbWV0cnlCaW5kaW5nOwogY2xhc3MgR3JhcGhpY3ND
b250ZXh0M0Q7CiBjbGFzcyBUcmFja2luZ1RleHR1cmVBbGxvY2F0b3I7CiBjbGFzcyBMYXllclJl
bmRlcmVyU3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQWRhcHRlcjsKK2NsYXNzIFNjb3BlZEVu
c3VyZUZyYW1lYnVmZmVyQWxsb2NhdGlvbjsKIAogY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVt
Q2xpZW50IHsKIHB1YmxpYzoKQEAgLTcwLDYgKzcxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
Y29uc3QgQ0NMYXllckltcGwqIHJvb3RMYXllcigpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgZGlkTG9zZUNvbnRleHQoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIG9uU3dhcEJ1ZmZlcnND
b21wbGV0ZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RnVsbFJvb3RMYXllckRhbWFnZSgp
ID0gMDsKIH07CiAKIC8vIENsYXNzIHRoYXQgaGFuZGxlcyBkcmF3aW5nIG9mIGNvbXBvc2l0ZWQg
cmVuZGVyIGxheWVycyB1c2luZyBHTC4KQEAgLTE2MCwxMCArMTYyLDE1IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQg
b3BhY2l0eSwgY29uc3QgRmxvYXRRdWFkJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IG1hdHJpeExvY2F0aW9uLCBpbnQgYWxwaGFMb2NhdGlvbiwgaW50IHF1YWRMb2NhdGlvbik7CiAK
LXByaXZhdGU6CisgICAgdm9pZCBkaXNjYXJkRnJhbWVidWZmZXIoKTsKKyAgICB2b2lkIGVuc3Vy
ZUZyYW1lYnVmZmVyKCk7CisgICAgYm9vbCBpc0ZyYW1lYnVmZmVyRGlzY2FyZGVkKCkgY29uc3Qg
eyByZXR1cm4gbV9pc0ZyYW1lYnVmZmVyRGlzY2FyZGVkOyB9CisKK3Byb3RlY3RlZDoKICAgICBM
YXllclJlbmRlcmVyQ2hyb21pdW0oTGF5ZXJSZW5kZXJlckNocm9taXVtQ2xpZW50KiwgUGFzc1Jl
ZlB0cjxHcmFwaGljc0NvbnRleHQzRD4pOwogICAgIGJvb2wgaW5pdGlhbGl6ZSgpOwogCitwcml2
YXRlOgogICAgIHZvaWQgZHJhd1F1YWQoY29uc3QgQ0NEcmF3UXVhZCosIGNvbnN0IEZsb2F0UmVj
dCYgc3VyZmFjZURhbWFnZVJlY3QpOwogICAgIHZvaWQgZHJhd0RlYnVnQm9yZGVyUXVhZChjb25z
dCBDQ0RlYnVnQm9yZGVyRHJhd1F1YWQqKTsKICAgICB2b2lkIGRyYXdSZW5kZXJTdXJmYWNlUXVh
ZChjb25zdCBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZCopOwpAQCAtMjU0LDggKzI2MSwzNyBAQCBw
cml2YXRlOgogICAgIEZsb2F0UXVhZCBtX3NoYXJlZEdlb21ldHJ5UXVhZDsKIAogICAgIGJvb2wg
bV9pc1ZpZXdwb3J0Q2hhbmdlZDsKKyAgICBib29sIG1faXNGcmFtZWJ1ZmZlckRpc2NhcmRlZDsK
IH07CiAKKy8vIFRoZSBwdXJwb3NlIG9mIHRoaXMgaGVscGVyIGlzIHR3b2ZvbGQ6CisvLyAxLiBU
byBlbnN1cmUgdGhhdCBhIGZyYW1lYnVmZmVyIGlzIGF2YWlsYWJsZSBmb3Igc2NvcGUgbGlmZXRp
bWUsIGFuZAorLy8gMi4gVG8gcmVzZXQgZnJhbWVidWZmZXIgYWxsb2NhdGlvbiB0byBwcmV2aW91
cyBzdGF0ZSBvbiBzY29wZSBleGl0LgorLy8gSWYgdGhlIGZyYW1lYnVmZmVyIGlzIHJlY3JlYXRl
ZCwgaXRzIGNvbnRlbnRzIGFyZSB1bmRlZmluZWQuCisvLyBGSVhNRTogUHJldmVudC9kZWxheSBk
aXNjYXJkaW5nIGZyYW1lYnVmZmVyIHZpYSBhbnkgbWVhbnMgd2hpbGUgYW55CisvLyBpbnN0YW5j
ZSBvZiB0aGlzIGlzIGFsaXZlLiBBdCB0aGUgbW9tZW50LCB0aGlzIGlzbid0IGFuIGlzc3VlLgor
Y2xhc3MgU2NvcGVkRW5zdXJlRnJhbWVidWZmZXJBbGxvY2F0aW9uIHsKK3B1YmxpYzoKKyAgICBl
eHBsaWNpdCBTY29wZWRFbnN1cmVGcmFtZWJ1ZmZlckFsbG9jYXRpb24oTGF5ZXJSZW5kZXJlckNo
cm9taXVtKiBsYXllclJlbmRlcmVyKQorICAgICAgICA6IG1fbGF5ZXJSZW5kZXJlcihsYXllclJl
bmRlcmVyKQorICAgICAgICAsIG1fZnJhbWVidWZmZXJXYXNJbml0aWFsbHlEaXNjYXJkZWQobGF5
ZXJSZW5kZXJlci0+aXNGcmFtZWJ1ZmZlckRpc2NhcmRlZCgpKQorICAgIHsKKyAgICAgICAgaWYg
KG1fZnJhbWVidWZmZXJXYXNJbml0aWFsbHlEaXNjYXJkZWQpCisgICAgICAgICAgICBtX2xheWVy
UmVuZGVyZXItPmVuc3VyZUZyYW1lYnVmZmVyKCk7CisgICAgfQorCisgICAgflNjb3BlZEVuc3Vy
ZUZyYW1lYnVmZmVyQWxsb2NhdGlvbigpCisgICAgeworICAgICAgICBpZiAobV9mcmFtZWJ1ZmZl
cldhc0luaXRpYWxseURpc2NhcmRlZCkKKyAgICAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZGlz
Y2FyZEZyYW1lYnVmZmVyKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIExheWVyUmVuZGVyZXJD
aHJvbWl1bSogbV9sYXllclJlbmRlcmVyOworICAgIGJvb2wgbV9mcmFtZWJ1ZmZlcldhc0luaXRp
YWxseURpc2NhcmRlZDsKK307CisKKwogLy8gU2V0dGluZyBERUJVR19HTF9DQUxMUyB0byAxIHdp
bGwgY2FsbCBnbEdldEVycm9yKCkgYWZ0ZXIgYWxtb3N0IGV2ZXJ5IEdMCiAvLyBjYWxsIG1hZGUg
YnkgdGhlIGNvbXBvc2l0b3IuIFVzZWZ1bCBmb3IgZGVidWdnaW5nIHJlbmRlcmluZyBpc3N1ZXMg
YnV0CiAvLyB3aWxsIHNpZ25pZmljYW50bHkgZGVncmFkZSBwZXJmb3JtYW5jZS4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmgKaW5kZXggOWY3ODBhN2FlNzdhYTFlOGUxNTEzN2ExZGI4ZjlmMGY5
MGJmOGNhYi4uNzM5MGVjMzRhOWU3YjhkMDMwNmIzZDY2OTQ2MTFlMDBhNGQ3Mjc2NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTEwMiw2ICsxMDIsOCBAQCBzdHJ1Y3QgTGF5ZXJS
ZW5kZXJlckNhcGFiaWxpdGllcyB7CiAgICAgICAgICwgdXNpbmdTd2FwQ29tcGxldGVDYWxsYmFj
ayhmYWxzZSkKICAgICAgICAgLCB1c2luZ1RleHR1cmVVc2FnZUhpbnQoZmFsc2UpCiAgICAgICAg
ICwgdXNpbmdUZXh0dXJlU3RvcmFnZUV4dGVuc2lvbihmYWxzZSkKKyAgICAgICAgLCB1c2luZ0dw
dU1lbW9yeU1hbmFnZXIoZmFsc2UpCisgICAgICAgICwgdXNpbmdEaXNjYXJkRnJhbWVidWZmZXIo
ZmFsc2UpCiAgICAgICAgICwgbWF4VGV4dHVyZVNpemUoMCkgeyB9CiAKICAgICBHQzNEZW51bSBi
ZXN0VGV4dHVyZUZvcm1hdDsKQEAgLTExMyw2ICsxMTUsOCBAQCBzdHJ1Y3QgTGF5ZXJSZW5kZXJl
ckNhcGFiaWxpdGllcyB7CiAgICAgYm9vbCB1c2luZ1N3YXBDb21wbGV0ZUNhbGxiYWNrOwogICAg
IGJvb2wgdXNpbmdUZXh0dXJlVXNhZ2VIaW50OwogICAgIGJvb2wgdXNpbmdUZXh0dXJlU3RvcmFn
ZUV4dGVuc2lvbjsKKyAgICBib29sIHVzaW5nR3B1TWVtb3J5TWFuYWdlcjsKKyAgICBib29sIHVz
aW5nRGlzY2FyZEZyYW1lYnVmZmVyOwogICAgIGludCBtYXhUZXh0dXJlU2l6ZTsKIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXggNDQzYTFmZmFhNzdiYTBl
ZTUyMDI5ZGYwZTNhYjE0OTY3ZjRjNTJkYi4uOWRmZmVlMzUzYWVlMGVlMjA3MzQyZGQ3ZGMzNGNl
ZDE1NmM0Y2EyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAg
LTQ4MCwxMSArNDgwLDYgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaXNpYmxlKGJv
b2wgdmlzaWJsZSkKIAogICAgIG1fbGF5ZXJSZW5kZXJlci0+c2V0VmlzaWJsZSh2aXNpYmxlKTsK
IAotICAgIC8vIFJlc2V0IHRoZSBkYW1hZ2UgdHJhY2tlciBiZWNhdXNlIHRoZSBmcm9udC9iYWNr
IGJ1ZmZlcnMgbWF5IGhhdmUgYmVlbiBkYW1hZ2VkIGJ5IHRoZSBHUFUKLSAgICAvLyBwcm9jZXNz
IG9uIHZpc2liaWxpdHkgY2hhbmdlLgotICAgIGlmICh2aXNpYmxlICYmIG1fbGF5ZXJSZW5kZXJl
ci0+Y2FwYWJpbGl0aWVzKCkudXNpbmdQYXJ0aWFsU3dhcCkKLSAgICAgICAgc2V0RnVsbFJvb3RM
YXllckRhbWFnZSgpOwotCiAgICAgY29uc3QgYm9vbCBzaG91bGRUaWNrSW5CYWNrZ3JvdW5kID0g
IXZpc2libGUgJiYgbV9uZWVkc0FuaW1hdGVMYXllcnM7CiAgICAgbV90aW1lU291cmNlQ2xpZW50
QWRhcHRlci0+c2V0QWN0aXZlKHNob3VsZFRpY2tJbkJhY2tncm91bmQpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCmluZGV4IGUwYzZlNzNhMzM0MjBkZDQ3ZDA5NTQyODYy
Y2I5YTQ4YTBhZDFjYjAuLjc3ZWI4OTJmYmU5OGVjZmVhMmViOGUxMTkxODM4MmRlNWY3Y2RhZTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKQEAgLTk4LDYgKzk4LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgY29uc3QgQ0NMYXllckltcGwqIHJvb3RMYXllcigpIGNvbnN0
ICB7IHJldHVybiBtX3Jvb3RMYXllckltcGwuZ2V0KCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlk
TG9zZUNvbnRleHQoKTsKICAgICB2aXJ0dWFsIHZvaWQgb25Td2FwQnVmZmVyc0NvbXBsZXRlKCk7
CisgICAgdmlydHVhbCB2b2lkIHNldEZ1bGxSb290TGF5ZXJEYW1hZ2UoKTsKIAogICAgIC8vIElt
cGxlbWVudGF0aW9uCiAgICAgYm9vbCBjYW5EcmF3KCk7CkBAIC0xMzQsMTAgKzEzNSw2IEBAIHB1
YmxpYzoKIAogICAgIFBhc3NPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gcHJvY2Vzc1Njcm9s
bERlbHRhcygpOwogCi0gICAgLy8gV2hlcmUgcG9zc2libGUsIHJlZHJhd3MgYXJlIHNjaXNzb3Jl
ZCB0byBhIGRhbWFnZSByZWdpb24gY2FsY3VsYXRlZCBmcm9tIGNoYW5nZXMgdG8KLSAgICAvLyBs
YXllciBwcm9wZXJ0aWVzLiBUaGlzIGZ1bmN0aW9uIG92ZXJyaWRlcyB0aGUgZGFtYWdlIHJlZ2lv
biBmb3IgdGhlIG5leHQgZHJhdyBjeWNsZS4KLSAgICB2b2lkIHNldEZ1bGxSb290TGF5ZXJEYW1h
Z2UoKTsKLQogICAgIHZvaWQgc3RhcnRQYWdlU2NhbGVBbmltYXRpb24oY29uc3QgSW50U2l6ZSYg
dHJhZ2V0UG9zaXRpb24sIGJvb2wgdXNlQW5jaG9yLCBmbG9hdCBzY2FsZSwgZG91YmxlIGR1cmF0
aW9uU2VjKTsKIAogICAgIGJvb2wgbmVlZHNBbmltYXRlTGF5ZXJzKCkgY29uc3QgeyByZXR1cm4g
bV9uZWVkc0FuaW1hdGVMYXllcnM7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94
eS5jcHAKaW5kZXggNjA3YjM4YWY3YTIyY2M3NzRmZjZhMTcyNzkzZDNkZTU5ZTQwMzY4Yi4uMmQ5
ZTBmMzQxZmU3MjU3ZDM0Nzk4ZjZjZjFiOGQ0ZGY4NTlkMjBiMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94
eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKQEAgLTcyLDYgKzcyLDggQEAgYm9vbCBDQ1NpbmdsZVRo
cmVhZFByb3h5Ojpjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJl
Y3QmIHJlY3QKICAgICBUUkFDRV9FVkVOVCgiQ0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tcG9zaXRl
QW5kUmVhZGJhY2siLCB0aGlzLCAwKTsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNNYWluVGhyZWFk
KCkpOwogCisgICAgU2NvcGVkRW5zdXJlRnJhbWVidWZmZXJBbGxvY2F0aW9uIGVuc3VyZUZyYW1l
YnVmZmVyKG1fbGF5ZXJUcmVlSG9zdEltcGwtPmxheWVyUmVuZGVyZXIoKSk7CisKICAgICBpZiAo
IWNvbW1pdElmTmVlZGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94
eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Ro
cmVhZFByb3h5LmNwcAppbmRleCBlNDE3M2E4YWQ2MTEzZjdlZGM0YjkwMmFiMGE3Zjg1MDg2M2Ex
NDVmLi44MjcwNzQwZDAwNjlkODFhNDNlZDA2MzY3NDkzMWVkYmMxMzNkNDFkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFBy
b3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RocmVhZFByb3h5LmNwcApAQCAtOTEsNiArOTEsOCBAQCBib29sIENDVGhyZWFkUHJveHk6
OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYgcmVjdCkK
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVChtX2xheWVyVHJlZUhvc3Qp
OwogCisgICAgU2NvcGVkRW5zdXJlRnJhbWVidWZmZXJBbGxvY2F0aW9uIGVuc3VyZUZyYW1lYnVm
ZmVyKG1fbGF5ZXJUcmVlSG9zdEltcGwtPmxheWVyUmVuZGVyZXIoKSk7CisKICAgICBpZiAoIW1f
bGF5ZXJSZW5kZXJlckluaXRpYWxpemVkKSB7CiAgICAgICAgIFRSQUNFX0VWRU5UKCJjb21wb3Np
dGVBbmRSZWFkYmFja19FYXJseU91dF9MUl9VbmluaXRpYWxpemVkIiwgdGhpcywgMCk7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IGUyNjdh
NWJkM2RiOTNjZGIyYzdmODkyYzIxNmI4OTcyZjMzMzdmMmEuLjg4OTQyOWJkOTIzODAxZDYzMTc2
ZmJkMDEyNjcwNTQ2ZTI2ODhlNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAt
MTA1LDYgKzEwNSw3IEBACiAgICAgICAgICAgICAndGVzdHMvS2V5Ym9hcmRUZXN0LmNwcCcsCiAg
ICAgICAgICAgICAndGVzdHMvS1VSTFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9MYXll
ckNocm9taXVtVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0xheWVyUmVuZGVyZXJDaHJv
bWl1bVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9MYXllclRleHR1cmVVcGRhdGVyVGVz
dC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0xldmVsREJUZXN0LmNwcCcsCiAgICAgICAgICAg
ICAndGVzdHMvTG9jYWxpemVkTnVtYmVySUNVVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJSZW5kZXJlckNocm9taXVtVGVzdC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZmEwMTVhNWRjZmYxMTgyNWZkYmM1OTE3ZGMwNjA5YTQyYmJkYTJmNwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJSZW5kZXJl
ckNocm9taXVtVGVzdC5jcHAKQEAgLTAsMCArMSwxOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKKworI2lu
Y2x1ZGUgIkZha2VXZWJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCisKKyNpbmNs
dWRlIDxnbW9jay9nbW9jay5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworY2xhc3MgRnJhbWVD
b3VudGluZ01lbW9yeUFsbG9jYXRpb25TZXR0aW5nQ29udGV4dCA6IHB1YmxpYyBGYWtlV2ViR3Jh
cGhpY3NDb250ZXh0M0QgeworcHVibGljOgorICAgIEZyYW1lQ291bnRpbmdNZW1vcnlBbGxvY2F0
aW9uU2V0dGluZ0NvbnRleHQoKSA6IG1fZnJhbWUoMCkgeyB9CisKKyAgICAvLyBUaGlzIG1ldGhv
ZCB3b3VsZCBub3JtYWxseSBkbyBhIGdsU3dhcEJ1ZmZlcnMgdW5kZXIgdGhlIGhvb2QuCisgICAg
dmlydHVhbCB2b2lkIHByZXBhcmVUZXh0dXJlKCkgeyBtX2ZyYW1lKys7IH0KKworICAgIGludCBm
cmFtZUNvdW50KCkgeyByZXR1cm4gbV9mcmFtZTsgfQorCisgICAgdmlydHVhbCB2b2lkIHNldE1l
bW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tDSFJPTUlVTShXZWJHcmFwaGljc01lbW9yeUFs
bG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tDSFJPTUlVTSogY2FsbGJhY2spIHsgbV9tZW1vcnlBbGxv
Y2F0aW9uQ2hhbmdlZENhbGxiYWNrID0gY2FsbGJhY2s7IH0KKworICAgIHZvaWQgc2V0TWVtb3J5
QWxsb2NhdGlvbihXZWJHcmFwaGljc01lbW9yeUFsbG9jYXRpb24gYWxsb2NhdGlvbikgeyBtX21l
bW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2stPm9uTWVtb3J5QWxsb2NhdGlvbkNoYW5nZWQo
YWxsb2NhdGlvbik7IH0KKworICAgIHZpcnR1YWwgV2ViU3RyaW5nIGdldFN0cmluZyhXZWJLaXQ6
OldHQzNEZW51bSBuYW1lKQorICAgIHsKKyAgICAgICAgaWYgKG5hbWUgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkVYVEVOU0lPTlMpCisgICAgICAgICAgICByZXR1cm4gV2ViU3RyaW5nKCJHTF9DSFJP
TUlVTV9zZXRfdmlzaWJpbGl0eSBHTF9DSFJPTUlVTV9ncHVfbWVtb3J5X21hbmFnZXIgR0xfRVhU
X2Rpc2NhcmRfZnJhbWVidWZmZXIiKTsKKyAgICAgICAgcmV0dXJuIFdlYlN0cmluZygpOworICAg
IH0KKworCitwcml2YXRlOgorICAgIGludCBtX2ZyYW1lOworICAgIFdlYkdyYXBoaWNzTWVtb3J5
QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNKiBtX21lbW9yeUFsbG9jYXRpb25DaGFu
Z2VkQ2FsbGJhY2s7Cit9OworCitjbGFzcyBGYWtlTGF5ZXJSZW5kZXJlckNocm9taXVtQ2xpZW50
IDogcHVibGljIExheWVyUmVuZGVyZXJDaHJvbWl1bUNsaWVudCB7CitwdWJsaWM6CisgICAgRmFr
ZUxheWVyUmVuZGVyZXJDaHJvbWl1bUNsaWVudCgpIHsgcmVzZXQoKTsgfQorCisgICAgdmlydHVh
bCBjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUoKSBjb25zdCB7IHN0YXRpYyBJbnRTaXplIGZh
a2VTaXplOyByZXR1cm4gZmFrZVNpemU7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IENDU2V0dGluZ3Mm
IHNldHRpbmdzKCkgY29uc3QgeyBzdGF0aWMgQ0NTZXR0aW5ncyBmYWtlU2V0dGluZ3M7IHJldHVy
biBmYWtlU2V0dGluZ3M7IH0KKyAgICB2aXJ0dWFsIENDTGF5ZXJJbXBsKiByb290TGF5ZXIoKSB7
IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBjb25zdCBDQ0xheWVySW1wbCogcm9vdExheWVyKCkg
Y29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRMb3NlQ29udGV4dCgpIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBvblN3YXBCdWZmZXJzQ29tcGxldGUoKSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgc2V0RnVsbFJvb3RMYXllckRhbWFnZSgpIHsgbV9kaWRTZXRGdWxsUm9vdExheWVy
RGFtYWdlID0gdHJ1ZTsgfQorCisgICAgdm9pZCByZXNldCgpCisgICAgeworICAgICAgICBtX2Rp
ZFNldEZ1bGxSb290TGF5ZXJEYW1hZ2UgPSBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIG1fZGlk
U2V0RnVsbFJvb3RMYXllckRhbWFnZTsKK307CisKK2NsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1
bVRlc3QgOiBwdWJsaWMgTGF5ZXJSZW5kZXJlckNocm9taXVtIHsKK3B1YmxpYzoKKyAgICBMYXll
clJlbmRlcmVyQ2hyb21pdW1UZXN0KExheWVyUmVuZGVyZXJDaHJvbWl1bUNsaWVudCogY2xpZW50
LCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KSA6IExheWVyUmVuZGVyZXJD
aHJvbWl1bShjbGllbnQsIGNvbnRleHQpIHsgfQorCisgICAgLy8gQ2hhbmdpbmcgdmlzaWJpbGl0
eSB0byBwdWJsaWMuCisgICAgdXNpbmcgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXpl
OworfTsKKworLy8gVGhpcyB0ZXN0cyB0aGUgTGF5ZXJSZW5kZXJlckNocm9taXVtIGRpc2NhcmRG
cmFtZWJ1ZmZlciBmdW5jdGlvbmFsaXR5LiBTcGVjaWZpY2FsbHk6CisvLyAxLiBXaWxsIGNhbGwg
ZGlzY2FyZEZyYW1lYnVmZmVyIHdoZW4gZ2l2ZW4gYSBtZW1vcnkgYWxsb2NhdGlvbiByZXF1ZXN0
IHRvIGRvIHNvLgorLy8gICAgV2lsbCBhbHNvIGNhbGwgc2V0RnVsbFJvb3RMYXllckRhbWFnZSB3
aGVuZXZlciB0aGlzIGhhcHBlbnMsIHRvIG1ha2Ugc3VyZSBhIGZ1bGwgZnJhbWUgaXMgZHJhd24g
YWdhaW4gb25jZSBidWZmZXIgaXMgcmVhbGxvY2F0ZWQuCisvLyAyLiBXaWxsIG5vdCBzd2FwIGZy
YW1lcyB3aGlsZSBmcmFtZWJ1ZmZlciBpcyBkaXNjYXJkZWQuIEluc3RlYWQsIGl0IHdpbGwgY2Fs
bCBzZXRGdWxsUm9vdExheWVyRGFtYWdlLgorLy8gMy4gV2lsbCByZXN1bWUgc3dhcHBpbmcgZnJh
bWVzIGFzIG5vcm1hbCBvbmNlIGZyYW1lYnVmZmVyIGlzIHJlY3JlYXRlZC4KKy8vIDQuIFdpbGwg
Y2FsbCBlbnN1cmVGcmFtZWJ1ZmZlciB3aGVuZXZlciBtYWRlIHZpc2libGUuCisvLyA1LiBDcmVh
dGluZyBhIFNjb3BlZEVuc3VyZUZyYW1lYnVmZmVyQWxsb2NhdGlvbiB3aWxsIGNhbGwgZW5zdXJl
RnJhbWVidWZmZXIvZGlzY2FyZEZyYW1lYnVmZmVyIGlmIGFuZCBvbmx5IGlmIGl0IHdhcyBkaXNj
YXJkZWQuCitURVNUKExheWVyUmVuZGVyZXJDaHJvbWl1bVRlc3QsIERpc2NhcmRGcmFtZWJ1ZmZl
clRlc3RzKQoreworICAgIFdlYkdyYXBoaWNzTWVtb3J5QWxsb2NhdGlvbiBzdWdnZXN0SGF2ZUJh
Y2tidWZmZXJZZXMoMSwgdHJ1ZSk7CisgICAgV2ViR3JhcGhpY3NNZW1vcnlBbGxvY2F0aW9uIHN1
Z2dlc3RIYXZlQmFja2J1ZmZlck5vKDEsIGZhbHNlKTsKKworICAgIFJlZlB0cjxHcmFwaGljc0Nv
bnRleHQzRD4gY29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhp
Y3NDb250ZXh0RnJvbVdlYkNvbnRleHQoYWRvcHRQdHIobmV3IEZyYW1lQ291bnRpbmdNZW1vcnlB
bGxvY2F0aW9uU2V0dGluZ0NvbnRleHQoKSksIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJl
Y3RseVRvSG9zdFdpbmRvdyk7CisKKyAgICBGcmFtZUNvdW50aW5nTWVtb3J5QWxsb2NhdGlvblNl
dHRpbmdDb250ZXh0JiBtb2NrQ29udGV4dCA9ICpzdGF0aWNfY2FzdDxGcmFtZUNvdW50aW5nTWVt
b3J5QWxsb2NhdGlvblNldHRpbmdDb250ZXh0Kj4oR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpl
eHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0QoY29udGV4dC5nZXQoKSkpOworICAgIEZha2VMYXll
clJlbmRlcmVyQ2hyb21pdW1DbGllbnQgY2xpZW50OworICAgIExheWVyUmVuZGVyZXJDaHJvbWl1
bVRlc3QgbGF5ZXJSZW5kZXJlckNocm9taXVtKCZjbGllbnQsIGNvbnRleHQucmVsZWFzZSgpKTsK
KworICAgIGxheWVyUmVuZGVyZXJDaHJvbWl1bS5pbml0aWFsaXplKCk7CisKKyAgICAvLyBGaXJz
dCwgdGhlIGJhc2UgY2FzZS4KKyAgICBsYXllclJlbmRlcmVyQ2hyb21pdW0uc3dhcEJ1ZmZlcnMo
SW50UmVjdCgpKTsKKyAgICBFWFBFQ1RfRVEoMSwgbW9ja0NvbnRleHQuZnJhbWVDb3VudCgpKTsK
KyAgICBFWFBFQ1RfRkFMU0UoY2xpZW50Lm1fZGlkU2V0RnVsbFJvb3RMYXllckRhbWFnZSk7Cisg
ICAgRVhQRUNUX0ZBTFNFKGxheWVyUmVuZGVyZXJDaHJvbWl1bS5pc0ZyYW1lYnVmZmVyRGlzY2Fy
ZGVkKCkpOworICAgIGNsaWVudC5yZXNldCgpOworCisgICAgLy8gU2VuZCBzdWdnZXN0SGF2ZUJh
Y2tidWZmZXJZZXMgYWxsb2NhdGlvbiwgYW5kIGV4cGVjdCBubyBkaWZmZXJlbmNlLgorICAgIG1v
Y2tDb250ZXh0LnNldE1lbW9yeUFsbG9jYXRpb24oc3VnZ2VzdEhhdmVCYWNrYnVmZmVyWWVzKTsK
KyAgICBsYXllclJlbmRlcmVyQ2hyb21pdW0uc3dhcEJ1ZmZlcnMoSW50UmVjdCgpKTsKKyAgICBF
WFBFQ1RfRVEoMiwgbW9ja0NvbnRleHQuZnJhbWVDb3VudCgpKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
Y2xpZW50Lm1fZGlkU2V0RnVsbFJvb3RMYXllckRhbWFnZSk7CisgICAgRVhQRUNUX0ZBTFNFKGxh
eWVyUmVuZGVyZXJDaHJvbWl1bS5pc0ZyYW1lYnVmZmVyRGlzY2FyZGVkKCkpOworICAgIGNsaWVu
dC5yZXNldCgpOworCisgICAgLy8gU2VuZCBzdWdnZXN0SGF2ZUJhY2tidWZmZXJObyBhbGxvY2F0
aW9uLgorICAgIG1vY2tDb250ZXh0LnNldE1lbW9yeUFsbG9jYXRpb24oc3VnZ2VzdEhhdmVCYWNr
YnVmZmVyTm8pOworICAgIEVYUEVDVF9UUlVFKGNsaWVudC5tX2RpZFNldEZ1bGxSb290TGF5ZXJE
YW1hZ2UpOworICAgIEVYUEVDVF9UUlVFKGxheWVyUmVuZGVyZXJDaHJvbWl1bS5pc0ZyYW1lYnVm
ZmVyRGlzY2FyZGVkKCkpOworICAgIGNsaWVudC5yZXNldCgpOworCisgICAgLy8gUmVzZXQgYmFj
ayB0byBzdWdnZXN0SGF2ZUJhY2tidWZmZXJObyBhbGxvY2F0aW9uLgorICAgIG1vY2tDb250ZXh0
LnNldE1lbW9yeUFsbG9jYXRpb24oc3VnZ2VzdEhhdmVCYWNrYnVmZmVyWWVzKTsKKyAgICBFWFBF
Q1RfRkFMU0UoY2xpZW50Lm1fZGlkU2V0RnVsbFJvb3RMYXllckRhbWFnZSk7CisgICAgRVhQRUNU
X0ZBTFNFKGxheWVyUmVuZGVyZXJDaHJvbWl1bS5pc0ZyYW1lYnVmZmVyRGlzY2FyZGVkKCkpOwor
ICAgIGNsaWVudC5yZXNldCgpOworCisgICAgLy8gTWFrZSBzdXJlIGl0IGhhcyByZXN1bWVkIGZ1
bmN0aW9uIGFzIG5vcm1hbC4KKyAgICBsYXllclJlbmRlcmVyQ2hyb21pdW0uc3dhcEJ1ZmZlcnMo
SW50UmVjdCgpKTsKKyAgICBFWFBFQ1RfRVEoMywgbW9ja0NvbnRleHQuZnJhbWVDb3VudCgpKTsK
KyAgICBFWFBFQ1RfRkFMU0UoY2xpZW50Lm1fZGlkU2V0RnVsbFJvb3RMYXllckRhbWFnZSk7Cisg
ICAgRVhQRUNUX0ZBTFNFKGxheWVyUmVuZGVyZXJDaHJvbWl1bS5pc0ZyYW1lYnVmZmVyRGlzY2Fy
ZGVkKCkpOworICAgIGNsaWVudC5yZXNldCgpOworCisgICAgLy8gTWFrZSBzdXJlIHN3YXBzIGFy
ZSBpZ25vcmVkIHdoaWxlIGZyYW1lYnVmZmVyIGlzIGRyb3BlZCwgYW5kIHRoYXQgc2V0RnVsbFJv
b3RMYXllckRhbWFnZSBpcyBjYWxsZWQuCisgICAgbW9ja0NvbnRleHQuc2V0TWVtb3J5QWxsb2Nh
dGlvbihzdWdnZXN0SGF2ZUJhY2tidWZmZXJObyk7CisgICAgRVhQRUNUX1RSVUUoY2xpZW50Lm1f
ZGlkU2V0RnVsbFJvb3RMYXllckRhbWFnZSk7CisgICAgRVhQRUNUX1RSVUUobGF5ZXJSZW5kZXJl
ckNocm9taXVtLmlzRnJhbWVidWZmZXJEaXNjYXJkZWQoKSk7CisgICAgY2xpZW50LnJlc2V0KCk7
CisgICAgbGF5ZXJSZW5kZXJlckNocm9taXVtLnN3YXBCdWZmZXJzKEludFJlY3QoKSk7CisgICAg
RVhQRUNUX0VRKDMsIG1vY2tDb250ZXh0LmZyYW1lQ291bnQoKSk7CisgICAgRVhQRUNUX1RSVUUo
Y2xpZW50Lm1fZGlkU2V0RnVsbFJvb3RMYXllckRhbWFnZSk7CisgICAgRVhQRUNUX1RSVUUobGF5
ZXJSZW5kZXJlckNocm9taXVtLmlzRnJhbWVidWZmZXJEaXNjYXJkZWQoKSk7CisgICAgY2xpZW50
LnJlc2V0KCk7CisKKyAgICAvLyBNYWtlIHN1cmUgc2V0dGluZyB2aXNpYmlsaXR5IHJlY3JlYXRl
cyB0aGUgZnJhbWVidWZmZXIuCisgICAgbGF5ZXJSZW5kZXJlckNocm9taXVtLnNldFZpc2libGUo
dHJ1ZSk7CisgICAgRVhQRUNUX0ZBTFNFKGNsaWVudC5tX2RpZFNldEZ1bGxSb290TGF5ZXJEYW1h
Z2UpOworICAgIEVYUEVDVF9GQUxTRShsYXllclJlbmRlcmVyQ2hyb21pdW0uaXNGcmFtZWJ1ZmZl
ckRpc2NhcmRlZCgpKTsKKyAgICBjbGllbnQucmVzZXQoKTsKKworICAgIC8vIE1ha2Ugc3VyZSBT
Y29wZWRFbnN1cmVGcmFtZWJ1ZmZlckFsbG9jYXRpb24gd29ya3MgdG8gcmVzZXQgZnJhbWVidWZm
ZXIuCisgICAgbW9ja0NvbnRleHQuc2V0TWVtb3J5QWxsb2NhdGlvbihzdWdnZXN0SGF2ZUJhY2ti
dWZmZXJObyk7CisgICAgRVhQRUNUX1RSVUUoY2xpZW50Lm1fZGlkU2V0RnVsbFJvb3RMYXllckRh
bWFnZSk7CisgICAgRVhQRUNUX1RSVUUobGF5ZXJSZW5kZXJlckNocm9taXVtLmlzRnJhbWVidWZm
ZXJEaXNjYXJkZWQoKSk7CisgICAgY2xpZW50LnJlc2V0KCk7CisgICAgeworICAgICAgICBTY29w
ZWRFbnN1cmVGcmFtZWJ1ZmZlckFsbG9jYXRpb24gZW5zdXJlRnJhbWVidWZmZXIoJmxheWVyUmVu
ZGVyZXJDaHJvbWl1bSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShsYXllclJlbmRlcmVyQ2hyb21p
dW0uaXNGcmFtZWJ1ZmZlckRpc2NhcmRlZCgpKTsKKyAgICAgICAgbGF5ZXJSZW5kZXJlckNocm9t
aXVtLnN3YXBCdWZmZXJzKEludFJlY3QoKSk7CisgICAgICAgIEVYUEVDVF9FUSg0LCBtb2NrQ29u
dGV4dC5mcmFtZUNvdW50KCkpOworICAgICAgICBFWFBFQ1RfRkFMU0UoY2xpZW50Lm1fZGlkU2V0
RnVsbFJvb3RMYXllckRhbWFnZSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShsYXllclJlbmRlcmVy
Q2hyb21pdW0uaXNGcmFtZWJ1ZmZlckRpc2NhcmRlZCgpKTsKKyAgICAgICAgY2xpZW50LnJlc2V0
KCk7CisgICAgfQorICAgIEVYUEVDVF9UUlVFKGxheWVyUmVuZGVyZXJDaHJvbWl1bS5pc0ZyYW1l
YnVmZmVyRGlzY2FyZGVkKCkpOworICAgIEVYUEVDVF9UUlVFKGNsaWVudC5tX2RpZFNldEZ1bGxS
b290TGF5ZXJEYW1hZ2UpOworICAgIGNsaWVudC5yZXNldCgpOworCisgICAgLy8gRmluYWxseSwg
bWFrZSBzdXJlIFNjb3BlZEVuc3VyZUZyYW1lYnVmZmVyQWxsb2NhdGlvbiBkb2VzIG5vdGhpbmcg
d2hlbiBmcmFtZWJ1ZmZlciB3YXMgbm90IGFscmVhZHkgZGlzY2FyZGVkLgorICAgIG1vY2tDb250
ZXh0LnNldE1lbW9yeUFsbG9jYXRpb24oc3VnZ2VzdEhhdmVCYWNrYnVmZmVyWWVzKTsKKyAgICBF
WFBFQ1RfRkFMU0UobGF5ZXJSZW5kZXJlckNocm9taXVtLmlzRnJhbWVidWZmZXJEaXNjYXJkZWQo
KSk7CisgICAgRVhQRUNUX0ZBTFNFKGNsaWVudC5tX2RpZFNldEZ1bGxSb290TGF5ZXJEYW1hZ2Up
OworICAgIGNsaWVudC5yZXNldCgpOworICAgIHsKKyAgICAgICAgU2NvcGVkRW5zdXJlRnJhbWVi
dWZmZXJBbGxvY2F0aW9uIGVuc3VyZUZyYW1lYnVmZmVyKCZsYXllclJlbmRlcmVyQ2hyb21pdW0p
OworICAgICAgICBFWFBFQ1RfRkFMU0UobGF5ZXJSZW5kZXJlckNocm9taXVtLmlzRnJhbWVidWZm
ZXJEaXNjYXJkZWQoKSk7CisgICAgICAgIGxheWVyUmVuZGVyZXJDaHJvbWl1bS5zd2FwQnVmZmVy
cyhJbnRSZWN0KCkpOworICAgICAgICBFWFBFQ1RfRVEoNSwgbW9ja0NvbnRleHQuZnJhbWVDb3Vu
dCgpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGNsaWVudC5tX2RpZFNldEZ1bGxSb290TGF5ZXJE
YW1hZ2UpOworICAgICAgICBFWFBFQ1RfRkFMU0UobGF5ZXJSZW5kZXJlckNocm9taXVtLmlzRnJh
bWVidWZmZXJEaXNjYXJkZWQoKSk7CisgICAgICAgIGNsaWVudC5yZXNldCgpOworICAgIH0KKyAg
ICBFWFBFQ1RfRkFMU0UobGF5ZXJSZW5kZXJlckNocm9taXVtLmlzRnJhbWVidWZmZXJEaXNjYXJk
ZWQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGNsaWVudC5tX2RpZFNldEZ1bGxSb290TGF5ZXJEYW1h
Z2UpOworICAgIGNsaWVudC5yZXNldCgpOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133296</attachid>
            <date>2012-03-22 11:08:08 -0700</date>
            <delta_ts>2012-03-22 13:05:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81823-20120322140807.patch</filename>
            <type>text/plain</type>
            <size>28526</size>
            <attacher name="Michal Mocny">mmocny</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExNzMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTExYjUyMmYyODljNzFk
N2ZiNDM5N2YwZGYzNmNjYWFhMDg1Zjc2ZC4uM2MwMmQyNzA4OTM1NDBkZjRhZjVhYWZjM2RmZGI1
YzdhMTE5ZTcxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDEyLTAzLTIyICBNaWNo
YWwgTW9jbnkgIDxtbW9jbnlAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIExheWVy
UmVuZGVyZXJDaHJvbWl1bSBzaG91bGQgdXNlIEdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkIGNh
bGxiYWNrIHRvIGV4cGxpY2l0bHkgbWFuYWdlIGZyYW1lYnVmZmVyLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE4MjMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZXcgVW5pdFRlc3Q6IExheWVyUmVuZGVy
ZXJDaHJvbWl1bVRlc3QuRGlzY2FyZEZyYW1lYnVmZmVyVGVzdHMuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAg
ICAoTGF5ZXJSZW5kZXJlckdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJHcHVNZW1vcnlBbGxvY2F0aW9uQ2hh
bmdlZENhbGxiYWNrQWRhcHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJHcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlcjo6fkxheWVyUmVu
ZGVyZXJHcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlcik6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyR3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFj
a0FkYXB0ZXI6Om9uR3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJSZW5kZXJlckdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVy
OjpMYXllclJlbmRlcmVyR3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXIp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJl
bmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtOjp+TGF5ZXJSZW5kZXJlckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpM
YXllclJlbmRlcmVyQ2hyb21pdW06OnN3YXBCdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZGlzY2FyZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZW5zdXJlRnJhbWVidWZmZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChMYXllclJlbmRlcmVyQ2hyb21pdW1DbGllbnQpOgor
ICAgICAgICAoTGF5ZXJSZW5kZXJlckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
UmVuZGVyZXJDaHJvbWl1bTo6aXNGcmFtZWJ1ZmZlckRpc2NhcmRlZCk6CisgICAgICAgIChTY29w
ZWRFbnN1cmVGcmFtZWJ1ZmZlckFsbG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVk
RW5zdXJlRnJhbWVidWZmZXJBbGxvY2F0aW9uOjpTY29wZWRFbnN1cmVGcmFtZWJ1ZmZlckFsbG9j
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVkRW5zdXJlRnJhbWVidWZmZXJBbGxvY2F0
aW9uOjp+U2NvcGVkRW5zdXJlRnJhbWVidWZmZXJBbGxvY2F0aW9uKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXM6OkxheWVyUmVuZGVyZXJDYXBhYmlsaXRp
ZXMpOgorICAgICAgICAoTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaXNpYmxlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmg6Cisg
ICAgICAgIChDQ0xheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNDU2luZ2xlVGhyZWFkUHJveHk6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKToKKwogMjAxMi0w
My0yMiAgRW1pbCBBIEVrbHVuZCAgPGVhZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZp
ZXdlZCwgdG91Y2hpbmcgZmlsZSB0byBmb3JjZSBib3RzIHRvIHBpY2sgdXAgQ1NTX1NIQURFUlMg
ZmxhZyBjaGFuZ2UuIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA4OGRlYWMzM2EwZDE5
YjM3NDI5ZjVhNjRmZTYyNjJiZjU5ZjI2MzA1Li5mY2I0ZDI4NTEyZmI3ZDY0ZGUyYTY5OTUzNTgw
OTg1OGYwNjVkOTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBA
CisyMDEyLTAzLTIyICBNaWNoYWwgTW9jbnkgIDxtbW9jbnlAZ29vZ2xlLmNvbT4KKworICAgICAg
ICBbY2hyb21pdW1dIExheWVyUmVuZGVyZXJDaHJvbWl1bSBzaG91bGQgdXNlIEdwdU1lbW9yeUFs
bG9jYXRpb25DaGFuZ2VkIGNhbGxiYWNrIHRvIGV4cGxpY2l0bHkgbWFuYWdlIGZyYW1lYnVmZmVy
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE4MjMK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktp
dC5neXBpOgorICAgICAgICAqIHRlc3RzL0xheWVyUmVuZGVyZXJDaHJvbWl1bVRlc3QuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKEZyYW1lQ291bnRpbmdNZW1vcnlBbGxvY2F0aW9uU2V0dGluZ0NvbnRl
eHQpOgorICAgICAgICAoRnJhbWVDb3VudGluZ01lbW9yeUFsbG9jYXRpb25TZXR0aW5nQ29udGV4
dDo6RnJhbWVDb3VudGluZ01lbW9yeUFsbG9jYXRpb25TZXR0aW5nQ29udGV4dCk6CisgICAgICAg
IChGcmFtZUNvdW50aW5nTWVtb3J5QWxsb2NhdGlvblNldHRpbmdDb250ZXh0OjpwcmVwYXJlVGV4
dHVyZSk6CisgICAgICAgIChGcmFtZUNvdW50aW5nTWVtb3J5QWxsb2NhdGlvblNldHRpbmdDb250
ZXh0OjpmcmFtZUNvdW50KToKKyAgICAgICAgKEZyYW1lQ291bnRpbmdNZW1vcnlBbGxvY2F0aW9u
U2V0dGluZ0NvbnRleHQ6OnNldE1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tDSFJPTUlV
TSk6CisgICAgICAgIChGcmFtZUNvdW50aW5nTWVtb3J5QWxsb2NhdGlvblNldHRpbmdDb250ZXh0
OjpzZXRNZW1vcnlBbGxvY2F0aW9uKToKKyAgICAgICAgKEZyYW1lQ291bnRpbmdNZW1vcnlBbGxv
Y2F0aW9uU2V0dGluZ0NvbnRleHQ6OmdldFN0cmluZyk6CisgICAgICAgIChGYWtlTGF5ZXJSZW5k
ZXJlckNocm9taXVtQ2xpZW50KToKKyAgICAgICAgKEZha2VMYXllclJlbmRlcmVyQ2hyb21pdW1D
bGllbnQ6OkZha2VMYXllclJlbmRlcmVyQ2hyb21pdW1DbGllbnQpOgorICAgICAgICAoRmFrZUxh
eWVyUmVuZGVyZXJDaHJvbWl1bUNsaWVudDo6dmlld3BvcnRTaXplKToKKyAgICAgICAgKEZha2VM
YXllclJlbmRlcmVyQ2hyb21pdW1DbGllbnQ6OnNldHRpbmdzKToKKyAgICAgICAgKEZha2VMYXll
clJlbmRlcmVyQ2hyb21pdW1DbGllbnQ6OnJvb3RMYXllcik6CisgICAgICAgIChGYWtlTGF5ZXJS
ZW5kZXJlckNocm9taXVtQ2xpZW50OjpkaWRMb3NlQ29udGV4dCk6CisgICAgICAgIChGYWtlTGF5
ZXJSZW5kZXJlckNocm9taXVtQ2xpZW50OjpvblN3YXBCdWZmZXJzQ29tcGxldGUpOgorICAgICAg
ICAoRmFrZUxheWVyUmVuZGVyZXJDaHJvbWl1bUNsaWVudDo6c2V0RnVsbFJvb3RMYXllckRhbWFn
ZSk6CisgICAgICAgIChGYWtlTGF5ZXJSZW5kZXJlckNocm9taXVtQ2xpZW50OjpyZXNldCk6Cisg
ICAgICAgIChMYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0KToKKyAgICAgICAgKExheWVyUmVuZGVy
ZXJDaHJvbWl1bVRlc3Q6OkxheWVyUmVuZGVyZXJDaHJvbWl1bVRlc3QpOgorICAgICAgICAoVEVT
VCk6CisKIDIwMTItMDMtMjIgIEFkcmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KIAog
ICAgICAgICBbY2hyb21pdW1dIEZpeCBzY3JvbGxiYXIgbGF5ZXJzIGhvbGRpbmcgb250byBpbnZh
bGlkIHRleHR1cmVzIGFmdGVyIGxvc3QgY29udGV4dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5jcHAKaW5kZXggMjdiM2VkZTUxMzI1N2E3YTlmNDZiOWFlMjQ5MjE5NmE2Yzk2Mzk5
MC4uNmRlOTI0MDllNzBjMmU2NGNiZDBjNGJkNTNlNzEzMTM1NDdhOTIxZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC0xNjUsNiArMTY1LDMxIEBAIHByaXZhdGU6
CiAgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBtX2xheWVyUmVuZGVyZXI7CiB9OwogCitjbGFz
cyBMYXllclJlbmRlcmVyR3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXIg
OiBwdWJsaWMgRXh0ZW5zaW9uczNEQ2hyb21pdW06OkdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2Vk
Q2FsbGJhY2tDSFJPTUlVTSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8TGF5ZXJS
ZW5kZXJlckdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyPiBjcmVhdGUo
TGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBMYXllclJlbmRlcmVyR3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRD
YWxsYmFja0FkYXB0ZXIobGF5ZXJSZW5kZXJlcikpOworICAgIH0KKyAgICB2aXJ0dWFsIH5MYXll
clJlbmRlcmVyR3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXIoKSB7IH0K
KworICAgIHZpcnR1YWwgdm9pZCBvbkdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkKEV4dGVuc2lv
bnMzRENocm9taXVtOjpHcHVNZW1vcnlBbGxvY2F0aW9uQ0hST01JVU0gYWxsb2NhdGlvbikKKyAg
ICB7CisgICAgICAgIGlmICghYWxsb2NhdGlvbi5zdWdnZXN0SGF2ZUJhY2tidWZmZXIpCisgICAg
ICAgICAgICBtX2xheWVyUmVuZGVyZXItPmRpc2NhcmRGcmFtZWJ1ZmZlcigpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBtX2xheWVyUmVuZGVyZXItPmVuc3VyZUZyYW1lYnVmZmVyKCk7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIGV4cGxpY2l0IExheWVyUmVuZGVyZXJHcHVNZW1vcnlBbGxv
Y2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlcihMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVy
UmVuZGVyZXIpCisgICAgICAgIDogbV9sYXllclJlbmRlcmVyKGxheWVyUmVuZGVyZXIpCisgICAg
eworICAgIH0KKworICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbV9sYXllclJlbmRlcmVyOwor
fTsKKwogCiBQYXNzT3duUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpjcmVhdGUoTGF5ZXJSZW5kZXJlckNocm9taXVtQ2xpZW50KiBjbGllbnQsIFBhc3NS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQpCiB7CkBAIC0xODQsNiArMjA5LDcgQEAg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0oTGF5ZXJSZW5kZXJl
ckNocm9taXVtQ2xpZW50KiBjbGllbnQKICAgICAsIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UoMCkK
ICAgICAsIG1fc2hhcmVkR2VvbWV0cnlRdWFkKEZsb2F0UmVjdCgtMC41ZiwgLTAuNWYsIDEuMGYs
IDEuMGYpKQogICAgICwgbV9pc1ZpZXdwb3J0Q2hhbmdlZChmYWxzZSkKKyAgICAsIG1faXNGcmFt
ZWJ1ZmZlckRpc2NhcmRlZChmYWxzZSkKIHsKIH0KIApAQCAtMjU5LDYgKzI4NSwxNyBAQCBib29s
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZSgpCiAgICAgaWYgKG1fY2FwYWJpbGl0
aWVzLnVzaW5nVGV4dHVyZVN0b3JhZ2VFeHRlbnNpb24pCiAgICAgICAgIGV4dGVuc2lvbnMtPmVu
c3VyZUVuYWJsZWQoIkdMX0VYVF90ZXh0dXJlX3N0b3JhZ2UiKTsKIAorICAgIG1fY2FwYWJpbGl0
aWVzLnVzaW5nR3B1TWVtb3J5TWFuYWdlciA9IGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9DSFJP
TUlVTV9ncHVfbWVtb3J5X21hbmFnZXIiKTsKKyAgICBpZiAobV9jYXBhYmlsaXRpZXMudXNpbmdH
cHVNZW1vcnlNYW5hZ2VyKSB7CisgICAgICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQoIkdM
X0NIUk9NSVVNX2dwdV9tZW1vcnlfbWFuYWdlciIpOworICAgICAgICBFeHRlbnNpb25zM0RDaHJv
bWl1bSogZXh0ZW5zaW9uczNEQ2hyb21pdW0gPSBzdGF0aWNfY2FzdDxFeHRlbnNpb25zM0RDaHJv
bWl1bSo+KGV4dGVuc2lvbnMpOworICAgICAgICBleHRlbnNpb25zM0RDaHJvbWl1bS0+c2V0R3B1
TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNKExheWVyUmVuZGVyZXJHcHVN
ZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlcjo6Y3JlYXRlKHRoaXMpKTsKKyAg
ICB9CisKKyAgICBtX2NhcGFiaWxpdGllcy51c2luZ0Rpc2NhcmRGcmFtZWJ1ZmZlciA9IGV4dGVu
c2lvbnMtPnN1cHBvcnRzKCJHTF9FWFRfZGlzY2FyZF9mcmFtZWJ1ZmZlciIpOworICAgIGlmICht
X2NhcGFiaWxpdGllcy51c2luZ0Rpc2NhcmRGcmFtZWJ1ZmZlcikKKyAgICAgICAgZXh0ZW5zaW9u
cy0+ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX2Rpc2NhcmRfZnJhbWVidWZmZXIiKTsKKwogICAgIEdM
QyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0
M0Q6Ok1BWF9URVhUVVJFX1NJWkUsICZtX2NhcGFiaWxpdGllcy5tYXhUZXh0dXJlU2l6ZSkpOwog
ICAgIG1fY2FwYWJpbGl0aWVzLmJlc3RUZXh0dXJlRm9ybWF0ID0gUGxhdGZvcm1Db2xvcjo6YmVz
dFRleHR1cmVGb3JtYXQobV9jb250ZXh0LmdldCgpKTsKIApAQCAtMjc3LDYgKzMxNCw3IEBAIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6fkxheWVyUmVuZGVyZXJDaHJvbWl1bSgpCiAgICAgQVNTRVJU
KENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBFeHRlbnNpb25zM0RDaHJvbWl1bSogZXh0
ZW5zaW9uczNEQ2hyb21pdW0gPSBzdGF0aWNfY2FzdDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KG1f
Y29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpKTsKICAgICBleHRlbnNpb25zM0RDaHJvbWl1bS0+c2V0
U3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQ0hST01JVU0obnVsbHB0cik7CisgICAgZXh0ZW5z
aW9uczNEQ2hyb21pdW0tPnNldEdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tDSFJP
TUlVTShudWxscHRyKTsKICAgICBtX2hlYWRzVXBEaXNwbGF5LmNsZWFyKCk7IC8vIEV4cGxpY2l0
bHkgZGVzdHJveSB0aGUgSFVEIGJlZm9yZSB0aGUgVGV4dHVyZU1hbmFnZXIgZGllcy4KICAgICBj
bGVhbnVwU2hhcmVkT2JqZWN0cygpOwogfQpAQCAtMzExLDYgKzM0OSwxMCBAQCB2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCiAgICAgaWYgKCF2aXNp
YmxlKQogICAgICAgICByZWxlYXNlUmVuZGVyU3VyZmFjZVRleHR1cmVzKCk7CiAKKyAgICAvLyBG
SVhNRTogUmVtb3ZlIHRoaXMgb25jZSBmcmFtZWJ1ZmZlciBpcyBhdXRvbWF0aWNhbGx5IHJlY3Jl
YXRlZCBvbiBmaXJzdCB1c2UKKyAgICBpZiAodmlzaWJsZSkKKyAgICAgICAgZW5zdXJlRnJhbWVi
dWZmZXIoKTsKKwogICAgIC8vIFRPRE86IFJlcGxhY2Ugc2V0VmlzaWJpbGl0eUNIUk9NSVVNIHdp
dGggYW4gZXh0ZW5zaW9uIHRvIGV4cGxpY2l0bHkgbWFuYWdlIGZyb250L2JhY2tidWZmZXJzCiAg
ICAgLy8gY3JidWcuY29tLzExNjA0OQogICAgIGlmIChtX2NhcGFiaWxpdGllcy51c2luZ1NldFZp
c2liaWxpdHkpIHsKQEAgLTEwMzEsNiArMTA3MywxMyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZmluaXNoKCkKIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnN3YXBCdWZmZXJz
KGNvbnN0IEludFJlY3QmIHN1YkJ1ZmZlcikKIHsKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMg
b25jZSBncHUgcHJvY2VzcyBzdXBwb3J0cyBpZ25vcmluZyBzd2FwIGJ1ZmZlcnMgY29tbWFuZCB3
aGlsZSBmcmFtZWJ1ZmZlciBpcyBkaXNjYXJkZWQuCisgICAgLy8gICAgICAgIEFsdGVybmF0aXZl
bHkgKHByZWZlcmFibHk/KSwgcHJvdGVjdCBhbGwgY2MgY29kZSBzbyBhcyBub3QgdG8gYXR0ZW1w
dCBhIHN3YXAgYWZ0ZXIgYSBmcmFtZWJ1ZmZlciBkaXNjYXJkLgorICAgIGlmIChtX2lzRnJhbWVi
dWZmZXJEaXNjYXJkZWQpIHsKKyAgICAgICAgbV9jbGllbnQtPnNldEZ1bGxSb290TGF5ZXJEYW1h
Z2UoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIFRSQUNFX0VWRU5UKCJMYXllclJl
bmRlcmVyQ2hyb21pdW06OnN3YXBCdWZmZXJzIiwgdGhpcywgMCk7CiAgICAgLy8gV2UncmUgZG9u
ZSEgVGltZSB0byBzd2FwYnVmZmVycyEKIApAQCAtMTA1NCw2ICsxMTAzLDM4IEBAIHZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpvblN3YXBCdWZmZXJzQ29tcGxldGUoKQogICAgIG1fY2xpZW50
LT5vblN3YXBCdWZmZXJzQ29tcGxldGUoKTsKIH0KIAordm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmRpc2NhcmRGcmFtZWJ1ZmZlcigpCit7CisgICAgaWYgKG1faXNGcmFtZWJ1ZmZlckRpc2Nh
cmRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2NhcGFiaWxpdGllcy51c2luZ0Rp
c2NhcmRGcmFtZWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgRXh0ZW5zaW9uczNEKiBl
eHRlbnNpb25zID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCk7CisgICAgRXh0ZW5zaW9uczNE
Q2hyb21pdW0qIGV4dGVuc2lvbnMzRENocm9taXVtID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNE
Q2hyb21pdW0qPihleHRlbnNpb25zKTsKKyAgICAvLyBGSVhNRTogVXBkYXRlIGF0dGFjaG1lbnRz
IGFyZ3VtZW50IHRvIGFwcHJvcHJpYXRlIHZhbHVlcyBvbmNlIHRoZXkgYXJlIG5vIGxvbmdlciBp
Z25vcmVkLgorICAgIGV4dGVuc2lvbnMzRENocm9taXVtLT5kaXNjYXJkRnJhbWVidWZmZXJFWFQo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIDApOworICAgIG1faXNGcmFtZWJ1ZmZl
ckRpc2NhcmRlZCA9IHRydWU7CisKKyAgICAvLyBEYW1hZ2UgdHJhY2tlciBuZWVkcyBhIGZ1bGwg
cmVzZXQgZXZlcnkgdGltZSBmcmFtZWJ1ZmZlciBpcyBkaXNjYXJkZWQuCisgICAgbV9jbGllbnQt
PnNldEZ1bGxSb290TGF5ZXJEYW1hZ2UoKTsKK30KKwordm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmVuc3VyZUZyYW1lYnVmZmVyKCkKK3sKKyAgICBpZiAoIW1faXNGcmFtZWJ1ZmZlckRpc2Nh
cmRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2NhcGFiaWxpdGllcy51c2luZ0Rp
c2NhcmRGcmFtZWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgRXh0ZW5zaW9uczNEKiBl
eHRlbnNpb25zID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCk7CisgICAgRXh0ZW5zaW9uczNE
Q2hyb21pdW0qIGV4dGVuc2lvbnMzRENocm9taXVtID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNE
Q2hyb21pdW0qPihleHRlbnNpb25zKTsKKyAgICBleHRlbnNpb25zM0RDaHJvbWl1bS0+ZW5zdXJl
RnJhbWVidWZmZXJDSFJPTUlVTSgpOworICAgIG1faXNGcmFtZWJ1ZmZlckRpc2NhcmRlZCA9IGZh
bHNlOworfQorCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Z2V0RnJhbWVidWZmZXJQaXhl
bHModm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIEFTU0VSVChyZWN0
Lm1heFgoKSA8PSB2aWV3cG9ydFdpZHRoKCkgJiYgcmVjdC5tYXhZKCkgPD0gdmlld3BvcnRIZWln
aHQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IDUyZWE4N2MxMzNi
MTU3ZjFhNWUwYTg4MjBhZGRmNjMxNjFmMDhkNjMuLjYxYzFkNGE4NzdiZWJjY2ZhNWRhMWZkMWRl
YjY0MjMxOTIyYTJjNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC02
MSw2ICs2MSw3IEBAIGNsYXNzIEdlb21ldHJ5QmluZGluZzsKIGNsYXNzIEdyYXBoaWNzQ29udGV4
dDNEOwogY2xhc3MgVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yOwogY2xhc3MgTGF5ZXJSZW5kZXJl
clN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0FkYXB0ZXI7CitjbGFzcyBTY29wZWRFbnN1cmVG
cmFtZWJ1ZmZlckFsbG9jYXRpb247CiAKIGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bUNsaWVu
dCB7CiBwdWJsaWM6CkBAIC03MCw2ICs3MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGNvbnN0
IENDTGF5ZXJJbXBsKiByb290TGF5ZXIoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRp
ZExvc2VDb250ZXh0KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBvblN3YXBCdWZmZXJzQ29tcGxl
dGUoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEZ1bGxSb290TGF5ZXJEYW1hZ2UoKSA9IDA7
CiB9OwogCiAvLyBDbGFzcyB0aGF0IGhhbmRsZXMgZHJhd2luZyBvZiBjb21wb3NpdGVkIHJlbmRl
ciBsYXllcnMgdXNpbmcgR0wuCkBAIC0xNjAsMTAgKzE2MiwxNSBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IG9wYWNp
dHksIGNvbnN0IEZsb2F0UXVhZCYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXRy
aXhMb2NhdGlvbiwgaW50IGFscGhhTG9jYXRpb24sIGludCBxdWFkTG9jYXRpb24pOwogCi1wcml2
YXRlOgorICAgIHZvaWQgZGlzY2FyZEZyYW1lYnVmZmVyKCk7CisgICAgdm9pZCBlbnN1cmVGcmFt
ZWJ1ZmZlcigpOworICAgIGJvb2wgaXNGcmFtZWJ1ZmZlckRpc2NhcmRlZCgpIGNvbnN0IHsgcmV0
dXJuIG1faXNGcmFtZWJ1ZmZlckRpc2NhcmRlZDsgfQorCitwcm90ZWN0ZWQ6CiAgICAgTGF5ZXJS
ZW5kZXJlckNocm9taXVtKExheWVyUmVuZGVyZXJDaHJvbWl1bUNsaWVudCosIFBhc3NSZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+KTsKICAgICBib29sIGluaXRpYWxpemUoKTsKIAorcHJpdmF0ZToK
ICAgICB2b2lkIGRyYXdRdWFkKGNvbnN0IENDRHJhd1F1YWQqLCBjb25zdCBGbG9hdFJlY3QmIHN1
cmZhY2VEYW1hZ2VSZWN0KTsKICAgICB2b2lkIGRyYXdEZWJ1Z0JvcmRlclF1YWQoY29uc3QgQ0NE
ZWJ1Z0JvcmRlckRyYXdRdWFkKik7CiAgICAgdm9pZCBkcmF3UmVuZGVyU3VyZmFjZVF1YWQoY29u
c3QgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQqKTsKQEAgLTI1NCw4ICsyNjEsMzcgQEAgcHJpdmF0
ZToKICAgICBGbG9hdFF1YWQgbV9zaGFyZWRHZW9tZXRyeVF1YWQ7CiAKICAgICBib29sIG1faXNW
aWV3cG9ydENoYW5nZWQ7CisgICAgYm9vbCBtX2lzRnJhbWVidWZmZXJEaXNjYXJkZWQ7CiB9Owog
CisvLyBUaGUgcHVycG9zZSBvZiB0aGlzIGhlbHBlciBpcyB0d29mb2xkOgorLy8gMS4gVG8gZW5z
dXJlIHRoYXQgYSBmcmFtZWJ1ZmZlciBpcyBhdmFpbGFibGUgZm9yIHNjb3BlIGxpZmV0aW1lLCBh
bmQKKy8vIDIuIFRvIHJlc2V0IGZyYW1lYnVmZmVyIGFsbG9jYXRpb24gdG8gcHJldmlvdXMgc3Rh
dGUgb24gc2NvcGUgZXhpdC4KKy8vIElmIHRoZSBmcmFtZWJ1ZmZlciBpcyByZWNyZWF0ZWQsIGl0
cyBjb250ZW50cyBhcmUgdW5kZWZpbmVkLgorLy8gRklYTUU6IFByZXZlbnQvZGVsYXkgZGlzY2Fy
ZGluZyBmcmFtZWJ1ZmZlciB2aWEgYW55IG1lYW5zIHdoaWxlIGFueQorLy8gaW5zdGFuY2Ugb2Yg
dGhpcyBpcyBhbGl2ZS4gQXQgdGhlIG1vbWVudCwgdGhpcyBpc24ndCBhbiBpc3N1ZS4KK2NsYXNz
IFNjb3BlZEVuc3VyZUZyYW1lYnVmZmVyQWxsb2NhdGlvbiB7CitwdWJsaWM6CisgICAgZXhwbGlj
aXQgU2NvcGVkRW5zdXJlRnJhbWVidWZmZXJBbGxvY2F0aW9uKExheWVyUmVuZGVyZXJDaHJvbWl1
bSogbGF5ZXJSZW5kZXJlcikKKyAgICAgICAgOiBtX2xheWVyUmVuZGVyZXIobGF5ZXJSZW5kZXJl
cikKKyAgICAgICAgLCBtX2ZyYW1lYnVmZmVyV2FzSW5pdGlhbGx5RGlzY2FyZGVkKGxheWVyUmVu
ZGVyZXItPmlzRnJhbWVidWZmZXJEaXNjYXJkZWQoKSkKKyAgICB7CisgICAgICAgIGlmIChtX2Zy
YW1lYnVmZmVyV2FzSW5pdGlhbGx5RGlzY2FyZGVkKQorICAgICAgICAgICAgbV9sYXllclJlbmRl
cmVyLT5lbnN1cmVGcmFtZWJ1ZmZlcigpOworICAgIH0KKworICAgIH5TY29wZWRFbnN1cmVGcmFt
ZWJ1ZmZlckFsbG9jYXRpb24oKQorICAgIHsKKyAgICAgICAgaWYgKG1fZnJhbWVidWZmZXJXYXNJ
bml0aWFsbHlEaXNjYXJkZWQpCisgICAgICAgICAgICBtX2xheWVyUmVuZGVyZXItPmRpc2NhcmRG
cmFtZWJ1ZmZlcigpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBMYXllclJlbmRlcmVyQ2hyb21p
dW0qIG1fbGF5ZXJSZW5kZXJlcjsKKyAgICBib29sIG1fZnJhbWVidWZmZXJXYXNJbml0aWFsbHlE
aXNjYXJkZWQ7Cit9OworCisKIC8vIFNldHRpbmcgREVCVUdfR0xfQ0FMTFMgdG8gMSB3aWxsIGNh
bGwgZ2xHZXRFcnJvcigpIGFmdGVyIGFsbW9zdCBldmVyeSBHTAogLy8gY2FsbCBtYWRlIGJ5IHRo
ZSBjb21wb3NpdG9yLiBVc2VmdWwgZm9yIGRlYnVnZ2luZyByZW5kZXJpbmcgaXNzdWVzIGJ1dAog
Ly8gd2lsbCBzaWduaWZpY2FudGx5IGRlZ3JhZGUgcGVyZm9ybWFuY2UuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5oCmluZGV4IDlmNzgwYTdhZTc3YWExZThlMTUxMzdhMWRiOGY5ZjBmOTBiZjhj
YWIuLjczOTBlYzM0YTllN2I4ZDAzMDZiM2Q2Njk0NjExZTAwYTRkNzI3NjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5oCkBAIC0xMDIsNiArMTAyLDggQEAgc3RydWN0IExheWVyUmVuZGVy
ZXJDYXBhYmlsaXRpZXMgewogICAgICAgICAsIHVzaW5nU3dhcENvbXBsZXRlQ2FsbGJhY2soZmFs
c2UpCiAgICAgICAgICwgdXNpbmdUZXh0dXJlVXNhZ2VIaW50KGZhbHNlKQogICAgICAgICAsIHVz
aW5nVGV4dHVyZVN0b3JhZ2VFeHRlbnNpb24oZmFsc2UpCisgICAgICAgICwgdXNpbmdHcHVNZW1v
cnlNYW5hZ2VyKGZhbHNlKQorICAgICAgICAsIHVzaW5nRGlzY2FyZEZyYW1lYnVmZmVyKGZhbHNl
KQogICAgICAgICAsIG1heFRleHR1cmVTaXplKDApIHsgfQogCiAgICAgR0MzRGVudW0gYmVzdFRl
eHR1cmVGb3JtYXQ7CkBAIC0xMTMsNiArMTE1LDggQEAgc3RydWN0IExheWVyUmVuZGVyZXJDYXBh
YmlsaXRpZXMgewogICAgIGJvb2wgdXNpbmdTd2FwQ29tcGxldGVDYWxsYmFjazsKICAgICBib29s
IHVzaW5nVGV4dHVyZVVzYWdlSGludDsKICAgICBib29sIHVzaW5nVGV4dHVyZVN0b3JhZ2VFeHRl
bnNpb247CisgICAgYm9vbCB1c2luZ0dwdU1lbW9yeU1hbmFnZXI7CisgICAgYm9vbCB1c2luZ0Rp
c2NhcmRGcmFtZWJ1ZmZlcjsKICAgICBpbnQgbWF4VGV4dHVyZVNpemU7CiB9OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IDQ0M2ExZmZhYTc3YmEwZWU1MjAy
OWRmMGUzYWIxNDk2N2Y0YzUyZGIuLjlkZmZlZTM1M2FlZTBlZTIwNzM0MmRkN2RjMzRjZWQxNTZj
NGNhMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC00ODAs
MTEgKzQ4MCw2IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0VmlzaWJsZShib29sIHZp
c2libGUpCiAKICAgICBtX2xheWVyUmVuZGVyZXItPnNldFZpc2libGUodmlzaWJsZSk7CiAKLSAg
ICAvLyBSZXNldCB0aGUgZGFtYWdlIHRyYWNrZXIgYmVjYXVzZSB0aGUgZnJvbnQvYmFjayBidWZm
ZXJzIG1heSBoYXZlIGJlZW4gZGFtYWdlZCBieSB0aGUgR1BVCi0gICAgLy8gcHJvY2VzcyBvbiB2
aXNpYmlsaXR5IGNoYW5nZS4KLSAgICBpZiAodmlzaWJsZSAmJiBtX2xheWVyUmVuZGVyZXItPmNh
cGFiaWxpdGllcygpLnVzaW5nUGFydGlhbFN3YXApCi0gICAgICAgIHNldEZ1bGxSb290TGF5ZXJE
YW1hZ2UoKTsKLQogICAgIGNvbnN0IGJvb2wgc2hvdWxkVGlja0luQmFja2dyb3VuZCA9ICF2aXNp
YmxlICYmIG1fbmVlZHNBbmltYXRlTGF5ZXJzOwogICAgIG1fdGltZVNvdXJjZUNsaWVudEFkYXB0
ZXItPnNldEFjdGl2ZShzaG91bGRUaWNrSW5CYWNrZ3JvdW5kKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdEltcGwuaAppbmRleCBlMGM2ZTczYTMzNDIwZGQ0N2QwOTU0Mjg2MmNiOWE0
OGEwYWQxY2IwLi43N2ViODkyZmJlOThlY2ZlYTJlYjhlMTE5MTgzODJkZTVmN2NkYWU3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCkBAIC05OCw2ICs5OCw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIGNvbnN0IENDTGF5ZXJJbXBsKiByb290TGF5ZXIoKSBjb25zdCAgeyBy
ZXR1cm4gbV9yb290TGF5ZXJJbXBsLmdldCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGRpZExvc2VD
b250ZXh0KCk7CiAgICAgdmlydHVhbCB2b2lkIG9uU3dhcEJ1ZmZlcnNDb21wbGV0ZSgpOworICAg
IHZpcnR1YWwgdm9pZCBzZXRGdWxsUm9vdExheWVyRGFtYWdlKCk7CiAKICAgICAvLyBJbXBsZW1l
bnRhdGlvbgogICAgIGJvb2wgY2FuRHJhdygpOwpAQCAtMTM0LDEwICsxMzUsNiBAQCBwdWJsaWM6
CiAKICAgICBQYXNzT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHByb2Nlc3NTY3JvbGxEZWx0
YXMoKTsKIAotICAgIC8vIFdoZXJlIHBvc3NpYmxlLCByZWRyYXdzIGFyZSBzY2lzc29yZWQgdG8g
YSBkYW1hZ2UgcmVnaW9uIGNhbGN1bGF0ZWQgZnJvbSBjaGFuZ2VzIHRvCi0gICAgLy8gbGF5ZXIg
cHJvcGVydGllcy4gVGhpcyBmdW5jdGlvbiBvdmVycmlkZXMgdGhlIGRhbWFnZSByZWdpb24gZm9y
IHRoZSBuZXh0IGRyYXcgY3ljbGUuCi0gICAgdm9pZCBzZXRGdWxsUm9vdExheWVyRGFtYWdlKCk7
Ci0KICAgICB2b2lkIHN0YXJ0UGFnZVNjYWxlQW5pbWF0aW9uKGNvbnN0IEludFNpemUmIHRyYWdl
dFBvc2l0aW9uLCBib29sIHVzZUFuY2hvciwgZmxvYXQgc2NhbGUsIGRvdWJsZSBkdXJhdGlvblNl
Yyk7CiAKICAgICBib29sIG5lZWRzQW5pbWF0ZUxheWVycygpIGNvbnN0IHsgcmV0dXJuIG1fbmVl
ZHNBbmltYXRlTGF5ZXJzOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3Bw
CmluZGV4IDYwN2IzOGFmN2EyMmNjNzc0ZmY2YTE3Mjc5M2QzZGU1OWU0MDM2OGIuLjJkOWUwZjM0
MWZlNzI1N2QzNDc5OGY2Y2YxYjhkNGRmODU5ZDIwYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2lu
Z2xlVGhyZWFkUHJveHkuY3BwCkBAIC03Miw2ICs3Miw4IEBAIGJvb2wgQ0NTaW5nbGVUaHJlYWRQ
cm94eTo6Y29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiBy
ZWN0CiAgICAgVFJBQ0VfRVZFTlQoIkNDU2luZ2xlVGhyZWFkUHJveHk6OmNvbXBvc2l0ZUFuZFJl
YWRiYWNrIiwgdGhpcywgMCk7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsK
IAorICAgIFNjb3BlZEVuc3VyZUZyYW1lYnVmZmVyQWxsb2NhdGlvbiBlbnN1cmVGcmFtZWJ1ZmZl
cihtX2xheWVyVHJlZUhvc3RJbXBsLT5sYXllclJlbmRlcmVyKCkpOworCiAgICAgaWYgKCFjb21t
aXRJZk5lZWRlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQ
cm94eS5jcHAKaW5kZXggZTQxNzNhOGFkNjExM2Y3ZWRjNGI5MDJhYjBhN2Y4NTA4NjNhMTQ1Zi4u
ODI3MDc0MGQwMDY5ZDgxYTQzZWQwNjM2NzQ5MzFlZGJjMTMzZDQxZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NU
aHJlYWRQcm94eS5jcHAKQEAgLTkxLDYgKzkxLDggQEAgYm9vbCBDQ1RocmVhZFByb3h5Ojpjb21w
b3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQobV9sYXllclRyZWVIb3N0KTsKIAor
ICAgIFNjb3BlZEVuc3VyZUZyYW1lYnVmZmVyQWxsb2NhdGlvbiBlbnN1cmVGcmFtZWJ1ZmZlciht
X2xheWVyVHJlZUhvc3RJbXBsLT5sYXllclJlbmRlcmVyKCkpOworCiAgICAgaWYgKCFtX2xheWVy
UmVuZGVyZXJJbml0aWFsaXplZCkgewogICAgICAgICBUUkFDRV9FVkVOVCgiY29tcG9zaXRlQW5k
UmVhZGJhY2tfRWFybHlPdXRfTFJfVW5pbml0aWFsaXplZCIsIHRoaXMsIDApOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5n
eXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCBlMjY3YTViZDNk
YjkzY2RiMmM3Zjg5MmMyMTZiODk3MmYzMzM3ZjJhLi44ODk0MjliZDkyMzgwMWQ2MzE3NmZiZDAx
MjY3MDU0NmUyNjg4ZTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTEwNSw2
ICsxMDUsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL0tleWJvYXJkVGVzdC5jcHAnLAogICAgICAg
ICAgICAgJ3Rlc3RzL0tVUkxUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvTGF5ZXJDaHJv
bWl1bVRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9MYXllclJlbmRlcmVyQ2hyb21pdW1U
ZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvTGF5ZXJUZXh0dXJlVXBkYXRlclRlc3QuY3Bw
JywKICAgICAgICAgICAgICd0ZXN0cy9MZXZlbERCVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rl
c3RzL0xvY2FsaXplZE51bWJlcklDVVRlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJSZW5kZXJlckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyUmVuZGVyZXJDaHJvbWl1bVRlc3QuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmEwY2ZhNDkzNWY4NjVlOTYyNGZjYTIyY2ZhODk0MTc0NmVhNjJiZjEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyUmVuZGVyZXJDaHJv
bWl1bVRlc3QuY3BwCkBAIC0wLDAgKzEsMTk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCisKKyNpbmNsdWRl
ICJGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQz
RC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIgorCisjaW5jbHVkZSA8
Z21vY2svZ21vY2suaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK2NsYXNzIEZyYW1lQ291bnRp
bmdNZW1vcnlBbGxvY2F0aW9uU2V0dGluZ0NvbnRleHQgOiBwdWJsaWMgRmFrZVdlYkdyYXBoaWNz
Q29udGV4dDNEIHsKK3B1YmxpYzoKKyAgICBGcmFtZUNvdW50aW5nTWVtb3J5QWxsb2NhdGlvblNl
dHRpbmdDb250ZXh0KCkgOiBtX2ZyYW1lKDApIHsgfQorCisgICAgLy8gVGhpcyBtZXRob2Qgd291
bGQgbm9ybWFsbHkgZG8gYSBnbFN3YXBCdWZmZXJzIHVuZGVyIHRoZSBob29kLgorICAgIHZpcnR1
YWwgdm9pZCBwcmVwYXJlVGV4dHVyZSgpIHsgbV9mcmFtZSsrOyB9CisKKyAgICBpbnQgZnJhbWVD
b3VudCgpIHsgcmV0dXJuIG1fZnJhbWU7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXRNZW1vcnlB
bGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQ0hST01JVU0oV2ViR3JhcGhpY3NNZW1vcnlBbGxvY2F0
aW9uQ2hhbmdlZENhbGxiYWNrQ0hST01JVU0qIGNhbGxiYWNrKSB7IG1fbWVtb3J5QWxsb2NhdGlv
bkNoYW5nZWRDYWxsYmFjayA9IGNhbGxiYWNrOyB9CisKKyAgICB2b2lkIHNldE1lbW9yeUFsbG9j
YXRpb24oV2ViR3JhcGhpY3NNZW1vcnlBbGxvY2F0aW9uIGFsbG9jYXRpb24pIHsgbV9tZW1vcnlB
bGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrLT5vbk1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkKGFsbG9j
YXRpb24pOyB9CisKKyAgICB2aXJ0dWFsIFdlYlN0cmluZyBnZXRTdHJpbmcoV2ViS2l0OjpXR0Mz
RGVudW0gbmFtZSkKKyAgICB7CisgICAgICAgIGlmIChuYW1lID09IEdyYXBoaWNzQ29udGV4dDNE
OjpFWFRFTlNJT05TKQorICAgICAgICAgICAgcmV0dXJuIFdlYlN0cmluZygiR0xfQ0hST01JVU1f
c2V0X3Zpc2liaWxpdHkgR0xfQ0hST01JVU1fZ3B1X21lbW9yeV9tYW5hZ2VyIEdMX0VYVF9kaXNj
YXJkX2ZyYW1lYnVmZmVyIik7CisgICAgICAgIHJldHVybiBXZWJTdHJpbmcoKTsKKyAgICB9CisK
KworcHJpdmF0ZToKKyAgICBpbnQgbV9mcmFtZTsKKyAgICBXZWJHcmFwaGljc01lbW9yeUFsbG9j
YXRpb25DaGFuZ2VkQ2FsbGJhY2tDSFJPTUlVTSogbV9tZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENh
bGxiYWNrOworfTsKKworY2xhc3MgRmFrZUxheWVyUmVuZGVyZXJDaHJvbWl1bUNsaWVudCA6IHB1
YmxpYyBMYXllclJlbmRlcmVyQ2hyb21pdW1DbGllbnQgeworcHVibGljOgorICAgIEZha2VMYXll
clJlbmRlcmVyQ2hyb21pdW1DbGllbnQoKSB7IHJlc2V0KCk7IH0KKworICAgIHZpcnR1YWwgY29u
c3QgSW50U2l6ZSYgdmlld3BvcnRTaXplKCkgY29uc3QgeyBzdGF0aWMgSW50U2l6ZSBmYWtlU2l6
ZTsgcmV0dXJuIGZha2VTaXplOyB9CisgICAgdmlydHVhbCBjb25zdCBDQ1NldHRpbmdzJiBzZXR0
aW5ncygpIGNvbnN0IHsgc3RhdGljIENDU2V0dGluZ3MgZmFrZVNldHRpbmdzOyByZXR1cm4gZmFr
ZVNldHRpbmdzOyB9CisgICAgdmlydHVhbCBDQ0xheWVySW1wbCogcm9vdExheWVyKCkgeyByZXR1
cm4gMDsgfQorICAgIHZpcnR1YWwgY29uc3QgQ0NMYXllckltcGwqIHJvb3RMYXllcigpIGNvbnN0
IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkTG9zZUNvbnRleHQoKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgb25Td2FwQnVmZmVyc0NvbXBsZXRlKCkgeyB9CisgICAgdmlydHVhbCB2
b2lkIHNldEZ1bGxSb290TGF5ZXJEYW1hZ2UoKSB7IG1fZGlkU2V0RnVsbFJvb3RMYXllckRhbWFn
ZSA9IHRydWU7IH0KKworICAgIHZvaWQgcmVzZXQoKQorICAgIHsKKyAgICAgICAgbV9kaWRTZXRG
dWxsUm9vdExheWVyRGFtYWdlID0gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBtX2RpZFNldEZ1
bGxSb290TGF5ZXJEYW1hZ2U7Cit9OworCitjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0
IDogcHVibGljIExheWVyUmVuZGVyZXJDaHJvbWl1bSB7CitwdWJsaWM6CisgICAgTGF5ZXJSZW5k
ZXJlckNocm9taXVtVGVzdChMYXllclJlbmRlcmVyQ2hyb21pdW1DbGllbnQqIGNsaWVudCwgUGFz
c1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCkgOiBMYXllclJlbmRlcmVyQ2hyb21p
dW0oY2xpZW50LCBjb250ZXh0KSB7IH0KKworICAgIC8vIENoYW5naW5nIHZpc2liaWxpdHkgdG8g
cHVibGljLgorICAgIHVzaW5nIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZTsKK307
CisKKy8vIFRoaXMgdGVzdHMgdGhlIExheWVyUmVuZGVyZXJDaHJvbWl1bSBkaXNjYXJkRnJhbWVi
dWZmZXIgZnVuY3Rpb25hbGl0eS4gU3BlY2lmaWNhbGx5OgorLy8gMS4gV2lsbCBjYWxsIGRpc2Nh
cmRGcmFtZWJ1ZmZlciB3aGVuIGdpdmVuIGEgbWVtb3J5IGFsbG9jYXRpb24gcmVxdWVzdCB0byBk
byBzby4KKy8vICAgIFdpbGwgYWxzbyBjYWxsIHNldEZ1bGxSb290TGF5ZXJEYW1hZ2Ugd2hlbmV2
ZXIgdGhpcyBoYXBwZW5zLCB0byBtYWtlIHN1cmUgYSBmdWxsIGZyYW1lIGlzIGRyYXduIGFnYWlu
IG9uY2UgYnVmZmVyIGlzIHJlYWxsb2NhdGVkLgorLy8gMi4gV2lsbCBub3Qgc3dhcCBmcmFtZXMg
d2hpbGUgZnJhbWVidWZmZXIgaXMgZGlzY2FyZGVkLiBJbnN0ZWFkLCBpdCB3aWxsIGNhbGwgc2V0
RnVsbFJvb3RMYXllckRhbWFnZS4KKy8vIDMuIFdpbGwgcmVzdW1lIHN3YXBwaW5nIGZyYW1lcyBh
cyBub3JtYWwgb25jZSBmcmFtZWJ1ZmZlciBpcyByZWNyZWF0ZWQuCisvLyA0LiBXaWxsIGNhbGwg
ZW5zdXJlRnJhbWVidWZmZXIgd2hlbmV2ZXIgbWFkZSB2aXNpYmxlLgorLy8gNS4gQ3JlYXRpbmcg
YSBTY29wZWRFbnN1cmVGcmFtZWJ1ZmZlckFsbG9jYXRpb24gd2lsbCBjYWxsIGVuc3VyZUZyYW1l
YnVmZmVyL2Rpc2NhcmRGcmFtZWJ1ZmZlciBpZiBhbmQgb25seSBpZiBpdCB3YXMgZGlzY2FyZGVk
LgorVEVTVChMYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0LCBEaXNjYXJkRnJhbWVidWZmZXJUZXN0
cykKK3sKKyAgICBXZWJHcmFwaGljc01lbW9yeUFsbG9jYXRpb24gc3VnZ2VzdEhhdmVCYWNrYnVm
ZmVyWWVzKDEsIHRydWUpOworICAgIFdlYkdyYXBoaWNzTWVtb3J5QWxsb2NhdGlvbiBzdWdnZXN0
SGF2ZUJhY2tidWZmZXJObygxLCBmYWxzZSk7CisKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+IGNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29u
dGV4dEZyb21XZWJDb250ZXh0KGFkb3B0UHRyKG5ldyBGcmFtZUNvdW50aW5nTWVtb3J5QWxsb2Nh
dGlvblNldHRpbmdDb250ZXh0KCkpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlU
b0hvc3RXaW5kb3cpOworCisgICAgRnJhbWVDb3VudGluZ01lbW9yeUFsbG9jYXRpb25TZXR0aW5n
Q29udGV4dCYgbW9ja0NvbnRleHQgPSAqc3RhdGljX2Nhc3Q8RnJhbWVDb3VudGluZ01lbW9yeUFs
bG9jYXRpb25TZXR0aW5nQ29udGV4dCo+KEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0cmFj
dFdlYkdyYXBoaWNzQ29udGV4dDNEKGNvbnRleHQuZ2V0KCkpKTsKKyAgICBGYWtlTGF5ZXJSZW5k
ZXJlckNocm9taXVtQ2xpZW50IGNsaWVudDsKKyAgICBMYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0
IGxheWVyUmVuZGVyZXJDaHJvbWl1bSgmY2xpZW50LCBjb250ZXh0LnJlbGVhc2UoKSk7CisKKyAg
ICBsYXllclJlbmRlcmVyQ2hyb21pdW0uaW5pdGlhbGl6ZSgpOworCisgICAgLy8gRmlyc3QsIHRo
ZSBiYXNlIGNhc2UuCisgICAgbGF5ZXJSZW5kZXJlckNocm9taXVtLnN3YXBCdWZmZXJzKEludFJl
Y3QoKSk7CisgICAgRVhQRUNUX0VRKDEsIG1vY2tDb250ZXh0LmZyYW1lQ291bnQoKSk7CisgICAg
RVhQRUNUX0ZBTFNFKGNsaWVudC5tX2RpZFNldEZ1bGxSb290TGF5ZXJEYW1hZ2UpOworICAgIEVY
UEVDVF9GQUxTRShsYXllclJlbmRlcmVyQ2hyb21pdW0uaXNGcmFtZWJ1ZmZlckRpc2NhcmRlZCgp
KTsKKyAgICBjbGllbnQucmVzZXQoKTsKKworICAgIC8vIFNlbmQgc3VnZ2VzdEhhdmVCYWNrYnVm
ZmVyWWVzIGFsbG9jYXRpb24sIGFuZCBleHBlY3Qgbm8gZGlmZmVyZW5jZS4KKyAgICBtb2NrQ29u
dGV4dC5zZXRNZW1vcnlBbGxvY2F0aW9uKHN1Z2dlc3RIYXZlQmFja2J1ZmZlclllcyk7CisgICAg
bGF5ZXJSZW5kZXJlckNocm9taXVtLnN3YXBCdWZmZXJzKEludFJlY3QoKSk7CisgICAgRVhQRUNU
X0VRKDIsIG1vY2tDb250ZXh0LmZyYW1lQ291bnQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGNsaWVu
dC5tX2RpZFNldEZ1bGxSb290TGF5ZXJEYW1hZ2UpOworICAgIEVYUEVDVF9GQUxTRShsYXllclJl
bmRlcmVyQ2hyb21pdW0uaXNGcmFtZWJ1ZmZlckRpc2NhcmRlZCgpKTsKKyAgICBjbGllbnQucmVz
ZXQoKTsKKworICAgIC8vIFNlbmQgc3VnZ2VzdEhhdmVCYWNrYnVmZmVyTm8gYWxsb2NhdGlvbi4K
KyAgICBtb2NrQ29udGV4dC5zZXRNZW1vcnlBbGxvY2F0aW9uKHN1Z2dlc3RIYXZlQmFja2J1ZmZl
ck5vKTsKKyAgICBFWFBFQ1RfVFJVRShjbGllbnQubV9kaWRTZXRGdWxsUm9vdExheWVyRGFtYWdl
KTsKKyAgICBFWFBFQ1RfVFJVRShsYXllclJlbmRlcmVyQ2hyb21pdW0uaXNGcmFtZWJ1ZmZlckRp
c2NhcmRlZCgpKTsKKyAgICBjbGllbnQucmVzZXQoKTsKKworICAgIC8vIFJlc2V0IGJhY2sgdG8g
c3VnZ2VzdEhhdmVCYWNrYnVmZmVyWWVzIGFsbG9jYXRpb24uCisgICAgbW9ja0NvbnRleHQuc2V0
TWVtb3J5QWxsb2NhdGlvbihzdWdnZXN0SGF2ZUJhY2tidWZmZXJZZXMpOworICAgIEVYUEVDVF9G
QUxTRShjbGllbnQubV9kaWRTZXRGdWxsUm9vdExheWVyRGFtYWdlKTsKKyAgICBFWFBFQ1RfRkFM
U0UobGF5ZXJSZW5kZXJlckNocm9taXVtLmlzRnJhbWVidWZmZXJEaXNjYXJkZWQoKSk7CisgICAg
Y2xpZW50LnJlc2V0KCk7CisKKyAgICAvLyBNYWtlIHN1cmUgaXQgaGFzIHJlc3VtZWQgZnVuY3Rp
b24gYXMgbm9ybWFsLgorICAgIGxheWVyUmVuZGVyZXJDaHJvbWl1bS5zd2FwQnVmZmVycyhJbnRS
ZWN0KCkpOworICAgIEVYUEVDVF9FUSgzLCBtb2NrQ29udGV4dC5mcmFtZUNvdW50KCkpOworICAg
IEVYUEVDVF9GQUxTRShjbGllbnQubV9kaWRTZXRGdWxsUm9vdExheWVyRGFtYWdlKTsKKyAgICBF
WFBFQ1RfRkFMU0UobGF5ZXJSZW5kZXJlckNocm9taXVtLmlzRnJhbWVidWZmZXJEaXNjYXJkZWQo
KSk7CisgICAgY2xpZW50LnJlc2V0KCk7CisKKyAgICAvLyBNYWtlIHN1cmUgc3dhcHMgYXJlIGln
bm9yZWQgd2hpbGUgZnJhbWVidWZmZXIgaXMgZHJvcHBlZCwgYW5kIHRoYXQgc2V0RnVsbFJvb3RM
YXllckRhbWFnZSBpcyBjYWxsZWQuCisgICAgbW9ja0NvbnRleHQuc2V0TWVtb3J5QWxsb2NhdGlv
bihzdWdnZXN0SGF2ZUJhY2tidWZmZXJObyk7CisgICAgRVhQRUNUX1RSVUUoY2xpZW50Lm1fZGlk
U2V0RnVsbFJvb3RMYXllckRhbWFnZSk7CisgICAgRVhQRUNUX1RSVUUobGF5ZXJSZW5kZXJlckNo
cm9taXVtLmlzRnJhbWVidWZmZXJEaXNjYXJkZWQoKSk7CisgICAgY2xpZW50LnJlc2V0KCk7Cisg
ICAgbGF5ZXJSZW5kZXJlckNocm9taXVtLnN3YXBCdWZmZXJzKEludFJlY3QoKSk7CisgICAgRVhQ
RUNUX0VRKDMsIG1vY2tDb250ZXh0LmZyYW1lQ291bnQoKSk7CisgICAgRVhQRUNUX1RSVUUoY2xp
ZW50Lm1fZGlkU2V0RnVsbFJvb3RMYXllckRhbWFnZSk7CisgICAgRVhQRUNUX1RSVUUobGF5ZXJS
ZW5kZXJlckNocm9taXVtLmlzRnJhbWVidWZmZXJEaXNjYXJkZWQoKSk7CisgICAgY2xpZW50LnJl
c2V0KCk7CisKKyAgICAvLyBNYWtlIHN1cmUgc2V0dGluZyB2aXNpYmlsaXR5IHJlY3JlYXRlcyB0
aGUgZnJhbWVidWZmZXIuCisgICAgbGF5ZXJSZW5kZXJlckNocm9taXVtLnNldFZpc2libGUodHJ1
ZSk7CisgICAgRVhQRUNUX0ZBTFNFKGNsaWVudC5tX2RpZFNldEZ1bGxSb290TGF5ZXJEYW1hZ2Up
OworICAgIEVYUEVDVF9GQUxTRShsYXllclJlbmRlcmVyQ2hyb21pdW0uaXNGcmFtZWJ1ZmZlckRp
c2NhcmRlZCgpKTsKKyAgICBjbGllbnQucmVzZXQoKTsKKworICAgIC8vIE1ha2Ugc3VyZSBTY29w
ZWRFbnN1cmVGcmFtZWJ1ZmZlckFsbG9jYXRpb24gd29ya3MgdG8gcmVzZXQgZnJhbWVidWZmZXIu
CisgICAgbW9ja0NvbnRleHQuc2V0TWVtb3J5QWxsb2NhdGlvbihzdWdnZXN0SGF2ZUJhY2tidWZm
ZXJObyk7CisgICAgRVhQRUNUX1RSVUUoY2xpZW50Lm1fZGlkU2V0RnVsbFJvb3RMYXllckRhbWFn
ZSk7CisgICAgRVhQRUNUX1RSVUUobGF5ZXJSZW5kZXJlckNocm9taXVtLmlzRnJhbWVidWZmZXJE
aXNjYXJkZWQoKSk7CisgICAgY2xpZW50LnJlc2V0KCk7CisgICAgeworICAgICAgICBTY29wZWRF
bnN1cmVGcmFtZWJ1ZmZlckFsbG9jYXRpb24gZW5zdXJlRnJhbWVidWZmZXIoJmxheWVyUmVuZGVy
ZXJDaHJvbWl1bSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShsYXllclJlbmRlcmVyQ2hyb21pdW0u
aXNGcmFtZWJ1ZmZlckRpc2NhcmRlZCgpKTsKKyAgICAgICAgbGF5ZXJSZW5kZXJlckNocm9taXVt
LnN3YXBCdWZmZXJzKEludFJlY3QoKSk7CisgICAgICAgIEVYUEVDVF9FUSg0LCBtb2NrQ29udGV4
dC5mcmFtZUNvdW50KCkpOworICAgICAgICBFWFBFQ1RfRkFMU0UoY2xpZW50Lm1fZGlkU2V0RnVs
bFJvb3RMYXllckRhbWFnZSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShsYXllclJlbmRlcmVyQ2hy
b21pdW0uaXNGcmFtZWJ1ZmZlckRpc2NhcmRlZCgpKTsKKyAgICAgICAgY2xpZW50LnJlc2V0KCk7
CisgICAgfQorICAgIEVYUEVDVF9UUlVFKGxheWVyUmVuZGVyZXJDaHJvbWl1bS5pc0ZyYW1lYnVm
ZmVyRGlzY2FyZGVkKCkpOworICAgIEVYUEVDVF9UUlVFKGNsaWVudC5tX2RpZFNldEZ1bGxSb290
TGF5ZXJEYW1hZ2UpOworICAgIGNsaWVudC5yZXNldCgpOworCisgICAgLy8gRmluYWxseSwgbWFr
ZSBzdXJlIFNjb3BlZEVuc3VyZUZyYW1lYnVmZmVyQWxsb2NhdGlvbiBkb2VzIG5vdGhpbmcgd2hl
biBmcmFtZWJ1ZmZlciB3YXMgbm90IGFscmVhZHkgZGlzY2FyZGVkLgorICAgIG1vY2tDb250ZXh0
LnNldE1lbW9yeUFsbG9jYXRpb24oc3VnZ2VzdEhhdmVCYWNrYnVmZmVyWWVzKTsKKyAgICBFWFBF
Q1RfRkFMU0UobGF5ZXJSZW5kZXJlckNocm9taXVtLmlzRnJhbWVidWZmZXJEaXNjYXJkZWQoKSk7
CisgICAgRVhQRUNUX0ZBTFNFKGNsaWVudC5tX2RpZFNldEZ1bGxSb290TGF5ZXJEYW1hZ2UpOwor
ICAgIGNsaWVudC5yZXNldCgpOworICAgIHsKKyAgICAgICAgU2NvcGVkRW5zdXJlRnJhbWVidWZm
ZXJBbGxvY2F0aW9uIGVuc3VyZUZyYW1lYnVmZmVyKCZsYXllclJlbmRlcmVyQ2hyb21pdW0pOwor
ICAgICAgICBFWFBFQ1RfRkFMU0UobGF5ZXJSZW5kZXJlckNocm9taXVtLmlzRnJhbWVidWZmZXJE
aXNjYXJkZWQoKSk7CisgICAgICAgIGxheWVyUmVuZGVyZXJDaHJvbWl1bS5zd2FwQnVmZmVycyhJ
bnRSZWN0KCkpOworICAgICAgICBFWFBFQ1RfRVEoNSwgbW9ja0NvbnRleHQuZnJhbWVDb3VudCgp
KTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGNsaWVudC5tX2RpZFNldEZ1bGxSb290TGF5ZXJEYW1h
Z2UpOworICAgICAgICBFWFBFQ1RfRkFMU0UobGF5ZXJSZW5kZXJlckNocm9taXVtLmlzRnJhbWVi
dWZmZXJEaXNjYXJkZWQoKSk7CisgICAgICAgIGNsaWVudC5yZXNldCgpOworICAgIH0KKyAgICBF
WFBFQ1RfRkFMU0UobGF5ZXJSZW5kZXJlckNocm9taXVtLmlzRnJhbWVidWZmZXJEaXNjYXJkZWQo
KSk7CisgICAgRVhQRUNUX0ZBTFNFKGNsaWVudC5tX2RpZFNldEZ1bGxSb290TGF5ZXJEYW1hZ2Up
OworICAgIGNsaWVudC5yZXNldCgpOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133328</attachid>
            <date>2012-03-22 13:05:47 -0700</date>
            <delta_ts>2012-03-22 13:22:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81823-20120322160546.patch</filename>
            <type>text/plain</type>
            <size>29414</size>
            <attacher name="Michal Mocny">mmocny</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExNzMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTExYjUyMmYyODljNzFk
N2ZiNDM5N2YwZGYzNmNjYWFhMDg1Zjc2ZC4uODIxY2NmZGZhYzUzY2M0M2EzOWIyYWFhZmY1ODI4
Y2UyYTQxN2Y2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDEyLTAzLTIyICBNaWNo
YWwgTW9jbnkgIDxtbW9jbnlAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIExheWVy
UmVuZGVyZXJDaHJvbWl1bSBzaG91bGQgdXNlIEdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkIGNh
bGxiYWNrIHRvIGV4cGxpY2l0bHkgbWFuYWdlIGZyYW1lYnVmZmVyLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE4MjMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZXcgVW5pdFRlc3RzOiBMYXllclJlbmRl
cmVyQ2hyb21pdW1UZXN0CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoTGF5ZXJSZW5kZXJlckdwdU1lbW9y
eUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJHcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlcjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJHcHVNZW1vcnlBbGxvY2F0aW9u
Q2hhbmdlZENhbGxiYWNrQWRhcHRlcjo6fkxheWVyUmVuZGVyZXJHcHVNZW1vcnlBbGxvY2F0aW9u
Q2hhbmdlZENhbGxiYWNrQWRhcHRlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVy
R3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXI6Om9uR3B1TWVtb3J5QWxs
b2NhdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckdwdU1lbW9y
eUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyOjpMYXllclJlbmRlcmVyR3B1TWVtb3J5
QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXIpOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJv
bWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxp
emUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp+TGF5ZXJSZW5k
ZXJlckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
c2V0VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnN3
YXBCdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZGlz
Y2FyZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZW5zdXJlRnJhbWVidWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChMYXllclJlbmRlcmVyQ2hyb21pdW1DbGllbnQpOgorICAgICAgICAoTGF5ZXJSZW5kZXJlckNo
cm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6aXNGcmFt
ZWJ1ZmZlckRpc2NhcmRlZCk6CisgICAgICAgIChTY29wZWRFbnN1cmVGcmFtZWJ1ZmZlckFsbG9j
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVkRW5zdXJlRnJhbWVidWZmZXJBbGxvY2F0
aW9uOjpTY29wZWRFbnN1cmVGcmFtZWJ1ZmZlckFsbG9jYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6U2NvcGVkRW5zdXJlRnJhbWVidWZmZXJBbGxvY2F0aW9uOjp+U2NvcGVkRW5zdXJlRnJhbWVi
dWZmZXJBbGxvY2F0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDYXBh
YmlsaXRpZXM6OkxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMpOgorICAgICAgICAoTGF5ZXJSZW5k
ZXJlckNhcGFiaWxpdGllcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpzZXRWaXNpYmxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmg6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RJ
bXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRo
cmVhZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OmNv
bXBvc2l0ZUFuZFJlYWRiYWNrKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RocmVhZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6
OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKToKKwogMjAxMi0wMy0yMiAgRW1pbCBBIEVrbHVuZCAgPGVh
ZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgdG91Y2hpbmcgZmlsZSB0byBm
b3JjZSBib3RzIHRvIHBpY2sgdXAgQ1NTX1NIQURFUlMgZmxhZyBjaGFuZ2UuIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwppbmRleCA4OGRlYWMzM2EwZDE5YjM3NDI5ZjVhNjRmZTYyNjJiZjU5ZjI2
MzA1Li4wNmNhOWEzYmE4NjAwZjg2NGJkOWI2OTkzYWMwYTgwZjgzZWE2Nzg3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEyLTAzLTIyICBNaWNoYWwgTW9j
bnkgIDxtbW9jbnlAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIExheWVyUmVuZGVy
ZXJDaHJvbWl1bSBzaG91bGQgdXNlIEdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkIGNhbGxiYWNr
IHRvIGV4cGxpY2l0bHkgbWFuYWdlIGZyYW1lYnVmZmVyLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE4MjMKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHRlc3Rz
L0xheWVyUmVuZGVyZXJDaHJvbWl1bVRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKEZyYW1lQ291
bnRpbmdNZW1vcnlBbGxvY2F0aW9uU2V0dGluZ0NvbnRleHQpOgorICAgICAgICAoRnJhbWVDb3Vu
dGluZ01lbW9yeUFsbG9jYXRpb25TZXR0aW5nQ29udGV4dDo6RnJhbWVDb3VudGluZ01lbW9yeUFs
bG9jYXRpb25TZXR0aW5nQ29udGV4dCk6CisgICAgICAgIChGcmFtZUNvdW50aW5nTWVtb3J5QWxs
b2NhdGlvblNldHRpbmdDb250ZXh0OjpwcmVwYXJlVGV4dHVyZSk6CisgICAgICAgIChGcmFtZUNv
dW50aW5nTWVtb3J5QWxsb2NhdGlvblNldHRpbmdDb250ZXh0OjpzZXRNZW1vcnlBbGxvY2F0aW9u
Q2hhbmdlZENhbGxiYWNrQ0hST01JVU0pOgorICAgICAgICAoRnJhbWVDb3VudGluZ01lbW9yeUFs
bG9jYXRpb25TZXR0aW5nQ29udGV4dDo6Z2V0U3RyaW5nKToKKyAgICAgICAgKEZyYW1lQ291bnRp
bmdNZW1vcnlBbGxvY2F0aW9uU2V0dGluZ0NvbnRleHQ6OmZyYW1lQ291bnQpOgorICAgICAgICAo
RnJhbWVDb3VudGluZ01lbW9yeUFsbG9jYXRpb25TZXR0aW5nQ29udGV4dDo6c2V0TWVtb3J5QWxs
b2NhdGlvbik6CisgICAgICAgIChGYWtlTGF5ZXJSZW5kZXJlckNocm9taXVtQ2xpZW50KToKKyAg
ICAgICAgKEZha2VMYXllclJlbmRlcmVyQ2hyb21pdW1DbGllbnQ6OkZha2VMYXllclJlbmRlcmVy
Q2hyb21pdW1DbGllbnQpOgorICAgICAgICAoRmFrZUxheWVyUmVuZGVyZXJDaHJvbWl1bUNsaWVu
dDo6dmlld3BvcnRTaXplKToKKyAgICAgICAgKEZha2VMYXllclJlbmRlcmVyQ2hyb21pdW1DbGll
bnQ6OnNldHRpbmdzKToKKyAgICAgICAgKEZha2VMYXllclJlbmRlcmVyQ2hyb21pdW1DbGllbnQ6
OnJvb3RMYXllcik6CisgICAgICAgIChGYWtlTGF5ZXJSZW5kZXJlckNocm9taXVtQ2xpZW50Ojpk
aWRMb3NlQ29udGV4dCk6CisgICAgICAgIChGYWtlTGF5ZXJSZW5kZXJlckNocm9taXVtQ2xpZW50
OjpvblN3YXBCdWZmZXJzQ29tcGxldGUpOgorICAgICAgICAoRmFrZUxheWVyUmVuZGVyZXJDaHJv
bWl1bUNsaWVudDo6c2V0RnVsbFJvb3RMYXllckRhbWFnZSk6CisgICAgICAgIChGYWtlTGF5ZXJS
ZW5kZXJlckNocm9taXVtQ2xpZW50OjpzZXRGdWxsUm9vdExheWVyRGFtYWdlQ291bnQpOgorICAg
ICAgICAoRmFrZUxheWVyUmVuZGVyZXJDaHJvbWl1bSk6CisgICAgICAgIChGYWtlTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpGYWtlTGF5ZXJSZW5kZXJlckNocm9taXVtKToKKyAgICAgICAgKExheWVy
UmVuZGVyZXJDaHJvbWl1bVRlc3QpOgorICAgICAgICAoTGF5ZXJSZW5kZXJlckNocm9taXVtVGVz
dDo6TGF5ZXJSZW5kZXJlckNocm9taXVtVGVzdCk6CisgICAgICAgIChMYXllclJlbmRlcmVyQ2hy
b21pdW1UZXN0OjpTZXRVcCk6CisgICAgICAgIChMYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0Ojpz
d2FwQnVmZmVycyk6CisgICAgICAgIChURVNUX0YpOgorCiAyMDEyLTAzLTIyICBBZHJpZW5uZSBX
YWxrZXIgIDxlbm5lQGdvb2dsZS5jb20+CiAKICAgICAgICAgW2Nocm9taXVtXSBGaXggc2Nyb2xs
YmFyIGxheWVycyBob2xkaW5nIG9udG8gaW52YWxpZCB0ZXh0dXJlcyBhZnRlciBsb3N0IGNvbnRl
eHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IDI3YjNlZGU1MTMy
NTdhN2E5ZjQ2YjlhZTI0OTIxOTZhNmM5NjM5OTAuLjZkZTkyNDA5ZTcwYzJlNjRjYmQwYzRiZDUz
ZTcxMzEzNTQ3YTkyMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApA
QCAtMTY1LDYgKzE2NSwzMSBAQCBwcml2YXRlOgogICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSog
bV9sYXllclJlbmRlcmVyOwogfTsKIAorY2xhc3MgTGF5ZXJSZW5kZXJlckdwdU1lbW9yeUFsbG9j
YXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyIDogcHVibGljIEV4dGVuc2lvbnMzRENocm9taXVt
OjpHcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQ0hST01JVU0geworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPExheWVyUmVuZGVyZXJHcHVNZW1vcnlBbGxvY2F0aW9uQ2hh
bmdlZENhbGxiYWNrQWRhcHRlcj4gY3JlYXRlKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJS
ZW5kZXJlcikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgTGF5ZXJSZW5kZXJl
ckdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyKGxheWVyUmVuZGVyZXIp
KTsKKyAgICB9CisgICAgdmlydHVhbCB+TGF5ZXJSZW5kZXJlckdwdU1lbW9yeUFsbG9jYXRpb25D
aGFuZ2VkQ2FsbGJhY2tBZGFwdGVyKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgb25HcHVNZW1v
cnlBbGxvY2F0aW9uQ2hhbmdlZChFeHRlbnNpb25zM0RDaHJvbWl1bTo6R3B1TWVtb3J5QWxsb2Nh
dGlvbkNIUk9NSVVNIGFsbG9jYXRpb24pCisgICAgeworICAgICAgICBpZiAoIWFsbG9jYXRpb24u
c3VnZ2VzdEhhdmVCYWNrYnVmZmVyKQorICAgICAgICAgICAgbV9sYXllclJlbmRlcmVyLT5kaXNj
YXJkRnJhbWVidWZmZXIoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9sYXllclJlbmRl
cmVyLT5lbnN1cmVGcmFtZWJ1ZmZlcigpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBleHBsaWNp
dCBMYXllclJlbmRlcmVyR3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXIo
TGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQorICAgICAgICA6IG1fbGF5ZXJS
ZW5kZXJlcihsYXllclJlbmRlcmVyKQorICAgIHsKKyAgICB9CisKKyAgICBMYXllclJlbmRlcmVy
Q2hyb21pdW0qIG1fbGF5ZXJSZW5kZXJlcjsKK307CisKIAogUGFzc093blB0cjxMYXllclJlbmRl
cmVyQ2hyb21pdW0+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKExheWVyUmVuZGVyZXJD
aHJvbWl1bUNsaWVudCogY2xpZW50LCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250
ZXh0KQogewpAQCAtMTg0LDYgKzIwOSw3IEBAIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtKExheWVyUmVuZGVyZXJDaHJvbWl1bUNsaWVudCogY2xpZW50CiAgICAg
LCBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlKDApCiAgICAgLCBtX3NoYXJlZEdlb21ldHJ5UXVhZChG
bG9hdFJlY3QoLTAuNWYsIC0wLjVmLCAxLjBmLCAxLjBmKSkKICAgICAsIG1faXNWaWV3cG9ydENo
YW5nZWQoZmFsc2UpCisgICAgLCBtX2lzRnJhbWVidWZmZXJEaXNjYXJkZWQoZmFsc2UpCiB7CiB9
CiAKQEAgLTI1OSw2ICsyODUsMTcgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRp
YWxpemUoKQogICAgIGlmIChtX2NhcGFiaWxpdGllcy51c2luZ1RleHR1cmVTdG9yYWdlRXh0ZW5z
aW9uKQogICAgICAgICBleHRlbnNpb25zLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfdGV4dHVyZV9z
dG9yYWdlIik7CiAKKyAgICBtX2NhcGFiaWxpdGllcy51c2luZ0dwdU1lbW9yeU1hbmFnZXIgPSBl
eHRlbnNpb25zLT5zdXBwb3J0cygiR0xfQ0hST01JVU1fZ3B1X21lbW9yeV9tYW5hZ2VyIik7Cisg
ICAgaWYgKG1fY2FwYWJpbGl0aWVzLnVzaW5nR3B1TWVtb3J5TWFuYWdlcikgeworICAgICAgICBl
eHRlbnNpb25zLT5lbnN1cmVFbmFibGVkKCJHTF9DSFJPTUlVTV9ncHVfbWVtb3J5X21hbmFnZXIi
KTsKKyAgICAgICAgRXh0ZW5zaW9uczNEQ2hyb21pdW0qIGV4dGVuc2lvbnMzRENocm9taXVtID0g
c3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21pdW0qPihleHRlbnNpb25zKTsKKyAgICAgICAg
ZXh0ZW5zaW9uczNEQ2hyb21pdW0tPnNldEdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJh
Y2tDSFJPTUlVTShMYXllclJlbmRlcmVyR3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFj
a0FkYXB0ZXI6OmNyZWF0ZSh0aGlzKSk7CisgICAgfQorCisgICAgbV9jYXBhYmlsaXRpZXMudXNp
bmdEaXNjYXJkRnJhbWVidWZmZXIgPSBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfRVhUX2Rpc2Nh
cmRfZnJhbWVidWZmZXIiKTsKKyAgICBpZiAobV9jYXBhYmlsaXRpZXMudXNpbmdEaXNjYXJkRnJh
bWVidWZmZXIpCisgICAgICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQoIkdMX0VYVF9kaXNj
YXJkX2ZyYW1lYnVmZmVyIik7CisKICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQt
PmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVYVFVSRV9TSVpFLCAmbV9jYXBh
YmlsaXRpZXMubWF4VGV4dHVyZVNpemUpKTsKICAgICBtX2NhcGFiaWxpdGllcy5iZXN0VGV4dHVy
ZUZvcm1hdCA9IFBsYXRmb3JtQ29sb3I6OmJlc3RUZXh0dXJlRm9ybWF0KG1fY29udGV4dC5nZXQo
KSk7CiAKQEAgLTI3Nyw2ICszMTQsNyBAQCBMYXllclJlbmRlcmVyQ2hyb21pdW06On5MYXllclJl
bmRlcmVyQ2hyb21pdW0oKQogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAg
ICAgRXh0ZW5zaW9uczNEQ2hyb21pdW0qIGV4dGVuc2lvbnMzRENocm9taXVtID0gc3RhdGljX2Nh
c3Q8RXh0ZW5zaW9uczNEQ2hyb21pdW0qPihtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKSk7CiAg
ICAgZXh0ZW5zaW9uczNEQ2hyb21pdW0tPnNldFN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0NI
Uk9NSVVNKG51bGxwdHIpOworICAgIGV4dGVuc2lvbnMzRENocm9taXVtLT5zZXRHcHVNZW1vcnlB
bGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQ0hST01JVU0obnVsbHB0cik7CiAgICAgbV9oZWFkc1Vw
RGlzcGxheS5jbGVhcigpOyAvLyBFeHBsaWNpdGx5IGRlc3Ryb3kgdGhlIEhVRCBiZWZvcmUgdGhl
IFRleHR1cmVNYW5hZ2VyIGRpZXMuCiAgICAgY2xlYW51cFNoYXJlZE9iamVjdHMoKTsKIH0KQEAg
LTMxMSw2ICszNDksMTAgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldFZpc2libGUo
Ym9vbCB2aXNpYmxlKQogICAgIGlmICghdmlzaWJsZSkKICAgICAgICAgcmVsZWFzZVJlbmRlclN1
cmZhY2VUZXh0dXJlcygpOwogCisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIG9uY2UgZnJhbWVi
dWZmZXIgaXMgYXV0b21hdGljYWxseSByZWNyZWF0ZWQgb24gZmlyc3QgdXNlCisgICAgaWYgKHZp
c2libGUpCisgICAgICAgIGVuc3VyZUZyYW1lYnVmZmVyKCk7CisKICAgICAvLyBUT0RPOiBSZXBs
YWNlIHNldFZpc2liaWxpdHlDSFJPTUlVTSB3aXRoIGFuIGV4dGVuc2lvbiB0byBleHBsaWNpdGx5
IG1hbmFnZSBmcm9udC9iYWNrYnVmZmVycwogICAgIC8vIGNyYnVnLmNvbS8xMTYwNDkKICAgICBp
ZiAobV9jYXBhYmlsaXRpZXMudXNpbmdTZXRWaXNpYmlsaXR5KSB7CkBAIC0xMDMxLDYgKzEwNzMs
MTMgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmZpbmlzaCgpCiAKIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpzd2FwQnVmZmVycyhjb25zdCBJbnRSZWN0JiBzdWJCdWZmZXIpCiB7
CisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIG9uY2UgZ3B1IHByb2Nlc3Mgc3VwcG9ydHMgaWdu
b3Jpbmcgc3dhcCBidWZmZXJzIGNvbW1hbmQgd2hpbGUgZnJhbWVidWZmZXIgaXMgZGlzY2FyZGVk
LgorICAgIC8vICAgICAgICBBbHRlcm5hdGl2ZWx5IChwcmVmZXJhYmx5PyksIHByb3RlY3QgYWxs
IGNjIGNvZGUgc28gYXMgbm90IHRvIGF0dGVtcHQgYSBzd2FwIGFmdGVyIGEgZnJhbWVidWZmZXIg
ZGlzY2FyZC4KKyAgICBpZiAobV9pc0ZyYW1lYnVmZmVyRGlzY2FyZGVkKSB7CisgICAgICAgIG1f
Y2xpZW50LT5zZXRGdWxsUm9vdExheWVyRGFtYWdlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzd2FwQnVmZmVycyIs
IHRoaXMsIDApOwogICAgIC8vIFdlJ3JlIGRvbmUhIFRpbWUgdG8gc3dhcGJ1ZmZlcnMhCiAKQEAg
LTEwNTQsNiArMTEwMywzOCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6b25Td2FwQnVm
ZmVyc0NvbXBsZXRlKCkKICAgICBtX2NsaWVudC0+b25Td2FwQnVmZmVyc0NvbXBsZXRlKCk7CiB9
CiAKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkaXNjYXJkRnJhbWVidWZmZXIoKQorewor
ICAgIGlmIChtX2lzRnJhbWVidWZmZXJEaXNjYXJkZWQpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmICghbV9jYXBhYmlsaXRpZXMudXNpbmdEaXNjYXJkRnJhbWVidWZmZXIpCisgICAgICAgIHJl
dHVybjsKKworICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IG1fY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpOworICAgIEV4dGVuc2lvbnMzRENocm9taXVtKiBleHRlbnNpb25zM0RDaHJvbWl1
bSA9IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4oZXh0ZW5zaW9ucyk7CisgICAg
Ly8gRklYTUU6IFVwZGF0ZSBhdHRhY2htZW50cyBhcmd1bWVudCB0byBhcHByb3ByaWF0ZSB2YWx1
ZXMgb25jZSB0aGV5IGFyZSBubyBsb25nZXIgaWdub3JlZC4KKyAgICBleHRlbnNpb25zM0RDaHJv
bWl1bS0+ZGlzY2FyZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCAwLCAwKTsKKyAgICBtX2lzRnJhbWVidWZmZXJEaXNjYXJkZWQgPSB0cnVlOworCisgICAgLy8g
RGFtYWdlIHRyYWNrZXIgbmVlZHMgYSBmdWxsIHJlc2V0IGV2ZXJ5IHRpbWUgZnJhbWVidWZmZXIg
aXMgZGlzY2FyZGVkLgorICAgIG1fY2xpZW50LT5zZXRGdWxsUm9vdExheWVyRGFtYWdlKCk7Cit9
CisKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjplbnN1cmVGcmFtZWJ1ZmZlcigpCit7Cisg
ICAgaWYgKCFtX2lzRnJhbWVidWZmZXJEaXNjYXJkZWQpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmICghbV9jYXBhYmlsaXRpZXMudXNpbmdEaXNjYXJkRnJhbWVidWZmZXIpCisgICAgICAgIHJl
dHVybjsKKworICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IG1fY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpOworICAgIEV4dGVuc2lvbnMzRENocm9taXVtKiBleHRlbnNpb25zM0RDaHJvbWl1
bSA9IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4oZXh0ZW5zaW9ucyk7CisgICAg
ZXh0ZW5zaW9uczNEQ2hyb21pdW0tPmVuc3VyZUZyYW1lYnVmZmVyQ0hST01JVU0oKTsKKyAgICBt
X2lzRnJhbWVidWZmZXJEaXNjYXJkZWQgPSBmYWxzZTsKK30KKwogdm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmdldEZyYW1lYnVmZmVyUGl4ZWxzKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVj
dCYgcmVjdCkKIHsKICAgICBBU1NFUlQocmVjdC5tYXhYKCkgPD0gdmlld3BvcnRXaWR0aCgpICYm
IHJlY3QubWF4WSgpIDw9IHZpZXdwb3J0SGVpZ2h0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uaAppbmRleCA1MmVhODdjMTMzYjE1N2YxYTVlMGE4ODIwYWRkZjYzMTYxZjA4ZDYz
Li42MWMxZDRhODc3YmViY2NmYTVkYTFmZDFkZWI2NDIzMTkyMmEyYzcxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAtNjEsNiArNjEsNyBAQCBjbGFzcyBHZW9tZXRyeUJp
bmRpbmc7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIGNsYXNzIFRyYWNraW5nVGV4dHVyZUFs
bG9jYXRvcjsKIGNsYXNzIExheWVyUmVuZGVyZXJTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tB
ZGFwdGVyOworY2xhc3MgU2NvcGVkRW5zdXJlRnJhbWVidWZmZXJBbGxvY2F0aW9uOwogCiBjbGFz
cyBMYXllclJlbmRlcmVyQ2hyb21pdW1DbGllbnQgewogcHVibGljOgpAQCAtNzAsNiArNzEsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBjb25zdCBDQ0xheWVySW1wbCogcm9vdExheWVyKCkgY29u
c3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRMb3NlQ29udGV4dCgpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgb25Td2FwQnVmZmVyc0NvbXBsZXRlKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRGdWxsUm9vdExheWVyRGFtYWdlKCkgPSAwOwogfTsKIAogLy8gQ2xhc3MgdGhhdCBoYW5kbGVz
IGRyYXdpbmcgb2YgY29tcG9zaXRlZCByZW5kZXIgbGF5ZXJzIHVzaW5nIEdMLgpAQCAtMTYwLDEw
ICsxNjIsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB3aWR0
aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBGbG9hdFF1YWQmLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgbWF0cml4TG9jYXRpb24sIGludCBhbHBoYUxvY2F0aW9u
LCBpbnQgcXVhZExvY2F0aW9uKTsKIAotcHJpdmF0ZToKKyAgICB2b2lkIGRpc2NhcmRGcmFtZWJ1
ZmZlcigpOworICAgIHZvaWQgZW5zdXJlRnJhbWVidWZmZXIoKTsKKyAgICBib29sIGlzRnJhbWVi
dWZmZXJEaXNjYXJkZWQoKSBjb25zdCB7IHJldHVybiBtX2lzRnJhbWVidWZmZXJEaXNjYXJkZWQ7
IH0KKworcHJvdGVjdGVkOgogICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bShMYXllclJlbmRlcmVy
Q2hyb21pdW1DbGllbnQqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPik7CiAgICAgYm9v
bCBpbml0aWFsaXplKCk7CiAKK3ByaXZhdGU6CiAgICAgdm9pZCBkcmF3UXVhZChjb25zdCBDQ0Ry
YXdRdWFkKiwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCk7CiAgICAgdm9pZCBk
cmF3RGVidWdCb3JkZXJRdWFkKGNvbnN0IENDRGVidWdCb3JkZXJEcmF3UXVhZCopOwogICAgIHZv
aWQgZHJhd1JlbmRlclN1cmZhY2VRdWFkKGNvbnN0IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkKik7
CkBAIC0yNTQsOCArMjYxLDM3IEBAIHByaXZhdGU6CiAgICAgRmxvYXRRdWFkIG1fc2hhcmVkR2Vv
bWV0cnlRdWFkOwogCiAgICAgYm9vbCBtX2lzVmlld3BvcnRDaGFuZ2VkOworICAgIGJvb2wgbV9p
c0ZyYW1lYnVmZmVyRGlzY2FyZGVkOwogfTsKIAorLy8gVGhlIHB1cnBvc2Ugb2YgdGhpcyBoZWxw
ZXIgaXMgdHdvZm9sZDoKKy8vIDEuIFRvIGVuc3VyZSB0aGF0IGEgZnJhbWVidWZmZXIgaXMgYXZh
aWxhYmxlIGZvciBzY29wZSBsaWZldGltZSwgYW5kCisvLyAyLiBUbyByZXNldCBmcmFtZWJ1ZmZl
ciBhbGxvY2F0aW9uIHRvIHByZXZpb3VzIHN0YXRlIG9uIHNjb3BlIGV4aXQuCisvLyBJZiB0aGUg
ZnJhbWVidWZmZXIgaXMgcmVjcmVhdGVkLCBpdHMgY29udGVudHMgYXJlIHVuZGVmaW5lZC4KKy8v
IEZJWE1FOiBQcmV2ZW50L2RlbGF5IGRpc2NhcmRpbmcgZnJhbWVidWZmZXIgdmlhIGFueSBtZWFu
cyB3aGlsZSBhbnkKKy8vIGluc3RhbmNlIG9mIHRoaXMgaXMgYWxpdmUuIEF0IHRoZSBtb21lbnQs
IHRoaXMgaXNuJ3QgYW4gaXNzdWUuCitjbGFzcyBTY29wZWRFbnN1cmVGcmFtZWJ1ZmZlckFsbG9j
YXRpb24geworcHVibGljOgorICAgIGV4cGxpY2l0IFNjb3BlZEVuc3VyZUZyYW1lYnVmZmVyQWxs
b2NhdGlvbihMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCisgICAgICAgIDog
bV9sYXllclJlbmRlcmVyKGxheWVyUmVuZGVyZXIpCisgICAgICAgICwgbV9mcmFtZWJ1ZmZlcldh
c0luaXRpYWxseURpc2NhcmRlZChsYXllclJlbmRlcmVyLT5pc0ZyYW1lYnVmZmVyRGlzY2FyZGVk
KCkpCisgICAgeworICAgICAgICBpZiAobV9mcmFtZWJ1ZmZlcldhc0luaXRpYWxseURpc2NhcmRl
ZCkKKyAgICAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZW5zdXJlRnJhbWVidWZmZXIoKTsKKyAg
ICB9CisKKyAgICB+U2NvcGVkRW5zdXJlRnJhbWVidWZmZXJBbGxvY2F0aW9uKCkKKyAgICB7Cisg
ICAgICAgIGlmIChtX2ZyYW1lYnVmZmVyV2FzSW5pdGlhbGx5RGlzY2FyZGVkKQorICAgICAgICAg
ICAgbV9sYXllclJlbmRlcmVyLT5kaXNjYXJkRnJhbWVidWZmZXIoKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBtX2xheWVyUmVuZGVyZXI7CisgICAgYm9v
bCBtX2ZyYW1lYnVmZmVyV2FzSW5pdGlhbGx5RGlzY2FyZGVkOworfTsKKworCiAvLyBTZXR0aW5n
IERFQlVHX0dMX0NBTExTIHRvIDEgd2lsbCBjYWxsIGdsR2V0RXJyb3IoKSBhZnRlciBhbG1vc3Qg
ZXZlcnkgR0wKIC8vIGNhbGwgbWFkZSBieSB0aGUgY29tcG9zaXRvci4gVXNlZnVsIGZvciBkZWJ1
Z2dpbmcgcmVuZGVyaW5nIGlzc3VlcyBidXQKIC8vIHdpbGwgc2lnbmlmaWNhbnRseSBkZWdyYWRl
IHBlcmZvcm1hbmNlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAppbmRleCA5Zjc4MGE3YWU3
N2FhMWU4ZTE1MTM3YTFkYjhmOWYwZjkwYmY4Y2FiLi43MzkwZWMzNGE5ZTdiOGQwMzA2YjNkNjY5
NDYxMWUwMGE0ZDcyNzY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApAQCAtMTAyLDYg
KzEwMiw4IEBAIHN0cnVjdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzIHsKICAgICAgICAgLCB1
c2luZ1N3YXBDb21wbGV0ZUNhbGxiYWNrKGZhbHNlKQogICAgICAgICAsIHVzaW5nVGV4dHVyZVVz
YWdlSGludChmYWxzZSkKICAgICAgICAgLCB1c2luZ1RleHR1cmVTdG9yYWdlRXh0ZW5zaW9uKGZh
bHNlKQorICAgICAgICAsIHVzaW5nR3B1TWVtb3J5TWFuYWdlcihmYWxzZSkKKyAgICAgICAgLCB1
c2luZ0Rpc2NhcmRGcmFtZWJ1ZmZlcihmYWxzZSkKICAgICAgICAgLCBtYXhUZXh0dXJlU2l6ZSgw
KSB7IH0KIAogICAgIEdDM0RlbnVtIGJlc3RUZXh0dXJlRm9ybWF0OwpAQCAtMTEzLDYgKzExNSw4
IEBAIHN0cnVjdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzIHsKICAgICBib29sIHVzaW5nU3dh
cENvbXBsZXRlQ2FsbGJhY2s7CiAgICAgYm9vbCB1c2luZ1RleHR1cmVVc2FnZUhpbnQ7CiAgICAg
Ym9vbCB1c2luZ1RleHR1cmVTdG9yYWdlRXh0ZW5zaW9uOworICAgIGJvb2wgdXNpbmdHcHVNZW1v
cnlNYW5hZ2VyOworICAgIGJvb2wgdXNpbmdEaXNjYXJkRnJhbWVidWZmZXI7CiAgICAgaW50IG1h
eFRleHR1cmVTaXplOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNw
cAppbmRleCA0NDNhMWZmYWE3N2JhMGVlNTIwMjlkZjBlM2FiMTQ5NjdmNGM1MmRiLi45ZGZmZWUz
NTNhZWUwZWUyMDczNDJkZDdkYzM0Y2VkMTU2YzRjYTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtNDgwLDExICs0ODAsNiBAQCB2b2lkIENDTGF5ZXJUcmVl
SG9zdEltcGw6OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQogCiAgICAgbV9sYXllclJlbmRlcmVy
LT5zZXRWaXNpYmxlKHZpc2libGUpOwogCi0gICAgLy8gUmVzZXQgdGhlIGRhbWFnZSB0cmFja2Vy
IGJlY2F1c2UgdGhlIGZyb250L2JhY2sgYnVmZmVycyBtYXkgaGF2ZSBiZWVuIGRhbWFnZWQgYnkg
dGhlIEdQVQotICAgIC8vIHByb2Nlc3Mgb24gdmlzaWJpbGl0eSBjaGFuZ2UuCi0gICAgaWYgKHZp
c2libGUgJiYgbV9sYXllclJlbmRlcmVyLT5jYXBhYmlsaXRpZXMoKS51c2luZ1BhcnRpYWxTd2Fw
KQotICAgICAgICBzZXRGdWxsUm9vdExheWVyRGFtYWdlKCk7Ci0KICAgICBjb25zdCBib29sIHNo
b3VsZFRpY2tJbkJhY2tncm91bmQgPSAhdmlzaWJsZSAmJiBtX25lZWRzQW5pbWF0ZUxheWVyczsK
ICAgICBtX3RpbWVTb3VyY2VDbGllbnRBZGFwdGVyLT5zZXRBY3RpdmUoc2hvdWxkVGlja0luQmFj
a2dyb3VuZCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKaW5kZXggZTBj
NmU3M2EzMzQyMGRkNDdkMDk1NDI4NjJjYjlhNDhhMGFkMWNiMC4uNzdlYjg5MmZiZTk4ZWNmZWEy
ZWI4ZTExOTE4MzgyZGU1ZjdjZGFlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuaApAQCAtOTgsNiArOTgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBjb25zdCBDQ0xheWVy
SW1wbCogcm9vdExheWVyKCkgY29uc3QgIHsgcmV0dXJuIG1fcm9vdExheWVySW1wbC5nZXQoKTsg
fQogICAgIHZpcnR1YWwgdm9pZCBkaWRMb3NlQ29udGV4dCgpOwogICAgIHZpcnR1YWwgdm9pZCBv
blN3YXBCdWZmZXJzQ29tcGxldGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RnVsbFJvb3RMYXll
ckRhbWFnZSgpOwogCiAgICAgLy8gSW1wbGVtZW50YXRpb24KICAgICBib29sIGNhbkRyYXcoKTsK
QEAgLTEzNCwxMCArMTM1LDYgQEAgcHVibGljOgogCiAgICAgUGFzc093blB0cjxDQ1Njcm9sbEFu
ZFNjYWxlU2V0PiBwcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CiAKLSAgICAvLyBXaGVyZSBwb3NzaWJs
ZSwgcmVkcmF3cyBhcmUgc2Npc3NvcmVkIHRvIGEgZGFtYWdlIHJlZ2lvbiBjYWxjdWxhdGVkIGZy
b20gY2hhbmdlcyB0bwotICAgIC8vIGxheWVyIHByb3BlcnRpZXMuIFRoaXMgZnVuY3Rpb24gb3Zl
cnJpZGVzIHRoZSBkYW1hZ2UgcmVnaW9uIGZvciB0aGUgbmV4dCBkcmF3IGN5Y2xlLgotICAgIHZv
aWQgc2V0RnVsbFJvb3RMYXllckRhbWFnZSgpOwotCiAgICAgdm9pZCBzdGFydFBhZ2VTY2FsZUFu
aW1hdGlvbihjb25zdCBJbnRTaXplJiB0cmFnZXRQb3NpdGlvbiwgYm9vbCB1c2VBbmNob3IsIGZs
b2F0IHNjYWxlLCBkb3VibGUgZHVyYXRpb25TZWMpOwogCiAgICAgYm9vbCBuZWVkc0FuaW1hdGVM
YXllcnMoKSBjb25zdCB7IHJldHVybiBtX25lZWRzQW5pbWF0ZUxheWVyczsgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVU
aHJlYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcAppbmRleCA2MDdiMzhhZjdhMjJjYzc3NGZmNmEx
NzI3OTNkM2RlNTllNDAzNjhiLi4yZDllMGYzNDFmZTcyNTdkMzQ3OThmNmNmMWI4ZDRkZjg1OWQy
MGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcApAQCAtNzIsNiAr
NzIsOCBAQCBib29sIENDU2luZ2xlVGhyZWFkUHJveHk6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZv
aWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYgcmVjdAogICAgIFRSQUNFX0VWRU5UKCJDQ1Npbmds
ZVRocmVhZFByb3h5Ojpjb21wb3NpdGVBbmRSZWFkYmFjayIsIHRoaXMsIDApOwogICAgIEFTU0VS
VChDQ1Byb3h5Ojppc01haW5UaHJlYWQoKSk7CiAKKyAgICBTY29wZWRFbnN1cmVGcmFtZWJ1ZmZl
ckFsbG9jYXRpb24gZW5zdXJlRnJhbWVidWZmZXIobV9sYXllclRyZWVIb3N0SW1wbC0+bGF5ZXJS
ZW5kZXJlcigpKTsKKwogICAgIGlmICghY29tbWl0SWZOZWVkZWQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCmluZGV4IGU0MTczYThhZDYxMTNm
N2VkYzRiOTAyYWIwYTdmODUwODYzYTE0NWYuLjgyNzA3NDBkMDA2OWQ4MWE0M2VkMDYzNjc0OTMx
ZWRiYzEzM2Q0MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCkBAIC05MSw2ICs5MSw4
IEBAIGJvb2wgQ0NUaHJlYWRQcm94eTo6Y29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxz
LCBjb25zdCBJbnRSZWN0JiByZWN0KQogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAg
QVNTRVJUKG1fbGF5ZXJUcmVlSG9zdCk7CiAKKyAgICBTY29wZWRFbnN1cmVGcmFtZWJ1ZmZlckFs
bG9jYXRpb24gZW5zdXJlRnJhbWVidWZmZXIobV9sYXllclRyZWVIb3N0SW1wbC0+bGF5ZXJSZW5k
ZXJlcigpKTsKKwogICAgIGlmICghbV9sYXllclJlbmRlcmVySW5pdGlhbGl6ZWQpIHsKICAgICAg
ICAgVFJBQ0VfRVZFTlQoImNvbXBvc2l0ZUFuZFJlYWRiYWNrX0Vhcmx5T3V0X0xSX1VuaW5pdGlh
bGl6ZWQiLCB0aGlzLCAwKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cGkKaW5kZXggZTI2N2E1YmQzZGI5M2NkYjJjN2Y4OTJjMjE2Yjg5NzJmMzMzN2Yy
YS4uODg5NDI5YmQ5MjM4MDFkNjMxNzZmYmQwMTI2NzA1NDZlMjY4OGU0ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL1dlYktpdC5neXBpCkBAIC0xMDUsNiArMTA1LDcgQEAKICAgICAgICAgICAgICd0ZXN0
cy9LZXlib2FyZFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9LVVJMVGVzdC5jcHAnLAog
ICAgICAgICAgICAgJ3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcCcsCisgICAgICAgICAgICAn
dGVzdHMvTGF5ZXJSZW5kZXJlckNocm9taXVtVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3Rz
L0xheWVyVGV4dHVyZVVwZGF0ZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvTGV2ZWxE
QlRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9Mb2NhbGl6ZWROdW1iZXJJQ1VUZXN0LmNw
cCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllclJl
bmRlcmVyQ2hyb21pdW1UZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZWRiMTYzYzgxZjZhYjJiYjYwZDJh
M2RlOGU5YWZhZmRkYWJjYTlmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9MYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0LmNwcApAQCAtMCwwICsxLDIyNiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oIgorCisjaW5jbHVkZSAiRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNELmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGUuaCIKKworI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CisjaW5jbHVkZSA8Z3Rl
c3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2Ug
V2ViS2l0OworCitjbGFzcyBGcmFtZUNvdW50aW5nTWVtb3J5QWxsb2NhdGlvblNldHRpbmdDb250
ZXh0IDogcHVibGljIEZha2VXZWJHcmFwaGljc0NvbnRleHQzRCB7CitwdWJsaWM6CisgICAgRnJh
bWVDb3VudGluZ01lbW9yeUFsbG9jYXRpb25TZXR0aW5nQ29udGV4dCgpIDogbV9mcmFtZSgwKSB7
IH0KKworICAgIC8vIFdlYkdyYXBoaWNzQ29udGV4dDNEIG1ldGhvZHMuCisKKyAgICAvLyBUaGlz
IG1ldGhvZCB3b3VsZCBub3JtYWxseSBkbyBhIGdsU3dhcEJ1ZmZlcnMgdW5kZXIgdGhlIGhvb2Qu
CisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVUZXh0dXJlKCkgeyBtX2ZyYW1lKys7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgc2V0TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNKFdl
YkdyYXBoaWNzTWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNKiBjYWxsYmFj
aykgeyBtX21lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2sgPSBjYWxsYmFjazsgfQorICAg
IHZpcnR1YWwgV2ViU3RyaW5nIGdldFN0cmluZyhXZWJLaXQ6OldHQzNEZW51bSBuYW1lKQorICAg
IHsKKyAgICAgICAgaWYgKG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkVYVEVOU0lPTlMpCisg
ICAgICAgICAgICByZXR1cm4gV2ViU3RyaW5nKCJHTF9DSFJPTUlVTV9zZXRfdmlzaWJpbGl0eSBH
TF9DSFJPTUlVTV9ncHVfbWVtb3J5X21hbmFnZXIgR0xfRVhUX2Rpc2NhcmRfZnJhbWVidWZmZXIi
KTsKKyAgICAgICAgcmV0dXJuIFdlYlN0cmluZygpOworICAgIH0KKworICAgIC8vIE1ldGhvZHMg
YWRkZWQgZm9yIHRlc3QuCisgICAgaW50IGZyYW1lQ291bnQoKSB7IHJldHVybiBtX2ZyYW1lOyB9
CisgICAgdm9pZCBzZXRNZW1vcnlBbGxvY2F0aW9uKFdlYkdyYXBoaWNzTWVtb3J5QWxsb2NhdGlv
biBhbGxvY2F0aW9uKSB7IG1fbWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFjay0+b25NZW1v
cnlBbGxvY2F0aW9uQ2hhbmdlZChhbGxvY2F0aW9uKTsgfQorCitwcml2YXRlOgorICAgIGludCBt
X2ZyYW1lOworICAgIFdlYkdyYXBoaWNzTWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NI
Uk9NSVVNKiBtX21lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2s7Cit9OworCitjbGFzcyBG
YWtlTGF5ZXJSZW5kZXJlckNocm9taXVtQ2xpZW50IDogcHVibGljIExheWVyUmVuZGVyZXJDaHJv
bWl1bUNsaWVudCB7CitwdWJsaWM6CisgICAgRmFrZUxheWVyUmVuZGVyZXJDaHJvbWl1bUNsaWVu
dCgpIDogbV9zZXRGdWxsUm9vdExheWVyRGFtYWdlQ291bnQoMCkgeyB9CisKKyAgICAvLyBMYXll
clJlbmRlcmVyQ2hyb21pdW1DbGllbnQgbWV0aG9kcy4KKyAgICB2aXJ0dWFsIGNvbnN0IEludFNp
emUmIHZpZXdwb3J0U2l6ZSgpIGNvbnN0IHsgc3RhdGljIEludFNpemUgZmFrZVNpemU7IHJldHVy
biBmYWtlU2l6ZTsgfQorICAgIHZpcnR1YWwgY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MoKSBj
b25zdCB7IHN0YXRpYyBDQ1NldHRpbmdzIGZha2VTZXR0aW5nczsgcmV0dXJuIGZha2VTZXR0aW5n
czsgfQorICAgIHZpcnR1YWwgQ0NMYXllckltcGwqIHJvb3RMYXllcigpIHsgcmV0dXJuIDA7IH0K
KyAgICB2aXJ0dWFsIGNvbnN0IENDTGF5ZXJJbXBsKiByb290TGF5ZXIoKSBjb25zdCB7IHJldHVy
biAwOyB9CisgICAgdmlydHVhbCB2b2lkIGRpZExvc2VDb250ZXh0KCkgeyB9CisgICAgdmlydHVh
bCB2b2lkIG9uU3dhcEJ1ZmZlcnNDb21wbGV0ZSgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRG
dWxsUm9vdExheWVyRGFtYWdlKCkgeyBtX3NldEZ1bGxSb290TGF5ZXJEYW1hZ2VDb3VudCsrOyB9
CisKKyAgICAvLyBNZXRob2RzIGFkZGVkIGZvciB0ZXN0LgorICAgIGludCBzZXRGdWxsUm9vdExh
eWVyRGFtYWdlQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3NldEZ1bGxSb290TGF5ZXJEYW1hZ2VD
b3VudDsgfQorCitwcml2YXRlOgorICAgIGludCBtX3NldEZ1bGxSb290TGF5ZXJEYW1hZ2VDb3Vu
dDsKK307CisKK2NsYXNzIEZha2VMYXllclJlbmRlcmVyQ2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJS
ZW5kZXJlckNocm9taXVtIHsKK3B1YmxpYzoKKyAgICBGYWtlTGF5ZXJSZW5kZXJlckNocm9taXVt
KExheWVyUmVuZGVyZXJDaHJvbWl1bUNsaWVudCogY2xpZW50LCBQYXNzUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiBjb250ZXh0KSA6IExheWVyUmVuZGVyZXJDaHJvbWl1bShjbGllbnQsIGNvbnRl
eHQpIHsgfQorCisgICAgLy8gTGF5ZXJSZW5kZXJlckNocm9taXVtIG1ldGhvZHMuCisKKyAgICAv
LyBDaGFuZ2luZyB2aXNpYmlsaXR5IHRvIHB1YmxpYy4KKyAgICB1c2luZyBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmluaXRpYWxpemU7Cit9OworCitjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW1U
ZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHJvdGVjdGVkOgorICAgIExheWVyUmVuZGVy
ZXJDaHJvbWl1bVRlc3QoKQorICAgICAgICA6IG1fc3VnZ2VzdEhhdmVCYWNrYnVmZmVyWWVzKDEs
IHRydWUpCisgICAgICAgICwgbV9zdWdnZXN0SGF2ZUJhY2tidWZmZXJObygxLCBmYWxzZSkKKyAg
ICAgICAgLCBtX2NvbnRleHQoR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGlj
c0NvbnRleHRGcm9tV2ViQ29udGV4dChhZG9wdFB0cihuZXcgRnJhbWVDb3VudGluZ01lbW9yeUFs
bG9jYXRpb25TZXR0aW5nQ29udGV4dCgpKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVj
dGx5VG9Ib3N0V2luZG93KSkKKyAgICAgICAgLCBtX21vY2tDb250ZXh0KCpzdGF0aWNfY2FzdDxG
cmFtZUNvdW50aW5nTWVtb3J5QWxsb2NhdGlvblNldHRpbmdDb250ZXh0Kj4oR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0QobV9jb250ZXh0LmdldCgp
KSkpCisgICAgICAgICwgbV9sYXllclJlbmRlcmVyQ2hyb21pdW0oJm1fbW9ja0NsaWVudCwgbV9j
b250ZXh0LnJlbGVhc2UoKSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIFNldFVw
KCkKKyAgICB7CisgICAgICAgIG1fbGF5ZXJSZW5kZXJlckNocm9taXVtLmluaXRpYWxpemUoKTsK
KyAgICB9CisKKyAgICB2b2lkIHN3YXBCdWZmZXJzKCkKKyAgICB7CisgICAgICAgIG1fbGF5ZXJS
ZW5kZXJlckNocm9taXVtLnN3YXBCdWZmZXJzKEludFJlY3QoKSk7CisgICAgfQorCisgICAgV2Vi
R3JhcGhpY3NNZW1vcnlBbGxvY2F0aW9uIG1fc3VnZ2VzdEhhdmVCYWNrYnVmZmVyWWVzOworICAg
IFdlYkdyYXBoaWNzTWVtb3J5QWxsb2NhdGlvbiBtX3N1Z2dlc3RIYXZlQmFja2J1ZmZlck5vOwor
CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7CisgICAgRnJhbWVDb3Vu
dGluZ01lbW9yeUFsbG9jYXRpb25TZXR0aW5nQ29udGV4dCYgbV9tb2NrQ29udGV4dDsKKyAgICBG
YWtlTGF5ZXJSZW5kZXJlckNocm9taXVtQ2xpZW50IG1fbW9ja0NsaWVudDsKKyAgICBGYWtlTGF5
ZXJSZW5kZXJlckNocm9taXVtIG1fbGF5ZXJSZW5kZXJlckNocm9taXVtOworfTsKKworLy8gVGVz
dCBMYXllclJlbmRlcmVyQ2hyb21pdW0gZGlzY2FyZEZyYW1lYnVmZmVyIGZ1bmN0aW9uYWxpdHk6
CisvLyBTdWdnZXN0IHJlY3JlYXRpbmcgYmFja2J1ZmZlciB3aGVuIG9uZSBhbHJlYWR5IGV4aXN0
cy4KKy8vIEV4cGVjdGVkOiBpdCBkb2VzIG5vdGhpbmcuCitURVNUX0YoTGF5ZXJSZW5kZXJlckNo
cm9taXVtVGVzdCwgU3VnZ2VzdEJhY2tidWZmZXJZZXNXaGVuSXRBbHJlYWR5RXhpc3RzU2hvdWxk
RG9Ob3RoaW5nKQoreworICAgIG1fbW9ja0NvbnRleHQuc2V0TWVtb3J5QWxsb2NhdGlvbihtX3N1
Z2dlc3RIYXZlQmFja2J1ZmZlclllcyk7CisgICAgRVhQRUNUX0VRKDAsIG1fbW9ja0NsaWVudC5z
ZXRGdWxsUm9vdExheWVyRGFtYWdlQ291bnQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKG1fbGF5ZXJS
ZW5kZXJlckNocm9taXVtLmlzRnJhbWVidWZmZXJEaXNjYXJkZWQoKSk7CisKKyAgICBzd2FwQnVm
ZmVycygpOworICAgIEVYUEVDVF9FUSgxLCBtX21vY2tDb250ZXh0LmZyYW1lQ291bnQoKSk7Cit9
CisKKy8vIFRlc3QgTGF5ZXJSZW5kZXJlckNocm9taXVtIGRpc2NhcmRGcmFtZWJ1ZmZlciBmdW5j
dGlvbmFsaXR5OgorLy8gU3VnZ2VzdCBkaXNjYXJkaW5nIGJhY2tidWZmZXIgd2hlbiBvbmUgZXhp
c3RzLgorLy8gRXhwZWN0ZWQ6IGl0IGlzIGRpc2NhcmRlZCBhbmQgZGFtYWdlIHRyYWNrZXIgaXMg
cmVzZXQuCitURVNUX0YoTGF5ZXJSZW5kZXJlckNocm9taXVtVGVzdCwgU3VnZ2VzdEJhY2tidWZm
ZXJOb1Nob3VsZERpc2NhcmRCYWNrYnVmZmVyQW5kU0RhbWFnZVJvb3RMYXllcikKK3sKKyAgICBt
X21vY2tDb250ZXh0LnNldE1lbW9yeUFsbG9jYXRpb24obV9zdWdnZXN0SGF2ZUJhY2tidWZmZXJO
byk7CisgICAgRVhQRUNUX0VRKDEsIG1fbW9ja0NsaWVudC5zZXRGdWxsUm9vdExheWVyRGFtYWdl
Q291bnQoKSk7CisgICAgRVhQRUNUX1RSVUUobV9sYXllclJlbmRlcmVyQ2hyb21pdW0uaXNGcmFt
ZWJ1ZmZlckRpc2NhcmRlZCgpKTsKK30KKworLy8gVGVzdCBMYXllclJlbmRlcmVyQ2hyb21pdW0g
ZGlzY2FyZEZyYW1lYnVmZmVyIGZ1bmN0aW9uYWxpdHk6CisvLyBTdWdnZXN0IGRpc2NhcmRpbmcg
YmFja2J1ZmZlciB3aGVuIG9uZSBkb2VzIG5vdCBleGlzdC4KKy8vIEV4cGVjdGVkOiBpdCBkb2Vz
IG5vdGhpbmcuCitURVNUX0YoTGF5ZXJSZW5kZXJlckNocm9taXVtVGVzdCwgU3VnZ2VzdEJhY2ti
dWZmZXJOb1doZW5JdERvZXNudEV4aXN0U2hvdWxkRG9Ob3RoaW5nKQoreworICAgIG1fbW9ja0Nv
bnRleHQuc2V0TWVtb3J5QWxsb2NhdGlvbihtX3N1Z2dlc3RIYXZlQmFja2J1ZmZlck5vKTsKKyAg
ICBFWFBFQ1RfRVEoMSwgbV9tb2NrQ2xpZW50LnNldEZ1bGxSb290TGF5ZXJEYW1hZ2VDb3VudCgp
KTsKKyAgICBFWFBFQ1RfVFJVRShtX2xheWVyUmVuZGVyZXJDaHJvbWl1bS5pc0ZyYW1lYnVmZmVy
RGlzY2FyZGVkKCkpOworCisgICAgbV9tb2NrQ29udGV4dC5zZXRNZW1vcnlBbGxvY2F0aW9uKG1f
c3VnZ2VzdEhhdmVCYWNrYnVmZmVyTm8pOworICAgIEVYUEVDVF9FUSgxLCBtX21vY2tDbGllbnQu
c2V0RnVsbFJvb3RMYXllckRhbWFnZUNvdW50KCkpOworICAgIEVYUEVDVF9UUlVFKG1fbGF5ZXJS
ZW5kZXJlckNocm9taXVtLmlzRnJhbWVidWZmZXJEaXNjYXJkZWQoKSk7Cit9CisKKy8vIFRlc3Qg
TGF5ZXJSZW5kZXJlckNocm9taXVtIGRpc2NhcmRGcmFtZWJ1ZmZlciBmdW5jdGlvbmFsaXR5Ogor
Ly8gU3VnZ2VzdCBkaXNjYXJkaW5nIGJhY2tidWZmZXIsIHRoZW4gdHJ5IHRvIHN3YXBCdWZmZXJz
LgorLy8gRXhwZWN0ZWQ6IGZyYW1lYnVmZmVyIGlzIGRpc2NhcmRlZCwgc3dhcHMgYXJlIGlnbm9y
ZWQsIGFuZCBkYW1hZ2UgaXMgcmVzZXQgYWZ0ZXIgZGlzY2FyZCBhbmQgYWZ0ZXIgZWFjaCBzd2Fw
LgorVEVTVF9GKExheWVyUmVuZGVyZXJDaHJvbWl1bVRlc3QsIFN3YXBCdWZmZXJzV2hpbGVCYWNr
YnVmZmVyRGlzY2FyZGVkU2hvdWxkSWdub3JlU3dhcEFuZERhbWFnZVJvb3RMYXllcikKK3sKKyAg
ICBtX21vY2tDb250ZXh0LnNldE1lbW9yeUFsbG9jYXRpb24obV9zdWdnZXN0SGF2ZUJhY2tidWZm
ZXJObyk7CisgICAgRVhQRUNUX1RSVUUobV9sYXllclJlbmRlcmVyQ2hyb21pdW0uaXNGcmFtZWJ1
ZmZlckRpc2NhcmRlZCgpKTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9tb2NrQ2xpZW50LnNldEZ1bGxS
b290TGF5ZXJEYW1hZ2VDb3VudCgpKTsKKworICAgIHN3YXBCdWZmZXJzKCk7CisgICAgRVhQRUNU
X0VRKDAsIG1fbW9ja0NvbnRleHQuZnJhbWVDb3VudCgpKTsKKyAgICBFWFBFQ1RfRVEoMiwgbV9t
b2NrQ2xpZW50LnNldEZ1bGxSb290TGF5ZXJEYW1hZ2VDb3VudCgpKTsKKyAgICAKKyAgICBzd2Fw
QnVmZmVycygpOworICAgIEVYUEVDVF9FUSgwLCBtX21vY2tDb250ZXh0LmZyYW1lQ291bnQoKSk7
CisgICAgRVhQRUNUX0VRKDMsIG1fbW9ja0NsaWVudC5zZXRGdWxsUm9vdExheWVyRGFtYWdlQ291
bnQoKSk7Cit9CisKKy8vIFRlc3QgTGF5ZXJSZW5kZXJlckNocm9taXVtIGRpc2NhcmRGcmFtZWJ1
ZmZlciBmdW5jdGlvbmFsaXR5OgorLy8gRGlzY2FyZCBmcmFtZWJ1ZmZlciwgdGhlbiBzZXQgdmlz
aWJpbGl0eSB0byB0cnVlLgorLy8gRXhwZWN0ZWQ6IHJlY3JlYXRlcyB0aGUgZnJhbWVidWZmZXIu
CitURVNUX0YoTGF5ZXJSZW5kZXJlckNocm9taXVtVGVzdCwgU2V0VmlzaWJpbGl0eVRydWVTaG91
bGRSZWNyZWF0ZUJhY2tidWZmZXIpCit7CisgICAgbV9tb2NrQ29udGV4dC5zZXRNZW1vcnlBbGxv
Y2F0aW9uKG1fc3VnZ2VzdEhhdmVCYWNrYnVmZmVyTm8pOworICAgIEVYUEVDVF9UUlVFKG1fbGF5
ZXJSZW5kZXJlckNocm9taXVtLmlzRnJhbWVidWZmZXJEaXNjYXJkZWQoKSk7CisKKyAgICBtX2xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5zZXRWaXNpYmxlKHRydWUpOworICAgIEVYUEVDVF9GQUxTRSht
X2xheWVyUmVuZGVyZXJDaHJvbWl1bS5pc0ZyYW1lYnVmZmVyRGlzY2FyZGVkKCkpOworfQorCisv
LyBUZXN0IExheWVyUmVuZGVyZXJDaHJvbWl1bSBkaXNjYXJkRnJhbWVidWZmZXIgZnVuY3Rpb25h
bGl0eToKKy8vIENyZWF0ZSBhIFNjb3BlZEVuc3VyZUZyYW1lYnVmZmVyQWxsb2NhdGlvbiB3aGls
ZSBhIGZyYW1lYnVmZmVyIHdhcyBkaXNjYXJkZWQgYW5kIHRyeSB0byBzd2FwQnVmZmVycy4KKy8v
IEV4cGVjdGVkOiB3aWxsIHJlY3JlYXRlIGZyYW1lYnVmZmVyIGZvciB0aGUgZHVyYXRpb24gb2Yg
c2NvcGUsIHRoZW4gZGlzY2FyZCBpdCBhZ2Fpbi4KK1RFU1RfRihMYXllclJlbmRlcmVyQ2hyb21p
dW1UZXN0LCBEaXNjYXJkZWRCYWNrYnVmZmVySXNSZWNyZWF0cmVkRm9yU2NvcGVEdXJhdGlvbikK
K3sKKyAgICBtX21vY2tDb250ZXh0LnNldE1lbW9yeUFsbG9jYXRpb24obV9zdWdnZXN0SGF2ZUJh
Y2tidWZmZXJObyk7CisgICAgRVhQRUNUX1RSVUUobV9sYXllclJlbmRlcmVyQ2hyb21pdW0uaXNG
cmFtZWJ1ZmZlckRpc2NhcmRlZCgpKTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9tb2NrQ2xpZW50LnNl
dEZ1bGxSb290TGF5ZXJEYW1hZ2VDb3VudCgpKTsKKyAgICB7CisgICAgICAgIFNjb3BlZEVuc3Vy
ZUZyYW1lYnVmZmVyQWxsb2NhdGlvbiBlbnN1cmVGcmFtZWJ1ZmZlcigmbV9sYXllclJlbmRlcmVy
Q2hyb21pdW0pOworICAgICAgICBFWFBFQ1RfRkFMU0UobV9sYXllclJlbmRlcmVyQ2hyb21pdW0u
aXNGcmFtZWJ1ZmZlckRpc2NhcmRlZCgpKTsKKworICAgICAgICBzd2FwQnVmZmVycygpOworICAg
ICAgICBFWFBFQ1RfRVEoMSwgbV9tb2NrQ29udGV4dC5mcmFtZUNvdW50KCkpOworICAgIH0KKyAg
ICBFWFBFQ1RfVFJVRShtX2xheWVyUmVuZGVyZXJDaHJvbWl1bS5pc0ZyYW1lYnVmZmVyRGlzY2Fy
ZGVkKCkpOworICAgIEVYUEVDVF9FUSgyLCBtX21vY2tDbGllbnQuc2V0RnVsbFJvb3RMYXllckRh
bWFnZUNvdW50KCkpOworfQorCisvLyBUZXN0IExheWVyUmVuZGVyZXJDaHJvbWl1bSBkaXNjYXJk
RnJhbWVidWZmZXIgZnVuY3Rpb25hbGl0eToKKy8vIENyZWF0ZSBhIFNjb3BlZEVuc3VyZUZyYW1l
YnVmZmVyQWxsb2NhdGlvbiB3aGlsZSBhIGZyYW1lYnVmZmVyIHdhcyBub3QgZGlzY2FyZGVkIGFu
ZCB0cnkgdG8gc3dhcEJ1ZmZlcnMuCisvLyBFeHBlY3RlZDogd2lsbCBoYXZlIG5vIGVmZmVjdC4K
K1RFU1RfRihMYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0LCBFbnN1cmluZ0JhY2tidWZmZXJGb3JT
Y29wZUR1cmF0aW9uRG9lc05vdGhpbmdJZkFscmVhZHlFeGlzdHMpCit7CisgICAgRVhQRUNUX0ZB
TFNFKG1fbGF5ZXJSZW5kZXJlckNocm9taXVtLmlzRnJhbWVidWZmZXJEaXNjYXJkZWQoKSk7Cisg
ICAgRVhQRUNUX0VRKDAsIG1fbW9ja0NsaWVudC5zZXRGdWxsUm9vdExheWVyRGFtYWdlQ291bnQo
KSk7CisgICAgeworICAgICAgICBTY29wZWRFbnN1cmVGcmFtZWJ1ZmZlckFsbG9jYXRpb24gZW5z
dXJlRnJhbWVidWZmZXIoJm1fbGF5ZXJSZW5kZXJlckNocm9taXVtKTsKKyAgICAgICAgRVhQRUNU
X0ZBTFNFKG1fbGF5ZXJSZW5kZXJlckNocm9taXVtLmlzRnJhbWVidWZmZXJEaXNjYXJkZWQoKSk7
CisgICAgICAgIEVYUEVDVF9FUSgwLCBtX21vY2tDbGllbnQuc2V0RnVsbFJvb3RMYXllckRhbWFn
ZUNvdW50KCkpOworCisgICAgICAgIHN3YXBCdWZmZXJzKCk7CisgICAgICAgIEVYUEVDVF9FUSgx
LCBtX21vY2tDb250ZXh0LmZyYW1lQ291bnQoKSk7CisgICAgfQorICAgIEVYUEVDVF9GQUxTRSht
X2xheWVyUmVuZGVyZXJDaHJvbWl1bS5pc0ZyYW1lYnVmZmVyRGlzY2FyZGVkKCkpOworICAgIEVY
UEVDVF9FUSgwLCBtX21vY2tDbGllbnQuc2V0RnVsbFJvb3RMYXllckRhbWFnZUNvdW50KCkpOwor
fQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133331</attachid>
            <date>2012-03-22 13:22:56 -0700</date>
            <delta_ts>2012-03-22 14:16:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81823-20120322162254.patch</filename>
            <type>text/plain</type>
            <size>29441</size>
            <attacher name="Michal Mocny">mmocny</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExNzMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTExYjUyMmYyODljNzFk
N2ZiNDM5N2YwZGYzNmNjYWFhMDg1Zjc2ZC4uODIxY2NmZGZhYzUzY2M0M2EzOWIyYWFhZmY1ODI4
Y2UyYTQxN2Y2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDEyLTAzLTIyICBNaWNo
YWwgTW9jbnkgIDxtbW9jbnlAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIExheWVy
UmVuZGVyZXJDaHJvbWl1bSBzaG91bGQgdXNlIEdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkIGNh
bGxiYWNrIHRvIGV4cGxpY2l0bHkgbWFuYWdlIGZyYW1lYnVmZmVyLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE4MjMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZXcgVW5pdFRlc3RzOiBMYXllclJlbmRl
cmVyQ2hyb21pdW1UZXN0CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoTGF5ZXJSZW5kZXJlckdwdU1lbW9y
eUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJHcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlcjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJHcHVNZW1vcnlBbGxvY2F0aW9u
Q2hhbmdlZENhbGxiYWNrQWRhcHRlcjo6fkxheWVyUmVuZGVyZXJHcHVNZW1vcnlBbGxvY2F0aW9u
Q2hhbmdlZENhbGxiYWNrQWRhcHRlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVy
R3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXI6Om9uR3B1TWVtb3J5QWxs
b2NhdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckdwdU1lbW9y
eUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyOjpMYXllclJlbmRlcmVyR3B1TWVtb3J5
QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXIpOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJv
bWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxp
emUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp+TGF5ZXJSZW5k
ZXJlckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
c2V0VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnN3
YXBCdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZGlz
Y2FyZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZW5zdXJlRnJhbWVidWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChMYXllclJlbmRlcmVyQ2hyb21pdW1DbGllbnQpOgorICAgICAgICAoTGF5ZXJSZW5kZXJlckNo
cm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6aXNGcmFt
ZWJ1ZmZlckRpc2NhcmRlZCk6CisgICAgICAgIChTY29wZWRFbnN1cmVGcmFtZWJ1ZmZlckFsbG9j
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVkRW5zdXJlRnJhbWVidWZmZXJBbGxvY2F0
aW9uOjpTY29wZWRFbnN1cmVGcmFtZWJ1ZmZlckFsbG9jYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6U2NvcGVkRW5zdXJlRnJhbWVidWZmZXJBbGxvY2F0aW9uOjp+U2NvcGVkRW5zdXJlRnJhbWVi
dWZmZXJBbGxvY2F0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDYXBh
YmlsaXRpZXM6OkxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMpOgorICAgICAgICAoTGF5ZXJSZW5k
ZXJlckNhcGFiaWxpdGllcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpzZXRWaXNpYmxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmg6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RJ
bXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRo
cmVhZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OmNv
bXBvc2l0ZUFuZFJlYWRiYWNrKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RocmVhZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6
OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKToKKwogMjAxMi0wMy0yMiAgRW1pbCBBIEVrbHVuZCAgPGVh
ZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgdG91Y2hpbmcgZmlsZSB0byBm
b3JjZSBib3RzIHRvIHBpY2sgdXAgQ1NTX1NIQURFUlMgZmxhZyBjaGFuZ2UuIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwppbmRleCA4OGRlYWMzM2EwZDE5YjM3NDI5ZjVhNjRmZTYyNjJiZjU5ZjI2
MzA1Li4wNmNhOWEzYmE4NjAwZjg2NGJkOWI2OTkzYWMwYTgwZjgzZWE2Nzg3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEyLTAzLTIyICBNaWNoYWwgTW9j
bnkgIDxtbW9jbnlAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIExheWVyUmVuZGVy
ZXJDaHJvbWl1bSBzaG91bGQgdXNlIEdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkIGNhbGxiYWNr
IHRvIGV4cGxpY2l0bHkgbWFuYWdlIGZyYW1lYnVmZmVyLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE4MjMKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHRlc3Rz
L0xheWVyUmVuZGVyZXJDaHJvbWl1bVRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKEZyYW1lQ291
bnRpbmdNZW1vcnlBbGxvY2F0aW9uU2V0dGluZ0NvbnRleHQpOgorICAgICAgICAoRnJhbWVDb3Vu
dGluZ01lbW9yeUFsbG9jYXRpb25TZXR0aW5nQ29udGV4dDo6RnJhbWVDb3VudGluZ01lbW9yeUFs
bG9jYXRpb25TZXR0aW5nQ29udGV4dCk6CisgICAgICAgIChGcmFtZUNvdW50aW5nTWVtb3J5QWxs
b2NhdGlvblNldHRpbmdDb250ZXh0OjpwcmVwYXJlVGV4dHVyZSk6CisgICAgICAgIChGcmFtZUNv
dW50aW5nTWVtb3J5QWxsb2NhdGlvblNldHRpbmdDb250ZXh0OjpzZXRNZW1vcnlBbGxvY2F0aW9u
Q2hhbmdlZENhbGxiYWNrQ0hST01JVU0pOgorICAgICAgICAoRnJhbWVDb3VudGluZ01lbW9yeUFs
bG9jYXRpb25TZXR0aW5nQ29udGV4dDo6Z2V0U3RyaW5nKToKKyAgICAgICAgKEZyYW1lQ291bnRp
bmdNZW1vcnlBbGxvY2F0aW9uU2V0dGluZ0NvbnRleHQ6OmZyYW1lQ291bnQpOgorICAgICAgICAo
RnJhbWVDb3VudGluZ01lbW9yeUFsbG9jYXRpb25TZXR0aW5nQ29udGV4dDo6c2V0TWVtb3J5QWxs
b2NhdGlvbik6CisgICAgICAgIChGYWtlTGF5ZXJSZW5kZXJlckNocm9taXVtQ2xpZW50KToKKyAg
ICAgICAgKEZha2VMYXllclJlbmRlcmVyQ2hyb21pdW1DbGllbnQ6OkZha2VMYXllclJlbmRlcmVy
Q2hyb21pdW1DbGllbnQpOgorICAgICAgICAoRmFrZUxheWVyUmVuZGVyZXJDaHJvbWl1bUNsaWVu
dDo6dmlld3BvcnRTaXplKToKKyAgICAgICAgKEZha2VMYXllclJlbmRlcmVyQ2hyb21pdW1DbGll
bnQ6OnNldHRpbmdzKToKKyAgICAgICAgKEZha2VMYXllclJlbmRlcmVyQ2hyb21pdW1DbGllbnQ6
OnJvb3RMYXllcik6CisgICAgICAgIChGYWtlTGF5ZXJSZW5kZXJlckNocm9taXVtQ2xpZW50Ojpk
aWRMb3NlQ29udGV4dCk6CisgICAgICAgIChGYWtlTGF5ZXJSZW5kZXJlckNocm9taXVtQ2xpZW50
OjpvblN3YXBCdWZmZXJzQ29tcGxldGUpOgorICAgICAgICAoRmFrZUxheWVyUmVuZGVyZXJDaHJv
bWl1bUNsaWVudDo6c2V0RnVsbFJvb3RMYXllckRhbWFnZSk6CisgICAgICAgIChGYWtlTGF5ZXJS
ZW5kZXJlckNocm9taXVtQ2xpZW50OjpzZXRGdWxsUm9vdExheWVyRGFtYWdlQ291bnQpOgorICAg
ICAgICAoRmFrZUxheWVyUmVuZGVyZXJDaHJvbWl1bSk6CisgICAgICAgIChGYWtlTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpGYWtlTGF5ZXJSZW5kZXJlckNocm9taXVtKToKKyAgICAgICAgKExheWVy
UmVuZGVyZXJDaHJvbWl1bVRlc3QpOgorICAgICAgICAoTGF5ZXJSZW5kZXJlckNocm9taXVtVGVz
dDo6TGF5ZXJSZW5kZXJlckNocm9taXVtVGVzdCk6CisgICAgICAgIChMYXllclJlbmRlcmVyQ2hy
b21pdW1UZXN0OjpTZXRVcCk6CisgICAgICAgIChMYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0Ojpz
d2FwQnVmZmVycyk6CisgICAgICAgIChURVNUX0YpOgorCiAyMDEyLTAzLTIyICBBZHJpZW5uZSBX
YWxrZXIgIDxlbm5lQGdvb2dsZS5jb20+CiAKICAgICAgICAgW2Nocm9taXVtXSBGaXggc2Nyb2xs
YmFyIGxheWVycyBob2xkaW5nIG9udG8gaW52YWxpZCB0ZXh0dXJlcyBhZnRlciBsb3N0IGNvbnRl
eHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IDI3YjNlZGU1MTMy
NTdhN2E5ZjQ2YjlhZTI0OTIxOTZhNmM5NjM5OTAuLjZkZTkyNDA5ZTcwYzJlNjRjYmQwYzRiZDUz
ZTcxMzEzNTQ3YTkyMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApA
QCAtMTY1LDYgKzE2NSwzMSBAQCBwcml2YXRlOgogICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSog
bV9sYXllclJlbmRlcmVyOwogfTsKIAorY2xhc3MgTGF5ZXJSZW5kZXJlckdwdU1lbW9yeUFsbG9j
YXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyIDogcHVibGljIEV4dGVuc2lvbnMzRENocm9taXVt
OjpHcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQ0hST01JVU0geworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPExheWVyUmVuZGVyZXJHcHVNZW1vcnlBbGxvY2F0aW9uQ2hh
bmdlZENhbGxiYWNrQWRhcHRlcj4gY3JlYXRlKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJS
ZW5kZXJlcikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgTGF5ZXJSZW5kZXJl
ckdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyKGxheWVyUmVuZGVyZXIp
KTsKKyAgICB9CisgICAgdmlydHVhbCB+TGF5ZXJSZW5kZXJlckdwdU1lbW9yeUFsbG9jYXRpb25D
aGFuZ2VkQ2FsbGJhY2tBZGFwdGVyKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgb25HcHVNZW1v
cnlBbGxvY2F0aW9uQ2hhbmdlZChFeHRlbnNpb25zM0RDaHJvbWl1bTo6R3B1TWVtb3J5QWxsb2Nh
dGlvbkNIUk9NSVVNIGFsbG9jYXRpb24pCisgICAgeworICAgICAgICBpZiAoIWFsbG9jYXRpb24u
c3VnZ2VzdEhhdmVCYWNrYnVmZmVyKQorICAgICAgICAgICAgbV9sYXllclJlbmRlcmVyLT5kaXNj
YXJkRnJhbWVidWZmZXIoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9sYXllclJlbmRl
cmVyLT5lbnN1cmVGcmFtZWJ1ZmZlcigpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBleHBsaWNp
dCBMYXllclJlbmRlcmVyR3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXIo
TGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQorICAgICAgICA6IG1fbGF5ZXJS
ZW5kZXJlcihsYXllclJlbmRlcmVyKQorICAgIHsKKyAgICB9CisKKyAgICBMYXllclJlbmRlcmVy
Q2hyb21pdW0qIG1fbGF5ZXJSZW5kZXJlcjsKK307CisKIAogUGFzc093blB0cjxMYXllclJlbmRl
cmVyQ2hyb21pdW0+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKExheWVyUmVuZGVyZXJD
aHJvbWl1bUNsaWVudCogY2xpZW50LCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250
ZXh0KQogewpAQCAtMTg0LDYgKzIwOSw3IEBAIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtKExheWVyUmVuZGVyZXJDaHJvbWl1bUNsaWVudCogY2xpZW50CiAgICAg
LCBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlKDApCiAgICAgLCBtX3NoYXJlZEdlb21ldHJ5UXVhZChG
bG9hdFJlY3QoLTAuNWYsIC0wLjVmLCAxLjBmLCAxLjBmKSkKICAgICAsIG1faXNWaWV3cG9ydENo
YW5nZWQoZmFsc2UpCisgICAgLCBtX2lzRnJhbWVidWZmZXJEaXNjYXJkZWQoZmFsc2UpCiB7CiB9
CiAKQEAgLTI1OSw2ICsyODUsMTcgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRp
YWxpemUoKQogICAgIGlmIChtX2NhcGFiaWxpdGllcy51c2luZ1RleHR1cmVTdG9yYWdlRXh0ZW5z
aW9uKQogICAgICAgICBleHRlbnNpb25zLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfdGV4dHVyZV9z
dG9yYWdlIik7CiAKKyAgICBtX2NhcGFiaWxpdGllcy51c2luZ0dwdU1lbW9yeU1hbmFnZXIgPSBl
eHRlbnNpb25zLT5zdXBwb3J0cygiR0xfQ0hST01JVU1fZ3B1X21lbW9yeV9tYW5hZ2VyIik7Cisg
ICAgaWYgKG1fY2FwYWJpbGl0aWVzLnVzaW5nR3B1TWVtb3J5TWFuYWdlcikgeworICAgICAgICBl
eHRlbnNpb25zLT5lbnN1cmVFbmFibGVkKCJHTF9DSFJPTUlVTV9ncHVfbWVtb3J5X21hbmFnZXIi
KTsKKyAgICAgICAgRXh0ZW5zaW9uczNEQ2hyb21pdW0qIGV4dGVuc2lvbnMzRENocm9taXVtID0g
c3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21pdW0qPihleHRlbnNpb25zKTsKKyAgICAgICAg
ZXh0ZW5zaW9uczNEQ2hyb21pdW0tPnNldEdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJh
Y2tDSFJPTUlVTShMYXllclJlbmRlcmVyR3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFj
a0FkYXB0ZXI6OmNyZWF0ZSh0aGlzKSk7CisgICAgfQorCisgICAgbV9jYXBhYmlsaXRpZXMudXNp
bmdEaXNjYXJkRnJhbWVidWZmZXIgPSBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfRVhUX2Rpc2Nh
cmRfZnJhbWVidWZmZXIiKTsKKyAgICBpZiAobV9jYXBhYmlsaXRpZXMudXNpbmdEaXNjYXJkRnJh
bWVidWZmZXIpCisgICAgICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQoIkdMX0VYVF9kaXNj
YXJkX2ZyYW1lYnVmZmVyIik7CisKICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQt
PmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVYVFVSRV9TSVpFLCAmbV9jYXBh
YmlsaXRpZXMubWF4VGV4dHVyZVNpemUpKTsKICAgICBtX2NhcGFiaWxpdGllcy5iZXN0VGV4dHVy
ZUZvcm1hdCA9IFBsYXRmb3JtQ29sb3I6OmJlc3RUZXh0dXJlRm9ybWF0KG1fY29udGV4dC5nZXQo
KSk7CiAKQEAgLTI3Nyw2ICszMTQsNyBAQCBMYXllclJlbmRlcmVyQ2hyb21pdW06On5MYXllclJl
bmRlcmVyQ2hyb21pdW0oKQogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAg
ICAgRXh0ZW5zaW9uczNEQ2hyb21pdW0qIGV4dGVuc2lvbnMzRENocm9taXVtID0gc3RhdGljX2Nh
c3Q8RXh0ZW5zaW9uczNEQ2hyb21pdW0qPihtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKSk7CiAg
ICAgZXh0ZW5zaW9uczNEQ2hyb21pdW0tPnNldFN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0NI
Uk9NSVVNKG51bGxwdHIpOworICAgIGV4dGVuc2lvbnMzRENocm9taXVtLT5zZXRHcHVNZW1vcnlB
bGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQ0hST01JVU0obnVsbHB0cik7CiAgICAgbV9oZWFkc1Vw
RGlzcGxheS5jbGVhcigpOyAvLyBFeHBsaWNpdGx5IGRlc3Ryb3kgdGhlIEhVRCBiZWZvcmUgdGhl
IFRleHR1cmVNYW5hZ2VyIGRpZXMuCiAgICAgY2xlYW51cFNoYXJlZE9iamVjdHMoKTsKIH0KQEAg
LTMxMSw2ICszNDksMTAgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldFZpc2libGUo
Ym9vbCB2aXNpYmxlKQogICAgIGlmICghdmlzaWJsZSkKICAgICAgICAgcmVsZWFzZVJlbmRlclN1
cmZhY2VUZXh0dXJlcygpOwogCisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIG9uY2UgZnJhbWVi
dWZmZXIgaXMgYXV0b21hdGljYWxseSByZWNyZWF0ZWQgb24gZmlyc3QgdXNlCisgICAgaWYgKHZp
c2libGUpCisgICAgICAgIGVuc3VyZUZyYW1lYnVmZmVyKCk7CisKICAgICAvLyBUT0RPOiBSZXBs
YWNlIHNldFZpc2liaWxpdHlDSFJPTUlVTSB3aXRoIGFuIGV4dGVuc2lvbiB0byBleHBsaWNpdGx5
IG1hbmFnZSBmcm9udC9iYWNrYnVmZmVycwogICAgIC8vIGNyYnVnLmNvbS8xMTYwNDkKICAgICBp
ZiAobV9jYXBhYmlsaXRpZXMudXNpbmdTZXRWaXNpYmlsaXR5KSB7CkBAIC0xMDMxLDYgKzEwNzMs
MTMgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmZpbmlzaCgpCiAKIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpzd2FwQnVmZmVycyhjb25zdCBJbnRSZWN0JiBzdWJCdWZmZXIpCiB7
CisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIG9uY2UgZ3B1IHByb2Nlc3Mgc3VwcG9ydHMgaWdu
b3Jpbmcgc3dhcCBidWZmZXJzIGNvbW1hbmQgd2hpbGUgZnJhbWVidWZmZXIgaXMgZGlzY2FyZGVk
LgorICAgIC8vICAgICAgICBBbHRlcm5hdGl2ZWx5IChwcmVmZXJhYmx5PyksIHByb3RlY3QgYWxs
IGNjIGNvZGUgc28gYXMgbm90IHRvIGF0dGVtcHQgYSBzd2FwIGFmdGVyIGEgZnJhbWVidWZmZXIg
ZGlzY2FyZC4KKyAgICBpZiAobV9pc0ZyYW1lYnVmZmVyRGlzY2FyZGVkKSB7CisgICAgICAgIG1f
Y2xpZW50LT5zZXRGdWxsUm9vdExheWVyRGFtYWdlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzd2FwQnVmZmVycyIs
IHRoaXMsIDApOwogICAgIC8vIFdlJ3JlIGRvbmUhIFRpbWUgdG8gc3dhcGJ1ZmZlcnMhCiAKQEAg
LTEwNTQsNiArMTEwMywzOCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6b25Td2FwQnVm
ZmVyc0NvbXBsZXRlKCkKICAgICBtX2NsaWVudC0+b25Td2FwQnVmZmVyc0NvbXBsZXRlKCk7CiB9
CiAKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkaXNjYXJkRnJhbWVidWZmZXIoKQorewor
ICAgIGlmIChtX2lzRnJhbWVidWZmZXJEaXNjYXJkZWQpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmICghbV9jYXBhYmlsaXRpZXMudXNpbmdEaXNjYXJkRnJhbWVidWZmZXIpCisgICAgICAgIHJl
dHVybjsKKworICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IG1fY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpOworICAgIEV4dGVuc2lvbnMzRENocm9taXVtKiBleHRlbnNpb25zM0RDaHJvbWl1
bSA9IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4oZXh0ZW5zaW9ucyk7CisgICAg
Ly8gRklYTUU6IFVwZGF0ZSBhdHRhY2htZW50cyBhcmd1bWVudCB0byBhcHByb3ByaWF0ZSB2YWx1
ZXMgb25jZSB0aGV5IGFyZSBubyBsb25nZXIgaWdub3JlZC4KKyAgICBleHRlbnNpb25zM0RDaHJv
bWl1bS0+ZGlzY2FyZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCAwLCAwKTsKKyAgICBtX2lzRnJhbWVidWZmZXJEaXNjYXJkZWQgPSB0cnVlOworCisgICAgLy8g
RGFtYWdlIHRyYWNrZXIgbmVlZHMgYSBmdWxsIHJlc2V0IGV2ZXJ5IHRpbWUgZnJhbWVidWZmZXIg
aXMgZGlzY2FyZGVkLgorICAgIG1fY2xpZW50LT5zZXRGdWxsUm9vdExheWVyRGFtYWdlKCk7Cit9
CisKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjplbnN1cmVGcmFtZWJ1ZmZlcigpCit7Cisg
ICAgaWYgKCFtX2lzRnJhbWVidWZmZXJEaXNjYXJkZWQpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmICghbV9jYXBhYmlsaXRpZXMudXNpbmdEaXNjYXJkRnJhbWVidWZmZXIpCisgICAgICAgIHJl
dHVybjsKKworICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IG1fY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpOworICAgIEV4dGVuc2lvbnMzRENocm9taXVtKiBleHRlbnNpb25zM0RDaHJvbWl1
bSA9IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4oZXh0ZW5zaW9ucyk7CisgICAg
ZXh0ZW5zaW9uczNEQ2hyb21pdW0tPmVuc3VyZUZyYW1lYnVmZmVyQ0hST01JVU0oKTsKKyAgICBt
X2lzRnJhbWVidWZmZXJEaXNjYXJkZWQgPSBmYWxzZTsKK30KKwogdm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmdldEZyYW1lYnVmZmVyUGl4ZWxzKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVj
dCYgcmVjdCkKIHsKICAgICBBU1NFUlQocmVjdC5tYXhYKCkgPD0gdmlld3BvcnRXaWR0aCgpICYm
IHJlY3QubWF4WSgpIDw9IHZpZXdwb3J0SGVpZ2h0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uaAppbmRleCA1MmVhODdjMTMzYjE1N2YxYTVlMGE4ODIwYWRkZjYzMTYxZjA4ZDYz
Li42MWMxZDRhODc3YmViY2NmYTVkYTFmZDFkZWI2NDIzMTkyMmEyYzcxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAtNjEsNiArNjEsNyBAQCBjbGFzcyBHZW9tZXRyeUJp
bmRpbmc7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIGNsYXNzIFRyYWNraW5nVGV4dHVyZUFs
bG9jYXRvcjsKIGNsYXNzIExheWVyUmVuZGVyZXJTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tB
ZGFwdGVyOworY2xhc3MgU2NvcGVkRW5zdXJlRnJhbWVidWZmZXJBbGxvY2F0aW9uOwogCiBjbGFz
cyBMYXllclJlbmRlcmVyQ2hyb21pdW1DbGllbnQgewogcHVibGljOgpAQCAtNzAsNiArNzEsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBjb25zdCBDQ0xheWVySW1wbCogcm9vdExheWVyKCkgY29u
c3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRMb3NlQ29udGV4dCgpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgb25Td2FwQnVmZmVyc0NvbXBsZXRlKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRGdWxsUm9vdExheWVyRGFtYWdlKCkgPSAwOwogfTsKIAogLy8gQ2xhc3MgdGhhdCBoYW5kbGVz
IGRyYXdpbmcgb2YgY29tcG9zaXRlZCByZW5kZXIgbGF5ZXJzIHVzaW5nIEdMLgpAQCAtMTYwLDEw
ICsxNjIsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB3aWR0
aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBGbG9hdFF1YWQmLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgbWF0cml4TG9jYXRpb24sIGludCBhbHBoYUxvY2F0aW9u
LCBpbnQgcXVhZExvY2F0aW9uKTsKIAotcHJpdmF0ZToKKyAgICB2b2lkIGRpc2NhcmRGcmFtZWJ1
ZmZlcigpOworICAgIHZvaWQgZW5zdXJlRnJhbWVidWZmZXIoKTsKKyAgICBib29sIGlzRnJhbWVi
dWZmZXJEaXNjYXJkZWQoKSBjb25zdCB7IHJldHVybiBtX2lzRnJhbWVidWZmZXJEaXNjYXJkZWQ7
IH0KKworcHJvdGVjdGVkOgogICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bShMYXllclJlbmRlcmVy
Q2hyb21pdW1DbGllbnQqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPik7CiAgICAgYm9v
bCBpbml0aWFsaXplKCk7CiAKK3ByaXZhdGU6CiAgICAgdm9pZCBkcmF3UXVhZChjb25zdCBDQ0Ry
YXdRdWFkKiwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCk7CiAgICAgdm9pZCBk
cmF3RGVidWdCb3JkZXJRdWFkKGNvbnN0IENDRGVidWdCb3JkZXJEcmF3UXVhZCopOwogICAgIHZv
aWQgZHJhd1JlbmRlclN1cmZhY2VRdWFkKGNvbnN0IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkKik7
CkBAIC0yNTQsOCArMjYxLDM3IEBAIHByaXZhdGU6CiAgICAgRmxvYXRRdWFkIG1fc2hhcmVkR2Vv
bWV0cnlRdWFkOwogCiAgICAgYm9vbCBtX2lzVmlld3BvcnRDaGFuZ2VkOworICAgIGJvb2wgbV9p
c0ZyYW1lYnVmZmVyRGlzY2FyZGVkOwogfTsKIAorLy8gVGhlIHB1cnBvc2Ugb2YgdGhpcyBoZWxw
ZXIgaXMgdHdvZm9sZDoKKy8vIDEuIFRvIGVuc3VyZSB0aGF0IGEgZnJhbWVidWZmZXIgaXMgYXZh
aWxhYmxlIGZvciBzY29wZSBsaWZldGltZSwgYW5kCisvLyAyLiBUbyByZXNldCBmcmFtZWJ1ZmZl
ciBhbGxvY2F0aW9uIHRvIHByZXZpb3VzIHN0YXRlIG9uIHNjb3BlIGV4aXQuCisvLyBJZiB0aGUg
ZnJhbWVidWZmZXIgaXMgcmVjcmVhdGVkLCBpdHMgY29udGVudHMgYXJlIHVuZGVmaW5lZC4KKy8v
IEZJWE1FOiBQcmV2ZW50L2RlbGF5IGRpc2NhcmRpbmcgZnJhbWVidWZmZXIgdmlhIGFueSBtZWFu
cyB3aGlsZSBhbnkKKy8vIGluc3RhbmNlIG9mIHRoaXMgaXMgYWxpdmUuIEF0IHRoZSBtb21lbnQs
IHRoaXMgaXNuJ3QgYW4gaXNzdWUuCitjbGFzcyBTY29wZWRFbnN1cmVGcmFtZWJ1ZmZlckFsbG9j
YXRpb24geworcHVibGljOgorICAgIGV4cGxpY2l0IFNjb3BlZEVuc3VyZUZyYW1lYnVmZmVyQWxs
b2NhdGlvbihMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCisgICAgICAgIDog
bV9sYXllclJlbmRlcmVyKGxheWVyUmVuZGVyZXIpCisgICAgICAgICwgbV9mcmFtZWJ1ZmZlcldh
c0luaXRpYWxseURpc2NhcmRlZChsYXllclJlbmRlcmVyLT5pc0ZyYW1lYnVmZmVyRGlzY2FyZGVk
KCkpCisgICAgeworICAgICAgICBpZiAobV9mcmFtZWJ1ZmZlcldhc0luaXRpYWxseURpc2NhcmRl
ZCkKKyAgICAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZW5zdXJlRnJhbWVidWZmZXIoKTsKKyAg
ICB9CisKKyAgICB+U2NvcGVkRW5zdXJlRnJhbWVidWZmZXJBbGxvY2F0aW9uKCkKKyAgICB7Cisg
ICAgICAgIGlmIChtX2ZyYW1lYnVmZmVyV2FzSW5pdGlhbGx5RGlzY2FyZGVkKQorICAgICAgICAg
ICAgbV9sYXllclJlbmRlcmVyLT5kaXNjYXJkRnJhbWVidWZmZXIoKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBtX2xheWVyUmVuZGVyZXI7CisgICAgYm9v
bCBtX2ZyYW1lYnVmZmVyV2FzSW5pdGlhbGx5RGlzY2FyZGVkOworfTsKKworCiAvLyBTZXR0aW5n
IERFQlVHX0dMX0NBTExTIHRvIDEgd2lsbCBjYWxsIGdsR2V0RXJyb3IoKSBhZnRlciBhbG1vc3Qg
ZXZlcnkgR0wKIC8vIGNhbGwgbWFkZSBieSB0aGUgY29tcG9zaXRvci4gVXNlZnVsIGZvciBkZWJ1
Z2dpbmcgcmVuZGVyaW5nIGlzc3VlcyBidXQKIC8vIHdpbGwgc2lnbmlmaWNhbnRseSBkZWdyYWRl
IHBlcmZvcm1hbmNlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAppbmRleCA5Zjc4MGE3YWU3
N2FhMWU4ZTE1MTM3YTFkYjhmOWYwZjkwYmY4Y2FiLi43MzkwZWMzNGE5ZTdiOGQwMzA2YjNkNjY5
NDYxMWUwMGE0ZDcyNzY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApAQCAtMTAyLDYg
KzEwMiw4IEBAIHN0cnVjdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzIHsKICAgICAgICAgLCB1
c2luZ1N3YXBDb21wbGV0ZUNhbGxiYWNrKGZhbHNlKQogICAgICAgICAsIHVzaW5nVGV4dHVyZVVz
YWdlSGludChmYWxzZSkKICAgICAgICAgLCB1c2luZ1RleHR1cmVTdG9yYWdlRXh0ZW5zaW9uKGZh
bHNlKQorICAgICAgICAsIHVzaW5nR3B1TWVtb3J5TWFuYWdlcihmYWxzZSkKKyAgICAgICAgLCB1
c2luZ0Rpc2NhcmRGcmFtZWJ1ZmZlcihmYWxzZSkKICAgICAgICAgLCBtYXhUZXh0dXJlU2l6ZSgw
KSB7IH0KIAogICAgIEdDM0RlbnVtIGJlc3RUZXh0dXJlRm9ybWF0OwpAQCAtMTEzLDYgKzExNSw4
IEBAIHN0cnVjdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzIHsKICAgICBib29sIHVzaW5nU3dh
cENvbXBsZXRlQ2FsbGJhY2s7CiAgICAgYm9vbCB1c2luZ1RleHR1cmVVc2FnZUhpbnQ7CiAgICAg
Ym9vbCB1c2luZ1RleHR1cmVTdG9yYWdlRXh0ZW5zaW9uOworICAgIGJvb2wgdXNpbmdHcHVNZW1v
cnlNYW5hZ2VyOworICAgIGJvb2wgdXNpbmdEaXNjYXJkRnJhbWVidWZmZXI7CiAgICAgaW50IG1h
eFRleHR1cmVTaXplOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNw
cAppbmRleCA0NDNhMWZmYWE3N2JhMGVlNTIwMjlkZjBlM2FiMTQ5NjdmNGM1MmRiLi45ZGZmZWUz
NTNhZWUwZWUyMDczNDJkZDdkYzM0Y2VkMTU2YzRjYTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtNDgwLDExICs0ODAsNiBAQCB2b2lkIENDTGF5ZXJUcmVl
SG9zdEltcGw6OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQogCiAgICAgbV9sYXllclJlbmRlcmVy
LT5zZXRWaXNpYmxlKHZpc2libGUpOwogCi0gICAgLy8gUmVzZXQgdGhlIGRhbWFnZSB0cmFja2Vy
IGJlY2F1c2UgdGhlIGZyb250L2JhY2sgYnVmZmVycyBtYXkgaGF2ZSBiZWVuIGRhbWFnZWQgYnkg
dGhlIEdQVQotICAgIC8vIHByb2Nlc3Mgb24gdmlzaWJpbGl0eSBjaGFuZ2UuCi0gICAgaWYgKHZp
c2libGUgJiYgbV9sYXllclJlbmRlcmVyLT5jYXBhYmlsaXRpZXMoKS51c2luZ1BhcnRpYWxTd2Fw
KQotICAgICAgICBzZXRGdWxsUm9vdExheWVyRGFtYWdlKCk7Ci0KICAgICBjb25zdCBib29sIHNo
b3VsZFRpY2tJbkJhY2tncm91bmQgPSAhdmlzaWJsZSAmJiBtX25lZWRzQW5pbWF0ZUxheWVyczsK
ICAgICBtX3RpbWVTb3VyY2VDbGllbnRBZGFwdGVyLT5zZXRBY3RpdmUoc2hvdWxkVGlja0luQmFj
a2dyb3VuZCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKaW5kZXggZTBj
NmU3M2EzMzQyMGRkNDdkMDk1NDI4NjJjYjlhNDhhMGFkMWNiMC4uNzdlYjg5MmZiZTk4ZWNmZWEy
ZWI4ZTExOTE4MzgyZGU1ZjdjZGFlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuaApAQCAtOTgsNiArOTgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBjb25zdCBDQ0xheWVy
SW1wbCogcm9vdExheWVyKCkgY29uc3QgIHsgcmV0dXJuIG1fcm9vdExheWVySW1wbC5nZXQoKTsg
fQogICAgIHZpcnR1YWwgdm9pZCBkaWRMb3NlQ29udGV4dCgpOwogICAgIHZpcnR1YWwgdm9pZCBv
blN3YXBCdWZmZXJzQ29tcGxldGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RnVsbFJvb3RMYXll
ckRhbWFnZSgpOwogCiAgICAgLy8gSW1wbGVtZW50YXRpb24KICAgICBib29sIGNhbkRyYXcoKTsK
QEAgLTEzNCwxMCArMTM1LDYgQEAgcHVibGljOgogCiAgICAgUGFzc093blB0cjxDQ1Njcm9sbEFu
ZFNjYWxlU2V0PiBwcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CiAKLSAgICAvLyBXaGVyZSBwb3NzaWJs
ZSwgcmVkcmF3cyBhcmUgc2Npc3NvcmVkIHRvIGEgZGFtYWdlIHJlZ2lvbiBjYWxjdWxhdGVkIGZy
b20gY2hhbmdlcyB0bwotICAgIC8vIGxheWVyIHByb3BlcnRpZXMuIFRoaXMgZnVuY3Rpb24gb3Zl
cnJpZGVzIHRoZSBkYW1hZ2UgcmVnaW9uIGZvciB0aGUgbmV4dCBkcmF3IGN5Y2xlLgotICAgIHZv
aWQgc2V0RnVsbFJvb3RMYXllckRhbWFnZSgpOwotCiAgICAgdm9pZCBzdGFydFBhZ2VTY2FsZUFu
aW1hdGlvbihjb25zdCBJbnRTaXplJiB0cmFnZXRQb3NpdGlvbiwgYm9vbCB1c2VBbmNob3IsIGZs
b2F0IHNjYWxlLCBkb3VibGUgZHVyYXRpb25TZWMpOwogCiAgICAgYm9vbCBuZWVkc0FuaW1hdGVM
YXllcnMoKSBjb25zdCB7IHJldHVybiBtX25lZWRzQW5pbWF0ZUxheWVyczsgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVU
aHJlYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcAppbmRleCA2MDdiMzhhZjdhMjJjYzc3NGZmNmEx
NzI3OTNkM2RlNTllNDAzNjhiLi4yZDllMGYzNDFmZTcyNTdkMzQ3OThmNmNmMWI4ZDRkZjg1OWQy
MGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcApAQCAtNzIsNiAr
NzIsOCBAQCBib29sIENDU2luZ2xlVGhyZWFkUHJveHk6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZv
aWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYgcmVjdAogICAgIFRSQUNFX0VWRU5UKCJDQ1Npbmds
ZVRocmVhZFByb3h5Ojpjb21wb3NpdGVBbmRSZWFkYmFjayIsIHRoaXMsIDApOwogICAgIEFTU0VS
VChDQ1Byb3h5Ojppc01haW5UaHJlYWQoKSk7CiAKKyAgICBTY29wZWRFbnN1cmVGcmFtZWJ1ZmZl
ckFsbG9jYXRpb24gZW5zdXJlRnJhbWVidWZmZXIobV9sYXllclRyZWVIb3N0SW1wbC0+bGF5ZXJS
ZW5kZXJlcigpKTsKKwogICAgIGlmICghY29tbWl0SWZOZWVkZWQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCmluZGV4IGU0MTczYThhZDYxMTNm
N2VkYzRiOTAyYWIwYTdmODUwODYzYTE0NWYuLjgyNzA3NDBkMDA2OWQ4MWE0M2VkMDYzNjc0OTMx
ZWRiYzEzM2Q0MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCkBAIC05MSw2ICs5MSw4
IEBAIGJvb2wgQ0NUaHJlYWRQcm94eTo6Y29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxz
LCBjb25zdCBJbnRSZWN0JiByZWN0KQogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAg
QVNTRVJUKG1fbGF5ZXJUcmVlSG9zdCk7CiAKKyAgICBTY29wZWRFbnN1cmVGcmFtZWJ1ZmZlckFs
bG9jYXRpb24gZW5zdXJlRnJhbWVidWZmZXIobV9sYXllclRyZWVIb3N0SW1wbC0+bGF5ZXJSZW5k
ZXJlcigpKTsKKwogICAgIGlmICghbV9sYXllclJlbmRlcmVySW5pdGlhbGl6ZWQpIHsKICAgICAg
ICAgVFJBQ0VfRVZFTlQoImNvbXBvc2l0ZUFuZFJlYWRiYWNrX0Vhcmx5T3V0X0xSX1VuaW5pdGlh
bGl6ZWQiLCB0aGlzLCAwKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cGkKaW5kZXggZTI2N2E1YmQzZGI5M2NkYjJjN2Y4OTJjMjE2Yjg5NzJmMzMzN2Yy
YS4uODg5NDI5YmQ5MjM4MDFkNjMxNzZmYmQwMTI2NzA1NDZlMjY4OGU0ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL1dlYktpdC5neXBpCkBAIC0xMDUsNiArMTA1LDcgQEAKICAgICAgICAgICAgICd0ZXN0
cy9LZXlib2FyZFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9LVVJMVGVzdC5jcHAnLAog
ICAgICAgICAgICAgJ3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcCcsCisgICAgICAgICAgICAn
dGVzdHMvTGF5ZXJSZW5kZXJlckNocm9taXVtVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3Rz
L0xheWVyVGV4dHVyZVVwZGF0ZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvTGV2ZWxE
QlRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9Mb2NhbGl6ZWROdW1iZXJJQ1VUZXN0LmNw
cCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllclJl
bmRlcmVyQ2hyb21pdW1UZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMjVlZDA5YjdmM2RmNDA2ZjljZDVi
OTFkYzM0M2I5NGJjMjAyZTIxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9MYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0LmNwcApAQCAtMCwwICsxLDIyNiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oIgorCisjaW5jbHVkZSAiRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNELmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGUuaCIKKworI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CisjaW5jbHVkZSA8Z3Rl
c3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2Ug
V2ViS2l0OworCitjbGFzcyBGcmFtZUNvdW50aW5nTWVtb3J5QWxsb2NhdGlvblNldHRpbmdDb250
ZXh0IDogcHVibGljIEZha2VXZWJHcmFwaGljc0NvbnRleHQzRCB7CitwdWJsaWM6CisgICAgRnJh
bWVDb3VudGluZ01lbW9yeUFsbG9jYXRpb25TZXR0aW5nQ29udGV4dCgpIDogbV9mcmFtZSgwKSB7
IH0KKworICAgIC8vIFdlYkdyYXBoaWNzQ29udGV4dDNEIG1ldGhvZHMuCisKKyAgICAvLyBUaGlz
IG1ldGhvZCB3b3VsZCBub3JtYWxseSBkbyBhIGdsU3dhcEJ1ZmZlcnMgdW5kZXIgdGhlIGhvb2Qu
CisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVUZXh0dXJlKCkgeyBtX2ZyYW1lKys7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgc2V0TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNKFdl
YkdyYXBoaWNzTWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNKiBjYWxsYmFj
aykgeyBtX21lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2sgPSBjYWxsYmFjazsgfQorICAg
IHZpcnR1YWwgV2ViU3RyaW5nIGdldFN0cmluZyhXZWJLaXQ6OldHQzNEZW51bSBuYW1lKQorICAg
IHsKKyAgICAgICAgaWYgKG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkVYVEVOU0lPTlMpCisg
ICAgICAgICAgICByZXR1cm4gV2ViU3RyaW5nKCJHTF9DSFJPTUlVTV9zZXRfdmlzaWJpbGl0eSBH
TF9DSFJPTUlVTV9ncHVfbWVtb3J5X21hbmFnZXIgR0xfRVhUX2Rpc2NhcmRfZnJhbWVidWZmZXIi
KTsKKyAgICAgICAgcmV0dXJuIFdlYlN0cmluZygpOworICAgIH0KKworICAgIC8vIE1ldGhvZHMg
YWRkZWQgZm9yIHRlc3QuCisgICAgaW50IGZyYW1lQ291bnQoKSB7IHJldHVybiBtX2ZyYW1lOyB9
CisgICAgdm9pZCBzZXRNZW1vcnlBbGxvY2F0aW9uKFdlYkdyYXBoaWNzTWVtb3J5QWxsb2NhdGlv
biBhbGxvY2F0aW9uKSB7IG1fbWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFjay0+b25NZW1v
cnlBbGxvY2F0aW9uQ2hhbmdlZChhbGxvY2F0aW9uKTsgfQorCitwcml2YXRlOgorICAgIGludCBt
X2ZyYW1lOworICAgIFdlYkdyYXBoaWNzTWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NI
Uk9NSVVNKiBtX21lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2s7Cit9OworCitjbGFzcyBG
YWtlTGF5ZXJSZW5kZXJlckNocm9taXVtQ2xpZW50IDogcHVibGljIExheWVyUmVuZGVyZXJDaHJv
bWl1bUNsaWVudCB7CitwdWJsaWM6CisgICAgRmFrZUxheWVyUmVuZGVyZXJDaHJvbWl1bUNsaWVu
dCgpIDogbV9zZXRGdWxsUm9vdExheWVyRGFtYWdlQ291bnQoMCkgeyB9CisKKyAgICAvLyBMYXll
clJlbmRlcmVyQ2hyb21pdW1DbGllbnQgbWV0aG9kcy4KKyAgICB2aXJ0dWFsIGNvbnN0IEludFNp
emUmIHZpZXdwb3J0U2l6ZSgpIGNvbnN0IHsgc3RhdGljIEludFNpemUgZmFrZVNpemU7IHJldHVy
biBmYWtlU2l6ZTsgfQorICAgIHZpcnR1YWwgY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MoKSBj
b25zdCB7IHN0YXRpYyBDQ1NldHRpbmdzIGZha2VTZXR0aW5nczsgcmV0dXJuIGZha2VTZXR0aW5n
czsgfQorICAgIHZpcnR1YWwgQ0NMYXllckltcGwqIHJvb3RMYXllcigpIHsgcmV0dXJuIDA7IH0K
KyAgICB2aXJ0dWFsIGNvbnN0IENDTGF5ZXJJbXBsKiByb290TGF5ZXIoKSBjb25zdCB7IHJldHVy
biAwOyB9CisgICAgdmlydHVhbCB2b2lkIGRpZExvc2VDb250ZXh0KCkgeyB9CisgICAgdmlydHVh
bCB2b2lkIG9uU3dhcEJ1ZmZlcnNDb21wbGV0ZSgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRG
dWxsUm9vdExheWVyRGFtYWdlKCkgeyBtX3NldEZ1bGxSb290TGF5ZXJEYW1hZ2VDb3VudCsrOyB9
CisKKyAgICAvLyBNZXRob2RzIGFkZGVkIGZvciB0ZXN0LgorICAgIGludCBzZXRGdWxsUm9vdExh
eWVyRGFtYWdlQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3NldEZ1bGxSb290TGF5ZXJEYW1hZ2VD
b3VudDsgfQorCitwcml2YXRlOgorICAgIGludCBtX3NldEZ1bGxSb290TGF5ZXJEYW1hZ2VDb3Vu
dDsKK307CisKK2NsYXNzIEZha2VMYXllclJlbmRlcmVyQ2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJS
ZW5kZXJlckNocm9taXVtIHsKK3B1YmxpYzoKKyAgICBGYWtlTGF5ZXJSZW5kZXJlckNocm9taXVt
KExheWVyUmVuZGVyZXJDaHJvbWl1bUNsaWVudCogY2xpZW50LCBQYXNzUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiBjb250ZXh0KSA6IExheWVyUmVuZGVyZXJDaHJvbWl1bShjbGllbnQsIGNvbnRl
eHQpIHsgfQorCisgICAgLy8gTGF5ZXJSZW5kZXJlckNocm9taXVtIG1ldGhvZHMuCisKKyAgICAv
LyBDaGFuZ2luZyB2aXNpYmlsaXR5IHRvIHB1YmxpYy4KKyAgICB1c2luZyBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmluaXRpYWxpemU7Cit9OworCitjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW1U
ZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHJvdGVjdGVkOgorICAgIExheWVyUmVuZGVy
ZXJDaHJvbWl1bVRlc3QoKQorICAgICAgICA6IG1fc3VnZ2VzdEhhdmVCYWNrYnVmZmVyWWVzKDEs
IHRydWUpCisgICAgICAgICwgbV9zdWdnZXN0SGF2ZUJhY2tidWZmZXJObygxLCBmYWxzZSkKKyAg
ICAgICAgLCBtX2NvbnRleHQoR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGlj
c0NvbnRleHRGcm9tV2ViQ29udGV4dChhZG9wdFB0cihuZXcgRnJhbWVDb3VudGluZ01lbW9yeUFs
bG9jYXRpb25TZXR0aW5nQ29udGV4dCgpKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVj
dGx5VG9Ib3N0V2luZG93KSkKKyAgICAgICAgLCBtX21vY2tDb250ZXh0KCpzdGF0aWNfY2FzdDxG
cmFtZUNvdW50aW5nTWVtb3J5QWxsb2NhdGlvblNldHRpbmdDb250ZXh0Kj4oR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0QobV9jb250ZXh0LmdldCgp
KSkpCisgICAgICAgICwgbV9sYXllclJlbmRlcmVyQ2hyb21pdW0oJm1fbW9ja0NsaWVudCwgbV9j
b250ZXh0LnJlbGVhc2UoKSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIFNldFVw
KCkKKyAgICB7CisgICAgICAgIG1fbGF5ZXJSZW5kZXJlckNocm9taXVtLmluaXRpYWxpemUoKTsK
KyAgICB9CisKKyAgICB2b2lkIHN3YXBCdWZmZXJzKCkKKyAgICB7CisgICAgICAgIG1fbGF5ZXJS
ZW5kZXJlckNocm9taXVtLnN3YXBCdWZmZXJzKEludFJlY3QoKSk7CisgICAgfQorCisgICAgV2Vi
R3JhcGhpY3NNZW1vcnlBbGxvY2F0aW9uIG1fc3VnZ2VzdEhhdmVCYWNrYnVmZmVyWWVzOworICAg
IFdlYkdyYXBoaWNzTWVtb3J5QWxsb2NhdGlvbiBtX3N1Z2dlc3RIYXZlQmFja2J1ZmZlck5vOwor
CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7CisgICAgRnJhbWVDb3Vu
dGluZ01lbW9yeUFsbG9jYXRpb25TZXR0aW5nQ29udGV4dCYgbV9tb2NrQ29udGV4dDsKKyAgICBG
YWtlTGF5ZXJSZW5kZXJlckNocm9taXVtQ2xpZW50IG1fbW9ja0NsaWVudDsKKyAgICBGYWtlTGF5
ZXJSZW5kZXJlckNocm9taXVtIG1fbGF5ZXJSZW5kZXJlckNocm9taXVtOworfTsKKworLy8gVGVz
dCBMYXllclJlbmRlcmVyQ2hyb21pdW0gZGlzY2FyZEZyYW1lYnVmZmVyIGZ1bmN0aW9uYWxpdHk6
CisvLyBTdWdnZXN0IHJlY3JlYXRpbmcgZnJhbWVidWZmZXIgd2hlbiBvbmUgYWxyZWFkeSBleGlz
dHMuCisvLyBFeHBlY3RlZDogaXQgZG9lcyBub3RoaW5nLgorVEVTVF9GKExheWVyUmVuZGVyZXJD
aHJvbWl1bVRlc3QsIFN1Z2dlc3RCYWNrYnVmZmVyWWVzV2hlbkl0QWxyZWFkeUV4aXN0c1Nob3Vs
ZERvTm90aGluZykKK3sKKyAgICBtX21vY2tDb250ZXh0LnNldE1lbW9yeUFsbG9jYXRpb24obV9z
dWdnZXN0SGF2ZUJhY2tidWZmZXJZZXMpOworICAgIEVYUEVDVF9FUSgwLCBtX21vY2tDbGllbnQu
c2V0RnVsbFJvb3RMYXllckRhbWFnZUNvdW50KCkpOworICAgIEVYUEVDVF9GQUxTRShtX2xheWVy
UmVuZGVyZXJDaHJvbWl1bS5pc0ZyYW1lYnVmZmVyRGlzY2FyZGVkKCkpOworCisgICAgc3dhcEJ1
ZmZlcnMoKTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9tb2NrQ29udGV4dC5mcmFtZUNvdW50KCkpOwor
fQorCisvLyBUZXN0IExheWVyUmVuZGVyZXJDaHJvbWl1bSBkaXNjYXJkRnJhbWVidWZmZXIgZnVu
Y3Rpb25hbGl0eToKKy8vIFN1Z2dlc3QgZGlzY2FyZGluZyBmcmFtZWJ1ZmZlciB3aGVuIG9uZSBl
eGlzdHMuCisvLyBFeHBlY3RlZDogaXQgaXMgZGlzY2FyZGVkIGFuZCBkYW1hZ2UgdHJhY2tlciBp
cyByZXNldC4KK1RFU1RfRihMYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0LCBTdWdnZXN0QmFja2J1
ZmZlck5vU2hvdWxkRGlzY2FyZEJhY2tidWZmZXJBbmREYW1hZ2VSb290TGF5ZXIpCit7CisgICAg
bV9tb2NrQ29udGV4dC5zZXRNZW1vcnlBbGxvY2F0aW9uKG1fc3VnZ2VzdEhhdmVCYWNrYnVmZmVy
Tm8pOworICAgIEVYUEVDVF9FUSgxLCBtX21vY2tDbGllbnQuc2V0RnVsbFJvb3RMYXllckRhbWFn
ZUNvdW50KCkpOworICAgIEVYUEVDVF9UUlVFKG1fbGF5ZXJSZW5kZXJlckNocm9taXVtLmlzRnJh
bWVidWZmZXJEaXNjYXJkZWQoKSk7Cit9CisKKy8vIFRlc3QgTGF5ZXJSZW5kZXJlckNocm9taXVt
IGRpc2NhcmRGcmFtZWJ1ZmZlciBmdW5jdGlvbmFsaXR5OgorLy8gU3VnZ2VzdCBkaXNjYXJkaW5n
IGZyYW1lYnVmZmVyIHdoZW4gb25lIGRvZXMgbm90IGV4aXN0LgorLy8gRXhwZWN0ZWQ6IGl0IGRv
ZXMgbm90aGluZy4KK1RFU1RfRihMYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0LCBTdWdnZXN0QmFj
a2J1ZmZlck5vV2hlbkl0RG9lc250RXhpc3RTaG91bGREb05vdGhpbmcpCit7CisgICAgbV9tb2Nr
Q29udGV4dC5zZXRNZW1vcnlBbGxvY2F0aW9uKG1fc3VnZ2VzdEhhdmVCYWNrYnVmZmVyTm8pOwor
ICAgIEVYUEVDVF9FUSgxLCBtX21vY2tDbGllbnQuc2V0RnVsbFJvb3RMYXllckRhbWFnZUNvdW50
KCkpOworICAgIEVYUEVDVF9UUlVFKG1fbGF5ZXJSZW5kZXJlckNocm9taXVtLmlzRnJhbWVidWZm
ZXJEaXNjYXJkZWQoKSk7CisKKyAgICBtX21vY2tDb250ZXh0LnNldE1lbW9yeUFsbG9jYXRpb24o
bV9zdWdnZXN0SGF2ZUJhY2tidWZmZXJObyk7CisgICAgRVhQRUNUX0VRKDEsIG1fbW9ja0NsaWVu
dC5zZXRGdWxsUm9vdExheWVyRGFtYWdlQ291bnQoKSk7CisgICAgRVhQRUNUX1RSVUUobV9sYXll
clJlbmRlcmVyQ2hyb21pdW0uaXNGcmFtZWJ1ZmZlckRpc2NhcmRlZCgpKTsKK30KKworLy8gVGVz
dCBMYXllclJlbmRlcmVyQ2hyb21pdW0gZGlzY2FyZEZyYW1lYnVmZmVyIGZ1bmN0aW9uYWxpdHk6
CisvLyBTdWdnZXN0IGRpc2NhcmRpbmcgZnJhbWVidWZmZXIsIHRoZW4gdHJ5IHRvIHN3YXBCdWZm
ZXJzLgorLy8gRXhwZWN0ZWQ6IGZyYW1lYnVmZmVyIGlzIGRpc2NhcmRlZCwgc3dhcHMgYXJlIGln
bm9yZWQsIGFuZCBkYW1hZ2UgaXMgcmVzZXQgYWZ0ZXIgZGlzY2FyZCBhbmQgYWZ0ZXIgZWFjaCBz
d2FwLgorVEVTVF9GKExheWVyUmVuZGVyZXJDaHJvbWl1bVRlc3QsIFN3YXBCdWZmZXJzV2hpbGVC
YWNrYnVmZmVyRGlzY2FyZGVkU2hvdWxkSWdub3JlU3dhcEFuZERhbWFnZVJvb3RMYXllcikKK3sK
KyAgICBtX21vY2tDb250ZXh0LnNldE1lbW9yeUFsbG9jYXRpb24obV9zdWdnZXN0SGF2ZUJhY2ti
dWZmZXJObyk7CisgICAgRVhQRUNUX1RSVUUobV9sYXllclJlbmRlcmVyQ2hyb21pdW0uaXNGcmFt
ZWJ1ZmZlckRpc2NhcmRlZCgpKTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9tb2NrQ2xpZW50LnNldEZ1
bGxSb290TGF5ZXJEYW1hZ2VDb3VudCgpKTsKKworICAgIHN3YXBCdWZmZXJzKCk7CisgICAgRVhQ
RUNUX0VRKDAsIG1fbW9ja0NvbnRleHQuZnJhbWVDb3VudCgpKTsKKyAgICBFWFBFQ1RfRVEoMiwg
bV9tb2NrQ2xpZW50LnNldEZ1bGxSb290TGF5ZXJEYW1hZ2VDb3VudCgpKTsKKyAgICAKKyAgICBz
d2FwQnVmZmVycygpOworICAgIEVYUEVDVF9FUSgwLCBtX21vY2tDb250ZXh0LmZyYW1lQ291bnQo
KSk7CisgICAgRVhQRUNUX0VRKDMsIG1fbW9ja0NsaWVudC5zZXRGdWxsUm9vdExheWVyRGFtYWdl
Q291bnQoKSk7Cit9CisKKy8vIFRlc3QgTGF5ZXJSZW5kZXJlckNocm9taXVtIGRpc2NhcmRGcmFt
ZWJ1ZmZlciBmdW5jdGlvbmFsaXR5OgorLy8gRGlzY2FyZCBmcmFtZWJ1ZmZlciwgdGhlbiBzZXQg
dmlzaWJpbGl0eSB0byB0cnVlLgorLy8gRXhwZWN0ZWQ6IHJlY3JlYXRlcyB0aGUgZnJhbWVidWZm
ZXIuCitURVNUX0YoTGF5ZXJSZW5kZXJlckNocm9taXVtVGVzdCwgU2V0VmlzaWJpbGl0eVRydWVT
aG91bGRSZWNyZWF0ZUJhY2tidWZmZXIpCit7CisgICAgbV9tb2NrQ29udGV4dC5zZXRNZW1vcnlB
bGxvY2F0aW9uKG1fc3VnZ2VzdEhhdmVCYWNrYnVmZmVyTm8pOworICAgIEVYUEVDVF9UUlVFKG1f
bGF5ZXJSZW5kZXJlckNocm9taXVtLmlzRnJhbWVidWZmZXJEaXNjYXJkZWQoKSk7CisKKyAgICBt
X2xheWVyUmVuZGVyZXJDaHJvbWl1bS5zZXRWaXNpYmxlKHRydWUpOworICAgIEVYUEVDVF9GQUxT
RShtX2xheWVyUmVuZGVyZXJDaHJvbWl1bS5pc0ZyYW1lYnVmZmVyRGlzY2FyZGVkKCkpOworfQor
CisvLyBUZXN0IExheWVyUmVuZGVyZXJDaHJvbWl1bSBkaXNjYXJkRnJhbWVidWZmZXIgZnVuY3Rp
b25hbGl0eToKKy8vIENyZWF0ZSBhIFNjb3BlZEVuc3VyZUZyYW1lYnVmZmVyQWxsb2NhdGlvbiB3
aGlsZSBhIGZyYW1lYnVmZmVyIHdhcyBkaXNjYXJkZWQgYW5kIHRoZW4gc3dhcEJ1ZmZlcnMuCisv
LyBFeHBlY3RlZDogd2lsbCByZWNyZWF0ZSBmcmFtZWJ1ZmZlciBzY29wZSBkdXJhdGlvbiwgZHVy
aW5nIHdoaWNoIHN3YXBzIHdpbGwgd29yayBmaW5lLCBhbmQgZGlzY2FyZCBvbiBzY29wZSBleGl0
LgorVEVTVF9GKExheWVyUmVuZGVyZXJDaHJvbWl1bVRlc3QsIERpc2NhcmRlZEJhY2tidWZmZXJJ
c1JlY3JlYXRyZWRGb3JTY29wZUR1cmF0aW9uKQoreworICAgIG1fbW9ja0NvbnRleHQuc2V0TWVt
b3J5QWxsb2NhdGlvbihtX3N1Z2dlc3RIYXZlQmFja2J1ZmZlck5vKTsKKyAgICBFWFBFQ1RfVFJV
RShtX2xheWVyUmVuZGVyZXJDaHJvbWl1bS5pc0ZyYW1lYnVmZmVyRGlzY2FyZGVkKCkpOworICAg
IEVYUEVDVF9FUSgxLCBtX21vY2tDbGllbnQuc2V0RnVsbFJvb3RMYXllckRhbWFnZUNvdW50KCkp
OworICAgIHsKKyAgICAgICAgU2NvcGVkRW5zdXJlRnJhbWVidWZmZXJBbGxvY2F0aW9uIGVuc3Vy
ZUZyYW1lYnVmZmVyKCZtX2xheWVyUmVuZGVyZXJDaHJvbWl1bSk7CisgICAgICAgIEVYUEVDVF9G
QUxTRShtX2xheWVyUmVuZGVyZXJDaHJvbWl1bS5pc0ZyYW1lYnVmZmVyRGlzY2FyZGVkKCkpOwor
CisgICAgICAgIHN3YXBCdWZmZXJzKCk7CisgICAgICAgIEVYUEVDVF9FUSgxLCBtX21vY2tDb250
ZXh0LmZyYW1lQ291bnQoKSk7CisgICAgfQorICAgIEVYUEVDVF9UUlVFKG1fbGF5ZXJSZW5kZXJl
ckNocm9taXVtLmlzRnJhbWVidWZmZXJEaXNjYXJkZWQoKSk7CisgICAgRVhQRUNUX0VRKDIsIG1f
bW9ja0NsaWVudC5zZXRGdWxsUm9vdExheWVyRGFtYWdlQ291bnQoKSk7Cit9CisKKy8vIFRlc3Qg
TGF5ZXJSZW5kZXJlckNocm9taXVtIGRpc2NhcmRGcmFtZWJ1ZmZlciBmdW5jdGlvbmFsaXR5Ogor
Ly8gQ3JlYXRlIGEgU2NvcGVkRW5zdXJlRnJhbWVidWZmZXJBbGxvY2F0aW9uIHdoaWxlIGEgZnJh
bWVidWZmZXIgd2FzIG5vdCBkaXNjYXJkZWQgYW5kIHRoZW4gc3dhcEJ1ZmZlcnMuCisvLyBFeHBl
Y3RlZDogd2lsbCBoYXZlIG5vIGVmZmVjdC4KK1RFU1RfRihMYXllclJlbmRlcmVyQ2hyb21pdW1U
ZXN0LCBFbnN1cmluZ0JhY2tidWZmZXJGb3JTY29wZUR1cmF0aW9uRG9lc05vdGhpbmdJZkFscmVh
ZHlFeGlzdHMpCit7CisgICAgRVhQRUNUX0ZBTFNFKG1fbGF5ZXJSZW5kZXJlckNocm9taXVtLmlz
RnJhbWVidWZmZXJEaXNjYXJkZWQoKSk7CisgICAgRVhQRUNUX0VRKDAsIG1fbW9ja0NsaWVudC5z
ZXRGdWxsUm9vdExheWVyRGFtYWdlQ291bnQoKSk7CisgICAgeworICAgICAgICBTY29wZWRFbnN1
cmVGcmFtZWJ1ZmZlckFsbG9jYXRpb24gZW5zdXJlRnJhbWVidWZmZXIoJm1fbGF5ZXJSZW5kZXJl
ckNocm9taXVtKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKG1fbGF5ZXJSZW5kZXJlckNocm9taXVt
LmlzRnJhbWVidWZmZXJEaXNjYXJkZWQoKSk7CisgICAgICAgIEVYUEVDVF9FUSgwLCBtX21vY2tD
bGllbnQuc2V0RnVsbFJvb3RMYXllckRhbWFnZUNvdW50KCkpOworCisgICAgICAgIHN3YXBCdWZm
ZXJzKCk7CisgICAgICAgIEVYUEVDVF9FUSgxLCBtX21vY2tDb250ZXh0LmZyYW1lQ291bnQoKSk7
CisgICAgfQorICAgIEVYUEVDVF9GQUxTRShtX2xheWVyUmVuZGVyZXJDaHJvbWl1bS5pc0ZyYW1l
YnVmZmVyRGlzY2FyZGVkKCkpOworICAgIEVYUEVDVF9FUSgwLCBtX21vY2tDbGllbnQuc2V0RnVs
bFJvb3RMYXllckRhbWFnZUNvdW50KCkpOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133341</attachid>
            <date>2012-03-22 14:16:56 -0700</date>
            <delta_ts>2012-03-22 14:33:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81823-20120322171655.patch</filename>
            <type>text/plain</type>
            <size>31862</size>
            <attacher name="Michal Mocny">mmocny</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExNzUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWZlZTg2NTI1ZGFjOGJl
ZDI0YWExMjc2YWZjOWIxZTUyNzdkZDVkNi4uYzFhY2VhMmQwYTY1NTY1ZTAwNDlmN2U4Y2JlOTA0
Y2EyYjUzOTE2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDEyLTAzLTIyICBNaWNo
YWwgTW9jbnkgIDxtbW9jbnlAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIExheWVy
UmVuZGVyZXJDaHJvbWl1bSBzaG91bGQgdXNlIEdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkIGNh
bGxiYWNrIHRvIGV4cGxpY2l0bHkgbWFuYWdlIGZyYW1lYnVmZmVyLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE4MjMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZXcgVW5pdFRlc3RzOiBMYXllclJlbmRl
cmVyQ2hyb21pdW1UZXN0CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoTGF5ZXJSZW5kZXJlckdwdU1lbW9y
eUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJHcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlcjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJHcHVNZW1vcnlBbGxvY2F0aW9u
Q2hhbmdlZENhbGxiYWNrQWRhcHRlcjo6fkxheWVyUmVuZGVyZXJHcHVNZW1vcnlBbGxvY2F0aW9u
Q2hhbmdlZENhbGxiYWNrQWRhcHRlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVy
R3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXI6Om9uR3B1TWVtb3J5QWxs
b2NhdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckdwdU1lbW9y
eUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyOjpMYXllclJlbmRlcmVyR3B1TWVtb3J5
QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXIpOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJv
bWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxp
emUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp+TGF5ZXJSZW5k
ZXJlckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
c2V0VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnN3
YXBCdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZGlz
Y2FyZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZW5zdXJlRnJhbWVidWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChMYXllclJlbmRlcmVyQ2hyb21pdW1DbGllbnQpOgorICAgICAgICAoTGF5ZXJSZW5kZXJlckNo
cm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6aXNGcmFt
ZWJ1ZmZlckRpc2NhcmRlZCk6CisgICAgICAgIChTY29wZWRFbnN1cmVGcmFtZWJ1ZmZlckFsbG9j
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVkRW5zdXJlRnJhbWVidWZmZXJBbGxvY2F0
aW9uOjpTY29wZWRFbnN1cmVGcmFtZWJ1ZmZlckFsbG9jYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6U2NvcGVkRW5zdXJlRnJhbWVidWZmZXJBbGxvY2F0aW9uOjp+U2NvcGVkRW5zdXJlRnJhbWVi
dWZmZXJBbGxvY2F0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDYXBh
YmlsaXRpZXM6OkxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMpOgorICAgICAgICAoTGF5ZXJSZW5k
ZXJlckNhcGFiaWxpdGllcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpzZXRWaXNpYmxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmg6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RJ
bXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRo
cmVhZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OmNv
bXBvc2l0ZUFuZFJlYWRiYWNrKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RocmVhZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6
OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKToKKwogMjAxMi0wMy0yMiAgS2V2aW4gT2xsaXZpZXIgIDxr
ZXZpbm9AdGhlb2xsaXZpZXJzLmNvbT4KIAogICAgICAgICBbd3hdIFVucmV2aWV3ZWQuIFdlYkRP
TSBidWlsZCBmaXggYWZ0ZXIgYXJyYXkgdHlwZSBjaGFuZ2VzLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwppbmRleCBhYTFmODg4MWNkNjE3YTNhMGE4NTJlZmU2YTcxYmM1NGMxZmM4MTRjLi42NmY5
ODU0Mzc3MTAyMWY5MjEzNGFmZmIwMTA5OTUxMjZiM2E1ODg3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEyLTAzLTIyICBNaWNoYWwgTW9jbnkgIDxtbW9j
bnlAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIExheWVyUmVuZGVyZXJDaHJvbWl1
bSBzaG91bGQgdXNlIEdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkIGNhbGxiYWNrIHRvIGV4cGxp
Y2l0bHkgbWFuYWdlIGZyYW1lYnVmZmVyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODE4MjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHRlc3RzL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bVRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKEZyYW1lQ291bnRpbmdNZW1v
cnlBbGxvY2F0aW9uU2V0dGluZ0NvbnRleHQpOgorICAgICAgICAoRnJhbWVDb3VudGluZ01lbW9y
eUFsbG9jYXRpb25TZXR0aW5nQ29udGV4dDo6RnJhbWVDb3VudGluZ01lbW9yeUFsbG9jYXRpb25T
ZXR0aW5nQ29udGV4dCk6CisgICAgICAgIChGcmFtZUNvdW50aW5nTWVtb3J5QWxsb2NhdGlvblNl
dHRpbmdDb250ZXh0OjpwcmVwYXJlVGV4dHVyZSk6CisgICAgICAgIChGcmFtZUNvdW50aW5nTWVt
b3J5QWxsb2NhdGlvblNldHRpbmdDb250ZXh0OjpzZXRNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENh
bGxiYWNrQ0hST01JVU0pOgorICAgICAgICAoRnJhbWVDb3VudGluZ01lbW9yeUFsbG9jYXRpb25T
ZXR0aW5nQ29udGV4dDo6Z2V0U3RyaW5nKToKKyAgICAgICAgKEZyYW1lQ291bnRpbmdNZW1vcnlB
bGxvY2F0aW9uU2V0dGluZ0NvbnRleHQ6OmZyYW1lQ291bnQpOgorICAgICAgICAoRnJhbWVDb3Vu
dGluZ01lbW9yeUFsbG9jYXRpb25TZXR0aW5nQ29udGV4dDo6c2V0TWVtb3J5QWxsb2NhdGlvbik6
CisgICAgICAgIChGYWtlTGF5ZXJSZW5kZXJlckNocm9taXVtQ2xpZW50KToKKyAgICAgICAgKEZh
a2VMYXllclJlbmRlcmVyQ2hyb21pdW1DbGllbnQ6OkZha2VMYXllclJlbmRlcmVyQ2hyb21pdW1D
bGllbnQpOgorICAgICAgICAoRmFrZUxheWVyUmVuZGVyZXJDaHJvbWl1bUNsaWVudDo6dmlld3Bv
cnRTaXplKToKKyAgICAgICAgKEZha2VMYXllclJlbmRlcmVyQ2hyb21pdW1DbGllbnQ6OnNldHRp
bmdzKToKKyAgICAgICAgKEZha2VMYXllclJlbmRlcmVyQ2hyb21pdW1DbGllbnQ6OnJvb3RMYXll
cik6CisgICAgICAgIChGYWtlTGF5ZXJSZW5kZXJlckNocm9taXVtQ2xpZW50OjpkaWRMb3NlQ29u
dGV4dCk6CisgICAgICAgIChGYWtlTGF5ZXJSZW5kZXJlckNocm9taXVtQ2xpZW50OjpvblN3YXBC
dWZmZXJzQ29tcGxldGUpOgorICAgICAgICAoRmFrZUxheWVyUmVuZGVyZXJDaHJvbWl1bUNsaWVu
dDo6c2V0RnVsbFJvb3RMYXllckRhbWFnZSk6CisgICAgICAgIChGYWtlTGF5ZXJSZW5kZXJlckNo
cm9taXVtQ2xpZW50OjpzZXRGdWxsUm9vdExheWVyRGFtYWdlQ291bnQpOgorICAgICAgICAoRmFr
ZUxheWVyUmVuZGVyZXJDaHJvbWl1bSk6CisgICAgICAgIChGYWtlTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpGYWtlTGF5ZXJSZW5kZXJlckNocm9taXVtKToKKyAgICAgICAgKExheWVyUmVuZGVyZXJD
aHJvbWl1bVRlc3QpOgorICAgICAgICAoTGF5ZXJSZW5kZXJlckNocm9taXVtVGVzdDo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtVGVzdCk6CisgICAgICAgIChMYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0
OjpTZXRVcCk6CisgICAgICAgIChMYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0Ojpzd2FwQnVmZmVy
cyk6CisgICAgICAgIChURVNUX0YpOgorCiAyMDEyLTAzLTIyICBCZXJuaGFyZCBCYXVlciAgPGJh
dWVyYkBnb29nbGUuY29tPgogCiAgICAgICAgIFtjaHJvbWl1bV0gUGx1Zy1pbiBmYWlsaW5nIHRv
IGxvYWQgc2hvdWxkbid0IHNheSAiTWlzc2luZyBQbHVnLWluIgpkaWZmIC0tZ2l0IGEvU291cmNl
L1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJHcmFwaGljc0NvbnRleHQzRC5oIGIvU291cmNl
L1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJHcmFwaGljc0NvbnRleHQzRC5oCmluZGV4IDJm
ODY3N2ZmMjNmMTkyOGUwNTQ3OWZjY2M2YWMzNzdiMWQ0MDE3YzAuLjViYzAzYWY3ODY0ODk0NjVi
NDk3YTZiZDk1ZmMxODQ4Y2NjYjMyNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJv
bWl1bS9wdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaAorKysgYi9Tb3VyY2UvUGxhdGZvcm0v
Y2hyb21pdW0vcHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmgKQEAgLTE2MCw3ICsxNjAsNyBA
QCBwdWJsaWM6CiAgICAgLy8gR0xfQ0hST01JVU1fZ3B1X21lbW9yeV9tYW5hZ2VyIC0gc2V0cyBj
YWxsYmFjayB0byBvYnNlcnZlIGNoYW5nZXMgdG8gbWVtb3J5IGFsbG9jYXRpb24gbGltaXRzLgog
ICAgIHZpcnR1YWwgdm9pZCBzZXRNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQ0hST01J
VU0oV2ViR3JhcGhpY3NNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQ0hST01JVU0qIGNh
bGxiYWNrKSB7IH0KIAotICAgIC8vIEdMX0VYVF9kaXNjYXJkX2ZyYW1lYnVmZmVyIC0gZGlzY2Fy
ZC9lbnN1cmUgZXhpc3RhbmNlIG9mIHN1cmZhY2UgYmFja2J1ZmZlci4KKyAgICAvLyBHTF9DSFJP
TUlVTV9kaXNjYXJkX2ZyYW1lYnVmZmVyIC0gZGlzY2FyZC9lbnN1cmUgZXhpc3RhbmNlIG9mIHN1
cmZhY2UgYmFja2J1ZmZlci4KICAgICAvLyBGSVhNRTogbWFrZSB0aGVzZSBwdXJlIHZpcnR1YWwg
b25jZSB0aGV5IGFyZSBpbXBsZW1lbnRlZCBieSBjbGllbnRzLgogICAgIHZpcnR1YWwgdm9pZCBk
aXNjYXJkRnJhbWVidWZmZXJFWFQoV0dDM0RlbnVtIHRhcmdldCwgV0dDM0RzaXplaSBudW1BdHRh
Y2htZW50cywgY29uc3QgV0dDM0RlbnVtKiBhdHRhY2htZW50cykgeyB9CiAgICAgdmlydHVhbCB2
b2lkIGVuc3VyZUZyYW1lYnVmZmVyQ0hST01JVU0oKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0V4dGVuc2lvbnMzRENocm9taXVtLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9FeHRlbnNpb25zM0RD
aHJvbWl1bS5oCmluZGV4IDkyODIxMzYwYmFhOTZkNDkyYmRhZmE3ZjJlY2Q1NzUxODNkOGU5NTMu
LmMwYjA3YjJmOGUyYzc1ZGY2OGIyOTUyY2I4Mjk2YzA0MGM0YWIwZmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0V4dGVuc2lvbnMzRENocm9t
aXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRXh0
ZW5zaW9uczNEQ2hyb21pdW0uaApAQCAtMTAyLDcgKzEwMiw3IEBAIHB1YmxpYzoKICAgICAvLyBH
TF9DSFJPTUlVTV9zZXRfdmlzaWJpbGl0eQogICAgIHZvaWQgc2V0VmlzaWJpbGl0eUNIUk9NSVVN
KGJvb2wpOwogCi0gICAgLy8gR0xfRVhUX2Rpc2NhcmRfZnJhbWVidWZmZXIKKyAgICAvLyBHTF9D
SFJPTUlVTV9kaXNjYXJkX2ZyYW1lYnVmZmVyCiAgICAgdmlydHVhbCB2b2lkIGRpc2NhcmRGcmFt
ZWJ1ZmZlckVYVChHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaSBudW1BdHRhY2htZW50cywgY29u
c3QgR0MzRGVudW0qIGF0dGFjaG1lbnRzKTsKICAgICB2aXJ0dWFsIHZvaWQgZW5zdXJlRnJhbWVi
dWZmZXJDSFJPTUlVTSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApp
bmRleCAyN2IzZWRlNTEzMjU3YTdhOWY0NmI5YWUyNDkyMTk2YTZjOTYzOTkwLi44OGI2NmQ2NjQw
ZDJmMTZiYjg4YjUwNmVhZjNjZjA4OTRjZjZmY2JkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAKQEAgLTE2NSw2ICsxNjUsMzEgQEAgcHJpdmF0ZToKICAgICBMYXllclJl
bmRlcmVyQ2hyb21pdW0qIG1fbGF5ZXJSZW5kZXJlcjsKIH07CiAKK2NsYXNzIExheWVyUmVuZGVy
ZXJHcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlciA6IHB1YmxpYyBFeHRl
bnNpb25zM0RDaHJvbWl1bTo6R3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9N
SVVNIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxMYXllclJlbmRlcmVyR3B1TWVt
b3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXI+IGNyZWF0ZShMYXllclJlbmRlcmVy
Q2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IExheWVyUmVuZGVyZXJHcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRl
cihsYXllclJlbmRlcmVyKSk7CisgICAgfQorICAgIHZpcnR1YWwgfkxheWVyUmVuZGVyZXJHcHVN
ZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlcigpIHsgfQorCisgICAgdmlydHVh
bCB2b2lkIG9uR3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWQoRXh0ZW5zaW9uczNEQ2hyb21pdW06
OkdwdU1lbW9yeUFsbG9jYXRpb25DSFJPTUlVTSBhbGxvY2F0aW9uKQorICAgIHsKKyAgICAgICAg
aWYgKCFhbGxvY2F0aW9uLnN1Z2dlc3RIYXZlQmFja2J1ZmZlcikKKyAgICAgICAgICAgIG1fbGF5
ZXJSZW5kZXJlci0+ZGlzY2FyZEZyYW1lYnVmZmVyKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIG1fbGF5ZXJSZW5kZXJlci0+ZW5zdXJlRnJhbWVidWZmZXIoKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgZXhwbGljaXQgTGF5ZXJSZW5kZXJlckdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2Vk
Q2FsbGJhY2tBZGFwdGVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKKyAg
ICAgICAgOiBtX2xheWVyUmVuZGVyZXIobGF5ZXJSZW5kZXJlcikKKyAgICB7CisgICAgfQorCisg
ICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBtX2xheWVyUmVuZGVyZXI7Cit9OworCiAKIFBhc3NP
d25QdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0
ZShMYXllclJlbmRlcmVyQ2hyb21pdW1DbGllbnQqIGNsaWVudCwgUGFzc1JlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gY29udGV4dCkKIHsKQEAgLTE4NCw2ICsyMDksNyBAQCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1bShMYXllclJlbmRlcmVyQ2hyb21pdW1DbGll
bnQqIGNsaWVudAogICAgICwgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZSgwKQogICAgICwgbV9zaGFy
ZWRHZW9tZXRyeVF1YWQoRmxvYXRSZWN0KC0wLjVmLCAtMC41ZiwgMS4wZiwgMS4wZikpCiAgICAg
LCBtX2lzVmlld3BvcnRDaGFuZ2VkKGZhbHNlKQorICAgICwgbV9pc0ZyYW1lYnVmZmVyRGlzY2Fy
ZGVkKGZhbHNlKQogewogfQogCkBAIC0yNTksNiArMjg1LDE3IEBAIGJvb2wgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjppbml0aWFsaXplKCkKICAgICBpZiAobV9jYXBhYmlsaXRpZXMudXNpbmdUZXh0
dXJlU3RvcmFnZUV4dGVuc2lvbikKICAgICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgi
R0xfRVhUX3RleHR1cmVfc3RvcmFnZSIpOwogCisgICAgbV9jYXBhYmlsaXRpZXMudXNpbmdHcHVN
ZW1vcnlNYW5hZ2VyID0gZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0NIUk9NSVVNX2dwdV9tZW1v
cnlfbWFuYWdlciIpOworICAgIGlmIChtX2NhcGFiaWxpdGllcy51c2luZ0dwdU1lbW9yeU1hbmFn
ZXIpIHsKKyAgICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xfQ0hST01JVU1fZ3B1
X21lbW9yeV9tYW5hZ2VyIik7CisgICAgICAgIEV4dGVuc2lvbnMzRENocm9taXVtKiBleHRlbnNp
b25zM0RDaHJvbWl1bSA9IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4oZXh0ZW5z
aW9ucyk7CisgICAgICAgIGV4dGVuc2lvbnMzRENocm9taXVtLT5zZXRHcHVNZW1vcnlBbGxvY2F0
aW9uQ2hhbmdlZENhbGxiYWNrQ0hST01JVU0oTGF5ZXJSZW5kZXJlckdwdU1lbW9yeUFsbG9jYXRp
b25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyOjpjcmVhdGUodGhpcykpOworICAgIH0KKworICAgIG1f
Y2FwYWJpbGl0aWVzLnVzaW5nRGlzY2FyZEZyYW1lYnVmZmVyID0gZXh0ZW5zaW9ucy0+c3VwcG9y
dHMoIkdMX0NIUk9NSVVNX2Rpc2NhcmRfZnJhbWVidWZmZXIiKTsKKyAgICBpZiAobV9jYXBhYmls
aXRpZXMudXNpbmdEaXNjYXJkRnJhbWVidWZmZXIpCisgICAgICAgIGV4dGVuc2lvbnMtPmVuc3Vy
ZUVuYWJsZWQoIkdMX0NIUk9NSVVNX2Rpc2NhcmRfZnJhbWVidWZmZXIiKTsKKwogICAgIEdMQyht
X2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6
Ok1BWF9URVhUVVJFX1NJWkUsICZtX2NhcGFiaWxpdGllcy5tYXhUZXh0dXJlU2l6ZSkpOwogICAg
IG1fY2FwYWJpbGl0aWVzLmJlc3RUZXh0dXJlRm9ybWF0ID0gUGxhdGZvcm1Db2xvcjo6YmVzdFRl
eHR1cmVGb3JtYXQobV9jb250ZXh0LmdldCgpKTsKIApAQCAtMjc3LDYgKzMxNCw3IEBAIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6fkxheWVyUmVuZGVyZXJDaHJvbWl1bSgpCiAgICAgQVNTRVJUKEND
UHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBFeHRlbnNpb25zM0RDaHJvbWl1bSogZXh0ZW5z
aW9uczNEQ2hyb21pdW0gPSBzdGF0aWNfY2FzdDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KG1fY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpKTsKICAgICBleHRlbnNpb25zM0RDaHJvbWl1bS0+c2V0U3dh
cEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQ0hST01JVU0obnVsbHB0cik7CisgICAgZXh0ZW5zaW9u
czNEQ2hyb21pdW0tPnNldEdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tDSFJPTUlV
TShudWxscHRyKTsKICAgICBtX2hlYWRzVXBEaXNwbGF5LmNsZWFyKCk7IC8vIEV4cGxpY2l0bHkg
ZGVzdHJveSB0aGUgSFVEIGJlZm9yZSB0aGUgVGV4dHVyZU1hbmFnZXIgZGllcy4KICAgICBjbGVh
bnVwU2hhcmVkT2JqZWN0cygpOwogfQpAQCAtMzExLDYgKzM0OSwxMCBAQCB2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCiAgICAgaWYgKCF2aXNpYmxl
KQogICAgICAgICByZWxlYXNlUmVuZGVyU3VyZmFjZVRleHR1cmVzKCk7CiAKKyAgICAvLyBGSVhN
RTogUmVtb3ZlIHRoaXMgb25jZSBmcmFtZWJ1ZmZlciBpcyBhdXRvbWF0aWNhbGx5IHJlY3JlYXRl
ZCBvbiBmaXJzdCB1c2UKKyAgICBpZiAodmlzaWJsZSkKKyAgICAgICAgZW5zdXJlRnJhbWVidWZm
ZXIoKTsKKwogICAgIC8vIFRPRE86IFJlcGxhY2Ugc2V0VmlzaWJpbGl0eUNIUk9NSVVNIHdpdGgg
YW4gZXh0ZW5zaW9uIHRvIGV4cGxpY2l0bHkgbWFuYWdlIGZyb250L2JhY2tidWZmZXJzCiAgICAg
Ly8gY3JidWcuY29tLzExNjA0OQogICAgIGlmIChtX2NhcGFiaWxpdGllcy51c2luZ1NldFZpc2li
aWxpdHkpIHsKQEAgLTEwMzEsNiArMTA3MywxMyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZmluaXNoKCkKIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnN3YXBCdWZmZXJzKGNv
bnN0IEludFJlY3QmIHN1YkJ1ZmZlcikKIHsKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgb25j
ZSBncHUgcHJvY2VzcyBzdXBwb3J0cyBpZ25vcmluZyBzd2FwIGJ1ZmZlcnMgY29tbWFuZCB3aGls
ZSBmcmFtZWJ1ZmZlciBpcyBkaXNjYXJkZWQuCisgICAgLy8gICAgICAgIEFsdGVybmF0aXZlbHkg
KHByZWZlcmFibHk/KSwgcHJvdGVjdCBhbGwgY2MgY29kZSBzbyBhcyBub3QgdG8gYXR0ZW1wdCBh
IHN3YXAgYWZ0ZXIgYSBmcmFtZWJ1ZmZlciBkaXNjYXJkLgorICAgIGlmIChtX2lzRnJhbWVidWZm
ZXJEaXNjYXJkZWQpIHsKKyAgICAgICAgbV9jbGllbnQtPnNldEZ1bGxSb290TGF5ZXJEYW1hZ2Uo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRl
cmVyQ2hyb21pdW06OnN3YXBCdWZmZXJzIiwgdGhpcywgMCk7CiAgICAgLy8gV2UncmUgZG9uZSEg
VGltZSB0byBzd2FwYnVmZmVycyEKIApAQCAtMTA1NCw2ICsxMTAzLDM4IEBAIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpvblN3YXBCdWZmZXJzQ29tcGxldGUoKQogICAgIG1fY2xpZW50LT5v
blN3YXBCdWZmZXJzQ29tcGxldGUoKTsKIH0KIAordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OmRpc2NhcmRGcmFtZWJ1ZmZlcigpCit7CisgICAgaWYgKG1faXNGcmFtZWJ1ZmZlckRpc2NhcmRl
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2NhcGFiaWxpdGllcy51c2luZ0Rpc2Nh
cmRGcmFtZWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgRXh0ZW5zaW9uczNEKiBleHRl
bnNpb25zID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCk7CisgICAgRXh0ZW5zaW9uczNEQ2hy
b21pdW0qIGV4dGVuc2lvbnMzRENocm9taXVtID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hy
b21pdW0qPihleHRlbnNpb25zKTsKKyAgICAvLyBGSVhNRTogVXBkYXRlIGF0dGFjaG1lbnRzIGFy
Z3VtZW50IHRvIGFwcHJvcHJpYXRlIHZhbHVlcyBvbmNlIHRoZXkgYXJlIG5vIGxvbmdlciBpZ25v
cmVkLgorICAgIGV4dGVuc2lvbnMzRENocm9taXVtLT5kaXNjYXJkRnJhbWVidWZmZXJFWFQoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIDApOworICAgIG1faXNGcmFtZWJ1ZmZlckRp
c2NhcmRlZCA9IHRydWU7CisKKyAgICAvLyBEYW1hZ2UgdHJhY2tlciBuZWVkcyBhIGZ1bGwgcmVz
ZXQgZXZlcnkgdGltZSBmcmFtZWJ1ZmZlciBpcyBkaXNjYXJkZWQuCisgICAgbV9jbGllbnQtPnNl
dEZ1bGxSb290TGF5ZXJEYW1hZ2UoKTsKK30KKwordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OmVuc3VyZUZyYW1lYnVmZmVyKCkKK3sKKyAgICBpZiAoIW1faXNGcmFtZWJ1ZmZlckRpc2NhcmRl
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2NhcGFiaWxpdGllcy51c2luZ0Rpc2Nh
cmRGcmFtZWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgRXh0ZW5zaW9uczNEKiBleHRl
bnNpb25zID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCk7CisgICAgRXh0ZW5zaW9uczNEQ2hy
b21pdW0qIGV4dGVuc2lvbnMzRENocm9taXVtID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hy
b21pdW0qPihleHRlbnNpb25zKTsKKyAgICBleHRlbnNpb25zM0RDaHJvbWl1bS0+ZW5zdXJlRnJh
bWVidWZmZXJDSFJPTUlVTSgpOworICAgIG1faXNGcmFtZWJ1ZmZlckRpc2NhcmRlZCA9IGZhbHNl
OworfQorCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Z2V0RnJhbWVidWZmZXJQaXhlbHMo
dm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIEFTU0VSVChyZWN0Lm1h
eFgoKSA8PSB2aWV3cG9ydFdpZHRoKCkgJiYgcmVjdC5tYXhZKCkgPD0gdmlld3BvcnRIZWlnaHQo
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IDUyZWE4N2MxMzNiMTU3
ZjFhNWUwYTg4MjBhZGRmNjMxNjFmMDhkNjMuLjYxYzFkNGE4NzdiZWJjY2ZhNWRhMWZkMWRlYjY0
MjMxOTIyYTJjNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC02MSw2
ICs2MSw3IEBAIGNsYXNzIEdlb21ldHJ5QmluZGluZzsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNE
OwogY2xhc3MgVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yOwogY2xhc3MgTGF5ZXJSZW5kZXJlclN3
YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0FkYXB0ZXI7CitjbGFzcyBTY29wZWRFbnN1cmVGcmFt
ZWJ1ZmZlckFsbG9jYXRpb247CiAKIGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bUNsaWVudCB7
CiBwdWJsaWM6CkBAIC03MCw2ICs3MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGNvbnN0IEND
TGF5ZXJJbXBsKiByb290TGF5ZXIoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZExv
c2VDb250ZXh0KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBvblN3YXBCdWZmZXJzQ29tcGxldGUo
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEZ1bGxSb290TGF5ZXJEYW1hZ2UoKSA9IDA7CiB9
OwogCiAvLyBDbGFzcyB0aGF0IGhhbmRsZXMgZHJhd2luZyBvZiBjb21wb3NpdGVkIHJlbmRlciBs
YXllcnMgdXNpbmcgR0wuCkBAIC0xNjAsMTAgKzE2MiwxNSBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IG9wYWNpdHks
IGNvbnN0IEZsb2F0UXVhZCYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXRyaXhM
b2NhdGlvbiwgaW50IGFscGhhTG9jYXRpb24sIGludCBxdWFkTG9jYXRpb24pOwogCi1wcml2YXRl
OgorICAgIHZvaWQgZGlzY2FyZEZyYW1lYnVmZmVyKCk7CisgICAgdm9pZCBlbnN1cmVGcmFtZWJ1
ZmZlcigpOworICAgIGJvb2wgaXNGcmFtZWJ1ZmZlckRpc2NhcmRlZCgpIGNvbnN0IHsgcmV0dXJu
IG1faXNGcmFtZWJ1ZmZlckRpc2NhcmRlZDsgfQorCitwcm90ZWN0ZWQ6CiAgICAgTGF5ZXJSZW5k
ZXJlckNocm9taXVtKExheWVyUmVuZGVyZXJDaHJvbWl1bUNsaWVudCosIFBhc3NSZWZQdHI8R3Jh
cGhpY3NDb250ZXh0M0Q+KTsKICAgICBib29sIGluaXRpYWxpemUoKTsKIAorcHJpdmF0ZToKICAg
ICB2b2lkIGRyYXdRdWFkKGNvbnN0IENDRHJhd1F1YWQqLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZh
Y2VEYW1hZ2VSZWN0KTsKICAgICB2b2lkIGRyYXdEZWJ1Z0JvcmRlclF1YWQoY29uc3QgQ0NEZWJ1
Z0JvcmRlckRyYXdRdWFkKik7CiAgICAgdm9pZCBkcmF3UmVuZGVyU3VyZmFjZVF1YWQoY29uc3Qg
Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQqKTsKQEAgLTI1NCw4ICsyNjEsMzcgQEAgcHJpdmF0ZToK
ICAgICBGbG9hdFF1YWQgbV9zaGFyZWRHZW9tZXRyeVF1YWQ7CiAKICAgICBib29sIG1faXNWaWV3
cG9ydENoYW5nZWQ7CisgICAgYm9vbCBtX2lzRnJhbWVidWZmZXJEaXNjYXJkZWQ7CiB9OwogCisv
LyBUaGUgcHVycG9zZSBvZiB0aGlzIGhlbHBlciBpcyB0d29mb2xkOgorLy8gMS4gVG8gZW5zdXJl
IHRoYXQgYSBmcmFtZWJ1ZmZlciBpcyBhdmFpbGFibGUgZm9yIHNjb3BlIGxpZmV0aW1lLCBhbmQK
Ky8vIDIuIFRvIHJlc2V0IGZyYW1lYnVmZmVyIGFsbG9jYXRpb24gdG8gcHJldmlvdXMgc3RhdGUg
b24gc2NvcGUgZXhpdC4KKy8vIElmIHRoZSBmcmFtZWJ1ZmZlciBpcyByZWNyZWF0ZWQsIGl0cyBj
b250ZW50cyBhcmUgdW5kZWZpbmVkLgorLy8gRklYTUU6IFByZXZlbnQvZGVsYXkgZGlzY2FyZGlu
ZyBmcmFtZWJ1ZmZlciB2aWEgYW55IG1lYW5zIHdoaWxlIGFueQorLy8gaW5zdGFuY2Ugb2YgdGhp
cyBpcyBhbGl2ZS4gQXQgdGhlIG1vbWVudCwgdGhpcyBpc24ndCBhbiBpc3N1ZS4KK2NsYXNzIFNj
b3BlZEVuc3VyZUZyYW1lYnVmZmVyQWxsb2NhdGlvbiB7CitwdWJsaWM6CisgICAgZXhwbGljaXQg
U2NvcGVkRW5zdXJlRnJhbWVidWZmZXJBbGxvY2F0aW9uKExheWVyUmVuZGVyZXJDaHJvbWl1bSog
bGF5ZXJSZW5kZXJlcikKKyAgICAgICAgOiBtX2xheWVyUmVuZGVyZXIobGF5ZXJSZW5kZXJlcikK
KyAgICAgICAgLCBtX2ZyYW1lYnVmZmVyV2FzSW5pdGlhbGx5RGlzY2FyZGVkKGxheWVyUmVuZGVy
ZXItPmlzRnJhbWVidWZmZXJEaXNjYXJkZWQoKSkKKyAgICB7CisgICAgICAgIGlmIChtX2ZyYW1l
YnVmZmVyV2FzSW5pdGlhbGx5RGlzY2FyZGVkKQorICAgICAgICAgICAgbV9sYXllclJlbmRlcmVy
LT5lbnN1cmVGcmFtZWJ1ZmZlcigpOworICAgIH0KKworICAgIH5TY29wZWRFbnN1cmVGcmFtZWJ1
ZmZlckFsbG9jYXRpb24oKQorICAgIHsKKyAgICAgICAgaWYgKG1fZnJhbWVidWZmZXJXYXNJbml0
aWFsbHlEaXNjYXJkZWQpCisgICAgICAgICAgICBtX2xheWVyUmVuZGVyZXItPmRpc2NhcmRGcmFt
ZWJ1ZmZlcigpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0q
IG1fbGF5ZXJSZW5kZXJlcjsKKyAgICBib29sIG1fZnJhbWVidWZmZXJXYXNJbml0aWFsbHlEaXNj
YXJkZWQ7Cit9OworCisKIC8vIFNldHRpbmcgREVCVUdfR0xfQ0FMTFMgdG8gMSB3aWxsIGNhbGwg
Z2xHZXRFcnJvcigpIGFmdGVyIGFsbW9zdCBldmVyeSBHTAogLy8gY2FsbCBtYWRlIGJ5IHRoZSBj
b21wb3NpdG9yLiBVc2VmdWwgZm9yIGRlYnVnZ2luZyByZW5kZXJpbmcgaXNzdWVzIGJ1dAogLy8g
d2lsbCBzaWduaWZpY2FudGx5IGRlZ3JhZGUgcGVyZm9ybWFuY2UuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3Qu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdC5oCmluZGV4IDlmNzgwYTdhZTc3YWExZThlMTUxMzdhMWRiOGY5ZjBmOTBiZjhjYWIu
LjczOTBlYzM0YTllN2I4ZDAzMDZiM2Q2Njk0NjExZTAwYTRkNzI3NjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdC5oCkBAIC0xMDIsNiArMTAyLDggQEAgc3RydWN0IExheWVyUmVuZGVyZXJD
YXBhYmlsaXRpZXMgewogICAgICAgICAsIHVzaW5nU3dhcENvbXBsZXRlQ2FsbGJhY2soZmFsc2Up
CiAgICAgICAgICwgdXNpbmdUZXh0dXJlVXNhZ2VIaW50KGZhbHNlKQogICAgICAgICAsIHVzaW5n
VGV4dHVyZVN0b3JhZ2VFeHRlbnNpb24oZmFsc2UpCisgICAgICAgICwgdXNpbmdHcHVNZW1vcnlN
YW5hZ2VyKGZhbHNlKQorICAgICAgICAsIHVzaW5nRGlzY2FyZEZyYW1lYnVmZmVyKGZhbHNlKQog
ICAgICAgICAsIG1heFRleHR1cmVTaXplKDApIHsgfQogCiAgICAgR0MzRGVudW0gYmVzdFRleHR1
cmVGb3JtYXQ7CkBAIC0xMTMsNiArMTE1LDggQEAgc3RydWN0IExheWVyUmVuZGVyZXJDYXBhYmls
aXRpZXMgewogICAgIGJvb2wgdXNpbmdTd2FwQ29tcGxldGVDYWxsYmFjazsKICAgICBib29sIHVz
aW5nVGV4dHVyZVVzYWdlSGludDsKICAgICBib29sIHVzaW5nVGV4dHVyZVN0b3JhZ2VFeHRlbnNp
b247CisgICAgYm9vbCB1c2luZ0dwdU1lbW9yeU1hbmFnZXI7CisgICAgYm9vbCB1c2luZ0Rpc2Nh
cmRGcmFtZWJ1ZmZlcjsKICAgICBpbnQgbWF4VGV4dHVyZVNpemU7CiB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IDQ0M2ExZmZhYTc3YmEwZWU1MjAyOWRm
MGUzYWIxNDk2N2Y0YzUyZGIuLjlkZmZlZTM1M2FlZTBlZTIwNzM0MmRkN2RjMzRjZWQxNTZjNGNh
MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC00ODAsMTEg
KzQ4MCw2IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0VmlzaWJsZShib29sIHZpc2li
bGUpCiAKICAgICBtX2xheWVyUmVuZGVyZXItPnNldFZpc2libGUodmlzaWJsZSk7CiAKLSAgICAv
LyBSZXNldCB0aGUgZGFtYWdlIHRyYWNrZXIgYmVjYXVzZSB0aGUgZnJvbnQvYmFjayBidWZmZXJz
IG1heSBoYXZlIGJlZW4gZGFtYWdlZCBieSB0aGUgR1BVCi0gICAgLy8gcHJvY2VzcyBvbiB2aXNp
YmlsaXR5IGNoYW5nZS4KLSAgICBpZiAodmlzaWJsZSAmJiBtX2xheWVyUmVuZGVyZXItPmNhcGFi
aWxpdGllcygpLnVzaW5nUGFydGlhbFN3YXApCi0gICAgICAgIHNldEZ1bGxSb290TGF5ZXJEYW1h
Z2UoKTsKLQogICAgIGNvbnN0IGJvb2wgc2hvdWxkVGlja0luQmFja2dyb3VuZCA9ICF2aXNpYmxl
ICYmIG1fbmVlZHNBbmltYXRlTGF5ZXJzOwogICAgIG1fdGltZVNvdXJjZUNsaWVudEFkYXB0ZXIt
PnNldEFjdGl2ZShzaG91bGRUaWNrSW5CYWNrZ3JvdW5kKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuaAppbmRleCBlMGM2ZTczYTMzNDIwZGQ0N2QwOTU0Mjg2MmNiOWE0OGEw
YWQxY2IwLi43N2ViODkyZmJlOThlY2ZlYTJlYjhlMTE5MTgzODJkZTVmN2NkYWU3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCkBAIC05OCw2ICs5OCw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGNvbnN0IENDTGF5ZXJJbXBsKiByb290TGF5ZXIoKSBjb25zdCAgeyByZXR1
cm4gbV9yb290TGF5ZXJJbXBsLmdldCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGRpZExvc2VDb250
ZXh0KCk7CiAgICAgdmlydHVhbCB2b2lkIG9uU3dhcEJ1ZmZlcnNDb21wbGV0ZSgpOworICAgIHZp
cnR1YWwgdm9pZCBzZXRGdWxsUm9vdExheWVyRGFtYWdlKCk7CiAKICAgICAvLyBJbXBsZW1lbnRh
dGlvbgogICAgIGJvb2wgY2FuRHJhdygpOwpAQCAtMTM0LDEwICsxMzUsNiBAQCBwdWJsaWM6CiAK
ICAgICBQYXNzT3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHByb2Nlc3NTY3JvbGxEZWx0YXMo
KTsKIAotICAgIC8vIFdoZXJlIHBvc3NpYmxlLCByZWRyYXdzIGFyZSBzY2lzc29yZWQgdG8gYSBk
YW1hZ2UgcmVnaW9uIGNhbGN1bGF0ZWQgZnJvbSBjaGFuZ2VzIHRvCi0gICAgLy8gbGF5ZXIgcHJv
cGVydGllcy4gVGhpcyBmdW5jdGlvbiBvdmVycmlkZXMgdGhlIGRhbWFnZSByZWdpb24gZm9yIHRo
ZSBuZXh0IGRyYXcgY3ljbGUuCi0gICAgdm9pZCBzZXRGdWxsUm9vdExheWVyRGFtYWdlKCk7Ci0K
ICAgICB2b2lkIHN0YXJ0UGFnZVNjYWxlQW5pbWF0aW9uKGNvbnN0IEludFNpemUmIHRyYWdldFBv
c2l0aW9uLCBib29sIHVzZUFuY2hvciwgZmxvYXQgc2NhbGUsIGRvdWJsZSBkdXJhdGlvblNlYyk7
CiAKICAgICBib29sIG5lZWRzQW5pbWF0ZUxheWVycygpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNB
bmltYXRlTGF5ZXJzOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCmlu
ZGV4IDYwN2IzOGFmN2EyMmNjNzc0ZmY2YTE3Mjc5M2QzZGU1OWU0MDM2OGIuLjJkOWUwZjM0MWZl
NzI1N2QzNDc5OGY2Y2YxYjhkNGRmODU5ZDIwYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xl
VGhyZWFkUHJveHkuY3BwCkBAIC03Miw2ICs3Miw4IEBAIGJvb2wgQ0NTaW5nbGVUaHJlYWRQcm94
eTo6Y29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0
CiAgICAgVFJBQ0VfRVZFTlQoIkNDU2luZ2xlVGhyZWFkUHJveHk6OmNvbXBvc2l0ZUFuZFJlYWRi
YWNrIiwgdGhpcywgMCk7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKIAor
ICAgIFNjb3BlZEVuc3VyZUZyYW1lYnVmZmVyQWxsb2NhdGlvbiBlbnN1cmVGcmFtZWJ1ZmZlciht
X2xheWVyVHJlZUhvc3RJbXBsLT5sYXllclJlbmRlcmVyKCkpOworCiAgICAgaWYgKCFjb21taXRJ
Zk5lZWRlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94
eS5jcHAKaW5kZXggZTQxNzNhOGFkNjExM2Y3ZWRjNGI5MDJhYjBhN2Y4NTA4NjNhMTQ1Zi4uODI3
MDc0MGQwMDY5ZDgxYTQzZWQwNjM2NzQ5MzFlZGJjMTMzZDQxZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJl
YWRQcm94eS5jcHAKQEAgLTkxLDYgKzkxLDggQEAgYm9vbCBDQ1RocmVhZFByb3h5Ojpjb21wb3Np
dGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQobV9sYXllclRyZWVIb3N0KTsKIAorICAg
IFNjb3BlZEVuc3VyZUZyYW1lYnVmZmVyQWxsb2NhdGlvbiBlbnN1cmVGcmFtZWJ1ZmZlcihtX2xh
eWVyVHJlZUhvc3RJbXBsLT5sYXllclJlbmRlcmVyKCkpOworCiAgICAgaWYgKCFtX2xheWVyUmVu
ZGVyZXJJbml0aWFsaXplZCkgewogICAgICAgICBUUkFDRV9FVkVOVCgiY29tcG9zaXRlQW5kUmVh
ZGJhY2tfRWFybHlPdXRfTFJfVW5pbml0aWFsaXplZCIsIHRoaXMsIDApOwogICAgICAgICByZXR1
cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBp
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCBlMjY3YTViZDNkYjkz
Y2RiMmM3Zjg5MmMyMTZiODk3MmYzMzM3ZjJhLi44ODk0MjliZDkyMzgwMWQ2MzE3NmZiZDAxMjY3
MDU0NmUyNjg4ZTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5n
eXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTEwNSw2ICsx
MDUsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL0tleWJvYXJkVGVzdC5jcHAnLAogICAgICAgICAg
ICAgJ3Rlc3RzL0tVUkxUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvTGF5ZXJDaHJvbWl1
bVRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9MYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0
LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvTGF5ZXJUZXh0dXJlVXBkYXRlclRlc3QuY3BwJywK
ICAgICAgICAgICAgICd0ZXN0cy9MZXZlbERCVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3Rz
L0xvY2FsaXplZE51bWJlcklDVVRlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgKaW5kZXggNTJlOTgwNzY1MjQ0
MmUyNmE3YWYxYTI5OWRmZjc1YmNjMDFlMjY1MC4uZDU3OTZmZjgyMjc4NzJlZDM0MWVlYzg1NzJh
OWVkYzg5ZDAyMjllYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgKQEAgLTI4Miw3ICsyODIsNyBAQCBwdWJsaWM6CiAg
ICAgLy8gR0xfQ0hST01JVU1fc2V0X3Zpc2liaWxpdHkKICAgICB2b2lkIHNldFZpc2liaWxpdHlD
SFJPTUlVTShib29sKTsKIAotICAgIC8vIEdMX0VYVF9kaXNjYXJkX2ZyYW1lYnVmZmVyCisgICAg
Ly8gR0xfQ0hST01JVU1fZGlzY2FyZF9mcmFtZWJ1ZmZlcgogICAgIHZpcnR1YWwgdm9pZCBkaXNj
YXJkRnJhbWVidWZmZXJFWFQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWkgbnVtQXR0YWNobWVu
dHMsIGNvbnN0IEdDM0RlbnVtKiBhdHRhY2htZW50cyk7CiAgICAgdmlydHVhbCB2b2lkIGVuc3Vy
ZUZyYW1lYnVmZmVyQ0hST01JVU0oKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9MYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvTGF5ZXJSZW5kZXJlckNocm9taXVtVGVzdC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
N2ZhMzdhMjNmYTMyYTU0OGM5ZmI0OTgyZDBlZmRkNjY1MWJiYjcyOAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJSZW5kZXJlckNocm9taXVtVGVz
dC5jcHAKQEAgLTAsMCArMSwyMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKKworI2luY2x1ZGUgIkZha2VX
ZWJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCisKKyNpbmNsdWRlIDxnbW9jay9n
bW9jay5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworY2xhc3MgRnJhbWVDb3VudGluZ01lbW9y
eUFsbG9jYXRpb25TZXR0aW5nQ29udGV4dCA6IHB1YmxpYyBGYWtlV2ViR3JhcGhpY3NDb250ZXh0
M0QgeworcHVibGljOgorICAgIEZyYW1lQ291bnRpbmdNZW1vcnlBbGxvY2F0aW9uU2V0dGluZ0Nv
bnRleHQoKSA6IG1fZnJhbWUoMCkgeyB9CisKKyAgICAvLyBXZWJHcmFwaGljc0NvbnRleHQzRCBt
ZXRob2RzLgorCisgICAgLy8gVGhpcyBtZXRob2Qgd291bGQgbm9ybWFsbHkgZG8gYSBnbFN3YXBC
dWZmZXJzIHVuZGVyIHRoZSBob29kLgorICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVGV4dHVyZSgp
IHsgbV9mcmFtZSsrOyB9CisgICAgdmlydHVhbCB2b2lkIHNldE1lbW9yeUFsbG9jYXRpb25DaGFu
Z2VkQ2FsbGJhY2tDSFJPTUlVTShXZWJHcmFwaGljc01lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2Fs
bGJhY2tDSFJPTUlVTSogY2FsbGJhY2spIHsgbV9tZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxi
YWNrID0gY2FsbGJhY2s7IH0KKyAgICB2aXJ0dWFsIFdlYlN0cmluZyBnZXRTdHJpbmcoV2ViS2l0
OjpXR0MzRGVudW0gbmFtZSkKKyAgICB7CisgICAgICAgIGlmIChuYW1lID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpFWFRFTlNJT05TKQorICAgICAgICAgICAgcmV0dXJuIFdlYlN0cmluZygiR0xfQ0hS
T01JVU1fc2V0X3Zpc2liaWxpdHkgR0xfQ0hST01JVU1fZ3B1X21lbW9yeV9tYW5hZ2VyIEdMX0NI
Uk9NSVVNX2Rpc2NhcmRfZnJhbWVidWZmZXIiKTsKKyAgICAgICAgcmV0dXJuIFdlYlN0cmluZygp
OworICAgIH0KKworICAgIC8vIE1ldGhvZHMgYWRkZWQgZm9yIHRlc3QuCisgICAgaW50IGZyYW1l
Q291bnQoKSB7IHJldHVybiBtX2ZyYW1lOyB9CisgICAgdm9pZCBzZXRNZW1vcnlBbGxvY2F0aW9u
KFdlYkdyYXBoaWNzTWVtb3J5QWxsb2NhdGlvbiBhbGxvY2F0aW9uKSB7IG1fbWVtb3J5QWxsb2Nh
dGlvbkNoYW5nZWRDYWxsYmFjay0+b25NZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZChhbGxvY2F0aW9u
KTsgfQorCitwcml2YXRlOgorICAgIGludCBtX2ZyYW1lOworICAgIFdlYkdyYXBoaWNzTWVtb3J5
QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNKiBtX21lbW9yeUFsbG9jYXRpb25DaGFu
Z2VkQ2FsbGJhY2s7Cit9OworCitjbGFzcyBGYWtlTGF5ZXJSZW5kZXJlckNocm9taXVtQ2xpZW50
IDogcHVibGljIExheWVyUmVuZGVyZXJDaHJvbWl1bUNsaWVudCB7CitwdWJsaWM6CisgICAgRmFr
ZUxheWVyUmVuZGVyZXJDaHJvbWl1bUNsaWVudCgpIDogbV9zZXRGdWxsUm9vdExheWVyRGFtYWdl
Q291bnQoMCkgeyB9CisKKyAgICAvLyBMYXllclJlbmRlcmVyQ2hyb21pdW1DbGllbnQgbWV0aG9k
cy4KKyAgICB2aXJ0dWFsIGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSgpIGNvbnN0IHsgc3Rh
dGljIEludFNpemUgZmFrZVNpemU7IHJldHVybiBmYWtlU2l6ZTsgfQorICAgIHZpcnR1YWwgY29u
c3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MoKSBjb25zdCB7IHN0YXRpYyBDQ1NldHRpbmdzIGZha2VT
ZXR0aW5nczsgcmV0dXJuIGZha2VTZXR0aW5nczsgfQorICAgIHZpcnR1YWwgQ0NMYXllckltcGwq
IHJvb3RMYXllcigpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IENDTGF5ZXJJbXBs
KiByb290TGF5ZXIoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCB2b2lkIGRpZExv
c2VDb250ZXh0KCkgeyB9CisgICAgdmlydHVhbCB2b2lkIG9uU3dhcEJ1ZmZlcnNDb21wbGV0ZSgp
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRGdWxsUm9vdExheWVyRGFtYWdlKCkgeyBtX3NldEZ1
bGxSb290TGF5ZXJEYW1hZ2VDb3VudCsrOyB9CisKKyAgICAvLyBNZXRob2RzIGFkZGVkIGZvciB0
ZXN0LgorICAgIGludCBzZXRGdWxsUm9vdExheWVyRGFtYWdlQ291bnQoKSBjb25zdCB7IHJldHVy
biBtX3NldEZ1bGxSb290TGF5ZXJEYW1hZ2VDb3VudDsgfQorCitwcml2YXRlOgorICAgIGludCBt
X3NldEZ1bGxSb290TGF5ZXJEYW1hZ2VDb3VudDsKK307CisKK2NsYXNzIEZha2VMYXllclJlbmRl
cmVyQ2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJSZW5kZXJlckNocm9taXVtIHsKK3B1YmxpYzoKKyAg
ICBGYWtlTGF5ZXJSZW5kZXJlckNocm9taXVtKExheWVyUmVuZGVyZXJDaHJvbWl1bUNsaWVudCog
Y2xpZW50LCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KSA6IExheWVyUmVu
ZGVyZXJDaHJvbWl1bShjbGllbnQsIGNvbnRleHQpIHsgfQorCisgICAgLy8gTGF5ZXJSZW5kZXJl
ckNocm9taXVtIG1ldGhvZHMuCisKKyAgICAvLyBDaGFuZ2luZyB2aXNpYmlsaXR5IHRvIHB1Ymxp
Yy4KKyAgICB1c2luZyBMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemU7Cit9OworCitj
bGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3Qgewor
cHJvdGVjdGVkOgorICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bVRlc3QoKQorICAgICAgICA6IG1f
c3VnZ2VzdEhhdmVCYWNrYnVmZmVyWWVzKDEsIHRydWUpCisgICAgICAgICwgbV9zdWdnZXN0SGF2
ZUJhY2tidWZmZXJObygxLCBmYWxzZSkKKyAgICAgICAgLCBtX2NvbnRleHQoR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dChhZG9wdFB0
cihuZXcgRnJhbWVDb3VudGluZ01lbW9yeUFsbG9jYXRpb25TZXR0aW5nQ29udGV4dCgpKSwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KSkKKyAgICAgICAgLCBt
X21vY2tDb250ZXh0KCpzdGF0aWNfY2FzdDxGcmFtZUNvdW50aW5nTWVtb3J5QWxsb2NhdGlvblNl
dHRpbmdDb250ZXh0Kj4oR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpleHRyYWN0V2ViR3JhcGhp
Y3NDb250ZXh0M0QobV9jb250ZXh0LmdldCgpKSkpCisgICAgICAgICwgbV9sYXllclJlbmRlcmVy
Q2hyb21pdW0oJm1fbW9ja0NsaWVudCwgbV9jb250ZXh0LnJlbGVhc2UoKSkKKyAgICB7CisgICAg
fQorCisgICAgdmlydHVhbCB2b2lkIFNldFVwKCkKKyAgICB7CisgICAgICAgIG1fbGF5ZXJSZW5k
ZXJlckNocm9taXVtLmluaXRpYWxpemUoKTsKKyAgICB9CisKKyAgICB2b2lkIHN3YXBCdWZmZXJz
KCkKKyAgICB7CisgICAgICAgIG1fbGF5ZXJSZW5kZXJlckNocm9taXVtLnN3YXBCdWZmZXJzKElu
dFJlY3QoKSk7CisgICAgfQorCisgICAgV2ViR3JhcGhpY3NNZW1vcnlBbGxvY2F0aW9uIG1fc3Vn
Z2VzdEhhdmVCYWNrYnVmZmVyWWVzOworICAgIFdlYkdyYXBoaWNzTWVtb3J5QWxsb2NhdGlvbiBt
X3N1Z2dlc3RIYXZlQmFja2J1ZmZlck5vOworCisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiBtX2NvbnRleHQ7CisgICAgRnJhbWVDb3VudGluZ01lbW9yeUFsbG9jYXRpb25TZXR0aW5nQ29u
dGV4dCYgbV9tb2NrQ29udGV4dDsKKyAgICBGYWtlTGF5ZXJSZW5kZXJlckNocm9taXVtQ2xpZW50
IG1fbW9ja0NsaWVudDsKKyAgICBGYWtlTGF5ZXJSZW5kZXJlckNocm9taXVtIG1fbGF5ZXJSZW5k
ZXJlckNocm9taXVtOworfTsKKworLy8gVGVzdCBMYXllclJlbmRlcmVyQ2hyb21pdW0gZGlzY2Fy
ZEZyYW1lYnVmZmVyIGZ1bmN0aW9uYWxpdHk6CisvLyBTdWdnZXN0IHJlY3JlYXRpbmcgZnJhbWVi
dWZmZXIgd2hlbiBvbmUgYWxyZWFkeSBleGlzdHMuCisvLyBFeHBlY3RlZDogaXQgZG9lcyBub3Ro
aW5nLgorVEVTVF9GKExheWVyUmVuZGVyZXJDaHJvbWl1bVRlc3QsIFN1Z2dlc3RCYWNrYnVmZmVy
WWVzV2hlbkl0QWxyZWFkeUV4aXN0c1Nob3VsZERvTm90aGluZykKK3sKKyAgICBtX21vY2tDb250
ZXh0LnNldE1lbW9yeUFsbG9jYXRpb24obV9zdWdnZXN0SGF2ZUJhY2tidWZmZXJZZXMpOworICAg
IEVYUEVDVF9FUSgwLCBtX21vY2tDbGllbnQuc2V0RnVsbFJvb3RMYXllckRhbWFnZUNvdW50KCkp
OworICAgIEVYUEVDVF9GQUxTRShtX2xheWVyUmVuZGVyZXJDaHJvbWl1bS5pc0ZyYW1lYnVmZmVy
RGlzY2FyZGVkKCkpOworCisgICAgc3dhcEJ1ZmZlcnMoKTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9t
b2NrQ29udGV4dC5mcmFtZUNvdW50KCkpOworfQorCisvLyBUZXN0IExheWVyUmVuZGVyZXJDaHJv
bWl1bSBkaXNjYXJkRnJhbWVidWZmZXIgZnVuY3Rpb25hbGl0eToKKy8vIFN1Z2dlc3QgZGlzY2Fy
ZGluZyBmcmFtZWJ1ZmZlciB3aGVuIG9uZSBleGlzdHMuCisvLyBFeHBlY3RlZDogaXQgaXMgZGlz
Y2FyZGVkIGFuZCBkYW1hZ2UgdHJhY2tlciBpcyByZXNldC4KK1RFU1RfRihMYXllclJlbmRlcmVy
Q2hyb21pdW1UZXN0LCBTdWdnZXN0QmFja2J1ZmZlck5vU2hvdWxkRGlzY2FyZEJhY2tidWZmZXJB
bmREYW1hZ2VSb290TGF5ZXIpCit7CisgICAgbV9tb2NrQ29udGV4dC5zZXRNZW1vcnlBbGxvY2F0
aW9uKG1fc3VnZ2VzdEhhdmVCYWNrYnVmZmVyTm8pOworICAgIEVYUEVDVF9FUSgxLCBtX21vY2tD
bGllbnQuc2V0RnVsbFJvb3RMYXllckRhbWFnZUNvdW50KCkpOworICAgIEVYUEVDVF9UUlVFKG1f
bGF5ZXJSZW5kZXJlckNocm9taXVtLmlzRnJhbWVidWZmZXJEaXNjYXJkZWQoKSk7Cit9CisKKy8v
IFRlc3QgTGF5ZXJSZW5kZXJlckNocm9taXVtIGRpc2NhcmRGcmFtZWJ1ZmZlciBmdW5jdGlvbmFs
aXR5OgorLy8gU3VnZ2VzdCBkaXNjYXJkaW5nIGZyYW1lYnVmZmVyIHdoZW4gb25lIGRvZXMgbm90
IGV4aXN0LgorLy8gRXhwZWN0ZWQ6IGl0IGRvZXMgbm90aGluZy4KK1RFU1RfRihMYXllclJlbmRl
cmVyQ2hyb21pdW1UZXN0LCBTdWdnZXN0QmFja2J1ZmZlck5vV2hlbkl0RG9lc250RXhpc3RTaG91
bGREb05vdGhpbmcpCit7CisgICAgbV9tb2NrQ29udGV4dC5zZXRNZW1vcnlBbGxvY2F0aW9uKG1f
c3VnZ2VzdEhhdmVCYWNrYnVmZmVyTm8pOworICAgIEVYUEVDVF9FUSgxLCBtX21vY2tDbGllbnQu
c2V0RnVsbFJvb3RMYXllckRhbWFnZUNvdW50KCkpOworICAgIEVYUEVDVF9UUlVFKG1fbGF5ZXJS
ZW5kZXJlckNocm9taXVtLmlzRnJhbWVidWZmZXJEaXNjYXJkZWQoKSk7CisKKyAgICBtX21vY2tD
b250ZXh0LnNldE1lbW9yeUFsbG9jYXRpb24obV9zdWdnZXN0SGF2ZUJhY2tidWZmZXJObyk7Cisg
ICAgRVhQRUNUX0VRKDEsIG1fbW9ja0NsaWVudC5zZXRGdWxsUm9vdExheWVyRGFtYWdlQ291bnQo
KSk7CisgICAgRVhQRUNUX1RSVUUobV9sYXllclJlbmRlcmVyQ2hyb21pdW0uaXNGcmFtZWJ1ZmZl
ckRpc2NhcmRlZCgpKTsKK30KKworLy8gVGVzdCBMYXllclJlbmRlcmVyQ2hyb21pdW0gZGlzY2Fy
ZEZyYW1lYnVmZmVyIGZ1bmN0aW9uYWxpdHk6CisvLyBTdWdnZXN0IGRpc2NhcmRpbmcgZnJhbWVi
dWZmZXIsIHRoZW4gdHJ5IHRvIHN3YXBCdWZmZXJzLgorLy8gRXhwZWN0ZWQ6IGZyYW1lYnVmZmVy
IGlzIGRpc2NhcmRlZCwgc3dhcHMgYXJlIGlnbm9yZWQsIGFuZCBkYW1hZ2UgaXMgcmVzZXQgYWZ0
ZXIgZGlzY2FyZCBhbmQgYWZ0ZXIgZWFjaCBzd2FwLgorVEVTVF9GKExheWVyUmVuZGVyZXJDaHJv
bWl1bVRlc3QsIFN3YXBCdWZmZXJzV2hpbGVCYWNrYnVmZmVyRGlzY2FyZGVkU2hvdWxkSWdub3Jl
U3dhcEFuZERhbWFnZVJvb3RMYXllcikKK3sKKyAgICBtX21vY2tDb250ZXh0LnNldE1lbW9yeUFs
bG9jYXRpb24obV9zdWdnZXN0SGF2ZUJhY2tidWZmZXJObyk7CisgICAgRVhQRUNUX1RSVUUobV9s
YXllclJlbmRlcmVyQ2hyb21pdW0uaXNGcmFtZWJ1ZmZlckRpc2NhcmRlZCgpKTsKKyAgICBFWFBF
Q1RfRVEoMSwgbV9tb2NrQ2xpZW50LnNldEZ1bGxSb290TGF5ZXJEYW1hZ2VDb3VudCgpKTsKKwor
ICAgIHN3YXBCdWZmZXJzKCk7CisgICAgRVhQRUNUX0VRKDAsIG1fbW9ja0NvbnRleHQuZnJhbWVD
b3VudCgpKTsKKyAgICBFWFBFQ1RfRVEoMiwgbV9tb2NrQ2xpZW50LnNldEZ1bGxSb290TGF5ZXJE
YW1hZ2VDb3VudCgpKTsKKyAgICAKKyAgICBzd2FwQnVmZmVycygpOworICAgIEVYUEVDVF9FUSgw
LCBtX21vY2tDb250ZXh0LmZyYW1lQ291bnQoKSk7CisgICAgRVhQRUNUX0VRKDMsIG1fbW9ja0Ns
aWVudC5zZXRGdWxsUm9vdExheWVyRGFtYWdlQ291bnQoKSk7Cit9CisKKy8vIFRlc3QgTGF5ZXJS
ZW5kZXJlckNocm9taXVtIGRpc2NhcmRGcmFtZWJ1ZmZlciBmdW5jdGlvbmFsaXR5OgorLy8gRGlz
Y2FyZCBmcmFtZWJ1ZmZlciwgdGhlbiBzZXQgdmlzaWJpbGl0eSB0byB0cnVlLgorLy8gRXhwZWN0
ZWQ6IHJlY3JlYXRlcyB0aGUgZnJhbWVidWZmZXIuCitURVNUX0YoTGF5ZXJSZW5kZXJlckNocm9t
aXVtVGVzdCwgU2V0VmlzaWJpbGl0eVRydWVTaG91bGRSZWNyZWF0ZUJhY2tidWZmZXIpCit7Cisg
ICAgbV9tb2NrQ29udGV4dC5zZXRNZW1vcnlBbGxvY2F0aW9uKG1fc3VnZ2VzdEhhdmVCYWNrYnVm
ZmVyTm8pOworICAgIEVYUEVDVF9UUlVFKG1fbGF5ZXJSZW5kZXJlckNocm9taXVtLmlzRnJhbWVi
dWZmZXJEaXNjYXJkZWQoKSk7CisKKyAgICBtX2xheWVyUmVuZGVyZXJDaHJvbWl1bS5zZXRWaXNp
YmxlKHRydWUpOworICAgIEVYUEVDVF9GQUxTRShtX2xheWVyUmVuZGVyZXJDaHJvbWl1bS5pc0Zy
YW1lYnVmZmVyRGlzY2FyZGVkKCkpOworfQorCisvLyBUZXN0IExheWVyUmVuZGVyZXJDaHJvbWl1
bSBkaXNjYXJkRnJhbWVidWZmZXIgZnVuY3Rpb25hbGl0eToKKy8vIENyZWF0ZSBhIFNjb3BlZEVu
c3VyZUZyYW1lYnVmZmVyQWxsb2NhdGlvbiB3aGlsZSBhIGZyYW1lYnVmZmVyIHdhcyBkaXNjYXJk
ZWQgYW5kIHRoZW4gc3dhcEJ1ZmZlcnMuCisvLyBFeHBlY3RlZDogd2lsbCByZWNyZWF0ZSBmcmFt
ZWJ1ZmZlciBzY29wZSBkdXJhdGlvbiwgZHVyaW5nIHdoaWNoIHN3YXBzIHdpbGwgd29yayBmaW5l
LCBhbmQgZGlzY2FyZCBvbiBzY29wZSBleGl0LgorVEVTVF9GKExheWVyUmVuZGVyZXJDaHJvbWl1
bVRlc3QsIERpc2NhcmRlZEJhY2tidWZmZXJJc1JlY3JlYXRyZWRGb3JTY29wZUR1cmF0aW9uKQor
eworICAgIG1fbW9ja0NvbnRleHQuc2V0TWVtb3J5QWxsb2NhdGlvbihtX3N1Z2dlc3RIYXZlQmFj
a2J1ZmZlck5vKTsKKyAgICBFWFBFQ1RfVFJVRShtX2xheWVyUmVuZGVyZXJDaHJvbWl1bS5pc0Zy
YW1lYnVmZmVyRGlzY2FyZGVkKCkpOworICAgIEVYUEVDVF9FUSgxLCBtX21vY2tDbGllbnQuc2V0
RnVsbFJvb3RMYXllckRhbWFnZUNvdW50KCkpOworICAgIHsKKyAgICAgICAgU2NvcGVkRW5zdXJl
RnJhbWVidWZmZXJBbGxvY2F0aW9uIGVuc3VyZUZyYW1lYnVmZmVyKCZtX2xheWVyUmVuZGVyZXJD
aHJvbWl1bSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShtX2xheWVyUmVuZGVyZXJDaHJvbWl1bS5p
c0ZyYW1lYnVmZmVyRGlzY2FyZGVkKCkpOworCisgICAgICAgIHN3YXBCdWZmZXJzKCk7CisgICAg
ICAgIEVYUEVDVF9FUSgxLCBtX21vY2tDb250ZXh0LmZyYW1lQ291bnQoKSk7CisgICAgfQorICAg
IEVYUEVDVF9UUlVFKG1fbGF5ZXJSZW5kZXJlckNocm9taXVtLmlzRnJhbWVidWZmZXJEaXNjYXJk
ZWQoKSk7CisgICAgRVhQRUNUX0VRKDIsIG1fbW9ja0NsaWVudC5zZXRGdWxsUm9vdExheWVyRGFt
YWdlQ291bnQoKSk7Cit9CisKKy8vIFRlc3QgTGF5ZXJSZW5kZXJlckNocm9taXVtIGRpc2NhcmRG
cmFtZWJ1ZmZlciBmdW5jdGlvbmFsaXR5OgorLy8gQ3JlYXRlIGEgU2NvcGVkRW5zdXJlRnJhbWVi
dWZmZXJBbGxvY2F0aW9uIHdoaWxlIGEgZnJhbWVidWZmZXIgd2FzIG5vdCBkaXNjYXJkZWQgYW5k
IHRoZW4gc3dhcEJ1ZmZlcnMuCisvLyBFeHBlY3RlZDogd2lsbCBoYXZlIG5vIGVmZmVjdC4KK1RF
U1RfRihMYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0LCBFbnN1cmluZ0JhY2tidWZmZXJGb3JTY29w
ZUR1cmF0aW9uRG9lc05vdGhpbmdJZkFscmVhZHlFeGlzdHMpCit7CisgICAgRVhQRUNUX0ZBTFNF
KG1fbGF5ZXJSZW5kZXJlckNocm9taXVtLmlzRnJhbWVidWZmZXJEaXNjYXJkZWQoKSk7CisgICAg
RVhQRUNUX0VRKDAsIG1fbW9ja0NsaWVudC5zZXRGdWxsUm9vdExheWVyRGFtYWdlQ291bnQoKSk7
CisgICAgeworICAgICAgICBTY29wZWRFbnN1cmVGcmFtZWJ1ZmZlckFsbG9jYXRpb24gZW5zdXJl
RnJhbWVidWZmZXIoJm1fbGF5ZXJSZW5kZXJlckNocm9taXVtKTsKKyAgICAgICAgRVhQRUNUX0ZB
TFNFKG1fbGF5ZXJSZW5kZXJlckNocm9taXVtLmlzRnJhbWVidWZmZXJEaXNjYXJkZWQoKSk7Cisg
ICAgICAgIEVYUEVDVF9FUSgwLCBtX21vY2tDbGllbnQuc2V0RnVsbFJvb3RMYXllckRhbWFnZUNv
dW50KCkpOworCisgICAgICAgIHN3YXBCdWZmZXJzKCk7CisgICAgICAgIEVYUEVDVF9FUSgxLCBt
X21vY2tDb250ZXh0LmZyYW1lQ291bnQoKSk7CisgICAgfQorICAgIEVYUEVDVF9GQUxTRShtX2xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5pc0ZyYW1lYnVmZmVyRGlzY2FyZGVkKCkpOworICAgIEVYUEVD
VF9FUSgwLCBtX21vY2tDbGllbnQuc2V0RnVsbFJvb3RMYXllckRhbWFnZUNvdW50KCkpOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133348</attachid>
            <date>2012-03-22 14:34:03 -0700</date>
            <delta_ts>2012-03-22 15:43:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81823-20120322173401.patch</filename>
            <type>text/plain</type>
            <size>29434</size>
            <attacher name="Michal Mocny">mmocny</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExNzUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWZlZTg2NTI1ZGFjOGJl
ZDI0YWExMjc2YWZjOWIxZTUyNzdkZDVkNi4uYzFhY2VhMmQwYTY1NTY1ZTAwNDlmN2U4Y2JlOTA0
Y2EyYjUzOTE2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDEyLTAzLTIyICBNaWNo
YWwgTW9jbnkgIDxtbW9jbnlAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIExheWVy
UmVuZGVyZXJDaHJvbWl1bSBzaG91bGQgdXNlIEdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkIGNh
bGxiYWNrIHRvIGV4cGxpY2l0bHkgbWFuYWdlIGZyYW1lYnVmZmVyLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE4MjMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZXcgVW5pdFRlc3RzOiBMYXllclJlbmRl
cmVyQ2hyb21pdW1UZXN0CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoTGF5ZXJSZW5kZXJlckdwdU1lbW9y
eUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJHcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlcjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJHcHVNZW1vcnlBbGxvY2F0aW9u
Q2hhbmdlZENhbGxiYWNrQWRhcHRlcjo6fkxheWVyUmVuZGVyZXJHcHVNZW1vcnlBbGxvY2F0aW9u
Q2hhbmdlZENhbGxiYWNrQWRhcHRlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVy
R3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXI6Om9uR3B1TWVtb3J5QWxs
b2NhdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckdwdU1lbW9y
eUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyOjpMYXllclJlbmRlcmVyR3B1TWVtb3J5
QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXIpOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJv
bWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxp
emUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp+TGF5ZXJSZW5k
ZXJlckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
c2V0VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnN3
YXBCdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZGlz
Y2FyZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZW5zdXJlRnJhbWVidWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChMYXllclJlbmRlcmVyQ2hyb21pdW1DbGllbnQpOgorICAgICAgICAoTGF5ZXJSZW5kZXJlckNo
cm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6aXNGcmFt
ZWJ1ZmZlckRpc2NhcmRlZCk6CisgICAgICAgIChTY29wZWRFbnN1cmVGcmFtZWJ1ZmZlckFsbG9j
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVkRW5zdXJlRnJhbWVidWZmZXJBbGxvY2F0
aW9uOjpTY29wZWRFbnN1cmVGcmFtZWJ1ZmZlckFsbG9jYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6U2NvcGVkRW5zdXJlRnJhbWVidWZmZXJBbGxvY2F0aW9uOjp+U2NvcGVkRW5zdXJlRnJhbWVi
dWZmZXJBbGxvY2F0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDYXBh
YmlsaXRpZXM6OkxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMpOgorICAgICAgICAoTGF5ZXJSZW5k
ZXJlckNhcGFiaWxpdGllcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpzZXRWaXNpYmxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmg6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RJ
bXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRo
cmVhZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OmNv
bXBvc2l0ZUFuZFJlYWRiYWNrKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RocmVhZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6
OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKToKKwogMjAxMi0wMy0yMiAgS2V2aW4gT2xsaXZpZXIgIDxr
ZXZpbm9AdGhlb2xsaXZpZXJzLmNvbT4KIAogICAgICAgICBbd3hdIFVucmV2aWV3ZWQuIFdlYkRP
TSBidWlsZCBmaXggYWZ0ZXIgYXJyYXkgdHlwZSBjaGFuZ2VzLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwppbmRleCBhYTFmODg4MWNkNjE3YTNhMGE4NTJlZmU2YTcxYmM1NGMxZmM4MTRjLi42NmY5
ODU0Mzc3MTAyMWY5MjEzNGFmZmIwMTA5OTUxMjZiM2E1ODg3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEyLTAzLTIyICBNaWNoYWwgTW9jbnkgIDxtbW9j
bnlAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIExheWVyUmVuZGVyZXJDaHJvbWl1
bSBzaG91bGQgdXNlIEdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkIGNhbGxiYWNrIHRvIGV4cGxp
Y2l0bHkgbWFuYWdlIGZyYW1lYnVmZmVyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODE4MjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHRlc3RzL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bVRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKEZyYW1lQ291bnRpbmdNZW1v
cnlBbGxvY2F0aW9uU2V0dGluZ0NvbnRleHQpOgorICAgICAgICAoRnJhbWVDb3VudGluZ01lbW9y
eUFsbG9jYXRpb25TZXR0aW5nQ29udGV4dDo6RnJhbWVDb3VudGluZ01lbW9yeUFsbG9jYXRpb25T
ZXR0aW5nQ29udGV4dCk6CisgICAgICAgIChGcmFtZUNvdW50aW5nTWVtb3J5QWxsb2NhdGlvblNl
dHRpbmdDb250ZXh0OjpwcmVwYXJlVGV4dHVyZSk6CisgICAgICAgIChGcmFtZUNvdW50aW5nTWVt
b3J5QWxsb2NhdGlvblNldHRpbmdDb250ZXh0OjpzZXRNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENh
bGxiYWNrQ0hST01JVU0pOgorICAgICAgICAoRnJhbWVDb3VudGluZ01lbW9yeUFsbG9jYXRpb25T
ZXR0aW5nQ29udGV4dDo6Z2V0U3RyaW5nKToKKyAgICAgICAgKEZyYW1lQ291bnRpbmdNZW1vcnlB
bGxvY2F0aW9uU2V0dGluZ0NvbnRleHQ6OmZyYW1lQ291bnQpOgorICAgICAgICAoRnJhbWVDb3Vu
dGluZ01lbW9yeUFsbG9jYXRpb25TZXR0aW5nQ29udGV4dDo6c2V0TWVtb3J5QWxsb2NhdGlvbik6
CisgICAgICAgIChGYWtlTGF5ZXJSZW5kZXJlckNocm9taXVtQ2xpZW50KToKKyAgICAgICAgKEZh
a2VMYXllclJlbmRlcmVyQ2hyb21pdW1DbGllbnQ6OkZha2VMYXllclJlbmRlcmVyQ2hyb21pdW1D
bGllbnQpOgorICAgICAgICAoRmFrZUxheWVyUmVuZGVyZXJDaHJvbWl1bUNsaWVudDo6dmlld3Bv
cnRTaXplKToKKyAgICAgICAgKEZha2VMYXllclJlbmRlcmVyQ2hyb21pdW1DbGllbnQ6OnNldHRp
bmdzKToKKyAgICAgICAgKEZha2VMYXllclJlbmRlcmVyQ2hyb21pdW1DbGllbnQ6OnJvb3RMYXll
cik6CisgICAgICAgIChGYWtlTGF5ZXJSZW5kZXJlckNocm9taXVtQ2xpZW50OjpkaWRMb3NlQ29u
dGV4dCk6CisgICAgICAgIChGYWtlTGF5ZXJSZW5kZXJlckNocm9taXVtQ2xpZW50OjpvblN3YXBC
dWZmZXJzQ29tcGxldGUpOgorICAgICAgICAoRmFrZUxheWVyUmVuZGVyZXJDaHJvbWl1bUNsaWVu
dDo6c2V0RnVsbFJvb3RMYXllckRhbWFnZSk6CisgICAgICAgIChGYWtlTGF5ZXJSZW5kZXJlckNo
cm9taXVtQ2xpZW50OjpzZXRGdWxsUm9vdExheWVyRGFtYWdlQ291bnQpOgorICAgICAgICAoRmFr
ZUxheWVyUmVuZGVyZXJDaHJvbWl1bSk6CisgICAgICAgIChGYWtlTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpGYWtlTGF5ZXJSZW5kZXJlckNocm9taXVtKToKKyAgICAgICAgKExheWVyUmVuZGVyZXJD
aHJvbWl1bVRlc3QpOgorICAgICAgICAoTGF5ZXJSZW5kZXJlckNocm9taXVtVGVzdDo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtVGVzdCk6CisgICAgICAgIChMYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0
OjpTZXRVcCk6CisgICAgICAgIChMYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0Ojpzd2FwQnVmZmVy
cyk6CisgICAgICAgIChURVNUX0YpOgorCiAyMDEyLTAzLTIyICBCZXJuaGFyZCBCYXVlciAgPGJh
dWVyYkBnb29nbGUuY29tPgogCiAgICAgICAgIFtjaHJvbWl1bV0gUGx1Zy1pbiBmYWlsaW5nIHRv
IGxvYWQgc2hvdWxkbid0IHNheSAiTWlzc2luZyBQbHVnLWluIgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggMjdiM2VkZTUxMzI1N2E3YTlmNDZiOWFlMjQ5MjE5NmE2
Yzk2Mzk5MC4uODhiNjZkNjY0MGQyZjE2YmI4OGI1MDZlYWYzY2YwODk0Y2Y2ZmNiZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC0xNjUsNiArMTY1LDMxIEBAIHBy
aXZhdGU6CiAgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBtX2xheWVyUmVuZGVyZXI7CiB9Owog
CitjbGFzcyBMYXllclJlbmRlcmVyR3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0Fk
YXB0ZXIgOiBwdWJsaWMgRXh0ZW5zaW9uczNEQ2hyb21pdW06OkdwdU1lbW9yeUFsbG9jYXRpb25D
aGFuZ2VkQ2FsbGJhY2tDSFJPTUlVTSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8
TGF5ZXJSZW5kZXJlckdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyPiBj
cmVhdGUoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBMYXllclJlbmRlcmVyR3B1TWVtb3J5QWxsb2NhdGlvbkNo
YW5nZWRDYWxsYmFja0FkYXB0ZXIobGF5ZXJSZW5kZXJlcikpOworICAgIH0KKyAgICB2aXJ0dWFs
IH5MYXllclJlbmRlcmVyR3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXIo
KSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBvbkdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkKEV4
dGVuc2lvbnMzRENocm9taXVtOjpHcHVNZW1vcnlBbGxvY2F0aW9uQ0hST01JVU0gYWxsb2NhdGlv
bikKKyAgICB7CisgICAgICAgIGlmICghYWxsb2NhdGlvbi5zdWdnZXN0SGF2ZUJhY2tidWZmZXIp
CisgICAgICAgICAgICBtX2xheWVyUmVuZGVyZXItPmRpc2NhcmRGcmFtZWJ1ZmZlcigpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBtX2xheWVyUmVuZGVyZXItPmVuc3VyZUZyYW1lYnVmZmVy
KCk7CisgICAgfQorCitwcml2YXRlOgorICAgIGV4cGxpY2l0IExheWVyUmVuZGVyZXJHcHVNZW1v
cnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlcihMYXllclJlbmRlcmVyQ2hyb21pdW0q
IGxheWVyUmVuZGVyZXIpCisgICAgICAgIDogbV9sYXllclJlbmRlcmVyKGxheWVyUmVuZGVyZXIp
CisgICAgeworICAgIH0KKworICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbV9sYXllclJlbmRl
cmVyOworfTsKKwogCiBQYXNzT3duUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpjcmVhdGUoTGF5ZXJSZW5kZXJlckNocm9taXVtQ2xpZW50KiBjbGllbnQs
IFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQpCiB7CkBAIC0xODQsNiArMjA5
LDcgQEAgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0oTGF5ZXJS
ZW5kZXJlckNocm9taXVtQ2xpZW50KiBjbGllbnQKICAgICAsIG1fZGVmYXVsdFJlbmRlclN1cmZh
Y2UoMCkKICAgICAsIG1fc2hhcmVkR2VvbWV0cnlRdWFkKEZsb2F0UmVjdCgtMC41ZiwgLTAuNWYs
IDEuMGYsIDEuMGYpKQogICAgICwgbV9pc1ZpZXdwb3J0Q2hhbmdlZChmYWxzZSkKKyAgICAsIG1f
aXNGcmFtZWJ1ZmZlckRpc2NhcmRlZChmYWxzZSkKIHsKIH0KIApAQCAtMjU5LDYgKzI4NSwxNyBA
QCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZSgpCiAgICAgaWYgKG1fY2Fw
YWJpbGl0aWVzLnVzaW5nVGV4dHVyZVN0b3JhZ2VFeHRlbnNpb24pCiAgICAgICAgIGV4dGVuc2lv
bnMtPmVuc3VyZUVuYWJsZWQoIkdMX0VYVF90ZXh0dXJlX3N0b3JhZ2UiKTsKIAorICAgIG1fY2Fw
YWJpbGl0aWVzLnVzaW5nR3B1TWVtb3J5TWFuYWdlciA9IGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJH
TF9DSFJPTUlVTV9ncHVfbWVtb3J5X21hbmFnZXIiKTsKKyAgICBpZiAobV9jYXBhYmlsaXRpZXMu
dXNpbmdHcHVNZW1vcnlNYW5hZ2VyKSB7CisgICAgICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJs
ZWQoIkdMX0NIUk9NSVVNX2dwdV9tZW1vcnlfbWFuYWdlciIpOworICAgICAgICBFeHRlbnNpb25z
M0RDaHJvbWl1bSogZXh0ZW5zaW9uczNEQ2hyb21pdW0gPSBzdGF0aWNfY2FzdDxFeHRlbnNpb25z
M0RDaHJvbWl1bSo+KGV4dGVuc2lvbnMpOworICAgICAgICBleHRlbnNpb25zM0RDaHJvbWl1bS0+
c2V0R3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNKExheWVyUmVuZGVy
ZXJHcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlcjo6Y3JlYXRlKHRoaXMp
KTsKKyAgICB9CisKKyAgICBtX2NhcGFiaWxpdGllcy51c2luZ0Rpc2NhcmRGcmFtZWJ1ZmZlciA9
IGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9DSFJPTUlVTV9kaXNjYXJkX2ZyYW1lYnVmZmVyIik7
CisgICAgaWYgKG1fY2FwYWJpbGl0aWVzLnVzaW5nRGlzY2FyZEZyYW1lYnVmZmVyKQorICAgICAg
ICBleHRlbnNpb25zLT5lbnN1cmVFbmFibGVkKCJHTF9DSFJPTUlVTV9kaXNjYXJkX2ZyYW1lYnVm
ZmVyIik7CisKICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmdldEludGVnZXJ2
KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVYVFVSRV9TSVpFLCAmbV9jYXBhYmlsaXRpZXMubWF4
VGV4dHVyZVNpemUpKTsKICAgICBtX2NhcGFiaWxpdGllcy5iZXN0VGV4dHVyZUZvcm1hdCA9IFBs
YXRmb3JtQ29sb3I6OmJlc3RUZXh0dXJlRm9ybWF0KG1fY29udGV4dC5nZXQoKSk7CiAKQEAgLTI3
Nyw2ICszMTQsNyBAQCBMYXllclJlbmRlcmVyQ2hyb21pdW06On5MYXllclJlbmRlcmVyQ2hyb21p
dW0oKQogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAgRXh0ZW5zaW9u
czNEQ2hyb21pdW0qIGV4dGVuc2lvbnMzRENocm9taXVtID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9u
czNEQ2hyb21pdW0qPihtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKSk7CiAgICAgZXh0ZW5zaW9u
czNEQ2hyb21pdW0tPnNldFN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0NIUk9NSVVNKG51bGxw
dHIpOworICAgIGV4dGVuc2lvbnMzRENocm9taXVtLT5zZXRHcHVNZW1vcnlBbGxvY2F0aW9uQ2hh
bmdlZENhbGxiYWNrQ0hST01JVU0obnVsbHB0cik7CiAgICAgbV9oZWFkc1VwRGlzcGxheS5jbGVh
cigpOyAvLyBFeHBsaWNpdGx5IGRlc3Ryb3kgdGhlIEhVRCBiZWZvcmUgdGhlIFRleHR1cmVNYW5h
Z2VyIGRpZXMuCiAgICAgY2xlYW51cFNoYXJlZE9iamVjdHMoKTsKIH0KQEAgLTMxMSw2ICszNDks
MTAgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldFZpc2libGUoYm9vbCB2aXNpYmxl
KQogICAgIGlmICghdmlzaWJsZSkKICAgICAgICAgcmVsZWFzZVJlbmRlclN1cmZhY2VUZXh0dXJl
cygpOwogCisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIG9uY2UgZnJhbWVidWZmZXIgaXMgYXV0
b21hdGljYWxseSByZWNyZWF0ZWQgb24gZmlyc3QgdXNlCisgICAgaWYgKHZpc2libGUpCisgICAg
ICAgIGVuc3VyZUZyYW1lYnVmZmVyKCk7CisKICAgICAvLyBUT0RPOiBSZXBsYWNlIHNldFZpc2li
aWxpdHlDSFJPTUlVTSB3aXRoIGFuIGV4dGVuc2lvbiB0byBleHBsaWNpdGx5IG1hbmFnZSBmcm9u
dC9iYWNrYnVmZmVycwogICAgIC8vIGNyYnVnLmNvbS8xMTYwNDkKICAgICBpZiAobV9jYXBhYmls
aXRpZXMudXNpbmdTZXRWaXNpYmlsaXR5KSB7CkBAIC0xMDMxLDYgKzEwNzMsMTMgQEAgdm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmZpbmlzaCgpCiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpzd2FwQnVmZmVycyhjb25zdCBJbnRSZWN0JiBzdWJCdWZmZXIpCiB7CisgICAgLy8gRklY
TUU6IFJlbW92ZSB0aGlzIG9uY2UgZ3B1IHByb2Nlc3Mgc3VwcG9ydHMgaWdub3Jpbmcgc3dhcCBi
dWZmZXJzIGNvbW1hbmQgd2hpbGUgZnJhbWVidWZmZXIgaXMgZGlzY2FyZGVkLgorICAgIC8vICAg
ICAgICBBbHRlcm5hdGl2ZWx5IChwcmVmZXJhYmx5PyksIHByb3RlY3QgYWxsIGNjIGNvZGUgc28g
YXMgbm90IHRvIGF0dGVtcHQgYSBzd2FwIGFmdGVyIGEgZnJhbWVidWZmZXIgZGlzY2FyZC4KKyAg
ICBpZiAobV9pc0ZyYW1lYnVmZmVyRGlzY2FyZGVkKSB7CisgICAgICAgIG1fY2xpZW50LT5zZXRG
dWxsUm9vdExheWVyRGFtYWdlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBUUkFD
RV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzd2FwQnVmZmVycyIsIHRoaXMsIDApOwog
ICAgIC8vIFdlJ3JlIGRvbmUhIFRpbWUgdG8gc3dhcGJ1ZmZlcnMhCiAKQEAgLTEwNTQsNiArMTEw
MywzOCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6b25Td2FwQnVmZmVyc0NvbXBsZXRl
KCkKICAgICBtX2NsaWVudC0+b25Td2FwQnVmZmVyc0NvbXBsZXRlKCk7CiB9CiAKK3ZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkaXNjYXJkRnJhbWVidWZmZXIoKQoreworICAgIGlmIChtX2lz
RnJhbWVidWZmZXJEaXNjYXJkZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9jYXBh
YmlsaXRpZXMudXNpbmdEaXNjYXJkRnJhbWVidWZmZXIpCisgICAgICAgIHJldHVybjsKKworICAg
IEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpOwor
ICAgIEV4dGVuc2lvbnMzRENocm9taXVtKiBleHRlbnNpb25zM0RDaHJvbWl1bSA9IHN0YXRpY19j
YXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4oZXh0ZW5zaW9ucyk7CisgICAgLy8gRklYTUU6IFVw
ZGF0ZSBhdHRhY2htZW50cyBhcmd1bWVudCB0byBhcHByb3ByaWF0ZSB2YWx1ZXMgb25jZSB0aGV5
IGFyZSBubyBsb25nZXIgaWdub3JlZC4KKyAgICBleHRlbnNpb25zM0RDaHJvbWl1bS0+ZGlzY2Fy
ZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCAwKTsKKyAg
ICBtX2lzRnJhbWVidWZmZXJEaXNjYXJkZWQgPSB0cnVlOworCisgICAgLy8gRGFtYWdlIHRyYWNr
ZXIgbmVlZHMgYSBmdWxsIHJlc2V0IGV2ZXJ5IHRpbWUgZnJhbWVidWZmZXIgaXMgZGlzY2FyZGVk
LgorICAgIG1fY2xpZW50LT5zZXRGdWxsUm9vdExheWVyRGFtYWdlKCk7Cit9CisKK3ZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjplbnN1cmVGcmFtZWJ1ZmZlcigpCit7CisgICAgaWYgKCFtX2lz
RnJhbWVidWZmZXJEaXNjYXJkZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9jYXBh
YmlsaXRpZXMudXNpbmdEaXNjYXJkRnJhbWVidWZmZXIpCisgICAgICAgIHJldHVybjsKKworICAg
IEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpOwor
ICAgIEV4dGVuc2lvbnMzRENocm9taXVtKiBleHRlbnNpb25zM0RDaHJvbWl1bSA9IHN0YXRpY19j
YXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4oZXh0ZW5zaW9ucyk7CisgICAgZXh0ZW5zaW9uczNE
Q2hyb21pdW0tPmVuc3VyZUZyYW1lYnVmZmVyQ0hST01JVU0oKTsKKyAgICBtX2lzRnJhbWVidWZm
ZXJEaXNjYXJkZWQgPSBmYWxzZTsKK30KKwogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06Omdl
dEZyYW1lYnVmZmVyUGl4ZWxzKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsK
ICAgICBBU1NFUlQocmVjdC5tYXhYKCkgPD0gdmlld3BvcnRXaWR0aCgpICYmIHJlY3QubWF4WSgp
IDw9IHZpZXdwb3J0SGVpZ2h0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApp
bmRleCA1MmVhODdjMTMzYjE1N2YxYTVlMGE4ODIwYWRkZjYzMTYxZjA4ZDYzLi42MWMxZDRhODc3
YmViY2NmYTVkYTFmZDFkZWI2NDIzMTkyMmEyYzcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uaApAQCAtNjEsNiArNjEsNyBAQCBjbGFzcyBHZW9tZXRyeUJpbmRpbmc7CiBjbGFz
cyBHcmFwaGljc0NvbnRleHQzRDsKIGNsYXNzIFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcjsKIGNs
YXNzIExheWVyUmVuZGVyZXJTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tBZGFwdGVyOworY2xh
c3MgU2NvcGVkRW5zdXJlRnJhbWVidWZmZXJBbGxvY2F0aW9uOwogCiBjbGFzcyBMYXllclJlbmRl
cmVyQ2hyb21pdW1DbGllbnQgewogcHVibGljOgpAQCAtNzAsNiArNzEsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBjb25zdCBDQ0xheWVySW1wbCogcm9vdExheWVyKCkgY29uc3QgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBkaWRMb3NlQ29udGV4dCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgb25T
d2FwQnVmZmVyc0NvbXBsZXRlKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRGdWxsUm9vdExh
eWVyRGFtYWdlKCkgPSAwOwogfTsKIAogLy8gQ2xhc3MgdGhhdCBoYW5kbGVzIGRyYXdpbmcgb2Yg
Y29tcG9zaXRlZCByZW5kZXIgbGF5ZXJzIHVzaW5nIEdMLgpAQCAtMTYwLDEwICsxNjIsMTUgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB3aWR0aCwgZmxvYXQgaGVp
Z2h0LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBGbG9hdFF1YWQmLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgbWF0cml4TG9jYXRpb24sIGludCBhbHBoYUxvY2F0aW9uLCBpbnQgcXVhZExv
Y2F0aW9uKTsKIAotcHJpdmF0ZToKKyAgICB2b2lkIGRpc2NhcmRGcmFtZWJ1ZmZlcigpOworICAg
IHZvaWQgZW5zdXJlRnJhbWVidWZmZXIoKTsKKyAgICBib29sIGlzRnJhbWVidWZmZXJEaXNjYXJk
ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzRnJhbWVidWZmZXJEaXNjYXJkZWQ7IH0KKworcHJvdGVj
dGVkOgogICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bShMYXllclJlbmRlcmVyQ2hyb21pdW1DbGll
bnQqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPik7CiAgICAgYm9vbCBpbml0aWFsaXpl
KCk7CiAKK3ByaXZhdGU6CiAgICAgdm9pZCBkcmF3UXVhZChjb25zdCBDQ0RyYXdRdWFkKiwgY29u
c3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCk7CiAgICAgdm9pZCBkcmF3RGVidWdCb3Jk
ZXJRdWFkKGNvbnN0IENDRGVidWdCb3JkZXJEcmF3UXVhZCopOwogICAgIHZvaWQgZHJhd1JlbmRl
clN1cmZhY2VRdWFkKGNvbnN0IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkKik7CkBAIC0yNTQsOCAr
MjYxLDM3IEBAIHByaXZhdGU6CiAgICAgRmxvYXRRdWFkIG1fc2hhcmVkR2VvbWV0cnlRdWFkOwog
CiAgICAgYm9vbCBtX2lzVmlld3BvcnRDaGFuZ2VkOworICAgIGJvb2wgbV9pc0ZyYW1lYnVmZmVy
RGlzY2FyZGVkOwogfTsKIAorLy8gVGhlIHB1cnBvc2Ugb2YgdGhpcyBoZWxwZXIgaXMgdHdvZm9s
ZDoKKy8vIDEuIFRvIGVuc3VyZSB0aGF0IGEgZnJhbWVidWZmZXIgaXMgYXZhaWxhYmxlIGZvciBz
Y29wZSBsaWZldGltZSwgYW5kCisvLyAyLiBUbyByZXNldCBmcmFtZWJ1ZmZlciBhbGxvY2F0aW9u
IHRvIHByZXZpb3VzIHN0YXRlIG9uIHNjb3BlIGV4aXQuCisvLyBJZiB0aGUgZnJhbWVidWZmZXIg
aXMgcmVjcmVhdGVkLCBpdHMgY29udGVudHMgYXJlIHVuZGVmaW5lZC4KKy8vIEZJWE1FOiBQcmV2
ZW50L2RlbGF5IGRpc2NhcmRpbmcgZnJhbWVidWZmZXIgdmlhIGFueSBtZWFucyB3aGlsZSBhbnkK
Ky8vIGluc3RhbmNlIG9mIHRoaXMgaXMgYWxpdmUuIEF0IHRoZSBtb21lbnQsIHRoaXMgaXNuJ3Qg
YW4gaXNzdWUuCitjbGFzcyBTY29wZWRFbnN1cmVGcmFtZWJ1ZmZlckFsbG9jYXRpb24geworcHVi
bGljOgorICAgIGV4cGxpY2l0IFNjb3BlZEVuc3VyZUZyYW1lYnVmZmVyQWxsb2NhdGlvbihMYXll
clJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCisgICAgICAgIDogbV9sYXllclJlbmRl
cmVyKGxheWVyUmVuZGVyZXIpCisgICAgICAgICwgbV9mcmFtZWJ1ZmZlcldhc0luaXRpYWxseURp
c2NhcmRlZChsYXllclJlbmRlcmVyLT5pc0ZyYW1lYnVmZmVyRGlzY2FyZGVkKCkpCisgICAgewor
ICAgICAgICBpZiAobV9mcmFtZWJ1ZmZlcldhc0luaXRpYWxseURpc2NhcmRlZCkKKyAgICAgICAg
ICAgIG1fbGF5ZXJSZW5kZXJlci0+ZW5zdXJlRnJhbWVidWZmZXIoKTsKKyAgICB9CisKKyAgICB+
U2NvcGVkRW5zdXJlRnJhbWVidWZmZXJBbGxvY2F0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICht
X2ZyYW1lYnVmZmVyV2FzSW5pdGlhbGx5RGlzY2FyZGVkKQorICAgICAgICAgICAgbV9sYXllclJl
bmRlcmVyLT5kaXNjYXJkRnJhbWVidWZmZXIoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTGF5
ZXJSZW5kZXJlckNocm9taXVtKiBtX2xheWVyUmVuZGVyZXI7CisgICAgYm9vbCBtX2ZyYW1lYnVm
ZmVyV2FzSW5pdGlhbGx5RGlzY2FyZGVkOworfTsKKworCiAvLyBTZXR0aW5nIERFQlVHX0dMX0NB
TExTIHRvIDEgd2lsbCBjYWxsIGdsR2V0RXJyb3IoKSBhZnRlciBhbG1vc3QgZXZlcnkgR0wKIC8v
IGNhbGwgbWFkZSBieSB0aGUgY29tcG9zaXRvci4gVXNlZnVsIGZvciBkZWJ1Z2dpbmcgcmVuZGVy
aW5nIGlzc3VlcyBidXQKIC8vIHdpbGwgc2lnbmlmaWNhbnRseSBkZWdyYWRlIHBlcmZvcm1hbmNl
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAppbmRleCA5Zjc4MGE3YWU3N2FhMWU4ZTE1MTM3
YTFkYjhmOWYwZjkwYmY4Y2FiLi43MzkwZWMzNGE5ZTdiOGQwMzA2YjNkNjY5NDYxMWUwMGE0ZDcy
NzY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApAQCAtMTAyLDYgKzEwMiw4IEBAIHN0
cnVjdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzIHsKICAgICAgICAgLCB1c2luZ1N3YXBDb21w
bGV0ZUNhbGxiYWNrKGZhbHNlKQogICAgICAgICAsIHVzaW5nVGV4dHVyZVVzYWdlSGludChmYWxz
ZSkKICAgICAgICAgLCB1c2luZ1RleHR1cmVTdG9yYWdlRXh0ZW5zaW9uKGZhbHNlKQorICAgICAg
ICAsIHVzaW5nR3B1TWVtb3J5TWFuYWdlcihmYWxzZSkKKyAgICAgICAgLCB1c2luZ0Rpc2NhcmRG
cmFtZWJ1ZmZlcihmYWxzZSkKICAgICAgICAgLCBtYXhUZXh0dXJlU2l6ZSgwKSB7IH0KIAogICAg
IEdDM0RlbnVtIGJlc3RUZXh0dXJlRm9ybWF0OwpAQCAtMTEzLDYgKzExNSw4IEBAIHN0cnVjdCBM
YXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzIHsKICAgICBib29sIHVzaW5nU3dhcENvbXBsZXRlQ2Fs
bGJhY2s7CiAgICAgYm9vbCB1c2luZ1RleHR1cmVVc2FnZUhpbnQ7CiAgICAgYm9vbCB1c2luZ1Rl
eHR1cmVTdG9yYWdlRXh0ZW5zaW9uOworICAgIGJvb2wgdXNpbmdHcHVNZW1vcnlNYW5hZ2VyOwor
ICAgIGJvb2wgdXNpbmdEaXNjYXJkRnJhbWVidWZmZXI7CiAgICAgaW50IG1heFRleHR1cmVTaXpl
OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCA0NDNh
MWZmYWE3N2JhMGVlNTIwMjlkZjBlM2FiMTQ5NjdmNGM1MmRiLi45ZGZmZWUzNTNhZWUwZWUyMDcz
NDJkZDdkYzM0Y2VkMTU2YzRjYTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmNwcApAQCAtNDgwLDExICs0ODAsNiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNl
dFZpc2libGUoYm9vbCB2aXNpYmxlKQogCiAgICAgbV9sYXllclJlbmRlcmVyLT5zZXRWaXNpYmxl
KHZpc2libGUpOwogCi0gICAgLy8gUmVzZXQgdGhlIGRhbWFnZSB0cmFja2VyIGJlY2F1c2UgdGhl
IGZyb250L2JhY2sgYnVmZmVycyBtYXkgaGF2ZSBiZWVuIGRhbWFnZWQgYnkgdGhlIEdQVQotICAg
IC8vIHByb2Nlc3Mgb24gdmlzaWJpbGl0eSBjaGFuZ2UuCi0gICAgaWYgKHZpc2libGUgJiYgbV9s
YXllclJlbmRlcmVyLT5jYXBhYmlsaXRpZXMoKS51c2luZ1BhcnRpYWxTd2FwKQotICAgICAgICBz
ZXRGdWxsUm9vdExheWVyRGFtYWdlKCk7Ci0KICAgICBjb25zdCBib29sIHNob3VsZFRpY2tJbkJh
Y2tncm91bmQgPSAhdmlzaWJsZSAmJiBtX25lZWRzQW5pbWF0ZUxheWVyczsKICAgICBtX3RpbWVT
b3VyY2VDbGllbnRBZGFwdGVyLT5zZXRBY3RpdmUoc2hvdWxkVGlja0luQmFja2dyb3VuZCk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKaW5kZXggZTBjNmU3M2EzMzQyMGRk
NDdkMDk1NDI4NjJjYjlhNDhhMGFkMWNiMC4uNzdlYjg5MmZiZTk4ZWNmZWEyZWI4ZTExOTE4Mzgy
ZGU1ZjdjZGFlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApAQCAtOTgs
NiArOTgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBjb25zdCBDQ0xheWVySW1wbCogcm9vdExh
eWVyKCkgY29uc3QgIHsgcmV0dXJuIG1fcm9vdExheWVySW1wbC5nZXQoKTsgfQogICAgIHZpcnR1
YWwgdm9pZCBkaWRMb3NlQ29udGV4dCgpOwogICAgIHZpcnR1YWwgdm9pZCBvblN3YXBCdWZmZXJz
Q29tcGxldGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RnVsbFJvb3RMYXllckRhbWFnZSgpOwog
CiAgICAgLy8gSW1wbGVtZW50YXRpb24KICAgICBib29sIGNhbkRyYXcoKTsKQEAgLTEzNCwxMCAr
MTM1LDYgQEAgcHVibGljOgogCiAgICAgUGFzc093blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBw
cm9jZXNzU2Nyb2xsRGVsdGFzKCk7CiAKLSAgICAvLyBXaGVyZSBwb3NzaWJsZSwgcmVkcmF3cyBh
cmUgc2Npc3NvcmVkIHRvIGEgZGFtYWdlIHJlZ2lvbiBjYWxjdWxhdGVkIGZyb20gY2hhbmdlcyB0
bwotICAgIC8vIGxheWVyIHByb3BlcnRpZXMuIFRoaXMgZnVuY3Rpb24gb3ZlcnJpZGVzIHRoZSBk
YW1hZ2UgcmVnaW9uIGZvciB0aGUgbmV4dCBkcmF3IGN5Y2xlLgotICAgIHZvaWQgc2V0RnVsbFJv
b3RMYXllckRhbWFnZSgpOwotCiAgICAgdm9pZCBzdGFydFBhZ2VTY2FsZUFuaW1hdGlvbihjb25z
dCBJbnRTaXplJiB0cmFnZXRQb3NpdGlvbiwgYm9vbCB1c2VBbmNob3IsIGZsb2F0IHNjYWxlLCBk
b3VibGUgZHVyYXRpb25TZWMpOwogCiAgICAgYm9vbCBuZWVkc0FuaW1hdGVMYXllcnMoKSBjb25z
dCB7IHJldHVybiBtX25lZWRzQW5pbWF0ZUxheWVyczsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Npbmds
ZVRocmVhZFByb3h5LmNwcAppbmRleCA2MDdiMzhhZjdhMjJjYzc3NGZmNmExNzI3OTNkM2RlNTll
NDAzNjhiLi4yZDllMGYzNDFmZTcyNTdkMzQ3OThmNmNmMWI4ZDRkZjg1OWQyMGIwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Npbmds
ZVRocmVhZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcApAQCAtNzIsNiArNzIsOCBAQCBib29s
IENDU2luZ2xlVGhyZWFkUHJveHk6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVscywg
Y29uc3QgSW50UmVjdCYgcmVjdAogICAgIFRSQUNFX0VWRU5UKCJDQ1NpbmdsZVRocmVhZFByb3h5
Ojpjb21wb3NpdGVBbmRSZWFkYmFjayIsIHRoaXMsIDApOwogICAgIEFTU0VSVChDQ1Byb3h5Ojpp
c01haW5UaHJlYWQoKSk7CiAKKyAgICBTY29wZWRFbnN1cmVGcmFtZWJ1ZmZlckFsbG9jYXRpb24g
ZW5zdXJlRnJhbWVidWZmZXIobV9sYXllclRyZWVIb3N0SW1wbC0+bGF5ZXJSZW5kZXJlcigpKTsK
KwogICAgIGlmICghY29tbWl0SWZOZWVkZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCmluZGV4IGU0MTczYThhZDYxMTNmN2VkYzRiOTAyYWIw
YTdmODUwODYzYTE0NWYuLjgyNzA3NDBkMDA2OWQ4MWE0M2VkMDYzNjc0OTMxZWRiYzEzM2Q0MWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCkBAIC05MSw2ICs5MSw4IEBAIGJvb2wgQ0NU
aHJlYWRQcm94eTo6Y29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRS
ZWN0JiByZWN0KQogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKG1fbGF5
ZXJUcmVlSG9zdCk7CiAKKyAgICBTY29wZWRFbnN1cmVGcmFtZWJ1ZmZlckFsbG9jYXRpb24gZW5z
dXJlRnJhbWVidWZmZXIobV9sYXllclRyZWVIb3N0SW1wbC0+bGF5ZXJSZW5kZXJlcigpKTsKKwog
ICAgIGlmICghbV9sYXllclJlbmRlcmVySW5pdGlhbGl6ZWQpIHsKICAgICAgICAgVFJBQ0VfRVZF
TlQoImNvbXBvc2l0ZUFuZFJlYWRiYWNrX0Vhcmx5T3V0X0xSX1VuaW5pdGlhbGl6ZWQiLCB0aGlz
LCAwKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkK
aW5kZXggZTI2N2E1YmQzZGI5M2NkYjJjN2Y4OTJjMjE2Yjg5NzJmMzMzN2YyYS4uODg5NDI5YmQ5
MjM4MDFkNjMxNzZmYmQwMTI2NzA1NDZlMjY4OGU0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXBpCkBAIC0xMDUsNiArMTA1LDcgQEAKICAgICAgICAgICAgICd0ZXN0cy9LZXlib2FyZFRl
c3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9LVVJMVGVzdC5jcHAnLAogICAgICAgICAgICAg
J3Rlc3RzL0xheWVyQ2hyb21pdW1UZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvTGF5ZXJS
ZW5kZXJlckNocm9taXVtVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0xheWVyVGV4dHVy
ZVVwZGF0ZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvTGV2ZWxEQlRlc3QuY3BwJywK
ICAgICAgICAgICAgICd0ZXN0cy9Mb2NhbGl6ZWROdW1iZXJJQ1VUZXN0LmNwcCcsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyUmVuZGVyZXJDaHJvbWl1bVRl
c3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllclJlbmRlcmVyQ2hyb21p
dW1UZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZmEzN2EyM2ZhMzJhNTQ4YzlmYjQ5ODJkMGVmZGQ2NjUx
YmJiNzI4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9M
YXllclJlbmRlcmVyQ2hyb21pdW1UZXN0LmNwcApAQCAtMCwwICsxLDIyNiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1
bS5oIgorCisjaW5jbHVkZSAiRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRFByaXZhdGUu
aCIKKworI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4K
KwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitj
bGFzcyBGcmFtZUNvdW50aW5nTWVtb3J5QWxsb2NhdGlvblNldHRpbmdDb250ZXh0IDogcHVibGlj
IEZha2VXZWJHcmFwaGljc0NvbnRleHQzRCB7CitwdWJsaWM6CisgICAgRnJhbWVDb3VudGluZ01l
bW9yeUFsbG9jYXRpb25TZXR0aW5nQ29udGV4dCgpIDogbV9mcmFtZSgwKSB7IH0KKworICAgIC8v
IFdlYkdyYXBoaWNzQ29udGV4dDNEIG1ldGhvZHMuCisKKyAgICAvLyBUaGlzIG1ldGhvZCB3b3Vs
ZCBub3JtYWxseSBkbyBhIGdsU3dhcEJ1ZmZlcnMgdW5kZXIgdGhlIGhvb2QuCisgICAgdmlydHVh
bCB2b2lkIHByZXBhcmVUZXh0dXJlKCkgeyBtX2ZyYW1lKys7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
c2V0TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNKFdlYkdyYXBoaWNzTWVt
b3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNKiBjYWxsYmFjaykgeyBtX21lbW9y
eUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2sgPSBjYWxsYmFjazsgfQorICAgIHZpcnR1YWwgV2Vi
U3RyaW5nIGdldFN0cmluZyhXZWJLaXQ6OldHQzNEZW51bSBuYW1lKQorICAgIHsKKyAgICAgICAg
aWYgKG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkVYVEVOU0lPTlMpCisgICAgICAgICAgICBy
ZXR1cm4gV2ViU3RyaW5nKCJHTF9DSFJPTUlVTV9zZXRfdmlzaWJpbGl0eSBHTF9DSFJPTUlVTV9n
cHVfbWVtb3J5X21hbmFnZXIgR0xfQ0hST01JVU1fZGlzY2FyZF9mcmFtZWJ1ZmZlciIpOworICAg
ICAgICByZXR1cm4gV2ViU3RyaW5nKCk7CisgICAgfQorCisgICAgLy8gTWV0aG9kcyBhZGRlZCBm
b3IgdGVzdC4KKyAgICBpbnQgZnJhbWVDb3VudCgpIHsgcmV0dXJuIG1fZnJhbWU7IH0KKyAgICB2
b2lkIHNldE1lbW9yeUFsbG9jYXRpb24oV2ViR3JhcGhpY3NNZW1vcnlBbGxvY2F0aW9uIGFsbG9j
YXRpb24pIHsgbV9tZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrLT5vbk1lbW9yeUFsbG9j
YXRpb25DaGFuZ2VkKGFsbG9jYXRpb24pOyB9CisKK3ByaXZhdGU6CisgICAgaW50IG1fZnJhbWU7
CisgICAgV2ViR3JhcGhpY3NNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQ0hST01JVU0q
IG1fbWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFjazsKK307CisKK2NsYXNzIEZha2VMYXll
clJlbmRlcmVyQ2hyb21pdW1DbGllbnQgOiBwdWJsaWMgTGF5ZXJSZW5kZXJlckNocm9taXVtQ2xp
ZW50IHsKK3B1YmxpYzoKKyAgICBGYWtlTGF5ZXJSZW5kZXJlckNocm9taXVtQ2xpZW50KCkgOiBt
X3NldEZ1bGxSb290TGF5ZXJEYW1hZ2VDb3VudCgwKSB7IH0KKworICAgIC8vIExheWVyUmVuZGVy
ZXJDaHJvbWl1bUNsaWVudCBtZXRob2RzLgorICAgIHZpcnR1YWwgY29uc3QgSW50U2l6ZSYgdmll
d3BvcnRTaXplKCkgY29uc3QgeyBzdGF0aWMgSW50U2l6ZSBmYWtlU2l6ZTsgcmV0dXJuIGZha2VT
aXplOyB9CisgICAgdmlydHVhbCBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncygpIGNvbnN0IHsg
c3RhdGljIENDU2V0dGluZ3MgZmFrZVNldHRpbmdzOyByZXR1cm4gZmFrZVNldHRpbmdzOyB9Cisg
ICAgdmlydHVhbCBDQ0xheWVySW1wbCogcm9vdExheWVyKCkgeyByZXR1cm4gMDsgfQorICAgIHZp
cnR1YWwgY29uc3QgQ0NMYXllckltcGwqIHJvb3RMYXllcigpIGNvbnN0IHsgcmV0dXJuIDA7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgZGlkTG9zZUNvbnRleHQoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
b25Td2FwQnVmZmVyc0NvbXBsZXRlKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldEZ1bGxSb290
TGF5ZXJEYW1hZ2UoKSB7IG1fc2V0RnVsbFJvb3RMYXllckRhbWFnZUNvdW50Kys7IH0KKworICAg
IC8vIE1ldGhvZHMgYWRkZWQgZm9yIHRlc3QuCisgICAgaW50IHNldEZ1bGxSb290TGF5ZXJEYW1h
Z2VDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2V0RnVsbFJvb3RMYXllckRhbWFnZUNvdW50OyB9
CisKK3ByaXZhdGU6CisgICAgaW50IG1fc2V0RnVsbFJvb3RMYXllckRhbWFnZUNvdW50OworfTsK
KworY2xhc3MgRmFrZUxheWVyUmVuZGVyZXJDaHJvbWl1bSA6IHB1YmxpYyBMYXllclJlbmRlcmVy
Q2hyb21pdW0geworcHVibGljOgorICAgIEZha2VMYXllclJlbmRlcmVyQ2hyb21pdW0oTGF5ZXJS
ZW5kZXJlckNocm9taXVtQ2xpZW50KiBjbGllbnQsIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+IGNvbnRleHQpIDogTGF5ZXJSZW5kZXJlckNocm9taXVtKGNsaWVudCwgY29udGV4dCkgeyB9
CisKKyAgICAvLyBMYXllclJlbmRlcmVyQ2hyb21pdW0gbWV0aG9kcy4KKworICAgIC8vIENoYW5n
aW5nIHZpc2liaWxpdHkgdG8gcHVibGljLgorICAgIHVzaW5nIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6aW5pdGlhbGl6ZTsKK307CisKK2NsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bVRlc3QgOiBw
dWJsaWMgdGVzdGluZzo6VGVzdCB7Citwcm90ZWN0ZWQ6CisgICAgTGF5ZXJSZW5kZXJlckNocm9t
aXVtVGVzdCgpCisgICAgICAgIDogbV9zdWdnZXN0SGF2ZUJhY2tidWZmZXJZZXMoMSwgdHJ1ZSkK
KyAgICAgICAgLCBtX3N1Z2dlc3RIYXZlQmFja2J1ZmZlck5vKDEsIGZhbHNlKQorICAgICAgICAs
IG1fY29udGV4dChHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4
dEZyb21XZWJDb250ZXh0KGFkb3B0UHRyKG5ldyBGcmFtZUNvdW50aW5nTWVtb3J5QWxsb2NhdGlv
blNldHRpbmdDb250ZXh0KCkpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hv
c3RXaW5kb3cpKQorICAgICAgICAsIG1fbW9ja0NvbnRleHQoKnN0YXRpY19jYXN0PEZyYW1lQ291
bnRpbmdNZW1vcnlBbGxvY2F0aW9uU2V0dGluZ0NvbnRleHQqPihHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRChtX2NvbnRleHQuZ2V0KCkpKSkKKyAg
ICAgICAgLCBtX2xheWVyUmVuZGVyZXJDaHJvbWl1bSgmbV9tb2NrQ2xpZW50LCBtX2NvbnRleHQu
cmVsZWFzZSgpKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgU2V0VXAoKQorICAg
IHsKKyAgICAgICAgbV9sYXllclJlbmRlcmVyQ2hyb21pdW0uaW5pdGlhbGl6ZSgpOworICAgIH0K
KworICAgIHZvaWQgc3dhcEJ1ZmZlcnMoKQorICAgIHsKKyAgICAgICAgbV9sYXllclJlbmRlcmVy
Q2hyb21pdW0uc3dhcEJ1ZmZlcnMoSW50UmVjdCgpKTsKKyAgICB9CisKKyAgICBXZWJHcmFwaGlj
c01lbW9yeUFsbG9jYXRpb24gbV9zdWdnZXN0SGF2ZUJhY2tidWZmZXJZZXM7CisgICAgV2ViR3Jh
cGhpY3NNZW1vcnlBbGxvY2F0aW9uIG1fc3VnZ2VzdEhhdmVCYWNrYnVmZmVyTm87CisKKyAgICBS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKKyAgICBGcmFtZUNvdW50aW5nTWVt
b3J5QWxsb2NhdGlvblNldHRpbmdDb250ZXh0JiBtX21vY2tDb250ZXh0OworICAgIEZha2VMYXll
clJlbmRlcmVyQ2hyb21pdW1DbGllbnQgbV9tb2NrQ2xpZW50OworICAgIEZha2VMYXllclJlbmRl
cmVyQ2hyb21pdW0gbV9sYXllclJlbmRlcmVyQ2hyb21pdW07Cit9OworCisvLyBUZXN0IExheWVy
UmVuZGVyZXJDaHJvbWl1bSBkaXNjYXJkRnJhbWVidWZmZXIgZnVuY3Rpb25hbGl0eToKKy8vIFN1
Z2dlc3QgcmVjcmVhdGluZyBmcmFtZWJ1ZmZlciB3aGVuIG9uZSBhbHJlYWR5IGV4aXN0cy4KKy8v
IEV4cGVjdGVkOiBpdCBkb2VzIG5vdGhpbmcuCitURVNUX0YoTGF5ZXJSZW5kZXJlckNocm9taXVt
VGVzdCwgU3VnZ2VzdEJhY2tidWZmZXJZZXNXaGVuSXRBbHJlYWR5RXhpc3RzU2hvdWxkRG9Ob3Ro
aW5nKQoreworICAgIG1fbW9ja0NvbnRleHQuc2V0TWVtb3J5QWxsb2NhdGlvbihtX3N1Z2dlc3RI
YXZlQmFja2J1ZmZlclllcyk7CisgICAgRVhQRUNUX0VRKDAsIG1fbW9ja0NsaWVudC5zZXRGdWxs
Um9vdExheWVyRGFtYWdlQ291bnQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKG1fbGF5ZXJSZW5kZXJl
ckNocm9taXVtLmlzRnJhbWVidWZmZXJEaXNjYXJkZWQoKSk7CisKKyAgICBzd2FwQnVmZmVycygp
OworICAgIEVYUEVDVF9FUSgxLCBtX21vY2tDb250ZXh0LmZyYW1lQ291bnQoKSk7Cit9CisKKy8v
IFRlc3QgTGF5ZXJSZW5kZXJlckNocm9taXVtIGRpc2NhcmRGcmFtZWJ1ZmZlciBmdW5jdGlvbmFs
aXR5OgorLy8gU3VnZ2VzdCBkaXNjYXJkaW5nIGZyYW1lYnVmZmVyIHdoZW4gb25lIGV4aXN0cy4K
Ky8vIEV4cGVjdGVkOiBpdCBpcyBkaXNjYXJkZWQgYW5kIGRhbWFnZSB0cmFja2VyIGlzIHJlc2V0
LgorVEVTVF9GKExheWVyUmVuZGVyZXJDaHJvbWl1bVRlc3QsIFN1Z2dlc3RCYWNrYnVmZmVyTm9T
aG91bGREaXNjYXJkQmFja2J1ZmZlckFuZERhbWFnZVJvb3RMYXllcikKK3sKKyAgICBtX21vY2tD
b250ZXh0LnNldE1lbW9yeUFsbG9jYXRpb24obV9zdWdnZXN0SGF2ZUJhY2tidWZmZXJObyk7Cisg
ICAgRVhQRUNUX0VRKDEsIG1fbW9ja0NsaWVudC5zZXRGdWxsUm9vdExheWVyRGFtYWdlQ291bnQo
KSk7CisgICAgRVhQRUNUX1RSVUUobV9sYXllclJlbmRlcmVyQ2hyb21pdW0uaXNGcmFtZWJ1ZmZl
ckRpc2NhcmRlZCgpKTsKK30KKworLy8gVGVzdCBMYXllclJlbmRlcmVyQ2hyb21pdW0gZGlzY2Fy
ZEZyYW1lYnVmZmVyIGZ1bmN0aW9uYWxpdHk6CisvLyBTdWdnZXN0IGRpc2NhcmRpbmcgZnJhbWVi
dWZmZXIgd2hlbiBvbmUgZG9lcyBub3QgZXhpc3QuCisvLyBFeHBlY3RlZDogaXQgZG9lcyBub3Ro
aW5nLgorVEVTVF9GKExheWVyUmVuZGVyZXJDaHJvbWl1bVRlc3QsIFN1Z2dlc3RCYWNrYnVmZmVy
Tm9XaGVuSXREb2VzbnRFeGlzdFNob3VsZERvTm90aGluZykKK3sKKyAgICBtX21vY2tDb250ZXh0
LnNldE1lbW9yeUFsbG9jYXRpb24obV9zdWdnZXN0SGF2ZUJhY2tidWZmZXJObyk7CisgICAgRVhQ
RUNUX0VRKDEsIG1fbW9ja0NsaWVudC5zZXRGdWxsUm9vdExheWVyRGFtYWdlQ291bnQoKSk7Cisg
ICAgRVhQRUNUX1RSVUUobV9sYXllclJlbmRlcmVyQ2hyb21pdW0uaXNGcmFtZWJ1ZmZlckRpc2Nh
cmRlZCgpKTsKKworICAgIG1fbW9ja0NvbnRleHQuc2V0TWVtb3J5QWxsb2NhdGlvbihtX3N1Z2dl
c3RIYXZlQmFja2J1ZmZlck5vKTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9tb2NrQ2xpZW50LnNldEZ1
bGxSb290TGF5ZXJEYW1hZ2VDb3VudCgpKTsKKyAgICBFWFBFQ1RfVFJVRShtX2xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5pc0ZyYW1lYnVmZmVyRGlzY2FyZGVkKCkpOworfQorCisvLyBUZXN0IExheWVy
UmVuZGVyZXJDaHJvbWl1bSBkaXNjYXJkRnJhbWVidWZmZXIgZnVuY3Rpb25hbGl0eToKKy8vIFN1
Z2dlc3QgZGlzY2FyZGluZyBmcmFtZWJ1ZmZlciwgdGhlbiB0cnkgdG8gc3dhcEJ1ZmZlcnMuCisv
LyBFeHBlY3RlZDogZnJhbWVidWZmZXIgaXMgZGlzY2FyZGVkLCBzd2FwcyBhcmUgaWdub3JlZCwg
YW5kIGRhbWFnZSBpcyByZXNldCBhZnRlciBkaXNjYXJkIGFuZCBhZnRlciBlYWNoIHN3YXAuCitU
RVNUX0YoTGF5ZXJSZW5kZXJlckNocm9taXVtVGVzdCwgU3dhcEJ1ZmZlcnNXaGlsZUJhY2tidWZm
ZXJEaXNjYXJkZWRTaG91bGRJZ25vcmVTd2FwQW5kRGFtYWdlUm9vdExheWVyKQoreworICAgIG1f
bW9ja0NvbnRleHQuc2V0TWVtb3J5QWxsb2NhdGlvbihtX3N1Z2dlc3RIYXZlQmFja2J1ZmZlck5v
KTsKKyAgICBFWFBFQ1RfVFJVRShtX2xheWVyUmVuZGVyZXJDaHJvbWl1bS5pc0ZyYW1lYnVmZmVy
RGlzY2FyZGVkKCkpOworICAgIEVYUEVDVF9FUSgxLCBtX21vY2tDbGllbnQuc2V0RnVsbFJvb3RM
YXllckRhbWFnZUNvdW50KCkpOworCisgICAgc3dhcEJ1ZmZlcnMoKTsKKyAgICBFWFBFQ1RfRVEo
MCwgbV9tb2NrQ29udGV4dC5mcmFtZUNvdW50KCkpOworICAgIEVYUEVDVF9FUSgyLCBtX21vY2tD
bGllbnQuc2V0RnVsbFJvb3RMYXllckRhbWFnZUNvdW50KCkpOworICAgIAorICAgIHN3YXBCdWZm
ZXJzKCk7CisgICAgRVhQRUNUX0VRKDAsIG1fbW9ja0NvbnRleHQuZnJhbWVDb3VudCgpKTsKKyAg
ICBFWFBFQ1RfRVEoMywgbV9tb2NrQ2xpZW50LnNldEZ1bGxSb290TGF5ZXJEYW1hZ2VDb3VudCgp
KTsKK30KKworLy8gVGVzdCBMYXllclJlbmRlcmVyQ2hyb21pdW0gZGlzY2FyZEZyYW1lYnVmZmVy
IGZ1bmN0aW9uYWxpdHk6CisvLyBEaXNjYXJkIGZyYW1lYnVmZmVyLCB0aGVuIHNldCB2aXNpYmls
aXR5IHRvIHRydWUuCisvLyBFeHBlY3RlZDogcmVjcmVhdGVzIHRoZSBmcmFtZWJ1ZmZlci4KK1RF
U1RfRihMYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0LCBTZXRWaXNpYmlsaXR5VHJ1ZVNob3VsZFJl
Y3JlYXRlQmFja2J1ZmZlcikKK3sKKyAgICBtX21vY2tDb250ZXh0LnNldE1lbW9yeUFsbG9jYXRp
b24obV9zdWdnZXN0SGF2ZUJhY2tidWZmZXJObyk7CisgICAgRVhQRUNUX1RSVUUobV9sYXllclJl
bmRlcmVyQ2hyb21pdW0uaXNGcmFtZWJ1ZmZlckRpc2NhcmRlZCgpKTsKKworICAgIG1fbGF5ZXJS
ZW5kZXJlckNocm9taXVtLnNldFZpc2libGUodHJ1ZSk7CisgICAgRVhQRUNUX0ZBTFNFKG1fbGF5
ZXJSZW5kZXJlckNocm9taXVtLmlzRnJhbWVidWZmZXJEaXNjYXJkZWQoKSk7Cit9CisKKy8vIFRl
c3QgTGF5ZXJSZW5kZXJlckNocm9taXVtIGRpc2NhcmRGcmFtZWJ1ZmZlciBmdW5jdGlvbmFsaXR5
OgorLy8gQ3JlYXRlIGEgU2NvcGVkRW5zdXJlRnJhbWVidWZmZXJBbGxvY2F0aW9uIHdoaWxlIGEg
ZnJhbWVidWZmZXIgd2FzIGRpc2NhcmRlZCBhbmQgdGhlbiBzd2FwQnVmZmVycy4KKy8vIEV4cGVj
dGVkOiB3aWxsIHJlY3JlYXRlIGZyYW1lYnVmZmVyIHNjb3BlIGR1cmF0aW9uLCBkdXJpbmcgd2hp
Y2ggc3dhcHMgd2lsbCB3b3JrIGZpbmUsIGFuZCBkaXNjYXJkIG9uIHNjb3BlIGV4aXQuCitURVNU
X0YoTGF5ZXJSZW5kZXJlckNocm9taXVtVGVzdCwgRGlzY2FyZGVkQmFja2J1ZmZlcklzUmVjcmVh
dHJlZEZvclNjb3BlRHVyYXRpb24pCit7CisgICAgbV9tb2NrQ29udGV4dC5zZXRNZW1vcnlBbGxv
Y2F0aW9uKG1fc3VnZ2VzdEhhdmVCYWNrYnVmZmVyTm8pOworICAgIEVYUEVDVF9UUlVFKG1fbGF5
ZXJSZW5kZXJlckNocm9taXVtLmlzRnJhbWVidWZmZXJEaXNjYXJkZWQoKSk7CisgICAgRVhQRUNU
X0VRKDEsIG1fbW9ja0NsaWVudC5zZXRGdWxsUm9vdExheWVyRGFtYWdlQ291bnQoKSk7CisgICAg
eworICAgICAgICBTY29wZWRFbnN1cmVGcmFtZWJ1ZmZlckFsbG9jYXRpb24gZW5zdXJlRnJhbWVi
dWZmZXIoJm1fbGF5ZXJSZW5kZXJlckNocm9taXVtKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKG1f
bGF5ZXJSZW5kZXJlckNocm9taXVtLmlzRnJhbWVidWZmZXJEaXNjYXJkZWQoKSk7CisKKyAgICAg
ICAgc3dhcEJ1ZmZlcnMoKTsKKyAgICAgICAgRVhQRUNUX0VRKDEsIG1fbW9ja0NvbnRleHQuZnJh
bWVDb3VudCgpKTsKKyAgICB9CisgICAgRVhQRUNUX1RSVUUobV9sYXllclJlbmRlcmVyQ2hyb21p
dW0uaXNGcmFtZWJ1ZmZlckRpc2NhcmRlZCgpKTsKKyAgICBFWFBFQ1RfRVEoMiwgbV9tb2NrQ2xp
ZW50LnNldEZ1bGxSb290TGF5ZXJEYW1hZ2VDb3VudCgpKTsKK30KKworLy8gVGVzdCBMYXllclJl
bmRlcmVyQ2hyb21pdW0gZGlzY2FyZEZyYW1lYnVmZmVyIGZ1bmN0aW9uYWxpdHk6CisvLyBDcmVh
dGUgYSBTY29wZWRFbnN1cmVGcmFtZWJ1ZmZlckFsbG9jYXRpb24gd2hpbGUgYSBmcmFtZWJ1ZmZl
ciB3YXMgbm90IGRpc2NhcmRlZCBhbmQgdGhlbiBzd2FwQnVmZmVycy4KKy8vIEV4cGVjdGVkOiB3
aWxsIGhhdmUgbm8gZWZmZWN0LgorVEVTVF9GKExheWVyUmVuZGVyZXJDaHJvbWl1bVRlc3QsIEVu
c3VyaW5nQmFja2J1ZmZlckZvclNjb3BlRHVyYXRpb25Eb2VzTm90aGluZ0lmQWxyZWFkeUV4aXN0
cykKK3sKKyAgICBFWFBFQ1RfRkFMU0UobV9sYXllclJlbmRlcmVyQ2hyb21pdW0uaXNGcmFtZWJ1
ZmZlckRpc2NhcmRlZCgpKTsKKyAgICBFWFBFQ1RfRVEoMCwgbV9tb2NrQ2xpZW50LnNldEZ1bGxS
b290TGF5ZXJEYW1hZ2VDb3VudCgpKTsKKyAgICB7CisgICAgICAgIFNjb3BlZEVuc3VyZUZyYW1l
YnVmZmVyQWxsb2NhdGlvbiBlbnN1cmVGcmFtZWJ1ZmZlcigmbV9sYXllclJlbmRlcmVyQ2hyb21p
dW0pOworICAgICAgICBFWFBFQ1RfRkFMU0UobV9sYXllclJlbmRlcmVyQ2hyb21pdW0uaXNGcmFt
ZWJ1ZmZlckRpc2NhcmRlZCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIG1fbW9ja0NsaWVudC5z
ZXRGdWxsUm9vdExheWVyRGFtYWdlQ291bnQoKSk7CisKKyAgICAgICAgc3dhcEJ1ZmZlcnMoKTsK
KyAgICAgICAgRVhQRUNUX0VRKDEsIG1fbW9ja0NvbnRleHQuZnJhbWVDb3VudCgpKTsKKyAgICB9
CisgICAgRVhQRUNUX0ZBTFNFKG1fbGF5ZXJSZW5kZXJlckNocm9taXVtLmlzRnJhbWVidWZmZXJE
aXNjYXJkZWQoKSk7CisgICAgRVhQRUNUX0VRKDAsIG1fbW9ja0NsaWVudC5zZXRGdWxsUm9vdExh
eWVyRGFtYWdlQ291bnQoKSk7Cit9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>