<?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>27850</bug_id>
          
          <creation_ts>2009-07-30 12:28:23 -0700</creation_ts>
          <short_desc>Panning by emulating Mouse Wheel events breaks Google Maps</short_desc>
          <delta_ts>2009-09-03 01:13:29 -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>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows 7</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>
          <dependson>28023</dependson>
          <blocked>26486</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brian Weinstein">bweinstein</reporter>
          <assigned_to name="Brian Weinstein">bweinstein</assigned_to>
          <cc>aroben</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>135931</commentid>
    <comment_count>0</comment_count>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2009-07-30 12:28:23 -0700</bug_when>
    <thetext>When you try to pan in google maps, the expected behavior would be pan the map, like you are dragging of the current behavior, which will zoom with WebKit.

This patch will be broken into two parts - 
1) Change from emulating mouse wheel events for panning to just calling scroll methods
2) Before allowing pan gestures, make sure the element that is being panned doesn&apos;t have any drag listeners, if it does, instead of panning, we want our finger motion to be a drag instead of a pan.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135934</commentid>
    <comment_count>1</comment_count>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2009-07-30 12:30:04 -0700</bug_when>
    <thetext>&lt;rdar://problem/7106061&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135938</commentid>
    <comment_count>2</comment_count>
      <attachid>33804</attachid>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2009-07-30 12:35:44 -0700</bug_when>
    <thetext>Created attachment 33804
Use Scroll instead of Mouse Wheel Events - Frames Broken</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139918</commentid>
    <comment_count>3</comment_count>
      <attachid>34757</attachid>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2009-08-13 10:37:32 -0700</bug_when>
    <thetext>Created attachment 34757
Panning Not Using Mouse Events</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141213</commentid>
    <comment_count>4</comment_count>
      <attachid>34757</attachid>
    <who name="Ada Chan">adachan</who>
    <bug_when>2009-08-18 14:08:08 -0700</bug_when>
    <thetext>Comment on attachment 34757
Panning Not Using Mouse Events

I&apos;m not super familiar with this code, so I suggest having another person review it.  Here are my comments so far:

&gt; +    HitTestRequest request(HitTestRequest::ReadOnly);
&gt; +    HitTestResult result(m_page-&gt;mainFrame()-&gt;view()-&gt;screenToContents(gestureBeginPoint));
&gt; +
&gt; +    m_page-&gt;mainFrame()-&gt;document()-&gt;renderView()-&gt;layer()-&gt;hitTest(request, result);

Do we know for sure that m_page-&gt;mainFrame()-&gt;document() will not return null?

&gt; +    m_gestureTargetNode = result.innerNode();
&gt; +    if (result.scrollbar())
&gt; +        hitScrollbar = true;

You can move the declaration of hitScrollbar down here and set it directly to result.scrollbar().

&gt; +
&gt; +    while (m_gestureTargetNode &amp;&amp; (m_gestureTargetNode-&gt;isContainerNode()) &amp;&amp; !hitScrollbar) {

Don&apos;t need the extra parentheses around m_gestureTargetNode-&gt;isContainerNode().

&gt; +        Frame* childFrame = EventHandler::subframeForTargetNode(m_gestureTargetNode);
&gt; +        if (!childFrame)
&gt; +            break;
&gt; +
&gt; +        HitTestResult result(childFrame-&gt;view()-&gt;screenToContents(gestureBeginPoint));
&gt; +
&gt; +        childFrame-&gt;document()-&gt;renderView()-&gt;layer()-&gt;hitTest(request, result);
&gt; +        m_gestureTargetNode = result.innerNode();
&gt; +        if (result.scrollbar())
&gt; +            hitScrollbar = true;
&gt; +    }

If hitScrollbar is true and the gesture is blocked, does it make more sense to reset m_gestureTargetNode to 0?

&gt; +
&gt; +    RenderObject* renderer = 0;
&gt; +    if (m_gestureTargetNode)
&gt; +        renderer = m_gestureTargetNode-&gt;renderer();
&gt; +    while (renderer) {
&gt; +        if (renderer-&gt;isBox() &amp;&amp; toRenderBox(renderer)-&gt;canBeScrolledAndHasScrollableArea()) {
&gt; +            canBeScrolled = true;
&gt; +            break;
&gt; +        }
&gt; +        renderer = renderer-&gt;parent();
&gt; +    }

It might be cleaner to rewrite the above as a for loop, and keep renderer local within that loop.

&gt;  
&gt; -    if (eventHandlerPoint.x() &gt; view-&gt;visibleWidth() || scrollbarTest.scrollbar()) {
&gt; -        // We are in the scrollbar, turn off panning, need to be able to drag the scrollbar
&gt; +    RECT webViewRect;
&gt; +    GetWindowRect(m_viewWindow, &amp;webViewRect);
&gt; +
&gt; +    if ((view-&gt;verticalScrollbar() &amp;&amp; gestureBeginPoint.x &gt; (webViewRect.right - view-&gt;verticalScrollbar()-&gt;theme()-&gt;scrollbarThickness())) 
&gt; +        || hitScrollbar) {
&gt; +        // If we didn&apos;t hit a scrollbar in our hit testing, the only other scrollbar it would be 
&gt; +        // possible to hit would be the WebView scrollbar, so we can check if our x coordinate is
&gt; +        // outside of the webview, where the scollbar vertical is.
&gt; +        dwPanWant = GC_PAN  | GC_PAN_WITH_INERTIA | GC_PAN_WITH_GUTTER;
&gt; +        dwPanBlock = GC_PAN_WITH_SINGLE_FINGER_HORIZONTALLY | GC_PAN_WITH_SINGLE_FINGER_VERTICALLY;
&gt; +    } else if (!canBeScrolled) {
&gt; +        // We can&apos;t scroll on the frame/page we are in.
&gt;          dwPanWant = GC_PAN  | GC_PAN_WITH_INERTIA | GC_PAN_WITH_GUTTER;
&gt;          dwPanBlock = GC_PAN_WITH_SINGLE_FINGER_HORIZONTALLY | GC_PAN_WITH_SINGLE_FINGER_VERTICALLY;
&gt;      } else {

Could combine the above two &quot;if&quot; together.

&gt; +        // Someone in our DOM Hierarchy can scroll, and we&apos;re not on a scrollbar, let them pan.
&gt;          dwPanWant = GC_PAN  | GC_PAN_WITH_SINGLE_FINGER_VERTICALLY | GC_PAN_WITH_INERTIA | GC_PAN_WITH_GUTTER;
&gt;          dwPanBlock = GC_PAN_WITH_SINGLE_FINGER_HORIZONTALLY;
&gt;      }
&gt;  

&gt;  bool WebView::gesture(WPARAM wParam, LPARAM lParam) 
&gt; @@ -1372,21 +1414,18 @@ bool WebView::gesture(WPARAM wParam, LPA
&gt;          m_lastPanX = gi.ptsLocation.x;
&gt;          m_lastPanY = gi.ptsLocation.y;
&gt;  
&gt; -        CloseGestureInfoHandlePtr()(gestureHandle);
&gt; +        return DefWindowProc(gi.hwndTarget, WM_GESTURE, wParam, lParam);

Are we sure we should not call CloseGestureInfoHandlePtr()(gestureHandle) in this case?
Can we just return false for fallback behavior?

&gt;          break;

Double-check release build to make sure it doesn&apos;t complain about the above line being unreachable.

&gt; +        bool didUpdatePanning = true;
&gt;          // FIXME: Support Horizontal Window Bounce
&gt; +        // FIXME: If the user starts panning down after a window bounce has started, the window doesn&apos;t bounce back 
&gt; +        // until they release their finger.
&gt;          if (vertScrollbar-&gt;currentPos() == 0)
&gt; -            UpdatePanningFeedbackPtr()(m_viewWindow, 0, m_yOverpan, gi.dwFlags &amp; GF_INERTIA);
&gt; +            didUpdatePanning = UpdatePanningFeedbackPtr()(gi.hwndTarget, 0, m_yOverpan, gi.dwFlags &amp; GF_INERTIA);
&gt;          else if (vertScrollbar-&gt;currentPos() &gt;= vertScrollbar-&gt;maximum())
&gt; -            UpdatePanningFeedbackPtr()(m_viewWindow, 0, m_yOverpan, gi.dwFlags &amp; GF_INERTIA);
&gt; +            didUpdatePanning = UpdatePanningFeedbackPtr()(gi.hwndTarget, 0, m_yOverpan, gi.dwFlags &amp; GF_INERTIA);
&gt;  

What is didUpdatePanning for?  You didn&apos;t refer to it later in the code.

&gt;          CloseGestureInfoHandlePtr()(gestureHandle);
&gt;          break;
&gt;      }
&gt;      default:
&gt; -        // We have encountered an unknown gesture - return false to pass it to DefWindowProc
&gt; -        CloseGestureInfoHandlePtr()(gestureHandle);
&gt; +        return DefWindowProc(gi.hwndTarget, WM_GESTURE, wParam, lParam);

Are we sure we should not call CloseGestureInfoHandlePtr()(gestureHandle) in this case?
Can we just return false for fallback behavior?

&gt;          break;
&gt;      }
&gt;  
&gt; Index: WebKit/win/WebView.h
&gt; ===================================================================
&gt; --- WebKit/win/WebView.h	(revision 47167)
&gt; +++ WebKit/win/WebView.h	(working copy)
&gt; @@ -922,6 +922,7 @@ protected:
&gt;      OwnPtr&lt;HashSet&lt;WebCore::String&gt; &gt; m_embeddedViewMIMETypes;
&gt;  
&gt;      //Variables needed to store gesture information
&gt; +    WebCore::Node* m_gestureTargetNode;

