<?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>90394</bug_id>
          
          <creation_ts>2012-07-02 11:26:28 -0700</creation_ts>
          <short_desc>[Qt] Enable GL-based pixel tests in WTR using QRawWebView</short_desc>
          <delta_ts>2012-11-21 11:31:10 -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>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>95992</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>90641</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Noam Rosenthal">noam</reporter>
          <assigned_to name="Balazs Kelemen">kbalazs</assigned_to>
          <cc>adrian.yanes</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>hausmann</cc>
    
    <cc>jturcotte</cc>
    
    <cc>kbalazs</cc>
    
    <cc>kenneth</cc>
    
    <cc>loki</cc>
    
    <cc>luiz</cc>
    
    <cc>menard</cc>
    
    <cc>ossy</cc>
    
    <cc>vestbo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zherczeg</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>661632</commentid>
    <comment_count>0</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-07-02 11:26:28 -0700</bug_when>
    <thetext>Currently WTR for Qt initiates a QQuickWebView and a QQuickView, only to override most of their characteristics to enable the layout/pixel tests.
Also, we use the image taken by the WebProcess for pixel tests instead of using the window snapshot, which means we don&apos;t really pixel-test accelerated compositing or anything done in GL.

we should switch WTR to use the new QRawWebView, still testing all the QML APIs via the API tests. While we&apos;re at it we should also enable pixel tests based on window-snapshot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661637</commentid>
    <comment_count>1</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-07-02 11:31:07 -0700</bug_when>
    <thetext>This has been discussed in person with several people @ QtCS, but if anybody has concerns/opinions to the contrary feel free to raise them :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662128</commentid>
    <comment_count>2</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-03 04:53:38 -0700</bug_when>
    <thetext>Started working on this. One thing makes me worry: is it ok to actually switch wtr to QRWV? Shouldn&apos;t we want to keep the QQWV based implementation as well?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662161</commentid>
    <comment_count>3</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-07-03 06:01:56 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Started working on this. One thing makes me worry: is it ok to actually switch wtr to QRWV? Shouldn&apos;t we want to keep the QQWV based implementation as well?

Maybe in the beginning we should keep both implementations, and switch when it is stable/makes-sense?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662966</commentid>
    <comment_count>4</comment_count>
      <attachid>150799</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-04 08:15:20 -0700</bug_when>
    <thetext>Created attachment 150799
wip patch for discussion

This is not ready. Dumping basically works, sometimes view dimensions doesn&apos;t match which can be some resizing issue. The bigger issue of mine is the pixel snapshot, which is always empty currently, and I feel like I need some help to fix this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663005</commentid>
    <comment_count>5</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-07-04 09:10:07 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; The bigger issue of mine is the pixel snapshot, which is always empty currently, and I feel like I need some help to fix this.

Probably when createSnapshot() is called you want to make the context current, paint, and then read the pixels.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663047</commentid>
    <comment_count>6</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-04 10:08:05 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; The bigger issue of mine is the pixel snapshot, which is always empty currently, and I feel like I need some help to fix this.
&gt; 
&gt; Probably when createSnapshot() is called you want to make the context current, paint, and then read the pixels.

It doesn&apos;t help. This was what I did first, but it did not work, so I tried to do it like tst_qrawwebview. tst_qrawwebview first sets up the context, loads the page and meanwhile do paints in viewNeedsDisplay, and after load finished dumps the image. This is really tricky in fact, so let&apos;s take a look what it does:
it has a loadfinished callback for turning on a bool:
void WebView::finishLoadForFrame(WKPageRef page, WKFrameRef frame, WKTypeRef userData, const void *clientInfo)
{
    WebView* obj = static_cast&lt;WebView*&gt;(const_cast&lt;void*&gt;(clientInfo));
    obj-&gt;m_frameLoaded = true;
}

and in the _next_ viewNeedsDisplay, it emits a signal:
virtual void viewNeedsDisplay(const QRect&amp;)
{
    m_webView-&gt;paint(QMatrix4x4(), 1, 0);
    if (m_frameLoaded)
        emit loaded();
}
and it dumps the image just after this signal has emitted.

So, I can grab the image if I do the same trick in createSnapshot, but I don&apos;t think this is correct behavior. The question is that why don&apos;t we have anything to paint when createSnapshot is called? For the Mac platform createSnapshot simply captures the window. I also tried to actually show the window but it did not change anything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663586</commentid>
    <comment_count>7</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-07-05 08:57:42 -0700</bug_when>
    <thetext>Ok, I looked at this more carefully. I believe that the correct state machine should be as followed:

1. ignore viewNeedsDisplay events.
2. send a new NothingToRender message from LayerTreeCoordinator when m_shouldSyncFrame is false, see LayerTreeCoordinator::performScheduledLayerFlush(). This would ensure that we only grab the pixels after all the async rendering steps are done.
3. Grabbing the pixels should be performed at the first NothingToRender message that comes up after the first &quot;Done&quot; event received from the injected bundle.

This sequence of event should ensure that we grab the pixels when all rendering of the loaded frame is done, including the async rendering of tiles content.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663601</commentid>
    <comment_count>8</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2012-07-05 10:07:51 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; 2. send a new NothingToRender message from LayerTreeCoordinator when m_shouldSyncFrame is false, see LayerTreeCoordinator::performScheduledLayerFlush(). This would ensure that we only grab the pixels after all the async rendering steps are done.

I think that you might have the same problem in some cases where you won&apos;t know if you should wait for a NothingToRender message or not before grabbing. For example if the done message was triggered in a timer where no DOM modification was done.

So basically what you need to know is: &quot;Should I wait to grab? Is there something on its way that might have been triggered right before that Done message?&quot;

Since we can rely on every message being received in the same order they were sent, you could send a slightly different BeginRenderFrame message each time the m_layerFlushTimer is started (meaning that a modification to the document is pending for rendering in the web process).
And when the done message is received, wait until DidRenderFrame was received if we&apos;re between a BeginRenderFrame and a DidRenderFrame message, or else grab immediately.

Another way could be to hold the Done message in the web process until DidRenderFrame is sent if the page needs layout when triggered, but that would be quite smelly and would violate a couple of layers.

I agree that we shouldn&apos;t rely on viewNeedsDisplay, we should rely on DidRenderFrame messages instead since grabbing will/should flush the update queue anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663664</commentid>
    <comment_count>9</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-07-05 11:32:50 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; 2. send a new NothingToRender message from LayerTreeCoordinator when m_shouldSyncFrame is false, see LayerTreeCoordinator::performScheduledLayerFlush(). This would ensure that we only grab the pixels after all the async rendering steps are done.
&gt; 
&gt; I think that you might have the same problem in some cases where you won&apos;t know if you should wait for a NothingToRender message or not before grabbing. For example if the done message was triggered in a timer where no DOM modification was done.
&gt; 
&gt; So basically what you need to know is: &quot;Should I wait to grab? Is there something on its way that might have been triggered right before that Done message?&quot;
&gt; 
&gt; Since we can rely on every message being received in the same order they were sent, you could send a slightly different BeginRenderFrame message each time the m_layerFlushTimer is started (meaning that a modification to the document is pending for rendering in the web process).
&gt; And when the done message is received, wait until DidRenderFrame was received if we&apos;re between a BeginRenderFrame and a DidRenderFrame message, or else grab immediately.
&gt; 
&gt; Another way could be to hold the Done message in the web process until DidRenderFrame is sent if the page needs layout when triggered, but that would be quite smelly and would violate a couple of layers.
&gt; 
&gt; I agree that we shouldn&apos;t rely on viewNeedsDisplay, we should rely on DidRenderFrame messages instead since grabbing will/should flush the update queue anyway.
This can still create a problem, if the frame loading creates a DOM change that the UI process hasn&apos;t recognized yet.

I need to experiment with this state sequence a bit...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664324</commentid>
    <comment_count>10</comment_count>
      <attachid>151128</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-07-06 19:10:54 -0700</bug_when>
    <thetext>Created attachment 151128
WIP patch, including supporting fixes for QRawWebView

OK, I took a different route to this - using the existing ForceRepaint API. Waiting for DidRenderFrame and messing with LayerTreeCoordinator has proven unstable - also it&apos;s unnecessary. The main bug comes from the fact that LayerTreeCoordinator::forceRepaint is not implemented correctly.

The patch is a combination of fixes to this and the blocking bug. It works with new-run-webkit-tests, but it still needs some work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666703</commentid>
    <comment_count>11</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-11 06:21:43 -0700</bug_when>
    <thetext>Can we mark this as a duplicate of bug 90641?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666713</commentid>
    <comment_count>12</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-07-11 06:44:31 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Can we mark this as a duplicate of bug 90641?

No, 90641 is just the enabling stuff in QRawWebView. We still need to modify WTR.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667603</commentid>
    <comment_count>13</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-12 04:09:10 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; Can we mark this as a duplicate of bug 90641?
&gt; 
&gt; No, 90641 is just the enabling stuff in QRawWebView. We still need to modify WTR.

Ok, than I hope you don&apos;t mind if I upload the patch ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667609</commentid>
    <comment_count>14</comment_count>
      <attachid>151905</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-12 04:15:49 -0700</bug_when>
    <thetext>Created attachment 151905
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667616</commentid>
    <comment_count>15</comment_count>
      <attachid>151905</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-12 04:22:22 -0700</bug_when>
    <thetext>Comment on attachment 151905
Patch

We should wait for the font rebase and double check the pixel results.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667696</commentid>
    <comment_count>16</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-07-12 06:13:30 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; (In reply to comment #11)
&gt; &gt; &gt; Can we mark this as a duplicate of bug 90641?
&gt; &gt; 
&gt; &gt; No, 90641 is just the enabling stuff in QRawWebView. We still need to modify WTR.
&gt; 
&gt; Ok, than I hope you don&apos;t mind if I upload the patch ;)

Of course not :) This is your work, I&apos;ve just been trying to help with the synchronized painting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>672523</commentid>
    <comment_count>17</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-18 10:51:16 -0700</bug_when>
    <thetext>I have rebaselined the compositing directory to the point that now we don&apos;t have any unexpectedly faling pixel result. With this patch we have 38 fail. Some of them just needs rebaseline but the most of them is real failure. This is known to be the affect of actually testing the compositing path for real. We also have 10 passing tests that are expected to fail. It&apos;s important to note that the pixel snapshot mechanism does not work with xvfb, it needs to run with the real X server.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679769</commentid>
    <comment_count>18</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-07-26 14:30:00 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; I have rebaselined the compositing directory to the point that now we don&apos;t have any unexpectedly faling pixel result. With this patch we have 38 fail. Some of them just needs rebaseline but the most of them is real failure. This is known to be the affect of actually testing the compositing path for real. We also have 10 passing tests that are expected to fail. It&apos;s important to note that the pixel snapshot mechanism does not work with xvfb, it needs to run with the real X server.

How far are we from moving forward with this? Simon/Jocelyn, would you like to review? (I can&apos;t since I&apos;m a co-author).
Once the WTR pixel test changes are in and the rebaseline is done, can we make this happen?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680337</commentid>
    <comment_count>19</comment_count>
      <attachid>151905</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-07-27 02:24:33 -0700</bug_when>
    <thetext>Comment on attachment 151905
Patch

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

A few small comments

&gt; Source/WebKit2/Shared/API/c/qt/WKImageQt.cpp:40
&gt; +WKImageRef WKImageCreateFromQImage(QImage image)

I think the QImage parameter should be passed a const reference, to avoid atomic refcount operations.

&gt; Source/WebKit2/Shared/API/c/qt/WKImageQt.cpp:49
&gt; +    QPainter* painter = graphicsContext-&gt;platformContext();
&gt; +    painter-&gt;drawImage(QPoint(0, 0), image);

I hope that this isn&apos;t going to accidentally &quot;alter&quot; the data. Alternatively I suppose you could memcopy from the incoming QImage to the webImage-&gt;createQImage().bits()?

&gt; Tools/WebKitTestRunner/qt/PlatformWebViewQt.cpp:129
&gt; +    // FIXME: should use a transformation matrix fot mirroring.

fot -&gt; for</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680342</commentid>
    <comment_count>20</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-07-27 02:29:28 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #17)
&gt; &gt; I have rebaselined the compositing directory to the point that now we don&apos;t have any unexpectedly faling pixel result. With this patch we have 38 fail. Some of them just needs rebaseline but the most of them is real failure. This is known to be the affect of actually testing the compositing path for real. We also have 10 passing tests that are expected to fail. It&apos;s important to note that the pixel snapshot mechanism does not work with xvfb, it needs to run with the real X server.
&gt; 
&gt; How far are we from moving forward with this? Simon/Jocelyn, would you like to review? (I can&apos;t since I&apos;m a co-author).
&gt; Once the WTR pixel test changes are in and the rebaseline is done, can we make this happen?

I think the patch looks good.

I&apos;m a bit concerned that this removes valuable code coverage of QQuickWebView, in times when the Qt 5.0 release is nearing. At the same time it probably isn&apos;t the best time to change QQuickWebView now to use QRawWebView.

It seems that in an ideal world WTR would use QRawWebView - I see benefits such as requiring less workarounds in WTR. QQuickWebView would be based on QRawWebView and we sould actually use TestWebKitAPI to test the C API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680431</commentid>
    <comment_count>21</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-27 04:23:45 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #18)
