<?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>69796</bug_id>
          
          <creation_ts>2011-10-10 15:55:19 -0700</creation_ts>
          <short_desc>Support creating composited layers for fixed position elements</short_desc>
          <delta_ts>2011-12-19 11:13:59 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          <dependson>70067</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Vangelis Kokkevis">vangelis</reporter>
          <assigned_to name="Vangelis Kokkevis">vangelis</assigned_to>
          <cc>abarth</cc>
    
    <cc>aestes</cc>
    
    <cc>enne</cc>
    
    <cc>gustavo</cc>
    
    <cc>hclam</cc>
    
    <cc>jamesr</cc>
    
    <cc>ojan</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>481249</commentid>
    <comment_count>0</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-10 15:55:19 -0700</bug_when>
    <thetext>Add an optional setting for promoting fixed position elements to become composited if they are inside a scrolling frame.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481253</commentid>
    <comment_count>1</comment_count>
      <attachid>110427</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-10 16:03:30 -0700</bug_when>
    <thetext>Created attachment 110427
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481257</commentid>
    <comment_count>2</comment_count>
      <attachid>110427</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-10 16:07:16 -0700</bug_when>
    <thetext>Comment on attachment 110427
Patch

Waiting on ews results to pickup missing export symbols. I will post a new patch once I have them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481263</commentid>
    <comment_count>3</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-10-10 16:15:16 -0700</bug_when>
    <thetext>You&apos;ll break z-index and clipping if you just make position:fixed do compositing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481269</commentid>
    <comment_count>4</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-10-10 16:27:40 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; You&apos;ll break z-index and clipping if you just make position:fixed do compositing.

Why would the path in this patch be any different than a fixed position element that became composited via some other trigger?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481272</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-10-10 16:30:34 -0700</bug_when>
    <thetext>Because other triggers like -webkit-transform create stacking context. position:fixed does not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481376</commentid>
    <comment_count>6</comment_count>
      <attachid>110427</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-10-10 18:25:33 -0700</bug_when>
    <thetext>Comment on attachment 110427
Patch

Attachment 110427 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/10031026</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481704</commentid>
    <comment_count>7</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-11 10:13:20 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; You&apos;ll break z-index and clipping if you just make position:fixed do compositing.

Good catch!  Thanks, Simon. I&apos;ll update the patch and only make fixed position elements composited if they create a stacking context (e.g. have a z-index).  That still covers a number of useful cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481796</commentid>
    <comment_count>8</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-10-11 12:03:33 -0700</bug_when>
    <thetext>Or you can have position:fixed create stacking context, although that does break the web slightly.

I have a patch already for position:fixed and compositing. I&apos;ll put it up here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481813</commentid>
    <comment_count>9</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-10-11 12:20:43 -0700</bug_when>
    <thetext>Actually I&apos;ll just wait until you&apos;ve made another patch and make comments. I don&apos;t have any additional code to add.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481825</commentid>
    <comment_count>10</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-10-11 12:33:32 -0700</bug_when>
    <thetext>I think there are 3 interesting cases:

1.) position:fixed element is a stacking context for other reasons
2.) position:fixed element is not a stacking context, and treating is as a stacking context would change the rendering
3.) position:fixed element is not a stacking context but the page would render identically is if were a stacking context.

I think (3) is actually the most common on the web - how hard would it be to detect?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481832</commentid>
    <comment_count>11</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-10-11 12:40:14 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; I think there are 3 interesting cases:
&gt; 
&gt; 1.) position:fixed element is a stacking context for other reasons
&gt; 2.) position:fixed element is not a stacking context, and treating is as a stacking context would change the rendering
&gt; 3.) position:fixed element is not a stacking context but the page would render identically is if were a stacking context.
&gt; 
&gt; I think (3) is actually the most common on the web - how hard would it be to detect?

I would like to do 3) for other things too (like overflow), but haven&apos;t figured out how hard it would be yet. It should be doable by analyzing the structure of the z-order tree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481840</commentid>
    <comment_count>12</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-10-11 12:51:23 -0700</bug_when>
    <thetext>I think (and double-checked with Tab) just checking for descendants of the position:fixed element that have a z-index set should be good enough to start - if there are no descendants with a z-index set, it&apos;s definitely fine to treat the element as if it established a stacking context.  If descendants do have a z-index set, it&apos;s still fine so long as the z-index values are higher than anything else in the page. We also don&apos;t have to worry about descendants of elements that establish stacking contexts of their own that are descendants of the position:fixed element.

How about we just keep a bit on RenderLayer tracking whether descendants inside this stacking context have z-index set? Should catch most cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481846</commentid>
    <comment_count>13</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-10-11 13:00:47 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; I think (and double-checked with Tab) just checking for descendants of the position:fixed element that have a z-index set should be good enough to start - if there are no descendants with a z-index set, it&apos;s definitely fine to treat the element as if it established a stacking context.  If descendants do have a z-index set, it&apos;s still fine so long as the z-index values are higher than anything else in the page. We also don&apos;t have to worry about descendants of elements that establish stacking contexts of their own that are descendants of the position:fixed element.

Don&apos;t forget that opacity and transform also create stacking context, so I think it&apos;s more complex than this.

&gt; How about we just keep a bit on RenderLayer tracking whether descendants inside this stacking context have z-index set? Should catch most cases.

You&apos;re really asking whether it &apos;renders atomically&apos; i think. This is hard to know, since positioned descendent are hoisted up into the z-order lists of the enclosing stacking context. You have to figure out whether the fixed thing, and its RenderLayer descendants are all adjacent siblings in that z-order list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482011</commentid>
    <comment_count>14</comment_count>
      <attachid>110600</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-11 16:29:09 -0700</bug_when>
    <thetext>Created attachment 110600
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482016</commentid>
    <comment_count>15</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-11 16:32:30 -0700</bug_when>
    <thetext>Updated patch creates compositing layers only if the fixed position element has its own stacking context. From a quick survey of common pages, it appears that position:fixed is usually accompanied by a z-index which does force the creation of a new stacking context.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482023</commentid>
    <comment_count>16</comment_count>
      <attachid>110600</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-10-11 16:36:27 -0700</bug_when>
    <thetext>Comment on attachment 110600
Patch

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

&gt; Source/WebCore/ChangeLog:14
&gt; +        This CL adds the necessary WebCore setting and modifies the RLC logic to take into

&quot;CL&quot;?

&gt; Source/WebCore/platform/graphics/GraphicsLayer.h:275
&gt; +    bool fixedPositioned() const { return m_fixedPositioned; }
&gt; +    virtual void setFixedPositioned(bool b) { m_fixedPositioned = b; }
&gt; +
&gt; +    // Set to true when the layer corresponds to the root layer of a Frame.
&gt; +    bool isFrameRoot() const { return m_isFrameRoot; }
&gt; +    virtual void setIsFrameRoot(bool b) { m_isFrameRoot = b; }

I don&apos;t think these belong on GraphicsLayer. It shouldn&apos;t really know anything about position or frames.

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:1499
&gt; +bool RenderLayerCompositor::requiresCompositingForFixedPosition(RenderObject* renderer) const

I&apos;d call this requiresCompositingForPosition()

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:1502
&gt; +    if (!(renderer-&gt;isPositioned() &amp;&amp; renderer-&gt;style()-&gt;position() == FixedPosition &amp;&amp; renderer-&gt;enclosingLayer()-&gt;isStackingContext()))
&gt; +        return false;

The enclosingLayer()-&gt;isStackingContext() test is too mysterious without a detailed comment. I&apos;m not sure it&apos;s right. Also, the tests should exercise more combinations of fixed with stacking, as discussed in the bug.

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:1515
&gt; +    // Fixed position elements get composited only when inside a frame that scrolls.
&gt; +    // If we can&apos;t reliably know the size of the enclosing frame, don&apos;t change compositing state.
&gt; +    m_compositingDependsOnGeometry = true;
&gt; +    if (m_renderView-&gt;needsLayout())
&gt; +        return m_renderView-&gt;hasLayer() &amp;&amp; m_renderView-&gt;layer()-&gt;isComposited();
&gt; +
&gt; +    ScrollView* scrollView = m_renderView-&gt;frameView();
&gt; +    return scrollView-&gt;verticalScrollbar() || scrollView-&gt;horizontalScrollbar();

I think there&apos;s too much Chrome-specific behavior baked in here. For example, similar behavior might not make any sense on mobile platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482122</commentid>
    <comment_count>17</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-11 18:12:32 -0700</bug_when>
    <thetext>Thanks for the speedy review!

