<?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>87821</bug_id>
          
          <creation_ts>2012-05-29 22:17:30 -0700</creation_ts>
          <short_desc>[Chromium] Compositor doesn&apos;t support translucent root layers.</short_desc>
          <delta_ts>2012-06-08 19:29:32 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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="David Reveman">reveman</reporter>
          <assigned_to name="David Reveman">reveman</assigned_to>
          <cc>abarth</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>danakj</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>vollick</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>636852</commentid>
    <comment_count>0</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2012-05-29 22:17:30 -0700</bug_when>
    <thetext>Set contents opaqueness correctly for root layers and use opaque value of owning layer to determine how to clear a render surface in LayerRendererChromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639575</commentid>
    <comment_count>1</comment_count>
      <attachid>145348</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2012-06-01 11:57:15 -0700</bug_when>
    <thetext>Created attachment 145348
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639576</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-01 11:58:54 -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>639604</commentid>
    <comment_count>3</comment_count>
    <who name="">vollick</who>
    <bug_when>2012-06-01 12:16:05 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=145348) [details]
&gt; Patch

Sorry for the drive by -- I was wondering if a translucent root should affect subpixel aa. I was under the impression that it could only be used on opaque layers, currently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639610</commentid>
    <comment_count>4</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-01 12:22:48 -0700</bug_when>
    <thetext>If the root is translucent then we would have to turn subpixel AA off.

What&apos;s this for?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639617</commentid>
    <comment_count>5</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2012-06-01 12:28:29 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #1)
&gt; &gt; Created an attachment (id=145348) [details] [details]
&gt; &gt; Patch
&gt; 
&gt; Sorry for the drive by -- I was wondering if a translucent root should affect subpixel aa. I was under the impression that it could only be used on opaque layers, currently.

Yes, good point. We need to disable sub-pixel aa for translucent root layers. We&apos;re currently making the decision if sub-pixel aa can be used based on if the layer has border texels. We should add layer opaqueness as a factor to that decision.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639618</commentid>
    <comment_count>6</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2012-06-01 12:28:49 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; If the root is translucent then we would have to turn subpixel AA off.
&gt; 
&gt; What&apos;s this for?

http://code.google.com/p/chromium/issues/detail?id=129787</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639673</commentid>
    <comment_count>7</comment_count>
      <attachid>145368</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2012-06-01 13:30:22 -0700</bug_when>
    <thetext>Created attachment 145368
Patch

Turn off subpixel AA for non-opaque layers</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640762</commentid>
    <comment_count>8</comment_count>
      <attachid>145368</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-04 12:43:04 -0700</bug_when>
    <thetext>Comment on attachment 145368
Patch

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

Code looks reasonable but it could be much simpler.

This also needs tests of some form.

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:396
&gt; +    if (renderSurface != rootRenderSurface || !settings().opaqueRootLayer)

This is weird as a setting - why not just check if the root layer is opaque directly?

&gt; Source/WebKit/chromium/public/WebSettings.h:158
&gt; +    virtual void setOpaqueRootLayer(bool) = 0;

I don&apos;t think it makes sense for WebSettings to be talking about the root layer.  This is really about whether the WebView may be rendered translucently, right?

What&apos;s supposed to happen when this view isn&apos;t composited?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640814</commentid>
    <comment_count>9</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2012-06-04 13:54:18 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 145368 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=145368&amp;action=review
&gt; 
&gt; Code looks reasonable but it could be much simpler.
&gt; 
&gt; This also needs tests of some form.

We could unit test it based on glClear being called. Does that seem reasonable?

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:396
&gt; &gt; +    if (renderSurface != rootRenderSurface || !settings().opaqueRootLayer)
&gt; 
&gt; This is weird as a setting - why not just check if the root layer is opaque directly?

Eventually, I&apos;d like to make this check be &quot;if (renderSurface-&gt;isOpaque())&quot; to avoid clearing all render surfaces with an opaque backing layer. But that&apos;s a change in behavior that I would prefer to land in a separate patch. The reason I&apos;m not using the backing layer opaque value for the root render surface in this patch is that this requires changes to both webkit and chromium (ui compositor root layer) to ensure that we&apos;re not doing unnecessary clearing of the root layer.

&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebSettings.h:158
&gt; &gt; +    virtual void setOpaqueRootLayer(bool) = 0;
&gt; 
&gt; I don&apos;t think it makes sense for WebSettings to be talking about the root layer.  This is really about whether the WebView may be rendered translucently, right?

It&apos;s about allowing the contents to be translucent. What would be a better way to expose this?

&gt; 
&gt; What&apos;s supposed to happen when this view isn&apos;t composited?

