<?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>61289</bug_id>
          
          <creation_ts>2011-05-23 10:14:09 -0700</creation_ts>
          <short_desc>AX WK2 Regression: WebKit outputs incorrect AX position in frames/iframes</short_desc>
          <delta_ts>2011-08-19 18:14: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>Accessibility</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="chris fleizach">cfleizach</reporter>
          <assigned_to name="chris fleizach">cfleizach</assigned_to>
          <cc>bdakin</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>408021</commentid>
    <comment_count>0</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2011-05-23 10:14:09 -0700</bug_when>
    <thetext>* STEPS TO REPRODUCE
1. Load http://public.yahoo.com/kloots/vo-safari-bugs/dialogs.html
2. Navigate the page with VO and interact with the iframe. 
3. Tab or use VO nav to move through the items.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408022</commentid>
    <comment_count>1</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2011-05-23 10:14:26 -0700</bug_when>
    <thetext>The Problem is that on WK2, nested frames are not taken into account</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408023</commentid>
    <comment_count>2</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2011-05-23 10:14:49 -0700</bug_when>
    <thetext>rdar://9317698</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408037</commentid>
    <comment_count>3</comment_count>
      <attachid>94437</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2011-05-23 10:24:02 -0700</bug_when>
    <thetext>Created attachment 94437
patch

It&apos;s still an ongoing project to figure out how to add layout tests for WK2 and AX</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448630</commentid>
    <comment_count>4</comment_count>
      <attachid>94437</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-08-09 09:56:48 -0700</bug_when>
    <thetext>Comment on attachment 94437
patch

Why does accessibility have its own coordinate transform methods? Why not use Widget or RenderObject methods for this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448632</commentid>
    <comment_count>5</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2011-08-09 09:58:45 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 94437 [details])
&gt; Why does accessibility have its own coordinate transform methods? Why not use Widget or RenderObject methods for this?

Because it needs to return flipped on-screen coordinates, and it has to come from the actual element itself. 

In WK2, RenderObject doesn&apos;t know where &quot;on-screen&quot; the element actually is, it&apos;s just told to paint somewhere and it&apos;s then placed correctly by the safari process. That&apos;s not good enough for accessibility</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448643</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-08-09 10:09:32 -0700</bug_when>
    <thetext>There are methods in widget to produce screen-relative coords.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448644</commentid>
    <comment_count>7</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2011-08-09 10:10:50 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; There are methods in widget to produce screen-relative coords.

What are they? 

Do they take into account scrolling offset and nested iframes?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448652</commentid>
    <comment_count>8</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-08-09 10:17:04 -0700</bug_when>
    <thetext>You probably want:
  Widget::convertToContainingWindow(const FloatQuad&amp;) const;
followed by
  ChromeClient::windowToScreen().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449829</commentid>
    <comment_count>9</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2011-08-11 09:37:03 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; You probably want:
&gt;   Widget::convertToContainingWindow(const FloatQuad&amp;) const;
&gt; followed by
&gt;   ChromeClient::windowToScreen().

These methods do not appear to take scroll position into account. As soon as the scroll area is scrolled, the rectangles are not correct

Here&apos;s the code I&apos;m using. 

AccessibilityObject* root = m_object-&gt;axObjectCache()-&gt;rootObjectForFrame(m_object-&gt;document()-&gt;frame());
        if (root &amp;&amp; root-&gt;isAccessibilityScrollView()) {
            ScrollView *widget = toAccessibilityScrollView(root)-&gt;scrollView();
            rect = widget-&gt;convertToContainingWindow(rect);
            rect = m_object-&gt;document()-&gt;page()-&gt;chrome()-&gt;windowToScreen(rect);
        }


Is this the way this method is supposed to behave? does scroll position need to be accounted for after the fact</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449862</commentid>
    <comment_count>10</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-08-11 10:18:15 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; You probably want:
&gt; &gt;   Widget::convertToContainingWindow(const FloatQuad&amp;) const;
&gt; &gt; followed by
&gt; &gt;   ChromeClient::windowToScreen().
&gt; 
&gt; These methods do not appear to take scroll position into account. As soon as the scroll area is scrolled, the rectangles are not correct
&gt; 
&gt; Here&apos;s the code I&apos;m using. 
&gt; 
&gt; AccessibilityObject* root = m_object-&gt;axObjectCache()-&gt;rootObjectForFrame(m_object-&gt;document()-&gt;frame());
&gt;         if (root &amp;&amp; root-&gt;isAccessibilityScrollView()) {
&gt;             ScrollView *widget = toAccessibilityScrollView(root)-&gt;scrollView();
&gt;             rect = widget-&gt;convertToContainingWindow(rect);
&gt;             rect = m_object-&gt;document()-&gt;page()-&gt;chrome()-&gt;windowToScreen(rect);
&gt;         }
&gt; 
&gt; 
&gt; Is this the way this method is supposed to behave? does scroll position need to be accounted for after the fact

What coordinate space does &apos;rect&apos; start in? Is it in &apos;page&apos; (aka &quot;absolute&quot;) coordinates? If so, you want