You need to initialize m_gestureTargetNode in the WebView constructor.
Another question to ask is how m_gestureTargetNode is maintained.  From what you explained to me, we could get a gesture notify followed by a bunch of gestures.  What if m_gestureTargetNode gets deleted in the middle of the gesture calls?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144252</commentid>
    <comment_count>5</comment_count>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2009-09-02 11:28:49 -0700</bug_when>
    <thetext>This was landed in http://trac.webkit.org/changeset/47594.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33804</attachid>
            <date>2009-07-30 12:35:44 -0700</date>
            <delta_ts>2009-08-13 10:37:32 -0700</delta_ts>
            <desc>Use Scroll instead of Mouse Wheel Events - Frames Broken</desc>
            <filename>Scrolling_no_frames.patch</filename>
            <type>text/plain</type>
            <size>9675</size>
            <attacher name="Brian Weinstein">bweinstein</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCShyZXZpc2lvbiA0NjUwNikKKysrIFdlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NzcsNiArNzc3LDcgQEAgSGl0
VGVzdFJlc3VsdCBFdmVudEhhbmRsZXI6OmhpdFRlc3RSZXN1bAogICAgICAgICBIaXRUZXN0UmVz
dWx0IHdpZGdldEhpdFRlc3RSZXN1bHQod2lkZ2V0UG9pbnQpOwogICAgICAgICBmcmFtZS0+Y29u
dGVudFJlbmRlcmVyKCktPmxheWVyKCktPmhpdFRlc3QoSGl0VGVzdFJlcXVlc3QoaGl0VHlwZSks
IHdpZGdldEhpdFRlc3RSZXN1bHQpOwogICAgICAgICByZXN1bHQgPSB3aWRnZXRIaXRUZXN0UmVz
dWx0OworICAgICAgICByZXN1bHQuc2V0SW5uZXJOb2RlKG4pOwogCiAgICAgICAgIGlmICh0ZXN0
U2Nyb2xsYmFycyA9PSBTaG91bGRIaXRUZXN0U2Nyb2xsYmFycykgewogICAgICAgICAgICAgU2Ny
b2xsYmFyKiBldmVudFNjcm9sbGJhciA9IHZpZXctPnNjcm9sbGJhckF0UG9pbnQocG9pbnQpOwpA
QCAtNzk2LDcgKzc5Nyw3IEBAIEhpdFRlc3RSZXN1bHQgRXZlbnRIYW5kbGVyOjpoaXRUZXN0UmVz
dWwKICAgICAgICAgICAgIGlmIChyZXN1bHRWaWV3ICYmIG1haW5WaWV3KSB7CiAgICAgICAgICAg
ICAgICAgSW50UG9pbnQgd2luZG93UG9pbnQgPSByZXN1bHRWaWV3LT5jb250ZW50c1RvV2luZG93
KHJlc3VsdC5wb2ludCgpKTsKICAgICAgICAgICAgICAgICBJbnRQb2ludCBtYWluRnJhbWVQb2lu
dCA9IG1haW5WaWV3LT53aW5kb3dUb0NvbnRlbnRzKHdpbmRvd1BvaW50KTsKLSAgICAgICAgICAg
ICAgICByZXN1bHQgPSBtYWluRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oaXRUZXN0UmVzdWx0QXRQ
b2ludChtYWluRnJhbWVQb2ludCwgYWxsb3dTaGFkb3dDb250ZW50LCBpZ25vcmVDbGlwcGluZyk7
CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbWFpbkZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGl0
VGVzdFJlc3VsdEF0UG9pbnQobWFpbkZyYW1lUG9pbnQsIGFsbG93U2hhZG93Q29udGVudCwgaWdu
b3JlQ2xpcHBpbmcsIHRlc3RTY3JvbGxiYXJzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KQEAgLTg2Myw3ICs4NjQsNyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6c2V0TW91c2VQcmVz
c05vZGUoUGFzCiAgICAgbV9tb3VzZVByZXNzTm9kZSA9IG5vZGU7CiB9CiAKLWJvb2wgRXZlbnRI
YW5kbGVyOjpzY3JvbGxPdmVyZmxvdyhTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxH
cmFudWxhcml0eSBncmFudWxhcml0eSkKK2Jvb2wgRXZlbnRIYW5kbGVyOjpzY3JvbGxPdmVyZmxv
dyhTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0
eSwgaW50IG11bHRpcGxpZXIpCiB7CiAgICAgTm9kZSogbm9kZSA9IG1fZnJhbWUtPmRvY3VtZW50
KCktPmZvY3VzZWROb2RlKCk7CiAgICAgaWYgKCFub2RlKQpAQCAtODcyLDIwICs4NzMsMjAgQEAg
Ym9vbCBFdmVudEhhbmRsZXI6OnNjcm9sbE92ZXJmbG93KFNjcm9sbAogICAgIGlmIChub2RlKSB7
CiAgICAgICAgIFJlbmRlck9iamVjdCogciA9IG5vZGUtPnJlbmRlcmVyKCk7CiAgICAgICAgIGlm
IChyICYmICFyLT5pc0xpc3RCb3goKSkKLSAgICAgICAgICAgIHJldHVybiByLT5lbmNsb3NpbmdC
b3goKS0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOworICAgICAgICAgICAgcmV0dXJu
IHItPmVuY2xvc2luZ0JveCgpLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlw
bGllcik7CiAgICAgfQogCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEV2ZW50SGFuZGxl
cjo6c2Nyb2xsUmVjdXJzaXZlbHkoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3Jh
bnVsYXJpdHkgZ3JhbnVsYXJpdHkpCitib29sIEV2ZW50SGFuZGxlcjo6c2Nyb2xsUmVjdXJzaXZl
bHkoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJp
dHksIGludCBtdWx0aXBsaWVyKQogewotICAgIGJvb2wgaGFuZGxlZCA9IHNjcm9sbE92ZXJmbG93
KGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOworICAgIGJvb2wgaGFuZGxlZCA9IHNjcm9sbE92ZXJm
bG93KGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpOwogICAgIGlmICghaGFuZGxl
ZCkgewogICAgICAgICBGcmFtZSogZnJhbWUgPSBtX2ZyYW1lOwogICAgICAgICBkbyB7CiAgICAg
ICAgICAgICBGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZS0+dmlldygpOwotICAgICAgICAgICAgaGFu
ZGxlZCA9IHZpZXcgPyB2aWV3LT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSkgOiBmYWxz
ZTsKKyAgICAgICAgICAgIGhhbmRsZWQgPSB2aWV3ID8gdmlldy0+c2Nyb2xsKGRpcmVjdGlvbiwg
Z3JhbnVsYXJpdHksIG11bHRpcGxpZXIpIDogZmFsc2U7CiAgICAgICAgICAgICBmcmFtZSA9IGZy
YW1lLT50cmVlKCktPnBhcmVudCgpOwogICAgICAgICB9IHdoaWxlICghaGFuZGxlZCAmJiBmcmFt
ZSk7CiAgICAgIH0KQEAgLTE4MDQsNyArMTgwNSw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5k
bGVXaGVlbEV2ZW50KFBsYXQKICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIHZpZXctPndoZWVsRXZlbnQoZSk7CisgICAgLy92aWV3LT53aGVlbEV2ZW50KGUpOwog
ICAgIHJldHVybiBlLmlzQWNjZXB0ZWQoKTsKIH0KIApJbmRleDogV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAkocmV2
aXNpb24gNDY1MDYpCisrKyBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwOSw5ICsxMDksOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldElnbm9yZVdoZWVs
RXZlbnRzKGJvb2wpOwogCi0gICAgYm9vbCBzY3JvbGxPdmVyZmxvdyhTY3JvbGxEaXJlY3Rpb24s
IFNjcm9sbEdyYW51bGFyaXR5KTsKKyAgICBib29sIHNjcm9sbE92ZXJmbG93KFNjcm9sbERpcmVj
dGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGludCBtdWx0aXBsaWVyID0gMSk7CiAKLSAgICBib29s
IHNjcm9sbFJlY3Vyc2l2ZWx5KFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkpOwor
ICAgIGJvb2wgc2Nyb2xsUmVjdXJzaXZlbHkoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxh
cml0eSwgaW50IG11bHRpcGxpZXIgPSAxKTsKIAogICAgIGJvb2wgc2hvdWxkRHJhZ0F1dG9Ob2Rl
KE5vZGUqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0OyAvLyAtd2Via2l0LXVzZXItZHJhZyA9PSBh
dXRvCiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAkocmV2aXNpb24gNDY1MDYpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDUsMTcg
KzMwNSwxNyBAQCB2b2lkIFNjcm9sbFZpZXc6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0CiAgICAg
dXBkYXRlU2Nyb2xsYmFycyhJbnRTaXplKG5ld1Njcm9sbFBvc2l0aW9uLngoKSwgbmV3U2Nyb2xs
UG9zaXRpb24ueSgpKSk7CiB9CiAKLWJvb2wgU2Nyb2xsVmlldzo6c2Nyb2xsKFNjcm9sbERpcmVj
dGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQorYm9vbCBTY3Jv
bGxWaWV3OjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJp
dHkgZ3JhbnVsYXJpdHksIGludCBtdWx0aXBsaWVyKQogewogICAgIGlmIChwbGF0Zm9ybVdpZGdl
dCgpKQogICAgICAgICByZXR1cm4gcGxhdGZvcm1TY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0
eSk7CiAKICAgICBpZiAoZGlyZWN0aW9uID09IFNjcm9sbFVwIHx8IGRpcmVjdGlvbiA9PSBTY3Jv
bGxEb3duKSB7CiAgICAgICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICAgICAg
cmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5
KTsKKyAgICAgICAgICAgIHJldHVybiBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zY3JvbGwoZGlyZWN0
aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYg
KG1faG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgICAgIHJldHVybiBtX2hvcml6b250YWxT
Y3JvbGxiYXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKKyAgICAgICAgICAgIHJl
dHVybiBtX2hvcml6b250YWxTY3JvbGxiYXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5
LCBtdWx0aXBsaWVyKTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxWaWV3LmgJKHJldmlzaW9uIDQ2NTA2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxW
aWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw3ICsxNDEsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzY3JvbGxSZWN0SW50b1ZpZXdSZWN1cnNpdmVseShjb25zdCBJbnRSZWN0Jik7CiAgICAgCiAg
ICAgLy8gVGhpcyBtZXRob2Qgc2Nyb2xscyBieSBsaW5lcywgcGFnZXMgb3IgcGl4ZWxzLgotICAg
IGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkpOworICAgIGJv
b2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGludCBtdWx0aXBs
aWVyID0gMSk7CiAgICAgICAgIAogICAgIC8vIFNjcm9sbCB0aGUgYWN0dWFsIGNvbnRlbnRzIG9m
IHRoZSB2aWV3IChlaXRoZXIgYmxpdHRpbmcgb3IgaW52YWxpZGF0aW5nIGFzIG5lZWRlZCkuCiAg
ICAgdm9pZCBzY3JvbGxDb250ZW50cyhjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSk7CkluZGV4
OiBXZWJLaXQvd2luL1dlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViVmll
dy5jcHAJKHJldmlzaW9uIDQ2NTA2KQorKysgV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM1Nyw4ICsxMzU3LDE1IEBAIGJvb2wgV2ViVmlldzo6Z2VzdHVyZU5vdGlm
eShXUEFSQU0gd1BhcmEKICAgICBJbnRQb2ludCBldmVudEhhbmRsZXJQb2ludCA9IG1fcGFnZS0+
bWFpbkZyYW1lKCktPnZpZXcoKS0+c2NyZWVuVG9Db250ZW50cyhnZXN0dXJlQmVnaW5Qb2ludCk7
CiAKICAgICBIaXRUZXN0UmVzdWx0IHNjcm9sbGJhclRlc3QgPSBtX3BhZ2UtPm1haW5GcmFtZSgp
LT5ldmVudEhhbmRsZXIoKS0+aGl0VGVzdFJlc3VsdEF0UG9pbnQoZXZlbnRIYW5kbGVyUG9pbnQs
IHRydWUsIGZhbHNlLCBTaG91bGRIaXRUZXN0U2Nyb2xsYmFycyk7CisgICAgbV9nZXN0dXJlVGFy
Z2V0Tm9kZSA9IHNjcm9sbGJhclRlc3QuaW5uZXJOb2RlKCk7CiAKLSAgICBpZiAoZXZlbnRIYW5k
bGVyUG9pbnQueCgpID4gdmlldy0+dmlzaWJsZVdpZHRoKCkgfHwgc2Nyb2xsYmFyVGVzdC5zY3Jv
bGxiYXIoKSkgeworICAgIFJFQ1Qgd2ViVmlld1JlY3Q7CisgICAgR2V0V2luZG93UmVjdChtX3Zp
ZXdXaW5kb3csICZ3ZWJWaWV3UmVjdCk7CisKKyAgIGlmIChzY3JvbGxiYXJUZXN0LnNjcm9sbGJh
cigpKSBwcmludGYoImZvdW5kIHNjcm9sbGJhcnNcbiIpOworCisgICAgLy8gRklYTUU6IEdldFN5
c3RlbU1ldHJpY3MsIHJlYWxseT8KKyAgICBpZiAoZ2VzdHVyZUJlZ2luUG9pbnQueCA+ICh3ZWJW
aWV3UmVjdC5yaWdodCAtIEdldFN5c3RlbU1ldHJpY3MoU01fQ1hWU0NST0xMKSkgfHwgc2Nyb2xs
YmFyVGVzdC5zY3JvbGxiYXIoKSkgewogICAgICAgICAvLyBXZSBhcmUgaW4gdGhlIHNjcm9sbGJh
ciwgdHVybiBvZmYgcGFubmluZywgbmVlZCB0byBiZSBhYmxlIHRvIGRyYWcgdGhlIHNjcm9sbGJh
cgogICAgICAgICBkd1BhbldhbnQgPSBHQ19QQU4gIHwgR0NfUEFOX1dJVEhfSU5FUlRJQSB8IEdD
X1BBTl9XSVRIX0dVVFRFUjsKICAgICAgICAgZHdQYW5CbG9jayA9IEdDX1BBTl9XSVRIX1NJTkdM
RV9GSU5HRVJfSE9SSVpPTlRBTExZIHwgR0NfUEFOX1dJVEhfU0lOR0xFX0ZJTkdFUl9WRVJUSUNB
TExZOwpAQCAtMTM2Nyw3ICsxMzc0LDcgQEAgYm9vbCBXZWJWaWV3OjpnZXN0dXJlTm90aWZ5KFdQ
QVJBTSB3UGFyYQogICAgICAgICBkd1BhbkJsb2NrID0gR0NfUEFOX1dJVEhfU0lOR0xFX0ZJTkdF
Ul9IT1JJWk9OVEFMTFk7CiAgICAgfQogCi0gICAgR0VTVFVSRUNPTkZJRyBnYyA9IHsgR0lEX1BB
TiwgZHdQYW5XYW50ICwgZHdQYW5CbG9jayB9IDsKKyAgICBHRVNUVVJFQ09ORklHIGdjID0geyBH
SURfUEFOLCBkd1BhbldhbnQsIGR3UGFuQmxvY2sgfSA7CiAgICAgcmV0dXJuIFNldEdlc3R1cmVD
b25maWdQdHIoKShtX3ZpZXdXaW5kb3csIDAsIDEsICZnYywgc2l6ZW9mKEdFU1RVUkVDT05GSUcp
KTsKIH0KIApAQCAtMTQwMSw2ICsxNDA4LDggQEAgYm9vbCBXZWJWaWV3OjpnZXN0dXJlKFdQQVJB
TSB3UGFyYW0sIExQQQogICAgICAgICBsb25nIGRlbHRhWCA9IGN1cnJlbnRYIC0gbV9sYXN0UGFu
WDsKICAgICAgICAgbG9uZyBkZWx0YVkgPSBjdXJyZW50WSAtIG1fbGFzdFBhblk7CiAKKyAgICAg
ICAgcHJpbnRmKCJjdXJyZW50WCA9ICVkLCBjdXJyZW50WSA9ICVkLCBkZWx0YVggPSAlZCwgZGVs
dGFZID0gJWRcbiIsIGN1cnJlbnRYLCBjdXJyZW50WSwgZGVsdGFYLCBkZWx0YVkpOworICAgICAg
ICAgICAgCiAgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgb3ZlcnBhbiBmb3Igd2luZG93IGJvdW5j
ZQogICAgICAgICBtX3lPdmVycGFuIC09IG1fbGFzdFBhblkgLSBjdXJyZW50WTsKICAgICAgICAg
bV94T3ZlcnBhbiAtPSBtX2xhc3RQYW5YIC0gY3VycmVudFg7CkBAIC0xNDE0LDEwICsxNDIzLDE4
IEBAIGJvb2wgV2ViVmlldzo6Z2VzdHVyZShXUEFSQU0gd1BhcmFtLCBMUEEKICAgICAgICAgICAg
IENsb3NlR2VzdHVyZUluZm9IYW5kbGVQdHIoKShnZXN0dXJlSGFuZGxlKTsKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICAvLyBSZXByZXNlbnQgdGhlIHBhbiBn
ZXN0dXJlIGFzIGEgbW91c2Ugd2hlZWwgZXZlbnQKLSAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50
IHdoZWVsRXZlbnQobV92aWV3V2luZG93LCBGbG9hdFNpemUoZGVsdGFYLCBkZWx0YVkpLCBGbG9h
dFBvaW50KGN1cnJlbnRYLCBjdXJyZW50WSkpOwotICAgICAgICBjb3JlRnJhbWUtPmV2ZW50SGFu
ZGxlcigpLT5oYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOwogCisgICAgICAgICBpZiAobV9n
ZXN0dXJlVGFyZ2V0Tm9kZSAmJiBtX2dlc3R1cmVUYXJnZXROb2RlLT5yZW5kZXJlcigpLT5lbmNs
b3NpbmdCb3goKSkgeworICAgICAgICAgICAgaWYgKCFtX2dlc3R1cmVUYXJnZXROb2RlLT5yZW5k
ZXJlcigpLT5lbmNsb3NpbmdCb3goKS0+c2Nyb2xsKGRlbHRhWCA8IDAgPyBTY3JvbGxSaWdodCA6
IFNjcm9sbExlZnQsIFNjcm9sbEJ5UGl4ZWwsIGFicyhkZWx0YVgpKSkgeworICAgICAgICAgICAg
ICAgIGlmICghY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsUmVjdXJzaXZlbHkoU2Ny
b2xsTGVmdCwgU2Nyb2xsQnlQaXhlbCwgZGVsdGFYKSkKKyAgICAgICAgICAgICAgICAgICAgbV9n
ZXN0dXJlVGFyZ2V0Tm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+dmlldygpLT5zY3JvbGxCeShJ
bnRTaXplKC1kZWx0YVgsIDApKTsgICAgLy8gT24gVGl2b2ZhcS5jb20gLSB3ZSBhcmUgZ2V0dGlu
ZyBoZXJlLCBidXQgdGhpcyBjYWxsIGRvZXMgbm90aGluZworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKCFtX2dlc3R1cmVUYXJnZXROb2RlLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdCb3go
KS0+c2Nyb2xsKGRlbHRhWSA8IDAgPyBTY3JvbGxEb3duIDogU2Nyb2xsVXAsIFNjcm9sbEJ5UGl4
ZWwsIGFicyhkZWx0YVkpKSkgeworICAgICAgICAgICAgICAgIGlmICghY29yZUZyYW1lLT5ldmVu
dEhhbmRsZXIoKS0+c2Nyb2xsUmVjdXJzaXZlbHkoU2Nyb2xsVXAsIFNjcm9sbEJ5UGl4ZWwsIGRl
bHRhWSkpCisgICAgICAgICAgICAgICAgICAgIG1fZ2VzdHVyZVRhcmdldE5vZGUtPmRvY3VtZW50
KCktPmZyYW1lKCktPnZpZXcoKS0+c2Nyb2xsQnkoSW50U2l6ZSgwLCAtZGVsdGFZKSk7ICAgIC8v
IE9uIFRpdm9mYXEuY29tIC0gd2UgYXJlIGdldHRpbmcgaGVyZSwgYnV0IHRoaXMgY2FsbCBkb2Vz
IG5vdGhpbmcKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAgICAKICAgICAgICAg
aWYgKCEoVXBkYXRlUGFubmluZ0ZlZWRiYWNrUHRyKCkgJiYgQmVnaW5QYW5uaW5nRmVlZGJhY2tQ
dHIoKSAmJiBFbmRQYW5uaW5nRmVlZGJhY2tQdHIoKSkpIHsKICAgICAgICAgICAgIENsb3NlR2Vz
dHVyZUluZm9IYW5kbGVQdHIoKShnZXN0dXJlSGFuZGxlKTsKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwpAQCAtMTQ1MSw2ICsxNDY4LDEwIEBAIGJvb2wgV2ViVmlldzo6Z2VzdHVyZShXUEFSQU0g
d1BhcmFtLCBMUEEKICAgICAgICAgQ2xvc2VHZXN0dXJlSW5mb0hhbmRsZVB0cigpKGdlc3R1cmVI
YW5kbGUpOwogICAgICAgICBicmVhazsKICAgICB9CisgICAgY2FzZSBHSURfUFJFU1NBTkRUQVA6
CisgICAgICAgIDo6U2VuZE1lc3NhZ2UobV92aWV3V2luZG93LCBXTV9DT05URVhUTUVOVSwgMCwg
MCk7CisgICAgICAgIENsb3NlR2VzdHVyZUluZm9IYW5kbGVQdHIoKShnZXN0dXJlSGFuZGxlKTsK
KyAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgLy8gV2UgaGF2ZSBlbmNvdW50
ZXJlZCBhbiB1bmtub3duIGdlc3R1cmUgLSByZXR1cm4gZmFsc2UgdG8gcGFzcyBpdCB0byBEZWZX
aW5kb3dQcm9jCiAgICAgICAgIENsb3NlR2VzdHVyZUluZm9IYW5kbGVQdHIoKShnZXN0dXJlSGFu
ZGxlKTsKSW5kZXg6IFdlYktpdC93aW4vV2ViVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93
aW4vV2ViVmlldy5oCShyZXZpc2lvbiA0NjUwNikKKysrIFdlYktpdC93aW4vV2ViVmlldy5oCSh3
b3JraW5nIGNvcHkpCkBAIC05MTUsNiArOTE1LDcgQEAgcHJvdGVjdGVkOgogICAgIE93blB0cjxI
YXNoU2V0PFdlYkNvcmU6OlN0cmluZz4gPiBtX2VtYmVkZGVkVmlld01JTUVUeXBlczsKIAogICAg
IC8vVmFyaWFibGVzIG5lZWRlZCB0byBzdG9yZSBnZXN0dXJlIGluZm9ybWF0aW9uCisgICAgV2Vi
Q29yZTo6Tm9kZSogbV9nZXN0dXJlVGFyZ2V0Tm9kZTsKICAgICBsb25nIG1fbGFzdFBhblg7CiAg
ICAgbG9uZyBtX2xhc3RQYW5ZOwogICAgIGxvbmcgbV94T3ZlcnBhbjsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34757</attachid>
            <date>2009-08-13 10:37:32 -0700</date>
            <delta_ts>2009-09-03 01:13:29 -0700</delta_ts>
            <desc>Panning Not Using Mouse Events</desc>
            <filename>Panning_scrollRecursively.patch</filename>
            <type>text/plain</type>
            <size>10958</size>
            <attacher name="Brian Weinstein">bweinstein</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NzIwOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMDktMDgtMTMgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE1hZGUgc3ViZnJhbWVGb3JIaXRUYXJnZXROb2RlIGEgcHVibGljIHN0YXRpYyBtZXRob2Qs
