<?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>108323</bug_id>
          
          <creation_ts>2013-01-30 03:54:28 -0800</creation_ts>
          <short_desc>Improve the logic in WebCore::scrollOffsetForFixedPosition()</short_desc>
          <delta_ts>2026-03-03 12:57:37 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>CONFIGURATION CHANGED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Arvid Nilsson">anilsson</reporter>
          <assigned_to name="Arvid Nilsson">anilsson</assigned_to>
          <cc>abecsi</cc>
    
    <cc>aelias</cc>
    
    <cc>ahmad.saleem792</cc>
    
    <cc>andersca</cc>
    
    <cc>anilsson</cc>
    
    <cc>bdakin</cc>
    
    <cc>bfulgham</cc>
    
    <cc>buildbot</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dongseong.hwang</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>jamesr</cc>
    
    <cc>jturcotte</cc>
    
    <cc>kenneth</cc>
    
    <cc>leviw</cc>
    
    <cc>mikhail.pozdnyakov</cc>
    
    <cc>noam</cc>
    
    <cc>peter+ews</cc>
    
    <cc>playmobil</cc>
    
    <cc>rniwa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>trchen</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>820058</commentid>
    <comment_count>0</comment_count>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2013-01-30 03:54:28 -0800</bug_when>
    <thetext>The code in WebCore::scrollOffsetForFixedPosition() is correct if the layout viewport is equal in size to the visual viewport. In desktop ports of WebKit, these are always equal.

However, there are features in WebCore::ScrollView to separate these two, a strategy popular with mobile ports of WebKit.

virtual void ScrollView::setFixedVisibleContentRect(const IntRect&amp; visibleContentRect)

and

void ScrollView::setFixedLayoutSize(const IntSize&amp;)
void ScrollView::setUseFixedLayout(bool enable)

can be used to cause the visual viewport and the layout viewport to differ. In that case, WebCore::scrollOffsetForFixedPosition() can return incorrect results for RTL pages, causing left property to be broken with position:fixed elements.

See also my comments https://bugs.webkit.org/show_bug.cgi?id=59204 for some background.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820085</commentid>
    <comment_count>1</comment_count>
      <attachid>185466</attachid>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2013-01-30 04:34:56 -0800</bug_when>
    <thetext>Created attachment 185466
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820089</commentid>
    <comment_count>2</comment_count>
      <attachid>185466</attachid>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2013-01-30 04:40:57 -0800</bug_when>
    <thetext>Comment on attachment 185466
Patch

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

&gt; Source/WebCore/page/scrolling/ScrollingCoordinator.cpp:77
&gt; +        scrollPosition = maxValue - scrollOrigin;

I believe the reason the old code worked for desktop ports is that

maxValue = (contentsSize - visibleContentsSize) and scrollOrigin = (contentsSize - fixedLayoutSize)

When the layout viewport (fixedLayoutSize) is equal to the visual viewport (visibleContentsSize), which is the case when ScrollView::useFixedLayoutSize is false, my proposed expressions reduce to what used to be in there before.

&gt; Source/WebCore/page/scrolling/ScrollingCoordinator.cpp:84
&gt; +    // mobile ports to use fixedElementsLayoutRelativeToFrame based on emerging consensus on how position:fixed should work on mobile.

Maybe someone from the Mac OS X port has an idea if and how the dragFactor code could be extrapolated to the case where layout viewport != visual viewport. Otherwise I think it would be OK to just preserve the current behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820092</commentid>
    <comment_count>3</comment_count>
      <attachid>185466</attachid>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2013-01-30 04:44:20 -0800</bug_when>
    <thetext>Comment on attachment 185466
Patch

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

&gt; Source/WebCore/page/scrolling/ScrollingCoordinator.cpp:70
&gt;  static int fixedPositionScrollOffset(int visibleContentSize, int contentsSize, int scrollPosition, int scrollOrigin, float frameScaleFactor, bool fixedElementsLayoutRelativeToFrame)

Another option, instead of duplicating the logic in ScrollView.cpp, would be to pass the FrameView* to the scrollOffsetForFixedPosition() method and use the following expression instead:

    IntPoint newScrollPosition = scrollPoint.shrunkTo(frameView-&gt;maximumScrollPosition());
    newScrollPosition = newScrollPosition.expandedTo(frameView-&gt;minimumScrollPosition());</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820100</commentid>
    <comment_count>4</comment_count>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2013-01-30 04:55:11 -0800</bug_when>
    <thetext>Sorry about the layout vs. visual viewport terminology, I got it from http://www.quirksmode.org/blog/archives/2010/06/a_tale_of_two_v_1.html. See also http://www.quirksmode.org/blog/archives/2012/10/budding_consens.html for the reason why I figured dragFactor may not be important for mobile ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820113</commentid>
    <comment_count>5</comment_count>
      <attachid>185472</attachid>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2013-01-30 05:12:47 -0800</bug_when>
    <thetext>Created attachment 185472
Patch

Here&apos;s an alternate approach that tries to reuse the code in ScrollView instead of duplicating it</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820114</commentid>
    <comment_count>6</comment_count>
      <attachid>185472</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-01-30 05:15:42 -0800</bug_when>
    <thetext>Comment on attachment 185472
Patch

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

&gt; Source/WebCore/page/scrolling/ScrollingCoordinator.cpp:95
&gt; +    IntRect visibleContentRect = frameView-&gt;visibleContentRect();

keep in mind that visibleContentRect for Qt/EFL etc is actually the visiblecontentrect and not the layout rect. I dont know how that works for BB</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820116</commentid>
    <comment_count>7</comment_count>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2013-01-30 05:18:04 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 185472 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=185472&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/scrolling/ScrollingCoordinator.cpp:95
&gt; &gt; +    IntRect visibleContentRect = frameView-&gt;visibleContentRect();
&gt; 
&gt; keep in mind that visibleContentRect for Qt/EFL etc is actually the visiblecontentrect and not the layout rect. I dont know how that works for BB