&gt; &gt; (In reply to comment #17)
&gt; &gt; &gt; I have rebaselined the compositing directory to the point that now we don&apos;t have any unexpectedly faling pixel result. With this patch we have 38 fail. Some of them just needs rebaseline but the most of them is real failure. This is known to be the affect of actually testing the compositing path for real. We also have 10 passing tests that are expected to fail. It&apos;s important to note that the pixel snapshot mechanism does not work with xvfb, it needs to run with the real X server.
&gt; &gt; 
&gt; &gt; How far are we from moving forward with this? Simon/Jocelyn, would you like to review? (I can&apos;t since I&apos;m a co-author).
&gt; &gt; Once the WTR pixel test changes are in and the rebaseline is done, can we make this happen?
&gt; 
&gt; I think the patch looks good.
&gt; 
&gt; I&apos;m a bit concerned that this removes valuable code coverage of QQuickWebView, in times when the Qt 5.0 release is nearing. At the same time it probably isn&apos;t the best time to change QQuickWebView now to use QRawWebView.

Yep, this a problem, although I don&apos;t think layout tests add much coverage for QQuickWebView since it doesn&apos;t test the UI stuff.

&gt; 
&gt; It seems that in an ideal world WTR would use QRawWebView - I see benefits such as requiring less workarounds in WTR. QQuickWebView would be based on QRawWebView and we sould actually use TestWebKitAPI to test the C API.

QQuickWebView would be based on QRawWebView? That&apos;s totally new to me. I was thinking that QRawWebView is an internal api for non-qml use cases. Could you describe the benefit of this?

I think we should have a consensus how to move forward. In any case, a patch with the rebaselines is needed, so I&apos;m going to remove the patch from the review queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680443</commentid>
    <comment_count>22</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-07-27 04:37:49 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; &gt; It seems that in an ideal world WTR would use QRawWebView - I see benefits such as requiring less workarounds in WTR. QQuickWebView would be based on QRawWebView and we sould actually use TestWebKitAPI to test the C API.
&gt; 
&gt; QQuickWebView would be based on QRawWebView? That&apos;s totally new to me. I was thinking that QRawWebView is an internal api for non-qml use cases. Could you describe the benefit of this?

It would remain internal for that purpose. Anyway, it is a bit too early to make a decision. But the more I think about it the more this patch makes sense anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680449</commentid>
    <comment_count>23</comment_count>
      <attachid>151905</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-07-27 04:48:53 -0700</bug_when>
    <thetext>Comment on attachment 151905
Patch

r=me with the typo fix and the const reference fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680495</commentid>
    <comment_count>24</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-27 05:42:03 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; (From update of attachment 151905 [details])
&gt; r=me with the typo fix and the const reference fix.

Thanks for the review, but still we should do the necessary rebaseline as well. I would rather go for another round, so I&apos;m going to remove the r+ now :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680518</commentid>
    <comment_count>25</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-07-27 06:11:48 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; (In reply to comment #23)
&gt; &gt; (From update of attachment 151905 [details] [details])
&gt; &gt; r=me with the typo fix and the const reference fix.
&gt; 
&gt; Thanks for the review, but still we should do the necessary rebaseline as well. I would rather go for another round, so I&apos;m going to remove the r+ now :)

You can simply not land for now :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680530</commentid>
    <comment_count>26</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-07-27 06:21:18 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; (In reply to comment #20)
&gt; &gt; (In reply to comment #18)
&gt; &gt; &gt; (In reply to comment #17)
&gt; &gt; &gt; &gt; I have rebaselined the compositing directory to the point that now we don&apos;t have any unexpectedly faling pixel result. With this patch we have 38 fail. Some of them just needs rebaseline but the most of them is real failure. This is known to be the affect of actually testing the compositing path for real. We also have 10 passing tests that are expected to fail. It&apos;s important to note that the pixel snapshot mechanism does not work with xvfb, it needs to run with the real X server.
&gt; &gt; &gt; 
&gt; &gt; &gt; How far are we from moving forward with this? Simon/Jocelyn, would you like to review? (I can&apos;t since I&apos;m a co-author).
&gt; &gt; &gt; Once the WTR pixel test changes are in and the rebaseline is done, can we make this happen?
&gt; &gt; 
&gt; &gt; I think the patch looks good.
&gt; &gt; 
&gt; &gt; I&apos;m a bit concerned that this removes valuable code coverage of QQuickWebView, in times when the Qt 5.0 release is nearing. At the same time it probably isn&apos;t the best time to change QQuickWebView now to use QRawWebView.
&gt; 
&gt; Yep, this a problem, although I don&apos;t think layout tests add much coverage for QQuickWebView since it doesn&apos;t test the UI stuff.
&gt; 
&gt; &gt; 
&gt; &gt; It seems that in an ideal world WTR would use QRawWebView - I see benefits such as requiring less workarounds in WTR. QQuickWebView would be based on QRawWebView and we sould actually use TestWebKitAPI to test the C API.
&gt; 
&gt; QQuickWebView would be based on QRawWebView? That&apos;s totally new to me. I was thinking that QRawWebView is an internal api for non-qml use cases. Could you describe the benefit of this?
Separation of concerns. Right now things like QtViewportHandler and others mix cross-platform webkit functionality together with QtQuick specific code paths. It&apos;s hard to tell sometimes whether the problem is in QtQuick, in the glue layer, or in WebKit.
Also, it would make QRawWebView and QQuickwebView more like a stack and less like branches.

&gt; I think we should have a consensus how to move forward. In any case, a patch with the rebaselines is needed, so I&apos;m going to remove the patch from the review queue.
If someone wants to prototype putting QQuickWebView on top of QRawWebView it would be a good step forward, probably after Qt5webkit branches.
I&apos;m OK with the status quo, once we can move forward with having some sort of GL-based pixel tests :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684142</commentid>
    <comment_count>27</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-08-01 06:27:13 -0700</bug_when>
    <thetext>I&apos;m not sure how to proceed with this. There is a bunch of pixel failures currently, and according to my results there will be much more (~1000-1500) with the patch. It&apos;s not possible to do all the rebaseline in one patch. Also these failures can mean real bugs that we had anyway, which we could not detect so far. Also it&apos;s possible that the sync mechanism we do for grabbing the pixels is still not perfect. Maybe someone with more graphics knowledge should look at the results as well.

If the problem is not the sync mechanism than I think we should go forward and land the patch, and go with the reabaselines incrementally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685097</commentid>
    <comment_count>28</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-08-02 01:37:01 -0700</bug_when>
    <thetext>Seems like I have found a real issue with the mechanism. We have trouble with repaint tests like svg/text/tspan-dynamic-positioning.svg or fast/repaint/background-generated.html. (There is a lot more of course.) The change in the runRepaintTest() function does not apply to the snapshot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685294</commentid>
    <comment_count>29</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-08-02 06:20:37 -0700</bug_when>
    <thetext>Seems like we do the repaint (in result of the dom manipulation) too late. This is strange because we call WebPage::snapshotInViewCoordinates even with the patch which is forcing a style update, so I would expect that when we do the forced repaint for the snapshot it should contain the effect of the dom change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705198</commentid>
    <comment_count>30</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-08-27 05:48:03 -0700</bug_when>
    <thetext>The repaint bug has been fixed so I think we can go forward with this. I am going to update the patch and check the tests. Doing all the rebaseline seems to be too difficult (at least for me), as there are a huge number of failures mostly because of port and wk1/2 differences but also there are some real bugs. I think it&apos;s more reasonable to land this patch first and do the rebaseline incrementally later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705431</commentid>
    <comment_count>31</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-08-27 11:27:45 -0700</bug_when>
    <thetext>Unfortunately I still have some problems with the tests so I&apos;m trying to fix it first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>706286</commentid>
    <comment_count>32</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-08-28 06:36:18 -0700</bug_when>
    <thetext>I was wrong, some repaint tests are still failing. The tests was fixed by http://trac.webkit.org/changeset/124603 but this patch made trouble and had to be rolled out. The last patch that changed on the syncronisation was http://trac.webkit.org/changeset/125034.

Now the problem is that we don&apos;t get called back after WKPageForceRepaint in some tests at all. It seems like that before the second patch, we was called back but the actual repaint did not happened at the web process side.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710926</commentid>
    <comment_count>33</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-09-04 03:05:57 -0700</bug_when>
    <thetext>Status: I&apos;m still working on this. Seems like we should not use QEventLoop because it makes the event loop messed up and we lose a didrenderframe message.
For that reason I modified WTR to explicitly wait for the callback, it solved the syncronisation. Unfortunately there are still tons of failures, even some text failures so I&apos;m debugging them further.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713391</commentid>
    <comment_count>34</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-09-06 09:59:14 -0700</bug_when>
    <thetext>The GL rendering path has some problems that made tests start to produce blackness flakily. For that reason I was thinking about implementing this with the software path upon QQuickWebView, as an intermediate step. Tested locally, it is quite stable. Filed bug 95992 for that work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>773136</commentid>
    <comment_count>35</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-11-21 11:31:10 -0800</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 95992 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150799</attachid>
            <date>2012-07-04 08:15:20 -0700</date>
            <delta_ts>2012-07-12 04:15:35 -0700</delta_ts>
            <desc>wip patch for discussion</desc>
            <filename>wip.diff</filename>
            <type>text/plain</type>
            <size>12312</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9xdC9XS0ltYWdlUXQuY3Bw
IGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL3F0L1dLSW1hZ2VRdC5jcHAKaW5kZXggZDA5
NzVmNi4uMmMyN2NiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL3F0
L1dLSW1hZ2VRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL3F0L1dLSW1h
Z2VRdC5jcHAKQEAgLTI1LDEwICsyNSwzMSBAQAogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5o
IgogI2luY2x1ZGUgIldLU2hhcmVkQVBJQ2FzdC5oIgogI2luY2x1ZGUgIldlYkltYWdlLmgiCisj
aW5jbHVkZSA8UVBhaW50ZXI+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KIAorI2luY2x1ZGUgPFFGaWxlPgorI2luY2x1
ZGUgPFFJbWFnZVdyaXRlcj4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1c2luZyBuYW1l
c3BhY2UgV2ViS2l0OwogCiBRSW1hZ2UgV0tJbWFnZUNyZWF0ZVFJbWFnZShXS0ltYWdlUmVmIGlt
YWdlUmVmKQogewogICAgIHJldHVybiB0b0ltcGwoaW1hZ2VSZWYpLT5iaXRtYXAoKS0+Y3JlYXRl
UUltYWdlKCkuY29weSgpOwogfQorCitXS0ltYWdlUmVmIFdLSW1hZ2VDcmVhdGVGcm9tUUltYWdl
KFFJbWFnZSBpbWFnZSkKK3sKKyAgICBBU1NFUlQoaW1hZ2UuZm9ybWF0KCkgPT0gUUltYWdlOjpG
b3JtYXRfQVJHQjMyIHx8IGltYWdlLmZvcm1hdCgpID09IFFJbWFnZTo6Rm9ybWF0X1JHQjMyKTsK
KyAgICBBU1NFUlQoaW1hZ2UuYnl0ZXNQZXJMaW5lKCkgPT0gaW1hZ2Uud2lkdGgoKSAqIDQpOwor
CisgICAgUmVmUHRyPFdlYkltYWdlPiB3ZWJJbWFnZSA9IFdlYkltYWdlOjpjcmVhdGUoaW1hZ2Uu
c2l6ZSgpLCBzdGF0aWNfY2FzdDxJbWFnZU9wdGlvbnM+KDApKTsKKyAgICBpZiAoIXdlYkltYWdl
LT5iaXRtYXAoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4
dD4gZ3JhcGhpY3NDb250ZXh0ID0gd2ViSW1hZ2UtPmJpdG1hcCgpLT5jcmVhdGVHcmFwaGljc0Nv
bnRleHQoKTsKKyAgICBRUGFpbnRlciogcGFpbnRlciA9IGdyYXBoaWNzQ29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCk7CisgICAgcGFpbnRlci0+ZHJhd0ltYWdlKFFQb2ludCgwLCAwKSwgaW1hZ2Up
OworICAgIHJldHVybiB0b0FQSSh3ZWJJbWFnZS5yZWxlYXNlKCkubGVha1JlZigpKTsKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9xdC9XS0ltYWdlUXQuaCBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9xdC9XS0ltYWdlUXQuaAppbmRleCAxZTUwNzNhLi5k
MTRjMzkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvcXQvV0tJbWFn
ZVF0LmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL3F0L1dLSW1hZ2VRdC5oCkBA
IC0yNyw1ICsyNyw2IEBACiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0ltYWdlLmg+CiAKIFdLX0VYUE9S
VCBRSW1hZ2UgV0tJbWFnZUNyZWF0ZVFJbWFnZShXS0ltYWdlUmVmIGltYWdlKTsKK1dLX0VYUE9S
VCBXS0ltYWdlUmVmIFdLSW1hZ2VDcmVhdGVGcm9tUUltYWdlKFFJbWFnZSBpbWFnZSk7CiAKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9o
dG1sL3Jlc291cmNlcy9xd2t2aWV3X25vQmFja2dyb3VuZDEucG5nIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9odG1sL3Jlc291cmNlcy9xd2t2aWV3X25vQmFja2dyb3Vu
ZDEucG5nCmluZGV4IGMyOTNmNDQuLjI2NDRjNWEgMTAwNjQ0CkJpbmFyeSBmaWxlcyBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvaHRtbC9yZXNvdXJjZXMvcXdrdmlld19u
b0JhY2tncm91bmQxLnBuZyBhbmQgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rl
c3RzL2h0bWwvcmVzb3VyY2VzL3F3a3ZpZXdfbm9CYWNrZ3JvdW5kMS5wbmcgZGlmZmVyCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL2h0bWwvcmVzb3Vy
Y2VzL3F3a3ZpZXdfbm9CYWNrZ3JvdW5kMy5wbmcgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3Rlc3RzL2h0bWwvcmVzb3VyY2VzL3F3a3ZpZXdfbm9CYWNrZ3JvdW5kMy5wbmcKaW5k
ZXggNGZhNTNiMS4uODcyMmNkNyAxMDA2NDQKQmluYXJ5IGZpbGVzIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9odG1sL3Jlc291cmNlcy9xd2t2aWV3X25vQmFja2dyb3Vu
ZDMucG5nIGFuZCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvaHRtbC9y
ZXNvdXJjZXMvcXdrdmlld19ub0JhY2tncm91bmQzLnBuZyBkaWZmZXIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvaHRtbC9yZXNvdXJjZXMvcXdrdmll
d19wYWludC5wbmcgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL2h0bWwv
cmVzb3VyY2VzL3F3a3ZpZXdfcGFpbnQucG5nCmluZGV4IDY4NzQzYWMuLjY2ZTNjOTggMTAwNjQ0
CkJpbmFyeSBmaWxlcyBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvaHRt
bC9yZXNvdXJjZXMvcXdrdmlld19wYWludC5wbmcgYW5kIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC90ZXN0cy9odG1sL3Jlc291cmNlcy9xd2t2aWV3X3BhaW50LnBuZyBkaWZmZXIK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmggYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oCmluZGV4IDBlOGM2YjUuLjJi
NjlkNzQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3
LmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcuaApAQCAtMjks
MTAgKzI5LDEyIEBACiAjaW5jbHVkZSA8V2ViS2l0Mi9XS1JldGFpblB0ci5oPgogCiAjaWYgZGVm
aW5lZChCVUlMRElOR19RVF9fKQotY2xhc3MgUVF1aWNrV2ViVmlldzsKLXR5cGVkZWYgUVF1aWNr
V2ViVmlldyogUGxhdGZvcm1XS1ZpZXc7Ci1jbGFzcyBRUXVpY2tWaWV3OwotdHlwZWRlZiBRUXVp
Y2tWaWV3KiBQbGF0Zm9ybVdpbmRvdzsKK2NsYXNzIFFSYXdXZWJWaWV3OwordHlwZWRlZiBRUmF3
V2ViVmlldyogUGxhdGZvcm1XS1ZpZXc7CituYW1lc3BhY2UgV1RSIHsKK2NsYXNzIFF0VmlldzsK
K30KK3R5cGVkZWYgV1RSOjpRdFZpZXcqIFBsYXRmb3JtV2luZG93OwogY2xhc3MgUUV2ZW50TG9v
cDsKICNlbGlmIGRlZmluZWQoX19BUFBMRV9fKSAmJiBfX0FQUExFX18KICNpZiBfX09CSkNfXwpk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UYXJnZXQucHJpIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9UYXJnZXQucHJpCmluZGV4IGI5ZTdhOGIuLjgxOTcxZTEgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGFyZ2V0LnByaQorKysgYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL1RhcmdldC5wcmkKQEAgLTI3LDYgKzI3LDkgQEAgREVTVERJUiA9ICQke1JPT1Rf
QlVJTERfRElSfS9iaW4KIAogUVQgPSBjb3JlIGd1aSB3aWRnZXRzIG5ldHdvcmsgZGVjbGFyYXRp
dmUgdGVzdGxpYiBxdWljayBxdWljay1wcml2YXRlIHdlYmtpdAogCitJTkNMVURFUEFUSCArPSBc
CisgICAgJCR7Uk9PVF9XRUJLSVRfRElSfS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0
L3JhdworCiBsb2FkKGZlYXR1cmVzKQogCiBXRUJLSVQgKz0gd3RmIGphdmFzY3JpcHRjb3JlIHdl
YmtpdDIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvcXQvUGxhdGZvcm1XZWJW
aWV3UXQuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9xdC9QbGF0Zm9ybVdlYlZpZXdRdC5j
cHAKaW5kZXggMDIxMWRmNS4uMmUzNWI2NCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9xdC9QbGF0Zm9ybVdlYlZpZXdRdC5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9xdC9QbGF0Zm9ybVdlYlZpZXdRdC5jcHAKQEAgLTMxLDUyICszMSwxMjcgQEAKICNpbmNsdWRl
ICJxcXVpY2t3ZWJ2aWV3X3AuaCIKIAogI2luY2x1ZGUgPFFDb3JlQXBwbGljYXRpb24+CisjaW5j
bHVkZSA8UUd1aUFwcGxpY2F0aW9uPgogI2luY2x1ZGUgPFFFdmVudExvb3A+Ci0jaW5jbHVkZSA8
UVFtbFByb3BlcnR5PgotI2luY2x1ZGUgPFF0UXVpY2svUVF1aWNrVmlldz4KKyNpbmNsdWRlIDxR
TWF0cml4NHg0PgorI2luY2x1ZGUgPFFPcGVuR0xDb250ZXh0PgorI2luY2x1ZGUgPFFUaW1lcj4K
KyNpbmNsdWRlIDxRV2luZG93PgorI2luY2x1ZGUgPFdlYktpdDIvV0tJbWFnZVF0Lmg+CisjaW5j
bHVkZSA8cXJhd3dlYnZpZXdfcC5oPgogI2luY2x1ZGUgPHF3aW5kb3dzeXN0ZW1pbnRlcmZhY2Vf
cXBhLmg+CiAKKyNpbmNsdWRlIDxRSW1hZ2VXcml0ZXI+CisjaW5jbHVkZSA8UUZpbGU+CisKIG5h
bWVzcGFjZSBXVFIgewogCi1jbGFzcyBXcmFwcGVyV2luZG93IDogcHVibGljIFFRdWlja1ZpZXcg
eworY2xhc3MgUXRWaWV3IDogcHVibGljIFFXaW5kb3csIHByaXZhdGUgUVJhd1dlYlZpZXdDbGll
bnQgewogICAgIFFfT0JKRUNUCiBwdWJsaWM6Ci0gICAgV3JhcHBlcldpbmRvdyhRUXVpY2tXZWJW
aWV3KiB2aWV3KQotICAgICAgICA6IFFRdWlja1ZpZXcoUVVybCgiZGF0YTp0ZXh0L3BsYWluLGlt
cG9ydCBRdFF1aWNrIDIuMFxuSXRlbSB7IG9iamVjdE5hbWU6ICdyb290JyB9IikpCi0gICAgICAg
ICwgbV92aWV3KHZpZXcpCi0gICAgewotICAgICAgICBjb25uZWN0KHRoaXMsIFNJR05BTChzdGF0
dXNDaGFuZ2VkKFFRdWlja1ZpZXc6OlN0YXR1cykpLCBTTE9UKGhhbmRsZVN0YXR1c0NoYW5nZWQo
UVF1aWNrVmlldzo6U3RhdHVzKSkpOwotICAgIH0KKyAgICBRdFZpZXcoV0tDb250ZXh0UmVmIGNv
bnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZik7CisgICAgflF0VmlldygpOwor
CisgICAgUUltYWdlIGNyZWF0ZVNuYXBzaG90KCk7CisKKyAgICBRUmF3V2ViVmlldyogdmlldygp
IGNvbnN0IHsgcmV0dXJuIG1fdmlldzsgfQorCisgICAgLy8gUVJhd1dlYlZpZXdDbGllbnQKKyAg
ICB2aXJ0dWFsIHZvaWQgdmlld05lZWRzRGlzcGxheShjb25zdCBRUmVjdCYpOworICAgIHZpcnR1
YWwgdm9pZCB2aWV3UmVxdWVzdGVkQ3Vyc29yT3ZlcnJpZGUoY29uc3QgUUN1cnNvciYpOworICAg
IHZpcnR1YWwgdm9pZCB2aWV3UmVxdWVzdGVkU2Nyb2xsKGNvbnN0IFFQb2ludCYpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCB2aWV3UHJvY2Vzc0NyYXNoZWQoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
dmlld1Byb2Nlc3NSZWxhdW5jaGVkKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHZpZXdDb250ZW50
U2l6ZUNoYW5nZWQoY29uc3QgUVNpemUmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZG9uZVdpdGhL
ZXlFdmVudChjb25zdCBRS2V5RXZlbnQqLCBib29sKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZG9u
ZVdpdGhUb3VjaEV2ZW50KGNvbnN0IFFUb3VjaEV2ZW50KiwgYm9vbCkgeyB9Citwcm90ZWN0ZWQ6
CisgICAgdmlydHVhbCB2b2lkIHJlc2l6ZUV2ZW50KFFSZXNpemVFdmVudCopOworCisgICAgdmly
dHVhbCB2b2lkIGtleVByZXNzRXZlbnQoUUtleUV2ZW50KiBldmVudCkgeyBtX3ZpZXctPnNlbmRL
ZXlFdmVudChldmVudCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQga2V5UmVsZWFzZUV2ZW50KFFLZXlF
dmVudCogZXZlbnQpIHsgbV92aWV3LT5zZW5kS2V5RXZlbnQoZXZlbnQpOyB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgbW91c2VEb3VibGVDbGlja0V2ZW50KFFNb3VzZUV2ZW50KiBldmVudCkgeyBtX3Zp
ZXctPnNlbmRNb3VzZUV2ZW50KGV2ZW50LCAyKTsgfQorICAgIHZpcnR1YWwgdm9pZCBtb3VzZU1v
dmVFdmVudChRTW91c2VFdmVudCogZXZlbnQpIHsgbV92aWV3LT5zZW5kTW91c2VFdmVudChldmVu
dCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbW91c2VQcmVzc0V2ZW50KFFNb3VzZUV2ZW50KiBldmVu
dCkgeyBtX3ZpZXctPnNlbmRNb3VzZUV2ZW50KGV2ZW50LCAxKTsgfQorICAgIHZpcnR1YWwgdm9p
ZCBtb3VzZVJlbGVhc2VFdmVudChRTW91c2VFdmVudCogZXZlbnQpIHsgbV92aWV3LT5zZW5kTW91
c2VFdmVudChldmVudCk7IH0KK3ByaXZhdGU6CisgICAgUVJhd1dlYlZpZXcqIG1fdmlldzsKKyAg
ICBRT3BlbkdMQ29udGV4dCogbV9nbENvbnRleHQ7Cit9OwogCi1wcml2YXRlIHNsb3RzOgotICAg
IHZvaWQgaGFuZGxlU3RhdHVzQ2hhbmdlZChRUXVpY2tWaWV3OjpTdGF0dXMgc3RhdHVzKQotICAg
IHsKLSAgICAgICAgaWYgKHN0YXR1cyAhPSBRUXVpY2tWaWV3OjpSZWFkeSkKLSAgICAgICAgICAg
IHJldHVybjsKK1F0Vmlldzo6UXRWaWV3KFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91
cFJlZiBwYWdlR3JvdXApCit7CisgICAgY29uc3QgUVNpemUgaW5pdGlhbFNpemUoODAwLCA2MDAp
OwogCi0gICAgICAgIHNldEdlb21ldHJ5KDAsIDAsIDgwMCwgNjAwKTsKKyAgICBzZXRTdXJmYWNl
VHlwZShPcGVuR0xTdXJmYWNlKTsKKyAgICBzZXRHZW9tZXRyeSgwLCAwLCBpbml0aWFsU2l6ZS53
aWR0aCgpLCBpbml0aWFsU2l6ZS5oZWlnaHQoKSk7CisgICAgc2V0V2luZG93RmxhZ3MoUXQ6Oldp
bmRvdyB8IFF0OjpXaW5kb3dUaXRsZUhpbnQpOworICAgIGNyZWF0ZSgpOwogCi0gICAgICAgIHNl
dFJlc2l6ZU1vZGUoUVF1aWNrVmlldzo6U2l6ZVJvb3RPYmplY3RUb1ZpZXcpOwotICAgICAgICBt
X3ZpZXctPnNldFBhcmVudEl0ZW0ocm9vdE9iamVjdCgpKTsKLSAgICAgICAgUVFtbFByb3BlcnR5
Ojp3cml0ZShtX3ZpZXcsICJhbmNob3JzLmZpbGwiLCBxVmFyaWFudEZyb21WYWx1ZShyb290T2Jq
ZWN0KCkpKTsKKyAgICBtX2dsQ29udGV4dCA9IG5ldyBRT3BlbkdMQ29udGV4dCgpOworICAgIG1f
Z2xDb250ZXh0LT5jcmVhdGUoKTsKKyAgICBtX2dsQ29udGV4dC0+bWFrZUN1cnJlbnQodGhpcyk7
CisgICAgZ2xWaWV3cG9ydCgwLCAwLCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKTsK
KyAgICBnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CisgICAgZ2xDbGVhcihHTF9DT0xPUl9CVUZG
RVJfQklUKTsKIAotICAgICAgICBRV2luZG93U3lzdGVtSW50ZXJmYWNlOjpoYW5kbGVXaW5kb3dB
Y3RpdmF0ZWQodGhpcyk7Ci0gICAgICAgIG1fdmlldy0+cGFnZSgpLT5zZXRGb2N1cyh0cnVlKTsK
LSAgICB9CisgICAgbV92aWV3ID0gbmV3IFFSYXdXZWJWaWV3KGNvbnRleHQsIHBhZ2VHcm91cCwg
dGhpcyk7CisgICAgbV92aWV3LT5zZXRTaXplKGluaXRpYWxTaXplKTsKKyAgICBtX3ZpZXctPmNy
ZWF0ZSgpOwogCi1wcml2YXRlOgotICAgIFFRdWlja1dlYlZpZXcqIG1fdmlldzsKLX07CisgICAg
V0tQYWdlU2V0VXNlRml4ZWRMYXlvdXQobV92aWV3LT5wYWdlUmVmKCksIHRydWUpOworfQogCi1Q
bGF0Zm9ybVdlYlZpZXc6OlBsYXRmb3JtV2ViVmlldyhXS0NvbnRleHRSZWYgY29udGV4dFJlZiwg
V0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmKQotICAgIDogbV92aWV3KG5ldyBRUXVpY2tXZWJW
aWV3KGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZikpCi0gICAgLCBtX3dpbmRvdyhuZXcgV3JhcHBl
cldpbmRvdyhtX3ZpZXcpKQotICAgICwgbV93aW5kb3dJc0tleSh0cnVlKQotICAgICwgbV9tb2Rh
bEV2ZW50TG9vcCgwKQorUXRWaWV3Ojp+UXRWaWV3KCkKIHsKLSAgICBRUXVpY2tXZWJWaWV3RXhw
ZXJpbWVudGFsIGV4cGVyaW1lbnRhbChtX3ZpZXcpOwotICAgIGV4cGVyaW1lbnRhbC5zZXRSZW5k
ZXJUb09mZnNjcmVlbkJ1ZmZlcih0cnVlKTsKLSAgICBtX3ZpZXctPnNldEFsbG93QW55SFRUUFND
ZXJ0aWZpY2F0ZUZvckxvY2FsSG9zdCh0cnVlKTsKKyAgICBkZWxldGUgbV92aWV3OworICAgIGRl
bGV0ZSBtX2dsQ29udGV4dDsKK30KKworI2RlZmluZSBMT0dfVklFVyAxCisjaWYgTE9HX1ZJRVcK
KyNkZWZpbmUgTE9HX1ZJRVdfRlVOQygpIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIF9fRlVOQ1RJ
T05fXykKKyNlbHNlCisjZGVmaW5lIExPR19WSUVXX0ZVTkMoKQorI2VuZGlmCisKK3ZvaWQgUXRW
aWV3OjpyZXNpemVFdmVudChRUmVzaXplRXZlbnQqIGV2ZW50KQoreworICAgIExPR19WSUVXX0ZV
TkMoKTsKKyAgICBtX3ZpZXctPnNldFNpemUoZXZlbnQtPnNpemUoKSk7Cit9CisKK1FJbWFnZSBR
dFZpZXc6OmNyZWF0ZVNuYXBzaG90KCkKK3sKKyAgICBMT0dfVklFV19GVU5DKCk7CisKKyAgICBR
X0FTU0VSVChRT3BlbkdMQ29udGV4dDo6Y3VycmVudENvbnRleHQoKSA9PSBtX2dsQ29udGV4dCk7
CisgICAgUUltYWdlIGltYWdlKHNpemUoKSwgUUltYWdlOjpGb3JtYXRfQVJHQjMyX1ByZW11bHRp
cGxpZWQpOworICAgIHVjaGFyKiBiaXRzID0gY29uc3RfY2FzdDx1Y2hhcio+KGltYWdlLmNvbnN0
Qml0cygpKTsKKyAgICBnbFJlYWRQaXhlbHMoMCwgMCwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5o
ZWlnaHQoKSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgYml0cyk7CisKKyAgICByZXR1cm4g
aW1hZ2U7Cit9CisKK3ZvaWQgUXRWaWV3Ojp2aWV3TmVlZHNEaXNwbGF5KGNvbnN0IFFSZWN0JikK
K3sKKyAgICBMT0dfVklFV19GVU5DKCk7CisgICAgbV92aWV3LT5wYWludChRTWF0cml4NHg0KCks
IDEsIDApOworfQorCit2b2lkIFF0Vmlldzo6dmlld1JlcXVlc3RlZEN1cnNvck92ZXJyaWRlKGNv
bnN0IFFDdXJzb3ImIGN1cnNvcikKK3sKKyAgICBRR3VpQXBwbGljYXRpb246OnNldE92ZXJyaWRl
Q3Vyc29yKGN1cnNvcik7Cit9CisKK1BsYXRmb3JtV2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KFdL
Q29udGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXApCisgICAgOiBtX21v
ZGFsRXZlbnRMb29wKDApCit7CisgICAgbV93aW5kb3cgPSBuZXcgUXRWaWV3KGNvbnRleHQsIHBh
Z2VHcm91cCk7CisgICAgbV92aWV3ID0gbV93aW5kb3ctPnZpZXcoKTsKKworICAgIGZvY3VzKCk7
CiB9CiAKIFBsYXRmb3JtV2ViVmlldzo6flBsYXRmb3JtV2ViVmlldygpCkBAIC04NiwzMSArMTYx
LDI4IEBAIFBsYXRmb3JtV2ViVmlldzo6flBsYXRmb3JtV2ViVmlldygpCiAgICAgICAgIG1fbW9k
YWxFdmVudExvb3AtPmV4aXQoKTsKIH0KIAotdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnJlc2l6ZVRv
KHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCitXS1BhZ2VSZWYgUGxhdGZvcm1XZWJW
aWV3OjpwYWdlKCkKIHsKLSAgICAvLyBJZiB3ZSBkbyBub3QgaGF2ZSBhIHBsYXRmb3JtIHdpbmRv
dyB3ZSB3aWxsIG5ldmVyIGdldCB0aGUgbmVjZXNzYXJ5Ci0gICAgLy8gcmVzaXplIGV2ZW50LCBz
byBzaW11bGF0ZSBpdCBpbiB0aGF0IGNhc2UgdG8gbWFrZSBzdXJlIHRoZSBxdWlja3ZpZXcgaXMK
LSAgICAvLyByZXNpemVkIHRvIHdoYXQgdGhlIGxheW91dCB0ZXN0IGV4cGVjdHMuCi0gICAgaWYg
KCFtX3dpbmRvdy0+aGFuZGxlKCkpIHsKLSAgICAgICAgUVJlY3QgbmV3R2VvbWV0cnkobV93aW5k
b3ctPngoKSwgbV93aW5kb3ctPnkoKSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIFFXaW5kb3dT
eXN0ZW1JbnRlcmZhY2U6OmhhbmRsZVN5bmNocm9ub3VzR2VvbWV0cnlDaGFuZ2UobV93aW5kb3cs
IG5ld0dlb21ldHJ5KTsKLSAgICB9Ci0KLSAgICBtX3dpbmRvdy0+cmVzaXplKHdpZHRoLCBoZWln
aHQpOworICAgIHJldHVybiBtX3ZpZXctPnBhZ2VSZWYoKTsKIH0KIAotV0tQYWdlUmVmIFBsYXRm
b3JtV2ViVmlldzo6cGFnZSgpCit2b2lkIFBsYXRmb3JtV2ViVmlldzo6cmVzaXplVG8odW5zaWdu
ZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKIHsKLSAgICByZXR1cm4gbV92aWV3LT5wYWdlUmVm
KCk7CisgICAgTE9HX1ZJRVdfRlVOQygpOworICAgIG1fdmlldy0+c2V0U2l6ZShRU2l6ZSh3aWR0
aCwgaGVpZ2h0KSk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3Ojpmb2N1cygpCiB7Ci0gICAg
bV92aWV3LT5zZXRGb2N1cyhRdDo6T3RoZXJGb2N1c1JlYXNvbik7CisgICAgTE9HX1ZJRVdfRlVO
QygpOworICAgIG1fdmlldy0+c2V0Rm9jdXNlZCh0cnVlKTsKKyAgICBtX3ZpZXctPnNldFZpc2li
bGUodHJ1ZSk7CisgICAgbV92aWV3LT5zZXRBY3RpdmUodHJ1ZSk7CiB9CiAKIFdLUmVjdCBQbGF0
Zm9ybVdlYlZpZXc6OndpbmRvd0ZyYW1lKCkKIHsKKyAgICBMT0dfVklFV19GVU5DKCk7CiAgICAg
UVJlY3Qgd2luZG93UmVjdCA9IG1fd2luZG93LT5nZW9tZXRyeSgpOwogICAgIFdLUmVjdCB3a0Zy
YW1lOwogICAgIHdrRnJhbWUub3JpZ2luLnggPSB3aW5kb3dSZWN0LngoKTsKQEAgLTEyMiw3ICsx
OTQsOSBAQCBXS1JlY3QgUGxhdGZvcm1XZWJWaWV3Ojp3aW5kb3dGcmFtZSgpCiAKIHZvaWQgUGxh
dGZvcm1XZWJWaWV3OjpzZXRXaW5kb3dGcmFtZShXS1JlY3Qgd2tSZWN0KQogeworICAgIExPR19W
SUVXX0ZVTkMoKTsKICAgICBtX3dpbmRvdy0+c2V0R2VvbWV0cnkod2tSZWN0Lm9yaWdpbi54LCB3
a1JlY3Qub3JpZ2luLnksIHdrUmVjdC5zaXplLndpZHRoLCB3a1JlY3Quc2l6ZS5oZWlnaHQpOwor
ICAgIHJlc2l6ZVRvKHdrUmVjdC5zaXplLndpZHRoLCB3a1JlY3Quc2l6ZS5oZWlnaHQpOwogfQog
CiBib29sIFBsYXRmb3JtV2ViVmlldzo6c2VuZEV2ZW50KFFFdmVudCogZXZlbnQpCkBAIC0xNDks
OSArMjIzLDcgQEAgdm9pZCBQbGF0Zm9ybVdlYlZpZXc6Om1ha2VXZWJWaWV3Rmlyc3RSZXNwb25k
ZXIoKQogCiBXS1JldGFpblB0cjxXS0ltYWdlUmVmPiBQbGF0Zm9ybVdlYlZpZXc6OndpbmRvd1Nu
YXBzaG90SW1hZ2UoKQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdG8gY2FwdHVyZSBwaXhl
bHMgaW4gdGhlIFVJIHByb2Nlc3MsCi0gICAgLy8gd2hpY2ggbWF5IGJlIG5lY2Vzc2FyeSB0byBj
YXB0dXJlIHRoaW5ncyBsaWtlIDNEIHRyYW5zZm9ybXMuCi0gICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIFdLSW1hZ2VDcmVhdGVGcm9tUUltYWdlKG1fd2luZG93LT5jcmVhdGVTbmFwc2hvdCgpKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL3F0L1Rlc3RJbnZvY2F0aW9uUXQuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9xdC9U
ZXN0SW52b2NhdGlvblF0LmNwcAppbmRleCAwMTYzMGQ5Li5iZGRkYjViIDEwMDY0NAotLS0gYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL3F0L1Rlc3RJbnZvY2F0aW9uUXQuY3BwCisrKyBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvcXQvVGVzdEludm9jYXRpb25RdC5jcHAKQEAgLTI1LDYgKzI1LDgg
QEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCisjaW5jbHVkZSAiUGxhdGZvcm1XZWJWaWV3Lmgi
CisjaW5jbHVkZSAiVGVzdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJUZXN0SW52b2NhdGlvbi5o
IgogCiAjaW5jbHVkZSA8UUJ1ZmZlcj4KQEAgLTY3LDcgKzY5LDE2IEBAIHZvaWQgVGVzdEludm9j
YXRpb246OmR1bXBQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVkKFdLSW1hZ2VSZWYgaW1hZ2VS
ZWYsIFdLQXJyCiAgICAgLy9GSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTY4ODcwCiAgICAgVU5VU0VEX1BBUkFNKHJlcGFpbnRSZWN0cyk7CiAKLSAgICBRSW1h
Z2UgaW1hZ2UgPSBXS0ltYWdlQ3JlYXRlUUltYWdlKGltYWdlUmVmKTsKKyAgICBQbGF0Zm9ybVdl
YlZpZXcqIHdlYlZpZXcgPSBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkubWFpbldlYlZpZXcoKTsK
KyAgICBXS1JldGFpblB0cjxXS0ltYWdlUmVmPiB3aW5kb3dTbmFwc2hvdCA9IHdlYlZpZXctPndp
bmRvd1NuYXBzaG90SW1hZ2UoKTsKKyAgICBRSW1hZ2UgaW1hZ2U7CisgICAgaWYgKHdpbmRvd1Nu
YXBzaG90KSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZHVtcGluZyBzbmFwc2hvdFxuIik7
CisgICAgICAgIGltYWdlID0gV0tJbWFnZUNyZWF0ZVFJbWFnZSh3aW5kb3dTbmFwc2hvdC5nZXQo
KSk7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgaW1hZ2UgPSBXS0ltYWdlQ3JlYXRlUUltYWdl
KGltYWdlUmVmKTsKKwogICAgIFFDcnlwdG9ncmFwaGljSGFzaCBoYXNoKFFDcnlwdG9ncmFwaGlj
SGFzaDo6TWQ1KTsKICAgICBmb3IgKHVuc2lnbmVkIHJvdyA9IDA7IHJvdyA8IGltYWdlLmhlaWdo
dCgpOyArK3JvdykKICAgICAgICAgaGFzaC5hZGREYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
Y2hhcio+KGltYWdlLmNvbnN0U2NhbkxpbmUocm93KSksIGltYWdlLmJ5dGVzUGVyTGluZSgpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151128</attachid>
            <date>2012-07-06 19:10:54 -0700</date>
            <delta_ts>2012-07-12 04:15:41 -0700</delta_ts>
            <desc>WIP patch, including supporting fixes for QRawWebView</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>22622</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9xdC9XS0ltYWdlUXQuY3Bw
IGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL3F0L1dLSW1hZ2VRdC5jcHAKaW5kZXggZDA5
NzVmNi4uYmI3Zjg5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL3F0
L1dLSW1hZ2VRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL3F0L1dLSW1h
Z2VRdC5jcHAKQEAgLTI1LDEwICsyNSwyNyBAQAogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5o
IgogI2luY2x1ZGUgIldLU2hhcmVkQVBJQ2FzdC5oIgogI2luY2x1ZGUgIldlYkltYWdlLmgiCisj
aW5jbHVkZSA8UVBhaW50ZXI+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KIAordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCiBRSW1hZ2UgV0tJbWFnZUNyZWF0ZVFJbWFnZShX
S0ltYWdlUmVmIGltYWdlUmVmKQogewogICAgIHJldHVybiB0b0ltcGwoaW1hZ2VSZWYpLT5iaXRt
YXAoKS0+Y3JlYXRlUUltYWdlKCkuY29weSgpOwogfQorCitXS0ltYWdlUmVmIFdLSW1hZ2VDcmVh
dGVGcm9tUUltYWdlKFFJbWFnZSBpbWFnZSkKK3sKKyAgICBBU1NFUlQoaW1hZ2UuYnl0ZXNQZXJM
aW5lKCkgPT0gaW1hZ2Uud2lkdGgoKSAqIDQpOworCisgICAgUmVmUHRyPFdlYkltYWdlPiB3ZWJJ
bWFnZSA9IFdlYkltYWdlOjpjcmVhdGUoaW1hZ2Uuc2l6ZSgpLCBzdGF0aWNfY2FzdDxJbWFnZU9w
dGlvbnM+KDApKTsKKyAgICBpZiAoIXdlYkltYWdlLT5iaXRtYXAoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0gd2ViSW1h
Z2UtPmJpdG1hcCgpLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKKyAgICBRUGFpbnRlciogcGFp
bnRlciA9IGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgcGFpbnRlci0+
ZHJhd0ltYWdlKFFQb2ludCgwLCAwKSwgaW1hZ2UpOworICAgIHJldHVybiB0b0FQSSh3ZWJJbWFn
ZS5yZWxlYXNlKCkubGVha1JlZigpKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9BUEkvYy9xdC9XS0ltYWdlUXQuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9x
dC9XS0ltYWdlUXQuaAppbmRleCAxZTUwNzNhLi5kMTRjMzkxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvQVBJL2MvcXQvV0tJbWFnZVF0LmgKKysrIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL0FQSS9jL3F0L1dLSW1hZ2VRdC5oCkBAIC0yNyw1ICsyNyw2IEBACiAjaW5jbHVkZSA8
V2ViS2l0Mi9XS0ltYWdlLmg+CiAKIFdLX0VYUE9SVCBRSW1hZ2UgV0tJbWFnZUNyZWF0ZVFJbWFn
ZShXS0ltYWdlUmVmIGltYWdlKTsKK1dLX0VYUE9SVCBXS0ltYWdlUmVmIFdLSW1hZ2VDcmVhdGVG
cm9tUUltYWdlKFFJbWFnZSBpbWFnZSk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9xdC9yYXcvcXJhd3dlYnZpZXdfcF9wLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Jhdy9xcmF3d2Vidmlld19wX3AuaAppbmRleCAwYTRiZjVh
Li44ZTZjNDE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Jh
dy9xcmF3d2Vidmlld19wX3AuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0
L3Jhdy9xcmF3d2Vidmlld19wX3AuaApAQCAtMTE1LDcgKzExNSw2IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgZG9uZVdpdGhUb3VjaEV2ZW50KGNvbnN0IFdlYktpdDo6TmF0aXZlV2ViVG91
Y2hFdmVudCYsIGJvb2wgd2FzRXZlbnRIYW5kbGVkKTsKICNlbmRpZgogCi0KICAgICBib29sIG1f
Zm9jdXNlZDsKICAgICBib29sIG1fdmlzaWJsZTsKICAgICBib29sIG1fYWN0aXZlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xcmF3d2Vidmlldy90
c3RfcXJhd3dlYnZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0
cy9xcmF3d2Vidmlldy90c3RfcXJhd3dlYnZpZXcuY3BwCmluZGV4IDlmNjg4ODEuLmQ4MzIzMzkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcXJhd3dl
YnZpZXcvdHN0X3FyYXd3ZWJ2aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3Rlc3RzL3FyYXd3ZWJ2aWV3L3RzdF9xcmF3d2Vidmlldy5jcHAKQEAgLTU4LDE1ICs1
OCwxNiBAQCBzdGF0aWMgV0tQYWdlR3JvdXBSZWYgd2ViUGFnZUdyb3VwKGNvbnN0IFFTdHJpbmcm
IG5hbWUpCiBjbGFzcyBXZWJWaWV3IDogcHVibGljIFFPYmplY3QsIHB1YmxpYyBRUmF3V2ViVmll
d0NsaWVudCB7CiAgICAgUV9PQkpFQ1QKIHB1YmxpYzoKLSAgICBXZWJWaWV3KGNvbnN0IFFTaXpl
JiBzaXplKQorICAgIFdlYlZpZXcoY29uc3QgUVNpemUmIHNpemUsIGJvb2wgdHJhbnNwYXJlbnQg
PSBmYWxzZSkKICAgICB7CiAgICAgICAgIFdLUGFnZUxvYWRlckNsaWVudCBsb2FkZXJDbGllbnQ7
CiAgICAgICAgIG1lbXNldCgmbG9hZGVyQ2xpZW50LCAwLCBzaXplb2YoV0tQYWdlTG9hZGVyQ2xp
ZW50KSk7CiAgICAgICAgIGxvYWRlckNsaWVudC5jbGllbnRJbmZvID0gdGhpczsKLSAgICAgICAg
bG9hZGVyQ2xpZW50LmRpZEZpbmlzaExvYWRGb3JGcmFtZSA9IFdlYlZpZXc6OmZpbmlzaExvYWRG
b3JGcmFtZTsKKyAgICAgICAgbG9hZGVyQ2xpZW50LmRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxh
eW91dEZvckZyYW1lID0gV2ViVmlldzo6ZmluaXNoRmlyc3RMYXlvdXRGb3JGcmFtZTsKIAogICAg
ICAgICBtX3dlYlZpZXcgPSBuZXcgUVJhd1dlYlZpZXcod2ViQ29udGV4dCgpLCB3ZWJQYWdlR3Jv
dXAoUVN0cmluZygpKSwgdGhpcyk7CiAgICAgICAgIFdLUGFnZVNldFBhZ2VMb2FkZXJDbGllbnQo
bV93ZWJWaWV3LT5wYWdlUmVmKCksICZsb2FkZXJDbGllbnQpOworICAgICAgICBtX3dlYlZpZXct
PnNldFRyYW5zcGFyZW50QmFja2dyb3VuZCh0cmFuc3BhcmVudCk7CiAgICAgICAgIG1fd2ViVmll
dy0+Y3JlYXRlKCk7CiAgICAgICAgIFdLUGFnZVNldFVzZUZpeGVkTGF5b3V0KG1fd2ViVmlldy0+
cGFnZVJlZigpLCB0cnVlKTsKIApAQCAtOTEsOCArOTIsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIHZpZXdOZWVkc0Rpc3BsYXkoY29uc3QgUVJlY3QmKQogICAgIHsKICAgICAgICAgbV93
ZWJWaWV3LT5wYWludChRTWF0cml4NHg0KCksIDEsIDApOwotICAgICAgICBpZiAobV9mcmFtZUxv
YWRlZCkKLSAgICAgICAgICAgIGVtaXQgbG9hZGVkKCk7CiAgICAgfQogCiAgICAgdmlydHVhbCB2
b2lkIHZpZXdSZXF1ZXN0ZWRTY3JvbGwoY29uc3QgUVBvaW50JikgeyB9CkBAIC0xMDMsNyArMTAy
LDMxIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZG9uZVdpdGhLZXlFdmVudChjb25zdCBR
S2V5RXZlbnQqLCBib29sIHdhc0hhbmRsZWQpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkb25lV2l0
aFRvdWNoRXZlbnQoY29uc3QgUVRvdWNoRXZlbnQqLCBib29sIHdhc0hhbmRsZWQpIHsgfQogCi0g
ICAgc3RhdGljIHZvaWQgZmluaXNoTG9hZEZvckZyYW1lKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1l
UmVmIGZyYW1lLCBXS1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwor
ICAgIHZpcnR1YWwgdm9pZCB2aWV3UmVuZGVyZWRGcmFtZSgpCisgICAgeworICAgIH0KKworICAg
IHZvaWQgZnJhbWVMb2FkZWQoKQorICAgIHsKKyAgICAgICAgbV9mcmFtZUxvYWRlZCA9IHRydWU7
CisgICAgICAgIFdLUGFnZUZvcmNlUmVwYWludChtX3dlYlZpZXctPnBhZ2VSZWYoKSwgdGhpcywg
ZmluaXNoRm9yY2VSZXBhaW50KTsKKyAgICB9CisKKyAgICB2b2lkIG9uUmVwYWludERvbmUoKQor
ICAgIHsKKyAgICAgICAgbV93ZWJWaWV3LT5wYWludChRTWF0cml4NHg0KCksIDEsIDApOworICAg
ICAgICBlbWl0IGxvYWRlZCgpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGZpbmlzaEZvcmNl
UmVwYWludChXS0Vycm9yUmVmLCB2b2lkKiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgc3RhdGlj
X2Nhc3Q8V2ViVmlldyo+KGNvbnRleHQpLT5vblJlcGFpbnREb25lKCk7CisgICAgfQorCisgICAg
c3RhdGljIHZvaWQgZmluaXNoRmlyc3RMYXlvdXRGb3JGcmFtZShXS1BhZ2VSZWYgcGFnZSwgV0tG
cmFtZVJlZiBmcmFtZSwgV0tUeXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2b2lkICpjbGllbnRJbmZv
KQorICAgIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8V2ViVmlldyo+KGNvbnN0X2Nhc3Q8dm9pZCo+
KGNsaWVudEluZm8pKS0+ZnJhbWVMb2FkZWQoKTsKKyAgICB9CiAKIHNpZ25hbHM6CiAgICAgdm9p
ZCBsb2FkZWQoKTsKQEAgLTExMywxMiArMTM2LDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fZnJh
bWVMb2FkZWQ7CiB9OwogCi12b2lkIFdlYlZpZXc6OmZpbmlzaExvYWRGb3JGcmFtZShXS1BhZ2VS
ZWYgcGFnZSwgV0tGcmFtZVJlZiBmcmFtZSwgV0tUeXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2b2lk
ICpjbGllbnRJbmZvKQotewotICAgIFdlYlZpZXcqIG9iaiA9IHN0YXRpY19jYXN0PFdlYlZpZXcq
Pihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7Ci0gICAgb2JqLT5tX2ZyYW1lTG9hZGVk
ID0gdHJ1ZTsKLX0KLQogc3RhdGljIGJvb2wgY29tcGFyZUltYWdlcyhjb25zdCBRSW1hZ2UmIGkx
LCBjb25zdCBRSW1hZ2UmIGkyLCBpbnQgY291bnQpCiB7CiAgICAgaWYgKGkxLnNpemUoKSAhPSBp
Mi5zaXplKCkpCkBAIC0xNjksMzcgKzE4NiwzMSBAQCB2b2lkIHRzdF9xcmF3d2Vidmlldzo6ZG9Q
YWludChjb25zdCBRU2l6ZSYgc2l6ZSkKIAogdm9pZCB0c3RfcXJhd3dlYnZpZXc6OmRvTm9CYWNr
Z3JvdW5kMShjb25zdCBRU2l6ZSYgc2l6ZSkKIHsKLSAgICBXZWJWaWV3IHZpZXcoc2l6ZSk7Ci0g
ICAgdmlldy5zZXRUcmFuc3BhcmVudEJhY2tncm91bmQodHJ1ZSk7CisgICAgV2ViVmlldyB2aWV3
KHNpemUsIHRydWUpOwogICAgIHZpZXcubG9hZChtX2Jhc2VVcmwgKyAiL3JlZHNxdWFyZS5odG1s
Iik7CiAgICAgdmlldy5sb2FkKG1fYmFzZVVybCArICIvYmx1ZXNxdWFyZS5odG1sIik7CiB9CiAK
IHZvaWQgdHN0X3FyYXd3ZWJ2aWV3Ojpkb05vQmFja2dyb3VuZDIoY29uc3QgUVNpemUmIHNpemUp
CiB7Ci0gICAgV2ViVmlldyB2aWV3MShzaXplKTsKLSAgICB2aWV3MS5zZXRUcmFuc3BhcmVudEJh
Y2tncm91bmQodHJ1ZSk7CisgICAgV2ViVmlldyB2aWV3MShzaXplLCB0cnVlKTsKICAgICB2aWV3
MS5sb2FkKG1fYmFzZVVybCArICIvcmVkc3F1YXJlLmh0bWwiKTsKIAotICAgIFdlYlZpZXcgdmll
dzIoc2l6ZSk7Ci0gICAgdmlldzIuc2V0VHJhbnNwYXJlbnRCYWNrZ3JvdW5kKHRydWUpOworICAg
IFdlYlZpZXcgdmlldzIoc2l6ZSwgdHJ1ZSk7CiAgICAgdmlldzIubG9hZChtX2Jhc2VVcmwgKyAi
L2JsdWVzcXVhcmUuaHRtbCIpOwogfQogCiB2b2lkIHRzdF9xcmF3d2Vidmlldzo6ZG9Ob0JhY2tn
cm91bmQzKGNvbnN0IFFTaXplJiBzaXplKQogewotICAgIFdlYlZpZXcgdmlldzEoc2l6ZSk7Ci0g
ICAgdmlldzEuc2V0VHJhbnNwYXJlbnRCYWNrZ3JvdW5kKGZhbHNlKTsKKyAgICBXZWJWaWV3IHZp
ZXcxKHNpemUsIGZhbHNlKTsKICAgICB2aWV3MS5sb2FkKG1fYmFzZVVybCArICIvcmVkc3F1YXJl
Lmh0bWwiKTsKIAotICAgIFdlYlZpZXcgdmlldzIoc2l6ZSk7Ci0gICAgdmlldzIuc2V0VHJhbnNw
YXJlbnRCYWNrZ3JvdW5kKHRydWUpOworICAgIFdlYlZpZXcgdmlldzIoc2l6ZSwgdHJ1ZSk7CiAg
ICAgdmlldzIubG9hZChtX2Jhc2VVcmwgKyAiL2JsdWVzcXVhcmUuaHRtbCIpOwogfQogCiB2b2lk
IHRzdF9xcmF3d2Vidmlldzo6cnVuKFBhaW50TWV0aG9kIG1ldGhvZCwgY29uc3QgUVN0cmluZyYg
ZXhwZWN0YXRpb24pCiB7Ci0KICAgICBRV2luZG93IHdpbmRvdzsKICAgICB3aW5kb3cuc2V0U3Vy
ZmFjZVR5cGUoUVN1cmZhY2U6Ok9wZW5HTFN1cmZhY2UpOwogICAgIHdpbmRvdy5zZXRHZW9tZXRy
eSgwLCAwLCAyMDAsIDIwMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaAppbmRleCBiNGU3YjdjLi5iYmVhYjFmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5
LmgKQEAgLTQ2LDggKzQ2LDE2IEBAIGNsYXNzIFdlYkxheWVyVXBkYXRlSW5mbzsKIAogY2xhc3Mg
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSB7CiBwdWJsaWM6CisgICAgdm9pZCBwdXJnZUJhY2tp
bmdTdG9yZXMoKTsKKyAgICBXZWJMYXllclRyZWVSZW5kZXJlciogbGF5ZXJUcmVlUmVuZGVyZXIo
KSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmVyLmdldCgpOyB9CiAgICAgTGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eShEcmF3aW5nQXJlYVByb3h5Kik7CisgICAgdm9pZCBzZXRDb250ZW50c1NpemUo
Y29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJik7CisgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNS
ZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBmbG9hdCBzY2FsZSwgY29uc3QgV2ViQ29yZTo6
RmxvYXRQb2ludCYgdHJhamVjdG9yeSwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgYWNjdXJh
dGVWaXNpYmxlQ29udGVudHNQb3NpdGlvbik7CisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShD
b3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVu
dERlY29kZXIqKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRvclByb3h5
TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBD
OjpBcmd1bWVudERlY29kZXIqKTsKICAgICB2aXJ0dWFsIH5MYXllclRyZWVDb29yZGluYXRvclBy
b3h5KCk7CisKK3ByaXZhdGU6CiAgICAgdm9pZCBzZXRDb21wb3NpdGluZ0xheWVyU3RhdGUoV2Vi
TGF5ZXJJRCwgY29uc3QgV2ViTGF5ZXJJbmZvJik7CiAgICAgdm9pZCBzZXRDb21wb3NpdGluZ0xh
eWVyQ2hpbGRyZW4oV2ViTGF5ZXJJRCwgY29uc3QgVmVjdG9yPFdlYkxheWVySUQ+Jik7CiAjaWYg
RU5BQkxFKENTU19GSUxURVJTKQpAQCAtNTUsMjUgKzYzLDE3IEBAIHB1YmxpYzoKICNlbmRpZgog
ICAgIHZvaWQgZGVsZXRlQ29tcG9zaXRpbmdMYXllcihXZWJMYXllcklEKTsKICAgICB2b2lkIHNl
dFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkxheWVySUQpOwotICAgIHZvaWQgZGlkUmVjZWl2ZU1l
c3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6
QXJndW1lbnREZWNvZGVyKik7CiAgICAgdm9pZCBwdXJnZUdMUmVzb3VyY2VzKCk7Ci0gICAgdm9p
ZCBzZXRDb250ZW50c1NpemUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJik7Ci0gICAgdm9pZCBz
ZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBmbG9hdCBzY2Fs
ZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgdHJhamVjdG9yeSwgY29uc3QgV2ViQ29yZTo6
RmxvYXRQb2ludCYgYWNjdXJhdGVWaXNpYmxlQ29udGVudHNQb3NpdGlvbik7CiAgICAgdm9pZCBk
aWRSZW5kZXJGcmFtZSgpOwogICAgIHZvaWQgY3JlYXRlVGlsZUZvckxheWVyKGludCBsYXllcklE
LCBpbnQgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgU3VyZmFjZVVwZGF0
ZUluZm8mKTsKICAgICB2b2lkIHVwZGF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRp
bGVJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJik7
CiAgICAgdm9pZCByZW1vdmVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQpOwog
ICAgIHZvaWQgY3JlYXRlRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCwgY29uc3QgV2Vi
S2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYpOwogICAgIHZvaWQgZGVzdHJveURpcmVjdGx5
Q29tcG9zaXRlZEltYWdlKGludDY0X3QpOwotICAgIHZvaWQgZGlkUmVjZWl2ZUxheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHlNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNz
YWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOwogICAgIHZvaWQgdXBkYXRlVmlld3Bv
cnQoKTsKICAgICB2b2lkIHJlbmRlck5leHRGcmFtZSgpOwogICAgIHZvaWQgZGlkQ2hhbmdlU2Ny
b2xsUG9zaXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvc2l0aW9uKTsKICAgICB2b2lk
IHN5bmNDYW52YXModWludDMyX3QgaWQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNhbnZhc1Np
emUsIHVpbnQzMl90IGdyYXBoaWNzU3VyZmFjZVRva2VuKTsKLSAgICB2b2lkIHB1cmdlQmFja2lu
Z1N0b3JlcygpOwotICAgIFdlYkxheWVyVHJlZVJlbmRlcmVyKiBsYXllclRyZWVSZW5kZXJlcigp
IGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXIuZ2V0KCk7IH0KLQotcHJvdGVjdGVkOgogICAgIHZv
aWQgZGlzcGF0Y2hVcGRhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOwogCiAgICAgRHJhd2lu
Z0FyZWFQcm94eSogbV9kcmF3aW5nQXJlYVByb3h5OwpAQCAtODEsNiArODEsOCBAQCBwcm90ZWN0
ZWQ6CiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCiAgICAgSGFzaE1hcDx1aW50MzJfdCwgUmVm
UHRyPFNoYXJlYWJsZVN1cmZhY2U+ID4gbV9zdXJmYWNlczsKICNlbmRpZgorCisgICAgZnJpZW5k
IGNsYXNzIFdlYkxheWVyVHJlZVJlbmRlcmVyOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL0xheWVyVHJl
ZUNvb3JkaW5hdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXll
clRyZWVDb29yZGluYXRvci9MYXllclRyZWVDb29yZGluYXRvci5jcHAKaW5kZXggZjNlODczNS4u
ZTU0MTBlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xh
eWVyVHJlZUNvb3JkaW5hdG9yL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVl
Q29vcmRpbmF0b3IuY3BwCkBAIC03MSw2ICs3MSw3IEBAIExheWVyVHJlZUNvb3JkaW5hdG9yOjpM
YXllclRyZWVDb29yZGluYXRvcihXZWJQYWdlKiB3ZWJQYWdlKQogICAgICwgbV9pc1ZhbGlkKHRy
dWUpCiAgICAgLCBtX3dhaXRpbmdGb3JVSVByb2Nlc3ModHJ1ZSkKICAgICAsIG1faXNTdXNwZW5k
ZWQoZmFsc2UpCisgICAgLCBtX2luRmx1c2hNb2RlKGZhbHNlKQogICAgICwgbV9jb250ZW50c1Nj
YWxlKDEpCiAgICAgLCBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZSh0cnVlKQogICAg
ICwgbV9zaG91bGRTeW5jRnJhbWUoZmFsc2UpCkBAIC0xNzQsNyArMTc1LDggQEAgdm9pZCBMYXll
clRyZWVDb29yZGluYXRvcjo6c2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIHMKIAogdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6Zm9yY2VSZXBhaW50
KCkKIHsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKKyAgICBwZXJmb3JtU2NoZWR1bGVkTGF5
ZXJGbHVzaChGb3JjZUZsdXNoKTsKKyAgICBtX2xheWVyRmx1c2hUaW1lci5zdG9wKCk7CiB9CiAK
IHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYgbmV3U2l6ZSkKQEAgLTMzNCw5ICszMzYsOSBAQCB2b2lkIExheWVyVHJlZUNvb3Jk
aW5hdG9yOjpzeW5jRml4ZWRMYXllcnMoKQogICAgICAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3Bv
cnRGb3JMYXllcihyb290UmVuZGVyTGF5ZXItPmZpcnN0Q2hpbGQoKSk7CiB9CiAKLXZvaWQgTGF5
ZXJUcmVlQ29vcmRpbmF0b3I6OnBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCkKK3ZvaWQgTGF5
ZXJUcmVlQ29vcmRpbmF0b3I6OnBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKEZvcmNlTW9kZSBm
b3JjZSkKIHsKLSAgICBpZiAobV9pc1N1c3BlbmRlZCB8fCBtX3dhaXRpbmdGb3JVSVByb2Nlc3Mp
CisgICAgaWYgKGZvcmNlID09IERvbnRGb3JjZUZsdXNoICYmIChtX2lzU3VzcGVuZGVkIHx8IG1f
d2FpdGluZ0ZvclVJUHJvY2VzcykpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fd2ViUGFnZS0+
bGF5b3V0SWZOZWVkZWQoKTsKQEAgLTM0Niw3ICszNDgsOCBAQCB2b2lkIExheWVyVHJlZUNvb3Jk
aW5hdG9yOjpwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpCiAKICAgICBtX3Nob3VsZFN5bmNG
cmFtZSA9IGZhbHNlOwogICAgIGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpOwotICAgIGlmICgh
bV9zaG91bGRTeW5jRnJhbWUpCisKKyAgICBpZiAoIW1fc2hvdWxkU3luY0ZyYW1lICYmIGZvcmNl
ID09IERvbnRGb3JjZUZsdXNoKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9zaG91bGRT
eW5jUm9vdExheWVyKSB7CkBAIC0zNjUsNiArMzY4LDcgQEAgdm9pZCBMYXllclRyZWVDb29yZGlu
YXRvcjo6cGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKQogICAgIG1fbm90aWZ5QWZ0ZXJTY2hl
ZHVsZWRMYXllckZsdXNoID0gZmFsc2U7CiB9CiAKKwogdm9pZCBMYXllclRyZWVDb29yZGluYXRv
cjo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQoVGltZXI8TGF5ZXJUcmVlQ29vcmRpbmF0b3I+KikKIHsK
ICAgICBwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL0xheWVyVHJlZUNv
b3JkaW5hdG9yLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVl
Q29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaAppbmRleCBiYzQ0OWY0Li45MmM5NjA4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVl
Q29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0
b3IuaApAQCAtMTAzLDcgKzEwMyw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkZXN0cm95UGFnZU92
ZXJsYXlMYXllcigpOwogICAgIGJvb2wgZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7CiAgICAg
dm9pZCBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOwotICAgIHZvaWQgcGVyZm9ybVNjaGVkdWxl
ZExheWVyRmx1c2goKTsKKyAgICBlbnVtIEZvcmNlTW9kZSB7IERvbnRGb3JjZUZsdXNoLCBGb3Jj
ZUZsdXNoIH07CisgICAgdm9pZCBwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaChGb3JjZU1vZGUg
PSBEb250Rm9yY2VGbHVzaCk7CiAgICAgdm9pZCBzZW5kTGF5ZXJzVG9VSSgpOwogCiAgICAgT3du
UHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOwpAQCAtMTIzLDYgKzEyNCw3
IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1fd2FpdGluZ0ZvclVJUHJvY2VzczsKICAgICBib29s
IG1faXNTdXNwZW5kZWQ7CisgICAgYm9vbCBtX2luRmx1c2hNb2RlOwogICAgIFdlYkNvcmU6Oklu
dFJlY3QgbV92aXNpYmxlQ29udGVudHNSZWN0OwogICAgIGZsb2F0IG1fY29udGVudHNTY2FsZTsK
ICAgICBib29sIG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvTWluaUJyb3dzZXIvcXQvcmF3L1ZpZXcuaCBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L3Jh
dy9WaWV3LmgKaW5kZXggNmRlN2EyNS4uZTUzMjIzZiAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJy
b3dzZXIvcXQvcmF3L1ZpZXcuaAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9yYXcvVmlldy5o
CkBAIC0zMSw3ICszMSw3IEBAIHB1YmxpYzoKICAgICBWaWV3KGNvbnN0IFFTdHJpbmcmIHVybCk7
CiAgICAgflZpZXcoKTsKIAotcHVibGljOiAvLyBXS1ZpZXdDbGllbnQKK3B1YmxpYzogLy8gUVJh
d1dlYlZpZXdDbGllbnQKICAgICB2aXJ0dWFsIHZvaWQgdmlld05lZWRzRGlzcGxheShjb25zdCBR
UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCB2aWV3UmVxdWVzdGVkU2Nyb2xsKGNvbnN0IFFQb2lu
dCYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCB2aWV3UHJvY2Vzc0NyYXNoZWQoKSB7IH0KZGlmZiAt
LWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmggYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oCmluZGV4IDBlOGM2YjUuLjJiNjlkNzQg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgKKysr
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcuaApAQCAtMjksMTAgKzI5
LDEyIEBACiAjaW5jbHVkZSA8V2ViS2l0Mi9XS1JldGFpblB0ci5oPgogCiAjaWYgZGVmaW5lZChC
VUlMRElOR19RVF9fKQotY2xhc3MgUVF1aWNrV2ViVmlldzsKLXR5cGVkZWYgUVF1aWNrV2ViVmll
dyogUGxhdGZvcm1XS1ZpZXc7Ci1jbGFzcyBRUXVpY2tWaWV3OwotdHlwZWRlZiBRUXVpY2tWaWV3
KiBQbGF0Zm9ybVdpbmRvdzsKK2NsYXNzIFFSYXdXZWJWaWV3OwordHlwZWRlZiBRUmF3V2ViVmll
dyogUGxhdGZvcm1XS1ZpZXc7CituYW1lc3BhY2UgV1RSIHsKK2NsYXNzIFF0VmlldzsKK30KK3R5
cGVkZWYgV1RSOjpRdFZpZXcqIFBsYXRmb3JtV2luZG93OwogY2xhc3MgUUV2ZW50TG9vcDsKICNl
bGlmIGRlZmluZWQoX19BUFBMRV9fKSAmJiBfX0FQUExFX18KICNpZiBfX09CSkNfXwpkaWZmIC0t
Z2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UYXJnZXQucHJpIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9UYXJnZXQucHJpCmluZGV4IGIzYjVjMmMuLjFiN2E3ZjkgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvVGFyZ2V0LnByaQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL1RhcmdldC5wcmkKQEAgLTI3LDYgKzI3LDkgQEAgREVTVERJUiA9ICQke1JPT1RfQlVJTERf
RElSfS9iaW4KIAogUVQgPSBjb3JlIGd1aSB3aWRnZXRzIG5ldHdvcmsgdGVzdGxpYiBxdWljayBx
dWljay1wcml2YXRlIHdlYmtpdAogCitJTkNMVURFUEFUSCArPSBcCisgICAgJCR7Uk9PVF9XRUJL
SVRfRElSfS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3JhdworCiBXRUJLSVQgKz0g
d3RmIGphdmFzY3JpcHRjb3JlIHdlYmtpdDIKIAogREVGSU5FUyArPSBVU0VfU1lTVEVNX01BTExP
Qz0xCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNw
cCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCmluZGV4IGQ1YzBh
ZjYuLjliYmRjMWQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9j
YXRpb24uY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3Bw
CkBAIC0yNjMsNyArMjYzLDcgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZU1lc3Nh
Z2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUKICAgICAgICAgZnB1
dHMoIiNFT0ZcbiIsIHN0ZG91dCk7CiAgICAgICAgIGZmbHVzaChzdGRvdXQpOwogICAgICAgICBm
Zmx1c2goc3RkZXJyKTsKLSAgICAgICAgCisKICAgICAgICAgbV9nb3RGaW5hbE1lc3NhZ2UgPSB0
cnVlOwogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkubm90aWZ5RG9uZSgpOwogICAg
ICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL3F0L1BsYXRm
b3JtV2ViVmlld1F0LmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvcXQvUGxhdGZvcm1XZWJW
aWV3UXQuY3BwCmluZGV4IDAyMTFkZjUuLmRkZTFhYWUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvcXQvUGxhdGZvcm1XZWJWaWV3UXQuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvcXQvUGxhdGZvcm1XZWJWaWV3UXQuY3BwCkBAIC0zMSw3MiArMzEsMTUzIEBACiAj
aW5jbHVkZSAicXF1aWNrd2Vidmlld19wLmgiCiAKICNpbmNsdWRlIDxRQ29yZUFwcGxpY2F0aW9u
PgorI2luY2x1ZGUgPFFHdWlBcHBsaWNhdGlvbj4KICNpbmNsdWRlIDxRRXZlbnRMb29wPgotI2lu
Y2x1ZGUgPFFRbWxQcm9wZXJ0eT4KLSNpbmNsdWRlIDxRdFF1aWNrL1FRdWlja1ZpZXc+CisjaW5j
bHVkZSA8UU1hdHJpeDR4ND4KKyNpbmNsdWRlIDxRT3BlbkdMQ29udGV4dD4KKyNpbmNsdWRlIDxR
VGltZXI+CisjaW5jbHVkZSA8UVdpbmRvdz4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLSW1hZ2VRdC5o
PgorI2luY2x1ZGUgPHFyYXd3ZWJ2aWV3X3AuaD4KICNpbmNsdWRlIDxxd2luZG93c3lzdGVtaW50
ZXJmYWNlX3FwYS5oPgogCisjZGVmaW5lIFdSSVRFX1NOQVBTSE9UIDEKKworI2lmIFdSSVRFX1NO
QVBTSE9UCisjaW5jbHVkZSA8UUltYWdlV3JpdGVyPgorI2luY2x1ZGUgPFFGaWxlPgorI2VuZGlm
CisKIG5hbWVzcGFjZSBXVFIgewogCi1jbGFzcyBXcmFwcGVyV2luZG93IDogcHVibGljIFFRdWlj
a1ZpZXcgeworY2xhc3MgUXRWaWV3IDogcHVibGljIFFXaW5kb3csIHByaXZhdGUgUVJhd1dlYlZp
ZXdDbGllbnQgewogICAgIFFfT0JKRUNUCiBwdWJsaWM6Ci0gICAgV3JhcHBlcldpbmRvdyhRUXVp
Y2tXZWJWaWV3KiB2aWV3KQotICAgICAgICA6IFFRdWlja1ZpZXcoUVVybCgiZGF0YTp0ZXh0L3Bs
YWluLGltcG9ydCBRdFF1aWNrIDIuMFxuSXRlbSB7IG9iamVjdE5hbWU6ICdyb290JyB9IikpCi0g
ICAgICAgICwgbV92aWV3KHZpZXcpCi0gICAgewotICAgICAgICBjb25uZWN0KHRoaXMsIFNJR05B
TChzdGF0dXNDaGFuZ2VkKFFRdWlja1ZpZXc6OlN0YXR1cykpLCBTTE9UKGhhbmRsZVN0YXR1c0No
YW5nZWQoUVF1aWNrVmlldzo6U3RhdHVzKSkpOwotICAgIH0KKyAgICBRdFZpZXcoV0tDb250ZXh0
UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZik7CisgICAgflF0Vmll
dygpOwogCi1wcml2YXRlIHNsb3RzOgotICAgIHZvaWQgaGFuZGxlU3RhdHVzQ2hhbmdlZChRUXVp
Y2tWaWV3OjpTdGF0dXMgc3RhdHVzKQotICAgIHsKLSAgICAgICAgaWYgKHN0YXR1cyAhPSBRUXVp
Y2tWaWV3OjpSZWFkeSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBRSW1hZ2UgY3JlYXRlU25h
cHNob3QoKTsKIAotICAgICAgICBzZXRHZW9tZXRyeSgwLCAwLCA4MDAsIDYwMCk7CisgICAgUVJh
d1dlYlZpZXcqIHZpZXcoKSBjb25zdCB7IHJldHVybiBtX3ZpZXc7IH0KIAotICAgICAgICBzZXRS
ZXNpemVNb2RlKFFRdWlja1ZpZXc6OlNpemVSb290T2JqZWN0VG9WaWV3KTsKLSAgICAgICAgbV92
aWV3LT5zZXRQYXJlbnRJdGVtKHJvb3RPYmplY3QoKSk7Ci0gICAgICAgIFFRbWxQcm9wZXJ0eTo6
d3JpdGUobV92aWV3LCAiYW5jaG9ycy5maWxsIiwgcVZhcmlhbnRGcm9tVmFsdWUocm9vdE9iamVj
dCgpKSk7CisgICAgLy8gUVJhd1dlYlZpZXdDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgdmlld05l
ZWRzRGlzcGxheShjb25zdCBRUmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCB2aWV3UmVxdWVzdGVk
Q3Vyc29yT3ZlcnJpZGUoY29uc3QgUUN1cnNvciYpOworICAgIHZpcnR1YWwgdm9pZCB2aWV3UmVx
dWVzdGVkU2Nyb2xsKGNvbnN0IFFQb2ludCYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCB2aWV3UHJv
Y2Vzc0NyYXNoZWQoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdmlld1Byb2Nlc3NSZWxhdW5jaGVk
KCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHZpZXdDb250ZW50U2l6ZUNoYW5nZWQoY29uc3QgUVNp
emUmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZG9uZVdpdGhLZXlFdmVudChjb25zdCBRS2V5RXZl
bnQqLCBib29sKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZG9uZVdpdGhUb3VjaEV2ZW50KGNvbnN0
IFFUb3VjaEV2ZW50KiwgYm9vbCkgeyB9CiAKLSAgICAgICAgUVdpbmRvd1N5c3RlbUludGVyZmFj
ZTo6aGFuZGxlV2luZG93QWN0aXZhdGVkKHRoaXMpOwotICAgICAgICBtX3ZpZXctPnBhZ2UoKS0+
c2V0Rm9jdXModHJ1ZSk7CisgICAgdm9pZCBvbkZvcmNlUmVwYWludERvbmUoKTsKKyAgICBzdGF0
aWMgdm9pZCBmb3JjZVJlcGFpbnREb25lQ2FsbGJhY2soV0tFcnJvclJlZiwgdm9pZCogY29udGV4
dCkKKyAgICB7CisgICAgICAgIHN0YXRpY19jYXN0PFF0Vmlldyo+KGNvbnRleHQpLT5vbkZvcmNl
UmVwYWludERvbmUoKTsKICAgICB9CiAKK3NpZ25hbHM6CisgICAgdm9pZCBkaWRQYWludCgpOwog
cHJpdmF0ZToKLSAgICBRUXVpY2tXZWJWaWV3KiBtX3ZpZXc7CisgICAgUVJhd1dlYlZpZXcqIG1f
dmlldzsKKyAgICBRT3BlbkdMQ29udGV4dCogbV9nbENvbnRleHQ7CisgICAgYm9vbCBtX2lzV2Fp
dGluZ0ZvclNuYXBzaG90OwogfTsKIAotUGxhdGZvcm1XZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXco
V0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZikKLSAg
ICA6IG1fdmlldyhuZXcgUVF1aWNrV2ViVmlldyhjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYpKQot
ICAgICwgbV93aW5kb3cobmV3IFdyYXBwZXJXaW5kb3cobV92aWV3KSkKLSAgICAsIG1fd2luZG93
SXNLZXkodHJ1ZSkKLSAgICAsIG1fbW9kYWxFdmVudExvb3AoMCkKK1F0Vmlldzo6UXRWaWV3KFdL
Q29udGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXApCisgICAgOiBtX2lz
V2FpdGluZ0ZvclNuYXBzaG90KGZhbHNlKQogewotICAgIFFRdWlja1dlYlZpZXdFeHBlcmltZW50
YWwgZXhwZXJpbWVudGFsKG1fdmlldyk7Ci0gICAgZXhwZXJpbWVudGFsLnNldFJlbmRlclRvT2Zm
c2NyZWVuQnVmZmVyKHRydWUpOwotICAgIG1fdmlldy0+c2V0QWxsb3dBbnlIVFRQU0NlcnRpZmlj
YXRlRm9yTG9jYWxIb3N0KHRydWUpOworICAgIGNvbnN0IFFTaXplIGluaXRpYWxTaXplKDgwMCwg
NjAwKTsKKworICAgIHNldFN1cmZhY2VUeXBlKE9wZW5HTFN1cmZhY2UpOworICAgIHNldEdlb21l
dHJ5KDAsIDAsIGluaXRpYWxTaXplLndpZHRoKCksIGluaXRpYWxTaXplLmhlaWdodCgpKTsKKyAg
ICBzZXRXaW5kb3dGbGFncyhRdDo6V2luZG93IHwgUXQ6OldpbmRvd1RpdGxlSGludCk7CisgICAg
Y3JlYXRlKCk7CisKKyAgICBtX2dsQ29udGV4dCA9IG5ldyBRT3BlbkdMQ29udGV4dCgpOworICAg
IG1fZ2xDb250ZXh0LT5jcmVhdGUoKTsKKyAgICBtX2dsQ29udGV4dC0+bWFrZUN1cnJlbnQodGhp
cyk7CisgICAgZ2xWaWV3cG9ydCgwLCAwLCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgp
KTsKKyAgICBnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CisgICAgZ2xDbGVhcihHTF9DT0xPUl9C
VUZGRVJfQklUKTsKKworICAgIG1fdmlldyA9IG5ldyBRUmF3V2ViVmlldyhjb250ZXh0LCBwYWdl
R3JvdXAsIHRoaXMpOworICAgIG1fdmlldy0+c2V0U2l6ZShpbml0aWFsU2l6ZSk7CisgICAgbV92
aWV3LT5jcmVhdGUoKTsKIH0KIAotUGxhdGZvcm1XZWJWaWV3Ojp+UGxhdGZvcm1XZWJWaWV3KCkK
K1F0Vmlldzo6flF0VmlldygpCiB7Ci0gICAgZGVsZXRlIG1fd2luZG93OwotICAgIGlmIChtX21v
ZGFsRXZlbnRMb29wKQotICAgICAgICBtX21vZGFsRXZlbnRMb29wLT5leGl0KCk7CisgICAgZGVs
ZXRlIG1fdmlldzsKKyAgICBkZWxldGUgbV9nbENvbnRleHQ7CiB9CiAKLXZvaWQgUGxhdGZvcm1X
ZWJWaWV3OjpyZXNpemVUbyh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQorUUltYWdl
IFF0Vmlldzo6Y3JlYXRlU25hcHNob3QoKQogewotICAgIC8vIElmIHdlIGRvIG5vdCBoYXZlIGEg
cGxhdGZvcm0gd2luZG93IHdlIHdpbGwgbmV2ZXIgZ2V0IHRoZSBuZWNlc3NhcnkKLSAgICAvLyBy
ZXNpemUgZXZlbnQsIHNvIHNpbXVsYXRlIGl0IGluIHRoYXQgY2FzZSB0byBtYWtlIHN1cmUgdGhl
IHF1aWNrdmlldyBpcwotICAgIC8vIHJlc2l6ZWQgdG8gd2hhdCB0aGUgbGF5b3V0IHRlc3QgZXhw
ZWN0cy4KLSAgICBpZiAoIW1fd2luZG93LT5oYW5kbGUoKSkgewotICAgICAgICBRUmVjdCBuZXdH
ZW9tZXRyeShtX3dpbmRvdy0+eCgpLCBtX3dpbmRvdy0+eSgpLCB3aWR0aCwgaGVpZ2h0KTsKLSAg
ICAgICAgUVdpbmRvd1N5c3RlbUludGVyZmFjZTo6aGFuZGxlU3luY2hyb25vdXNHZW9tZXRyeUNo
YW5nZShtX3dpbmRvdywgbmV3R2VvbWV0cnkpOworICAgIG1faXNXYWl0aW5nRm9yU25hcHNob3Qg
PSB0cnVlOworICAgIFdLUGFnZUZvcmNlUmVwYWludChtX3ZpZXctPnBhZ2VSZWYoKSwgdGhpcywg
Zm9yY2VSZXBhaW50RG9uZUNhbGxiYWNrKTsKKworICAgIFFFdmVudExvb3AgbG9vcDsKKyAgICBR
VGltZXIgd2F0Y2hEb2dUaW1lcjsKKyAgICBRT2JqZWN0Ojpjb25uZWN0KHRoaXMsIFNJR05BTChk
aWRQYWludCgpKSwgJmxvb3AsIFNMT1QocXVpdCgpKSk7CisgICAgUU9iamVjdDo6Y29ubmVjdCgm
d2F0Y2hEb2dUaW1lciwgU0lHTkFMKHRpbWVvdXQoKSksICZsb29wLCBTTE9UKHF1aXQoKSkpOwor
ICAgIHdhdGNoRG9nVGltZXIuc2luZ2xlU2hvdCgyMDAwLCAmbG9vcCwgU0xPVChxdWl0KCkpKTsK
KyAgICBsb29wLmV4ZWMoKTsKKworICAgIGlmIChtX2lzV2FpdGluZ0ZvclNuYXBzaG90KSB7Cisg
ICAgICAgIG1faXNXYWl0aW5nRm9yU25hcHNob3QgPSBmYWxzZTsKKyAgICAgICAgZnByaW50Zihz
dGRlcnIsICJkaWQgbm90IHBhaW50XG4iKTsKKyAgICAgICAgcmV0dXJuIFFJbWFnZSgpOwogICAg
IH0KIAotICAgIG1fd2luZG93LT5yZXNpemUod2lkdGgsIGhlaWdodCk7CisgICAgUV9BU1NFUlQo
UU9wZW5HTENvbnRleHQ6OmN1cnJlbnRDb250ZXh0KCkgPT0gbV9nbENvbnRleHQpOworICAgIFFJ
bWFnZSBpbWFnZShzaXplKCksIFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkKTsK
KyAgICBnbFJlYWRQaXhlbHMoMCwgMCwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSwg
R0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgaW1hZ2UuYml0cygpKTsKKworICAgIC8vIEZJWE1F
OiBzaG91bGQgdXNlIGEgdHJhbnNmb3JtYXRpb24gbWF0cml4IGZvdCB0aGlzLgorICAgIFFJbWFn
ZSBtaXJyb3JlZEltYWdlID0gaW1hZ2UubWlycm9yZWQoKS5yZ2JTd2FwcGVkKCk7CisKKyNpZiBX
UklURV9TTkFQU0hPVAorICAgIHN0YXRpYyBpbnQgYyA9IDA7CisgICAgbWlycm9yZWRJbWFnZS5z
YXZlKFFTdHJpbmc6OmZyb21VdGY4KCIlMS5wbmciKS5hcmcoYysrKSk7CisjZW5kaWYKKworICAg
IHJldHVybiBtaXJyb3JlZEltYWdlOworfQorCit2b2lkIFF0Vmlldzo6dmlld05lZWRzRGlzcGxh
eShjb25zdCBRUmVjdCYpCit7CisgICAgbV9nbENvbnRleHQtPm1ha2VDdXJyZW50KHRoaXMpOwor
ICAgIG1fdmlldy0+cGFpbnQoUU1hdHJpeDR4NCgpLCAxLCAwKTsKK30KKwordm9pZCBRdFZpZXc6
Om9uRm9yY2VSZXBhaW50RG9uZSgpCit7CisgICAgbV9pc1dhaXRpbmdGb3JTbmFwc2hvdCA9IGZh
bHNlOworICAgIG1fZ2xDb250ZXh0LT5tYWtlQ3VycmVudCh0aGlzKTsKKyAgICBtX3ZpZXctPnBh
aW50KFFNYXRyaXg0eDQoKSwgMSwgMCk7CisgICAgZW1pdCBkaWRQYWludCgpOworfQorCit2b2lk
IFF0Vmlldzo6dmlld1JlcXVlc3RlZEN1cnNvck92ZXJyaWRlKGNvbnN0IFFDdXJzb3ImIGN1cnNv
cikKK3sKKyAgICBRR3VpQXBwbGljYXRpb246OnNldE92ZXJyaWRlQ3Vyc29yKGN1cnNvcik7Cit9
CisKK1BsYXRmb3JtV2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KFdLQ29udGV4dFJlZiBjb250ZXh0
LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXApCisgICAgOiBtX21vZGFsRXZlbnRMb29wKDApCit7
CisgICAgbV93aW5kb3cgPSBuZXcgUXRWaWV3KGNvbnRleHQsIHBhZ2VHcm91cCk7CisgICAgbV92
aWV3ID0gbV93aW5kb3ctPnZpZXcoKTsKKworICAgIGZvY3VzKCk7Cit9CisKK1BsYXRmb3JtV2Vi
Vmlldzo6flBsYXRmb3JtV2ViVmlldygpCit7CisgICAgZGVsZXRlIG1fd2luZG93OworICAgIGlm
IChtX21vZGFsRXZlbnRMb29wKQorICAgICAgICBtX21vZGFsRXZlbnRMb29wLT5leGl0KCk7CiB9
CiAKIFdLUGFnZVJlZiBQbGF0Zm9ybVdlYlZpZXc6OnBhZ2UoKQpAQCAtMTA0LDkgKzE4NSwxNiBA
QCBXS1BhZ2VSZWYgUGxhdGZvcm1XZWJWaWV3OjpwYWdlKCkKICAgICByZXR1cm4gbV92aWV3LT5w
YWdlUmVmKCk7CiB9CiAKK3ZvaWQgUGxhdGZvcm1XZWJWaWV3OjpyZXNpemVUbyh1bnNpZ25lZCB3
aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQoreworICAgIG1fdmlldy0+c2V0U2l6ZShRU2l6ZSh3aWR0
aCwgaGVpZ2h0KSk7Cit9CisKIHZvaWQgUGxhdGZvcm1XZWJWaWV3Ojpmb2N1cygpCiB7Ci0gICAg
bV92aWV3LT5zZXRGb2N1cyhRdDo6T3RoZXJGb2N1c1JlYXNvbik7CisgICAgbV92aWV3LT5zZXRG
b2N1c2VkKHRydWUpOworICAgIG1fdmlldy0+c2V0VmlzaWJsZSh0cnVlKTsKKyAgICBtX3ZpZXct
PnNldEFjdGl2ZSh0cnVlKTsKIH0KIAogV0tSZWN0IFBsYXRmb3JtV2ViVmlldzo6d2luZG93RnJh
bWUoKQpAQCAtMTIzLDYgKzIxMSw3IEBAIFdLUmVjdCBQbGF0Zm9ybVdlYlZpZXc6OndpbmRvd0Zy
YW1lKCkKIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjpzZXRXaW5kb3dGcmFtZShXS1JlY3Qgd2tSZWN0
KQogewogICAgIG1fd2luZG93LT5zZXRHZW9tZXRyeSh3a1JlY3Qub3JpZ2luLngsIHdrUmVjdC5v
cmlnaW4ueSwgd2tSZWN0LnNpemUud2lkdGgsIHdrUmVjdC5zaXplLmhlaWdodCk7CisgICAgcmVz
aXplVG8od2tSZWN0LnNpemUud2lkdGgsIHdrUmVjdC5zaXplLmhlaWdodCk7CiB9CiAKIGJvb2wg
UGxhdGZvcm1XZWJWaWV3OjpzZW5kRXZlbnQoUUV2ZW50KiBldmVudCkKQEAgLTE0OSw5ICsyMzgs
NyBAQCB2b2lkIFBsYXRmb3JtV2ViVmlldzo6bWFrZVdlYlZpZXdGaXJzdFJlc3BvbmRlcigpCiAK
IFdLUmV0YWluUHRyPFdLSW1hZ2VSZWY+IFBsYXRmb3JtV2ViVmlldzo6d2luZG93U25hcHNob3RJ
bWFnZSgpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudCB0byBjYXB0dXJlIHBpeGVscyBpbiB0
aGUgVUkgcHJvY2VzcywKLSAgICAvLyB3aGljaCBtYXkgYmUgbmVjZXNzYXJ5IHRvIGNhcHR1cmUg
dGhpbmdzIGxpa2UgM0QgdHJhbnNmb3Jtcy4KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gV0tJ
bWFnZUNyZWF0ZUZyb21RSW1hZ2UobV93aW5kb3ctPmNyZWF0ZVNuYXBzaG90KCkpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvcXQv
VGVzdEludm9jYXRpb25RdC5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL3F0L1Rlc3RJbnZv
Y2F0aW9uUXQuY3BwCmluZGV4IDAxNjMwZDkuLjQyNWFiMTYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvcXQvVGVzdEludm9jYXRpb25RdC5jcHAKKysrIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9xdC9UZXN0SW52b2NhdGlvblF0LmNwcApAQCAtMjUsNiArMjUsOCBAQAogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAKKyNpbmNsdWRlICJQbGF0Zm9ybVdlYlZpZXcuaCIKKyNpbmNs
dWRlICJUZXN0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlRlc3RJbnZvY2F0aW9uLmgiCiAKICNp
bmNsdWRlIDxRQnVmZmVyPgpAQCAtNjcsNyArNjksMTQgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6
ZHVtcFBpeGVsc0FuZENvbXBhcmVXaXRoRXhwZWN0ZWQoV0tJbWFnZVJlZiBpbWFnZVJlZiwgV0tB
cnIKICAgICAvL0ZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Njg4NzAKICAgICBVTlVTRURfUEFSQU0ocmVwYWludFJlY3RzKTsKIAotICAgIFFJbWFnZSBpbWFn
ZSA9IFdLSW1hZ2VDcmVhdGVRSW1hZ2UoaW1hZ2VSZWYpOworICAgIFBsYXRmb3JtV2ViVmlldyog
d2ViVmlldyA9IFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5tYWluV2ViVmlldygpOworICAgIFdL
UmV0YWluUHRyPFdLSW1hZ2VSZWY+IHdpbmRvd1NuYXBzaG90ID0gd2ViVmlldy0+d2luZG93U25h
cHNob3RJbWFnZSgpOworICAgIFFJbWFnZSBpbWFnZTsKKyAgICBpZiAod2luZG93U25hcHNob3Qp
CisgICAgICAgIGltYWdlID0gV0tJbWFnZUNyZWF0ZVFJbWFnZSh3aW5kb3dTbmFwc2hvdC5nZXQo
KSk7CisgICAgZWxzZQorICAgICAgICBpbWFnZSA9IFdLSW1hZ2VDcmVhdGVRSW1hZ2UoaW1hZ2VS
ZWYpOworCiAgICAgUUNyeXB0b2dyYXBoaWNIYXNoIGhhc2goUUNyeXB0b2dyYXBoaWNIYXNoOjpN
ZDUpOwogICAgIGZvciAodW5zaWduZWQgcm93ID0gMDsgcm93IDwgaW1hZ2UuaGVpZ2h0KCk7ICsr
cm93KQogICAgICAgICBoYXNoLmFkZERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4o
aW1hZ2UuY29uc3RTY2FuTGluZShyb3cpKSwgaW1hZ2UuYnl0ZXNQZXJMaW5lKCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151905</attachid>
            <date>2012-07-12 04:15:49 -0700</date>
            <delta_ts>2012-07-27 05:42:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90394-20120712131535.patch</filename>
            <type>text/plain</type>
            <size>15101</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNDIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZTI2OGYxYmZkMjc2ODFl
MDFkNTY2OWJhN2ZjYTE5YzI1NDU3ZjRkOS4uZDU2M2U3MjkzYjUyN2Y5NmQ2ZTFlMDBlZTU5YTFi
NGUwNjY2YTlhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDEyLTA3LTEyICBCYWxh
enMgS2VsZW1lbiAgPGtiYWxhenNAd2Via2l0Lm9yZz4KKworICAgICAgICBbUXRdIEVuYWJsZSBH
TC1iYXNlZCBwaXhlbCB0ZXN0cyBpbiBXVFIgdXNpbmcgUVJhd1dlYlZpZXcKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwMzk0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgUXQgQVBJIHRvIGNyZWF0
ZSBhIFdLSW1hZ2VSZWYgZnJvbSBhIFFJbWFnZQorICAgICAgICBzbyB3ZSBjYW4gcGFzcyB0aGUg
c25hcHNob3QgaW4gV1RSIGluIGEgcGxhdGZvcm0KKyAgICAgICAgaW5kZXBlbmRlbnQgd2F5Lgor
CisgICAgICAgICogU2hhcmVkL0FQSS9jL3F0L1dLSW1hZ2VRdC5jcHA6CisgICAgICAgIChXS0lt
YWdlQ3JlYXRlRnJvbVFJbWFnZSk6CisgICAgICAgICogU2hhcmVkL0FQSS9jL3F0L1dLSW1hZ2VR
dC5oOgorCiAyMDEyLTA3LTExICBDaHJpc3RvcGhlIER1bWV6ICA8Y2hyaXN0b3BoZS5kdW1lekBp
bnRlbC5jb20+CiAKICAgICAgICAgW1dLMl1bRUZMXSBFd2tfVmlldyBzaG91bGQgcHJvdmlkZSBt
b3JlIHJlc291cmNlIGxvYWRpbmcgbm90aWZpY2F0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL0FQSS9jL3F0L1dLSW1hZ2VRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvQVBJL2MvcXQvV0tJbWFnZVF0LmNwcAppbmRleCBkMDk3NWY2NTMwZTA3YTE1NDgwY2VlYWM3
MGUwMGM0YjU3MDNlOGEzLi4xM2RlZDVhOTkwMjUyYWM2MDk0OWI2MGE5MGUyOTM0ODQ3YjlhOWEx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvcXQvV0tJbWFnZVF0LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvcXQvV0tJbWFnZVF0LmNwcApAQCAt
MjUsMTAgKzI1LDI3IEBACiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAjaW5jbHVkZSAi
V0tTaGFyZWRBUElDYXN0LmgiCiAjaW5jbHVkZSAiV2ViSW1hZ2UuaCIKKyNpbmNsdWRlIDxRUGFp
bnRlcj4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvSW50U2l6ZS5oPgogCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVz
cGFjZSBXZWJLaXQ7CiAKIFFJbWFnZSBXS0ltYWdlQ3JlYXRlUUltYWdlKFdLSW1hZ2VSZWYgaW1h
Z2VSZWYpCiB7CiAgICAgcmV0dXJuIHRvSW1wbChpbWFnZVJlZiktPmJpdG1hcCgpLT5jcmVhdGVR
SW1hZ2UoKS5jb3B5KCk7CiB9CisKK1dLSW1hZ2VSZWYgV0tJbWFnZUNyZWF0ZUZyb21RSW1hZ2Uo
UUltYWdlIGltYWdlKQoreworICAgIEFTU0VSVChpbWFnZS5ieXRlc1BlckxpbmUoKSA9PSBpbWFn
ZS53aWR0aCgpICogNCk7CisKKyAgICBSZWZQdHI8V2ViSW1hZ2U+IHdlYkltYWdlID0gV2ViSW1h
Z2U6OmNyZWF0ZShpbWFnZS5zaXplKCksIHN0YXRpY19jYXN0PEltYWdlT3B0aW9ucz4oMCkpOwor
ICAgIGlmICghd2ViSW1hZ2UtPmJpdG1hcCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBPd25Q
dHI8R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQgPSB3ZWJJbWFnZS0+Yml0bWFwKCkt
PmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOworICAgIFFQYWludGVyKiBwYWludGVyID0gZ3JhcGhp
Y3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBwYWludGVyLT5kcmF3SW1hZ2UoUVBv
aW50KDAsIDApLCBpbWFnZSk7CisgICAgcmV0dXJuIHRvQVBJKHdlYkltYWdlLnJlbGVhc2UoKS5s
ZWFrUmVmKCkpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL3F0
L1dLSW1hZ2VRdC5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL3F0L1dLSW1hZ2VRdC5o
CmluZGV4IDFlNTA3M2EwOGNiMzQwNTI5OGJjMzQ2MWI2NGFmYWU3ZWU5NTdiZDMuLmQxNGMzOTEy
NzU4OWYwZDE2YWM5OGQzYzZhODNlNWUwNzc0NGQ3ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9BUEkvYy9xdC9XS0ltYWdlUXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvQVBJL2MvcXQvV0tJbWFnZVF0LmgKQEAgLTI3LDUgKzI3LDYgQEAKICNpbmNsdWRlIDxXZWJL
aXQyL1dLSW1hZ2UuaD4KIAogV0tfRVhQT1JUIFFJbWFnZSBXS0ltYWdlQ3JlYXRlUUltYWdlKFdL
SW1hZ2VSZWYgaW1hZ2UpOworV0tfRVhQT1JUIFdLSW1hZ2VSZWYgV0tJbWFnZUNyZWF0ZUZyb21R
SW1hZ2UoUUltYWdlIGltYWdlKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VM
b2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYjMzYzE3NWE0ZWUwOTdiNjdjYjg2MDU1ZTVhMDZj
NWYyY2IwMmEyMC4uZWI5ZGZkMGIwZGY1YjBkY2ZiZjk0MzI4ZTFmMjk0Mzk1YWFhYzQ3NSAxMDA2
NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDYzIEBACisyMDEyLTA3LTEyICBCYWxhenMgS2VsZW1lbiAgPGtiYWxhenNAd2Via2l0Lm9yZz4K
KworICAgICAgICBbUXRdIEVuYWJsZSBHTC1iYXNlZCBwaXhlbCB0ZXN0cyBpbiBXVFIgdXNpbmcg
UVJhd1dlYlZpZXcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTkwMzk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQ28tYXV0aG9yZWQgd2l0aCBOb2FtIFJvc2VudGhhbC4KKworICAgICAgICBTd2l0Y2ggV2Vi
S2l0VGVzdFJ1bm5lciB0byBRUmF3V2ViVmlldyBpbiBmYXZvciBvZiBnZXR0aW5nCisgICAgICAg
IGFibGUgdG8gZ2VuZXJhdGUgd2luZG93IHNuYXBzaG90cyBmb3IgcGl4ZWwgdGVzdGluZy4gV2l0
aAorICAgICAgICBRUmF3V2ViVmlldyB3ZSBjYW4gZ3JhYiB0aGUgYWN0dWFsIEdMIHN1cmZhY2Ug
dGhhdCBpcyBuZWNlc3NhcnkKKyAgICAgICAgdG8gdGVzdCBhY2NlbGVyYXRlZCBjb21wb3NpdGlu
Zy4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3Lmg6CisgICAg
ICAgIChXVFIpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGFyZ2V0LnByaToKKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL3F0L1BsYXRmb3JtV2ViVmlld1F0LmNwcDoKKyAgICAgICAg
KFF0Vmlldyk6CisgICAgICAgIFF0VmlldyB3aWxsIGJlIG91ciBQbGF0Zm9ybVdpbmRvdyB0aGF0
LiBJdCBpcyBhIFFXaW5kb3cgd2l0aAorICAgICAgICBhbiBPcGVuR0wgc3VyZmFjZS4gUXRWaWV3
IGhvbGRzIGEgUVJhd1dlYlZpZXcgdGhhdCBwYWludHMgdG8KKyAgICAgICAgdGhlIHdpbmRvdyBz
dXJmYWNlLgorICAgICAgICAoV1RSOjpRdFZpZXc6OnZpZXcpOgorCisgICAgICAgIChXVFI6OlF0
Vmlldzo6dmlld1JlcXVlc3RlZFNjcm9sbCk6CisgICAgICAgIChXVFI6OlF0Vmlldzo6dmlld1By
b2Nlc3NDcmFzaGVkKToKKyAgICAgICAgKFdUUjo6UXRWaWV3Ojp2aWV3UHJvY2Vzc1JlbGF1bmNo
ZWQpOgorICAgICAgICAoV1RSOjpRdFZpZXc6OnZpZXdDb250ZW50U2l6ZUNoYW5nZWQpOgorICAg
ICAgICAoV1RSOjpRdFZpZXc6OmRvbmVXaXRoS2V5RXZlbnQpOgorICAgICAgICAoV1RSOjpRdFZp
ZXc6OmRvbmVXaXRoVG91Y2hFdmVudCk6CisgICAgICAgIEVtcHR5IG92ZXJyaWRlcy4gTW9zdCBw
cm9iYWJseSB3ZSBkb24ndCBuZWVkIHRoZXNlIGluIFdlYktpdFRlc3RSdW5uZXIuCisKKyAgICAg
ICAgKFdUUjo6UXRWaWV3Ojpmb3JjZVJlcGFpbnREb25lQ2FsbGJhY2spOgorICAgICAgICAoV1RS
OjpRdFZpZXc6OlF0Vmlldyk6CisgICAgICAgIChXVFIpOgorICAgICAgICAoV1RSOjpRdFZpZXc6
On5RdFZpZXcpOgorICAgICAgICAoV1RSOjpRdFZpZXc6OmNyZWF0ZVNuYXBzaG90KToKKyAgICAg
ICAgSW1wbGVtZW50aW5nIHNuYXBzaG90IGdlbmVyYXRpb24gaXMgYSBiaXQgdHJpY2t5LgorICAg
ICAgICBXZSBuZWVkIHRvIGZvcmNlIGEgc3luY3JvbmlzZWQgZ3JhcGhpY3MgbGF5ZXIgZmx1c2gK
KyAgICAgICAgb24gdGhlIHdlYiBwcm9jZXNzIHNpZGUgYW5kIHBhaW50IGFmdGVyIHRoYXQgZmlu
aXNoZWQuCisgICAgICAgIFdlIHVzZSBXS1BhZ2VGb3JjZVJlcGFpbnQgYW5kIHdhaXQgaW4gYW4g
aW5uZXIgZXZlbnQKKyAgICAgICAgbG9vcCB3aXRob3V0IGFjdHVhbGx5IHJldHVybmluZyB0byB0
aGUgY2FsbGVyIHVudGlsIHRoZQorICAgICAgICByZXBhaW50IGhhZCBkb25lLgorICAgICAgICAo
V1RSOjpRdFZpZXc6OnZpZXdOZWVkc0Rpc3BsYXkpOgorICAgICAgICBXZSBhbHNvIG5lZWQgdG8g
cGFpbnQgaGVyZSwgb3RoZXJ3aXNlIHRoZSBzbmFwc2hvdCBpcyBlbXB0eQorICAgICAgICBhbmQg
ZXZlbiBjcmFzaGVzIG9jY3VyLiBMZXQncyBsaXZlIHdpdGggdGhpcyBmb3Igbm93LCBmaXhtZQor
ICAgICAgICBjb21tZW50IGFkZGVkLgorICAgICAgICAoV1RSOjpRdFZpZXc6Om9uRm9yY2VSZXBh
aW50RG9uZSk6CisgICAgICAgIENhbGxlZCBmcm9tIHRoZSBjYWxsYmFjayBvZiBXS1BhZ2VGb3Jj
ZVJlcGFpbnQuIERvIGEgcGFpbnQKKyAgICAgICAgYW5kIHNodXRkb3duIHRoZSBldmVudCBsb29w
LgorICAgICAgICAoV1RSOjpRdFZpZXc6OnZpZXdSZXF1ZXN0ZWRDdXJzb3JPdmVycmlkZSk6Cisg
ICAgICAgIChXVFI6OlBsYXRmb3JtV2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KToKKyAgICAgICAg
KFdUUjo6UGxhdGZvcm1XZWJWaWV3OjpyZXNpemVUbyk6CisgICAgICAgIChXVFI6OlBsYXRmb3Jt
V2ViVmlldzo6Zm9jdXMpOgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6OnBhZ2UpOgor
ICAgICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6OnNldFdpbmRvd0ZyYW1lKToKKyAgICAgICAg
KFdUUjo6UGxhdGZvcm1XZWJWaWV3Ojp3aW5kb3dTbmFwc2hvdEltYWdlKToKKyAgICAgICAgKiBX
ZWJLaXRUZXN0UnVubmVyL3F0L1Rlc3RJbnZvY2F0aW9uUXQuY3BwOgorICAgICAgICAoV1RSOjpU
ZXN0SW52b2NhdGlvbjo6ZHVtcFBpeGVsc0FuZENvbXBhcmVXaXRoRXhwZWN0ZWQpOgorCiAyMDEy
LTA3LTExICBNYXJrIFJvd2UgIDxtcm93ZUBhcHBsZS5jb20+CiAKICAgICAgICAgPGh0dHA6Ly93
ZWJraXQub3JnL2IvOTEwMjQ+IEJ1aWxkIGFnYWluc3QgdGhlIGxhdGVzdCBTREsgd2hlbiB0YXJn
ZXRpbmcgb2xkZXIgT1MgWCB2ZXJzaW9ucy4KZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvUGxhdGZvcm1XZWJWaWV3LmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3Jt
V2ViVmlldy5oCmluZGV4IGE4Y2YwZDY2YzgzMDI4YjJkNzM3ZDFkYTgwOGFlZjBhYzhiODY4NDUu
Ljc0Y2UxMjNiYjhhMDk0Mzc3NTUyNGFlY2ExYjFjMDJkNzhkMzNkY2MgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgKKysrIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcuaApAQCAtMjksMTAgKzI5LDEyIEBACiAjaW5jbHVk
ZSA8V2ViS2l0Mi9XS1JldGFpblB0ci5oPgogCiAjaWYgZGVmaW5lZChCVUlMRElOR19RVF9fKQot
Y2xhc3MgUVF1aWNrV2ViVmlldzsKLXR5cGVkZWYgUVF1aWNrV2ViVmlldyogUGxhdGZvcm1XS1Zp
ZXc7Ci1jbGFzcyBRUXVpY2tWaWV3OwotdHlwZWRlZiBRUXVpY2tWaWV3KiBQbGF0Zm9ybVdpbmRv
dzsKK2NsYXNzIFFSYXdXZWJWaWV3OwordHlwZWRlZiBRUmF3V2ViVmlldyogUGxhdGZvcm1XS1Zp
ZXc7CituYW1lc3BhY2UgV1RSIHsKK2NsYXNzIFF0VmlldzsKK30KK3R5cGVkZWYgV1RSOjpRdFZp
ZXcqIFBsYXRmb3JtV2luZG93OwogY2xhc3MgUUV2ZW50TG9vcDsKICNlbGlmIGRlZmluZWQoX19B
UFBMRV9fKSAmJiBfX0FQUExFX18KICNpZiBfX09CSkNfXwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9UYXJnZXQucHJpIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UYXJnZXQu
cHJpCmluZGV4IGIzYjVjMmMzMzgwMjBmMDJiZDEwZjZjZmJiNDI1NGVjZDJmZjc2NmUuLjFiN2E3
ZjkwNjM1OTZhOTFjYzdkOTQyOTk4M2YwY2JjOWMzMDkzOTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvVGFyZ2V0LnByaQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rh
cmdldC5wcmkKQEAgLTI3LDYgKzI3LDkgQEAgREVTVERJUiA9ICQke1JPT1RfQlVJTERfRElSfS9i
aW4KIAogUVQgPSBjb3JlIGd1aSB3aWRnZXRzIG5ldHdvcmsgdGVzdGxpYiBxdWljayBxdWljay1w
cml2YXRlIHdlYmtpdAogCitJTkNMVURFUEFUSCArPSBcCisgICAgJCR7Uk9PVF9XRUJLSVRfRElS
fS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3JhdworCiBXRUJLSVQgKz0gd3RmIGph
dmFzY3JpcHRjb3JlIHdlYmtpdDIKIAogREVGSU5FUyArPSBVU0VfU1lTVEVNX01BTExPQz0xCmRp
ZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL3F0L1BsYXRmb3JtV2ViVmlld1F0LmNw
cCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvcXQvUGxhdGZvcm1XZWJWaWV3UXQuY3BwCmluZGV4
IGIyNmUyMDUxNTFiZDg3NjAwNDZmZmU5ZGQ2OGM2ZTg0YjczY2MyMjAuLmJhNTRiMGZiZGNiOTM5
ZTkwN2EzNjZmNWRlOTQ3MGU2NGFlMjEyYjcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvcXQvUGxhdGZvcm1XZWJWaWV3UXQuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvcXQvUGxhdGZvcm1XZWJWaWV3UXQuY3BwCkBAIC0zMiw1MSArMzIsMTMzIEBACiAKICNpbmNs
dWRlIDxRQ29yZUFwcGxpY2F0aW9uPgogI2luY2x1ZGUgPFFFdmVudExvb3A+Ci0jaW5jbHVkZSA8
UVFtbFByb3BlcnR5PgotI2luY2x1ZGUgPFF0UXVpY2svUVF1aWNrVmlldz4KLSNpbmNsdWRlIDxx
cGEvcXdpbmRvd3N5c3RlbWludGVyZmFjZS5oPgorI2luY2x1ZGUgPFFHdWlBcHBsaWNhdGlvbj4K
KyNpbmNsdWRlIDxRTWF0cml4NHg0PgorI2luY2x1ZGUgPFFPcGVuR0xDb250ZXh0PgorI2luY2x1
ZGUgPFFUaW1lcj4KKyNpbmNsdWRlIDxRV2luZG93PgorI2luY2x1ZGUgPFdlYktpdDIvV0tJbWFn
ZVF0Lmg+CisjaW5jbHVkZSA8cXJhd3dlYnZpZXdfcC5oPgogCiBuYW1lc3BhY2UgV1RSIHsKIAot
Y2xhc3MgV3JhcHBlcldpbmRvdyA6IHB1YmxpYyBRUXVpY2tWaWV3IHsKK2NsYXNzIFF0VmlldyA6
IHB1YmxpYyBRV2luZG93LCBwcml2YXRlIFFSYXdXZWJWaWV3Q2xpZW50IHsKICAgICBRX09CSkVD
VAogcHVibGljOgotICAgIFdyYXBwZXJXaW5kb3coUVF1aWNrV2ViVmlldyogdmlldykKLSAgICAg
ICAgOiBRUXVpY2tWaWV3KFFVcmwoImRhdGE6dGV4dC9wbGFpbixpbXBvcnQgUXRRdWljayAyLjBc
bkl0ZW0geyBvYmplY3ROYW1lOiAncm9vdCcgfSIpKQotICAgICAgICAsIG1fdmlldyh2aWV3KQot
ICAgIHsKLSAgICAgICAgY29ubmVjdCh0aGlzLCBTSUdOQUwoc3RhdHVzQ2hhbmdlZChRUXVpY2tW
aWV3OjpTdGF0dXMpKSwgU0xPVChoYW5kbGVTdGF0dXNDaGFuZ2VkKFFRdWlja1ZpZXc6OlN0YXR1
cykpKTsKLSAgICB9CisgICAgUXRWaWV3KFdLQ29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYpOwor
ICAgIH5RdFZpZXcoKTsKIAotcHJpdmF0ZSBzbG90czoKLSAgICB2b2lkIGhhbmRsZVN0YXR1c0No
YW5nZWQoUVF1aWNrVmlldzo6U3RhdHVzIHN0YXR1cykKLSAgICB7Ci0gICAgICAgIGlmIChzdGF0
dXMgIT0gUVF1aWNrVmlldzo6UmVhZHkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgUUltYWdl
IGNyZWF0ZVNuYXBzaG90KCk7CiAKLSAgICAgICAgc2V0R2VvbWV0cnkoMCwgMCwgODAwLCA2MDAp
OworICAgIFFSYXdXZWJWaWV3KiB2aWV3KCkgY29uc3QgeyByZXR1cm4gbV92aWV3OyB9CiAKLSAg
ICAgICAgc2V0UmVzaXplTW9kZShRUXVpY2tWaWV3OjpTaXplUm9vdE9iamVjdFRvVmlldyk7Ci0g
ICAgICAgIG1fdmlldy0+c2V0UGFyZW50SXRlbShyb290T2JqZWN0KCkpOwotICAgICAgICBRUW1s
UHJvcGVydHk6OndyaXRlKG1fdmlldywgImFuY2hvcnMuZmlsbCIsIHFWYXJpYW50RnJvbVZhbHVl
KHJvb3RPYmplY3QoKSkpOworICAgIC8vIFFSYXdXZWJWaWV3Q2xpZW50CisgICAgdmlydHVhbCB2
b2lkIHZpZXdOZWVkc0Rpc3BsYXkoY29uc3QgUVJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmll
d1JlcXVlc3RlZEN1cnNvck92ZXJyaWRlKGNvbnN0IFFDdXJzb3ImKTsKKyAgICB2aXJ0dWFsIHZv
aWQgdmlld1JlcXVlc3RlZFNjcm9sbChjb25zdCBRUG9pbnQmKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgdmlld1Byb2Nlc3NDcmFzaGVkKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHZpZXdQcm9jZXNz
UmVsYXVuY2hlZCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCB2aWV3Q29udGVudFNpemVDaGFuZ2Vk
KGNvbnN0IFFTaXplJikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRvbmVXaXRoS2V5RXZlbnQoY29u
c3QgUUtleUV2ZW50KiwgYm9vbCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRvbmVXaXRoVG91Y2hF
dmVudChjb25zdCBRVG91Y2hFdmVudCosIGJvb2wpIHsgfQogCi0gICAgICAgIFFXaW5kb3dTeXN0
ZW1JbnRlcmZhY2U6OmhhbmRsZVdpbmRvd0FjdGl2YXRlZCh0aGlzKTsKLSAgICAgICAgbV92aWV3
LT5wYWdlKCktPnNldEZvY3VzKHRydWUpOworICAgIHZvaWQgb25Gb3JjZVJlcGFpbnREb25lKCk7
CisgICAgc3RhdGljIHZvaWQgZm9yY2VSZXBhaW50RG9uZUNhbGxiYWNrKFdLRXJyb3JSZWYsIHZv
aWQqIGNvbnRleHQpCisgICAgeworICAgICAgICBzdGF0aWNfY2FzdDxRdFZpZXcqPihjb250ZXh0
KS0+b25Gb3JjZVJlcGFpbnREb25lKCk7CiAgICAgfQogCitzaWduYWxzOgorICAgIHZvaWQgZGlk
UGFpbnQoKTsKIHByaXZhdGU6Ci0gICAgUVF1aWNrV2ViVmlldyogbV92aWV3OworICAgIFFSYXdX
ZWJWaWV3KiBtX3ZpZXc7CisgICAgUU9wZW5HTENvbnRleHQqIG1fZ2xDb250ZXh0OworICAgIGJv
b2wgbV9pc1dhaXRpbmdGb3JTbmFwc2hvdDsKIH07CiAKLVBsYXRmb3JtV2ViVmlldzo6UGxhdGZv
cm1XZWJWaWV3KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3Jv
dXBSZWYpCi0gICAgOiBtX3ZpZXcobmV3IFFRdWlja1dlYlZpZXcoY29udGV4dFJlZiwgcGFnZUdy
b3VwUmVmKSkKLSAgICAsIG1fd2luZG93KG5ldyBXcmFwcGVyV2luZG93KG1fdmlldykpCi0gICAg
LCBtX3dpbmRvd0lzS2V5KHRydWUpCi0gICAgLCBtX21vZGFsRXZlbnRMb29wKDApCitRdFZpZXc6
OlF0VmlldyhXS0NvbnRleHRSZWYgY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwKQor
ICAgIDogbV9pc1dhaXRpbmdGb3JTbmFwc2hvdChmYWxzZSkKK3sKKyAgICBjb25zdCBRU2l6ZSBp
bml0aWFsU2l6ZSg4MDAsIDYwMCk7CisKKyAgICBzZXRTdXJmYWNlVHlwZShPcGVuR0xTdXJmYWNl
KTsKKyAgICBzZXRHZW9tZXRyeSgwLCAwLCBpbml0aWFsU2l6ZS53aWR0aCgpLCBpbml0aWFsU2l6
ZS5oZWlnaHQoKSk7CisgICAgc2V0V2luZG93RmxhZ3MoUXQ6OldpbmRvdyB8IFF0OjpXaW5kb3dU
aXRsZUhpbnQpOworICAgIGNyZWF0ZSgpOworCisgICAgbV9nbENvbnRleHQgPSBuZXcgUU9wZW5H
TENvbnRleHQoKTsKKyAgICBtX2dsQ29udGV4dC0+Y3JlYXRlKCk7CisgICAgbV9nbENvbnRleHQt
Pm1ha2VDdXJyZW50KHRoaXMpOworICAgIGdsVmlld3BvcnQoMCwgMCwgc2l6ZSgpLndpZHRoKCks
IHNpemUoKS5oZWlnaHQoKSk7CisgICAgZ2xDbGVhckNvbG9yKDAsIDAsIDAsIDApOworICAgIGds
Q2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVCk7CisKKyAgICBtX3ZpZXcgPSBuZXcgUVJhd1dlYlZp
ZXcoY29udGV4dCwgcGFnZUdyb3VwLCB0aGlzKTsKKyAgICBtX3ZpZXctPnNldFNpemUoaW5pdGlh
bFNpemUpOworICAgIG1fdmlldy0+Y3JlYXRlKCk7Cit9CisKK1F0Vmlldzo6flF0VmlldygpCit7
CisgICAgZGVsZXRlIG1fdmlldzsKKyAgICBkZWxldGUgbV9nbENvbnRleHQ7Cit9CisKK1FJbWFn
ZSBRdFZpZXc6OmNyZWF0ZVNuYXBzaG90KCkKK3sKKyAgICBtX2lzV2FpdGluZ0ZvclNuYXBzaG90
ID0gdHJ1ZTsKKyAgICBXS1BhZ2VGb3JjZVJlcGFpbnQobV92aWV3LT5wYWdlUmVmKCksIHRoaXMs
IGZvcmNlUmVwYWludERvbmVDYWxsYmFjayk7CisKKyAgICBRRXZlbnRMb29wIGxvb3A7CisgICAg
UVRpbWVyIHdhdGNoRG9nVGltZXI7CisgICAgUU9iamVjdDo6Y29ubmVjdCh0aGlzLCBTSUdOQUwo
ZGlkUGFpbnQoKSksICZsb29wLCBTTE9UKHF1aXQoKSkpOworICAgIFFPYmplY3Q6OmNvbm5lY3Qo
JndhdGNoRG9nVGltZXIsIFNJR05BTCh0aW1lb3V0KCkpLCAmbG9vcCwgU0xPVChxdWl0KCkpKTsK
KyAgICB3YXRjaERvZ1RpbWVyLnNpbmdsZVNob3QoMjAwMCwgJmxvb3AsIFNMT1QocXVpdCgpKSk7
CisgICAgbG9vcC5leGVjKCk7CisKKyAgICBpZiAobV9pc1dhaXRpbmdGb3JTbmFwc2hvdCkgewor
ICAgICAgICBtX2lzV2FpdGluZ0ZvclNuYXBzaG90ID0gZmFsc2U7CisgICAgICAgIGZwcmludGYo
c3RkZXJyLCAiZGlkIG5vdCBwYWludFxuIik7CisgICAgICAgIHJldHVybiBRSW1hZ2UoKTsKKyAg
ICAgfQorCisgICAgUV9BU1NFUlQoUU9wZW5HTENvbnRleHQ6OmN1cnJlbnRDb250ZXh0KCkgPT0g
bV9nbENvbnRleHQpOworICAgIFFJbWFnZSBpbWFnZShzaXplKCksIFFJbWFnZTo6Rm9ybWF0X0FS
R0IzMl9QcmVtdWx0aXBsaWVkKTsKKyAgICBnbFJlYWRQaXhlbHMoMCwgMCwgc2l6ZSgpLndpZHRo
KCksIHNpemUoKS5oZWlnaHQoKSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgaW1hZ2UuYml0
cygpKTsKKworICAgIC8vIEZJWE1FOiBzaG91bGQgdXNlIGEgdHJhbnNmb3JtYXRpb24gbWF0cml4
IGZvdCBtaXJyb3JpbmcuCisgICAgcmV0dXJuIGltYWdlLm1pcnJvcmVkKCkucmdiU3dhcHBlZCgp
OworfQorCit2b2lkIFF0Vmlldzo6dmlld05lZWRzRGlzcGxheShjb25zdCBRUmVjdCYpCit7Cisg
ICAgLy8gRklYTUU6IGl0IHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5IHRvIHBhaW50IGJlZm9yZSBv
bkZvcmNlUmVwYWludERvbmUgYXQgYWxsLgorICAgIC8vIEhvd2V2ZXIsIGZvciBzb21lIHlldCB1
bmtub3duIHJlYXNvbiB3ZSBuZWVkIHRoaXMgb3RoZXJ3aXNlIG91ciBzbmFwc2hvdCB3b3VsZAor
ICAgIC8vIGJlIGVtcHR5LgorICAgIG1fZ2xDb250ZXh0LT5tYWtlQ3VycmVudCh0aGlzKTsKKyAg
ICBtX3ZpZXctPnBhaW50KFFNYXRyaXg0eDQoKSwgMSwgMCk7Cit9CisKK3ZvaWQgUXRWaWV3Ojpv
bkZvcmNlUmVwYWludERvbmUoKQogewotICAgIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWwgZXhw
ZXJpbWVudGFsKG1fdmlldyk7Ci0gICAgZXhwZXJpbWVudGFsLnNldFJlbmRlclRvT2Zmc2NyZWVu
QnVmZmVyKHRydWUpOwotICAgIG1fdmlldy0+c2V0QWxsb3dBbnlIVFRQU0NlcnRpZmljYXRlRm9y
TG9jYWxIb3N0KHRydWUpOworICAgIG1faXNXYWl0aW5nRm9yU25hcHNob3QgPSBmYWxzZTsKKyAg
ICBtX2dsQ29udGV4dC0+bWFrZUN1cnJlbnQodGhpcyk7CisgICAgbV92aWV3LT5wYWludChRTWF0
cml4NHg0KCksIDEsIDApOworICAgIGVtaXQgZGlkUGFpbnQoKTsKK30KKwordm9pZCBRdFZpZXc6
OnZpZXdSZXF1ZXN0ZWRDdXJzb3JPdmVycmlkZShjb25zdCBRQ3Vyc29yJiBjdXJzb3IpCit7Cisg
ICAgUUd1aUFwcGxpY2F0aW9uOjpzZXRPdmVycmlkZUN1cnNvcihjdXJzb3IpOworfQorCitQbGF0
Zm9ybVdlYlZpZXc6OlBsYXRmb3JtV2ViVmlldyhXS0NvbnRleHRSZWYgY29udGV4dCwgV0tQYWdl
R3JvdXBSZWYgcGFnZUdyb3VwKQorICAgIDogbV9tb2RhbEV2ZW50TG9vcCgwKQoreworICAgIG1f
d2luZG93ID0gbmV3IFF0Vmlldyhjb250ZXh0LCBwYWdlR3JvdXApOworICAgIG1fdmlldyA9IG1f
d2luZG93LT52aWV3KCk7CisKKyAgICBmb2N1cygpOwogfQogCiBQbGF0Zm9ybVdlYlZpZXc6On5Q
bGF0Zm9ybVdlYlZpZXcoKQpAQCAtODgsMjUgKzE3MCwxOSBAQCBQbGF0Zm9ybVdlYlZpZXc6On5Q
bGF0Zm9ybVdlYlZpZXcoKQogCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6cmVzaXplVG8odW5zaWdu
ZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKIHsKLSAgICAvLyBJZiB3ZSBkbyBub3QgaGF2ZSBh
IHBsYXRmb3JtIHdpbmRvdyB3ZSB3aWxsIG5ldmVyIGdldCB0aGUgbmVjZXNzYXJ5Ci0gICAgLy8g
cmVzaXplIGV2ZW50LCBzbyBzaW11bGF0ZSBpdCBpbiB0aGF0IGNhc2UgdG8gbWFrZSBzdXJlIHRo
ZSBxdWlja3ZpZXcgaXMKLSAgICAvLyByZXNpemVkIHRvIHdoYXQgdGhlIGxheW91dCB0ZXN0IGV4
cGVjdHMuCi0gICAgaWYgKCFtX3dpbmRvdy0+aGFuZGxlKCkpIHsKLSAgICAgICAgUVJlY3QgbmV3
R2VvbWV0cnkobV93aW5kb3ctPngoKSwgbV93aW5kb3ctPnkoKSwgd2lkdGgsIGhlaWdodCk7Ci0g
ICAgICAgIFFXaW5kb3dTeXN0ZW1JbnRlcmZhY2U6OmhhbmRsZVN5bmNocm9ub3VzR2VvbWV0cnlD
aGFuZ2UobV93aW5kb3csIG5ld0dlb21ldHJ5KTsKLSAgICB9Ci0KLSAgICBtX3dpbmRvdy0+cmVz
aXplKHdpZHRoLCBoZWlnaHQpOworICAgIG1fdmlldy0+c2V0U2l6ZShRU2l6ZSh3aWR0aCwgaGVp
Z2h0KSk7CiB9CiAKLVdLUGFnZVJlZiBQbGF0Zm9ybVdlYlZpZXc6OnBhZ2UoKQordm9pZCBQbGF0
Zm9ybVdlYlZpZXc6OmZvY3VzKCkKIHsKLSAgICByZXR1cm4gbV92aWV3LT5wYWdlUmVmKCk7Cisg
ICAgbV92aWV3LT5zZXRGb2N1c2VkKHRydWUpOworICAgIG1fdmlldy0+c2V0VmlzaWJsZSh0cnVl
KTsKKyAgICBtX3ZpZXctPnNldEFjdGl2ZSh0cnVlKTsKIH0KIAotdm9pZCBQbGF0Zm9ybVdlYlZp
ZXc6OmZvY3VzKCkKK1dLUGFnZVJlZiBQbGF0Zm9ybVdlYlZpZXc6OnBhZ2UoKQogewotICAgIG1f
dmlldy0+c2V0Rm9jdXMoUXQ6Ok90aGVyRm9jdXNSZWFzb24pOworICAgIHJldHVybiBtX3ZpZXct
PnBhZ2VSZWYoKTsKIH0KIAogV0tSZWN0IFBsYXRmb3JtV2ViVmlldzo6d2luZG93RnJhbWUoKQpA
QCAtMTIzLDYgKzE5OSw3IEBAIFdLUmVjdCBQbGF0Zm9ybVdlYlZpZXc6OndpbmRvd0ZyYW1lKCkK
IHZvaWQgUGxhdGZvcm1XZWJWaWV3OjpzZXRXaW5kb3dGcmFtZShXS1JlY3Qgd2tSZWN0KQogewog
ICAgIG1fd2luZG93LT5zZXRHZW9tZXRyeSh3a1JlY3Qub3JpZ2luLngsIHdrUmVjdC5vcmlnaW4u
eSwgd2tSZWN0LnNpemUud2lkdGgsIHdrUmVjdC5zaXplLmhlaWdodCk7CisgICAgcmVzaXplVG8o
d2tSZWN0LnNpemUud2lkdGgsIHdrUmVjdC5zaXplLmhlaWdodCk7CiB9CiAKIGJvb2wgUGxhdGZv
cm1XZWJWaWV3OjpzZW5kRXZlbnQoUUV2ZW50KiBldmVudCkKQEAgLTE0OSw5ICsyMjYsNyBAQCB2
b2lkIFBsYXRmb3JtV2ViVmlldzo6bWFrZVdlYlZpZXdGaXJzdFJlc3BvbmRlcigpCiAKIFdLUmV0
YWluUHRyPFdLSW1hZ2VSZWY+IFBsYXRmb3JtV2ViVmlldzo6d2luZG93U25hcHNob3RJbWFnZSgp
CiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudCB0byBjYXB0dXJlIHBpeGVscyBpbiB0aGUgVUkg
cHJvY2VzcywKLSAgICAvLyB3aGljaCBtYXkgYmUgbmVjZXNzYXJ5IHRvIGNhcHR1cmUgdGhpbmdz
IGxpa2UgM0QgdHJhbnNmb3Jtcy4KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gV0tJbWFnZUNy
ZWF0ZUZyb21RSW1hZ2UobV93aW5kb3ctPmNyZWF0ZVNuYXBzaG90KCkpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvcXQvVGVzdElu
dm9jYXRpb25RdC5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL3F0L1Rlc3RJbnZvY2F0aW9u
UXQuY3BwCmluZGV4IDAxNjMwZDk4YTZmM2I1MTViOTllMDM4ODFmYjU2YjYyY2U2NmU2OWEuLjQy
NWFiMTZiOTc2ZDJmMGEwMjRiNTEzZmU3N2EwODE3NjU4ZDJhZGMgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvcXQvVGVzdEludm9jYXRpb25RdC5jcHAKKysrIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9xdC9UZXN0SW52b2NhdGlvblF0LmNwcApAQCAtMjUsNiArMjUsOCBAQAog
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKKyNpbmNsdWRlICJQbGF0Zm9ybVdlYlZpZXcuaCIKKyNp
bmNsdWRlICJUZXN0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlRlc3RJbnZvY2F0aW9uLmgiCiAK
ICNpbmNsdWRlIDxRQnVmZmVyPgpAQCAtNjcsNyArNjksMTQgQEAgdm9pZCBUZXN0SW52b2NhdGlv
bjo6ZHVtcFBpeGVsc0FuZENvbXBhcmVXaXRoRXhwZWN0ZWQoV0tJbWFnZVJlZiBpbWFnZVJlZiwg
V0tBcnIKICAgICAvL0ZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Njg4NzAKICAgICBVTlVTRURfUEFSQU0ocmVwYWludFJlY3RzKTsKIAotICAgIFFJbWFnZSBp
bWFnZSA9IFdLSW1hZ2VDcmVhdGVRSW1hZ2UoaW1hZ2VSZWYpOworICAgIFBsYXRmb3JtV2ViVmll
dyogd2ViVmlldyA9IFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5tYWluV2ViVmlldygpOworICAg
IFdLUmV0YWluUHRyPFdLSW1hZ2VSZWY+IHdpbmRvd1NuYXBzaG90ID0gd2ViVmlldy0+d2luZG93
U25hcHNob3RJbWFnZSgpOworICAgIFFJbWFnZSBpbWFnZTsKKyAgICBpZiAod2luZG93U25hcHNo
b3QpCisgICAgICAgIGltYWdlID0gV0tJbWFnZUNyZWF0ZVFJbWFnZSh3aW5kb3dTbmFwc2hvdC5n
ZXQoKSk7CisgICAgZWxzZQorICAgICAgICBpbWFnZSA9IFdLSW1hZ2VDcmVhdGVRSW1hZ2UoaW1h
Z2VSZWYpOworCiAgICAgUUNyeXB0b2dyYXBoaWNIYXNoIGhhc2goUUNyeXB0b2dyYXBoaWNIYXNo
OjpNZDUpOwogICAgIGZvciAodW5zaWduZWQgcm93ID0gMDsgcm93IDwgaW1hZ2UuaGVpZ2h0KCk7
ICsrcm93KQogICAgICAgICBoYXNoLmFkZERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFy
Kj4oaW1hZ2UuY29uc3RTY2FuTGluZShyb3cpKSwgaW1hZ2UuYnl0ZXNQZXJMaW5lKCkpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>