ScrollView::contentsToWindow() on the innermost scroll view (i.e. the one for the document&apos;s frame), followed by chrome()-&gt;windowToScreen(). Sadly ScrollView::contentsToScreen() won&apos;t do the right thing with CSS transforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449908</commentid>
    <comment_count>11</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2011-08-11 11:47:36 -0700</bug_when>
    <thetext>
&gt; What coordinate space does &apos;rect&apos; start in? Is it in &apos;page&apos; (aka &quot;absolute&quot;) coordinates? If so, you want
&gt; 
&gt; ScrollView::contentsToWindow() on the innermost scroll view (i.e. the one for the document&apos;s frame), followed by chrome()-&gt;windowToScreen(). Sadly ScrollView::contentsToScreen() won&apos;t do the right thing with CSS transforms.

Thanks for the suggestion. it looks like this is working</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452339</commentid>
    <comment_count>12</comment_count>
      <attachid>94437</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-08-17 10:32:33 -0700</bug_when>
    <thetext>Comment on attachment 94437
patch

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

Looks fine.

&gt; Source/WebCore/accessibility/mac/AccessibilityObjectWrapper.mm:1183
&gt; +        Document* doc = m_object-&gt;document();

Normally we prefer to use the name &quot;document&quot; rather than the abbreviation &quot;doc&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452342</commentid>
    <comment_count>13</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2011-08-17 10:35:16 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 94437 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=94437&amp;action=review
&gt; 
&gt; Looks fine.
&gt; 
&gt; &gt; Source/WebCore/accessibility/mac/AccessibilityObjectWrapper.mm:1183
&gt; &gt; +        Document* doc = m_object-&gt;document();
&gt; 
&gt; Normally we prefer to use the name &quot;document&quot; rather than the abbreviation &quot;doc&quot;.

Thanks for the review. I&apos;m going to try to see if I can reconcile the WK1 and the WK2 methods for determining frames and potentially remove a lot of code before falling back to this patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453279</commentid>
    <comment_count>14</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2011-08-18 12:52:56 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; &gt; What coordinate space does &apos;rect&apos; start in? Is it in &apos;page&apos; (aka &quot;absolute&quot;) coordinates? If so, you want
&gt; &gt; 
&gt; &gt; ScrollView::contentsToWindow() on the innermost scroll view (i.e. the one for the document&apos;s frame), followed by chrome()-&gt;windowToScreen(). Sadly ScrollView::contentsToScreen() won&apos;t do the right thing with CSS transforms.
&gt; 
&gt; Thanks for the suggestion. it looks like this is working

Unfortunately 

m_object-&gt;document()-&gt;page()-&gt;chrome()-&gt;windowToScreen(rect);

will not work on WK1 because of