Yes I know, that&apos;s the whole idea of this patch, to cater to the case where the visibleContentRect != layoutRect. The layout rect is already encoded in the scrollOrigin (scrollOrigin = contentsSize - layoutRect) so we don&apos;t need to explicitly include it in the calculations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821279</commentid>
    <comment_count>8</comment_count>
      <attachid>185472</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-31 02:24:05 -0800</bug_when>
    <thetext>Comment on attachment 185472
Patch

Attachment 185472 did not pass mac-wk2-ews (mac-wk2):
Output: http://queues.webkit.org/results/16267108</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821288</commentid>
    <comment_count>9</comment_count>
      <attachid>185472</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-01-31 02:33:07 -0800</bug_when>
    <thetext>Comment on attachment 185472
Patch

Attachment 185472 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/16266146</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821290</commentid>
    <comment_count>10</comment_count>
      <attachid>185472</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-01-31 02:37:05 -0800</bug_when>
    <thetext>Comment on attachment 185472
Patch

Attachment 185472 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/16267115</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821297</commentid>
    <comment_count>11</comment_count>
      <attachid>185472</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-01-31 02:46:29 -0800</bug_when>
    <thetext>Comment on attachment 185472
Patch

Attachment 185472 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/16271155</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821312</commentid>
    <comment_count>12</comment_count>
      <attachid>185472</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2013-01-31 03:05:37 -0800</bug_when>
    <thetext>Comment on attachment 185472
Patch

Attachment 185472 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/16273130</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821321</commentid>
    <comment_count>13</comment_count>
      <attachid>185472</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-31 03:16:45 -0800</bug_when>
    <thetext>Comment on attachment 185472
Patch

Attachment 185472 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16266161</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821346</commentid>
    <comment_count>14</comment_count>
      <attachid>185472</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-01-31 03:52:48 -0800</bug_when>
    <thetext>Comment on attachment 185472
Patch

Attachment 185472 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/16269143</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821398</commentid>
    <comment_count>15</comment_count>
      <attachid>185472</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-31 04:52:14 -0800</bug_when>
    <thetext>Comment on attachment 185472
Patch

Attachment 185472 did not pass cr-linux-debug-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16280159</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821541</commentid>
    <comment_count>16</comment_count>
      <attachid>185472</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-31 08:13:16 -0800</bug_when>
    <thetext>Comment on attachment 185472
Patch

Attachment 185472 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/16278240</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822333</commentid>
    <comment_count>17</comment_count>
      <attachid>185472</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-31 22:30:07 -0800</bug_when>
    <thetext>Comment on attachment 185472
Patch

