<?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>145843</bug_id>
          
          <creation_ts>2015-06-10 09:13:59 -0700</creation_ts>
          <short_desc>CSS Scroll Snap - support snapping to nested elements</short_desc>
          <delta_ts>2015-06-16 13:44:55 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>134283</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Majid Valipour">majidvp</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>jamesr</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>majidvp</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1101034</commentid>
    <comment_count>0</comment_count>
    <who name="Majid Valipour">majidvp</who>
    <bug_when>2015-06-10 09:13:59 -0700</bug_when>
    <thetext>According to the current Snap Points Spec draft[1] an scrolling container may snap to snap coordinates that are defined on any of its descendant. Here is the relevant language from the spec:
&quot;The scroll-snap-coordinate property is used to define the x and y coordinate within the element which will align with the *nearest ancestor* scroll container’s snap-destination for the respective axis.&quot;

The current Webkit implementation only snaps to snap points defined on immediate children. Lots of interesting layouts outside simple image galleries require in-between layers between scroller and the actual items to provide structure. Firefox implementation of snap points support snapping to arbitrary descendant as opposed to only immediate children.

Here is an simple repro: http://majido.github.io/snap-points/tests/element-snap-coordinates.html
Elements are indented according to their nesting level. Webkit nightly only snaps to black elements (i.e. immediate children) while Firefox snaps to all elements.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1101058</commentid>
    <comment_count>1</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-06-10 11:11:04 -0700</bug_when>
    <thetext>There was css-wg discussion around this, and the resolution was to bring &quot;elements&quot; back:
https://lists.w3.org/Archives/Public/www-style/2015May/0282.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1101268</commentid>
    <comment_count>2</comment_count>
    <who name="Majid Valipour">majidvp</who>
    <bug_when>2015-06-11 06:52:22 -0700</bug_when>
    <thetext>Thanks for the link.

If I understand that correctly the &apos;elements&apos; makes it so that the scrolling container has to be explicit when it is interested in capturing the snap points from descending children. This makes a sense.

However, it is still the case that the snap points are allowed to be defined by any descendants (and not just immediate children). That means the following should still snap:


#snap-container {
  scroll-snap-points-y: elements;
  scroll-snap-type: mandatory;
}

#snap-element {
  scroll-snap-coordinates: 50% 50%;
}

&lt;div id=&apos;snap-container&apos;&gt;
   &lt;div&gt;
      &lt;p id=&apos;snap-element&apos;&gt;&lt;/p&gt; 
   &lt;div&gt;
&lt;/div&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1101285</commentid>
    <comment_count>3</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-06-11 08:40:56 -0700</bug_when>
    <thetext>Yes, you&apos;re correct. We should fix this!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1101286</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-06-11 08:41:46 -0700</bug_when>
    <thetext>&lt;rdar://problem/21339581&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1101838</commentid>
    <comment_count>5</comment_count>
      <attachid>254858</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-06-13 20:15:33 -0700</bug_when>
    <thetext>Created attachment 254858
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1101839</commentid>
    <comment_count>6</comment_count>
      <attachid>254858</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-06-13 20:19:12 -0700</bug_when>
    <thetext>Comment on attachment 254858
Patch

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        Tested by css3/scroll-snap/nested-elements.html

This test is not part of this patch. I&apos;m debugging the test separately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1101861</commentid>
    <comment_count>7</comment_count>
      <attachid>254863</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-06-14 13:33:40 -0700</bug_when>
    <thetext>Created attachment 254863
Patch v2 (Includes Test)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1101862</commentid>
    <comment_count>8</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-06-14 13:35:26 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; 
&gt; Here is an simple repro:
&gt; http://majido.github.io/snap-points/tests/element-snap-coordinates.html
&gt; Elements are indented according to their nesting level. Webkit nightly only
&gt; snaps to black elements (i.e. immediate children) while Firefox snaps to all
&gt; elements.

Thanks for the great test case! I&apos;ve incorporated it into the tests now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1101960</commentid>
    <comment_count>9</comment_count>
      <attachid>254863</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-06-15 10:34:28 -0700</bug_when>
    <thetext>Comment on attachment 254863
Patch v2 (Includes Test)

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

&gt; Source/WebCore/dom/Document.cpp:6693
&gt; +void Document::addElementToScrollSnapContainer(Element* scrollSnapElement, Element* scrollSnapContainer)
&gt; +{
&gt; +    auto&amp; containerElements = m_scrollSnapElementsForContainers.add(scrollSnapContainer, HashSet&lt;Element*&gt;()).iterator-&gt;value;
&gt; +    containerElements.add(scrollSnapElement);
&gt; +}
&gt; +
&gt; +const HashSet&lt;Element*&gt;* Document::elementsForScrollSnapContainer(Element* scrollSnapContainer)
&gt; +{
&gt; +    auto containerElementsIterator = m_scrollSnapElementsForContainers.find(scrollSnapContainer);
&gt; +    if (containerElementsIterator == m_scrollSnapElementsForContainers.end())
&gt; +        return nullptr;
&gt; +
&gt; +    return &amp;containerElementsIterator-&gt;value;
&gt; +}
&gt; +
&gt; +void Document::removeElementFromScrollSnapContainer(Element* scrollSnapElement, Element* scrollSnapContainer)
&gt; +{
&gt; +    auto containerElementsIterator = m_scrollSnapElementsForContainers.find(scrollSnapContainer);
&gt; +    if (containerElementsIterator == m_scrollSnapElementsForContainers.end())
&gt; +        return;
&gt; +
&gt; +    if (containerElementsIterator-&gt;value.isEmpty())
&gt; +        return;
&gt; +
&gt; +    containerElementsIterator-&gt;value.remove(scrollSnapElement);
&gt; +
&gt; +    if (containerElementsIterator-&gt;value.isEmpty())
&gt; +        m_scrollSnapElementsForContainers.remove(scrollSnapContainer);
&gt; +}

I&apos;m a bit concerned here that the only thing that removes these raw element pointers from this map are when renderers are removed from the tree.

&gt; Source/WebCore/page/scrolling/AxisScrollSnapOffsets.cpp:63
&gt; +        LayoutRect viewSize = box-&gt;contentBoxRect();
&gt; +        LayoutUnit viewWidth = viewSize.width();
&gt; +        LayoutUnit viewHeight = viewSize.height();
&gt; +        FloatPoint position = box-&gt;localToContainerPoint(FloatPoint(), parent.renderBox());

We have to think about containing block here. What happens with:

&lt;div style=&quot;position:absolute&quot;&gt;
  &lt;div style=&quot;overflow:scroll&quot;&gt;
   &lt;div style=&quot;position: absolute; scroll-snap-coordinate: 10px 10px;&gt;

Here the containing block of the inner div is the outer div, skipping overflow, and the children don&apos;t scroll.

&gt; Source/WebCore/rendering/RenderElement.cpp:126
&gt; +    // Find the first node with a valid scrollable area starting with the current
&gt; +    // node and traversing its parents (or shadow hosts).
&gt; +    for (Element* candidate = node; candidate; candidate = candidate-&gt;parentElement()) {
&gt; +        RenderBox* box = candidate-&gt;renderBox();
&gt; +        if (box &amp;&amp; box-&gt;layer())
&gt; +            return candidate;
&gt; +    }
&gt; +    
&gt; +    return nullptr;

This isn&apos;t correct. You need to find the ancestor with overflow, since there are other reasons a renderer has a layer (e.g. opacity: 0.5). You should add a testcase for this.

&gt; Source/WebCore/rendering/RenderElement.cpp:165
&gt; +        if (!m_style-&gt;scrollSnapCoordinates().isEmpty()) {
&gt; +            Element* scrollSnapElement = element();
&gt; +            Element* scrollSnapContainer = findEnclosingScrollableContainer(scrollSnapElement);
&gt; +            
&gt; +            if (scrollSnapElement &amp;&amp; scrollSnapContainer)
&gt; +                document().removeElementFromScrollSnapContainer(scrollSnapElement, scrollSnapContainer);
&gt; +        }

I think you should do this in RenderElement::willBeRemovedFromTree()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1101965</commentid>
    <comment_count>10</comment_count>
      <attachid>254863</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-06-15 10:48:46 -0700</bug_when>
    <thetext>Comment on attachment 254863
Patch v2 (Includes Test)

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

&gt;&gt; Source/WebCore/dom/Document.cpp:6693
&gt;&gt; +}
&gt; 
&gt; I&apos;m a bit concerned here that the only thing that removes these raw element pointers from this map are when renderers are removed from the tree.

Can you suggest any other likely points where I could do this work? We also remove these pointers when the style changes such that it no longer has scroll coordinates.

Or are you suggesting that they be captured as Ref or RefPtr?

&gt;&gt; Source/WebCore/rendering/RenderElement.cpp:126
&gt;&gt; +    return nullptr;
&gt; 
&gt; This isn&apos;t correct. You need to find the ancestor with overflow, since there are other reasons a renderer has a layer (e.g. opacity: 0.5). You should add a testcase for this.

OK!

&gt;&gt; Source/WebCore/rendering/RenderElement.cpp:165
&gt;&gt; +        }
&gt; 
&gt; I think you should do this in RenderElement::willBeRemovedFromTree()

OK!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1102034</commentid>
    <comment_count>11</comment_count>
      <attachid>254894</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-06-15 14:10:50 -0700</bug_when>
    <thetext>Created attachment 254894
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1102050</commentid>
    <comment_count>12</comment_count>
      <attachid>254900</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-06-15 14:49:23 -0700</bug_when>
    <thetext>Created attachment 254900
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1102051</commentid>
    <comment_count>13</comment_count>
      <attachid>254901</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-06-15 14:55:21 -0700</bug_when>
    <thetext>Created attachment 254901
Patch v3 (Correct typo)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1102052</commentid>
    <comment_count>14</comment_count>
      <attachid>254900</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-06-15 14:56:27 -0700</bug_when>
    <thetext>Comment on attachment 254900
Patch

This had a horrible typo in it!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1102055</commentid>
    <comment_count>15</comment_count>
      <attachid>254900</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-06-15 15:01:00 -0700</bug_when>
    <thetext>Comment on attachment 254900
Patch

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

&gt; Source/WebCore/dom/Document.cpp:6665
&gt; +void Document::addElementToScrollSnapContainer(const RenderElement* scrollSnapElement, const RenderElement* scrollSnapContainer)

The names are wrong; you&apos;re not adding Elements any more.

Since this now tracks renderers, I think it should move to RenderView.

&gt; Source/WebCore/rendering/RenderElement.cpp:914
&gt; +#if ENABLE(CSS_SCROLL_SNAP)
&gt; +    if (!newStyle.scrollSnapCoordinates().isEmpty() || (oldStyle &amp;&amp; !oldStyle-&gt;scrollSnapCoordinates().isEmpty())) {
&gt; +        if (newStyle.scrollSnapCoordinates().isEmpty())
&gt; +            document().addElementNeedingScrollSnapContainerUnregistration(this);
&gt; +        else
&gt; +            document().addElementNeedingScrollSnapContainerRegistration(this);
&gt; +    }
&gt; +#endif

You can&apos;t do it like this. RenderElement is not ref-counted, so nothing keeps it alive.

&gt; Source/WebCore/rendering/RenderElement.cpp:1781
&gt; +const RenderElement* 10100() const

10100!

&gt; LayoutTests/ChangeLog:12
&gt; +        * css3/scroll-snap/nested-elements-expected.txt: Added.
&gt; +        * css3/scroll-snap/nested-elements.html: Added.
&gt; +        * css3/scroll-snap/scroll-snap-offsets-expected.txt: Updated to
&gt; +          account for 50%/50% scroll-snap-coordinates.

I would like to see tests that:

1. programmatically change scroll-snap-coordinate style
2. programmatically change overflow:scroll on ancestors of scroll-snap-coordinate elements
3. programmatically remove DOM nodes which are scrolling containers, and have scroll-snap-coordinates</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1102073</commentid>
    <comment_count>16</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-06-15 15:39:23 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; &gt; Source/WebCore/rendering/RenderElement.cpp:914
&gt; &gt; +#if ENABLE(CSS_SCROLL_SNAP)
&gt; &gt; +    if (!newStyle.scrollSnapCoordinates().isEmpty() || (oldStyle &amp;&amp; !oldStyle-&gt;scrollSnapCoordinates().isEmpty())) {
&gt; &gt; +        if (newStyle.scrollSnapCoordinates().isEmpty())
&gt; &gt; +            document().addElementNeedingScrollSnapContainerUnregistration(this);
&gt; &gt; +        else
&gt; &gt; +            document().addElementNeedingScrollSnapContainerRegistration(this);
&gt; &gt; +    }
&gt; &gt; +#endif
&gt; 
&gt; You can&apos;t do it like this. RenderElement is not ref-counted, so nothing
&gt; keeps it alive.

Do you mean these should be held as Elements instead? Or is there a way to keep RenderElements alive?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1102078</commentid>
    <comment_count>17</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-06-15 15:52:42 -0700</bug_when>
    <thetext>&gt; Do you mean these should be held as Elements instead? Or is there a way to
&gt; keep RenderElements alive?