(In reply to comment #16)
&gt; (From update of attachment 110600 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=110600&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:14
&gt; &gt; +        This CL adds the necessary WebCore setting and modifies the RLC logic to take into
&gt; 
&gt; &quot;CL&quot;?

CL = changelist  ... I&apos;ll remove :)
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/GraphicsLayer.h:275
&gt; &gt; +    bool fixedPositioned() const { return m_fixedPositioned; }
&gt; &gt; +    virtual void setFixedPositioned(bool b) { m_fixedPositioned = b; }
&gt; &gt; +
&gt; &gt; +    // Set to true when the layer corresponds to the root layer of a Frame.
&gt; &gt; +    bool isFrameRoot() const { return m_isFrameRoot; }
&gt; &gt; +    virtual void setIsFrameRoot(bool b) { m_isFrameRoot = b; }
&gt; 
&gt; I don&apos;t think these belong on GraphicsLayer. It shouldn&apos;t really know anything about position or frames.
&gt; 

To give some context about this change, the end goal of this effort is to give the compositor the ability to scroll a page/iframe without having to rely on webkit to adjust fixed position elements.  This in similar vain to being able to run animations independent of the main webkit thread.

To do that, we need some meta-information about how a layer positions itself to be stored in the GraphicsLayer. 

&gt; &gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:1499
&gt; &gt; +bool RenderLayerCompositor::requiresCompositingForFixedPosition(RenderObject* renderer) const
&gt; 
&gt; I&apos;d call this requiresCompositingForPosition()
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:1502
&gt; &gt; +    if (!(renderer-&gt;isPositioned() &amp;&amp; renderer-&gt;style()-&gt;position() == FixedPosition &amp;&amp; renderer-&gt;enclosingLayer()-&gt;isStackingContext()))
&gt; &gt; +        return false;
&gt; 
&gt; The enclosingLayer()-&gt;isStackingContext() test is too mysterious without a detailed comment. I&apos;m not sure it&apos;s right. 

RenderLayer::isStackingContext() returns true for layers with an explicit z-index. In CSSStyleSelector.cpp the z-index is set explicitly to 0 if the element has a transform property, mask, reflection, or opacity &lt; 1.  It looks like it covers all the bases.
 

&gt; Also, the tests should exercise more combinations of fixed with stacking, as discussed in the bug.

Sure, will do.

&gt; 
&gt; &gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:1515
&gt; &gt; +    // Fixed position elements get composited only when inside a frame that scrolls.
&gt; &gt; +    // If we can&apos;t reliably know the size of the enclosing frame, don&apos;t change compositing state.
&gt; &gt; +    m_compositingDependsOnGeometry = true;
&gt; &gt; +    if (m_renderView-&gt;needsLayout())
&gt; &gt; +        return m_renderView-&gt;hasLayer() &amp;&amp; m_renderView-&gt;layer()-&gt;isComposited();
&gt; &gt; +
&gt; &gt; +    ScrollView* scrollView = m_renderView-&gt;frameView();
&gt; &gt; +    return scrollView-&gt;verticalScrollbar() || scrollView-&gt;horizontalScrollbar();
&gt; 
&gt; I think there&apos;s too much Chrome-specific behavior baked in here. For example, similar behavior might not make any sense on mobile platforms.

Is the issue that I&apos;m using the presence of scroll bars in the ScrollView to determine whether the layer is scrolling?  I&apos;ll change it to pick it up from the RenderLayer directly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482130</commentid>
    <comment_count>18</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-10-11 18:24:51 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; Thanks for the speedy review!
&gt; 
&gt; (In reply to comment #16)
&gt; &gt; (From update of attachment 110600 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=110600&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/ChangeLog:14
&gt; &gt; &gt; +        This CL adds the necessary WebCore setting and modifies the RLC logic to take into
&gt; &gt; 
&gt; &gt; &quot;CL&quot;?
&gt; 
&gt; CL = changelist  ... I&apos;ll remove :)
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/GraphicsLayer.h:275
&gt; &gt; &gt; +    bool fixedPositioned() const { return m_fixedPositioned; }
&gt; &gt; &gt; +    virtual void setFixedPositioned(bool b) { m_fixedPositioned = b; }
&gt; &gt; &gt; +
&gt; &gt; &gt; +    // Set to true when the layer corresponds to the root layer of a Frame.
&gt; &gt; &gt; +    bool isFrameRoot() const { return m_isFrameRoot; }
&gt; &gt; &gt; +    virtual void setIsFrameRoot(bool b) { m_isFrameRoot = b; }
&gt; &gt; 
&gt; &gt; I don&apos;t think these belong on GraphicsLayer. It shouldn&apos;t really know anything about position or frames.
&gt; &gt; 
&gt; 
&gt; To give some context about this change, the end goal of this effort is to give the compositor the ability to scroll a page/iframe without having to rely on webkit to adjust fixed position elements.  This in similar vain to being able to run animations independent of the main webkit thread.
&gt; 
&gt; To do that, we need some meta-information about how a layer positions itself to be stored in the GraphicsLayer. 

I understand, but I think you should store this information outside of GraphicsLayer, or phrase it in such a way that it&apos;s layout-agnostic.

iOS5 now supports compositing for position:fixed, but it doesn&apos;t need to touch GraphicsLayer at all for this.

&gt; &gt; &gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:1499
&gt; &gt; &gt; +bool RenderLayerCompositor::requiresCompositingForFixedPosition(RenderObject* renderer) const
&gt; &gt; 
&gt; &gt; I&apos;d call this requiresCompositingForPosition()
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:1502
&gt; &gt; &gt; +    if (!(renderer-&gt;isPositioned() &amp;&amp; renderer-&gt;style()-&gt;position() == FixedPosition &amp;&amp; renderer-&gt;enclosingLayer()-&gt;isStackingContext()))
&gt; &gt; &gt; +        return false;
&gt; &gt; 
&gt; &gt; The enclosingLayer()-&gt;isStackingContext() test is too mysterious without a detailed comment. I&apos;m not sure it&apos;s right. 
&gt; 
&gt; RenderLayer::isStackingContext() returns true for layers with an explicit z-index. In CSSStyleSelector.cpp the z-index is set explicitly to 0 if the element has a transform property, mask, reflection, or opacity &lt; 1.  It looks like it covers all the bases.

The enclosingLayer is confusing. You want renderer-&gt;layer() (which it will have, since it&apos;s positioned).

So I guess you&apos;ll only do fast scrolling if all the fixed things on the page happen to also be stacking contexts? My guess is that won&apos;t cover the majority of pages with fixed.

&gt; &gt; Also, the tests should exercise more combinations of fixed with stacking, as discussed in the bug.
&gt; 
&gt; Sure, will do.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:1515
&gt; &gt; &gt; +    // Fixed position elements get composited only when inside a frame that scrolls.
&gt; &gt; &gt; +    // If we can&apos;t reliably know the size of the enclosing frame, don&apos;t change compositing state.
&gt; &gt; &gt; +    m_compositingDependsOnGeometry = true;
&gt; &gt; &gt; +    if (m_renderView-&gt;needsLayout())
&gt; &gt; &gt; +        return m_renderView-&gt;hasLayer() &amp;&amp; m_renderView-&gt;layer()-&gt;isComposited();
&gt; &gt; &gt; +
&gt; &gt; &gt; +    ScrollView* scrollView = m_renderView-&gt;frameView();
&gt; &gt; &gt; +    return scrollView-&gt;verticalScrollbar() || scrollView-&gt;horizontalScrollbar();
&gt; &gt; 
&gt; &gt; I think there&apos;s too much Chrome-specific behavior baked in here. For example, similar behavior might not make any sense on mobile platforms.
&gt; 
&gt; Is the issue that I&apos;m using the presence of scroll bars in the ScrollView to determine whether the layer is scrolling?  I&apos;ll change it to pick it up from the RenderLayer directly.

I think the decision about whether fixedpos causes compositing needs to be pushed into client code somehow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482258</commentid>
    <comment_count>19</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-11 23:43:01 -0700</bug_when>
    <thetext>&gt; &gt; &gt; I don&apos;t think these belong on GraphicsLayer. It shouldn&apos;t really know anything about position or frames.
&gt; &gt; &gt; 
&gt; &gt; 
&gt; &gt; To give some context about this change, the end goal of this effort is to give the compositor the ability to scroll a page/iframe without having to rely on webkit to adjust fixed position elements.  This in similar vain to being able to run animations independent of the main webkit thread.
&gt; &gt; 
&gt; &gt; To do that, we need some meta-information about how a layer positions itself to be stored in the GraphicsLayer. 
&gt; 
&gt; I understand, but I think you should store this information outside of GraphicsLayer, or phrase it in such a way that it&apos;s layout-agnostic.
&gt; 
&gt; iOS5 now supports compositing for position:fixed, but it doesn&apos;t need to touch GraphicsLayer at all for this.
&gt;

Any chance that code could be shared? :)

I&apos;ll see if I can tie this somehow to the existing Animation hooks of GraphicsLayer.

 
&gt; &gt; &gt; &gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:1499
&gt; &gt; &gt; &gt; +bool RenderLayerCompositor::requiresCompositingForFixedPosition(RenderObject* renderer) const
&gt; &gt; &gt; 
&gt; &gt; &gt; I&apos;d call this requiresCompositingForPosition()
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:1502
&gt; &gt; &gt; &gt; +    if (!(renderer-&gt;isPositioned() &amp;&amp; renderer-&gt;style()-&gt;position() == FixedPosition &amp;&amp; renderer-&gt;enclosingLayer()-&gt;isStackingContext()))
&gt; &gt; &gt; &gt; +        return false;
&gt; &gt; &gt; 
&gt; &gt; &gt; The enclosingLayer()-&gt;isStackingContext() test is too mysterious without a detailed comment. I&apos;m not sure it&apos;s right. 
&gt; &gt; 
&gt; &gt; RenderLayer::isStackingContext() returns true for layers with an explicit z-index. In CSSStyleSelector.cpp the z-index is set explicitly to 0 if the element has a transform property, mask, reflection, or opacity &lt; 1.  It looks like it covers all the bases.
&gt; 
&gt; The enclosingLayer is confusing. You want renderer-&gt;layer() (which it will have, since it&apos;s positioned).
&gt; 

Ah, got it!

&gt; So I guess you&apos;ll only do fast scrolling if all the fixed things on the page happen to also be stacking contexts? My guess is that won&apos;t cover the majority of pages with fixed.
&gt; 

That&apos;s true, at least until we figure out how to lift the stacking context restriction.

&gt; &gt; &gt; Also, the tests should exercise more combinations of fixed with stacking, as discussed in the bug.
&gt; &gt; 
&gt; &gt; Sure, will do.
&gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:1515
&gt; &gt; &gt; &gt; +    // Fixed position elements get composited only when inside a frame that scrolls.
&gt; &gt; &gt; &gt; +    // If we can&apos;t reliably know the size of the enclosing frame, don&apos;t change compositing state.
&gt; &gt; &gt; &gt; +    m_compositingDependsOnGeometry = true;
&gt; &gt; &gt; &gt; +    if (m_renderView-&gt;needsLayout())
&gt; &gt; &gt; &gt; +        return m_renderView-&gt;hasLayer() &amp;&amp; m_renderView-&gt;layer()-&gt;isComposited();
&gt; &gt; &gt; &gt; +
&gt; &gt; &gt; &gt; +    ScrollView* scrollView = m_renderView-&gt;frameView();
&gt; &gt; &gt; &gt; +    return scrollView-&gt;verticalScrollbar() || scrollView-&gt;horizontalScrollbar();
&gt; &gt; &gt; 
&gt; &gt; &gt; I think there&apos;s too much Chrome-specific behavior baked in here. For example, similar behavior might not make any sense on mobile platforms.
&gt; &gt; 
&gt; &gt; Is the issue that I&apos;m using the presence of scroll bars in the ScrollView to determine whether the layer is scrolling?  I&apos;ll change it to pick it up from the RenderLayer directly.
&gt; 
&gt; I think the decision about whether fixedpos causes compositing needs to be pushed into client code somehow.

Is it because the iOS implementation for the same effect is different and somehow conflicting with this one?  I did not intend to make this code Chrome-specific.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483645</commentid>
    <comment_count>20</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-13 16:46:06 -0700</bug_when>
    <thetext>I decided to split this into a few patches to separate out the issues raised by Simon&apos;s review:

Patch #1: https://bugs.webkit.org/show_bug.cgi?id=70067 : Add the necessary hooks for client code to decide whether to create a compositing layer.
Patch #2: Once #1 lands, I will move the fixed position layer creation logic into Chrome&apos;s implementation of ChromeClient.  This should only touch Chrome-specific code.
Patch #3: Deal with any necessary additions to the GraphicsLayer interface.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487188</commentid>
    <comment_count>21</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-19 18:01:51 -0700</bug_when>
    <thetext>Is there a plan for the recently released iOS5 WebKit code that deals with fixed position elements to be merged into trunk? It would be nice to avoid having each platform doing its own implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487224</commentid>
    <comment_count>22</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-10-19 19:08:27 -0700</bug_when>
    <thetext>Sorry for my lack of input here. Other stuff getting in the way.

There is very little iOS code that is sharable; mostly just requiresCompositiongForPosition(), and some ChromeClient callbacks used to register/unregister fixed position layers with platform code.

I&apos;m not sure where the code should live that looks to see if the view is scrollable. Maybe it can be in RLC, and platforms which don&apos;t want it can #ifdef it out.

There is another wrinkle this patch doesn&apos;t deal with, which is that position:fixed inside a transform doesn&apos;t behave fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488015</commentid>
    <comment_count>23</comment_count>
      <attachid>111876</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-20 17:15:46 -0700</bug_when>
    <thetext>Created attachment 111876
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488019</commentid>
    <comment_count>24</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-20 17:19:14 -0700</bug_when>
    <thetext>New patch uploaded. This one only deals with creating compositing layers for position:fixed elements. It doesn&apos;t modify GraphicsLayer or require elements to be in a scrolling frame to become composited.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488026</commentid>
    <comment_count>25</comment_count>
      <attachid>111876</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-10-20 17:27:12 -0700</bug_when>
    <thetext>Comment on attachment 111876
Patch

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

You need to check that the

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:1504
&gt; +    // position:fixed elements that create their own stacking context (e.g. have an explicit z-index,
&gt; +    // opacity, transform) can get their own composited layer.
&gt; +    if (!(renderer-&gt;isPositioned() &amp;&amp; renderer-&gt;style()-&gt;position() == FixedPosition &amp;&amp; layer-&gt;isStackingContext()))
&gt; +        return false;

This will incorrectly return true for a position:fixed element inside a transformed one. You should also consider nested position:fixed too. Both need test cases.

You want to check that the container() of the renderer is the RenderView, but beware; this method may be called before the renderers have been hooked up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488072</commentid>
    <comment_count>26</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-20 18:32:27 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; (From update of attachment 111876 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=111876&amp;action=review
&gt; 
&gt; You need to check that the
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:1504
&gt; &gt; +    // position:fixed elements that create their own stacking context (e.g. have an explicit z-index,
&gt; &gt; +    // opacity, transform) can get their own composited layer.
&gt; &gt; +    if (!(renderer-&gt;isPositioned() &amp;&amp; renderer-&gt;style()-&gt;position() == FixedPosition &amp;&amp; layer-&gt;isStackingContext()))
&gt; &gt; +        return false;
&gt; 
&gt; This will incorrectly return true for a position:fixed element inside a transformed one. You should also consider nested position:fixed too. Both need test cases.
&gt; 

Do we need to worry about it here? It seems that we can safely create a layer even if we&apos;re below a transformed element.  It&apos;s the logic that handles positioning the layer during scrolls that will need to make sure it stops at the closest transformed ancestor instead of going all the way up to the frame.  


&gt; You want to check that the container() of the renderer is the RenderView, but beware; this method may be called before the renderers have been hooked up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488730</commentid>
    <comment_count>27</comment_count>
      <attachid>112035</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-21 15:38:09 -0700</bug_when>
    <thetext>Created attachment 112035
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488733</commentid>
    <comment_count>28</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-21 15:41:40 -0700</bug_when>
    <thetext>Modified the patch to check that the container is indeed our RenderView.  I had to add a flag to bypass the early out that happens when we try to update the composited layers and we think nothing changed. Simon, please have another look?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490463</commentid>
    <comment_count>29</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-25 16:40:27 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; Modified the patch to check that the container is indeed our RenderView.  I had to add a flag to bypass the early out that happens when we try to update the composited layers and we think nothing changed. Simon, please have another look?

Simon, any thoughts on this last patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491176</commentid>
    <comment_count>30</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-26 14:15:42 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; (In reply to comment #28)
&gt; &gt; Modified the patch to check that the container is indeed our RenderView.  I had to add a flag to bypass the early out that happens when we try to update the composited layers and we think nothing changed. Simon, please have another look?
&gt; 
&gt; Simon, any thoughts on this last patch?

Looking more closely at the iOS code I&apos;m not sure I find it to be an improvement over what I posted in my first patch.  Essentially the iOS code ends up calling into the ChromeClient every time a layer is touched to notify it whether it is fixed position or not.  It will do that for every layer in the hierarchy.

I find it much cleaner and more efficient to set the fixed position property directly on the GraphicsLayer at the same time the rest of the GL properties are being updated.  I realize that GraphicsLayer&apos;s currently don&apos;t have any concept or API&apos;s related to layout properties, but fixed positioning seems to be universally useful.

Simon, how can get this moving along?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491200</commentid>
    <comment_count>31</comment_count>
      <attachid>112035</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-10-26 14:49:38 -0700</bug_when>
    <thetext>Comment on attachment 112035
Patch

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

r+ but I&apos;d prefer m_compositingNeedsUpdate and m_compositingDependsOnGeometry be combined.

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:1505
&gt; +    // position:fixed elements that create their own stacking context (e.g. have an explicit z-index,
&gt; +    // opacity, transform) can get their own composited layer.

Would be nice to explain here why you need the stacking context check.

&gt; Source/WebCore/rendering/RenderLayerCompositor.h:303
&gt; +    mutable bool m_compositingNeedsUpdate;

This has a similar role to m_compositingDependsOnGeometry; can they be combined into one &quot;composting must be updated after layout&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491217</commentid>
    <comment_count>32</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-26 15:18:12 -0700</bug_when>
    <thetext>(In reply to comment #31)
&gt; (From update of attachment 112035 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=112035&amp;action=review
&gt; 
&gt; r+ but I&apos;d prefer m_compositingNeedsUpdate and m_compositingDependsOnGeometry be combined.
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:1505
&gt; &gt; +    // position:fixed elements that create their own stacking context (e.g. have an explicit z-index,
&gt; &gt; +    // opacity, transform) can get their own composited layer.
&gt; 
&gt; Would be nice to explain here why you need the stacking context check.
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderLayerCompositor.h:303
&gt; &gt; +    mutable bool m_compositingNeedsUpdate;
&gt; 
&gt; This has a similar role to m_compositingDependsOnGeometry; can they be combined into one &quot;composting must be updated after layout&quot;?

I agree, it would be nice if they could be merged.  However, m_compositingDependsOnGeometry is unfortunately a sticky bit whereas m_compositingNeedsUpdate can be cleared after layout has occurred.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491265</commentid>
    <comment_count>33</comment_count>
      <attachid>112616</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-26 16:32:23 -0700</bug_when>
    <thetext>Created attachment 112616
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491268</commentid>
    <comment_count>34</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-26 16:33:28 -0700</bug_when>
    <thetext>(In reply to comment #33)
&gt; Created an attachment (id=112616) [details]
&gt; Patch

One more attempt to see if the win-ews bot passes this time. No review requested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491311</commentid>
    <comment_count>35</comment_count>
      <attachid>112628</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-26 17:59:17 -0700</bug_when>
    <thetext>Created attachment 112628
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491312</commentid>
    <comment_count>36</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-26 18:00:23 -0700</bug_when>
    <thetext>(In reply to comment #35)
&gt; Created an attachment (id=112628) [details]
&gt; Patch

This time without the WebKit2 deps files.  No review requested.  Still trying to get green bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491871</commentid>
    <comment_count>37</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-27 13:28:59 -0700</bug_when>
    <thetext>Committed r98627: &lt;http://trac.webkit.org/changeset/98627&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524040</commentid>
    <comment_count>38</comment_count>
      <attachid>112628</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-12-19 11:13:59 -0800</bug_when>
    <thetext>Comment on attachment 112628
Patch

Cleared review? from attachment 112628 so that this bug does not appear in http://webkit.org/pending-review.  If you would like this patch reviewed, please attach it to a new bug (or re-open this bug before marking it for review again).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110427</attachid>
            <date>2011-10-10 16:03:30 -0700</date>
            <delta_ts>2011-10-11 16:29:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69796-20111010160329.patch</filename>
            <type>text/plain</type>
            <size>22070</size>
            <attacher name="Vangelis Kokkevis">vangelis</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3MTAwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDUgQEAKKzIwMTEtMTAtMTAgIFZhbmdlbGlz
IEtva2tldmlzICA8dmFuZ2VsaXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFN1cHBvcnQgY3Jl
YXRpbmcgY29tcG9zaXRpbmcgbGF5ZXJzIGZvciBmaXhlZCBwb3NpdGlvbiBlbGVtZW50cyB3aXRo
aW4gYSBzY3JvbGxpbmcKKyAgICAgICAgZnJhbWUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTc5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgQ0wgYWRkcyB0aGUgbmVjZXNzYXJ5IFdlYkNvcmUg
c2V0dGluZyBhbmQgbW9kaWZpZXMgdGhlIFJMQyBsb2dpYyB0byB0YWtlIGludG8KKyAgICAgICAg
YWNjb3VudCB0aGUgcG9zaXRpb25pbmcgb2YgdGhlIGxheWVyIGFuZCB3aGV0aGVyIGl0cyBlbmNs
b3NpbmcgZnJhbWUgc2Nyb2xscy4gIEl0CisgICAgICAgIGFsc28gcGFzc2VzIGRvd24gdGhlIGZp
eGVkIHBvc2l0aW9uIGFuZCBpZnJhbWUgcHJvcGVydHkgaW5mbyBkb3duIHRvIHRoZSBHcmFwaGlj
c0xheWVyCisgICAgICAgIHdoZXJlIGl0IGNhbiBiZSB1c2VkIGJ5IHRoZSBjb21wb3NpdG9yIHRv
IGFkanVzdCBsYXllciBwb3NpdGlvbmluZy4KKworICAgICAgICBGaW5hbGx5IGl0IGFkZHMgYSBt
ZXRob2QgdG8gd2luZG93LmludGVybmFscyB0aGF0IGFsbG93cyBzZXR0aW5nIHRoZSBmbGFnIGZy
b20gRFJUIGZvcgorICAgICAgICB0ZXN0aW5nIHB1cnBvc2VzLgorCisgICAgICAgIFRlc3RzOiBj
b21wb3NpdGluZy9nZW9tZXRyeS9maXhlZC1wb3NpdGlvbi1jb21wb3NpdGVkLXN3aXRjaC1pbi1p
ZnJhbWUuaHRtbAorICAgICAgICAgICAgICAgY29tcG9zaXRpbmcvZ2VvbWV0cnkvZml4ZWQtcG9z
aXRpb24tY29tcG9zaXRlZC1zd2l0Y2guaHRtbAorCisgICAgICAgICogcGFnZS9TZXR0aW5ncy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6U2V0dGluZ3MpOgorICAgICAgICAoV2Vi
Q29yZTo6U2V0dGluZ3M6OnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9u
RW5hYmxlZCk6CisgICAgICAgICogcGFnZS9TZXR0aW5ncy5oOgorICAgICAgICAoV2ViQ29yZTo6
U2V0dGluZ3M6OmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpHcmFwaGljc0xheWVyKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyOjpmaXhlZFBvc2l0aW9uZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
cjo6c2V0Rml4ZWRQb3NpdGlvbmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6
OmlzRnJhbWVSb290KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OnNldElzRnJh
bWVSb290KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMYXllckdl
b21ldHJ5KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3Np
dGluZ0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVx
dWlyZXNDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJMYXllckNvbXBvc2l0b3IuaDoKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNldEVuYWJsZUNvbXBvc2l0aW5nRm9yRml4
ZWRQb3NpdGlvbik6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaDoKKyAgICAgICAgKiB0
ZXN0aW5nL0ludGVybmFscy5pZGw6CisKIDIwMTEtMDktMjAgIEplciBOb2JsZSAgPGplci5ub2Js
ZUBhcHBsZS5jb20+CiAKICAgICAgICAgTWVkaWFDb250cm9sU2Vla0J1dHRvbkVsZW1lbnQgc2hv
dWxkIHN1cHBvcnQgc2Vla2luZyBieSBjaGFuZ2luZyB0aGUgcGxheWJhY2sgcmF0ZS4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCShyZXZpc2lvbiA5NzA3OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvU2V0dGluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODIsNiArMTgyLDcgQEAg
U2V0dGluZ3M6OlNldHRpbmdzKFBhZ2UqIHBhZ2UpCiAgICAgLCBtX2FjY2VsZXJhdGVkQ29tcG9z
aXRpbmdGb3JQbHVnaW5zRW5hYmxlZCh0cnVlKQogICAgICwgbV9hY2NlbGVyYXRlZENvbXBvc2l0
aW5nRm9yQ2FudmFzRW5hYmxlZCh0cnVlKQogICAgICwgbV9hY2NlbGVyYXRlZENvbXBvc2l0aW5n
Rm9yQW5pbWF0aW9uRW5hYmxlZCh0cnVlKQorICAgICwgbV9hY2NlbGVyYXRlZENvbXBvc2l0aW5n
Rm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoZmFsc2UpCiAgICAgLCBtX3Nob3dEZWJ1Z0JvcmRlcnMo
ZmFsc2UpCiAgICAgLCBtX3Nob3dSZXBhaW50Q291bnRlcihmYWxzZSkKICAgICAsIG1fZXhwZXJp
bWVudGFsTm90aWZpY2F0aW9uc0VuYWJsZWQoZmFsc2UpCkBAIC03NDEsNiArNzQyLDExIEBAIHZv
aWQgU2V0dGluZ3M6OnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmcKICAgICBtX2FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdGb3JBbmltYXRpb25FbmFibGVkID0gZW5hYmxlZDsKIH0KIAordm9pZCBTZXR0
aW5nczo6c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKGJv
b2wgZW5hYmxlZCkKK3sKKyAgICBtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0
aW9uRW5hYmxlZCA9IGVuYWJsZWQ7Cit9CisKIHZvaWQgU2V0dGluZ3M6OnNldFNob3dEZWJ1Z0Jv
cmRlcnMoYm9vbCBlbmFibGVkKQogewogICAgIGlmIChtX3Nob3dEZWJ1Z0JvcmRlcnMgPT0gZW5h
YmxlZCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgJKHJldmlzaW9uIDk3MDc4KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjEsNiArMzIx
LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNldEFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdGb3JBbmltYXRpb25FbmFibGVkKGJvb2wpOwogICAgICAgICBib29sIGFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdGb3JBbmltYXRpb25FbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9hY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRm9yQW5pbWF0aW9uRW5hYmxlZDsgfQogCisgICAgICAgIHZvaWQg
c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKGJvb2wpOwor
ICAgICAgICBib29sIGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRp
b25FbmFibGVkOyB9CisKICAgICAgICAgdm9pZCBzZXRTaG93RGVidWdCb3JkZXJzKGJvb2wpOwog
ICAgICAgICBib29sIHNob3dEZWJ1Z0JvcmRlcnMoKSBjb25zdCB7IHJldHVybiBtX3Nob3dEZWJ1
Z0JvcmRlcnM7IH0KIApAQCAtNTU2LDYgKzU1OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgYm9vbCBtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JQbHVnaW5zRW5hYmxlZCA6IDE7
CiAgICAgICAgIGJvb2wgbV9hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yQ2FudmFzRW5hYmxlZCA6
IDE7CiAgICAgICAgIGJvb2wgbV9hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yQW5pbWF0aW9uRW5h
YmxlZCA6IDE7CisgICAgICAgIGJvb2wgbV9hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQ
b3NpdGlvbkVuYWJsZWQgOiAxOwogICAgICAgICBib29sIG1fc2hvd0RlYnVnQm9yZGVycyA6IDE7
CiAgICAgICAgIGJvb2wgbV9zaG93UmVwYWludENvdW50ZXIgOiAxOwogICAgICAgICBib29sIG1f
ZXhwZXJpbWVudGFsTm90aWZpY2F0aW9uc0VuYWJsZWQgOiAxOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAJKHJldmlzaW9u
IDk3MDc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXll
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDggQEAgR3JhcGhpY3NMYXllcjo6R3Jh
cGhpY3NMYXllcihHcmFwaGljc0xheQogICAgICwgbV9hY2NlbGVyYXRlc0RyYXdpbmcoZmFsc2Up
CiAgICAgLCBtX21haW50YWluc1BpeGVsQWxpZ25tZW50KGZhbHNlKQogICAgICwgbV9hcHBsaWVz
UGFnZVNjYWxlKGZhbHNlKQorICAgICwgbV9maXhlZFBvc2l0aW9uZWQoZmFsc2UpCisgICAgLCBt
X2lzRnJhbWVSb290KGZhbHNlKQogICAgICwgbV9wYWludGluZ1BoYXNlKEdyYXBoaWNzTGF5ZXJQ
YWludEFsbCkKICAgICAsIG1fY29udGVudHNPcmllbnRhdGlvbihDb21wb3NpdGluZ0Nvb3JkaW5h
dGVzVG9wRG93bikKICAgICAsIG1fcGFyZW50KDApCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCShyZXZpc2lvbiA5NzA3OCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjY3LDYgKzI2NywxMyBAQCBwdWJsaWM6CiAgICAgYm9vbCBhY2NlbGVyYXRl
c0RyYXdpbmcoKSBjb25zdCB7IHJldHVybiBtX2FjY2VsZXJhdGVzRHJhd2luZzsgfQogICAgIHZp
cnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRlc0RyYXdpbmcoYm9vbCBiKSB7IG1fYWNjZWxlcmF0ZXNE
cmF3aW5nID0gYjsgfQogCisgICAgYm9vbCBmaXhlZFBvc2l0aW9uZWQoKSBjb25zdCB7IHJldHVy
biBtX2ZpeGVkUG9zaXRpb25lZDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRGaXhlZFBvc2l0aW9u
ZWQoYm9vbCBiKSB7IG1fZml4ZWRQb3NpdGlvbmVkID0gYjsgfQorCisgICAgLy8gU2V0IHRvIHRy
dWUgd2hlbiB0aGUgbGF5ZXIgY29ycmVzcG9uZHMgdG8gdGhlIHJvb3QgbGF5ZXIgb2YgYSBGcmFt
ZS4KKyAgICBib29sIGlzRnJhbWVSb290KCkgY29uc3QgeyByZXR1cm4gbV9pc0ZyYW1lUm9vdDsg
fQorICAgIHZpcnR1YWwgdm9pZCBzZXRJc0ZyYW1lUm9vdChib29sIGIpIHsgbV9pc0ZyYW1lUm9v
dCA9IGI7IH0KKwogICAgIC8vIFRoZSBjb2xvciB1c2VkIHRvIHBhaW50IHRoZSBsYXllciBiYWNr
Z3JvdW5kcwogICAgIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCB7IHJldHVy
biBtX2JhY2tncm91bmRDb2xvcjsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRCYWNrZ3JvdW5kQ29s
b3IoY29uc3QgQ29sb3ImKTsKQEAgLTQyNyw2ICs0MzQsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9v
bCBtX2FjY2VsZXJhdGVzRHJhd2luZyA6IDE7CiAgICAgYm9vbCBtX21haW50YWluc1BpeGVsQWxp
Z25tZW50IDogMTsKICAgICBib29sIG1fYXBwbGllc1BhZ2VTY2FsZSA6IDE7IC8vIFNldCBmb3Ig
dGhlIGxheWVyIHdoaWNoIGhhcyB0aGUgcGFnZSBzY2FsZSBhcHBsaWVkIHRvIGl0LgorICAgIGJv
b2wgbV9maXhlZFBvc2l0aW9uZWQgOiAxOworICAgIGJvb2wgbV9pc0ZyYW1lUm9vdCA6IDE7CiAK
ICAgICBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSBtX3BhaW50aW5nUGhhc2U7CiAgICAgQ29t
cG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uIG1fY29udGVudHNPcmllbnRhdGlvbjsgLy8g
YWZmZWN0cyBvcmllbnRhdGlvbiBvZiBsYXllciBjb250ZW50cwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJKHJldmlzaW9uIDk3MDc4
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM2Myw2ICszNjMsOCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6
dXBkYXRlR3JhcGhpY3NMCiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXIoKS0+c3R5
bGUoKTsKICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldFByZXNlcnZlczNEKHN0eWxlLT50cmFuc2Zv
cm1TdHlsZTNEKCkgPT0gVHJhbnNmb3JtU3R5bGUzRFByZXNlcnZlM0QgJiYgIXJlbmRlcmVyKCkt
Pmhhc1JlZmxlY3Rpb24oKSk7CiAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRCYWNrZmFjZVZpc2li
aWxpdHkoc3R5bGUtPmJhY2tmYWNlVmlzaWJpbGl0eSgpID09IEJhY2tmYWNlVmlzaWJpbGl0eVZp
c2libGUpOworICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0Rml4ZWRQb3NpdGlvbmVkKHJlbmRlcmVy
KCktPmlzUG9zaXRpb25lZCgpICYmIHN0eWxlLT5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRpb24p
OworICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0SXNGcmFtZVJvb3QobV9vd25pbmdMYXllci0+aXNS
b290TGF5ZXIoKSk7CiAKICAgICBSZW5kZXJMYXllciogY29tcEFuY2VzdG9yID0gbV9vd25pbmdM
YXllci0+YW5jZXN0b3JDb21wb3NpdGluZ0xheWVyKCk7CiAgICAgCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkocmV2aXNp
b24gOTcwNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMxMCw3ICsxMzEwLDggQEAgYm9vbCBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcAogICAgICAgICAgICAgIHx8IChjYW5SZW5kZXIz
RFRyYW5zZm9ybXMoKSAmJiByZW5kZXJlci0+c3R5bGUoKS0+YmFja2ZhY2VWaXNpYmlsaXR5KCkg
PT0gQmFja2ZhY2VWaXNpYmlsaXR5SGlkZGVuKQogICAgICAgICAgICAgIHx8IGNsaXBzQ29tcG9z
aXRpbmdEZXNjZW5kYW50cyhsYXllcikKICAgICAgICAgICAgICB8fCByZXF1aXJlc0NvbXBvc2l0
aW5nRm9yQW5pbWF0aW9uKHJlbmRlcmVyKQotICAgICAgICAgICAgIHx8IHJlcXVpcmVzQ29tcG9z
aXRpbmdGb3JGdWxsU2NyZWVuKHJlbmRlcmVyKTsKKyAgICAgICAgICAgICB8fCByZXF1aXJlc0Nv
bXBvc2l0aW5nRm9yRnVsbFNjcmVlbihyZW5kZXJlcikKKyAgICAgICAgICAgICB8fCByZXF1aXJl
c0NvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbihyZW5kZXJlcik7CiB9CiAKIGJvb2wgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjpjYW5CZUNvbXBvc2l0ZWQoY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVy
KSBjb25zdApAQCAtMTQ5NSw2ICsxNDk2LDI1IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjpyZXF1aXJlc0NvbXAKICNlbmRpZgogfQogCitib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6
cmVxdWlyZXNDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb24oUmVuZGVyT2JqZWN0KiByZW5kZXJl
cikgY29uc3QKK3sKKyAgICBpZiAoIShyZW5kZXJlci0+aXNQb3NpdGlvbmVkKCkgJiYgcmVuZGVy
ZXItPnN0eWxlKCktPnBvc2l0aW9uKCkgPT0gRml4ZWRQb3NpdGlvbikpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBtX3JlbmRlclZpZXctPmRv
Y3VtZW50KCktPnNldHRpbmdzKCkpCisgICAgICAgIGlmICghc2V0dGluZ3MtPmFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZCgpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgLy8gRml4ZWQgcG9zaXRpb24gZWxlbWVudHMgZ2V0IGNvbXBvc2l0ZWQg
b25seSB3aGVuIGluc2lkZSBhIGZyYW1lIHRoYXQgc2Nyb2xscy4KKyAgICAvLyBJZiB3ZSBjYW4n
dCByZWxpYWJseSBrbm93IHRoZSBzaXplIG9mIHRoZSBlbmNsb3NpbmcgZnJhbWUsIGRvbid0IGNo
YW5nZSBjb21wb3NpdGluZyBzdGF0ZS4KKyAgICBtX2NvbXBvc2l0aW5nRGVwZW5kc09uR2VvbWV0
cnkgPSB0cnVlOworICAgIGlmIChtX3JlbmRlclZpZXctPm5lZWRzTGF5b3V0KCkpCisgICAgICAg
IHJldHVybiBtX3JlbmRlclZpZXctPmhhc0xheWVyKCkgJiYgbV9yZW5kZXJWaWV3LT5sYXllcigp
LT5pc0NvbXBvc2l0ZWQoKTsKKworICAgIFNjcm9sbFZpZXcqIHNjcm9sbFZpZXcgPSBtX3JlbmRl
clZpZXctPmZyYW1lVmlldygpOworICAgIHJldHVybiBzY3JvbGxWaWV3LT52ZXJ0aWNhbFNjcm9s
bGJhcigpIHx8IHNjcm9sbFZpZXctPmhvcml6b250YWxTY3JvbGxiYXIoKTsKK30KKwogYm9vbCBS
ZW5kZXJMYXllckNvbXBvc2l0b3I6Omhhc05vbklkZW50aXR5M0RUcmFuc2Zvcm0oUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlcikgY29uc3QKIHsKICAgICBpZiAoIXJlbmRlcmVyLT5oYXNUcmFuc2Zvcm0o
KSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmgJKHJldmlzaW9uIDk3MDc4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQ29tcG9zaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzMsNiArMjczLDcgQEAg
cHJpdmF0ZToKICAgICBib29sIHJlcXVpcmVzQ29tcG9zaXRpbmdXaGVuRGVzY2VuZGFudHNBcmVD
b21wb3NpdGluZyhSZW5kZXJPYmplY3QqKSBjb25zdDsKICAgICBib29sIHJlcXVpcmVzQ29tcG9z
aXRpbmdGb3JGdWxsU2NyZWVuKFJlbmRlck9iamVjdCopIGNvbnN0OwogICAgIGJvb2wgcmVxdWly
ZXNDb21wb3NpdGluZ0ZvclNjcm9sbGFibGVGcmFtZSgpIGNvbnN0OworICAgIGJvb2wgcmVxdWly
ZXNDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb24oUmVuZGVyT2JqZWN0KikgY29uc3Q7CiAKICAg
ICBib29sIHJlcXVpcmVzU2Nyb2xsTGF5ZXIoUm9vdExheWVyQXR0YWNobWVudCkgY29uc3Q7CiAg
ICAgYm9vbCByZXF1aXJlc0hvcml6b250YWxTY3JvbGxiYXJMYXllcigpIGNvbnN0OwpAQCAtMzAz
LDYgKzMwNCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2NvbXBvc2l0aW5nTGF5ZXJzTmVlZFJl
YnVpbGQ7CiAgICAgYm9vbCBtX2ZsdXNoaW5nTGF5ZXJzOwogICAgIGJvb2wgbV9mb3JjZUNvbXBv
c2l0aW5nTW9kZTsKKyAgICBib29sIG1fY29tcG9zaXRlRm9yRml4ZWRQb3NpdGlvbjsKIAogICAg
IFJvb3RMYXllckF0dGFjaG1lbnQgbV9yb290TGF5ZXJBdHRhY2htZW50OwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCShyZXZpc2lvbiA5NzA3OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ1LDYgKzI0
NSwxNiBAQCB2b2lkIEludGVybmFsczo6c2V0Rm9yY2VDb21wb3NpdGluZ01vZGUoCiAgICAgZG9j
dW1lbnQtPnNldHRpbmdzKCktPnNldEZvcmNlQ29tcG9zaXRpbmdNb2RlKGVuYWJsZWQpOwogfQog
Cit2b2lkIEludGVybmFsczo6c2V0RW5hYmxlQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uKERv
Y3VtZW50KiBkb2N1bWVudCwgYm9vbCBlbmFibGVkLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+c2V0dGluZ3MoKSkgeworICAgICAgICBlYyA9
IElOVkFMSURfQUNDRVNTX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRvY3Vt
ZW50LT5zZXR0aW5ncygpLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlv
bkVuYWJsZWQoZW5hYmxlZCk7Cit9CisKIHZvaWQgSW50ZXJuYWxzOjpzZXRFbmFibGVTY3JvbGxB
bmltYXRvcihEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgZW5hYmxlZCwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPnNldHRpbmdzKCkpIHsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAkocmV2aXNpb24gOTcwNzgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3
Niw3IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPFJhbmdlPiBtYXJrZXJSYW5nZUZvck5vZGUo
Tm9kZSosIHVuc2lnbmVkLCBFeGNlcHRpb25Db2RlJik7CiAKICAgICB2b2lkIHNldEZvcmNlQ29t
cG9zaXRpbmdNb2RlKERvY3VtZW50KiwgYm9vbCBlbmFibGVkLCBFeGNlcHRpb25Db2RlJik7Cisg
ICAgdm9pZCBzZXRFbmFibGVDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb24oRG9jdW1lbnQqLCBi
b29sIGVuYWJsZWQsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIHZvaWQgc2V0RW5hYmxlU2Nyb2xs
QW5pbWF0b3IoRG9jdW1lbnQqLCBib29sIGVuYWJsZWQsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2
b2lkIHNldFpvb21BbmltYXRvclRyYW5zZm9ybShEb2N1bWVudCosIGZsb2F0IHNjYWxlLCBmbG9h
dCB0eCwgZmxvYXQgdHksIEV4Y2VwdGlvbkNvZGUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvSW50ZXJuYWxzLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L0ludGVybmFscy5pZGwJKHJldmlzaW9uIDk3MDc4KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBAIG1vZHVsZSB3
aW5kb3cgewogICAgICAgICBSYW5nZSBtYXJrZXJSYW5nZUZvck5vZGUoaW4gTm9kZSBub2RlLCBp
biB1bnNpZ25lZCBsb25nIGluZGV4KSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKIAogICAgICAgICB2
b2lkIHNldEZvcmNlQ29tcG9zaXRpbmdNb2RlKGluIERvY3VtZW50IGRvY3VtZW50LCBpbiBib29s
ZWFuIGVuYWJsZWQpIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICB2b2lkIHNldEVuYWJs
ZUNvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbihpbiBEb2N1bWVudCBkb2N1bWVudCwgaW4gYm9v
bGVhbiBlbmFibGVkKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKICAgICAgICAgdm9pZCBzZXRFbmFi
bGVTY3JvbGxBbmltYXRvcihpbiBEb2N1bWVudCBkb2N1bWVudCwgaW4gYm9vbGVhbiBlbmFibGVk
KSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKICAgICAgICAgdm9pZCBzZXRab29tQW5pbWF0b3JUcmFu
c2Zvcm0oaW4gRG9jdW1lbnQgZG9jdW1lbnQsIGluIGZsb2F0IHNjYWxlLCBpbiBmbG9hdCB0eCwg
aW4gZmxvYXQgdHkpIHJhaXNlcyhET01FeGNlcHRpb24pOwogICAgICAgICBmbG9hdCBnZXRQYWdl
U2NhbGVGYWN0b3IoaW4gRG9jdW1lbnQgZG9jdW1lbnQpIHJhaXNlcyhET01FeGNlcHRpb24pOwpJ
bmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0No
YW5nZUxvZwkocmV2aXNpb24gOTcxMDApCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMS0xMC0xMCAgVmFuZ2VsaXMgS29ra2V2aXMg
IDx2YW5nZWxpc0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQWRkaW5nIHRlc3RzIGZvciBmaXhl
ZCBwb3NpdGlvbmVkIGVsZW1lbnRzIGdldHRpbmcgdGhlaXIgb3duIGNvbXBvc2l0ZWQgbGF5ZXIu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTc5Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogY29tcG9z
aXRpbmcvZ2VvbWV0cnkvZml4ZWQtcG9zaXRpb24tY29tcG9zaXRlZC1zd2l0Y2gtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBjb21wb3NpdGluZy9nZW9tZXRyeS9maXhlZC1wb3NpdGlv
bi1jb21wb3NpdGVkLXN3aXRjaC1pbi1pZnJhbWUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBjb21wb3NpdGluZy9nZW9tZXRyeS9maXhlZC1wb3NpdGlvbi1jb21wb3NpdGVkLXN3aXRj
aC1pbi1pZnJhbWUuaHRtbDogQWRkZWQuCisgICAgICAgICogY29tcG9zaXRpbmcvZ2VvbWV0cnkv
Zml4ZWQtcG9zaXRpb24tY29tcG9zaXRlZC1zd2l0Y2guaHRtbDogQWRkZWQuCisgICAgICAgICog
Y29tcG9zaXRpbmcvZ2VvbWV0cnkvcmVzb3VyY2VzOiBBZGRlZC4KKyAgICAgICAgKiBjb21wb3Np
dGluZy9nZW9tZXRyeS9yZXNvdXJjZXMvZml4ZWQtcG9zaXRpb24tY29tcG9zaXRlZC5odG1sOiBB
ZGRlZC4KKwogMjAxMS0wOS0yMCAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAog
ICAgICAgICBNZWRpYUNvbnRyb2xTZWVrQnV0dG9uRWxlbWVudCBzaG91bGQgc3VwcG9ydCBzZWVr
aW5nIGJ5IGNoYW5naW5nIHRoZSBwbGF5YmFjayByYXRlLgpJbmRleDogTGF5b3V0VGVzdHMvY29t
cG9zaXRpbmcvZ2VvbWV0cnkvZml4ZWQtcG9zaXRpb24tY29tcG9zaXRlZC1zd2l0Y2gtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2NvbXBvc2l0aW5nL2dlb21ldHJ5L2Zp
eGVkLXBvc2l0aW9uLWNvbXBvc2l0ZWQtc3dpdGNoLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2NvbXBvc2l0aW5nL2dlb21ldHJ5L2ZpeGVkLXBvc2l0aW9uLWNvbXBv
c2l0ZWQtc3dpdGNoLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOSBAQAor
QmVmb3JlIChzaG91bGQgYmUgZW1wdHkpOiAKKworQWZ0ZXIgKHNob3VsZCBub3QgYmUgZW1wdHkp
IAorOiAoR3JhcGhpY3NMYXllcgorICAoYm91bmRzIDc4NS4wMCAxMDE2LjAwKQorICAoY2hpbGRy
ZW4gMQorICAgIChHcmFwaGljc0xheWVyCisgICAgICAoYm91bmRzIDc4NS4wMCAxMDE2LjAwKQor
ICAgICAgKGNoaWxkcmVuIDEKKyAgICAgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgICAgICAocG9z
aXRpb24gNDgwLjAwIDMwLjAwKQorICAgICAgICAgIChib3VuZHMgMzAwLjAwIDEwMC4wMCkKKyAg
ICAgICAgICAoZHJhd3NDb250ZW50IDEpCisgICAgICAgICkKKyAgICAgICkKKyAgICApCisgICkK
KykKKwoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvZ2VvbWV0
cnkvZml4ZWQtcG9zaXRpb24tY29tcG9zaXRlZC1zd2l0Y2gtZXhwZWN0ZWQudHh0Cl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IExheW91dFRlc3RzL2NvbXBv
c2l0aW5nL2dlb21ldHJ5L2ZpeGVkLXBvc2l0aW9uLWNvbXBvc2l0ZWQtc3dpdGNoLWluLWlmcmFt
ZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvZ2Vv
bWV0cnkvZml4ZWQtcG9zaXRpb24tY29tcG9zaXRlZC1zd2l0Y2gtaW4taWZyYW1lLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2NvbXBvc2l0aW5nL2dlb21ldHJ5L2Zp
eGVkLXBvc2l0aW9uLWNvbXBvc2l0ZWQtc3dpdGNoLWluLWlmcmFtZS1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNTYgQEAKK0JlZm9yZSAoc2hvdWxkIGJlIGVtcHR5KTogCisK
K0FmdGVyIChzaG91bGQgbm90IGJlIGVtcHR5KTogCisgKEdyYXBoaWNzTGF5ZXIKKyAgKGJvdW5k
cyA4MDAuMDAgNjAwLjAwKQorICAoY2hpbGRyZW4gMQorICAgIChHcmFwaGljc0xheWVyCisgICAg
ICAoYm91bmRzIDgwMC4wMCA2MDAuMDApCisgICAgICAoY2hpbGRyZW4gMQorICAgICAgICAoR3Jh
cGhpY3NMYXllcgorICAgICAgICAgIChwb3NpdGlvbiA4LjAwIDguMDApCisgICAgICAgICAgKGJv
dW5kcyA1MDQuMDAgMTA0LjAwKQorICAgICAgICAgIChkcmF3c0NvbnRlbnQgMSkKKyAgICAgICAg
ICAoY2hpbGRyZW4gMQorICAgICAgICAgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgICAgICAgICAg
KHBvc2l0aW9uIDIuMDAgMi4wMCkKKyAgICAgICAgICAgICAgKGNoaWxkcmVuIDIKKyAgICAgICAg
ICAgICAgICAoR3JhcGhpY3NMYXllcgorICAgICAgICAgICAgICAgICAgKGJvdW5kcyA0ODUuMDAg
MTAwLjAwKQorICAgICAgICAgICAgICAgICAgKGNoaWxkcmVuIDEKKyAgICAgICAgICAgICAgICAg
ICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgICAoY2hpbGRyZW4gMQorICAg
ICAgICAgICAgICAgICAgICAgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGJvdW5kcyA0ODUuMDAgNTE2LjAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAo
Y2hpbGRyZW4gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChHcmFwaGljc0xheWVyCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYm91bmRzIDQ4NS4wMCA1MTYuMDApCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoZHJhd3NDb250ZW50IDEpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoY2hpbGRyZW4gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoR3JhcGhpY3NMYXllcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChw
b3NpdGlvbiAxODAuMDAgMzAuMDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KGJvdW5kcyAzMDAuMDAgMTAwLjAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChkcmF3c0NvbnRlbnQgMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAgICAgICAg
KQorICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAg
ICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAoR3JhcGhp
Y3NMYXllcgorICAgICAgICAgICAgICAgICAgKHBvc2l0aW9uIDQ4NS4wMCAwLjAwKQorICAgICAg
ICAgICAgICAgICAgKGJvdW5kcyAxNS4wMCAxMDAuMDApCisgICAgICAgICAgICAgICAgICAoZHJh
d3NDb250ZW50IDEpCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICApCisgICAgICAg
ICAgICApCisgICAgICAgICAgKQorICAgICAgICApCisgICAgICApCisgICAgKQorICApCispCisK
ClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2NvbXBvc2l0aW5nL2dlb21ldHJ5L2Zp
eGVkLXBvc2l0aW9uLWNvbXBvc2l0ZWQtc3dpdGNoLWluLWlmcmFtZS1leHBlY3RlZC50eHQKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogTGF5b3V0VGVzdHMv
Y29tcG9zaXRpbmcvZ2VvbWV0cnkvZml4ZWQtcG9zaXRpb24tY29tcG9zaXRlZC1zd2l0Y2gtaW4t
aWZyYW1lLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvZ2VvbWV0
cnkvZml4ZWQtcG9zaXRpb24tY29tcG9zaXRlZC1zd2l0Y2gtaW4taWZyYW1lLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9jb21wb3NpdGluZy9nZW9tZXRyeS9maXhlZC1wb3NpdGlv
bi1jb21wb3NpdGVkLXN3aXRjaC1pbi1pZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw0NyBAQAorPCFET0NUWVBFPgorPGh0bWw+Cis8aGVhZD4KKyAgPHRpdGxlPkNyZWF0aW5nIGNv
bXBvc2l0ZWQgbGF5ZXJzIGZvciBmaXhlZCBwb3NpdGlvbiBlbGVtZW50cyBpbiBpZnJhbWVzPC90
aXRsZT4KKworICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iPgorICAgICNp
ZnJhbWUgeworICAgICAgaGVpZ2h0OiAxMDAwcHg7CisgICAgICB3aWR0aDogNTAwcHg7CisgICAg
ICBvdmVyZmxvdzogc2Nyb2xsOworICAgIH0KKyAgPC9zdHlsZT4KKyAgPHNjcmlwdCB0eXBlPSJ0
ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICBmdW5jdGlvbiBkb1Rlc3QoKQor
ICAgIHsKKyAgICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKSAKKyAgICAgICAgd2luZG93LmludGVy
bmFscy5zZXRFbmFibGVDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb24oZG9jdW1lbnQsIHRydWUp
OworCisgICAgICB2YXIgbGF5ZXJUcmVlT3V0cHV0ID0gJyc7CisKKyAgICAgIC8vIFRoZSBpZnJh
bWUgY29udGFpbmVyIGlzIHRhbGwgZW5vdWdoIHRoYXQgdGhlIGlmcmFtZSBpdHNlbGYgd29uJ3Qg
Z2V0IGEgc2Nyb2xsYmFyLgorICAgICAgLy8gQ29tcG9zaXRpbmcgd29uJ3QgYmUgdHJpZ2dlcmVk
IGFuZCB0aGUgbGF5ZXIgdHJlZSB3aWxsIGJlIGVtcHR5LgorICAgICAgaWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5ZXJUcmVlT3V0cHV0ICs9ICdCZWZvcmUgKHNo
b3VsZCBiZSBlbXB0eSk6IFxuJyArIGxheW91dFRlc3RDb250cm9sbGVyLmxheWVyVHJlZUFzVGV4
dCgpICsgJ1xuJzsKKworICAgICAgLy8gU2hvcnRlbmluZyB0aGUgaWZyYW1lIGNvbnRhaW5lciB3
aWxsIG1ha2UgdGhlIGlmcmFtZSBzY3JvbGwgYW5kIHNob3VsZCB0cmlnZ2VyCisgICAgICAvLyBj
b21wb3NpdGluZy4KKyAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZnJhbWUnKS5zdHls
ZS5oZWlnaHQgPSAnMTAwcHgnOworCisgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKSB7CisgICAgICAgIGxheWVyVHJlZU91dHB1dCArPSAnQWZ0ZXIgKHNob3VsZCBub3QgYmUg
ZW1wdHkpOiBcbiAnICsgbGF5b3V0VGVzdENvbnRyb2xsZXIubGF5ZXJUcmVlQXNUZXh0KCk7Cisg
ICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYXllcnRyZWUnKS5pbm5lclRleHQgPSBs
YXllclRyZWVPdXRwdXQ7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQo
KTsKKyAgICAgIH0KKworICAgIH0KKworICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2Fk
IiwgZG9UZXN0LCBmYWxzZSk7CisKKyAgICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPCEt
LSBGaXhlZCBwb3NpdGlvbiBlbGVtZW50IGluc2lkZSBhIHNjcm9sbGluZyBpZnJhbWUgc2hvdWxk
IGdldCBpdHMgb3duIGxheWVyIC0tPgorPHByZSBpZD0ibGF5ZXJ0cmVlIj48L3ByZT4KKzxpZnJh
bWUgaWQ9ImlmcmFtZSIgc3JjPSJyZXNvdXJjZXMvZml4ZWQtcG9zaXRpb24tY29tcG9zaXRlZC5o
dG1sIj4KKzwvYm9keT4KKzwvaHRtbD4KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3Rz
L2NvbXBvc2l0aW5nL2dlb21ldHJ5L2ZpeGVkLXBvc2l0aW9uLWNvbXBvc2l0ZWQtc3dpdGNoLWlu
LWlmcmFtZS5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5k
ZXg6IExheW91dFRlc3RzL2NvbXBvc2l0aW5nL2dlb21ldHJ5L2ZpeGVkLXBvc2l0aW9uLWNvbXBv
c2l0ZWQtc3dpdGNoLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcv
Z2VvbWV0cnkvZml4ZWQtcG9zaXRpb24tY29tcG9zaXRlZC1zd2l0Y2guaHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2NvbXBvc2l0aW5nL2dlb21ldHJ5L2ZpeGVkLXBvc2l0aW9uLWNv
bXBvc2l0ZWQtc3dpdGNoLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTYgQEAKKzwhRE9D
VFlQRT4KKzxodG1sPgorPGhlYWQ+CisgIDx0aXRsZT5DcmVhdGluZyBjb21wb3NpdGVkIGxheWVy
cyBmb3IgZml4ZWQgcG9zaXRpb24gZWxlbWVudHM8L3RpdGxlPgorCisgIDxzdHlsZSB0eXBlPSJ0
ZXh0L2NzcyIgbWVkaWE9InNjcmVlbiI+CisgICAgI3RhbGwgeworICAgICAgaGVpZ2h0OiAxMDBw
eDsKKyAgICB9CisKKyAgICAjZml4ZWQgeworICAgICAgd2lkdGg6IDMwMHB4OworICAgICAgaGVp
Z2h0OiAxMDBweDsKKyAgICAgIHBvc2l0aW9uOiBmaXhlZDsKKyAgICAgIHRvcDogMzBweDsKKyAg
ICAgIHJpZ2h0OiA1cHg7CisgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbjsKKyAgICB9Cisg
IDwvc3R5bGU+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBjaGFyc2V0PSJ1dGYt
OCI+CisgICAgZnVuY3Rpb24gZG9UZXN0KCkKKyAgICB7CisgICAgICBpZiAod2luZG93LmludGVy
bmFscykgCisgICAgICAgIHdpbmRvdy5pbnRlcm5hbHMuc2V0RW5hYmxlQ29tcG9zaXRpbmdGb3JG
aXhlZFBvc2l0aW9uKGRvY3VtZW50LCB0cnVlKTsKKworICAgICAgdmFyIGxheWVyVHJlZU91dHB1
dCA9ICcnOworCisgICAgICAvLyBXaGlsZSB0aGUgY29udGVudHMgb2YgdGhlIHBhZ2UgYXJlIG5v
dCB0YWxsIGVub3VnaCB0byBzY3JvbGwgdGhlIGZpeGVkCisgICAgICAvLyBwb3NpdGlvbiBlbGVt
ZW50IHNob3VsZCBub3QgYmUgaW4gaXRzIG93biBjb21wb3NpdGVkIGxheWVyIGFuZCB0aGUgbGF5
ZXIKKyAgICAgIC8vIHRyZWUgd2lsbCBiZSBlbXB0eS4KKyAgICAgIGlmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheWVyVHJlZU91dHB1dCArPSAnQmVmb3JlIChzaG91
bGQgYmUgZW1wdHkpOiBcbicgKyBsYXlvdXRUZXN0Q29udHJvbGxlci5sYXllclRyZWVBc1RleHQo
KSArICdcbic7CisKKyAgICAgIC8vIENoYW5naW5nIHRoZSBwYWdlJ3MgaGVpZ2h0IHNob3VsZCB0
cmlnZ2VyIHRoZSBjb21wb3NpdGluZyBwYXRoIHdpdGggdGhlCisgICAgICAvLyBmaXhlZCBwb3Np
dGlvbiBlbGVtZW50IGdldHRpbmcgaXRzIG93biBjb21wb3NpdGVkIGxheWVyLgorICAgICAgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhbGwnKS5zdHlsZS5oZWlnaHQgPSAnMTAwMHB4JzsKKwor
ICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXllclRy
ZWVPdXRwdXQgKz0gJ0FmdGVyIChzaG91bGQgbm90IGJlIGVtcHR5KSBcbjogJyArIGxheW91dFRl
c3RDb250cm9sbGVyLmxheWVyVHJlZUFzVGV4dCgpOworICAgICAgICBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnbGF5ZXJ0cmVlJykuaW5uZXJUZXh0ID0gbGF5ZXJUcmVlT3V0cHV0OworICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICB9CisKKyAgICB9CisK
KyAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIGRvVGVzdCwgZmFsc2UpOworCisg
ICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzwhLS0gRml4ZWQgcG9zaXRpb24gZWxlbWVu
dCBpbnNpZGUgYSBzY3JvbGxpbmcgZnJhbWUgc2hvdWxkIGdldCBpdHMgb3duIGxheWVyIC0tPgor
PHByZSBpZD0ibGF5ZXJ0cmVlIj48L3ByZT4KKzxkaXYgaWQ9InRhbGwiPjwvZGl2PgorPGRpdiBp
ZD0iZml4ZWQiPjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjog
TGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvZ2VvbWV0cnkvZml4ZWQtcG9zaXRpb24tY29tcG9zaXRl
ZC1zd2l0Y2guaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCklu
ZGV4OiBMYXlvdXRUZXN0cy9jb21wb3NpdGluZy9nZW9tZXRyeS9yZXNvdXJjZXMvZml4ZWQtcG9z
aXRpb24tY29tcG9zaXRlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2NvbXBvc2l0
aW5nL2dlb21ldHJ5L3Jlc291cmNlcy9maXhlZC1wb3NpdGlvbi1jb21wb3NpdGVkLmh0bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9jb21wb3NpdGluZy9nZW9tZXRyeS9yZXNvdXJjZXMv
Zml4ZWQtcG9zaXRpb24tY29tcG9zaXRlZC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI1
IEBACis8IURPQ1RZUEU+Cis8aHRtbD4KKzxoZWFkPgorICA8dGl0bGU+Q3JlYXRpbmcgY29tcG9z
aXRlZCBsYXllcnMgZm9yIGZpeGVkIHBvc2l0aW9uIGVsZW1lbnRzPC90aXRsZT4KKworICA8c3R5
bGUgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iPgorICAgICN0YWxsIHsKKyAgICAgIGhl
aWdodDogNTAwcHg7CisgICAgfQorCisgICAgI2ZpeGVkIHsKKyAgICAgIHdpZHRoOiAzMDBweDsK
KyAgICAgIGhlaWdodDogMTAwcHg7CisgICAgICBwb3NpdGlvbjogZml4ZWQ7CisgICAgICB0b3A6
IDMwcHg7CisgICAgICByaWdodDogNXB4OworICAgICAgYmFja2dyb3VuZC1jb2xvcjogZ3JlZW47
CisgICAgfQorICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJ0YWxsIj48L2Rp
dj4KKzxkaXYgaWQ9ImZpeGVkIj48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KClByb3BlcnR5IGNo
YW5nZXMgb246IExheW91dFRlc3RzL2NvbXBvc2l0aW5nL2dlb21ldHJ5L3Jlc291cmNlcy9maXhl
ZC1wb3NpdGlvbi1jb21wb3NpdGVkLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHls
ZQogICArIExGCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110600</attachid>
            <date>2011-10-11 16:29:09 -0700</date>
            <delta_ts>2011-10-20 17:15:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69796-20111011162908.patch</filename>
            <type>text/plain</type>
            <size>24340</size>
            <attacher name="Vangelis Kokkevis">vangelis</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3MTkyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTIgQEAKKzIwMTEtMTAtMTEgIFZhbmdlbGlz
IEtva2tldmlzICA8dmFuZ2VsaXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFN1cHBvcnQgY3Jl
YXRpbmcgY29tcG9zaXRpbmcgbGF5ZXJzIGZvciBmaXhlZCBwb3NpdGlvbiBlbGVtZW50cyB3aXRo
aW4gYSBzY3JvbGxpbmcKKyAgICAgICAgZnJhbWUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTc5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBuZWVkIHRvIGJl
IG1ldCBmb3IgYSBwb3NpdGlvbjogZml4ZWQgZWxlbWVudCB0byBoYXZlIGl0cyBvd24KKyAgICAg
ICAgY29tcG9zaXRlZCBsYXllcjoKKyAgICAgICAgMS4gSXQncyBpbnNpZGUgYSBzY3JvbGxpbmcg
ZnJhbWUgKG1haW4gZnJhbWUgb2YgdGhlIGRvY3VtZW50IG9yIGFuIGlmcmFtZSkKKyAgICAgICAg
Mi4gSXQgY3JlYXRlcyBpdHMgb3duIHN0YWNraW5nIGNvbnRleHQgKGUuZy4gaGFzIGEgei1pbmRl
eCkKKworICAgICAgICBUaGlzIENMIGFkZHMgdGhlIG5lY2Vzc2FyeSBXZWJDb3JlIHNldHRpbmcg
YW5kIG1vZGlmaWVzIHRoZSBSTEMgbG9naWMgdG8gdGFrZSBpbnRvCisgICAgICAgIGFjY291bnQg
dGhlIHBvc2l0aW9uaW5nIG9mIHRoZSBsYXllciBhbmQgd2hldGhlciBpdHMgZW5jbG9zaW5nIGZy
YW1lIHNjcm9sbHMuICBJdAorICAgICAgICBhbHNvIHBhc3NlcyBkb3duIHRoZSBmaXhlZCBwb3Np
dGlvbiBhbmQgaWZyYW1lIHByb3BlcnR5IGluZm8gZG93biB0byB0aGUgR3JhcGhpY3NMYXllcgor
ICAgICAgICB3aGVyZSBpdCBjYW4gYmUgdXNlZCBieSB0aGUgY29tcG9zaXRvciB0byBhZGp1c3Qg
bGF5ZXIgcG9zaXRpb25pbmcuCisKKyAgICAgICAgRmluYWxseSBpdCBhZGRzIGEgbWV0aG9kIHRv
IHdpbmRvdy5pbnRlcm5hbHMgdGhhdCBhbGxvd3Mgc2V0dGluZyB0aGUgZmxhZyBmcm9tIERSVCBm
b3IKKyAgICAgICAgdGVzdGluZyBwdXJwb3Nlcy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0czogY29tcG9zaXRpbmcvZ2VvbWV0cnkvZml4ZWQt
cG9zaXRpb24tY29tcG9zaXRlZC1zd2l0Y2gtaW4taWZyYW1lLmh0bWwKKyAgICAgICAgICAgICAg
IGNvbXBvc2l0aW5nL2dlb21ldHJ5L2ZpeGVkLXBvc2l0aW9uLWNvbXBvc2l0ZWQtc3dpdGNoLmh0
bWwKKworICAgICAgICAqIHBhZ2UvU2V0dGluZ3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2V0
dGluZ3M6OlNldHRpbmdzKToKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmg6CisgICAgICAgIChX
ZWJDb3JlOjpTZXR0aW5nczo6c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRp
b25FbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjphY2NlbGVyYXRlZENvbXBv
c2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6
R3JhcGhpY3NMYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXll
ci5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6Zml4ZWRQb3NpdGlvbmVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OnNldEZpeGVkUG9zaXRpb25lZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjppc0ZyYW1lUm9vdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyOjpzZXRJc0ZyYW1lUm9vdCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTGF5ZXJHZW9tZXRyeSk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdMYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JGaXhlZFBv
c2l0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg6Cisg
ICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJu
YWxzOjpzZXRFbmFibGVDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb24pOgorICAgICAgICAqIHRl
c3RpbmcvSW50ZXJuYWxzLmg6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaWRsOgorCiAy
MDExLTEwLTExICBXLiBKYW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBMb3NzIG9mIHByZWNpc2lvbiB3aGVuIGNvbnZlcnRpbmcgZnJvbSBkb3VibGUgdG8g
aW50IGFuZCBkb3VibGUgdG8gZmxvYXQgaW4gRnJhbWVWaWV3Ojp6b29tQW5pbWF0b3JUcmFuc2Zv
cm1DaGFuZ2VkKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCShyZXZpc2lvbiA5NzA3
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xODIsNiArMTgyLDcgQEAgU2V0dGluZ3M6OlNldHRpbmdzKFBhZ2UqIHBhZ2UpCiAgICAgLCBt
X2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JQbHVnaW5zRW5hYmxlZCh0cnVlKQogICAgICwgbV9h
Y2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yQ2FudmFzRW5hYmxlZCh0cnVlKQogICAgICwgbV9hY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRm9yQW5pbWF0aW9uRW5hYmxlZCh0cnVlKQorICAgICwgbV9hY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoZmFsc2UpCiAgICAgLCBt
X3Nob3dEZWJ1Z0JvcmRlcnMoZmFsc2UpCiAgICAgLCBtX3Nob3dSZXBhaW50Q291bnRlcihmYWxz
ZSkKICAgICAsIG1fZXhwZXJpbWVudGFsTm90aWZpY2F0aW9uc0VuYWJsZWQoZmFsc2UpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9TZXR0aW5ncy5oCShyZXZpc2lvbiA5NzA3OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvU2V0dGluZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMzIxLDYgKzMyMSw5IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9y
QW5pbWF0aW9uRW5hYmxlZChib29sKTsKICAgICAgICAgYm9vbCBhY2NlbGVyYXRlZENvbXBvc2l0
aW5nRm9yQW5pbWF0aW9uRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0ZvckFuaW1hdGlvbkVuYWJsZWQ7IH0KIAorICAgICAgICB2b2lkIHNldEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9h
Y2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQgPSBlbmFibGVkOyB9
CisgICAgICAgIGJvb2wgYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFi
bGVkKCkgY29uc3QgeyByZXR1cm4gbV9hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3Np
dGlvbkVuYWJsZWQ7IH0KKwogICAgICAgICB2b2lkIHNldFNob3dEZWJ1Z0JvcmRlcnMoYm9vbCk7
CiAgICAgICAgIGJvb2wgc2hvd0RlYnVnQm9yZGVycygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvd0Rl
YnVnQm9yZGVyczsgfQogCkBAIC01NTYsNiArNTU5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBib29sIG1fYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvclBsdWdpbnNFbmFibGVkIDog
MTsKICAgICAgICAgYm9vbCBtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JDYW52YXNFbmFibGVk
IDogMTsKICAgICAgICAgYm9vbCBtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JBbmltYXRpb25F
bmFibGVkIDogMTsKKyAgICAgICAgYm9vbCBtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhl
ZFBvc2l0aW9uRW5hYmxlZCA6IDE7CiAgICAgICAgIGJvb2wgbV9zaG93RGVidWdCb3JkZXJzIDog
MTsKICAgICAgICAgYm9vbCBtX3Nob3dSZXBhaW50Q291bnRlciA6IDE7CiAgICAgICAgIGJvb2wg
bV9leHBlcmltZW50YWxOb3RpZmljYXRpb25zRW5hYmxlZCA6IDE7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAkocmV2aXNp
b24gOTcwNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xh
eWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsOCBAQCBHcmFwaGljc0xheWVyOjpH
cmFwaGljc0xheWVyKEdyYXBoaWNzTGF5CiAgICAgLCBtX2FjY2VsZXJhdGVzRHJhd2luZyhmYWxz
ZSkKICAgICAsIG1fbWFpbnRhaW5zUGl4ZWxBbGlnbm1lbnQoZmFsc2UpCiAgICAgLCBtX2FwcGxp
ZXNQYWdlU2NhbGUoZmFsc2UpCisgICAgLCBtX2ZpeGVkUG9zaXRpb25lZChmYWxzZSkKKyAgICAs
IG1faXNGcmFtZVJvb3QoZmFsc2UpCiAgICAgLCBtX3BhaW50aW5nUGhhc2UoR3JhcGhpY3NMYXll
clBhaW50QWxsKQogICAgICwgbV9jb250ZW50c09yaWVudGF0aW9uKENvbXBvc2l0aW5nQ29vcmRp
bmF0ZXNUb3BEb3duKQogICAgICwgbV9wYXJlbnQoMCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgJKHJldmlzaW9uIDk3MDc4KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNjcsNiArMjY3LDEzIEBAIHB1YmxpYzoKICAgICBib29sIGFjY2VsZXJh
dGVzRHJhd2luZygpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZWxlcmF0ZXNEcmF3aW5nOyB9CiAgICAg
dmlydHVhbCB2b2lkIHNldEFjY2VsZXJhdGVzRHJhd2luZyhib29sIGIpIHsgbV9hY2NlbGVyYXRl
c0RyYXdpbmcgPSBiOyB9CiAKKyAgICBib29sIGZpeGVkUG9zaXRpb25lZCgpIGNvbnN0IHsgcmV0
dXJuIG1fZml4ZWRQb3NpdGlvbmVkOyB9CisgICAgdmlydHVhbCB2b2lkIHNldEZpeGVkUG9zaXRp
b25lZChib29sIGIpIHsgbV9maXhlZFBvc2l0aW9uZWQgPSBiOyB9CisKKyAgICAvLyBTZXQgdG8g
dHJ1ZSB3aGVuIHRoZSBsYXllciBjb3JyZXNwb25kcyB0byB0aGUgcm9vdCBsYXllciBvZiBhIEZy
YW1lLgorICAgIGJvb2wgaXNGcmFtZVJvb3QoKSBjb25zdCB7IHJldHVybiBtX2lzRnJhbWVSb290
OyB9CisgICAgdmlydHVhbCB2b2lkIHNldElzRnJhbWVSb290KGJvb2wgYikgeyBtX2lzRnJhbWVS
b290ID0gYjsgfQorCiAgICAgLy8gVGhlIGNvbG9yIHVzZWQgdG8gcGFpbnQgdGhlIGxheWVyIGJh
Y2tncm91bmRzCiAgICAgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcigpIGNvbnN0IHsgcmV0
dXJuIG1fYmFja2dyb3VuZENvbG9yOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldEJhY2tncm91bmRD
b2xvcihjb25zdCBDb2xvciYpOwpAQCAtNDI3LDYgKzQzNCw4IEBAIHByb3RlY3RlZDoKICAgICBi
b29sIG1fYWNjZWxlcmF0ZXNEcmF3aW5nIDogMTsKICAgICBib29sIG1fbWFpbnRhaW5zUGl4ZWxB
bGlnbm1lbnQgOiAxOwogICAgIGJvb2wgbV9hcHBsaWVzUGFnZVNjYWxlIDogMTsgLy8gU2V0IGZv
ciB0aGUgbGF5ZXIgd2hpY2ggaGFzIHRoZSBwYWdlIHNjYWxlIGFwcGxpZWQgdG8gaXQuCisgICAg
Ym9vbCBtX2ZpeGVkUG9zaXRpb25lZCA6IDE7CisgICAgYm9vbCBtX2lzRnJhbWVSb290IDogMTsK
IAogICAgIEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlIG1fcGFpbnRpbmdQaGFzZTsKICAgICBD
b21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24gbV9jb250ZW50c09yaWVudGF0aW9uOyAv
LyBhZmZlY3RzIG9yaWVudGF0aW9uIG9mIGxheWVyIGNvbnRlbnRzCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkocmV2aXNpb24gOTcw
NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzYzLDYgKzM2Myw4IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5n
Ojp1cGRhdGVHcmFwaGljc0wKICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlcigpLT5z
dHlsZSgpOwogICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0UHJlc2VydmVzM0Qoc3R5bGUtPnRyYW5z
Zm9ybVN0eWxlM0QoKSA9PSBUcmFuc2Zvcm1TdHlsZTNEUHJlc2VydmUzRCAmJiAhcmVuZGVyZXIo
KS0+aGFzUmVmbGVjdGlvbigpKTsKICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldEJhY2tmYWNlVmlz
aWJpbGl0eShzdHlsZS0+YmFja2ZhY2VWaXNpYmlsaXR5KCkgPT0gQmFja2ZhY2VWaXNpYmlsaXR5
VmlzaWJsZSk7CisgICAgbV9ncmFwaGljc0xheWVyLT5zZXRGaXhlZFBvc2l0aW9uZWQocmVuZGVy
ZXIoKS0+aXNQb3NpdGlvbmVkKCkgJiYgc3R5bGUtPnBvc2l0aW9uKCkgPT0gRml4ZWRQb3NpdGlv
bik7CisgICAgbV9ncmFwaGljc0xheWVyLT5zZXRJc0ZyYW1lUm9vdChtX293bmluZ0xheWVyLT5p
c1Jvb3RMYXllcigpKTsKIAogICAgIFJlbmRlckxheWVyKiBjb21wQW5jZXN0b3IgPSBtX293bmlu
Z0xheWVyLT5hbmNlc3RvckNvbXBvc2l0aW5nTGF5ZXIoKTsKICAgICAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCShyZXZp
c2lvbiA5NzA3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBv
c2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEwLDcgKzEzMTAsOCBAQCBib29sIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wCiAgICAgICAgICAgICAgfHwgKGNhblJlbmRl
cjNEVHJhbnNmb3JtcygpICYmIHJlbmRlcmVyLT5zdHlsZSgpLT5iYWNrZmFjZVZpc2liaWxpdHko
KSA9PSBCYWNrZmFjZVZpc2liaWxpdHlIaWRkZW4pCiAgICAgICAgICAgICAgfHwgY2xpcHNDb21w
b3NpdGluZ0Rlc2NlbmRhbnRzKGxheWVyKQogICAgICAgICAgICAgIHx8IHJlcXVpcmVzQ29tcG9z
aXRpbmdGb3JBbmltYXRpb24ocmVuZGVyZXIpCi0gICAgICAgICAgICAgfHwgcmVxdWlyZXNDb21w
b3NpdGluZ0ZvckZ1bGxTY3JlZW4ocmVuZGVyZXIpOworICAgICAgICAgICAgIHx8IHJlcXVpcmVz
Q29tcG9zaXRpbmdGb3JGdWxsU2NyZWVuKHJlbmRlcmVyKQorICAgICAgICAgICAgIHx8IHJlcXVp
cmVzQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uKHJlbmRlcmVyKTsKIH0KIAogYm9vbCBSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OmNhbkJlQ29tcG9zaXRlZChjb25zdCBSZW5kZXJMYXllciogbGF5
ZXIpIGNvbnN0CkBAIC0xNDk1LDYgKzE0OTYsMjUgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OnJlcXVpcmVzQ29tcAogI2VuZGlmCiB9CiAKK2Jvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbihSZW5kZXJPYmplY3QqIHJlbmRl
cmVyKSBjb25zdAoreworICAgIGlmICghKHJlbmRlcmVyLT5pc1Bvc2l0aW9uZWQoKSAmJiByZW5k
ZXJlci0+c3R5bGUoKS0+cG9zaXRpb24oKSA9PSBGaXhlZFBvc2l0aW9uICYmIHJlbmRlcmVyLT5l
bmNsb3NpbmdMYXllcigpLT5pc1N0YWNraW5nQ29udGV4dCgpKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fcmVuZGVyVmlldy0+ZG9jdW1l
bnQoKS0+c2V0dGluZ3MoKSkKKyAgICAgICAgaWYgKCFzZXR0aW5ncy0+YWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAvLyBGaXhlZCBwb3NpdGlvbiBlbGVtZW50cyBnZXQgY29tcG9zaXRlZCBvbmx5
IHdoZW4gaW5zaWRlIGEgZnJhbWUgdGhhdCBzY3JvbGxzLgorICAgIC8vIElmIHdlIGNhbid0IHJl
bGlhYmx5IGtub3cgdGhlIHNpemUgb2YgdGhlIGVuY2xvc2luZyBmcmFtZSwgZG9uJ3QgY2hhbmdl
IGNvbXBvc2l0aW5nIHN0YXRlLgorICAgIG1fY29tcG9zaXRpbmdEZXBlbmRzT25HZW9tZXRyeSA9
IHRydWU7CisgICAgaWYgKG1fcmVuZGVyVmlldy0+bmVlZHNMYXlvdXQoKSkKKyAgICAgICAgcmV0
dXJuIG1fcmVuZGVyVmlldy0+aGFzTGF5ZXIoKSAmJiBtX3JlbmRlclZpZXctPmxheWVyKCktPmlz
Q29tcG9zaXRlZCgpOworCisgICAgU2Nyb2xsVmlldyogc2Nyb2xsVmlldyA9IG1fcmVuZGVyVmll
dy0+ZnJhbWVWaWV3KCk7CisgICAgcmV0dXJuIHNjcm9sbFZpZXctPnZlcnRpY2FsU2Nyb2xsYmFy
KCkgfHwgc2Nyb2xsVmlldy0+aG9yaXpvbnRhbFNjcm9sbGJhcigpOworfQorCiBib29sIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6aGFzTm9uSWRlbnRpdHkzRFRyYW5zZm9ybShSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyKSBjb25zdAogewogICAgIGlmICghcmVuZGVyZXItPmhhc1RyYW5zZm9ybSgpKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0
b3IuaAkocmV2aXNpb24gOTcwNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJDb21wb3NpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3Myw2ICsyNzMsNyBAQCBwcml2
YXRlOgogICAgIGJvb2wgcmVxdWlyZXNDb21wb3NpdGluZ1doZW5EZXNjZW5kYW50c0FyZUNvbXBv
c2l0aW5nKFJlbmRlck9iamVjdCopIGNvbnN0OwogICAgIGJvb2wgcmVxdWlyZXNDb21wb3NpdGlu
Z0ZvckZ1bGxTY3JlZW4oUmVuZGVyT2JqZWN0KikgY29uc3Q7CiAgICAgYm9vbCByZXF1aXJlc0Nv
bXBvc2l0aW5nRm9yU2Nyb2xsYWJsZUZyYW1lKCkgY29uc3Q7CisgICAgYm9vbCByZXF1aXJlc0Nv
bXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbihSZW5kZXJPYmplY3QqKSBjb25zdDsKIAogICAgIGJv
b2wgcmVxdWlyZXNTY3JvbGxMYXllcihSb290TGF5ZXJBdHRhY2htZW50KSBjb25zdDsKICAgICBi
b29sIHJlcXVpcmVzSG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKCkgY29uc3Q7CkBAIC0zMDMsNiAr
MzA0LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fY29tcG9zaXRpbmdMYXllcnNOZWVkUmVidWls
ZDsKICAgICBib29sIG1fZmx1c2hpbmdMYXllcnM7CiAgICAgYm9vbCBtX2ZvcmNlQ29tcG9zaXRp
bmdNb2RlOworICAgIGJvb2wgbV9jb21wb3NpdGVGb3JGaXhlZFBvc2l0aW9uOwogCiAgICAgUm9v
dExheWVyQXR0YWNobWVudCBtX3Jvb3RMYXllckF0dGFjaG1lbnQ7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5jcHAJKHJldmlzaW9uIDk3MDc4KQorKysgU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDUsNiArMjQ1LDE2
IEBAIHZvaWQgSW50ZXJuYWxzOjpzZXRGb3JjZUNvbXBvc2l0aW5nTW9kZSgKICAgICBkb2N1bWVu
dC0+c2V0dGluZ3MoKS0+c2V0Rm9yY2VDb21wb3NpdGluZ01vZGUoZW5hYmxlZCk7CiB9CiAKK3Zv
aWQgSW50ZXJuYWxzOjpzZXRFbmFibGVDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb24oRG9jdW1l
bnQqIGRvY3VtZW50LCBib29sIGVuYWJsZWQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlm
ICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5zZXR0aW5ncygpKSB7CisgICAgICAgIGVjID0gSU5W
QUxJRF9BQ0NFU1NfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZG9jdW1lbnQt
PnNldHRpbmdzKCktPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5h
YmxlZChlbmFibGVkKTsKK30KKwogdm9pZCBJbnRlcm5hbHM6OnNldEVuYWJsZVNjcm9sbEFuaW1h
dG9yKERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBlbmFibGVkLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKICAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+c2V0dGluZ3MoKSkgewpJbmRleDog
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCShyZXZpc2lvbiA5NzA3OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDcg
QEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8UmFuZ2U+IG1hcmtlclJhbmdlRm9yTm9kZShOb2Rl
KiwgdW5zaWduZWQsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIHZvaWQgc2V0Rm9yY2VDb21wb3Np
dGluZ01vZGUoRG9jdW1lbnQqLCBib29sIGVuYWJsZWQsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2
b2lkIHNldEVuYWJsZUNvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbihEb2N1bWVudCosIGJvb2wg
ZW5hYmxlZCwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgdm9pZCBzZXRFbmFibGVTY3JvbGxBbmlt
YXRvcihEb2N1bWVudCosIGJvb2wgZW5hYmxlZCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQg
c2V0Wm9vbUFuaW1hdG9yVHJhbnNmb3JtKERvY3VtZW50KiwgZmxvYXQgc2NhbGUsIGZsb2F0IHR4
LCBmbG9hdCB0eSwgRXhjZXB0aW9uQ29kZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmlkbAkocmV2aXNpb24gOTcwNzgpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgbW9kdWxlIHdpbmRv
dyB7CiAgICAgICAgIFJhbmdlIG1hcmtlclJhbmdlRm9yTm9kZShpbiBOb2RlIG5vZGUsIGluIHVu
c2lnbmVkIGxvbmcgaW5kZXgpIHJhaXNlcyhET01FeGNlcHRpb24pOwogCiAgICAgICAgIHZvaWQg
c2V0Rm9yY2VDb21wb3NpdGluZ01vZGUoaW4gRG9jdW1lbnQgZG9jdW1lbnQsIGluIGJvb2xlYW4g
ZW5hYmxlZCkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIHZvaWQgc2V0RW5hYmxlQ29t
cG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uKGluIERvY3VtZW50IGRvY3VtZW50LCBpbiBib29sZWFu
IGVuYWJsZWQpIHJhaXNlcyhET01FeGNlcHRpb24pOwogICAgICAgICB2b2lkIHNldEVuYWJsZVNj
cm9sbEFuaW1hdG9yKGluIERvY3VtZW50IGRvY3VtZW50LCBpbiBib29sZWFuIGVuYWJsZWQpIHJh
aXNlcyhET01FeGNlcHRpb24pOwogICAgICAgICB2b2lkIHNldFpvb21BbmltYXRvclRyYW5zZm9y
bShpbiBEb2N1bWVudCBkb2N1bWVudCwgaW4gZmxvYXQgc2NhbGUsIGluIGZsb2F0IHR4LCBpbiBm
bG9hdCB0eSkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAgICAgICAgIGZsb2F0IGdldFBhZ2VTY2Fs
ZUZhY3RvcihpbiBEb2N1bWVudCBkb2N1bWVudCkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCShyZXZpc2lvbiA5NzE5MikKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDExLTEwLTExICBWYW5nZWxpcyBLb2tr
ZXZpcyAgPHZhbmdlbGlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBTdXBwb3J0IGNyZWF0aW5n
IGNvbXBvc2l0aW5nIGxheWVycyBmb3IgZml4ZWQgcG9zaXRpb24gZWxlbWVudHMgd2l0aGluIGEg
c2Nyb2xsaW5nCisgICAgICAgIGZyYW1lLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Njk3OTYKKworICAgICAgICBBZGRpbmcgZXhwb3J0cyBmb3IgU2V0
dGluZ3M6OnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZCgp
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3aW4v
V2ViS2l0Mi5kZWY6CisgICAgICAgICogd2luL1dlYktpdDJDRkxpdGUuZGVmOgorCiAyMDExLTEw
LTExICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KIAogICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk4NzQKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L3dpbi9XZWJLaXQyLmRlZgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi93aW4vV2ViS2l0
Mi5kZWYJKHJldmlzaW9uIDk3MDc4KQorKysgU291cmNlL1dlYktpdDIvd2luL1dlYktpdDIuZGVm
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjQsNiArMTY0LDcgQEAgRVhQT1JUUwogICAgICAgICA/cGFp
bnRDb250cm9sVGludHNARnJhbWVWaWV3QFdlYkNvcmVAQEFBRVhYWgogICAgICAgICA/c2Nyb2xs
RWxlbWVudFRvUmVjdEBGcmFtZVZpZXdAV2ViQ29yZUBAUUFFWFBBVkVsZW1lbnRAMkBBQlZJbnRS
ZWN0QDJAQFoKICAgICAgICAgP3JlbW92ZVNoYWRvd1Jvb3RARWxlbWVudEBXZWJDb3JlQEBRQUVY
WFoKKyAgICAgICAgP3NldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5h
YmxlZEBTZXR0aW5nc0BXZWJDb3JlQEBRQUVYX05AWgogICAgICAgICA/c2V0RE9NRXhjZXB0aW9u
QFdlYkNvcmVAQFlBWFBBVkV4ZWNTdGF0ZUBKU0NAQEhAWgogICAgICAgICA/c2V0UmVzb3VyY2Vz
RGF0YVNpemVMaW1pdHNGcm9tSW50ZXJuYWxzQEluc3BlY3RvckNvbnRyb2xsZXJAV2ViQ29yZUBA
UUFFWEhIQFoKICAgICAgICAgP3NldFNjcm9sbGJhcnNTdXBwcmVzc2VkQFNjcm9sbFZpZXdAV2Vi
Q29yZUBAUUFFWF9OMEBaCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi93aW4vV2ViS2l0MkNGTGl0ZS5k
ZWYKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvd2luL1dlYktpdDJDRkxpdGUuZGVmCShy
ZXZpc2lvbiA5NzA3OCkKKysrIFNvdXJjZS9XZWJLaXQyL3dpbi9XZWJLaXQyQ0ZMaXRlLmRlZgko
d29ya2luZyBjb3B5KQpAQCAtMTU4LDYgKzE1OCw3IEBAIEVYUE9SVFMKICAgICAgICAgP3BhaW50
Q29udHJvbFRpbnRzQEZyYW1lVmlld0BXZWJDb3JlQEBBQUVYWFoKICAgICAgICAgP3Njcm9sbEVs
ZW1lbnRUb1JlY3RARnJhbWVWaWV3QFdlYkNvcmVAQFFBRVhQQVZFbGVtZW50QDJAQUJWSW50UmVj
dEAyQEBaCiAgICAgICAgID9yZW1vdmVTaGFkb3dSb290QEVsZW1lbnRAV2ViQ29yZUBAUUFFWFha
CisgICAgICAgID9zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJs
ZWRAU2V0dGluZ3NAV2ViQ29yZUBAUUFFWF9OQFoKICAgICAgICAgP3NldERPTUV4Y2VwdGlvbkBX
ZWJDb3JlQEBZQVhQQVZFeGVjU3RhdGVASlNDQEBIQFoKICAgICAgICAgP3NldFJlc291cmNlc0Rh
dGFTaXplTGltaXRzRnJvbUludGVybmFsc0BJbnNwZWN0b3JDb250cm9sbGVyQFdlYkNvcmVAQFFB
RVhISEBaCiAgICAgICAgID9zZXRTY3JvbGxiYXJzU3VwcHJlc3NlZEBTY3JvbGxWaWV3QFdlYkNv
cmVAQFFBRVhfTjBAWgpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gOTcxOTIpCisrKyBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMS0xMC0xMSAgVmFu
Z2VsaXMgS29ra2V2aXMgIDx2YW5nZWxpc0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQWRkaW5n
IHRlc3RzIGZvciBmaXhlZCBwb3NpdGlvbmVkIGVsZW1lbnRzIGdldHRpbmcgdGhlaXIgb3duIGNv
bXBvc2l0ZWQgbGF5ZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02OTc5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogY29tcG9zaXRpbmcvZ2VvbWV0cnkvZml4ZWQtcG9zaXRpb24tY29tcG9zaXRlZC1z
d2l0Y2gtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBjb21wb3NpdGluZy9nZW9tZXRy
eS9maXhlZC1wb3NpdGlvbi1jb21wb3NpdGVkLXN3aXRjaC1pbi1pZnJhbWUtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBjb21wb3NpdGluZy9nZW9tZXRyeS9maXhlZC1wb3NpdGlvbi1j
b21wb3NpdGVkLXN3aXRjaC1pbi1pZnJhbWUuaHRtbDogQWRkZWQuCisgICAgICAgICogY29tcG9z
aXRpbmcvZ2VvbWV0cnkvZml4ZWQtcG9zaXRpb24tY29tcG9zaXRlZC1zd2l0Y2guaHRtbDogQWRk
ZWQuCisgICAgICAgICogY29tcG9zaXRpbmcvZ2VvbWV0cnkvcmVzb3VyY2VzOiBBZGRlZC4KKyAg
ICAgICAgKiBjb21wb3NpdGluZy9nZW9tZXRyeS9yZXNvdXJjZXMvZml4ZWQtcG9zaXRpb24tY29t
cG9zaXRlZC5odG1sOiBBZGRlZC4KKwogMjAxMS0xMC0xMSAgUnlvc3VrZSBOaXdhICA8cm5pd2FA
d2Via2l0Lm9yZz4KIAogICAgICAgICBNYWMgcmViYXNlbGluZSBhZnRlciByOTY2MTAuCkluZGV4
OiBMYXlvdXRUZXN0cy9jb21wb3NpdGluZy9nZW9tZXRyeS9maXhlZC1wb3NpdGlvbi1jb21wb3Np
dGVkLXN3aXRjaC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvY29tcG9z
aXRpbmcvZ2VvbWV0cnkvZml4ZWQtcG9zaXRpb24tY29tcG9zaXRlZC1zd2l0Y2gtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvZ2VvbWV0cnkvZml4
ZWQtcG9zaXRpb24tY29tcG9zaXRlZC1zd2l0Y2gtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDE5IEBACitCZWZvcmUgKHNob3VsZCBiZSBlbXB0eSk6IAorCitBZnRlciAoc2hv
dWxkIG5vdCBiZSBlbXB0eSk6IAorKEdyYXBoaWNzTGF5ZXIKKyAgKGJvdW5kcyA3ODUuMDAgMTAx
Ni4wMCkKKyAgKGNoaWxkcmVuIDEKKyAgICAoR3JhcGhpY3NMYXllcgorICAgICAgKGJvdW5kcyA3
ODUuMDAgMTAxNi4wMCkKKyAgICAgIChjaGlsZHJlbiAxCisgICAgICAgIChHcmFwaGljc0xheWVy
CisgICAgICAgICAgKHBvc2l0aW9uIDQ4MC4wMCAzMC4wMCkKKyAgICAgICAgICAoYm91bmRzIDMw
MC4wMCAxMDAuMDApCisgICAgICAgICAgKGRyYXdzQ29udGVudCAxKQorICAgICAgICApCisgICAg
ICApCisgICAgKQorICApCispCisKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Nv
bXBvc2l0aW5nL2dlb21ldHJ5L2ZpeGVkLXBvc2l0aW9uLWNvbXBvc2l0ZWQtc3dpdGNoLWV4cGVj
dGVkLnR4dApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBM
YXlvdXRUZXN0cy9jb21wb3NpdGluZy9nZW9tZXRyeS9maXhlZC1wb3NpdGlvbi1jb21wb3NpdGVk
LXN3aXRjaC1pbi1pZnJhbWUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2NvbXBvc2l0aW5nL2dlb21ldHJ5L2ZpeGVkLXBvc2l0aW9uLWNvbXBvc2l0ZWQtc3dpdGNoLWlu
LWlmcmFtZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9jb21wb3Np
dGluZy9nZW9tZXRyeS9maXhlZC1wb3NpdGlvbi1jb21wb3NpdGVkLXN3aXRjaC1pbi1pZnJhbWUt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU2IEBACitCZWZvcmUgKHNob3Vs
ZCBiZSBlbXB0eSk6IAorCitBZnRlciAoc2hvdWxkIG5vdCBiZSBlbXB0eSk6IAorIChHcmFwaGlj
c0xheWVyCisgIChib3VuZHMgODAwLjAwIDYwMC4wMCkKKyAgKGNoaWxkcmVuIDEKKyAgICAoR3Jh
cGhpY3NMYXllcgorICAgICAgKGJvdW5kcyA4MDAuMDAgNjAwLjAwKQorICAgICAgKGNoaWxkcmVu
IDEKKyAgICAgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgICAgICAocG9zaXRpb24gOC4wMCA4LjAw
KQorICAgICAgICAgIChib3VuZHMgNTA0LjAwIDEwNC4wMCkKKyAgICAgICAgICAoZHJhd3NDb250
ZW50IDEpCisgICAgICAgICAgKGNoaWxkcmVuIDEKKyAgICAgICAgICAgIChHcmFwaGljc0xheWVy
CisgICAgICAgICAgICAgIChwb3NpdGlvbiAyLjAwIDIuMDApCisgICAgICAgICAgICAgIChjaGls
ZHJlbiAyCisgICAgICAgICAgICAgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgICAgICAgICAgICAg
IChib3VuZHMgNDg1LjAwIDEwMC4wMCkKKyAgICAgICAgICAgICAgICAgIChjaGlsZHJlbiAxCisg
ICAgICAgICAgICAgICAgICAgIChHcmFwaGljc0xheWVyCisgICAgICAgICAgICAgICAgICAgICAg
KGNoaWxkcmVuIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIChHcmFwaGljc0xheWVyCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIChib3VuZHMgNDg1LjAwIDUxNi4wMCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGNoaWxkcmVuIDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
R3JhcGhpY3NMYXllcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJvdW5kcyA0ODUu
MDAgNTE2LjAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRyYXdzQ29udGVudCAx
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoaWxkcmVuIDEKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAocG9zaXRpb24gMTgwLjAwIDMwLjAwKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChib3VuZHMgMzAwLjAwIDEwMC4wMCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoZHJhd3NDb250ZW50IDEpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAg
ICAgICAgICkKKyAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICApCisgICAgICAg
ICAgICAgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgICAgICAgICAgICAgIChwb3NpdGlvbiA0ODUu
MDAgMC4wMCkKKyAgICAgICAgICAgICAgICAgIChib3VuZHMgMTUuMDAgMTAwLjAwKQorICAgICAg
ICAgICAgICAgICAgKGRyYXdzQ29udGVudCAxKQorICAgICAgICAgICAgICAgICkKKyAgICAgICAg
ICAgICAgKQorICAgICAgICAgICAgKQorICAgICAgICAgICkKKyAgICAgICAgKQorICAgICAgKQor
ICAgICkKKyAgKQorKQorCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9jb21wb3Np
dGluZy9nZW9tZXRyeS9maXhlZC1wb3NpdGlvbi1jb21wb3NpdGVkLXN3aXRjaC1pbi1pZnJhbWUt
ZXhwZWN0ZWQudHh0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5k
ZXg6IExheW91dFRlc3RzL2NvbXBvc2l0aW5nL2dlb21ldHJ5L2ZpeGVkLXBvc2l0aW9uLWNvbXBv
c2l0ZWQtc3dpdGNoLWluLWlmcmFtZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Nv
bXBvc2l0aW5nL2dlb21ldHJ5L2ZpeGVkLXBvc2l0aW9uLWNvbXBvc2l0ZWQtc3dpdGNoLWluLWlm
cmFtZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvZ2VvbWV0
cnkvZml4ZWQtcG9zaXRpb24tY29tcG9zaXRlZC1zd2l0Y2gtaW4taWZyYW1lLmh0bWwJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNDggQEAKKzwhRE9DVFlQRT4KKzxodG1sPgorPGhlYWQ+CisgIDx0
aXRsZT5DcmVhdGluZyBjb21wb3NpdGVkIGxheWVycyBmb3IgZml4ZWQgcG9zaXRpb24gZWxlbWVu
dHMgaW4gaWZyYW1lczwvdGl0bGU+CisKKyAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0i
c2NyZWVuIj4KKyAgICAjaWZyYW1lIHsKKyAgICAgIGhlaWdodDogMTAwMHB4OworICAgICAgd2lk
dGg6IDUwMHB4OworICAgICAgb3ZlcmZsb3c6IHNjcm9sbDsKKyAgICB9CisgIDwvc3R5bGU+Cisg
IDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBjaGFyc2V0PSJ1dGYtOCI+CisgICAgaWYg
KHdpbmRvdy5pbnRlcm5hbHMpIAorICAgICAgd2luZG93LmludGVybmFscy5zZXRFbmFibGVDb21w
b3NpdGluZ0ZvckZpeGVkUG9zaXRpb24oZG9jdW1lbnQsIHRydWUpOworCisgICAgZnVuY3Rpb24g
ZG9UZXN0KCkKKyAgICB7CisKKyAgICAgIHZhciBsYXllclRyZWVPdXRwdXQgPSAnJzsKKworICAg
ICAgLy8gVGhlIGlmcmFtZSBjb250YWluZXIgaXMgdGFsbCBlbm91Z2ggdGhhdCB0aGUgaWZyYW1l
IGl0c2VsZiB3b24ndCBnZXQgYSBzY3JvbGxiYXIuCisgICAgICAvLyBDb21wb3NpdGluZyB3b24n
dCBiZSB0cmlnZ2VyZWQgYW5kIHRoZSBsYXllciB0cmVlIHdpbGwgYmUgZW1wdHkuCisgICAgICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXllclRyZWVPdXRwdXQg
Kz0gJ0JlZm9yZSAoc2hvdWxkIGJlIGVtcHR5KTogXG4nICsgbGF5b3V0VGVzdENvbnRyb2xsZXIu
bGF5ZXJUcmVlQXNUZXh0KCkgKyAnXG4nOworCisgICAgICAvLyBTaG9ydGVuaW5nIHRoZSBpZnJh
bWUgY29udGFpbmVyIHdpbGwgbWFrZSB0aGUgaWZyYW1lIHNjcm9sbCBhbmQgc2hvdWxkIHRyaWdn
ZXIKKyAgICAgIC8vIGNvbXBvc2l0aW5nLgorICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J2lmcmFtZScpLnN0eWxlLmhlaWdodCA9ICcxMDBweCc7CisKKyAgICAgIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5ZXJUcmVlT3V0cHV0ICs9ICdBZnRlciAo
c2hvdWxkIG5vdCBiZSBlbXB0eSk6IFxuICcgKyBsYXlvdXRUZXN0Q29udHJvbGxlci5sYXllclRy
ZWVBc1RleHQoKTsKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xheWVydHJlZScp
LmlubmVyVGV4dCA9IGxheWVyVHJlZU91dHB1dDsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuZHVtcEFzVGV4dCgpOworICAgICAgfQorCisgICAgfQorCisgICAgd2luZG93LmFkZEV2ZW50
TGlzdGVuZXIoImxvYWQiLCBkb1Rlc3QsIGZhbHNlKTsKKworICAgIDwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8IS0tIEZpeGVkIHBvc2l0aW9uIGVsZW1lbnQgaW5zaWRlIGEgc2Nyb2xsaW5n
IGlmcmFtZSBzaG91bGQgZ2V0IGl0cyBvd24gbGF5ZXIgLS0+Cis8cHJlIGlkPSJsYXllcnRyZWUi
PjwvcHJlPgorPGlmcmFtZSBpZD0iaWZyYW1lIiBzcmM9InJlc291cmNlcy9maXhlZC1wb3NpdGlv
bi1jb21wb3NpdGVkLmh0bWwiPgorPC9ib2R5PgorPC9odG1sPgoKUHJvcGVydHkgY2hhbmdlcyBv
bjogTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvZ2VvbWV0cnkvZml4ZWQtcG9zaXRpb24tY29tcG9z
aXRlZC1zd2l0Y2gtaW4taWZyYW1lLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHls
ZQogICArIExGCgpJbmRleDogTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvZ2VvbWV0cnkvZml4ZWQt
cG9zaXRpb24tY29tcG9zaXRlZC1zd2l0Y2guaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9jb21wb3NpdGluZy9nZW9tZXRyeS9maXhlZC1wb3NpdGlvbi1jb21wb3NpdGVkLXN3aXRjaC5o
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvZ2VvbWV0cnkvZml4
ZWQtcG9zaXRpb24tY29tcG9zaXRlZC1zd2l0Y2guaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw1NyBAQAorPCFET0NUWVBFPgorPGh0bWw+Cis8aGVhZD4KKyAgPHRpdGxlPkNyZWF0aW5nIGNv
bXBvc2l0ZWQgbGF5ZXJzIGZvciBmaXhlZCBwb3NpdGlvbiBlbGVtZW50czwvdGl0bGU+CisKKyAg
PHN0eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIj4KKyAgICAjdGFsbCB7CisgICAg
ICBoZWlnaHQ6IDEwMHB4OworICAgIH0KKworICAgICNmaXhlZCB7CisgICAgICB3aWR0aDogMzAw
cHg7CisgICAgICBoZWlnaHQ6IDEwMHB4OworICAgICAgcG9zaXRpb246IGZpeGVkOworICAgICAg
ei1pbmRleDogMTsKKyAgICAgIHRvcDogMzBweDsKKyAgICAgIHJpZ2h0OiA1cHg7CisgICAgICBi
YWNrZ3JvdW5kLWNvbG9yOiBncmVlbjsKKyAgICB9CisgIDwvc3R5bGU+CisgIDxzY3JpcHQgdHlw
ZT0idGV4dC9qYXZhc2NyaXB0IiBjaGFyc2V0PSJ1dGYtOCI+CisgICAgaWYgKHdpbmRvdy5pbnRl
cm5hbHMpIAorICAgICAgd2luZG93LmludGVybmFscy5zZXRFbmFibGVDb21wb3NpdGluZ0ZvckZp
eGVkUG9zaXRpb24oZG9jdW1lbnQsIHRydWUpOworCisgICAgZnVuY3Rpb24gZG9UZXN0KCkKKyAg
ICB7CisgICAgICB2YXIgbGF5ZXJUcmVlT3V0cHV0ID0gJyc7CisKKyAgICAgIC8vIFdoaWxlIHRo
ZSBjb250ZW50cyBvZiB0aGUgcGFnZSBhcmUgbm90IHRhbGwgZW5vdWdoIHRvIHNjcm9sbCB0aGUg
Zml4ZWQKKyAgICAgIC8vIHBvc2l0aW9uIGVsZW1lbnQgc2hvdWxkIG5vdCBiZSBpbiBpdHMgb3du
IGNvbXBvc2l0ZWQgbGF5ZXIgYW5kIHRoZSBsYXllcgorICAgICAgLy8gdHJlZSB3aWxsIGJlIGVt
cHR5LgorICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5
ZXJUcmVlT3V0cHV0ICs9ICdCZWZvcmUgKHNob3VsZCBiZSBlbXB0eSk6IFxuJyArIGxheW91dFRl
c3RDb250cm9sbGVyLmxheWVyVHJlZUFzVGV4dCgpICsgJ1xuJzsKKworICAgICAgLy8gQ2hhbmdp
bmcgdGhlIHBhZ2UncyBoZWlnaHQgc2hvdWxkIHRyaWdnZXIgdGhlIGNvbXBvc2l0aW5nIHBhdGgg
d2l0aCB0aGUKKyAgICAgIC8vIGZpeGVkIHBvc2l0aW9uIGVsZW1lbnQgZ2V0dGluZyBpdHMgb3du
IGNvbXBvc2l0ZWQgbGF5ZXIuCisgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFsbCcp
LnN0eWxlLmhlaWdodCA9ICcxMDAwcHgnOworCisgICAgICBpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKSB7CisgICAgICAgIGxheWVyVHJlZU91dHB1dCArPSAnQWZ0ZXIgKHNob3VsZCBu
b3QgYmUgZW1wdHkpOiBcbicgKyBsYXlvdXRUZXN0Q29udHJvbGxlci5sYXllclRyZWVBc1RleHQo
KTsKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xheWVydHJlZScpLmlubmVyVGV4
dCA9IGxheWVyVHJlZU91dHB1dDsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFz
VGV4dCgpOworICAgICAgfQorCisgICAgfQorCisgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIo
ImxvYWQiLCBkb1Rlc3QsIGZhbHNlKTsKKworICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
Cis8IS0tIEZpeGVkIHBvc2l0aW9uIGVsZW1lbnQgaW5zaWRlIGEgc2Nyb2xsaW5nIGZyYW1lIHNo
b3VsZCBnZXQgaXRzIG93biBsYXllciAtLT4KKzxwcmUgaWQ9ImxheWVydHJlZSI+PC9wcmU+Cis8
ZGl2IGlkPSJ0YWxsIj48L2Rpdj4KKzxkaXYgaWQ9ImZpeGVkIj48L2Rpdj4KKzwvYm9keT4KKzwv
aHRtbD4KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2NvbXBvc2l0aW5nL2dlb21l
dHJ5L2ZpeGVkLXBvc2l0aW9uLWNvbXBvc2l0ZWQtc3dpdGNoLmh0bWwKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRl
ZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcv
Z2VvbWV0cnkvcmVzb3VyY2VzL2ZpeGVkLXBvc2l0aW9uLWNvbXBvc2l0ZWQuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9jb21wb3NpdGluZy9nZW9tZXRyeS9yZXNvdXJjZXMvZml4ZWQt
cG9zaXRpb24tY29tcG9zaXRlZC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvY29t
cG9zaXRpbmcvZ2VvbWV0cnkvcmVzb3VyY2VzL2ZpeGVkLXBvc2l0aW9uLWNvbXBvc2l0ZWQuaHRt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNiBAQAorPCFET0NUWVBFPgorPGh0bWw+Cis8aGVh
ZD4KKyAgPHRpdGxlPkNyZWF0aW5nIGNvbXBvc2l0ZWQgbGF5ZXJzIGZvciBmaXhlZCBwb3NpdGlv
biBlbGVtZW50czwvdGl0bGU+CisKKyAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2Ny
ZWVuIj4KKyAgICAjdGFsbCB7CisgICAgICBoZWlnaHQ6IDUwMHB4OworICAgIH0KKworICAgICNm
aXhlZCB7CisgICAgICB3aWR0aDogMzAwcHg7CisgICAgICBoZWlnaHQ6IDEwMHB4OworICAgICAg
cG9zaXRpb246IGZpeGVkOworICAgICAgei1pbmRleDogMTsKKyAgICAgIHRvcDogMzBweDsKKyAg
ICAgIHJpZ2h0OiA1cHg7CisgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbjsKKyAgICB9Cisg
IDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9InRhbGwiPjwvZGl2PgorPGRpdiBp
ZD0iZml4ZWQiPjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjog
TGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvZ2VvbWV0cnkvcmVzb3VyY2VzL2ZpeGVkLXBvc2l0aW9u
LWNvbXBvc2l0ZWQuaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYK
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111876</attachid>
            <date>2011-10-20 17:15:46 -0700</date>
            <delta_ts>2011-10-21 15:38:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69796-20111020171545.patch</filename>
            <type>text/plain</type>
            <size>14319</size>
            <attacher name="Vangelis Kokkevis">vangelis</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk4MDQ0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTEtMTAtMjAgIFZhbmdlbGlz
IEtva2tldmlzICA8dmFuZ2VsaXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEFkZCBzdXBwb3J0
IGZvciBjcmVhdGluZyBjb21wb3NpdGluZyBsYXllcnMgZm9yIGZpeGVkIHBvc2l0aW9uIGVsZW1l
bnRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk3
OTYKKworICAgICAgICBwb3NpdGlvbjpmaXhlZCBlbGVtZW50cyB3aWxsIGdldCBhIGNvbXBvc2l0
aW5nIGxheWVyIGlmOgorICAgICAgICAxLiBTZXR0aW5nczphY2NlbGVyYXRlZENvbXBvc2l0aW5n
Rm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoKSByZXR1cm4gdHJ1ZSwgYW5kCisgICAgICAgIDIuIFRo
ZSBlbGVtZW50IGhhcyBpdHMgb3duIHN0YWNraW5nIGNvbnRleHQgKGUuZy4gaGFzIGEgei1pbmRl
eCkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0
OiBjb21wb3NpdGluZy9nZW9tZXRyeS9maXhlZC1wb3NpdGlvbi1jb21wb3NpdGVkLXN3aXRjaC5o
dG1sCisKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNl
dHRpbmdzOjpTZXR0aW5ncyk6CisgICAgICAgICogcGFnZS9TZXR0aW5ncy5oOgorICAgICAgICAo
V2ViQ29yZTo6U2V0dGluZ3M6OnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0
aW9uRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6YWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29t
cG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvclBvc2l0aW9uKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg6CisgICAgICAgICogdGVz
dGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzZXRFbmFi
bGVDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb24pOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJu
YWxzLmg6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaWRsOgorCiAyMDExLTEwLTIwICBB
ZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRXZlbnQuaCBzaG91bGRu
J3QgbmVlZCB0byBrbm93IGFib3V0IGV2ZXJ5IGlmZGVmIGFuZCBmZWF0dXJlIHRoYXQgdXNlcyBl
dmVudHMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCShyZXZpc2lvbiA5ODAyOCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODAs
NiArMTgwLDcgQEAgU2V0dGluZ3M6OlNldHRpbmdzKFBhZ2UqIHBhZ2UpCiAgICAgLCBtX2FjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdGb3JQbHVnaW5zRW5hYmxlZCh0cnVlKQogICAgICwgbV9hY2NlbGVy
YXRlZENvbXBvc2l0aW5nRm9yQ2FudmFzRW5hYmxlZCh0cnVlKQogICAgICwgbV9hY2NlbGVyYXRl
ZENvbXBvc2l0aW5nRm9yQW5pbWF0aW9uRW5hYmxlZCh0cnVlKQorICAgICwgbV9hY2NlbGVyYXRl
ZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoZmFsc2UpCiAgICAgLCBtX3Nob3dE
ZWJ1Z0JvcmRlcnMoZmFsc2UpCiAgICAgLCBtX3Nob3dSZXBhaW50Q291bnRlcihmYWxzZSkKICAg
ICAsIG1fZXhwZXJpbWVudGFsTm90aWZpY2F0aW9uc0VuYWJsZWQoZmFsc2UpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9TZXR0aW5ncy5oCShyZXZpc2lvbiA5ODAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
U2V0dGluZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMzE5LDYgKzMxOSw5IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yQW5pbWF0
aW9uRW5hYmxlZChib29sKTsKICAgICAgICAgYm9vbCBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9y
QW5pbWF0aW9uRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0ZvckFuaW1hdGlvbkVuYWJsZWQ7IH0KIAorICAgICAgICB2b2lkIHNldEFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9hY2NlbGVy
YXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQgPSBlbmFibGVkOyB9CisgICAg
ICAgIGJvb2wgYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVu
YWJsZWQ7IH0KKwogICAgICAgICB2b2lkIHNldFNob3dEZWJ1Z0JvcmRlcnMoYm9vbCk7CiAgICAg
ICAgIGJvb2wgc2hvd0RlYnVnQm9yZGVycygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvd0RlYnVnQm9y
ZGVyczsgfQogCkBAIC01NjAsNiArNTYzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBib29sIG1fYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvclBsdWdpbnNFbmFibGVkIDogMTsKICAg
ICAgICAgYm9vbCBtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JDYW52YXNFbmFibGVkIDogMTsK
ICAgICAgICAgYm9vbCBtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JBbmltYXRpb25FbmFibGVk
IDogMTsKKyAgICAgICAgYm9vbCBtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0
aW9uRW5hYmxlZCA6IDE7CiAgICAgICAgIGJvb2wgbV9zaG93RGVidWdCb3JkZXJzIDogMTsKICAg
ICAgICAgYm9vbCBtX3Nob3dSZXBhaW50Q291bnRlciA6IDE7CiAgICAgICAgIGJvb2wgbV9leHBl
cmltZW50YWxOb3RpZmljYXRpb25zRW5hYmxlZCA6IDE7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkocmV2aXNpb24gOTgw
MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTMxMCw3ICsxMzEwLDggQEAgYm9vbCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnJlcXVpcmVzQ29tcAogICAgICAgICAgICAgIHx8IChjYW5SZW5kZXIzRFRyYW5z
Zm9ybXMoKSAmJiByZW5kZXJlci0+c3R5bGUoKS0+YmFja2ZhY2VWaXNpYmlsaXR5KCkgPT0gQmFj
a2ZhY2VWaXNpYmlsaXR5SGlkZGVuKQogICAgICAgICAgICAgIHx8IGNsaXBzQ29tcG9zaXRpbmdE
ZXNjZW5kYW50cyhsYXllcikKICAgICAgICAgICAgICB8fCByZXF1aXJlc0NvbXBvc2l0aW5nRm9y
QW5pbWF0aW9uKHJlbmRlcmVyKQotICAgICAgICAgICAgIHx8IHJlcXVpcmVzQ29tcG9zaXRpbmdG
b3JGdWxsU2NyZWVuKHJlbmRlcmVyKTsKKyAgICAgICAgICAgICB8fCByZXF1aXJlc0NvbXBvc2l0
aW5nRm9yRnVsbFNjcmVlbihyZW5kZXJlcikKKyAgICAgICAgICAgICB8fCByZXF1aXJlc0NvbXBv
c2l0aW5nRm9yUG9zaXRpb24ocmVuZGVyZXIsIGxheWVyKTsKIH0KIAogYm9vbCBSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OmNhbkJlQ29tcG9zaXRlZChjb25zdCBSZW5kZXJMYXllciogbGF5ZXIpIGNv
bnN0CkBAIC0xNDk1LDYgKzE0OTYsMjAgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJl
cXVpcmVzQ29tcAogI2VuZGlmCiB9CiAKK2Jvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1
aXJlc0NvbXBvc2l0aW5nRm9yUG9zaXRpb24oUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3Qg
UmVuZGVyTGF5ZXIqIGxheWVyKSBjb25zdAoreworICAgIC8vIHBvc2l0aW9uOmZpeGVkIGVsZW1l
bnRzIHRoYXQgY3JlYXRlIHRoZWlyIG93biBzdGFja2luZyBjb250ZXh0IChlLmcuIGhhdmUgYW4g
ZXhwbGljaXQgei1pbmRleCwKKyAgICAvLyBvcGFjaXR5LCB0cmFuc2Zvcm0pIGNhbiBnZXQgdGhl
aXIgb3duIGNvbXBvc2l0ZWQgbGF5ZXIuCisgICAgaWYgKCEocmVuZGVyZXItPmlzUG9zaXRpb25l
ZCgpICYmIHJlbmRlcmVyLT5zdHlsZSgpLT5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRpb24gJiYg
bGF5ZXItPmlzU3RhY2tpbmdDb250ZXh0KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gbV9yZW5kZXJWaWV3LT5kb2N1bWVudCgpLT5zZXR0
aW5ncygpKQorICAgICAgICBpZiAoIXNldHRpbmdzLT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9y
Rml4ZWRQb3NpdGlvbkVuYWJsZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHJldHVybiB0cnVlOworfQorCiBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6aGFzTm9uSWRl
bnRpdHkzRFRyYW5zZm9ybShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKSBjb25zdAogewogICAgIGlm
ICghcmVuZGVyZXItPmhhc1RyYW5zZm9ybSgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAkocmV2aXNpb24gOTgwMjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3Myw2ICsyNzMsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgcmVxdWlyZXNDb21w
b3NpdGluZ1doZW5EZXNjZW5kYW50c0FyZUNvbXBvc2l0aW5nKFJlbmRlck9iamVjdCopIGNvbnN0
OwogICAgIGJvb2wgcmVxdWlyZXNDb21wb3NpdGluZ0ZvckZ1bGxTY3JlZW4oUmVuZGVyT2JqZWN0
KikgY29uc3Q7CiAgICAgYm9vbCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yU2Nyb2xsYWJsZUZyYW1l
KCkgY29uc3Q7CisgICAgYm9vbCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yUG9zaXRpb24oUmVuZGVy
T2JqZWN0KiwgY29uc3QgUmVuZGVyTGF5ZXIqKSBjb25zdDsKIAogICAgIGJvb2wgcmVxdWlyZXNT
Y3JvbGxMYXllcihSb290TGF5ZXJBdHRhY2htZW50KSBjb25zdDsKICAgICBib29sIHJlcXVpcmVz
SG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKCkgY29uc3Q7CkBAIC0zMDMsNiArMzA0LDcgQEAgcHJp
dmF0ZToKICAgICBib29sIG1fY29tcG9zaXRpbmdMYXllcnNOZWVkUmVidWlsZDsKICAgICBib29s
IG1fZmx1c2hpbmdMYXllcnM7CiAgICAgYm9vbCBtX2ZvcmNlQ29tcG9zaXRpbmdNb2RlOworICAg
IGJvb2wgbV9jb21wb3NpdGVGb3JGaXhlZFBvc2l0aW9uOwogCiAgICAgUm9vdExheWVyQXR0YWNo
bWVudCBtX3Jvb3RMYXllckF0dGFjaG1lbnQ7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5jcHAJKHJldmlzaW9uIDk4MDI4KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDgsNiArMjQ4LDE2IEBAIHZvaWQgSW50
ZXJuYWxzOjpzZXRGb3JjZUNvbXBvc2l0aW5nTW9kZSgKICAgICBkb2N1bWVudC0+c2V0dGluZ3Mo
KS0+c2V0Rm9yY2VDb21wb3NpdGluZ01vZGUoZW5hYmxlZCk7CiB9CiAKK3ZvaWQgSW50ZXJuYWxz
OjpzZXRFbmFibGVDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb24oRG9jdW1lbnQqIGRvY3VtZW50
LCBib29sIGVuYWJsZWQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghZG9jdW1lbnQg
fHwgIWRvY3VtZW50LT5zZXR0aW5ncygpKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1Nf
RVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZG9jdW1lbnQtPnNldHRpbmdzKCkt
PnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZChlbmFibGVk
KTsKK30KKwogdm9pZCBJbnRlcm5hbHM6OnNldEVuYWJsZVNjcm9sbEFuaW1hdG9yKERvY3VtZW50
KiBkb2N1bWVudCwgYm9vbCBlbmFibGVkLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAo
IWRvY3VtZW50IHx8ICFkb2N1bWVudC0+c2V0dGluZ3MoKSkgewpJbmRleDogU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFscy5oCShyZXZpc2lvbiA5ODAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDcgQEAgcHVibGljOgog
ICAgIFBhc3NSZWZQdHI8UmFuZ2U+IG1hcmtlclJhbmdlRm9yTm9kZShOb2RlKiwgdW5zaWduZWQs
IEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIHZvaWQgc2V0Rm9yY2VDb21wb3NpdGluZ01vZGUoRG9j
dW1lbnQqLCBib29sIGVuYWJsZWQsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHNldEVuYWJs
ZUNvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbihEb2N1bWVudCosIGJvb2wgZW5hYmxlZCwgRXhj
ZXB0aW9uQ29kZSYpOwogCiAgICAgdm9pZCBzZXRFbmFibGVTY3JvbGxBbmltYXRvcihEb2N1bWVu
dCosIGJvb2wgZW5hYmxlZCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgc2V0Wm9vbUFuaW1h
dG9yVHJhbnNmb3JtKERvY3VtZW50KiwgZmxvYXQgc2NhbGUsIGZsb2F0IHR4LCBmbG9hdCB0eSwg
RXhjZXB0aW9uQ29kZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMu
aWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAko
cmV2aXNpb24gOTgwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwJ
KHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgbW9kdWxlIHdpbmRvdyB7CiAgICAgICAg
IFJhbmdlIG1hcmtlclJhbmdlRm9yTm9kZShpbiBOb2RlIG5vZGUsIGluIHVuc2lnbmVkIGxvbmcg
aW5kZXgpIHJhaXNlcyhET01FeGNlcHRpb24pOwogCiAgICAgICAgIHZvaWQgc2V0Rm9yY2VDb21w
b3NpdGluZ01vZGUoaW4gRG9jdW1lbnQgZG9jdW1lbnQsIGluIGJvb2xlYW4gZW5hYmxlZCkgcmFp
c2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIHZvaWQgc2V0RW5hYmxlQ29tcG9zaXRpbmdGb3JG
aXhlZFBvc2l0aW9uKGluIERvY3VtZW50IGRvY3VtZW50LCBpbiBib29sZWFuIGVuYWJsZWQpIHJh
aXNlcyhET01FeGNlcHRpb24pOwogICAgICAgICB2b2lkIHNldEVuYWJsZVNjcm9sbEFuaW1hdG9y
KGluIERvY3VtZW50IGRvY3VtZW50LCBpbiBib29sZWFuIGVuYWJsZWQpIHJhaXNlcyhET01FeGNl
cHRpb24pOwogICAgICAgICB2b2lkIHNldFpvb21BbmltYXRvclRyYW5zZm9ybShpbiBEb2N1bWVu
dCBkb2N1bWVudCwgaW4gZmxvYXQgc2NhbGUsIGluIGZsb2F0IHR4LCBpbiBmbG9hdCB0eSkgcmFp
c2VzKERPTUV4Y2VwdGlvbik7CiAgICAgICAgIGZsb2F0IGdldFBhZ2VTY2FsZUZhY3RvcihpbiBE
b2N1bWVudCBkb2N1bWVudCkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShy
ZXZpc2lvbiA5ODA0NCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE1IEBACisyMDExLTEwLTIwICBWYW5nZWxpcyBLb2trZXZpcyAgPHZhbmdl
bGlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgY3JlYXRpbmcgY29t
cG9zaXRpbmcgbGF5ZXJzIGZvciBmaXhlZCBwb3NpdGlvbiBlbGVtZW50cy4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY5Nzk2CisKKyAgICAgICAgQWRk
aW5nIGV4cG9ydHMgZm9yIFNldHRpbmdzOjpzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4
ZWRQb3NpdGlvbkVuYWJsZWQoKQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogd2luL1dlYktpdDIuZGVmOgorICAgICAgICAqIHdpbi9XZWJLaXQyQ0ZM
aXRlLmRlZjoKKwogMjAxMS0xMC0yMCAgSmVzdXMgU2FuY2hlei1QYWxlbmNpYSAgPGplc3VzLnBh
bGVuY2lhQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgW1F0XVtXSzJdIHF3ZWJlcnJvciogc2hv
dWxkIGZvbGxvdyB0aGUgbmV3IGZpbGUgYW5kIGNsYXNzIG5hbWluZyBydWxlcwpJbmRleDogU291
cmNlL1dlYktpdDIvd2luL1dlYktpdDIuZGVmCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L3dpbi9XZWJLaXQyLmRlZgkocmV2aXNpb24gOTgwMjgpCisrKyBTb3VyY2UvV2ViS2l0Mi93aW4v
V2ViS2l0Mi5kZWYJKHdvcmtpbmcgY29weSkKQEAgLTE2Niw2ICsxNjYsNyBAQCBFWFBPUlRTCiAg
ICAgICAgID9yYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aEBUZXh0SXRlcmF0b3JAV2ViQ29yZUBA
U0E/QVY/JFBhc3NSZWZQdHJAVlJhbmdlQFdlYkNvcmVAQEBXVEZAQFBBVkVsZW1lbnRAMkBISF9O
QFoKICAgICAgICAgP3JlbW92ZVNoYWRvd1Jvb3RARWxlbWVudEBXZWJDb3JlQEBRQUVYWFoKICAg
ICAgICAgP3Njcm9sbEVsZW1lbnRUb1JlY3RARnJhbWVWaWV3QFdlYkNvcmVAQFFBRVhQQVZFbGVt
ZW50QDJAQUJWSW50UmVjdEAyQEBaCisgICAgICAgID9zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5n
Rm9yRml4ZWRQb3NpdGlvbkVuYWJsZWRAU2V0dGluZ3NAV2ViQ29yZUBAUUFFWF9OQFoKICAgICAg
ICAgP3NldERPTUV4Y2VwdGlvbkBXZWJDb3JlQEBZQVhQQVZFeGVjU3RhdGVASlNDQEBIQFoKICAg
ICAgICAgP3NldFJlc291cmNlc0RhdGFTaXplTGltaXRzRnJvbUludGVybmFsc0BJbnNwZWN0b3JD
b250cm9sbGVyQFdlYkNvcmVAQFFBRVhISEBaCiAgICAgICAgID9zZXRTY3JvbGxiYXJzU3VwcHJl
c3NlZEBTY3JvbGxWaWV3QFdlYkNvcmVAQFFBRVhfTjBAWgpJbmRleDogU291cmNlL1dlYktpdDIv
d2luL1dlYktpdDJDRkxpdGUuZGVmCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL3dpbi9X
ZWJLaXQyQ0ZMaXRlLmRlZgkocmV2aXNpb24gOTgwMjgpCisrKyBTb3VyY2UvV2ViS2l0Mi93aW4v
V2ViS2l0MkNGTGl0ZS5kZWYJKHdvcmtpbmcgY29weSkKQEAgLTE1OCw2ICsxNTgsNyBAQCBFWFBP
UlRTCiAgICAgICAgID9wYWludENvbnRyb2xUaW50c0BGcmFtZVZpZXdAV2ViQ29yZUBAQUFFWFha
CiAgICAgICAgID9zY3JvbGxFbGVtZW50VG9SZWN0QEZyYW1lVmlld0BXZWJDb3JlQEBRQUVYUEFW
RWxlbWVudEAyQEFCVkludFJlY3RAMkBAWgogICAgICAgICA/cmVtb3ZlU2hhZG93Um9vdEBFbGVt
ZW50QFdlYkNvcmVAQFFBRVhYWgorICAgICAgICA/c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Zv
ckZpeGVkUG9zaXRpb25FbmFibGVkQFNldHRpbmdzQFdlYkNvcmVAQFFBRVhfTkBaCiAgICAgICAg
ID9zZXRET01FeGNlcHRpb25AV2ViQ29yZUBAWUFYUEFWRXhlY1N0YXRlQEpTQ0BASEBaCiAgICAg
ICAgID9zZXRSZXNvdXJjZXNEYXRhU2l6ZUxpbWl0c0Zyb21JbnRlcm5hbHNASW5zcGVjdG9yQ29u
dHJvbGxlckBXZWJDb3JlQEBRQUVYSEhAWgogICAgICAgICA/c2V0U2Nyb2xsYmFyc1N1cHByZXNz
ZWRAU2Nyb2xsVmlld0BXZWJDb3JlQEBRQUVYX04wQFoKSW5kZXg6IExheW91dFRlc3RzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDk4MDQ0
KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMg
QEAKKzIwMTEtMTAtMjAgIFZhbmdlbGlzIEtva2tldmlzICA8dmFuZ2VsaXNAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIEFkZGluZyB0ZXN0cyBmb3IgZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50cyBn
ZXR0aW5nIHRoZWlyIG93biBjb21wb3NpdGVkIGxheWVyLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk3OTYKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGNvbXBvc2l0aW5nL2dlb21ldHJ5L2ZpeGVkLXBv
c2l0aW9uLWNvbXBvc2l0ZWQtc3dpdGNoLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
Y29tcG9zaXRpbmcvZ2VvbWV0cnkvZml4ZWQtcG9zaXRpb24tY29tcG9zaXRlZC1zd2l0Y2guaHRt
bDogQWRkZWQuCisKIDIwMTEtMTAtMjAgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4K
IAogICAgICAgICBVcGRhdGUgY2hyb21pdW0tbGludXggZmxleGJveCBwaXhlbCByZXN1bHRzLiAg
TXkgbWFjaGluZSBpcyBydW5uaW5nCkluZGV4OiBMYXlvdXRUZXN0cy9jb21wb3NpdGluZy9nZW9t
ZXRyeS9maXhlZC1wb3NpdGlvbi1jb21wb3NpdGVkLXN3aXRjaC1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvZ2VvbWV0cnkvZml4ZWQtcG9zaXRpb24t
Y29tcG9zaXRlZC1zd2l0Y2gtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvY29tcG9zaXRpbmcvZ2VvbWV0cnkvZml4ZWQtcG9zaXRpb24tY29tcG9zaXRlZC1zd2l0Y2gt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5IEBACitCZWZvcmUgKHNob3Vs
ZCBiZSBlbXB0eSk6IAorCitBZnRlciAoc2hvdWxkIG5vdCBiZSBlbXB0eSk6IAorKEdyYXBoaWNz
TGF5ZXIKKyAgKGJvdW5kcyA4MDAuMDAgNjAwLjAwKQorICAoY2hpbGRyZW4gMQorICAgIChHcmFw
aGljc0xheWVyCisgICAgICAoYm91bmRzIDgwMC4wMCA2MDAuMDApCisgICAgICAoY2hpbGRyZW4g
MQorICAgICAgICAoR3JhcGhpY3NMYXllcgorICAgICAgICAgIChwb3NpdGlvbiA0OTUuMDAgMzAu
MDApCisgICAgICAgICAgKGJvdW5kcyAzMDAuMDAgMTAwLjAwKQorICAgICAgICAgIChkcmF3c0Nv
bnRlbnQgMSkKKyAgICAgICAgKQorICAgICAgKQorICAgICkKKyAgKQorKQorCgpQcm9wZXJ0eSBj
aGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9jb21wb3NpdGluZy9nZW9tZXRyeS9maXhlZC1wb3NpdGlv
bi1jb21wb3NpdGVkLXN3aXRjaC1leHBlY3RlZC50eHQKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVv
bC1zdHlsZQogICArIExGCgpJbmRleDogTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvZ2VvbWV0cnkv
Zml4ZWQtcG9zaXRpb24tY29tcG9zaXRlZC1zd2l0Y2guaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9jb21wb3NpdGluZy9nZW9tZXRyeS9maXhlZC1wb3NpdGlvbi1jb21wb3NpdGVkLXN3
aXRjaC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvZ2VvbWV0
cnkvZml4ZWQtcG9zaXRpb24tY29tcG9zaXRlZC1zd2l0Y2guaHRtbAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw1NSBAQAorPCFET0NUWVBFPgorPGh0bWw+Cis8aGVhZD4KKyAgPHRpdGxlPkNyZWF0
aW5nIGNvbXBvc2l0ZWQgbGF5ZXJzIGZvciBmaXhlZCBwb3NpdGlvbiBlbGVtZW50czwvdGl0bGU+
CisKKyAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIj4KKyAgICAjdGFsbCB7
CisgICAgICBoZWlnaHQ6IDEwMHB4OworICAgIH0KKworICAgICNmaXhlZCB7CisgICAgICB3aWR0
aDogMzAwcHg7CisgICAgICBoZWlnaHQ6IDEwMHB4OworICAgICAgcG9zaXRpb246IGZpeGVkOwor
ICAgICAgdG9wOiAzMHB4OworICAgICAgcmlnaHQ6IDVweDsKKyAgICAgIGJhY2tncm91bmQtY29s
b3I6IGdyZWVuOworICAgIH0KKyAgPC9zdHlsZT4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz
Y3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICBpZiAod2luZG93LmludGVybmFscykgCisgICAg
ICB3aW5kb3cuaW50ZXJuYWxzLnNldEVuYWJsZUNvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbihk
b2N1bWVudCwgdHJ1ZSk7CisKKyAgICBmdW5jdGlvbiBkb1Rlc3QoKQorICAgIHsKKyAgICAgIHZh
ciBsYXllclRyZWVPdXRwdXQgPSAnJzsKKworICAgICAgLy8gSWYgdGhlIGZpeGVkIHBvc2l0aW9u
IGVsZW1lbnQgZG9lc24ndCBoYXZlIGl0cyBvd24gc3RhY2tpbmcgY29udGV4dCB0aGVuCisgICAg
ICAvLyBpdCBjYW5ub3QgZ2V0IGEgY29tcG9zaXRlZCBsYXllci4KKyAgICAgIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheWVyVHJlZU91dHB1dCArPSAnQmVmb3Jl
IChzaG91bGQgYmUgZW1wdHkpOiBcbicgKyBsYXlvdXRUZXN0Q29udHJvbGxlci5sYXllclRyZWVB
c1RleHQoKSArICdcbic7CisKKyAgICAgIC8vIEFkZGluZyBhIHotaW5kZXggdG8gdGhlIGZpeGVk
IHBvc2l0aW9uIGVsZW1lbnQgd2lsbCBnaXZlIGl0IGEgc3RhY2tpbmcgY29udGV4dAorICAgICAg
Ly8gYW5kIGFsbG93IGl0IHRvIGJlIGNvbXBvc2l0ZWQuCisgICAgICBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnZml4ZWQnKS5zdHlsZS56SW5kZXggPSAnMSc7CisKKyAgICAgIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5ZXJUcmVlT3V0cHV0ICs9ICdBZnRl
ciAoc2hvdWxkIG5vdCBiZSBlbXB0eSk6IFxuJyArIGxheW91dFRlc3RDb250cm9sbGVyLmxheWVy
VHJlZUFzVGV4dCgpOworICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGF5ZXJ0cmVl
JykuaW5uZXJUZXh0ID0gbGF5ZXJUcmVlT3V0cHV0OworICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5kdW1wQXNUZXh0KCk7CisgICAgICB9CisKKyAgICB9CisKKyAgICB3aW5kb3cuYWRkRXZl
bnRMaXN0ZW5lcigibG9hZCIsIGRvVGVzdCwgZmFsc2UpOworCisgICAgPC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keT4KKzwhLS0gRml4ZWQgcG9zaXRpb24gZWxlbWVudCBzaG91bGQgZ2V0IGl0cyBv
d24gbGF5ZXIgLS0+Cis8cHJlIGlkPSJsYXllcnRyZWUiPjwvcHJlPgorPGRpdiBpZD0idGFsbCI+
PC9kaXY+Cis8ZGl2IGlkPSJmaXhlZCI+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9jb21wb3NpdGluZy9nZW9tZXRyeS9maXhlZC1wb3Np
dGlvbi1jb21wb3NpdGVkLXN3aXRjaC5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5
bGUKICAgKyBMRgoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112035</attachid>
            <date>2011-10-21 15:38:09 -0700</date>
            <delta_ts>2011-10-26 16:32:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69796-20111021153808.patch</filename>
            <type>text/plain</type>
            <size>16633</size>
            <attacher name="Vangelis Kokkevis">vangelis</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk4MTYwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTEtMTAtMjEgIFZhbmdlbGlz
IEtva2tldmlzICA8dmFuZ2VsaXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEFkZCBzdXBwb3J0
IGZvciBjcmVhdGluZyBjb21wb3NpdGluZyBsYXllcnMgZm9yIGZpeGVkIHBvc2l0aW9uIGVsZW1l
bnRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk3
OTYKKworICAgICAgICBwb3NpdGlvbjpmaXhlZCBlbGVtZW50cyB3aWxsIGdldCBhIGNvbXBvc2l0
aW5nIGxheWVyIGlmOgorICAgICAgICAxLiBTZXR0aW5nczphY2NlbGVyYXRlZENvbXBvc2l0aW5n
Rm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoKSByZXR1cm5zIHRydWUsIAorICAgICAgICAyLiBUaGUg
ZWxlbWVudCBoYXMgaXRzIG93biBzdGFja2luZyBjb250ZXh0IChlLmcuIGhhcyBhIHotaW5kZXgp
LCBhbmQKKyAgICAgICAgMy4gVGhlIGVsZW1lbnQncyBjb250YWluZXIgaXMgdGhlIFJlbmRlclZp
ZXcgKGUuZy4gbm90IGEgZGVzY2VuZGFudCBvZiBhIHRyYW5zZm9ybWVkIGVsZW1lbnQpCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDogY29tcG9z
aXRpbmcvZ2VvbWV0cnkvZml4ZWQtcG9zaXRpb24tY29tcG9zaXRlZC1zd2l0Y2guaHRtbAorCisg
ICAgICAgICogcGFnZS9TZXR0aW5ncy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6
U2V0dGluZ3MpOgorICAgICAgICAqIHBhZ2UvU2V0dGluZ3MuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlNldHRpbmdzOjpzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJs
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdG
b3JGaXhlZFBvc2l0aW9uRW5hYmxlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVy
Q29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6
OlJlbmRlckxheWVyQ29tcG9zaXRvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0xheWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvclBv
c2l0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg6Cisg
ICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJu
YWxzOjpzZXRFbmFibGVDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb24pOgorICAgICAgICAqIHRl
c3RpbmcvSW50ZXJuYWxzLmg6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaWRsOgorCiAy
MDExLTEwLTIxICBKb3NodWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
SW5kZXhlZERCOiBvYmplY3RTdG9yZS50cmFuc2FjdGlvbiBwcm9wZXJ0eSBzaG91bGQgYmUgcmVh
ZG9ubHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCShyZXZpc2lvbiA5ODAyOCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODAs
NiArMTgwLDcgQEAgU2V0dGluZ3M6OlNldHRpbmdzKFBhZ2UqIHBhZ2UpCiAgICAgLCBtX2FjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdGb3JQbHVnaW5zRW5hYmxlZCh0cnVlKQogICAgICwgbV9hY2NlbGVy
YXRlZENvbXBvc2l0aW5nRm9yQ2FudmFzRW5hYmxlZCh0cnVlKQogICAgICwgbV9hY2NlbGVyYXRl
ZENvbXBvc2l0aW5nRm9yQW5pbWF0aW9uRW5hYmxlZCh0cnVlKQorICAgICwgbV9hY2NlbGVyYXRl
ZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoZmFsc2UpCiAgICAgLCBtX3Nob3dE
ZWJ1Z0JvcmRlcnMoZmFsc2UpCiAgICAgLCBtX3Nob3dSZXBhaW50Q291bnRlcihmYWxzZSkKICAg
ICAsIG1fZXhwZXJpbWVudGFsTm90aWZpY2F0aW9uc0VuYWJsZWQoZmFsc2UpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9TZXR0aW5ncy5oCShyZXZpc2lvbiA5ODAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
U2V0dGluZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMzE5LDYgKzMxOSw5IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yQW5pbWF0
aW9uRW5hYmxlZChib29sKTsKICAgICAgICAgYm9vbCBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9y
QW5pbWF0aW9uRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0ZvckFuaW1hdGlvbkVuYWJsZWQ7IH0KIAorICAgICAgICB2b2lkIHNldEFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9hY2NlbGVy
YXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQgPSBlbmFibGVkOyB9CisgICAg
ICAgIGJvb2wgYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVu
YWJsZWQ7IH0KKwogICAgICAgICB2b2lkIHNldFNob3dEZWJ1Z0JvcmRlcnMoYm9vbCk7CiAgICAg
ICAgIGJvb2wgc2hvd0RlYnVnQm9yZGVycygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvd0RlYnVnQm9y
ZGVyczsgfQogCkBAIC01NjAsNiArNTYzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBib29sIG1fYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvclBsdWdpbnNFbmFibGVkIDogMTsKICAg
ICAgICAgYm9vbCBtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JDYW52YXNFbmFibGVkIDogMTsK
ICAgICAgICAgYm9vbCBtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JBbmltYXRpb25FbmFibGVk
IDogMTsKKyAgICAgICAgYm9vbCBtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0
aW9uRW5hYmxlZCA6IDE7CiAgICAgICAgIGJvb2wgbV9zaG93RGVidWdCb3JkZXJzIDogMTsKICAg
ICAgICAgYm9vbCBtX3Nob3dSZXBhaW50Q291bnRlciA6IDE7CiAgICAgICAgIGJvb2wgbV9leHBl
cmltZW50YWxOb3RpZmljYXRpb25zRW5hYmxlZCA6IDE7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkocmV2aXNpb24gOTgw
MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTksNiArOTksNyBAQCBSZW5kZXJMYXllckNvbXBvc2l0b3I6
OlJlbmRlckxheWVyQ29tcG9zCiAgICAgLCBtX3Nob3dSZXBhaW50Q291bnRlcihmYWxzZSkKICAg
ICAsIG1fY29tcG9zaXRpbmdDb25zdWx0c092ZXJsYXAodHJ1ZSkKICAgICAsIG1fY29tcG9zaXRp
bmdEZXBlbmRzT25HZW9tZXRyeShmYWxzZSkKKyAgICAsIG1fY29tcG9zaXRpbmdOZWVkc1VwZGF0
ZShmYWxzZSkKICAgICAsIG1fY29tcG9zaXRpbmcoZmFsc2UpCiAgICAgLCBtX2NvbXBvc2l0aW5n
TGF5ZXJzTmVlZFJlYnVpbGQoZmFsc2UpCiAgICAgLCBtX2ZsdXNoaW5nTGF5ZXJzKGZhbHNlKQpA
QCAtMjUyLDcgKzI1Myw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVDb21w
b3MKICAgICBpZiAobV9mb3JjZUNvbXBvc2l0aW5nTW9kZSAmJiAhbV9jb21wb3NpdGluZykKICAg
ICAgICAgZW5hYmxlQ29tcG9zaXRpbmdNb2RlKHRydWUpOwogCi0gICAgaWYgKCFtX2NvbXBvc2l0
aW5nRGVwZW5kc09uR2VvbWV0cnkgJiYgIW1fY29tcG9zaXRpbmcpCisgICAgaWYgKCFtX2NvbXBv
c2l0aW5nRGVwZW5kc09uR2VvbWV0cnkgJiYgIW1fY29tcG9zaXRpbmcgJiYgIW1fY29tcG9zaXRp
bmdOZWVkc1VwZGF0ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCBjaGVja0ZvckhpZXJh
cmNoeVVwZGF0ZSA9IG1fY29tcG9zaXRpbmdEZXBlbmRzT25HZW9tZXRyeTsKQEAgLTMzMCw2ICsz
MzEsOCBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQ29tcG9zCiAKICAgICBp
ZiAoIWhhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkKICAgICAgICAgZW5hYmxlQ29tcG9zaXRp
bmdNb2RlKGZhbHNlKTsKKworICAgIG1fY29tcG9zaXRpbmdOZWVkc1VwZGF0ZSA9IGZhbHNlOwog
fQogCiBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQmFja2luZyhSZW5kZXJMYXll
ciogbGF5ZXIsIENvbXBvc2l0aW5nQ2hhbmdlUmVwYWludCBzaG91bGRSZXBhaW50KQpAQCAtMTMx
MCw3ICsxMzEzLDggQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcAog
ICAgICAgICAgICAgIHx8IChjYW5SZW5kZXIzRFRyYW5zZm9ybXMoKSAmJiByZW5kZXJlci0+c3R5
bGUoKS0+YmFja2ZhY2VWaXNpYmlsaXR5KCkgPT0gQmFja2ZhY2VWaXNpYmlsaXR5SGlkZGVuKQog
ICAgICAgICAgICAgIHx8IGNsaXBzQ29tcG9zaXRpbmdEZXNjZW5kYW50cyhsYXllcikKICAgICAg
ICAgICAgICB8fCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yQW5pbWF0aW9uKHJlbmRlcmVyKQotICAg
ICAgICAgICAgIHx8IHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JGdWxsU2NyZWVuKHJlbmRlcmVyKTsK
KyAgICAgICAgICAgICB8fCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yRnVsbFNjcmVlbihyZW5kZXJl
cikKKyAgICAgICAgICAgICB8fCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yUG9zaXRpb24ocmVuZGVy
ZXIsIGxheWVyKTsKIH0KIAogYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNhbkJlQ29tcG9z
aXRlZChjb25zdCBSZW5kZXJMYXllciogbGF5ZXIpIGNvbnN0CkBAIC0xNDk1LDYgKzE0OTksMzIg
QEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcAogI2VuZGlmCiB9CiAK
K2Jvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yUG9zaXRp
b24oUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyKSBjb25z
dAoreworICAgIC8vIHBvc2l0aW9uOmZpeGVkIGVsZW1lbnRzIHRoYXQgY3JlYXRlIHRoZWlyIG93
biBzdGFja2luZyBjb250ZXh0IChlLmcuIGhhdmUgYW4gZXhwbGljaXQgei1pbmRleCwKKyAgICAv
LyBvcGFjaXR5LCB0cmFuc2Zvcm0pIGNhbiBnZXQgdGhlaXIgb3duIGNvbXBvc2l0ZWQgbGF5ZXIu
CisgICAgaWYgKCEocmVuZGVyZXItPmlzUG9zaXRpb25lZCgpICYmIHJlbmRlcmVyLT5zdHlsZSgp
LT5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRpb24gJiYgbGF5ZXItPmlzU3RhY2tpbmdDb250ZXh0
KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdz
ID0gbV9yZW5kZXJWaWV3LT5kb2N1bWVudCgpLT5zZXR0aW5ncygpKQorICAgICAgICBpZiAoIXNl
dHRpbmdzLT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJlbmRlck9iamVjdCogY29udGFpbmVy
ID0gcmVuZGVyZXItPmNvbnRhaW5lcigpOworICAgIC8vIElmIHRoZSByZW5kZXJlciBpcyBub3Qg
aG9va2VkIHVwIHlldCB0aGVuIHdlIGhhdmUgdG8gd2FpdCB1bnRpbCBpdCBpcy4KKyAgICBpZiAo
IWNvbnRhaW5lcikgeworICAgICAgICBtX2NvbXBvc2l0aW5nTmVlZHNVcGRhdGUgPSB0cnVlOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gRG9uJ3QgcHJvbW90ZSBmaXhl
ZCBwb3NpdGlvbiBlbGVtZW50cyB0aGF0IGFyZSBkZXNjZW5kYW50cyBvZiB0cmFuc2Zvcm1lZCBl
bGVtZW50cy4KKyAgICAvLyBUaGV5IHdpbGwgc3RheSBmaXhlZCB3cnQgdGhlIHRyYW5zZm9ybWVk
IGVsZW1lbnQgcmF0aGVyIHRoYW4gdGhlIGVuY2xvc2luZyBmcmFtZS4KKyAgICBpZiAoY29udGFp
bmVyICE9IG1fcmVuZGVyVmlldykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJu
IHRydWU7Cit9CisKIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpoYXNOb25JZGVudGl0eTNE
VHJhbnNmb3JtKFJlbmRlck9iamVjdCogcmVuZGVyZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFyZW5k
ZXJlci0+aGFzVHJhbnNmb3JtKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCShyZXZpc2lvbiA5ODAyOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMjczLDYgKzI3Myw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCByZXF1aXJlc0NvbXBvc2l0aW5n
V2hlbkRlc2NlbmRhbnRzQXJlQ29tcG9zaXRpbmcoUmVuZGVyT2JqZWN0KikgY29uc3Q7CiAgICAg
Ym9vbCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yRnVsbFNjcmVlbihSZW5kZXJPYmplY3QqKSBjb25z
dDsKICAgICBib29sIHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JTY3JvbGxhYmxlRnJhbWUoKSBjb25z
dDsKKyAgICBib29sIHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JQb3NpdGlvbihSZW5kZXJPYmplY3Qq
LCBjb25zdCBSZW5kZXJMYXllciopIGNvbnN0OwogCiAgICAgYm9vbCByZXF1aXJlc1Njcm9sbExh
eWVyKFJvb3RMYXllckF0dGFjaG1lbnQpIGNvbnN0OwogICAgIGJvb2wgcmVxdWlyZXNIb3Jpem9u
dGFsU2Nyb2xsYmFyTGF5ZXIoKSBjb25zdDsKQEAgLTI5OSwxMCArMzAwLDEzIEBAIHByaXZhdGU6
CiAgICAgLy8gRklYTUU6IG9uY2Ugc2V0LCB0aGlzIGlzIG5ldmVyIGNsZWFyZWQuCiAgICAgbXV0
YWJsZSBib29sIG1fY29tcG9zaXRpbmdEZXBlbmRzT25HZW9tZXRyeTsKIAorICAgIG11dGFibGUg
Ym9vbCBtX2NvbXBvc2l0aW5nTmVlZHNVcGRhdGU7CisKICAgICBib29sIG1fY29tcG9zaXRpbmc7
CiAgICAgYm9vbCBtX2NvbXBvc2l0aW5nTGF5ZXJzTmVlZFJlYnVpbGQ7CiAgICAgYm9vbCBtX2Zs
dXNoaW5nTGF5ZXJzOwogICAgIGJvb2wgbV9mb3JjZUNvbXBvc2l0aW5nTW9kZTsKKyAgICBib29s
IG1fY29tcG9zaXRlRm9yRml4ZWRQb3NpdGlvbjsKIAogICAgIFJvb3RMYXllckF0dGFjaG1lbnQg
bV9yb290TGF5ZXJBdHRhY2htZW50OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuY3BwCShyZXZpc2lvbiA5ODAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ4LDYgKzI0OCwxNiBAQCB2b2lkIEludGVybmFs
czo6c2V0Rm9yY2VDb21wb3NpdGluZ01vZGUoCiAgICAgZG9jdW1lbnQtPnNldHRpbmdzKCktPnNl
dEZvcmNlQ29tcG9zaXRpbmdNb2RlKGVuYWJsZWQpOwogfQogCit2b2lkIEludGVybmFsczo6c2V0
RW5hYmxlQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uKERvY3VtZW50KiBkb2N1bWVudCwgYm9v
bCBlbmFibGVkLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIWRvY3VtZW50IHx8ICFk
b2N1bWVudC0+c2V0dGluZ3MoKSkgeworICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRvY3VtZW50LT5zZXR0aW5ncygpLT5zZXRB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoZW5hYmxlZCk7Cit9
CisKIHZvaWQgSW50ZXJuYWxzOjpzZXRFbmFibGVTY3JvbGxBbmltYXRvcihEb2N1bWVudCogZG9j
dW1lbnQsIGJvb2wgZW5hYmxlZCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKCFkb2N1
bWVudCB8fCAhZG9jdW1lbnQtPnNldHRpbmdzKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvSW50ZXJuYWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuaAkocmV2aXNpb24gOTgwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3Niw3IEBAIHB1YmxpYzoKICAgICBQ
YXNzUmVmUHRyPFJhbmdlPiBtYXJrZXJSYW5nZUZvck5vZGUoTm9kZSosIHVuc2lnbmVkLCBFeGNl
cHRpb25Db2RlJik7CiAKICAgICB2b2lkIHNldEZvcmNlQ29tcG9zaXRpbmdNb2RlKERvY3VtZW50
KiwgYm9vbCBlbmFibGVkLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBzZXRFbmFibGVDb21w
b3NpdGluZ0ZvckZpeGVkUG9zaXRpb24oRG9jdW1lbnQqLCBib29sIGVuYWJsZWQsIEV4Y2VwdGlv
bkNvZGUmKTsKIAogICAgIHZvaWQgc2V0RW5hYmxlU2Nyb2xsQW5pbWF0b3IoRG9jdW1lbnQqLCBi
b29sIGVuYWJsZWQsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHNldFpvb21BbmltYXRvclRy
YW5zZm9ybShEb2N1bWVudCosIGZsb2F0IHNjYWxlLCBmbG9hdCB0eCwgZmxvYXQgdHksIEV4Y2Vw
dGlvbkNvZGUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwJKHJldmlz
aW9uIDk4MDI4KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBAIG1vZHVsZSB3aW5kb3cgewogICAgICAgICBSYW5n
ZSBtYXJrZXJSYW5nZUZvck5vZGUoaW4gTm9kZSBub2RlLCBpbiB1bnNpZ25lZCBsb25nIGluZGV4
KSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKIAogICAgICAgICB2b2lkIHNldEZvcmNlQ29tcG9zaXRp
bmdNb2RlKGluIERvY3VtZW50IGRvY3VtZW50LCBpbiBib29sZWFuIGVuYWJsZWQpIHJhaXNlcyhE
T01FeGNlcHRpb24pOworICAgICAgICB2b2lkIHNldEVuYWJsZUNvbXBvc2l0aW5nRm9yRml4ZWRQ
b3NpdGlvbihpbiBEb2N1bWVudCBkb2N1bWVudCwgaW4gYm9vbGVhbiBlbmFibGVkKSByYWlzZXMo
RE9NRXhjZXB0aW9uKTsKICAgICAgICAgdm9pZCBzZXRFbmFibGVTY3JvbGxBbmltYXRvcihpbiBE
b2N1bWVudCBkb2N1bWVudCwgaW4gYm9vbGVhbiBlbmFibGVkKSByYWlzZXMoRE9NRXhjZXB0aW9u
KTsKICAgICAgICAgdm9pZCBzZXRab29tQW5pbWF0b3JUcmFuc2Zvcm0oaW4gRG9jdW1lbnQgZG9j
dW1lbnQsIGluIGZsb2F0IHNjYWxlLCBpbiBmbG9hdCB0eCwgaW4gZmxvYXQgdHkpIHJhaXNlcyhE
T01FeGNlcHRpb24pOwogICAgICAgICBmbG9hdCBnZXRQYWdlU2NhbGVGYWN0b3IoaW4gRG9jdW1l
bnQgZG9jdW1lbnQpIHJhaXNlcyhET01FeGNlcHRpb24pOwpJbmRleDogU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNp
b24gOTgxNjApCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNSBAQAorMjAxMS0xMC0yMSAgVmFuZ2VsaXMgS29ra2V2aXMgIDx2YW5nZWxpc0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGNyZWF0aW5nIGNvbXBvc2l0
aW5nIGxheWVycyBmb3IgZml4ZWQgcG9zaXRpb24gZWxlbWVudHMuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTc5NgorCisgICAgICAgIEFkZGluZyBl
eHBvcnRzIGZvciBTZXR0aW5nczo6c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9z
aXRpb25FbmFibGVkKCkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIHdpbi9XZWJLaXQyLmRlZjoKKyAgICAgICAgKiB3aW4vV2ViS2l0MkNGTGl0ZS5k
ZWY6CisKIDIwMTEtMTAtMjEgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAg
ICBSZW5hbWUgV0tQcm9jZXNzQ2x1c3RlciB0byBXS1Byb2Nlc3NHcm91cApJbmRleDogU291cmNl
L1dlYktpdDIvd2luL1dlYktpdDIuZGVmCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL3dp
bi9XZWJLaXQyLmRlZgkocmV2aXNpb24gOTgwMjgpCisrKyBTb3VyY2UvV2ViS2l0Mi93aW4vV2Vi
S2l0Mi5kZWYJKHdvcmtpbmcgY29weSkKQEAgLTE2Niw2ICsxNjYsNyBAQCBFWFBPUlRTCiAgICAg
ICAgID9yYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aEBUZXh0SXRlcmF0b3JAV2ViQ29yZUBAU0E/
QVY/JFBhc3NSZWZQdHJAVlJhbmdlQFdlYkNvcmVAQEBXVEZAQFBBVkVsZW1lbnRAMkBISF9OQFoK
ICAgICAgICAgP3JlbW92ZVNoYWRvd1Jvb3RARWxlbWVudEBXZWJDb3JlQEBRQUVYWFoKICAgICAg
ICAgP3Njcm9sbEVsZW1lbnRUb1JlY3RARnJhbWVWaWV3QFdlYkNvcmVAQFFBRVhQQVZFbGVtZW50
QDJAQUJWSW50UmVjdEAyQEBaCisgICAgICAgID9zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9y
Rml4ZWRQb3NpdGlvbkVuYWJsZWRAU2V0dGluZ3NAV2ViQ29yZUBAUUFFWF9OQFoKICAgICAgICAg
P3NldERPTUV4Y2VwdGlvbkBXZWJDb3JlQEBZQVhQQVZFeGVjU3RhdGVASlNDQEBIQFoKICAgICAg
ICAgP3NldFJlc291cmNlc0RhdGFTaXplTGltaXRzRnJvbUludGVybmFsc0BJbnNwZWN0b3JDb250
cm9sbGVyQFdlYkNvcmVAQFFBRVhISEBaCiAgICAgICAgID9zZXRTY3JvbGxiYXJzU3VwcHJlc3Nl
ZEBTY3JvbGxWaWV3QFdlYkNvcmVAQFFBRVhfTjBAWgpJbmRleDogU291cmNlL1dlYktpdDIvd2lu
L1dlYktpdDJDRkxpdGUuZGVmCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL3dpbi9XZWJL
aXQyQ0ZMaXRlLmRlZgkocmV2aXNpb24gOTgwMjgpCisrKyBTb3VyY2UvV2ViS2l0Mi93aW4vV2Vi
S2l0MkNGTGl0ZS5kZWYJKHdvcmtpbmcgY29weSkKQEAgLTE1OCw2ICsxNTgsNyBAQCBFWFBPUlRT
CiAgICAgICAgID9wYWludENvbnRyb2xUaW50c0BGcmFtZVZpZXdAV2ViQ29yZUBAQUFFWFhaCiAg
ICAgICAgID9zY3JvbGxFbGVtZW50VG9SZWN0QEZyYW1lVmlld0BXZWJDb3JlQEBRQUVYUEFWRWxl
bWVudEAyQEFCVkludFJlY3RAMkBAWgogICAgICAgICA/cmVtb3ZlU2hhZG93Um9vdEBFbGVtZW50
QFdlYkNvcmVAQFFBRVhYWgorICAgICAgICA/c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZp
eGVkUG9zaXRpb25FbmFibGVkQFNldHRpbmdzQFdlYkNvcmVAQFFBRVhfTkBaCiAgICAgICAgID9z
ZXRET01FeGNlcHRpb25AV2ViQ29yZUBAWUFYUEFWRXhlY1N0YXRlQEpTQ0BASEBaCiAgICAgICAg
ID9zZXRSZXNvdXJjZXNEYXRhU2l6ZUxpbWl0c0Zyb21JbnRlcm5hbHNASW5zcGVjdG9yQ29udHJv
bGxlckBXZWJDb3JlQEBRQUVYSEhAWgogICAgICAgICA/c2V0U2Nyb2xsYmFyc1N1cHByZXNzZWRA
U2Nyb2xsVmlld0BXZWJDb3JlQEBRQUVYX04wQFoKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDk4MTYwKQor
KysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTEtMTAtMjEgIFZhbmdlbGlzIEtva2tldmlzICA8dmFuZ2VsaXNAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIEFkZGluZyB0ZXN0cyBmb3IgZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50cyBnZXR0
aW5nIHRoZWlyIG93biBjb21wb3NpdGVkIGxheWVyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk3OTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIGNvbXBvc2l0aW5nL2dlb21ldHJ5L2ZpeGVkLXBvc2l0
aW9uLWNvbXBvc2l0ZWQtc3dpdGNoLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogY29t
cG9zaXRpbmcvZ2VvbWV0cnkvZml4ZWQtcG9zaXRpb24tY29tcG9zaXRlZC1zd2l0Y2guaHRtbDog
QWRkZWQuCisKIDIwMTEtMTAtMjEgIEpvc2h1YSBCZWxsICA8anNiZWxsQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBJbmRleGVkREI6IG9iamVjdFN0b3JlLnRyYW5zYWN0aW9uIHByb3BlcnR5IHNo
b3VsZCBiZSByZWFkb25seQpJbmRleDogTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvZ2VvbWV0cnkv
Zml4ZWQtcG9zaXRpb24tY29tcG9zaXRlZC1zd2l0Y2gtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2NvbXBvc2l0aW5nL2dlb21ldHJ5L2ZpeGVkLXBvc2l0aW9uLWNvbXBv
c2l0ZWQtc3dpdGNoLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Nv
bXBvc2l0aW5nL2dlb21ldHJ5L2ZpeGVkLXBvc2l0aW9uLWNvbXBvc2l0ZWQtc3dpdGNoLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMCBAQAorQmVmb3JlIChzaG91bGQgYmUg
ZW1wdHkpOiAKKworQWZ0ZXIgKHNob3VsZCBub3QgYmUgZW1wdHkpOiAKKyhHcmFwaGljc0xheWVy
CisgIChib3VuZHMgODAwLjAwIDYwMC4wMCkKKyAgKGNoaWxkcmVuIDEKKyAgICAoR3JhcGhpY3NM
YXllcgorICAgICAgKGJvdW5kcyA4MDAuMDAgNjAwLjAwKQorICAgICAgKGNoaWxkcmVuIDEKKyAg
ICAgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgICAgICAocG9zaXRpb24gNDk1LjAwIDMwLjAwKQor
ICAgICAgICAgIChib3VuZHMgMzAwLjAwIDEwMC4wMCkKKyAgICAgICAgICAoZHJhd3NDb250ZW50
IDEpCisgICAgICAgICkKKyAgICAgICkKKyAgICApCisgICkKKykKK0FmdGVyIChzaG91bGQgYmUg
ZW1wdHkpOiAKKwoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcv
Z2VvbWV0cnkvZml4ZWQtcG9zaXRpb24tY29tcG9zaXRlZC1zd2l0Y2gtZXhwZWN0ZWQudHh0Cl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IExheW91dFRlc3Rz
L2NvbXBvc2l0aW5nL2dlb21ldHJ5L2ZpeGVkLXBvc2l0aW9uLWNvbXBvc2l0ZWQtc3dpdGNoLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvZ2VvbWV0cnkvZml4ZWQt
cG9zaXRpb24tY29tcG9zaXRlZC1zd2l0Y2guaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2NvbXBvc2l0aW5nL2dlb21ldHJ5L2ZpeGVkLXBvc2l0aW9uLWNvbXBvc2l0ZWQtc3dpdGNo
Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjUgQEAKKzwhRE9DVFlQRT4KKzxodG1sPgor
PGhlYWQ+CisgIDx0aXRsZT5DcmVhdGluZyBjb21wb3NpdGVkIGxheWVycyBmb3IgZml4ZWQgcG9z
aXRpb24gZWxlbWVudHM8L3RpdGxlPgorCisgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9
InNjcmVlbiI+CisgICAgI3RhbGwgeworICAgICAgaGVpZ2h0OiAxMDBweDsKKyAgICB9CisKKyAg
ICAjZml4ZWQgeworICAgICAgd2lkdGg6IDMwMHB4OworICAgICAgaGVpZ2h0OiAxMDBweDsKKyAg
ICAgIHBvc2l0aW9uOiBmaXhlZDsKKyAgICAgIHRvcDogMzBweDsKKyAgICAgIHJpZ2h0OiA1cHg7
CisgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbjsKKyAgICB9CisgIDwvc3R5bGU+CisgIDxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBjaGFyc2V0PSJ1dGYtOCI+CisgICAgaWYgKHdp
bmRvdy5pbnRlcm5hbHMpIAorICAgICAgd2luZG93LmludGVybmFscy5zZXRFbmFibGVDb21wb3Np
dGluZ0ZvckZpeGVkUG9zaXRpb24oZG9jdW1lbnQsIHRydWUpOworCisgICAgZnVuY3Rpb24gZG9U
ZXN0KCkKKyAgICB7CisgICAgICB2YXIgbGF5ZXJUcmVlT3V0cHV0ID0gJyc7CisKKyAgICAgIC8v
IElmIHRoZSBmaXhlZCBwb3NpdGlvbiBlbGVtZW50IGRvZXNuJ3QgaGF2ZSBpdHMgb3duIHN0YWNr
aW5nIGNvbnRleHQgdGhlbgorICAgICAgLy8gaXQgY2Fubm90IGdldCBhIGNvbXBvc2l0ZWQgbGF5
ZXIuCisgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXll
clRyZWVPdXRwdXQgKz0gJ0JlZm9yZSAoc2hvdWxkIGJlIGVtcHR5KTogXG4nICsgbGF5b3V0VGVz
dENvbnRyb2xsZXIubGF5ZXJUcmVlQXNUZXh0KCkgKyAnXG4nOworCisgICAgICAvLyBBZGRpbmcg
YSB6LWluZGV4IHRvIHRoZSBmaXhlZCBwb3NpdGlvbiBlbGVtZW50IHdpbGwgZ2l2ZSBpdCBhIHN0
YWNraW5nIGNvbnRleHQKKyAgICAgIC8vIGFuZCBhbGxvdyBpdCB0byBiZSBjb21wb3NpdGVkLgor
ICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpeGVkJykuc3R5bGUuekluZGV4ID0gJzEn
OworCisgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxh
eWVyVHJlZU91dHB1dCArPSAnQWZ0ZXIgKHNob3VsZCBub3QgYmUgZW1wdHkpOiBcbicgKyBsYXlv
dXRUZXN0Q29udHJvbGxlci5sYXllclRyZWVBc1RleHQoKTsKKyAgICAgICAgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2xheWVydHJlZScpLmlubmVyVGV4dCA9IGxheWVyVHJlZU91dHB1dDsKKyAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgfQorICAgICAg
CisgICAgICAvLyBBZGRpbmcgYSB0cmFuc2Zvcm0gdG8gdGhlIGNvbnRhaW5lciB3aWxsIHR1cm4g
b2ZmIGNvbXBvc2l0aW5nLgorICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRhaW5l
cicpLnN0eWxlLndlYmtpdFRyYW5zZm9ybSA9ICd0cmFuc2xhdGVYKDApJzsKKyAgICAgIGlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5ZXJUcmVlT3V0cHV0ICs9
ICdBZnRlciAoc2hvdWxkIGJlIGVtcHR5KTogXG4nICsgbGF5b3V0VGVzdENvbnRyb2xsZXIubGF5
ZXJUcmVlQXNUZXh0KCk7CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYXllcnRy
ZWUnKS5pbm5lclRleHQgPSBsYXllclRyZWVPdXRwdXQ7CisgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgIH0KKworICAgIH0KKworICAgIHdpbmRvdy5hZGRF
dmVudExpc3RlbmVyKCJsb2FkIiwgZG9UZXN0LCBmYWxzZSk7CisKKyAgICA8L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5PgorPCEtLSBGaXhlZCBwb3NpdGlvbiBlbGVtZW50IHNob3VsZCBnZXQgaXRz
IG93biBsYXllciAtLT4KKzxwcmUgaWQ9ImxheWVydHJlZSI+PC9wcmU+Cis8ZGl2IGlkPSJ0YWxs
Ij48L2Rpdj4KKzxkaXYgaWQ9ImNvbnRhaW5lciI+CisgIDxkaXYgaWQ9ImZpeGVkIj48L2Rpdj4K
KzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVz
dHMvY29tcG9zaXRpbmcvZ2VvbWV0cnkvZml4ZWQtcG9zaXRpb24tY29tcG9zaXRlZC1zd2l0Y2gu
aHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112616</attachid>
            <date>2011-10-26 16:32:23 -0700</date>
            <delta_ts>2011-10-26 17:59:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69796-20111026163222.patch</filename>
            <type>text/plain</type>
            <size>16752</size>
            <attacher name="Vangelis Kokkevis">vangelis</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk4NDEyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTEtMTAtMjUgIFZhbmdlbGlz
IEtva2tldmlzICA8dmFuZ2VsaXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEFkZCBzdXBwb3J0
IGZvciBjcmVhdGluZyBjb21wb3NpdGluZyBsYXllcnMgZm9yIGZpeGVkIHBvc2l0aW9uIGVsZW1l
bnRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk3
OTYKKworICAgICAgICBwb3NpdGlvbjpmaXhlZCBlbGVtZW50cyB3aWxsIGdldCBhIGNvbXBvc2l0
aW5nIGxheWVyIGlmOgorICAgICAgICAxLiBTZXR0aW5nczphY2NlbGVyYXRlZENvbXBvc2l0aW5n
Rm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoKSByZXR1cm5zIHRydWUsIAorICAgICAgICAyLiBUaGUg
ZWxlbWVudCBoYXMgaXRzIG93biBzdGFja2luZyBjb250ZXh0IChlLmcuIGhhcyBhIHotaW5kZXgp
LCBhbmQKKyAgICAgICAgMy4gVGhlIGVsZW1lbnQncyBjb250YWluZXIgaXMgdGhlIFJlbmRlclZp
ZXcgKGUuZy4gbm90IGEgZGVzY2VuZGFudCBvZiBhIHRyYW5zZm9ybWVkIGVsZW1lbnQpCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgorCisKKyAgICAgICAgVGVzdDogY29tcG9z
aXRpbmcvZ2VvbWV0cnkvZml4ZWQtcG9zaXRpb24tY29tcG9zaXRlZC1zd2l0Y2guaHRtbAorCisg
ICAgICAgICogcGFnZS9TZXR0aW5ncy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6
U2V0dGluZ3MpOgorICAgICAgICAqIHBhZ2UvU2V0dGluZ3MuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlNldHRpbmdzOjpzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJs
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdG
b3JGaXhlZFBvc2l0aW9uRW5hYmxlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVy
Q29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6
OlJlbmRlckxheWVyQ29tcG9zaXRvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0xheWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvclBv
c2l0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg6Cisg
ICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJu
YWxzOjpzZXRFbmFibGVDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb24pOgorICAgICAgICAqIHRl
c3RpbmcvSW50ZXJuYWxzLmg6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaWRsOgorCiAy
MDExLTEwLTI1ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRXZl
bnRUYXJnZXRGYWN0b3J5LmluIGlzIG5vdCBzb3J0ZWQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvU2V0dGluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGlu
Z3MuY3BwCShyZXZpc2lvbiA5ODQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsNiArMTgwLDcgQEAgU2V0dGluZ3M6OlNldHRpbmdz
KFBhZ2UqIHBhZ2UpCiAgICAgLCBtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JQbHVnaW5zRW5h
YmxlZCh0cnVlKQogICAgICwgbV9hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yQ2FudmFzRW5hYmxl
ZCh0cnVlKQogICAgICwgbV9hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yQW5pbWF0aW9uRW5hYmxl
ZCh0cnVlKQorICAgICwgbV9hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVu
YWJsZWQoZmFsc2UpCiAgICAgLCBtX3Nob3dEZWJ1Z0JvcmRlcnMoZmFsc2UpCiAgICAgLCBtX3No
b3dSZXBhaW50Q291bnRlcihmYWxzZSkKICAgICAsIG1fZXhwZXJpbWVudGFsTm90aWZpY2F0aW9u
c0VuYWJsZWQoZmFsc2UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCShyZXZpc2lvbiA5ODQ4
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAkod29ya2luZyBjb3B5KQpAQCAt
MzE5LDYgKzMxOSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRm9yQW5pbWF0aW9uRW5hYmxlZChib29sKTsKICAgICAgICAgYm9v
bCBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yQW5pbWF0aW9uRW5hYmxlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckFuaW1hdGlvbkVuYWJsZWQ7IH0KIAorICAg
ICAgICB2b2lkIHNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxl
ZChib29sIGVuYWJsZWQpIHsgbV9hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlv
bkVuYWJsZWQgPSBlbmFibGVkOyB9CisgICAgICAgIGJvb2wgYWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9hY2NlbGVyYXRlZENv
bXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQ7IH0KKwogICAgICAgICB2b2lkIHNldFNo
b3dEZWJ1Z0JvcmRlcnMoYm9vbCk7CiAgICAgICAgIGJvb2wgc2hvd0RlYnVnQm9yZGVycygpIGNv
bnN0IHsgcmV0dXJuIG1fc2hvd0RlYnVnQm9yZGVyczsgfQogCkBAIC01NjMsNiArNTY2LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG1fYWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0ZvclBsdWdpbnNFbmFibGVkIDogMTsKICAgICAgICAgYm9vbCBtX2FjY2VsZXJhdGVkQ29tcG9z
aXRpbmdGb3JDYW52YXNFbmFibGVkIDogMTsKICAgICAgICAgYm9vbCBtX2FjY2VsZXJhdGVkQ29t
cG9zaXRpbmdGb3JBbmltYXRpb25FbmFibGVkIDogMTsKKyAgICAgICAgYm9vbCBtX2FjY2VsZXJh
dGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZCA6IDE7CiAgICAgICAgIGJvb2wg
bV9zaG93RGVidWdCb3JkZXJzIDogMTsKICAgICAgICAgYm9vbCBtX3Nob3dSZXBhaW50Q291bnRl
ciA6IDE7CiAgICAgICAgIGJvb2wgbV9leHBlcmltZW50YWxOb3RpZmljYXRpb25zRW5hYmxlZCA6
IDE7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJD
b21wb3NpdG9yLmNwcAkocmV2aXNpb24gOTg0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDYgKzEw
MCw3IEBAIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6UmVuZGVyTGF5ZXJDb21wb3MKICAgICAsIG1f
c2hvd1JlcGFpbnRDb3VudGVyKGZhbHNlKQogICAgICwgbV9jb21wb3NpdGluZ0NvbnN1bHRzT3Zl
cmxhcCh0cnVlKQogICAgICwgbV9jb21wb3NpdGluZ0RlcGVuZHNPbkdlb21ldHJ5KGZhbHNlKQor
ICAgICwgbV9jb21wb3NpdGluZ05lZWRzVXBkYXRlKGZhbHNlKQogICAgICwgbV9jb21wb3NpdGlu
ZyhmYWxzZSkKICAgICAsIG1fY29tcG9zaXRpbmdMYXllcnNOZWVkUmVidWlsZChmYWxzZSkKICAg
ICAsIG1fZmx1c2hpbmdMYXllcnMoZmFsc2UpCkBAIC0yNTgsNyArMjU5LDcgQEAgdm9pZCBSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUNvbXBvcwogICAgIGlmIChtX2ZvcmNlQ29tcG9zaXRp
bmdNb2RlICYmICFtX2NvbXBvc2l0aW5nKQogICAgICAgICBlbmFibGVDb21wb3NpdGluZ01vZGUo
dHJ1ZSk7CiAKLSAgICBpZiAoIW1fY29tcG9zaXRpbmdEZXBlbmRzT25HZW9tZXRyeSAmJiAhbV9j
b21wb3NpdGluZykKKyAgICBpZiAoIW1fY29tcG9zaXRpbmdEZXBlbmRzT25HZW9tZXRyeSAmJiAh
bV9jb21wb3NpdGluZyAmJiAhbV9jb21wb3NpdGluZ05lZWRzVXBkYXRlKQogICAgICAgICByZXR1
cm47CiAKICAgICBib29sIGNoZWNrRm9ySGllcmFyY2h5VXBkYXRlID0gbV9jb21wb3NpdGluZ0Rl
cGVuZHNPbkdlb21ldHJ5OwpAQCAtMzM4LDYgKzMzOSw4IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjp1cGRhdGVDb21wb3MKIAogICAgIGlmICghaGFzQWNjZWxlcmF0ZWRDb21wb3NpdGlu
ZygpKQogICAgICAgICBlbmFibGVDb21wb3NpdGluZ01vZGUoZmFsc2UpOworCisgICAgbV9jb21w
b3NpdGluZ05lZWRzVXBkYXRlID0gZmFsc2U7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjp1cGRhdGVCYWNraW5nKFJlbmRlckxheWVyKiBsYXllciwgQ29tcG9zaXRpbmdDaGFuZ2VS
ZXBhaW50IHNob3VsZFJlcGFpbnQpCkBAIC0xMzE5LDcgKzEzMjIsOCBAQCBib29sIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wCiAgICAgICAgICAgICAgfHwgKGNhblJlbmRlcjNE
VHJhbnNmb3JtcygpICYmIHJlbmRlcmVyLT5zdHlsZSgpLT5iYWNrZmFjZVZpc2liaWxpdHkoKSA9
PSBCYWNrZmFjZVZpc2liaWxpdHlIaWRkZW4pCiAgICAgICAgICAgICAgfHwgY2xpcHNDb21wb3Np
dGluZ0Rlc2NlbmRhbnRzKGxheWVyKQogICAgICAgICAgICAgIHx8IHJlcXVpcmVzQ29tcG9zaXRp
bmdGb3JBbmltYXRpb24ocmVuZGVyZXIpCi0gICAgICAgICAgICAgfHwgcmVxdWlyZXNDb21wb3Np
dGluZ0ZvckZ1bGxTY3JlZW4ocmVuZGVyZXIpOworICAgICAgICAgICAgIHx8IHJlcXVpcmVzQ29t
cG9zaXRpbmdGb3JGdWxsU2NyZWVuKHJlbmRlcmVyKQorICAgICAgICAgICAgIHx8IHJlcXVpcmVz
Q29tcG9zaXRpbmdGb3JQb3NpdGlvbihyZW5kZXJlciwgbGF5ZXIpOwogfQogCiBib29sIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6Y2FuQmVDb21wb3NpdGVkKGNvbnN0IFJlbmRlckxheWVyKiBsYXll
cikgY29uc3QKQEAgLTE1MDQsNiArMTUwOCwzMyBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6cmVxdWlyZXNDb21wCiAjZW5kaWYKIH0KIAorYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6
OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JQb3NpdGlvbihSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBj
b25zdCBSZW5kZXJMYXllciogbGF5ZXIpIGNvbnN0Cit7CisgICAgLy8gcG9zaXRpb246Zml4ZWQg
ZWxlbWVudHMgdGhhdCBjcmVhdGUgdGhlaXIgb3duIHN0YWNraW5nIGNvbnRleHQgKGUuZy4gaGF2
ZSBhbiBleHBsaWNpdCB6LWluZGV4LAorICAgIC8vIG9wYWNpdHksIHRyYW5zZm9ybSkgY2FuIGdl
dCB0aGVpciBvd24gY29tcG9zaXRlZCBsYXllci4gQSBzdGFja2luZyBjb250ZXh0IGlzIHJlcXVp
cmVkIG90aGVyd2lzZQorICAgIC8vIHotaW5kZXggYW5kIGNsaXBwaW5nIHdpbGwgYmUgYnJva2Vu
LgorICAgIGlmICghKHJlbmRlcmVyLT5pc1Bvc2l0aW9uZWQoKSAmJiByZW5kZXJlci0+c3R5bGUo
KS0+cG9zaXRpb24oKSA9PSBGaXhlZFBvc2l0aW9uICYmIGxheWVyLT5pc1N0YWNraW5nQ29udGV4
dCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKFNldHRpbmdzKiBzZXR0aW5n
cyA9IG1fcmVuZGVyVmlldy0+ZG9jdW1lbnQoKS0+c2V0dGluZ3MoKSkKKyAgICAgICAgaWYgKCFz
ZXR0aW5ncy0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZW5kZXJPYmplY3QqIGNvbnRhaW5l
ciA9IHJlbmRlcmVyLT5jb250YWluZXIoKTsKKyAgICAvLyBJZiB0aGUgcmVuZGVyZXIgaXMgbm90
IGhvb2tlZCB1cCB5ZXQgdGhlbiB3ZSBoYXZlIHRvIHdhaXQgdW50aWwgaXQgaXMuCisgICAgaWYg
KCFjb250YWluZXIpIHsKKyAgICAgICAgbV9jb21wb3NpdGluZ05lZWRzVXBkYXRlID0gdHJ1ZTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIERvbid0IHByb21vdGUgZml4
ZWQgcG9zaXRpb24gZWxlbWVudHMgdGhhdCBhcmUgZGVzY2VuZGFudHMgb2YgdHJhbnNmb3JtZWQg
ZWxlbWVudHMuCisgICAgLy8gVGhleSB3aWxsIHN0YXkgZml4ZWQgd3J0IHRoZSB0cmFuc2Zvcm1l
ZCBlbGVtZW50IHJhdGhlciB0aGFuIHRoZSBlbmNsb3NpbmcgZnJhbWUuCisgICAgaWYgKGNvbnRh
aW5lciAhPSBtX3JlbmRlclZpZXcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVy
biB0cnVlOworfQorCiBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6aGFzTm9uSWRlbnRpdHkz
RFRyYW5zZm9ybShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKSBjb25zdAogewogICAgIGlmICghcmVu
ZGVyZXItPmhhc1RyYW5zZm9ybSgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQ29tcG9zaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAkocmV2aXNpb24gOTg0ODIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4Miw2ICsyODIsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgcmVxdWlyZXNDb21wb3NpdGlu
Z1doZW5EZXNjZW5kYW50c0FyZUNvbXBvc2l0aW5nKFJlbmRlck9iamVjdCopIGNvbnN0OwogICAg
IGJvb2wgcmVxdWlyZXNDb21wb3NpdGluZ0ZvckZ1bGxTY3JlZW4oUmVuZGVyT2JqZWN0KikgY29u
c3Q7CiAgICAgYm9vbCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yU2Nyb2xsYWJsZUZyYW1lKCkgY29u
c3Q7CisgICAgYm9vbCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yUG9zaXRpb24oUmVuZGVyT2JqZWN0
KiwgY29uc3QgUmVuZGVyTGF5ZXIqKSBjb25zdDsKIAogICAgIGJvb2wgcmVxdWlyZXNTY3JvbGxM
YXllcihSb290TGF5ZXJBdHRhY2htZW50KSBjb25zdDsKICAgICBib29sIHJlcXVpcmVzSG9yaXpv
bnRhbFNjcm9sbGJhckxheWVyKCkgY29uc3Q7CkBAIC0zMDksMTAgKzMxMCwxMyBAQCBwcml2YXRl
OgogICAgIC8vIEZJWE1FOiBvbmNlIHNldCwgdGhpcyBpcyBuZXZlciBjbGVhcmVkLgogICAgIG11
dGFibGUgYm9vbCBtX2NvbXBvc2l0aW5nRGVwZW5kc09uR2VvbWV0cnk7CiAKKyAgICBtdXRhYmxl
IGJvb2wgbV9jb21wb3NpdGluZ05lZWRzVXBkYXRlOworCiAgICAgYm9vbCBtX2NvbXBvc2l0aW5n
OwogICAgIGJvb2wgbV9jb21wb3NpdGluZ0xheWVyc05lZWRSZWJ1aWxkOwogICAgIGJvb2wgbV9m
bHVzaGluZ0xheWVyczsKICAgICBib29sIG1fZm9yY2VDb21wb3NpdGluZ01vZGU7CisgICAgYm9v
bCBtX2NvbXBvc2l0ZUZvckZpeGVkUG9zaXRpb247CiAKICAgICBSb290TGF5ZXJBdHRhY2htZW50
IG1fcm9vdExheWVyQXR0YWNobWVudDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmNwcAkocmV2aXNpb24gOTg0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0OCw2ICsyNDgsMTYgQEAgdm9pZCBJbnRlcm5h
bHM6OnNldEZvcmNlQ29tcG9zaXRpbmdNb2RlKAogICAgIGRvY3VtZW50LT5zZXR0aW5ncygpLT5z
ZXRGb3JjZUNvbXBvc2l0aW5nTW9kZShlbmFibGVkKTsKIH0KIAordm9pZCBJbnRlcm5hbHM6OnNl
dEVuYWJsZUNvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbihEb2N1bWVudCogZG9jdW1lbnQsIGJv
b2wgZW5hYmxlZCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFkb2N1bWVudCB8fCAh
ZG9jdW1lbnQtPnNldHRpbmdzKCkpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkb2N1bWVudC0+c2V0dGluZ3MoKS0+c2V0
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKGVuYWJsZWQpOwor
fQorCiB2b2lkIEludGVybmFsczo6c2V0RW5hYmxlU2Nyb2xsQW5pbWF0b3IoRG9jdW1lbnQqIGRv
Y3VtZW50LCBib29sIGVuYWJsZWQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmICghZG9j
dW1lbnQgfHwgIWRvY3VtZW50LT5zZXR0aW5ncygpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmgJKHJldmlzaW9uIDk4NDgyKQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsNyBAQCBwdWJsaWM6CiAgICAg
UGFzc1JlZlB0cjxSYW5nZT4gbWFya2VyUmFuZ2VGb3JOb2RlKE5vZGUqLCB1bnNpZ25lZCwgRXhj
ZXB0aW9uQ29kZSYpOwogCiAgICAgdm9pZCBzZXRGb3JjZUNvbXBvc2l0aW5nTW9kZShEb2N1bWVu
dCosIGJvb2wgZW5hYmxlZCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgc2V0RW5hYmxlQ29t
cG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uKERvY3VtZW50KiwgYm9vbCBlbmFibGVkLCBFeGNlcHRp
b25Db2RlJik7CiAKICAgICB2b2lkIHNldEVuYWJsZVNjcm9sbEFuaW1hdG9yKERvY3VtZW50Kiwg
Ym9vbCBlbmFibGVkLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBzZXRab29tQW5pbWF0b3JU
cmFuc2Zvcm0oRG9jdW1lbnQqLCBmbG9hdCBzY2FsZSwgZmxvYXQgdHgsIGZsb2F0IHR5LCBFeGNl
cHRpb25Db2RlJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCShyZXZp
c2lvbiA5ODQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAkod29y
a2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQCBtb2R1bGUgd2luZG93IHsKICAgICAgICAgUmFu
Z2UgbWFya2VyUmFuZ2VGb3JOb2RlKGluIE5vZGUgbm9kZSwgaW4gdW5zaWduZWQgbG9uZyBpbmRl
eCkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAKICAgICAgICAgdm9pZCBzZXRGb3JjZUNvbXBvc2l0
aW5nTW9kZShpbiBEb2N1bWVudCBkb2N1bWVudCwgaW4gYm9vbGVhbiBlbmFibGVkKSByYWlzZXMo
RE9NRXhjZXB0aW9uKTsKKyAgICAgICAgdm9pZCBzZXRFbmFibGVDb21wb3NpdGluZ0ZvckZpeGVk
UG9zaXRpb24oaW4gRG9jdW1lbnQgZG9jdW1lbnQsIGluIGJvb2xlYW4gZW5hYmxlZCkgcmFpc2Vz
KERPTUV4Y2VwdGlvbik7CiAgICAgICAgIHZvaWQgc2V0RW5hYmxlU2Nyb2xsQW5pbWF0b3IoaW4g
RG9jdW1lbnQgZG9jdW1lbnQsIGluIGJvb2xlYW4gZW5hYmxlZCkgcmFpc2VzKERPTUV4Y2VwdGlv
bik7CiAgICAgICAgIHZvaWQgc2V0Wm9vbUFuaW1hdG9yVHJhbnNmb3JtKGluIERvY3VtZW50IGRv
Y3VtZW50LCBpbiBmbG9hdCBzY2FsZSwgaW4gZmxvYXQgdHgsIGluIGZsb2F0IHR5KSByYWlzZXMo
RE9NRXhjZXB0aW9uKTsKICAgICAgICAgZmxvYXQgZ2V0UGFnZVNjYWxlRmFjdG9yKGluIERvY3Vt
ZW50IGRvY3VtZW50KSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlz
aW9uIDk4NDEyKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMTEtMTAtMjUgIFZhbmdlbGlzIEtva2tldmlzICA8dmFuZ2VsaXNA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBjcmVhdGluZyBjb21wb3Np
dGluZyBsYXllcnMgZm9yIGZpeGVkIHBvc2l0aW9uIGVsZW1lbnRzLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk3OTYKKworICAgICAgICBBZGRpbmcg
ZXhwb3J0cyBmb3IgU2V0dGluZ3M6OnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBv
c2l0aW9uRW5hYmxlZCgpCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgorCisK
KyAgICAgICAgKiB3aW4vV2ViS2l0Mi5kZWY6CisgICAgICAgICogd2luL1dlYktpdDJDRkxpdGUu
ZGVmOgorCiAyMDExLTEwLTI1ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KIAogICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA4NTIKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL3dpbi9XZWJLaXQyLmRlZgo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi93aW4vV2ViS2l0Mi5kZWYJKHJldmlzaW9uIDk4NDgyKQorKysgU291cmNlL1dlYktpdDIv
d2luL1dlYktpdDIuZGVmCSh3b3JraW5nIGNvcHkpCkBAIC0xNjYsNiArMTY2LDcgQEAgRVhQT1JU
UwogICAgICAgICA/cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGhAVGV4dEl0ZXJhdG9yQFdlYkNv
cmVAQFNBP0FWPyRQYXNzUmVmUHRyQFZSYW5nZUBXZWJDb3JlQEBAV1RGQEBQQVZFbGVtZW50QDJA
SEhfTkBaCiAgICAgICAgID9yZW1vdmVTaGFkb3dSb290QEVsZW1lbnRAV2ViQ29yZUBAUUFFWFha
CiAgICAgICAgID9zY3JvbGxFbGVtZW50VG9SZWN0QEZyYW1lVmlld0BXZWJDb3JlQEBRQUVYUEFW
RWxlbWVudEAyQEFCVkludFJlY3RAMkBAWgorICAgICAgICA/c2V0QWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkQFNldHRpbmdzQFdlYkNvcmVAQFFBRVhfTkBaCiAg
ICAgICAgID9zZXRET01FeGNlcHRpb25AV2ViQ29yZUBAWUFYUEFWRXhlY1N0YXRlQEpTQ0BASEBa
CiAgICAgICAgID9zZXRSZXNvdXJjZXNEYXRhU2l6ZUxpbWl0c0Zyb21JbnRlcm5hbHNASW5zcGVj
dG9yQ29udHJvbGxlckBXZWJDb3JlQEBRQUVYSEhAWgogICAgICAgICA/c2V0U2Nyb2xsYmFyc1N1
cHByZXNzZWRAU2Nyb2xsVmlld0BXZWJDb3JlQEBRQUVYX04wQFoKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL3dpbi9XZWJLaXQyQ0ZMaXRlLmRlZgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi93
aW4vV2ViS2l0MkNGTGl0ZS5kZWYJKHJldmlzaW9uIDk4NDgyKQorKysgU291cmNlL1dlYktpdDIv
d2luL1dlYktpdDJDRkxpdGUuZGVmCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNiArMTU5LDcgQEAg
RVhQT1JUUwogICAgICAgICA/cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGhAVGV4dEl0ZXJhdG9y
QFdlYkNvcmVAQFNBP0FWPyRQYXNzUmVmUHRyQFZSYW5nZUBXZWJDb3JlQEBAV1RGQEBQQVZFbGVt
ZW50QDJASEhfTkBaCiAgICAgICAgID9yZW1vdmVTaGFkb3dSb290QEVsZW1lbnRAV2ViQ29yZUBA
UUFFWFhaCiAgICAgICAgID9zY3JvbGxFbGVtZW50VG9SZWN0QEZyYW1lVmlld0BXZWJDb3JlQEBR
QUVYUEFWRWxlbWVudEAyQEFCVkludFJlY3RAMkBAWgorICAgICAgICA/c2V0QWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkQFNldHRpbmdzQFdlYkNvcmVAQFFBRVhf
TkBaCiAgICAgICAgID9zZXRET01FeGNlcHRpb25AV2ViQ29yZUBAWUFYUEFWRXhlY1N0YXRlQEpT
Q0BASEBaCiAgICAgICAgID9zZXRSZXNvdXJjZXNEYXRhU2l6ZUxpbWl0c0Zyb21JbnRlcm5hbHNA
SW5zcGVjdG9yQ29udHJvbGxlckBXZWJDb3JlQEBRQUVYSEhAWgogICAgICAgICA/c2V0U2Nyb2xs
YmFyc1N1cHByZXNzZWRAU2Nyb2xsVmlld0BXZWJDb3JlQEBRQUVYX04wQFoKSW5kZXg6IExheW91
dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDk4NDEyKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMTEtMTAtMjUgIFZhbmdlbGlzIEtva2tldmlzICA8dmFuZ2VsaXNA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIEFkZGluZyB0ZXN0cyBmb3IgZml4ZWQgcG9zaXRpb25l
ZCBlbGVtZW50cyBnZXR0aW5nIHRoZWlyIG93biBjb21wb3NpdGVkIGxheWVyLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk3OTYKKworICAgICAgICBS
ZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCisKKworICAgICAgICAqIGNvbXBvc2l0aW5nL2dlb21l
dHJ5L2ZpeGVkLXBvc2l0aW9uLWNvbXBvc2l0ZWQtc3dpdGNoLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogY29tcG9zaXRpbmcvZ2VvbWV0cnkvZml4ZWQtcG9zaXRpb24tY29tcG9zaXRl
ZC1zd2l0Y2guaHRtbDogQWRkZWQuCisKIDIwMTEtMTAtMjUgIEZhZHkgU2FtdWVsICA8ZnNhbXVl
bEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgTWFkZSBUYWJsZSB0ZXN0cyBmb3IgQnVnIDcwNjc4
IFBsYXRmb3JtIEluZGVwZW5kZW50CkluZGV4OiBMYXlvdXRUZXN0cy9jb21wb3NpdGluZy9nZW9t
ZXRyeS9maXhlZC1wb3NpdGlvbi1jb21wb3NpdGVkLXN3aXRjaC1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvZ2VvbWV0cnkvZml4ZWQtcG9zaXRpb24t
Y29tcG9zaXRlZC1zd2l0Y2gtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvY29tcG9zaXRpbmcvZ2VvbWV0cnkvZml4ZWQtcG9zaXRpb24tY29tcG9zaXRlZC1zd2l0Y2gt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwIEBACitCZWZvcmUgKHNob3Vs
ZCBiZSBlbXB0eSk6IAorCitBZnRlciAoc2hvdWxkIG5vdCBiZSBlbXB0eSk6IAorKEdyYXBoaWNz
TGF5ZXIKKyAgKGJvdW5kcyA4MDAuMDAgNjAwLjAwKQorICAoY2hpbGRyZW4gMQorICAgIChHcmFw
aGljc0xheWVyCisgICAgICAoYm91bmRzIDgwMC4wMCA2MDAuMDApCisgICAgICAoY2hpbGRyZW4g
MQorICAgICAgICAoR3JhcGhpY3NMYXllcgorICAgICAgICAgIChwb3NpdGlvbiA0OTUuMDAgMzAu
MDApCisgICAgICAgICAgKGJvdW5kcyAzMDAuMDAgMTAwLjAwKQorICAgICAgICAgIChkcmF3c0Nv
bnRlbnQgMSkKKyAgICAgICAgKQorICAgICAgKQorICAgICkKKyAgKQorKQorQWZ0ZXIgKHNob3Vs
ZCBiZSBlbXB0eSk6IAorCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9jb21wb3Np
dGluZy9nZW9tZXRyeS9maXhlZC1wb3NpdGlvbi1jb21wb3NpdGVkLXN3aXRjaC1leHBlY3RlZC50
eHQKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogTGF5b3V0
VGVzdHMvY29tcG9zaXRpbmcvZ2VvbWV0cnkvZml4ZWQtcG9zaXRpb24tY29tcG9zaXRlZC1zd2l0
Y2guaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9jb21wb3NpdGluZy9nZW9tZXRyeS9m
aXhlZC1wb3NpdGlvbi1jb21wb3NpdGVkLXN3aXRjaC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvY29tcG9zaXRpbmcvZ2VvbWV0cnkvZml4ZWQtcG9zaXRpb24tY29tcG9zaXRlZC1z
d2l0Y2guaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NSBAQAorPCFET0NUWVBFPgorPGh0
bWw+Cis8aGVhZD4KKyAgPHRpdGxlPkNyZWF0aW5nIGNvbXBvc2l0ZWQgbGF5ZXJzIGZvciBmaXhl
ZCBwb3NpdGlvbiBlbGVtZW50czwvdGl0bGU+CisKKyAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBt
ZWRpYT0ic2NyZWVuIj4KKyAgICAjdGFsbCB7CisgICAgICBoZWlnaHQ6IDEwMHB4OworICAgIH0K
KworICAgICNmaXhlZCB7CisgICAgICB3aWR0aDogMzAwcHg7CisgICAgICBoZWlnaHQ6IDEwMHB4
OworICAgICAgcG9zaXRpb246IGZpeGVkOworICAgICAgdG9wOiAzMHB4OworICAgICAgcmlnaHQ6
IDVweDsKKyAgICAgIGJhY2tncm91bmQtY29sb3I6IGdyZWVuOworICAgIH0KKyAgPC9zdHlsZT4K
KyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICBp
ZiAod2luZG93LmludGVybmFscykgCisgICAgICB3aW5kb3cuaW50ZXJuYWxzLnNldEVuYWJsZUNv
bXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbihkb2N1bWVudCwgdHJ1ZSk7CisKKyAgICBmdW5jdGlv
biBkb1Rlc3QoKQorICAgIHsKKyAgICAgIHZhciBsYXllclRyZWVPdXRwdXQgPSAnJzsKKworICAg
ICAgLy8gSWYgdGhlIGZpeGVkIHBvc2l0aW9uIGVsZW1lbnQgZG9lc24ndCBoYXZlIGl0cyBvd24g
c3RhY2tpbmcgY29udGV4dCB0aGVuCisgICAgICAvLyBpdCBjYW5ub3QgZ2V0IGEgY29tcG9zaXRl
ZCBsYXllci4KKyAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAg
IGxheWVyVHJlZU91dHB1dCArPSAnQmVmb3JlIChzaG91bGQgYmUgZW1wdHkpOiBcbicgKyBsYXlv
dXRUZXN0Q29udHJvbGxlci5sYXllclRyZWVBc1RleHQoKSArICdcbic7CisKKyAgICAgIC8vIEFk
ZGluZyBhIHotaW5kZXggdG8gdGhlIGZpeGVkIHBvc2l0aW9uIGVsZW1lbnQgd2lsbCBnaXZlIGl0
IGEgc3RhY2tpbmcgY29udGV4dAorICAgICAgLy8gYW5kIGFsbG93IGl0IHRvIGJlIGNvbXBvc2l0
ZWQuCisgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZml4ZWQnKS5zdHlsZS56SW5kZXgg
PSAnMSc7CisKKyAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAg
ICAgbGF5ZXJUcmVlT3V0cHV0ICs9ICdBZnRlciAoc2hvdWxkIG5vdCBiZSBlbXB0eSk6IFxuJyAr
IGxheW91dFRlc3RDb250cm9sbGVyLmxheWVyVHJlZUFzVGV4dCgpOworICAgICAgICBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnbGF5ZXJ0cmVlJykuaW5uZXJUZXh0ID0gbGF5ZXJUcmVlT3V0cHV0
OworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICB9Cisg
ICAgICAKKyAgICAgIC8vIEFkZGluZyBhIHRyYW5zZm9ybSB0byB0aGUgY29udGFpbmVyIHdpbGwg
dHVybiBvZmYgY29tcG9zaXRpbmcuCisgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29u
dGFpbmVyJykuc3R5bGUud2Via2l0VHJhbnNmb3JtID0gJ3RyYW5zbGF0ZVgoMCknOworICAgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXllclRyZWVPdXRw
dXQgKz0gJ0FmdGVyIChzaG91bGQgYmUgZW1wdHkpOiBcbicgKyBsYXlvdXRUZXN0Q29udHJvbGxl
ci5sYXllclRyZWVBc1RleHQoKTsKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xh
eWVydHJlZScpLmlubmVyVGV4dCA9IGxheWVyVHJlZU91dHB1dDsKKyAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgfQorCisgICAgfQorCisgICAgd2luZG93
LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBkb1Rlc3QsIGZhbHNlKTsKKworICAgIDwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+Cis8IS0tIEZpeGVkIHBvc2l0aW9uIGVsZW1lbnQgc2hvdWxkIGdl
dCBpdHMgb3duIGxheWVyIC0tPgorPHByZSBpZD0ibGF5ZXJ0cmVlIj48L3ByZT4KKzxkaXYgaWQ9
InRhbGwiPjwvZGl2PgorPGRpdiBpZD0iY29udGFpbmVyIj4KKyAgPGRpdiBpZD0iZml4ZWQiPjwv
ZGl2PgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlv
dXRUZXN0cy9jb21wb3NpdGluZy9nZW9tZXRyeS9maXhlZC1wb3NpdGlvbi1jb21wb3NpdGVkLXN3
aXRjaC5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112628</attachid>
            <date>2011-10-26 17:59:17 -0700</date>
            <delta_ts>2011-12-19 11:13:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69796-20111026175916.patch</filename>
            <type>text/plain</type>
            <size>14463</size>
            <attacher name="Vangelis Kokkevis">vangelis</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk4NDEyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTEtMTAtMjUgIFZhbmdlbGlz
IEtva2tldmlzICA8dmFuZ2VsaXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEFkZCBzdXBwb3J0
IGZvciBjcmVhdGluZyBjb21wb3NpdGluZyBsYXllcnMgZm9yIGZpeGVkIHBvc2l0aW9uIGVsZW1l
bnRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk3
OTYKKworICAgICAgICBwb3NpdGlvbjpmaXhlZCBlbGVtZW50cyB3aWxsIGdldCBhIGNvbXBvc2l0
aW5nIGxheWVyIGlmOgorICAgICAgICAxLiBTZXR0aW5nczphY2NlbGVyYXRlZENvbXBvc2l0aW5n
Rm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoKSByZXR1cm5zIHRydWUsIAorICAgICAgICAyLiBUaGUg
ZWxlbWVudCBoYXMgaXRzIG93biBzdGFja2luZyBjb250ZXh0IChlLmcuIGhhcyBhIHotaW5kZXgp
LCBhbmQKKyAgICAgICAgMy4gVGhlIGVsZW1lbnQncyBjb250YWluZXIgaXMgdGhlIFJlbmRlclZp
ZXcgKGUuZy4gbm90IGEgZGVzY2VuZGFudCBvZiBhIHRyYW5zZm9ybWVkIGVsZW1lbnQpCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgorCisKKyAgICAgICAgVGVzdDogY29tcG9z
aXRpbmcvZ2VvbWV0cnkvZml4ZWQtcG9zaXRpb24tY29tcG9zaXRlZC1zd2l0Y2guaHRtbAorCisg
ICAgICAgICogcGFnZS9TZXR0aW5ncy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6
U2V0dGluZ3MpOgorICAgICAgICAqIHBhZ2UvU2V0dGluZ3MuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlNldHRpbmdzOjpzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJs
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdG
b3JGaXhlZFBvc2l0aW9uRW5hYmxlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVy
Q29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6
OlJlbmRlckxheWVyQ29tcG9zaXRvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0xheWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvclBv
c2l0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg6Cisg
ICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJu
YWxzOjpzZXRFbmFibGVDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb24pOgorICAgICAgICAqIHRl
c3RpbmcvSW50ZXJuYWxzLmg6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaWRsOgorCiAy
MDExLTEwLTI1ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRXZl
bnRUYXJnZXRGYWN0b3J5LmluIGlzIG5vdCBzb3J0ZWQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvU2V0dGluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGlu
Z3MuY3BwCShyZXZpc2lvbiA5ODQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsNiArMTgwLDcgQEAgU2V0dGluZ3M6OlNldHRpbmdz
KFBhZ2UqIHBhZ2UpCiAgICAgLCBtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JQbHVnaW5zRW5h
YmxlZCh0cnVlKQogICAgICwgbV9hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yQ2FudmFzRW5hYmxl
ZCh0cnVlKQogICAgICwgbV9hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yQW5pbWF0aW9uRW5hYmxl
ZCh0cnVlKQorICAgICwgbV9hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVu
YWJsZWQoZmFsc2UpCiAgICAgLCBtX3Nob3dEZWJ1Z0JvcmRlcnMoZmFsc2UpCiAgICAgLCBtX3No
b3dSZXBhaW50Q291bnRlcihmYWxzZSkKICAgICAsIG1fZXhwZXJpbWVudGFsTm90aWZpY2F0aW9u
c0VuYWJsZWQoZmFsc2UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCShyZXZpc2lvbiA5ODQ4
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAkod29ya2luZyBjb3B5KQpAQCAt
MzE5LDYgKzMxOSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRm9yQW5pbWF0aW9uRW5hYmxlZChib29sKTsKICAgICAgICAgYm9v
bCBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yQW5pbWF0aW9uRW5hYmxlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckFuaW1hdGlvbkVuYWJsZWQ7IH0KIAorICAg
ICAgICB2b2lkIHNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxl
ZChib29sIGVuYWJsZWQpIHsgbV9hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlv
bkVuYWJsZWQgPSBlbmFibGVkOyB9CisgICAgICAgIGJvb2wgYWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9hY2NlbGVyYXRlZENv
bXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQ7IH0KKwogICAgICAgICB2b2lkIHNldFNo
b3dEZWJ1Z0JvcmRlcnMoYm9vbCk7CiAgICAgICAgIGJvb2wgc2hvd0RlYnVnQm9yZGVycygpIGNv
bnN0IHsgcmV0dXJuIG1fc2hvd0RlYnVnQm9yZGVyczsgfQogCkBAIC01NjMsNiArNTY2LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG1fYWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0ZvclBsdWdpbnNFbmFibGVkIDogMTsKICAgICAgICAgYm9vbCBtX2FjY2VsZXJhdGVkQ29tcG9z
aXRpbmdGb3JDYW52YXNFbmFibGVkIDogMTsKICAgICAgICAgYm9vbCBtX2FjY2VsZXJhdGVkQ29t
cG9zaXRpbmdGb3JBbmltYXRpb25FbmFibGVkIDogMTsKKyAgICAgICAgYm9vbCBtX2FjY2VsZXJh
dGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZCA6IDE7CiAgICAgICAgIGJvb2wg
bV9zaG93RGVidWdCb3JkZXJzIDogMTsKICAgICAgICAgYm9vbCBtX3Nob3dSZXBhaW50Q291bnRl
ciA6IDE7CiAgICAgICAgIGJvb2wgbV9leHBlcmltZW50YWxOb3RpZmljYXRpb25zRW5hYmxlZCA6
IDE7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJD
b21wb3NpdG9yLmNwcAkocmV2aXNpb24gOTg0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDYgKzEw
MCw3IEBAIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6UmVuZGVyTGF5ZXJDb21wb3MKICAgICAsIG1f
c2hvd1JlcGFpbnRDb3VudGVyKGZhbHNlKQogICAgICwgbV9jb21wb3NpdGluZ0NvbnN1bHRzT3Zl
cmxhcCh0cnVlKQogICAgICwgbV9jb21wb3NpdGluZ0RlcGVuZHNPbkdlb21ldHJ5KGZhbHNlKQor
ICAgICwgbV9jb21wb3NpdGluZ05lZWRzVXBkYXRlKGZhbHNlKQogICAgICwgbV9jb21wb3NpdGlu
ZyhmYWxzZSkKICAgICAsIG1fY29tcG9zaXRpbmdMYXllcnNOZWVkUmVidWlsZChmYWxzZSkKICAg
ICAsIG1fZmx1c2hpbmdMYXllcnMoZmFsc2UpCkBAIC0yNTgsNyArMjU5LDcgQEAgdm9pZCBSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUNvbXBvcwogICAgIGlmIChtX2ZvcmNlQ29tcG9zaXRp
bmdNb2RlICYmICFtX2NvbXBvc2l0aW5nKQogICAgICAgICBlbmFibGVDb21wb3NpdGluZ01vZGUo
dHJ1ZSk7CiAKLSAgICBpZiAoIW1fY29tcG9zaXRpbmdEZXBlbmRzT25HZW9tZXRyeSAmJiAhbV9j
b21wb3NpdGluZykKKyAgICBpZiAoIW1fY29tcG9zaXRpbmdEZXBlbmRzT25HZW9tZXRyeSAmJiAh
bV9jb21wb3NpdGluZyAmJiAhbV9jb21wb3NpdGluZ05lZWRzVXBkYXRlKQogICAgICAgICByZXR1
cm47CiAKICAgICBib29sIGNoZWNrRm9ySGllcmFyY2h5VXBkYXRlID0gbV9jb21wb3NpdGluZ0Rl
cGVuZHNPbkdlb21ldHJ5OwpAQCAtMzM4LDYgKzMzOSw4IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjp1cGRhdGVDb21wb3MKIAogICAgIGlmICghaGFzQWNjZWxlcmF0ZWRDb21wb3NpdGlu
ZygpKQogICAgICAgICBlbmFibGVDb21wb3NpdGluZ01vZGUoZmFsc2UpOworCisgICAgbV9jb21w
b3NpdGluZ05lZWRzVXBkYXRlID0gZmFsc2U7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjp1cGRhdGVCYWNraW5nKFJlbmRlckxheWVyKiBsYXllciwgQ29tcG9zaXRpbmdDaGFuZ2VS
ZXBhaW50IHNob3VsZFJlcGFpbnQpCkBAIC0xMzE5LDcgKzEzMjIsOCBAQCBib29sIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wCiAgICAgICAgICAgICAgfHwgKGNhblJlbmRlcjNE
VHJhbnNmb3JtcygpICYmIHJlbmRlcmVyLT5zdHlsZSgpLT5iYWNrZmFjZVZpc2liaWxpdHkoKSA9
PSBCYWNrZmFjZVZpc2liaWxpdHlIaWRkZW4pCiAgICAgICAgICAgICAgfHwgY2xpcHNDb21wb3Np
dGluZ0Rlc2NlbmRhbnRzKGxheWVyKQogICAgICAgICAgICAgIHx8IHJlcXVpcmVzQ29tcG9zaXRp
bmdGb3JBbmltYXRpb24ocmVuZGVyZXIpCi0gICAgICAgICAgICAgfHwgcmVxdWlyZXNDb21wb3Np
dGluZ0ZvckZ1bGxTY3JlZW4ocmVuZGVyZXIpOworICAgICAgICAgICAgIHx8IHJlcXVpcmVzQ29t
cG9zaXRpbmdGb3JGdWxsU2NyZWVuKHJlbmRlcmVyKQorICAgICAgICAgICAgIHx8IHJlcXVpcmVz
Q29tcG9zaXRpbmdGb3JQb3NpdGlvbihyZW5kZXJlciwgbGF5ZXIpOwogfQogCiBib29sIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6Y2FuQmVDb21wb3NpdGVkKGNvbnN0IFJlbmRlckxheWVyKiBsYXll
cikgY29uc3QKQEAgLTE1MDQsNiArMTUwOCwzMyBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6cmVxdWlyZXNDb21wCiAjZW5kaWYKIH0KIAorYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6
OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JQb3NpdGlvbihSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBj
b25zdCBSZW5kZXJMYXllciogbGF5ZXIpIGNvbnN0Cit7CisgICAgLy8gcG9zaXRpb246Zml4ZWQg
ZWxlbWVudHMgdGhhdCBjcmVhdGUgdGhlaXIgb3duIHN0YWNraW5nIGNvbnRleHQgKGUuZy4gaGF2
ZSBhbiBleHBsaWNpdCB6LWluZGV4LAorICAgIC8vIG9wYWNpdHksIHRyYW5zZm9ybSkgY2FuIGdl
dCB0aGVpciBvd24gY29tcG9zaXRlZCBsYXllci4gQSBzdGFja2luZyBjb250ZXh0IGlzIHJlcXVp
cmVkIG90aGVyd2lzZQorICAgIC8vIHotaW5kZXggYW5kIGNsaXBwaW5nIHdpbGwgYmUgYnJva2Vu
LgorICAgIGlmICghKHJlbmRlcmVyLT5pc1Bvc2l0aW9uZWQoKSAmJiByZW5kZXJlci0+c3R5bGUo
KS0+cG9zaXRpb24oKSA9PSBGaXhlZFBvc2l0aW9uICYmIGxheWVyLT5pc1N0YWNraW5nQ29udGV4
dCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKFNldHRpbmdzKiBzZXR0aW5n
cyA9IG1fcmVuZGVyVmlldy0+ZG9jdW1lbnQoKS0+c2V0dGluZ3MoKSkKKyAgICAgICAgaWYgKCFz
ZXR0aW5ncy0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZW5kZXJPYmplY3QqIGNvbnRhaW5l
ciA9IHJlbmRlcmVyLT5jb250YWluZXIoKTsKKyAgICAvLyBJZiB0aGUgcmVuZGVyZXIgaXMgbm90
IGhvb2tlZCB1cCB5ZXQgdGhlbiB3ZSBoYXZlIHRvIHdhaXQgdW50aWwgaXQgaXMuCisgICAgaWYg
KCFjb250YWluZXIpIHsKKyAgICAgICAgbV9jb21wb3NpdGluZ05lZWRzVXBkYXRlID0gdHJ1ZTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIERvbid0IHByb21vdGUgZml4
ZWQgcG9zaXRpb24gZWxlbWVudHMgdGhhdCBhcmUgZGVzY2VuZGFudHMgb2YgdHJhbnNmb3JtZWQg
ZWxlbWVudHMuCisgICAgLy8gVGhleSB3aWxsIHN0YXkgZml4ZWQgd3J0IHRoZSB0cmFuc2Zvcm1l
ZCBlbGVtZW50IHJhdGhlciB0aGFuIHRoZSBlbmNsb3NpbmcgZnJhbWUuCisgICAgaWYgKGNvbnRh
aW5lciAhPSBtX3JlbmRlclZpZXcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVy
biB0cnVlOworfQorCiBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6aGFzTm9uSWRlbnRpdHkz
RFRyYW5zZm9ybShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKSBjb25zdAogewogICAgIGlmICghcmVu
ZGVyZXItPmhhc1RyYW5zZm9ybSgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQ29tcG9zaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAkocmV2aXNpb24gOTg0ODIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4Miw2ICsyODIsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgcmVxdWlyZXNDb21wb3NpdGlu
Z1doZW5EZXNjZW5kYW50c0FyZUNvbXBvc2l0aW5nKFJlbmRlck9iamVjdCopIGNvbnN0OwogICAg
IGJvb2wgcmVxdWlyZXNDb21wb3NpdGluZ0ZvckZ1bGxTY3JlZW4oUmVuZGVyT2JqZWN0KikgY29u
c3Q7CiAgICAgYm9vbCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yU2Nyb2xsYWJsZUZyYW1lKCkgY29u
c3Q7CisgICAgYm9vbCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yUG9zaXRpb24oUmVuZGVyT2JqZWN0
KiwgY29uc3QgUmVuZGVyTGF5ZXIqKSBjb25zdDsKIAogICAgIGJvb2wgcmVxdWlyZXNTY3JvbGxM
YXllcihSb290TGF5ZXJBdHRhY2htZW50KSBjb25zdDsKICAgICBib29sIHJlcXVpcmVzSG9yaXpv
bnRhbFNjcm9sbGJhckxheWVyKCkgY29uc3Q7CkBAIC0zMDksMTAgKzMxMCwxMyBAQCBwcml2YXRl
OgogICAgIC8vIEZJWE1FOiBvbmNlIHNldCwgdGhpcyBpcyBuZXZlciBjbGVhcmVkLgogICAgIG11
dGFibGUgYm9vbCBtX2NvbXBvc2l0aW5nRGVwZW5kc09uR2VvbWV0cnk7CiAKKyAgICBtdXRhYmxl
IGJvb2wgbV9jb21wb3NpdGluZ05lZWRzVXBkYXRlOworCiAgICAgYm9vbCBtX2NvbXBvc2l0aW5n
OwogICAgIGJvb2wgbV9jb21wb3NpdGluZ0xheWVyc05lZWRSZWJ1aWxkOwogICAgIGJvb2wgbV9m
bHVzaGluZ0xheWVyczsKICAgICBib29sIG1fZm9yY2VDb21wb3NpdGluZ01vZGU7CisgICAgYm9v
bCBtX2NvbXBvc2l0ZUZvckZpeGVkUG9zaXRpb247CiAKICAgICBSb290TGF5ZXJBdHRhY2htZW50
IG1fcm9vdExheWVyQXR0YWNobWVudDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmNwcAkocmV2aXNpb24gOTg0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0OCw2ICsyNDgsMTYgQEAgdm9pZCBJbnRlcm5h
bHM6OnNldEZvcmNlQ29tcG9zaXRpbmdNb2RlKAogICAgIGRvY3VtZW50LT5zZXR0aW5ncygpLT5z
ZXRGb3JjZUNvbXBvc2l0aW5nTW9kZShlbmFibGVkKTsKIH0KIAordm9pZCBJbnRlcm5hbHM6OnNl
dEVuYWJsZUNvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbihEb2N1bWVudCogZG9jdW1lbnQsIGJv
b2wgZW5hYmxlZCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFkb2N1bWVudCB8fCAh
ZG9jdW1lbnQtPnNldHRpbmdzKCkpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkb2N1bWVudC0+c2V0dGluZ3MoKS0+c2V0
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKGVuYWJsZWQpOwor
fQorCiB2b2lkIEludGVybmFsczo6c2V0RW5hYmxlU2Nyb2xsQW5pbWF0b3IoRG9jdW1lbnQqIGRv
Y3VtZW50LCBib29sIGVuYWJsZWQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmICghZG9j
dW1lbnQgfHwgIWRvY3VtZW50LT5zZXR0aW5ncygpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmgJKHJldmlzaW9uIDk4NDgyKQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsNyBAQCBwdWJsaWM6CiAgICAg
UGFzc1JlZlB0cjxSYW5nZT4gbWFya2VyUmFuZ2VGb3JOb2RlKE5vZGUqLCB1bnNpZ25lZCwgRXhj
ZXB0aW9uQ29kZSYpOwogCiAgICAgdm9pZCBzZXRGb3JjZUNvbXBvc2l0aW5nTW9kZShEb2N1bWVu
dCosIGJvb2wgZW5hYmxlZCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgc2V0RW5hYmxlQ29t
cG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uKERvY3VtZW50KiwgYm9vbCBlbmFibGVkLCBFeGNlcHRp
b25Db2RlJik7CiAKICAgICB2b2lkIHNldEVuYWJsZVNjcm9sbEFuaW1hdG9yKERvY3VtZW50Kiwg
Ym9vbCBlbmFibGVkLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBzZXRab29tQW5pbWF0b3JU
cmFuc2Zvcm0oRG9jdW1lbnQqLCBmbG9hdCBzY2FsZSwgZmxvYXQgdHgsIGZsb2F0IHR5LCBFeGNl
cHRpb25Db2RlJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCShyZXZp
c2lvbiA5ODQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAkod29y
a2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQCBtb2R1bGUgd2luZG93IHsKICAgICAgICAgUmFu
Z2UgbWFya2VyUmFuZ2VGb3JOb2RlKGluIE5vZGUgbm9kZSwgaW4gdW5zaWduZWQgbG9uZyBpbmRl
eCkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAKICAgICAgICAgdm9pZCBzZXRGb3JjZUNvbXBvc2l0
aW5nTW9kZShpbiBEb2N1bWVudCBkb2N1bWVudCwgaW4gYm9vbGVhbiBlbmFibGVkKSByYWlzZXMo
RE9NRXhjZXB0aW9uKTsKKyAgICAgICAgdm9pZCBzZXRFbmFibGVDb21wb3NpdGluZ0ZvckZpeGVk
UG9zaXRpb24oaW4gRG9jdW1lbnQgZG9jdW1lbnQsIGluIGJvb2xlYW4gZW5hYmxlZCkgcmFpc2Vz
KERPTUV4Y2VwdGlvbik7CiAgICAgICAgIHZvaWQgc2V0RW5hYmxlU2Nyb2xsQW5pbWF0b3IoaW4g
RG9jdW1lbnQgZG9jdW1lbnQsIGluIGJvb2xlYW4gZW5hYmxlZCkgcmFpc2VzKERPTUV4Y2VwdGlv
bik7CiAgICAgICAgIHZvaWQgc2V0Wm9vbUFuaW1hdG9yVHJhbnNmb3JtKGluIERvY3VtZW50IGRv
Y3VtZW50LCBpbiBmbG9hdCBzY2FsZSwgaW4gZmxvYXQgdHgsIGluIGZsb2F0IHR5KSByYWlzZXMo
RE9NRXhjZXB0aW9uKTsKICAgICAgICAgZmxvYXQgZ2V0UGFnZVNjYWxlRmFjdG9yKGluIERvY3Vt
ZW50IGRvY3VtZW50KSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKSW5kZXg6IExheW91dFRlc3RzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDk4
NDEyKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTQgQEAKKzIwMTEtMTAtMjUgIFZhbmdlbGlzIEtva2tldmlzICA8dmFuZ2VsaXNAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIEFkZGluZyB0ZXN0cyBmb3IgZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50
cyBnZXR0aW5nIHRoZWlyIG93biBjb21wb3NpdGVkIGxheWVyLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk3OTYKKworICAgICAgICBSZXZpZXdlZCBi
eSBTaW1vbiBGcmFzZXIuCisKKworICAgICAgICAqIGNvbXBvc2l0aW5nL2dlb21ldHJ5L2ZpeGVk
LXBvc2l0aW9uLWNvbXBvc2l0ZWQtc3dpdGNoLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogY29tcG9zaXRpbmcvZ2VvbWV0cnkvZml4ZWQtcG9zaXRpb24tY29tcG9zaXRlZC1zd2l0Y2gu
aHRtbDogQWRkZWQuCisKIDIwMTEtMTAtMjUgIEZhZHkgU2FtdWVsICA8ZnNhbXVlbEBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgTWFkZSBUYWJsZSB0ZXN0cyBmb3IgQnVnIDcwNjc4IFBsYXRmb3Jt
IEluZGVwZW5kZW50CkluZGV4OiBMYXlvdXRUZXN0cy9jb21wb3NpdGluZy9nZW9tZXRyeS9maXhl
ZC1wb3NpdGlvbi1jb21wb3NpdGVkLXN3aXRjaC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvZ2VvbWV0cnkvZml4ZWQtcG9zaXRpb24tY29tcG9zaXRl
ZC1zd2l0Y2gtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvY29tcG9z
aXRpbmcvZ2VvbWV0cnkvZml4ZWQtcG9zaXRpb24tY29tcG9zaXRlZC1zd2l0Y2gtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwIEBACitCZWZvcmUgKHNob3VsZCBiZSBlbXB0
eSk6IAorCitBZnRlciAoc2hvdWxkIG5vdCBiZSBlbXB0eSk6IAorKEdyYXBoaWNzTGF5ZXIKKyAg
KGJvdW5kcyA4MDAuMDAgNjAwLjAwKQorICAoY2hpbGRyZW4gMQorICAgIChHcmFwaGljc0xheWVy
CisgICAgICAoYm91bmRzIDgwMC4wMCA2MDAuMDApCisgICAgICAoY2hpbGRyZW4gMQorICAgICAg
ICAoR3JhcGhpY3NMYXllcgorICAgICAgICAgIChwb3NpdGlvbiA0OTUuMDAgMzAuMDApCisgICAg
ICAgICAgKGJvdW5kcyAzMDAuMDAgMTAwLjAwKQorICAgICAgICAgIChkcmF3c0NvbnRlbnQgMSkK
KyAgICAgICAgKQorICAgICAgKQorICAgICkKKyAgKQorKQorQWZ0ZXIgKHNob3VsZCBiZSBlbXB0
eSk6IAorCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9jb21wb3NpdGluZy9nZW9t
ZXRyeS9maXhlZC1wb3NpdGlvbi1jb21wb3NpdGVkLXN3aXRjaC1leHBlY3RlZC50eHQKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogTGF5b3V0VGVzdHMvY29t
cG9zaXRpbmcvZ2VvbWV0cnkvZml4ZWQtcG9zaXRpb24tY29tcG9zaXRlZC1zd2l0Y2guaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9jb21wb3NpdGluZy9nZW9tZXRyeS9maXhlZC1wb3Np
dGlvbi1jb21wb3NpdGVkLXN3aXRjaC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
Y29tcG9zaXRpbmcvZ2VvbWV0cnkvZml4ZWQtcG9zaXRpb24tY29tcG9zaXRlZC1zd2l0Y2guaHRt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NSBAQAorPCFET0NUWVBFPgorPGh0bWw+Cis8aGVh
ZD4KKyAgPHRpdGxlPkNyZWF0aW5nIGNvbXBvc2l0ZWQgbGF5ZXJzIGZvciBmaXhlZCBwb3NpdGlv
biBlbGVtZW50czwvdGl0bGU+CisKKyAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2Ny
ZWVuIj4KKyAgICAjdGFsbCB7CisgICAgICBoZWlnaHQ6IDEwMHB4OworICAgIH0KKworICAgICNm
aXhlZCB7CisgICAgICB3aWR0aDogMzAwcHg7CisgICAgICBoZWlnaHQ6IDEwMHB4OworICAgICAg
cG9zaXRpb246IGZpeGVkOworICAgICAgdG9wOiAzMHB4OworICAgICAgcmlnaHQ6IDVweDsKKyAg
ICAgIGJhY2tncm91bmQtY29sb3I6IGdyZWVuOworICAgIH0KKyAgPC9zdHlsZT4KKyAgPHNjcmlw
dCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICBpZiAod2luZG93
LmludGVybmFscykgCisgICAgICB3aW5kb3cuaW50ZXJuYWxzLnNldEVuYWJsZUNvbXBvc2l0aW5n
Rm9yRml4ZWRQb3NpdGlvbihkb2N1bWVudCwgdHJ1ZSk7CisKKyAgICBmdW5jdGlvbiBkb1Rlc3Qo
KQorICAgIHsKKyAgICAgIHZhciBsYXllclRyZWVPdXRwdXQgPSAnJzsKKworICAgICAgLy8gSWYg
dGhlIGZpeGVkIHBvc2l0aW9uIGVsZW1lbnQgZG9lc24ndCBoYXZlIGl0cyBvd24gc3RhY2tpbmcg
Y29udGV4dCB0aGVuCisgICAgICAvLyBpdCBjYW5ub3QgZ2V0IGEgY29tcG9zaXRlZCBsYXllci4K
KyAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheWVyVHJl
ZU91dHB1dCArPSAnQmVmb3JlIChzaG91bGQgYmUgZW1wdHkpOiBcbicgKyBsYXlvdXRUZXN0Q29u
dHJvbGxlci5sYXllclRyZWVBc1RleHQoKSArICdcbic7CisKKyAgICAgIC8vIEFkZGluZyBhIHot
aW5kZXggdG8gdGhlIGZpeGVkIHBvc2l0aW9uIGVsZW1lbnQgd2lsbCBnaXZlIGl0IGEgc3RhY2tp
bmcgY29udGV4dAorICAgICAgLy8gYW5kIGFsbG93IGl0IHRvIGJlIGNvbXBvc2l0ZWQuCisgICAg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZml4ZWQnKS5zdHlsZS56SW5kZXggPSAnMSc7CisK
KyAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5ZXJU
cmVlT3V0cHV0ICs9ICdBZnRlciAoc2hvdWxkIG5vdCBiZSBlbXB0eSk6IFxuJyArIGxheW91dFRl
c3RDb250cm9sbGVyLmxheWVyVHJlZUFzVGV4dCgpOworICAgICAgICBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnbGF5ZXJ0cmVlJykuaW5uZXJUZXh0ID0gbGF5ZXJUcmVlT3V0cHV0OworICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICB9CisgICAgICAKKyAg
ICAgIC8vIEFkZGluZyBhIHRyYW5zZm9ybSB0byB0aGUgY29udGFpbmVyIHdpbGwgdHVybiBvZmYg
Y29tcG9zaXRpbmcuCisgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJyku
c3R5bGUud2Via2l0VHJhbnNmb3JtID0gJ3RyYW5zbGF0ZVgoMCknOworICAgICAgaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXllclRyZWVPdXRwdXQgKz0gJ0Fm
dGVyIChzaG91bGQgYmUgZW1wdHkpOiBcbicgKyBsYXlvdXRUZXN0Q29udHJvbGxlci5sYXllclRy
ZWVBc1RleHQoKTsKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xheWVydHJlZScp
LmlubmVyVGV4dCA9IGxheWVyVHJlZU91dHB1dDsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuZHVtcEFzVGV4dCgpOworICAgICAgfQorCisgICAgfQorCisgICAgd2luZG93LmFkZEV2ZW50
TGlzdGVuZXIoImxvYWQiLCBkb1Rlc3QsIGZhbHNlKTsKKworICAgIDwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8IS0tIEZpeGVkIHBvc2l0aW9uIGVsZW1lbnQgc2hvdWxkIGdldCBpdHMgb3du
IGxheWVyIC0tPgorPHByZSBpZD0ibGF5ZXJ0cmVlIj48L3ByZT4KKzxkaXYgaWQ9InRhbGwiPjwv
ZGl2PgorPGRpdiBpZD0iY29udGFpbmVyIj4KKyAgPGRpdiBpZD0iZml4ZWQiPjwvZGl2PgorPC9k
aXY+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9j
b21wb3NpdGluZy9nZW9tZXRyeS9maXhlZC1wb3NpdGlvbi1jb21wb3NpdGVkLXN3aXRjaC5odG1s
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoK
</data>

          </attachment>
      

    </bug>

</bugzilla>