Attachment 185472 did not pass win-ews (win):
Output: http://queues.webkit.org/results/16299398</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824929</commentid>
    <comment_count>18</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2013-02-04 17:16:55 -0800</bug_when>
    <thetext>I&apos;m confused which patch I should be looking at... The first one that passes the build bots?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824977</commentid>
    <comment_count>19</comment_count>
    <who name="Tien-Ren Chen">trchen</who>
    <bug_when>2013-02-04 18:02:42 -0800</bug_when>
    <thetext>(In reply to comment #0)
&gt; The code in WebCore::scrollOffsetForFixedPosition() is correct if the layout viewport is equal in size to the visual viewport. In desktop ports of WebKit, these are always equal.
&gt; 
&gt; However, there are features in WebCore::ScrollView to separate these two, a strategy popular with mobile ports of WebKit.
&gt; 
&gt; virtual void ScrollView::setFixedVisibleContentRect(const IntRect&amp; visibleContentRect)
&gt; 
&gt; and
&gt; 
&gt; void ScrollView::setFixedLayoutSize(const IntSize&amp;)
&gt; void ScrollView::setUseFixedLayout(bool enable)
&gt; 
&gt; can be used to cause the visual viewport and the layout viewport to differ. In that case, WebCore::scrollOffsetForFixedPosition() can return incorrect results for RTL pages, causing left property to be broken with position:fixed elements.
&gt; 
&gt; See also my comments https://bugs.webkit.org/show_bug.cgi?id=59204 for some background.

To make things more confusing, there are actually 3 viewports which can be all different at the same time.

1. The fixed layout size, which controls the size of the top containing block (RenderView I believe). Which also affects the layout of fixed-position elements when fixedElementsLayoutRelativeToFrame == false. This value is only effective on mobile builds and is determined by the viewport tag.

2. The visible content rect, which indicates the current visible part of the frame content, in absolute coordinate. For chromium-android (and for other platforms now migrating to applyPageScaleFactorInCompositor == true) this rect will be affected by the current page scale factor. (visibleContentSize = windowSize / pageScaleFactor)

This rect can be over-scrolled negatively or positively on iOS. (correct me if I misunderstood)

This affects the layout of fixed-position elements when fixedElementsLayoutRelativeToFrame == true

3. The viewport constrained visible content rect. This one is similar to visible content rect, but will be clamped to zero or max scroll position, so fixed-position element won&apos;t be over-scrolled. For chromium-android, we have a more aggressive plan known as &quot;desktop compatibility viewport&quot; so we have more complicated control to the layout of fixed-position elements. 

My opinion is that we should make FrameView::viewportConstrainedVisibleContentRect the only authoritative value for fixed-position layout when fixedElementsLayoutRelativeToFrame == true. (and RenderBox::containingBlockLogical(Width|Height)ForPositioned should use it instead of FrameView::visibleContentRect as well).

I don&apos;t 100% understand how RenderBox::containingBlockLogical(Width|Height)ForPositioned works. Perhaps we can completely hide these behavioral differences in FrameView so we just feed the standard value to viewportConstrainedVisibleContentRect when fixedElementsLayoutRelativeToFrame == false.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825006</commentid>
    <comment_count>20</comment_count>
    <who name="Tien-Ren Chen">trchen</who>
    <bug_when>2013-02-04 18:43:06 -0800</bug_when>
    <thetext>visualization for the whole mess: http://goo.gl/XERxA</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825085</commentid>
    <comment_count>21</comment_count>
      <attachid>185472</attachid>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2013-02-04 20:53:26 -0800</bug_when>
    <thetext>Comment on attachment 185472
Patch

Marking as obsolete to avoid confusion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825115</commentid>
    <comment_count>22</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-02-04 21:32:04 -0800</bug_when>
    <thetext>Hi, folks!

Please who can explain what is drag factor and which ports use it?

In my understanding,
applyDragFactorForFixedPosition = scrollPosition x (1 + (1/frameScale - 1) / (1 - visibleContentsSize / contentsSize))
How this complex formula can be derived?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826202</commentid>
    <comment_count>23</comment_count>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2013-02-06 01:21:25 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #0)
&gt; &gt; The code in WebCore::scrollOffsetForFixedPosition() is correct if the layout viewport is equal in size to the visual viewport. In desktop ports of WebKit, these are always equal.
&gt; &gt; 
&gt; &gt; However, there are features in WebCore::ScrollView to separate these two, a strategy popular with mobile ports of WebKit.
&gt; &gt; 
&gt; &gt; virtual void ScrollView::setFixedVisibleContentRect(const IntRect&amp; visibleContentRect)
&gt; &gt; 
&gt; &gt; and
&gt; &gt; 
&gt; &gt; void ScrollView::setFixedLayoutSize(const IntSize&amp;)
&gt; &gt; void ScrollView::setUseFixedLayout(bool enable)
&gt; &gt; 
&gt; &gt; can be used to cause the visual viewport and the layout viewport to differ. In that case, WebCore::scrollOffsetForFixedPosition() can return incorrect results for RTL pages, causing left property to be broken with position:fixed elements.
&gt; &gt; 
&gt; &gt; See also my comments https://bugs.webkit.org/show_bug.cgi?id=59204 for some background.
&gt; 
&gt; To make things more confusing, there are actually 3 viewports which can be all different at the same time.
&gt; 
&gt; 1. The fixed layout size, which controls the size of the top containing block (RenderView I believe). Which also affects the layout of fixed-position elements when fixedElementsLayoutRelativeToFrame == false. This value is only effective on mobile builds and is determined by the viewport tag.
&gt; 
&gt; 2. The visible content rect, which indicates the current visible part of the frame content, in absolute coordinate. For chromium-android (and for other platforms now migrating to applyPageScaleFactorInCompositor == true) this rect will be affected by the current page scale factor. (visibleContentSize = windowSize / pageScaleFactor)
&gt; 
&gt; This rect can be over-scrolled negatively or positively on iOS. (correct me if I misunderstood)
&gt; 
&gt; This affects the layout of fixed-position elements when fixedElementsLayoutRelativeToFrame == true
&gt; 
&gt; 3. The viewport constrained visible content rect. This one is similar to visible content rect, but will be clamped to zero or max scroll position, so fixed-position element won&apos;t be over-scrolled. For chromium-android, we have a more aggressive plan known as &quot;desktop compatibility viewport&quot; so we have more complicated control to the layout of fixed-position elements. 
&gt; 
&gt; My opinion is that we should make FrameView::viewportConstrainedVisibleContentRect the only authoritative value for fixed-position layout when fixedElementsLayoutRelativeToFrame == true. (and RenderBox::containingBlockLogical(Width|Height)ForPositioned should use it instead of FrameView::visibleContentRect as well).
&gt; 
&gt; I don&apos;t 100% understand how RenderBox::containingBlockLogical(Width|Height)ForPositioned works. Perhaps we can completely hide these behavioral differences in FrameView so we just feed the standard value to viewportConstrainedVisibleContentRect when fixedElementsLayoutRelativeToFrame == false.

Thanks for your comments! I didn&apos;t think of the viewport constrained visible content rect as a separate thing, but a natural consequence of overscrolling. You&apos;re right that this is the rect we want to keep fixed pos elements inside, and I believe that is what the scrollOffsetForFixedPosition code was trying to do (but failed for RTL pages).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835315</commentid>
    <comment_count>24</comment_count>
    <who name="Jeremy Moskovich">playmobil</who>
    <bug_when>2013-02-18 04:00:22 -0800</bug_when>
    <thetext>Anillson: Do you think this is the same issue as crbug.com/129746 ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1022018</commentid>
    <comment_count>25</comment_count>
      <attachid>185466</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-07-12 16:48:47 -0700</bug_when>
    <thetext>Comment on attachment 185466
Patch

This function no longer exists. The concept from this patch might still make sense, but review- to get this out of the review queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1900777</commentid>
    <comment_count>26</comment_count>
    <who name="Ahmad Saleem">ahmad.saleem792</who>
    <bug_when>2022-09-23 15:13:39 -0700</bug_when>
    <thetext>I tried to land this using Chromium / Blink patch in following PR:

https://github.com/WebKit/WebKit/pull/4529

(It compiles... thanks to Alan for his help)

It leads to following issues:

1) Failure in one of subtest of scrollbars/rtl/div-absolute.html test case, even if I try to copy latest from Chromium / Blink, there are still failures:

FAIL Bug 91756: Test if the widths of RTL elements are the same as the widths of the LTR elements when they include absolutely-positioned children. assert_equals: expected 206 but got 221

2) Failure in WPT testcase - imported/w3c/web-platform-tests/css/css-scroll-snap/snap-inline-block.html and following subtests fail:

FAIL Snaps correctly for vertical-rl writing mode with &apos;scroll-snap-align: end start&apos; alignment assert_equals: aligns correctly on y expected 300 but got 315
FAIL Snaps correctly for horizontal-tb writing mode with &apos;scroll-snap-align: start end&apos; alignment assert_equals: aligns correctly on x expected 115 but got 0
FAIL Snaps correctly for vertical-lr writing mode with &apos;scroll-snap-align: start end&apos; alignment assert_equals: aligns correctly on x expected 300 but got 0
FAIL Snaps correctly for vertical-rl writing mode with &apos;scroll-snap-align: start end&apos; alignment assert_equals: aligns correctly on y expected 165 but got 180
FAIL Snaps correctly for &apos;direction: rtl&apos; with &apos;scroll-snap-align: end start&apos; alignment assert_equals: aligns correctly on x expected -500 but got -315
FAIL Snaps correctly for &apos;direction: rtl&apos; with &apos;scroll-snap-align: start end&apos; alignment assert_equals: aligns correctly on x expected -315 but got -500