It&apos;s not supposed to have any effect. Having this only supported with compositing is good enough for the current use case. I happens to work right now without compositing but that&apos;s not a requirement afaik.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640826</commentid>
    <comment_count>10</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-04 14:16:43 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; (From update of attachment 145368 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=145368&amp;action=review
&gt; &gt; 
&gt; &gt; Code looks reasonable but it could be much simpler.
&gt; &gt; 
&gt; &gt; This also needs tests of some form.
&gt; 
&gt; We could unit test it based on glClear being called. Does that seem reasonable?
&gt; 

Sounds reasonable, but in release builds we only issue a glClear on non-root layers (since it&apos;s just a debug aid, not for correctness) so I&apos;m not sure how useful of a test you would end up with.  What would the test actually do?

&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:396
&gt; &gt; &gt; +    if (renderSurface != rootRenderSurface || !settings().opaqueRootLayer)
&gt; &gt; 
&gt; &gt; This is weird as a setting - why not just check if the root layer is opaque directly?
&gt; 
&gt; Eventually, I&apos;d like to make this check be &quot;if (renderSurface-&gt;isOpaque())&quot; to avoid clearing all render surfaces with an opaque backing layer. But that&apos;s a change in behavior that I would prefer to land in a separate patch. The reason I&apos;m not using the backing layer opaque value for the root render surface in this patch is that this requires changes to both webkit and chromium (ui compositor root layer) to ensure that we&apos;re not doing unnecessary clearing of the root layer.
&gt; 

The only chromium-side change you would need would be to not mark the root layer as being opaque, but you have to set that anyway to render correctly - no?  This setting seems strictly redundant with with setOpaque() on the root layer.

&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/chromium/public/WebSettings.h:158
&gt; &gt; &gt; +    virtual void setOpaqueRootLayer(bool) = 0;
&gt; &gt; 
&gt; &gt; I don&apos;t think it makes sense for WebSettings to be talking about the root layer.  This is really about whether the WebView may be rendered translucently, right?
&gt; 
&gt; It&apos;s about allowing the contents to be translucent. What would be a better way to expose this?

I think my main problem is that the name is bad.  If it&apos;s about allowing the contents to be translucent, why does the name say nothing about contents or translucency?

&gt; 
&gt; &gt; 
&gt; &gt; What&apos;s supposed to happen when this view isn&apos;t composited?
&gt; 
&gt; It&apos;s not supposed to have any effect. Having this only supported with compositing is good enough for the current use case. I happens to work right now without compositing but that&apos;s not a requirement afaik.

That seems pretty fragile.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640975</commentid>
    <comment_count>11</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2012-06-04 16:28:34 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; (From update of attachment 145368 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=145368&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; Code looks reasonable but it could be much simpler.
&gt; &gt; &gt; 
&gt; &gt; &gt; This also needs tests of some form.
&gt; &gt; 
&gt; &gt; We could unit test it based on glClear being called. Does that seem reasonable?
&gt; &gt; 
&gt; 
&gt; Sounds reasonable, but in release builds we only issue a glClear on non-root layers (since it&apos;s just a debug aid, not for correctness) so I&apos;m not sure how useful of a test you would end up with.  What would the test actually do?

It would just check that glClear was issued with correct parameters for root layers when this feature is enabled. That needs to happen for both release and debug builds when translucent contents is allowed.

&gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:396
&gt; &gt; &gt; &gt; +    if (renderSurface != rootRenderSurface || !settings().opaqueRootLayer)
&gt; &gt; &gt; 
&gt; &gt; &gt; This is weird as a setting - why not just check if the root layer is opaque directly?
&gt; &gt; 
&gt; &gt; Eventually, I&apos;d like to make this check be &quot;if (renderSurface-&gt;isOpaque())&quot; to avoid clearing all render surfaces with an opaque backing layer. But that&apos;s a change in behavior that I would prefer to land in a separate patch. The reason I&apos;m not using the backing layer opaque value for the root render surface in this patch is that this requires changes to both webkit and chromium (ui compositor root layer) to ensure that we&apos;re not doing unnecessary clearing of the root layer.
&gt; &gt; 
&gt; 
&gt; The only chromium-side change you would need would be to not mark the root layer as being opaque, but you have to set that anyway to render correctly - no?  This setting seems strictly redundant with with setOpaque() on the root layer.

The layer representing the webview with translucent contents in the browser compositor is already not marked as opaque. We would have to mark the browser compositor root layer as opaque to not unnecessarily issue a glClear every time the browser compositor draws. And on the webkit side we need to correctly mark the actual root layer used there as opaque (what layer that is depends on if we need to use a scroll layer or not).

If you&apos;re OK with it, I&apos;d like to leave this as part of fixing this bug:
https://bugs.webkit.org/show_bug.cgi?id=88265

&gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebKit/chromium/public/WebSettings.h:158
&gt; &gt; &gt; &gt; +    virtual void setOpaqueRootLayer(bool) = 0;
&gt; &gt; &gt; 
&gt; &gt; &gt; I don&apos;t think it makes sense for WebSettings to be talking about the root layer.  This is really about whether the WebView may be rendered translucently, right?
&gt; &gt; 
&gt; &gt; It&apos;s about allowing the contents to be translucent. What would be a better way to expose this?
&gt; 
&gt; I think my main problem is that the name is bad.  If it&apos;s about allowing the contents to be translucent, why does the name say nothing about contents or translucency?

So how about setAllowTranslucentContentsWithAcceleratedCompositing()?

&gt; 
&gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; What&apos;s supposed to happen when this view isn&apos;t composited?
&gt; &gt; 
&gt; &gt; It&apos;s not supposed to have any effect. Having this only supported with compositing is good enough for the current use case. I happens to work right now without compositing but that&apos;s not a requirement afaik.
&gt; 
&gt; That seems pretty fragile.

We could make a request for allowing translucent contents trigger compositing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641050</commentid>
    <comment_count>12</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-04 17:49:43 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; &gt; &gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:396
&gt; &gt; &gt; &gt; &gt; +    if (renderSurface != rootRenderSurface || !settings().opaqueRootLayer)
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; This is weird as a setting - why not just check if the root layer is opaque directly?
&gt; &gt; &gt; 
&gt; &gt; &gt; Eventually, I&apos;d like to make this check be &quot;if (renderSurface-&gt;isOpaque())&quot; to avoid clearing all render surfaces with an opaque backing layer. But that&apos;s a change in behavior that I would prefer to land in a separate patch. The reason I&apos;m not using the backing layer opaque value for the root render surface in this patch is that this requires changes to both webkit and chromium (ui compositor root layer) to ensure that we&apos;re not doing unnecessary clearing of the root layer.
&gt; &gt; &gt; 
&gt; &gt; 
&gt; &gt; The only chromium-side change you would need would be to not mark the root layer as being opaque, but you have to set that anyway to render correctly - no?  This setting seems strictly redundant with with setOpaque() on the root layer.
&gt; 
&gt; The layer representing the webview with translucent contents in the browser compositor is already not marked as opaque. We would have to mark the browser compositor root layer as opaque to not unnecessarily issue a glClear every time the browser compositor draws. And on the webkit side we need to correctly mark the actual root layer used there as opaque (what layer that is depends on if we need to use a scroll layer or not).

Isn&apos;t that what your changes to NonCompositedContentHost are doing?  If not, what are those changes doing?

&gt; If you&apos;re OK with it, I&apos;d like to leave this as part of fixing this bug:
&gt; https://bugs.webkit.org/show_bug.cgi?id=88265

No, it&apos;s a different issue.

&gt; 
&gt; &gt; 
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Source/WebKit/chromium/public/WebSettings.h:158
&gt; &gt; &gt; &gt; &gt; +    virtual void setOpaqueRootLayer(bool) = 0;
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; I don&apos;t think it makes sense for WebSettings to be talking about the root layer.  This is really about whether the WebView may be rendered translucently, right?
&gt; &gt; &gt; 
&gt; &gt; &gt; It&apos;s about allowing the contents to be translucent. What would be a better way to expose this?
&gt; &gt; 
&gt; &gt; I think my main problem is that the name is bad.  If it&apos;s about allowing the contents to be translucent, why does the name say nothing about contents or translucency?
&gt; 
&gt; So how about setAllowTranslucentContentsWithAcceleratedCompositing()?
&gt; 
&gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; What&apos;s supposed to happen when this view isn&apos;t composited?
&gt; &gt; &gt; 
&gt; &gt; &gt; It&apos;s not supposed to have any effect. Having this only supported with compositing is good enough for the current use case. I happens to work right now without compositing but that&apos;s not a requirement afaik.
&gt; &gt; 
&gt; &gt; That seems pretty fragile.
&gt; 
&gt; We could make a request for allowing translucent contents trigger compositing.

The problem is requesting compositing doesn&apos;t necessarily mean that you will get compositing - if there&apos;s some failure in the initialization we&apos;ll silently fall back to software rendering.  Seems like a big footgun to have a setting that changes the rendering, but only sometimes.  Maybe this just needs big comment and long ugly name to warn people (as you suggested above).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641608</commentid>
    <comment_count>13</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2012-06-05 08:57:08 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; &gt; &gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:396
&gt; &gt; &gt; &gt; &gt; &gt; +    if (renderSurface != rootRenderSurface || !settings().opaqueRootLayer)
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; This is weird as a setting - why not just check if the root layer is opaque directly?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Eventually, I&apos;d like to make this check be &quot;if (renderSurface-&gt;isOpaque())&quot; to avoid clearing all render surfaces with an opaque backing layer. But that&apos;s a change in behavior that I would prefer to land in a separate patch. The reason I&apos;m not using the backing layer opaque value for the root render surface in this patch is that this requires changes to both webkit and chromium (ui compositor root layer) to ensure that we&apos;re not doing unnecessary clearing of the root layer.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; The only chromium-side change you would need would be to not mark the root layer as being opaque, but you have to set that anyway to render correctly - no?  This setting seems strictly redundant with with setOpaque() on the root layer.
&gt; &gt; 
&gt; &gt; The layer representing the webview with translucent contents in the browser compositor is already not marked as opaque. We would have to mark the browser compositor root layer as opaque to not unnecessarily issue a glClear every time the browser compositor draws. And on the webkit side we need to correctly mark the actual root layer used there as opaque (what layer that is depends on if we need to use a scroll layer or not).
&gt; 
&gt; Isn&apos;t that what your changes to NonCompositedContentHost are doing?  If not, what are those changes doing?

No, that&apos;s just to make sure blending is used correctly when drawing the NonCompositedContent layer.

&gt; 
&gt; &gt; If you&apos;re OK with it, I&apos;d like to leave this as part of fixing this bug:
&gt; &gt; https://bugs.webkit.org/show_bug.cgi?id=88265
&gt; 
&gt; No, it&apos;s a different issue.

It doesn&apos;t have to be as part of the same patch. I really just want a change that makes us use layer opaque value for glClear to land separably because I don&apos;t want regressions related to such a change to be confused with the feature introduced by this patch.

&gt; 
&gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; Source/WebKit/chromium/public/WebSettings.h:158
&gt; &gt; &gt; &gt; &gt; &gt; +    virtual void setOpaqueRootLayer(bool) = 0;
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; I don&apos;t think it makes sense for WebSettings to be talking about the root layer.  This is really about whether the WebView may be rendered translucently, right?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; It&apos;s about allowing the contents to be translucent. What would be a better way to expose this?
&gt; &gt; &gt; 
&gt; &gt; &gt; I think my main problem is that the name is bad.  If it&apos;s about allowing the contents to be translucent, why does the name say nothing about contents or translucency?
&gt; &gt; 
&gt; &gt; So how about setAllowTranslucentContentsWithAcceleratedCompositing()?
&gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; What&apos;s supposed to happen when this view isn&apos;t composited?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; It&apos;s not supposed to have any effect. Having this only supported with compositing is good enough for the current use case. I happens to work right now without compositing but that&apos;s not a requirement afaik.
&gt; &gt; &gt; 
&gt; &gt; &gt; That seems pretty fragile.
&gt; &gt; 
&gt; &gt; We could make a request for allowing translucent contents trigger compositing.
&gt; 
&gt; The problem is requesting compositing doesn&apos;t necessarily mean that you will get compositing - if there&apos;s some failure in the initialization we&apos;ll silently fall back to software rendering.  Seems like a big footgun to have a setting that changes the rendering, but only sometimes.  Maybe this just needs big comment and long ugly name to warn people (as you suggested above).

Ok, makes sense.

FYI, currently compositing mode produces a different result compared to software rendering. And this new option actually makes compositing mode produce the same result as software rendering. The reason I&apos;m not just making it default is that it will make us call glClear way more then we currently do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641660</commentid>
    <comment_count>14</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-05 09:49:39 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; &gt; &gt; The layer representing the webview with translucent contents in the browser compositor is already not marked as opaque. We would have to mark the browser compositor root layer as opaque to not unnecessarily issue a glClear every time the browser compositor draws. And on the webkit side we need to correctly mark the actual root layer used there as opaque (what layer that is depends on if we need to use a scroll layer or not).
&gt; &gt; 
&gt; &gt; Isn&apos;t that what your changes to NonCompositedContentHost are doing?  If not, what are those changes doing?
&gt; 
&gt; No, that&apos;s just to make sure blending is used correctly when drawing the NonCompositedContent layer.

I&apos;m confused by this. The NCCH constructor sets opaque(true) on its graphics layer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641762</commentid>
    <comment_count>15</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2012-06-05 11:33:19 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; &gt; &gt; The layer representing the webview with translucent contents in the browser compositor is already not marked as opaque. We would have to mark the browser compositor root layer as opaque to not unnecessarily issue a glClear every time the browser compositor draws. And on the webkit side we need to correctly mark the actual root layer used there as opaque (what layer that is depends on if we need to use a scroll layer or not).
&gt; &gt; &gt; 
&gt; &gt; &gt; Isn&apos;t that what your changes to NonCompositedContentHost are doing?  If not, what are those changes doing?
&gt; &gt; 
&gt; &gt; No, that&apos;s just to make sure blending is used correctly when drawing the NonCompositedContent layer.
&gt; 
&gt; I&apos;m confused by this. The NCCH constructor sets opaque(true) on its graphics layer.

Yes, NCCH uses opaque(true) by default on its graphics layer. It needs to be opaque(false) for translucent contents to be allowed. Alternatively, we can make  it opaque(false) by default but we probably still want to make sure it&apos;s set to opaque(true) when translucent contents is not allowed to avoid unnecessary blending.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641809</commentid>
    <comment_count>16</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-05 12:44:45 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; (In reply to comment #13)
&gt; &gt; &gt; &gt; &gt; The layer representing the webview with translucent contents in the browser compositor is already not marked as opaque. We would have to mark the browser compositor root layer as opaque to not unnecessarily issue a glClear every time the browser compositor draws. And on the webkit side we need to correctly mark the actual root layer used there as opaque (what layer that is depends on if we need to use a scroll layer or not).
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Isn&apos;t that what your changes to NonCompositedContentHost are doing?  If not, what are those changes doing?
&gt; &gt; &gt; 
&gt; &gt; &gt; No, that&apos;s just to make sure blending is used correctly when drawing the NonCompositedContent layer.
&gt; &gt; 
&gt; &gt; I&apos;m confused by this. The NCCH constructor sets opaque(true) on its graphics layer.
&gt; 
&gt; Yes, NCCH uses opaque(true) by default on its graphics layer. It needs to be opaque(false) for translucent contents to be allowed. Alternatively, we can make  it opaque(false) by default but we probably still want to make sure it&apos;s set to opaque(true) when translucent contents is not allowed to avoid unnecessary blending.

Why not just set it to the correct value (opaque=true unless the view is marked as translucent) ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641938</commentid>
    <comment_count>17</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2012-06-05 15:27:13 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; (In reply to comment #14)
&gt; &gt; &gt; (In reply to comment #13)
&gt; &gt; &gt; &gt; &gt; &gt; The layer representing the webview with translucent contents in the browser compositor is already not marked as opaque. We would have to mark the browser compositor root layer as opaque to not unnecessarily issue a glClear every time the browser compositor draws. And on the webkit side we need to correctly mark the actual root layer used there as opaque (what layer that is depends on if we need to use a scroll layer or not).
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Isn&apos;t that what your changes to NonCompositedContentHost are doing?  If not, what are those changes doing?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; No, that&apos;s just to make sure blending is used correctly when drawing the NonCompositedContent layer.
&gt; &gt; &gt; 
&gt; &gt; &gt; I&apos;m confused by this. The NCCH constructor sets opaque(true) on its graphics layer.
&gt; &gt; 
&gt; &gt; Yes, NCCH uses opaque(true) by default on its graphics layer. It needs to be opaque(false) for translucent contents to be allowed. Alternatively, we can make  it opaque(false) by default but we probably still want to make sure it&apos;s set to opaque(true) when translucent contents is not allowed to avoid unnecessary blending.
&gt; 
&gt; Why not just set it to the correct value (opaque=true unless the view is marked as translucent) ?

That&apos;s what the current patch is doing except that I didn&apos;t remove the existing setOpaque(true) call in the NCCH constructor. Do you want me to just remove that call in the NCCH constructor? I&apos;ll be happy to do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641967</commentid>
    <comment_count>18</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-05 15:53:40 -0700</bug_when>
    <thetext>Yeah, I think that would be much cleaner - set the value correctly in NCCH initialization and get rid of the setting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641968</commentid>
    <comment_count>19</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-05 15:53:57 -0700</bug_when>
    <thetext>The compositor setting that is, you still need one on WebSettings (or WebView)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642945</commentid>
    <comment_count>20</comment_count>
      <attachid>146142</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2012-06-06 16:49:01 -0700</bug_when>
    <thetext>Created attachment 146142
Patch

Remove WebSetting and forward the WebView transparency setting to CCLayerTreeHostImpl</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642948</commentid>
    <comment_count>21</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2012-06-06 16:50:38 -0700</bug_when>
    <thetext>jamesr, I apologize for wasting your time with previous patches. After some more investigation I realized that there&apos;s already a mechanism to tell the renderer process to use a transparent background. It&apos;s just that this is not available to us at the time we instantiate the WebLayerTreeView and the NCCH. Transparency, just as background color, can change throughout the lifetime of the WebLayerTreeView and the NCCH.

The new patch forwards the transparency setting to CCLayerTreeHostImpl and uses it to determine how to draw the background and clear the root render pass. I also added some unit tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642961</commentid>
    <comment_count>22</comment_count>
      <attachid>146142</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-06 16:57:19 -0700</bug_when>
    <thetext>Comment on attachment 146142
Patch

Nice, LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>643760</commentid>
    <comment_count>23</comment_count>
      <attachid>146142</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-07 11:52:15 -0700</bug_when>
    <thetext>Comment on attachment 146142
Patch

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

&gt; Source/Platform/chromium/public/WebLayerTreeView.h:122
&gt; +    // Sets the transparency for the viewport.
&gt; +    WEBKIT_EXPORT void setIsTransparent(bool);

I don&apos;t like setIsTransparent() on a view - we aren&apos;t saying that the view is transparent (you wouldn&apos;t be able to see anything in it if it was), we&apos;re saying something about the viewport. Could you put &quot;viewport&quot; in the function name?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:325
&gt; +    if (!m_isTransparent)
&gt; +        passes.last()-&gt;appendQuadsToFillScreen(m_rootLayerImpl.get(), m_backgroundColor, occlusionTracker);

Where are the tests for this change?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.h:67
&gt; +    bool isTransparent() const { return m_isTransparent; }

I think this is really misleading - if the pass really was transparent, then we wouldn&apos;t have to draw anything at all. This bit means that there&apos;s some transparency within the pass and that clearing to an opaque color is not a no-op.  Seems like this could be better named.

Or even better, not put this state on CCRenderPass at all since LayerRendererChromium already knows how to special-case the root pass.  CCLTHI can tell LRC whether to clear the root pass to opaque or not in debug builds.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.h:70
&gt; +    explicit CCRenderPass(CCRenderSurface*, bool isTransparent);

If you leave this, can you please make this a setter on pass instead of construction-time so you don&apos;t have to touch so many things? arguably being opaque is the exceptional case, so it should have the setter and the default should be &quot;transparent&quot; (or translucent)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644308</commentid>
    <comment_count>24</comment_count>
      <attachid>146472</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2012-06-07 21:40:34 -0700</bug_when>
    <thetext>Created attachment 146472
Patch

setHasTransparentBackground(), add background unit test and avoid background filters on render passes with transparent bg</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644310</commentid>
    <comment_count>25</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2012-06-07 21:46:45 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; (From update of attachment 146142 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=146142&amp;action=review
&gt; 
&gt; &gt; Source/Platform/chromium/public/WebLayerTreeView.h:122
&gt; &gt; +    // Sets the transparency for the viewport.
&gt; &gt; +    WEBKIT_EXPORT void setIsTransparent(bool);
&gt; 
&gt; I don&apos;t like setIsTransparent() on a view - we aren&apos;t saying that the view is transparent (you wouldn&apos;t be able to see anything in it if it was), we&apos;re saying something about the viewport. Could you put &quot;viewport&quot; in the function name?

Changed to setHasTransparentBackground as discussed.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:325
&gt; &gt; +    if (!m_isTransparent)
&gt; &gt; +        passes.last()-&gt;appendQuadsToFillScreen(m_rootLayerImpl.get(), m_backgroundColor, occlusionTracker);
&gt; 
&gt; Where are the tests for this change?

Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.h:67
&gt; &gt; +    bool isTransparent() const { return m_isTransparent; }
&gt; 
&gt; I think this is really misleading - if the pass really was transparent, then we wouldn&apos;t have to draw anything at all. This bit means that there&apos;s some transparency within the pass and that clearing to an opaque color is not a no-op.  Seems like this could be better named.
&gt; 
&gt; Or even better, not put this state on CCRenderPass at all since LayerRendererChromium already knows how to special-case the root pass.  CCLTHI can tell LRC whether to clear the root pass to opaque or not in debug builds.

Changed to setHasTransparentBackground and kept the state on CCRenderPass as discussed.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.h:70
&gt; &gt; +    explicit CCRenderPass(CCRenderSurface*, bool isTransparent);
&gt; 
&gt; If you leave this, can you please make this a setter on pass instead of construction-time so you don&apos;t have to touch so many things? arguably being opaque is the exceptional case, so it should have the setter and the default should be &quot;transparent&quot; (or translucent)

Default is now transparent and CCRenderPass has a setter.

Also fixed handling of background filters, which we have to avoid when drawing to non-opaque render surfaces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644940</commentid>
    <comment_count>26</comment_count>
      <attachid>146472</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-08 12:34:49 -0700</bug_when>
    <thetext>Comment on attachment 146472
Patch

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

R=me

One other possibly complication - not with this patch but with the idea in general - is that some callers want to use background filters for accessibility, so they have to be really careful to not set the viewport as transparent and try to set background filters.  I think that all we need to do on this side is be careful in our header comments, but it&apos;s something to be aware of.

&gt; Source/Platform/chromium/public/WebLayerTreeView.h:121
&gt; +    // Sets the background transparency for the viewport.

Please also document the default (I&apos;m pretty sure it&apos;s transparent = false)

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:617
&gt; +    // FIXME: We only allow background filters on an opaque render surface because other surfaces may contain

could you please also update the comment on WebLayer::setBackgroundFilters?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644972</commentid>
    <comment_count>27</comment_count>
      <attachid>146635</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2012-06-08 13:16:20 -0700</bug_when>
    <thetext>Created attachment 146635
Patch

Update comment for WebLayer::setBackgroundFilters and document the default value for WebLayerTreeView::setHasTransparentBackground.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645213</commentid>
    <comment_count>28</comment_count>
      <attachid>146635</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-08 19:29:26 -0700</bug_when>
    <thetext>Comment on attachment 146635
Patch

Clearing flags on attachment: 146635

Committed r119887: &lt;http://trac.webkit.org/changeset/119887&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645214</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-08 19:29:32 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145348</attachid>
            <date>2012-06-01 11:57:15 -0700</date>
            <delta_ts>2012-06-01 13:30:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87821-20120601145713.patch</filename>
            <type>text/plain</type>
            <size>13333</size>
            <attacher name="David Reveman">reveman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5MjUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCBiODcxMGFiZmM0YTRl
NmVjMmU5ODkxZjBiZWM5OGU5NzJlYzRkMzU3Li4yYzEyMGFkMzFlYWRiZGQ0ZmM2YjMyY2Y0ODFl
OTM4NTdiMGI0ODRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wNi0wMSAg
RGF2aWQgUmV2ZW1hbiAgPHJldmVtYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1
bV0gQ29tcG9zaXRvciBkb2Vzbid0IHN1cHBvcnQgdHJhbnNsdWNlbnQgcm9vdCBsYXllcnMuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzgyMQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogY2hyb21pdW0v
cHVibGljL1dlYkxheWVyVHJlZVZpZXcuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVl
Vmlldzo6U2V0dGluZ3M6OlNldHRpbmdzKToKKyAgICAgICAgKFNldHRpbmdzKToKKwogMjAxMi0w
NS0zMSAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9taXVtLm9yZz4KIAogICAgICAgICBb
Y2hyb21pdW1dIE1pZ3JhdGUgdG8gV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCA0OTVmZTJhZjdiZjExYjVlMjFkNjBhNzZmYWYyNjAzM2NlYjY3NzA4Li44YTg3OTM2NTZhZWNh
M2Y1ZTE2MDgwM2Q4NGIxODkyNzdiNGVhZTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAK
KzIwMTItMDYtMDEgIERhdmlkIFJldmVtYW4gIDxyZXZlbWFuQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBbQ2hyb21pdW1dIENvbXBvc2l0b3IgZG9lc24ndCBzdXBwb3J0IHRyYW5zbHVjZW50IHJv
b3QgbGF5ZXJzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODc4MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGQgb3BhcXVlUm9vdExheWVyIHNldHRpbmcsIHdoaWNoIGlzIHVzZWQgdG8gZGV0ZXJtaW5l
IGhvdyB0byBjbGVhcgorICAgICAgICByZW5kZXIgc3VyZmFjZXMgaW4gTGF5ZXJSZW5kZXJlckNo
cm9taXVtLiBVc2UgQ29sb3I6OnRyYW5zcGFyZW50IGFzCisgICAgICAgIGJhY2tncm91bmQgY29s
b3Igb2YgZnJhbWVzIHdpdGggdHJhbnNwYXJlbnQgV2ViVmlldy4KKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFyUmVuZGVyU3VyZmFjZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmg6
CisgICAgICAgIChXZWJDb3JlOjpDQ1NldHRpbmdzOjpDQ1NldHRpbmdzKToKKyAgICAgICAgKEND
U2V0dGluZ3MpOgorCiAyMDEyLTA2LTAxICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpA
aWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBBZGQgYSBuZXcgYW5kIHJldXNhYmxlIEdlb2Ns
dWUtYmFzZWQgZ2VvbG9jYXRpb24gcHJvdmlkZXIgaW4gV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwppbmRleCA5MzYxYTQ4NWI4ZmI1MWQwYmU3MGI4YWQ3ZmU4NWQ2ZTUzNTRlNDYwLi5i
NDI3NjEwY2M4YzU4NDE2MTUzZjNmZTc0ODczYjAwMTk0YWIxMjRlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDEyLTA2LTAxICBEYXZpZCBSZXZlbWFuICA8
cmV2ZW1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBDb21wb3NpdG9yIGRv
ZXNuJ3Qgc3VwcG9ydCB0cmFuc2x1Y2VudCByb290IGxheWVycy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3ODIxCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViU2V0dGluZ3MuaDoKKyAg
ICAgICAgKiBzcmMvTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LmNwcDoKKyAgICAgICAgKFdlYktp
dDo6Tm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0OjpzZXRPcGFxdWUpOgorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKiBzcmMvTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0Lmg6CisgICAgICAgIChO
b25Db21wb3NpdGVkQ29udGVudEhvc3QpOgorICAgICAgICAqIHNyYy9XZWJGcmFtZUltcGwuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmNyZWF0ZUZyYW1lVmlldyk6CisgICAg
ICAgICogc3JjL1dlYkxheWVyVHJlZVZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXll
clRyZWVWaWV3OjpTZXR0aW5nczo6b3BlcmF0b3IgQ0NTZXR0aW5ncyk6CisgICAgICAgICogc3Jj
L1dlYlNldHRpbmdzSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlNldHRpbmdzSW1wbDo6
V2ViU2V0dGluZ3NJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2V0dGluZ3NJbXBsOjpzZXRP
cGFxdWVSb290TGF5ZXIpOgorICAgICAgICAqIHNyYy9XZWJTZXR0aW5nc0ltcGwuaDoKKyAgICAg
ICAgKFdlYlNldHRpbmdzSW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNldHRpbmdzSW1wbDo6
b3BhcXVlUm9vdExheWVyKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZl
KToKKwogMjAxMi0wNi0wMSAgUGV0ZXIgQmV2ZXJsb28gIDxwZXRlckBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgVW5yZXZpZXdlZC4gIFJvbGxlZCBERVBTLgpkaWZmIC0tZ2l0IGEvU291cmNlL1Bs
YXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJMYXllclRyZWVWaWV3LmggYi9Tb3VyY2UvUGxhdGZv
cm0vY2hyb21pdW0vcHVibGljL1dlYkxheWVyVHJlZVZpZXcuaAppbmRleCAyYjBmMzBhZGViNWVh
MWFjMThiOWFiMGQyYTI1MjNlN2M1ZmZkYTE3Li4wMjQ0Y2E3MjhkODA0ODRjMjQ1M2I0NDk4NGIz
NjljZjYwZWQ2NzAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGlj
L1dlYkxheWVyVHJlZVZpZXcuaAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGlj
L1dlYkxheWVyVHJlZVZpZXcuaApAQCAtNjAsNiArNjAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAsIGRlZmF1bHRUaWxlU2l6ZShXZWJTaXplKDI1NiwgMjU2KSkKICAgICAgICAgICAgICwgbWF4
VW50aWxlZExheWVyU2l6ZShXZWJTaXplKDUxMiwgNTEyKSkKICAgICAgICAgICAgICwgZGV2aWNl
U2NhbGVGYWN0b3IoMSkKKyAgICAgICAgICAgICwgb3BhcXVlUm9vdExheWVyKHRydWUpCiAgICAg
ICAgIHsKICAgICAgICAgfQogCkBAIC03NCw2ICs3NSw3IEBAIHB1YmxpYzoKICAgICAgICAgV2Vi
U2l6ZSBkZWZhdWx0VGlsZVNpemU7CiAgICAgICAgIFdlYlNpemUgbWF4VW50aWxlZExheWVyU2l6
ZTsKICAgICAgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3I7CisgICAgICAgIGJvb2wgb3BhcXVl
Um9vdExheWVyOwogI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgogICAgICAgICBvcGVyYXRvciBX
ZWJDb3JlOjpDQ1NldHRpbmdzKCkgY29uc3Q7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uY3BwCmluZGV4IGFjYWNjMzUzYmEzZmU3MzMyOGExMjNmYmY4MmVjZWEwYzkx
OWY5OTAuLmI1NWM1ZmVjODMwNjIzMzBkMGRiMmE1NjFhZTc1ZmFhM2QxOTU2ZDYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtMzkzLDcgKzM5Myw3IEBAIHZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhclJlbmRlclN1cmZhY2UoQ0NSZW5kZXJTdXJmYWNl
KiByZW5kZXJTdXJmYWNlLCBDCiAgICAgLy8gY2xlYXIgdGhlIGRhbWFnZWQgcmVnaW9uLCBzbyB0
aGF0IHdlIGRvbid0IGFjY2lkZW50YWxseSBjbGVhciB1bi1jaGFuZ2VkIHBvcnRpb25zCiAgICAg
Ly8gb2YgdGhlIHNjcmVlbi4KIAotICAgIGlmIChyZW5kZXJTdXJmYWNlICE9IHJvb3RSZW5kZXJT
dXJmYWNlKQorICAgIGlmIChyZW5kZXJTdXJmYWNlICE9IHJvb3RSZW5kZXJTdXJmYWNlIHx8ICFz
ZXR0aW5ncygpLm9wYXF1ZVJvb3RMYXllcikKICAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250
ZXh0LT5jbGVhckNvbG9yKDAsIDAsIDAsIDApKTsKICAgICBlbHNlCiAgICAgICAgIEdMQyhtX2Nv
bnRleHQsIG1fY29udGV4dC0+Y2xlYXJDb2xvcigwLCAwLCAxLCAxKSk7CkBAIC00MDQsNyArNDA0
LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFyUmVuZGVyU3VyZmFjZShDQ1Jl
bmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UsIEMKICAgICAgICAgR0xDKG1fY29udGV4dCwgbV9j
b250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKIAogI2lm
IGRlZmluZWQoTkRFQlVHKQotICAgIGlmIChyZW5kZXJTdXJmYWNlICE9IHJvb3RSZW5kZXJTdXJm
YWNlKQorICAgIGlmIChyZW5kZXJTdXJmYWNlICE9IHJvb3RSZW5kZXJTdXJmYWNlIHx8ICFzZXR0
aW5ncygpLm9wYXF1ZVJvb3RMYXllcikKICNlbmRpZgogICAgICAgICBtX2NvbnRleHQtPmNsZWFy
KEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3QuaAppbmRleCBkYzhmYjFjOTM1NGMxYTBhYTQyYTZmYmZiY2NjY2NkNGEzYTJkYWNh
Li4wZGM2MjI3ZGExNzlkZjA4ZGZkODUzM2I0MDMyNmQxNWUxZDRjZDIwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3QuaApAQCAtODksNiArODksNyBAQCBzdHJ1Y3QgQ0NTZXR0aW5ncyB7CiAg
ICAgICAgICAgICAsIGRlZmF1bHRUaWxlU2l6ZShJbnRTaXplKDI1NiwgMjU2KSkKICAgICAgICAg
ICAgICwgbWF4VW50aWxlZExheWVyU2l6ZShJbnRTaXplKDUxMiwgNTEyKSkKICAgICAgICAgICAg
ICwgZGV2aWNlU2NhbGVGYWN0b3IoMSkKKyAgICAgICAgICAgICwgb3BhcXVlUm9vdExheWVyKHRy
dWUpCiAgICAgeyB9CiAKICAgICBib29sIGFjY2VsZXJhdGVQYWludGluZzsKQEAgLTEwNSw2ICsx
MDYsNyBAQCBzdHJ1Y3QgQ0NTZXR0aW5ncyB7CiAgICAgSW50U2l6ZSBkZWZhdWx0VGlsZVNpemU7
CiAgICAgSW50U2l6ZSBtYXhVbnRpbGVkTGF5ZXJTaXplOwogICAgIGZsb2F0IGRldmljZVNjYWxl
RmFjdG9yOworICAgIGJvb2wgb3BhcXVlUm9vdExheWVyOwogfTsKIAogLy8gUHJvdmlkZXMgaW5m
b3JtYXRpb24gb24gYW4gSW1wbCdzIHJlbmRlcmluZyBjYXBhYmlsaXRpZXMgYmFjayB0byB0aGUg
Q0NMYXllclRyZWVIb3N0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJTZXR0aW5ncy5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGlu
Z3MuaAppbmRleCBjY2YzMzAzYzc1NzM3OWY4ZTk4ZmZiNzc4N2JiZDQ4M2QzMGEwZmMyLi41MDEw
MzZmZTQ5MTQ5ZDY2MDhmYTc2OWE2NGU3ZDdkZTQxMWY3MTYyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYlNldHRpbmdzLmgKQEAgLTE1NSw2ICsxNTUsNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIHNldE1heFVudGlsZWRMYXllclNpemUoV2ViU2l6ZSkgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXRGaXhlZFBvc2l0aW9uQ3JlYXRlc1N0YWNraW5nQ29udGV4dChi
b29sKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldFN5bmNYSFJJbkRvY3VtZW50c0VuYWJsZWQo
Ym9vbCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFxdWVSb290TGF5ZXIoYm9vbCkgPSAw
OwogCiBwcm90ZWN0ZWQ6CiAgICAgfldlYlNldHRpbmdzKCkgeyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Ob25Db21wb3NpdGVkQ29udGVudEhvc3QuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LmNwcAppbmRl
eCA0Y2MxYzExNzdkYzhhZDUzZDFmMmQ5ZDA0MzhmNmUzMzk2ZjQwMDhjLi45YWE2ZjE2N2ZiNzg5
YTUwNjEyMmU0MTJiYjBlY2JmNDFmYzg1Y2Y2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9Ob25Db21wb3NpdGVkQ29udGVudEhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL05vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5jcHAKQEAgLTYyLDYgKzYy
LDExIEBAIHZvaWQgTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0OjpzZXRCYWNrZ3JvdW5kQ29sb3Io
Y29uc3QgV2ViQ29yZTo6Q29sb3ImIGNvbG9yKQogICAgIG1fZ3JhcGhpY3NMYXllci0+cGxhdGZv
cm1MYXllcigpLT5zZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3IpOwogfQogCit2b2lkIE5vbkNvbXBv
c2l0ZWRDb250ZW50SG9zdDo6c2V0T3BhcXVlKGJvb2wgb3BhcXVlKQoreworICAgIG1fZ3JhcGhp
Y3NMYXllci0+cGxhdGZvcm1MYXllcigpLT5zZXRPcGFxdWUob3BhcXVlKTsKK30KKwogdm9pZCBO
b25Db21wb3NpdGVkQ29udGVudEhvc3Q6OnNldFNjcm9sbExheWVyKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIqIGxheWVyKQogewogICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Ob25Db21wb3NpdGVkQ29u
dGVudEhvc3QuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL05vbkNvbXBvc2l0ZWRDb250
ZW50SG9zdC5oCmluZGV4IDMyMGU3YzFiZTQ5NDY5MGI4YWNhMzlmZDIyMjU5ODc5NTNkMjQ1NjMu
LmM4N2JkOGMwOTg5YmE0OGQwODI2MjAyMmUyY2MxMDk4YzAyZmViYTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL05vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL05vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5oCkBA
IC01Niw2ICs1Niw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgaW52YWxpZGF0ZVJlY3QoY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYpOwogICAgIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdl
YkNvcmU6OkNvbG9yJik7CisgICAgdm9pZCBzZXRPcGFxdWUoYm9vbCk7CiAgICAgdm9pZCBzZXRT
Y3JvbGxMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7CiAgICAgdm9pZCBzZXRWaWV3cG9y
dChjb25zdCBXZWJDb3JlOjpJbnRTaXplJiB2aWV3cG9ydFNpemUsIGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIGNvbnRlbnRzU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHNjcm9sbFBvc2l0
aW9uLCBmbG9hdCBkZXZpY2VTY2FsZSwgaW50IGxheWVyQWRqdXN0WCk7CiAgICAgV2ViQ29yZTo6
R3JhcGhpY3NMYXllciogdG9wTGV2ZWxSb290TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2dyYXBo
aWNzTGF5ZXIuZ2V0KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkZyYW1lSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUlt
cGwuY3BwCmluZGV4IGZhZGI4YzAyMDE3MTI3YTE1ZjNmODVkYzQyZTYzOGRiYWI1NWQ3YTEuLjBj
MDc3Njk1ZmM4Nzk3ZDYwMzQ5OTE0NGNiYzVhYWMyODBiNjVhOGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcApAQCAtMjExMyw3ICsyMTEzLDcgQEAgdm9p
ZCBXZWJGcmFtZUltcGw6OmNyZWF0ZUZyYW1lVmlldygpCiAKICAgICBXZWJWaWV3SW1wbCogd2Vi
VmlldyA9IHZpZXdJbXBsKCk7CiAgICAgYm9vbCBpc01haW5GcmFtZSA9IHdlYlZpZXctPm1haW5G
cmFtZUltcGwoKS0+ZnJhbWUoKSA9PSBtX2ZyYW1lOwotICAgIG1fZnJhbWUtPmNyZWF0ZVZpZXco
d2ViVmlldy0+c2l6ZSgpLCBDb2xvcjo6d2hpdGUsIHdlYlZpZXctPmlzVHJhbnNwYXJlbnQoKSwg
IHdlYlZpZXctPmZpeGVkTGF5b3V0U2l6ZSgpLCBpc01haW5GcmFtZSA/IHdlYlZpZXctPmlzRml4
ZWRMYXlvdXRNb2RlRW5hYmxlZCgpIDogMCk7CisgICAgbV9mcmFtZS0+Y3JlYXRlVmlldyh3ZWJW
aWV3LT5zaXplKCksIHdlYlZpZXctPmlzVHJhbnNwYXJlbnQoKSA/IENvbG9yOjp0cmFuc3BhcmVu
dCA6IENvbG9yOjp3aGl0ZSwgd2ViVmlldy0+aXNUcmFuc3BhcmVudCgpLCAgd2ViVmlldy0+Zml4
ZWRMYXlvdXRTaXplKCksIGlzTWFpbkZyYW1lID8gd2ViVmlldy0+aXNGaXhlZExheW91dE1vZGVF
bmFibGVkKCkgOiAwKTsKICAgICBpZiAod2ViVmlldy0+c2hvdWxkQXV0b1Jlc2l6ZSgpICYmIGlz
TWFpbkZyYW1lKQogICAgICAgICBtX2ZyYW1lLT52aWV3KCktPmVuYWJsZUF1dG9TaXplTW9kZSh0
cnVlLCB3ZWJWaWV3LT5taW5BdXRvU2l6ZSgpLCB3ZWJWaWV3LT5tYXhBdXRvU2l6ZSgpKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmlldy5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3LmNwcAppbmRl
eCA2NWEyYTYzYjE4YTJjOGNjZmRjNWZlYzFlMTBmMTljNjMzYWNhNTU4Li5jNGIyMzVhMGM3YmU0
MWRmMmFjYzJkMjY3YTFhOWI3M2YyNWVkMjYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJMYXllclRyZWVWaWV3LmNwcApAQCAtNTEsNiArNTEsNyBAQCBXZWJMYXllclRy
ZWVWaWV3OjpTZXR0aW5nczo6b3BlcmF0b3IgQ0NTZXR0aW5ncygpIGNvbnN0CiAgICAgc2V0dGlu
Z3MuZGVmYXVsdFRpbGVTaXplID0gZGVmYXVsdFRpbGVTaXplOwogICAgIHNldHRpbmdzLm1heFVu
dGlsZWRMYXllclNpemUgPSBtYXhVbnRpbGVkTGF5ZXJTaXplOwogICAgIHNldHRpbmdzLmRldmlj
ZVNjYWxlRmFjdG9yID0gZGV2aWNlU2NhbGVGYWN0b3I7CisgICAgc2V0dGluZ3Mub3BhcXVlUm9v
dExheWVyID0gb3BhcXVlUm9vdExheWVyOwogCiAgICAgLy8gRklYTUU6IHNob3dGUFNDb3VudGVy
IC8gc2hvd1BsYXRmb3JtTGF5ZXJUcmVlIC8gbWF4UGFydGlhbFRleHR1cmVVcGRhdGVzIGFyZW4n
dCBzdXBwb3J0ZWQgY3VycmVudGx5LgogICAgIHJldHVybiBzZXR0aW5nczsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwCmluZGV4IGM1MWZmZmJmNzlh
ZTcxNmJjN2M2NjY3NzYxYjMxOTYzZmE3OTRjNDAuLmI0NmEzOWExYWU5Mzg0MzEyNmY3NjQxOWNj
ZDFiM2U3YTU0MTExYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlNldHRpbmdzSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0
dGluZ3NJbXBsLmNwcApAQCAtNTQsNiArNTQsNyBAQCBXZWJTZXR0aW5nc0ltcGw6OldlYlNldHRp
bmdzSW1wbChTZXR0aW5ncyogc2V0dGluZ3MpCiAgICAgLCBtX2FwcGx5RGVmYXVsdERldmljZVNj
YWxlRmFjdG9ySW5Db21wb3NpdG9yKGZhbHNlKQogICAgICwgbV9kZWZhdWx0VGlsZVNpemUoV2Vi
U2l6ZSgyNTYsIDI1NikpCiAgICAgLCBtX21heFVudGlsZWRMYXllclNpemUoV2ViU2l6ZSg1MTIs
IDUxMikpCisgICAgLCBtX29wYXF1ZVJvb3RMYXllcih0cnVlKQogewogICAgIEFTU0VSVChzZXR0
aW5ncyk7CiB9CkBAIC02MzEsNSArNjMyLDkgQEAgdm9pZCBXZWJTZXR0aW5nc0ltcGw6OnNldFN5
bmNYSFJJbkRvY3VtZW50c0VuYWJsZWQoYm9vbCBlbmFibGVkKQogICAgIG1fc2V0dGluZ3MtPnNl
dFN5bmNYSFJJbkRvY3VtZW50c0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKK3ZvaWQgV2ViU2V0dGlu
Z3NJbXBsOjpzZXRPcGFxdWVSb290TGF5ZXIoYm9vbCBvcGFxdWUpCit7CisgICAgbV9vcGFxdWVS
b290TGF5ZXIgPSBvcGFxdWU7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmggYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaAppbmRleCBjMjg5MDg0NDFmMmY1
M2YyYmFhNDNhY2U3ZDFkYmNmNzQ5ODE5ODAwLi5iZjMwMTQxZTY1ZjQ5MTllOWZmMTkyZjYwZjY0
NzkyZjE1YzA4NWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJT
ZXR0aW5nc0ltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5n
c0ltcGwuaApAQCAtMTUxLDYgKzE1MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0
TWVkaWFQbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1cmUoYm9vbCk7CiAgICAgdmlydHVhbCBib29s
IHZpZXdwb3J0RW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlld3BvcnRFbmFibGVkOyB9CiAg
ICAgdmlydHVhbCB2b2lkIHNldFN5bmNYSFJJbkRvY3VtZW50c0VuYWJsZWQoYm9vbCk7CisgICAg
dmlydHVhbCB2b2lkIHNldE9wYXF1ZVJvb3RMYXllcihib29sKTsKIAogICAgIGJvb2wgc2hvd0ZQ
U0NvdW50ZXIoKSBjb25zdCB7IHJldHVybiBtX3Nob3dGUFNDb3VudGVyOyB9CiAgICAgYm9vbCBz
aG93UGxhdGZvcm1MYXllclRyZWUoKSBjb25zdCB7IHJldHVybiBtX3Nob3dQbGF0Zm9ybUxheWVy
VHJlZTsgfQpAQCAtMTU4LDYgKzE1OSw3IEBAIHB1YmxpYzoKICAgICBib29sIGFwcGx5RGVmYXVs
dERldmljZVNjYWxlRmFjdG9ySW5Db21wb3NpdG9yKCkgY29uc3QgeyByZXR1cm4gbV9hcHBseURl
ZmF1bHREZXZpY2VTY2FsZUZhY3RvckluQ29tcG9zaXRvcjsgfQogICAgIFdlYlNpemUgZGVmYXVs
dFRpbGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9kZWZhdWx0VGlsZVNpemU7IH0KICAgICBXZWJT
aXplIG1heFVudGlsZWRMYXllclNpemUoKSBjb25zdCB7IHJldHVybiBtX21heFVudGlsZWRMYXll
clNpemU7IH0KKyAgICBib29sIG9wYXF1ZVJvb3RMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fb3Bh
cXVlUm9vdExheWVyOyB9CiAKIHByaXZhdGU6CiAgICAgV2ViQ29yZTo6U2V0dGluZ3MqIG1fc2V0
dGluZ3M7CkBAIC0xNjgsNiArMTcwLDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fYXBwbHlEZWZh
dWx0RGV2aWNlU2NhbGVGYWN0b3JJbkNvbXBvc2l0b3I7CiAgICAgV2ViU2l6ZSBtX2RlZmF1bHRU
aWxlU2l6ZTsKICAgICBXZWJTaXplIG1fbWF4VW50aWxlZExheWVyU2l6ZTsKKyAgICBib29sIG1f
b3BhcXVlUm9vdExheWVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggZGFjZmExNTJlNTY3YmRjMDFi
NTAzMDEwYjZhZDZjMzczOWQxODk4OC4uNGMwYmMyYTkyMTliMWNjZWY2NzFiMjdkZWE5YWUxNDc5
MGJlMzE2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0lt
cGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApA
QCAtMzQ1NCw5ICszNDU0LDExIEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0FjdGl2ZShib29sIGFjdGl2ZSkKIAogICAgICAgICBsYXllclRyZWVWaWV3U2V0
dGluZ3MuZGVmYXVsdFRpbGVTaXplID0gc2V0dGluZ3NJbXBsKCktPmRlZmF1bHRUaWxlU2l6ZSgp
OwogICAgICAgICBsYXllclRyZWVWaWV3U2V0dGluZ3MubWF4VW50aWxlZExheWVyU2l6ZSA9IHNl
dHRpbmdzSW1wbCgpLT5tYXhVbnRpbGVkTGF5ZXJTaXplKCk7CisgICAgICAgIGxheWVyVHJlZVZp
ZXdTZXR0aW5ncy5vcGFxdWVSb290TGF5ZXIgPSBzZXR0aW5nc0ltcGwoKS0+b3BhcXVlUm9vdExh
eWVyKCk7CiAKICAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3QgPSBOb25Db21wb3Np
dGVkQ29udGVudEhvc3Q6OmNyZWF0ZShXZWJWaWV3SW1wbENvbnRlbnRQYWludGVyOjpjcmVhdGUo
dGhpcykpOwogICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC0+c2V0U2hvd0RlYnVn
Qm9yZGVycyhwYWdlKCktPnNldHRpbmdzKCktPnNob3dEZWJ1Z0JvcmRlcnMoKSk7CisgICAgICAg
IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LT5zZXRPcGFxdWUobGF5ZXJUcmVlVmlld1NldHRp
bmdzLm9wYXF1ZVJvb3RMYXllcik7CiAKICAgICAgICAgaWYgKG1fd2ViU2V0dGluZ3MtPmFwcGx5
RGVmYXVsdERldmljZVNjYWxlRmFjdG9ySW5Db21wb3NpdG9yKCkgJiYgcGFnZSgpLT5zZXR0aW5n
cygpLT5kZWZhdWx0RGV2aWNlU2NhbGVGYWN0b3IoKSAhPSAxKSB7CiAgICAgICAgICAgICBBU1NF
UlQocGFnZSgpLT5zZXR0aW5ncygpLT5kZWZhdWx0RGV2aWNlU2NhbGVGYWN0b3IoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145368</attachid>
            <date>2012-06-01 13:30:22 -0700</date>
            <delta_ts>2012-06-06 16:48:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87821-20120601163020.patch</filename>
            <type>text/plain</type>
            <size>16214</size>
            <attacher name="David Reveman">reveman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5MjUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCBiODcxMGFiZmM0YTRl
NmVjMmU5ODkxZjBiZWM5OGU5NzJlYzRkMzU3Li4yYzEyMGFkMzFlYWRiZGQ0ZmM2YjMyY2Y0ODFl
OTM4NTdiMGI0ODRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wNi0wMSAg
RGF2aWQgUmV2ZW1hbiAgPHJldmVtYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1
bV0gQ29tcG9zaXRvciBkb2Vzbid0IHN1cHBvcnQgdHJhbnNsdWNlbnQgcm9vdCBsYXllcnMuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzgyMQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogY2hyb21pdW0v
cHVibGljL1dlYkxheWVyVHJlZVZpZXcuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVl
Vmlldzo6U2V0dGluZ3M6OlNldHRpbmdzKToKKyAgICAgICAgKFNldHRpbmdzKToKKwogMjAxMi0w
NS0zMSAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9taXVtLm9yZz4KIAogICAgICAgICBb
Y2hyb21pdW1dIE1pZ3JhdGUgdG8gV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCA0OTVmZTJhZjdiZjExYjVlMjFkNjBhNzZmYWYyNjAzM2NlYjY3NzA4Li4zOTg2MmZhYTU2MDZi
NDljNzRlYmUxYjIzNzBmZGZiMjNiZTBmNmNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAK
KzIwMTItMDYtMDEgIERhdmlkIFJldmVtYW4gIDxyZXZlbWFuQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBbQ2hyb21pdW1dIENvbXBvc2l0b3IgZG9lc24ndCBzdXBwb3J0IHRyYW5zbHVjZW50IHJv
b3QgbGF5ZXJzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODc4MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGQgb3BhcXVlUm9vdExheWVyIHNldHRpbmcsIHdoaWNoIGlzIHVzZWQgdG8gZGV0ZXJtaW5l
IGhvdyB0byBjbGVhcgorICAgICAgICByZW5kZXIgc3VyZmFjZXMgaW4gTGF5ZXJSZW5kZXJlckNo
cm9taXVtLiBVc2UgQ29sb3I6OnRyYW5zcGFyZW50IGFzCisgICAgICAgIGJhY2tncm91bmQgY29s
b3Igb2YgZnJhbWVzIHdpdGggdHJhbnNwYXJlbnQgV2ViVmlldyBhbmQgbWFrZSBzdXJlCisgICAg
ICAgIHdlIGRvbid0IHVzZSBzdWJwaXhlbCB0ZXh0IHJlbmRlcmluZyB3aXRoIG5vbi1vcGFxdWUg
cm9vdCBsYXllcnMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRt
YXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1h
cENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYXJSZW5kZXJTdXJmYWNl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNM
YXllclRleHR1cmVVcGRhdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNrUGljdHVyZUNhbnZh
c0xheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmg6CisgICAgICAgIChXZWJD
b3JlOjpDQ1NldHRpbmdzOjpDQ1NldHRpbmdzKToKKyAgICAgICAgKENDU2V0dGluZ3MpOgorCiAy
MDEyLTA2LTAxICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBbR1RLXSBBZGQgYSBuZXcgYW5kIHJldXNhYmxlIEdlb2NsdWUtYmFzZWQgZ2VvbG9j
YXRpb24gcHJvdmlkZXIgaW4gV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA5
MzYxYTQ4NWI4ZmI1MWQwYmU3MGI4YWQ3ZmU4NWQ2ZTUzNTRlNDYwLi5iNDI3NjEwY2M4YzU4NDE2
MTUzZjNmZTc0ODczYjAwMTk0YWIxMjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDI5IEBACisyMDEyLTA2LTAxICBEYXZpZCBSZXZlbWFuICA8cmV2ZW1hbkBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBDb21wb3NpdG9yIGRvZXNuJ3Qgc3VwcG9ydCB0
cmFuc2x1Y2VudCByb290IGxheWVycy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTg3ODIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViU2V0dGluZ3MuaDoKKyAgICAgICAgKiBzcmMvTm9u
Q29tcG9zaXRlZENvbnRlbnRIb3N0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Tm9uQ29tcG9zaXRl
ZENvbnRlbnRIb3N0OjpzZXRPcGFxdWUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKiBz
cmMvTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0Lmg6CisgICAgICAgIChOb25Db21wb3NpdGVkQ29u
dGVudEhvc3QpOgorICAgICAgICAqIHNyYy9XZWJGcmFtZUltcGwuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJGcmFtZUltcGw6OmNyZWF0ZUZyYW1lVmlldyk6CisgICAgICAgICogc3JjL1dlYkxh
eWVyVHJlZVZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3OjpTZXR0
aW5nczo6b3BlcmF0b3IgQ0NTZXR0aW5ncyk6CisgICAgICAgICogc3JjL1dlYlNldHRpbmdzSW1w
bC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlNldHRpbmdzSW1wbDo6V2ViU2V0dGluZ3NJbXBs
KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2V0dGluZ3NJbXBsOjpzZXRPcGFxdWVSb290TGF5ZXIp
OgorICAgICAgICAqIHNyYy9XZWJTZXR0aW5nc0ltcGwuaDoKKyAgICAgICAgKFdlYlNldHRpbmdz
SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNldHRpbmdzSW1wbDo6b3BhcXVlUm9vdExheWVy
KToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKToKKwogMjAxMi0wNi0w
MSAgUGV0ZXIgQmV2ZXJsb28gIDxwZXRlckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZp
ZXdlZC4gIFJvbGxlZCBERVBTLgpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVt
L3B1YmxpYy9XZWJMYXllclRyZWVWaWV3LmggYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVi
bGljL1dlYkxheWVyVHJlZVZpZXcuaAppbmRleCAyYjBmMzBhZGViNWVhMWFjMThiOWFiMGQyYTI1
MjNlN2M1ZmZkYTE3Li4wMjQ0Y2E3MjhkODA0ODRjMjQ1M2I0NDk4NGIzNjljZjYwZWQ2NzAwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkxheWVyVHJlZVZp
ZXcuaAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkxheWVyVHJlZVZp
ZXcuaApAQCAtNjAsNiArNjAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAsIGRlZmF1bHRUaWxl
U2l6ZShXZWJTaXplKDI1NiwgMjU2KSkKICAgICAgICAgICAgICwgbWF4VW50aWxlZExheWVyU2l6
ZShXZWJTaXplKDUxMiwgNTEyKSkKICAgICAgICAgICAgICwgZGV2aWNlU2NhbGVGYWN0b3IoMSkK
KyAgICAgICAgICAgICwgb3BhcXVlUm9vdExheWVyKHRydWUpCiAgICAgICAgIHsKICAgICAgICAg
fQogCkBAIC03NCw2ICs3NSw3IEBAIHB1YmxpYzoKICAgICAgICAgV2ViU2l6ZSBkZWZhdWx0VGls
ZVNpemU7CiAgICAgICAgIFdlYlNpemUgbWF4VW50aWxlZExheWVyU2l6ZTsKICAgICAgICAgZmxv
YXQgZGV2aWNlU2NhbGVGYWN0b3I7CisgICAgICAgIGJvb2wgb3BhcXVlUm9vdExheWVyOwogI2lm
IFdFQktJVF9JTVBMRU1FTlRBVElPTgogICAgICAgICBvcGVyYXRvciBXZWJDb3JlOjpDQ1NldHRp
bmdzKCkgY29uc3Q7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlci5jcHAKaW5kZXggZjU1YzA2MjE2YWRlMTJkMDgxYTQ1OTgyMThjOTEy
YjM1YzVkMmY2YS4uNzk5Mzg0Y2RiMGRlMTk4YzQ1OTk1MjZkNjUxNWFkMDkwZmYxMWMxZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFw
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAK
QEAgLTg4LDggKzg4LDkgQEAgdm9pZCBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpw
cmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QKICAgICAvLyBBc3N1bXB0
aW9uOiBpZiBhIHRpbGVyIGlzIHVzaW5nIGJvcmRlciB0ZXhlbHMsIHRoZW4gaXQgaXMgYmVjYXVz
ZSB0aGUKICAgICAvLyBsYXllciBpcyBsaWtlbHkgdG8gYmUgZmlsdGVyZWQgb3IgdHJhbnNmb3Jt
ZWQuIEJlY2F1c2Ugb2YgaXQgbWlnaHQgYmUKICAgICAvLyB0cmFuc2Zvcm1lZCwgZHJhdyB0aGUg
dGV4dCBpbiBncmF5c2NhbGUgaW5zdGVhZCBvZiBzdWJwaXhlbCBhbnRpYWxpYXNpbmcuCisgICAg
Ym9vbCB1c2VHcmF5c2NhbGVUZXh0ID0gYm9yZGVyVGV4ZWxzIHx8ICFsYXllcklzT3BhcXVlOwog
ICAgIFBsYXRmb3JtQ2FudmFzOjpQYWludGVyOjpUZXh0T3B0aW9uIHRleHRPcHRpb24gPQotICAg
ICAgICBib3JkZXJUZXhlbHMgPyBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlcjo6R3JheXNjYWxlVGV4
dCA6IFBsYXRmb3JtQ2FudmFzOjpQYWludGVyOjpTdWJwaXhlbFRleHQ7CisgICAgICAgIHVzZUdy
YXlzY2FsZVRleHQgPyBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlcjo6R3JheXNjYWxlVGV4dCA6IFBs
YXRmb3JtQ2FudmFzOjpQYWludGVyOjpTdWJwaXhlbFRleHQ7CiAgICAgUGxhdGZvcm1DYW52YXM6
OlBhaW50ZXIgY2FudmFzUGFpbnRlcigmbV9jYW52YXMsIHRleHRPcHRpb24pOwogICAgIGNhbnZh
c1BhaW50ZXIuc2tpYUNvbnRleHQoKS0+c2V0VHJhY2tPcGFxdWVSZWdpb24oIWxheWVySXNPcGFx
dWUpOwogICAgIHBhaW50Q29udGVudHMoKmNhbnZhc1BhaW50ZXIuY29udGV4dCgpLCAqY2FudmFz
UGFpbnRlci5za2lhQ29udGV4dCgpLCBjb250ZW50UmVjdCwgY29udGVudHNTY2FsZSwgcmVzdWx0
aW5nT3BhcXVlUmVjdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRl
eCBhY2FjYzM1M2JhM2ZlNzMzMjhhMTIzZmJmODJlY2VhMGM5MTlmOTkwLi5iNTVjNWZlYzgzMDYy
MzMwZDBkYjJhNTYxYWU3NWZhYTNkMTk1NmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5jcHAKQEAgLTM5Myw3ICszOTMsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6Y2xlYXJSZW5kZXJTdXJmYWNlKENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSwgQwog
ICAgIC8vIGNsZWFyIHRoZSBkYW1hZ2VkIHJlZ2lvbiwgc28gdGhhdCB3ZSBkb24ndCBhY2NpZGVu
dGFsbHkgY2xlYXIgdW4tY2hhbmdlZCBwb3J0aW9ucwogICAgIC8vIG9mIHRoZSBzY3JlZW4uCiAK
LSAgICBpZiAocmVuZGVyU3VyZmFjZSAhPSByb290UmVuZGVyU3VyZmFjZSkKKyAgICBpZiAocmVu
ZGVyU3VyZmFjZSAhPSByb290UmVuZGVyU3VyZmFjZSB8fCAhc2V0dGluZ3MoKS5vcGFxdWVSb290
TGF5ZXIpCiAgICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+Y2xlYXJDb2xvcigwLCAw
LCAwLCAwKSk7CiAgICAgZWxzZQogICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmNs
ZWFyQ29sb3IoMCwgMCwgMSwgMSkpOwpAQCAtNDA0LDcgKzQwNCw3IEBAIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpjbGVhclJlbmRlclN1cmZhY2UoQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJT
dXJmYWNlLCBDCiAgICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGlzYWJsZShHcmFw
aGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CiAKICNpZiBkZWZpbmVkKE5ERUJVRykKLSAg
ICBpZiAocmVuZGVyU3VyZmFjZSAhPSByb290UmVuZGVyU3VyZmFjZSkKKyAgICBpZiAocmVuZGVy
U3VyZmFjZSAhPSByb290UmVuZGVyU3VyZmFjZSB8fCAhc2V0dGluZ3MoKS5vcGFxdWVSb290TGF5
ZXIpCiAjZW5kaWYKICAgICAgICAgbV9jb250ZXh0LT5jbGVhcihHcmFwaGljc0NvbnRleHQzRDo6
Q09MT1JfQlVGRkVSX0JJVCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1NrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tQaWN0dXJlQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKaW5kZXggMzkzMjdkMDJhNTZhZjhkNzY3YTk5OTgy
MjRjZDI0MmNhZWQ0NTQyOS4uYjQ5OTAxMmU2MWI1MzdhYzk1NGNlYTEzOGY5YzE4ODIzNjMxYTU2
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJl
VXBkYXRlci5jcHAKQEAgLTU4LDcgKzU4LDggQEAgdm9pZCBTa1BpY3R1cmVDYW52YXNMYXllclRl
eHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFIKICAg
ICAvLyBsYXllciBpcyBsaWtlbHkgdG8gYmUgZmlsdGVyZWQgb3IgdHJhbnNmb3JtZWQuIEJlY2F1
c2UgaXQgbWlnaHQgYmUKICAgICAvLyB0cmFuc2Zvcm1lZCwgc2V0IGltYWdlIGJ1ZmZlciBmbGFn
IHRvIGRyYXcgdGhlIHRleHQgaW4gZ3JheXNjYWxlCiAgICAgLy8gaW5zdGVhZCBvZiB1c2luZyBz
dWJwaXhlbCBhbnRpYWxpYXNpbmcuCi0gICAgcGxhdGZvcm1Db250ZXh0LnNldERyYXdpbmdUb0lt
YWdlQnVmZmVyKGJvcmRlclRleGVscyA/IHRydWUgOiBmYWxzZSk7CisgICAgYm9vbCB1c2VHcmF5
c2NhbGVUZXh0ID0gYm9yZGVyVGV4ZWxzIHx8ICFtX2xheWVySXNPcGFxdWU7CisgICAgcGxhdGZv
cm1Db250ZXh0LnNldERyYXdpbmdUb0ltYWdlQnVmZmVyKHVzZUdyYXlzY2FsZVRleHQpOwogICAg
IEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoJnBsYXRmb3JtQ29udGV4dCk7CiAgICAg
cGFpbnRDb250ZW50cyhncmFwaGljc0NvbnRleHQsIHBsYXRmb3JtQ29udGV4dCwgY29udGVudFJl
Y3QsIGNvbnRlbnRzU2NhbGUsIHJlc3VsdGluZ09wYXF1ZVJlY3QpOwogICAgIG1fcGljdHVyZS5l
bmRSZWNvcmRpbmcoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggZGM4ZmIxYzkz
NTRjMWEwYWE0MmE2ZmJmYmNjY2NjZDRhM2EyZGFjYS4uMGRjNjIyN2RhMTc5ZGYwOGRmZDg1MzNi
NDAzMjZkMTVlMWQ0Y2QyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTg5LDYg
Kzg5LDcgQEAgc3RydWN0IENDU2V0dGluZ3MgewogICAgICAgICAgICAgLCBkZWZhdWx0VGlsZVNp
emUoSW50U2l6ZSgyNTYsIDI1NikpCiAgICAgICAgICAgICAsIG1heFVudGlsZWRMYXllclNpemUo
SW50U2l6ZSg1MTIsIDUxMikpCiAgICAgICAgICAgICAsIGRldmljZVNjYWxlRmFjdG9yKDEpCisg
ICAgICAgICAgICAsIG9wYXF1ZVJvb3RMYXllcih0cnVlKQogICAgIHsgfQogCiAgICAgYm9vbCBh
Y2NlbGVyYXRlUGFpbnRpbmc7CkBAIC0xMDUsNiArMTA2LDcgQEAgc3RydWN0IENDU2V0dGluZ3Mg
ewogICAgIEludFNpemUgZGVmYXVsdFRpbGVTaXplOwogICAgIEludFNpemUgbWF4VW50aWxlZExh
eWVyU2l6ZTsKICAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcjsKKyAgICBib29sIG9wYXF1ZVJv
b3RMYXllcjsKIH07CiAKIC8vIFByb3ZpZGVzIGluZm9ybWF0aW9uIG9uIGFuIEltcGwncyByZW5k
ZXJpbmcgY2FwYWJpbGl0aWVzIGJhY2sgdG8gdGhlIENDTGF5ZXJUcmVlSG9zdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNldHRpbmdzLmgKaW5kZXggY2NmMzMwM2M3NTczNzlm
OGU5OGZmYjc3ODdiYmQ0ODNkMzBhMGZjMi4uNTAxMDM2ZmU0OTE0OWQ2NjA4ZmE3NjlhNjRlN2Q3
ZGU0MTFmNzE2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
U2V0dGluZ3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5n
cy5oCkBAIC0xNTUsNiArMTU1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRNYXhV
bnRpbGVkTGF5ZXJTaXplKFdlYlNpemUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Rml4ZWRQ
b3NpdGlvbkNyZWF0ZXNTdGFja2luZ0NvbnRleHQoYm9vbCkgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRTeW5jWEhSSW5Eb2N1bWVudHNFbmFibGVkKGJvb2wpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0T3BhcXVlUm9vdExheWVyKGJvb2wpID0gMDsKIAogcHJvdGVjdGVkOgogICAgIH5XZWJT
ZXR0aW5ncygpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTm9u
Q29tcG9zaXRlZENvbnRlbnRIb3N0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL05v
bkNvbXBvc2l0ZWRDb250ZW50SG9zdC5jcHAKaW5kZXggNGNjMWMxMTc3ZGM4YWQ1M2QxZjJkOWQw
NDM4ZjZlMzM5NmY0MDA4Yy4uOWFhNmYxNjdmYjc4OWE1MDYxMjJlNDEyYmIwZWNiZjQxZmM4NWNm
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTm9uQ29tcG9zaXRlZENv
bnRlbnRIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Ob25Db21wb3Np
dGVkQ29udGVudEhvc3QuY3BwCkBAIC02Miw2ICs2MiwxMSBAQCB2b2lkIE5vbkNvbXBvc2l0ZWRD
b250ZW50SG9zdDo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBjb2xv
cikKICAgICBtX2dyYXBoaWNzTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKS0+c2V0QmFja2dyb3VuZENv
bG9yKGNvbG9yKTsKIH0KIAordm9pZCBOb25Db21wb3NpdGVkQ29udGVudEhvc3Q6OnNldE9wYXF1
ZShib29sIG9wYXF1ZSkKK3sKKyAgICBtX2dyYXBoaWNzTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKS0+
c2V0T3BhcXVlKG9wYXF1ZSk7Cit9CisKIHZvaWQgTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0Ojpz
ZXRTY3JvbGxMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBsYXllcikKIHsKICAgICBtX2dy
YXBoaWNzTGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LmggYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9Ob25Db21wb3NpdGVkQ29udGVudEhvc3QuaAppbmRleCAzMjBlN2MxYmU0
OTQ2OTBiOGFjYTM5ZmQyMjI1OTg3OTUzZDI0NTYzLi5jODdiZDhjMDk4OWJhNDhkMDgyNjIwMjJl
MmNjMTA5OGMwMmZlYmE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9O
b25Db21wb3NpdGVkQ29udGVudEhvc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9Ob25Db21wb3NpdGVkQ29udGVudEhvc3QuaApAQCAtNTYsNiArNTYsNyBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGludmFsaWRhdGVSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKICAgICB2
b2lkIHNldEJhY2tncm91bmRDb2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYpOworICAgIHZvaWQg
c2V0T3BhcXVlKGJvb2wpOwogICAgIHZvaWQgc2V0U2Nyb2xsTGF5ZXIoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllciopOwogICAgIHZvaWQgc2V0Vmlld3BvcnQoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYg
dmlld3BvcnRTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZW50c1NpemUsIGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgZmxvYXQgZGV2aWNlU2NhbGUsIGlu
dCBsYXllckFkanVzdFgpOwogICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIHRvcExldmVsUm9v
dExheWVyKCkgY29uc3QgeyByZXR1cm4gbV9ncmFwaGljc0xheWVyLmdldCgpOyB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAppbmRleCBmYWRiOGMwMjAxNzEy
N2ExNWYzZjg1ZGM0MmU2MzhkYmFiNTVkN2ExLi4wYzA3NzY5NWZjODc5N2Q2MDM0OTkxNDRjYmM1
YWFjMjgwYjY1YThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJG
cmFtZUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1w
bC5jcHAKQEAgLTIxMTMsNyArMjExMyw3IEBAIHZvaWQgV2ViRnJhbWVJbXBsOjpjcmVhdGVGcmFt
ZVZpZXcoKQogCiAgICAgV2ViVmlld0ltcGwqIHdlYlZpZXcgPSB2aWV3SW1wbCgpOwogICAgIGJv
b2wgaXNNYWluRnJhbWUgPSB3ZWJWaWV3LT5tYWluRnJhbWVJbXBsKCktPmZyYW1lKCkgPT0gbV9m
cmFtZTsKLSAgICBtX2ZyYW1lLT5jcmVhdGVWaWV3KHdlYlZpZXctPnNpemUoKSwgQ29sb3I6Ondo
aXRlLCB3ZWJWaWV3LT5pc1RyYW5zcGFyZW50KCksICB3ZWJWaWV3LT5maXhlZExheW91dFNpemUo
KSwgaXNNYWluRnJhbWUgPyB3ZWJWaWV3LT5pc0ZpeGVkTGF5b3V0TW9kZUVuYWJsZWQoKSA6IDAp
OworICAgIG1fZnJhbWUtPmNyZWF0ZVZpZXcod2ViVmlldy0+c2l6ZSgpLCB3ZWJWaWV3LT5pc1Ry
YW5zcGFyZW50KCkgPyBDb2xvcjo6dHJhbnNwYXJlbnQgOiBDb2xvcjo6d2hpdGUsIHdlYlZpZXct
PmlzVHJhbnNwYXJlbnQoKSwgIHdlYlZpZXctPmZpeGVkTGF5b3V0U2l6ZSgpLCBpc01haW5GcmFt
ZSA/IHdlYlZpZXctPmlzRml4ZWRMYXlvdXRNb2RlRW5hYmxlZCgpIDogMCk7CiAgICAgaWYgKHdl
YlZpZXctPnNob3VsZEF1dG9SZXNpemUoKSAmJiBpc01haW5GcmFtZSkKICAgICAgICAgbV9mcmFt
ZS0+dmlldygpLT5lbmFibGVBdXRvU2l6ZU1vZGUodHJ1ZSwgd2ViVmlldy0+bWluQXV0b1NpemUo
KSwgd2ViVmlldy0+bWF4QXV0b1NpemUoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViTGF5ZXJUcmVlVmlldy5jcHAKaW5kZXggNjVhMmE2M2IxOGEyYzhjY2ZkYzVmZWMx
ZTEwZjE5YzYzM2FjYTU1OC4uYzRiMjM1YTBjN2JlNDFkZjJhY2MyZDI2N2ExYTliNzNmMjVlZDI2
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmll
dy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmlldy5j
cHAKQEAgLTUxLDYgKzUxLDcgQEAgV2ViTGF5ZXJUcmVlVmlldzo6U2V0dGluZ3M6Om9wZXJhdG9y
IENDU2V0dGluZ3MoKSBjb25zdAogICAgIHNldHRpbmdzLmRlZmF1bHRUaWxlU2l6ZSA9IGRlZmF1
bHRUaWxlU2l6ZTsKICAgICBzZXR0aW5ncy5tYXhVbnRpbGVkTGF5ZXJTaXplID0gbWF4VW50aWxl
ZExheWVyU2l6ZTsKICAgICBzZXR0aW5ncy5kZXZpY2VTY2FsZUZhY3RvciA9IGRldmljZVNjYWxl
RmFjdG9yOworICAgIHNldHRpbmdzLm9wYXF1ZVJvb3RMYXllciA9IG9wYXF1ZVJvb3RMYXllcjsK
IAogICAgIC8vIEZJWE1FOiBzaG93RlBTQ291bnRlciAvIHNob3dQbGF0Zm9ybUxheWVyVHJlZSAv
IG1heFBhcnRpYWxUZXh0dXJlVXBkYXRlcyBhcmVuJ3Qgc3VwcG9ydGVkIGN1cnJlbnRseS4KICAg
ICByZXR1cm4gc2V0dGluZ3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJTZXR0aW5nc0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0
dGluZ3NJbXBsLmNwcAppbmRleCBjNTFmZmZiZjc5YWU3MTZiYzdjNjY2Nzc2MWIzMTk2M2ZhNzk0
YzQwLi5iNDZhMzlhMWFlOTM4NDMxMjZmNzY0MTljY2QxYjNlN2E1NDExMWM2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAKQEAgLTU0LDYgKzU0
LDcgQEAgV2ViU2V0dGluZ3NJbXBsOjpXZWJTZXR0aW5nc0ltcGwoU2V0dGluZ3MqIHNldHRpbmdz
KQogICAgICwgbV9hcHBseURlZmF1bHREZXZpY2VTY2FsZUZhY3RvckluQ29tcG9zaXRvcihmYWxz
ZSkKICAgICAsIG1fZGVmYXVsdFRpbGVTaXplKFdlYlNpemUoMjU2LCAyNTYpKQogICAgICwgbV9t
YXhVbnRpbGVkTGF5ZXJTaXplKFdlYlNpemUoNTEyLCA1MTIpKQorICAgICwgbV9vcGFxdWVSb290
TGF5ZXIodHJ1ZSkKIHsKICAgICBBU1NFUlQoc2V0dGluZ3MpOwogfQpAQCAtNjMxLDUgKzYzMiw5
IEBAIHZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXRTeW5jWEhSSW5Eb2N1bWVudHNFbmFibGVkKGJv
b2wgZW5hYmxlZCkKICAgICBtX3NldHRpbmdzLT5zZXRTeW5jWEhSSW5Eb2N1bWVudHNFbmFibGVk
KGVuYWJsZWQpOwogfQogCit2b2lkIFdlYlNldHRpbmdzSW1wbDo6c2V0T3BhcXVlUm9vdExheWVy
KGJvb2wgb3BhcXVlKQoreworICAgIG1fb3BhcXVlUm9vdExheWVyID0gb3BhcXVlOworfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlNldHRpbmdzSW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0
dGluZ3NJbXBsLmgKaW5kZXggYzI4OTA4NDQxZjJmNTNmMmJhYTQzYWNlN2QxZGJjZjc0OTgxOTgw
MC4uYmYzMDE0MWU2NWY0OTE5ZTlmZjE5MmY2MGY2NDc5MmYxNWMwODVmOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmgKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmgKQEAgLTE1MSw2ICsxNTEsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldE1lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJH
ZXN0dXJlKGJvb2wpOwogICAgIHZpcnR1YWwgYm9vbCB2aWV3cG9ydEVuYWJsZWQoKSBjb25zdCB7
IHJldHVybiBtX3ZpZXdwb3J0RW5hYmxlZDsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRTeW5jWEhS
SW5Eb2N1bWVudHNFbmFibGVkKGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFxdWVSb290
TGF5ZXIoYm9vbCk7CiAKICAgICBib29sIHNob3dGUFNDb3VudGVyKCkgY29uc3QgeyByZXR1cm4g
bV9zaG93RlBTQ291bnRlcjsgfQogICAgIGJvb2wgc2hvd1BsYXRmb3JtTGF5ZXJUcmVlKCkgY29u
c3QgeyByZXR1cm4gbV9zaG93UGxhdGZvcm1MYXllclRyZWU7IH0KQEAgLTE1OCw2ICsxNTksNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBhcHBseURlZmF1bHREZXZpY2VTY2FsZUZhY3RvckluQ29tcG9z
aXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbHlEZWZhdWx0RGV2aWNlU2NhbGVGYWN0b3JJbkNv
bXBvc2l0b3I7IH0KICAgICBXZWJTaXplIGRlZmF1bHRUaWxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZGVmYXVsdFRpbGVTaXplOyB9CiAgICAgV2ViU2l6ZSBtYXhVbnRpbGVkTGF5ZXJTaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXhVbnRpbGVkTGF5ZXJTaXplOyB9CisgICAgYm9vbCBvcGFxdWVS
b290TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX29wYXF1ZVJvb3RMYXllcjsgfQogCiBwcml2YXRl
OgogICAgIFdlYkNvcmU6OlNldHRpbmdzKiBtX3NldHRpbmdzOwpAQCAtMTY4LDYgKzE3MCw3IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX2FwcGx5RGVmYXVsdERldmljZVNjYWxlRmFjdG9ySW5Db21w
b3NpdG9yOwogICAgIFdlYlNpemUgbV9kZWZhdWx0VGlsZVNpemU7CiAgICAgV2ViU2l6ZSBtX21h
eFVudGlsZWRMYXllclNpemU7CisgICAgYm9vbCBtX29wYXF1ZVJvb3RMYXllcjsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViVmlld0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0lt
cGwuY3BwCmluZGV4IGRhY2ZhMTUyZTU2N2JkYzAxYjUwMzAxMGI2YWQ2YzM3MzlkMTg5ODguLjRj
MGJjMmE5MjE5YjFjY2VmNjcxYjI3ZGVhOWFlMTQ3OTBiZTMxNjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTM0NTQsOSArMzQ1NCwxMSBAQCB2b2lk
IFdlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoYm9vbCBhY3Rp
dmUpCiAKICAgICAgICAgbGF5ZXJUcmVlVmlld1NldHRpbmdzLmRlZmF1bHRUaWxlU2l6ZSA9IHNl
dHRpbmdzSW1wbCgpLT5kZWZhdWx0VGlsZVNpemUoKTsKICAgICAgICAgbGF5ZXJUcmVlVmlld1Nl
dHRpbmdzLm1heFVudGlsZWRMYXllclNpemUgPSBzZXR0aW5nc0ltcGwoKS0+bWF4VW50aWxlZExh
eWVyU2l6ZSgpOworICAgICAgICBsYXllclRyZWVWaWV3U2V0dGluZ3Mub3BhcXVlUm9vdExheWVy
ID0gc2V0dGluZ3NJbXBsKCktPm9wYXF1ZVJvb3RMYXllcigpOwogCiAgICAgICAgIG1fbm9uQ29t
cG9zaXRlZENvbnRlbnRIb3N0ID0gTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0OjpjcmVhdGUoV2Vi
Vmlld0ltcGxDb250ZW50UGFpbnRlcjo6Y3JlYXRlKHRoaXMpKTsKICAgICAgICAgbV9ub25Db21w
b3NpdGVkQ29udGVudEhvc3QtPnNldFNob3dEZWJ1Z0JvcmRlcnMocGFnZSgpLT5zZXR0aW5ncygp
LT5zaG93RGVidWdCb3JkZXJzKCkpOworICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9z
dC0+c2V0T3BhcXVlKGxheWVyVHJlZVZpZXdTZXR0aW5ncy5vcGFxdWVSb290TGF5ZXIpOwogCiAg
ICAgICAgIGlmIChtX3dlYlNldHRpbmdzLT5hcHBseURlZmF1bHREZXZpY2VTY2FsZUZhY3Rvcklu
Q29tcG9zaXRvcigpICYmIHBhZ2UoKS0+c2V0dGluZ3MoKS0+ZGVmYXVsdERldmljZVNjYWxlRmFj
dG9yKCkgIT0gMSkgewogICAgICAgICAgICAgQVNTRVJUKHBhZ2UoKS0+c2V0dGluZ3MoKS0+ZGVm
YXVsdERldmljZVNjYWxlRmFjdG9yKCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146142</attachid>
            <date>2012-06-06 16:49:01 -0700</date>
            <delta_ts>2012-06-07 21:40:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87821-20120606194900.patch</filename>
            <type>text/plain</type>
            <size>24771</size>
            <attacher name="David Reveman">reveman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5NjM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCA1Mjg3MjBjZTc1ODhh
NjI5NjE1NzUyZTJkZWJiM2Y2YzM1YmQ3ZjU2Li42OWJmZTM5NmE1MTg1NTYwNTE2Y2Y1MDcwNzlh
MzU4MGQ5Y2FiMTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMi0wNi0wNiAg
RGF2aWQgUmV2ZW1hbiAgPHJldmVtYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1
bV0gQ29tcG9zaXRvciBkb2Vzbid0IHN1cHBvcnQgdHJhbnNsdWNlbnQgcm9vdCBsYXllcnMuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzgyMQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogY2hyb21pdW0v
cHVibGljL1dlYkxheWVyVHJlZVZpZXcuaDoKKyAgICAgICAgKFdlYkxheWVyVHJlZVZpZXcpOgor
CiAyMDEyLTA2LTA1ICBNYXJrIFBpbGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBbQ2hyb21pdW1dIE1vdmUgY3JlYXRlTG9jYWxTdG9yYWdlTmFtZXNwYWNlIHRvIFBsYXRm
b3JtLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCBlYTFkODg1NTQ1NDI2NzhkNmFjMDgzYjYzZmYzYzc1MWQ5MGUy
M2FlLi44NjY4Nzg4YWNkYTViNzVkYzhlOWNmNjQzNmFmNjBhMWEzY2NmMTRlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsNDYgQEAKKzIwMTItMDYtMDYgIERhdmlkIFJldmVtYW4gIDxyZXZlbWFuQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIENvbXBvc2l0b3IgZG9lc24ndCBzdXBw
b3J0IHRyYW5zbHVjZW50IHJvb3QgbGF5ZXJzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODc4MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBGb3J3YXJkIHRoZSBpc1RyYW5zcGFyZW50IFdlYlZpZXcgc2V0
dGluZyB0byBXZWJMYXllclRyZWVWaWV3LAorICAgICAgICBDQ0xheWVyVHJlZUhvc3QgYW5kIEND
TGF5ZXJUcmVlSG9zdEltcGwuIFVzZSBpc1RyYW5zcGFyZW50IHNldHRpbmcKKyAgICAgICAgdG8g
ZGV0ZXJtaW5lIGhvdyB0byBjbGVhciB0aGUgcm9vdCByZW5kZXIgcGFzcyBhbmQgZHJhdyB0aGUg
YmFja2dyb3VuZC4KKyAgICAgICAgU2V0IG9wYXF1ZSBmbGFnIGNvcnJlY3RseSBvbiB0aGUgTm9u
Q29tcG9zaXRlZENvbnRlbnRIb3N0J3MgZ3JhcGhpY3MKKyAgICAgICAgbGF5ZXIgdG8gbWFrZSBz
dXJlIHN1Yi1waXhlbCByZW5kZXJpbmcgaXMgbm90IHVzZWQgd2l0aCBhIHRyYW5zcGFyZW50Cisg
ICAgICAgIFdlYlZpZXcuCisKKyAgICAgICAgVW5pdCB0ZXN0czogTGF5ZXJSZW5kZXJlckNocm9t
aXVtVGVzdDIub3BhcXVlUmVuZGVyUGFzcworICAgICAgICAgICAgICAgICAgICBMYXllclJlbmRl
cmVyQ2hyb21pdW1UZXN0Mi50cmFuc3BhcmVudFJlbmRlclBhc3MKKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6cHJl
cGFyZVRvVXBkYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpjbGVhclJlbmRlclBhc3MpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1NrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U2tQaWN0dXJlQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6cHJlcGFyZVRvVXBk
YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpDQ0xheWVyVHJl
ZUhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpmaW5pc2hDb21taXRP
bkltcGxUaHJlYWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpzZXRJ
c1RyYW5zcGFyZW50KToKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJlZUhvc3RJbXBsKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBh
c3Nlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6aXNU
cmFuc3BhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRJ
c1RyYW5zcGFyZW50KToKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdEltcGwpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDQ1JlbmRlclBhc3M6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jl
bmRlclBhc3M6OkNDUmVuZGVyUGFzcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZW5kZXJQYXNzLmg6CisgICAgICAgIChDQ1JlbmRlclBhc3MpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNzOjppc1RyYW5zcGFyZW50KToKKwogMjAxMi0wNi0wNiAg
TWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIFdvcmtl
ciB0ZWFyLWRvd24gY2FuIHJlLWVudGVyIEpTQyBkdXJpbmcgR0MgZmluYWxpemF0aW9uCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDZhZjkzOGJhZGY0NzNjYTkwMWFhMDkxNGYzNDI4ZGU2
YWUyNjU4OTUuLmYwYWI0ZDFiNmVmNTJlN2YzMGM4YjRlYmM5MGQxNzEyNjY0NzQ0YTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTItMDYtMDYgIERhdmlk
IFJldmVtYW4gIDxyZXZlbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIENv
bXBvc2l0b3IgZG9lc24ndCBzdXBwb3J0IHRyYW5zbHVjZW50IHJvb3QgbGF5ZXJzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODc4MjEKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHNyYy9Ob25Db21wb3Np
dGVkQ29udGVudEhvc3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpOb25Db21wb3NpdGVkQ29udGVu
dEhvc3Q6OnNldE9wYXF1ZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIHNyYy9Ob25D
b21wb3NpdGVkQ29udGVudEhvc3QuaDoKKyAgICAgICAgKE5vbkNvbXBvc2l0ZWRDb250ZW50SG9z
dCk6CisgICAgICAgICogc3JjL1dlYkxheWVyVHJlZVZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJMYXllclRyZWVWaWV3OjpzZXRJc1RyYW5zcGFyZW50KToKKyAgICAgICAgKFdlYktpdCk6
CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
d0ltcGw6OnNldElzVHJhbnNwYXJlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKToKKyAgICAgICAgKiB0ZXN0cy9MYXll
clJlbmRlcmVyQ2hyb21pdW1UZXN0LmNwcDoKKyAgICAgICAgKEZha2VDQ1JlbmRlcmVyQ2xpZW50
OjpGYWtlQ0NSZW5kZXJlckNsaWVudCk6CisgICAgICAgIChDbGVhckNvdW50aW5nQ29udGV4dCk6
CisgICAgICAgIChDbGVhckNvdW50aW5nQ29udGV4dDo6Q2xlYXJDb3VudGluZ0NvbnRleHQpOgor
ICAgICAgICAoQ2xlYXJDb3VudGluZ0NvbnRleHQ6OmNsZWFyKToKKyAgICAgICAgKENsZWFyQ291
bnRpbmdDb250ZXh0OjpjbGVhckNvdW50KToKKyAgICAgICAgKFRFU1QpOgorCiAyMDEyLTA2LTA2
ICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9t
aXVtXSBVbnJldmlld2VkIGJ1aWxkIGZpeCwgYWRkIGFuIGFwcGFyZW50bHkgdXNlZCBpbmNsdWRl
IG9mIE93bkFycmF5UHRyLmggYmFjayB0byBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaApkaWZm
IC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJMYXllclRyZWVWaWV3
LmggYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkxheWVyVHJlZVZpZXcuaApp
bmRleCAyM2QwZDYzY2U5ZGQyOGE1YjViYWQ3MTI4ZWFhMTQ5YTk3M2I5ZGU2Li5kMDRiM2FjZWVm
MjQ0OTE4NmM4NWMwZjhhYWY4MzhhOWFiYTNjNTUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZv
cm0vY2hyb21pdW0vcHVibGljL1dlYkxheWVyVHJlZVZpZXcuaAorKysgYi9Tb3VyY2UvUGxhdGZv
cm0vY2hyb21pdW0vcHVibGljL1dlYkxheWVyVHJlZVZpZXcuaApAQCAtMTE4LDYgKzExOCw5IEBA
IHB1YmxpYzoKICAgICAvLyBTZXRzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGZvciB0aGUgdmlld3Bv
cnQuCiAgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldEJhY2tncm91bmRDb2xvcihXZWJDb2xvcik7
CiAKKyAgICAvLyBTZXRzIHRoZSB0cmFuc3BhcmVuY3kgZm9yIHRoZSB2aWV3cG9ydC4KKyAgICBX
RUJLSVRfRVhQT1JUIHZvaWQgc2V0SXNUcmFuc3BhcmVudChib29sKTsKKwogICAgIC8vIFNldHMg
d2hldGhlciB0aGlzIHZpZXcgaXMgdmlzaWJsZS4gSW4gdGhyZWFkZWQgbW9kZSwgYSB2aWV3IHRo
YXQgaXMgbm90IHZpc2libGUgd2lsbCBub3QKICAgICAvLyBjb21wb3NpdGUgb3IgdHJpZ2dlciB1
cGRhdGVBbmltYXRpb25zKCkgb3IgbGF5b3V0KCkgY2FsbHMgdW50aWwgaXQgYmVjb21lcyB2aXNp
YmxlLgogICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRWaXNpYmxlKGJvb2wpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFz
TGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9CaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcAppbmRleCA4MjQ1
YWE5ZTY4ODQ4NjBiNmQyYjFmZTlmNDA0Y2Q1Yjc0ZDJlMTM1Li5kMjA1YTE3ZmZlZDg1MjIwYjgw
ZGExZWI1MGJhMWZmZGFlNDBiOTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRtYXBDYW52
YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcApAQCAtODgsOCArODgsOSBAQCB2b2lkIEJpdG1hcENh
bnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBj
b250ZW50UmVjdAogICAgIC8vIEFzc3VtcHRpb246IGlmIGEgdGlsZXIgaXMgdXNpbmcgYm9yZGVy
IHRleGVscywgdGhlbiBpdCBpcyBiZWNhdXNlIHRoZQogICAgIC8vIGxheWVyIGlzIGxpa2VseSB0
byBiZSBmaWx0ZXJlZCBvciB0cmFuc2Zvcm1lZC4gQmVjYXVzZSBvZiBpdCBtaWdodCBiZQogICAg
IC8vIHRyYW5zZm9ybWVkLCBkcmF3IHRoZSB0ZXh0IGluIGdyYXlzY2FsZSBpbnN0ZWFkIG9mIHN1
YnBpeGVsIGFudGlhbGlhc2luZy4KKyAgICBib29sIHVzZUdyYXlzY2FsZVRleHQgPSBib3JkZXJU
ZXhlbHMgfHwgIWxheWVySXNPcGFxdWU7CiAgICAgUGxhdGZvcm1DYW52YXM6OlBhaW50ZXI6OlRl
eHRPcHRpb24gdGV4dE9wdGlvbiA9Ci0gICAgICAgIGJvcmRlclRleGVscyA/IFBsYXRmb3JtQ2Fu
dmFzOjpQYWludGVyOjpHcmF5c2NhbGVUZXh0IDogUGxhdGZvcm1DYW52YXM6OlBhaW50ZXI6OlN1
YnBpeGVsVGV4dDsKKyAgICAgICAgdXNlR3JheXNjYWxlVGV4dCA/IFBsYXRmb3JtQ2FudmFzOjpQ
YWludGVyOjpHcmF5c2NhbGVUZXh0IDogUGxhdGZvcm1DYW52YXM6OlBhaW50ZXI6OlN1YnBpeGVs
VGV4dDsKICAgICBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlciBjYW52YXNQYWludGVyKCZtX2NhbnZh
cywgdGV4dE9wdGlvbik7CiAgICAgY2FudmFzUGFpbnRlci5za2lhQ29udGV4dCgpLT5zZXRUcmFj
a09wYXF1ZVJlZ2lvbighbGF5ZXJJc09wYXF1ZSk7CiAgICAgcGFpbnRDb250ZW50cygqY2FudmFz
UGFpbnRlci5jb250ZXh0KCksICpjYW52YXNQYWludGVyLnNraWFDb250ZXh0KCksIGNvbnRlbnRS
ZWN0LCBjb250ZW50c1NjYWxlLCByZXN1bHRpbmdPcGFxdWVSZWN0KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IDU1Y2Y3NGYyZjg0MWUyYmYyZWM5ZTQ2N2MxZjU3
YjA3OWNhZTlmZWUuLjk5NzlkYWU5ZDQwY2RkZmE4ZTMyNjU3MWZiMjRjMDQ1N2Y3Zjk5ODMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtNDA0LDEzICs0MDQsMTIg
QEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnZpZXdwb3J0Q2hhbmdlZCgpCiAKIHZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhclJlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNz
KiByZW5kZXJQYXNzLCBjb25zdCBDQ1JlbmRlclBhc3MqIHJvb3RSZW5kZXJQYXNzLCBjb25zdCBG
bG9hdFJlY3QmIGZyYW1lYnVmZmVyRGFtYWdlUmVjdCkKIHsKLSAgICAvLyBOb24tcm9vdCBsYXll
cnMgc2hvdWxkIGNsZWFyIHRoZWlyIGVudGlyZSBjb250ZW50cyB0byB0cmFuc3BhcmVudC4gT24g
REVCVUcgYnVpbGRzLCB0aGUgcm9vdCBsYXllcgotICAgIC8vIGlzIGNsZWFyZWQgdG8gYmx1ZSB0
byBlYXNpbHkgc2VlIHJlZ2lvbnMgdGhhdCB3ZXJlIG5vdCBkcmF3biBvbiB0aGUgc2NyZWVuLiBJ
ZiB3ZQorICAgIC8vIE9uIERFQlVHIGJ1aWxkcywgb3BhcXVlIHJlbmRlciBwYXNzZXMgYXJlIGNs
ZWFyZWQgdG8gYmx1ZSB0byBlYXNpbHkgc2VlIHJlZ2lvbnMgdGhhdCB3ZXJlIG5vdCBkcmF3biBv
biB0aGUgc2NyZWVuLiBJZiB3ZQogICAgIC8vIGFyZSB1c2luZyBwYXJ0aWFsIHN3YXAgLyBzY2lz
c29yIG9wdGltaXphdGlvbiwgdGhlbiB0aGUgc3VyZmFjZSBzaG91bGQgb25seQogICAgIC8vIGNs
ZWFyIHRoZSBkYW1hZ2VkIHJlZ2lvbiwgc28gdGhhdCB3ZSBkb24ndCBhY2NpZGVudGFsbHkgY2xl
YXIgdW4tY2hhbmdlZCBwb3J0aW9ucwogICAgIC8vIG9mIHRoZSBzY3JlZW4uCiAKLSAgICBpZiAo
cmVuZGVyUGFzcyAhPSByb290UmVuZGVyUGFzcykKKyAgICBpZiAocmVuZGVyUGFzcy0+aXNUcmFu
c3BhcmVudCgpKQogICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmNsZWFyQ29sb3Io
MCwgMCwgMCwgMCkpOwogICAgIGVsc2UKICAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0
LT5jbGVhckNvbG9yKDAsIDAsIDEsIDEpKTsKQEAgLTQyMSw3ICs0MjAsNyBAQCB2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6Y2xlYXJSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzcyogcmVu
ZGVyUGFzcywgY29ucwogICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmRpc2FibGUo
R3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwogCiAjaWYgZGVmaW5lZChOREVCVUcp
Ci0gICAgaWYgKHJlbmRlclBhc3MgIT0gcm9vdFJlbmRlclBhc3MpCisgICAgaWYgKHJlbmRlclBh
c3MtPmlzVHJhbnNwYXJlbnQoKSkKICNlbmRpZgogICAgICAgICBtX2NvbnRleHQtPmNsZWFyKEdy
YXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tQaWN0dXJlQ2FudmFzTGF5ZXJU
ZXh0dXJlVXBkYXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcAppbmRleCAzOTMyN2Qw
MmE1NmFmOGQ3NjdhOTk5ODIyNGNkMjQyY2FlZDQ1NDI5Li5iNDk5MDEyZTYxYjUzN2FjOTU0Y2Vh
MTM4ZjljMTg4MjM2MzFhNTY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVD
YW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcApAQCAtNTgsNyArNTgsOCBAQCB2b2lkIFNrUGlj
dHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRS
ZWN0JiBjb250ZW50UgogICAgIC8vIGxheWVyIGlzIGxpa2VseSB0byBiZSBmaWx0ZXJlZCBvciB0
cmFuc2Zvcm1lZC4gQmVjYXVzZSBpdCBtaWdodCBiZQogICAgIC8vIHRyYW5zZm9ybWVkLCBzZXQg
aW1hZ2UgYnVmZmVyIGZsYWcgdG8gZHJhdyB0aGUgdGV4dCBpbiBncmF5c2NhbGUKICAgICAvLyBp
bnN0ZWFkIG9mIHVzaW5nIHN1YnBpeGVsIGFudGlhbGlhc2luZy4KLSAgICBwbGF0Zm9ybUNvbnRl
eHQuc2V0RHJhd2luZ1RvSW1hZ2VCdWZmZXIoYm9yZGVyVGV4ZWxzID8gdHJ1ZSA6IGZhbHNlKTsK
KyAgICBib29sIHVzZUdyYXlzY2FsZVRleHQgPSBib3JkZXJUZXhlbHMgfHwgIW1fbGF5ZXJJc09w
YXF1ZTsKKyAgICBwbGF0Zm9ybUNvbnRleHQuc2V0RHJhd2luZ1RvSW1hZ2VCdWZmZXIodXNlR3Jh
eXNjYWxlVGV4dCk7CiAgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dCgmcGxhdGZv
cm1Db250ZXh0KTsKICAgICBwYWludENvbnRlbnRzKGdyYXBoaWNzQ29udGV4dCwgcGxhdGZvcm1D
b250ZXh0LCBjb250ZW50UmVjdCwgY29udGVudHNTY2FsZSwgcmVzdWx0aW5nT3BhcXVlUmVjdCk7
CiAgICAgbV9waWN0dXJlLmVuZFJlY29yZGluZygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dC5jcHAKaW5kZXggZmEwZWI2NGMzNjViMThkZTBkOTY5ZmM4M2U5YjQ4MzVhMzg2OTM0YS4uODRj
YjNiOWRiY2MxYTQzZGIxY2U2MGIzYmJkNTg4ZGNjMjRmMTIwYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuY3BwCkBAIC04Niw2ICs4Niw3IEBAIENDTGF5ZXJUcmVlSG9zdDo6Q0NMYXll
clRyZWVIb3N0KENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW50LCBjb25zdCBDQ1NldHRpbmdz
CiAgICAgLCBtX21heFBhZ2VTY2FsZUZhY3RvcigxKQogICAgICwgbV90cmlnZ2VySWRsZVBhaW50
cyh0cnVlKQogICAgICwgbV9iYWNrZ3JvdW5kQ29sb3IoQ29sb3I6OndoaXRlKQorICAgICwgbV9p
c1RyYW5zcGFyZW50KGZhbHNlKQogICAgICwgbV9wYXJ0aWFsVGV4dHVyZVVwZGF0ZVJlcXVlc3Rz
KDApCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKQEAgLTI1Miw2ICsy
NTMsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZmluaXNoQ29tbWl0T25JbXBsVGhyZWFkKEND
TGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJbXBsKQogICAgIGhvc3RJbXBsLT5zZXRWaWV3cG9ydFNp
emUodmlld3BvcnRTaXplKCkpOwogICAgIGhvc3RJbXBsLT5zZXRQYWdlU2NhbGVGYWN0b3JBbmRM
aW1pdHMobV9wYWdlU2NhbGVGYWN0b3IsIG1fbWluUGFnZVNjYWxlRmFjdG9yLCBtX21heFBhZ2VT
Y2FsZUZhY3Rvcik7CiAgICAgaG9zdEltcGwtPnNldEJhY2tncm91bmRDb2xvcihtX2JhY2tncm91
bmRDb2xvcik7CisgICAgaG9zdEltcGwtPnNldElzVHJhbnNwYXJlbnQobV9pc1RyYW5zcGFyZW50
KTsKICAgICBob3N0SW1wbC0+c2V0VmlzaWJsZShtX3Zpc2libGUpOwogICAgIGhvc3RJbXBsLT5z
ZXRTb3VyY2VGcmFtZUNhbkJlRHJhd24obV9mcmFtZUlzRm9yRGlzcGxheSk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmgKaW5kZXggNDM0YWVjMjc0MjIwMWM1ZjZkNWI0OWNjNTM3ZTE4MDM5
YzJjODY0ZC4uZTJjMTg3OTcxNGRiYjNmYTgyYWVmNjU3YzhjZWZlYmMxYWViMTk5NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTIzMSw2ICsyMzEsOCBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIHNldEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYgY29sb3IpIHsgbV9iYWNrZ3Jv
dW5kQ29sb3IgPSBjb2xvcjsgfQogCisgICAgdm9pZCBzZXRJc1RyYW5zcGFyZW50KGJvb2wgdHJh
bnNwYXJlbnQpIHsgbV9pc1RyYW5zcGFyZW50ID0gdHJhbnNwYXJlbnQ7IH0KKwogICAgIFRleHR1
cmVNYW5hZ2VyKiBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRD
b250ZW50c01lbW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzKHNpemVfdCk7CiAKQEAgLTMwOSw2ICsz
MTEsNyBAQCBwcml2YXRlOgogICAgIGZsb2F0IG1fbWluUGFnZVNjYWxlRmFjdG9yLCBtX21heFBh
Z2VTY2FsZUZhY3RvcjsKICAgICBib29sIG1fdHJpZ2dlcklkbGVQYWludHM7CiAgICAgQ29sb3Ig
bV9iYWNrZ3JvdW5kQ29sb3I7CisgICAgYm9vbCBtX2lzVHJhbnNwYXJlbnQ7CiAKICAgICBUZXh0
dXJlTGlzdCBtX2RlbGV0ZVRleHR1cmVBZnRlckNvbW1pdExpc3Q7CiAgICAgc2l6ZV90IG1fcGFy
dGlhbFRleHR1cmVVcGRhdGVSZXF1ZXN0czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5jcHAKaW5kZXggZDc4ZDQyOWYyOTZhNTFlY2IwMTZiNzIzZmY0YWIwYzg0N2FiZGYwZi4u
MWM3NTMwZjFmMzJkZmNiNTNhZGI0YmRmMzA4YzlmNTk1NTVkZGE0OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTEyNCw2ICsxMjQsNyBAQCBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpDQ0xheWVyVHJlZUhvc3RJbXBsKGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdz
LCBDQ0xheWVyVHJlZQogICAgICwgbV9zZW50UGFnZVNjYWxlRGVsdGEoMSkKICAgICAsIG1fbWlu
UGFnZVNjYWxlKDApCiAgICAgLCBtX21heFBhZ2VTY2FsZSgwKQorICAgICwgbV9pc1RyYW5zcGFy
ZW50KGZhbHNlKQogICAgICwgbV9uZWVkc0FuaW1hdGVMYXllcnMoZmFsc2UpCiAgICAgLCBtX3Bp
bmNoR2VzdHVyZUFjdGl2ZShmYWxzZSkKICAgICAsIG1fZnBzQ291bnRlcihDQ0ZyYW1lUmF0ZUNv
dW50ZXI6OmNyZWF0ZSgpKQpAQCAtMjc2LDggKzI3Nyw5IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0
SW1wbDo6Y2FsY3VsYXRlUmVuZGVyUGFzc2VzKENDUmVuZGVyUGFzc0xpc3QmIHBhc3NlcywgQ0NM
YXllCiAgICAgZm9yIChpbnQgc3VyZmFjZUluZGV4ID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5z
aXplKCkgLSAxOyBzdXJmYWNlSW5kZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4KSB7CiAgICAgICAg
IENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIgPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
W3N1cmZhY2VJbmRleF07CiAgICAgICAgIENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSA9
IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgpOwotCi0gICAgICAgIE93blB0cjxD
Q1JlbmRlclBhc3M+IHBhc3MgPSBDQ1JlbmRlclBhc3M6OmNyZWF0ZShyZW5kZXJTdXJmYWNlKTsK
KyAgICAgICAgLy8gTm9uLXJvb3QgcmVuZGVyIHBhc3NlcyBhcmUgdHJhbnNwYXJlbnQuIFJvb3Qg
cmVuZGVyIHBhc3MgaXMgb3BhcXVlIHVubGVzcyBtX2lzVHJhbnNwYXJlbnQgaXMgc2V0LgorICAg
ICAgICBib29sIHRyYW5zcGFyZW50ID0gc3VyZmFjZUluZGV4ID8gdHJ1ZSA6IG1faXNUcmFuc3Bh
cmVudDsKKyAgICAgICAgT3duUHRyPENDUmVuZGVyUGFzcz4gcGFzcyA9IENDUmVuZGVyUGFzczo6
Y3JlYXRlKHJlbmRlclN1cmZhY2UsIHRyYW5zcGFyZW50KTsKICAgICAgICAgc3VyZmFjZVBhc3NN
YXAuYWRkKHJlbmRlclN1cmZhY2UsIHBhc3MuZ2V0KCkpOwogICAgICAgICBwYXNzZXMuYXBwZW5k
KHBhc3MucmVsZWFzZSgpKTsKICAgICB9CkBAIC0zMTksNyArMzIxLDggQEAgYm9vbCBDQ0xheWVy
VHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYgcGFz
c2VzLCBDQ0xheWUKICAgICAgICAgb2NjbHVzaW9uVHJhY2tlci5sZWF2ZUxheWVyKGl0KTsKICAg
ICB9CiAKLSAgICBwYXNzZXMubGFzdCgpLT5hcHBlbmRRdWFkc1RvRmlsbFNjcmVlbihtX3Jvb3RM
YXllckltcGwuZ2V0KCksIG1fYmFja2dyb3VuZENvbG9yLCBvY2NsdXNpb25UcmFja2VyKTsKKyAg
ICBpZiAoIW1faXNUcmFuc3BhcmVudCkKKyAgICAgICAgcGFzc2VzLmxhc3QoKS0+YXBwZW5kUXVh
ZHNUb0ZpbGxTY3JlZW4obV9yb290TGF5ZXJJbXBsLmdldCgpLCBtX2JhY2tncm91bmRDb2xvciwg
b2NjbHVzaW9uVHJhY2tlcik7CiAKICAgICBpZiAoZHJhd0ZyYW1lKQogICAgICAgICBvY2NsdXNp
b25UcmFja2VyLm92ZXJkcmF3TWV0cmljcygpLnJlY29yZE1ldHJpY3ModGhpcyk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKaW5kZXggYzc0MGE2NjIwMmY0YmQwZjFiM2QwNjA2
ZDNhZWJhOTQ4OWQyMDA5Mi4uZWI3NjU5YjVmNGFmZmZmMDU5ZmZhZTg2YmYxYzEwZmM4MDdmZmY0
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApAQCAtMTU5LDYgKzE1OSw5
IEBAIHB1YmxpYzoKICAgICBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9iYWNrZ3JvdW5kQ29sb3I7IH0KICAgICB2b2lkIHNldEJhY2tncm91bmRDb2xvcihj
b25zdCBDb2xvciYgY29sb3IpIHsgbV9iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjsgfQogCisgICAg
Ym9vbCBpc1RyYW5zcGFyZW50KCkgY29uc3QgeyByZXR1cm4gbV9pc1RyYW5zcGFyZW50OyB9Cisg
ICAgdm9pZCBzZXRJc1RyYW5zcGFyZW50KGJvb2wgdHJhbnNwYXJlbnQpIHsgbV9pc1RyYW5zcGFy
ZW50ID0gdHJhbnNwYXJlbnQ7IH0KKwogICAgIGJvb2wgbmVlZHNBbmltYXRlTGF5ZXJzKCkgY29u
c3QgeyByZXR1cm4gbV9uZWVkc0FuaW1hdGVMYXllcnM7IH0KICAgICB2b2lkIHNldE5lZWRzQW5p
bWF0ZUxheWVycygpIHsgbV9uZWVkc0FuaW1hdGVMYXllcnMgPSB0cnVlOyB9CiAKQEAgLTIyNyw2
ICsyMzAsNyBAQCBwcml2YXRlOgogICAgIGZsb2F0IG1fbWluUGFnZVNjYWxlLCBtX21heFBhZ2VT
Y2FsZTsKIAogICAgIENvbG9yIG1fYmFja2dyb3VuZENvbG9yOworICAgIGJvb2wgbV9pc1RyYW5z
cGFyZW50OwogCiAgICAgLy8gSWYgdGhpcyBpcyB0cnVlLCBpdCBpcyBuZWNlc3NhcnkgdG8gdHJh
dmVyc2UgdGhlIGxheWVyIHRyZWUgdGlja2luZyB0aGUgYW5pbWF0b3JzLgogICAgIGJvb2wgbV9u
ZWVkc0FuaW1hdGVMYXllcnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcAppbmRleCAwZTNhZmMw
NDY5MmUwYmRiYjVlNGNjNmFhMTQ0MDZkOGExZDlhZjhkLi42ZDgzNjFlYmVmOGRiNjAwZThmMGEx
YWZjNmNkZmM3ZTRlMzBiMzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAKQEAgLTM3LDE0
ICszNywxNSBAQCB1c2luZyBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NPd25QdHI8Q0NSZW5kZXJQYXNzPiBDQ1JlbmRlclBhc3M6
OmNyZWF0ZShDQ1JlbmRlclN1cmZhY2UqIHRhcmdldFN1cmZhY2UpCitQYXNzT3duUHRyPENDUmVu
ZGVyUGFzcz4gQ0NSZW5kZXJQYXNzOjpjcmVhdGUoQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRTdXJm
YWNlLCBib29sIGlzVHJhbnNwYXJlbnQpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1Jl
bmRlclBhc3ModGFyZ2V0U3VyZmFjZSkpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NSZW5k
ZXJQYXNzKHRhcmdldFN1cmZhY2UsIGlzVHJhbnNwYXJlbnQpKTsKIH0KIAotQ0NSZW5kZXJQYXNz
OjpDQ1JlbmRlclBhc3MoQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRTdXJmYWNlKQorQ0NSZW5kZXJQ
YXNzOjpDQ1JlbmRlclBhc3MoQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRTdXJmYWNlLCBib29sIGlz
VHJhbnNwYXJlbnQpCiAgICAgOiBtX3RhcmdldFN1cmZhY2UodGFyZ2V0U3VyZmFjZSkKICAgICAs
IG1fZnJhbWVidWZmZXJPdXRwdXRSZWN0KHRhcmdldFN1cmZhY2UtPmNvbnRlbnRSZWN0KCkpCisg
ICAgLCBtX2lzVHJhbnNwYXJlbnQoaXNUcmFuc3BhcmVudCkKIHsKICAgICBBU1NFUlQobV90YXJn
ZXRTdXJmYWNlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmgKaW5kZXggNjQ5ZGJhY2RjZGE5ZmEw
MDdkYjdlMGIyZDFiZTFlMzA5NWUwOWE0Zi4uNWY3MDU2ZGU4N2EzZjg3OWNlZWI5NDEzOTViOGEx
NDhkZWEyMTNiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmgKQEAgLTUzLDcgKzUzLDcgQEAgcHVi
bGljOgogY2xhc3MgQ0NSZW5kZXJQYXNzIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ1Jl
bmRlclBhc3MpOwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPENDUmVuZGVyUGFzcz4g
Y3JlYXRlKENDUmVuZGVyU3VyZmFjZSopOworICAgIHN0YXRpYyBQYXNzT3duUHRyPENDUmVuZGVy
UGFzcz4gY3JlYXRlKENDUmVuZGVyU3VyZmFjZSosIGJvb2wgaXNUcmFuc3BhcmVudCk7CiAKICAg
ICB2b2lkIGFwcGVuZFF1YWRzRm9yTGF5ZXIoQ0NMYXllckltcGwqLCBDQ09jY2x1c2lvblRyYWNr
ZXJJbXBsKiwgYm9vbCYgaGFkTWlzc2luZ1RpbGVzKTsKICAgICB2b2lkIGFwcGVuZFF1YWRzRm9y
UmVuZGVyU3VyZmFjZUxheWVyKENDTGF5ZXJJbXBsKiwgY29uc3QgQ0NSZW5kZXJQYXNzKiBjb250
cmlidXRpbmdSZW5kZXJQYXNzLCBDQ09jY2x1c2lvblRyYWNrZXJJbXBsKik7CkBAIC02NCwxMyAr
NjQsMTYgQEAgcHVibGljOgogICAgIC8vIFRoaXMgZGVub3RlcyB0aGUgYm91bmRzIGluIHBoeXNp
Y2FsIHBpeGVscyBvZiB0aGUgb3V0cHV0IGdlbmVyYXRlZCBieSB0aGlzIFJlbmRlclBhc3MuCiAg
ICAgY29uc3QgSW50UmVjdCYgZnJhbWVidWZmZXJPdXRwdXRSZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9mcmFtZWJ1ZmZlck91dHB1dFJlY3Q7IH0KIAorICAgIGJvb2wgaXNUcmFuc3BhcmVudCgpIGNv
bnN0IHsgcmV0dXJuIG1faXNUcmFuc3BhcmVudDsgfQorCiBwcml2YXRlOgotICAgIGV4cGxpY2l0
IENDUmVuZGVyUGFzcyhDQ1JlbmRlclN1cmZhY2UqKTsKKyAgICBleHBsaWNpdCBDQ1JlbmRlclBh
c3MoQ0NSZW5kZXJTdXJmYWNlKiwgYm9vbCBpc1RyYW5zcGFyZW50KTsKIAogICAgIENDUmVuZGVy
U3VyZmFjZSogbV90YXJnZXRTdXJmYWNlOwogICAgIENDUXVhZExpc3QgbV9xdWFkTGlzdDsKICAg
ICBJbnRSZWN0IG1fZnJhbWVidWZmZXJPdXRwdXRSZWN0OwogICAgIFZlY3RvcjxPd25QdHI8Q0NT
aGFyZWRRdWFkU3RhdGU+ID4gbV9zaGFyZWRRdWFkU3RhdGVMaXN0OworICAgIGJvb2wgbV9pc1Ry
YW5zcGFyZW50OwogfTsKIAogdHlwZWRlZiBWZWN0b3I8T3duUHRyPENDUmVuZGVyUGFzcz4gPiBD
Q1JlbmRlclBhc3NMaXN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
Tm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L05vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5jcHAKaW5kZXggNGNjMWMxMTc3ZGM4YWQ1M2QxZjJk
OWQwNDM4ZjZlMzM5NmY0MDA4Yy4uOWFhNmYxNjdmYjc4OWE1MDYxMjJlNDEyYmIwZWNiZjQxZmM4
NWNmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTm9uQ29tcG9zaXRl
ZENvbnRlbnRIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Ob25Db21w
b3NpdGVkQ29udGVudEhvc3QuY3BwCkBAIC02Miw2ICs2MiwxMSBAQCB2b2lkIE5vbkNvbXBvc2l0
ZWRDb250ZW50SG9zdDo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBj
b2xvcikKICAgICBtX2dyYXBoaWNzTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKS0+c2V0QmFja2dyb3Vu
ZENvbG9yKGNvbG9yKTsKIH0KIAordm9pZCBOb25Db21wb3NpdGVkQ29udGVudEhvc3Q6OnNldE9w
YXF1ZShib29sIG9wYXF1ZSkKK3sKKyAgICBtX2dyYXBoaWNzTGF5ZXItPnBsYXRmb3JtTGF5ZXIo
KS0+c2V0T3BhcXVlKG9wYXF1ZSk7Cit9CisKIHZvaWQgTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0
OjpzZXRTY3JvbGxMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBsYXllcikKIHsKICAgICBt
X2dyYXBoaWNzTGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LmggYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9Ob25Db21wb3NpdGVkQ29udGVudEhvc3QuaAppbmRleCAzMjBlN2Mx
YmU0OTQ2OTBiOGFjYTM5ZmQyMjI1OTg3OTUzZDI0NTYzLi5jODdiZDhjMDk4OWJhNDhkMDgyNjIw
MjJlMmNjMTA5OGMwMmZlYmE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9Ob25Db21wb3NpdGVkQ29udGVudEhvc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9Ob25Db21wb3NpdGVkQ29udGVudEhvc3QuaApAQCAtNTYsNiArNTYsNyBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIGludmFsaWRhdGVSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKICAg
ICB2b2lkIHNldEJhY2tncm91bmRDb2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYpOworICAgIHZv
aWQgc2V0T3BhcXVlKGJvb2wpOwogICAgIHZvaWQgc2V0U2Nyb2xsTGF5ZXIoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciopOwogICAgIHZvaWQgc2V0Vmlld3BvcnQoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYgdmlld3BvcnRTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZW50c1NpemUsIGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgZmxvYXQgZGV2aWNlU2NhbGUs
IGludCBsYXllckFkanVzdFgpOwogICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIHRvcExldmVs
Um9vdExheWVyKCkgY29uc3QgeyByZXR1cm4gbV9ncmFwaGljc0xheWVyLmdldCgpOyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3LmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXcuY3BwCmluZGV4IGFl
MjBhZWE5YTM1ODNlNjM0MjQ5ZjViYjRkYjQwODgyODRkODI2ZjEuLjUwNDEzMGJjYmNlNGZkYTAx
YzU0Mzg0Y2UwMDg4N2JiNTZmYjBiNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkxheWVyVHJlZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkxheWVyVHJlZVZpZXcuY3BwCkBAIC0xMDcsNiArMTA3LDExIEBAIHZvaWQgV2ViTGF5
ZXJUcmVlVmlldzo6c2V0QmFja2dyb3VuZENvbG9yKFdlYkNvbG9yIGNvbG9yKQogICAgIG1fcHJp
dmF0ZS0+bGF5ZXJUcmVlSG9zdCgpLT5zZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3IpOwogfQogCit2
b2lkIFdlYkxheWVyVHJlZVZpZXc6OnNldElzVHJhbnNwYXJlbnQoYm9vbCB0cmFuc3BhcmVudCkK
K3sKKyAgICBtX3ByaXZhdGUtPmxheWVyVHJlZUhvc3QoKS0+c2V0SXNUcmFuc3BhcmVudCh0cmFu
c3BhcmVudCk7Cit9CisKIHZvaWQgV2ViTGF5ZXJUcmVlVmlldzo6c2V0VmlzaWJsZShib29sIHZp
c2libGUpCiB7CiAgICAgbV9wcml2YXRlLT5sYXllclRyZWVIb3N0KCktPnNldFZpc2libGUodmlz
aWJsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1w
bC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXgg
ZDEwOTM3ZjNmOTVjZjIzNDc0ZjZmOWUzOTlkNWMxNmY0OWE3YTVkMS4uMDY2YTFlYTc1M2Y4YjRk
NmI3ZmM4NWQ3MmFkYTk4NjkwNGYzYzRhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlZpZXdJbXBsLmNwcApAQCAtMzAyNiw2ICszMDI2LDExIEBAIHZvaWQgV2ViVmlld0ltcGw6
OnNldElzVHJhbnNwYXJlbnQoYm9vbCBpc1RyYW5zcGFyZW50KQogCiAgICAgLy8gRnV0dXJlIGZy
YW1lcyBjaGVjayB0aGlzIHRvIGtub3cgd2hldGhlciB0byBiZSB0cmFuc3BhcmVudC4KICAgICBt
X2lzVHJhbnNwYXJlbnQgPSBpc1RyYW5zcGFyZW50OworCisgICAgaWYgKG1fbm9uQ29tcG9zaXRl
ZENvbnRlbnRIb3N0KQorICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC0+c2V0T3Bh
cXVlKCFpc1RyYW5zcGFyZW50KTsKKworICAgIG1fbGF5ZXJUcmVlVmlldy5zZXRJc1RyYW5zcGFy
ZW50KGlzVHJhbnNwYXJlbnQpOwogfQogCiBib29sIFdlYlZpZXdJbXBsOjppc1RyYW5zcGFyZW50
KCkgY29uc3QKQEAgLTM0NzUsNiArMzQ4MCw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldElzQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZShib29sIGFjdGl2ZSkKIAogICAgICAgICBtX25vbkNv
bXBvc2l0ZWRDb250ZW50SG9zdCA9IE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdDo6Y3JlYXRlKFdl
YlZpZXdJbXBsQ29udGVudFBhaW50ZXI6OmNyZWF0ZSh0aGlzKSk7CiAgICAgICAgIG1fbm9uQ29t
cG9zaXRlZENvbnRlbnRIb3N0LT5zZXRTaG93RGVidWdCb3JkZXJzKHBhZ2UoKS0+c2V0dGluZ3Mo
KS0+c2hvd0RlYnVnQm9yZGVycygpKTsKKyAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudEhv
c3QtPnNldE9wYXF1ZSghaXNUcmFuc3BhcmVudCgpKTsKIAogICAgICAgICBpZiAobV93ZWJTZXR0
aW5ncy0+YXBwbHlEZWZhdWx0RGV2aWNlU2NhbGVGYWN0b3JJbkNvbXBvc2l0b3IoKSAmJiBwYWdl
KCktPnNldHRpbmdzKCktPmRlZmF1bHREZXZpY2VTY2FsZUZhY3RvcigpICE9IDEpIHsKICAgICAg
ICAgICAgIEFTU0VSVChwYWdlKCktPnNldHRpbmdzKCktPmRlZmF1bHREZXZpY2VTY2FsZUZhY3Rv
cigpKTsKQEAgLTM0ODksNiArMzQ5NSw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldElzQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0FjdGl2ZShib29sIGFjdGl2ZSkKICAgICAgICAgICAgIG1fbGF5ZXJU
cmVlVmlldy5zZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMocGFnZVNjYWxlRmFjdG9yKCksIG1f
bWluaW11bVBhZ2VTY2FsZUZhY3RvciwgbV9tYXhpbXVtUGFnZVNjYWxlRmFjdG9yKTsKICAgICAg
ICAgICAgIGlmIChtX2NvbXBvc2l0b3JTdXJmYWNlUmVhZHkpCiAgICAgICAgICAgICAgICAgbV9s
YXllclRyZWVWaWV3LnNldFN1cmZhY2VSZWFkeSgpOworICAgICAgICAgICAgbV9sYXllclRyZWVW
aWV3LnNldElzVHJhbnNwYXJlbnQoaXNUcmFuc3BhcmVudCgpKTsKICAgICAgICAgICAgIHVwZGF0
ZUxheWVyVHJlZVZpZXdwb3J0KCk7CiAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkQWN0aXZhdGVD
b21wb3NpdG9yKG1fbGF5ZXJUcmVlVmlldy5jb21wb3NpdG9ySWRlbnRpZmllcigpKTsKICAgICAg
ICAgICAgIG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlID0gdHJ1ZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJSZW5kZXJlckNocm9taXVtVGVz
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyUmVuZGVyZXJDaHJvbWl1
bVRlc3QuY3BwCmluZGV4IDQwMTdkMzhiZmYyN2I4M2MwMWUwMDIxMzYxYTUwNjg1ODQyYTJiOTcu
LmRlOTA2NjYwNzg5YzYwNzdjOGY5NTFiYjliNTYzMmViY2E4MTliYzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJSZW5kZXJlckNocm9taXVtVGVzdC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllclJlbmRlcmVyQ2hyb21pdW1U
ZXN0LmNwcApAQCAtNzAsMTMgKzcwLDEzIEBAIHByaXZhdGU6CiAKIGNsYXNzIEZha2VDQ1JlbmRl
cmVyQ2xpZW50IDogcHVibGljIENDUmVuZGVyZXJDbGllbnQgewogcHVibGljOgotICAgIEZha2VD
Q1JlbmRlcmVyQ2xpZW50KCkKKyAgICBGYWtlQ0NSZW5kZXJlckNsaWVudChib29sIHRyYW5zcGFy
ZW50ID0gZmFsc2UpCiAgICAgICAgIDogbV9zZXRGdWxsUm9vdExheWVyRGFtYWdlQ291bnQoMCkK
ICAgICAgICAgLCBtX3Jvb3RMYXllcihDQ0xheWVySW1wbDo6Y3JlYXRlKDEpKQogICAgICAgICAs
IG1fbWVtb3J5QWxsb2NhdGlvbkxpbWl0Qnl0ZXMoMCkKICAgICB7CiAgICAgICAgIG1fcm9vdExh
eWVyLT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7Ci0gICAgICAgIG1fcm9vdFJlbmRlclBhc3MgPSBD
Q1JlbmRlclBhc3M6OmNyZWF0ZShtX3Jvb3RMYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICAg
ICAgbV9yb290UmVuZGVyUGFzcyA9IENDUmVuZGVyUGFzczo6Y3JlYXRlKG1fcm9vdExheWVyLT5y
ZW5kZXJTdXJmYWNlKCksIHRyYW5zcGFyZW50KTsKICAgICB9CiAKICAgICAvLyBDQ1JlbmRlcmVy
Q2xpZW50IG1ldGhvZHMuCkBAIC0zNTcsMyArMzU3LDU0IEBAIFRFU1QoTGF5ZXJSZW5kZXJlckNo
cm9taXVtVGVzdDIsIGluaXRpYWxpemF0aW9uV2l0aG91dEdwdU1lbW9yeU1hbmFnZXJFeHRlbnNp
b25TCiAKICAgICBFWFBFQ1RfR1QobW9ja0NsaWVudC5tZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRl
cygpLCAwdWwpOwogfQorCitjbGFzcyBDbGVhckNvdW50aW5nQ29udGV4dCA6IHB1YmxpYyBGYWtl
V2ViR3JhcGhpY3NDb250ZXh0M0QgeworcHVibGljOgorICAgIENsZWFyQ291bnRpbmdDb250ZXh0
KCkgOiBtX2NsZWFyKDApIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGNsZWFyKFdHQzNEYml0Zmll
bGQpCisgICAgeworICAgICAgICBtX2NsZWFyKys7CisgICAgfQorCisgICAgaW50IGNsZWFyQ291
bnQoKSBjb25zdCB7IHJldHVybiBtX2NsZWFyOyB9CisKK3ByaXZhdGU6CisgICAgaW50IG1fY2xl
YXI7Cit9OworCitURVNUKExheWVyUmVuZGVyZXJDaHJvbWl1bVRlc3QyLCBvcGFxdWVSZW5kZXJQ
YXNzKQoreworICAgIEZha2VDQ1JlbmRlcmVyQ2xpZW50IG1vY2tDbGllbnQ7CisgICAgUmVmUHRy
PEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpj
cmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dChhZG9wdFB0cihuZXcgQ2xlYXJDb3Vu
dGluZ0NvbnRleHQpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5k
b3cpOworICAgIEZha2VMYXllclJlbmRlcmVyQ2hyb21pdW0gbGF5ZXJSZW5kZXJlckNocm9taXVt
KCZtb2NrQ2xpZW50LCBjb250ZXh0KTsKKworICAgIEVYUEVDVF9UUlVFKGxheWVyUmVuZGVyZXJD
aHJvbWl1bS5pbml0aWFsaXplKCkpOworCisgICAgbGF5ZXJSZW5kZXJlckNocm9taXVtLmJlZ2lu
RHJhd2luZ0ZyYW1lKG1vY2tDbGllbnQucm9vdFJlbmRlclBhc3MoKSk7CisgICAgbGF5ZXJSZW5k
ZXJlckNocm9taXVtLmRyYXdSZW5kZXJQYXNzKG1vY2tDbGllbnQucm9vdFJlbmRlclBhc3MoKSwg
RmxvYXRSZWN0KCkpOworICAgIGxheWVyUmVuZGVyZXJDaHJvbWl1bS5maW5pc2hEcmF3aW5nRnJh
bWUoKTsKKworICAgIC8vIE9uIERFQlVHIGJ1aWxkcywgb3BhcXVlIHJlbmRlciBwYXNzZXMgY2xl
YXIgdG8gYmx1ZSB0byBlYXNpbHkgc2VlCisgICAgLy8gcmVnaW9ucyB0aGF0IHdlcmUgbm90IGRy
YXduIG9uIHRoZSBzY3JlZW4uCisjaWYgZGVmaW5lZChOREVCVUcpCisgICAgRVhQRUNUX0VRKDAs
IHN0YXRpY19jYXN0PENsZWFyQ291bnRpbmdDb250ZXh0Kj4oR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0QoY29udGV4dC5nZXQoKSkpLT5jbGVhckNv
dW50KCkpOworI2Vsc2UKKyAgICBFWFBFQ1RfRVEoMSwgc3RhdGljX2Nhc3Q8Q2xlYXJDb3VudGlu
Z0NvbnRleHQqPihHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0Nv
bnRleHQzRChjb250ZXh0LmdldCgpKSktPmNsZWFyQ291bnQoKSk7CisjZW5kaWYKK30KKworVEVT
VChMYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0MiwgdHJhbnNwYXJlbnRSZW5kZXJQYXNzKQorewor
ICAgIEZha2VDQ1JlbmRlcmVyQ2xpZW50IG1vY2tDbGllbnQodHJ1ZSk7CisgICAgUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVh
dGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dChhZG9wdFB0cihuZXcgQ2xlYXJDb3VudGlu
Z0NvbnRleHQpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cp
OworICAgIEZha2VMYXllclJlbmRlcmVyQ2hyb21pdW0gbGF5ZXJSZW5kZXJlckNocm9taXVtKCZt
b2NrQ2xpZW50LCBjb250ZXh0KTsKKworICAgIEVYUEVDVF9UUlVFKGxheWVyUmVuZGVyZXJDaHJv
bWl1bS5pbml0aWFsaXplKCkpOworCisgICAgbGF5ZXJSZW5kZXJlckNocm9taXVtLmJlZ2luRHJh
d2luZ0ZyYW1lKG1vY2tDbGllbnQucm9vdFJlbmRlclBhc3MoKSk7CisgICAgbGF5ZXJSZW5kZXJl
ckNocm9taXVtLmRyYXdSZW5kZXJQYXNzKG1vY2tDbGllbnQucm9vdFJlbmRlclBhc3MoKSwgRmxv
YXRSZWN0KCkpOworICAgIGxheWVyUmVuZGVyZXJDaHJvbWl1bS5maW5pc2hEcmF3aW5nRnJhbWUo
KTsKKworICAgIEVYUEVDVF9FUSgxLCBzdGF0aWNfY2FzdDxDbGVhckNvdW50aW5nQ29udGV4dCo+
KEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29udGV4dDNEKGNv
bnRleHQuZ2V0KCkpKS0+Y2xlYXJDb3VudCgpKTsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146472</attachid>
            <date>2012-06-07 21:40:34 -0700</date>
            <delta_ts>2012-06-08 13:16:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87821-20120608004034.patch</filename>
            <type>text/plain</type>
            <size>27765</size>
            <attacher name="David Reveman">reveman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5NzkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCBjMDU3MTc2ZDE5ODFi
ZWFjNmNlZWZiYTQxOTZiMDExMWQ4ZDI2MDgyLi41MTNkMWIxMjEzMGU5NjBkNjMxMjJlMTNkM2Fm
Y2YzNzVjYzRjZGNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMi0wNi0wNyAg
RGF2aWQgUmV2ZW1hbiAgPHJldmVtYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1
bV0gQ29tcG9zaXRvciBkb2Vzbid0IHN1cHBvcnQgdHJhbnNsdWNlbnQgcm9vdCBsYXllcnMuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzgyMQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogY2hyb21pdW0v
cHVibGljL1dlYkxheWVyVHJlZVZpZXcuaDoKKyAgICAgICAgKFdlYkxheWVyVHJlZVZpZXcpOgor
CiAyMDEyLTA2LTA2ICBNYXJrIFBpbGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBbQ2hyb21pdW1dIE1vdmUgY3JlYXRlTWVzc2FnZVBvcnRDaGFubmVsIHRvIFBsYXRmb3Jt
LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCBkNzJjYTVkNTg0MzBhZjQyOThmMmYxN2RmODRkODA5OGQwYzE1Yjlj
Li5lYzM0NzliNWY0MmZhMDFmN2ZkODljNTE2NTUzMTkyYjcxMTdhOTQzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNTEgQEAKKzIwMTItMDYtMDcgIERhdmlkIFJldmVtYW4gIDxyZXZlbWFuQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIENvbXBvc2l0b3IgZG9lc24ndCBzdXBwb3J0
IHRyYW5zbHVjZW50IHJvb3QgbGF5ZXJzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODc4MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBGb3J3YXJkIHRoZSBpc1RyYW5zcGFyZW50IFdlYlZpZXcgc2V0dGlu
ZyB0byBXZWJMYXllclRyZWVWaWV3LAorICAgICAgICBDQ0xheWVyVHJlZUhvc3QgYW5kIENDTGF5
ZXJUcmVlSG9zdEltcGwgYXMgaGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kLgorICAgICAgICBVc2Ug
aGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kIHNldHRpbmcgdG8gZGV0ZXJtaW5lIGhvdyB0byBjbGVh
ciB0aGUKKyAgICAgICAgcm9vdCByZW5kZXIgcGFzcyBhbmQgZHJhdyB0aGUgYmFja2dyb3VuZC4g
U2V0IG9wYXF1ZSBmbGFnIGNvcnJlY3RseQorICAgICAgICBvbiB0aGUgTm9uQ29tcG9zaXRlZENv
bnRlbnRIb3N0J3MgZ3JhcGhpY3MgbGF5ZXIgdG8gbWFrZSBzdXJlCisgICAgICAgIHN1Yi1waXhl
bCByZW5kZXJpbmcgaXMgbm90IHVzZWQgd2l0aCBhIHRyYW5zcGFyZW50IFdlYlZpZXcuCisKKyAg
ICAgICAgVW5pdCB0ZXN0czogQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuaGFzVHJhbnNwYXJlbnRC
YWNrZ3JvdW5kCisgICAgICAgICAgICAgICAgICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bVRlc3Qy
Lm9wYXF1ZVJlbmRlclBhc3MKKyAgICAgICAgICAgICAgICAgICAgTGF5ZXJSZW5kZXJlckNocm9t
aXVtVGVzdDIudHJhbnNwYXJlbnRSZW5kZXJQYXNzCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9CaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1Vw
ZGF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
Y2xlYXJSZW5kZXJQYXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZHJhd1JlbmRlclBhc3MpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3QmFja2dyb3VuZEZpbHRlcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAoTGF5ZXJSZW5kZXJl
ckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1
cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNrUGlj
dHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6Q0NMYXllclRyZWVIb3N0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6ZmluaXNoQ29tbWl0T25JbXBsVGhyZWFkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3Qu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2V0SGFzVHJhbnNwYXJlbnRC
YWNrZ3JvdW5kKToKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJlZUhvc3RJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3Nl
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6aGFzVHJh
bnNwYXJlbnRCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdElt
cGw6OnNldEhhc1RyYW5zcGFyZW50QmFja2dyb3VuZCk6CisgICAgICAgIChDQ0xheWVyVHJlZUhv
c3RJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRl
clBhc3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNzOjpDQ1JlbmRlclBhc3Mp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5o
OgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNzOjpoYXNUcmFuc3BhcmVudEJhY2tncm91
bmQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNzOjpzZXRIYXNUcmFuc3BhcmVudEJh
Y2tncm91bmQpOgorICAgICAgICAoQ0NSZW5kZXJQYXNzKToKKwogMjAxMi0wNi0wNyAgVmljdG9y
IENhcmJ1bmUgIDx2aWN0b3JAcm9zZWR1Lm9yZz4KIAogICAgICAgICBhZGRUZXh0VHJhY2sgc2hv
dWxkIHNldCB0cmFjayBtb2RlIHRvIEhJRERFTgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRl
eCA2NWI5YjUwYmM2N2IyYjEzNmE0ODc1MmM0YThiZGU0ZmMzMDBiNmZmLi43NDEwZjkxODBlZDZj
M2E2MmEzYjAxNDQ2ZWZkZmI3NjU5YWFjNGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDI5IEBACisyMDEyLTA2LTA3ICBEYXZpZCBSZXZlbWFuICA8cmV2ZW1hbkBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBDb21wb3NpdG9yIGRvZXNuJ3Qgc3VwcG9y
dCB0cmFuc2x1Y2VudCByb290IGxheWVycy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTg3ODIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBzcmMvTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6Tm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0OjpzZXRPcGFxdWUpOgorICAg
ICAgICAoV2ViS2l0KToKKyAgICAgICAgKiBzcmMvTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0Lmg6
CisgICAgICAgIChOb25Db21wb3NpdGVkQ29udGVudEhvc3QpOgorICAgICAgICAqIHNyYy9XZWJM
YXllclRyZWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6c2V0
SGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICog
c3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldElz
VHJhbnNwYXJlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVy
YXRlZENvbXBvc2l0aW5nQWN0aXZlKToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RJ
bXBsVGVzdC5jcHA6CisgICAgICAgICogdGVzdHMvTGF5ZXJSZW5kZXJlckNocm9taXVtVGVzdC5j
cHA6CisgICAgICAgIChDbGVhckNvdW50aW5nQ29udGV4dCk6CisgICAgICAgIChDbGVhckNvdW50
aW5nQ29udGV4dDo6Q2xlYXJDb3VudGluZ0NvbnRleHQpOgorICAgICAgICAoQ2xlYXJDb3VudGlu
Z0NvbnRleHQ6OmNsZWFyKToKKyAgICAgICAgKENsZWFyQ291bnRpbmdDb250ZXh0OjpjbGVhckNv
dW50KToKKyAgICAgICAgKFRFU1QpOgorCiAyMDEyLTA2LTA3ICBOaWNvIFdlYmVyICA8dGhha2lz
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW0vbWFjXSBJbXByb3ZlIGRldmljZURQ
SSwgcmVjdCwgYW5kIGF2YWlsYWJsZVJlY3QgY29tcHV0YXRpb24KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViTGF5ZXJUcmVlVmlldy5oIGIvU291cmNlL1Bs
YXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJMYXllclRyZWVWaWV3LmgKaW5kZXggMjNkMGQ2M2Nl
OWRkMjhhNWI1YmFkNzEyOGVhYTE0OWE5NzNiOWRlNi4uZmY1ZjhhNDM5OWVkNjI0YjRlY2U0ZDFl
OWU2NWRiODkyMTRlOTliNiAxMDA2NDQKLS0tIGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1
YmxpYy9XZWJMYXllclRyZWVWaWV3LmgKKysrIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1
YmxpYy9XZWJMYXllclRyZWVWaWV3LmgKQEAgLTExOCw2ICsxMTgsOSBAQCBwdWJsaWM6CiAgICAg
Ly8gU2V0cyB0aGUgYmFja2dyb3VuZCBjb2xvciBmb3IgdGhlIHZpZXdwb3J0LgogICAgIFdFQktJ
VF9FWFBPUlQgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoV2ViQ29sb3IpOwogCisgICAgLy8gU2V0
cyB0aGUgYmFja2dyb3VuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSB2aWV3cG9ydC4KKyAgICBXRUJL
SVRfRVhQT1JUIHZvaWQgc2V0SGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKGJvb2wpOworCiAgICAg
Ly8gU2V0cyB3aGV0aGVyIHRoaXMgdmlldyBpcyB2aXNpYmxlLiBJbiB0aHJlYWRlZCBtb2RlLCBh
IHZpZXcgdGhhdCBpcyBub3QgdmlzaWJsZSB3aWxsIG5vdAogICAgIC8vIGNvbXBvc2l0ZSBvciB0
cmlnZ2VyIHVwZGF0ZUFuaW1hdGlvbnMoKSBvciBsYXlvdXQoKSBjYWxscyB1bnRpbCBpdCBiZWNv
bWVzIHZpc2libGUuCiAgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldFZpc2libGUoYm9vbCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9CaXRt
YXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCmlu
ZGV4IDgyNDVhYTllNjg4NDg2MGI2ZDJiMWZlOWY0MDRjZDViNzRkMmUxMzUuLmQyMDVhMTdmZmVk
ODUyMjBiODBkYTFlYjUwYmExZmZkYWU0MGI5OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Jp
dG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCkBAIC04OCw4ICs4OCw5IEBAIHZvaWQg
Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IElu
dFJlY3QmIGNvbnRlbnRSZWN0CiAgICAgLy8gQXNzdW1wdGlvbjogaWYgYSB0aWxlciBpcyB1c2lu
ZyBib3JkZXIgdGV4ZWxzLCB0aGVuIGl0IGlzIGJlY2F1c2UgdGhlCiAgICAgLy8gbGF5ZXIgaXMg
bGlrZWx5IHRvIGJlIGZpbHRlcmVkIG9yIHRyYW5zZm9ybWVkLiBCZWNhdXNlIG9mIGl0IG1pZ2h0
IGJlCiAgICAgLy8gdHJhbnNmb3JtZWQsIGRyYXcgdGhlIHRleHQgaW4gZ3JheXNjYWxlIGluc3Rl
YWQgb2Ygc3VicGl4ZWwgYW50aWFsaWFzaW5nLgorICAgIGJvb2wgdXNlR3JheXNjYWxlVGV4dCA9
IGJvcmRlclRleGVscyB8fCAhbGF5ZXJJc09wYXF1ZTsKICAgICBQbGF0Zm9ybUNhbnZhczo6UGFp
bnRlcjo6VGV4dE9wdGlvbiB0ZXh0T3B0aW9uID0KLSAgICAgICAgYm9yZGVyVGV4ZWxzID8gUGxh
dGZvcm1DYW52YXM6OlBhaW50ZXI6OkdyYXlzY2FsZVRleHQgOiBQbGF0Zm9ybUNhbnZhczo6UGFp
bnRlcjo6U3VicGl4ZWxUZXh0OworICAgICAgICB1c2VHcmF5c2NhbGVUZXh0ID8gUGxhdGZvcm1D
YW52YXM6OlBhaW50ZXI6OkdyYXlzY2FsZVRleHQgOiBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlcjo6
U3VicGl4ZWxUZXh0OwogICAgIFBsYXRmb3JtQ2FudmFzOjpQYWludGVyIGNhbnZhc1BhaW50ZXIo
Jm1fY2FudmFzLCB0ZXh0T3B0aW9uKTsKICAgICBjYW52YXNQYWludGVyLnNraWFDb250ZXh0KCkt
PnNldFRyYWNrT3BhcXVlUmVnaW9uKCFsYXllcklzT3BhcXVlKTsKICAgICBwYWludENvbnRlbnRz
KCpjYW52YXNQYWludGVyLmNvbnRleHQoKSwgKmNhbnZhc1BhaW50ZXIuc2tpYUNvbnRleHQoKSwg
Y29udGVudFJlY3QsIGNvbnRlbnRzU2NhbGUsIHJlc3VsdGluZ09wYXF1ZVJlY3QpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggNTVjZjc0ZjJmODQxZTJiZjJlYzll
NDY3YzFmNTdiMDc5Y2FlOWZlZS4uNzgwZmMzMmUzYTNmM2YxMTA4OGFkNjY1Y2FkZmI5ZTAwNTBk
N2I4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC00MDIsMTUg
KzQwMiwxNCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dmlld3BvcnRDaGFuZ2VkKCkK
ICAgICBtX2N1cnJlbnRSZW5kZXJQYXNzID0gMDsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmNsZWFyUmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3MsIGNv
bnN0IENDUmVuZGVyUGFzcyogcm9vdFJlbmRlclBhc3MsIGNvbnN0IEZsb2F0UmVjdCYgZnJhbWVi
dWZmZXJEYW1hZ2VSZWN0KQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFyUmVuZGVy
UGFzcyhjb25zdCBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3MsIGNvbnN0IEZsb2F0UmVjdCYgZnJh
bWVidWZmZXJEYW1hZ2VSZWN0KQogewotICAgIC8vIE5vbi1yb290IGxheWVycyBzaG91bGQgY2xl
YXIgdGhlaXIgZW50aXJlIGNvbnRlbnRzIHRvIHRyYW5zcGFyZW50LiBPbiBERUJVRyBidWlsZHMs
IHRoZSByb290IGxheWVyCi0gICAgLy8gaXMgY2xlYXJlZCB0byBibHVlIHRvIGVhc2lseSBzZWUg
cmVnaW9ucyB0aGF0IHdlcmUgbm90IGRyYXduIG9uIHRoZSBzY3JlZW4uIElmIHdlCisgICAgLy8g
T24gREVCVUcgYnVpbGRzLCBvcGFxdWUgcmVuZGVyIHBhc3NlcyBhcmUgY2xlYXJlZCB0byBibHVl
IHRvIGVhc2lseSBzZWUgcmVnaW9ucyB0aGF0IHdlcmUgbm90IGRyYXduIG9uIHRoZSBzY3JlZW4u
IElmIHdlCiAgICAgLy8gYXJlIHVzaW5nIHBhcnRpYWwgc3dhcCAvIHNjaXNzb3Igb3B0aW1pemF0
aW9uLCB0aGVuIHRoZSBzdXJmYWNlIHNob3VsZCBvbmx5CiAgICAgLy8gY2xlYXIgdGhlIGRhbWFn
ZWQgcmVnaW9uLCBzbyB0aGF0IHdlIGRvbid0IGFjY2lkZW50YWxseSBjbGVhciB1bi1jaGFuZ2Vk
IHBvcnRpb25zCiAgICAgLy8gb2YgdGhlIHNjcmVlbi4KIAotICAgIGlmIChyZW5kZXJQYXNzICE9
IHJvb3RSZW5kZXJQYXNzKQorICAgIGlmIChyZW5kZXJQYXNzLT5oYXNUcmFuc3BhcmVudEJhY2tn
cm91bmQoKSkKICAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5jbGVhckNvbG9yKDAs
IDAsIDAsIDApKTsKICAgICBlbHNlCiAgICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+
Y2xlYXJDb2xvcigwLCAwLCAxLCAxKSk7CkBAIC00MjEsNyArNDIwLDcgQEAgdm9pZCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmNsZWFyUmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBhc3MqIHJlbmRl
clBhc3MsIGNvbnMKICAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5kaXNhYmxlKEdy
YXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKIAogI2lmIGRlZmluZWQoTkRFQlVHKQot
ICAgIGlmIChyZW5kZXJQYXNzICE9IHJvb3RSZW5kZXJQYXNzKQorICAgIGlmIChyZW5kZXJQYXNz
LT5oYXNUcmFuc3BhcmVudEJhY2tncm91bmQoKSkKICNlbmRpZgogICAgICAgICBtX2NvbnRleHQt
PmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUKTsKIApAQCAtNDc1LDcg
KzQ3NCw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UmVuZGVyUGFzcyhjb25z
dCBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3MsIGNvbnN0CiAgICAgaWYgKCF1c2VSZW5kZXJQYXNz
KHJlbmRlclBhc3MpKQogICAgICAgICByZXR1cm47CiAKLSAgICBjbGVhclJlbmRlclBhc3MocmVu
ZGVyUGFzcywgbV9kZWZhdWx0UmVuZGVyUGFzcywgZnJhbWVidWZmZXJEYW1hZ2VSZWN0KTsKKyAg
ICBjbGVhclJlbmRlclBhc3MocmVuZGVyUGFzcywgZnJhbWVidWZmZXJEYW1hZ2VSZWN0KTsKIAog
ICAgIGNvbnN0IENDUXVhZExpc3QmIHF1YWRMaXN0ID0gcmVuZGVyUGFzcy0+cXVhZExpc3QoKTsK
ICAgICBmb3IgKENDUXVhZExpc3Q6OmNvbnN0QmFja1RvRnJvbnRJdGVyYXRvciBpdCA9IHF1YWRM
aXN0LmJhY2tUb0Zyb250QmVnaW4oKTsgaXQgIT0gcXVhZExpc3QuYmFja1RvRnJvbnRFbmQoKTsg
KytpdCkKQEAgLTYxNSwxMCArNjE0LDExIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1CiAgICAg
aWYgKHF1YWQtPmJhY2tncm91bmRGaWx0ZXJzKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICAvLyBGSVhNRTogV2Ugb25seSBhbGxvdyBiYWNrZ3JvdW5kIGZpbHRlcnMgb24gdGhl
IHJvb3QgcmVuZGVyIHN1cmZhY2UgYmVjYXVzZSBvdGhlciBzdXJmYWNlcyBtYXkgY29udGFpbgor
ICAgIC8vIEZJWE1FOiBXZSBvbmx5IGFsbG93IGJhY2tncm91bmQgZmlsdGVycyBvbiBhbiBvcGFx
dWUgcmVuZGVyIHN1cmZhY2UgYmVjYXVzZSBvdGhlciBzdXJmYWNlcyBtYXkgY29udGFpbgogICAg
IC8vIHRyYW5zbHVjZW50IHBpeGVscywgYW5kIHRoZSBjb250ZW50cyBiZWhpbmQgdGhvc2UgdHJh
bnNsdWNlbnQgcGl4ZWxzIHdvdWxkbid0IGhhdmUgdGhlIGZpbHRlciBhcHBsaWVkLgotICAgIGlm
ICghaXNDdXJyZW50UmVuZGVyUGFzcyhtX2RlZmF1bHRSZW5kZXJQYXNzKSkKKyAgICBpZiAobV9j
dXJyZW50UmVuZGVyUGFzcy0+aGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKCkpCiAgICAgICAgIHJl
dHVybjsKKyAgICBBU1NFUlQoIW1fY3VycmVudE1hbmFnZWRUZXh0dXJlKTsKIAogICAgIC8vIEZJ
WE1FOiBEbyBhIHNpbmdsZSByZWFkYmFjayBmb3IgYm90aCB0aGUgc3VyZmFjZSBhbmQgcmVwbGlj
YSBhbmQgY2FjaGUgdGhlIGZpbHRlcmVkIHJlc3VsdHMgKG9uY2UgZmlsdGVyIHRleHR1cmVzIGFy
ZSBub3QgcmV1c2VkKS4KICAgICBJbnRSZWN0IGRldmljZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0
KENDTWF0aFV0aWw6Om1hcENsaXBwZWRSZWN0KGNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtLCBzaGFy
ZWRHZW9tZXRyeVF1YWQoKS5ib3VuZGluZ0JveCgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5oCmluZGV4IGZhNTJiNzM1N2ZjZGNkZTE5ZWM2NDAzZjhkYjg5ZmZkZDNhOWEwMmYu
LjgyYmQ2OTE3NDYxYjc2MTRhY2U0YzBmMWIyZTIzYTQwNTdkZjEwY2YgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC0xNTIsNyArMTUyLDcgQEAgcHJpdmF0ZToKIAogICAg
IGJvb2wgYmluZEZyYW1lYnVmZmVyVG9UZXh0dXJlKE1hbmFnZWRUZXh0dXJlKiwgY29uc3QgSW50
UmVjdCYgdmlld3BvcnRSZWN0KTsKIAotICAgIHZvaWQgY2xlYXJSZW5kZXJQYXNzKGNvbnN0IEND
UmVuZGVyUGFzcyosIGNvbnN0IENDUmVuZGVyUGFzcyogcm9vdFJlbmRlclBhc3MsIGNvbnN0IEZs
b2F0UmVjdCYgZnJhbWVidWZmZXJEYW1hZ2VSZWN0KTsKKyAgICB2b2lkIGNsZWFyUmVuZGVyUGFz
cyhjb25zdCBDQ1JlbmRlclBhc3MqLCBjb25zdCBGbG9hdFJlY3QmIGZyYW1lYnVmZmVyRGFtYWdl
UmVjdCk7CiAKICAgICB2b2lkIHJlbGVhc2VSZW5kZXJQYXNzVGV4dHVyZXMoKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tQaWN0dXJl
Q2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcApp
bmRleCAzOTMyN2QwMmE1NmFmOGQ3NjdhOTk5ODIyNGNkMjQyY2FlZDQ1NDI5Li5iNDk5MDEyZTYx
YjUzN2FjOTU0Y2VhMTM4ZjljMTg4MjM2MzFhNTY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVV
cGRhdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcApAQCAtNTgsNyArNTgsOCBA
QCB2b2lkIFNrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0
ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UgogICAgIC8vIGxheWVyIGlzIGxpa2VseSB0byBiZSBm
aWx0ZXJlZCBvciB0cmFuc2Zvcm1lZC4gQmVjYXVzZSBpdCBtaWdodCBiZQogICAgIC8vIHRyYW5z
Zm9ybWVkLCBzZXQgaW1hZ2UgYnVmZmVyIGZsYWcgdG8gZHJhdyB0aGUgdGV4dCBpbiBncmF5c2Nh
bGUKICAgICAvLyBpbnN0ZWFkIG9mIHVzaW5nIHN1YnBpeGVsIGFudGlhbGlhc2luZy4KLSAgICBw
bGF0Zm9ybUNvbnRleHQuc2V0RHJhd2luZ1RvSW1hZ2VCdWZmZXIoYm9yZGVyVGV4ZWxzID8gdHJ1
ZSA6IGZhbHNlKTsKKyAgICBib29sIHVzZUdyYXlzY2FsZVRleHQgPSBib3JkZXJUZXhlbHMgfHwg
IW1fbGF5ZXJJc09wYXF1ZTsKKyAgICBwbGF0Zm9ybUNvbnRleHQuc2V0RHJhd2luZ1RvSW1hZ2VC
dWZmZXIodXNlR3JheXNjYWxlVGV4dCk7CiAgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29u
dGV4dCgmcGxhdGZvcm1Db250ZXh0KTsKICAgICBwYWludENvbnRlbnRzKGdyYXBoaWNzQ29udGV4
dCwgcGxhdGZvcm1Db250ZXh0LCBjb250ZW50UmVjdCwgY29udGVudHNTY2FsZSwgcmVzdWx0aW5n
T3BhcXVlUmVjdCk7CiAgICAgbV9waWN0dXJlLmVuZFJlY29yZGluZygpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggZmEwZWI2NGMzNjViMThkZTBkOTY5ZmM4M2U5YjQ4MzVh
Mzg2OTM0YS4uMGEwMTU0YzNlZmUzZTAzYmE1MDQ4ZjFiNjg0YTI1YTg0NDFiNGZkYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC04Niw2ICs4Niw3IEBAIENDTGF5ZXJUcmVl
SG9zdDo6Q0NMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW50LCBjb25z
dCBDQ1NldHRpbmdzCiAgICAgLCBtX21heFBhZ2VTY2FsZUZhY3RvcigxKQogICAgICwgbV90cmln
Z2VySWRsZVBhaW50cyh0cnVlKQogICAgICwgbV9iYWNrZ3JvdW5kQ29sb3IoQ29sb3I6OndoaXRl
KQorICAgICwgbV9oYXNUcmFuc3BhcmVudEJhY2tncm91bmQoZmFsc2UpCiAgICAgLCBtX3BhcnRp
YWxUZXh0dXJlVXBkYXRlUmVxdWVzdHMoMCkKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNNYWlu
VGhyZWFkKCkpOwpAQCAtMjUyLDYgKzI1Myw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpmaW5p
c2hDb21taXRPbkltcGxUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCogaG9zdEltcGwpCiAgICAg
aG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZSh2aWV3cG9ydFNpemUoKSk7CiAgICAgaG9zdEltcGwt
PnNldFBhZ2VTY2FsZUZhY3RvckFuZExpbWl0cyhtX3BhZ2VTY2FsZUZhY3RvciwgbV9taW5QYWdl
U2NhbGVGYWN0b3IsIG1fbWF4UGFnZVNjYWxlRmFjdG9yKTsKICAgICBob3N0SW1wbC0+c2V0QmFj
a2dyb3VuZENvbG9yKG1fYmFja2dyb3VuZENvbG9yKTsKKyAgICBob3N0SW1wbC0+c2V0SGFzVHJh
bnNwYXJlbnRCYWNrZ3JvdW5kKG1faGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKTsKICAgICBob3N0
SW1wbC0+c2V0VmlzaWJsZShtX3Zpc2libGUpOwogICAgIGhvc3RJbXBsLT5zZXRTb3VyY2VGcmFt
ZUNhbkJlRHJhd24obV9mcmFtZUlzRm9yRGlzcGxheSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0LmgKaW5kZXggNDM0YWVjMjc0MjIwMWM1ZjZkNWI0OWNjNTM3ZTE4MDM5YzJjODY0ZC4uNDgx
ZDNjZTYxZTllOTI5Mjc5YTA1MGQzMWNhNGVmODhlNzJiMjc2MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmgKQEAgLTIzMSw2ICsyMzEsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldEJh
Y2tncm91bmRDb2xvcihjb25zdCBDb2xvciYgY29sb3IpIHsgbV9iYWNrZ3JvdW5kQ29sb3IgPSBj
b2xvcjsgfQogCisgICAgdm9pZCBzZXRIYXNUcmFuc3BhcmVudEJhY2tncm91bmQoYm9vbCB0cmFu
c3BhcmVudCkgeyBtX2hhc1RyYW5zcGFyZW50QmFja2dyb3VuZCA9IHRyYW5zcGFyZW50OyB9CisK
ICAgICBUZXh0dXJlTWFuYWdlciogY29udGVudHNUZXh0dXJlTWFuYWdlcigpIGNvbnN0OwogICAg
IHZvaWQgc2V0Q29udGVudHNNZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlcyhzaXplX3QpOwogCkBA
IC0zMDksNiArMzExLDcgQEAgcHJpdmF0ZToKICAgICBmbG9hdCBtX21pblBhZ2VTY2FsZUZhY3Rv
ciwgbV9tYXhQYWdlU2NhbGVGYWN0b3I7CiAgICAgYm9vbCBtX3RyaWdnZXJJZGxlUGFpbnRzOwog
ICAgIENvbG9yIG1fYmFja2dyb3VuZENvbG9yOworICAgIGJvb2wgbV9oYXNUcmFuc3BhcmVudEJh
Y2tncm91bmQ7CiAKICAgICBUZXh0dXJlTGlzdCBtX2RlbGV0ZVRleHR1cmVBZnRlckNvbW1pdExp
c3Q7CiAgICAgc2l6ZV90IG1fcGFydGlhbFRleHR1cmVVcGRhdGVSZXF1ZXN0czsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXggNWIxM2UxYjhlY2I1NmY4MTFiNjE2
NzRlYTI4MTE0ZWE0YzcwMDM2Yi4uYjdiMWMzMTE5ZTIyOGZiNWRlOTllZmFmMDVjNGZiZjg0YTEw
M2E0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTEyNCw2
ICsxMjQsNyBAQCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJlZUhvc3RJbXBsKGNvbnN0
IENDU2V0dGluZ3MmIHNldHRpbmdzLCBDQ0xheWVyVHJlZQogICAgICwgbV9zZW50UGFnZVNjYWxl
RGVsdGEoMSkKICAgICAsIG1fbWluUGFnZVNjYWxlKDApCiAgICAgLCBtX21heFBhZ2VTY2FsZSgw
KQorICAgICwgbV9oYXNUcmFuc3BhcmVudEJhY2tncm91bmQoZmFsc2UpCiAgICAgLCBtX25lZWRz
QW5pbWF0ZUxheWVycyhmYWxzZSkKICAgICAsIG1fcGluY2hHZXN0dXJlQWN0aXZlKGZhbHNlKQog
ICAgICwgbV9mcHNDb3VudGVyKENDRnJhbWVSYXRlQ291bnRlcjo6Y3JlYXRlKCkpCkBAIC0zMjQs
NyArMzI1LDEwIEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyUGFz
c2VzKENDUmVuZGVyUGFzc0xpc3QmIHBhc3NlcywgQ0NMYXllCiAgICAgICAgIG9jY2x1c2lvblRy
YWNrZXIubGVhdmVMYXllcihpdCk7CiAgICAgfQogCi0gICAgcGFzc2VzLmxhc3QoKS0+YXBwZW5k
UXVhZHNUb0ZpbGxTY3JlZW4obV9yb290TGF5ZXJJbXBsLmdldCgpLCBtX2JhY2tncm91bmRDb2xv
ciwgb2NjbHVzaW9uVHJhY2tlcik7CisgICAgaWYgKCFtX2hhc1RyYW5zcGFyZW50QmFja2dyb3Vu
ZCkgeworICAgICAgICBwYXNzZXMubGFzdCgpLT5zZXRIYXNUcmFuc3BhcmVudEJhY2tncm91bmQo
ZmFsc2UpOworICAgICAgICBwYXNzZXMubGFzdCgpLT5hcHBlbmRRdWFkc1RvRmlsbFNjcmVlbiht
X3Jvb3RMYXllckltcGwuZ2V0KCksIG1fYmFja2dyb3VuZENvbG9yLCBvY2NsdXNpb25UcmFja2Vy
KTsKKyAgICB9CiAKICAgICBpZiAoZHJhd0ZyYW1lKQogICAgICAgICBvY2NsdXNpb25UcmFja2Vy
Lm92ZXJkcmF3TWV0cmljcygpLnJlY29yZE1ldHJpY3ModGhpcyk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsLmgKaW5kZXggYzc0MGE2NjIwMmY0YmQwZjFiM2QwNjA2ZDNhZWJhOTQ4
OWQyMDA5Mi4uMDgzMjA0YjNiZmQ4YTQ5YmQ5NjA1MjQ1NTU0OTdhZmI0MTAxYjViYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApAQCAtMTU5LDYgKzE1OSw5IEBAIHB1Ymxp
YzoKICAgICBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9i
YWNrZ3JvdW5kQ29sb3I7IH0KICAgICB2b2lkIHNldEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xv
ciYgY29sb3IpIHsgbV9iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjsgfQogCisgICAgYm9vbCBoYXNU
cmFuc3BhcmVudEJhY2tncm91bmQoKSBjb25zdCB7IHJldHVybiBtX2hhc1RyYW5zcGFyZW50QmFj
a2dyb3VuZDsgfQorICAgIHZvaWQgc2V0SGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKGJvb2wgdHJh
bnNwYXJlbnQpIHsgbV9oYXNUcmFuc3BhcmVudEJhY2tncm91bmQgPSB0cmFuc3BhcmVudDsgfQor
CiAgICAgYm9vbCBuZWVkc0FuaW1hdGVMYXllcnMoKSBjb25zdCB7IHJldHVybiBtX25lZWRzQW5p
bWF0ZUxheWVyczsgfQogICAgIHZvaWQgc2V0TmVlZHNBbmltYXRlTGF5ZXJzKCkgeyBtX25lZWRz
QW5pbWF0ZUxheWVycyA9IHRydWU7IH0KIApAQCAtMjI3LDYgKzIzMCw3IEBAIHByaXZhdGU6CiAg
ICAgZmxvYXQgbV9taW5QYWdlU2NhbGUsIG1fbWF4UGFnZVNjYWxlOwogCiAgICAgQ29sb3IgbV9i
YWNrZ3JvdW5kQ29sb3I7CisgICAgYm9vbCBtX2hhc1RyYW5zcGFyZW50QmFja2dyb3VuZDsKIAog
ICAgIC8vIElmIHRoaXMgaXMgdHJ1ZSwgaXQgaXMgbmVjZXNzYXJ5IHRvIHRyYXZlcnNlIHRoZSBs
YXllciB0cmVlIHRpY2tpbmcgdGhlIGFuaW1hdG9ycy4KICAgICBib29sIG1fbmVlZHNBbmltYXRl
TGF5ZXJzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAKaW5kZXggMGUzYWZjMDQ2OTJlMGJkYmI1
ZTRjYzZhYTE0NDA2ZDhhMWQ5YWY4ZC4uYTU1ZmViODVjNDU0ZDc0ZTU3Y2JiMzViODg0Njg1YjQw
NTBlM2Q5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwCkBAIC00NSw2ICs0NSw3IEBAIFBh
c3NPd25QdHI8Q0NSZW5kZXJQYXNzPiBDQ1JlbmRlclBhc3M6OmNyZWF0ZShDQ1JlbmRlclN1cmZh
Y2UqIHRhcmdldFN1cmZhY2UpCiBDQ1JlbmRlclBhc3M6OkNDUmVuZGVyUGFzcyhDQ1JlbmRlclN1
cmZhY2UqIHRhcmdldFN1cmZhY2UpCiAgICAgOiBtX3RhcmdldFN1cmZhY2UodGFyZ2V0U3VyZmFj
ZSkKICAgICAsIG1fZnJhbWVidWZmZXJPdXRwdXRSZWN0KHRhcmdldFN1cmZhY2UtPmNvbnRlbnRS
ZWN0KCkpCisgICAgLCBtX2hhc1RyYW5zcGFyZW50QmFja2dyb3VuZCh0cnVlKQogewogICAgIEFT
U0VSVChtX3RhcmdldFN1cmZhY2UpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuaAppbmRleCA2NDlk
YmFjZGNkYTlmYTAwN2RiN2UwYjJkMWJlMWUzMDk1ZTA5YTRmLi5hNDUxMDA2Y2U4OGIxMmIwNzIz
NzBkZmEyMjM5ZjgzODNiYTcxZmM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuaApAQCAtNjQsNiAr
NjQsOSBAQCBwdWJsaWM6CiAgICAgLy8gVGhpcyBkZW5vdGVzIHRoZSBib3VuZHMgaW4gcGh5c2lj
YWwgcGl4ZWxzIG9mIHRoZSBvdXRwdXQgZ2VuZXJhdGVkIGJ5IHRoaXMgUmVuZGVyUGFzcy4KICAg
ICBjb25zdCBJbnRSZWN0JiBmcmFtZWJ1ZmZlck91dHB1dFJlY3QoKSBjb25zdCB7IHJldHVybiBt
X2ZyYW1lYnVmZmVyT3V0cHV0UmVjdDsgfQogCisgICAgYm9vbCBoYXNUcmFuc3BhcmVudEJhY2tn
cm91bmQoKSBjb25zdCB7IHJldHVybiBtX2hhc1RyYW5zcGFyZW50QmFja2dyb3VuZDsgfQorICAg
IHZvaWQgc2V0SGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKGJvb2wgdHJhbnNwYXJlbnQpIHsgbV9o
YXNUcmFuc3BhcmVudEJhY2tncm91bmQgPSB0cmFuc3BhcmVudDsgfQorCiBwcml2YXRlOgogICAg
IGV4cGxpY2l0IENDUmVuZGVyUGFzcyhDQ1JlbmRlclN1cmZhY2UqKTsKIApAQCAtNzEsNiArNzQs
NyBAQCBwcml2YXRlOgogICAgIENDUXVhZExpc3QgbV9xdWFkTGlzdDsKICAgICBJbnRSZWN0IG1f
ZnJhbWVidWZmZXJPdXRwdXRSZWN0OwogICAgIFZlY3RvcjxPd25QdHI8Q0NTaGFyZWRRdWFkU3Rh
dGU+ID4gbV9zaGFyZWRRdWFkU3RhdGVMaXN0OworICAgIGJvb2wgbV9oYXNUcmFuc3BhcmVudEJh
Y2tncm91bmQ7CiB9OwogCiB0eXBlZGVmIFZlY3RvcjxPd25QdHI8Q0NSZW5kZXJQYXNzPiA+IEND
UmVuZGVyUGFzc0xpc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9O
b25Db21wb3NpdGVkQ29udGVudEhvc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
Tm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LmNwcAppbmRleCA0Y2MxYzExNzdkYzhhZDUzZDFmMmQ5
ZDA0MzhmNmUzMzk2ZjQwMDhjLi45YWE2ZjE2N2ZiNzg5YTUwNjEyMmU0MTJiYjBlY2JmNDFmYzg1
Y2Y2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Ob25Db21wb3NpdGVk
Q29udGVudEhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL05vbkNvbXBv
c2l0ZWRDb250ZW50SG9zdC5jcHAKQEAgLTYyLDYgKzYyLDExIEBAIHZvaWQgTm9uQ29tcG9zaXRl
ZENvbnRlbnRIb3N0OjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImIGNv
bG9yKQogICAgIG1fZ3JhcGhpY3NMYXllci0+cGxhdGZvcm1MYXllcigpLT5zZXRCYWNrZ3JvdW5k
Q29sb3IoY29sb3IpOwogfQogCit2b2lkIE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdDo6c2V0T3Bh
cXVlKGJvb2wgb3BhcXVlKQoreworICAgIG1fZ3JhcGhpY3NMYXllci0+cGxhdGZvcm1MYXllcigp
LT5zZXRPcGFxdWUob3BhcXVlKTsKK30KKwogdm9pZCBOb25Db21wb3NpdGVkQ29udGVudEhvc3Q6
OnNldFNjcm9sbExheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGxheWVyKQogewogICAgIG1f
Z3JhcGhpY3NMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9Ob25Db21wb3NpdGVkQ29udGVudEhvc3QuaCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL05vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5oCmluZGV4IDMyMGU3YzFi
ZTQ5NDY5MGI4YWNhMzlmZDIyMjU5ODc5NTNkMjQ1NjMuLmM4N2JkOGMwOTg5YmE0OGQwODI2MjAy
MmUyY2MxMDk4YzAyZmViYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L05vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL05vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5oCkBAIC01Niw2ICs1Niw3IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgaW52YWxpZGF0ZVJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwogICAg
IHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJik7CisgICAgdm9p
ZCBzZXRPcGFxdWUoYm9vbCk7CiAgICAgdm9pZCBzZXRTY3JvbGxMYXllcihXZWJDb3JlOjpHcmFw
aGljc0xheWVyKik7CiAgICAgdm9pZCBzZXRWaWV3cG9ydChjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JiB2aWV3cG9ydFNpemUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNvbnRlbnRzU2l6ZSwgY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBmbG9hdCBkZXZpY2VTY2FsZSwg
aW50IGxheWVyQWRqdXN0WCk7CiAgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogdG9wTGV2ZWxS
b290TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2dyYXBoaWNzTGF5ZXIuZ2V0KCk7IH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXcuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmlldy5jcHAKaW5kZXggYWUy
MGFlYTlhMzU4M2U2MzQyNDlmNWJiNGRiNDA4ODI4NGQ4MjZmMS4uZmVkM2RiOTc1OTg1Yzc4YzM2
MjkxMjg3ODhhYzY0MWFmMDEzN2Y4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViTGF5ZXJUcmVlVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViTGF5ZXJUcmVlVmlldy5jcHAKQEAgLTEwNyw2ICsxMDcsMTEgQEAgdm9pZCBXZWJMYXll
clRyZWVWaWV3OjpzZXRCYWNrZ3JvdW5kQ29sb3IoV2ViQ29sb3IgY29sb3IpCiAgICAgbV9wcml2
YXRlLT5sYXllclRyZWVIb3N0KCktPnNldEJhY2tncm91bmRDb2xvcihjb2xvcik7CiB9CiAKK3Zv
aWQgV2ViTGF5ZXJUcmVlVmlldzo6c2V0SGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKGJvb2wgdHJh
bnNwYXJlbnQpCit7CisgICAgbV9wcml2YXRlLT5sYXllclRyZWVIb3N0KCktPnNldEhhc1RyYW5z
cGFyZW50QmFja2dyb3VuZCh0cmFuc3BhcmVudCk7Cit9CisKIHZvaWQgV2ViTGF5ZXJUcmVlVmll
dzo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCiB7CiAgICAgbV9wcml2YXRlLT5sYXllclRyZWVI
b3N0KCktPnNldFZpc2libGUodmlzaWJsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJWaWV3SW1wbC5jcHAKaW5kZXggZjkwYjFmOGFmN2JkM2VhOWMyMmI2YzFkZmVlN2Q2NjBhYWQx
ODA5ZS4uYTQ0MDk3YmE0Yjg3YTkyN2ZjODMwMjg5Y2JhNGY4ZmU5YmQ3NzZiMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtMzAyNiw2ICszMDI2LDEx
IEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldElzVHJhbnNwYXJlbnQoYm9vbCBpc1RyYW5zcGFyZW50
KQogCiAgICAgLy8gRnV0dXJlIGZyYW1lcyBjaGVjayB0aGlzIHRvIGtub3cgd2hldGhlciB0byBi
ZSB0cmFuc3BhcmVudC4KICAgICBtX2lzVHJhbnNwYXJlbnQgPSBpc1RyYW5zcGFyZW50OworCisg
ICAgaWYgKG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0KQorICAgICAgICBtX25vbkNvbXBvc2l0
ZWRDb250ZW50SG9zdC0+c2V0T3BhcXVlKCFpc1RyYW5zcGFyZW50KTsKKworICAgIG1fbGF5ZXJU
cmVlVmlldy5zZXRIYXNUcmFuc3BhcmVudEJhY2tncm91bmQoaXNUcmFuc3BhcmVudCk7CiB9CiAK
IGJvb2wgV2ViVmlld0ltcGw6OmlzVHJhbnNwYXJlbnQoKSBjb25zdApAQCAtMzQ3NSw2ICszNDgw
LDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZl
KGJvb2wgYWN0aXZlKQogCiAgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0ID0gTm9u
Q29tcG9zaXRlZENvbnRlbnRIb3N0OjpjcmVhdGUoV2ViVmlld0ltcGxDb250ZW50UGFpbnRlcjo6
Y3JlYXRlKHRoaXMpKTsKICAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3QtPnNldFNo
b3dEZWJ1Z0JvcmRlcnMocGFnZSgpLT5zZXR0aW5ncygpLT5zaG93RGVidWdCb3JkZXJzKCkpOwor
ICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC0+c2V0T3BhcXVlKCFpc1RyYW5zcGFy
ZW50KCkpOwogCiAgICAgICAgIGlmIChtX3dlYlNldHRpbmdzLT5hcHBseURlZmF1bHREZXZpY2VT
Y2FsZUZhY3RvckluQ29tcG9zaXRvcigpICYmIHBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSAh
PSAxKSB7CiAgICAgICAgICAgICBBU1NFUlQocGFnZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpKTsK
QEAgLTM0ODksNiArMzQ5NSw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0FjdGl2ZShib29sIGFjdGl2ZSkKICAgICAgICAgICAgIG1fbGF5ZXJUcmVlVmll
dy5zZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMocGFnZVNjYWxlRmFjdG9yKCksIG1fbWluaW11
bVBhZ2VTY2FsZUZhY3RvciwgbV9tYXhpbXVtUGFnZVNjYWxlRmFjdG9yKTsKICAgICAgICAgICAg
IGlmIChtX2NvbXBvc2l0b3JTdXJmYWNlUmVhZHkpCiAgICAgICAgICAgICAgICAgbV9sYXllclRy
ZWVWaWV3LnNldFN1cmZhY2VSZWFkeSgpOworICAgICAgICAgICAgbV9sYXllclRyZWVWaWV3LnNl
dEhhc1RyYW5zcGFyZW50QmFja2dyb3VuZChpc1RyYW5zcGFyZW50KCkpOwogICAgICAgICAgICAg
dXBkYXRlTGF5ZXJUcmVlVmlld3BvcnQoKTsKICAgICAgICAgICAgIG1fY2xpZW50LT5kaWRBY3Rp
dmF0ZUNvbXBvc2l0b3IobV9sYXllclRyZWVWaWV3LmNvbXBvc2l0b3JJZGVudGlmaWVyKCkpOwog
ICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUgPSB0cnVlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBs
VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdElt
cGxUZXN0LmNwcAppbmRleCAxNjU3YzMzNDE4OTEzMDNjZWMzM2U2MDlkY2JkNzllNDFiMmNjNzlh
Li5lZWNlNWEwNjQ0Yzk1MjI1MDBkOTIzM2RiNTU0OWFjZDBjMjNhNTNlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0
LmNwcApAQCAtMTczNCw0ICsxNzM0LDM5IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVz
dCwgZG9udFVzZU9sZFJlc291cmNlc0FmdGVyTG9zdENvbnRleHQpCiAgICAgbV9ob3N0SW1wbC0+
c3dhcEJ1ZmZlcnMoKTsKIH0KIAorY2xhc3MgTW9ja0RyYXdRdWFkc1RvRmlsbFNjcmVlbkNvbnRl
eHQgOiBwdWJsaWMgRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEIHsKK3B1YmxpYzoKKyAgICBNT0NL
X01FVEhPRDEodXNlUHJvZ3JhbSwgdm9pZChXZWJHTElkIHByb2dyYW0pKTsKKyAgICBNT0NLX01F
VEhPRDQoZHJhd0VsZW1lbnRzLCB2b2lkKFdHQzNEZW51bSBtb2RlLCBXR0MzRHNpemVpIGNvdW50
LCBXR0MzRGVudW0gdHlwZSwgV0dDM0RpbnRwdHIgb2Zmc2V0KSk7Cit9OworCitURVNUX0YoQ0NM
YXllclRyZWVIb3N0SW1wbFRlc3QsIGhhc1RyYW5zcGFyZW50QmFja2dyb3VuZCkKK3sKKyAgICBN
b2NrRHJhd1F1YWRzVG9GaWxsU2NyZWVuQ29udGV4dCogbW9ja0NvbnRleHQgPSBuZXcgTW9ja0Ry
YXdRdWFkc1RvRmlsbFNjcmVlbkNvbnRleHQoKTsKKyAgICBSZWZQdHI8Q0NHcmFwaGljc0NvbnRl
eHQ+IGNvbnRleHQgPSBDQ0dyYXBoaWNzQ29udGV4dDo6Y3JlYXRlM0QoR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dChhZG9wdFB0ciht
b2NrQ29udGV4dCksIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRv
dykpOworCisgICAgLy8gUnVuIHRlc3QgY2FzZQorICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3RJ
bXBsPiBteUhvc3RJbXBsID0gY3JlYXRlTGF5ZXJUcmVlSG9zdChmYWxzZSwgY29udGV4dCwgQ0NM
YXllckltcGw6OmNyZWF0ZSgxKSk7CisgICAgbXlIb3N0SW1wbC0+c2V0QmFja2dyb3VuZENvbG9y
KENvbG9yOjp3aGl0ZSk7CisKKyAgICAvLyBWZXJpZnkgb25lIHF1YWQgaXMgZHJhd24gd2hlbiB0
cmFuc3BhcmVudCBiYWNrZ3JvdW5kIHNldCBpcyBub3Qgc2V0LgorICAgIG15SG9zdEltcGwtPnNl
dEhhc1RyYW5zcGFyZW50QmFja2dyb3VuZChmYWxzZSk7CisgICAgRVhQRUNUX0NBTEwoKm1vY2tD
b250ZXh0LCB1c2VQcm9ncmFtKF8pKQorICAgICAgICAuVGltZXMoMSk7CisgICAgRVhQRUNUX0NB
TEwoKm1vY2tDb250ZXh0LCBkcmF3RWxlbWVudHMoXywgXywgXywgXykpCisgICAgICAgIC5UaW1l
cygxKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RJbXBsOjpGcmFtZURhdGEgZnJhbWU7CisgICAgRVhQ
RUNUX1RSVUUobXlIb3N0SW1wbC0+cHJlcGFyZVRvRHJhdyhmcmFtZSkpOworICAgIG15SG9zdElt
cGwtPmRyYXdMYXllcnMoZnJhbWUpOworICAgIG15SG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMo
ZnJhbWUpOworICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZtb2NrQ29udGV4
dCk7CisKKyAgICAvLyBWZXJpZnkgbm8gcXVhZHMgYXJlIGRyYXduIHdoZW4gdHJhbnNwYXJlbnQg
YmFja2dyb3VuZCBpcyBzZXQuCisgICAgbXlIb3N0SW1wbC0+c2V0SGFzVHJhbnNwYXJlbnRCYWNr
Z3JvdW5kKHRydWUpOworICAgIEVYUEVDVF9UUlVFKG15SG9zdEltcGwtPnByZXBhcmVUb0RyYXco
ZnJhbWUpKTsKKyAgICBteUhvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKKyAgICBteUhvc3RJ
bXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKKyAgICBNb2NrOjpWZXJpZnlBbmRDbGVhckV4
cGVjdGF0aW9ucygmbW9ja0NvbnRleHQpOworfQorCiB9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJSZW5kZXJlckNocm9taXVt
VGVzdC5jcHAKaW5kZXggNDAxN2QzOGJmZjI3YjgzYzAxZTAwMjEzNjFhNTA2ODU4NDJhMmI5Ny4u
NzZkNTk2ODMyYTAxNzk1ZmQxMzY5NWZkZWMwODI3ZGJhMTRiNjM5MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyUmVuZGVyZXJDaHJvbWl1bVRl
c3QuY3BwCkBAIC0zNTcsMyArMzU3LDU4IEBAIFRFU1QoTGF5ZXJSZW5kZXJlckNocm9taXVtVGVz
dDIsIGluaXRpYWxpemF0aW9uV2l0aG91dEdwdU1lbW9yeU1hbmFnZXJFeHRlbnNpb25TCiAKICAg
ICBFWFBFQ1RfR1QobW9ja0NsaWVudC5tZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlcygpLCAwdWwp
OwogfQorCitjbGFzcyBDbGVhckNvdW50aW5nQ29udGV4dCA6IHB1YmxpYyBGYWtlV2ViR3JhcGhp
Y3NDb250ZXh0M0QgeworcHVibGljOgorICAgIENsZWFyQ291bnRpbmdDb250ZXh0KCkgOiBtX2Ns
ZWFyKDApIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGNsZWFyKFdHQzNEYml0ZmllbGQpCisgICAg
eworICAgICAgICBtX2NsZWFyKys7CisgICAgfQorCisgICAgaW50IGNsZWFyQ291bnQoKSBjb25z
dCB7IHJldHVybiBtX2NsZWFyOyB9CisKK3ByaXZhdGU6CisgICAgaW50IG1fY2xlYXI7Cit9Owor
CitURVNUKExheWVyUmVuZGVyZXJDaHJvbWl1bVRlc3QyLCBvcGFxdWVCYWNrZ3JvdW5kKQorewor
ICAgIEZha2VDQ1JlbmRlcmVyQ2xpZW50IG1vY2tDbGllbnQ7CisgICAgUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiBjb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFw
aGljc0NvbnRleHRGcm9tV2ViQ29udGV4dChhZG9wdFB0cihuZXcgQ2xlYXJDb3VudGluZ0NvbnRl
eHQpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOworICAg
IEZha2VMYXllclJlbmRlcmVyQ2hyb21pdW0gbGF5ZXJSZW5kZXJlckNocm9taXVtKCZtb2NrQ2xp
ZW50LCBjb250ZXh0KTsKKworICAgIG1vY2tDbGllbnQucm9vdFJlbmRlclBhc3MoKS0+c2V0SGFz
VHJhbnNwYXJlbnRCYWNrZ3JvdW5kKGZhbHNlKTsKKworICAgIEVYUEVDVF9UUlVFKGxheWVyUmVu
ZGVyZXJDaHJvbWl1bS5pbml0aWFsaXplKCkpOworCisgICAgbGF5ZXJSZW5kZXJlckNocm9taXVt
LmJlZ2luRHJhd2luZ0ZyYW1lKG1vY2tDbGllbnQucm9vdFJlbmRlclBhc3MoKSk7CisgICAgbGF5
ZXJSZW5kZXJlckNocm9taXVtLmRyYXdSZW5kZXJQYXNzKG1vY2tDbGllbnQucm9vdFJlbmRlclBh
c3MoKSwgRmxvYXRSZWN0KCkpOworICAgIGxheWVyUmVuZGVyZXJDaHJvbWl1bS5maW5pc2hEcmF3
aW5nRnJhbWUoKTsKKworICAgIC8vIE9uIERFQlVHIGJ1aWxkcywgcmVuZGVyIHBhc3NlcyB3aXRo
IG9wYXF1ZSBiYWNrZ3JvdW5kIGNsZWFyIHRvIGJsdWUgdG8KKyAgICAvLyBlYXNpbHkgc2VlIHJl
Z2lvbnMgdGhhdCB3ZXJlIG5vdCBkcmF3biBvbiB0aGUgc2NyZWVuLgorI2lmIGRlZmluZWQoTkRF
QlVHKQorICAgIEVYUEVDVF9FUSgwLCBzdGF0aWNfY2FzdDxDbGVhckNvdW50aW5nQ29udGV4dCo+
KEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29udGV4dDNEKGNv
bnRleHQuZ2V0KCkpKS0+Y2xlYXJDb3VudCgpKTsKKyNlbHNlCisgICAgRVhQRUNUX0VRKDEsIHN0
YXRpY19jYXN0PENsZWFyQ291bnRpbmdDb250ZXh0Kj4oR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
OjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0QoY29udGV4dC5nZXQoKSkpLT5jbGVhckNvdW50
KCkpOworI2VuZGlmCit9CisKK1RFU1QoTGF5ZXJSZW5kZXJlckNocm9taXVtVGVzdDIsIHRyYW5z
cGFyZW50QmFja2dyb3VuZCkKK3sKKyAgICBGYWtlQ0NSZW5kZXJlckNsaWVudCBtb2NrQ2xpZW50
OworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQoYWRvcHRQdHIo
bmV3IENsZWFyQ291bnRpbmdDb250ZXh0KSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVj
dGx5VG9Ib3N0V2luZG93KTsKKyAgICBGYWtlTGF5ZXJSZW5kZXJlckNocm9taXVtIGxheWVyUmVu
ZGVyZXJDaHJvbWl1bSgmbW9ja0NsaWVudCwgY29udGV4dCk7CisKKyAgICBtb2NrQ2xpZW50LnJv
b3RSZW5kZXJQYXNzKCktPnNldEhhc1RyYW5zcGFyZW50QmFja2dyb3VuZCh0cnVlKTsKKworICAg
IEVYUEVDVF9UUlVFKGxheWVyUmVuZGVyZXJDaHJvbWl1bS5pbml0aWFsaXplKCkpOworCisgICAg
bGF5ZXJSZW5kZXJlckNocm9taXVtLmJlZ2luRHJhd2luZ0ZyYW1lKG1vY2tDbGllbnQucm9vdFJl
bmRlclBhc3MoKSk7CisgICAgbGF5ZXJSZW5kZXJlckNocm9taXVtLmRyYXdSZW5kZXJQYXNzKG1v
Y2tDbGllbnQucm9vdFJlbmRlclBhc3MoKSwgRmxvYXRSZWN0KCkpOworICAgIGxheWVyUmVuZGVy
ZXJDaHJvbWl1bS5maW5pc2hEcmF3aW5nRnJhbWUoKTsKKworICAgIEVYUEVDVF9FUSgxLCBzdGF0
aWNfY2FzdDxDbGVhckNvdW50aW5nQ29udGV4dCo+KEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
ZXh0cmFjdFdlYkdyYXBoaWNzQ29udGV4dDNEKGNvbnRleHQuZ2V0KCkpKS0+Y2xlYXJDb3VudCgp
KTsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146635</attachid>
            <date>2012-06-08 13:16:20 -0700</date>
            <delta_ts>2012-06-08 19:29:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87821-20120608161619.patch</filename>
            <type>text/plain</type>
            <size>28886</size>
            <attacher name="David Reveman">reveman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5ODU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCBjMDU3MTc2ZDE5ODFi
ZWFjNmNlZWZiYTQxOTZiMDExMWQ4ZDI2MDgyLi4wMGZlZTg2ODhjYTY0OWVlOGEyMWZlNzE4MjQ1
ZDg5NGZjNzJjYWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wNi0wOCAg
RGF2aWQgUmV2ZW1hbiAgPHJldmVtYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1
bV0gQ29tcG9zaXRvciBkb2Vzbid0IHN1cHBvcnQgdHJhbnNsdWNlbnQgcm9vdCBsYXllcnMuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzgyMQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogY2hyb21pdW0v
cHVibGljL1dlYkxheWVyLmg6CisgICAgICAgIChXZWJMYXllcik6CisgICAgICAgICogY2hyb21p
dW0vcHVibGljL1dlYkxheWVyVHJlZVZpZXcuaDoKKyAgICAgICAgKFdlYkxheWVyVHJlZVZpZXcp
OgorCiAyMDEyLTA2LTA2ICBNYXJrIFBpbGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBbQ2hyb21pdW1dIE1vdmUgY3JlYXRlTWVzc2FnZVBvcnRDaGFubmVsIHRvIFBsYXRm
b3JtLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCAzMDdiZWU2YzlkNjkxOWNiNTQ1YzQ4MmUyMWM2NDAyZGE0ZDc4
MTNjLi4wODJjNmFjYTM5M2JhODQ0M2JiN2I4OTdjZjNiNTQ2MmI0ODFhN2UzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsNTEgQEAKKzIwMTItMDYtMDggIERhdmlkIFJldmVtYW4gIDxyZXZlbWFuQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIENvbXBvc2l0b3IgZG9lc24ndCBzdXBw
b3J0IHRyYW5zbHVjZW50IHJvb3QgbGF5ZXJzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODc4MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBGb3J3YXJkIHRoZSBpc1RyYW5zcGFyZW50IFdlYlZpZXcgc2V0
dGluZyB0byBXZWJMYXllclRyZWVWaWV3LAorICAgICAgICBDQ0xheWVyVHJlZUhvc3QgYW5kIEND
TGF5ZXJUcmVlSG9zdEltcGwgYXMgaGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kLgorICAgICAgICBV
c2UgaGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kIHNldHRpbmcgdG8gZGV0ZXJtaW5lIGhvdyB0byBj
bGVhciB0aGUKKyAgICAgICAgcm9vdCByZW5kZXIgcGFzcyBhbmQgZHJhdyB0aGUgYmFja2dyb3Vu
ZC4gU2V0IG9wYXF1ZSBmbGFnIGNvcnJlY3RseQorICAgICAgICBvbiB0aGUgTm9uQ29tcG9zaXRl
ZENvbnRlbnRIb3N0J3MgZ3JhcGhpY3MgbGF5ZXIgdG8gbWFrZSBzdXJlCisgICAgICAgIHN1Yi1w
aXhlbCByZW5kZXJpbmcgaXMgbm90IHVzZWQgd2l0aCBhIHRyYW5zcGFyZW50IFdlYlZpZXcuCisK
KyAgICAgICAgVW5pdCB0ZXN0czogQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuaGFzVHJhbnNwYXJl
bnRCYWNrZ3JvdW5kCisgICAgICAgICAgICAgICAgICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bVRl
c3QyLm9wYXF1ZVJlbmRlclBhc3MKKyAgICAgICAgICAgICAgICAgICAgTGF5ZXJSZW5kZXJlckNo
cm9taXVtVGVzdDIudHJhbnNwYXJlbnRSZW5kZXJQYXNzCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9CaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVU
b1VwZGF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6Y2xlYXJSZW5kZXJQYXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHJhd1JlbmRlclBhc3MpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkcmF3QmFja2dyb3VuZEZpbHRlcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAoTGF5ZXJSZW5k
ZXJlckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1Bp
Y3R1cmVDYW52YXNMYXllclRleHR1cmVVcGRhdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNr
UGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6Q0NMYXllclRyZWVIb3N0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6ZmluaXNoQ29tbWl0T25JbXBsVGhyZWFk
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2V0SGFzVHJhbnNwYXJl
bnRCYWNrZ3JvdW5kKToKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJlZUhvc3RJbXBsKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBh
c3Nlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6aGFz
VHJhbnNwYXJlbnRCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dEltcGw6OnNldEhhc1RyYW5zcGFyZW50QmFja2dyb3VuZCk6CisgICAgICAgIChDQ0xheWVyVHJl
ZUhvc3RJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jl
bmRlclBhc3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNzOjpDQ1JlbmRlclBh
c3MpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFz
cy5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNzOjpoYXNUcmFuc3BhcmVudEJhY2tn
cm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNzOjpzZXRIYXNUcmFuc3BhcmVu
dEJhY2tncm91bmQpOgorICAgICAgICAoQ0NSZW5kZXJQYXNzKToKKwogMjAxMi0wNi0wOCAgRXJp
ayBBcnZpZHNzb24gIDxhcnZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtWOF0gS2VlcCBUZXh0
VHJhY2tMaXN0IGFsaXZlIGFzIGxvbmcgYXMgaXRzIG93bmVyIGlzIGFsaXZlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCmluZGV4IDRjNWE3YjE5M2EyZDI2NWYxNmY5MTgyMWEwYTFlMzM0NmViZDU5
ODAuLjE5ODEyZDFkNjI1ODIyNWJlYTU4Yjc1OGVhZTZjOTM5MjY0ZmM5NjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTItMDYtMDggIERhdmlkIFJldmVt
YW4gIDxyZXZlbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIENvbXBvc2l0
b3IgZG9lc24ndCBzdXBwb3J0IHRyYW5zbHVjZW50IHJvb3QgbGF5ZXJzLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODc4MjEKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHNyYy9Ob25Db21wb3NpdGVkQ29u
dGVudEhvc3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpOb25Db21wb3NpdGVkQ29udGVudEhvc3Q6
OnNldE9wYXF1ZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIHNyYy9Ob25Db21wb3Np
dGVkQ29udGVudEhvc3QuaDoKKyAgICAgICAgKE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCk6Cisg
ICAgICAgICogc3JjL1dlYkxheWVyVHJlZVZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJM
YXllclRyZWVWaWV3OjpzZXRIYXNUcmFuc3BhcmVudEJhY2tncm91bmQpOgorICAgICAgICAoV2Vi
S2l0KToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3SW1wbDo6c2V0SXNUcmFuc3BhcmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJ
bXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUpOgorICAgICAgICAqIHRlc3Rz
L0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcDoKKyAgICAgICAgKiB0ZXN0cy9MYXllclJlbmRl
cmVyQ2hyb21pdW1UZXN0LmNwcDoKKyAgICAgICAgKENsZWFyQ291bnRpbmdDb250ZXh0KToKKyAg
ICAgICAgKENsZWFyQ291bnRpbmdDb250ZXh0OjpDbGVhckNvdW50aW5nQ29udGV4dCk6CisgICAg
ICAgIChDbGVhckNvdW50aW5nQ29udGV4dDo6Y2xlYXIpOgorICAgICAgICAoQ2xlYXJDb3VudGlu
Z0NvbnRleHQ6OmNsZWFyQ291bnQpOgorICAgICAgICAoVEVTVCk6CisKIDIwMTItMDYtMDggIEpv
Y2hlbiBFaXNpbmdlciAgPGpvY2hlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdl
ZC4gIFJvbGxlZCBERVBTLgpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1
YmxpYy9XZWJMYXllci5oIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJMYXll
ci5oCmluZGV4IDM3NWNhYzUxMmQyNzAwNWU4YTJjZWJiODFhYjZiZjI1OTJkZjM1MjguLjhmYzNk
MmQwMzY0Nzg3OTU0ZmY5NjIzOGM5MTI1ZmQ5NTA4ODQ1ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9Q
bGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViTGF5ZXIuaAorKysgYi9Tb3VyY2UvUGxhdGZvcm0v
Y2hyb21pdW0vcHVibGljL1dlYkxheWVyLmgKQEAgLTExNiw5ICsxMTYsOSBAQCBwdWJsaWM6CiAK
ICAgICAvLyBBcHBseSBmaWx0ZXJzIHRvIHBpeGVscyB0aGF0IHNob3cgdGhyb3VnaCB0aGUgYmFj
a2dyb3VuZCBvZiB0aGlzIGxheWVyLgogICAgIC8vIE5vdGU6IFRoZXNlIGZpbHRlcnMgYXJlIG9u
bHkgcG9zc2libGUgb24gbGF5ZXJzIHRoYXQgYXJlIGRyYXduIGRpcmVjdGx5Ci0gICAgLy8gdG8g
dGhlIHJvb3QgcmVuZGVyIHN1cmZhY2UuIFRoaXMgbWVhbnMgaWYgYW4gYW5jZXN0b3Igb2YgdGhl
IGJhY2tncm91bmQtCi0gICAgLy8gZmlsdGVyZWQgbGF5ZXIgc2V0cyBjZXJ0YWluIHByb3BlcnRp
ZXMgKG9wYWNpdHksIHRyYW5zZm9ybXMpLCBpdCBtYXkKLSAgICAvLyBjb25mbGljdCBhbmQgaGlk
ZSB0aGUgYmFja2dyb3VuZCBmaWx0ZXJzLgorICAgIC8vIHRvIGEgcm9vdCByZW5kZXIgc3VyZmFj
ZSB3aXRoIGFuIG9wYXF1ZSBiYWNrZ3JvdW5kLiBUaGlzIG1lYW5zIGlmIGFuCisgICAgLy8gYW5j
ZXN0b3Igb2YgdGhlIGJhY2tncm91bmQtZmlsdGVyZWQgbGF5ZXIgc2V0cyBjZXJ0YWluIHByb3Bl
cnRpZXMKKyAgICAvLyAob3BhY2l0eSwgdHJhbnNmb3JtcyksIGl0IG1heSBjb25mbGljdCBhbmQg
aGlkZSB0aGUgYmFja2dyb3VuZCBmaWx0ZXJzLgogICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRC
YWNrZ3JvdW5kRmlsdGVycyhjb25zdCBXZWJGaWx0ZXJPcGVyYXRpb25zJik7CiAKICAgICBXRUJL
SVRfRVhQT1JUIHZvaWQgc2V0RGVidWdCb3JkZXJDb2xvcihjb25zdCBXZWJDb2xvciYpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJMYXllclRyZWVWaWV3
LmggYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkxheWVyVHJlZVZpZXcuaApp
bmRleCAyM2QwZDYzY2U5ZGQyOGE1YjViYWQ3MTI4ZWFhMTQ5YTk3M2I5ZGU2Li40NjdmNjVjZDU1
ZDdhOWViODMxMTdjNDBmOWNiODIwY2EzOTgwMjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZv
cm0vY2hyb21pdW0vcHVibGljL1dlYkxheWVyVHJlZVZpZXcuaAorKysgYi9Tb3VyY2UvUGxhdGZv
cm0vY2hyb21pdW0vcHVibGljL1dlYkxheWVyVHJlZVZpZXcuaApAQCAtMTE4LDYgKzExOCw5IEBA
IHB1YmxpYzoKICAgICAvLyBTZXRzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGZvciB0aGUgdmlld3Bv
cnQuCiAgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldEJhY2tncm91bmRDb2xvcihXZWJDb2xvcik7
CiAKKyAgICAvLyBTZXRzIHRoZSBiYWNrZ3JvdW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHZpZXdw
b3J0LiBUaGUgZGVmYXVsdCBpcyAnZmFsc2UnLgorICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRI
YXNUcmFuc3BhcmVudEJhY2tncm91bmQoYm9vbCk7CisKICAgICAvLyBTZXRzIHdoZXRoZXIgdGhp
cyB2aWV3IGlzIHZpc2libGUuIEluIHRocmVhZGVkIG1vZGUsIGEgdmlldyB0aGF0IGlzIG5vdCB2
aXNpYmxlIHdpbGwgbm90CiAgICAgLy8gY29tcG9zaXRlIG9yIHRyaWdnZXIgdXBkYXRlQW5pbWF0
aW9ucygpIG9yIGxheW91dCgpIGNhbGxzIHVudGlsIGl0IGJlY29tZXMgdmlzaWJsZS4KICAgICBX
RUJLSVRfRVhQT1JUIHZvaWQgc2V0VmlzaWJsZShib29sKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0JpdG1hcENhbnZhc0xheWVyVGV4dHVy
ZVVwZGF0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Qml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKaW5kZXggODI0NWFhOWU2ODg0ODYw
YjZkMmIxZmU5ZjQwNGNkNWI3NGQyZTEzNS4uZDIwNWExN2ZmZWQ4NTIyMGI4MGRhMWViNTBiYTFm
ZmRhZTQwYjk5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQml0bWFwQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlci5jcHAKQEAgLTg4LDggKzg4LDkgQEAgdm9pZCBCaXRtYXBDYW52YXNMYXllclRl
eHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QK
ICAgICAvLyBBc3N1bXB0aW9uOiBpZiBhIHRpbGVyIGlzIHVzaW5nIGJvcmRlciB0ZXhlbHMsIHRo
ZW4gaXQgaXMgYmVjYXVzZSB0aGUKICAgICAvLyBsYXllciBpcyBsaWtlbHkgdG8gYmUgZmlsdGVy
ZWQgb3IgdHJhbnNmb3JtZWQuIEJlY2F1c2Ugb2YgaXQgbWlnaHQgYmUKICAgICAvLyB0cmFuc2Zv
cm1lZCwgZHJhdyB0aGUgdGV4dCBpbiBncmF5c2NhbGUgaW5zdGVhZCBvZiBzdWJwaXhlbCBhbnRp
YWxpYXNpbmcuCisgICAgYm9vbCB1c2VHcmF5c2NhbGVUZXh0ID0gYm9yZGVyVGV4ZWxzIHx8ICFs
YXllcklzT3BhcXVlOwogICAgIFBsYXRmb3JtQ2FudmFzOjpQYWludGVyOjpUZXh0T3B0aW9uIHRl
eHRPcHRpb24gPQotICAgICAgICBib3JkZXJUZXhlbHMgPyBQbGF0Zm9ybUNhbnZhczo6UGFpbnRl
cjo6R3JheXNjYWxlVGV4dCA6IFBsYXRmb3JtQ2FudmFzOjpQYWludGVyOjpTdWJwaXhlbFRleHQ7
CisgICAgICAgIHVzZUdyYXlzY2FsZVRleHQgPyBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlcjo6R3Jh
eXNjYWxlVGV4dCA6IFBsYXRmb3JtQ2FudmFzOjpQYWludGVyOjpTdWJwaXhlbFRleHQ7CiAgICAg
UGxhdGZvcm1DYW52YXM6OlBhaW50ZXIgY2FudmFzUGFpbnRlcigmbV9jYW52YXMsIHRleHRPcHRp
b24pOwogICAgIGNhbnZhc1BhaW50ZXIuc2tpYUNvbnRleHQoKS0+c2V0VHJhY2tPcGFxdWVSZWdp
b24oIWxheWVySXNPcGFxdWUpOwogICAgIHBhaW50Q29udGVudHMoKmNhbnZhc1BhaW50ZXIuY29u
dGV4dCgpLCAqY2FudmFzUGFpbnRlci5za2lhQ29udGV4dCgpLCBjb250ZW50UmVjdCwgY29udGVu
dHNTY2FsZSwgcmVzdWx0aW5nT3BhcXVlUmVjdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmNwcAppbmRleCA1NWNmNzRmMmY4NDFlMmJmMmVjOWU0NjdjMWY1N2IwNzljYWU5ZmVl
Li43ODBmYzMyZTNhM2YzZjExMDg4YWQ2NjVjYWRmYjllMDA1MGQ3Yjg0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTQwMiwxNSArNDAyLDE0IEBAIHZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjp2aWV3cG9ydENoYW5nZWQoKQogICAgIG1fY3VycmVudFJlbmRl
clBhc3MgPSAwOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYXJSZW5kZXJQ
YXNzKGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcywgY29uc3QgQ0NSZW5kZXJQYXNzKiBy
b290UmVuZGVyUGFzcywgY29uc3QgRmxvYXRSZWN0JiBmcmFtZWJ1ZmZlckRhbWFnZVJlY3QpCit2
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYXJSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVy
UGFzcyogcmVuZGVyUGFzcywgY29uc3QgRmxvYXRSZWN0JiBmcmFtZWJ1ZmZlckRhbWFnZVJlY3Qp
CiB7Ci0gICAgLy8gTm9uLXJvb3QgbGF5ZXJzIHNob3VsZCBjbGVhciB0aGVpciBlbnRpcmUgY29u
dGVudHMgdG8gdHJhbnNwYXJlbnQuIE9uIERFQlVHIGJ1aWxkcywgdGhlIHJvb3QgbGF5ZXIKLSAg
ICAvLyBpcyBjbGVhcmVkIHRvIGJsdWUgdG8gZWFzaWx5IHNlZSByZWdpb25zIHRoYXQgd2VyZSBu
b3QgZHJhd24gb24gdGhlIHNjcmVlbi4gSWYgd2UKKyAgICAvLyBPbiBERUJVRyBidWlsZHMsIG9w
YXF1ZSByZW5kZXIgcGFzc2VzIGFyZSBjbGVhcmVkIHRvIGJsdWUgdG8gZWFzaWx5IHNlZSByZWdp
b25zIHRoYXQgd2VyZSBub3QgZHJhd24gb24gdGhlIHNjcmVlbi4gSWYgd2UKICAgICAvLyBhcmUg
dXNpbmcgcGFydGlhbCBzd2FwIC8gc2Npc3NvciBvcHRpbWl6YXRpb24sIHRoZW4gdGhlIHN1cmZh
Y2Ugc2hvdWxkIG9ubHkKICAgICAvLyBjbGVhciB0aGUgZGFtYWdlZCByZWdpb24sIHNvIHRoYXQg
d2UgZG9uJ3QgYWNjaWRlbnRhbGx5IGNsZWFyIHVuLWNoYW5nZWQgcG9ydGlvbnMKICAgICAvLyBv
ZiB0aGUgc2NyZWVuLgogCi0gICAgaWYgKHJlbmRlclBhc3MgIT0gcm9vdFJlbmRlclBhc3MpCisg
ICAgaWYgKHJlbmRlclBhc3MtPmhhc1RyYW5zcGFyZW50QmFja2dyb3VuZCgpKQogICAgICAgICBH
TEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmNsZWFyQ29sb3IoMCwgMCwgMCwgMCkpOwogICAgIGVs
c2UKICAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5jbGVhckNvbG9yKDAsIDAsIDEs
IDEpKTsKQEAgLTQyMSw3ICs0MjAsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xl
YXJSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcywgY29ucwogICAgICAg
ICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlND
SVNTT1JfVEVTVCkpOwogCiAjaWYgZGVmaW5lZChOREVCVUcpCi0gICAgaWYgKHJlbmRlclBhc3Mg
IT0gcm9vdFJlbmRlclBhc3MpCisgICAgaWYgKHJlbmRlclBhc3MtPmhhc1RyYW5zcGFyZW50QmFj
a2dyb3VuZCgpKQogI2VuZGlmCiAgICAgICAgIG1fY29udGV4dC0+Y2xlYXIoR3JhcGhpY3NDb250
ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpOwogCkBAIC00NzUsNyArNDc0LDcgQEAgdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzcyogcmVu
ZGVyUGFzcywgY29uc3QKICAgICBpZiAoIXVzZVJlbmRlclBhc3MocmVuZGVyUGFzcykpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGNsZWFyUmVuZGVyUGFzcyhyZW5kZXJQYXNzLCBtX2RlZmF1bHRS
ZW5kZXJQYXNzLCBmcmFtZWJ1ZmZlckRhbWFnZVJlY3QpOworICAgIGNsZWFyUmVuZGVyUGFzcyhy
ZW5kZXJQYXNzLCBmcmFtZWJ1ZmZlckRhbWFnZVJlY3QpOwogCiAgICAgY29uc3QgQ0NRdWFkTGlz
dCYgcXVhZExpc3QgPSByZW5kZXJQYXNzLT5xdWFkTGlzdCgpOwogICAgIGZvciAoQ0NRdWFkTGlz
dDo6Y29uc3RCYWNrVG9Gcm9udEl0ZXJhdG9yIGl0ID0gcXVhZExpc3QuYmFja1RvRnJvbnRCZWdp
bigpOyBpdCAhPSBxdWFkTGlzdC5iYWNrVG9Gcm9udEVuZCgpOyArK2l0KQpAQCAtNjE1LDEwICs2
MTQsMTEgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdCYWNrZ3JvdW5kRmlsdGVy
cyhjb25zdCBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcXUKICAgICBpZiAocXVhZC0+YmFja2dyb3Vu
ZEZpbHRlcnMoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIEZJWE1FOiBX
ZSBvbmx5IGFsbG93IGJhY2tncm91bmQgZmlsdGVycyBvbiB0aGUgcm9vdCByZW5kZXIgc3VyZmFj
ZSBiZWNhdXNlIG90aGVyIHN1cmZhY2VzIG1heSBjb250YWluCisgICAgLy8gRklYTUU6IFdlIG9u
bHkgYWxsb3cgYmFja2dyb3VuZCBmaWx0ZXJzIG9uIGFuIG9wYXF1ZSByZW5kZXIgc3VyZmFjZSBi
ZWNhdXNlIG90aGVyIHN1cmZhY2VzIG1heSBjb250YWluCiAgICAgLy8gdHJhbnNsdWNlbnQgcGl4
ZWxzLCBhbmQgdGhlIGNvbnRlbnRzIGJlaGluZCB0aG9zZSB0cmFuc2x1Y2VudCBwaXhlbHMgd291
bGRuJ3QgaGF2ZSB0aGUgZmlsdGVyIGFwcGxpZWQuCi0gICAgaWYgKCFpc0N1cnJlbnRSZW5kZXJQ
YXNzKG1fZGVmYXVsdFJlbmRlclBhc3MpKQorICAgIGlmIChtX2N1cnJlbnRSZW5kZXJQYXNzLT5o
YXNUcmFuc3BhcmVudEJhY2tncm91bmQoKSkKICAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCgh
bV9jdXJyZW50TWFuYWdlZFRleHR1cmUpOwogCiAgICAgLy8gRklYTUU6IERvIGEgc2luZ2xlIHJl
YWRiYWNrIGZvciBib3RoIHRoZSBzdXJmYWNlIGFuZCByZXBsaWNhIGFuZCBjYWNoZSB0aGUgZmls
dGVyZWQgcmVzdWx0cyAob25jZSBmaWx0ZXIgdGV4dHVyZXMgYXJlIG5vdCByZXVzZWQpLgogICAg
IEludFJlY3QgZGV2aWNlUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoQ0NNYXRoVXRpbDo6bWFwQ2xp
cHBlZFJlY3QoY29udGVudHNEZXZpY2VUcmFuc2Zvcm0sIHNoYXJlZEdlb21ldHJ5UXVhZCgpLmJv
dW5kaW5nQm94KCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKaW5kZXggZmE1
MmI3MzU3ZmNkY2RlMTllYzY0MDNmOGRiODlmZmRkM2E5YTAyZi4uODJiZDY5MTc0NjFiNzYxNGFj
ZTRjMGYxYjJlMjNhNDA1N2RmMTBjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmgKQEAgLTE1Miw3ICsxNTIsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBiaW5kRnJhbWVidWZm
ZXJUb1RleHR1cmUoTWFuYWdlZFRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiB2aWV3cG9ydFJlY3Qp
OwogCi0gICAgdm9pZCBjbGVhclJlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKiwgY29uc3Qg
Q0NSZW5kZXJQYXNzKiByb290UmVuZGVyUGFzcywgY29uc3QgRmxvYXRSZWN0JiBmcmFtZWJ1ZmZl
ckRhbWFnZVJlY3QpOworICAgIHZvaWQgY2xlYXJSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFz
cyosIGNvbnN0IEZsb2F0UmVjdCYgZnJhbWVidWZmZXJEYW1hZ2VSZWN0KTsKIAogICAgIHZvaWQg
cmVsZWFzZVJlbmRlclBhc3NUZXh0dXJlcygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1BpY3R1cmVDYW52YXNMYXllclRleHR1cmVV
cGRhdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Nr
UGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCmluZGV4IDM5MzI3ZDAyYTU2YWY4
ZDc2N2E5OTk4MjI0Y2QyNDJjYWVkNDU0MjkuLmI0OTkwMTJlNjFiNTM3YWM5NTRjZWExMzhmOWMx
ODgyMzYzMWE1NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1NrUGljdHVyZUNhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NrUGljdHVyZUNhbnZhc0xh
eWVyVGV4dHVyZVVwZGF0ZXIuY3BwCkBAIC01OCw3ICs1OCw4IEBAIHZvaWQgU2tQaWN0dXJlQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNv
bnRlbnRSCiAgICAgLy8gbGF5ZXIgaXMgbGlrZWx5IHRvIGJlIGZpbHRlcmVkIG9yIHRyYW5zZm9y
bWVkLiBCZWNhdXNlIGl0IG1pZ2h0IGJlCiAgICAgLy8gdHJhbnNmb3JtZWQsIHNldCBpbWFnZSBi
dWZmZXIgZmxhZyB0byBkcmF3IHRoZSB0ZXh0IGluIGdyYXlzY2FsZQogICAgIC8vIGluc3RlYWQg
b2YgdXNpbmcgc3VicGl4ZWwgYW50aWFsaWFzaW5nLgotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRE
cmF3aW5nVG9JbWFnZUJ1ZmZlcihib3JkZXJUZXhlbHMgPyB0cnVlIDogZmFsc2UpOworICAgIGJv
b2wgdXNlR3JheXNjYWxlVGV4dCA9IGJvcmRlclRleGVscyB8fCAhbV9sYXllcklzT3BhcXVlOwor
ICAgIHBsYXRmb3JtQ29udGV4dC5zZXREcmF3aW5nVG9JbWFnZUJ1ZmZlcih1c2VHcmF5c2NhbGVU
ZXh0KTsKICAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KCZwbGF0Zm9ybUNvbnRl
eHQpOwogICAgIHBhaW50Q29udGVudHMoZ3JhcGhpY3NDb250ZXh0LCBwbGF0Zm9ybUNvbnRleHQs
IGNvbnRlbnRSZWN0LCBjb250ZW50c1NjYWxlLCByZXN1bHRpbmdPcGFxdWVSZWN0KTsKICAgICBt
X3BpY3R1cmUuZW5kUmVjb3JkaW5nKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApp
bmRleCBmYTBlYjY0YzM2NWIxOGRlMGQ5NjlmYzgzZTliNDgzNWEzODY5MzRhLi4wYTAxNTRjM2Vm
ZTNlMDNiYTUwNDhmMWI2ODRhMjVhODQ0MWI0ZmRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5jcHAKQEAgLTg2LDYgKzg2LDcgQEAgQ0NMYXllclRyZWVIb3N0OjpDQ0xheWVyVHJlZUhv
c3QoQ0NMYXllclRyZWVIb3N0Q2xpZW50KiBjbGllbnQsIGNvbnN0IENDU2V0dGluZ3MKICAgICAs
IG1fbWF4UGFnZVNjYWxlRmFjdG9yKDEpCiAgICAgLCBtX3RyaWdnZXJJZGxlUGFpbnRzKHRydWUp
CiAgICAgLCBtX2JhY2tncm91bmRDb2xvcihDb2xvcjo6d2hpdGUpCisgICAgLCBtX2hhc1RyYW5z
cGFyZW50QmFja2dyb3VuZChmYWxzZSkKICAgICAsIG1fcGFydGlhbFRleHR1cmVVcGRhdGVSZXF1
ZXN0cygwKQogewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQoKSk7CkBAIC0yNTIs
NiArMjUzLDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmZpbmlzaENvbW1pdE9uSW1wbFRocmVh
ZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBob3N0SW1wbCkKICAgICBob3N0SW1wbC0+c2V0Vmlld3Bv
cnRTaXplKHZpZXdwb3J0U2l6ZSgpKTsKICAgICBob3N0SW1wbC0+c2V0UGFnZVNjYWxlRmFjdG9y
QW5kTGltaXRzKG1fcGFnZVNjYWxlRmFjdG9yLCBtX21pblBhZ2VTY2FsZUZhY3RvciwgbV9tYXhQ
YWdlU2NhbGVGYWN0b3IpOwogICAgIGhvc3RJbXBsLT5zZXRCYWNrZ3JvdW5kQ29sb3IobV9iYWNr
Z3JvdW5kQ29sb3IpOworICAgIGhvc3RJbXBsLT5zZXRIYXNUcmFuc3BhcmVudEJhY2tncm91bmQo
bV9oYXNUcmFuc3BhcmVudEJhY2tncm91bmQpOwogICAgIGhvc3RJbXBsLT5zZXRWaXNpYmxlKG1f
dmlzaWJsZSk7CiAgICAgaG9zdEltcGwtPnNldFNvdXJjZUZyYW1lQ2FuQmVEcmF3bihtX2ZyYW1l
SXNGb3JEaXNwbGF5KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAppbmRleCA0MzRhZWMy
NzQyMjAxYzVmNmQ1YjQ5Y2M1MzdlMTgwMzljMmM4NjRkLi40ODFkM2NlNjFlOWU5MjkyNzlhMDUw
ZDMxY2E0ZWY4OGU3MmIyNzYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApAQCAtMjMx
LDYgKzIzMSw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0
IENvbG9yJiBjb2xvcikgeyBtX2JhY2tncm91bmRDb2xvciA9IGNvbG9yOyB9CiAKKyAgICB2b2lk
IHNldEhhc1RyYW5zcGFyZW50QmFja2dyb3VuZChib29sIHRyYW5zcGFyZW50KSB7IG1faGFzVHJh
bnNwYXJlbnRCYWNrZ3JvdW5kID0gdHJhbnNwYXJlbnQ7IH0KKwogICAgIFRleHR1cmVNYW5hZ2Vy
KiBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRDb250ZW50c01l
bW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzKHNpemVfdCk7CiAKQEAgLTMwOSw2ICszMTEsNyBAQCBw
cml2YXRlOgogICAgIGZsb2F0IG1fbWluUGFnZVNjYWxlRmFjdG9yLCBtX21heFBhZ2VTY2FsZUZh
Y3RvcjsKICAgICBib29sIG1fdHJpZ2dlcklkbGVQYWludHM7CiAgICAgQ29sb3IgbV9iYWNrZ3Jv
dW5kQ29sb3I7CisgICAgYm9vbCBtX2hhc1RyYW5zcGFyZW50QmFja2dyb3VuZDsKIAogICAgIFRl
eHR1cmVMaXN0IG1fZGVsZXRlVGV4dHVyZUFmdGVyQ29tbWl0TGlzdDsKICAgICBzaXplX3QgbV9w
YXJ0aWFsVGV4dHVyZVVwZGF0ZVJlcXVlc3RzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmNwcAppbmRleCA1YjEzZTFiOGVjYjU2ZjgxMWI2MTY3NGVhMjgxMTRlYTRjNzAwMzZi
Li5iN2IxYzMxMTllMjI4ZmI1ZGU5OWVmYWYwNWM0ZmJmODRhMTAzYTQ2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtMTI0LDYgKzEyNCw3IEBAIENDTGF5ZXJU
cmVlSG9zdEltcGw6OkNDTGF5ZXJUcmVlSG9zdEltcGwoY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGlu
Z3MsIENDTGF5ZXJUcmVlCiAgICAgLCBtX3NlbnRQYWdlU2NhbGVEZWx0YSgxKQogICAgICwgbV9t
aW5QYWdlU2NhbGUoMCkKICAgICAsIG1fbWF4UGFnZVNjYWxlKDApCisgICAgLCBtX2hhc1RyYW5z
cGFyZW50QmFja2dyb3VuZChmYWxzZSkKICAgICAsIG1fbmVlZHNBbmltYXRlTGF5ZXJzKGZhbHNl
KQogICAgICwgbV9waW5jaEdlc3R1cmVBY3RpdmUoZmFsc2UpCiAgICAgLCBtX2Zwc0NvdW50ZXIo
Q0NGcmFtZVJhdGVDb3VudGVyOjpjcmVhdGUoKSkKQEAgLTMyNCw3ICszMjUsMTAgQEAgYm9vbCBD
Q0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlz
dCYgcGFzc2VzLCBDQ0xheWUKICAgICAgICAgb2NjbHVzaW9uVHJhY2tlci5sZWF2ZUxheWVyKGl0
KTsKICAgICB9CiAKLSAgICBwYXNzZXMubGFzdCgpLT5hcHBlbmRRdWFkc1RvRmlsbFNjcmVlbiht
X3Jvb3RMYXllckltcGwuZ2V0KCksIG1fYmFja2dyb3VuZENvbG9yLCBvY2NsdXNpb25UcmFja2Vy
KTsKKyAgICBpZiAoIW1faGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKSB7CisgICAgICAgIHBhc3Nl
cy5sYXN0KCktPnNldEhhc1RyYW5zcGFyZW50QmFja2dyb3VuZChmYWxzZSk7CisgICAgICAgIHBh
c3Nlcy5sYXN0KCktPmFwcGVuZFF1YWRzVG9GaWxsU2NyZWVuKG1fcm9vdExheWVySW1wbC5nZXQo
KSwgbV9iYWNrZ3JvdW5kQ29sb3IsIG9jY2x1c2lvblRyYWNrZXIpOworICAgIH0KIAogICAgIGlm
IChkcmF3RnJhbWUpCiAgICAgICAgIG9jY2x1c2lvblRyYWNrZXIub3ZlcmRyYXdNZXRyaWNzKCku
cmVjb3JkTWV0cmljcyh0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApp
bmRleCBjNzQwYTY2MjAyZjRiZDBmMWIzZDA2MDZkM2FlYmE5NDg5ZDIwMDkyLi4wODMyMDRiM2Jm
ZDhhNDliZDk2MDUyNDU1NTQ5N2FmYjQxMDFiNWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbC5oCkBAIC0xNTksNiArMTU5LDkgQEAgcHVibGljOgogICAgIGNvbnN0IENvbG9y
JiBiYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRDb2xvcjsgfQog
ICAgIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikgeyBtX2JhY2tn
cm91bmRDb2xvciA9IGNvbG9yOyB9CiAKKyAgICBib29sIGhhc1RyYW5zcGFyZW50QmFja2dyb3Vu
ZCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kOyB9CisgICAgdm9p
ZCBzZXRIYXNUcmFuc3BhcmVudEJhY2tncm91bmQoYm9vbCB0cmFuc3BhcmVudCkgeyBtX2hhc1Ry
YW5zcGFyZW50QmFja2dyb3VuZCA9IHRyYW5zcGFyZW50OyB9CisKICAgICBib29sIG5lZWRzQW5p
bWF0ZUxheWVycygpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNBbmltYXRlTGF5ZXJzOyB9CiAgICAg
dm9pZCBzZXROZWVkc0FuaW1hdGVMYXllcnMoKSB7IG1fbmVlZHNBbmltYXRlTGF5ZXJzID0gdHJ1
ZTsgfQogCkBAIC0yMjcsNiArMjMwLDcgQEAgcHJpdmF0ZToKICAgICBmbG9hdCBtX21pblBhZ2VT
Y2FsZSwgbV9tYXhQYWdlU2NhbGU7CiAKICAgICBDb2xvciBtX2JhY2tncm91bmRDb2xvcjsKKyAg
ICBib29sIG1faGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kOwogCiAgICAgLy8gSWYgdGhpcyBpcyB0
cnVlLCBpdCBpcyBuZWNlc3NhcnkgdG8gdHJhdmVyc2UgdGhlIGxheWVyIHRyZWUgdGlja2luZyB0
aGUgYW5pbWF0b3JzLgogICAgIGJvb2wgbV9uZWVkc0FuaW1hdGVMYXllcnM7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBh
c3MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NS
ZW5kZXJQYXNzLmNwcAppbmRleCAwZTNhZmMwNDY5MmUwYmRiYjVlNGNjNmFhMTQ0MDZkOGExZDlh
ZjhkLi5hNTVmZWI4NWM0NTRkNzRlNTdjYmIzNWI4ODQ2ODViNDA1MGUzZDkxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBh
c3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUmVuZGVyUGFzcy5jcHAKQEAgLTQ1LDYgKzQ1LDcgQEAgUGFzc093blB0cjxDQ1JlbmRlclBh
c3M+IENDUmVuZGVyUGFzczo6Y3JlYXRlKENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0U3VyZmFjZSkK
IENDUmVuZGVyUGFzczo6Q0NSZW5kZXJQYXNzKENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0U3VyZmFj
ZSkKICAgICA6IG1fdGFyZ2V0U3VyZmFjZSh0YXJnZXRTdXJmYWNlKQogICAgICwgbV9mcmFtZWJ1
ZmZlck91dHB1dFJlY3QodGFyZ2V0U3VyZmFjZS0+Y29udGVudFJlY3QoKSkKKyAgICAsIG1faGFz
VHJhbnNwYXJlbnRCYWNrZ3JvdW5kKHRydWUpCiB7CiAgICAgQVNTRVJUKG1fdGFyZ2V0U3VyZmFj
ZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1JlbmRlclBhc3MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oCmluZGV4IDY0OWRiYWNkY2RhOWZhMDA3ZGI3ZTBi
MmQxYmUxZTMwOTVlMDlhNGYuLmE0NTEwMDZjZTg4YjEyYjA3MjM3MGRmYTIyMzlmODM4M2JhNzFm
YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUmVuZGVyUGFzcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oCkBAIC02NCw2ICs2NCw5IEBAIHB1YmxpYzoKICAg
ICAvLyBUaGlzIGRlbm90ZXMgdGhlIGJvdW5kcyBpbiBwaHlzaWNhbCBwaXhlbHMgb2YgdGhlIG91
dHB1dCBnZW5lcmF0ZWQgYnkgdGhpcyBSZW5kZXJQYXNzLgogICAgIGNvbnN0IEludFJlY3QmIGZy
YW1lYnVmZmVyT3V0cHV0UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVidWZmZXJPdXRwdXRS
ZWN0OyB9CiAKKyAgICBib29sIGhhc1RyYW5zcGFyZW50QmFja2dyb3VuZCgpIGNvbnN0IHsgcmV0
dXJuIG1faGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kOyB9CisgICAgdm9pZCBzZXRIYXNUcmFuc3Bh
cmVudEJhY2tncm91bmQoYm9vbCB0cmFuc3BhcmVudCkgeyBtX2hhc1RyYW5zcGFyZW50QmFja2dy
b3VuZCA9IHRyYW5zcGFyZW50OyB9CisKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgQ0NSZW5kZXJQ
YXNzKENDUmVuZGVyU3VyZmFjZSopOwogCkBAIC03MSw2ICs3NCw3IEBAIHByaXZhdGU6CiAgICAg
Q0NRdWFkTGlzdCBtX3F1YWRMaXN0OwogICAgIEludFJlY3QgbV9mcmFtZWJ1ZmZlck91dHB1dFJl
Y3Q7CiAgICAgVmVjdG9yPE93blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gPiBtX3NoYXJlZFF1YWRT
dGF0ZUxpc3Q7CisgICAgYm9vbCBtX2hhc1RyYW5zcGFyZW50QmFja2dyb3VuZDsKIH07CiAKIHR5
cGVkZWYgVmVjdG9yPE93blB0cjxDQ1JlbmRlclBhc3M+ID4gQ0NSZW5kZXJQYXNzTGlzdDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL05vbkNvbXBvc2l0ZWRDb250ZW50
SG9zdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Ob25Db21wb3NpdGVkQ29udGVu
dEhvc3QuY3BwCmluZGV4IDRjYzFjMTE3N2RjOGFkNTNkMWYyZDlkMDQzOGY2ZTMzOTZmNDAwOGMu
LjlhYTZmMTY3ZmI3ODlhNTA2MTIyZTQxMmJiMGVjYmY0MWZjODVjZjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL05vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LmNw
cApAQCAtNjIsNiArNjIsMTEgQEAgdm9pZCBOb25Db21wb3NpdGVkQ29udGVudEhvc3Q6OnNldEJh
Y2tncm91bmRDb2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYgY29sb3IpCiAgICAgbV9ncmFwaGlj
c0xheWVyLT5wbGF0Zm9ybUxheWVyKCktPnNldEJhY2tncm91bmRDb2xvcihjb2xvcik7CiB9CiAK
K3ZvaWQgTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0OjpzZXRPcGFxdWUoYm9vbCBvcGFxdWUpCit7
CisgICAgbV9ncmFwaGljc0xheWVyLT5wbGF0Zm9ybUxheWVyKCktPnNldE9wYXF1ZShvcGFxdWUp
OworfQorCiB2b2lkIE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdDo6c2V0U2Nyb2xsTGF5ZXIoV2Vi
Q29yZTo6R3JhcGhpY3NMYXllciogbGF5ZXIpCiB7CiAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRO
ZWVkc0Rpc3BsYXkoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL05v
bkNvbXBvc2l0ZWRDb250ZW50SG9zdC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTm9u
Q29tcG9zaXRlZENvbnRlbnRIb3N0LmgKaW5kZXggMzIwZTdjMWJlNDk0NjkwYjhhY2EzOWZkMjIy
NTk4Nzk1M2QyNDU2My4uYzg3YmQ4YzA5ODliYTQ4ZDA4MjYyMDIyZTJjYzEwOThjMDJmZWJhNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTm9uQ29tcG9zaXRlZENvbnRl
bnRIb3N0LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTm9uQ29tcG9zaXRlZENv
bnRlbnRIb3N0LmgKQEAgLTU2LDYgKzU2LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBpbnZhbGlk
YXRlUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CiAgICAgdm9pZCBzZXRCYWNrZ3JvdW5k
Q29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKKyAgICB2b2lkIHNldE9wYXF1ZShib29sKTsK
ICAgICB2b2lkIHNldFNjcm9sbExheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKICAgICB2
b2lkIHNldFZpZXdwb3J0KGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHZpZXdwb3J0U2l6ZSwgY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYgc2Nyb2xsUG9zaXRpb24sIGZsb2F0IGRldmljZVNjYWxlLCBpbnQgbGF5ZXJBZGp1c3RYKTsK
ICAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiB0b3BMZXZlbFJvb3RMYXllcigpIGNvbnN0IHsg
cmV0dXJuIG1fZ3JhcGhpY3NMYXllci5nZXQoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJMYXllclRyZWVWaWV3LmNwcAppbmRleCBhZTIwYWVhOWEzNTgzZTYzNDI0OWY1
YmI0ZGI0MDg4Mjg0ZDgyNmYxLi5mZWQzZGI5NzU5ODVjNzhjMzYyOTEyODc4OGFjNjQxYWYwMTM3
ZjgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVW
aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3
LmNwcApAQCAtMTA3LDYgKzEwNywxMSBAQCB2b2lkIFdlYkxheWVyVHJlZVZpZXc6OnNldEJhY2tn
cm91bmRDb2xvcihXZWJDb2xvciBjb2xvcikKICAgICBtX3ByaXZhdGUtPmxheWVyVHJlZUhvc3Qo
KS0+c2V0QmFja2dyb3VuZENvbG9yKGNvbG9yKTsKIH0KIAordm9pZCBXZWJMYXllclRyZWVWaWV3
OjpzZXRIYXNUcmFuc3BhcmVudEJhY2tncm91bmQoYm9vbCB0cmFuc3BhcmVudCkKK3sKKyAgICBt
X3ByaXZhdGUtPmxheWVyVHJlZUhvc3QoKS0+c2V0SGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKHRy
YW5zcGFyZW50KTsKK30KKwogdm9pZCBXZWJMYXllclRyZWVWaWV3OjpzZXRWaXNpYmxlKGJvb2wg
dmlzaWJsZSkKIHsKICAgICBtX3ByaXZhdGUtPmxheWVyVHJlZUhvc3QoKS0+c2V0VmlzaWJsZSh2
aXNpYmxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRl
eCBmOTBiMWY4YWY3YmQzZWE5YzIyYjZjMWRmZWU3ZDY2MGFhZDE4MDllLi5hNDQwOTdiYTRiODdh
OTI3ZmM4MzAyODljYmE0ZjhmZTliZDc3NmIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViVmlld0ltcGwuY3BwCkBAIC0zMDI2LDYgKzMwMjYsMTEgQEAgdm9pZCBXZWJWaWV3SW1w
bDo6c2V0SXNUcmFuc3BhcmVudChib29sIGlzVHJhbnNwYXJlbnQpCiAKICAgICAvLyBGdXR1cmUg
ZnJhbWVzIGNoZWNrIHRoaXMgdG8ga25vdyB3aGV0aGVyIHRvIGJlIHRyYW5zcGFyZW50LgogICAg
IG1faXNUcmFuc3BhcmVudCA9IGlzVHJhbnNwYXJlbnQ7CisKKyAgICBpZiAobV9ub25Db21wb3Np
dGVkQ29udGVudEhvc3QpCisgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LT5zZXRP
cGFxdWUoIWlzVHJhbnNwYXJlbnQpOworCisgICAgbV9sYXllclRyZWVWaWV3LnNldEhhc1RyYW5z
cGFyZW50QmFja2dyb3VuZChpc1RyYW5zcGFyZW50KTsKIH0KIAogYm9vbCBXZWJWaWV3SW1wbDo6
aXNUcmFuc3BhcmVudCgpIGNvbnN0CkBAIC0zNDc1LDYgKzM0ODAsNyBAQCB2b2lkIFdlYlZpZXdJ
bXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoYm9vbCBhY3RpdmUpCiAKICAg
ICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3QgPSBOb25Db21wb3NpdGVkQ29udGVudEhv
c3Q6OmNyZWF0ZShXZWJWaWV3SW1wbENvbnRlbnRQYWludGVyOjpjcmVhdGUodGhpcykpOwogICAg
ICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC0+c2V0U2hvd0RlYnVnQm9yZGVycyhwYWdl
KCktPnNldHRpbmdzKCktPnNob3dEZWJ1Z0JvcmRlcnMoKSk7CisgICAgICAgIG1fbm9uQ29tcG9z
aXRlZENvbnRlbnRIb3N0LT5zZXRPcGFxdWUoIWlzVHJhbnNwYXJlbnQoKSk7CiAKICAgICAgICAg
aWYgKG1fd2ViU2V0dGluZ3MtPmFwcGx5RGVmYXVsdERldmljZVNjYWxlRmFjdG9ySW5Db21wb3Np
dG9yKCkgJiYgcGFnZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpICE9IDEpIHsKICAgICAgICAgICAg
IEFTU0VSVChwYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCkpOwpAQCAtMzQ4OSw2ICszNDk1LDcg
QEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGJv
b2wgYWN0aXZlKQogICAgICAgICAgICAgbV9sYXllclRyZWVWaWV3LnNldFBhZ2VTY2FsZUZhY3Rv
ckFuZExpbWl0cyhwYWdlU2NhbGVGYWN0b3IoKSwgbV9taW5pbXVtUGFnZVNjYWxlRmFjdG9yLCBt
X21heGltdW1QYWdlU2NhbGVGYWN0b3IpOwogICAgICAgICAgICAgaWYgKG1fY29tcG9zaXRvclN1
cmZhY2VSZWFkeSkKICAgICAgICAgICAgICAgICBtX2xheWVyVHJlZVZpZXcuc2V0U3VyZmFjZVJl
YWR5KCk7CisgICAgICAgICAgICBtX2xheWVyVHJlZVZpZXcuc2V0SGFzVHJhbnNwYXJlbnRCYWNr
Z3JvdW5kKGlzVHJhbnNwYXJlbnQoKSk7CiAgICAgICAgICAgICB1cGRhdGVMYXllclRyZWVWaWV3
cG9ydCgpOwogICAgICAgICAgICAgbV9jbGllbnQtPmRpZEFjdGl2YXRlQ29tcG9zaXRvcihtX2xh
eWVyVHJlZVZpZXcuY29tcG9zaXRvcklkZW50aWZpZXIoKSk7CiAgICAgICAgICAgICBtX2lzQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCmluZGV4IDE2
NTdjMzM0MTg5MTMwM2NlYzMzZTYwOWRjYmQ3OWU0MWIyY2M3OWEuLmVlY2U1YTA2NDRjOTUyMjUw
MGQ5MjMzZGI1NTQ5YWNkMGMyM2E1M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCkBAIC0xNzM0LDQgKzE3
MzQsMzkgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBkb250VXNlT2xkUmVzb3Vy
Y2VzQWZ0ZXJMb3N0Q29udGV4dCkKICAgICBtX2hvc3RJbXBsLT5zd2FwQnVmZmVycygpOwogfQog
CitjbGFzcyBNb2NrRHJhd1F1YWRzVG9GaWxsU2NyZWVuQ29udGV4dCA6IHB1YmxpYyBGYWtlV2Vi
R3JhcGhpY3NDb250ZXh0M0QgeworcHVibGljOgorICAgIE1PQ0tfTUVUSE9EMSh1c2VQcm9ncmFt
LCB2b2lkKFdlYkdMSWQgcHJvZ3JhbSkpOworICAgIE1PQ0tfTUVUSE9ENChkcmF3RWxlbWVudHMs
IHZvaWQoV0dDM0RlbnVtIG1vZGUsIFdHQzNEc2l6ZWkgY291bnQsIFdHQzNEZW51bSB0eXBlLCBX
R0MzRGludHB0ciBvZmZzZXQpKTsKK307CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVz
dCwgaGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKQoreworICAgIE1vY2tEcmF3UXVhZHNUb0ZpbGxT
Y3JlZW5Db250ZXh0KiBtb2NrQ29udGV4dCA9IG5ldyBNb2NrRHJhd1F1YWRzVG9GaWxsU2NyZWVu
Q29udGV4dCgpOworICAgIFJlZlB0cjxDQ0dyYXBoaWNzQ29udGV4dD4gY29udGV4dCA9IENDR3Jh
cGhpY3NDb250ZXh0OjpjcmVhdGUzRChHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdy
YXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0KGFkb3B0UHRyKG1vY2tDb250ZXh0KSwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KSk7CisKKyAgICAvLyBSdW4g
dGVzdCBjYXNlCisgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IG15SG9zdEltcGwgPSBj
cmVhdGVMYXllclRyZWVIb3N0KGZhbHNlLCBjb250ZXh0LCBDQ0xheWVySW1wbDo6Y3JlYXRlKDEp
KTsKKyAgICBteUhvc3RJbXBsLT5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3I6OndoaXRlKTsKKwor
ICAgIC8vIFZlcmlmeSBvbmUgcXVhZCBpcyBkcmF3biB3aGVuIHRyYW5zcGFyZW50IGJhY2tncm91
bmQgc2V0IGlzIG5vdCBzZXQuCisgICAgbXlIb3N0SW1wbC0+c2V0SGFzVHJhbnNwYXJlbnRCYWNr
Z3JvdW5kKGZhbHNlKTsKKyAgICBFWFBFQ1RfQ0FMTCgqbW9ja0NvbnRleHQsIHVzZVByb2dyYW0o
XykpCisgICAgICAgIC5UaW1lcygxKTsKKyAgICBFWFBFQ1RfQ0FMTCgqbW9ja0NvbnRleHQsIGRy
YXdFbGVtZW50cyhfLCBfLCBfLCBfKSkKKyAgICAgICAgLlRpbWVzKDEpOworICAgIENDTGF5ZXJU
cmVlSG9zdEltcGw6OkZyYW1lRGF0YSBmcmFtZTsKKyAgICBFWFBFQ1RfVFJVRShteUhvc3RJbXBs
LT5wcmVwYXJlVG9EcmF3KGZyYW1lKSk7CisgICAgbXlIb3N0SW1wbC0+ZHJhd0xheWVycyhmcmFt
ZSk7CisgICAgbXlIb3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CisgICAgTW9jazo6
VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1vY2tDb250ZXh0KTsKKworICAgIC8vIFZlcmlm
eSBubyBxdWFkcyBhcmUgZHJhd24gd2hlbiB0cmFuc3BhcmVudCBiYWNrZ3JvdW5kIGlzIHNldC4K
KyAgICBteUhvc3RJbXBsLT5zZXRIYXNUcmFuc3BhcmVudEJhY2tncm91bmQodHJ1ZSk7CisgICAg
RVhQRUNUX1RSVUUobXlIb3N0SW1wbC0+cHJlcGFyZVRvRHJhdyhmcmFtZSkpOworICAgIG15SG9z
dEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOworICAgIG15SG9zdEltcGwtPmRpZERyYXdBbGxMYXll
cnMoZnJhbWUpOworICAgIE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKCZtb2NrQ29u
dGV4dCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0xheWVyUmVuZGVyZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9MYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0LmNwcAppbmRleCA0MDE3
ZDM4YmZmMjdiODNjMDFlMDAyMTM2MWE1MDY4NTg0MmEyYjk3Li43NmQ1OTY4MzJhMDE3OTVmZDEz
Njk1ZmRlYzA4MjdkYmExNGI2MzkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0xheWVyUmVuZGVyZXJDaHJvbWl1bVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvTGF5ZXJSZW5kZXJlckNocm9taXVtVGVzdC5jcHAKQEAgLTM1NywzICsz
NTcsNTggQEAgVEVTVChMYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0MiwgaW5pdGlhbGl6YXRpb25X
aXRob3V0R3B1TWVtb3J5TWFuYWdlckV4dGVuc2lvblMKIAogICAgIEVYUEVDVF9HVChtb2NrQ2xp
ZW50Lm1lbW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzKCksIDB1bCk7CiB9CisKK2NsYXNzIENsZWFy
Q291bnRpbmdDb250ZXh0IDogcHVibGljIEZha2VXZWJHcmFwaGljc0NvbnRleHQzRCB7CitwdWJs
aWM6CisgICAgQ2xlYXJDb3VudGluZ0NvbnRleHQoKSA6IG1fY2xlYXIoMCkgeyB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgY2xlYXIoV0dDM0RiaXRmaWVsZCkKKyAgICB7CisgICAgICAgIG1fY2xlYXIr
KzsKKyAgICB9CisKKyAgICBpbnQgY2xlYXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xlYXI7
IH0KKworcHJpdmF0ZToKKyAgICBpbnQgbV9jbGVhcjsKK307CisKK1RFU1QoTGF5ZXJSZW5kZXJl
ckNocm9taXVtVGVzdDIsIG9wYXF1ZUJhY2tncm91bmQpCit7CisgICAgRmFrZUNDUmVuZGVyZXJD
bGllbnQgbW9ja0NsaWVudDsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQg
PSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJD
b250ZXh0KGFkb3B0UHRyKG5ldyBDbGVhckNvdW50aW5nQ29udGV4dCksIEdyYXBoaWNzQ29udGV4
dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7CisgICAgRmFrZUxheWVyUmVuZGVyZXJD
aHJvbWl1bSBsYXllclJlbmRlcmVyQ2hyb21pdW0oJm1vY2tDbGllbnQsIGNvbnRleHQpOworCisg
ICAgbW9ja0NsaWVudC5yb290UmVuZGVyUGFzcygpLT5zZXRIYXNUcmFuc3BhcmVudEJhY2tncm91
bmQoZmFsc2UpOworCisgICAgRVhQRUNUX1RSVUUobGF5ZXJSZW5kZXJlckNocm9taXVtLmluaXRp
YWxpemUoKSk7CisKKyAgICBsYXllclJlbmRlcmVyQ2hyb21pdW0uYmVnaW5EcmF3aW5nRnJhbWUo
bW9ja0NsaWVudC5yb290UmVuZGVyUGFzcygpKTsKKyAgICBsYXllclJlbmRlcmVyQ2hyb21pdW0u
ZHJhd1JlbmRlclBhc3MobW9ja0NsaWVudC5yb290UmVuZGVyUGFzcygpLCBGbG9hdFJlY3QoKSk7
CisgICAgbGF5ZXJSZW5kZXJlckNocm9taXVtLmZpbmlzaERyYXdpbmdGcmFtZSgpOworCisgICAg
Ly8gT24gREVCVUcgYnVpbGRzLCByZW5kZXIgcGFzc2VzIHdpdGggb3BhcXVlIGJhY2tncm91bmQg
Y2xlYXIgdG8gYmx1ZSB0bworICAgIC8vIGVhc2lseSBzZWUgcmVnaW9ucyB0aGF0IHdlcmUgbm90
IGRyYXduIG9uIHRoZSBzY3JlZW4uCisjaWYgZGVmaW5lZChOREVCVUcpCisgICAgRVhQRUNUX0VR
KDAsIHN0YXRpY19jYXN0PENsZWFyQ291bnRpbmdDb250ZXh0Kj4oR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0QoY29udGV4dC5nZXQoKSkpLT5jbGVh
ckNvdW50KCkpOworI2Vsc2UKKyAgICBFWFBFQ1RfRVEoMSwgc3RhdGljX2Nhc3Q8Q2xlYXJDb3Vu
dGluZ0NvbnRleHQqPihHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGlj
c0NvbnRleHQzRChjb250ZXh0LmdldCgpKSktPmNsZWFyQ291bnQoKSk7CisjZW5kaWYKK30KKwor
VEVTVChMYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0MiwgdHJhbnNwYXJlbnRCYWNrZ3JvdW5kKQor
eworICAgIEZha2VDQ1JlbmRlcmVyQ2xpZW50IG1vY2tDbGllbnQ7CisgICAgUmVmUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiBjb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVH
cmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dChhZG9wdFB0cihuZXcgQ2xlYXJDb3VudGluZ0Nv
bnRleHQpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOwor
ICAgIEZha2VMYXllclJlbmRlcmVyQ2hyb21pdW0gbGF5ZXJSZW5kZXJlckNocm9taXVtKCZtb2Nr
Q2xpZW50LCBjb250ZXh0KTsKKworICAgIG1vY2tDbGllbnQucm9vdFJlbmRlclBhc3MoKS0+c2V0
SGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKHRydWUpOworCisgICAgRVhQRUNUX1RSVUUobGF5ZXJS
ZW5kZXJlckNocm9taXVtLmluaXRpYWxpemUoKSk7CisKKyAgICBsYXllclJlbmRlcmVyQ2hyb21p
dW0uYmVnaW5EcmF3aW5nRnJhbWUobW9ja0NsaWVudC5yb290UmVuZGVyUGFzcygpKTsKKyAgICBs
YXllclJlbmRlcmVyQ2hyb21pdW0uZHJhd1JlbmRlclBhc3MobW9ja0NsaWVudC5yb290UmVuZGVy
UGFzcygpLCBGbG9hdFJlY3QoKSk7CisgICAgbGF5ZXJSZW5kZXJlckNocm9taXVtLmZpbmlzaERy
YXdpbmdGcmFtZSgpOworCisgICAgRVhQRUNUX0VRKDEsIHN0YXRpY19jYXN0PENsZWFyQ291bnRp
bmdDb250ZXh0Kj4oR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpleHRyYWN0V2ViR3JhcGhpY3ND
b250ZXh0M0QoY29udGV4dC5nZXQoKSkpLT5jbGVhckNvdW50KCkpOworfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>