IntRect WebChromeClient::windowToScreen(const IntRect&amp; r) const
{
    if ([m_webView _usesDocumentViews])
        return r;

So I can&apos;t unify the two approaches</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453344</commentid>
    <comment_count>15</comment_count>
      <attachid>104397</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2011-08-18 14:15:04 -0700</bug_when>
    <thetext>Created attachment 104397
patch

This patch does a better job of calculating the positioning using more standardized methods</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453478</commentid>
    <comment_count>16</comment_count>
      <attachid>104397</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-08-18 16:23:37 -0700</bug_when>
    <thetext>Comment on attachment 104397
patch

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

&gt; Source/WebCore/accessibility/mac/AccessibilityObjectWrapper.mm:1390
&gt; +        ScrollView* widget = 0;

This should be named &quot;view&quot; or &quot;scrollView&quot; rather than &quot;widget&quot;.

&gt; Source/WebCore/accessibility/mac/AccessibilityObjectWrapper.mm:1402
&gt; +        rect = m_object-&gt;document()-&gt;page()-&gt;chrome()-&gt;windowToScreen(rect);
&gt; +        point = NSMakePoint(rect.x(), rect.y());

You could write this like this:

    point = m_object-&gt;document()-&gt;page()-&gt;chrome()-&gt;windowToScreen(rect).location();

There is no need to use NSMakePoint.

What guarantees that page is non-zero?

Is there a way to test this with regression tests?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453491</commentid>
    <comment_count>17</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2011-08-18 16:50:11 -0700</bug_when>
    <thetext>
&gt; Is there a way to test this with regression tests?

I have an open bug (rdar://9980641) to make accessibility work with WebKitTestRunner (I believe that&apos;s the name), the WK2 test mechanism. 

Right now there is nothing in place to handle that. I&apos;ll add a note to also test positioning when doing so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454003</commentid>
    <comment_count>18</comment_count>
      <attachid>104548</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2011-08-19 13:04:38 -0700</bug_when>
    <thetext>Created attachment 104548
patch

address comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454164</commentid>
    <comment_count>19</comment_count>
      <attachid>104548</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-08-19 16:06:59 -0700</bug_when>
    <thetext>Comment on attachment 104548
patch

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

Not sure why the EWS couldn’t apply the patch. Would be better to put up a patch that it can apply.

&gt; Source/WebCore/accessibility/mac/AccessibilityObjectWrapper.mm:1402
&gt; +        if (m_object-&gt;page())
&gt; +            point = m_object-&gt;page()-&gt;chrome()-&gt;windowToScreen(rect).location();

If page is 0, then point is left uninitialized. Then we’ll return a random point. We could just use rect.location() in that case, or initialize the point to 0,0.

&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:990
&gt; +    Document *document = this-&gt;document();

It should be Document*, with the * next to the Document.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454259</commentid>
    <comment_count>20</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2011-08-19 18:14:55 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/93461</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94437</attachid>
            <date>2011-05-23 10:24:02 -0700</date>
            <delta_ts>2011-08-18 14:15:04 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>4175</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg3MDc3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDUtMjMgIENocmlzIEZs
ZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBWCBXSzIgUmVncmVzc2lvbjogV2ViS2l0IG91dHB1dHMg
aW5jb3JyZWN0IEFYIHBvc2l0aW9uIGluIGZyYW1lcy9pZnJhbWVzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MTI4OQorCisgICAgICAgIFVwZGF0ZSB0
aGUgV2ViS2l0MiByZWxhdGVkIGNvZGUgZm9yIGNhbGN1bGF0aW5nIGFuIGVsZW1lbnQncyBwb3Np
dGlvbiB0byByZWZsZWN0CisgICAgICAgIG5lc3RlZCBpZnJhbWVzIGFuZCB0aGVpciBwb3RlbnRp
YWwgc2Nyb2xsIG9mZnNldHMuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlci5tbToKKyAgICAgICAgKC1bQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIgcG9zaXRpb25dKToKKwogMjAxMS0wNS0yMyAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlz
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpJbmRl
eDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMv
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW0JKHJldmlzaW9uIDg2OTc3KQorKysgU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW0J
KHdvcmtpbmcgY29weSkKQEAgLTExNjMsNyArMTE2Myw2IEBACiAgICAgSW50UmVjdCByZWN0ID0g
bV9vYmplY3QtPmVsZW1lbnRSZWN0KCk7CiAgICAgTlNQb2ludCBwb2ludDsKICAgICAKLSAgICBG
cmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fb2JqZWN0LT5kb2N1bWVudEZyYW1lVmlldygpOwogICAg
IGlkIHJlbW90ZVBhcmVudCA9IFtzZWxmIHJlbW90ZUFjY2Vzc2liaWxpdHlQYXJlbnRPYmplY3Rd
OwogICAgIGlmIChyZW1vdGVQYXJlbnQpIHsKICAgICAgICAgcG9pbnQgPSBOU01ha2VQb2ludChy
ZWN0LngoKSwgcmVjdC55KCkpOwpAQCAtMTE3NSwxOSArMTE3NCw1MyBAQAogICAgICAgICBDR0Zs
b2F0IHNjcmVlbkhlaWdodCA9IFsoTlNTY3JlZW4gKilbW05TU2NyZWVuIHNjcmVlbnNdIG9iamVj
dEF0SW5kZXg6MF0gZnJhbWVdLnNpemUuaGVpZ2h0OwogICAgICAgICByZW1vdGVQb3NpdGlvbi55
ID0gKHNjcmVlbkhlaWdodCAtIHJlbW90ZVBvc2l0aW9uLnkpIC0gcmVtb3RlU2l6ZS5oZWlnaHQ7
CiAgICAgICAgIAorICAgICAgICBwb2ludC54ICs9IHJlbW90ZVBvc2l0aW9uLng7CisgICAgICAg
IHBvaW50LnkgKz0gcmVtb3RlUG9zaXRpb24ueTsKKyAgICAgICAgCiAgICAgICAgIE5TUG9pbnQg
c2Nyb2xsUG9zaXRpb24gPSBOU01ha2VQb2ludCgwLCAwKTsKLSAgICAgICAgaWYgKGZyYW1lVmll
dyAmJiAhbV9vYmplY3QtPmlzU2Nyb2xsYmFyKCkgJiYgIW1fb2JqZWN0LT5pc1Njcm9sbFZpZXco
KSkgewotICAgICAgICAgICAgSW50UG9pbnQgZnJhbWVTY3JvbGxQb3MgPSBmcmFtZVZpZXctPnNj
cm9sbFBvc2l0aW9uKCk7Ci0gICAgICAgICAgICBzY3JvbGxQb3NpdGlvbiA9IE5TTWFrZVBvaW50
KGZyYW1lU2Nyb2xsUG9zLngoKSwgZnJhbWVTY3JvbGxQb3MueSgpKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIEl0ZXJhdGUgdXAgdGhlIG5lc3RlZCBmcmFtZSBoaWVyYXJjaHksIGNhbGN1bGF0aW5n
IHRoZSBmcmFtZSBvZmZzZXRzIGFuZCBzY3JvbGwgb2Zmc2V0cyBhbG9uZyB0aGUgd2F5LgorICAg
ICAgICBEb2N1bWVudCogZG9jID0gbV9vYmplY3QtPmRvY3VtZW50KCk7CisgICAgICAgIHdoaWxl
IChkb2MpIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcg
PSBkb2MtPnZpZXcoKTsKKyAgICAgICAgICAgIGlmICghZnJhbWVWaWV3KQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGUgb2Zmc2V0dGluZyBz
aG91bGQgbm90IGhhcHBlbiBpZiB0aGlzIGlzIHRoZSBjdXJyZW50IGZyYW1lVmlldyBpbiB0aGUg
Y2hhaW4uCisgICAgICAgICAgICBib29sIGlzQ3VycmVudFNjcm9sbFZpZXcgPSBmYWxzZTsKKyAg
ICAgICAgICAgIGlmIChtX29iamVjdC0+aXNBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldygpKSB7Cisg
ICAgICAgICAgICAgICAgQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcqIHNjcm9sbFZpZXcgPSB0b0Fj
Y2Vzc2liaWxpdHlTY3JvbGxWaWV3KG1fb2JqZWN0KTsKKyAgICAgICAgICAgICAgICBpc0N1cnJl
bnRTY3JvbGxWaWV3ID0gc2Nyb2xsVmlldy0+c2Nyb2xsVmlldygpID09IGZyYW1lVmlldzsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFpc0N1cnJlbnRTY3Jv
bGxWaWV3KSB7CisgICAgICAgICAgICAgICAgSW50UG9pbnQgZnJhbWVTY3JvbGxQb3MgPSBmcmFt
ZVZpZXctPnNjcm9sbFBvc2l0aW9uKCk7CisgICAgICAgICAgICAgICAgc2Nyb2xsUG9zaXRpb24g
PSBOU01ha2VQb2ludChmcmFtZVNjcm9sbFBvcy54KCksIGZyYW1lU2Nyb2xsUG9zLnkoKSk7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gRmlyc3Qgb2Zmc2V0IGJ5IHRoZSBs
b2NhdGlvbiBvZiB0aGUgZnJhbWUuCisgICAgICAgICAgICAgICAgcG9pbnQueCArPSBmcmFtZVZp
ZXctPngoKTsKKyAgICAgICAgICAgICAgICBwb2ludC55ICs9IGZyYW1lVmlldy0+eSgpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFRoZW4gYWRqdXN0IGJhc2VkIG9uIHRo
ZSBzY3JvbGwgcG9zaXRpb24gb24gdGhlIGZyYW1lLgorICAgICAgICAgICAgICAgIHBvaW50Lngg
LT0gc2Nyb2xsUG9zaXRpb24ueDsKKyAgICAgICAgICAgICAgICBwb2ludC55IC09IHNjcm9sbFBv
c2l0aW9uLnk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEVsZW1l
bnQqIGVsZW1lbnQgPSBkb2MtPm93bmVyRWxlbWVudCgpOworICAgICAgICAgICAgaWYgKCFlbGVt
ZW50KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgICAgICBk
b2MgPSBlbGVtZW50LT5kb2N1bWVudCgpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBw
b2ludC54ICs9IHJlbW90ZVBvc2l0aW9uLnggLSBzY3JvbGxQb3NpdGlvbi54OwogICAgICAgICAv
LyBTZXQgdGhlIG5ldyBwb3NpdGlvbiwgd2hpY2ggbWVhbnMgZ2V0dGluZyBib3R0b20geSwgYW5k
IHRoZW4gZmxpcHBpbmcgdG8gc2NyZWVuIGNvb3JkaW5hdGVzLgotICAgICAgICBwb2ludC55ID0g
c2NyZWVuSGVpZ2h0IC0gKHBvaW50LnkgKyByZW1vdGVQb3NpdGlvbi55ICsgcmVjdC5oZWlnaHQo
KSAtIHNjcm9sbFBvc2l0aW9uLnkpOworICAgICAgICBwb2ludC55ID0gc2NyZWVuSGVpZ2h0IC0g
KHBvaW50LnkgKyByZWN0LmhlaWdodCgpKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBUaGUg
Q29jb2EgYWNjZXNzaWJpbGl0eSBBUEkgd2FudHMgdGhlIGxvd2VyLWxlZnQgY29ybmVyLgogICAg
ICAgICBwb2ludCA9IE5TTWFrZVBvaW50KHJlY3QueCgpLCByZWN0Lm1heFkoKSk7CiAgICAgICAg
IAorICAgICAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fb2JqZWN0LT5kb2N1bWVudEZyYW1l
VmlldygpOwogICAgICAgICBpZiAoZnJhbWVWaWV3KSB7CiAgICAgICAgICAgICBOU1ZpZXcqIHZp
ZXcgPSBmcmFtZVZpZXctPmRvY3VtZW50VmlldygpOwogICAgICAgICAgICAgcG9pbnQgPSBbW3Zp
ZXcgd2luZG93XSBjb252ZXJ0QmFzZVRvU2NyZWVuOlt2aWV3IGNvbnZlcnRQb2ludDogcG9pbnQg
dG9WaWV3Om5pbF1dOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104397</attachid>
            <date>2011-08-18 14:15:04 -0700</date>
            <delta_ts>2011-08-19 13:04:38 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>3866</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzMzUwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDgtMTggIENocmlzIEZs
ZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KKworICAgICAgICBBWCBXSzIgUmVncmVzc2lv
bjogV2ViS2l0IG91dHB1dHMgaW5jb3JyZWN0IEFYIHBvc2l0aW9uIGluIGZyYW1lcy9pZnJhbWVz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MTI4OQor
CisgICAgICAgIFVwZGF0ZSB0aGUgY29kZSB0byBkZXRlcm1pbmUgdGhlIHBvc2l0aW9uIG9mIGFj
Y2Vzc2liaWxpdHkgZWxlbWVudHMgb24gTWFjIGZvciBXSzIsCisgICAgICAgIHNvIHRoYXQgZWxl
bWVudHMgd2l0aGluIGlmcmFtZXMgYXJlIHBvc2l0aW9uZWQgY29ycmVjdGx5LgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9t
YWMvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW06CisgICAgICAgICgtW0FjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyIHBvc2l0aW9uXSk6CisKIDIwMTEtMDgtMTggIFNoZXJpZmYgQm90ICA8
d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxp
bmcgb3V0IHI5MzMyOS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0Fj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1tCShyZXZpc2lv
biA5MjY5NCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMjUsNyArMzI1LDYgQEAKICNk
ZWZpbmUgTlNBY2Nlc3NpYmlsaXR5VmlzaXRlZExpbmtTZWFyY2hLZXkgQCJBWFZpc2l0ZWRMaW5r
U2VhcmNoS2V5IgogI2VuZGlmCiAKLQogQGludGVyZmFjZSBOU09iamVjdCAoV2ViS2l0QWNjZXNz
aWJpbGl0eUFycmF5Q2F0ZWdvcnkpCiAKIC0gKE5TVUludGVnZXIpYWNjZXNzaWJpbGl0eUluZGV4
T2ZDaGlsZDooaWQpY2hpbGQ7CkBAIC0xMzc0LDI3ICsxMzczLDEwIEBACiAgICAgTlNQb2ludCBw
b2ludDsKICAgICAKICAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fb2JqZWN0LT5kb2N1bWVu
dEZyYW1lVmlldygpOwotICAgIGlkIHJlbW90ZVBhcmVudCA9IFtzZWxmIHJlbW90ZUFjY2Vzc2li
aWxpdHlQYXJlbnRPYmplY3RdOwotICAgIGlmIChyZW1vdGVQYXJlbnQpIHsKLSAgICAgICAgcG9p
bnQgPSBOU01ha2VQb2ludChyZWN0LngoKSwgcmVjdC55KCkpOwotICAgICAgICAKLSAgICAgICAg
TlNQb2ludCByZW1vdGVQb3NpdGlvbiA9IFtbcmVtb3RlUGFyZW50IGFjY2Vzc2liaWxpdHlBdHRy
aWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlQb3NpdGlvbkF0dHJpYnV0ZV0gcG9pbnRWYWx1ZV07
Ci0gICAgICAgIE5TU2l6ZSByZW1vdGVTaXplID0gW1tyZW1vdGVQYXJlbnQgYWNjZXNzaWJpbGl0
eUF0dHJpYnV0ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eVNpemVBdHRyaWJ1dGVdIHNpemVWYWx1ZV07
CiAKLSAgICAgICAgLy8gR2V0IHRoZSB5IHBvc2l0aW9uIG9mIHRoZSBXS1ZpZXcgKHdlIGhhdmUg
dG8gc2NyZWVuLWZsaXAgYW5kIGdvIGZyb20gYm90dG9tIGxlZnQgdG8gdG9wIGxlZnQpLgotICAg
ICAgICBDR0Zsb2F0IHNjcmVlbkhlaWdodCA9IFsoTlNTY3JlZW4gKilbW05TU2NyZWVuIHNjcmVl
bnNdIG9iamVjdEF0SW5kZXg6MF0gZnJhbWVdLnNpemUuaGVpZ2h0OwotICAgICAgICByZW1vdGVQ
b3NpdGlvbi55ID0gKHNjcmVlbkhlaWdodCAtIHJlbW90ZVBvc2l0aW9uLnkpIC0gcmVtb3RlU2l6
ZS5oZWlnaHQ7Ci0gICAgICAgIAotICAgICAgICBOU1BvaW50IHNjcm9sbFBvc2l0aW9uID0gTlNN
YWtlUG9pbnQoMCwgMCk7Ci0gICAgICAgIGlmIChmcmFtZVZpZXcgJiYgIW1fb2JqZWN0LT5pc1Nj
cm9sbGJhcigpICYmICFtX29iamVjdC0+aXNTY3JvbGxWaWV3KCkpIHsKLSAgICAgICAgICAgIElu
dFBvaW50IGZyYW1lU2Nyb2xsUG9zID0gZnJhbWVWaWV3LT5zY3JvbGxQb3NpdGlvbigpOwotICAg
ICAgICAgICAgc2Nyb2xsUG9zaXRpb24gPSBOU01ha2VQb2ludChmcmFtZVNjcm9sbFBvcy54KCks
IGZyYW1lU2Nyb2xsUG9zLnkoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHBvaW50
LnggKz0gcmVtb3RlUG9zaXRpb24ueCAtIHNjcm9sbFBvc2l0aW9uLng7Ci0gICAgICAgIC8vIFNl
dCB0aGUgbmV3IHBvc2l0aW9uLCB3aGljaCBtZWFucyBnZXR0aW5nIGJvdHRvbSB5LCBhbmQgdGhl
biBmbGlwcGluZyB0byBzY3JlZW4gY29vcmRpbmF0ZXMuCi0gICAgICAgIHBvaW50LnkgPSBzY3Jl
ZW5IZWlnaHQgLSAocG9pbnQueSArIHJlbW90ZVBvc2l0aW9uLnkgKyByZWN0LmhlaWdodCgpIC0g
c2Nyb2xsUG9zaXRpb24ueSk7Ci0gICAgfSBlbHNlIHsKKyAgICAvLyBXZWJLaXQxIGNvZGUgcGF0
aC4uLiBwbGF0Zm9ybVdpZGdldCgpIGV4aXN0cy4KKyAgICBpZiAoZnJhbWVWaWV3ICYmIGZyYW1l
Vmlldy0+cGxhdGZvcm1XaWRnZXQoKSkgeworICAgIAogICAgICAgICAvLyBUaGUgQ29jb2EgYWNj
ZXNzaWJpbGl0eSBBUEkgd2FudHMgdGhlIGxvd2VyLWxlZnQgY29ybmVyLgogICAgICAgICBwb2lu
dCA9IE5TTWFrZVBvaW50KHJlY3QueCgpLCByZWN0Lm1heFkoKSk7CiAgICAgICAgIApAQCAtMTQw
Miw4ICsxMzg0LDI0IEBACiAgICAgICAgICAgICBOU1ZpZXcqIHZpZXcgPSBmcmFtZVZpZXctPmRv
Y3VtZW50VmlldygpOwogICAgICAgICAgICAgcG9pbnQgPSBbW3ZpZXcgd2luZG93XSBjb252ZXJ0
QmFzZVRvU2NyZWVuOlt2aWV3IGNvbnZlcnRQb2ludDogcG9pbnQgdG9WaWV3Om5pbF1dOwogICAg
ICAgICB9Ci0gICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIAorICAgICAgICAvLyBGaW5kIHRo
ZSBhcHByb3ByaWF0ZSBzY3JvbGwgdmlldyB0byB1c2UgdG8gY29udmVydCB0aGUgY29udGVudHMg
dG8gdGhlIHdpbmRvdy4KKyAgICAgICAgU2Nyb2xsVmlldyogd2lkZ2V0ID0gMDsKKyAgICAgICAg
Zm9yIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBtX29iamVjdC0+cGFyZW50T2JqZWN0
KCk7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3QoKSkgeworICAgICAgICAg
ICAgaWYgKHBhcmVudC0+aXNBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldygpKSB7CisgICAgICAgICAg
ICAgICAgd2lkZ2V0ID0gdG9BY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyhwYXJlbnQpLT5zY3JvbGxW
aWV3KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
IAorICAgICAgICBpZiAod2lkZ2V0KQorICAgICAgICAgICAgcmVjdCA9IHdpZGdldC0+Y29udGVu
dHNUb1dpbmRvdyhyZWN0KTsKKyAgICAgICAgCisgICAgICAgIHJlY3QgPSBtX29iamVjdC0+ZG9j
dW1lbnQoKS0+cGFnZSgpLT5jaHJvbWUoKS0+d2luZG93VG9TY3JlZW4ocmVjdCk7CisgICAgICAg
IHBvaW50ID0gTlNNYWtlUG9pbnQocmVjdC54KCksIHJlY3QueSgpKTsKKyAgICB9CisgICAgCiAg
ICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFBvaW50OnBvaW50XTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104548</attachid>
            <date>2011-08-19 13:04:38 -0700</date>
            <delta_ts>2011-08-19 16:06:59 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>5166</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzNDMxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMDgtMTkgIENocmlzIEZs
ZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KKworICAgICAgICBBWCBXSzIgUmVncmVzc2lv
bjogV2ViS2l0IG91dHB1dHMgaW5jb3JyZWN0IEFYIHBvc2l0aW9uIGluIGZyYW1lcy9pZnJhbWVz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MTI4OQor
CisgICAgICAgIFVwZGF0ZSB0aGUgY29kZSB0byBkZXRlcm1pbmUgdGhlIHBvc2l0aW9uIG9mIGFj
Y2Vzc2liaWxpdHkgZWxlbWVudHMgb24gTWFjIGZvciBXSzIsCisgICAgICAgIHNvIHRoYXQgZWxl
bWVudHMgd2l0aGluIGlmcmFtZXMgYXJlIHBvc2l0aW9uZWQgY29ycmVjdGx5LgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlP
YmplY3Q6OnBhZ2UpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVj
dC5oOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyLm1tOgorICAgICAgICAoLVtBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBwb3NpdGlvbl0p
OgorCiAyMDExLTA4LTE5ICBNaWhuZWEgT3ZpZGVuaWUgIDxtaWhuZWFAYWRvYmUuY29tPgogCiAg
ICAgICAgIFtDU1NSZWdpb25zXVBhcnNlIC13ZWJraXQtcmVnaW9uLWJyZWFrKGFmdGVyLCBiZWZv
cmUsIGluc2lkZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1tCShyZXZpc2lvbiA5
MjY5NCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMzc0LDI3ICsxMzc0LDEwIEBACiAg
ICAgTlNQb2ludCBwb2ludDsKICAgICAKICAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fb2Jq
ZWN0LT5kb2N1bWVudEZyYW1lVmlldygpOwotICAgIGlkIHJlbW90ZVBhcmVudCA9IFtzZWxmIHJl
bW90ZUFjY2Vzc2liaWxpdHlQYXJlbnRPYmplY3RdOwotICAgIGlmIChyZW1vdGVQYXJlbnQpIHsK
LSAgICAgICAgcG9pbnQgPSBOU01ha2VQb2ludChyZWN0LngoKSwgcmVjdC55KCkpOwotICAgICAg
ICAKLSAgICAgICAgTlNQb2ludCByZW1vdGVQb3NpdGlvbiA9IFtbcmVtb3RlUGFyZW50IGFjY2Vz
c2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0FjY2Vzc2liaWxpdHlQb3NpdGlvbkF0dHJpYnV0ZV0g
cG9pbnRWYWx1ZV07Ci0gICAgICAgIE5TU2l6ZSByZW1vdGVTaXplID0gW1tyZW1vdGVQYXJlbnQg
YWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eVNpemVBdHRyaWJ1dGVd
IHNpemVWYWx1ZV07CiAKLSAgICAgICAgLy8gR2V0IHRoZSB5IHBvc2l0aW9uIG9mIHRoZSBXS1Zp
ZXcgKHdlIGhhdmUgdG8gc2NyZWVuLWZsaXAgYW5kIGdvIGZyb20gYm90dG9tIGxlZnQgdG8gdG9w
IGxlZnQpLgotICAgICAgICBDR0Zsb2F0IHNjcmVlbkhlaWdodCA9IFsoTlNTY3JlZW4gKilbW05T
U2NyZWVuIHNjcmVlbnNdIG9iamVjdEF0SW5kZXg6MF0gZnJhbWVdLnNpemUuaGVpZ2h0OwotICAg
ICAgICByZW1vdGVQb3NpdGlvbi55ID0gKHNjcmVlbkhlaWdodCAtIHJlbW90ZVBvc2l0aW9uLnkp
IC0gcmVtb3RlU2l6ZS5oZWlnaHQ7Ci0gICAgICAgIAotICAgICAgICBOU1BvaW50IHNjcm9sbFBv
c2l0aW9uID0gTlNNYWtlUG9pbnQoMCwgMCk7Ci0gICAgICAgIGlmIChmcmFtZVZpZXcgJiYgIW1f
b2JqZWN0LT5pc1Njcm9sbGJhcigpICYmICFtX29iamVjdC0+aXNTY3JvbGxWaWV3KCkpIHsKLSAg
ICAgICAgICAgIEludFBvaW50IGZyYW1lU2Nyb2xsUG9zID0gZnJhbWVWaWV3LT5zY3JvbGxQb3Np
dGlvbigpOwotICAgICAgICAgICAgc2Nyb2xsUG9zaXRpb24gPSBOU01ha2VQb2ludChmcmFtZVNj
cm9sbFBvcy54KCksIGZyYW1lU2Nyb2xsUG9zLnkoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIHBvaW50LnggKz0gcmVtb3RlUG9zaXRpb24ueCAtIHNjcm9sbFBvc2l0aW9uLng7Ci0g
ICAgICAgIC8vIFNldCB0aGUgbmV3IHBvc2l0aW9uLCB3aGljaCBtZWFucyBnZXR0aW5nIGJvdHRv
bSB5LCBhbmQgdGhlbiBmbGlwcGluZyB0byBzY3JlZW4gY29vcmRpbmF0ZXMuCi0gICAgICAgIHBv
aW50LnkgPSBzY3JlZW5IZWlnaHQgLSAocG9pbnQueSArIHJlbW90ZVBvc2l0aW9uLnkgKyByZWN0
LmhlaWdodCgpIC0gc2Nyb2xsUG9zaXRpb24ueSk7Ci0gICAgfSBlbHNlIHsKKyAgICAvLyBXZWJL
aXQxIGNvZGUgcGF0aC4uLiBwbGF0Zm9ybVdpZGdldCgpIGV4aXN0cy4KKyAgICBpZiAoZnJhbWVW
aWV3ICYmIGZyYW1lVmlldy0+cGxhdGZvcm1XaWRnZXQoKSkgeworICAgIAogICAgICAgICAvLyBU
aGUgQ29jb2EgYWNjZXNzaWJpbGl0eSBBUEkgd2FudHMgdGhlIGxvd2VyLWxlZnQgY29ybmVyLgog
ICAgICAgICBwb2ludCA9IE5TTWFrZVBvaW50KHJlY3QueCgpLCByZWN0Lm1heFkoKSk7CiAgICAg
ICAgIApAQCAtMTQwMiw4ICsxMzg1LDIzIEBACiAgICAgICAgICAgICBOU1ZpZXcqIHZpZXcgPSBm
cmFtZVZpZXctPmRvY3VtZW50VmlldygpOwogICAgICAgICAgICAgcG9pbnQgPSBbW3ZpZXcgd2lu
ZG93XSBjb252ZXJ0QmFzZVRvU2NyZWVuOlt2aWV3IGNvbnZlcnRQb2ludDogcG9pbnQgdG9WaWV3
Om5pbF1dOwogICAgICAgICB9Ci0gICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIAorICAgICAg
ICAvLyBGaW5kIHRoZSBhcHByb3ByaWF0ZSBzY3JvbGwgdmlldyB0byB1c2UgdG8gY29udmVydCB0
aGUgY29udGVudHMgdG8gdGhlIHdpbmRvdy4KKyAgICAgICAgU2Nyb2xsVmlldyogc2Nyb2xsVmll
dyA9IDA7CisgICAgICAgIGZvciAoQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gbV9vYmpl
Y3QtPnBhcmVudE9iamVjdCgpOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2JqZWN0
KCkpIHsKKyAgICAgICAgICAgIGlmIChwYXJlbnQtPmlzQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXco
KSkgeworICAgICAgICAgICAgICAgIHNjcm9sbFZpZXcgPSB0b0FjY2Vzc2liaWxpdHlTY3JvbGxW
aWV3KHBhcmVudCktPnNjcm9sbFZpZXcoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQogCisgICAgICAgIGlmIChzY3JvbGxWaWV3KQorICAgICAgICAg
ICAgcmVjdCA9IHNjcm9sbFZpZXctPmNvbnRlbnRzVG9XaW5kb3cocmVjdCk7CisgICAgICAgIGlm
IChtX29iamVjdC0+cGFnZSgpKQorICAgICAgICAgICAgcG9pbnQgPSBtX29iamVjdC0+cGFnZSgp
LT5jaHJvbWUoKS0+d2luZG93VG9TY3JlZW4ocmVjdCkubG9jYXRpb24oKTsKKyAgICB9CisgICAg
CiAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFBvaW50OnBvaW50XTsKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0
LmgJKHJldmlzaW9uIDkyNjk0KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTg1LDYgKzg1LDcgQEAKIGNsYXNz
IEludFBvaW50OwogY2xhc3MgSW50U2l6ZTsKIGNsYXNzIE5vZGU7CitjbGFzcyBQYWdlOwogY2xh
c3MgUmVuZGVyT2JqZWN0OwogY2xhc3MgUmVuZGVyTGlzdEl0ZW07CiBjbGFzcyBWaXNpYmxlU2Vs
ZWN0aW9uOwpAQCAtNTE4LDYgKzUxOSw3IEBACiAgICAgY29uc3QgU3RyaW5nJiBhY3Rpb25WZXJi
KCkgY29uc3Q7CiAgICAgdmlydHVhbCBXaWRnZXQqIHdpZGdldCgpIGNvbnN0IHsgcmV0dXJuIDA7
IH0KICAgICB2aXJ0dWFsIFdpZGdldCogd2lkZ2V0Rm9yQXR0YWNobWVudFZpZXcoKSBjb25zdCB7
IHJldHVybiAwOyB9CisgICAgUGFnZSogcGFnZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgRG9jdW1l
bnQqIGRvY3VtZW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCBGcmFtZVZpZXcqIHRvcERvY3VtZW50
RnJhbWVWaWV3KCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgRnJhbWVWaWV3KiBk
b2N1bWVudEZyYW1lVmlldygpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCShyZXZpc2lvbiA5MjY5NCkK
KysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk4NCw2ICs5ODQsMTQgQEAKICAgICAKICAgICByZXR1cm4gZnJh
bWVWaWV3LT5mcmFtZSgpLT5kb2N1bWVudCgpOwogfQorICAgIAorUGFnZSogQWNjZXNzaWJpbGl0
eU9iamVjdDo6cGFnZSgpIGNvbnN0Cit7CisgICAgRG9jdW1lbnQgKmRvY3VtZW50ID0gdGhpcy0+
ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm4gMDsKKyAgICBy
ZXR1cm4gZG9jdW1lbnQtPnBhZ2UoKTsKK30KIAogRnJhbWVWaWV3KiBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0Ojpkb2N1bWVudEZyYW1lVmlldygpIGNvbnN0IAogeyAK
</data>
<flag name="review"
          id="100429"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>