Fixing them are beyond my expertise, so I am going to close my PR and note down the information for someone else to fix it. Thanks!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185466</attachid>
            <date>2013-01-30 04:34:56 -0800</date>
            <delta_ts>2014-07-12 16:48:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108323-20130130133138.patch</filename>
            <type>text/plain</type>
            <size>4000</size>
            <attacher name="Arvid Nilsson">anilsson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxMjMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2M2NGRkM2YwYmQ4YWEy
ZDc3Y2E2MGFkMWE2YTZiNmFlZTA5Nzk1OS4uNzQwNzVlN2JhNjI5ODY4YzcyYTg2Mzc3NjU3MmI3
M2EzYjM1OTczOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEzLTAxLTMwICBBcnZp
ZCBOaWxzc29uICA8YW5pbHNzb25AcmltLmNvbT4KKworICAgICAgICBJbXByb3ZlIHRoZSBsb2dp
YyBpbiBXZWJDb3JlOjpzY3JvbGxPZmZzZXRGb3JGaXhlZFBvc2l0aW9uKCkKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODMyMworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBjb2RlIGluIFdlYkNvcmU6
OnNjcm9sbE9mZnNldEZvckZpeGVkUG9zaXRpb24oKSBpcyBjb3JyZWN0IGlmIHRoZQorICAgICAg
ICBsYXlvdXQgdmlld3BvcnQgaXMgZXF1YWwgaW4gc2l6ZSB0byB0aGUgdmlzdWFsIHZpZXdwb3J0
LiBJbiBkZXNrdG9wCisgICAgICAgIHBvcnRzIG9mIFdlYktpdCwgdGhlc2UgYXJlIGFsd2F5cyBl
cXVhbC4KKworICAgICAgICBIb3dldmVyLCB0aGVyZSBhcmUgZmVhdHVyZXMgaW4gV2ViQ29yZTo6
U2Nyb2xsVmlldyB0byBzZXBhcmF0ZSB0aGVzZQorICAgICAgICB0d28gdmlld3BvcnRzLCBhIHN0
cmF0ZWd5IHBvcHVsYXIgd2l0aCBtb2JpbGUgcG9ydHMgb2YgV2ViS2l0LgorCisgICAgICAgIFRo
aXMgY2FuIGNhdXNlIHRoZSB2aXN1YWwgdmlld3BvcnQgYW5kIHRoZSBsYXlvdXQgdmlld3BvcnQg
dG8gZGlmZmVyLgorICAgICAgICBJbiB0aGF0IGNhc2UsIFdlYkNvcmU6OnNjcm9sbE9mZnNldEZv
ckZpeGVkUG9zaXRpb24oKSBjYW4gcmV0dXJuCisgICAgICAgIGluY29ycmVjdCByZXN1bHRzIGZv
ciBSVEwgcGFnZXMsIGNhdXNpbmcgbGVmdCBwcm9wZXJ0eSB0byBiZSBicm9rZW4KKyAgICAgICAg
d2l0aCBwb3NpdGlvbjpmaXhlZCBlbGVtZW50cy4KKworICAgICAgICBGaXhlZCBieSBoYXJtb25p
emluZyB0aGUgY29kZSBoZXJlIHdpdGgKKyAgICAgICAgU2Nyb2xsVmlldzo6bWluaW11bVNjcm9s
bFBvc2l0aW9uKCkgYW5kIG1heGltdW1TY3JvbGxQb3NpdGlvbigpIHNvIGl0CisgICAgICAgIGNv
cnJlY3RseSBjbGFtcHMgdGhlIHNjcm9sbCBwb3NpdGlvbiB0byB0aGUgYWxsb3dlZCByYW5nZS4K
KworICAgICAgICBJdCdzIHVuY2xlYXIgaG93IHRvIGV4dGVuZCB0aGlzIHRvIHRoZSBkcmFnRmFj
dG9yIG1lY2hhbmlzbSwgYnV0IEFGQUlLCisgICAgICAgIGl0IGlzIG9ubHkgdXNlZCBieSBkZXNr
dG9wIHBvcnRzIHdoZXJlIHRoZSBsYXlvdXQgdmlld3BvcnQgaXMgZXF1YWwgaW4KKyAgICAgICAg
c2l6ZSB0byB0aGUgdmlzdWFsIHZpZXdwb3J0LCBzbyBmb3IgdGhpcyBicmFuY2ggb2YgdGhlIGNv
ZGUsIHdlIGp1c3QKKyAgICAgICAgcHJlc2VydmUgdGhlIHByZXZpb3VzIGJlaGF2aW9yLgorCisg
ICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMsIGUuZy4gZmFzdC9ibG9jay9wb3NpdGlv
bmluZy9ydGwtZml4ZWQtcG9zaXRpb25pbmcuaHRtbAorCisgICAgICAgICogcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Zml4ZWRQb3Np
dGlvblNjcm9sbE9mZnNldCk6CisKIDIwMTMtMDEtMzAgIEh1YW5nIERvbmdzdW5nICA8bHV4dGVs
bGFAY29tcGFueTEwMC5uZXQ+CiAKICAgICAgICAgQ29vcmRpbmF0ZWQgR3JhcGhpY3M6IFJlbW92
ZSBtX3BlbmRpbmdTeW5jQmFja2luZ1N0b3JlcyBpbiBMYXllclRyZWVSZW5kZXJlci4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9y
LmNwcAppbmRleCBmMTJjMjgwYWQ5NDJjMGU3YTMzOWZlZGY2ZDVlN2VhMDAzODUzNjY4Li5jOGMy
YWZhOTc1OTc5ZWFiMGI0NWI4Y2E2Y2FmMTUwNGYwOGUwZWUxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCkBAIC03
MCwyMiArNzAsMjEgQEAgUGFzc1JlZlB0cjxTY3JvbGxpbmdDb29yZGluYXRvcj4gU2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OmNyZWF0ZShQYWdlKiBwYWdlKQogc3RhdGljIGludCBmaXhlZFBvc2l0aW9u
U2Nyb2xsT2Zmc2V0KGludCB2aXNpYmxlQ29udGVudFNpemUsIGludCBjb250ZW50c1NpemUsIGlu
dCBzY3JvbGxQb3NpdGlvbiwgaW50IHNjcm9sbE9yaWdpbiwgZmxvYXQgZnJhbWVTY2FsZUZhY3Rv
ciwgYm9vbCBmaXhlZEVsZW1lbnRzTGF5b3V0UmVsYXRpdmVUb0ZyYW1lKQogewogICAgIGludCBt
YXhWYWx1ZSA9IGNvbnRlbnRzU2l6ZSAtIHZpc2libGVDb250ZW50U2l6ZTsKLSAgICBpZiAobWF4
VmFsdWUgPD0gMCkKLSAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAoIXNjcm9sbE9yaWdpbikg
ewotICAgICAgICBpZiAoc2Nyb2xsUG9zaXRpb24gPD0gMCkKLSAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICBpZiAoc2Nyb2xsUG9zaXRpb24gPiBtYXhWYWx1ZSkKLSAgICAgICAgICAgIHNj
cm9sbFBvc2l0aW9uID0gbWF4VmFsdWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHNjcm9s
bFBvc2l0aW9uID49IDApCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgaWYgKHNjcm9s
bFBvc2l0aW9uIDwgLW1heFZhbHVlKQotICAgICAgICAgICAgc2Nyb2xsUG9zaXRpb24gPSAtbWF4
VmFsdWU7Ci0gICAgfQorICAgIGlmIChzY3JvbGxQb3NpdGlvbiA8IC1zY3JvbGxPcmlnaW4pCisg
ICAgICAgIHNjcm9sbFBvc2l0aW9uID0gLXNjcm9sbE9yaWdpbjsKKyAgICBpZiAoc2Nyb2xsUG9z
aXRpb24gPiBtYXhWYWx1ZSAtIHNjcm9sbE9yaWdpbikKKyAgICAgICAgc2Nyb2xsUG9zaXRpb24g
PSBtYXhWYWx1ZSAtIHNjcm9sbE9yaWdpbjsKIAotICAgIGZsb2F0IGRyYWdGYWN0b3IgPSBmaXhl
ZEVsZW1lbnRzTGF5b3V0UmVsYXRpdmVUb0ZyYW1lID8gMSA6IChjb250ZW50c1NpemUgLSB2aXNp
YmxlQ29udGVudFNpemUgKiBmcmFtZVNjYWxlRmFjdG9yKSAvIG1heFZhbHVlOworICAgIGlmIChm
aXhlZEVsZW1lbnRzTGF5b3V0UmVsYXRpdmVUb0ZyYW1lKQorICAgICAgICByZXR1cm4gc2Nyb2xs
UG9zaXRpb24gLyBmcmFtZVNjYWxlRmFjdG9yOworCisgICAgLy8gRklYTUU6IEl0J3Mgbm90IG9i
dmlvdXMgaG93IHRvIGdlbmVyYWxpemUgdGhlIGRyYWdGYWN0b3IgY29kZSB0byB0aGUgY2FzZSB3
aGVyZSBsYXlvdXQgdmlld3BvcnQgaXMgZGlmZmVyZW50IGZyb20gdmlzdWFsIHZpZXdwb3J0LAor
ICAgIC8vIEZvciBub3csIHByZXNlcnZlIHRoZSBiZWhhdmlvdXIgZm9yIHBvcnRzIHRoYXQgYWx3
YXlzIHVzZSBhIGxheW91dCB2aWV3cG9ydCBpZGVudGljYWwgdG8gdGhlIHZpc3VhbCB2aWV3cG9y
dCwgYW5kIHJlY29tbWVuZAorICAgIC8vIG1vYmlsZSBwb3J0cyB0byB1c2UgZml4ZWRFbGVtZW50
c0xheW91dFJlbGF0aXZlVG9GcmFtZSBiYXNlZCBvbiBlbWVyZ2luZyBjb25zZW5zdXMgb24gaG93
IHBvc2l0aW9uOmZpeGVkIHNob3VsZCB3b3JrIG9uIG1vYmlsZS4KKyAgICBpZiAobWF4VmFsdWUg
PD0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZmxvYXQgZHJhZ0ZhY3RvciA9IChjb250ZW50
c1NpemUgLSB2aXNpYmxlQ29udGVudFNpemUgKiBmcmFtZVNjYWxlRmFjdG9yKSAvIG1heFZhbHVl
OwogICAgIHJldHVybiBzY3JvbGxQb3NpdGlvbiAqIGRyYWdGYWN0b3IgLyBmcmFtZVNjYWxlRmFj
dG9yOwogfQogCg==
</data>
<flag name="review"
          id="204540"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185472</attachid>
            <date>2013-01-30 05:12:47 -0800</date>
            <delta_ts>2013-02-04 20:53:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108323-20130130140928.patch</filename>
            <type>text/plain</type>
            <size>7445</size>
            <attacher name="Arvid Nilsson">anilsson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxMjMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2M2NGRkM2YwYmQ4YWEy