IHNvIFdlYlZpZXcgY2FuIGNhbGwgaXQKKyAgICAgICAgZHVyaW5nIGhpdCB0ZXN0aW5nLgorCisg
ICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c3ViZnJh
bWVGb3JIaXRUZXN0UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c3Vi
ZnJhbWVGb3JUYXJnZXROb2RlKToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5oOgorICAg
IAogMjAwOS0wOC0xMyAgTWF4aW1lIFNpbW9uICA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IFdlYkNvcmUvcGFnZS9FdmVu
dEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3Bw
CShyZXZpc2lvbiA0NzE2NykKKysrIFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw2IEBAIHVzaW5nIG5hbWVzcGFjZSBTVkdOYW1lczsKIC8v
IFdoZW4gdGhlIGF1dG9zY3JvbGwgb3IgdGhlIHBhblNjcm9sbCBpcyB0cmlnZ2VyZWQgd2hlbiBk
byB0aGUgc2Nyb2xsIGV2ZXJ5IDAuMDVzIHRvIG1ha2UgaXQgc21vb3RoCiBjb25zdCBkb3VibGUg
YXV0b3Njcm9sbEludGVydmFsID0gMC4wNTsKIAotc3RhdGljIEZyYW1lKiBzdWJmcmFtZUZvclRh
cmdldE5vZGUoTm9kZSopOwogc3RhdGljIEZyYW1lKiBzdWJmcmFtZUZvckhpdFRlc3RSZXN1bHQo
Y29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYpOwogCiBzdGF0aWMgaW5saW5lIHZv
aWQgc2Nyb2xsQW5kQWNjZXB0RXZlbnQoZmxvYXQgZGVsdGEsIFNjcm9sbERpcmVjdGlvbiBwb3Np
dGl2ZURpcmVjdGlvbiwgU2Nyb2xsRGlyZWN0aW9uIG5lZ2F0aXZlRGlyZWN0aW9uLCBQbGF0Zm9y
bVdoZWVsRXZlbnQmIGUsIE5vZGUqIG5vZGUpCkBAIC05MDIsMTAgKzkwMSwxMCBAQCBGcmFtZSog
c3ViZnJhbWVGb3JIaXRUZXN0UmVzdWx0KGNvbnN0IE1vCiB7CiAgICAgaWYgKCFoaXRUZXN0UmVz
dWx0LmlzT3ZlcldpZGdldCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gc3ViZnJh
bWVGb3JUYXJnZXROb2RlKGhpdFRlc3RSZXN1bHQudGFyZ2V0Tm9kZSgpKTsKKyAgICByZXR1cm4g
RXZlbnRIYW5kbGVyOjpzdWJmcmFtZUZvclRhcmdldE5vZGUoaGl0VGVzdFJlc3VsdC50YXJnZXRO
b2RlKCkpOwogfQogCi1GcmFtZSogc3ViZnJhbWVGb3JUYXJnZXROb2RlKE5vZGUqIG5vZGUpCitG
cmFtZSogRXZlbnRIYW5kbGVyOjpzdWJmcmFtZUZvclRhcmdldE5vZGUoTm9kZSogbm9kZSkKIHsK
ICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiAwOwpJbmRleDogV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAko
cmV2aXNpb24gNDcxNjcpCisrKyBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwOSw2ICsxMDksOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldElnbm9yZVdo
ZWVsRXZlbnRzKGJvb2wpOwogCisgICAgc3RhdGljIEZyYW1lKiBzdWJmcmFtZUZvclRhcmdldE5v
ZGUoTm9kZSopOworCiAgICAgYm9vbCBzY3JvbGxPdmVyZmxvdyhTY3JvbGxEaXJlY3Rpb24sIFNj
cm9sbEdyYW51bGFyaXR5KTsKIAogICAgIGJvb2wgc2Nyb2xsUmVjdXJzaXZlbHkoU2Nyb2xsRGly
ZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSk7CkluZGV4OiBXZWJLaXQvd2luL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2aXNpb24gNDcyMDkpCisrKyBX
ZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDA5
LTA4LTEzICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggb2YgPGh0dHA6Ly93
ZWJraXQub3JnL2IvMjc4NTA+LiBQYW5uaW5nIGJ5IGVtdWxhdGluZyBNb3VzZSBXaGVlbCBFdmVu
dHMgYnJlYWtzIEdvb2dsZSBNYXBzLgorICAgICAgICAKKyAgICAgICAgU3dpdGNoZWQgdG8gdXNp
bmcgUmVuZGVyTGF5ZXI6OnNjcm9sbEJ5UmVjdXJzaXZlbHkgaW5zdGVhZCBvZiBlbXVsYXRpbmcg
YSBtb3VzZSB3aGVlbCwKKyAgICAgICAgYW5kIHN3aXRjaGVkIHRvIGhhbmRsaW5nIHRoZSBoaXQg
dGVzdGluZyBpbiBXZWJWaWV3IGZyb20gZG9pbmcgaXQgYXMgcGFydCBvZiB0aGUgbW91c2Ugd2hl
ZWwgZXZlbnQuCisgICAgICAgIE9uZSBkb3duc2lkZSBvZiB0aGlzIGZpeCBpcyB0aGF0IHBhbm5p
bmcgd2lsbCBub3QganVtcCBvdXQgb2YgZnJhbWVzIGFueW1vcmUgKGxpa2UgcGFuLXNjcm9sbGlu
ZyksIGJ1dAorICAgICAgICB0aGlzIGlzIHRyYWNrZWQgaW4gPGh0dHA6Ly93ZWJraXQub3JnL2Iv
MjgyMzc+LgorCisgICAgICAgICogV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJWaWV3OjpnZXN0
dXJlTm90aWZ5KTogQWRkZWQgaGl0IHRlc3RpbmcgaGVyZSB0byBmaWd1cmUgb3V0IHRoZSBub2Rl
IHRoZSB1c2VyIHN0YXJ0ZWQgdGhlIGdlc3R1cmUgb24uCisgICAgICAgIChXZWJWaWV3OjpnZXN0
dXJlKTogU3dpdGNoZWQgZnJvbSBlbXVsYXRpbmcgbW91c2Ugd2hlZWwgZXZlbnRzIGZvciBwYW5u
aW5nIHRvIGNhbGxpbmcgUmVuZGVyTGF5ZXI6OnNjcm9sbEJ5UmVjdXJzaXZlbHkuCisgICAgICAg
ICogV2ViVmlldy5oOgorCiAyMDA5LTA4LTEyICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWlu
QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVuLgpJbmRleDogV2Vi
S2l0L3dpbi9XZWJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYlZpZXcuY3Bw
CShyZXZpc2lvbiA0NzE2NykKKysrIFdlYktpdC93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEzMzMsMjQgKzEzMzMsNjYgQEAgYm9vbCBXZWJWaWV3OjpnZXN0dXJlTm90aWZ5KFdQ
QVJBTSB3UGFyYQogCiAgICAgRFdPUkQgZHdQYW5XYW50OwogICAgIERXT1JEIGR3UGFuQmxvY2s7
CisgICAgCisgICAgYm9vbCBjYW5CZVNjcm9sbGVkID0gZmFsc2U7CisgICAgYm9vbCBoaXRTY3Jv
bGxiYXIgPSBmYWxzZTsKIAotICAgIC8vIFRyYW5zbGF0ZSBnZXN0dXJlIGxvY2F0aW9uIHRvIGNs
aWVudCB0byBoaXQgdGVzdCBvbiBzY3JvbGxiYXJzCiAgICAgUE9JTlQgZ2VzdHVyZUJlZ2luUG9p
bnQgPSB7Z24tPnB0c0xvY2F0aW9uLngsIGduLT5wdHNMb2NhdGlvbi55fTsKLSAgICBJbnRQb2lu
dCBldmVudEhhbmRsZXJQb2ludCA9IG1fcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+c2NyZWVu
VG9Db250ZW50cyhnZXN0dXJlQmVnaW5Qb2ludCk7CiAKLSAgICBIaXRUZXN0UmVzdWx0IHNjcm9s
bGJhclRlc3QgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+aGl0VGVzdFJl
c3VsdEF0UG9pbnQoZXZlbnRIYW5kbGVyUG9pbnQsIHRydWUsIGZhbHNlLCBTaG91bGRIaXRUZXN0
U2Nyb2xsYmFycyk7CisgICAgSGl0VGVzdFJlcXVlc3QgcmVxdWVzdChIaXRUZXN0UmVxdWVzdDo6
UmVhZE9ubHkpOworICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0KG1fcGFnZS0+bWFpbkZyYW1lKCkt
PnZpZXcoKS0+c2NyZWVuVG9Db250ZW50cyhnZXN0dXJlQmVnaW5Qb2ludCkpOworCisgICAgbV9w
YWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKS0+cmVuZGVyVmlldygpLT5sYXllcigpLT5oaXRU
ZXN0KHJlcXVlc3QsIHJlc3VsdCk7CisgICAgbV9nZXN0dXJlVGFyZ2V0Tm9kZSA9IHJlc3VsdC5p
bm5lck5vZGUoKTsKKyAgICBpZiAocmVzdWx0LnNjcm9sbGJhcigpKQorICAgICAgICBoaXRTY3Jv
bGxiYXIgPSB0cnVlOworCisgICAgd2hpbGUgKG1fZ2VzdHVyZVRhcmdldE5vZGUgJiYgKG1fZ2Vz
dHVyZVRhcmdldE5vZGUtPmlzQ29udGFpbmVyTm9kZSgpKSAmJiAhaGl0U2Nyb2xsYmFyKSB7Cisg
ICAgICAgIEZyYW1lKiBjaGlsZEZyYW1lID0gRXZlbnRIYW5kbGVyOjpzdWJmcmFtZUZvclRhcmdl
dE5vZGUobV9nZXN0dXJlVGFyZ2V0Tm9kZSk7CisgICAgICAgIGlmICghY2hpbGRGcmFtZSkKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0KGNoaWxkRnJh
bWUtPnZpZXcoKS0+c2NyZWVuVG9Db250ZW50cyhnZXN0dXJlQmVnaW5Qb2ludCkpOworCisgICAg
ICAgIGNoaWxkRnJhbWUtPmRvY3VtZW50KCktPnJlbmRlclZpZXcoKS0+bGF5ZXIoKS0+aGl0VGVz
dChyZXF1ZXN0LCByZXN1bHQpOworICAgICAgICBtX2dlc3R1cmVUYXJnZXROb2RlID0gcmVzdWx0
LmlubmVyTm9kZSgpOworICAgICAgICBpZiAocmVzdWx0LnNjcm9sbGJhcigpKQorICAgICAgICAg
ICAgaGl0U2Nyb2xsYmFyID0gdHJ1ZTsKKyAgICB9CisKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyID0gMDsKKyAgICBpZiAobV9nZXN0dXJlVGFyZ2V0Tm9kZSkKKyAgICAgICAgcmVuZGVyZXIg
PSBtX2dlc3R1cmVUYXJnZXROb2RlLT5yZW5kZXJlcigpOworICAgIHdoaWxlIChyZW5kZXJlcikg
eworICAgICAgICBpZiAocmVuZGVyZXItPmlzQm94KCkgJiYgdG9SZW5kZXJCb3gocmVuZGVyZXIp
LT5jYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEoKSkgeworICAgICAgICAgICAgY2Fu
QmVTY3JvbGxlZCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICByZW5kZXJlciA9IHJlbmRlcmVyLT5wYXJlbnQoKTsKKyAgICB9CiAKLSAgICBpZiAoZXZlbnRI
YW5kbGVyUG9pbnQueCgpID4gdmlldy0+dmlzaWJsZVdpZHRoKCkgfHwgc2Nyb2xsYmFyVGVzdC5z
Y3JvbGxiYXIoKSkgewotICAgICAgICAvLyBXZSBhcmUgaW4gdGhlIHNjcm9sbGJhciwgdHVybiBv
ZmYgcGFubmluZywgbmVlZCB0byBiZSBhYmxlIHRvIGRyYWcgdGhlIHNjcm9sbGJhcgorICAgIFJF
Q1Qgd2ViVmlld1JlY3Q7CisgICAgR2V0V2luZG93UmVjdChtX3ZpZXdXaW5kb3csICZ3ZWJWaWV3
UmVjdCk7CisKKyAgICBpZiAoKHZpZXctPnZlcnRpY2FsU2Nyb2xsYmFyKCkgJiYgZ2VzdHVyZUJl
Z2luUG9pbnQueCA+ICh3ZWJWaWV3UmVjdC5yaWdodCAtIHZpZXctPnZlcnRpY2FsU2Nyb2xsYmFy
KCktPnRoZW1lKCktPnNjcm9sbGJhclRoaWNrbmVzcygpKSkgCisgICAgICAgIHx8IGhpdFNjcm9s
bGJhcikgeworICAgICAgICAvLyBJZiB3ZSBkaWRuJ3QgaGl0IGEgc2Nyb2xsYmFyIGluIG91ciBo
aXQgdGVzdGluZywgdGhlIG9ubHkgb3RoZXIgc2Nyb2xsYmFyIGl0IHdvdWxkIGJlIAorICAgICAg
ICAvLyBwb3NzaWJsZSB0byBoaXQgd291bGQgYmUgdGhlIFdlYlZpZXcgc2Nyb2xsYmFyLCBzbyB3
ZSBjYW4gY2hlY2sgaWYgb3VyIHggY29vcmRpbmF0ZSBpcworICAgICAgICAvLyBvdXRzaWRlIG9m
IHRoZSB3ZWJ2aWV3LCB3aGVyZSB0aGUgc2NvbGxiYXIgdmVydGljYWwgaXMuCisgICAgICAgIGR3
UGFuV2FudCA9IEdDX1BBTiAgfCBHQ19QQU5fV0lUSF9JTkVSVElBIHwgR0NfUEFOX1dJVEhfR1VU
VEVSOworICAgICAgICBkd1BhbkJsb2NrID0gR0NfUEFOX1dJVEhfU0lOR0xFX0ZJTkdFUl9IT1JJ
Wk9OVEFMTFkgfCBHQ19QQU5fV0lUSF9TSU5HTEVfRklOR0VSX1ZFUlRJQ0FMTFk7CisgICAgfSBl
bHNlIGlmICghY2FuQmVTY3JvbGxlZCkgeworICAgICAgICAvLyBXZSBjYW4ndCBzY3JvbGwgb24g
dGhlIGZyYW1lL3BhZ2Ugd2UgYXJlIGluLgogICAgICAgICBkd1BhbldhbnQgPSBHQ19QQU4gIHwg
R0NfUEFOX1dJVEhfSU5FUlRJQSB8IEdDX1BBTl9XSVRIX0dVVFRFUjsKICAgICAgICAgZHdQYW5C
bG9jayA9IEdDX1BBTl9XSVRIX1NJTkdMRV9GSU5HRVJfSE9SSVpPTlRBTExZIHwgR0NfUEFOX1dJ
VEhfU0lOR0xFX0ZJTkdFUl9WRVJUSUNBTExZOwogICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFNv
bWVvbmUgaW4gb3VyIERPTSBIaWVyYXJjaHkgY2FuIHNjcm9sbCwgYW5kIHdlJ3JlIG5vdCBvbiBh
IHNjcm9sbGJhciwgbGV0IHRoZW0gcGFuLgogICAgICAgICBkd1BhbldhbnQgPSBHQ19QQU4gIHwg
R0NfUEFOX1dJVEhfU0lOR0xFX0ZJTkdFUl9WRVJUSUNBTExZIHwgR0NfUEFOX1dJVEhfSU5FUlRJ
QSB8IEdDX1BBTl9XSVRIX0dVVFRFUjsKICAgICAgICAgZHdQYW5CbG9jayA9IEdDX1BBTl9XSVRI
X1NJTkdMRV9GSU5HRVJfSE9SSVpPTlRBTExZOwogICAgIH0KIAotICAgIEdFU1RVUkVDT05GSUcg
Z2MgPSB7IEdJRF9QQU4sIGR3UGFuV2FudCAsIGR3UGFuQmxvY2sgfSA7Ci0gICAgcmV0dXJuIFNl
dEdlc3R1cmVDb25maWdQdHIoKShtX3ZpZXdXaW5kb3csIDAsIDEsICZnYywgc2l6ZW9mKEdFU1RV
UkVDT05GSUcpKTsKKyAgICBHRVNUVVJFQ09ORklHIGdjID0geyBHSURfUEFOLCBkd1BhbldhbnQs
IGR3UGFuQmxvY2sgfTsKKyAgICByZXR1cm4gU2V0R2VzdHVyZUNvbmZpZ1B0cigpKGduLT5od25k
VGFyZ2V0LCAwLCAxLCAmZ2MsIHNpemVvZihHRVNUVVJFQ09ORklHKSk7CiB9CiAKIGJvb2wgV2Vi
Vmlldzo6Z2VzdHVyZShXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKSAKQEAgLTEzNzIsMjEg
KzE0MTQsMTggQEAgYm9vbCBXZWJWaWV3OjpnZXN0dXJlKFdQQVJBTSB3UGFyYW0sIExQQQogICAg
ICAgICBtX2xhc3RQYW5YID0gZ2kucHRzTG9jYXRpb24ueDsKICAgICAgICAgbV9sYXN0UGFuWSA9
IGdpLnB0c0xvY2F0aW9uLnk7CiAKLSAgICAgICAgQ2xvc2VHZXN0dXJlSW5mb0hhbmRsZVB0cigp
KGdlc3R1cmVIYW5kbGUpOworICAgICAgICByZXR1cm4gRGVmV2luZG93UHJvYyhnaS5od25kVGFy
Z2V0LCBXTV9HRVNUVVJFLCB3UGFyYW0sIGxQYXJhbSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgR0lEX1BBTjogewogICAgICAgICAvLyBXaGVyZSBhcmUgdGhlIGZpbmdlcnMgY3VycmVudGx5
PwogICAgICAgICBsb25nIGN1cnJlbnRYID0gZ2kucHRzTG9jYXRpb24ueDsKICAgICAgICAgbG9u
ZyBjdXJyZW50WSA9IGdpLnB0c0xvY2F0aW9uLnk7Ci0gICAgICAgIAogICAgICAgICAvLyBIb3cg
ZmFyIGRpZCB3ZSBwYW4gaW4gZWFjaCBkaXJlY3Rpb24/CiAgICAgICAgIGxvbmcgZGVsdGFYID0g
Y3VycmVudFggLSBtX2xhc3RQYW5YOwogICAgICAgICBsb25nIGRlbHRhWSA9IGN1cnJlbnRZIC0g
bV9sYXN0UGFuWTsKLQogICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIG92ZXJwYW4gZm9yIHdpbmRv
dyBib3VuY2UKLSAgICAgICAgbV95T3ZlcnBhbiAtPSBtX2xhc3RQYW5ZIC0gY3VycmVudFk7Ci0g
ICAgICAgIG1feE92ZXJwYW4gLT0gbV9sYXN0UGFuWCAtIGN1cnJlbnRYOwotICAgICAgICAKKyAg
ICAgICAgbV95T3ZlcnBhbiArPSBkZWx0YVk7CisgICAgICAgIG1feE92ZXJwYW4gLT0gZGVsdGFY
OwogICAgICAgICAvLyBVcGRhdGUgb3VyIGNsYXNzIHZhcmlhYmxlcyB3aXRoIHVwZGF0ZWQgdmFs
dWVzCiAgICAgICAgIG1fbGFzdFBhblggPSBjdXJyZW50WDsKICAgICAgICAgbV9sYXN0UGFuWSA9
IGN1cnJlbnRZOwpAQCAtMTM5NiwyMCArMTQzNSwyMyBAQCBib29sIFdlYlZpZXc6Omdlc3R1cmUo
V1BBUkFNIHdQYXJhbSwgTFBBCiAgICAgICAgICAgICBDbG9zZUdlc3R1cmVJbmZvSGFuZGxlUHRy
KCkoZ2VzdHVyZUhhbmRsZSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
LSAgICAgICAgLy8gUmVwcmVzZW50IHRoZSBwYW4gZ2VzdHVyZSBhcyBhIG1vdXNlIHdoZWVsIGV2
ZW50Ci0gICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudCB3aGVlbEV2ZW50KG1fdmlld1dpbmRvdywg
RmxvYXRTaXplKGRlbHRhWCwgZGVsdGFZKSwgRmxvYXRQb2ludChjdXJyZW50WCwgY3VycmVudFkp
KTsKLSAgICAgICAgY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlV2hlZWxFdmVudCh3
aGVlbEV2ZW50KTsKIAorICAgICAgICBpZiAoIW1fZ2VzdHVyZVRhcmdldE5vZGUpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgLy8gV2UgbmVnYXRlIGhlcmUgc2luY2UgcGFu
bmluZyB1cCBtb3ZlcyB0aGUgc2NyZWVuIGRvd24sIGFuZCB2aWNlIHZlcnNhLgorICAgICAgICBt
X2dlc3R1cmVUYXJnZXROb2RlLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpLT5zY3JvbGxC
eVJlY3Vyc2l2ZWx5KC1kZWx0YVgsIC1kZWx0YVkpOworICAgICAgICAgICAKICAgICAgICAgaWYg
KCEoVXBkYXRlUGFubmluZ0ZlZWRiYWNrUHRyKCkgJiYgQmVnaW5QYW5uaW5nRmVlZGJhY2tQdHIo
KSAmJiBFbmRQYW5uaW5nRmVlZGJhY2tQdHIoKSkpIHsKICAgICAgICAgICAgIENsb3NlR2VzdHVy
ZUluZm9IYW5kbGVQdHIoKShnZXN0dXJlSGFuZGxlKTsKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGdpLmR3RmxhZ3MgJiBHRl9CRUdJTikgewotICAg
ICAgICAgICAgQmVnaW5QYW5uaW5nRmVlZGJhY2tQdHIoKShtX3ZpZXdXaW5kb3cpOworICAgICAg
ICAgICAgQmVnaW5QYW5uaW5nRmVlZGJhY2tQdHIoKShnaS5od25kVGFyZ2V0KTsKICAgICAgICAg
ICAgIG1feU92ZXJwYW4gPSAwOwogICAgICAgICB9IGVsc2UgaWYgKGdpLmR3RmxhZ3MgJiBHRl9F
TkQpIHsKLSAgICAgICAgICAgIEVuZFBhbm5pbmdGZWVkYmFja1B0cigpKG1fdmlld1dpbmRvdywg
dHJ1ZSk7CisgICAgICAgICAgICBFbmRQYW5uaW5nRmVlZGJhY2tQdHIoKShnaS5od25kVGFyZ2V0
LCB0cnVlKTsKICAgICAgICAgICAgIG1feU92ZXJwYW4gPSAwOwogICAgICAgICB9CiAKQEAgLTE0
MjQsMTggKzE0NjYsMjAgQEAgYm9vbCBXZWJWaWV3OjpnZXN0dXJlKFdQQVJBTSB3UGFyYW0sIExQ
QQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIAorICAgICAgICBib29sIGRp
ZFVwZGF0ZVBhbm5pbmcgPSB0cnVlOwogICAgICAgICAvLyBGSVhNRTogU3VwcG9ydCBIb3Jpem9u
dGFsIFdpbmRvdyBCb3VuY2UKKyAgICAgICAgLy8gRklYTUU6IElmIHRoZSB1c2VyIHN0YXJ0cyBw
YW5uaW5nIGRvd24gYWZ0ZXIgYSB3aW5kb3cgYm91bmNlIGhhcyBzdGFydGVkLCB0aGUgd2luZG93
IGRvZXNuJ3QgYm91bmNlIGJhY2sgCisgICAgICAgIC8vIHVudGlsIHRoZXkgcmVsZWFzZSB0aGVp
ciBmaW5nZXIuCiAgICAgICAgIGlmICh2ZXJ0U2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkgPT0gMCkK
LSAgICAgICAgICAgIFVwZGF0ZVBhbm5pbmdGZWVkYmFja1B0cigpKG1fdmlld1dpbmRvdywgMCwg
bV95T3ZlcnBhbiwgZ2kuZHdGbGFncyAmIEdGX0lORVJUSUEpOworICAgICAgICAgICAgZGlkVXBk
YXRlUGFubmluZyA9IFVwZGF0ZVBhbm5pbmdGZWVkYmFja1B0cigpKGdpLmh3bmRUYXJnZXQsIDAs
IG1feU92ZXJwYW4sIGdpLmR3RmxhZ3MgJiBHRl9JTkVSVElBKTsKICAgICAgICAgZWxzZSBpZiAo
dmVydFNjcm9sbGJhci0+Y3VycmVudFBvcygpID49IHZlcnRTY3JvbGxiYXItPm1heGltdW0oKSkK
LSAgICAgICAgICAgIFVwZGF0ZVBhbm5pbmdGZWVkYmFja1B0cigpKG1fdmlld1dpbmRvdywgMCwg
bV95T3ZlcnBhbiwgZ2kuZHdGbGFncyAmIEdGX0lORVJUSUEpOworICAgICAgICAgICAgZGlkVXBk
YXRlUGFubmluZyA9IFVwZGF0ZVBhbm5pbmdGZWVkYmFja1B0cigpKGdpLmh3bmRUYXJnZXQsIDAs
IG1feU92ZXJwYW4sIGdpLmR3RmxhZ3MgJiBHRl9JTkVSVElBKTsKIAogICAgICAgICBDbG9zZUdl
c3R1cmVJbmZvSGFuZGxlUHRyKCkoZ2VzdHVyZUhhbmRsZSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICBkZWZhdWx0OgotICAgICAgICAvLyBXZSBoYXZlIGVuY291bnRlcmVkIGFuIHVua25v
d24gZ2VzdHVyZSAtIHJldHVybiBmYWxzZSB0byBwYXNzIGl0IHRvIERlZldpbmRvd1Byb2MKLSAg
ICAgICAgQ2xvc2VHZXN0dXJlSW5mb0hhbmRsZVB0cigpKGdlc3R1cmVIYW5kbGUpOworICAgICAg
ICByZXR1cm4gRGVmV2luZG93UHJvYyhnaS5od25kVGFyZ2V0LCBXTV9HRVNUVVJFLCB3UGFyYW0s
IGxQYXJhbSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApJbmRleDogV2ViS2l0L3dpbi9XZWJW
aWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJWaWV3LmgJKHJldmlzaW9uIDQ3MTY3
KQorKysgV2ViS2l0L3dpbi9XZWJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTkyMiw2ICs5MjIs
NyBAQCBwcm90ZWN0ZWQ6CiAgICAgT3duUHRyPEhhc2hTZXQ8V2ViQ29yZTo6U3RyaW5nPiA+IG1f
ZW1iZWRkZWRWaWV3TUlNRVR5cGVzOwogCiAgICAgLy9WYXJpYWJsZXMgbmVlZGVkIHRvIHN0b3Jl
IGdlc3R1cmUgaW5mb3JtYXRpb24KKyAgICBXZWJDb3JlOjpOb2RlKiBtX2dlc3R1cmVUYXJnZXRO
b2RlOwogICAgIGxvbmcgbV9sYXN0UGFuWDsKICAgICBsb25nIG1fbGFzdFBhblk7CiAgICAgbG9u
ZyBtX3hPdmVycGFuOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>