I think you should just keep a HashSet of RenderElements with scroll-snap-coordinate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1102079</commentid>
    <comment_count>18</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-06-15 16:05:43 -0700</bug_when>
    <thetext>(In reply to comment #15)

&gt; I would like to see tests that:
&gt; 
&gt; 1. programmatically change scroll-snap-coordinate style
&gt; 2. programmatically change overflow:scroll on ancestors of
&gt; scroll-snap-coordinate elements
&gt; 3. programmatically remove DOM nodes which are scrolling containers, and
&gt; have scroll-snap-coordinates

Also:

4. Test multiple scroll-snap-coordinates on a single element. (List of coordinates).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1102102</commentid>
    <comment_count>19</comment_count>
      <attachid>254911</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-06-15 17:52:19 -0700</bug_when>
    <thetext>Created attachment 254911
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1102289</commentid>
    <comment_count>20</comment_count>
      <attachid>254911</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-16 11:19:46 -0700</bug_when>
    <thetext>Comment on attachment 254911
Patch

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

&gt; Source/WebCore/page/scrolling/AxisScrollSnapOffsets.cpp:50
&gt; +    RenderView* renderView = scrollContainer-&gt;frame().view()-&gt;renderView();
&gt; +    if (!renderView)
&gt; +        return;

This seems strange. RenderElement has a function view() that returns a RenderView&amp;. Why would we instead go all the way “around the horn” to the FrameView to get it? Is this possibly a different RenderView? Do we have a case where the RenderView is null? Test cases covering it?

&gt; Source/WebCore/page/scrolling/AxisScrollSnapOffsets.cpp:52
&gt; +    Vector&lt;const RenderElement*&gt; elements;

I suggest Vector&lt;const RenderBox*&gt; instead. The type check should go in the first loop instead of the second loop.

&gt; Source/WebCore/page/scrolling/AxisScrollSnapOffsets.cpp:53
&gt; +    for (const auto* element : renderView-&gt;renderElementsWithScrollSnapCoordinates()) {

I suggest auto* instead of const auto*.

&gt; Source/WebCore/page/scrolling/AxisScrollSnapOffsets.cpp:61
&gt; +        ASSERT(child);

This assertion is not needed. We just built this vector above and we didn’t put any nulls in it. Also, the assert below also does the appropriate type check.

&gt; Source/WebCore/page/scrolling/AxisScrollSnapOffsets.cpp:63
&gt; +        const RenderBox* box = downcast&lt;RenderBox&gt;(child);

I suggest auto* instead of const RenderBox*. But also, I suggest a reference instead.

&gt; Source/WebCore/page/scrolling/AxisScrollSnapOffsets.cpp:65
&gt; +        if (!box)
&gt; +            continue;

Not needed. The code that guarantees this is non-null is really close above. And downcast will not return null if it’s the wrong type, so this doesn’t help for that either.

&gt; Source/WebCore/page/scrolling/AxisScrollSnapOffsets.cpp:67
&gt; +        const auto&amp; scrollSnapCoordinates = box-&gt;style().scrollSnapCoordinates();

I think just auto&amp; should do.

&gt; Source/WebCore/page/scrolling/AxisScrollSnapOffsets.cpp:73
&gt; +        LayoutUnit viewWidth = viewSize.width();
&gt; +        LayoutUnit viewHeight = viewSize.height();

Existing code, but not sure these locals make the code easier to read.

&gt; Source/WebCore/page/scrolling/AxisScrollSnapOffsets.cpp:76
&gt; +        LayoutUnit left = position.x();
&gt; +        LayoutUnit top = position.y();

Existing code, but not sure these locals make the code easier to read.

&gt; Source/WebCore/rendering/RenderElement.cpp:909
&gt; +        ASSERT(frame().view());

I’m not sure this assertion is valuable. If there’s any reason to doubt this is true, then we need code to handle it, not an assertion, and if not, then I think it’s overkill.

&gt; Source/WebCore/rendering/RenderElement.cpp:910
&gt; +        if (RenderView* renderView = frame().view()-&gt;renderView()) {

Same comment as above about going a long way to get to the RenderView.

&gt; Source/WebCore/rendering/RenderElement.cpp:1076
&gt; +        ASSERT(frame().view());

Same comment as above about the assertion.

&gt; Source/WebCore/rendering/RenderElement.cpp:1077
&gt; +        if (RenderView* renderView = frame().view()-&gt;renderView())

Same comment as above about going a long way to get to the RenderView.

&gt; Source/WebCore/rendering/RenderElement.cpp:1796
&gt; +    for (const RenderElement* candidate = this; candidate; candidate = candidate-&gt;parent()) {
&gt; +        if (!is&lt;RenderBox&gt;(*candidate))
&gt; +            continue;
&gt; +        
&gt; +        const RenderBox* box = downcast&lt;RenderBox&gt;(candidate);
&gt; +        if (box &amp;&amp; box-&gt;hasOverflowClip())
&gt; +            return candidate;
&gt; +    }
&gt; +    
&gt; +    return nullptr;

The modern way to write this is more like this:

    for (auto&amp; box : lineageOfType&lt;RenderBox&gt;(*this)) {
        if (box-&gt;hasOverflowClip())
            return box;
    }
    return nullptr;

&gt; Source/WebCore/rendering/RenderElement.h:211
&gt; +    const RenderElement* findEnclosingScrollableContainer() const;

Return type should be RenderBox*, not RenderElement*.

I also think this function should probably go on RenderBox rather than RenderElement.

&gt; Source/WebCore/rendering/RenderView.h:250
&gt; +    void registerRenderElementWithScrollSnapCoordinates(const RenderElement*);
&gt; +    void unregisterRenderElementWithScrollSnapCoordinates(const RenderElement*);

These should take RenderBox&amp;; can’t be null and always need to be boxes. Also, I don’t think we need the word “render” in this function name.

It doesn’t seem smart to keep elements that are not boxes registered; we know we don’t need to do anything with them!

&gt; Source/WebCore/rendering/RenderView.h:251
&gt; +    const HashSet&lt;const RenderElement*&gt;&amp; renderElementsWithScrollSnapCoordinates() { return m_renderElementsWithScrollSnapCoordinates; }

Seems a bit strange to expose a const&amp; to the HashSet. I wonder if there’s a cleaner way to do this. The current client only iterates this to make a vector. Maybe we could change this to return a vector, or to take a function and call it on each element. I guess it’s OK like this, but seems a tiny bit inflexible to tie it to HashSet specifically.

Maybe this should take a RenderElement* and return a vector of the elements in that scroll container.

&gt; Source/WebCore/rendering/RenderView.h:377
&gt; +    HashSet&lt;const RenderElement*&gt; m_renderElementsWithScrollSnapCoordinates;

I suggest RenderBox instead of RenderElement. Also, I am not convinced that having these be const is valuable. I don’t think the member name needs the word “render” in it.

&gt; WebKit.xcworkspace/xcshareddata/xcschemes/All Source (target WebProcess).xcscheme:157
&gt; +      &lt;AdditionalOptions&gt;
&gt; +      &lt;/AdditionalOptions&gt;

Intentionally included in patch, or by accident?

&gt; WebKit.xcworkspace/xcshareddata/xcschemes/All Source (target WebProcess).xcscheme:170
&gt; +      debugServiceExtension = &quot;internal&quot;
&gt;        allowLocationSimulation = &quot;YES&quot;&gt;
&gt; -      &lt;BuildableProductRunnable&gt;
&gt; +      &lt;BuildableProductRunnable
&gt; +         runnableDebuggingMode = &quot;0&quot;&gt;

Intentionally included in patch, or by accident?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1102328</commentid>
    <comment_count>21</comment_count>
      <attachid>254911</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-06-16 13:29:31 -0700</bug_when>
    <thetext>Comment on attachment 254911
Patch

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

&gt;&gt; Source/WebCore/page/scrolling/AxisScrollSnapOffsets.cpp:50
&gt;&gt; +        return;
&gt; 
&gt; This seems strange. RenderElement has a function view() that returns a RenderView&amp;. Why would we instead go all the way “around the horn” to the FrameView to get it? Is this possibly a different RenderView? Do we have a case where the RenderView is null? Test cases covering it?

Nope. I just didn&apos;t notice the view() method in RenderObject and thought this was the right way. Thank you for pointing this out!

&gt;&gt; Source/WebCore/page/scrolling/AxisScrollSnapOffsets.cpp:53
&gt;&gt; +    for (const auto* element : renderView-&gt;renderElementsWithScrollSnapCoordinates()) {
&gt; 
&gt; I suggest auto* instead of const auto*.

Will do!

&gt;&gt; Source/WebCore/page/scrolling/AxisScrollSnapOffsets.cpp:61
&gt;&gt; +        ASSERT(child);
&gt; 
&gt; This assertion is not needed. We just built this vector above and we didn’t put any nulls in it. Also, the assert below also does the appropriate type check.

Ok!

&gt;&gt; Source/WebCore/page/scrolling/AxisScrollSnapOffsets.cpp:63
&gt;&gt; +        const RenderBox* box = downcast&lt;RenderBox&gt;(child);
&gt; 
&gt; I suggest auto* instead of const RenderBox*. But also, I suggest a reference instead.

OK!

&gt;&gt; Source/WebCore/page/scrolling/AxisScrollSnapOffsets.cpp:65
&gt;&gt; +            continue;
&gt; 
&gt; Not needed. The code that guarantees this is non-null is really close above. And downcast will not return null if it’s the wrong type, so this doesn’t help for that either.

OK!

&gt;&gt; Source/WebCore/page/scrolling/AxisScrollSnapOffsets.cpp:67
&gt;&gt; +        const auto&amp; scrollSnapCoordinates = box-&gt;style().scrollSnapCoordinates();
&gt; 
&gt; I think just auto&amp; should do.

OK!

&gt;&gt; Source/WebCore/page/scrolling/AxisScrollSnapOffsets.cpp:73
&gt;&gt; +        LayoutUnit viewHeight = viewSize.height();
&gt; 
&gt; Existing code, but not sure these locals make the code easier to read.

I&apos;ll get rid of them.

&gt;&gt; Source/WebCore/page/scrolling/AxisScrollSnapOffsets.cpp:76
&gt;&gt; +        LayoutUnit top = position.y();
&gt; 
&gt; Existing code, but not sure these locals make the code easier to read.

I&apos;ll get rid of them.

&gt;&gt; Source/WebCore/rendering/RenderElement.cpp:909
&gt;&gt; +        ASSERT(frame().view());
&gt; 
&gt; I’m not sure this assertion is valuable. If there’s any reason to doubt this is true, then we need code to handle it, not an assertion, and if not, then I think it’s overkill.

OK!

&gt;&gt; Source/WebCore/rendering/RenderElement.cpp:910
&gt;&gt; +        if (RenderView* renderView = frame().view()-&gt;renderView()) {
&gt; 
&gt; Same comment as above about going a long way to get to the RenderView.

OK!

&gt;&gt; Source/WebCore/rendering/RenderElement.cpp:1076
&gt;&gt; +        ASSERT(frame().view());
&gt; 
&gt; Same comment as above about the assertion.

OK!

&gt;&gt; Source/WebCore/rendering/RenderElement.cpp:1077
&gt;&gt; +        if (RenderView* renderView = frame().view()-&gt;renderView())
&gt; 
&gt; Same comment as above about going a long way to get to the RenderView.

OK!

&gt;&gt; Source/WebCore/rendering/RenderElement.cpp:1796
&gt;&gt; +    return nullptr;
&gt; 
&gt; The modern way to write this is more like this:
&gt; 
&gt;     for (auto&amp; box : lineageOfType&lt;RenderBox&gt;(*this)) {
&gt;         if (box-&gt;hasOverflowClip())
&gt;             return box;
&gt;     }
&gt;     return nullptr;

That&apos;s much nicer. I&apos;ll revise to use this syntax.

&gt;&gt; Source/WebCore/rendering/RenderElement.h:211
&gt;&gt; +    const RenderElement* findEnclosingScrollableContainer() const;
&gt; 
&gt; Return type should be RenderBox*, not RenderElement*.
&gt; 
&gt; I also think this function should probably go on RenderBox rather than RenderElement.

OK.

&gt;&gt; Source/WebCore/rendering/RenderView.h:250
&gt;&gt; +    void unregisterRenderElementWithScrollSnapCoordinates(const RenderElement*);
&gt; 
&gt; These should take RenderBox&amp;; can’t be null and always need to be boxes. Also, I don’t think we need the word “render” in this function name.
&gt; 
&gt; It doesn’t seem smart to keep elements that are not boxes registered; we know we don’t need to do anything with them!

Sure, that seems smart. I&apos;ll revise appropriately.

&gt;&gt; Source/WebCore/rendering/RenderView.h:251
&gt;&gt; +    const HashSet&lt;const RenderElement*&gt;&amp; renderElementsWithScrollSnapCoordinates() { return m_renderElementsWithScrollSnapCoordinates; }
&gt; 
&gt; Seems a bit strange to expose a const&amp; to the HashSet. I wonder if there’s a cleaner way to do this. The current client only iterates this to make a vector. Maybe we could change this to return a vector, or to take a function and call it on each element. I guess it’s OK like this, but seems a tiny bit inflexible to tie it to HashSet specifically.
&gt; 
&gt; Maybe this should take a RenderElement* and return a vector of the elements in that scroll container.

I like this because it avoids building and copying information here. I guess I could pass in the relevant scroll container and do the logic here, but that would move a bunch of scroll-snap-specific stuff into this file.

I had an earlier version of this patch that stored individual HashSets for each scroll container, but we ended up abandoning that because the point where we identify these scroll-snap-coordinate elements is before layout has happened, so we can&apos;t reliably find the relevant containing element.

&gt;&gt; Source/WebCore/rendering/RenderView.h:377
&gt;&gt; +    HashSet&lt;const RenderElement*&gt; m_renderElementsWithScrollSnapCoordinates;
&gt; 
&gt; I suggest RenderBox instead of RenderElement. Also, I am not convinced that having these be const is valuable. I don’t think the member name needs the word “render” in it.

OK!

&gt;&gt; WebKit.xcworkspace/xcshareddata/xcschemes/All Source (target WebProcess).xcscheme:157
&gt;&gt; +      &lt;/AdditionalOptions&gt;
&gt; 
&gt; Intentionally included in patch, or by accident?

Not intentional.

&gt;&gt; WebKit.xcworkspace/xcshareddata/xcschemes/All Source (target WebProcess).xcscheme:170
&gt;&gt; +         runnableDebuggingMode = &quot;0&quot;&gt;
&gt; 
&gt; Intentionally included in patch, or by accident?

Not intentional!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1102339</commentid>
    <comment_count>22</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-06-16 13:44:55 -0700</bug_when>
    <thetext>Committed r185606: &lt;http://trac.webkit.org/changeset/185606&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254858</attachid>
            <date>2015-06-13 20:15:33 -0700</date>
            <delta_ts>2015-06-14 13:33:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-145843-20150613201501.patch</filename>
            <type>text/plain</type>
            <size>11946</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NTUzMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBACisyMDE1LTA2LTEzICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIENTUyBTY3JvbGwgU25hcCAt
IHN1cHBvcnQgc25hcHBpbmcgdG8gbmVzdGVkIGVsZW1lbnRzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDU4NDMKKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzIxMzM5NTgxPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRlc3RlZCBieSBjc3MzL3Njcm9sbC1zbmFwL25lc3RlZC1lbGVtZW50cy5odG1sCisK
KyAgICAgICAgVGhlIFNjcm9sbCBTbmFwIFBvaW50IGltcGxlbWVudGF0aW9uIHdhcyBub3QgcHJv
cGVybHkgaGFuZGxpbmcgbmVzdGVkIGVsZW1lbnRzLgorICAgICAgICBUaGlzIGNvdWxkIGJlIHJl
c29sdmVkIGJ5IHJlY3Vyc2l2ZWx5IGNhbGxpbmcgJ2FwcGVuZENoaWxkU25hcE9mZnNldHMnLCBi
dXQgdGhpcworICAgICAgICBzZWVtZWQgbGlrZSBhbiBpbmVmZmljaWVudCBhcHByb2FjaCwgZXNw
ZWNpYWxseSBjb25zaWRlcmluZyBob3cgb2Z0ZW4gdGhpcyBtZXRob2QKKyAgICAgICAgaXMgY2Fs
bGVkIGR1cmluZyB2YXJpb3VzIHNjYWxpbmcgYW5kIG90aGVyIG9wZXJhdGlvbnMuCisgICAgICAg
IAorICAgICAgICBJbnN0ZWFkLCBkbyB0aGUgZm9sbG93aW5nOgorICAgICAgICAoMSkgQWRkIGEg
bmV3IEhhc2hNYXAgdG8gRG9jdW1lbnQgdGhhdCBtYXBzIHNjcm9sbGluZyBjb250YWluZXJzIHRv
IHNldHMgb2YKKyAgICAgICAgICAgIGVsZW1lbnRzLgorICAgICAgICAoMikgRHVyaW5nIFJlbmRl
ckVsZW1lbnQ6OnN0eWxlV2lsbENoYW5nZSwgaWRlbnRpZnkgdGhlIGVuY2xvc2luZyBzY3JvbGxp
bmcgY29udGFpbmVyCisgICAgICAgICAgICBmb3IgZWxlbWVudHMgd2l0aCBzY3JvbGwtc25hcC1j
b29yZGluYXRlcyBhbmQgYWRkIHRoZSBlbGVtZW50IHRvIHRoZSBEb2N1bWVudCdzCisgICAgICAg
ICAgICBkYXRhIHN0b3JlIGZvciB0aGF0IHNjcm9sbGluZyBjb250YWluZXIuCisgICAgICAgICgz
KSBXaGVuIHBlcmZvcm1pbmcgJ2FwcGVuZENoaWxkU25hcE9mZnNldHMnLCByZWZlciB0byB0aGUg
SGFzaFNldCBvZiBlbGVtZW50cyByZWxldmFudAorICAgICAgICAgICAgdG8gdGhlIGN1cnJlbnQg
c2Nyb2xsaW5nIGNvbnRhaW5lciByYXRoZXIgdGhhbiB3YWxraW5nIHRoZSBET00gdG8gZmluZCB0
aGVtLgorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjphZGRFbGVtZW50VG9TY3JvbGxTbmFwQ29udGFpbmVyKTogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudDo6ZWxlbWVudHNGb3JTY3JvbGxTbmFwQ29udGFpbmVyKTogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVtb3ZlRWxlbWVudEZyb21TY3JvbGxT
bmFwQ29udGFpbmVyKTogQWRkZWQuCisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAg
ICogcGFnZS9zY3JvbGxpbmcvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmFwcGVuZENoaWxkU25hcE9mZnNldHMpOiBDaGVjayB0aGUgSGFzaFNldCBmb3IgdGhl
IGN1cnJlbnQgc2Nyb2xsaW5nIGNvbnRhaW5lcgorICAgICAgICB0byBmaW5kIHNjcm9sbC1zbmFw
LWNvb3JkaW5hdGVzLCByYXRoZXIgdGhhbiB3YWxraW5nIHRoZSBET00gdG8gZmluZCB0aGVtLgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmZpbmRFbmNsb3NpbmdTY3JvbGxhYmxlQ29udGFpbmVyKTogTmV3IGhlbHBlciBmdW5jdGlvbi4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6On5SZW5kZXJFbGVtZW50KTogUmVtb3Zl
IGVsZW1lbnRzIGZyb20gRG9jdW1lbnQgc2Nyb2xsIHNuYXAKKyAgICAgICAgY29udGFpbmVyLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6c3R5bGVXaWxsQ2hhbmdlKTogSWYgdGhl
IGN1cnJlbnQgZWxlbWVudCBoYXMgc2Nyb2xsLXNuYXAtY29vcmRpbmF0ZQorICAgICAgICBkZWZp
bmVkLCBsb2NhdGUgdGhlIHJlbGV2YW50IHNjcm9sbGluZyBjb250YWluZXIgZm9yIGl0IGFuZCB0
aGVuIGFkZCB0aGUgZWxlbWVudCB0byB0aGUKKyAgICAgICAgc2V0IG9mICdzY3JvbGwtc25hcC1j
b29yZGluYXRlcycgYXNzb2NpYXRlZCB3aXRoIHRoYXQgY29udGFpbmVyLgorCiAyMDE1LTA2LTEy
ICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAgQVg6QVJJ
QSBUb2dnbGUgYnV0dG9ucyBhcmVuJ3QgcHJvcGVybHkgY29udmV5ZWQgb24gaU9TIHVzaW5nIFZv
aWNlT3ZlcgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxODU1MTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NjYx
LDQgKzY2NjEsMzYgQEAgU2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSBEb2N1bWVudDo6cwog
ICAgIHJldHVybiBTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91bGROb3RBbGxvdzsK
IH0KIAorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCit2b2lkIERvY3VtZW50OjphZGRFbGVt
ZW50VG9TY3JvbGxTbmFwQ29udGFpbmVyKEVsZW1lbnQqIHNjcm9sbFNuYXBFbGVtZW50LCBFbGVt
ZW50KiBzY3JvbGxTbmFwQ29udGFpbmVyKQoreworICAgIGF1dG8mIGNvbnRhaW5lckVsZW1lbnRz
ID0gbV9zY3JvbGxTbmFwRWxlbWVudHNGb3JDb250YWluZXJzLmFkZChzY3JvbGxTbmFwQ29udGFp
bmVyLCBIYXNoU2V0PEVsZW1lbnQqPigpKS5pdGVyYXRvci0+dmFsdWU7CisgICAgY29udGFpbmVy
RWxlbWVudHMuYWRkKHNjcm9sbFNuYXBFbGVtZW50KTsKK30KKworY29uc3QgSGFzaFNldDxFbGVt
ZW50Kj4qIERvY3VtZW50OjplbGVtZW50c0ZvclNjcm9sbFNuYXBDb250YWluZXIoRWxlbWVudCog
c2Nyb2xsU25hcENvbnRhaW5lcikKK3sKKyAgICBhdXRvIGNvbnRhaW5lckVsZW1lbnRzSXRlcmF0
b3IgPSBtX3Njcm9sbFNuYXBFbGVtZW50c0ZvckNvbnRhaW5lcnMuZmluZChzY3JvbGxTbmFwQ29u
dGFpbmVyKTsKKyAgICBpZiAoY29udGFpbmVyRWxlbWVudHNJdGVyYXRvciA9PSBtX3Njcm9sbFNu
YXBFbGVtZW50c0ZvckNvbnRhaW5lcnMuZW5kKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgcmV0dXJuICZjb250YWluZXJFbGVtZW50c0l0ZXJhdG9yLT52YWx1ZTsKK30KKwordm9p
ZCBEb2N1bWVudDo6cmVtb3ZlRWxlbWVudEZyb21TY3JvbGxTbmFwQ29udGFpbmVyKEVsZW1lbnQq
IHNjcm9sbFNuYXBFbGVtZW50LCBFbGVtZW50KiBzY3JvbGxTbmFwQ29udGFpbmVyKQoreworICAg
IGF1dG8gY29udGFpbmVyRWxlbWVudHNJdGVyYXRvciA9IG1fc2Nyb2xsU25hcEVsZW1lbnRzRm9y
Q29udGFpbmVycy5maW5kKHNjcm9sbFNuYXBDb250YWluZXIpOworICAgIGlmIChjb250YWluZXJF
bGVtZW50c0l0ZXJhdG9yID09IG1fc2Nyb2xsU25hcEVsZW1lbnRzRm9yQ29udGFpbmVycy5lbmQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGNvbnRhaW5lckVsZW1lbnRzSXRlcmF0b3It
PnZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29udGFpbmVyRWxlbWVu
dHNJdGVyYXRvci0+dmFsdWUucmVtb3ZlKHNjcm9sbFNuYXBFbGVtZW50KTsKKworICAgIGlmIChj
b250YWluZXJFbGVtZW50c0l0ZXJhdG9yLT52YWx1ZS5pc0VtcHR5KCkpCisgICAgICAgIG1fc2Ny
b2xsU25hcEVsZW1lbnRzRm9yQ29udGFpbmVycy5yZW1vdmUoc2Nyb2xsU25hcENvbnRhaW5lcik7
Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmgJKHJldmlzaW9uIDE4NTUxNikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogICogICAgICAgICAgIChDKSAxOTk5IEFu
dHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERp
cmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDA2IEFsZXhl
eSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDEyLCAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQog
ICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCkBAIC01NCw2ICs1NCw3IEBACiAjaW5jbHVkZSA8Y2hyb25vPgogI2luY2x1ZGUg
PG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
ICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgpAQCAtMTI1OCw2ICsxMjU5LDEyIEBAIHB1YmxpYzoK
IAogICAgIFNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kgc2hvdWxkT3BlbkV4dGVybmFsVVJM
c1BvbGljeVRvUHJvcGFnYXRlKCkgY29uc3Q7CiAKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQ
KQorICAgIHZvaWQgYWRkRWxlbWVudFRvU2Nyb2xsU25hcENvbnRhaW5lcihFbGVtZW50KiwgRWxl
bWVudCopOworICAgIHZvaWQgcmVtb3ZlRWxlbWVudEZyb21TY3JvbGxTbmFwQ29udGFpbmVyKEVs
ZW1lbnQqLCBFbGVtZW50Kik7CisgICAgY29uc3QgSGFzaFNldDxFbGVtZW50Kj4qIGVsZW1lbnRz
Rm9yU2Nyb2xsU25hcENvbnRhaW5lcihFbGVtZW50Kik7CisjZW5kaWYKKwogcHJvdGVjdGVkOgog
ICAgIGVudW0gQ29uc3RydWN0aW9uRmxhZ3MgeyBTeW50aGVzaXplZCA9IDEsIE5vblJlbmRlcmVk
UGxhY2Vob2xkZXIgPSAxIDw8IDEgfTsKICAgICBEb2N1bWVudChGcmFtZSosIGNvbnN0IFVSTCYs
IHVuc2lnbmVkID0gRGVmYXVsdERvY3VtZW50Q2xhc3MsIHVuc2lnbmVkIGNvbnN0cnVjdGlvbkZs
YWdzID0gMCk7CkBAIC0xNzA2LDYgKzE3MTMsMTAgQEAgcHJpdmF0ZToKICAgICB0eXBlZGVmIEhh
c2hNYXA8V2ViQ29yZTo6TWVkaWFQbGF5YmFja1RhcmdldENsaWVudCosIHVpbnQ2NF90PiBUYXJn
ZXRDbGllbnRUb0lkTWFwOwogICAgIFRhcmdldENsaWVudFRvSWRNYXAgbV9jbGllbnRUb0lETWFw
OwogI2VuZGlmCisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIEhhc2hNYXA8RWxl
bWVudCosIEhhc2hTZXQ8RWxlbWVudCo+PiBtX3Njcm9sbFNuYXBFbGVtZW50c0ZvckNvbnRhaW5l
cnM7CisjZW5kaWYKIH07CiAKIGlubGluZSB2b2lkIERvY3VtZW50Ojpub3RpZnlSZW1vdmVQZW5k
aW5nU2hlZXRJZk5lZWRlZCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9B
eGlzU2Nyb2xsU25hcE9mZnNldHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5jcHAJKHJldmlzaW9uIDE4NTUxNikK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDI4ICs0MCwzNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIHN0YXRpYyB2b2lkIGFwcGVuZENoaWxkU25hcE9mZnNldHMoSFRNTEVsZW1lbnQmIHBhcmVu
dCwgYm9vbCBzaG91bGRBZGRIb3Jpem9udGFsQ2hpbGRPZmZzZXRzLCBWZWN0b3I8TGF5b3V0VW5p
dD4mIGhvcml6b250YWxTbmFwT2Zmc2V0U3Vic2VxdWVuY2UsIGJvb2wgc2hvdWxkQWRkVmVydGlj
YWxDaGlsZE9mZnNldHMsIFZlY3RvcjxMYXlvdXRVbml0PiYgdmVydGljYWxTbmFwT2Zmc2V0U3Vi
c2VxdWVuY2UpCiB7Ci0gICAgLy8gRklYTUU6IEluc3RlYWQgb2YgdHJhdmVyc2luZyBhbGwgY2hp
bGRyZW4sIHJlZ2lzdGVyIGNoaWxkcmVuIHdpdGggc25hcCBjb29yZGluYXRlcyBiZWZvcmUgYXBw
ZW5kaW5nIHRvIHNuYXBPZmZzZXRTdWJzZXF1ZW5jZS4KLSAgICBmb3IgKGF1dG8mIGNoaWxkIDog
Y2hpbGRyZW5PZlR5cGU8RWxlbWVudD4ocGFyZW50KSkgewotICAgICAgICBpZiAoUmVuZGVyQm94
KiBib3ggPSBjaGlsZC5yZW5kZXJCb3goKSkgewotICAgICAgICAgICAgY29uc3QgYXV0byYgc2Ny
b2xsU25hcENvb3JkaW5hdGVzID0gYm94LT5zdHlsZSgpLnNjcm9sbFNuYXBDb29yZGluYXRlcygp
OwotICAgICAgICAgICAgaWYgKHNjcm9sbFNuYXBDb29yZGluYXRlcy5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgQVNTRVJUKHBhcmVudC5yZW5kZXJlcigpKTsKKyAg
ICBEb2N1bWVudCYgZG9jdW1lbnQgPSBwYXJlbnQucmVuZGVyZXIoKS0+ZG9jdW1lbnQoKTsKKwor
ICAgIGF1dG8qIGVsZW1lbnRzID0gZG9jdW1lbnQuZWxlbWVudHNGb3JTY3JvbGxTbmFwQ29udGFp
bmVyKCZwYXJlbnQpOworICAgIGlmICghZWxlbWVudHMpCisgICAgICAgIHJldHVybjsKIAotICAg
ICAgICAgICAgTGF5b3V0UmVjdCB2aWV3U2l6ZSA9IGJveC0+Y29udGVudEJveFJlY3QoKTsKLSAg
ICAgICAgICAgIExheW91dFVuaXQgdmlld1dpZHRoID0gdmlld1NpemUud2lkdGgoKTsKLSAgICAg
ICAgICAgIExheW91dFVuaXQgdmlld0hlaWdodCA9IHZpZXdTaXplLmhlaWdodCgpOwotICAgICAg
ICAgICAgRmxvYXRQb2ludCBwb3NpdGlvbiA9IGJveC0+bG9jYWxUb0NvbnRhaW5lclBvaW50KEZs
b2F0UG9pbnQoKSwgcGFyZW50LnJlbmRlckJveCgpKTsKLSAgICAgICAgICAgIExheW91dFVuaXQg
bGVmdCA9IHBvc2l0aW9uLngoKTsKLSAgICAgICAgICAgIExheW91dFVuaXQgdG9wID0gcG9zaXRp
b24ueSgpOwotICAgICAgICAgICAgZm9yIChhdXRvJiBjb29yZGluYXRlIDogc2Nyb2xsU25hcENv
b3JkaW5hdGVzKSB7Ci0gICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBsYXN0UG90ZW50aWFsU25h
cFBvc2l0aW9uWCA9IGxlZnQgKyB2YWx1ZUZvckxlbmd0aChjb29yZGluYXRlLndpZHRoKCksIHZp
ZXdXaWR0aCk7Ci0gICAgICAgICAgICAgICAgaWYgKHNob3VsZEFkZEhvcml6b250YWxDaGlsZE9m
ZnNldHMgJiYgbGFzdFBvdGVudGlhbFNuYXBQb3NpdGlvblggPiAwKQotICAgICAgICAgICAgICAg
ICAgICBob3Jpem9udGFsU25hcE9mZnNldFN1YnNlcXVlbmNlLmFwcGVuZChsYXN0UG90ZW50aWFs
U25hcFBvc2l0aW9uWCk7Ci0KLSAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGxhc3RQb3RlbnRp
YWxTbmFwUG9zaXRpb25ZID0gdG9wICsgdmFsdWVGb3JMZW5ndGgoY29vcmRpbmF0ZS5oZWlnaHQo
KSwgdmlld0hlaWdodCk7Ci0gICAgICAgICAgICAgICAgaWYgKHNob3VsZEFkZFZlcnRpY2FsQ2hp
bGRPZmZzZXRzICYmIGxhc3RQb3RlbnRpYWxTbmFwUG9zaXRpb25ZID4gMCkKLSAgICAgICAgICAg
ICAgICAgICAgdmVydGljYWxTbmFwT2Zmc2V0U3Vic2VxdWVuY2UuYXBwZW5kKGxhc3RQb3RlbnRp
YWxTbmFwUG9zaXRpb25ZKTsKLSAgICAgICAgICAgIH0KKyAgICBmb3IgKGF1dG8mIGNoaWxkIDog
KmVsZW1lbnRzKSB7CisgICAgICAgIEFTU0VSVChjaGlsZCk7CisgICAgICAgIFJlbmRlckJveCog
Ym94ID0gY2hpbGQtPnJlbmRlckJveCgpOworICAgICAgICBpZiAoIWJveCkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgIGNvbnN0IGF1dG8mIHNjcm9sbFNuYXBDb29yZGluYXRlcyA9
IGJveC0+c3R5bGUoKS5zY3JvbGxTbmFwQ29vcmRpbmF0ZXMoKTsKKyAgICAgICAgaWYgKHNjcm9s
bFNuYXBDb29yZGluYXRlcy5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgCisgICAgICAgIExheW91dFJlY3Qgdmlld1NpemUgPSBib3gtPmNvbnRlbnRCb3hSZWN0KCk7
CisgICAgICAgIExheW91dFVuaXQgdmlld1dpZHRoID0gdmlld1NpemUud2lkdGgoKTsKKyAgICAg
ICAgTGF5b3V0VW5pdCB2aWV3SGVpZ2h0ID0gdmlld1NpemUuaGVpZ2h0KCk7CisgICAgICAgIEZs
b2F0UG9pbnQgcG9zaXRpb24gPSBib3gtPmxvY2FsVG9Db250YWluZXJQb2ludChGbG9hdFBvaW50
KCksIHBhcmVudC5yZW5kZXJCb3goKSk7CisgICAgICAgIExheW91dFVuaXQgbGVmdCA9IHBvc2l0
aW9uLngoKTsKKyAgICAgICAgTGF5b3V0VW5pdCB0b3AgPSBwb3NpdGlvbi55KCk7CisgICAgICAg
IGZvciAoYXV0byYgY29vcmRpbmF0ZSA6IHNjcm9sbFNuYXBDb29yZGluYXRlcykgeworICAgICAg
ICAgICAgTGF5b3V0VW5pdCBsYXN0UG90ZW50aWFsU25hcFBvc2l0aW9uWCA9IGxlZnQgKyB2YWx1
ZUZvckxlbmd0aChjb29yZGluYXRlLndpZHRoKCksIHZpZXdXaWR0aCk7CisgICAgICAgICAgICBp
ZiAoc2hvdWxkQWRkSG9yaXpvbnRhbENoaWxkT2Zmc2V0cyAmJiBsYXN0UG90ZW50aWFsU25hcFBv
c2l0aW9uWCA+IDApCisgICAgICAgICAgICAgICAgaG9yaXpvbnRhbFNuYXBPZmZzZXRTdWJzZXF1
ZW5jZS5hcHBlbmQobGFzdFBvdGVudGlhbFNuYXBQb3NpdGlvblgpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBMYXlvdXRVbml0IGxhc3RQb3RlbnRpYWxTbmFwUG9zaXRpb25ZID0gdG9wICsg
dmFsdWVGb3JMZW5ndGgoY29vcmRpbmF0ZS5oZWlnaHQoKSwgdmlld0hlaWdodCk7CisgICAgICAg
ICAgICBpZiAoc2hvdWxkQWRkVmVydGljYWxDaGlsZE9mZnNldHMgJiYgbGFzdFBvdGVudGlhbFNu
YXBQb3NpdGlvblkgPiAwKQorICAgICAgICAgICAgICAgIHZlcnRpY2FsU25hcE9mZnNldFN1YnNl
cXVlbmNlLmFwcGVuZChsYXN0UG90ZW50aWFsU25hcFBvc2l0aW9uWSk7CiAgICAgICAgIH0KICAg
ICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAxODU1MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw2ICsxMTIsMTkgQEAgUmVuZGVyRWxlbWVu
dDo6UmVuZGVyRWxlbWVudChEb2N1bWVudCYgZAogewogfQogCitzdGF0aWMgRWxlbWVudCogZmlu
ZEVuY2xvc2luZ1Njcm9sbGFibGVDb250YWluZXIoRWxlbWVudCogbm9kZSkKK3sKKyAgICAvLyBG
aW5kIHRoZSBmaXJzdCBub2RlIHdpdGggYSB2YWxpZCBzY3JvbGxhYmxlIGFyZWEgc3RhcnRpbmcg
d2l0aCB0aGUgY3VycmVudAorICAgIC8vIG5vZGUgYW5kIHRyYXZlcnNpbmcgaXRzIHBhcmVudHMg
KG9yIHNoYWRvdyBob3N0cykuCisgICAgZm9yIChFbGVtZW50KiBjYW5kaWRhdGUgPSBub2RlOyBj
YW5kaWRhdGU7IGNhbmRpZGF0ZSA9IGNhbmRpZGF0ZS0+cGFyZW50RWxlbWVudCgpKSB7CisgICAg
ICAgIFJlbmRlckJveCogYm94ID0gY2FuZGlkYXRlLT5yZW5kZXJCb3goKTsKKyAgICAgICAgaWYg
KGJveCAmJiBib3gtPmxheWVyKCkpCisgICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlOworICAg
IH0KKyAgICAKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogUmVuZGVyRWxlbWVudDo6flJlbmRl
ckVsZW1lbnQoKQogewogICAgIGlmIChoYXNJbml0aWFsaXplZFN0eWxlKCkpIHsKQEAgLTEzOSw3
ICsxNTIsMTggQEAgUmVuZGVyRWxlbWVudDo6flJlbmRlckVsZW1lbnQoKQogICAgICAgICAgICAg
ICAgIHNoYXBlSW1hZ2UtPnJlbW92ZUNsaWVudCh0aGlzKTsKICAgICAgICAgfQogI2VuZGlmCisK
KyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgICAgICBpZiAoIW1fc3R5bGUtPnNjcm9s
bFNuYXBDb29yZGluYXRlcygpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgRWxlbWVudCogc2Ny
b2xsU25hcEVsZW1lbnQgPSBlbGVtZW50KCk7CisgICAgICAgICAgICBFbGVtZW50KiBzY3JvbGxT
bmFwQ29udGFpbmVyID0gZmluZEVuY2xvc2luZ1Njcm9sbGFibGVDb250YWluZXIoc2Nyb2xsU25h
cEVsZW1lbnQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoc2Nyb2xsU25hcEVsZW1l
bnQgJiYgc2Nyb2xsU25hcENvbnRhaW5lcikKKyAgICAgICAgICAgICAgICBkb2N1bWVudCgpLnJl
bW92ZUVsZW1lbnRGcm9tU2Nyb2xsU25hcENvbnRhaW5lcihzY3JvbGxTbmFwRWxlbWVudCwgc2Ny
b2xsU25hcENvbnRhaW5lcik7CisgICAgICAgIH0KKyNlbmRpZgogICAgIH0KKwogICAgIGlmICht
X2hhc1BhdXNlZEltYWdlQW5pbWF0aW9ucykKICAgICAgICAgdmlldygpLnJlbW92ZVJlbmRlcmVy
V2l0aFBhdXNlZEltYWdlQW5pbWF0aW9ucygqdGhpcyk7CiB9CkBAIC05MDQsNiArOTI4LDIwIEBA
IHZvaWQgUmVuZGVyRWxlbWVudDo6c3R5bGVXaWxsQ2hhbmdlKFN0eWwKICAgICAgICAgfQogICAg
IH0KIAorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgaWYgKCFuZXdTdHlsZS5zY3Jv
bGxTbmFwQ29vcmRpbmF0ZXMoKS5pc0VtcHR5KCkgfHwgKG9sZFN0eWxlICYmICFvbGRTdHlsZS0+
c2Nyb2xsU25hcENvb3JkaW5hdGVzKCkuaXNFbXB0eSgpKSkgeworICAgICAgICBFbGVtZW50KiBz
Y3JvbGxTbmFwRWxlbWVudCA9IGVsZW1lbnQoKTsKKyAgICAgICAgRWxlbWVudCogc2Nyb2xsU25h
cENvbnRhaW5lciA9IGZpbmRFbmNsb3NpbmdTY3JvbGxhYmxlQ29udGFpbmVyKHNjcm9sbFNuYXBF
bGVtZW50KTsKKyAgICAgICAgCisgICAgICAgIGlmIChzY3JvbGxTbmFwRWxlbWVudCAmJiBzY3Jv
bGxTbmFwQ29udGFpbmVyKSB7CisgICAgICAgICAgICBpZiAobmV3U3R5bGUuc2Nyb2xsU25hcENv
b3JkaW5hdGVzKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGRvY3VtZW50KCkucmVtb3Zl
RWxlbWVudEZyb21TY3JvbGxTbmFwQ29udGFpbmVyKHNjcm9sbFNuYXBFbGVtZW50LCBzY3JvbGxT
bmFwQ29udGFpbmVyKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBkb2N1bWVu
dCgpLmFkZEVsZW1lbnRUb1Njcm9sbFNuYXBDb250YWluZXIoc2Nyb2xsU25hcEVsZW1lbnQsIHNj
cm9sbFNuYXBDb250YWluZXIpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKICAgICBpZiAo
aXNSb290KCkgfHwgaXNCb2R5KCkpCiAgICAgICAgIHZpZXcoKS5mcmFtZVZpZXcoKS51cGRhdGVF
eHRlbmRCYWNrZ3JvdW5kSWZOZWNlc3NhcnkoKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254863</attachid>
            <date>2015-06-14 13:33:40 -0700</date>
            <delta_ts>2015-06-15 14:10:41 -0700</delta_ts>
            <desc>Patch v2 (Includes Test)</desc>
            <filename>bug-145843-20150614133314.patch</filename>
            <type>text/plain</type>
            <size>17341</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NTU0MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBACisyMDE1LTA2LTEzICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIENTUyBTY3JvbGwgU25hcCAt
IHN1cHBvcnQgc25hcHBpbmcgdG8gbmVzdGVkIGVsZW1lbnRzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDU4NDMKKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzIxMzM5NTgxPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRlc3RlZCBieSBjc3MzL3Njcm9sbC1zbmFwL25lc3RlZC1lbGVtZW50cy5odG1sCisK
KyAgICAgICAgVGhlIFNjcm9sbCBTbmFwIFBvaW50IGltcGxlbWVudGF0aW9uIHdhcyBub3QgcHJv
cGVybHkgaGFuZGxpbmcgbmVzdGVkIGVsZW1lbnRzLgorICAgICAgICBUaGlzIGNvdWxkIGJlIHJl
c29sdmVkIGJ5IHJlY3Vyc2l2ZWx5IGNhbGxpbmcgJ2FwcGVuZENoaWxkU25hcE9mZnNldHMnLCBi
dXQgdGhpcworICAgICAgICBzZWVtZWQgbGlrZSBhbiBpbmVmZmljaWVudCBhcHByb2FjaCwgZXNw
ZWNpYWxseSBjb25zaWRlcmluZyBob3cgb2Z0ZW4gdGhpcyBtZXRob2QKKyAgICAgICAgaXMgY2Fs
bGVkIGR1cmluZyB2YXJpb3VzIHNjYWxpbmcgYW5kIG90aGVyIG9wZXJhdGlvbnMuCisgICAgICAg
IAorICAgICAgICBJbnN0ZWFkLCBkbyB0aGUgZm9sbG93aW5nOgorICAgICAgICAoMSkgQWRkIGEg
bmV3IEhhc2hNYXAgdG8gRG9jdW1lbnQgdGhhdCBtYXBzIHNjcm9sbGluZyBjb250YWluZXJzIHRv
IHNldHMgb2YKKyAgICAgICAgICAgIGVsZW1lbnRzLgorICAgICAgICAoMikgRHVyaW5nIFJlbmRl
ckVsZW1lbnQ6OnN0eWxlV2lsbENoYW5nZSwgaWRlbnRpZnkgdGhlIGVuY2xvc2luZyBzY3JvbGxp
bmcgY29udGFpbmVyCisgICAgICAgICAgICBmb3IgZWxlbWVudHMgd2l0aCBzY3JvbGwtc25hcC1j
b29yZGluYXRlcyBhbmQgYWRkIHRoZSBlbGVtZW50IHRvIHRoZSBEb2N1bWVudCdzCisgICAgICAg
ICAgICBkYXRhIHN0b3JlIGZvciB0aGF0IHNjcm9sbGluZyBjb250YWluZXIuCisgICAgICAgICgz
KSBXaGVuIHBlcmZvcm1pbmcgJ2FwcGVuZENoaWxkU25hcE9mZnNldHMnLCByZWZlciB0byB0aGUg
SGFzaFNldCBvZiBlbGVtZW50cyByZWxldmFudAorICAgICAgICAgICAgdG8gdGhlIGN1cnJlbnQg
c2Nyb2xsaW5nIGNvbnRhaW5lciByYXRoZXIgdGhhbiB3YWxraW5nIHRoZSBET00gdG8gZmluZCB0
aGVtLgorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjphZGRFbGVtZW50VG9TY3JvbGxTbmFwQ29udGFpbmVyKTogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudDo6ZWxlbWVudHNGb3JTY3JvbGxTbmFwQ29udGFpbmVyKTogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVtb3ZlRWxlbWVudEZyb21TY3JvbGxT
bmFwQ29udGFpbmVyKTogQWRkZWQuCisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAg
ICogcGFnZS9zY3JvbGxpbmcvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmFwcGVuZENoaWxkU25hcE9mZnNldHMpOiBDaGVjayB0aGUgSGFzaFNldCBmb3IgdGhl
IGN1cnJlbnQgc2Nyb2xsaW5nIGNvbnRhaW5lcgorICAgICAgICB0byBmaW5kIHNjcm9sbC1zbmFw
LWNvb3JkaW5hdGVzLCByYXRoZXIgdGhhbiB3YWxraW5nIHRoZSBET00gdG8gZmluZCB0aGVtLgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmZpbmRFbmNsb3NpbmdTY3JvbGxhYmxlQ29udGFpbmVyKTogTmV3IGhlbHBlciBmdW5jdGlvbi4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6On5SZW5kZXJFbGVtZW50KTogUmVtb3Zl
IGVsZW1lbnRzIGZyb20gRG9jdW1lbnQgc2Nyb2xsIHNuYXAKKyAgICAgICAgY29udGFpbmVyLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6c3R5bGVXaWxsQ2hhbmdlKTogSWYgdGhl
IGN1cnJlbnQgZWxlbWVudCBoYXMgc2Nyb2xsLXNuYXAtY29vcmRpbmF0ZQorICAgICAgICBkZWZp
bmVkLCBsb2NhdGUgdGhlIHJlbGV2YW50IHNjcm9sbGluZyBjb250YWluZXIgZm9yIGl0IGFuZCB0
aGVuIGFkZCB0aGUgZWxlbWVudCB0byB0aGUKKyAgICAgICAgc2V0IG9mICdzY3JvbGwtc25hcC1j
b29yZGluYXRlcycgYXNzb2NpYXRlZCB3aXRoIHRoYXQgY29udGFpbmVyLgorCiAyMDE1LTA2LTEz
ICBYYWJpZXIgUm9kcmlndWV6IENhbHZhciAgPGNhbHZhcmlzQGlnYWxpYS5jb20+IGFuZCBZb3Vl
bm4gRmFibGV0IDx5b3Vlbm4uZmFibGV0QGNyZi5jYW5vbi5mcj4KIAogICAgICAgICBbU3RyZWFt
cyBBUEldIFJlYWRhYmxlSlNTdHJlYW0gc2hvdWxkIGhhbmRsZSBwcm9taXNlcyByZXR1cm5lZCBi
eSBKUyBzb3VyY2Ugc3RhcnQgY2FsbGJhY2sKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAko
cmV2aXNpb24gMTg1NTQxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjY2MSw0ICs2NjYxLDM2IEBAIFNob3VsZE9wZW5FeHRlcm5hbFVSTHNQ
b2xpY3kgRG9jdW1lbnQ6OnMKICAgICByZXR1cm4gU2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGlj
eTo6U2hvdWxkTm90QWxsb3c7CiB9CiAKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQordm9p
ZCBEb2N1bWVudDo6YWRkRWxlbWVudFRvU2Nyb2xsU25hcENvbnRhaW5lcihFbGVtZW50KiBzY3Jv
bGxTbmFwRWxlbWVudCwgRWxlbWVudCogc2Nyb2xsU25hcENvbnRhaW5lcikKK3sKKyAgICBhdXRv
JiBjb250YWluZXJFbGVtZW50cyA9IG1fc2Nyb2xsU25hcEVsZW1lbnRzRm9yQ29udGFpbmVycy5h
ZGQoc2Nyb2xsU25hcENvbnRhaW5lciwgSGFzaFNldDxFbGVtZW50Kj4oKSkuaXRlcmF0b3ItPnZh
bHVlOworICAgIGNvbnRhaW5lckVsZW1lbnRzLmFkZChzY3JvbGxTbmFwRWxlbWVudCk7Cit9CisK
K2NvbnN0IEhhc2hTZXQ8RWxlbWVudCo+KiBEb2N1bWVudDo6ZWxlbWVudHNGb3JTY3JvbGxTbmFw
Q29udGFpbmVyKEVsZW1lbnQqIHNjcm9sbFNuYXBDb250YWluZXIpCit7CisgICAgYXV0byBjb250
YWluZXJFbGVtZW50c0l0ZXJhdG9yID0gbV9zY3JvbGxTbmFwRWxlbWVudHNGb3JDb250YWluZXJz
LmZpbmQoc2Nyb2xsU25hcENvbnRhaW5lcik7CisgICAgaWYgKGNvbnRhaW5lckVsZW1lbnRzSXRl
cmF0b3IgPT0gbV9zY3JvbGxTbmFwRWxlbWVudHNGb3JDb250YWluZXJzLmVuZCgpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiAmY29udGFpbmVyRWxlbWVudHNJdGVyYXRv
ci0+dmFsdWU7Cit9CisKK3ZvaWQgRG9jdW1lbnQ6OnJlbW92ZUVsZW1lbnRGcm9tU2Nyb2xsU25h
cENvbnRhaW5lcihFbGVtZW50KiBzY3JvbGxTbmFwRWxlbWVudCwgRWxlbWVudCogc2Nyb2xsU25h
cENvbnRhaW5lcikKK3sKKyAgICBhdXRvIGNvbnRhaW5lckVsZW1lbnRzSXRlcmF0b3IgPSBtX3Nj
cm9sbFNuYXBFbGVtZW50c0ZvckNvbnRhaW5lcnMuZmluZChzY3JvbGxTbmFwQ29udGFpbmVyKTsK
KyAgICBpZiAoY29udGFpbmVyRWxlbWVudHNJdGVyYXRvciA9PSBtX3Njcm9sbFNuYXBFbGVtZW50
c0ZvckNvbnRhaW5lcnMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChjb250YWlu
ZXJFbGVtZW50c0l0ZXJhdG9yLT52YWx1ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGNvbnRhaW5lckVsZW1lbnRzSXRlcmF0b3ItPnZhbHVlLnJlbW92ZShzY3JvbGxTbmFwRWxl
bWVudCk7CisKKyAgICBpZiAoY29udGFpbmVyRWxlbWVudHNJdGVyYXRvci0+dmFsdWUuaXNFbXB0
eSgpKQorICAgICAgICBtX3Njcm9sbFNuYXBFbGVtZW50c0ZvckNvbnRhaW5lcnMucmVtb3ZlKHNj
cm9sbFNuYXBDb250YWluZXIpOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAxODU1NDEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICAqICAg
ICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAg
ICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAqICAgICAg
ICAgICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3ZWJraXQub3JnKQotICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDEy
LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMiwgMjAxMywgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cu
dG9yY2htb2JpbGUuY29tLykKICAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtNTQsNiArNTQsNyBAQAogI2luY2x1ZGUg
PGNocm9ubz4KICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KQEAgLTEyNTgsNiAr
MTI1OSwxMiBAQCBwdWJsaWM6CiAKICAgICBTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5IHNo
b3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3lUb1Byb3BhZ2F0ZSgpIGNvbnN0OwogCisjaWYgRU5B
QkxFKENTU19TQ1JPTExfU05BUCkKKyAgICB2b2lkIGFkZEVsZW1lbnRUb1Njcm9sbFNuYXBDb250
YWluZXIoRWxlbWVudCosIEVsZW1lbnQqKTsKKyAgICB2b2lkIHJlbW92ZUVsZW1lbnRGcm9tU2Ny
b2xsU25hcENvbnRhaW5lcihFbGVtZW50KiwgRWxlbWVudCopOworICAgIGNvbnN0IEhhc2hTZXQ8
RWxlbWVudCo+KiBlbGVtZW50c0ZvclNjcm9sbFNuYXBDb250YWluZXIoRWxlbWVudCopOworI2Vu
ZGlmCisKIHByb3RlY3RlZDoKICAgICBlbnVtIENvbnN0cnVjdGlvbkZsYWdzIHsgU3ludGhlc2l6
ZWQgPSAxLCBOb25SZW5kZXJlZFBsYWNlaG9sZGVyID0gMSA8PCAxIH07CiAgICAgRG9jdW1lbnQo
RnJhbWUqLCBjb25zdCBVUkwmLCB1bnNpZ25lZCA9IERlZmF1bHREb2N1bWVudENsYXNzLCB1bnNp
Z25lZCBjb25zdHJ1Y3Rpb25GbGFncyA9IDApOwpAQCAtMTcwNiw2ICsxNzEzLDEwIEBAIHByaXZh
dGU6CiAgICAgdHlwZWRlZiBIYXNoTWFwPFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRDbGll
bnQqLCB1aW50NjRfdD4gVGFyZ2V0Q2xpZW50VG9JZE1hcDsKICAgICBUYXJnZXRDbGllbnRUb0lk
TWFwIG1fY2xpZW50VG9JRE1hcDsKICNlbmRpZgorCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05B
UCkKKyAgICBIYXNoTWFwPEVsZW1lbnQqLCBIYXNoU2V0PEVsZW1lbnQqPj4gbV9zY3JvbGxTbmFw
RWxlbWVudHNGb3JDb250YWluZXJzOworI2VuZGlmCiB9OwogCiBpbmxpbmUgdm9pZCBEb2N1bWVu
dDo6bm90aWZ5UmVtb3ZlUGVuZGluZ1NoZWV0SWZOZWVkZWQoKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9BeGlzU2Nyb2xsU25hcE9mZnNldHMuY3Bw
CShyZXZpc2lvbiAxODU1NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9BeGlz
U2Nyb2xsU25hcE9mZnNldHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwyOCArNDAsMzcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgdm9pZCBhcHBlbmRDaGlsZFNuYXBPZmZzZXRz
KEhUTUxFbGVtZW50JiBwYXJlbnQsIGJvb2wgc2hvdWxkQWRkSG9yaXpvbnRhbENoaWxkT2Zmc2V0
cywgVmVjdG9yPExheW91dFVuaXQ+JiBob3Jpem9udGFsU25hcE9mZnNldFN1YnNlcXVlbmNlLCBi
b29sIHNob3VsZEFkZFZlcnRpY2FsQ2hpbGRPZmZzZXRzLCBWZWN0b3I8TGF5b3V0VW5pdD4mIHZl
cnRpY2FsU25hcE9mZnNldFN1YnNlcXVlbmNlKQogewotICAgIC8vIEZJWE1FOiBJbnN0ZWFkIG9m
IHRyYXZlcnNpbmcgYWxsIGNoaWxkcmVuLCByZWdpc3RlciBjaGlsZHJlbiB3aXRoIHNuYXAgY29v
cmRpbmF0ZXMgYmVmb3JlIGFwcGVuZGluZyB0byBzbmFwT2Zmc2V0U3Vic2VxdWVuY2UuCi0gICAg
Zm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPEVsZW1lbnQ+KHBhcmVudCkpIHsKLSAg
ICAgICAgaWYgKFJlbmRlckJveCogYm94ID0gY2hpbGQucmVuZGVyQm94KCkpIHsKLSAgICAgICAg
ICAgIGNvbnN0IGF1dG8mIHNjcm9sbFNuYXBDb29yZGluYXRlcyA9IGJveC0+c3R5bGUoKS5zY3Jv
bGxTbmFwQ29vcmRpbmF0ZXMoKTsKLSAgICAgICAgICAgIGlmIChzY3JvbGxTbmFwQ29vcmRpbmF0
ZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgIEFTU0VSVChwYXJl
bnQucmVuZGVyZXIoKSk7CisgICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gcGFyZW50LnJlbmRlcmVy
KCktPmRvY3VtZW50KCk7CisKKyAgICBhdXRvKiBlbGVtZW50cyA9IGRvY3VtZW50LmVsZW1lbnRz
Rm9yU2Nyb2xsU25hcENvbnRhaW5lcigmcGFyZW50KTsKKyAgICBpZiAoIWVsZW1lbnRzKQorICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIExheW91dFJlY3Qgdmlld1NpemUgPSBib3gtPmNv
bnRlbnRCb3hSZWN0KCk7Ci0gICAgICAgICAgICBMYXlvdXRVbml0IHZpZXdXaWR0aCA9IHZpZXdT
aXplLndpZHRoKCk7Ci0gICAgICAgICAgICBMYXlvdXRVbml0IHZpZXdIZWlnaHQgPSB2aWV3U2l6
ZS5oZWlnaHQoKTsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgcG9zaXRpb24gPSBib3gtPmxvY2Fs
VG9Db250YWluZXJQb2ludChGbG9hdFBvaW50KCksIHBhcmVudC5yZW5kZXJCb3goKSk7Ci0gICAg
ICAgICAgICBMYXlvdXRVbml0IGxlZnQgPSBwb3NpdGlvbi54KCk7Ci0gICAgICAgICAgICBMYXlv
dXRVbml0IHRvcCA9IHBvc2l0aW9uLnkoKTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgY29vcmRp
bmF0ZSA6IHNjcm9sbFNuYXBDb29yZGluYXRlcykgewotICAgICAgICAgICAgICAgIExheW91dFVu
aXQgbGFzdFBvdGVudGlhbFNuYXBQb3NpdGlvblggPSBsZWZ0ICsgdmFsdWVGb3JMZW5ndGgoY29v
cmRpbmF0ZS53aWR0aCgpLCB2aWV3V2lkdGgpOwotICAgICAgICAgICAgICAgIGlmIChzaG91bGRB
ZGRIb3Jpem9udGFsQ2hpbGRPZmZzZXRzICYmIGxhc3RQb3RlbnRpYWxTbmFwUG9zaXRpb25YID4g
MCkKLSAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbFNuYXBPZmZzZXRTdWJzZXF1ZW5jZS5h
cHBlbmQobGFzdFBvdGVudGlhbFNuYXBQb3NpdGlvblgpOwotCi0gICAgICAgICAgICAgICAgTGF5
b3V0VW5pdCBsYXN0UG90ZW50aWFsU25hcFBvc2l0aW9uWSA9IHRvcCArIHZhbHVlRm9yTGVuZ3Ro
KGNvb3JkaW5hdGUuaGVpZ2h0KCksIHZpZXdIZWlnaHQpOwotICAgICAgICAgICAgICAgIGlmIChz
aG91bGRBZGRWZXJ0aWNhbENoaWxkT2Zmc2V0cyAmJiBsYXN0UG90ZW50aWFsU25hcFBvc2l0aW9u
WSA+IDApCi0gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsU25hcE9mZnNldFN1YnNlcXVlbmNl
LmFwcGVuZChsYXN0UG90ZW50aWFsU25hcFBvc2l0aW9uWSk7Ci0gICAgICAgICAgICB9CisgICAg
Zm9yIChhdXRvJiBjaGlsZCA6ICplbGVtZW50cykgeworICAgICAgICBBU1NFUlQoY2hpbGQpOwor
ICAgICAgICBSZW5kZXJCb3gqIGJveCA9IGNoaWxkLT5yZW5kZXJCb3goKTsKKyAgICAgICAgaWYg
KCFib3gpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBjb25zdCBhdXRvJiBzY3Jv
bGxTbmFwQ29vcmRpbmF0ZXMgPSBib3gtPnN0eWxlKCkuc2Nyb2xsU25hcENvb3JkaW5hdGVzKCk7
CisgICAgICAgIGlmIChzY3JvbGxTbmFwQ29vcmRpbmF0ZXMuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBMYXlvdXRSZWN0IHZpZXdTaXplID0gYm94
LT5jb250ZW50Qm94UmVjdCgpOworICAgICAgICBMYXlvdXRVbml0IHZpZXdXaWR0aCA9IHZpZXdT
aXplLndpZHRoKCk7CisgICAgICAgIExheW91dFVuaXQgdmlld0hlaWdodCA9IHZpZXdTaXplLmhl
aWdodCgpOworICAgICAgICBGbG9hdFBvaW50IHBvc2l0aW9uID0gYm94LT5sb2NhbFRvQ29udGFp
bmVyUG9pbnQoRmxvYXRQb2ludCgpLCBwYXJlbnQucmVuZGVyQm94KCkpOworICAgICAgICBMYXlv
dXRVbml0IGxlZnQgPSBwb3NpdGlvbi54KCk7CisgICAgICAgIExheW91dFVuaXQgdG9wID0gcG9z
aXRpb24ueSgpOworICAgICAgICBmb3IgKGF1dG8mIGNvb3JkaW5hdGUgOiBzY3JvbGxTbmFwQ29v
cmRpbmF0ZXMpIHsKKyAgICAgICAgICAgIExheW91dFVuaXQgbGFzdFBvdGVudGlhbFNuYXBQb3Np
dGlvblggPSBsZWZ0ICsgdmFsdWVGb3JMZW5ndGgoY29vcmRpbmF0ZS53aWR0aCgpLCB2aWV3V2lk
dGgpOworICAgICAgICAgICAgaWYgKHNob3VsZEFkZEhvcml6b250YWxDaGlsZE9mZnNldHMgJiYg
bGFzdFBvdGVudGlhbFNuYXBQb3NpdGlvblggPiAwKQorICAgICAgICAgICAgICAgIGhvcml6b250
YWxTbmFwT2Zmc2V0U3Vic2VxdWVuY2UuYXBwZW5kKGxhc3RQb3RlbnRpYWxTbmFwUG9zaXRpb25Y
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTGF5b3V0VW5pdCBsYXN0UG90ZW50aWFsU25h
cFBvc2l0aW9uWSA9IHRvcCArIHZhbHVlRm9yTGVuZ3RoKGNvb3JkaW5hdGUuaGVpZ2h0KCksIHZp
ZXdIZWlnaHQpOworICAgICAgICAgICAgaWYgKHNob3VsZEFkZFZlcnRpY2FsQ2hpbGRPZmZzZXRz
ICYmIGxhc3RQb3RlbnRpYWxTbmFwUG9zaXRpb25ZID4gMCkKKyAgICAgICAgICAgICAgICB2ZXJ0
aWNhbFNuYXBPZmZzZXRTdWJzZXF1ZW5jZS5hcHBlbmQobGFzdFBvdGVudGlhbFNuYXBQb3NpdGlv
blkpOwogICAgICAgICB9CiAgICAgfQogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJFbGVtZW50LmNwcAkocmV2aXNpb24gMTg1NTQxKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNiArMTEy
LDIxIEBAIFJlbmRlckVsZW1lbnQ6OlJlbmRlckVsZW1lbnQoRG9jdW1lbnQmIGQKIHsKIH0KIAor
I2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCitzdGF0aWMgRWxlbWVudCogZmluZEVuY2xvc2lu
Z1Njcm9sbGFibGVDb250YWluZXIoRWxlbWVudCogbm9kZSkKK3sKKyAgICAvLyBGaW5kIHRoZSBm
aXJzdCBub2RlIHdpdGggYSB2YWxpZCBzY3JvbGxhYmxlIGFyZWEgc3RhcnRpbmcgd2l0aCB0aGUg
Y3VycmVudAorICAgIC8vIG5vZGUgYW5kIHRyYXZlcnNpbmcgaXRzIHBhcmVudHMgKG9yIHNoYWRv
dyBob3N0cykuCisgICAgZm9yIChFbGVtZW50KiBjYW5kaWRhdGUgPSBub2RlOyBjYW5kaWRhdGU7
IGNhbmRpZGF0ZSA9IGNhbmRpZGF0ZS0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgIFJlbmRl
ckJveCogYm94ID0gY2FuZGlkYXRlLT5yZW5kZXJCb3goKTsKKyAgICAgICAgaWYgKGJveCAmJiBi
b3gtPmxheWVyKCkpCisgICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlOworICAgIH0KKyAgICAK
KyAgICByZXR1cm4gbnVsbHB0cjsKK30KKyNlbmRpZgorCiBSZW5kZXJFbGVtZW50Ojp+UmVuZGVy
RWxlbWVudCgpCiB7CiAgICAgaWYgKGhhc0luaXRpYWxpemVkU3R5bGUoKSkgewpAQCAtMTM5LDcg
KzE1NCwxOCBAQCBSZW5kZXJFbGVtZW50Ojp+UmVuZGVyRWxlbWVudCgpCiAgICAgICAgICAgICAg
ICAgc2hhcGVJbWFnZS0+cmVtb3ZlQ2xpZW50KHRoaXMpOwogICAgICAgICB9CiAjZW5kaWYKKwor
I2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgICAgIGlmICghbV9zdHlsZS0+c2Nyb2xs
U25hcENvb3JkaW5hdGVzKCkuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBFbGVtZW50KiBzY3Jv
bGxTbmFwRWxlbWVudCA9IGVsZW1lbnQoKTsKKyAgICAgICAgICAgIEVsZW1lbnQqIHNjcm9sbFNu
YXBDb250YWluZXIgPSBmaW5kRW5jbG9zaW5nU2Nyb2xsYWJsZUNvbnRhaW5lcihzY3JvbGxTbmFw
RWxlbWVudCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChzY3JvbGxTbmFwRWxlbWVu
dCAmJiBzY3JvbGxTbmFwQ29udGFpbmVyKQorICAgICAgICAgICAgICAgIGRvY3VtZW50KCkucmVt
b3ZlRWxlbWVudEZyb21TY3JvbGxTbmFwQ29udGFpbmVyKHNjcm9sbFNuYXBFbGVtZW50LCBzY3Jv
bGxTbmFwQ29udGFpbmVyKTsKKyAgICAgICAgfQorI2VuZGlmCiAgICAgfQorCiAgICAgaWYgKG1f
aGFzUGF1c2VkSW1hZ2VBbmltYXRpb25zKQogICAgICAgICB2aWV3KCkucmVtb3ZlUmVuZGVyZXJX
aXRoUGF1c2VkSW1hZ2VBbmltYXRpb25zKCp0aGlzKTsKIH0KQEAgLTkwNCw2ICs5MzAsMjAgQEAg
dm9pZCBSZW5kZXJFbGVtZW50OjpzdHlsZVdpbGxDaGFuZ2UoU3R5bAogICAgICAgICB9CiAgICAg
fQogCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICBpZiAoIW5ld1N0eWxlLnNjcm9s
bFNuYXBDb29yZGluYXRlcygpLmlzRW1wdHkoKSB8fCAob2xkU3R5bGUgJiYgIW9sZFN0eWxlLT5z
Y3JvbGxTbmFwQ29vcmRpbmF0ZXMoKS5pc0VtcHR5KCkpKSB7CisgICAgICAgIEVsZW1lbnQqIHNj
cm9sbFNuYXBFbGVtZW50ID0gZWxlbWVudCgpOworICAgICAgICBFbGVtZW50KiBzY3JvbGxTbmFw
Q29udGFpbmVyID0gZmluZEVuY2xvc2luZ1Njcm9sbGFibGVDb250YWluZXIoc2Nyb2xsU25hcEVs
ZW1lbnQpOworICAgICAgICAKKyAgICAgICAgaWYgKHNjcm9sbFNuYXBFbGVtZW50ICYmIHNjcm9s
bFNuYXBDb250YWluZXIpIHsKKyAgICAgICAgICAgIGlmIChuZXdTdHlsZS5zY3JvbGxTbmFwQ29v
cmRpbmF0ZXMoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgZG9jdW1lbnQoKS5yZW1vdmVF
bGVtZW50RnJvbVNjcm9sbFNuYXBDb250YWluZXIoc2Nyb2xsU25hcEVsZW1lbnQsIHNjcm9sbFNu
YXBDb250YWluZXIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGRvY3VtZW50
KCkuYWRkRWxlbWVudFRvU2Nyb2xsU25hcENvbnRhaW5lcihzY3JvbGxTbmFwRWxlbWVudCwgc2Ny
b2xsU25hcENvbnRhaW5lcik7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKwogICAgIGlmIChp
c1Jvb3QoKSB8fCBpc0JvZHkoKSkKICAgICAgICAgdmlldygpLmZyYW1lVmlldygpLnVwZGF0ZUV4
dGVuZEJhY2tncm91bmRJZk5lY2Vzc2FyeSgpOwogfQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTg1NTQ0
KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTUtMDYtMTQgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAg
ICAgICAgQ1NTIFNjcm9sbCBTbmFwIC0gc3VwcG9ydCBzbmFwcGluZyB0byBuZXN0ZWQgZWxlbWVu
dHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NTg0
MworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjEzMzk1ODE+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBjc3MzL3Njcm9sbC1zbmFwL25lc3RlZC1l
bGVtZW50cy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGNzczMvc2Nyb2xsLXNuYXAv
bmVzdGVkLWVsZW1lbnRzLmh0bWw6IEFkZGVkLgorCiAyMDE1LTA2LTEzICBDaHJpcyBGbGVpemFj
aCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAgQVg6IFdlYktpdCBleHBvc2VzIGFs
bCBSdWJ5IFRleHQgYXMgVW5rbm93biAoSmFwYW5lc2UgRVBVQiBhY2Nlc3NpYmlsaXR5IGJsb2Nr
ZXIpCkluZGV4OiBMYXlvdXRUZXN0cy9jc3MzL3Njcm9sbC1zbmFwL25lc3RlZC1lbGVtZW50cy1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvY3NzMy9zY3JvbGwtc25hcC9u
ZXN0ZWQtZWxlbWVudHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
Y3NzMy9zY3JvbGwtc25hcC9uZXN0ZWQtZWxlbWVudHMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsOCBAQAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCitTY3JvbGwtc25hcCBvZmZzZXRzIGZvciAnY29udGFpbmVyJzogdmVydGlj
YWwgPSB7IDAsIDEwMSwgMjE4LCAzMzUsIDQ1MiwgNTY5LCA2ODYsIDgwMywgOTIwLCAxMDM3LCAx
MTU0LCAxMjcxLCAxMzg4LCAxNTA1LCAxNjIyLCAxNzM5LCAxODU2LCAxOTczLCAyMDkwLCAyMjA3
LCA0NzM4IH0KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVU
RQorCkluZGV4OiBMYXlvdXRUZXN0cy9jc3MzL3Njcm9sbC1zbmFwL25lc3RlZC1lbGVtZW50cy5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2NzczMvc2Nyb2xsLXNuYXAvbmVzdGVkLWVs
ZW1lbnRzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9jc3MzL3Njcm9sbC1zbmFw
L25lc3RlZC1lbGVtZW50cy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI5IEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHRpdGxlPlNuYXAgcG9pbnRzIC0g
bmVzdGVkIHNuYXAgY29vcmRpbmF0ZXM8L3RpdGxlPgorICAgIDxzdHlsZT4KKyAgICAgICAgLnNj
cm9sbGFibGUgeworICAgICAgICAgICAgb3ZlcmZsb3c6IHNjcm9sbDsKKyAgICAgICAgICAgIC13
ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKKyAgICAgICAgICAgIGJvcmRlcjogMXB4
IGRhc2hlZCBibGFjazsKKyAgICAgICAgICAgIGhlaWdodDogNTAwcHg7CisgICAgICAgICAgICBt
YXJnaW46IDAgMTBweDsKKyAgICAgICAgfQorICAgIAorICAgICAgICAuY2VudGVyLXNuYXAtcmVj
ZWl2ZXIgeworICAgICAgICAgICAgLXdlYmtpdC1zY3JvbGwtc25hcC10eXBlOiBtYW5kYXRvcnk7
CisgICAgICAgICAgICAtd2Via2l0LXNjcm9sbC1zbmFwLWRlc3RpbmF0aW9uOiAwIDA7CisgICAg
ICAgIH0KKyAgICAKKyAgICAgICAgLnNuYXAtcG9pbnQgeworICAgICAgICAgICAgbWFyZ2luLXRv
cDogMTAwcHg7CisgICAgICAgICAgICB3aWR0aDogMTVweDsKKyAgICAgICAgICAgIGhlaWdodDog
MTVweDsKKyAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOworICAgICAgICAgICAg
LXdlYmtpdC1zY3JvbGwtc25hcC1jb29yZGluYXRlOiAwIDBweDsKKyAgICAgICAgfQorICAgIAor
ICAgICAgICAuc25hcC1wb2ludDo6YWZ0ZXIgeworICAgICAgICAgICAgZm9udC1zaXplOiAxZW07
CisgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgICAgICAgICBjb250ZW50OiAn
Kyc7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgLm5lc3RlZCA+IC5zbmFwLXBvaW50IHsKKyAg
ICAgICAgICAgIG1hcmdpbi1sZWZ0OiA1MHB4OworICAgICAgICAgICAgYm9yZGVyOiAxcHggc29s
aWQgcmVkOworICAgICAgICB9CisgICAgICAgIC5uZXN0ZWQgPiAubmVzdGVkID4gLnNuYXAtcG9p
bnQgeworICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDEwMHB4OworICAgICAgICAgICAgYm9yZGVy
OiAxcHggc29saWQgYmx1ZTsKKyAgICAgICAgfQorICAgIAorICAgICAgICAubGFyZ2UtY29udGVu
dCB7CisgICAgICAgICAgICBoZWlnaHQ6IDMwMDBweDsKKyAgICAgICAgICAgIHdpZHRoOiAxMDAl
OworICAgICAgICB9CisgICAgCisgICAgICAgIC5zbWFsbC1jb250ZW50IHsKKyAgICAgICAgICAg
IGhlaWdodDogMjAwcHg7CisgICAgICAgICAgICB3aWR0aDogMTAwJTsKKyAgICAgICAgfQorICAg
IDwvc3R5bGU+CisgICAgICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0PgorICAgICAgICBmdW5jdGlvbiBydW5U
ZXN0KCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdjb250YWluZXInKTsKKyAgICAgICAgICAgIGRlYnVnKCJTY3JvbGwtc25h
cCBvZmZzZXRzIGZvciAnY29udGFpbmVyJzogIiArIHdpbmRvdy5pbnRlcm5hbHMuc2Nyb2xsU25h
cE9mZnNldHMoY29udGFpbmVyKSk7CisKKyAgICAgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAg
ICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgICAgIH0KKworICAgICAgICBm
dW5jdGlvbiBvbkxvYWQoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAod2luZG93LnRlc3RS
dW5uZXIpIHsKKyAgICAgICAgICAgICAgICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICAgICAg
dGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgICAgICAgc2V0VGltZW91dChy
dW5UZXN0LCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICA8L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5IG9ubG9hZD0ib25Mb2FkKCk7Ij4KKyAgICA8ZGl2IGlkPSJjb250YWlu
ZXIiIGNsYXNzPSJjZW50ZXItc25hcC1yZWNlaXZlciBzY3JvbGxhYmxlIj4KKyAgICAgICAgPGRp
diBjbGFzcz0ic25hcC1wb2ludCI+PC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9Im5lc3RlZCI+
CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzbmFwLXBvaW50Ij48L2Rpdj4KKyAgICAgICAgPC9k
aXY+CisgICAgICAgIDxkaXYgY2xhc3M9Im5lc3RlZCI+CisgICAgICAgICAgICA8ZGl2IGNsYXNz
PSJuZXN0ZWQiPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNuYXAtcG9pbnQiPjwvZGl2
PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNz
PSJzbmFwLXBvaW50Ij48L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0ic25hcC1wb2ludCI+PC9k
aXY+CisgICAgICAgIDxkaXYgY2xhc3M9Im5lc3RlZCI+CisgICAgICAgICAgICA8ZGl2IGNsYXNz
PSJzbmFwLXBvaW50Ij48L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9
Im5lc3RlZCI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJuZXN0ZWQiPgorICAgICAgICAgICAg
ICAgIDxkaXYgY2xhc3M9InNuYXAtcG9pbnQiPjwvZGl2PgorICAgICAgICAgICAgPC9kaXY+Cisg
ICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJuZXN0ZWQiPgorICAgICAgICAgICAg
PGRpdiBjbGFzcz0ic25hcC1wb2ludCI+PC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8
ZGl2IGNsYXNzPSJzbmFwLXBvaW50Ij48L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0ibmVzdGVk
Ij4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InNuYXAtcG9pbnQiPjwvZGl2PgorICAgICAgICA8
L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0ic25hcC1wb2ludCI+PC9kaXY+CisgICAgICAgIDxk
aXYgY2xhc3M9InNuYXAtcG9pbnQiPjwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJuZXN0ZWQi
PgorICAgICAgICAgICAgPGRpdiBjbGFzcz0ic25hcC1wb2ludCI+PC9kaXY+CisgICAgICAgIDwv
ZGl2PgorICAgICAgICAgPGRpdiBjbGFzcz0ic25hcC1wb2ludCI+PC9kaXY+CisgICAgICAgIDxk
aXYgY2xhc3M9Im5lc3RlZCI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzbmFwLXBvaW50Ij48
L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9Im5lc3RlZCI+CisgICAg
ICAgICAgICA8ZGl2IGNsYXNzPSJuZXN0ZWQiPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9
InNuYXAtcG9pbnQiPjwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2Pgor
ICAgICAgICAgPGRpdiBjbGFzcz0ic25hcC1wb2ludCI+PC9kaXY+CisgICAgICAgIDxkaXYgY2xh
c3M9Im5lc3RlZCI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzbmFwLXBvaW50Ij48L2Rpdj4K
KyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9Im5lc3RlZCI+CisgICAgICAgICAg
ICA8ZGl2IGNsYXNzPSJuZXN0ZWQiPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNuYXAt
cG9pbnQiPjwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAg
ICA8ZGl2IGNsYXNzPSJsYXJnZS1jb250ZW50Ij48L2Rpdj4KKyAgICA8L2Rpdj4KKyAgICA8c2Ny
aXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254894</attachid>
            <date>2015-06-15 14:10:50 -0700</date>
            <delta_ts>2015-06-15 14:49:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-145843-20150615141016.patch</filename>
            <type>text/plain</type>
            <size>21706</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NTU1MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBACisyMDE1LTA2LTE1ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIENTUyBTY3JvbGwgU25hcCAt
IHN1cHBvcnQgc25hcHBpbmcgdG8gbmVzdGVkIGVsZW1lbnRzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDU4NDMKKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzIxMzM5NTgxPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRlc3RlZCBieSBjc3MzL3Njcm9sbC1zbmFwL25lc3RlZC1lbGVtZW50cy5odG1sCisK
KyAgICAgICAgVGhlIFNjcm9sbCBTbmFwIFBvaW50IGltcGxlbWVudGF0aW9uIHdhcyBub3QgcHJv
cGVybHkgaGFuZGxpbmcgbmVzdGVkIGVsZW1lbnRzLgorICAgICAgICBUaGlzIGNvdWxkIGJlIHJl
c29sdmVkIGJ5IHJlY3Vyc2l2ZWx5IGNhbGxpbmcgJ2FwcGVuZENoaWxkU25hcE9mZnNldHMnLCBi
dXQgdGhpcworICAgICAgICBzZWVtZWQgbGlrZSBhbiBpbmVmZmljaWVudCBhcHByb2FjaCwgZXNw
ZWNpYWxseSBjb25zaWRlcmluZyBob3cgb2Z0ZW4gdGhpcyBtZXRob2QKKyAgICAgICAgaXMgY2Fs
bGVkIGR1cmluZyB2YXJpb3VzIHNjYWxpbmcgYW5kIG90aGVyIG9wZXJhdGlvbnMuCisgICAgICAg
IAorICAgICAgICBJbnN0ZWFkLCBkbyB0aGUgZm9sbG93aW5nOgorICAgICAgICAoMSkgQWRkIGEg
bmV3IEhhc2hNYXAgdG8gRG9jdW1lbnQgdGhhdCBtYXBzIHNjcm9sbGluZyBjb250YWluZXJzIHRv
IHNldHMgb2YKKyAgICAgICAgICAgIGVsZW1lbnRzLgorICAgICAgICAoMikgRHVyaW5nIFJlbmRl
ckVsZW1lbnQ6OnN0eWxlV2lsbENoYW5nZSwgaWRlbnRpZnkgdGhlIGVuY2xvc2luZyBzY3JvbGxp
bmcgY29udGFpbmVyCisgICAgICAgICAgICBmb3IgZWxlbWVudHMgd2l0aCBzY3JvbGwtc25hcC1j
b29yZGluYXRlcyBhbmQgYWRkIHRoZSBlbGVtZW50IHRvIHRoZSBEb2N1bWVudCdzCisgICAgICAg
ICAgICBkYXRhIHN0b3JlIGZvciB0aGF0IHNjcm9sbGluZyBjb250YWluZXIuCisgICAgICAgICgz
KSBXaGVuIHBlcmZvcm1pbmcgJ2FwcGVuZENoaWxkU25hcE9mZnNldHMnLCByZWZlciB0byB0aGUg
SGFzaFNldCBvZiBlbGVtZW50cyByZWxldmFudAorICAgICAgICAgICAgdG8gdGhlIGN1cnJlbnQg
c2Nyb2xsaW5nIGNvbnRhaW5lciByYXRoZXIgdGhhbiB3YWxraW5nIHRoZSBET00gdG8gZmluZCB0
aGVtLgorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjphZGRFbGVtZW50VG9TY3JvbGxTbmFwQ29udGFpbmVyKTogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudDo6ZWxlbWVudHNGb3JTY3JvbGxTbmFwQ29udGFpbmVyKTogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVtb3ZlRWxlbWVudEZyb21TY3JvbGxT
bmFwQ29udGFpbmVyKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YWRkRWxl
bWVudE5lZWRpbmdTY3JvbGxTbmFwQ29udGFpbmVyUmVnaXN0cmF0aW9uKTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YWRkRWxlbWVudE5lZWRpbmdTY3JvbGxTbmFwQ29udGFp
bmVyVW5yZWdpc3RyYXRpb24pOiBBZGRlZC4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAg
ICAgICAgKiBwYWdlL3Njcm9sbGluZy9BeGlzU2Nyb2xsU25hcE9mZnNldHMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6YXBwZW5kQ2hpbGRTbmFwT2Zmc2V0cyk6IENoZWNrIHRoZSBIYXNoU2V0IGZv
ciB0aGUgY3VycmVudCBzY3JvbGxpbmcgY29udGFpbmVyCisgICAgICAgIHRvIGZpbmQgc2Nyb2xs
LXNuYXAtY29vcmRpbmF0ZXMsIHJhdGhlciB0aGFuIHdhbGtpbmcgdGhlIERPTSB0byBmaW5kIHRo
ZW0uCisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVTbmFwT2Zmc2V0c0ZvclNjcm9sbGFibGVBcmVh
KTogSWYgYW55IGVsZW1lbnRzIG5lZWQgdG8gYmUgcmVnaXN0ZXJlZCBvcgorICAgICAgICB1bnJl
Z2lzdGVyZWQgZnJvbSB0aGVpciByZXNwZWN0aXZlIHNjcm9sbGluZyBjb250YWluZXJzLCBkbyBz
by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpmaW5kRW5jbG9zaW5nU2Nyb2xsYWJsZUNvbnRhaW5lcik6IE5ldyBoZWxwZXIgZnVuY3Rp
b24uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50Ojp+UmVuZGVyRWxlbWVudCk6IFJl
bW92ZSBlbGVtZW50cyBmcm9tIERvY3VtZW50IHNjcm9sbCBzbmFwCisgICAgICAgIGNvbnRhaW5l
ci4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OnN0eWxlV2lsbENoYW5nZSk6IElm
IHRoZSBjdXJyZW50IGVsZW1lbnQgaGFzIHNjcm9sbC1zbmFwLWNvb3JkaW5hdGUKKyAgICAgICAg
ZGVmaW5lZCwgcmVtZW1iZXIgaXQgZm9yIGxhdGVyIHNvIHdlIGNhbiByZWdpc3RlciBpdCB3aXRo
IHRoZSByZWxldmFudCBzY3JvbGxpbmcgY29udGFpbmVyCisgICAgICAgIGFmdGVyIGxheW91dCBj
b21wbGV0ZXMuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50Ojp3aWxsQmVSZW1vdmVk
RnJvbVRyZWUpOiBVbnJlZ2lzdGVyIHRoZSBjdXJyZW50IGVsZW1lbnQgZnJvbSBpdHMKKyAgICAg
ICAgcmVsZXZhbnQgc2Nyb2xsaW5nIGNvbnRhaW5lci4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckVsZW1lbnQ6OmZpbmRFbmNsb3NpbmdTY3JvbGxhYmxlQ29udGFpbmVyKTogQWRkZWQuIExvY2F0
ZSB0aGUgcmVsZXZhbnQKKyAgICAgICAgc2Nyb2xsaW5nIGNvbnRhaW5lciBmb3IgdGhlIGN1cnJl
bnQgb2JqZWN0LgorCiAyMDE1LTA2LTE1ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KIAogICAgICAgICBbU09VUF0gTW92ZSBXZWJLaXRTb3VwUmVxdWVzdEdlbmVy
aWMgdG8gcGxhdGZvcm0gbGF5ZXIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNp
b24gMTg1NTUyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMyw3ICszLDcgQEAKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0
byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIg
KG11ZWxsZXJAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlh
a292IChhcEB3ZWJraXQub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3LCAyMDA4LCAyMDA5LCAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwg
MjAwOSwgMjAxMSwgMjAxMiwgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKICAqIENvcHlyaWdo
dCAoQykgMjAwOCwgMjAwOSwgMjAxMSwgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQpAQCAtNjY2MSw0ICs2NjYxLDU2IEBAIFNob3VsZE9wZW5FeHRlcm5h
bFVSTHNQb2xpY3kgRG9jdW1lbnQ6OnMKICAgICByZXR1cm4gU2hvdWxkT3BlbkV4dGVybmFsVVJM
c1BvbGljeTo6U2hvdWxkTm90QWxsb3c7CiB9CiAKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQ
KQordm9pZCBEb2N1bWVudDo6YWRkRWxlbWVudFRvU2Nyb2xsU25hcENvbnRhaW5lcihjb25zdCBS
ZW5kZXJFbGVtZW50KiBzY3JvbGxTbmFwRWxlbWVudCwgY29uc3QgUmVuZGVyRWxlbWVudCogc2Ny
b2xsU25hcENvbnRhaW5lcikKK3sKKyAgICBpZiAoIXNjcm9sbFNuYXBDb250YWluZXIpCisgICAg
ICAgIHJldHVybjsKKworICAgIGF1dG8mIGNvbnRhaW5lckVsZW1lbnRzID0gbV9zY3JvbGxTbmFw
UmVuZGVyRWxlbWVudHNGb3JDb250YWluZXJzLmFkZChzY3JvbGxTbmFwQ29udGFpbmVyLCBIYXNo
U2V0PGNvbnN0IFJlbmRlckVsZW1lbnQqPigpKS5pdGVyYXRvci0+dmFsdWU7CisgICAgY29udGFp
bmVyRWxlbWVudHMuYWRkKHNjcm9sbFNuYXBFbGVtZW50KTsKK30KKworY29uc3QgSGFzaFNldDxj
b25zdCBSZW5kZXJFbGVtZW50Kj4qIERvY3VtZW50OjplbGVtZW50c0ZvclNjcm9sbFNuYXBDb250
YWluZXIoY29uc3QgUmVuZGVyRWxlbWVudCogc2Nyb2xsU25hcENvbnRhaW5lcikKK3sKKyAgICBp
ZiAoIXNjcm9sbFNuYXBDb250YWluZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
YXV0byBjb250YWluZXJFbGVtZW50c0l0ZXJhdG9yID0gbV9zY3JvbGxTbmFwUmVuZGVyRWxlbWVu
dHNGb3JDb250YWluZXJzLmZpbmQoc2Nyb2xsU25hcENvbnRhaW5lcik7CisgICAgaWYgKGNvbnRh
aW5lckVsZW1lbnRzSXRlcmF0b3IgPT0gbV9zY3JvbGxTbmFwUmVuZGVyRWxlbWVudHNGb3JDb250
YWluZXJzLmVuZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiAmY29u
dGFpbmVyRWxlbWVudHNJdGVyYXRvci0+dmFsdWU7Cit9CisKK3ZvaWQgRG9jdW1lbnQ6OnJlbW92
ZUVsZW1lbnRGcm9tU2Nyb2xsU25hcENvbnRhaW5lcihjb25zdCBSZW5kZXJFbGVtZW50KiBzY3Jv
bGxTbmFwRWxlbWVudCwgY29uc3QgUmVuZGVyRWxlbWVudCogc2Nyb2xsU25hcENvbnRhaW5lcikK
K3sKKyAgICBpZiAoIXNjcm9sbFNuYXBDb250YWluZXIpCisgICAgICAgIHJldHVybjsKKworICAg
IGF1dG8gY29udGFpbmVyRWxlbWVudHNJdGVyYXRvciA9IG1fc2Nyb2xsU25hcFJlbmRlckVsZW1l
bnRzRm9yQ29udGFpbmVycy5maW5kKHNjcm9sbFNuYXBDb250YWluZXIpOworICAgIGlmIChjb250
YWluZXJFbGVtZW50c0l0ZXJhdG9yID09IG1fc2Nyb2xsU25hcFJlbmRlckVsZW1lbnRzRm9yQ29u
dGFpbmVycy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGNvbnRhaW5lckVsZW1l
bnRzSXRlcmF0b3ItPnZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29u
dGFpbmVyRWxlbWVudHNJdGVyYXRvci0+dmFsdWUucmVtb3ZlKHNjcm9sbFNuYXBFbGVtZW50KTsK
KworICAgIGlmIChjb250YWluZXJFbGVtZW50c0l0ZXJhdG9yLT52YWx1ZS5pc0VtcHR5KCkpCisg
ICAgICAgIG1fc2Nyb2xsU25hcFJlbmRlckVsZW1lbnRzRm9yQ29udGFpbmVycy5yZW1vdmUoc2Ny
b2xsU25hcENvbnRhaW5lcik7Cit9CisKK3ZvaWQgRG9jdW1lbnQ6OmFkZEVsZW1lbnROZWVkaW5n
U2Nyb2xsU25hcENvbnRhaW5lclJlZ2lzdHJhdGlvbihjb25zdCBSZW5kZXJFbGVtZW50KiBlbGVt
ZW50KQoreworICAgIG1fc2Nyb2xsU25hcFJlbmRlckVsZW1lbnRzVG9CZVJlZ2lzdGVyZWQuYWRk
KGVsZW1lbnQpOworfQorCit2b2lkIERvY3VtZW50OjphZGRFbGVtZW50TmVlZGluZ1Njcm9sbFNu
YXBDb250YWluZXJVbnJlZ2lzdHJhdGlvbihjb25zdCBSZW5kZXJFbGVtZW50KiBlbGVtZW50KQor
eworICAgIG1fc2Nyb2xsU25hcFJlbmRlckVsZW1lbnRzVG9CZVVucmVnaXN0ZXJlZC5hZGQoZWxl
bWVudCk7Cit9CisKKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuaAkocmV2aXNpb24gMTg1NTUyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3IEBACiAgKiAgICAgICAgICAgKEMp
IDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMp
IDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIw
MDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykKLSAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMiwgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTIsIDIwMTMsIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNo
IE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxl
LmNvbS8pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KQEAgLTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlIDxjaHJvbm8+CiAj
aW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CkBAIC0xMjU4LDYgKzEyNTksMTggQEAg
cHVibGljOgogCiAgICAgU2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSBzaG91bGRPcGVuRXh0
ZXJuYWxVUkxzUG9saWN5VG9Qcm9wYWdhdGUoKSBjb25zdDsKIAorI2lmIEVOQUJMRShDU1NfU0NS
T0xMX1NOQVApCisgICAgdm9pZCBhZGRFbGVtZW50VG9TY3JvbGxTbmFwQ29udGFpbmVyKGNvbnN0
IFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJFbGVtZW50Kik7CisgICAgdm9pZCByZW1vdmVF
bGVtZW50RnJvbVNjcm9sbFNuYXBDb250YWluZXIoY29uc3QgUmVuZGVyRWxlbWVudCosIGNvbnN0
IFJlbmRlckVsZW1lbnQqKTsKKyAgICBjb25zdCBIYXNoU2V0PGNvbnN0IFJlbmRlckVsZW1lbnQq
PiogZWxlbWVudHNGb3JTY3JvbGxTbmFwQ29udGFpbmVyKGNvbnN0IFJlbmRlckVsZW1lbnQqKTsK
KworICAgIHZvaWQgYWRkRWxlbWVudE5lZWRpbmdTY3JvbGxTbmFwQ29udGFpbmVyUmVnaXN0cmF0
aW9uKGNvbnN0IFJlbmRlckVsZW1lbnQqKTsKKyAgICBIYXNoU2V0PGNvbnN0IFJlbmRlckVsZW1l
bnQqPiYgZWxlbWVudHNOZWVkaW5nUmVnaXN0cmF0aW9uKCkgeyByZXR1cm4gbV9zY3JvbGxTbmFw
UmVuZGVyRWxlbWVudHNUb0JlUmVnaXN0ZXJlZDsgfQorCisgICAgdm9pZCBhZGRFbGVtZW50TmVl
ZGluZ1Njcm9sbFNuYXBDb250YWluZXJVbnJlZ2lzdHJhdGlvbihjb25zdCBSZW5kZXJFbGVtZW50
Kik7CisgICAgSGFzaFNldDxjb25zdCBSZW5kZXJFbGVtZW50Kj4mIGVsZW1lbnRzTmVlZGluZ1Vu
cmVnaXN0cmF0aW9uKCkgeyByZXR1cm4gbV9zY3JvbGxTbmFwUmVuZGVyRWxlbWVudHNUb0JlVW5y
ZWdpc3RlcmVkOyB9CisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIGVudW0gQ29uc3RydWN0aW9u
RmxhZ3MgeyBTeW50aGVzaXplZCA9IDEsIE5vblJlbmRlcmVkUGxhY2Vob2xkZXIgPSAxIDw8IDEg
fTsKICAgICBEb2N1bWVudChGcmFtZSosIGNvbnN0IFVSTCYsIHVuc2lnbmVkID0gRGVmYXVsdERv
Y3VtZW50Q2xhc3MsIHVuc2lnbmVkIGNvbnN0cnVjdGlvbkZsYWdzID0gMCk7CkBAIC0xNzA2LDYg
KzE3MTksMTIgQEAgcHJpdmF0ZToKICAgICB0eXBlZGVmIEhhc2hNYXA8V2ViQ29yZTo6TWVkaWFQ
bGF5YmFja1RhcmdldENsaWVudCosIHVpbnQ2NF90PiBUYXJnZXRDbGllbnRUb0lkTWFwOwogICAg
IFRhcmdldENsaWVudFRvSWRNYXAgbV9jbGllbnRUb0lETWFwOwogI2VuZGlmCisKKyNpZiBFTkFC
TEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIEhhc2hTZXQ8Y29uc3QgUmVuZGVyRWxlbWVudCo+IG1f
c2Nyb2xsU25hcFJlbmRlckVsZW1lbnRzVG9CZVJlZ2lzdGVyZWQ7CisgICAgSGFzaFNldDxjb25z
dCBSZW5kZXJFbGVtZW50Kj4gbV9zY3JvbGxTbmFwUmVuZGVyRWxlbWVudHNUb0JlVW5yZWdpc3Rl
cmVkOworICAgIEhhc2hNYXA8Y29uc3QgUmVuZGVyRWxlbWVudCosIEhhc2hTZXQ8Y29uc3QgUmVu
ZGVyRWxlbWVudCo+PiBtX3Njcm9sbFNuYXBSZW5kZXJFbGVtZW50c0ZvckNvbnRhaW5lcnM7Cisj
ZW5kaWYKIH07CiAKIGlubGluZSB2b2lkIERvY3VtZW50Ojpub3RpZnlSZW1vdmVQZW5kaW5nU2hl
ZXRJZk5lZWRlZCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9BeGlzU2Ny
b2xsU25hcE9mZnNldHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5jcHAJKHJldmlzaW9uIDE4NTU1MikKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDI4ICs0MCwzOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0
YXRpYyB2b2lkIGFwcGVuZENoaWxkU25hcE9mZnNldHMoSFRNTEVsZW1lbnQmIHBhcmVudCwgYm9v
bCBzaG91bGRBZGRIb3Jpem9udGFsQ2hpbGRPZmZzZXRzLCBWZWN0b3I8TGF5b3V0VW5pdD4mIGhv
cml6b250YWxTbmFwT2Zmc2V0U3Vic2VxdWVuY2UsIGJvb2wgc2hvdWxkQWRkVmVydGljYWxDaGls
ZE9mZnNldHMsIFZlY3RvcjxMYXlvdXRVbml0PiYgdmVydGljYWxTbmFwT2Zmc2V0U3Vic2VxdWVu
Y2UpCiB7Ci0gICAgLy8gRklYTUU6IEluc3RlYWQgb2YgdHJhdmVyc2luZyBhbGwgY2hpbGRyZW4s
IHJlZ2lzdGVyIGNoaWxkcmVuIHdpdGggc25hcCBjb29yZGluYXRlcyBiZWZvcmUgYXBwZW5kaW5n
IHRvIHNuYXBPZmZzZXRTdWJzZXF1ZW5jZS4KLSAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRy
ZW5PZlR5cGU8RWxlbWVudD4ocGFyZW50KSkgewotICAgICAgICBpZiAoUmVuZGVyQm94KiBib3gg
PSBjaGlsZC5yZW5kZXJCb3goKSkgewotICAgICAgICAgICAgY29uc3QgYXV0byYgc2Nyb2xsU25h
cENvb3JkaW5hdGVzID0gYm94LT5zdHlsZSgpLnNjcm9sbFNuYXBDb29yZGluYXRlcygpOwotICAg
ICAgICAgICAgaWYgKHNjcm9sbFNuYXBDb29yZGluYXRlcy5pc0VtcHR5KCkpCi0gICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgQVNTRVJUKHBhcmVudC5yZW5kZXJlcigpKTsKKyAgICBEb2N1
bWVudCYgZG9jdW1lbnQgPSBwYXJlbnQucmVuZGVyZXIoKS0+ZG9jdW1lbnQoKTsKKworICAgIGF1
dG8qIGVsZW1lbnRzID0gZG9jdW1lbnQuZWxlbWVudHNGb3JTY3JvbGxTbmFwQ29udGFpbmVyKHBh
cmVudC5yZW5kZXJlcigpKTsKKyAgICBpZiAoIWVsZW1lbnRzKQorICAgICAgICByZXR1cm47CiAK
LSAgICAgICAgICAgIExheW91dFJlY3Qgdmlld1NpemUgPSBib3gtPmNvbnRlbnRCb3hSZWN0KCk7
Ci0gICAgICAgICAgICBMYXlvdXRVbml0IHZpZXdXaWR0aCA9IHZpZXdTaXplLndpZHRoKCk7Ci0g
ICAgICAgICAgICBMYXlvdXRVbml0IHZpZXdIZWlnaHQgPSB2aWV3U2l6ZS5oZWlnaHQoKTsKLSAg
ICAgICAgICAgIEZsb2F0UG9pbnQgcG9zaXRpb24gPSBib3gtPmxvY2FsVG9Db250YWluZXJQb2lu
dChGbG9hdFBvaW50KCksIHBhcmVudC5yZW5kZXJCb3goKSk7Ci0gICAgICAgICAgICBMYXlvdXRV
bml0IGxlZnQgPSBwb3NpdGlvbi54KCk7Ci0gICAgICAgICAgICBMYXlvdXRVbml0IHRvcCA9IHBv
c2l0aW9uLnkoKTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgY29vcmRpbmF0ZSA6IHNjcm9sbFNu
YXBDb29yZGluYXRlcykgewotICAgICAgICAgICAgICAgIExheW91dFVuaXQgbGFzdFBvdGVudGlh
bFNuYXBQb3NpdGlvblggPSBsZWZ0ICsgdmFsdWVGb3JMZW5ndGgoY29vcmRpbmF0ZS53aWR0aCgp
LCB2aWV3V2lkdGgpOwotICAgICAgICAgICAgICAgIGlmIChzaG91bGRBZGRIb3Jpem9udGFsQ2hp
bGRPZmZzZXRzICYmIGxhc3RQb3RlbnRpYWxTbmFwUG9zaXRpb25YID4gMCkKLSAgICAgICAgICAg
ICAgICAgICAgaG9yaXpvbnRhbFNuYXBPZmZzZXRTdWJzZXF1ZW5jZS5hcHBlbmQobGFzdFBvdGVu
dGlhbFNuYXBQb3NpdGlvblgpOwotCi0gICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBsYXN0UG90
ZW50aWFsU25hcFBvc2l0aW9uWSA9IHRvcCArIHZhbHVlRm9yTGVuZ3RoKGNvb3JkaW5hdGUuaGVp
Z2h0KCksIHZpZXdIZWlnaHQpOwotICAgICAgICAgICAgICAgIGlmIChzaG91bGRBZGRWZXJ0aWNh
bENoaWxkT2Zmc2V0cyAmJiBsYXN0UG90ZW50aWFsU25hcFBvc2l0aW9uWSA+IDApCi0gICAgICAg
ICAgICAgICAgICAgIHZlcnRpY2FsU25hcE9mZnNldFN1YnNlcXVlbmNlLmFwcGVuZChsYXN0UG90
ZW50aWFsU25hcFBvc2l0aW9uWSk7Ci0gICAgICAgICAgICB9CisgICAgZm9yIChhdXRvJiBjaGls
ZCA6ICplbGVtZW50cykgeworICAgICAgICBBU1NFUlQoY2hpbGQpOworICAgICAgICBBU1NFUlQo
aXM8UmVuZGVyQm94PihjaGlsZCkpOworICAgICAgICBjb25zdCBSZW5kZXJCb3gqIGJveCA9IGRv
d25jYXN0PFJlbmRlckJveD4oY2hpbGQpOworICAgICAgICBpZiAoIWJveCkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgIGNvbnN0IGF1dG8mIHNjcm9sbFNuYXBDb29yZGluYXRlcyA9
IGJveC0+c3R5bGUoKS5zY3JvbGxTbmFwQ29vcmRpbmF0ZXMoKTsKKyAgICAgICAgaWYgKHNjcm9s
bFNuYXBDb29yZGluYXRlcy5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgCisgICAgICAgIExheW91dFJlY3Qgdmlld1NpemUgPSBib3gtPmNvbnRlbnRCb3hSZWN0KCk7
CisgICAgICAgIExheW91dFVuaXQgdmlld1dpZHRoID0gdmlld1NpemUud2lkdGgoKTsKKyAgICAg
ICAgTGF5b3V0VW5pdCB2aWV3SGVpZ2h0ID0gdmlld1NpemUuaGVpZ2h0KCk7CisgICAgICAgIEZs
b2F0UG9pbnQgcG9zaXRpb24gPSBib3gtPmxvY2FsVG9Db250YWluZXJQb2ludChGbG9hdFBvaW50
KCksIHBhcmVudC5yZW5kZXJCb3goKSk7CisgICAgICAgIExheW91dFVuaXQgbGVmdCA9IHBvc2l0
aW9uLngoKTsKKyAgICAgICAgTGF5b3V0VW5pdCB0b3AgPSBwb3NpdGlvbi55KCk7CisgICAgICAg
IGZvciAoYXV0byYgY29vcmRpbmF0ZSA6IHNjcm9sbFNuYXBDb29yZGluYXRlcykgeworICAgICAg
ICAgICAgTGF5b3V0VW5pdCBsYXN0UG90ZW50aWFsU25hcFBvc2l0aW9uWCA9IGxlZnQgKyB2YWx1
ZUZvckxlbmd0aChjb29yZGluYXRlLndpZHRoKCksIHZpZXdXaWR0aCk7CisgICAgICAgICAgICBp
ZiAoc2hvdWxkQWRkSG9yaXpvbnRhbENoaWxkT2Zmc2V0cyAmJiBsYXN0UG90ZW50aWFsU25hcFBv
c2l0aW9uWCA+IDApCisgICAgICAgICAgICAgICAgaG9yaXpvbnRhbFNuYXBPZmZzZXRTdWJzZXF1
ZW5jZS5hcHBlbmQobGFzdFBvdGVudGlhbFNuYXBQb3NpdGlvblgpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBMYXlvdXRVbml0IGxhc3RQb3RlbnRpYWxTbmFwUG9zaXRpb25ZID0gdG9wICsg
dmFsdWVGb3JMZW5ndGgoY29vcmRpbmF0ZS5oZWlnaHQoKSwgdmlld0hlaWdodCk7CisgICAgICAg
ICAgICBpZiAoc2hvdWxkQWRkVmVydGljYWxDaGlsZE9mZnNldHMgJiYgbGFzdFBvdGVudGlhbFNu
YXBQb3NpdGlvblkgPiAwKQorICAgICAgICAgICAgICAgIHZlcnRpY2FsU25hcE9mZnNldFN1YnNl
cXVlbmNlLmFwcGVuZChsYXN0UG90ZW50aWFsU25hcFBvc2l0aW9uWSk7CiAgICAgICAgIH0KICAg
ICB9CiB9CkBAIC0xMzEsNiArMTQxLDE3IEBAIHZvaWQgdXBkYXRlU25hcE9mZnNldHNGb3JTY3Jv
bGxhYmxlQXJlYSgKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIC8vIFRha2UgY2FyZSBv
ZiBhbnkgYm9va2tlZXBpbmcgZHVlIHRvIHN0eWxlIGNoYW5nZXMuCisgICAgQVNTRVJUKHNjcm9s
bGluZ0VsZW1lbnQucmVuZGVyZXIoKSk7CisgICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gc2Nyb2xs
aW5nRWxlbWVudC5yZW5kZXJlcigpLT5kb2N1bWVudCgpOworICAgIGZvciAoYXV0byYgY2hpbGQg
OiBkb2N1bWVudC5lbGVtZW50c05lZWRpbmdSZWdpc3RyYXRpb24oKSkKKyAgICAgICAgZG9jdW1l
bnQuYWRkRWxlbWVudFRvU2Nyb2xsU25hcENvbnRhaW5lcihjaGlsZCwgY2hpbGQtPmZpbmRFbmNs
b3NpbmdTY3JvbGxhYmxlQ29udGFpbmVyKCkpOworICAgIGRvY3VtZW50LmVsZW1lbnRzTmVlZGlu
Z1JlZ2lzdHJhdGlvbigpLmNsZWFyKCk7CisKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDogZG9jdW1l
bnQuZWxlbWVudHNOZWVkaW5nVW5yZWdpc3RyYXRpb24oKSkKKyAgICAgICAgZG9jdW1lbnQucmVt
b3ZlRWxlbWVudEZyb21TY3JvbGxTbmFwQ29udGFpbmVyKGNoaWxkLCBjaGlsZC0+ZmluZEVuY2xv
c2luZ1Njcm9sbGFibGVDb250YWluZXIoKSk7CisgICAgZG9jdW1lbnQuZWxlbWVudHNOZWVkaW5n
VW5yZWdpc3RyYXRpb24oKS5jbGVhcigpOworCiAgICAgTGF5b3V0UmVjdCB2aWV3U2l6ZSA9IHNj
cm9sbGluZ0VsZW1lbnRCb3guY29udGVudEJveFJlY3QoKTsKICAgICBMYXlvdXRVbml0IHZpZXdX
aWR0aCA9IHZpZXdTaXplLndpZHRoKCk7CiAgICAgTGF5b3V0VW5pdCB2aWV3SGVpZ2h0ID0gdmll
d1NpemUuaGVpZ2h0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAxODU1NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwNCw2ICs5MDQsMTUgQEAgdm9p
ZCBSZW5kZXJFbGVtZW50OjpzdHlsZVdpbGxDaGFuZ2UoU3R5bAogICAgICAgICB9CiAgICAgfQog
CisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICBpZiAoIW5ld1N0eWxlLnNjcm9sbFNu
YXBDb29yZGluYXRlcygpLmlzRW1wdHkoKSB8fCAob2xkU3R5bGUgJiYgIW9sZFN0eWxlLT5zY3Jv
bGxTbmFwQ29vcmRpbmF0ZXMoKS5pc0VtcHR5KCkpKSB7CisgICAgICAgIGlmIChuZXdTdHlsZS5z
Y3JvbGxTbmFwQ29vcmRpbmF0ZXMoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICBkb2N1bWVudCgp
LmFkZEVsZW1lbnROZWVkaW5nU2Nyb2xsU25hcENvbnRhaW5lclVucmVnaXN0cmF0aW9uKHRoaXMp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBkb2N1bWVudCgpLmFkZEVsZW1lbnROZWVkaW5n
U2Nyb2xsU25hcENvbnRhaW5lclJlZ2lzdHJhdGlvbih0aGlzKTsKKyAgICB9CisjZW5kaWYKKwog
ICAgIGlmIChpc1Jvb3QoKSB8fCBpc0JvZHkoKSkKICAgICAgICAgdmlldygpLmZyYW1lVmlldygp
LnVwZGF0ZUV4dGVuZEJhY2tncm91bmRJZk5lY2Vzc2FyeSgpOwogfQpAQCAtMTA1OCw2ICsxMDY3
LDE0IEBAIHZvaWQgUmVuZGVyRWxlbWVudDo6d2lsbEJlUmVtb3ZlZEZyb21UcmUKICAgICBpZiAo
YXV0byogY29udGFpbmVyRmxvd1RocmVhZCA9IHBhcmVudCgpLT5yZW5kZXJOYW1lZEZsb3dUaHJl
YWRXcmFwcGVyKCkpCiAgICAgICAgIGNvbnRhaW5lckZsb3dUaHJlYWQtPnJlbW92ZUZsb3dDaGls
ZCgqdGhpcyk7CiAKKyAgICAKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIGlmICgh
bV9zdHlsZS0+c2Nyb2xsU25hcENvb3JkaW5hdGVzKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIGlm
IChjb25zdCBSZW5kZXJFbGVtZW50KiBzY3JvbGxTbmFwQ29udGFpbmVyID0gZmluZEVuY2xvc2lu
Z1Njcm9sbGFibGVDb250YWluZXIoKSkKKyAgICAgICAgICAgIGRvY3VtZW50KCkucmVtb3ZlRWxl
bWVudEZyb21TY3JvbGxTbmFwQ29udGFpbmVyKHRoaXMsIHNjcm9sbFNuYXBDb250YWluZXIpOwor
ICAgIH0KKyNlbmRpZgorCiAgICAgUmVuZGVyT2JqZWN0Ojp3aWxsQmVSZW1vdmVkRnJvbVRyZWUo
KTsKIH0KIApAQCAtMTc2MSw0ICsxNzc4LDE4IEBAIGNvbnN0IFJlbmRlckVsZW1lbnQqIFJlbmRl
ckVsZW1lbnQ6OmVuY2wKICAgICByZXR1cm4gY3VycmVudDsKIH0KIAorY29uc3QgUmVuZGVyRWxl
bWVudCogUmVuZGVyRWxlbWVudDo6ZmluZEVuY2xvc2luZ1Njcm9sbGFibGVDb250YWluZXIoKSBj
b25zdAoreworICAgIGZvciAoY29uc3QgUmVuZGVyRWxlbWVudCogY2FuZGlkYXRlID0gdGhpczsg
Y2FuZGlkYXRlOyBjYW5kaWRhdGUgPSBjYW5kaWRhdGUtPnBhcmVudCgpKSB7CisgICAgICAgIGlm
ICghaXM8UmVuZGVyQm94PigqY2FuZGlkYXRlKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAKKyAgICAgICAgY29uc3QgUmVuZGVyQm94KiBib3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+
KGNhbmRpZGF0ZSk7CisgICAgICAgIGlmIChib3ggJiYgYm94LT5oYXNPdmVyZmxvd0NsaXAoKSkK
KyAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGU7CisgICAgfQorICAgIAorICAgIHJldHVybiBu
dWxscHRyOworfQorCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVt
ZW50LmgJKHJldmlzaW9uIDE4NTU1MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwOCw2ICsyMDgsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRJc0NTU0FuaW1hdGluZyhib29sIGIpIHsgbV9pc0NTU0FuaW1hdGluZyA9IGI7
IH0KICAgICAKICAgICBjb25zdCBSZW5kZXJFbGVtZW50KiBlbmNsb3NpbmdSZW5kZXJlcldpdGhU
ZXh0RGVjb3JhdGlvbihUZXh0RGVjb3JhdGlvbiwgYm9vbCBmaXJzdExpbmUpIGNvbnN0OworICAg
IGNvbnN0IFJlbmRlckVsZW1lbnQqIGZpbmRFbmNsb3NpbmdTY3JvbGxhYmxlQ29udGFpbmVyKCkg
Y29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICBlbnVtIEJhc2VUeXBlRmxhZ3MgewpJbmRleDogTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwko
cmV2aXNpb24gMTg1NTUyKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTQgQEAKKzIwMTUtMDYtMTUgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBh
cHBsZS5jb20+CisKKyAgICAgICAgQ1NTIFNjcm9sbCBTbmFwIC0gc3VwcG9ydCBzbmFwcGluZyB0
byBuZXN0ZWQgZWxlbWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0NTg0MworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjEzMzk1ODE+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBjc3MzL3Njcm9s
bC1zbmFwL25lc3RlZC1lbGVtZW50cy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGNz
czMvc2Nyb2xsLXNuYXAvbmVzdGVkLWVsZW1lbnRzLmh0bWw6IEFkZGVkLgorCiAyMDE1LTA2LTEz
ICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAgQVg6IFdl
YktpdCBleHBvc2VzIGFsbCBSdWJ5IFRleHQgYXMgVW5rbm93biAoSmFwYW5lc2UgRVBVQiBhY2Nl
c3NpYmlsaXR5IGJsb2NrZXIpCkluZGV4OiBMYXlvdXRUZXN0cy9jc3MzL3Njcm9sbC1zbmFwL25l
c3RlZC1lbGVtZW50cy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvY3Nz
My9zY3JvbGwtc25hcC9uZXN0ZWQtZWxlbWVudHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvY3NzMy9zY3JvbGwtc25hcC9uZXN0ZWQtZWxlbWVudHMtZXhwZWN0ZWQu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOSBAQAorUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCitTY3JvbGwtc25hcCBvZmZzZXRzIGZvciAnY29u
dGFpbmVyJzogdmVydGljYWwgPSB7IDAsIDEwMSwgMjE4LCAzMzUsIDQ1MiwgNTY5LCA2ODYsIDgw
MywgOTIwLCAxMDM3LCAxMTU0LCAxMjcxLCAxMzg4LCAxNTA1LCAxNjIyLCAxNzM5LCAxODU2LCAx
OTczLCAyMDkwLCAyMjA3LCA0OTM4IH0KK1BBU1MgU2Nyb2xsLXNuYXAgb2Zmc2V0cyBmb3IgJ2lu
dmFsaWRDb250YWluZXInOiBVTkRFRklORUQKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9jc3MzL3Njcm9sbC1zbmFw
L25lc3RlZC1lbGVtZW50cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2NzczMvc2Ny
b2xsLXNuYXAvbmVzdGVkLWVsZW1lbnRzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9jc3MzL3Njcm9sbC1zbmFwL25lc3RlZC1lbGVtZW50cy5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTU1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHRp
dGxlPlNuYXAgcG9pbnRzIC0gbmVzdGVkIHNuYXAgY29vcmRpbmF0ZXM8L3RpdGxlPgorICAgIDxz
dHlsZT4KKyAgICAgICAgLnNjcm9sbGFibGUgeworICAgICAgICAgICAgb3ZlcmZsb3c6IHNjcm9s
bDsKKyAgICAgICAgICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKKyAgICAg
ICAgICAgIGJvcmRlcjogMXB4IGRhc2hlZCBibGFjazsKKyAgICAgICAgICAgIGhlaWdodDogMzAw
cHg7CisgICAgICAgICAgICBtYXJnaW46IDAgMTBweDsKKyAgICAgICAgfQorICAgIAorICAgICAg
ICAuY2VudGVyLXNuYXAtcmVjZWl2ZXIgeworICAgICAgICAgICAgLXdlYmtpdC1zY3JvbGwtc25h
cC10eXBlOiBtYW5kYXRvcnk7CisgICAgICAgICAgICAtd2Via2l0LXNjcm9sbC1zbmFwLWRlc3Rp
bmF0aW9uOiAwIDA7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgLnNuYXAtcG9pbnQgeworICAg
ICAgICAgICAgbWFyZ2luLXRvcDogMTAwcHg7CisgICAgICAgICAgICB3aWR0aDogMTVweDsKKyAg
ICAgICAgICAgIGhlaWdodDogMTVweDsKKyAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGJs
YWNrOworICAgICAgICAgICAgLXdlYmtpdC1zY3JvbGwtc25hcC1jb29yZGluYXRlOiAwIDBweDsK
KyAgICAgICAgfQorICAgIAorICAgICAgICAuc25hcC1wb2ludDo6YWZ0ZXIgeworICAgICAgICAg
ICAgZm9udC1zaXplOiAxZW07CisgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAg
ICAgICAgICBjb250ZW50OiAnKyc7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgLm5lc3RlZCA+
IC5zbmFwLXBvaW50IHsKKyAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiA1MHB4OworICAgICAgICAg
ICAgYm9yZGVyOiAxcHggc29saWQgcmVkOworICAgICAgICB9CisgICAgICAgIC5uZXN0ZWQgPiAu
bmVzdGVkID4gLnNuYXAtcG9pbnQgeworICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDEwMHB4Owor
ICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgYmx1ZTsKKyAgICAgICAgfQorICAgIAorICAg
ICAgICAubGFyZ2UtY29udGVudCB7CisgICAgICAgICAgICBoZWlnaHQ6IDMwMDBweDsKKyAgICAg
ICAgICAgIHdpZHRoOiAxMDAlOworICAgICAgICB9CisgICAgCisgICAgICAgIC5zbWFsbC1jb250
ZW50IHsKKyAgICAgICAgICAgIGhlaWdodDogMjAwcHg7CisgICAgICAgICAgICB3aWR0aDogMTAw
JTsKKyAgICAgICAgfQorCisgICAgICAgIC5pbnZhbGlkQ29udGFpbmVyIHsKKyAgICAgICAgICAg
IGJvcmRlcjogMXB4IGRhc2hlZCBibGFjazsKKyAgICAgICAgICAgIGhlaWdodDogMzAwcHg7Cisg
ICAgICAgICAgICBtYXJnaW46IDAgMTBweDsKKyAgICAgICAgICAgIG9wYWNpdHk6IDAuNTsKKyAg
ICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CisgICAgICAgIH0KKyAgICA8L3N0eWxlPgorICAg
ICAgICA8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKyAgICAgICAgPHNjcmlwdD4KKyAgICAgICAgZnVuY3Rpb24gcnVuVGVzdCgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
Y29udGFpbmVyJyk7CisgICAgICAgICAgICBkZWJ1ZygiU2Nyb2xsLXNuYXAgb2Zmc2V0cyBmb3Ig
J2NvbnRhaW5lcic6ICIgKyB3aW5kb3cuaW50ZXJuYWxzLnNjcm9sbFNuYXBPZmZzZXRzKGNvbnRh
aW5lcikpOworCisgICAgICAgICAgICB2YXIgaW52YWxpZENvbnRhaW5lciA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdpbnZhbGlkQ29udGFpbmVyJyk7CisgICAgICAgICAgICB0cnkgeworICAg
ICAgICAgICAgICAgIHRlc3RGYWlsZWQoIlNjcm9sbC1zbmFwIG9mZnNldHMgZm9yICdpbnZhbGlk
Q29udGFpbmVyJzogIiArIHdpbmRvdy5pbnRlcm5hbHMuc2Nyb2xsU25hcE9mZnNldHMoaW52YWxp
ZENvbnRhaW5lcikpOworICAgICAgICAgICAgfSBjYXRjaChleCkgeworICAgICAgICAgICAgICAg
IHRlc3RQYXNzZWQoIlNjcm9sbC1zbmFwIG9mZnNldHMgZm9yICdpbnZhbGlkQ29udGFpbmVyJzog
VU5ERUZJTkVEIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZpbmlzaEpTVGVzdCgp
OworICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgICAgIH0KKworICAg
ICAgICBmdW5jdGlvbiBvbkxvYWQoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAod2luZG93
LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgICAgICAgICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRy
dWU7CisgICAgICAgICAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAg
ICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgICAgICAgc2V0VGlt
ZW91dChydW5UZXN0LCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICA8L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0ib25Mb2FkKCk7Ij4KKyAgICA8ZGl2IGlkPSJj
b250YWluZXIiIGNsYXNzPSJjZW50ZXItc25hcC1yZWNlaXZlciBzY3JvbGxhYmxlIj4KKyAgICAg
ICAgPGRpdiBjbGFzcz0ic25hcC1wb2ludCI+PC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9Im5l
c3RlZCI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzbmFwLXBvaW50Ij48L2Rpdj4KKyAgICAg
ICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9Im5lc3RlZCI+CisgICAgICAgICAgICA8ZGl2
IGNsYXNzPSJuZXN0ZWQiPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNuYXAtcG9pbnQi
PjwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2
IGNsYXNzPSJzbmFwLXBvaW50Ij48L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0ic25hcC1wb2lu
dCI+PC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9Im5lc3RlZCI+CisgICAgICAgICAgICA8ZGl2
IGNsYXNzPSJzbmFwLXBvaW50Ij48L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYg
Y2xhc3M9Im5lc3RlZCI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJuZXN0ZWQiPgorICAgICAg
ICAgICAgICAgIDxkaXYgY2xhc3M9InNuYXAtcG9pbnQiPjwvZGl2PgorICAgICAgICAgICAgPC9k
aXY+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJuZXN0ZWQiPgorICAgICAg
ICAgICAgPGRpdiBjbGFzcz0ic25hcC1wb2ludCI+PC9kaXY+CisgICAgICAgIDwvZGl2PgorICAg
ICAgICA8ZGl2IGNsYXNzPSJzbmFwLXBvaW50Ij48L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0i
bmVzdGVkIj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InNuYXAtcG9pbnQiPjwvZGl2PgorICAg
ICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0ic25hcC1wb2ludCI+PC9kaXY+CisgICAg
ICAgIDxkaXYgY2xhc3M9InNuYXAtcG9pbnQiPjwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJu
ZXN0ZWQiPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0ic25hcC1wb2ludCI+PC9kaXY+CisgICAg
ICAgIDwvZGl2PgorICAgICAgICAgPGRpdiBjbGFzcz0ic25hcC1wb2ludCI+PC9kaXY+CisgICAg
ICAgIDxkaXYgY2xhc3M9Im5lc3RlZCI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzbmFwLXBv
aW50Ij48L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9Im5lc3RlZCI+
CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJuZXN0ZWQiPgorICAgICAgICAgICAgICAgIDxkaXYg
Y2xhc3M9InNuYXAtcG9pbnQiPjwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwv
ZGl2PgorICAgICAgICAgPGRpdiBjbGFzcz0ic25hcC1wb2ludCI+PC9kaXY+CisgICAgICAgIDxk
aXYgY2xhc3M9Im5lc3RlZCI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzbmFwLXBvaW50Ij48
L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9Im5lc3RlZCI+CisgICAg
ICAgICAgICA8ZGl2IGNsYXNzPSJuZXN0ZWQiPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9
InNuYXAtcG9pbnQiPjwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2Pgor
ICAgICAgICA8ZGl2IGNsYXNzPSJsYXJnZS1jb250ZW50Ij48L2Rpdj4KKyAgICA8L2Rpdj4KKyAg
ICA8ZGl2IGlkPSJpbnZhbGlkQ29udGFpbmVyIiBjbGFzcz0iY2VudGVyLXNuYXAtcmVjZWl2ZXIg
aW52YWxpZENvbnRhaW5lciI+CisgICAgICAgIDxkaXYgY2xhc3M9InNuYXAtcG9pbnQiPjwvZGl2
PgorICAgICAgICA8ZGl2IGNsYXNzPSJuZXN0ZWQiPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0i
c25hcC1wb2ludCI+PC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJu
ZXN0ZWQiPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0ibmVzdGVkIj4KKyAgICAgICAgICAgICAg
ICA8ZGl2IGNsYXNzPSJzbmFwLXBvaW50Ij48L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAg
ICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKyAgICA8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2Vz
L2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254900</attachid>
            <date>2015-06-15 14:49:23 -0700</date>
            <delta_ts>2015-06-15 15:41:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-145843-20150615144850.patch</filename>
            <type>text/plain</type>
            <size>24585</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NTU1MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBACisyMDE1LTA2LTE1ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIENTUyBTY3JvbGwgU25hcCAt
IHN1cHBvcnQgc25hcHBpbmcgdG8gbmVzdGVkIGVsZW1lbnRzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDU4NDMKKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzIxMzM5NTgxPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRlc3RlZCBieSBjc3MzL3Njcm9sbC1zbmFwL25lc3RlZC1lbGVtZW50cy5odG1sCisK
KyAgICAgICAgVGhlIFNjcm9sbCBTbmFwIFBvaW50IGltcGxlbWVudGF0aW9uIHdhcyBub3QgcHJv
cGVybHkgaGFuZGxpbmcgbmVzdGVkIGVsZW1lbnRzLgorICAgICAgICBUaGlzIGNvdWxkIGJlIHJl
c29sdmVkIGJ5IHJlY3Vyc2l2ZWx5IGNhbGxpbmcgJ2FwcGVuZENoaWxkU25hcE9mZnNldHMnLCBi
dXQgdGhpcworICAgICAgICBzZWVtZWQgbGlrZSBhbiBpbmVmZmljaWVudCBhcHByb2FjaCwgZXNw
ZWNpYWxseSBjb25zaWRlcmluZyBob3cgb2Z0ZW4gdGhpcyBtZXRob2QKKyAgICAgICAgaXMgY2Fs
bGVkIGR1cmluZyB2YXJpb3VzIHNjYWxpbmcgYW5kIG90aGVyIG9wZXJhdGlvbnMuCisgICAgICAg
IAorICAgICAgICBJbnN0ZWFkLCBkbyB0aGUgZm9sbG93aW5nOgorICAgICAgICAoMSkgQWRkIGEg
bmV3IEhhc2hNYXAgdG8gRG9jdW1lbnQgdGhhdCBtYXBzIHNjcm9sbGluZyBjb250YWluZXJzIHRv
IHNldHMgb2YKKyAgICAgICAgICAgIGVsZW1lbnRzLgorICAgICAgICAoMikgRHVyaW5nIFJlbmRl
ckVsZW1lbnQ6OnN0eWxlV2lsbENoYW5nZSwgaWRlbnRpZnkgdGhlIGVuY2xvc2luZyBzY3JvbGxp
bmcgY29udGFpbmVyCisgICAgICAgICAgICBmb3IgZWxlbWVudHMgd2l0aCBzY3JvbGwtc25hcC1j
b29yZGluYXRlcyBhbmQgYWRkIHRoZSBlbGVtZW50IHRvIHRoZSBEb2N1bWVudCdzCisgICAgICAg
ICAgICBkYXRhIHN0b3JlIGZvciB0aGF0IHNjcm9sbGluZyBjb250YWluZXIuCisgICAgICAgICgz
KSBXaGVuIHBlcmZvcm1pbmcgJ2FwcGVuZENoaWxkU25hcE9mZnNldHMnLCByZWZlciB0byB0aGUg
SGFzaFNldCBvZiBlbGVtZW50cyByZWxldmFudAorICAgICAgICAgICAgdG8gdGhlIGN1cnJlbnQg
c2Nyb2xsaW5nIGNvbnRhaW5lciByYXRoZXIgdGhhbiB3YWxraW5nIHRoZSBET00gdG8gZmluZCB0
aGVtLgorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjphZGRFbGVtZW50VG9TY3JvbGxTbmFwQ29udGFpbmVyKTogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudDo6ZWxlbWVudHNGb3JTY3JvbGxTbmFwQ29udGFpbmVyKTogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVtb3ZlRWxlbWVudEZyb21TY3JvbGxT
bmFwQ29udGFpbmVyKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YWRkRWxl
bWVudE5lZWRpbmdTY3JvbGxTbmFwQ29udGFpbmVyUmVnaXN0cmF0aW9uKTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YWRkRWxlbWVudE5lZWRpbmdTY3JvbGxTbmFwQ29udGFp
bmVyVW5yZWdpc3RyYXRpb24pOiBBZGRlZC4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAg
ICAgICAgKiBwYWdlL3Njcm9sbGluZy9BeGlzU2Nyb2xsU25hcE9mZnNldHMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6YXBwZW5kQ2hpbGRTbmFwT2Zmc2V0cyk6IENoZWNrIHRoZSBIYXNoU2V0IGZv
ciB0aGUgY3VycmVudCBzY3JvbGxpbmcgY29udGFpbmVyCisgICAgICAgIHRvIGZpbmQgc2Nyb2xs
LXNuYXAtY29vcmRpbmF0ZXMsIHJhdGhlciB0aGFuIHdhbGtpbmcgdGhlIERPTSB0byBmaW5kIHRo
ZW0uCisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVTbmFwT2Zmc2V0c0ZvclNjcm9sbGFibGVBcmVh
KTogSWYgYW55IGVsZW1lbnRzIG5lZWQgdG8gYmUgcmVnaXN0ZXJlZCBvcgorICAgICAgICB1bnJl
Z2lzdGVyZWQgZnJvbSB0aGVpciByZXNwZWN0aXZlIHNjcm9sbGluZyBjb250YWluZXJzLCBkbyBz
by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpmaW5kRW5jbG9zaW5nU2Nyb2xsYWJsZUNvbnRhaW5lcik6IE5ldyBoZWxwZXIgZnVuY3Rp
b24uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50Ojp+UmVuZGVyRWxlbWVudCk6IFJl
bW92ZSBlbGVtZW50cyBmcm9tIERvY3VtZW50IHNjcm9sbCBzbmFwCisgICAgICAgIGNvbnRhaW5l
ci4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OnN0eWxlV2lsbENoYW5nZSk6IElm
IHRoZSBjdXJyZW50IGVsZW1lbnQgaGFzIHNjcm9sbC1zbmFwLWNvb3JkaW5hdGUKKyAgICAgICAg
ZGVmaW5lZCwgcmVtZW1iZXIgaXQgZm9yIGxhdGVyIHNvIHdlIGNhbiByZWdpc3RlciBpdCB3aXRo
IHRoZSByZWxldmFudCBzY3JvbGxpbmcgY29udGFpbmVyCisgICAgICAgIGFmdGVyIGxheW91dCBj
b21wbGV0ZXMuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50Ojp3aWxsQmVSZW1vdmVk
RnJvbVRyZWUpOiBVbnJlZ2lzdGVyIHRoZSBjdXJyZW50IGVsZW1lbnQgZnJvbSBpdHMKKyAgICAg
ICAgcmVsZXZhbnQgc2Nyb2xsaW5nIGNvbnRhaW5lci4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckVsZW1lbnQ6OmZpbmRFbmNsb3NpbmdTY3JvbGxhYmxlQ29udGFpbmVyKTogQWRkZWQuIExvY2F0
ZSB0aGUgcmVsZXZhbnQKKyAgICAgICAgc2Nyb2xsaW5nIGNvbnRhaW5lciBmb3IgdGhlIGN1cnJl
bnQgb2JqZWN0LgorCiAyMDE1LTA2LTE1ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KIAogICAgICAgICBbU09VUF0gTW92ZSBXZWJLaXRTb3VwUmVxdWVzdEdlbmVy
aWMgdG8gcGxhdGZvcm0gbGF5ZXIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNp
b24gMTg1NTUyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMyw3ICszLDcgQEAKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0
byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIg
KG11ZWxsZXJAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlh
a292IChhcEB3ZWJraXQub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3LCAyMDA4LCAyMDA5LCAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwg
MjAwOSwgMjAxMSwgMjAxMiwgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKICAqIENvcHlyaWdo
dCAoQykgMjAwOCwgMjAwOSwgMjAxMSwgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQpAQCAtNjY2MSw0ICs2NjYxLDU2IEBAIFNob3VsZE9wZW5FeHRlcm5h
bFVSTHNQb2xpY3kgRG9jdW1lbnQ6OnMKICAgICByZXR1cm4gU2hvdWxkT3BlbkV4dGVybmFsVVJM
c1BvbGljeTo6U2hvdWxkTm90QWxsb3c7CiB9CiAKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQ
KQordm9pZCBEb2N1bWVudDo6YWRkRWxlbWVudFRvU2Nyb2xsU25hcENvbnRhaW5lcihjb25zdCBS
ZW5kZXJFbGVtZW50KiBzY3JvbGxTbmFwRWxlbWVudCwgY29uc3QgUmVuZGVyRWxlbWVudCogc2Ny
b2xsU25hcENvbnRhaW5lcikKK3sKKyAgICBpZiAoIXNjcm9sbFNuYXBDb250YWluZXIpCisgICAg
ICAgIHJldHVybjsKKworICAgIGF1dG8mIGNvbnRhaW5lckVsZW1lbnRzID0gbV9zY3JvbGxTbmFw
UmVuZGVyRWxlbWVudHNGb3JDb250YWluZXJzLmFkZChzY3JvbGxTbmFwQ29udGFpbmVyLCBIYXNo
U2V0PGNvbnN0IFJlbmRlckVsZW1lbnQqPigpKS5pdGVyYXRvci0+dmFsdWU7CisgICAgY29udGFp
bmVyRWxlbWVudHMuYWRkKHNjcm9sbFNuYXBFbGVtZW50KTsKK30KKworY29uc3QgSGFzaFNldDxj
b25zdCBSZW5kZXJFbGVtZW50Kj4qIERvY3VtZW50OjplbGVtZW50c0ZvclNjcm9sbFNuYXBDb250
YWluZXIoY29uc3QgUmVuZGVyRWxlbWVudCogc2Nyb2xsU25hcENvbnRhaW5lcikKK3sKKyAgICBp
ZiAoIXNjcm9sbFNuYXBDb250YWluZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
YXV0byBjb250YWluZXJFbGVtZW50c0l0ZXJhdG9yID0gbV9zY3JvbGxTbmFwUmVuZGVyRWxlbWVu
dHNGb3JDb250YWluZXJzLmZpbmQoc2Nyb2xsU25hcENvbnRhaW5lcik7CisgICAgaWYgKGNvbnRh
aW5lckVsZW1lbnRzSXRlcmF0b3IgPT0gbV9zY3JvbGxTbmFwUmVuZGVyRWxlbWVudHNGb3JDb250
YWluZXJzLmVuZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiAmY29u
dGFpbmVyRWxlbWVudHNJdGVyYXRvci0+dmFsdWU7Cit9CisKK3ZvaWQgRG9jdW1lbnQ6OnJlbW92
ZUVsZW1lbnRGcm9tU2Nyb2xsU25hcENvbnRhaW5lcihjb25zdCBSZW5kZXJFbGVtZW50KiBzY3Jv
bGxTbmFwRWxlbWVudCwgY29uc3QgUmVuZGVyRWxlbWVudCogc2Nyb2xsU25hcENvbnRhaW5lcikK
K3sKKyAgICBpZiAoIXNjcm9sbFNuYXBDb250YWluZXIpCisgICAgICAgIHJldHVybjsKKworICAg
IGF1dG8gY29udGFpbmVyRWxlbWVudHNJdGVyYXRvciA9IG1fc2Nyb2xsU25hcFJlbmRlckVsZW1l
bnRzRm9yQ29udGFpbmVycy5maW5kKHNjcm9sbFNuYXBDb250YWluZXIpOworICAgIGlmIChjb250
YWluZXJFbGVtZW50c0l0ZXJhdG9yID09IG1fc2Nyb2xsU25hcFJlbmRlckVsZW1lbnRzRm9yQ29u
dGFpbmVycy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGNvbnRhaW5lckVsZW1l
bnRzSXRlcmF0b3ItPnZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29u
dGFpbmVyRWxlbWVudHNJdGVyYXRvci0+dmFsdWUucmVtb3ZlKHNjcm9sbFNuYXBFbGVtZW50KTsK
KworICAgIGlmIChjb250YWluZXJFbGVtZW50c0l0ZXJhdG9yLT52YWx1ZS5pc0VtcHR5KCkpCisg
ICAgICAgIG1fc2Nyb2xsU25hcFJlbmRlckVsZW1lbnRzRm9yQ29udGFpbmVycy5yZW1vdmUoc2Ny
b2xsU25hcENvbnRhaW5lcik7Cit9CisKK3ZvaWQgRG9jdW1lbnQ6OmFkZEVsZW1lbnROZWVkaW5n
U2Nyb2xsU25hcENvbnRhaW5lclJlZ2lzdHJhdGlvbihjb25zdCBSZW5kZXJFbGVtZW50KiBlbGVt
ZW50KQoreworICAgIG1fc2Nyb2xsU25hcFJlbmRlckVsZW1lbnRzVG9CZVJlZ2lzdGVyZWQuYWRk
KGVsZW1lbnQpOworfQorCit2b2lkIERvY3VtZW50OjphZGRFbGVtZW50TmVlZGluZ1Njcm9sbFNu
YXBDb250YWluZXJVbnJlZ2lzdHJhdGlvbihjb25zdCBSZW5kZXJFbGVtZW50KiBlbGVtZW50KQor
eworICAgIG1fc2Nyb2xsU25hcFJlbmRlckVsZW1lbnRzVG9CZVVucmVnaXN0ZXJlZC5hZGQoZWxl
bWVudCk7Cit9CisKKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuaAkocmV2aXNpb24gMTg1NTUyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3IEBACiAgKiAgICAgICAgICAgKEMp
IDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMp
IDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIw
MDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykKLSAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMiwgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTIsIDIwMTMsIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNo
IE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxl
LmNvbS8pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KQEAgLTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlIDxjaHJvbm8+CiAj
aW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CkBAIC0xMjU4LDYgKzEyNTksMTggQEAg
cHVibGljOgogCiAgICAgU2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSBzaG91bGRPcGVuRXh0
ZXJuYWxVUkxzUG9saWN5VG9Qcm9wYWdhdGUoKSBjb25zdDsKIAorI2lmIEVOQUJMRShDU1NfU0NS
T0xMX1NOQVApCisgICAgdm9pZCBhZGRFbGVtZW50VG9TY3JvbGxTbmFwQ29udGFpbmVyKGNvbnN0
IFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJFbGVtZW50Kik7CisgICAgdm9pZCByZW1vdmVF
bGVtZW50RnJvbVNjcm9sbFNuYXBDb250YWluZXIoY29uc3QgUmVuZGVyRWxlbWVudCosIGNvbnN0
IFJlbmRlckVsZW1lbnQqKTsKKyAgICBjb25zdCBIYXNoU2V0PGNvbnN0IFJlbmRlckVsZW1lbnQq
PiogZWxlbWVudHNGb3JTY3JvbGxTbmFwQ29udGFpbmVyKGNvbnN0IFJlbmRlckVsZW1lbnQqKTsK
KworICAgIHZvaWQgYWRkRWxlbWVudE5lZWRpbmdTY3JvbGxTbmFwQ29udGFpbmVyUmVnaXN0cmF0
aW9uKGNvbnN0IFJlbmRlckVsZW1lbnQqKTsKKyAgICBIYXNoU2V0PGNvbnN0IFJlbmRlckVsZW1l
bnQqPiYgZWxlbWVudHNOZWVkaW5nUmVnaXN0cmF0aW9uKCkgeyByZXR1cm4gbV9zY3JvbGxTbmFw
UmVuZGVyRWxlbWVudHNUb0JlUmVnaXN0ZXJlZDsgfQorCisgICAgdm9pZCBhZGRFbGVtZW50TmVl
ZGluZ1Njcm9sbFNuYXBDb250YWluZXJVbnJlZ2lzdHJhdGlvbihjb25zdCBSZW5kZXJFbGVtZW50
Kik7CisgICAgSGFzaFNldDxjb25zdCBSZW5kZXJFbGVtZW50Kj4mIGVsZW1lbnRzTmVlZGluZ1Vu
cmVnaXN0cmF0aW9uKCkgeyByZXR1cm4gbV9zY3JvbGxTbmFwUmVuZGVyRWxlbWVudHNUb0JlVW5y
ZWdpc3RlcmVkOyB9CisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIGVudW0gQ29uc3RydWN0aW9u
RmxhZ3MgeyBTeW50aGVzaXplZCA9IDEsIE5vblJlbmRlcmVkUGxhY2Vob2xkZXIgPSAxIDw8IDEg
fTsKICAgICBEb2N1bWVudChGcmFtZSosIGNvbnN0IFVSTCYsIHVuc2lnbmVkID0gRGVmYXVsdERv
Y3VtZW50Q2xhc3MsIHVuc2lnbmVkIGNvbnN0cnVjdGlvbkZsYWdzID0gMCk7CkBAIC0xNzA2LDYg
KzE3MTksMTIgQEAgcHJpdmF0ZToKICAgICB0eXBlZGVmIEhhc2hNYXA8V2ViQ29yZTo6TWVkaWFQ
bGF5YmFja1RhcmdldENsaWVudCosIHVpbnQ2NF90PiBUYXJnZXRDbGllbnRUb0lkTWFwOwogICAg
IFRhcmdldENsaWVudFRvSWRNYXAgbV9jbGllbnRUb0lETWFwOwogI2VuZGlmCisKKyNpZiBFTkFC
TEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIEhhc2hTZXQ8Y29uc3QgUmVuZGVyRWxlbWVudCo+IG1f
c2Nyb2xsU25hcFJlbmRlckVsZW1lbnRzVG9CZVJlZ2lzdGVyZWQ7CisgICAgSGFzaFNldDxjb25z
dCBSZW5kZXJFbGVtZW50Kj4gbV9zY3JvbGxTbmFwUmVuZGVyRWxlbWVudHNUb0JlVW5yZWdpc3Rl
cmVkOworICAgIEhhc2hNYXA8Y29uc3QgUmVuZGVyRWxlbWVudCosIEhhc2hTZXQ8Y29uc3QgUmVu
ZGVyRWxlbWVudCo+PiBtX3Njcm9sbFNuYXBSZW5kZXJFbGVtZW50c0ZvckNvbnRhaW5lcnM7Cisj
ZW5kaWYKIH07CiAKIGlubGluZSB2b2lkIERvY3VtZW50Ojpub3RpZnlSZW1vdmVQZW5kaW5nU2hl
ZXRJZk5lZWRlZCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9BeGlzU2Ny
b2xsU25hcE9mZnNldHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5jcHAJKHJldmlzaW9uIDE4NTU1MikKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDI4ICs0MCwzOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0
YXRpYyB2b2lkIGFwcGVuZENoaWxkU25hcE9mZnNldHMoSFRNTEVsZW1lbnQmIHBhcmVudCwgYm9v
bCBzaG91bGRBZGRIb3Jpem9udGFsQ2hpbGRPZmZzZXRzLCBWZWN0b3I8TGF5b3V0VW5pdD4mIGhv
cml6b250YWxTbmFwT2Zmc2V0U3Vic2VxdWVuY2UsIGJvb2wgc2hvdWxkQWRkVmVydGljYWxDaGls
ZE9mZnNldHMsIFZlY3RvcjxMYXlvdXRVbml0PiYgdmVydGljYWxTbmFwT2Zmc2V0U3Vic2VxdWVu
Y2UpCiB7Ci0gICAgLy8gRklYTUU6IEluc3RlYWQgb2YgdHJhdmVyc2luZyBhbGwgY2hpbGRyZW4s
IHJlZ2lzdGVyIGNoaWxkcmVuIHdpdGggc25hcCBjb29yZGluYXRlcyBiZWZvcmUgYXBwZW5kaW5n
IHRvIHNuYXBPZmZzZXRTdWJzZXF1ZW5jZS4KLSAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRy
ZW5PZlR5cGU8RWxlbWVudD4ocGFyZW50KSkgewotICAgICAgICBpZiAoUmVuZGVyQm94KiBib3gg
PSBjaGlsZC5yZW5kZXJCb3goKSkgewotICAgICAgICAgICAgY29uc3QgYXV0byYgc2Nyb2xsU25h
cENvb3JkaW5hdGVzID0gYm94LT5zdHlsZSgpLnNjcm9sbFNuYXBDb29yZGluYXRlcygpOwotICAg
ICAgICAgICAgaWYgKHNjcm9sbFNuYXBDb29yZGluYXRlcy5pc0VtcHR5KCkpCi0gICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgQVNTRVJUKHBhcmVudC5yZW5kZXJlcigpKTsKKyAgICBEb2N1
bWVudCYgZG9jdW1lbnQgPSBwYXJlbnQucmVuZGVyZXIoKS0+ZG9jdW1lbnQoKTsKKworICAgIGF1
dG8qIGVsZW1lbnRzID0gZG9jdW1lbnQuZWxlbWVudHNGb3JTY3JvbGxTbmFwQ29udGFpbmVyKHBh
cmVudC5yZW5kZXJlcigpKTsKKyAgICBpZiAoIWVsZW1lbnRzKQorICAgICAgICByZXR1cm47CiAK
LSAgICAgICAgICAgIExheW91dFJlY3Qgdmlld1NpemUgPSBib3gtPmNvbnRlbnRCb3hSZWN0KCk7
Ci0gICAgICAgICAgICBMYXlvdXRVbml0IHZpZXdXaWR0aCA9IHZpZXdTaXplLndpZHRoKCk7Ci0g
ICAgICAgICAgICBMYXlvdXRVbml0IHZpZXdIZWlnaHQgPSB2aWV3U2l6ZS5oZWlnaHQoKTsKLSAg
ICAgICAgICAgIEZsb2F0UG9pbnQgcG9zaXRpb24gPSBib3gtPmxvY2FsVG9Db250YWluZXJQb2lu
dChGbG9hdFBvaW50KCksIHBhcmVudC5yZW5kZXJCb3goKSk7Ci0gICAgICAgICAgICBMYXlvdXRV
bml0IGxlZnQgPSBwb3NpdGlvbi54KCk7Ci0gICAgICAgICAgICBMYXlvdXRVbml0IHRvcCA9IHBv
c2l0aW9uLnkoKTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgY29vcmRpbmF0ZSA6IHNjcm9sbFNu
YXBDb29yZGluYXRlcykgewotICAgICAgICAgICAgICAgIExheW91dFVuaXQgbGFzdFBvdGVudGlh
bFNuYXBQb3NpdGlvblggPSBsZWZ0ICsgdmFsdWVGb3JMZW5ndGgoY29vcmRpbmF0ZS53aWR0aCgp
LCB2aWV3V2lkdGgpOwotICAgICAgICAgICAgICAgIGlmIChzaG91bGRBZGRIb3Jpem9udGFsQ2hp
bGRPZmZzZXRzICYmIGxhc3RQb3RlbnRpYWxTbmFwUG9zaXRpb25YID4gMCkKLSAgICAgICAgICAg
ICAgICAgICAgaG9yaXpvbnRhbFNuYXBPZmZzZXRTdWJzZXF1ZW5jZS5hcHBlbmQobGFzdFBvdGVu
dGlhbFNuYXBQb3NpdGlvblgpOwotCi0gICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBsYXN0UG90
ZW50aWFsU25hcFBvc2l0aW9uWSA9IHRvcCArIHZhbHVlRm9yTGVuZ3RoKGNvb3JkaW5hdGUuaGVp
Z2h0KCksIHZpZXdIZWlnaHQpOwotICAgICAgICAgICAgICAgIGlmIChzaG91bGRBZGRWZXJ0aWNh
bENoaWxkT2Zmc2V0cyAmJiBsYXN0UG90ZW50aWFsU25hcFBvc2l0aW9uWSA+IDApCi0gICAgICAg
ICAgICAgICAgICAgIHZlcnRpY2FsU25hcE9mZnNldFN1YnNlcXVlbmNlLmFwcGVuZChsYXN0UG90
ZW50aWFsU25hcFBvc2l0aW9uWSk7Ci0gICAgICAgICAgICB9CisgICAgZm9yIChhdXRvJiBjaGls
ZCA6ICplbGVtZW50cykgeworICAgICAgICBBU1NFUlQoY2hpbGQpOworICAgICAgICBBU1NFUlQo
aXM8UmVuZGVyQm94PihjaGlsZCkpOworICAgICAgICBjb25zdCBSZW5kZXJCb3gqIGJveCA9IGRv
d25jYXN0PFJlbmRlckJveD4oY2hpbGQpOworICAgICAgICBpZiAoIWJveCkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgIGNvbnN0IGF1dG8mIHNjcm9sbFNuYXBDb29yZGluYXRlcyA9
IGJveC0+c3R5bGUoKS5zY3JvbGxTbmFwQ29vcmRpbmF0ZXMoKTsKKyAgICAgICAgaWYgKHNjcm9s
bFNuYXBDb29yZGluYXRlcy5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgCisgICAgICAgIExheW91dFJlY3Qgdmlld1NpemUgPSBib3gtPmNvbnRlbnRCb3hSZWN0KCk7
CisgICAgICAgIExheW91dFVuaXQgdmlld1dpZHRoID0gdmlld1NpemUud2lkdGgoKTsKKyAgICAg
ICAgTGF5b3V0VW5pdCB2aWV3SGVpZ2h0ID0gdmlld1NpemUuaGVpZ2h0KCk7CisgICAgICAgIEZs
b2F0UG9pbnQgcG9zaXRpb24gPSBib3gtPmxvY2FsVG9Db250YWluZXJQb2ludChGbG9hdFBvaW50
KCksIHBhcmVudC5yZW5kZXJCb3goKSk7CisgICAgICAgIExheW91dFVuaXQgbGVmdCA9IHBvc2l0
aW9uLngoKTsKKyAgICAgICAgTGF5b3V0VW5pdCB0b3AgPSBwb3NpdGlvbi55KCk7CisgICAgICAg
IGZvciAoYXV0byYgY29vcmRpbmF0ZSA6IHNjcm9sbFNuYXBDb29yZGluYXRlcykgeworICAgICAg
ICAgICAgTGF5b3V0VW5pdCBsYXN0UG90ZW50aWFsU25hcFBvc2l0aW9uWCA9IGxlZnQgKyB2YWx1
ZUZvckxlbmd0aChjb29yZGluYXRlLndpZHRoKCksIHZpZXdXaWR0aCk7CisgICAgICAgICAgICBp
ZiAoc2hvdWxkQWRkSG9yaXpvbnRhbENoaWxkT2Zmc2V0cyAmJiBsYXN0UG90ZW50aWFsU25hcFBv
c2l0aW9uWCA+IDApCisgICAgICAgICAgICAgICAgaG9yaXpvbnRhbFNuYXBPZmZzZXRTdWJzZXF1
ZW5jZS5hcHBlbmQobGFzdFBvdGVudGlhbFNuYXBQb3NpdGlvblgpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBMYXlvdXRVbml0IGxhc3RQb3RlbnRpYWxTbmFwUG9zaXRpb25ZID0gdG9wICsg
dmFsdWVGb3JMZW5ndGgoY29vcmRpbmF0ZS5oZWlnaHQoKSwgdmlld0hlaWdodCk7CisgICAgICAg
ICAgICBpZiAoc2hvdWxkQWRkVmVydGljYWxDaGlsZE9mZnNldHMgJiYgbGFzdFBvdGVudGlhbFNu
YXBQb3NpdGlvblkgPiAwKQorICAgICAgICAgICAgICAgIHZlcnRpY2FsU25hcE9mZnNldFN1YnNl
cXVlbmNlLmFwcGVuZChsYXN0UG90ZW50aWFsU25hcFBvc2l0aW9uWSk7CiAgICAgICAgIH0KICAg
ICB9CiB9CkBAIC0xMzEsNiArMTQxLDE3IEBAIHZvaWQgdXBkYXRlU25hcE9mZnNldHNGb3JTY3Jv
bGxhYmxlQXJlYSgKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIC8vIFRha2UgY2FyZSBv
ZiBhbnkgYm9va2tlZXBpbmcgZHVlIHRvIHN0eWxlIGNoYW5nZXMuCisgICAgQVNTRVJUKHNjcm9s
bGluZ0VsZW1lbnQucmVuZGVyZXIoKSk7CisgICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gc2Nyb2xs
aW5nRWxlbWVudC5yZW5kZXJlcigpLT5kb2N1bWVudCgpOworICAgIGZvciAoYXV0byYgY2hpbGQg
OiBkb2N1bWVudC5lbGVtZW50c05lZWRpbmdSZWdpc3RyYXRpb24oKSkKKyAgICAgICAgZG9jdW1l
bnQuYWRkRWxlbWVudFRvU2Nyb2xsU25hcENvbnRhaW5lcihjaGlsZCwgY2hpbGQtPmZpbmRFbmNs
b3NpbmdTY3JvbGxhYmxlQ29udGFpbmVyKCkpOworICAgIGRvY3VtZW50LmVsZW1lbnRzTmVlZGlu
Z1JlZ2lzdHJhdGlvbigpLmNsZWFyKCk7CisKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDogZG9jdW1l
bnQuZWxlbWVudHNOZWVkaW5nVW5yZWdpc3RyYXRpb24oKSkKKyAgICAgICAgZG9jdW1lbnQucmVt
b3ZlRWxlbWVudEZyb21TY3JvbGxTbmFwQ29udGFpbmVyKGNoaWxkLCBjaGlsZC0+ZmluZEVuY2xv
c2luZ1Njcm9sbGFibGVDb250YWluZXIoKSk7CisgICAgZG9jdW1lbnQuZWxlbWVudHNOZWVkaW5n
VW5yZWdpc3RyYXRpb24oKS5jbGVhcigpOworCiAgICAgTGF5b3V0UmVjdCB2aWV3U2l6ZSA9IHNj
cm9sbGluZ0VsZW1lbnRCb3guY29udGVudEJveFJlY3QoKTsKICAgICBMYXlvdXRVbml0IHZpZXdX
aWR0aCA9IHZpZXdTaXplLndpZHRoKCk7CiAgICAgTGF5b3V0VW5pdCB2aWV3SGVpZ2h0ID0gdmll
d1NpemUuaGVpZ2h0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAxODU1NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwNCw2ICs5MDQsMTUgQEAgdm9p
ZCBSZW5kZXJFbGVtZW50OjpzdHlsZVdpbGxDaGFuZ2UoU3R5bAogICAgICAgICB9CiAgICAgfQog
CisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICBpZiAoIW5ld1N0eWxlLnNjcm9sbFNu
YXBDb29yZGluYXRlcygpLmlzRW1wdHkoKSB8fCAob2xkU3R5bGUgJiYgIW9sZFN0eWxlLT5zY3Jv
bGxTbmFwQ29vcmRpbmF0ZXMoKS5pc0VtcHR5KCkpKSB7CisgICAgICAgIGlmIChuZXdTdHlsZS5z
Y3JvbGxTbmFwQ29vcmRpbmF0ZXMoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICBkb2N1bWVudCgp
LmFkZEVsZW1lbnROZWVkaW5nU2Nyb2xsU25hcENvbnRhaW5lclVucmVnaXN0cmF0aW9uKHRoaXMp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBkb2N1bWVudCgpLmFkZEVsZW1lbnROZWVkaW5n
U2Nyb2xsU25hcENvbnRhaW5lclJlZ2lzdHJhdGlvbih0aGlzKTsKKyAgICB9CisjZW5kaWYKKwog
ICAgIGlmIChpc1Jvb3QoKSB8fCBpc0JvZHkoKSkKICAgICAgICAgdmlldygpLmZyYW1lVmlldygp
LnVwZGF0ZUV4dGVuZEJhY2tncm91bmRJZk5lY2Vzc2FyeSgpOwogfQpAQCAtMTA1OCw2ICsxMDY3
LDE0IEBAIHZvaWQgUmVuZGVyRWxlbWVudDo6d2lsbEJlUmVtb3ZlZEZyb21UcmUKICAgICBpZiAo
YXV0byogY29udGFpbmVyRmxvd1RocmVhZCA9IHBhcmVudCgpLT5yZW5kZXJOYW1lZEZsb3dUaHJl
YWRXcmFwcGVyKCkpCiAgICAgICAgIGNvbnRhaW5lckZsb3dUaHJlYWQtPnJlbW92ZUZsb3dDaGls
ZCgqdGhpcyk7CiAKKyAgICAKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIGlmICgh
bV9zdHlsZS0+c2Nyb2xsU25hcENvb3JkaW5hdGVzKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIGlm
IChjb25zdCBSZW5kZXJFbGVtZW50KiBzY3JvbGxTbmFwQ29udGFpbmVyID0gZmluZEVuY2xvc2lu
Z1Njcm9sbGFibGVDb250YWluZXIoKSkKKyAgICAgICAgICAgIGRvY3VtZW50KCkucmVtb3ZlRWxl
bWVudEZyb21TY3JvbGxTbmFwQ29udGFpbmVyKHRoaXMsIHNjcm9sbFNuYXBDb250YWluZXIpOwor
ICAgIH0KKyNlbmRpZgorCiAgICAgUmVuZGVyT2JqZWN0Ojp3aWxsQmVSZW1vdmVkRnJvbVRyZWUo
KTsKIH0KIApAQCAtMTc2MSw0ICsxNzc4LDE4IEBAIGNvbnN0IFJlbmRlckVsZW1lbnQqIFJlbmRl
ckVsZW1lbnQ6OmVuY2wKICAgICByZXR1cm4gY3VycmVudDsKIH0KIAorY29uc3QgUmVuZGVyRWxl
bWVudCogMTAxMDAoKSBjb25zdAoreworICAgIGZvciAoY29uc3QgUmVuZGVyRWxlbWVudCogY2Fu
ZGlkYXRlID0gdGhpczsgY2FuZGlkYXRlOyBjYW5kaWRhdGUgPSBjYW5kaWRhdGUtPnBhcmVudCgp
KSB7CisgICAgICAgIGlmICghaXM8UmVuZGVyQm94PigqY2FuZGlkYXRlKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgY29uc3QgUmVuZGVyQm94KiBib3ggPSBkb3du
Y2FzdDxSZW5kZXJCb3g+KGNhbmRpZGF0ZSk7CisgICAgICAgIGlmIChib3ggJiYgYm94LT5oYXNP
dmVyZmxvd0NsaXAoKSkKKyAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGU7CisgICAgfQorICAg
IAorICAgIHJldHVybiBudWxscHRyOworfQorCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJFbGVtZW50LmgJKHJldmlzaW9uIDE4NTU1MikKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwOCw2ICsyMDgs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRJc0NTU0FuaW1hdGluZyhib29sIGIpIHsgbV9pc0NT
U0FuaW1hdGluZyA9IGI7IH0KICAgICAKICAgICBjb25zdCBSZW5kZXJFbGVtZW50KiBlbmNsb3Np
bmdSZW5kZXJlcldpdGhUZXh0RGVjb3JhdGlvbihUZXh0RGVjb3JhdGlvbiwgYm9vbCBmaXJzdExp
bmUpIGNvbnN0OworICAgIGNvbnN0IFJlbmRlckVsZW1lbnQqIGZpbmRFbmNsb3NpbmdTY3JvbGxh
YmxlQ29udGFpbmVyKCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICBlbnVtIEJhc2VUeXBlRmxh
Z3MgewpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTg1NTUyKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTUtMDYtMTUgIEJyZW50IEZ1bGdo
YW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgQ1NTIFNjcm9sbCBTbmFwIC0gc3Vw
cG9ydCBzbmFwcGluZyB0byBuZXN0ZWQgZWxlbWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NTg0MworICAgICAgICA8cmRhcjovL3Byb2JsZW0v
MjEzMzk1ODE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBjc3MzL3Njcm9sbC1zbmFwL25lc3RlZC1lbGVtZW50cy1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGNzczMvc2Nyb2xsLXNuYXAvbmVzdGVkLWVsZW1lbnRzLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGNzczMvc2Nyb2xsLXNuYXAvc2Nyb2xsLXNuYXAtb2Zmc2V0cy1leHBlY3Rl
ZC50eHQ6IFVwZGF0ZWQgdG8KKyAgICAgICAgICBhY2NvdW50IGZvciA1MCUvNTAlIHNjcm9sbC1z
bmFwLWNvb3JkaW5hdGVzLgorCiAyMDE1LTA2LTEzICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFj
aEBhcHBsZS5jb20+CiAKICAgICAgICAgQVg6IFdlYktpdCBleHBvc2VzIGFsbCBSdWJ5IFRleHQg
YXMgVW5rbm93biAoSmFwYW5lc2UgRVBVQiBhY2Nlc3NpYmlsaXR5IGJsb2NrZXIpCkluZGV4OiBM
YXlvdXRUZXN0cy9jc3MzL3Njcm9sbC1zbmFwL25lc3RlZC1lbGVtZW50cy1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvY3NzMy9zY3JvbGwtc25hcC9uZXN0ZWQtZWxlbWVu
dHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvY3NzMy9zY3JvbGwt
c25hcC9uZXN0ZWQtZWxlbWVudHMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsOSBAQAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CitTY3JvbGwtc25hcCBvZmZzZXRzIGZvciAnY29udGFpbmVyJzogdmVydGljYWwgPSB7IDAsIDEw
MSwgMjE4LCAzMzUsIDQ1MiwgNTY5LCA2ODYsIDgwMywgOTIwLCAxMDM3LCAxMTU0LCAxMjcxLCAx
Mzg4LCAxNTA1LCAxNjIyLCAxNzM5LCAxODU2LCAxOTczLCAyMDkwLCAyMjA3LCA0OTM4IH0KK1BB
U1MgU2Nyb2xsLXNuYXAgb2Zmc2V0cyBmb3IgJ2ludmFsaWRDb250YWluZXInOiBVTkRFRklORUQK
K1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4
OiBMYXlvdXRUZXN0cy9jc3MzL3Njcm9sbC1zbmFwL25lc3RlZC1lbGVtZW50cy5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2NzczMvc2Nyb2xsLXNuYXAvbmVzdGVkLWVsZW1lbnRzLmh0
bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9jc3MzL3Njcm9sbC1zbmFwL25lc3RlZC1l
bGVtZW50cy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU1IEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHRpdGxlPlNuYXAgcG9pbnRzIC0gbmVzdGVkIHNu
YXAgY29vcmRpbmF0ZXM8L3RpdGxlPgorICAgIDxzdHlsZT4KKyAgICAgICAgLnNjcm9sbGFibGUg
eworICAgICAgICAgICAgb3ZlcmZsb3c6IHNjcm9sbDsKKyAgICAgICAgICAgIC13ZWJraXQtb3Zl
cmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKKyAgICAgICAgICAgIGJvcmRlcjogMXB4IGRhc2hlZCBi
bGFjazsKKyAgICAgICAgICAgIGhlaWdodDogMzAwcHg7CisgICAgICAgICAgICBtYXJnaW46IDAg
MTBweDsKKyAgICAgICAgfQorICAgIAorICAgICAgICAuY2VudGVyLXNuYXAtcmVjZWl2ZXIgewor
ICAgICAgICAgICAgLXdlYmtpdC1zY3JvbGwtc25hcC10eXBlOiBtYW5kYXRvcnk7CisgICAgICAg
ICAgICAtd2Via2l0LXNjcm9sbC1zbmFwLWRlc3RpbmF0aW9uOiAwIDA7CisgICAgICAgIH0KKyAg
ICAKKyAgICAgICAgLnNuYXAtcG9pbnQgeworICAgICAgICAgICAgbWFyZ2luLXRvcDogMTAwcHg7
CisgICAgICAgICAgICB3aWR0aDogMTVweDsKKyAgICAgICAgICAgIGhlaWdodDogMTVweDsKKyAg
ICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOworICAgICAgICAgICAgLXdlYmtpdC1z
Y3JvbGwtc25hcC1jb29yZGluYXRlOiAwIDBweDsKKyAgICAgICAgfQorICAgIAorICAgICAgICAu
c25hcC1wb2ludDo6YWZ0ZXIgeworICAgICAgICAgICAgZm9udC1zaXplOiAxZW07CisgICAgICAg
ICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgICAgICAgICBjb250ZW50OiAnKyc7CisgICAg
ICAgIH0KKyAgICAKKyAgICAgICAgLm5lc3RlZCA+IC5zbmFwLXBvaW50IHsKKyAgICAgICAgICAg
IG1hcmdpbi1sZWZ0OiA1MHB4OworICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmVkOwor
ICAgICAgICB9CisgICAgICAgIC5uZXN0ZWQgPiAubmVzdGVkID4gLnNuYXAtcG9pbnQgeworICAg
ICAgICAgICAgbWFyZ2luLWxlZnQ6IDEwMHB4OworICAgICAgICAgICAgYm9yZGVyOiAxcHggc29s
aWQgYmx1ZTsKKyAgICAgICAgfQorICAgIAorICAgICAgICAubGFyZ2UtY29udGVudCB7CisgICAg
ICAgICAgICBoZWlnaHQ6IDMwMDBweDsKKyAgICAgICAgICAgIHdpZHRoOiAxMDAlOworICAgICAg
ICB9CisgICAgCisgICAgICAgIC5zbWFsbC1jb250ZW50IHsKKyAgICAgICAgICAgIGhlaWdodDog
MjAwcHg7CisgICAgICAgICAgICB3aWR0aDogMTAwJTsKKyAgICAgICAgfQorCisgICAgICAgIC5p
bnZhbGlkQ29udGFpbmVyIHsKKyAgICAgICAgICAgIGJvcmRlcjogMXB4IGRhc2hlZCBibGFjazsK
KyAgICAgICAgICAgIGhlaWdodDogMzAwcHg7CisgICAgICAgICAgICBtYXJnaW46IDAgMTBweDsK
KyAgICAgICAgICAgIG9wYWNpdHk6IDAuNTsKKyAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47
CisgICAgICAgIH0KKyAgICA8L3N0eWxlPgorICAgICAgICA8c2NyaXB0IHNyYz0iLi4vLi4vcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdD4KKyAgICAg
ICAgZnVuY3Rpb24gcnVuVGVzdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBjb250YWlu
ZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJyk7CisgICAgICAgICAgICBk
ZWJ1ZygiU2Nyb2xsLXNuYXAgb2Zmc2V0cyBmb3IgJ2NvbnRhaW5lcic6ICIgKyB3aW5kb3cuaW50
ZXJuYWxzLnNjcm9sbFNuYXBPZmZzZXRzKGNvbnRhaW5lcikpOworCisgICAgICAgICAgICB2YXIg
aW52YWxpZENvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnZhbGlkQ29udGFp
bmVyJyk7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoIlNj
cm9sbC1zbmFwIG9mZnNldHMgZm9yICdpbnZhbGlkQ29udGFpbmVyJzogIiArIHdpbmRvdy5pbnRl
cm5hbHMuc2Nyb2xsU25hcE9mZnNldHMoaW52YWxpZENvbnRhaW5lcikpOworICAgICAgICAgICAg
fSBjYXRjaChleCkgeworICAgICAgICAgICAgICAgIHRlc3RQYXNzZWQoIlNjcm9sbC1zbmFwIG9m
ZnNldHMgZm9yICdpbnZhbGlkQ29udGFpbmVyJzogVU5ERUZJTkVEIik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgICAgICAgICAgdGVzdFJ1bm5lci5u
b3RpZnlEb25lKCk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBvbkxvYWQoKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgICAg
ICAgICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CisgICAgICAgICAgICAgICAgdGVzdFJ1
bm5lci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxE
b25lKCk7CisgICAgICAgICAgICAgICAgc2V0VGltZW91dChydW5UZXN0LCAwKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9h
ZD0ib25Mb2FkKCk7Ij4KKyAgICA8ZGl2IGlkPSJjb250YWluZXIiIGNsYXNzPSJjZW50ZXItc25h
cC1yZWNlaXZlciBzY3JvbGxhYmxlIj4KKyAgICAgICAgPGRpdiBjbGFzcz0ic25hcC1wb2ludCI+
PC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9Im5lc3RlZCI+CisgICAgICAgICAgICA8ZGl2IGNs
YXNzPSJzbmFwLXBvaW50Ij48L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xh
c3M9Im5lc3RlZCI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJuZXN0ZWQiPgorICAgICAgICAg
ICAgICAgIDxkaXYgY2xhc3M9InNuYXAtcG9pbnQiPjwvZGl2PgorICAgICAgICAgICAgPC9kaXY+
CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJzbmFwLXBvaW50Ij48L2Rpdj4K
KyAgICAgICAgPGRpdiBjbGFzcz0ic25hcC1wb2ludCI+PC9kaXY+CisgICAgICAgIDxkaXYgY2xh
c3M9Im5lc3RlZCI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzbmFwLXBvaW50Ij48L2Rpdj4K
KyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9Im5lc3RlZCI+CisgICAgICAgICAg
ICA8ZGl2IGNsYXNzPSJuZXN0ZWQiPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNuYXAt
cG9pbnQiPjwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAg
ICA8ZGl2IGNsYXNzPSJuZXN0ZWQiPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0ic25hcC1wb2lu
dCI+PC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJzbmFwLXBvaW50
Ij48L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0ibmVzdGVkIj4KKyAgICAgICAgICAgIDxkaXYg
Y2xhc3M9InNuYXAtcG9pbnQiPjwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBj
bGFzcz0ic25hcC1wb2ludCI+PC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InNuYXAtcG9pbnQi
PjwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJuZXN0ZWQiPgorICAgICAgICAgICAgPGRpdiBj
bGFzcz0ic25hcC1wb2ludCI+PC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAgICAgPGRpdiBj
bGFzcz0ic25hcC1wb2ludCI+PC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9Im5lc3RlZCI+Cisg
ICAgICAgICAgICA8ZGl2IGNsYXNzPSJzbmFwLXBvaW50Ij48L2Rpdj4KKyAgICAgICAgPC9kaXY+
CisgICAgICAgIDxkaXYgY2xhc3M9Im5lc3RlZCI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJu
ZXN0ZWQiPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNuYXAtcG9pbnQiPjwvZGl2Pgor
ICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAgICAgPGRpdiBjbGFzcz0i
c25hcC1wb2ludCI+PC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9Im5lc3RlZCI+CisgICAgICAg
ICAgICA8ZGl2IGNsYXNzPSJzbmFwLXBvaW50Ij48L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAg
ICAgIDxkaXYgY2xhc3M9Im5lc3RlZCI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJuZXN0ZWQi
PgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNuYXAtcG9pbnQiPjwvZGl2PgorICAgICAg
ICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJsYXJnZS1j
b250ZW50Ij48L2Rpdj4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGlkPSJpbnZhbGlkQ29udGFpbmVy
IiBjbGFzcz0iY2VudGVyLXNuYXAtcmVjZWl2ZXIgaW52YWxpZENvbnRhaW5lciI+CisgICAgICAg
IDxkaXYgY2xhc3M9InNuYXAtcG9pbnQiPjwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJuZXN0
ZWQiPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0ic25hcC1wb2ludCI+PC9kaXY+CisgICAgICAg
IDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJuZXN0ZWQiPgorICAgICAgICAgICAgPGRpdiBj
bGFzcz0ibmVzdGVkIj4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzbmFwLXBvaW50Ij48
L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKyAg
ICA8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9jc3MzL3Njcm9sbC1zbmFwL3Nj
cm9sbC1zbmFwLW9mZnNldHMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2NzczMvc2Nyb2xsLXNuYXAvc2Nyb2xsLXNuYXAtb2Zmc2V0cy1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDE4NTU1MikKKysrIExheW91dFRlc3RzL2NzczMvc2Nyb2xsLXNuYXAvc2Nyb2xsLXNuYXAt
b2Zmc2V0cy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIsMTYgKzIsMTYgQEAgVGVz
dHMgdGhhdCB0aGUgc2Nyb2xsLXNuYXAgZmVhdHVyZSB3b3JrcwogIFBBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQotU2Nyb2xsLXNuYXAgb2Zmc2V0cyBmb3Ig
aG9yaXpvbnRhbFRhcmdldDogaG9yaXpvbnRhbCA9IHsgMCwgMzAsIDYwLCA5MCwgMTIwLCAxNTAg
fSwgdmVydGljYWwgPSB7IDAsIDE1IH0KLVNjcm9sbC1zbmFwIG9mZnNldHMgZm9yIHZlcnRpY2Fs
VGFyZ2V0OiBob3Jpem9udGFsID0geyAwLCAxNSB9LCB2ZXJ0aWNhbCA9IHsgMCwgMzAsIDYwLCA5
MCwgMTIwLCAxNTAgfQotU2Nyb2xsLXNuYXAgb2Zmc2V0cyBmb3IgaG9yaXpvbnRhbEJvcmRlcmVk
VGFyZ2V0OiBob3Jpem9udGFsID0geyAwLCAzMCwgNjAsIDkwLCAxMjAsIDE1MCB9LCB2ZXJ0aWNh
bCA9IHsgMCwgMTUgfQotU2Nyb2xsLXNuYXAgb2Zmc2V0cyBmb3IgdmVydGljYWxCb3JkZXJlZFRh
cmdldDogaG9yaXpvbnRhbCA9IHsgMCwgMTUgfSwgdmVydGljYWwgPSB7IDAsIDMwLCA2MCwgOTAs
IDEyMCwgMTUwIH0KLVNjcm9sbC1zbmFwIG9mZnNldHMgZm9yIGhvcml6b250YWxQYWRkZWRUYXJn
ZXQ6IGhvcml6b250YWwgPSB7IDAsIDMwLCA2MCwgOTAsIDEyMCwgMTUwLCAxNzAgfSwgdmVydGlj
YWwgPSB7IDAsIDM5IH0KLVNjcm9sbC1zbmFwIG9mZnNldHMgZm9yIHZlcnRpY2FsUGFkZGVkVGFy
Z2V0OiBob3Jpem9udGFsID0geyAwLCAzNSB9LCB2ZXJ0aWNhbCA9IHsgMCwgMzAsIDYwLCA5MCwg
MTIwLCAxNTAsIDE3NCB9Ci1TY3JvbGwtc25hcCBvZmZzZXRzIGZvciBob3Jpem9udGFsQm9yZGVy
ZWRQYWRkZWRUYXJnZXQ6IGhvcml6b250YWwgPSB7IDAsIDMwLCA2MCwgOTAsIDEyMCwgMTUwLCAx
NzAgfSwgdmVydGljYWwgPSB7IDAsIDM5IH0KLVNjcm9sbC1zbmFwIG9mZnNldHMgZm9yIHZlcnRp
Y2FsQm9yZGVyZWRQYWRkZWRUYXJnZXQ6IGhvcml6b250YWwgPSB7IDAsIDM1IH0sIHZlcnRpY2Fs
ID0geyAwLCAzMCwgNjAsIDkwLCAxMjAsIDE1MCwgMTc0IH0KLVNjcm9sbC1zbmFwIG9mZnNldHMg
Zm9yIGhvcml6b250YWxSb3RhdGVkVGFyZ2V0OiBob3Jpem9udGFsID0geyAwLCAzMCwgNjAsIDkw
LCAxMjAsIDE1MCwgMTcwIH0sIHZlcnRpY2FsID0geyAwLCAzOSB9Ci1TY3JvbGwtc25hcCBvZmZz
ZXRzIGZvciB2ZXJ0aWNhbFJvdGF0ZWRUYXJnZXQ6IGhvcml6b250YWwgPSB7IDAsIDM1IH0sIHZl
cnRpY2FsID0geyAwLCAzMCwgNjAsIDkwLCAxMjAsIDE1MCwgMTc0IH0KK1Njcm9sbC1zbmFwIG9m
ZnNldHMgZm9yIGhvcml6b250YWxUYXJnZXQ6IGhvcml6b250YWwgPSB7IDAsIDMwLCA2MCwgOTAs
IDEyMCwgMTUwIH0sIHZlcnRpY2FsID0geyAwLCA3LCAxNSB9CitTY3JvbGwtc25hcCBvZmZzZXRz
IGZvciB2ZXJ0aWNhbFRhcmdldDogaG9yaXpvbnRhbCA9IHsgMCwgNywgMTUgfSwgdmVydGljYWwg
PSB7IDAsIDMwLCA2MCwgOTAsIDEyMCwgMTUwIH0KK1Njcm9sbC1zbmFwIG9mZnNldHMgZm9yIGhv
cml6b250YWxCb3JkZXJlZFRhcmdldDogaG9yaXpvbnRhbCA9IHsgMCwgMzAsIDYwLCA5MCwgMTIw
LCAxNTAgfSwgdmVydGljYWwgPSB7IDAsIDcsIDE1IH0KK1Njcm9sbC1zbmFwIG9mZnNldHMgZm9y
IHZlcnRpY2FsQm9yZGVyZWRUYXJnZXQ6IGhvcml6b250YWwgPSB7IDAsIDcsIDE1IH0sIHZlcnRp
Y2FsID0geyAwLCAzMCwgNjAsIDkwLCAxMjAsIDE1MCB9CitTY3JvbGwtc25hcCBvZmZzZXRzIGZv
ciBob3Jpem9udGFsUGFkZGVkVGFyZ2V0OiBob3Jpem9udGFsID0geyAwLCAzMCwgNjAsIDkwLCAx
MjAsIDE1MCwgMTcwIH0sIHZlcnRpY2FsID0geyAwLCA3LCAzOSB9CitTY3JvbGwtc25hcCBvZmZz
ZXRzIGZvciB2ZXJ0aWNhbFBhZGRlZFRhcmdldDogaG9yaXpvbnRhbCA9IHsgMCwgNywgMzUgfSwg
dmVydGljYWwgPSB7IDAsIDMwLCA2MCwgOTAsIDEyMCwgMTUwLCAxNzQgfQorU2Nyb2xsLXNuYXAg
b2Zmc2V0cyBmb3IgaG9yaXpvbnRhbEJvcmRlcmVkUGFkZGVkVGFyZ2V0OiBob3Jpem9udGFsID0g
eyAwLCAzMCwgNjAsIDkwLCAxMjAsIDE1MCwgMTcwIH0sIHZlcnRpY2FsID0geyAwLCA3LCAzOSB9
CitTY3JvbGwtc25hcCBvZmZzZXRzIGZvciB2ZXJ0aWNhbEJvcmRlcmVkUGFkZGVkVGFyZ2V0OiBo
b3Jpem9udGFsID0geyAwLCA3LCAzNSB9LCB2ZXJ0aWNhbCA9IHsgMCwgMzAsIDYwLCA5MCwgMTIw
LCAxNTAsIDE3NCB9CitTY3JvbGwtc25hcCBvZmZzZXRzIGZvciBob3Jpem9udGFsUm90YXRlZFRh
cmdldDogaG9yaXpvbnRhbCA9IHsgMCwgMzAsIDYwLCA5MCwgMTIwLCAxNTAsIDE3MCB9LCB2ZXJ0
aWNhbCA9IHsgMCwgNywgMzkgfQorU2Nyb2xsLXNuYXAgb2Zmc2V0cyBmb3IgdmVydGljYWxSb3Rh
dGVkVGFyZ2V0OiBob3Jpem9udGFsID0geyAwLCA3LCAzNSB9LCB2ZXJ0aWNhbCA9IHsgMCwgMzAs
IDYwLCA5MCwgMTIwLCAxNTAsIDE3NCB9CiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
CiAKIFRFU1QgQ09NUExFVEUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254901</attachid>
            <date>2015-06-15 14:55:21 -0700</date>
            <delta_ts>2015-06-15 17:52:13 -0700</delta_ts>
            <desc>Patch v3 (Correct typo)</desc>
            <filename>bug-145843-20150615145447.patch</filename>
            <type>text/plain</type>
            <size>24627</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NTU1MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBACisyMDE1LTA2LTE1ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIENTUyBTY3JvbGwgU25hcCAt
IHN1cHBvcnQgc25hcHBpbmcgdG8gbmVzdGVkIGVsZW1lbnRzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDU4NDMKKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzIxMzM5NTgxPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRlc3RlZCBieSBjc3MzL3Njcm9sbC1zbmFwL25lc3RlZC1lbGVtZW50cy5odG1sCisK
KyAgICAgICAgVGhlIFNjcm9sbCBTbmFwIFBvaW50IGltcGxlbWVudGF0aW9uIHdhcyBub3QgcHJv
cGVybHkgaGFuZGxpbmcgbmVzdGVkIGVsZW1lbnRzLgorICAgICAgICBUaGlzIGNvdWxkIGJlIHJl
c29sdmVkIGJ5IHJlY3Vyc2l2ZWx5IGNhbGxpbmcgJ2FwcGVuZENoaWxkU25hcE9mZnNldHMnLCBi
dXQgdGhpcworICAgICAgICBzZWVtZWQgbGlrZSBhbiBpbmVmZmljaWVudCBhcHByb2FjaCwgZXNw
ZWNpYWxseSBjb25zaWRlcmluZyBob3cgb2Z0ZW4gdGhpcyBtZXRob2QKKyAgICAgICAgaXMgY2Fs
bGVkIGR1cmluZyB2YXJpb3VzIHNjYWxpbmcgYW5kIG90aGVyIG9wZXJhdGlvbnMuCisgICAgICAg
IAorICAgICAgICBJbnN0ZWFkLCBkbyB0aGUgZm9sbG93aW5nOgorICAgICAgICAoMSkgQWRkIGEg
bmV3IEhhc2hNYXAgdG8gRG9jdW1lbnQgdGhhdCBtYXBzIHNjcm9sbGluZyBjb250YWluZXJzIHRv
IHNldHMgb2YKKyAgICAgICAgICAgIGVsZW1lbnRzLgorICAgICAgICAoMikgRHVyaW5nIFJlbmRl
ckVsZW1lbnQ6OnN0eWxlV2lsbENoYW5nZSwgaWRlbnRpZnkgdGhlIGVuY2xvc2luZyBzY3JvbGxp
bmcgY29udGFpbmVyCisgICAgICAgICAgICBmb3IgZWxlbWVudHMgd2l0aCBzY3JvbGwtc25hcC1j
b29yZGluYXRlcyBhbmQgYWRkIHRoZSBlbGVtZW50IHRvIHRoZSBEb2N1bWVudCdzCisgICAgICAg
ICAgICBkYXRhIHN0b3JlIGZvciB0aGF0IHNjcm9sbGluZyBjb250YWluZXIuCisgICAgICAgICgz
KSBXaGVuIHBlcmZvcm1pbmcgJ2FwcGVuZENoaWxkU25hcE9mZnNldHMnLCByZWZlciB0byB0aGUg
SGFzaFNldCBvZiBlbGVtZW50cyByZWxldmFudAorICAgICAgICAgICAgdG8gdGhlIGN1cnJlbnQg
c2Nyb2xsaW5nIGNvbnRhaW5lciByYXRoZXIgdGhhbiB3YWxraW5nIHRoZSBET00gdG8gZmluZCB0
aGVtLgorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjphZGRFbGVtZW50VG9TY3JvbGxTbmFwQ29udGFpbmVyKTogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudDo6ZWxlbWVudHNGb3JTY3JvbGxTbmFwQ29udGFpbmVyKTogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVtb3ZlRWxlbWVudEZyb21TY3JvbGxT
bmFwQ29udGFpbmVyKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YWRkRWxl
bWVudE5lZWRpbmdTY3JvbGxTbmFwQ29udGFpbmVyUmVnaXN0cmF0aW9uKTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YWRkRWxlbWVudE5lZWRpbmdTY3JvbGxTbmFwQ29udGFp
bmVyVW5yZWdpc3RyYXRpb24pOiBBZGRlZC4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAg
ICAgICAgKiBwYWdlL3Njcm9sbGluZy9BeGlzU2Nyb2xsU25hcE9mZnNldHMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6YXBwZW5kQ2hpbGRTbmFwT2Zmc2V0cyk6IENoZWNrIHRoZSBIYXNoU2V0IGZv
ciB0aGUgY3VycmVudCBzY3JvbGxpbmcgY29udGFpbmVyCisgICAgICAgIHRvIGZpbmQgc2Nyb2xs
LXNuYXAtY29vcmRpbmF0ZXMsIHJhdGhlciB0aGFuIHdhbGtpbmcgdGhlIERPTSB0byBmaW5kIHRo
ZW0uCisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVTbmFwT2Zmc2V0c0ZvclNjcm9sbGFibGVBcmVh
KTogSWYgYW55IGVsZW1lbnRzIG5lZWQgdG8gYmUgcmVnaXN0ZXJlZCBvcgorICAgICAgICB1bnJl
Z2lzdGVyZWQgZnJvbSB0aGVpciByZXNwZWN0aXZlIHNjcm9sbGluZyBjb250YWluZXJzLCBkbyBz
by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpmaW5kRW5jbG9zaW5nU2Nyb2xsYWJsZUNvbnRhaW5lcik6IE5ldyBoZWxwZXIgZnVuY3Rp
b24uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50Ojp+UmVuZGVyRWxlbWVudCk6IFJl
bW92ZSBlbGVtZW50cyBmcm9tIERvY3VtZW50IHNjcm9sbCBzbmFwCisgICAgICAgIGNvbnRhaW5l
ci4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OnN0eWxlV2lsbENoYW5nZSk6IElm
IHRoZSBjdXJyZW50IGVsZW1lbnQgaGFzIHNjcm9sbC1zbmFwLWNvb3JkaW5hdGUKKyAgICAgICAg
ZGVmaW5lZCwgcmVtZW1iZXIgaXQgZm9yIGxhdGVyIHNvIHdlIGNhbiByZWdpc3RlciBpdCB3aXRo
IHRoZSByZWxldmFudCBzY3JvbGxpbmcgY29udGFpbmVyCisgICAgICAgIGFmdGVyIGxheW91dCBj
b21wbGV0ZXMuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50Ojp3aWxsQmVSZW1vdmVk
RnJvbVRyZWUpOiBVbnJlZ2lzdGVyIHRoZSBjdXJyZW50IGVsZW1lbnQgZnJvbSBpdHMKKyAgICAg
ICAgcmVsZXZhbnQgc2Nyb2xsaW5nIGNvbnRhaW5lci4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckVsZW1lbnQ6OmZpbmRFbmNsb3NpbmdTY3JvbGxhYmxlQ29udGFpbmVyKTogQWRkZWQuIExvY2F0
ZSB0aGUgcmVsZXZhbnQKKyAgICAgICAgc2Nyb2xsaW5nIGNvbnRhaW5lciBmb3IgdGhlIGN1cnJl
bnQgb2JqZWN0LgorCiAyMDE1LTA2LTE1ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KIAogICAgICAgICBbU09VUF0gTW92ZSBXZWJLaXRTb3VwUmVxdWVzdEdlbmVy
aWMgdG8gcGxhdGZvcm0gbGF5ZXIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNp
b24gMTg1NTUyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMyw3ICszLDcgQEAKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0
byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIg
KG11ZWxsZXJAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlh
a292IChhcEB3ZWJraXQub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3LCAyMDA4LCAyMDA5LCAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwg
MjAwOSwgMjAxMSwgMjAxMiwgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKICAqIENvcHlyaWdo
dCAoQykgMjAwOCwgMjAwOSwgMjAxMSwgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQpAQCAtNjY2MSw0ICs2NjYxLDU2IEBAIFNob3VsZE9wZW5FeHRlcm5h
bFVSTHNQb2xpY3kgRG9jdW1lbnQ6OnMKICAgICByZXR1cm4gU2hvdWxkT3BlbkV4dGVybmFsVVJM
c1BvbGljeTo6U2hvdWxkTm90QWxsb3c7CiB9CiAKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQ
KQordm9pZCBEb2N1bWVudDo6YWRkRWxlbWVudFRvU2Nyb2xsU25hcENvbnRhaW5lcihjb25zdCBS
ZW5kZXJFbGVtZW50KiBzY3JvbGxTbmFwRWxlbWVudCwgY29uc3QgUmVuZGVyRWxlbWVudCogc2Ny
b2xsU25hcENvbnRhaW5lcikKK3sKKyAgICBpZiAoIXNjcm9sbFNuYXBDb250YWluZXIpCisgICAg
ICAgIHJldHVybjsKKworICAgIGF1dG8mIGNvbnRhaW5lckVsZW1lbnRzID0gbV9zY3JvbGxTbmFw
UmVuZGVyRWxlbWVudHNGb3JDb250YWluZXJzLmFkZChzY3JvbGxTbmFwQ29udGFpbmVyLCBIYXNo
U2V0PGNvbnN0IFJlbmRlckVsZW1lbnQqPigpKS5pdGVyYXRvci0+dmFsdWU7CisgICAgY29udGFp
bmVyRWxlbWVudHMuYWRkKHNjcm9sbFNuYXBFbGVtZW50KTsKK30KKworY29uc3QgSGFzaFNldDxj
b25zdCBSZW5kZXJFbGVtZW50Kj4qIERvY3VtZW50OjplbGVtZW50c0ZvclNjcm9sbFNuYXBDb250
YWluZXIoY29uc3QgUmVuZGVyRWxlbWVudCogc2Nyb2xsU25hcENvbnRhaW5lcikKK3sKKyAgICBp
ZiAoIXNjcm9sbFNuYXBDb250YWluZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
YXV0byBjb250YWluZXJFbGVtZW50c0l0ZXJhdG9yID0gbV9zY3JvbGxTbmFwUmVuZGVyRWxlbWVu
dHNGb3JDb250YWluZXJzLmZpbmQoc2Nyb2xsU25hcENvbnRhaW5lcik7CisgICAgaWYgKGNvbnRh
aW5lckVsZW1lbnRzSXRlcmF0b3IgPT0gbV9zY3JvbGxTbmFwUmVuZGVyRWxlbWVudHNGb3JDb250
YWluZXJzLmVuZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiAmY29u
dGFpbmVyRWxlbWVudHNJdGVyYXRvci0+dmFsdWU7Cit9CisKK3ZvaWQgRG9jdW1lbnQ6OnJlbW92
ZUVsZW1lbnRGcm9tU2Nyb2xsU25hcENvbnRhaW5lcihjb25zdCBSZW5kZXJFbGVtZW50KiBzY3Jv
bGxTbmFwRWxlbWVudCwgY29uc3QgUmVuZGVyRWxlbWVudCogc2Nyb2xsU25hcENvbnRhaW5lcikK
K3sKKyAgICBpZiAoIXNjcm9sbFNuYXBDb250YWluZXIpCisgICAgICAgIHJldHVybjsKKworICAg
IGF1dG8gY29udGFpbmVyRWxlbWVudHNJdGVyYXRvciA9IG1fc2Nyb2xsU25hcFJlbmRlckVsZW1l
bnRzRm9yQ29udGFpbmVycy5maW5kKHNjcm9sbFNuYXBDb250YWluZXIpOworICAgIGlmIChjb250
YWluZXJFbGVtZW50c0l0ZXJhdG9yID09IG1fc2Nyb2xsU25hcFJlbmRlckVsZW1lbnRzRm9yQ29u
dGFpbmVycy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGNvbnRhaW5lckVsZW1l
bnRzSXRlcmF0b3ItPnZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29u
dGFpbmVyRWxlbWVudHNJdGVyYXRvci0+dmFsdWUucmVtb3ZlKHNjcm9sbFNuYXBFbGVtZW50KTsK
KworICAgIGlmIChjb250YWluZXJFbGVtZW50c0l0ZXJhdG9yLT52YWx1ZS5pc0VtcHR5KCkpCisg
ICAgICAgIG1fc2Nyb2xsU25hcFJlbmRlckVsZW1lbnRzRm9yQ29udGFpbmVycy5yZW1vdmUoc2Ny
b2xsU25hcENvbnRhaW5lcik7Cit9CisKK3ZvaWQgRG9jdW1lbnQ6OmFkZEVsZW1lbnROZWVkaW5n
U2Nyb2xsU25hcENvbnRhaW5lclJlZ2lzdHJhdGlvbihjb25zdCBSZW5kZXJFbGVtZW50KiBlbGVt
ZW50KQoreworICAgIG1fc2Nyb2xsU25hcFJlbmRlckVsZW1lbnRzVG9CZVJlZ2lzdGVyZWQuYWRk
KGVsZW1lbnQpOworfQorCit2b2lkIERvY3VtZW50OjphZGRFbGVtZW50TmVlZGluZ1Njcm9sbFNu
YXBDb250YWluZXJVbnJlZ2lzdHJhdGlvbihjb25zdCBSZW5kZXJFbGVtZW50KiBlbGVtZW50KQor
eworICAgIG1fc2Nyb2xsU25hcFJlbmRlckVsZW1lbnRzVG9CZVVucmVnaXN0ZXJlZC5hZGQoZWxl
bWVudCk7Cit9CisKKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuaAkocmV2aXNpb24gMTg1NTUyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3IEBACiAgKiAgICAgICAgICAgKEMp
IDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMp
IDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIw
MDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykKLSAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMiwgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTIsIDIwMTMsIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNo
IE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxl
LmNvbS8pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KQEAgLTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlIDxjaHJvbm8+CiAj
aW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CkBAIC0xMjU4LDYgKzEyNTksMTggQEAg
cHVibGljOgogCiAgICAgU2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSBzaG91bGRPcGVuRXh0
ZXJuYWxVUkxzUG9saWN5VG9Qcm9wYWdhdGUoKSBjb25zdDsKIAorI2lmIEVOQUJMRShDU1NfU0NS
T0xMX1NOQVApCisgICAgdm9pZCBhZGRFbGVtZW50VG9TY3JvbGxTbmFwQ29udGFpbmVyKGNvbnN0
IFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJFbGVtZW50Kik7CisgICAgdm9pZCByZW1vdmVF
bGVtZW50RnJvbVNjcm9sbFNuYXBDb250YWluZXIoY29uc3QgUmVuZGVyRWxlbWVudCosIGNvbnN0
IFJlbmRlckVsZW1lbnQqKTsKKyAgICBjb25zdCBIYXNoU2V0PGNvbnN0IFJlbmRlckVsZW1lbnQq
PiogZWxlbWVudHNGb3JTY3JvbGxTbmFwQ29udGFpbmVyKGNvbnN0IFJlbmRlckVsZW1lbnQqKTsK
KworICAgIHZvaWQgYWRkRWxlbWVudE5lZWRpbmdTY3JvbGxTbmFwQ29udGFpbmVyUmVnaXN0cmF0
aW9uKGNvbnN0IFJlbmRlckVsZW1lbnQqKTsKKyAgICBIYXNoU2V0PGNvbnN0IFJlbmRlckVsZW1l
bnQqPiYgZWxlbWVudHNOZWVkaW5nUmVnaXN0cmF0aW9uKCkgeyByZXR1cm4gbV9zY3JvbGxTbmFw
UmVuZGVyRWxlbWVudHNUb0JlUmVnaXN0ZXJlZDsgfQorCisgICAgdm9pZCBhZGRFbGVtZW50TmVl
ZGluZ1Njcm9sbFNuYXBDb250YWluZXJVbnJlZ2lzdHJhdGlvbihjb25zdCBSZW5kZXJFbGVtZW50
Kik7CisgICAgSGFzaFNldDxjb25zdCBSZW5kZXJFbGVtZW50Kj4mIGVsZW1lbnRzTmVlZGluZ1Vu
cmVnaXN0cmF0aW9uKCkgeyByZXR1cm4gbV9zY3JvbGxTbmFwUmVuZGVyRWxlbWVudHNUb0JlVW5y
ZWdpc3RlcmVkOyB9CisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIGVudW0gQ29uc3RydWN0aW9u
RmxhZ3MgeyBTeW50aGVzaXplZCA9IDEsIE5vblJlbmRlcmVkUGxhY2Vob2xkZXIgPSAxIDw8IDEg
fTsKICAgICBEb2N1bWVudChGcmFtZSosIGNvbnN0IFVSTCYsIHVuc2lnbmVkID0gRGVmYXVsdERv
Y3VtZW50Q2xhc3MsIHVuc2lnbmVkIGNvbnN0cnVjdGlvbkZsYWdzID0gMCk7CkBAIC0xNzA2LDYg
KzE3MTksMTIgQEAgcHJpdmF0ZToKICAgICB0eXBlZGVmIEhhc2hNYXA8V2ViQ29yZTo6TWVkaWFQ
bGF5YmFja1RhcmdldENsaWVudCosIHVpbnQ2NF90PiBUYXJnZXRDbGllbnRUb0lkTWFwOwogICAg
IFRhcmdldENsaWVudFRvSWRNYXAgbV9jbGllbnRUb0lETWFwOwogI2VuZGlmCisKKyNpZiBFTkFC
TEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIEhhc2hTZXQ8Y29uc3QgUmVuZGVyRWxlbWVudCo+IG1f
c2Nyb2xsU25hcFJlbmRlckVsZW1lbnRzVG9CZVJlZ2lzdGVyZWQ7CisgICAgSGFzaFNldDxjb25z
dCBSZW5kZXJFbGVtZW50Kj4gbV9zY3JvbGxTbmFwUmVuZGVyRWxlbWVudHNUb0JlVW5yZWdpc3Rl
cmVkOworICAgIEhhc2hNYXA8Y29uc3QgUmVuZGVyRWxlbWVudCosIEhhc2hTZXQ8Y29uc3QgUmVu
ZGVyRWxlbWVudCo+PiBtX3Njcm9sbFNuYXBSZW5kZXJFbGVtZW50c0ZvckNvbnRhaW5lcnM7Cisj
ZW5kaWYKIH07CiAKIGlubGluZSB2b2lkIERvY3VtZW50Ojpub3RpZnlSZW1vdmVQZW5kaW5nU2hl
ZXRJZk5lZWRlZCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9BeGlzU2Ny
b2xsU25hcE9mZnNldHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5jcHAJKHJldmlzaW9uIDE4NTU1MikKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDI4ICs0MCwzOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0
YXRpYyB2b2lkIGFwcGVuZENoaWxkU25hcE9mZnNldHMoSFRNTEVsZW1lbnQmIHBhcmVudCwgYm9v
bCBzaG91bGRBZGRIb3Jpem9udGFsQ2hpbGRPZmZzZXRzLCBWZWN0b3I8TGF5b3V0VW5pdD4mIGhv
cml6b250YWxTbmFwT2Zmc2V0U3Vic2VxdWVuY2UsIGJvb2wgc2hvdWxkQWRkVmVydGljYWxDaGls
ZE9mZnNldHMsIFZlY3RvcjxMYXlvdXRVbml0PiYgdmVydGljYWxTbmFwT2Zmc2V0U3Vic2VxdWVu
Y2UpCiB7Ci0gICAgLy8gRklYTUU6IEluc3RlYWQgb2YgdHJhdmVyc2luZyBhbGwgY2hpbGRyZW4s
IHJlZ2lzdGVyIGNoaWxkcmVuIHdpdGggc25hcCBjb29yZGluYXRlcyBiZWZvcmUgYXBwZW5kaW5n
IHRvIHNuYXBPZmZzZXRTdWJzZXF1ZW5jZS4KLSAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRy
ZW5PZlR5cGU8RWxlbWVudD4ocGFyZW50KSkgewotICAgICAgICBpZiAoUmVuZGVyQm94KiBib3gg
PSBjaGlsZC5yZW5kZXJCb3goKSkgewotICAgICAgICAgICAgY29uc3QgYXV0byYgc2Nyb2xsU25h
cENvb3JkaW5hdGVzID0gYm94LT5zdHlsZSgpLnNjcm9sbFNuYXBDb29yZGluYXRlcygpOwotICAg
ICAgICAgICAgaWYgKHNjcm9sbFNuYXBDb29yZGluYXRlcy5pc0VtcHR5KCkpCi0gICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgQVNTRVJUKHBhcmVudC5yZW5kZXJlcigpKTsKKyAgICBEb2N1
bWVudCYgZG9jdW1lbnQgPSBwYXJlbnQucmVuZGVyZXIoKS0+ZG9jdW1lbnQoKTsKKworICAgIGF1
dG8qIGVsZW1lbnRzID0gZG9jdW1lbnQuZWxlbWVudHNGb3JTY3JvbGxTbmFwQ29udGFpbmVyKHBh
cmVudC5yZW5kZXJlcigpKTsKKyAgICBpZiAoIWVsZW1lbnRzKQorICAgICAgICByZXR1cm47CiAK
LSAgICAgICAgICAgIExheW91dFJlY3Qgdmlld1NpemUgPSBib3gtPmNvbnRlbnRCb3hSZWN0KCk7
Ci0gICAgICAgICAgICBMYXlvdXRVbml0IHZpZXdXaWR0aCA9IHZpZXdTaXplLndpZHRoKCk7Ci0g
ICAgICAgICAgICBMYXlvdXRVbml0IHZpZXdIZWlnaHQgPSB2aWV3U2l6ZS5oZWlnaHQoKTsKLSAg
ICAgICAgICAgIEZsb2F0UG9pbnQgcG9zaXRpb24gPSBib3gtPmxvY2FsVG9Db250YWluZXJQb2lu
dChGbG9hdFBvaW50KCksIHBhcmVudC5yZW5kZXJCb3goKSk7Ci0gICAgICAgICAgICBMYXlvdXRV
bml0IGxlZnQgPSBwb3NpdGlvbi54KCk7Ci0gICAgICAgICAgICBMYXlvdXRVbml0IHRvcCA9IHBv
c2l0aW9uLnkoKTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgY29vcmRpbmF0ZSA6IHNjcm9sbFNu
YXBDb29yZGluYXRlcykgewotICAgICAgICAgICAgICAgIExheW91dFVuaXQgbGFzdFBvdGVudGlh
bFNuYXBQb3NpdGlvblggPSBsZWZ0ICsgdmFsdWVGb3JMZW5ndGgoY29vcmRpbmF0ZS53aWR0aCgp
LCB2aWV3V2lkdGgpOwotICAgICAgICAgICAgICAgIGlmIChzaG91bGRBZGRIb3Jpem9udGFsQ2hp
bGRPZmZzZXRzICYmIGxhc3RQb3RlbnRpYWxTbmFwUG9zaXRpb25YID4gMCkKLSAgICAgICAgICAg
ICAgICAgICAgaG9yaXpvbnRhbFNuYXBPZmZzZXRTdWJzZXF1ZW5jZS5hcHBlbmQobGFzdFBvdGVu
dGlhbFNuYXBQb3NpdGlvblgpOwotCi0gICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBsYXN0UG90
ZW50aWFsU25hcFBvc2l0aW9uWSA9IHRvcCArIHZhbHVlRm9yTGVuZ3RoKGNvb3JkaW5hdGUuaGVp
Z2h0KCksIHZpZXdIZWlnaHQpOwotICAgICAgICAgICAgICAgIGlmIChzaG91bGRBZGRWZXJ0aWNh
bENoaWxkT2Zmc2V0cyAmJiBsYXN0UG90ZW50aWFsU25hcFBvc2l0aW9uWSA+IDApCi0gICAgICAg
ICAgICAgICAgICAgIHZlcnRpY2FsU25hcE9mZnNldFN1YnNlcXVlbmNlLmFwcGVuZChsYXN0UG90
ZW50aWFsU25hcFBvc2l0aW9uWSk7Ci0gICAgICAgICAgICB9CisgICAgZm9yIChhdXRvJiBjaGls
ZCA6ICplbGVtZW50cykgeworICAgICAgICBBU1NFUlQoY2hpbGQpOworICAgICAgICBBU1NFUlQo
aXM8UmVuZGVyQm94PihjaGlsZCkpOworICAgICAgICBjb25zdCBSZW5kZXJCb3gqIGJveCA9IGRv
d25jYXN0PFJlbmRlckJveD4oY2hpbGQpOworICAgICAgICBpZiAoIWJveCkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgIGNvbnN0IGF1dG8mIHNjcm9sbFNuYXBDb29yZGluYXRlcyA9
IGJveC0+c3R5bGUoKS5zY3JvbGxTbmFwQ29vcmRpbmF0ZXMoKTsKKyAgICAgICAgaWYgKHNjcm9s
bFNuYXBDb29yZGluYXRlcy5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgCisgICAgICAgIExheW91dFJlY3Qgdmlld1NpemUgPSBib3gtPmNvbnRlbnRCb3hSZWN0KCk7
CisgICAgICAgIExheW91dFVuaXQgdmlld1dpZHRoID0gdmlld1NpemUud2lkdGgoKTsKKyAgICAg
ICAgTGF5b3V0VW5pdCB2aWV3SGVpZ2h0ID0gdmlld1NpemUuaGVpZ2h0KCk7CisgICAgICAgIEZs
b2F0UG9pbnQgcG9zaXRpb24gPSBib3gtPmxvY2FsVG9Db250YWluZXJQb2ludChGbG9hdFBvaW50
KCksIHBhcmVudC5yZW5kZXJCb3goKSk7CisgICAgICAgIExheW91dFVuaXQgbGVmdCA9IHBvc2l0
aW9uLngoKTsKKyAgICAgICAgTGF5b3V0VW5pdCB0b3AgPSBwb3NpdGlvbi55KCk7CisgICAgICAg
IGZvciAoYXV0byYgY29vcmRpbmF0ZSA6IHNjcm9sbFNuYXBDb29yZGluYXRlcykgeworICAgICAg
ICAgICAgTGF5b3V0VW5pdCBsYXN0UG90ZW50aWFsU25hcFBvc2l0aW9uWCA9IGxlZnQgKyB2YWx1
ZUZvckxlbmd0aChjb29yZGluYXRlLndpZHRoKCksIHZpZXdXaWR0aCk7CisgICAgICAgICAgICBp
ZiAoc2hvdWxkQWRkSG9yaXpvbnRhbENoaWxkT2Zmc2V0cyAmJiBsYXN0UG90ZW50aWFsU25hcFBv
c2l0aW9uWCA+IDApCisgICAgICAgICAgICAgICAgaG9yaXpvbnRhbFNuYXBPZmZzZXRTdWJzZXF1
ZW5jZS5hcHBlbmQobGFzdFBvdGVudGlhbFNuYXBQb3NpdGlvblgpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBMYXlvdXRVbml0IGxhc3RQb3RlbnRpYWxTbmFwUG9zaXRpb25ZID0gdG9wICsg
dmFsdWVGb3JMZW5ndGgoY29vcmRpbmF0ZS5oZWlnaHQoKSwgdmlld0hlaWdodCk7CisgICAgICAg
ICAgICBpZiAoc2hvdWxkQWRkVmVydGljYWxDaGlsZE9mZnNldHMgJiYgbGFzdFBvdGVudGlhbFNu
YXBQb3NpdGlvblkgPiAwKQorICAgICAgICAgICAgICAgIHZlcnRpY2FsU25hcE9mZnNldFN1YnNl
cXVlbmNlLmFwcGVuZChsYXN0UG90ZW50aWFsU25hcFBvc2l0aW9uWSk7CiAgICAgICAgIH0KICAg
ICB9CiB9CkBAIC0xMzEsNiArMTQxLDE3IEBAIHZvaWQgdXBkYXRlU25hcE9mZnNldHNGb3JTY3Jv
bGxhYmxlQXJlYSgKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIC8vIFRha2UgY2FyZSBv
ZiBhbnkgYm9va2tlZXBpbmcgZHVlIHRvIHN0eWxlIGNoYW5nZXMuCisgICAgQVNTRVJUKHNjcm9s
bGluZ0VsZW1lbnQucmVuZGVyZXIoKSk7CisgICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gc2Nyb2xs
aW5nRWxlbWVudC5yZW5kZXJlcigpLT5kb2N1bWVudCgpOworICAgIGZvciAoYXV0byYgY2hpbGQg
OiBkb2N1bWVudC5lbGVtZW50c05lZWRpbmdSZWdpc3RyYXRpb24oKSkKKyAgICAgICAgZG9jdW1l
bnQuYWRkRWxlbWVudFRvU2Nyb2xsU25hcENvbnRhaW5lcihjaGlsZCwgY2hpbGQtPmZpbmRFbmNs
b3NpbmdTY3JvbGxhYmxlQ29udGFpbmVyKCkpOworICAgIGRvY3VtZW50LmVsZW1lbnRzTmVlZGlu
Z1JlZ2lzdHJhdGlvbigpLmNsZWFyKCk7CisKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDogZG9jdW1l
bnQuZWxlbWVudHNOZWVkaW5nVW5yZWdpc3RyYXRpb24oKSkKKyAgICAgICAgZG9jdW1lbnQucmVt
b3ZlRWxlbWVudEZyb21TY3JvbGxTbmFwQ29udGFpbmVyKGNoaWxkLCBjaGlsZC0+ZmluZEVuY2xv
c2luZ1Njcm9sbGFibGVDb250YWluZXIoKSk7CisgICAgZG9jdW1lbnQuZWxlbWVudHNOZWVkaW5n
VW5yZWdpc3RyYXRpb24oKS5jbGVhcigpOworCiAgICAgTGF5b3V0UmVjdCB2aWV3U2l6ZSA9IHNj
cm9sbGluZ0VsZW1lbnRCb3guY29udGVudEJveFJlY3QoKTsKICAgICBMYXlvdXRVbml0IHZpZXdX
aWR0aCA9IHZpZXdTaXplLndpZHRoKCk7CiAgICAgTGF5b3V0VW5pdCB2aWV3SGVpZ2h0ID0gdmll
d1NpemUuaGVpZ2h0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAxODU1NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwNCw2ICs5MDQsMTUgQEAgdm9p
ZCBSZW5kZXJFbGVtZW50OjpzdHlsZVdpbGxDaGFuZ2UoU3R5bAogICAgICAgICB9CiAgICAgfQog
CisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICBpZiAoIW5ld1N0eWxlLnNjcm9sbFNu
YXBDb29yZGluYXRlcygpLmlzRW1wdHkoKSB8fCAob2xkU3R5bGUgJiYgIW9sZFN0eWxlLT5zY3Jv
bGxTbmFwQ29vcmRpbmF0ZXMoKS5pc0VtcHR5KCkpKSB7CisgICAgICAgIGlmIChuZXdTdHlsZS5z
Y3JvbGxTbmFwQ29vcmRpbmF0ZXMoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICBkb2N1bWVudCgp
LmFkZEVsZW1lbnROZWVkaW5nU2Nyb2xsU25hcENvbnRhaW5lclVucmVnaXN0cmF0aW9uKHRoaXMp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBkb2N1bWVudCgpLmFkZEVsZW1lbnROZWVkaW5n
U2Nyb2xsU25hcENvbnRhaW5lclJlZ2lzdHJhdGlvbih0aGlzKTsKKyAgICB9CisjZW5kaWYKKwog
ICAgIGlmIChpc1Jvb3QoKSB8fCBpc0JvZHkoKSkKICAgICAgICAgdmlldygpLmZyYW1lVmlldygp
LnVwZGF0ZUV4dGVuZEJhY2tncm91bmRJZk5lY2Vzc2FyeSgpOwogfQpAQCAtMTA1OCw2ICsxMDY3
LDE0IEBAIHZvaWQgUmVuZGVyRWxlbWVudDo6d2lsbEJlUmVtb3ZlZEZyb21UcmUKICAgICBpZiAo
YXV0byogY29udGFpbmVyRmxvd1RocmVhZCA9IHBhcmVudCgpLT5yZW5kZXJOYW1lZEZsb3dUaHJl
YWRXcmFwcGVyKCkpCiAgICAgICAgIGNvbnRhaW5lckZsb3dUaHJlYWQtPnJlbW92ZUZsb3dDaGls
ZCgqdGhpcyk7CiAKKyAgICAKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIGlmICgh
bV9zdHlsZS0+c2Nyb2xsU25hcENvb3JkaW5hdGVzKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIGlm
IChjb25zdCBSZW5kZXJFbGVtZW50KiBzY3JvbGxTbmFwQ29udGFpbmVyID0gZmluZEVuY2xvc2lu
Z1Njcm9sbGFibGVDb250YWluZXIoKSkKKyAgICAgICAgICAgIGRvY3VtZW50KCkucmVtb3ZlRWxl
bWVudEZyb21TY3JvbGxTbmFwQ29udGFpbmVyKHRoaXMsIHNjcm9sbFNuYXBDb250YWluZXIpOwor
ICAgIH0KKyNlbmRpZgorCiAgICAgUmVuZGVyT2JqZWN0Ojp3aWxsQmVSZW1vdmVkRnJvbVRyZWUo
KTsKIH0KIApAQCAtMTc2MSw0ICsxNzc4LDE4IEBAIGNvbnN0IFJlbmRlckVsZW1lbnQqIFJlbmRl
ckVsZW1lbnQ6OmVuY2wKICAgICByZXR1cm4gY3VycmVudDsKIH0KIAorY29uc3QgUmVuZGVyRWxl
bWVudCogUmVuZGVyRWxlbWVudDo6ZmluZEVuY2xvc2luZ1Njcm9sbGFibGVDb250YWluZXIoKSBj
b25zdAoreworICAgIGZvciAoY29uc3QgUmVuZGVyRWxlbWVudCogY2FuZGlkYXRlID0gdGhpczsg
Y2FuZGlkYXRlOyBjYW5kaWRhdGUgPSBjYW5kaWRhdGUtPnBhcmVudCgpKSB7CisgICAgICAgIGlm
ICghaXM8UmVuZGVyQm94PigqY2FuZGlkYXRlKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAKKyAgICAgICAgY29uc3QgUmVuZGVyQm94KiBib3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+
KGNhbmRpZGF0ZSk7CisgICAgICAgIGlmIChib3ggJiYgYm94LT5oYXNPdmVyZmxvd0NsaXAoKSkK
KyAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGU7CisgICAgfQorICAgIAorICAgIHJldHVybiBu
dWxscHRyOworfQorCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVt
ZW50LmgJKHJldmlzaW9uIDE4NTU1MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwOCw2ICsyMDgsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRJc0NTU0FuaW1hdGluZyhib29sIGIpIHsgbV9pc0NTU0FuaW1hdGluZyA9IGI7
IH0KICAgICAKICAgICBjb25zdCBSZW5kZXJFbGVtZW50KiBlbmNsb3NpbmdSZW5kZXJlcldpdGhU
ZXh0RGVjb3JhdGlvbihUZXh0RGVjb3JhdGlvbiwgYm9vbCBmaXJzdExpbmUpIGNvbnN0OworICAg
IGNvbnN0IFJlbmRlckVsZW1lbnQqIGZpbmRFbmNsb3NpbmdTY3JvbGxhYmxlQ29udGFpbmVyKCkg
Y29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICBlbnVtIEJhc2VUeXBlRmxhZ3MgewpJbmRleDogTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwko
cmV2aXNpb24gMTg1NTUyKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTYgQEAKKzIwMTUtMDYtMTUgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBh
cHBsZS5jb20+CisKKyAgICAgICAgQ1NTIFNjcm9sbCBTbmFwIC0gc3VwcG9ydCBzbmFwcGluZyB0
byBuZXN0ZWQgZWxlbWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0NTg0MworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjEzMzk1ODE+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBjc3MzL3Njcm9s
bC1zbmFwL25lc3RlZC1lbGVtZW50cy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGNz
czMvc2Nyb2xsLXNuYXAvbmVzdGVkLWVsZW1lbnRzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGNz
czMvc2Nyb2xsLXNuYXAvc2Nyb2xsLXNuYXAtb2Zmc2V0cy1leHBlY3RlZC50eHQ6IFVwZGF0ZWQg
dG8KKyAgICAgICAgICBhY2NvdW50IGZvciA1MCUvNTAlIHNjcm9sbC1zbmFwLWNvb3JkaW5hdGVz
LgorCiAyMDE1LTA2LTEzICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAK
ICAgICAgICAgQVg6IFdlYktpdCBleHBvc2VzIGFsbCBSdWJ5IFRleHQgYXMgVW5rbm93biAoSmFw
YW5lc2UgRVBVQiBhY2Nlc3NpYmlsaXR5IGJsb2NrZXIpCkluZGV4OiBMYXlvdXRUZXN0cy9jc3Mz
L3Njcm9sbC1zbmFwL25lc3RlZC1lbGVtZW50cy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvY3NzMy9zY3JvbGwtc25hcC9uZXN0ZWQtZWxlbWVudHMtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvY3NzMy9zY3JvbGwtc25hcC9uZXN0ZWQtZWxl
bWVudHMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOSBAQAorUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCitTY3JvbGwtc25hcCBv
ZmZzZXRzIGZvciAnY29udGFpbmVyJzogdmVydGljYWwgPSB7IDAsIDEwMSwgMjE4LCAzMzUsIDQ1
MiwgNTY5LCA2ODYsIDgwMywgOTIwLCAxMDM3LCAxMTU0LCAxMjcxLCAxMzg4LCAxNTA1LCAxNjIy
LCAxNzM5LCAxODU2LCAxOTczLCAyMDkwLCAyMjA3LCA0OTM4IH0KK1BBU1MgU2Nyb2xsLXNuYXAg
b2Zmc2V0cyBmb3IgJ2ludmFsaWRDb250YWluZXInOiBVTkRFRklORUQKK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9j
c3MzL3Njcm9sbC1zbmFwL25lc3RlZC1lbGVtZW50cy5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2NzczMvc2Nyb2xsLXNuYXAvbmVzdGVkLWVsZW1lbnRzLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9jc3MzL3Njcm9sbC1zbmFwL25lc3RlZC1lbGVtZW50cy5odG1sCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgor
PGhlYWQ+CisgICAgPHRpdGxlPlNuYXAgcG9pbnRzIC0gbmVzdGVkIHNuYXAgY29vcmRpbmF0ZXM8
L3RpdGxlPgorICAgIDxzdHlsZT4KKyAgICAgICAgLnNjcm9sbGFibGUgeworICAgICAgICAgICAg
b3ZlcmZsb3c6IHNjcm9sbDsKKyAgICAgICAgICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5n
OiB0b3VjaDsKKyAgICAgICAgICAgIGJvcmRlcjogMXB4IGRhc2hlZCBibGFjazsKKyAgICAgICAg
ICAgIGhlaWdodDogMzAwcHg7CisgICAgICAgICAgICBtYXJnaW46IDAgMTBweDsKKyAgICAgICAg
fQorICAgIAorICAgICAgICAuY2VudGVyLXNuYXAtcmVjZWl2ZXIgeworICAgICAgICAgICAgLXdl
YmtpdC1zY3JvbGwtc25hcC10eXBlOiBtYW5kYXRvcnk7CisgICAgICAgICAgICAtd2Via2l0LXNj
cm9sbC1zbmFwLWRlc3RpbmF0aW9uOiAwIDA7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgLnNu
YXAtcG9pbnQgeworICAgICAgICAgICAgbWFyZ2luLXRvcDogMTAwcHg7CisgICAgICAgICAgICB3
aWR0aDogMTVweDsKKyAgICAgICAgICAgIGhlaWdodDogMTVweDsKKyAgICAgICAgICAgIGJvcmRl
cjogMXB4IHNvbGlkIGJsYWNrOworICAgICAgICAgICAgLXdlYmtpdC1zY3JvbGwtc25hcC1jb29y
ZGluYXRlOiAwIDBweDsKKyAgICAgICAgfQorICAgIAorICAgICAgICAuc25hcC1wb2ludDo6YWZ0
ZXIgeworICAgICAgICAgICAgZm9udC1zaXplOiAxZW07CisgICAgICAgICAgICBwb3NpdGlvbjog
cmVsYXRpdmU7CisgICAgICAgICAgICBjb250ZW50OiAnKyc7CisgICAgICAgIH0KKyAgICAKKyAg
ICAgICAgLm5lc3RlZCA+IC5zbmFwLXBvaW50IHsKKyAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiA1
MHB4OworICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmVkOworICAgICAgICB9CisgICAg
ICAgIC5uZXN0ZWQgPiAubmVzdGVkID4gLnNuYXAtcG9pbnQgeworICAgICAgICAgICAgbWFyZ2lu
LWxlZnQ6IDEwMHB4OworICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgYmx1ZTsKKyAgICAg
ICAgfQorICAgIAorICAgICAgICAubGFyZ2UtY29udGVudCB7CisgICAgICAgICAgICBoZWlnaHQ6
IDMwMDBweDsKKyAgICAgICAgICAgIHdpZHRoOiAxMDAlOworICAgICAgICB9CisgICAgCisgICAg
ICAgIC5zbWFsbC1jb250ZW50IHsKKyAgICAgICAgICAgIGhlaWdodDogMjAwcHg7CisgICAgICAg
ICAgICB3aWR0aDogMTAwJTsKKyAgICAgICAgfQorCisgICAgICAgIC5pbnZhbGlkQ29udGFpbmVy
IHsKKyAgICAgICAgICAgIGJvcmRlcjogMXB4IGRhc2hlZCBibGFjazsKKyAgICAgICAgICAgIGhl
aWdodDogMzAwcHg7CisgICAgICAgICAgICBtYXJnaW46IDAgMTBweDsKKyAgICAgICAgICAgIG9w
YWNpdHk6IDAuNTsKKyAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CisgICAgICAgIH0KKyAg
ICA8L3N0eWxlPgorICAgICAgICA8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdD4KKyAgICAgICAgZnVuY3Rpb24gcnVu
VGVzdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJyk7CisgICAgICAgICAgICBkZWJ1ZygiU2Nyb2xsLXNu
YXAgb2Zmc2V0cyBmb3IgJ2NvbnRhaW5lcic6ICIgKyB3aW5kb3cuaW50ZXJuYWxzLnNjcm9sbFNu
YXBPZmZzZXRzKGNvbnRhaW5lcikpOworCisgICAgICAgICAgICB2YXIgaW52YWxpZENvbnRhaW5l
ciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnZhbGlkQ29udGFpbmVyJyk7CisgICAgICAg
ICAgICB0cnkgeworICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoIlNjcm9sbC1zbmFwIG9mZnNl
dHMgZm9yICdpbnZhbGlkQ29udGFpbmVyJzogIiArIHdpbmRvdy5pbnRlcm5hbHMuc2Nyb2xsU25h
cE9mZnNldHMoaW52YWxpZENvbnRhaW5lcikpOworICAgICAgICAgICAgfSBjYXRjaChleCkgewor
ICAgICAgICAgICAgICAgIHRlc3RQYXNzZWQoIlNjcm9sbC1zbmFwIG9mZnNldHMgZm9yICdpbnZh
bGlkQ29udGFpbmVyJzogVU5ERUZJTkVEIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGZpbmlzaEpTVGVzdCgpOworICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cisg
ICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBvbkxvYWQoKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgICAgICAgICB3aW5kb3cuanNU
ZXN0SXNBc3luYyA9IHRydWU7CisgICAgICAgICAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0
KCk7CisgICAgICAgICAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgICAg
ICAgICAgICAgc2V0VGltZW91dChydW5UZXN0LCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0ib25Mb2FkKCk7Ij4K
KyAgICA8ZGl2IGlkPSJjb250YWluZXIiIGNsYXNzPSJjZW50ZXItc25hcC1yZWNlaXZlciBzY3Jv
bGxhYmxlIj4KKyAgICAgICAgPGRpdiBjbGFzcz0ic25hcC1wb2ludCI+PC9kaXY+CisgICAgICAg
IDxkaXYgY2xhc3M9Im5lc3RlZCI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzbmFwLXBvaW50
Ij48L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9Im5lc3RlZCI+Cisg
ICAgICAgICAgICA8ZGl2IGNsYXNzPSJuZXN0ZWQiPgorICAgICAgICAgICAgICAgIDxkaXYgY2xh
c3M9InNuYXAtcG9pbnQiPjwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2
PgorICAgICAgICA8ZGl2IGNsYXNzPSJzbmFwLXBvaW50Ij48L2Rpdj4KKyAgICAgICAgPGRpdiBj
bGFzcz0ic25hcC1wb2ludCI+PC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9Im5lc3RlZCI+Cisg
ICAgICAgICAgICA8ZGl2IGNsYXNzPSJzbmFwLXBvaW50Ij48L2Rpdj4KKyAgICAgICAgPC9kaXY+
CisgICAgICAgIDxkaXYgY2xhc3M9Im5lc3RlZCI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJu
ZXN0ZWQiPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNuYXAtcG9pbnQiPjwvZGl2Pgor
ICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJu
ZXN0ZWQiPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0ic25hcC1wb2ludCI+PC9kaXY+CisgICAg
ICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJzbmFwLXBvaW50Ij48L2Rpdj4KKyAgICAg
ICAgPGRpdiBjbGFzcz0ibmVzdGVkIj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InNuYXAtcG9p
bnQiPjwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0ic25hcC1wb2lu
dCI+PC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InNuYXAtcG9pbnQiPjwvZGl2PgorICAgICAg
ICA8ZGl2IGNsYXNzPSJuZXN0ZWQiPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0ic25hcC1wb2lu
dCI+PC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAgICAgPGRpdiBjbGFzcz0ic25hcC1wb2lu
dCI+PC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9Im5lc3RlZCI+CisgICAgICAgICAgICA8ZGl2
IGNsYXNzPSJzbmFwLXBvaW50Ij48L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYg
Y2xhc3M9Im5lc3RlZCI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJuZXN0ZWQiPgorICAgICAg
ICAgICAgICAgIDxkaXYgY2xhc3M9InNuYXAtcG9pbnQiPjwvZGl2PgorICAgICAgICAgICAgPC9k
aXY+CisgICAgICAgIDwvZGl2PgorICAgICAgICAgPGRpdiBjbGFzcz0ic25hcC1wb2ludCI+PC9k
aXY+CisgICAgICAgIDxkaXYgY2xhc3M9Im5lc3RlZCI+CisgICAgICAgICAgICA8ZGl2IGNsYXNz
PSJzbmFwLXBvaW50Ij48L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9
Im5lc3RlZCI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJuZXN0ZWQiPgorICAgICAgICAgICAg
ICAgIDxkaXYgY2xhc3M9InNuYXAtcG9pbnQiPjwvZGl2PgorICAgICAgICAgICAgPC9kaXY+Cisg
ICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJsYXJnZS1jb250ZW50Ij48L2Rpdj4K
KyAgICA8L2Rpdj4KKyAgICA8ZGl2IGlkPSJpbnZhbGlkQ29udGFpbmVyIiBjbGFzcz0iY2VudGVy
LXNuYXAtcmVjZWl2ZXIgaW52YWxpZENvbnRhaW5lciI+CisgICAgICAgIDxkaXYgY2xhc3M9InNu
YXAtcG9pbnQiPjwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJuZXN0ZWQiPgorICAgICAgICAg
ICAgPGRpdiBjbGFzcz0ic25hcC1wb2ludCI+PC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAg
ICA8ZGl2IGNsYXNzPSJuZXN0ZWQiPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0ibmVzdGVkIj4K
KyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzbmFwLXBvaW50Ij48L2Rpdj4KKyAgICAgICAg
ICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKyAgICA8c2NyaXB0IHNyYz0i
Li4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9jc3MzL3Njcm9sbC1zbmFwL3Njcm9sbC1zbmFwLW9mZnNl
dHMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2NzczMvc2Nyb2xsLXNu
YXAvc2Nyb2xsLXNuYXAtb2Zmc2V0cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE4NTU1MikKKysr
IExheW91dFRlc3RzL2NzczMvc2Nyb2xsLXNuYXAvc2Nyb2xsLXNuYXAtb2Zmc2V0cy1leHBlY3Rl
ZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIsMTYgKzIsMTYgQEAgVGVzdHMgdGhhdCB0aGUgc2Ny
b2xsLXNuYXAgZmVhdHVyZSB3b3JrcwogIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
IAogVEVTVCBDT01QTEVURQotU2Nyb2xsLXNuYXAgb2Zmc2V0cyBmb3IgaG9yaXpvbnRhbFRhcmdl
dDogaG9yaXpvbnRhbCA9IHsgMCwgMzAsIDYwLCA5MCwgMTIwLCAxNTAgfSwgdmVydGljYWwgPSB7
IDAsIDE1IH0KLVNjcm9sbC1zbmFwIG9mZnNldHMgZm9yIHZlcnRpY2FsVGFyZ2V0OiBob3Jpem9u
dGFsID0geyAwLCAxNSB9LCB2ZXJ0aWNhbCA9IHsgMCwgMzAsIDYwLCA5MCwgMTIwLCAxNTAgfQot
U2Nyb2xsLXNuYXAgb2Zmc2V0cyBmb3IgaG9yaXpvbnRhbEJvcmRlcmVkVGFyZ2V0OiBob3Jpem9u
dGFsID0geyAwLCAzMCwgNjAsIDkwLCAxMjAsIDE1MCB9LCB2ZXJ0aWNhbCA9IHsgMCwgMTUgfQot
U2Nyb2xsLXNuYXAgb2Zmc2V0cyBmb3IgdmVydGljYWxCb3JkZXJlZFRhcmdldDogaG9yaXpvbnRh
bCA9IHsgMCwgMTUgfSwgdmVydGljYWwgPSB7IDAsIDMwLCA2MCwgOTAsIDEyMCwgMTUwIH0KLVNj
cm9sbC1zbmFwIG9mZnNldHMgZm9yIGhvcml6b250YWxQYWRkZWRUYXJnZXQ6IGhvcml6b250YWwg
PSB7IDAsIDMwLCA2MCwgOTAsIDEyMCwgMTUwLCAxNzAgfSwgdmVydGljYWwgPSB7IDAsIDM5IH0K
LVNjcm9sbC1zbmFwIG9mZnNldHMgZm9yIHZlcnRpY2FsUGFkZGVkVGFyZ2V0OiBob3Jpem9udGFs
ID0geyAwLCAzNSB9LCB2ZXJ0aWNhbCA9IHsgMCwgMzAsIDYwLCA5MCwgMTIwLCAxNTAsIDE3NCB9
Ci1TY3JvbGwtc25hcCBvZmZzZXRzIGZvciBob3Jpem9udGFsQm9yZGVyZWRQYWRkZWRUYXJnZXQ6
IGhvcml6b250YWwgPSB7IDAsIDMwLCA2MCwgOTAsIDEyMCwgMTUwLCAxNzAgfSwgdmVydGljYWwg
PSB7IDAsIDM5IH0KLVNjcm9sbC1zbmFwIG9mZnNldHMgZm9yIHZlcnRpY2FsQm9yZGVyZWRQYWRk
ZWRUYXJnZXQ6IGhvcml6b250YWwgPSB7IDAsIDM1IH0sIHZlcnRpY2FsID0geyAwLCAzMCwgNjAs
IDkwLCAxMjAsIDE1MCwgMTc0IH0KLVNjcm9sbC1zbmFwIG9mZnNldHMgZm9yIGhvcml6b250YWxS
b3RhdGVkVGFyZ2V0OiBob3Jpem9udGFsID0geyAwLCAzMCwgNjAsIDkwLCAxMjAsIDE1MCwgMTcw
IH0sIHZlcnRpY2FsID0geyAwLCAzOSB9Ci1TY3JvbGwtc25hcCBvZmZzZXRzIGZvciB2ZXJ0aWNh
bFJvdGF0ZWRUYXJnZXQ6IGhvcml6b250YWwgPSB7IDAsIDM1IH0sIHZlcnRpY2FsID0geyAwLCAz
MCwgNjAsIDkwLCAxMjAsIDE1MCwgMTc0IH0KK1Njcm9sbC1zbmFwIG9mZnNldHMgZm9yIGhvcml6
b250YWxUYXJnZXQ6IGhvcml6b250YWwgPSB7IDAsIDMwLCA2MCwgOTAsIDEyMCwgMTUwIH0sIHZl
cnRpY2FsID0geyAwLCA3LCAxNSB9CitTY3JvbGwtc25hcCBvZmZzZXRzIGZvciB2ZXJ0aWNhbFRh
cmdldDogaG9yaXpvbnRhbCA9IHsgMCwgNywgMTUgfSwgdmVydGljYWwgPSB7IDAsIDMwLCA2MCwg
OTAsIDEyMCwgMTUwIH0KK1Njcm9sbC1zbmFwIG9mZnNldHMgZm9yIGhvcml6b250YWxCb3JkZXJl
ZFRhcmdldDogaG9yaXpvbnRhbCA9IHsgMCwgMzAsIDYwLCA5MCwgMTIwLCAxNTAgfSwgdmVydGlj
YWwgPSB7IDAsIDcsIDE1IH0KK1Njcm9sbC1zbmFwIG9mZnNldHMgZm9yIHZlcnRpY2FsQm9yZGVy
ZWRUYXJnZXQ6IGhvcml6b250YWwgPSB7IDAsIDcsIDE1IH0sIHZlcnRpY2FsID0geyAwLCAzMCwg
NjAsIDkwLCAxMjAsIDE1MCB9CitTY3JvbGwtc25hcCBvZmZzZXRzIGZvciBob3Jpem9udGFsUGFk
ZGVkVGFyZ2V0OiBob3Jpem9udGFsID0geyAwLCAzMCwgNjAsIDkwLCAxMjAsIDE1MCwgMTcwIH0s
IHZlcnRpY2FsID0geyAwLCA3LCAzOSB9CitTY3JvbGwtc25hcCBvZmZzZXRzIGZvciB2ZXJ0aWNh
bFBhZGRlZFRhcmdldDogaG9yaXpvbnRhbCA9IHsgMCwgNywgMzUgfSwgdmVydGljYWwgPSB7IDAs
IDMwLCA2MCwgOTAsIDEyMCwgMTUwLCAxNzQgfQorU2Nyb2xsLXNuYXAgb2Zmc2V0cyBmb3IgaG9y
aXpvbnRhbEJvcmRlcmVkUGFkZGVkVGFyZ2V0OiBob3Jpem9udGFsID0geyAwLCAzMCwgNjAsIDkw
LCAxMjAsIDE1MCwgMTcwIH0sIHZlcnRpY2FsID0geyAwLCA3LCAzOSB9CitTY3JvbGwtc25hcCBv
ZmZzZXRzIGZvciB2ZXJ0aWNhbEJvcmRlcmVkUGFkZGVkVGFyZ2V0OiBob3Jpem9udGFsID0geyAw
LCA3LCAzNSB9LCB2ZXJ0aWNhbCA9IHsgMCwgMzAsIDYwLCA5MCwgMTIwLCAxNTAsIDE3NCB9CitT
Y3JvbGwtc25hcCBvZmZzZXRzIGZvciBob3Jpem9udGFsUm90YXRlZFRhcmdldDogaG9yaXpvbnRh
bCA9IHsgMCwgMzAsIDYwLCA5MCwgMTIwLCAxNTAsIDE3MCB9LCB2ZXJ0aWNhbCA9IHsgMCwgNywg
MzkgfQorU2Nyb2xsLXNuYXAgb2Zmc2V0cyBmb3IgdmVydGljYWxSb3RhdGVkVGFyZ2V0OiBob3Jp
em9udGFsID0geyAwLCA3LCAzNSB9LCB2ZXJ0aWNhbCA9IHsgMCwgMzAsIDYwLCA5MCwgMTIwLCAx
NTAsIDE3NCB9CiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExF
VEUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254911</attachid>
            <date>2015-06-15 17:52:19 -0700</date>
            <delta_ts>2015-06-16 11:19:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-145843-20150615175145.patch</filename>
            <type>text/plain</type>
            <size>23111</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NTU1MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBACisyMDE1LTA2LTE1ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIENTUyBTY3JvbGwgU25hcCAt
IHN1cHBvcnQgc25hcHBpbmcgdG8gbmVzdGVkIGVsZW1lbnRzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDU4NDMKKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzIxMzM5NTgxPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRlc3RlZCBieSBjc3MzL3Njcm9sbC1zbmFwL25lc3RlZC1lbGVtZW50cy5odG1sCisK
KyAgICAgICAgVGhlIFNjcm9sbCBTbmFwIFBvaW50IGltcGxlbWVudGF0aW9uIHdhcyBub3QgcHJv
cGVybHkgaGFuZGxpbmcgbmVzdGVkIGVsZW1lbnRzLgorICAgICAgICBUaGlzIGNvdWxkIGJlIHJl
c29sdmVkIGJ5IHJlY3Vyc2l2ZWx5IGNhbGxpbmcgJ2FwcGVuZENoaWxkU25hcE9mZnNldHMnLCBi
dXQgdGhpcworICAgICAgICBzZWVtZWQgbGlrZSBhbiBpbmVmZmljaWVudCBhcHByb2FjaCwgZXNw
ZWNpYWxseSBjb25zaWRlcmluZyBob3cgb2Z0ZW4gdGhpcyBtZXRob2QKKyAgICAgICAgaXMgY2Fs
bGVkIGR1cmluZyB2YXJpb3VzIHNjYWxpbmcgYW5kIG90aGVyIG9wZXJhdGlvbnMuCisgICAgICAg
IAorICAgICAgICBJbnN0ZWFkLCBkbyB0aGUgZm9sbG93aW5nOgorICAgICAgICAoMSkgQWRkIGEg
bmV3IEhhc2hTZXQgdG8gUmVuZGVyVmlldyB0aGF0IGhvbGRzIGEgY29sbGVjdGlvbiBvZiBSZW5k
ZXJFbGVtZW50cyB0aGF0CisgICAgICAgICAgICBoYXZlIHNjcm9sbC1zbmFwLWNvb3JkaW5hdGVz
LgorICAgICAgICAoMikgRHVyaW5nIFJlbmRlckVsZW1lbnQ6OnN0eWxlV2lsbENoYW5nZSwgcmVn
aXN0ZXIgYWxsIGVsZW1lbnRzIHRoYXQgaGF2ZSB0aGUKKyAgICAgICAgICAgIHNjcm9sbC1zbmFw
LWNvb3JkaW5hdGVzIHN0eWxlIHdpdGggdGhlIFJlbmRlclZpZXcuCisgICAgICAgICgzKSBXaGVu
IHBlcmZvcm1pbmcgJ2FwcGVuZENoaWxkU25hcE9mZnNldHMnLCByZWZlciB0byB0aGUgSGFzaFNl
dCBvZiBlbGVtZW50cywgc2VsZWN0IHRoZQorICAgICAgICAgICAgc3Vic2V0IG9mIHRoZXNlIGVu
dHJpZXMgcmVsZXZhbnQgdG8gdGhlIGN1cnJlbnQgc2Nyb2xsaW5nIGNvbnRhaW5lciwgYW5kIGJ1
aWxkIHVwIHRoZQorICAgICAgICAgICAgc2V0IG9mIHNjcm9sbC1zbmFwLWNvb3JkaW5hdGVzIG5l
ZWRlZCBmb3IgdGhlIGN1cnJlbnQgc2Nyb2xsaW5nIGNvbnRhaW5lci4KKworICAgICAgICAqIHBh
Z2Uvc2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjphcHBlbmRDaGlsZFNuYXBPZmZzZXRzKTogQ2hlY2sgdGhlIHNjcm9sbC1zbmFwLWNvb3JkaW5h
dGUgUmVuZGVyRWxlbWVudCBIYXNoU2V0CisgICAgICAgIGZvciB0aGUgUmVuZGVyVmlldyB0byBm
aW5kIGFsbCBlbGVtZW50cyB0aGF0IGFyZSBjaGlsZHJlbiBvZiB0aGUgY3VycmVudCBzY3JvbGxp
bmcgY29udGFpbmVyLgorICAgICAgICBBZGQgdGhlIHNjcm9sbC1zbmFwLWNvb3JkaW5hdGVzIGZv
ciB0aGVzZSBSZW5kZXJFbGVtZW50cyB0byB0aGUgY3VycmVudCBzZXQgb2Ygc25hcCBwb2ludHMu
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6ZmluZEVuY2xvc2luZ1Njcm9sbGFibGVDb250YWluZXIpOiBOZXcgaGVscGVyIGZ1bmN0aW9u
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6c3R5bGVXaWxsQ2hhbmdlKTogSWYg
dGhlIGN1cnJlbnQgZWxlbWVudCBoYXMgc2Nyb2xsLXNuYXAtY29vcmRpbmF0ZQorICAgICAgICBk
ZWZpbmVkLCByZW1lbWJlciBpdCBmb3IgbGF0ZXIgc28gd2UgY2FuIHVzZSBpdCB3aXRoIHRoZSBy
ZWxldmFudCBzY3JvbGxpbmcgY29udGFpbmVyCisgICAgICAgIGFmdGVyIGxheW91dCBjb21wbGV0
ZXMuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50Ojp3aWxsQmVSZW1vdmVkRnJvbVRy
ZWUpOiBVbnJlZ2lzdGVyIHRoZSBjdXJyZW50IGVsZW1lbnQgZnJvbSB0aGUKKyAgICAgICAgUmVu
ZGVyVmlldy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OmZpbmRFbmNsb3NpbmdT
Y3JvbGxhYmxlQ29udGFpbmVyKTogQWRkZWQuIExvY2F0ZSB0aGUgcmVsZXZhbnQKKyAgICAgICAg
c2Nyb2xsaW5nIGNvbnRhaW5lciBmb3IgdGhlIGN1cnJlbnQgb2JqZWN0LgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJFbGVtZW50Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlZ2lzdGVyUmVuZGVyRWxlbWVudFdp
dGhTY3JvbGxTbmFwQ29vcmRpbmF0ZXMpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50Ojp1bnJlZ2lzdGVyUmVuZGVyRWxlbWVudFdpdGhTY3JvbGxTbmFwQ29vcmRpbmF0ZXMpOiBB
ZGRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5oOgorCiAyMDE1LTA2LTE1ICBD
YXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbU09V
UF0gTW92ZSBXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMgdG8gcGxhdGZvcm0gbGF5ZXIKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXhpc1Njcm9sbFNu
YXBPZmZzZXRzLmNwcAkocmV2aXNpb24gMTg1NTUyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEs
NiArMzEsNyBAQAogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiTGVuZ3RoLmgi
CiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCisjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1
ZGUgIlNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmgi
CiAKQEAgLTQwLDI4ICs0MSw0NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyB2b2lk
IGFwcGVuZENoaWxkU25hcE9mZnNldHMoSFRNTEVsZW1lbnQmIHBhcmVudCwgYm9vbCBzaG91bGRB
ZGRIb3Jpem9udGFsQ2hpbGRPZmZzZXRzLCBWZWN0b3I8TGF5b3V0VW5pdD4mIGhvcml6b250YWxT
bmFwT2Zmc2V0U3Vic2VxdWVuY2UsIGJvb2wgc2hvdWxkQWRkVmVydGljYWxDaGlsZE9mZnNldHMs
IFZlY3RvcjxMYXlvdXRVbml0PiYgdmVydGljYWxTbmFwT2Zmc2V0U3Vic2VxdWVuY2UpCiB7Ci0g
ICAgLy8gRklYTUU6IEluc3RlYWQgb2YgdHJhdmVyc2luZyBhbGwgY2hpbGRyZW4sIHJlZ2lzdGVy
IGNoaWxkcmVuIHdpdGggc25hcCBjb29yZGluYXRlcyBiZWZvcmUgYXBwZW5kaW5nIHRvIHNuYXBP
ZmZzZXRTdWJzZXF1ZW5jZS4KLSAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW5PZlR5cGU8
RWxlbWVudD4ocGFyZW50KSkgewotICAgICAgICBpZiAoUmVuZGVyQm94KiBib3ggPSBjaGlsZC5y
ZW5kZXJCb3goKSkgewotICAgICAgICAgICAgY29uc3QgYXV0byYgc2Nyb2xsU25hcENvb3JkaW5h
dGVzID0gYm94LT5zdHlsZSgpLnNjcm9sbFNuYXBDb29yZGluYXRlcygpOwotICAgICAgICAgICAg
aWYgKHNjcm9sbFNuYXBDb29yZGluYXRlcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgUmVuZGVyRWxlbWVudCogc2Nyb2xsQ29udGFpbmVyID0gcGFyZW50LnJlbmRl
cmVyKCk7CisgICAgQVNTRVJUKHNjcm9sbENvbnRhaW5lcik7CisgICAgQVNTRVJUKHNjcm9sbENv
bnRhaW5lci0+ZnJhbWUoKS52aWV3KCkpOworICAgIAorICAgIFJlbmRlclZpZXcqIHJlbmRlclZp
ZXcgPSBzY3JvbGxDb250YWluZXItPmZyYW1lKCkudmlldygpLT5yZW5kZXJWaWV3KCk7CisgICAg
aWYgKCFyZW5kZXJWaWV3KQorICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIExheW91dFJl
Y3Qgdmlld1NpemUgPSBib3gtPmNvbnRlbnRCb3hSZWN0KCk7Ci0gICAgICAgICAgICBMYXlvdXRV
bml0IHZpZXdXaWR0aCA9IHZpZXdTaXplLndpZHRoKCk7Ci0gICAgICAgICAgICBMYXlvdXRVbml0
IHZpZXdIZWlnaHQgPSB2aWV3U2l6ZS5oZWlnaHQoKTsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQg
cG9zaXRpb24gPSBib3gtPmxvY2FsVG9Db250YWluZXJQb2ludChGbG9hdFBvaW50KCksIHBhcmVu
dC5yZW5kZXJCb3goKSk7Ci0gICAgICAgICAgICBMYXlvdXRVbml0IGxlZnQgPSBwb3NpdGlvbi54
KCk7Ci0gICAgICAgICAgICBMYXlvdXRVbml0IHRvcCA9IHBvc2l0aW9uLnkoKTsKLSAgICAgICAg
ICAgIGZvciAoYXV0byYgY29vcmRpbmF0ZSA6IHNjcm9sbFNuYXBDb29yZGluYXRlcykgewotICAg
ICAgICAgICAgICAgIExheW91dFVuaXQgbGFzdFBvdGVudGlhbFNuYXBQb3NpdGlvblggPSBsZWZ0
ICsgdmFsdWVGb3JMZW5ndGgoY29vcmRpbmF0ZS53aWR0aCgpLCB2aWV3V2lkdGgpOwotICAgICAg
ICAgICAgICAgIGlmIChzaG91bGRBZGRIb3Jpem9udGFsQ2hpbGRPZmZzZXRzICYmIGxhc3RQb3Rl
bnRpYWxTbmFwUG9zaXRpb25YID4gMCkKLSAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbFNu
YXBPZmZzZXRTdWJzZXF1ZW5jZS5hcHBlbmQobGFzdFBvdGVudGlhbFNuYXBQb3NpdGlvblgpOwot
Ci0gICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBsYXN0UG90ZW50aWFsU25hcFBvc2l0aW9uWSA9
IHRvcCArIHZhbHVlRm9yTGVuZ3RoKGNvb3JkaW5hdGUuaGVpZ2h0KCksIHZpZXdIZWlnaHQpOwot
ICAgICAgICAgICAgICAgIGlmIChzaG91bGRBZGRWZXJ0aWNhbENoaWxkT2Zmc2V0cyAmJiBsYXN0
UG90ZW50aWFsU25hcFBvc2l0aW9uWSA+IDApCi0gICAgICAgICAgICAgICAgICAgIHZlcnRpY2Fs
U25hcE9mZnNldFN1YnNlcXVlbmNlLmFwcGVuZChsYXN0UG90ZW50aWFsU25hcFBvc2l0aW9uWSk7
Ci0gICAgICAgICAgICB9CisgICAgVmVjdG9yPGNvbnN0IFJlbmRlckVsZW1lbnQqPiBlbGVtZW50
czsKKyAgICBmb3IgKGNvbnN0IGF1dG8qIGVsZW1lbnQgOiByZW5kZXJWaWV3LT5yZW5kZXJFbGVt
ZW50c1dpdGhTY3JvbGxTbmFwQ29vcmRpbmF0ZXMoKSkgeworICAgICAgICBpZiAoIWVsZW1lbnQg
fHwgZWxlbWVudC0+ZmluZEVuY2xvc2luZ1Njcm9sbGFibGVDb250YWluZXIoKSAhPSBzY3JvbGxD
b250YWluZXIpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBlbGVtZW50cy5hcHBl
bmQoZWxlbWVudCk7CisgICAgfQorCisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGVsZW1lbnRzKSB7
CisgICAgICAgIEFTU0VSVChjaGlsZCk7CisgICAgICAgIEFTU0VSVChpczxSZW5kZXJCb3g+KGNo
aWxkKSk7CisgICAgICAgIGNvbnN0IFJlbmRlckJveCogYm94ID0gZG93bmNhc3Q8UmVuZGVyQm94
PihjaGlsZCk7CisgICAgICAgIGlmICghYm94KQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgY29uc3QgYXV0byYgc2Nyb2xsU25hcENvb3JkaW5hdGVzID0gYm94LT5zdHlsZSgpLnNj
cm9sbFNuYXBDb29yZGluYXRlcygpOworICAgICAgICBpZiAoc2Nyb2xsU25hcENvb3JkaW5hdGVz
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgTGF5
b3V0UmVjdCB2aWV3U2l6ZSA9IGJveC0+Y29udGVudEJveFJlY3QoKTsKKyAgICAgICAgTGF5b3V0
VW5pdCB2aWV3V2lkdGggPSB2aWV3U2l6ZS53aWR0aCgpOworICAgICAgICBMYXlvdXRVbml0IHZp
ZXdIZWlnaHQgPSB2aWV3U2l6ZS5oZWlnaHQoKTsKKyAgICAgICAgRmxvYXRQb2ludCBwb3NpdGlv
biA9IGJveC0+bG9jYWxUb0NvbnRhaW5lclBvaW50KEZsb2F0UG9pbnQoKSwgcGFyZW50LnJlbmRl
ckJveCgpKTsKKyAgICAgICAgTGF5b3V0VW5pdCBsZWZ0ID0gcG9zaXRpb24ueCgpOworICAgICAg
ICBMYXlvdXRVbml0IHRvcCA9IHBvc2l0aW9uLnkoKTsKKyAgICAgICAgZm9yIChhdXRvJiBjb29y
ZGluYXRlIDogc2Nyb2xsU25hcENvb3JkaW5hdGVzKSB7CisgICAgICAgICAgICBMYXlvdXRVbml0
IGxhc3RQb3RlbnRpYWxTbmFwUG9zaXRpb25YID0gbGVmdCArIHZhbHVlRm9yTGVuZ3RoKGNvb3Jk
aW5hdGUud2lkdGgoKSwgdmlld1dpZHRoKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRBZGRIb3Jp
em9udGFsQ2hpbGRPZmZzZXRzICYmIGxhc3RQb3RlbnRpYWxTbmFwUG9zaXRpb25YID4gMCkKKyAg
ICAgICAgICAgICAgICBob3Jpem9udGFsU25hcE9mZnNldFN1YnNlcXVlbmNlLmFwcGVuZChsYXN0
UG90ZW50aWFsU25hcFBvc2l0aW9uWCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExheW91
dFVuaXQgbGFzdFBvdGVudGlhbFNuYXBQb3NpdGlvblkgPSB0b3AgKyB2YWx1ZUZvckxlbmd0aChj
b29yZGluYXRlLmhlaWdodCgpLCB2aWV3SGVpZ2h0KTsKKyAgICAgICAgICAgIGlmIChzaG91bGRB
ZGRWZXJ0aWNhbENoaWxkT2Zmc2V0cyAmJiBsYXN0UG90ZW50aWFsU25hcFBvc2l0aW9uWSA+IDAp
CisgICAgICAgICAgICAgICAgdmVydGljYWxTbmFwT2Zmc2V0U3Vic2VxdWVuY2UuYXBwZW5kKGxh
c3RQb3RlbnRpYWxTbmFwUG9zaXRpb25ZKTsKICAgICAgICAgfQogICAgIH0KIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAJKHJldmlzaW9uIDE4NTU1
MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2
aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwNSBBbGxhbiBTYW5k
ZmVsZCBKZW5zZW4gKGtkZUBjYXJld29sZi5jb20pCiAgKiAgICAgICAgICAgKEMpIDIwMDUsIDIw
MDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5
LCAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdo
dCAoQykgMjAxMCwgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKQEAgLTkwNCw2ICs5MDQsMTggQEAgdm9pZCBSZW5kZXJFbGVtZW50OjpzdHlsZVdpbGxD
aGFuZ2UoU3R5bAogICAgICAgICB9CiAgICAgfQogCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05B
UCkKKyAgICBpZiAoIW5ld1N0eWxlLnNjcm9sbFNuYXBDb29yZGluYXRlcygpLmlzRW1wdHkoKSB8
fCAob2xkU3R5bGUgJiYgIW9sZFN0eWxlLT5zY3JvbGxTbmFwQ29vcmRpbmF0ZXMoKS5pc0VtcHR5
KCkpKSB7CisgICAgICAgIEFTU0VSVChmcmFtZSgpLnZpZXcoKSk7CisgICAgICAgIGlmIChSZW5k
ZXJWaWV3KiByZW5kZXJWaWV3ID0gZnJhbWUoKS52aWV3KCktPnJlbmRlclZpZXcoKSkgeworICAg
ICAgICAgICAgaWYgKG5ld1N0eWxlLnNjcm9sbFNuYXBDb29yZGluYXRlcygpLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgICAgICByZW5kZXJWaWV3LT51bnJlZ2lzdGVyUmVuZGVyRWxlbWVudFdpdGhT
Y3JvbGxTbmFwQ29vcmRpbmF0ZXModGhpcyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgcmVuZGVyVmlldy0+cmVnaXN0ZXJSZW5kZXJFbGVtZW50V2l0aFNjcm9sbFNuYXBDb29y
ZGluYXRlcyh0aGlzKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCiAgICAgaWYgKGlzUm9v
dCgpIHx8IGlzQm9keSgpKQogICAgICAgICB2aWV3KCkuZnJhbWVWaWV3KCkudXBkYXRlRXh0ZW5k
QmFja2dyb3VuZElmTmVjZXNzYXJ5KCk7CiB9CkBAIC0xMDU4LDYgKzEwNzAsMTUgQEAgdm9pZCBS
ZW5kZXJFbGVtZW50Ojp3aWxsQmVSZW1vdmVkRnJvbVRyZQogICAgIGlmIChhdXRvKiBjb250YWlu
ZXJGbG93VGhyZWFkID0gcGFyZW50KCktPnJlbmRlck5hbWVkRmxvd1RocmVhZFdyYXBwZXIoKSkK
ICAgICAgICAgY29udGFpbmVyRmxvd1RocmVhZC0+cmVtb3ZlRmxvd0NoaWxkKCp0aGlzKTsKIAor
ICAgIAorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgaWYgKCFtX3N0eWxlLT5zY3Jv
bGxTbmFwQ29vcmRpbmF0ZXMoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgQVNTRVJUKGZyYW1lKCku
dmlldygpKTsKKyAgICAgICAgaWYgKFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSBmcmFtZSgpLnZp
ZXcoKS0+cmVuZGVyVmlldygpKQorICAgICAgICAgICAgcmVuZGVyVmlldy0+dW5yZWdpc3RlclJl
bmRlckVsZW1lbnRXaXRoU2Nyb2xsU25hcENvb3JkaW5hdGVzKHRoaXMpOworICAgIH0KKyNlbmRp
ZgorCiAgICAgUmVuZGVyT2JqZWN0Ojp3aWxsQmVSZW1vdmVkRnJvbVRyZWUoKTsKIH0KIApAQCAt
MTc2MSw0ICsxNzgyLDE4IEBAIGNvbnN0IFJlbmRlckVsZW1lbnQqIFJlbmRlckVsZW1lbnQ6OmVu
Y2wKICAgICByZXR1cm4gY3VycmVudDsKIH0KIAorY29uc3QgUmVuZGVyRWxlbWVudCogUmVuZGVy
RWxlbWVudDo6ZmluZEVuY2xvc2luZ1Njcm9sbGFibGVDb250YWluZXIoKSBjb25zdAoreworICAg
IGZvciAoY29uc3QgUmVuZGVyRWxlbWVudCogY2FuZGlkYXRlID0gdGhpczsgY2FuZGlkYXRlOyBj
YW5kaWRhdGUgPSBjYW5kaWRhdGUtPnBhcmVudCgpKSB7CisgICAgICAgIGlmICghaXM8UmVuZGVy
Qm94PigqY2FuZGlkYXRlKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAg
ICAgY29uc3QgUmVuZGVyQm94KiBib3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KGNhbmRpZGF0ZSk7
CisgICAgICAgIGlmIChib3ggJiYgYm94LT5oYXNPdmVyZmxvd0NsaXAoKSkKKyAgICAgICAgICAg
IHJldHVybiBjYW5kaWRhdGU7CisgICAgfQorICAgIAorICAgIHJldHVybiBudWxscHRyOworfQor
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgJKHJldmlz
aW9uIDE4NTU1MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAxOTk5
IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkg
S29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYs
IDIwMDcsIDIwMDksIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDA3LCAyMDA5LCAyMDEzLCAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIwOCw2ICsyMDgsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzZXRJc0NTU0FuaW1hdGluZyhib29sIGIpIHsgbV9pc0NTU0Fu
aW1hdGluZyA9IGI7IH0KICAgICAKICAgICBjb25zdCBSZW5kZXJFbGVtZW50KiBlbmNsb3NpbmdS
ZW5kZXJlcldpdGhUZXh0RGVjb3JhdGlvbihUZXh0RGVjb3JhdGlvbiwgYm9vbCBmaXJzdExpbmUp
IGNvbnN0OworICAgIGNvbnN0IFJlbmRlckVsZW1lbnQqIGZpbmRFbmNsb3NpbmdTY3JvbGxhYmxl
Q29udGFpbmVyKCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICBlbnVtIEJhc2VUeXBlRmxhZ3Mg
ewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAkocmV2aXNpb24g
MTg1NTUyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDI4LDQgKzE0MjgsMTYgQEAgdW5zaWduZWQgUmVuZGVyVmlldzo6cGFn
ZUNvdW50KCkgY29uc3QKICAgICByZXR1cm4gMDsKIH0KIAorI2lmIEVOQUJMRShDU1NfU0NST0xM
X1NOQVApCit2b2lkIFJlbmRlclZpZXc6OnJlZ2lzdGVyUmVuZGVyRWxlbWVudFdpdGhTY3JvbGxT
bmFwQ29vcmRpbmF0ZXMoY29uc3QgUmVuZGVyRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBtX3Jl
bmRlckVsZW1lbnRzV2l0aFNjcm9sbFNuYXBDb29yZGluYXRlcy5hZGQoZWxlbWVudCk7Cit9CisK
K3ZvaWQgUmVuZGVyVmlldzo6dW5yZWdpc3RlclJlbmRlckVsZW1lbnRXaXRoU2Nyb2xsU25hcENv
b3JkaW5hdGVzKGNvbnN0IFJlbmRlckVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgbV9yZW5kZXJF
bGVtZW50c1dpdGhTY3JvbGxTbmFwQ29vcmRpbmF0ZXMucmVtb3ZlKGVsZW1lbnQpOworfQorI2Vu
ZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclZpZXcuaAkocmV2aXNpb24gMTg1NTUyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMTUgQXBwbGUg
SW5jLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNDUsNiArMjQ1LDEyIEBAIHB1YmxpYzoKICAg
ICB2b2lkIHByb3RlY3RSZW5kZXJXaWRnZXRVbnRpbExheW91dElzRG9uZShSZW5kZXJXaWRnZXQm
IHdpZGdldCkgeyBtX3Byb3RlY3RlZFJlbmRlcldpZGdldHMuYXBwZW5kKCZ3aWRnZXQpOyB9CiAg
ICAgdm9pZCByZWxlYXNlUHJvdGVjdGVkUmVuZGVyV2lkZ2V0cygpIHsgbV9wcm90ZWN0ZWRSZW5k
ZXJXaWRnZXRzLmNsZWFyKCk7IH0KIAorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAg
dm9pZCByZWdpc3RlclJlbmRlckVsZW1lbnRXaXRoU2Nyb2xsU25hcENvb3JkaW5hdGVzKGNvbnN0
IFJlbmRlckVsZW1lbnQqKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJSZW5kZXJFbGVtZW50V2l0aFNj
cm9sbFNuYXBDb29yZGluYXRlcyhjb25zdCBSZW5kZXJFbGVtZW50Kik7CisgICAgY29uc3QgSGFz
aFNldDxjb25zdCBSZW5kZXJFbGVtZW50Kj4mIHJlbmRlckVsZW1lbnRzV2l0aFNjcm9sbFNuYXBD
b29yZGluYXRlcygpIHsgcmV0dXJuIG1fcmVuZGVyRWxlbWVudHNXaXRoU2Nyb2xsU25hcENvb3Jk
aW5hdGVzOyB9CisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBtYXBMb2Nh
bFRvQ29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWlu
ZXIsIFRyYW5zZm9ybVN0YXRlJiwgTWFwQ29vcmRpbmF0ZXNGbGFncywgYm9vbCogd2FzRml4ZWQp
IGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgY29uc3QgUmVuZGVyT2JqZWN0KiBwdXNoTWFw
cGluZ1RvQ29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGFuY2VzdG9yVG9T
dG9wQXQsIFJlbmRlckdlb21ldHJ5TWFwJikgY29uc3Qgb3ZlcnJpZGU7CkBAIC0zNjcsNiArMzcz
LDkgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKICAgICBTZWxlY3Rp
b25SZWN0R2F0aGVyZXIgbV9zZWxlY3Rpb25SZWN0R2F0aGVyZXI7CiAjZW5kaWYKKyNpZiBFTkFC
TEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIEhhc2hTZXQ8Y29uc3QgUmVuZGVyRWxlbWVudCo+IG1f
cmVuZGVyRWxlbWVudHNXaXRoU2Nyb2xsU25hcENvb3JkaW5hdGVzOworI2VuZGlmCiB9OwogCiAv
LyBTdGFjay1iYXNlZCBjbGFzcyB0byBhc3Npc3Qgd2l0aCBMYXlvdXRTdGF0ZSBwdXNoL3BvcApJ
bmRleDogV2ViS2l0Lnhjd29ya3NwYWNlL3hjc2hhcmVkZGF0YS94Y3NjaGVtZXMvQWxsIFNvdXJj
ZSAodGFyZ2V0IFdlYlByb2Nlc3MpLnhjc2NoZW1lCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC54Y3dv
cmtzcGFjZS94Y3NoYXJlZGRhdGEveGNzY2hlbWVzL0FsbCBTb3VyY2UgKHRhcmdldCBXZWJQcm9j
ZXNzKS54Y3NjaGVtZQkocmV2aXNpb24gMTg1NTUyKQorKysgV2ViS2l0Lnhjd29ya3NwYWNlL3hj
c2hhcmVkZGF0YS94Y3NjaGVtZXMvQWxsIFNvdXJjZSAodGFyZ2V0IFdlYlByb2Nlc3MpLnhjc2No
ZW1lCSh3b3JraW5nIGNvcHkpCkBAIC0xNTMsNiArMTUzLDggQEAKICAgICAgICAgICAgIFJlZmVy
ZW5jZWRDb250YWluZXIgPSAiY29udGFpbmVyOlNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVw
cm9qIj4KICAgICAgICAgIDwvQnVpbGRhYmxlUmVmZXJlbmNlPgogICAgICAgPC9NYWNyb0V4cGFu
c2lvbj4KKyAgICAgIDxBZGRpdGlvbmFsT3B0aW9ucz4KKyAgICAgIDwvQWRkaXRpb25hbE9wdGlv
bnM+CiAgICA8L1Rlc3RBY3Rpb24+CiAgICA8TGF1bmNoQWN0aW9uCiAgICAgICBzZWxlY3RlZERl
YnVnZ2VySWRlbnRpZmllciA9ICJYY29kZS5EZWJ1Z2dlckZvdW5kYXRpb24uRGVidWdnZXIuTExE
QiIKQEAgLTE2Miw4ICsxNjQsMTAgQEAKICAgICAgIGJ1aWxkQ29uZmlndXJhdGlvbiA9ICJEZWJ1
ZyIKICAgICAgIGlnbm9yZXNQZXJzaXN0ZW50U3RhdGVPbkxhdW5jaCA9ICJOTyIKICAgICAgIGRl
YnVnRG9jdW1lbnRWZXJzaW9uaW5nID0gIllFUyIKKyAgICAgIGRlYnVnU2VydmljZUV4dGVuc2lv
biA9ICJpbnRlcm5hbCIKICAgICAgIGFsbG93TG9jYXRpb25TaW11bGF0aW9uID0gIllFUyI+Ci0g
ICAgICA8QnVpbGRhYmxlUHJvZHVjdFJ1bm5hYmxlPgorICAgICAgPEJ1aWxkYWJsZVByb2R1Y3RS
dW5uYWJsZQorICAgICAgICAgcnVubmFibGVEZWJ1Z2dpbmdNb2RlID0gIjAiPgogICAgICAgICAg
PEJ1aWxkYWJsZVJlZmVyZW5jZQogICAgICAgICAgICAgQnVpbGRhYmxlSWRlbnRpZmllciA9ICJw
cmltYXJ5IgogICAgICAgICAgICAgQmx1ZXByaW50SWRlbnRpZmllciA9ICIxQTUwREIxRDExMEEz
QkRDMDAwRDNGRTUiCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODU1NTIpCisrKyBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxNS0wNi0xNSAgQnJl
bnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBDU1MgU2Nyb2xsIFNu
YXAgLSBzdXBwb3J0IHNuYXBwaW5nIHRvIG5lc3RlZCBlbGVtZW50cworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ1ODQzCisgICAgICAgIDxyZGFyOi8v
cHJvYmxlbS8yMTMzOTU4MT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIGNzczMvc2Nyb2xsLXNuYXAvbmVzdGVkLWVsZW1lbnRzLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogY3NzMy9zY3JvbGwtc25hcC9uZXN0ZWQtZWxlbWVudHMuaHRt
bDogQWRkZWQuCisgICAgICAgICogY3NzMy9zY3JvbGwtc25hcC9zY3JvbGwtc25hcC1vZmZzZXRz
LWV4cGVjdGVkLnR4dDogVXBkYXRlZCB0bworICAgICAgICAgIGFjY291bnQgZm9yIDUwJS81MCUg
c2Nyb2xsLXNuYXAtY29vcmRpbmF0ZXMuCisKIDIwMTUtMDYtMTMgIENocmlzIEZsZWl6YWNoICA8
Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KIAogICAgICAgICBBWDogV2ViS2l0IGV4cG9zZXMgYWxsIFJ1
YnkgVGV4dCBhcyBVbmtub3duIChKYXBhbmVzZSBFUFVCIGFjY2Vzc2liaWxpdHkgYmxvY2tlcikK
SW5kZXg6IExheW91dFRlc3RzL2NzczMvc2Nyb2xsLXNuYXAvbmVzdGVkLWVsZW1lbnRzLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9jc3MzL3Njcm9sbC1zbmFwL25lc3Rl
ZC1lbGVtZW50cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9jc3Mz
L3Njcm9sbC1zbmFwL25lc3RlZC1lbGVtZW50cy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw5IEBACitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKK1Njcm9sbC1zbmFwIG9mZnNldHMgZm9yICdjb250YWluZXInOiB2ZXJ0aWNhbCA9
IHsgMCwgMTAxLCAyMTgsIDMzNSwgNDUyLCA1NjksIDY4NiwgODAzLCA5MjAsIDEwMzcsIDExNTQs
IDEyNzEsIDEzODgsIDE1MDUsIDE2MjIsIDE3MzksIDE4NTYsIDE5NzMsIDIwOTAsIDIyMDcsIDQ5
MzggfQorUEFTUyBTY3JvbGwtc25hcCBvZmZzZXRzIGZvciAnaW52YWxpZENvbnRhaW5lcic6IFVO
REVGSU5FRAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKSW5kZXg6IExheW91dFRlc3RzL2NzczMvc2Nyb2xsLXNuYXAvbmVzdGVkLWVsZW1lbnRzLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvY3NzMy9zY3JvbGwtc25hcC9uZXN0ZWQtZWxl
bWVudHMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2NzczMvc2Nyb2xsLXNuYXAv
bmVzdGVkLWVsZW1lbnRzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTUgQEAKKzwh
RE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8dGl0bGU+U25hcCBwb2ludHMgLSBu
ZXN0ZWQgc25hcCBjb29yZGluYXRlczwvdGl0bGU+CisgICAgPHN0eWxlPgorICAgICAgICAuc2Ny
b2xsYWJsZSB7CisgICAgICAgICAgICBvdmVyZmxvdzogc2Nyb2xsOworICAgICAgICAgICAgLXdl
YmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOworICAgICAgICAgICAgYm9yZGVyOiAxcHgg
ZGFzaGVkIGJsYWNrOworICAgICAgICAgICAgaGVpZ2h0OiAzMDBweDsKKyAgICAgICAgICAgIG1h
cmdpbjogMCAxMHB4OworICAgICAgICB9CisgICAgCisgICAgICAgIC5jZW50ZXItc25hcC1yZWNl
aXZlciB7CisgICAgICAgICAgICAtd2Via2l0LXNjcm9sbC1zbmFwLXR5cGU6IG1hbmRhdG9yeTsK
KyAgICAgICAgICAgIC13ZWJraXQtc2Nyb2xsLXNuYXAtZGVzdGluYXRpb246IDAgMDsKKyAgICAg
ICAgfQorICAgIAorICAgICAgICAuc25hcC1wb2ludCB7CisgICAgICAgICAgICBtYXJnaW4tdG9w
OiAxMDBweDsKKyAgICAgICAgICAgIHdpZHRoOiAxNXB4OworICAgICAgICAgICAgaGVpZ2h0OiAx
NXB4OworICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7CisgICAgICAgICAgICAt
d2Via2l0LXNjcm9sbC1zbmFwLWNvb3JkaW5hdGU6IDAgMHB4OworICAgICAgICB9CisgICAgCisg
ICAgICAgIC5zbmFwLXBvaW50OjphZnRlciB7CisgICAgICAgICAgICBmb250LXNpemU6IDFlbTsK
KyAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICAgICAgICAgIGNvbnRlbnQ6ICcr
JzsKKyAgICAgICAgfQorICAgIAorICAgICAgICAubmVzdGVkID4gLnNuYXAtcG9pbnQgeworICAg
ICAgICAgICAgbWFyZ2luLWxlZnQ6IDUwcHg7CisgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xp
ZCByZWQ7CisgICAgICAgIH0KKyAgICAgICAgLm5lc3RlZCA+IC5uZXN0ZWQgPiAuc25hcC1wb2lu
dCB7CisgICAgICAgICAgICBtYXJnaW4tbGVmdDogMTAwcHg7CisgICAgICAgICAgICBib3JkZXI6
IDFweCBzb2xpZCBibHVlOworICAgICAgICB9CisgICAgCisgICAgICAgIC5sYXJnZS1jb250ZW50
IHsKKyAgICAgICAgICAgIGhlaWdodDogMzAwMHB4OworICAgICAgICAgICAgd2lkdGg6IDEwMCU7
CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgLnNtYWxsLWNvbnRlbnQgeworICAgICAgICAgICAg
aGVpZ2h0OiAyMDBweDsKKyAgICAgICAgICAgIHdpZHRoOiAxMDAlOworICAgICAgICB9CisKKyAg
ICAgICAgLmludmFsaWRDb250YWluZXIgeworICAgICAgICAgICAgYm9yZGVyOiAxcHggZGFzaGVk
IGJsYWNrOworICAgICAgICAgICAgaGVpZ2h0OiAzMDBweDsKKyAgICAgICAgICAgIG1hcmdpbjog
MCAxMHB4OworICAgICAgICAgICAgb3BhY2l0eTogMC41OworICAgICAgICAgICAgb3ZlcmZsb3c6
IGhpZGRlbjsKKyAgICAgICAgfQorICAgIDwvc3R5bGU+CisgICAgICAgIDxzY3JpcHQgc3JjPSIu
Li8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0
PgorICAgICAgICBmdW5jdGlvbiBydW5UZXN0KCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFy
IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKTsKKyAgICAg
ICAgICAgIGRlYnVnKCJTY3JvbGwtc25hcCBvZmZzZXRzIGZvciAnY29udGFpbmVyJzogIiArIHdp
bmRvdy5pbnRlcm5hbHMuc2Nyb2xsU25hcE9mZnNldHMoY29udGFpbmVyKSk7CisKKyAgICAgICAg
ICAgIHZhciBpbnZhbGlkQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ludmFs
aWRDb250YWluZXInKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgdGVzdEZh
aWxlZCgiU2Nyb2xsLXNuYXAgb2Zmc2V0cyBmb3IgJ2ludmFsaWRDb250YWluZXInOiAiICsgd2lu
ZG93LmludGVybmFscy5zY3JvbGxTbmFwT2Zmc2V0cyhpbnZhbGlkQ29udGFpbmVyKSk7CisgICAg
ICAgICAgICB9IGNhdGNoKGV4KSB7CisgICAgICAgICAgICAgICAgdGVzdFBhc3NlZCgiU2Nyb2xs
LXNuYXAgb2Zmc2V0cyBmb3IgJ2ludmFsaWRDb250YWluZXInOiBVTkRFRklORUQiKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgICAgICAgICB0ZXN0
UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIG9uTG9h
ZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAg
ICAgICAgICAgICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLndh
aXRVbnRpbERvbmUoKTsKKyAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KHJ1blRlc3QsIDApOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHkgb25sb2FkPSJvbkxvYWQoKTsiPgorICAgIDxkaXYgaWQ9ImNvbnRhaW5lciIgY2xhc3M9ImNl
bnRlci1zbmFwLXJlY2VpdmVyIHNjcm9sbGFibGUiPgorICAgICAgICA8ZGl2IGNsYXNzPSJzbmFw
LXBvaW50Ij48L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0ibmVzdGVkIj4KKyAgICAgICAgICAg
IDxkaXYgY2xhc3M9InNuYXAtcG9pbnQiPjwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICAgICAg
PGRpdiBjbGFzcz0ibmVzdGVkIj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9Im5lc3RlZCI+Cisg
ICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic25hcC1wb2ludCI+PC9kaXY+CisgICAgICAgICAg
ICA8L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InNuYXAtcG9pbnQi
PjwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJzbmFwLXBvaW50Ij48L2Rpdj4KKyAgICAgICAg
PGRpdiBjbGFzcz0ibmVzdGVkIj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InNuYXAtcG9pbnQi
PjwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0ibmVzdGVkIj4KKyAg
ICAgICAgICAgIDxkaXYgY2xhc3M9Im5lc3RlZCI+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFz
cz0ic25hcC1wb2ludCI+PC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC9kaXY+
CisgICAgICAgIDxkaXYgY2xhc3M9Im5lc3RlZCI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJz
bmFwLXBvaW50Ij48L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InNu
YXAtcG9pbnQiPjwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJuZXN0ZWQiPgorICAgICAgICAg
ICAgPGRpdiBjbGFzcz0ic25hcC1wb2ludCI+PC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAg
ICA8ZGl2IGNsYXNzPSJzbmFwLXBvaW50Ij48L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0ic25h
cC1wb2ludCI+PC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9Im5lc3RlZCI+CisgICAgICAgICAg
ICA8ZGl2IGNsYXNzPSJzbmFwLXBvaW50Ij48L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgICAg
ICA8ZGl2IGNsYXNzPSJzbmFwLXBvaW50Ij48L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0ibmVz
dGVkIj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InNuYXAtcG9pbnQiPjwvZGl2PgorICAgICAg
ICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0ibmVzdGVkIj4KKyAgICAgICAgICAgIDxkaXYg
Y2xhc3M9Im5lc3RlZCI+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic25hcC1wb2ludCI+
PC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgICAgICA8ZGl2
IGNsYXNzPSJzbmFwLXBvaW50Ij48L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0ibmVzdGVkIj4K
KyAgICAgICAgICAgIDxkaXYgY2xhc3M9InNuYXAtcG9pbnQiPjwvZGl2PgorICAgICAgICA8L2Rp
dj4KKyAgICAgICAgPGRpdiBjbGFzcz0ibmVzdGVkIj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9
Im5lc3RlZCI+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic25hcC1wb2ludCI+PC9kaXY+
CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9
ImxhcmdlLWNvbnRlbnQiPjwvZGl2PgorICAgIDwvZGl2PgorICAgIDxkaXYgaWQ9ImludmFsaWRD
b250YWluZXIiIGNsYXNzPSJjZW50ZXItc25hcC1yZWNlaXZlciBpbnZhbGlkQ29udGFpbmVyIj4K
KyAgICAgICAgPGRpdiBjbGFzcz0ic25hcC1wb2ludCI+PC9kaXY+CisgICAgICAgIDxkaXYgY2xh
c3M9Im5lc3RlZCI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzbmFwLXBvaW50Ij48L2Rpdj4K
KyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9Im5lc3RlZCI+CisgICAgICAgICAg
ICA8ZGl2IGNsYXNzPSJuZXN0ZWQiPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNuYXAt
cG9pbnQiPjwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgIDwv
ZGl2PgorICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2NzczMvc2Nyb2xs
LXNuYXAvc2Nyb2xsLXNuYXAtb2Zmc2V0cy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvY3NzMy9zY3JvbGwtc25hcC9zY3JvbGwtc25hcC1vZmZzZXRzLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMTg1NTUyKQorKysgTGF5b3V0VGVzdHMvY3NzMy9zY3JvbGwtc25hcC9zY3Jv
bGwtc25hcC1vZmZzZXRzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMiwxNiArMiwx
NiBAQCBUZXN0cyB0aGF0IHRoZSBzY3JvbGwtc25hcCBmZWF0dXJlIHdvcmtzCiAgUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCi1TY3JvbGwtc25hcCBvZmZz
ZXRzIGZvciBob3Jpem9udGFsVGFyZ2V0OiBob3Jpem9udGFsID0geyAwLCAzMCwgNjAsIDkwLCAx
MjAsIDE1MCB9LCB2ZXJ0aWNhbCA9IHsgMCwgMTUgfQotU2Nyb2xsLXNuYXAgb2Zmc2V0cyBmb3Ig
dmVydGljYWxUYXJnZXQ6IGhvcml6b250YWwgPSB7IDAsIDE1IH0sIHZlcnRpY2FsID0geyAwLCAz
MCwgNjAsIDkwLCAxMjAsIDE1MCB9Ci1TY3JvbGwtc25hcCBvZmZzZXRzIGZvciBob3Jpem9udGFs
Qm9yZGVyZWRUYXJnZXQ6IGhvcml6b250YWwgPSB7IDAsIDMwLCA2MCwgOTAsIDEyMCwgMTUwIH0s
IHZlcnRpY2FsID0geyAwLCAxNSB9Ci1TY3JvbGwtc25hcCBvZmZzZXRzIGZvciB2ZXJ0aWNhbEJv
cmRlcmVkVGFyZ2V0OiBob3Jpem9udGFsID0geyAwLCAxNSB9LCB2ZXJ0aWNhbCA9IHsgMCwgMzAs
IDYwLCA5MCwgMTIwLCAxNTAgfQotU2Nyb2xsLXNuYXAgb2Zmc2V0cyBmb3IgaG9yaXpvbnRhbFBh
ZGRlZFRhcmdldDogaG9yaXpvbnRhbCA9IHsgMCwgMzAsIDYwLCA5MCwgMTIwLCAxNTAsIDE3MCB9
LCB2ZXJ0aWNhbCA9IHsgMCwgMzkgfQotU2Nyb2xsLXNuYXAgb2Zmc2V0cyBmb3IgdmVydGljYWxQ
YWRkZWRUYXJnZXQ6IGhvcml6b250YWwgPSB7IDAsIDM1IH0sIHZlcnRpY2FsID0geyAwLCAzMCwg
NjAsIDkwLCAxMjAsIDE1MCwgMTc0IH0KLVNjcm9sbC1zbmFwIG9mZnNldHMgZm9yIGhvcml6b250
YWxCb3JkZXJlZFBhZGRlZFRhcmdldDogaG9yaXpvbnRhbCA9IHsgMCwgMzAsIDYwLCA5MCwgMTIw
LCAxNTAsIDE3MCB9LCB2ZXJ0aWNhbCA9IHsgMCwgMzkgfQotU2Nyb2xsLXNuYXAgb2Zmc2V0cyBm
b3IgdmVydGljYWxCb3JkZXJlZFBhZGRlZFRhcmdldDogaG9yaXpvbnRhbCA9IHsgMCwgMzUgfSwg
dmVydGljYWwgPSB7IDAsIDMwLCA2MCwgOTAsIDEyMCwgMTUwLCAxNzQgfQotU2Nyb2xsLXNuYXAg
b2Zmc2V0cyBmb3IgaG9yaXpvbnRhbFJvdGF0ZWRUYXJnZXQ6IGhvcml6b250YWwgPSB7IDAsIDMw
LCA2MCwgOTAsIDEyMCwgMTUwLCAxNzAgfSwgdmVydGljYWwgPSB7IDAsIDM5IH0KLVNjcm9sbC1z
bmFwIG9mZnNldHMgZm9yIHZlcnRpY2FsUm90YXRlZFRhcmdldDogaG9yaXpvbnRhbCA9IHsgMCwg
MzUgfSwgdmVydGljYWwgPSB7IDAsIDMwLCA2MCwgOTAsIDEyMCwgMTUwLCAxNzQgfQorU2Nyb2xs
LXNuYXAgb2Zmc2V0cyBmb3IgaG9yaXpvbnRhbFRhcmdldDogaG9yaXpvbnRhbCA9IHsgMCwgMzAs
IDYwLCA5MCwgMTIwLCAxNTAgfSwgdmVydGljYWwgPSB7IDAsIDcsIDE1IH0KK1Njcm9sbC1zbmFw
IG9mZnNldHMgZm9yIHZlcnRpY2FsVGFyZ2V0OiBob3Jpem9udGFsID0geyAwLCA3LCAxNSB9LCB2
ZXJ0aWNhbCA9IHsgMCwgMzAsIDYwLCA5MCwgMTIwLCAxNTAgfQorU2Nyb2xsLXNuYXAgb2Zmc2V0
cyBmb3IgaG9yaXpvbnRhbEJvcmRlcmVkVGFyZ2V0OiBob3Jpem9udGFsID0geyAwLCAzMCwgNjAs
IDkwLCAxMjAsIDE1MCB9LCB2ZXJ0aWNhbCA9IHsgMCwgNywgMTUgfQorU2Nyb2xsLXNuYXAgb2Zm
c2V0cyBmb3IgdmVydGljYWxCb3JkZXJlZFRhcmdldDogaG9yaXpvbnRhbCA9IHsgMCwgNywgMTUg
fSwgdmVydGljYWwgPSB7IDAsIDMwLCA2MCwgOTAsIDEyMCwgMTUwIH0KK1Njcm9sbC1zbmFwIG9m
ZnNldHMgZm9yIGhvcml6b250YWxQYWRkZWRUYXJnZXQ6IGhvcml6b250YWwgPSB7IDAsIDMwLCA2
MCwgOTAsIDEyMCwgMTUwLCAxNzAgfSwgdmVydGljYWwgPSB7IDAsIDcsIDM5IH0KK1Njcm9sbC1z
bmFwIG9mZnNldHMgZm9yIHZlcnRpY2FsUGFkZGVkVGFyZ2V0OiBob3Jpem9udGFsID0geyAwLCA3
LCAzNSB9LCB2ZXJ0aWNhbCA9IHsgMCwgMzAsIDYwLCA5MCwgMTIwLCAxNTAsIDE3NCB9CitTY3Jv
bGwtc25hcCBvZmZzZXRzIGZvciBob3Jpem9udGFsQm9yZGVyZWRQYWRkZWRUYXJnZXQ6IGhvcml6
b250YWwgPSB7IDAsIDMwLCA2MCwgOTAsIDEyMCwgMTUwLCAxNzAgfSwgdmVydGljYWwgPSB7IDAs
IDcsIDM5IH0KK1Njcm9sbC1zbmFwIG9mZnNldHMgZm9yIHZlcnRpY2FsQm9yZGVyZWRQYWRkZWRU
YXJnZXQ6IGhvcml6b250YWwgPSB7IDAsIDcsIDM1IH0sIHZlcnRpY2FsID0geyAwLCAzMCwgNjAs
IDkwLCAxMjAsIDE1MCwgMTc0IH0KK1Njcm9sbC1zbmFwIG9mZnNldHMgZm9yIGhvcml6b250YWxS
b3RhdGVkVGFyZ2V0OiBob3Jpem9udGFsID0geyAwLCAzMCwgNjAsIDkwLCAxMjAsIDE1MCwgMTcw
IH0sIHZlcnRpY2FsID0geyAwLCA3LCAzOSB9CitTY3JvbGwtc25hcCBvZmZzZXRzIGZvciB2ZXJ0
aWNhbFJvdGF0ZWRUYXJnZXQ6IGhvcml6b250YWwgPSB7IDAsIDcsIDM1IH0sIHZlcnRpY2FsID0g
eyAwLCAzMCwgNjAsIDkwLCAxMjAsIDE1MCwgMTc0IH0KIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKIAogVEVTVCBDT01QTEVURQo=
</data>
<flag name="review"
          id="279931"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>