ZDc3Y2E2MGFkMWE2YTZiNmFlZTA5Nzk1OS4uZGE1ZDMwOGNkYTk4MDY5MWQ5ZjBhOGYxMWE5YTZk
NGZkZjhkOTg0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDEzLTAxLTMwICBBcnZp
ZCBOaWxzc29uICA8YW5pbHNzb25AcmltLmNvbT4KKworICAgICAgICBJbXByb3ZlIHRoZSBsb2dp
YyBpbiBXZWJDb3JlOjpzY3JvbGxPZmZzZXRGb3JGaXhlZFBvc2l0aW9uKCkKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODMyMworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBjb2RlIGluIFdlYkNvcmU6
OnNjcm9sbE9mZnNldEZvckZpeGVkUG9zaXRpb24oKSBpcyBjb3JyZWN0IGlmIHRoZQorICAgICAg
ICBsYXlvdXQgdmlld3BvcnQgaXMgZXF1YWwgaW4gc2l6ZSB0byB0aGUgdmlzdWFsIHZpZXdwb3J0
LiBJbiBkZXNrdG9wCisgICAgICAgIHBvcnRzIG9mIFdlYktpdCwgdGhlc2UgYXJlIGFsd2F5cyBl
cXVhbC4KKworICAgICAgICBIb3dldmVyLCB0aGVyZSBhcmUgZmVhdHVyZXMgaW4gV2ViQ29yZTo6
U2Nyb2xsVmlldyB0byBzZXBhcmF0ZSB0aGVzZQorICAgICAgICB0d28gdmlld3BvcnRzLCBhIHN0
cmF0ZWd5IHBvcHVsYXIgd2l0aCBtb2JpbGUgcG9ydHMgb2YgV2ViS2l0LgorCisgICAgICAgIFRo
aXMgY2FuIGNhdXNlIHRoZSB2aXN1YWwgdmlld3BvcnQgYW5kIHRoZSBsYXlvdXQgdmlld3BvcnQg
dG8gZGlmZmVyLgorICAgICAgICBJbiB0aGF0IGNhc2UsIFdlYkNvcmU6OnNjcm9sbE9mZnNldEZv
ckZpeGVkUG9zaXRpb24oKSBjYW4gcmV0dXJuCisgICAgICAgIGluY29ycmVjdCByZXN1bHRzIGZv
ciBSVEwgcGFnZXMsIGNhdXNpbmcgbGVmdCBwcm9wZXJ0eSB0byBiZSBicm9rZW4KKyAgICAgICAg
d2l0aCBwb3NpdGlvbjpmaXhlZCBlbGVtZW50cy4KKworICAgICAgICBGaXhlZCBieSB1c2luZyBT
Y3JvbGxWaWV3OjptaW5pbXVtU2Nyb2xsUG9zaXRpb24oKSBhbmQKKyAgICAgICAgbWF4aW11bVNj
cm9sbFBvc2l0aW9uKCkgc28gaXQgY29ycmVjdGx5IGNsYW1wcyB0aGUgc2Nyb2xsIHBvc2l0aW9u
IHRvCisgICAgICAgIHRoZSBhbGxvd2VkIHJhbmdlLgorCisgICAgICAgIEl0J3MgdW5jbGVhciBo
b3cgdG8gZXh0ZW5kIHRoaXMgdG8gdGhlIGRyYWdGYWN0b3IgbWVjaGFuaXNtLCBidXQgQUZBSUsK
KyAgICAgICAgaXQgaXMgb25seSB1c2VkIGJ5IGRlc2t0b3AgcG9ydHMgd2hlcmUgdGhlIGxheW91
dCB2aWV3cG9ydCBpcyBlcXVhbCBpbgorICAgICAgICBzaXplIHRvIHRoZSB2aXN1YWwgdmlld3Bv
cnQsIHNvIGZvciB0aGlzIGJyYW5jaCBvZiB0aGUgY29kZSwgd2UganVzdAorICAgICAgICBwcmVz
ZXJ2ZSB0aGUgcHJldmlvdXMgYmVoYXZpb3IuIFRoaXMgaXMgYWNjb21wbGlzaGVkIGJ5IHNlcGFy
YXRpbmcgdGhlCisgICAgICAgIGRyYWcgZmFjdG9yIGNhbGN1bGF0aW9uIGZyb20gdGhlIGNsYW1w
aW5nLgorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMsIGUuZy4gZmFzdC9ibG9j
ay9wb3NpdGlvbmluZy9ydGwtZml4ZWQtcG9zaXRpb25pbmcuaHRtbAorCisgICAgICAgICogcGFn
ZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpzY3JvbGxPZmZz
ZXRGb3JGaXhlZFBvc2l0aW9uKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdD
b29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjphcHBseURyYWdGYWN0b3JGb3JGaXhl
ZFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbE9mZnNldEZvckZpeGVkUG9zaXRp
b24pOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmg6CisK
IDIwMTMtMDEtMzAgIEh1YW5nIERvbmdzdW5nICA8bHV4dGVsbGFAY29tcGFueTEwMC5uZXQ+CiAK
ICAgICAgICAgQ29vcmRpbmF0ZWQgR3JhcGhpY3M6IFJlbW92ZSBtX3BlbmRpbmdTeW5jQmFja2lu
Z1N0b3JlcyBpbiBMYXllclRyZWVSZW5kZXJlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApp
bmRleCBhNThkNmEwNDQ1NDJjNjcyNTk2MTYyZTkzYzNmOGM4YWEzOWQ3ODNiLi5kNTA1MzhlNDNk
YWJjZjk2ZDA3OThmMWIyZWQ0MjE0ZDJjMTVjNDI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
Y3BwCkBAIC0xNTAzLDEyICsxNTAzLDcgQEAgTGF5b3V0UmVjdCBGcmFtZVZpZXc6OnZpZXdwb3J0
Q29uc3RyYWluZWRWaXNpYmxlQ29udGVudFJlY3QoKSBjb25zdAogCiBJbnRTaXplIEZyYW1lVmll
dzo6c2Nyb2xsT2Zmc2V0Rm9yRml4ZWRQb3NpdGlvbigpIGNvbnN0CiB7Ci0gICAgSW50UmVjdCB2
aXNpYmxlQ29udGVudFJlY3QgPSB0aGlzLT52aXNpYmxlQ29udGVudFJlY3QoKTsKLSAgICBJbnRT
aXplIGNvbnRlbnRzU2l6ZSA9IHRoaXMtPmNvbnRlbnRzU2l6ZSgpOwotICAgIEludFBvaW50IHNj
cm9sbFBvc2l0aW9uID0gdGhpcy0+c2Nyb2xsUG9zaXRpb24oKTsKLSAgICBJbnRQb2ludCBzY3Jv
bGxPcmlnaW4gPSB0aGlzLT5zY3JvbGxPcmlnaW4oKTsKLSAgICBmbG9hdCBmcmFtZVNjYWxlRmFj
dG9yID0gbV9mcmFtZSA/IG1fZnJhbWUtPmZyYW1lU2NhbGVGYWN0b3IoKSA6IDE7Ci0gICAgcmV0
dXJuIFdlYkNvcmU6OnNjcm9sbE9mZnNldEZvckZpeGVkUG9zaXRpb24odmlzaWJsZUNvbnRlbnRS
ZWN0LCBjb250ZW50c1NpemUsIHNjcm9sbFBvc2l0aW9uLCBzY3JvbGxPcmlnaW4sIGZyYW1lU2Nh
bGVGYWN0b3IsIGZpeGVkRWxlbWVudHNMYXlvdXRSZWxhdGl2ZVRvRnJhbWUoKSk7CisgICAgcmV0
dXJuIFdlYkNvcmU6OnNjcm9sbE9mZnNldEZvckZpeGVkUG9zaXRpb24odGhpcyk7CiB9CiAKIGJv
b2wgRnJhbWVWaWV3OjpmaXhlZEVsZW1lbnRzTGF5b3V0UmVsYXRpdmVUb0ZyYW1lKCkgY29uc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yLmNwcAppbmRleCBmMTJjMjgwYWQ5NDJjMGU3YTMzOWZlZGY2ZDVlN2VhMDAzODUzNjY4
Li44NDFlOWI4ZTEwOTE4YWIzZGU5NTY0NjY1Yjk2OTgyNDVhZjhjZDRmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3Bw
CkBAIC02NywzMiArNjcsMzUgQEAgUGFzc1JlZlB0cjxTY3JvbGxpbmdDb29yZGluYXRvcj4gU2Ny
b2xsaW5nQ29vcmRpbmF0b3I6OmNyZWF0ZShQYWdlKiBwYWdlKQogICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgU2Nyb2xsaW5nQ29vcmRpbmF0b3IocGFnZSkpOwogfQogCi1zdGF0aWMgaW50IGZpeGVk
UG9zaXRpb25TY3JvbGxPZmZzZXQoaW50IHZpc2libGVDb250ZW50U2l6ZSwgaW50IGNvbnRlbnRz
U2l6ZSwgaW50IHNjcm9sbFBvc2l0aW9uLCBpbnQgc2Nyb2xsT3JpZ2luLCBmbG9hdCBmcmFtZVNj
YWxlRmFjdG9yLCBib29sIGZpeGVkRWxlbWVudHNMYXlvdXRSZWxhdGl2ZVRvRnJhbWUpCitzdGF0
aWMgaW50IGFwcGx5RHJhZ0ZhY3RvckZvckZpeGVkUG9zaXRpb24oaW50IHZpc2libGVDb250ZW50
U2l6ZSwgaW50IGNvbnRlbnRzU2l6ZSwgaW50IHNjcm9sbFBvc2l0aW9uLCBmbG9hdCBmcmFtZVNj
YWxlRmFjdG9yKQogewogICAgIGludCBtYXhWYWx1ZSA9IGNvbnRlbnRzU2l6ZSAtIHZpc2libGVD
b250ZW50U2l6ZTsKICAgICBpZiAobWF4VmFsdWUgPD0gMCkKICAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICBpZiAoIXNjcm9sbE9yaWdpbikgewotICAgICAgICBpZiAoc2Nyb2xsUG9zaXRpb24gPD0g
MCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBpZiAoc2Nyb2xsUG9zaXRpb24gPiBt
YXhWYWx1ZSkKLSAgICAgICAgICAgIHNjcm9sbFBvc2l0aW9uID0gbWF4VmFsdWU7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgaWYgKHNjcm9sbFBvc2l0aW9uID49IDApCi0gICAgICAgICAgICByZXR1
cm4gMDsKLSAgICAgICAgaWYgKHNjcm9sbFBvc2l0aW9uIDwgLW1heFZhbHVlKQotICAgICAgICAg
ICAgc2Nyb2xsUG9zaXRpb24gPSAtbWF4VmFsdWU7Ci0gICAgfQotCi0gICAgZmxvYXQgZHJhZ0Zh
Y3RvciA9IGZpeGVkRWxlbWVudHNMYXlvdXRSZWxhdGl2ZVRvRnJhbWUgPyAxIDogKGNvbnRlbnRz
U2l6ZSAtIHZpc2libGVDb250ZW50U2l6ZSAqIGZyYW1lU2NhbGVGYWN0b3IpIC8gbWF4VmFsdWU7
CisgICAgZmxvYXQgZHJhZ0ZhY3RvciA9IChjb250ZW50c1NpemUgLSB2aXNpYmxlQ29udGVudFNp
emUgKiBmcmFtZVNjYWxlRmFjdG9yKSAvIG1heFZhbHVlOwogICAgIHJldHVybiBzY3JvbGxQb3Np
dGlvbiAqIGRyYWdGYWN0b3IgLyBmcmFtZVNjYWxlRmFjdG9yOwogfQogCi1JbnRTaXplIHNjcm9s
bE9mZnNldEZvckZpeGVkUG9zaXRpb24oY29uc3QgSW50UmVjdCYgdmlzaWJsZUNvbnRlbnRSZWN0
LCBjb25zdCBJbnRTaXplJiBjb250ZW50c1NpemUsIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3Np
dGlvbiwgY29uc3QgSW50UG9pbnQmIHNjcm9sbE9yaWdpbiwgZmxvYXQgZnJhbWVTY2FsZUZhY3Rv
ciwgYm9vbCBmaXhlZEVsZW1lbnRzTGF5b3V0UmVsYXRpdmVUb0ZyYW1lKQorSW50U2l6ZSBzY3Jv
bGxPZmZzZXRGb3JGaXhlZFBvc2l0aW9uKEZyYW1lVmlldyogZnJhbWVWaWV3KQogewotICAgIGlu
dCB4ID0gZml4ZWRQb3NpdGlvblNjcm9sbE9mZnNldCh2aXNpYmxlQ29udGVudFJlY3Qud2lkdGgo
KSwgY29udGVudHNTaXplLndpZHRoKCksIHNjcm9sbFBvc2l0aW9uLngoKSwgc2Nyb2xsT3JpZ2lu
LngoKSwgZnJhbWVTY2FsZUZhY3RvciwgZml4ZWRFbGVtZW50c0xheW91dFJlbGF0aXZlVG9GcmFt
ZSk7Ci0gICAgaW50IHkgPSBmaXhlZFBvc2l0aW9uU2Nyb2xsT2Zmc2V0KHZpc2libGVDb250ZW50
UmVjdC5oZWlnaHQoKSwgY29udGVudHNTaXplLmhlaWdodCgpLCBzY3JvbGxQb3NpdGlvbi55KCks
IHNjcm9sbE9yaWdpbi55KCksIGZyYW1lU2NhbGVGYWN0b3IsIGZpeGVkRWxlbWVudHNMYXlvdXRS
ZWxhdGl2ZVRvRnJhbWUpOworICAgIEludFBvaW50IHNjcm9sbFBvc2l0aW9uID0gZnJhbWVWaWV3
LT5zY3JvbGxQb3NpdGlvbigpOworICAgIGZsb2F0IGZyYW1lU2NhbGVGYWN0b3IgPSBmcmFtZVZp
ZXctPmZyYW1lKCkgPyBmcmFtZVZpZXctPmZyYW1lKCktPmZyYW1lU2NhbGVGYWN0b3IoKSA6IDE7
CisKKyAgICBzY3JvbGxQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uLnNocnVua1RvKGZyYW1lVmll
dy0+bWF4aW11bVNjcm9sbFBvc2l0aW9uKCkpOworICAgIHNjcm9sbFBvc2l0aW9uID0gc2Nyb2xs
UG9zaXRpb24uZXhwYW5kZWRUbyhmcmFtZVZpZXctPm1pbmltdW1TY3JvbGxQb3NpdGlvbigpKTsK
KworICAgIGludCB4ID0gc2Nyb2xsUG9zaXRpb24ueCgpOworICAgIGludCB5ID0gc2Nyb2xsUG9z
aXRpb24ueSgpOworICAgIGlmIChmaXhlZEVsZW1lbnRzTGF5b3V0UmVsYXRpdmVUb0ZyYW1lKQor
ICAgICAgICByZXR1cm4gSW50U2l6ZSh4IC8gZnJhbWVTY2FsZUZhY3RvciwgeSAvIGZyYW1lU2Nh
bGVGYWN0b3IpOworCisgICAgLy8gRklYTUU6IEl0J3Mgbm90IG9idmlvdXMgaG93IHRvIGdlbmVy
YWxpemUgdGhlIGRyYWdGYWN0b3IgY29kZSB0byB0aGUgY2FzZSB3aGVyZSBsYXlvdXQgdmlld3Bv
cnQgaXMgZGlmZmVyZW50IGZyb20gdmlzdWFsIHZpZXdwb3J0LAorICAgIC8vIEZvciBub3csIHBy
ZXNlcnZlIHRoZSBiZWhhdmlvdXIgZm9yIHBvcnRzIHRoYXQgYWx3YXlzIHVzZSBhIGxheW91dCB2
aWV3cG9ydCBpZGVudGljYWwgdG8gdGhlIHZpc3VhbCB2aWV3cG9ydCwgYW5kIHJlY29tbWVuZAor
ICAgIC8vIG1vYmlsZSBwb3J0cyB0byB1c2UgZml4ZWRFbGVtZW50c0xheW91dFJlbGF0aXZlVG9G
cmFtZSBiYXNlZCBvbiBlbWVyZ2luZyBjb25zZW5zdXMgb24gaG93IHBvc2l0aW9uOmZpeGVkIHNo
b3VsZCB3b3JrIG9uIG1vYmlsZS4KKyAgICBJbnRSZWN0IHZpc2libGVDb250ZW50UmVjdCA9IGZy
YW1lVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CisgICAgSW50U2l6ZSBjb250ZW50c1NpemUg
PSBmcmFtZVZpZXctPmNvbnRlbnRzU2l6ZSgpOworICAgIHggPSBhcHBseURyYWdGYWN0b3JGb3JG
aXhlZFBvc2l0aW9uKHZpc2libGVDb250ZW50UmVjdC53aWR0aCgpLCBjb250ZW50c1NpemUud2lk
dGgoKSwgeCwgZnJhbWVTY2FsZUZhY3Rvcik7CisgICAgeSA9IGFwcGx5RHJhZ0ZhY3RvckZvckZp
eGVkUG9zaXRpb24odmlzaWJsZUNvbnRlbnRSZWN0LmhlaWdodCgpLCBjb250ZW50c1NpemUuaGVp
Z2h0KCksIHksIGZyYW1lU2NhbGVGYWN0b3IpOwogICAgIHJldHVybiBJbnRTaXplKHgsIHkpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdD
b29yZGluYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29v
cmRpbmF0b3IuaAppbmRleCAwYWE4ODgwOGExOGRiMjc0YzNmYjNhYzAxNGQ1MzBlMzNkZGIzMWI5
Li5lZTQ0YWQ2OGI2NTQ1ZTc0YmJlODFhNjE0NmRkNTExNTc5YjFkNmM5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgKQEAg
LTY0LDggKzY0LDcgQEAgY2xhc3MgVmlld3BvcnRDb25zdHJhaW50czsKIGNsYXNzIFNjcm9sbGlu
Z1RyZWU7CiAjZW5kaWYKIAotSW50U2l6ZSBzY3JvbGxPZmZzZXRGb3JGaXhlZFBvc2l0aW9uKGNv
bnN0IEludFJlY3QmIHZpc2libGVDb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgY29udGVudHNT
aXplLCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24sCi0gICAgY29uc3QgSW50UG9pbnQm
IHNjcm9sbE9yaWdpbiwgZmxvYXQgZnJhbWVTY2FsZUZhY3RvciwgYm9vbCBmaXhlZEVsZW1lbnRz
TGF5b3V0UmVsYXRpdmVUb0ZyYW1lKTsKK0ludFNpemUgc2Nyb2xsT2Zmc2V0Rm9yRml4ZWRQb3Np
dGlvbihGcmFtZVZpZXcqKTsKIAogZW51bSBTZXRPclN5bmNTY3JvbGxpbmdMYXllclBvc2l0aW9u
IHsKICAgICBTZXRTY3JvbGxpbmdMYXllclBvc2l0aW9uLAo=
</data>
<flag name="commit-queue"
          id="204890"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
      

    </bug>

</bugzilla>